@energycap/components 0.44.8 → 0.44.9-Angular19Upgrade.20260217-1620

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 (145) hide show
  1. package/fesm2022/energycap-components.mjs +379 -354
  2. package/fesm2022/energycap-components.mjs.map +1 -1
  3. package/lib/controls/button/copy-button-base.directive.d.ts +1 -1
  4. package/lib/controls/date-input/date-input.component.d.ts +1 -1
  5. package/lib/controls/form-control-base.d.ts +1 -1
  6. package/lib/core/date-time-helper.d.ts +2 -2
  7. package/lib/display/hierarchy/hierarchy-base.d.ts +1 -1
  8. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +1 -1
  9. package/lib/display/resizable/resizable-base.d.ts +1 -1
  10. package/lib/shared/display/pipes/date-display.pipe.d.ts +1 -1
  11. package/lib/shared/page/page-base/page-base.component.d.ts +1 -1
  12. package/lib/shared/testing/public-mocks.spec.d.ts +1 -1
  13. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +1 -1
  14. package/package.json +1 -3
  15. package/schematics/utilities/typescript.js +3 -4
  16. package/schematics/utilities/typescript.js.map +1 -1
  17. package/schematics/utilities/workspace.d.ts +0 -8
  18. package/schematics/utilities/workspace.js +48 -71
  19. package/schematics/utilities/workspace.js.map +1 -1
  20. package/esm2022/energycap-components.mjs +0 -5
  21. package/esm2022/lib/components.module.mjs +0 -425
  22. package/esm2022/lib/controls/banner/banner.component.mjs +0 -112
  23. package/esm2022/lib/controls/button/button.component.mjs +0 -114
  24. package/esm2022/lib/controls/button/copy-button-base.directive.mjs +0 -67
  25. package/esm2022/lib/controls/button/copy-button.directive.mjs +0 -28
  26. package/esm2022/lib/controls/button/copy-table-button.directive.mjs +0 -43
  27. package/esm2022/lib/controls/calendar/calendar-item.component.mjs +0 -91
  28. package/esm2022/lib/controls/calendar/calendar.component.mjs +0 -251
  29. package/esm2022/lib/controls/calendar/calendar.types.mjs +0 -2
  30. package/esm2022/lib/controls/checkbox/checkbox.component.mjs +0 -140
  31. package/esm2022/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +0 -38
  32. package/esm2022/lib/controls/combobox/combobox.component.mjs +0 -879
  33. package/esm2022/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +0 -57
  34. package/esm2022/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +0 -62
  35. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +0 -100
  36. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +0 -101
  37. package/esm2022/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +0 -76
  38. package/esm2022/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +0 -79
  39. package/esm2022/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +0 -210
  40. package/esm2022/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +0 -81
  41. package/esm2022/lib/controls/date-input/date-input.component.mjs +0 -466
  42. package/esm2022/lib/controls/date-input/date-input.types.mjs +0 -44
  43. package/esm2022/lib/controls/dropdown/dropdown.component.mjs +0 -243
  44. package/esm2022/lib/controls/file-upload/file-upload.component.mjs +0 -261
  45. package/esm2022/lib/controls/form-control/form-control.component.mjs +0 -110
  46. package/esm2022/lib/controls/form-control-base.mjs +0 -151
  47. package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +0 -136
  48. package/esm2022/lib/controls/form-group/form-group.component.mjs +0 -261
  49. package/esm2022/lib/controls/help-popover/help-popover.component.mjs +0 -31
  50. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +0 -329
  51. package/esm2022/lib/controls/link-button/link-button.component.mjs +0 -11
  52. package/esm2022/lib/controls/menu/menu.component.mjs +0 -485
  53. package/esm2022/lib/controls/navigation/link-item.mjs +0 -2
  54. package/esm2022/lib/controls/navigation/nav-group.mjs +0 -39
  55. package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +0 -92
  56. package/esm2022/lib/controls/navigation/nav-item.mjs +0 -2
  57. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +0 -372
  58. package/esm2022/lib/controls/popover/popover.component.mjs +0 -117
  59. package/esm2022/lib/controls/radio-button/radio-button-option.mjs +0 -3
  60. package/esm2022/lib/controls/radio-button/radio-button.component.mjs +0 -82
  61. package/esm2022/lib/controls/select/select.component.mjs +0 -88
  62. package/esm2022/lib/controls/tabs/tabs.component.mjs +0 -47
  63. package/esm2022/lib/controls/textbox/textbox.component.mjs +0 -155
  64. package/esm2022/lib/core/cache.service.mjs +0 -105
  65. package/esm2022/lib/core/custom-validators.mjs +0 -29
  66. package/esm2022/lib/core/date-time-helper.mjs +0 -228
  67. package/esm2022/lib/core/error.service.mjs +0 -61
  68. package/esm2022/lib/core/router-helper.service.mjs +0 -111
  69. package/esm2022/lib/core/scroll.service.mjs +0 -89
  70. package/esm2022/lib/core/telemetry-tracker.service.mjs +0 -16
  71. package/esm2022/lib/core/telemetry.service.mjs +0 -38
  72. package/esm2022/lib/core/validation-message.service.mjs +0 -185
  73. package/esm2022/lib/core/validation-patterns.mjs +0 -31
  74. package/esm2022/lib/core/window.service.mjs +0 -186
  75. package/esm2022/lib/display/app-bar/app-bar.component.mjs +0 -49
  76. package/esm2022/lib/display/avatar/avatar.component.mjs +0 -67
  77. package/esm2022/lib/display/avatar/avatar.service.mjs +0 -64
  78. package/esm2022/lib/display/confirm/confirm.component.mjs +0 -168
  79. package/esm2022/lib/display/dialog/dialog-content.mjs +0 -2
  80. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +0 -63
  81. package/esm2022/lib/display/dialog/dialog-types.mjs +0 -77
  82. package/esm2022/lib/display/dialog/dialog.component.mjs +0 -287
  83. package/esm2022/lib/display/dialog/dialog.service.mjs +0 -71
  84. package/esm2022/lib/display/help/help-types.mjs +0 -2
  85. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +0 -111
  86. package/esm2022/lib/display/hierarchy/hierarchy-mocks.spec.mjs +0 -54
  87. package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +0 -65
  88. package/esm2022/lib/display/item-display/item-display.component.mjs +0 -83
  89. package/esm2022/lib/display/json-display/json-display.component.mjs +0 -47
  90. package/esm2022/lib/display/resizable/resizable-base.mjs +0 -120
  91. package/esm2022/lib/display/resizable/resizable.component.mjs +0 -57
  92. package/esm2022/lib/display/spinner/spinner.component.mjs +0 -12
  93. package/esm2022/lib/display/splash/splash.component.mjs +0 -61
  94. package/esm2022/lib/display/splash/splash.service.mjs +0 -35
  95. package/esm2022/lib/display/table/resizable-column.component.mjs +0 -20
  96. package/esm2022/lib/display/table/resizable-table.directive.mjs +0 -227
  97. package/esm2022/lib/display/table/searchable-table.component.mjs +0 -344
  98. package/esm2022/lib/display/table/table-detail-row.component.mjs +0 -28
  99. package/esm2022/lib/display/table/table-locked-column.component.mjs +0 -58
  100. package/esm2022/lib/display/table/table-master-header-row.component.mjs +0 -14
  101. package/esm2022/lib/display/table/table-master-row.component.mjs +0 -163
  102. package/esm2022/lib/display/table/table-pagination.component.mjs +0 -155
  103. package/esm2022/lib/display/table/table-selectable-row.component.mjs +0 -235
  104. package/esm2022/lib/display/table/table.component.mjs +0 -257
  105. package/esm2022/lib/display/tags/tag.mjs +0 -18
  106. package/esm2022/lib/display/tags/tags.component.mjs +0 -82
  107. package/esm2022/lib/display/toast/toast/toast.component.mjs +0 -77
  108. package/esm2022/lib/display/toast/toast-types.mjs +0 -8
  109. package/esm2022/lib/display/toast/toast.service.mjs +0 -35
  110. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +0 -114
  111. package/esm2022/lib/display/tooltip/tooltip.component.mjs +0 -28
  112. package/esm2022/lib/display/tooltip/tooltip.service.mjs +0 -78
  113. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +0 -173
  114. package/esm2022/lib/display/tree/tree.component.mjs +0 -139
  115. package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +0 -58
  116. package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +0 -32
  117. package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +0 -111
  118. package/esm2022/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +0 -103
  119. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +0 -166
  120. package/esm2022/lib/shared/display/pipes/date-display-2.pipe.mjs +0 -39
  121. package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +0 -51
  122. package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +0 -30
  123. package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +0 -62
  124. package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +0 -48
  125. package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +0 -41
  126. package/esm2022/lib/shared/display.mjs +0 -6
  127. package/esm2022/lib/shared/form-group.helper.mjs +0 -67
  128. package/esm2022/lib/shared/json-helper.mjs +0 -19
  129. package/esm2022/lib/shared/lodash-helper.mjs +0 -52
  130. package/esm2022/lib/shared/page/page-base/page-base.component.mjs +0 -387
  131. package/esm2022/lib/shared/page/page-statuses.mjs +0 -23
  132. package/esm2022/lib/shared/page/page-title/page-title.component.mjs +0 -23
  133. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +0 -147
  134. package/esm2022/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +0 -17
  135. package/esm2022/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +0 -17
  136. package/esm2022/lib/shared/testing/page-base-component-test-helper.spec.mjs +0 -38
  137. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
  138. package/esm2022/lib/shared/testing/public-mocks.spec.mjs +0 -148
  139. package/esm2022/lib/shared/testing/spy-factory.spec.mjs +0 -40
  140. package/esm2022/lib/shared/testing/translation-mocks.spec.mjs +0 -57
  141. package/esm2022/lib/shared/user-preference.service.mjs +0 -17
  142. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +0 -246
  143. package/esm2022/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +0 -68
  144. package/esm2022/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +0 -18
  145. package/esm2022/public-api.mjs +0 -115
@@ -1,372 +0,0 @@
1
- import { Component, ElementRef, Input, ViewChild } from '@angular/core';
2
- import { UntypedFormControl, Validators } from "@angular/forms";
3
- import { debounceTime, distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';
4
- import { getDecimalPattern, integerPattern } from '../../core/validation-patterns';
5
- import { FormControlBase } from "../form-control-base";
6
- import { TextboxComponent } from '../textbox/textbox.component';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../../core/validation-message.service";
9
- import * as i2 from "../../shared/form-group.helper";
10
- import * as i3 from "@angular/common";
11
- import * as i4 from "../textbox/textbox.component";
12
- import * as i5 from "../help-popover/help-popover.component";
13
- import * as i6 from "@ngx-translate/core";
14
- /**
15
- * Custom validator to check that min/max and pattern validation is met on the numericbox
16
- * component
17
- */
18
- export const numericboxValidation = (min, max, decimals, maxPrecisionDigits) => {
19
- return (control) => {
20
- let hasError = false;
21
- // If the control is empty we won't attempt to validate, if there is a required
22
- // validator we will never get here until there is a value
23
- if (control.value && control.value !== "") {
24
- let numericPattern;
25
- if (decimals && decimals > 0) {
26
- numericPattern = getDecimalPattern(decimals);
27
- }
28
- else if (maxPrecisionDigits) {
29
- // Still need to check for a valid number formatting when in max precision mode
30
- numericPattern = getDecimalPattern(maxPrecisionDigits);
31
- }
32
- else {
33
- // Allow an optional negative sign and any number of digits 0-9
34
- numericPattern = integerPattern;
35
- }
36
- if (!numericPattern.test(control.value)) {
37
- hasError = true;
38
- }
39
- else if (maxPrecisionDigits) {
40
- // Converting to a number then back to string removes trailing zeros, and the regex replace removes
41
- // any negative signs, leading zeros or decimal points from the number.
42
- const val = Number(control.value).toString().replace(/^-?/, '').replace(/(^0\.)|(\.)/, '');
43
- hasError = val.length > maxPrecisionDigits;
44
- }
45
- // We now know we have a valid number, so we can cast these to numbers
46
- // for proper range validation
47
- if (min !== undefined && Number(control.value) < min) {
48
- hasError = true;
49
- }
50
- if (max !== undefined && Number(control.value) > max) {
51
- hasError = true;
52
- }
53
- }
54
- if (hasError) {
55
- return {
56
- numericbox: {
57
- valid: false,
58
- min: min,
59
- max: max,
60
- decimals: decimals,
61
- maxPrecisionDigits: maxPrecisionDigits
62
- }
63
- };
64
- }
65
- else {
66
- return null;
67
- }
68
- };
69
- };
70
- export class NumericboxComponent extends FormControlBase {
71
- constructor(validationMessageService, formGroupHelper, renderer) {
72
- super(validationMessageService, formGroupHelper);
73
- this.validationMessageService = validationMessageService;
74
- this.formGroupHelper = formGroupHelper;
75
- this.renderer = renderer;
76
- /**
77
- * Show trailing zeros after the decimal point.
78
- * Do not use with maxPrecisionDigits.
79
- */
80
- this.showPrecision = false;
81
- /**
82
- * If set to true this will update the form model after a debounce as the user
83
- * interacts with the component
84
- */
85
- this.autoUpdateFormModel = false;
86
- /** Flag to tell the page we finally computed a greater than zero
87
- * width for units (if applicable)
88
- */
89
- this.unitsWidthCalculated = false;
90
- /** Flag used to filter the form models value changes subscription
91
- * to prevent the textbox model from being formatted as the form model is updated
92
- * programmatically when the textbox model updates
93
- */
94
- this.autoUpdatingFormModel = false;
95
- }
96
- /**
97
- * Angular AfterViewInit life-cycle hook
98
- * Subscribe to textbox model value changes if the hosting
99
- * page has opted in for this component
100
- */
101
- ngAfterViewInit() {
102
- if (this.autoUpdateFormModel) {
103
- this.textboxFormModel.valueChanges
104
- .pipe(debounceTime(300), distinctUntilChanged(), takeUntil(this.componentDestroyed)).subscribe(() => {
105
- this.updateFormModelValue();
106
- });
107
- }
108
- }
109
- /**
110
- * Angular onChanges life-cycle hook
111
- * @see {@link https://angular.io/guide/lifecycle-hooks | Life-cycle hooks}
112
- */
113
- ngOnChanges(changes) {
114
- // If either units change after we've calculated,
115
- // reset the flag so we can react and redraw
116
- if (changes.rightUnits || changes.leftUnits) {
117
- this.unitsWidthCalculated = false;
118
- }
119
- super.ngOnChanges(changes);
120
- }
121
- /**
122
- * Angular onInit lifecycle hook
123
- * If units is defined, set the position and listen for status changes so we
124
- * can update the positioning of the units element
125
- */
126
- ngOnInit() {
127
- super.ngOnInit();
128
- // Initialize the textbox form model with the value of the form model and synchronize
129
- // disabled state
130
- this.textboxFormModel = new UntypedFormControl({ value: this.formModel.value, disabled: this.formModel.disabled });
131
- // Update the form model's errors when the textbox form model status changes
132
- this.textboxFormModel.statusChanges.pipe(takeUntil(this.componentDestroyed)).subscribe(() => {
133
- if (this.formModel.enabled) {
134
- this.formModel.setErrors(this.textboxFormModel.errors);
135
- }
136
- });
137
- // Synchronize disabled state between form model and internal textbox form model
138
- this.formModel.statusChanges.pipe(takeUntil(this.componentDestroyed)).subscribe(() => {
139
- if (this.formModel.disabled) {
140
- this.textboxFormModel.disable();
141
- }
142
- else {
143
- if (this.textboxFormModel.disabled) {
144
- this.textboxFormModel.enable();
145
- }
146
- }
147
- });
148
- // Set textbox validators
149
- this.textboxFormModel.setValidators(this.getValidators());
150
- // Now that the textbox is set up we will set it's value to whatever the
151
- // form model had when we initialized
152
- this.textboxFormModel.setValue(this.formatDisplayNumber(this.formModel.value));
153
- // If the form model's value changes programmatically we need to update the
154
- // textbox form model
155
- this.formModel.valueChanges.pipe(
156
- // We need to filter out when we are updating it programmatically if the
157
- // hosting page has opted into the auto updating input
158
- filter(() => !this.autoUpdatingFormModel), takeUntil(this.componentDestroyed)).subscribe(value => {
159
- this.textboxFormModel.setValue(this.formatDisplayNumber(value));
160
- });
161
- // If the textbox status changes we need to update the left units position because
162
- // we want to make room for the invalid icon
163
- if (this.leftUnits) {
164
- this.textboxFormModel.statusChanges.pipe(takeUntil(this.componentDestroyed)).subscribe(() => {
165
- this.positionLeftUnits();
166
- });
167
- }
168
- }
169
- /**
170
- * Angular afterViewChecked lifecycle hook
171
- * Show the units element if units is defined. Runs after every ngOnChanges
172
- */
173
- ngAfterViewChecked() {
174
- if ((this.leftUnits || this.rightUnits) && !this.unitsWidthCalculated) {
175
- this.showUnits();
176
- }
177
- }
178
- /**
179
- * Function that builds and returns a ValidatorFn array to set on the form control
180
- */
181
- getValidators() {
182
- let validators = [];
183
- if (this.required) {
184
- validators.push(Validators.required);
185
- }
186
- validators.push(numericboxValidation(this.min, this.max, this.decimals, this.maxPrecisionDigits));
187
- return validators;
188
- }
189
- /**
190
- * Focus out event handler for the Textbox component
191
- */
192
- onFocusOut() {
193
- this.updateFormModelValue(true);
194
- }
195
- /**
196
- * Function to set focus on an input programatically after the page
197
- * had been rendered. The highlight text flag will select the text
198
- * within the input if passed in and true
199
- */
200
- setFocus(highlightText) {
201
- this.textboxInput.setFocus(highlightText);
202
- }
203
- /**
204
- * When the textbox model updates we need to add some display formatting for
205
- * display in the textbox and cast the textbox model to a number. Avoid updating
206
- * the form model when the value doesn't change because listeners will fire for no reason
207
- */
208
- updateFormModelValue(isFocusOut) {
209
- if (this.autoUpdateFormModel) {
210
- // Make it so value changes on the form model do not get triggered
211
- // as we change it programmatically. We do not want the textbox
212
- // model to be updated while the user is in the input
213
- this.autoUpdatingFormModel = true;
214
- }
215
- try {
216
- if (this.textboxFormModel.valid || this.textboxFormModel.value === "") {
217
- // Start out with null for the number, if the textbox value is not a number
218
- // we will clear it out on focus out
219
- let number = null;
220
- // Make sure the textbox model is a number before trying to update the
221
- // form model value with it
222
- if (this.textboxFormModel.value && !isNaN(this.textboxFormModel.value)) {
223
- // Our value is a legit number, on focus out we will format it if needed
224
- number = Number(this.textboxFormModel.value);
225
- // Checking if the value has actually changed, if not don't set the
226
- // value to avoid extra listener calls
227
- if (this.formModel.value !== number) {
228
- this.formModel.setValue(number);
229
- }
230
- // The textbox model is not a number, check to see if our form model has a value
231
- // and if so clear it out
232
- }
233
- else if (this.formModel.value !== null) {
234
- this.formModel.setValue(null);
235
- }
236
- // We only will update the textbox form model with formatting if needed
237
- // on Focus out. This works well for the user whether the auto update
238
- // is opted in or not
239
- if (isFocusOut) {
240
- this.textboxFormModel.setValue(this.formatDisplayNumber(number));
241
- }
242
- }
243
- this.formModel.markAsTouched();
244
- }
245
- catch (error) {
246
- // Nothing to display, just ensuring we reset our flag that filters
247
- // the form model value changes
248
- }
249
- finally {
250
- this.autoUpdatingFormModel = false;
251
- }
252
- }
253
- /**
254
- * Convert a number value to the formmated display string. If there is no value
255
- * return null
256
- */
257
- formatDisplayNumber(value) {
258
- if (value || value === 0) {
259
- // Guard against calling toFixed if the value isn't a number. This is possible
260
- // if patching a value from outside of the component as you don't have
261
- // type checking there
262
- if (this.showPrecision && this.decimals && !isNaN(value)) {
263
- return value.toFixed(this.decimals);
264
- }
265
- else {
266
- return value.toString();
267
- }
268
- }
269
- else {
270
- return null;
271
- }
272
- }
273
- /**
274
- * Position the units element and set the padding in the textbox input based
275
- * on the width of the units element
276
- */
277
- positionRightUnits() {
278
- let unitsEl = this.textboxEl.nativeElement.querySelector('.units-right');
279
- let inputEl = this.textboxEl.nativeElement.querySelector('input');
280
- if (unitsEl && inputEl) {
281
- let unitsWidth = unitsEl.offsetWidth;
282
- if (unitsWidth > 0) {
283
- this.unitsWidthCalculated = true;
284
- }
285
- let padding = unitsWidth;
286
- this.renderer.setStyle(inputEl, 'padding-right', padding + 'px');
287
- }
288
- }
289
- positionLeftUnits() {
290
- let unitsEl = this.textboxEl.nativeElement.querySelector('.units-left');
291
- let inputEl = this.textboxEl.nativeElement.querySelector('input');
292
- if (unitsEl && inputEl) {
293
- let unitsWidth = unitsEl.offsetWidth;
294
- if (unitsWidth > 0) {
295
- this.unitsWidthCalculated = true;
296
- }
297
- let padding = unitsWidth;
298
- let leftPosition = getComputedStyle(unitsEl).left;
299
- if (leftPosition) {
300
- padding += parseInt(leftPosition.replace('px', ''), 0);
301
- }
302
- this.renderer.setStyle(inputEl, 'padding-left', padding + 'px');
303
- }
304
- }
305
- /**
306
- * Create and append the units element to the textbox element
307
- */
308
- showUnits() {
309
- let inputWrapper = this.textboxEl.nativeElement.querySelector('.input-wrapper');
310
- if (inputWrapper) {
311
- if (this.leftUnits) {
312
- let unitsEl = this.textboxEl.nativeElement.querySelector('.units-left');
313
- if (unitsEl) {
314
- this.renderer.setProperty(unitsEl, 'innerHTML', this.leftUnits);
315
- }
316
- else {
317
- this.renderer.appendChild(inputWrapper, this.makeUnitElement('left', this.leftUnits));
318
- }
319
- this.positionLeftUnits();
320
- }
321
- if (this.rightUnits) {
322
- let unitsEl = this.textboxEl.nativeElement.querySelector('.units-right');
323
- if (unitsEl) {
324
- this.renderer.setProperty(unitsEl, 'innerHTML', this.rightUnits);
325
- }
326
- else {
327
- this.renderer.appendChild(inputWrapper, this.makeUnitElement('right', this.rightUnits));
328
- }
329
- this.positionRightUnits();
330
- }
331
- }
332
- }
333
- makeUnitElement(side, text) {
334
- let unitsEl = this.renderer.createElement('span');
335
- this.renderer.setAttribute(unitsEl, 'class', `units units-${side}`);
336
- this.renderer.setAttribute(unitsEl, 'id', `${this.id}_units`);
337
- this.renderer.setAttribute(unitsEl, 'style', 'pointer-events: none');
338
- this.renderer.setProperty(unitsEl, 'innerHTML', text);
339
- return unitsEl;
340
- }
341
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NumericboxComponent, deps: [{ token: i1.ValidationMessageService }, { token: i2.FormGroupHelper }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
342
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NumericboxComponent, selector: "ec-numericbox", inputs: { placeholder: "placeholder", decimals: "decimals", showPrecision: "showPrecision", maxPrecisionDigits: "maxPrecisionDigits", max: "max", min: "min", leftUnits: "leftUnits", rightUnits: "rightUnits", autoUpdateFormModel: "autoUpdateFormModel" }, viewQueries: [{ propertyName: "textboxEl", first: true, predicate: TextboxComponent, descendants: true, read: ElementRef, static: true }, { propertyName: "textboxInput", first: true, predicate: ["textbox"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"control control-label-{{labelPosition}}\"\n [class.invalid]=\"formModel?.invalid && (formModel?.touched)\">\n\n <label *ngIf=\"label\">\n <span>{{label | translate}}</span>\n <span *ngIf=\"validationErrors.length && formModel?.touched && formModel?.invalid\">&nbsp;{{validationErrors | translate}}</span>\n <ec-help-popover id=\"{{id}}_helpPopover\"\n *ngIf=\"helpPopover\"\n class=\"d-inline-block my-n3 mx-n1\"\n text=\"{{helpPopover | translate}}\"\n contentPosition=\"{{helpPopoverPosition}}\">\n </ec-help-popover>\n </label>\n\n <!-- Setting the maxlength to 13 to combat the user from entering too large of a number\n for javascript to support. If the user enters all 13 characters as numbers and we have showPrecision set, adding the\n decimal and the empty zero characters will get them in a situation where to edit it they must remove characters\n as we would push them past the limit -->\n <ec-textbox [id]=\"id\"\n #textbox\n class=\"control-input mb-0\"\n [placeholder]=\"placeholder\"\n [maxlength]=\"maxPrecisionDigits ? maxPrecisionDigits + 3 : 13\"\n [autofocus]=\"autofocus\"\n [formModel]=\"textboxFormModel\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [readonly]=\"readonly\"\n [tooltip]=\"tooltip\"\n (focusout)=\"onFocusOut()\">\n </ec-textbox>\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:hover:not(:disabled):not(:focus),:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:hover:not(:disabled):not(:focus){border-color:var(--ec-form-control-border-color-hover)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:hover:not(:disabled):not(:focus){border-color:var(--ec-form-control-border-color-hover)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}ec-textbox ::ng-deep .input-wrapper{position:relative}ec-textbox ::ng-deep input{text-align:right}ec-textbox ::ng-deep input:required.is-empty:not(:disabled)~.units-left{left:1.25rem}ec-textbox ::ng-deep input.ng-invalid.ng-touched~.units-left{left:1.25rem}ec-textbox ::ng-deep .control:not(.is-readonly) input:disabled~.units{color:var(--ec-form-control-color-disabled);opacity:.65}ec-textbox ::ng-deep .units{display:block;position:absolute;top:0;height:2rem;line-height:1.25rem;padding:.375rem .25rem;z-index:2}ec-textbox ::ng-deep .units.units-right{right:0;padding-right:.5rem}ec-textbox ::ng-deep .units.units-left{left:0;padding-left:.5rem}.control.invalid ec-textbox ::ng-deep input.ng-invalid,.control.invalid ec-textbox ::ng-deep input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}.control.invalid ec-textbox ::ng-deep input.ng-invalid:focus,.control.invalid ec-textbox ::ng-deep input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}.control.invalid ec-textbox ::ng-deep input.ng-invalid:hover:not(:disabled):not(:focus),.control.invalid ec-textbox ::ng-deep input.ng-valid:hover:not(:disabled):not(:focus){border-color:var(--ec-form-control-border-color-hover)}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.units-left,.control.invalid ec-textbox ::ng-deep input.ng-valid~.units-left{left:1.25rem}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.icon-invalid,.control.invalid ec-textbox ::ng-deep input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.icon-required,.control.invalid ec-textbox ::ng-deep input.ng-valid~.icon-required{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.TextboxComponent, selector: "ec-textbox", inputs: ["autocomplete", "type", "placeholder", "maxlength", "minlength", "rows", "selectOnAutofocus", "upperCase"] }, { kind: "component", type: i5.HelpPopoverComponent, selector: "ec-help-popover", inputs: ["id", "text", "contentPosition", "maxWidth"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] }); }
343
- }
344
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NumericboxComponent, decorators: [{
345
- type: Component,
346
- args: [{ selector: 'ec-numericbox', template: "<div class=\"control control-label-{{labelPosition}}\"\n [class.invalid]=\"formModel?.invalid && (formModel?.touched)\">\n\n <label *ngIf=\"label\">\n <span>{{label | translate}}</span>\n <span *ngIf=\"validationErrors.length && formModel?.touched && formModel?.invalid\">&nbsp;{{validationErrors | translate}}</span>\n <ec-help-popover id=\"{{id}}_helpPopover\"\n *ngIf=\"helpPopover\"\n class=\"d-inline-block my-n3 mx-n1\"\n text=\"{{helpPopover | translate}}\"\n contentPosition=\"{{helpPopoverPosition}}\">\n </ec-help-popover>\n </label>\n\n <!-- Setting the maxlength to 13 to combat the user from entering too large of a number\n for javascript to support. If the user enters all 13 characters as numbers and we have showPrecision set, adding the\n decimal and the empty zero characters will get them in a situation where to edit it they must remove characters\n as we would push them past the limit -->\n <ec-textbox [id]=\"id\"\n #textbox\n class=\"control-input mb-0\"\n [placeholder]=\"placeholder\"\n [maxlength]=\"maxPrecisionDigits ? maxPrecisionDigits + 3 : 13\"\n [autofocus]=\"autofocus\"\n [formModel]=\"textboxFormModel\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [readonly]=\"readonly\"\n [tooltip]=\"tooltip\"\n (focusout)=\"onFocusOut()\">\n </ec-textbox>\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:hover:not(:disabled):not(:focus),:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:hover:not(:disabled):not(:focus){border-color:var(--ec-form-control-border-color-hover)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:hover:not(:disabled):not(:focus){border-color:var(--ec-form-control-border-color-hover)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}ec-textbox ::ng-deep .input-wrapper{position:relative}ec-textbox ::ng-deep input{text-align:right}ec-textbox ::ng-deep input:required.is-empty:not(:disabled)~.units-left{left:1.25rem}ec-textbox ::ng-deep input.ng-invalid.ng-touched~.units-left{left:1.25rem}ec-textbox ::ng-deep .control:not(.is-readonly) input:disabled~.units{color:var(--ec-form-control-color-disabled);opacity:.65}ec-textbox ::ng-deep .units{display:block;position:absolute;top:0;height:2rem;line-height:1.25rem;padding:.375rem .25rem;z-index:2}ec-textbox ::ng-deep .units.units-right{right:0;padding-right:.5rem}ec-textbox ::ng-deep .units.units-left{left:0;padding-left:.5rem}.control.invalid ec-textbox ::ng-deep input.ng-invalid,.control.invalid ec-textbox ::ng-deep input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}.control.invalid ec-textbox ::ng-deep input.ng-invalid:focus,.control.invalid ec-textbox ::ng-deep input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}.control.invalid ec-textbox ::ng-deep input.ng-invalid:hover:not(:disabled):not(:focus),.control.invalid ec-textbox ::ng-deep input.ng-valid:hover:not(:disabled):not(:focus){border-color:var(--ec-form-control-border-color-hover)}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.units-left,.control.invalid ec-textbox ::ng-deep input.ng-valid~.units-left{left:1.25rem}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.icon-invalid,.control.invalid ec-textbox ::ng-deep input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.icon-required,.control.invalid ec-textbox ::ng-deep input.ng-valid~.icon-required{display:none}\n"] }]
347
- }], ctorParameters: () => [{ type: i1.ValidationMessageService }, { type: i2.FormGroupHelper }, { type: i0.Renderer2 }], propDecorators: { placeholder: [{
348
- type: Input
349
- }], decimals: [{
350
- type: Input
351
- }], showPrecision: [{
352
- type: Input
353
- }], maxPrecisionDigits: [{
354
- type: Input
355
- }], max: [{
356
- type: Input
357
- }], min: [{
358
- type: Input
359
- }], leftUnits: [{
360
- type: Input
361
- }], rightUnits: [{
362
- type: Input
363
- }], autoUpdateFormModel: [{
364
- type: Input
365
- }], textboxEl: [{
366
- type: ViewChild,
367
- args: [TextboxComponent, { read: ElementRef, static: true }]
368
- }], textboxInput: [{
369
- type: ViewChild,
370
- args: ['textbox', { static: true }]
371
- }] } });
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpY2JveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvbnVtZXJpY2JveC9udW1lcmljYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9udW1lcmljYm94L251bWVyaWNib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBMEQsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pLLE9BQU8sRUFBbUIsa0JBQWtCLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7QUFHaEU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxHQUF1QixFQUFFLEdBQXVCLEVBQUUsUUFBNEIsRUFBRSxrQkFBc0MsRUFBZSxFQUFFO0lBQ3hLLE9BQU8sQ0FBQyxPQUF3QixFQUFFLEVBQUU7UUFDaEMsSUFBSSxRQUFRLEdBQVksS0FBSyxDQUFDO1FBRTlCLCtFQUErRTtRQUMvRSwwREFBMEQ7UUFDMUQsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7WUFFeEMsSUFB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QUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV0RCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDOytHQWpZUSxtQkFBbUI7bUdBQW5CLG1CQUFtQiw4VkF1RWpCLGdCQUFnQiwyQkFBVSxVQUFVLCtMQ25KbkQsaXNEQStCTTs7NEZENkNPLG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDSSxlQUFlO21KQVdULFdBQVc7c0JBQTFCLEtBQUs7Z0JBTVUsUUFBUTtzQkFBdkIsS0FBSztnQkFPVSxhQUFhO3NCQUE1QixLQUFLO2dCQVNVLGtCQUFrQjtzQkFBakMsS0FBSztnQkFVVSxHQUFHO3NCQUFsQixLQUFLO2dCQVVVLEdBQUc7c0JBQWxCLEtBQUs7Z0JBTVUsU0FBUztzQkFBeEIsS0FBSztnQkFNVSxVQUFVO3NCQUF6QixLQUFLO2dCQU1VLG1CQUFtQjtzQkFBbEMsS0FBSztnQkFLbUUsU0FBUztzQkFBakYsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFzQmYsWUFBWTtzQkFBM0QsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3ZhbGlkYXRpb24tbWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IGdldERlY2ltYWxQYXR0ZXJuLCBpbnRlZ2VyUGF0dGVybiB9IGZyb20gJy4uLy4uL2NvcmUvdmFsaWRhdGlvbi1wYXR0ZXJucyc7XG5pbXBvcnQgeyBGb3JtR3JvdXBIZWxwZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS1ncm91cC5oZWxwZXInO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xCYXNlIH0gZnJvbSBcIi4uL2Zvcm0tY29udHJvbC1iYXNlXCI7XG5pbXBvcnQgeyBUZXh0Ym94Q29tcG9uZW50IH0gZnJvbSAnLi4vdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudCc7XG5cblxuLyoqXG4gKiBDdXN0b20gdmFsaWRhdG9yIHRvIGNoZWNrIHRoYXQgbWluL21heCBhbmQgcGF0dGVybiB2YWxpZGF0aW9uIGlzIG1ldCBvbiB0aGUgbnVtZXJpY2JveFxuICogY29tcG9uZW50XG4gKi9cbmV4cG9ydCBjb25zdCBudW1lcmljYm94VmFsaWRhdGlvbiA9IChtaW46IG51bWJlciB8IHVuZGVmaW5lZCwgbWF4OiBudW1iZXIgfCB1bmRlZmluZWQsIGRlY2ltYWxzOiBudW1iZXIgfCB1bmRlZmluZWQsIG1heFByZWNpc2lvbkRpZ2l0czogbnVtYmVyIHwgdW5kZWZpbmVkKTogVmFsaWRhdG9yRm4gPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgIGxldCBoYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgICAgIC8vIElmIHRoZSBjb250cm9sIGlzIGVtcHR5IHdlIHdvbid0IGF0dGVtcHQgdG8gdmFsaWRhdGUsIGlmIHRoZXJlIGlzIGEgcmVxdWlyZWRcbiAgICAgICAgLy8gdmFsaWRhdG9yIHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUgdW50aWwgdGhlcmUgaXMgYSB2YWx1ZVxuICAgICAgICBpZiAoY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlICE9PSBcIlwiKSB7XG5cbiAgICAgICAgICAgIGxldCBudW1lcmljUGF0dGVybjogUmVnRXhwO1xuICAgICAgICAgICAgaWYgKGRlY2ltYWxzICYmIGRlY2ltYWxzID4gMCkge1xuICAgICAgICAgICAgICAgIG51bWVyaWNQYXR0ZXJuID0gZ2V0RGVjaW1hbFBhdHRlcm4oZGVjaW1hbHMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXhQcmVjaXNpb25EaWdpdHMpIHtcbiAgICAgICAgICAgICAgICAvLyBTdGlsbCBuZWVkIHRvIGNoZWNrIGZvciBhIHZhbGlkIG51bWJlciBmb3JtYXR0aW5nIHdoZW4gaW4gbWF4IHByZWNpc2lvbiBtb2RlXG4gICAgICAgICAgICAgICAgbnVtZXJpY1BhdHRlcm4gPSBnZXREZWNpbWFsUGF0dGVybihtYXhQcmVjaXNpb25EaWdpdHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBBbGxvdyBhbiBvcHRpb25hbCBuZWdhdGl2ZSBzaWduIGFuZCBhbnkgbnVtYmVyIG9mIGRpZ2l0cyAwLTlcbiAgICAgICAgICAgICAgICBudW1lcmljUGF0dGVybiA9IGludGVnZXJQYXR0ZXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIW51bWVyaWNQYXR0ZXJuLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1heFByZWNpc2lvbkRpZ2l0cykge1xuICAgICAgICAgICAgICAgIC8vIENvbnZlcnRpbmcgdG8gYSBudW1iZXIgdGhlbiBiYWNrIHRvIHN0cmluZyByZW1vdmVzIHRyYWlsaW5nIHplcm9zLCBhbmQgdGhlIHJlZ2V4IHJlcGxhY2UgcmVtb3Zlc1xuICAgICAgICAgICAgICAgIC8vIGFueSBuZWdhdGl2ZSBzaWducywgbGVhZGluZyB6ZXJvcyBvciBkZWNpbWFsIHBvaW50cyBmcm9tIHRoZSBudW1iZXIuXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gTnVtYmVyKGNvbnRyb2wudmFsdWUpLnRvU3RyaW5nKCkucmVwbGFjZSgvXi0/LywgJycpLnJlcGxhY2UoLyheMFxcLil8KFxcLikvLCAnJyk7XG4gICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB2YWwubGVuZ3RoID4gbWF4UHJlY2lzaW9uRGlnaXRzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBXZSBub3cga25vdyB3ZSBoYXZlIGEgdmFsaWQgbnVtYmVyLCBzbyB3ZSBjYW4gY2FzdCB0aGVzZSB0byBudW1iZXJzXG4gICAgICAgICAgICAvLyBmb3IgcHJvcGVyIHJhbmdlIHZhbGlkYXRpb25cbiAgICAgICAgICAgIGlmIChtaW4gIT09IHVuZGVmaW5lZCAmJiBOdW1iZXIoY29udHJvbC52YWx1ZSkgPCBtaW4pIHtcbiAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtYXggIT09IHVuZGVmaW5lZCAmJiBOdW1iZXIoY29udHJvbC52YWx1ZSkgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbnVtZXJpY2JveDoge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1pbjogbWluLFxuICAgICAgICAgICAgICAgICAgICBtYXg6IG1heCxcbiAgICAgICAgICAgICAgICAgICAgZGVjaW1hbHM6IGRlY2ltYWxzLFxuICAgICAgICAgICAgICAgICAgICBtYXhQcmVjaXNpb25EaWdpdHM6IG1heFByZWNpc2lvbkRpZ2l0c1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgfVxufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlYy1udW1lcmljYm94JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbnVtZXJpY2JveC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbnVtZXJpY2JveC5jb21wb25lbnQuc2NzcyddXG59KVxuXG5leHBvcnQgY2xhc3MgTnVtZXJpY2JveENvbXBvbmVudCBleHRlbmRzIEZvcm1Db250cm9sQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIEFmdGVyVmlld0NoZWNrZWQsIEFmdGVyVmlld0luaXQge1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHRleHRib3ggaW5wdXQncyBwbGFjZWhvbGRlclxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgZGVjaW1hbHMgYWxsb3dlZC4gIElmIG5vdCBzdXBwbGllZCB0aGUgaW5wdXQgdmFsdWUgd2lsbCBiZSB2YWxpZGF0ZWQgYXMgYVxuICAgICAqIHdob2xlIG51bWJlclxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkZWNpbWFscz86IG51bWJlcjtcblxuXG4gICAgLyoqXG4gICAgICogU2hvdyB0cmFpbGluZyB6ZXJvcyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC5cbiAgICAgKiBEbyBub3QgdXNlIHdpdGggbWF4UHJlY2lzaW9uRGlnaXRzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93UHJlY2lzaW9uPzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWF4aW11bSB0b3RhbCBkaWdpdHMgYSBudW1iZXIgY2FuIGhhdmUgbGVmdCBvciByaWdodCBvZiB0aGUgZGVjaW1hbCBwb2ludC5cbiAgICAgKiBEdWUgdG8gbGltaXRhdGlvbnMgd2l0aCBob3cgSlMgaGFuZGxlcyBudW1iZXJzLCB0aGUgbWF4IHZhbHVlIGZvciB0aGlzIGlzIDE1LlxuICAgICAqIE51bWJlcnMgbG9uZ2VyIHRoYW4gMTUgZGlnaXRzIG1heSBjYXVzZSByb3VuZGluZyBlcnJvcnMuXG4gICAgICogRG8gbm90IHVzZSB3aXRoIHNob3dQcmVjaXNpb24gPSB0cnVlXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG1heFByZWNpc2lvbkRpZ2l0cz86IG51bWJlcjtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gdmFsdWUgYWxsb3dlZCBpbiB0aGUgaW5wdXRcbiAgICAgKlxuICAgICAqIFRoaXMgaXMgZm9yIGFkZGluZyB0aGUgYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50IHRvIGdldCB0aGUgYnJvd3NlciBmdW5jdGlvbmFsaXR5XG4gICAgICogZnJvbSB0aGUgaW5wdXQuICBJZiB5b3UgbmVlZCB0aGUgZm9ybSB0byBiZSB2YWxpZGF0ZWQgYmVmb3JlIHN1Ym1pc3Npb24sIGFwcGx5IHRoZVxuICAgICAqIG1heCB2YWxpZGF0b3IgdG8gdGhlIGZvcm0gY29ucm9sLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtYXg/OiBudW1iZXI7XG5cblxuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIHZhbHVlIGFsbG93ZWQgaW4gdGhlIGlucHV0XG4gICAgICpcbiAgICAgKiBUaGlzIGlzIGZvciBhZGRpbmcgdGhlIGF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudCB0byBnZXQgdGhlIGJyb3dzZXIgZnVuY3Rpb25hbGl0eVxuICAgICAqIGZyb20gdGhlIGlucHV0LiAgSWYgeW91IG5lZWQgdGhlIGZvcm0gdG8gYmUgdmFsaWRhdGVkIGJlZm9yZSBzdWJtaXNzaW9uLCBhcHBseSB0aGVcbiAgICAgKiBtaW4gdmFsaWRhdG9yIHRvIHRoZSBmb3JtIGNvbnJvbC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbWluPzogbnVtYmVyO1xuXG5cbiAgICAvKipcbiAgICAgKiBUZXh0IHRvIGRpc3BsYXkgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgaW5wdXRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbGVmdFVuaXRzPzogc3RyaW5nO1xuXG5cbiAgICAvKipcbiAgICAgKiBUZXh0IHRvIGRpc3BsYXkgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGlucHV0XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHJpZ2h0VW5pdHM/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSB0aGlzIHdpbGwgdXBkYXRlIHRoZSBmb3JtIG1vZGVsIGFmdGVyIGEgZGVib3VuY2UgYXMgdGhlIHVzZXJcbiAgICAgKiBpbnRlcmFjdHMgd2l0aCB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGF1dG9VcGRhdGVGb3JtTW9kZWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0Ym94IGVsZW1lbnRcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKFRleHRib3hDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgdGV4dGJveEVsITogRWxlbWVudFJlZjtcblxuXG4gICAgLyoqXG4gICAgICogVGhlIGludGVybmFsIGZvcm0gbW9kZWwgd2UgdXNlIHRvIGRpc3BsYXkgdGhlIHZhbHVlIHdpdGggZm9ybWF0dGluZ1xuICAgICAqL1xuICAgIHB1YmxpYyB0ZXh0Ym94Rm9ybU1vZGVsITogVW50eXBlZEZvcm1Db250cm9sO1xuXG4gICAgLyoqIEZsYWcgdG8gdGVsbCB0aGUgcGFnZSB3ZSBmaW5hbGx5IGNvbXB1dGVkIGEgZ3JlYXRlciB0aGFuIHplcm9cbiAgICAgKiAgd2lkdGggZm9yIHVuaXRzIChpZiBhcHBsaWNhYmxlKVxuICAgICAqL1xuICAgIHByaXZhdGUgdW5pdHNXaWR0aENhbGN1bGF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBGbGFnIHVzZWQgdG8gZmlsdGVyIHRoZSBmb3JtIG1vZGVscyB2YWx1ZSBjaGFuZ2VzIHN1YnNjcmlwdGlvblxuICAgICAqICB0byBwcmV2ZW50IHRoZSB0ZXh0Ym94IG1vZGVsIGZyb20gYmVpbmcgZm9ybWF0dGVkIGFzIHRoZSBmb3JtIG1vZGVsIGlzIHVwZGF0ZWRcbiAgICAgKiAgcHJvZ3JhbW1hdGljYWxseSB3aGVuIHRoZSB0ZXh0Ym94IG1vZGVsIHVwZGF0ZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIGF1dG9VcGRhdGluZ0Zvcm1Nb2RlbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgdGV4dGJveCBpbnB1dCBjb250cm9sXG4gICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RleHRib3gnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIHRleHRib3hJbnB1dCE6IFRleHRib3hDb21wb25lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHZhbGlkYXRpb25NZXNzYWdlU2VydmljZTogVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgZm9ybUdyb3VwSGVscGVyOiBGb3JtR3JvdXBIZWxwZXIsXG4gICAgICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKHZhbGlkYXRpb25NZXNzYWdlU2VydmljZSwgZm9ybUdyb3VwSGVscGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbmd1bGFyIEFmdGVyVmlld0luaXQgbGlmZS1jeWNsZSBob29rXG4gICAgICogU3Vic2NyaWJlIHRvIHRleHRib3ggbW9kZWwgdmFsdWUgY2hhbmdlcyBpZiB0aGUgaG9zdGluZ1xuICAgICAqIHBhZ2UgaGFzIG9wdGVkIGluIGZvciB0aGlzIGNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmF1dG9VcGRhdGVGb3JtTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dGJveEZvcm1Nb2RlbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCksXG4gICAgICAgICAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1Nb2RlbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbmd1bGFyIG9uQ2hhbmdlcyBsaWZlLWN5Y2xlIGhvb2tcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvbGlmZWN5Y2xlLWhvb2tzIHwgTGlmZS1jeWNsZSBob29rc31cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICAvLyBJZiBlaXRoZXIgdW5pdHMgY2hhbmdlIGFmdGVyIHdlJ3ZlIGNhbGN1bGF0ZWQsXG4gICAgICAgIC8vIHJlc2V0IHRoZSBmbGFnIHNvIHdlIGNhbiByZWFjdCBhbmQgcmVkcmF3XG4gICAgICAgIGlmIChjaGFuZ2VzLnJpZ2h0VW5pdHMgfHwgY2hhbmdlcy5sZWZ0VW5pdHMpIHtcbiAgICAgICAgICAgIHRoaXMudW5pdHNXaWR0aENhbGN1bGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogQW5ndWxhciBvbkluaXQgbGlmZWN5Y2xlIGhvb2tcbiAgICAgKiBJZiB1bml0cyBpcyBkZWZpbmVkLCBzZXQgdGhlIHBvc2l0aW9uIGFuZCBsaXN0ZW4gZm9yIHN0YXR1cyBjaGFuZ2VzIHNvIHdlXG4gICAgICogY2FuIHVwZGF0ZSB0aGUgcG9zaXRpb25pbmcgb2YgdGhlIHVuaXRzIGVsZW1lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGV4dGJveCBmb3JtIG1vZGVsIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBmb3JtIG1vZGVsIGFuZCBzeW5jaHJvbml6ZVxuICAgICAgICAvLyBkaXNhYmxlZCBzdGF0ZVxuICAgICAgICB0aGlzLnRleHRib3hGb3JtTW9kZWwgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IHRoaXMuZm9ybU1vZGVsLnZhbHVlLCBkaXNhYmxlZDogdGhpcy5mb3JtTW9kZWwuZGlzYWJsZWQgfSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBmb3JtIG1vZGVsJ3MgZXJyb3JzIHdoZW4gdGhlIHRleHRib3ggZm9ybSBtb2RlbCBzdGF0dXMgY2hhbmdlc1xuICAgICAgICB0aGlzLnRleHRib3hGb3JtTW9kZWwuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtTW9kZWwuZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybU1vZGVsLnNldEVycm9ycyh0aGlzLnRleHRib3hGb3JtTW9kZWwuZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTeW5jaHJvbml6ZSBkaXNhYmxlZCBzdGF0ZSBiZXR3ZWVuIGZvcm0gbW9kZWwgYW5kIGludGVybmFsIHRleHRib3ggZm9ybSBtb2RlbFxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Nb2RlbC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dGJveEZvcm1Nb2RlbC5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRleHRib3hGb3JtTW9kZWwuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0Ym94Rm9ybU1vZGVsLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2V0IHRleHRib3ggdmFsaWRhdG9yc1xuICAgICAgICB0aGlzLnRleHRib3hGb3JtTW9kZWwuc2V0VmFsaWRhdG9ycyh0aGlzLmdldFZhbGlkYXRvcnMoKSk7XG5cbiAgICAgICAgLy8gTm93IHRoYXQgdGhlIHRleHRib3ggaXMgc2V0IHVwIHdlIHdpbGwgc2V0IGl0J3MgdmFsdWUgdG8gd2hhdGV2ZXIgdGhlXG4gICAgICAgIC8vIGZvcm0gbW9kZWwgaGFkIHdoZW4gd2UgaW5pdGlhbGl6ZWRcbiAgICAgICAgdGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnNldFZhbHVlKHRoaXMuZm9ybWF0RGlzcGxheU51bWJlcih0aGlzLmZvcm1Nb2RlbC52YWx1ZSkpO1xuXG4gICAgICAgIC8vIElmIHRoZSBmb3JtIG1vZGVsJ3MgdmFsdWUgY2hhbmdlcyBwcm9ncmFtbWF0aWNhbGx5IHdlIG5lZWQgdG8gdXBkYXRlIHRoZVxuICAgICAgICAvLyB0ZXh0Ym94IGZvcm0gbW9kZWxcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbHRlciBvdXQgd2hlbiB3ZSBhcmUgdXBkYXRpbmcgaXQgcHJvZ3JhbW1hdGljYWxseSBpZiB0aGVcbiAgICAgICAgICAgIC8vIGhvc3RpbmcgcGFnZSBoYXMgb3B0ZWQgaW50byB0aGUgYXV0byB1cGRhdGluZyBpbnB1dFxuICAgICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLmF1dG9VcGRhdGluZ0Zvcm1Nb2RlbCksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dGJveEZvcm1Nb2RlbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdERpc3BsYXlOdW1iZXIodmFsdWUpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0Ym94IHN0YXR1cyBjaGFuZ2VzIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBsZWZ0IHVuaXRzIHBvc2l0aW9uIGJlY2F1c2VcbiAgICAgICAgLy8gd2Ugd2FudCB0byBtYWtlIHJvb20gZm9yIHRoZSBpbnZhbGlkIGljb25cbiAgICAgICAgaWYgKHRoaXMubGVmdFVuaXRzKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRib3hGb3JtTW9kZWwuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkxlZnRVbml0cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEFuZ3VsYXIgYWZ0ZXJWaWV3Q2hlY2tlZCBsaWZlY3ljbGUgaG9va1xuICAgICAqIFNob3cgdGhlIHVuaXRzIGVsZW1lbnQgaWYgdW5pdHMgaXMgZGVmaW5lZC4gUnVucyBhZnRlciBldmVyeSBuZ09uQ2hhbmdlc1xuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICgodGhpcy5sZWZ0VW5pdHMgfHwgdGhpcy5yaWdodFVuaXRzKSAmJiAhdGhpcy51bml0c1dpZHRoQ2FsY3VsYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5zaG93VW5pdHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRoYXQgYnVpbGRzIGFuZCByZXR1cm5zIGEgVmFsaWRhdG9yRm4gYXJyYXkgdG8gc2V0IG9uIHRoZSBmb3JtIGNvbnRyb2xcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFZhbGlkYXRvcnMoKTogVmFsaWRhdG9yRm5bXSB7XG4gICAgICAgIGxldCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChudW1lcmljYm94VmFsaWRhdGlvbih0aGlzLm1pbiwgdGhpcy5tYXgsIHRoaXMuZGVjaW1hbHMsIHRoaXMubWF4UHJlY2lzaW9uRGlnaXRzKSk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRvcnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9jdXMgb3V0IGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBUZXh0Ym94IGNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZvY3VzT3V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1Nb2RlbFZhbHVlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogRnVuY3Rpb24gdG8gc2V0IGZvY3VzIG9uIGFuIGlucHV0IHByb2dyYW1hdGljYWxseSBhZnRlciB0aGUgcGFnZVxuICAgICogaGFkIGJlZW4gcmVuZGVyZWQuICBUaGUgaGlnaGxpZ2h0IHRleHQgZmxhZyB3aWxsIHNlbGVjdCB0aGUgdGV4dFxuICAgICogd2l0aGluIHRoZSBpbnB1dCBpZiBwYXNzZWQgaW4gYW5kIHRydWVcbiAgICAqL1xuICAgIHB1YmxpYyBzZXRGb2N1cyhoaWdobGlnaHRUZXh0PzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnRleHRib3hJbnB1dC5zZXRGb2N1cyhoaWdobGlnaHRUZXh0KTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIHRleHRib3ggbW9kZWwgdXBkYXRlcyB3ZSBuZWVkIHRvIGFkZCBzb21lIGRpc3BsYXkgZm9ybWF0dGluZyBmb3JcbiAgICAgKiBkaXNwbGF5IGluIHRoZSB0ZXh0Ym94IGFuZCBjYXN0IHRoZSB0ZXh0Ym94IG1vZGVsIHRvIGEgbnVtYmVyLiBBdm9pZCB1cGRhdGluZ1xuICAgICAqIHRoZSBmb3JtIG1vZGVsIHdoZW4gdGhlIHZhbHVlIGRvZXNuJ3QgY2hhbmdlIGJlY2F1c2UgbGlzdGVuZXJzIHdpbGwgZmlyZSBmb3Igbm8gcmVhc29uXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVGb3JtTW9kZWxWYWx1ZShpc0ZvY3VzT3V0PzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hdXRvVXBkYXRlRm9ybU1vZGVsKSB7XG4gICAgICAgICAgICAvLyBNYWtlIGl0IHNvIHZhbHVlIGNoYW5nZXMgb24gdGhlIGZvcm0gbW9kZWwgZG8gbm90IGdldCB0cmlnZ2VyZWRcbiAgICAgICAgICAgIC8vIGFzIHdlIGNoYW5nZSBpdCBwcm9ncmFtbWF0aWNhbGx5LiAgV2UgZG8gbm90IHdhbnQgdGhlIHRleHRib3hcbiAgICAgICAgICAgIC8vIG1vZGVsIHRvIGJlIHVwZGF0ZWQgd2hpbGUgdGhlIHVzZXIgaXMgaW4gdGhlIGlucHV0XG4gICAgICAgICAgICB0aGlzLmF1dG9VcGRhdGluZ0Zvcm1Nb2RlbCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGV4dGJveEZvcm1Nb2RlbC52YWxpZCB8fCB0aGlzLnRleHRib3hGb3JtTW9kZWwudmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBTdGFydCBvdXQgd2l0aCBudWxsIGZvciB0aGUgbnVtYmVyLCBpZiB0aGUgdGV4dGJveCB2YWx1ZSBpcyBub3QgYSBudW1iZXJcbiAgICAgICAgICAgICAgICAvLyB3ZSB3aWxsIGNsZWFyIGl0IG91dCBvbiBmb2N1cyBvdXRcbiAgICAgICAgICAgICAgICBsZXQgbnVtYmVyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgdGV4dGJveCBtb2RlbCBpcyBhIG51bWJlciBiZWZvcmUgdHJ5aW5nIHRvIHVwZGF0ZSB0aGVcbiAgICAgICAgICAgICAgICAvLyBmb3JtIG1vZGVsIHZhbHVlIHdpdGggaXRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnZhbHVlICYmICFpc05hTih0aGlzLnRleHRib3hGb3JtTW9kZWwudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE91ciB2YWx1ZSBpcyBhIGxlZ2l0IG51bWJlciwgb24gZm9jdXMgb3V0IHdlIHdpbGwgZm9ybWF0IGl0IGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBOdW1iZXIodGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVja2luZyBpZiB0aGUgdmFsdWUgaGFzIGFjdHVhbGx5IGNoYW5nZWQsIGlmIG5vdCBkb24ndCBzZXQgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIHRvIGF2b2lkIGV4dHJhIGxpc3RlbmVyIGNhbGxzXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Nb2RlbC52YWx1ZSAhPT0gbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Nb2RlbC5zZXRWYWx1ZShudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0ZXh0Ym94IG1vZGVsIGlzIG5vdCBhIG51bWJlciwgY2hlY2sgdG8gc2VlIGlmIG91ciBmb3JtIG1vZGVsIGhhcyBhIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBpZiBzbyBjbGVhciBpdCBvdXRcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybU1vZGVsLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybU1vZGVsLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgd2lsbCB1cGRhdGUgdGhlIHRleHRib3ggZm9ybSBtb2RlbCB3aXRoIGZvcm1hdHRpbmcgaWYgbmVlZGVkXG4gICAgICAgICAgICAgICAgLy8gb24gRm9jdXMgb3V0LiAgVGhpcyB3b3JrcyB3ZWxsIGZvciB0aGUgdXNlciB3aGV0aGVyIHRoZSBhdXRvIHVwZGF0ZVxuICAgICAgICAgICAgICAgIC8vIGlzIG9wdGVkIGluIG9yIG5vdFxuICAgICAgICAgICAgICAgIGlmIChpc0ZvY3VzT3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dGJveEZvcm1Nb2RlbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdERpc3BsYXlOdW1iZXIobnVtYmVyKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmZvcm1Nb2RlbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRpc3BsYXksIGp1c3QgZW5zdXJpbmcgd2UgcmVzZXQgb3VyIGZsYWcgdGhhdCBmaWx0ZXJzXG4gICAgICAgICAgICAvLyB0aGUgZm9ybSBtb2RlbCB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9VcGRhdGluZ0Zvcm1Nb2RlbCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIG51bWJlciB2YWx1ZSB0byB0aGUgZm9ybW1hdGVkIGRpc3BsYXkgc3RyaW5nLiBJZiB0aGVyZSBpcyBubyB2YWx1ZVxuICAgICAqIHJldHVybiBudWxsXG4gICAgICovXG4gICAgcHJpdmF0ZSBmb3JtYXREaXNwbGF5TnVtYmVyKHZhbHVlOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCBjYWxsaW5nIHRvRml4ZWQgaWYgdGhlIHZhbHVlIGlzbid0IGEgbnVtYmVyLiAgVGhpcyBpcyBwb3NzaWJsZVxuICAgICAgICAgICAgLy8gaWYgcGF0Y2hpbmcgYSB2YWx1ZSBmcm9tIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCBhcyB5b3UgZG9uJ3QgaGF2ZVxuICAgICAgICAgICAgLy8gdHlwZSBjaGVja2luZyB0aGVyZVxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1ByZWNpc2lvbiAmJiB0aGlzLmRlY2ltYWxzICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9GaXhlZCh0aGlzLmRlY2ltYWxzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBvc2l0aW9uIHRoZSB1bml0cyBlbGVtZW50IGFuZCBzZXQgdGhlIHBhZGRpbmcgaW4gdGhlIHRleHRib3ggaW5wdXQgYmFzZWRcbiAgICAgKiBvbiB0aGUgd2lkdGggb2YgdGhlIHVuaXRzIGVsZW1lbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIHBvc2l0aW9uUmlnaHRVbml0cygpOiB2b2lkIHtcbiAgICAgICAgbGV0IHVuaXRzRWwgPSB0aGlzLnRleHRib3hFbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy51bml0cy1yaWdodCcpO1xuICAgICAgICBsZXQgaW5wdXRFbCA9IHRoaXMudGV4dGJveEVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcblxuICAgICAgICBpZiAodW5pdHNFbCAmJiBpbnB1dEVsKSB7XG4gICAgICAgICAgICBsZXQgdW5pdHNXaWR0aCA9IHVuaXRzRWwub2Zmc2V0V2lkdGg7XG5cbiAgICAgICAgICAgIGlmICh1bml0c1dpZHRoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMudW5pdHNXaWR0aENhbGN1bGF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcGFkZGluZyA9IHVuaXRzV2lkdGg7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGlucHV0RWwsICdwYWRkaW5nLXJpZ2h0JywgcGFkZGluZyArICdweCcpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHBvc2l0aW9uTGVmdFVuaXRzKCkge1xuICAgICAgICBsZXQgdW5pdHNFbCA9IHRoaXMudGV4dGJveEVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnVuaXRzLWxlZnQnKTtcbiAgICAgICAgbGV0IGlucHV0RWwgPSB0aGlzLnRleHRib3hFbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG5cbiAgICAgICAgaWYgKHVuaXRzRWwgJiYgaW5wdXRFbCkge1xuICAgICAgICAgICAgbGV0IHVuaXRzV2lkdGggPSB1bml0c0VsLm9mZnNldFdpZHRoO1xuXG4gICAgICAgICAgICBpZiAodW5pdHNXaWR0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuaXRzV2lkdGhDYWxjdWxhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHBhZGRpbmcgPSB1bml0c1dpZHRoO1xuICAgICAgICAgICAgbGV0IGxlZnRQb3NpdGlvbiA9IGdldENvbXB1dGVkU3R5bGUodW5pdHNFbCkubGVmdDtcbiAgICAgICAgICAgIGlmIChsZWZ0UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nICs9IHBhcnNlSW50KGxlZnRQb3NpdGlvbi5yZXBsYWNlKCdweCcsICcnKSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGlucHV0RWwsICdwYWRkaW5nLWxlZnQnLCBwYWRkaW5nICsgJ3B4Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW5kIGFwcGVuZCB0aGUgdW5pdHMgZWxlbWVudCB0byB0aGUgdGV4dGJveCBlbGVtZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBzaG93VW5pdHMoKTogdm9pZCB7XG4gICAgICAgIGxldCBpbnB1dFdyYXBwZXIgPSB0aGlzLnRleHRib3hFbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5pbnB1dC13cmFwcGVyJyk7XG5cbiAgICAgICAgaWYgKGlucHV0V3JhcHBlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMubGVmdFVuaXRzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHVuaXRzRWwgPSB0aGlzLnRleHRib3hFbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy51bml0cy1sZWZ0Jyk7XG4gICAgICAgICAgICAgICAgaWYgKHVuaXRzRWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh1bml0c0VsLCAnaW5uZXJIVE1MJywgdGhpcy5sZWZ0VW5pdHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoaW5wdXRXcmFwcGVyLCB0aGlzLm1ha2VVbml0RWxlbWVudCgnbGVmdCcsIHRoaXMubGVmdFVuaXRzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb25MZWZ0VW5pdHMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucmlnaHRVbml0cykge1xuICAgICAgICAgICAgICAgIGxldCB1bml0c0VsID0gdGhpcy50ZXh0Ym94RWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudW5pdHMtcmlnaHQnKTtcbiAgICAgICAgICAgICAgICBpZiAodW5pdHNFbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHVuaXRzRWwsICdpbm5lckhUTUwnLCB0aGlzLnJpZ2h0VW5pdHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoaW5wdXRXcmFwcGVyLCB0aGlzLm1ha2VVbml0RWxlbWVudCgncmlnaHQnLCB0aGlzLnJpZ2h0VW5pdHMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvblJpZ2h0VW5pdHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZVVuaXRFbGVtZW50KHNpZGU6ICdsZWZ0JyB8ICdyaWdodCcsIHRleHQ6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGxldCB1bml0c0VsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHVuaXRzRWwsICdjbGFzcycsIGB1bml0cyB1bml0cy0ke3NpZGV9YCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHVuaXRzRWwsICdpZCcsIGAke3RoaXMuaWR9X3VuaXRzYCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHVuaXRzRWwsICdzdHlsZScsICdwb2ludGVyLWV2ZW50czogbm9uZScpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHVuaXRzRWwsICdpbm5lckhUTUwnLCB0ZXh0KTtcblxuICAgICAgICByZXR1cm4gdW5pdHNFbDtcbiAgICB9XG59IiwiPGRpdiBjbGFzcz1cImNvbnRyb2wgY29udHJvbC1sYWJlbC17e2xhYmVsUG9zaXRpb259fVwiXG4gICAgIFtjbGFzcy5pbnZhbGlkXT1cImZvcm1Nb2RlbD8uaW52YWxpZCAmJiAoZm9ybU1vZGVsPy50b3VjaGVkKVwiPlxuXG4gICAgICAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3tsYWJlbCB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInZhbGlkYXRpb25FcnJvcnMubGVuZ3RoICYmIGZvcm1Nb2RlbD8udG91Y2hlZCAmJiBmb3JtTW9kZWw/LmludmFsaWRcIj4mbmJzcDt7e3ZhbGlkYXRpb25FcnJvcnMgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGVjLWhlbHAtcG9wb3ZlciBpZD1cInt7aWR9fV9oZWxwUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWxwUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWlubGluZS1ibG9jayBteS1uMyBteC1uMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD1cInt7aGVscFBvcG92ZXIgfCB0cmFuc2xhdGV9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFBvc2l0aW9uPVwie3toZWxwUG9wb3ZlclBvc2l0aW9ufX1cIj5cbiAgICAgICAgICAgICAgPC9lYy1oZWxwLXBvcG92ZXI+XG4gICAgICAgPC9sYWJlbD5cblxuICAgICAgIDwhLS0gU2V0dGluZyB0aGUgbWF4bGVuZ3RoIHRvIDEzIHRvIGNvbWJhdCB0aGUgdXNlciBmcm9tIGVudGVyaW5nIHRvbyBsYXJnZSBvZiBhIG51bWJlclxuICAgICAgICAgZm9yIGphdmFzY3JpcHQgdG8gc3VwcG9ydC4gIElmIHRoZSB1c2VyIGVudGVycyBhbGwgMTMgY2hhcmFjdGVycyBhcyBudW1iZXJzIGFuZCB3ZSBoYXZlIHNob3dQcmVjaXNpb24gc2V0LCBhZGRpbmcgdGhlXG4gICAgICAgICBkZWNpbWFsIGFuZCB0aGUgZW1wdHkgemVybyBjaGFyYWN0ZXJzIHdpbGwgZ2V0IHRoZW0gaW4gYSBzaXR1YXRpb24gd2hlcmUgdG8gZWRpdCBpdCB0aGV5IG11c3QgcmVtb3ZlIGNoYXJhY3RlcnNcbiAgICAgICAgIGFzIHdlIHdvdWxkIHB1c2ggdGhlbSBwYXN0IHRoZSBsaW1pdCAtLT5cbiAgICAgICA8ZWMtdGV4dGJveCBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICN0ZXh0Ym94XG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWlucHV0IG1iLTBcIlxuICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgW21heGxlbmd0aF09XCJtYXhQcmVjaXNpb25EaWdpdHMgPyBtYXhQcmVjaXNpb25EaWdpdHMgKyAzIDogMTNcIlxuICAgICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgICAgICAgICAgICBbZm9ybU1vZGVsXT1cInRleHRib3hGb3JtTW9kZWxcIlxuICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cInRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJvbkZvY3VzT3V0KClcIj5cbiAgICAgICA8L2VjLXRleHRib3g+XG48L2Rpdj4iXX0=
@@ -1,117 +0,0 @@
1
- import { OverlayConfig } from '@angular/cdk/overlay';
2
- import { TemplatePortal } from '@angular/cdk/portal';
3
- import { Component, HostListener, Input, ViewChild } from '@angular/core';
4
- import { of, Subject } from 'rxjs';
5
- import { delay, switchMap, takeUntil } from 'rxjs/operators';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/cdk/overlay";
8
- import * as i2 from "../../display/tooltip/tooltip.service";
9
- import * as i3 from "@angular/common";
10
- import * as i4 from "../../display/tags/tags.component";
11
- export class PopoverComponent {
12
- constructor(overlay, viewContainerRef, elementRef, tooltipService) {
13
- this.overlay = overlay;
14
- this.viewContainerRef = viewContainerRef;
15
- this.elementRef = elementRef;
16
- this.tooltipService = tooltipService;
17
- /** An optional icon that, if provided, enables the popover to use it as the anchor element */
18
- this.icon = '';
19
- this.contentPosition = 'top-left';
20
- this.iconHoverClass = '';
21
- this.isVisible = false;
22
- this.mouseOver = new Subject();
23
- this.interrupt = new Subject();
24
- }
25
- /** When the popover initializes, if a new tagType is provided for the hover state of the popover,
26
- * we use it to update the type of our "hoverTag" (which controls background-color of tag)
27
- */
28
- ngOnInit() {
29
- if (this.tag && this.tagHoverType) {
30
- this.hoverTag = { ...this.tag, type: this.tagHoverType };
31
- }
32
- this.mouseOver
33
- .pipe(switchMap(v => of(v).pipe(delay(300), takeUntil(this.interrupt))))
34
- .subscribe(() => this.show());
35
- }
36
- ngOnDestroy() {
37
- this.hide();
38
- }
39
- show() {
40
- if (!this.isVisible) {
41
- const overlayConfig = this.getOverlayConfig();
42
- this.overlayRef = this.overlay.create(overlayConfig);
43
- const contentPortal = new TemplatePortal(this.content, this.viewContainerRef);
44
- this.contentViewRef = this.overlayRef.attach(contentPortal);
45
- this.isVisible = true;
46
- }
47
- }
48
- onMouseOver() {
49
- this.mouseOver.next();
50
- }
51
- onLeave() {
52
- this.interrupt.next();
53
- }
54
- /**
55
- * Hides the popover if the mouse moves outside of the popover content
56
- */
57
- onMouseMove(event) {
58
- let callCallback = false;
59
- if (!this.contentRect) {
60
- this.contentRect = this.contentViewRef?.rootNodes[0].getBoundingClientRect();
61
- }
62
- if (this.contentRect) {
63
- callCallback = this.tooltipService.onMove(event, this.contentRect);
64
- }
65
- if (callCallback) {
66
- this.hide();
67
- }
68
- }
69
- hide() {
70
- this.interrupt.next();
71
- this.overlayRef?.dispose();
72
- this.isVisible = false;
73
- this.contentRect = undefined;
74
- }
75
- getOverlayConfig() {
76
- const position = this.getPosition();
77
- const positionStrategy = this.overlay.position()
78
- .flexibleConnectedTo(this.elementRef)
79
- .withPositions([position]);
80
- const config = new OverlayConfig({
81
- positionStrategy: positionStrategy
82
- });
83
- return config;
84
- }
85
- getPosition() {
86
- const position = this.contentPosition.split('-');
87
- const overlayX = (position[1] == 'left' ? 'start' : 'end');
88
- const overlayY = position[0];
89
- return { originX: overlayX, originY: overlayY, overlayX: overlayX, overlayY: overlayY };
90
- }
91
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoverComponent, deps: [{ token: i1.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i2.TooltipService }], target: i0.ɵɵFactoryTarget.Component }); }
92
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PopoverComponent, selector: "ec-popover", inputs: { icon: "icon", tag: "tag", tagHoverType: "tagHoverType", contentPosition: "contentPosition", iconHoverClass: "iconHoverClass" }, host: { listeners: { "mouseover": "onMouseOver()", "mouseleave": "onLeave()" } }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: "<!-- Before hover state -->\n<div class=\"p-2\">\n <i *ngIf=\"!tag\" class=\"ec-icon {{icon}} ec-icon-sm\"></i>\n <ec-tags *ngIf=\"tag\"\n [isCondensed] = \"true\"\n [tags]=\"tag\">\n </ec-tags>\n</div>\n<!-- ./Before hover state -->\n\n<!-- Hover state -->\n<ng-template #content>\n <article class=\"popover-content\"\n (document:mousemove)=\"onMouseMove($event)\">\n <ng-content></ng-content>\n </article>\n <div class=\"p-2 {{contentPosition}}\">\n <i *ngIf=\"!tag\" class=\"ec-icon {{icon}} ec-icon-sm {{iconHoverClass}}\"></i>\n <ec-tags *ngIf=\"tag\"\n [isCondensed]=\"true\"\n [tags]=\"hoverTag\">\n </ec-tags>\n </div>\n</ng-template>\n<!-- ./Hover state -->\n", styles: [":host{line-height:.75rem;display:inline-block}.popover-content{border-radius:var(--ec-border-radius);box-shadow:0 3px 6px #1a1a231f;overflow:hidden;position:relative}.popover-content+div{position:absolute;line-height:.75rem}.popover-content+div.top-left{top:0;left:0}.popover-content+div.top-right{top:0;right:0}.popover-content+div.bottom-right{bottom:0;right:0}.popover-content+div.bottom-left{bottom:0;left:0}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.TagsComponent, selector: "ec-tags", inputs: ["id", "tags", "wrap", "isCondensed", "highlightText"], outputs: ["tagClosed"] }] }); }
93
- }
94
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PopoverComponent, decorators: [{
95
- type: Component,
96
- args: [{ selector: 'ec-popover', template: "<!-- Before hover state -->\n<div class=\"p-2\">\n <i *ngIf=\"!tag\" class=\"ec-icon {{icon}} ec-icon-sm\"></i>\n <ec-tags *ngIf=\"tag\"\n [isCondensed] = \"true\"\n [tags]=\"tag\">\n </ec-tags>\n</div>\n<!-- ./Before hover state -->\n\n<!-- Hover state -->\n<ng-template #content>\n <article class=\"popover-content\"\n (document:mousemove)=\"onMouseMove($event)\">\n <ng-content></ng-content>\n </article>\n <div class=\"p-2 {{contentPosition}}\">\n <i *ngIf=\"!tag\" class=\"ec-icon {{icon}} ec-icon-sm {{iconHoverClass}}\"></i>\n <ec-tags *ngIf=\"tag\"\n [isCondensed]=\"true\"\n [tags]=\"hoverTag\">\n </ec-tags>\n </div>\n</ng-template>\n<!-- ./Hover state -->\n", styles: [":host{line-height:.75rem;display:inline-block}.popover-content{border-radius:var(--ec-border-radius);box-shadow:0 3px 6px #1a1a231f;overflow:hidden;position:relative}.popover-content+div{position:absolute;line-height:.75rem}.popover-content+div.top-left{top:0;left:0}.popover-content+div.top-right{top:0;right:0}.popover-content+div.bottom-right{bottom:0;right:0}.popover-content+div.bottom-left{bottom:0;left:0}\n"] }]
97
- }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i2.TooltipService }], propDecorators: { icon: [{
98
- type: Input
99
- }], tag: [{
100
- type: Input
101
- }], tagHoverType: [{
102
- type: Input
103
- }], contentPosition: [{
104
- type: Input
105
- }], iconHoverClass: [{
106
- type: Input
107
- }], content: [{
108
- type: ViewChild,
109
- args: ['content']
110
- }], onMouseOver: [{
111
- type: HostListener,
112
- args: ['mouseover']
113
- }], onLeave: [{
114
- type: HostListener,
115
- args: ['mouseleave']
116
- }] } });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE4QixhQUFhLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBK0IsWUFBWSxFQUFFLEtBQUssRUFBMEIsU0FBUyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUNqSixPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBVzdELE1BQU0sT0FBTyxnQkFBZ0I7SUFrQzNCLFlBQ1UsT0FBZ0IsRUFDaEIsZ0JBQWtDLEVBQ2xDLFVBQXNCLEVBQ3RCLGNBQThCO1FBSDlCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXBDeEMsOEZBQThGO1FBQ3JGLFNBQUksR0FBWSxFQUFFLENBQUM7UUFRbkIsb0JBQWUsR0FBMkIsVUFBVSxDQUFDO1FBRXJELG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBZ0I3QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBRTNCLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2hDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBT3BDLENBQUM7SUFFTDs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVM7YUFDYixJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ1osRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDUixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQ1YsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUIsQ0FDRixDQUNGO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVPLElBQUk7UUFFVixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRXBCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFckQsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRTVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBR00sV0FBVztRQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFHTSxPQUFPO1FBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXLENBQUMsS0FBaUI7UUFDbEMsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBRXpCLElBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9FLENBQUM7UUFFRCxJQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQixZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFZLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsSUFBRyxZQUFZLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVPLElBQUk7UUFDVixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFcEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTthQUM3QyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2FBQ3BDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUM7WUFDL0IsZ0JBQWdCLEVBQUUsZ0JBQWdCO1NBQ25DLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sUUFBUSxHQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUUsTUFBTSxRQUFRLEdBQXFCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzFGLENBQUM7K0dBcElVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLGtYQ2Y3Qix5dUJBeUJBOzs0RkRWYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0UsWUFBWTtpS0FPYixJQUFJO3NCQUFaLEtBQUs7Z0JBR0csR0FBRztzQkFBWCxLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUV1QixPQUFPO3NCQUFuQyxTQUFTO3VCQUFDLFNBQVM7Z0JBZ0ViLFdBQVc7c0JBRGpCLFlBQVk7dUJBQUMsV0FBVztnQkFNbEIsT0FBTztzQkFEYixZQUFZO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbiwgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEVtYmVkZGVkVmlld1JlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXksIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGFnLCBUYWdUeXBlIH0gZnJvbSAnLi4vLi4vZGlzcGxheS90YWdzL3RhZyc7XG5pbXBvcnQgeyBUb29sdGlwU2VydmljZSB9IGZyb20gJy4uLy4uL2Rpc3BsYXkvdG9vbHRpcC90b29sdGlwLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBQb3BvdmVyQ29udGVudFBvc2l0aW9uID0gJ3RvcC1sZWZ0JyB8ICd0b3AtcmlnaHQnIHwgJ2JvdHRvbS1yaWdodCcgfCAnYm90dG9tLWxlZnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlYy1wb3BvdmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wb3BvdmVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgLyoqIEFuIG9wdGlvbmFsIGljb24gdGhhdCwgaWYgcHJvdmlkZWQsIGVuYWJsZXMgdGhlIHBvcG92ZXIgdG8gdXNlIGl0IGFzIHRoZSBhbmNob3IgZWxlbWVudCAqL1xuICBASW5wdXQoKSBpY29uPzogc3RyaW5nID0gJyc7XG4gIFxuICAvKiogQW4gb3B0aW9uYWwgdGFnIHRoYXQsIGlmIHByb3ZpZGVkLCBlbmFibGVzIHRoZSBwb3BvdmVyIHRvIHVzZSBpdCBhcyB0aGUgYW5jaG9yIGVsZW1lbnQgKi9cbiAgQElucHV0KCkgdGFnPzogVGFnO1xuXG4gIC8qKiBVc2VkIHRvIGRlbm90ZSB0aGUgaG92ZXIgdGFnJ3MgdHlwZSAoYW5kIHRodXMgYmFja2dyb3VuZC1jb2xvcikgKi9cbiAgQElucHV0KCkgdGFnSG92ZXJUeXBlPzogVGFnVHlwZTtcblxuICBASW5wdXQoKSBjb250ZW50UG9zaXRpb246IFBvcG92ZXJDb250ZW50UG9zaXRpb24gPSAndG9wLWxlZnQnO1xuXG4gIEBJbnB1dCgpIGljb25Ib3ZlckNsYXNzOiBzdHJpbmcgPSAnJztcblxuICBAVmlld0NoaWxkKCdjb250ZW50JykgcHVibGljIGNvbnRlbnQhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIFxuXG4gIC8qKiBJbiB0aGUgdGVtcGxhdGUsIHdlIHVzZSBhbiBlYy10YWdzIGVsZW1lbnQgZm9yIHRoZSBwcmUtaG92ZXIgc3RhdGUgYW5kIGFuIGVudGlyZWx5XG4gICAqICBzZXBhcmF0ZSBlYy10YWdzIGVsZW1lbnQgZm9yIG91ciBob3ZlciBzdGF0ZSwgcmVzdWx0aW5nIGluIHR3byBjb21wb25lbnRzLiBUbyBhY2hpZXZlIGEgY2hhbmdlIFxuICAgKiBpbiB0aGUgYmFja2dyb3VuZC1jb2xvciBmb3Igb3VyIGFuY2hvciB0YWcsIG9uIGhvdmVyLCBhIGRpZmZlcmVudCB0YWcudGFnVHlwZSBtdXN0IGJlIHByb3ZpZGVkIG9uIHRoZVxuICAgKiBzZWNvbmQgZWMtdGFnIGVsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBob3ZlclRhZz86IFRhZztcblxuICBwcml2YXRlIG92ZXJsYXlSZWY/OiBPdmVybGF5UmVmO1xuICBwcml2YXRlIGNvbnRlbnRWaWV3UmVmPzogRW1iZWRkZWRWaWV3UmVmPGFueT47XG4gIHByaXZhdGUgY29udGVudFJlY3Q6IERPTVJlY3QgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBtb3VzZU92ZXIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIGludGVycnVwdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB0b29sdGlwU2VydmljZTogVG9vbHRpcFNlcnZpY2UsXG4gICkgeyB9XG5cbiAgLyoqIFdoZW4gdGhlIHBvcG92ZXIgaW5pdGlhbGl6ZXMsIGlmIGEgbmV3IHRhZ1R5cGUgaXMgcHJvdmlkZWQgZm9yIHRoZSBob3ZlciBzdGF0ZSBvZiB0aGUgcG9wb3ZlciwgXG4gICAqICB3ZSB1c2UgaXQgdG8gdXBkYXRlIHRoZSB0eXBlIG9mIG91ciBcImhvdmVyVGFnXCIgKHdoaWNoIGNvbnRyb2xzIGJhY2tncm91bmQtY29sb3Igb2YgdGFnKSBcbiAgICovXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnRhZyAmJiB0aGlzLnRhZ0hvdmVyVHlwZSkge1xuICAgICAgdGhpcy5ob3ZlclRhZyA9IHsuLi50aGlzLnRhZywgdHlwZTogdGhpcy50YWdIb3ZlclR5cGUgfTtcbiAgICB9XG4gICAgdGhpcy5tb3VzZU92ZXJcbiAgICAucGlwZShcbiAgICAgIHN3aXRjaE1hcCh2ID0+XG4gICAgICAgIG9mKHYpLnBpcGUoXG4gICAgICAgICAgZGVsYXkoMzAwKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5pbnRlcnJ1cHQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNob3coKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmhpZGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdygpIHtcblxuICAgIGlmICghdGhpcy5pc1Zpc2libGUpIHtcbiAgICAgIFxuICAgICAgY29uc3Qgb3ZlcmxheUNvbmZpZyA9IHRoaXMuZ2V0T3ZlcmxheUNvbmZpZygpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZShvdmVybGF5Q29uZmlnKTtcbiAgXG4gICAgICBjb25zdCBjb250ZW50UG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMuY29udGVudCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICAgIHRoaXMuY29udGVudFZpZXdSZWYgPSB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKGNvbnRlbnRQb3J0YWwpO1xuICBcbiAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZW92ZXInKVxuICBwdWJsaWMgb25Nb3VzZU92ZXIoKSB7XG4gICAgdGhpcy5tb3VzZU92ZXIubmV4dCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gIHB1YmxpYyBvbkxlYXZlKCkge1xuICAgIHRoaXMuaW50ZXJydXB0Lm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyB0aGUgcG9wb3ZlciBpZiB0aGUgbW91c2UgbW92ZXMgb3V0c2lkZSBvZiB0aGUgcG9wb3ZlciBjb250ZW50XG4gICAqL1xuICBwdWJsaWMgb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBsZXQgY2FsbENhbGxiYWNrID0gZmFsc2U7XG4gICAgXG4gICAgaWYoIXRoaXMuY29udGVudFJlY3QpIHtcbiAgICAgIHRoaXMuY29udGVudFJlY3QgPSB0aGlzLmNvbnRlbnRWaWV3UmVmPy5yb290Tm9kZXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5jb250ZW50UmVjdCkge1xuICAgICAgY2FsbENhbGxiYWNrID0gdGhpcy50b29sdGlwU2VydmljZS5vbk1vdmUoZXZlbnQsIHRoaXMuY29udGVudFJlY3QhKTtcbiAgICB9XG4gICAgaWYoY2FsbENhbGxiYWNrKSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG4gIH0gXG5cbiAgcHJpdmF0ZSBoaWRlKCkge1xuICAgIHRoaXMuaW50ZXJydXB0Lm5leHQoKTtcbiAgICB0aGlzLm92ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcbiAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuY29udGVudFJlY3QgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldE92ZXJsYXlDb25maWcoKTogT3ZlcmxheUNvbmZpZyB7XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uKCk7XG5cbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnBvc2l0aW9uKClcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuZWxlbWVudFJlZilcbiAgICAgIC53aXRoUG9zaXRpb25zKFtwb3NpdGlvbl0pO1xuXG4gICAgY29uc3QgY29uZmlnID0gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgcG9zaXRpb25TdHJhdGVneTogcG9zaXRpb25TdHJhdGVneVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UG9zaXRpb24oKTogQ29ubmVjdGVkUG9zaXRpb24ge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5jb250ZW50UG9zaXRpb24uc3BsaXQoJy0nKTtcbiAgICBjb25zdCBvdmVybGF5WCA9IDwnc3RhcnQnIHwgJ2VuZCc+KHBvc2l0aW9uWzFdID09ICdsZWZ0JyA/ICdzdGFydCcgOiAnZW5kJyk7XG4gICAgY29uc3Qgb3ZlcmxheVkgPSA8J3RvcCcgfCAnYm90dG9tJz5wb3NpdGlvblswXTtcbiAgICByZXR1cm4geyBvcmlnaW5YOiBvdmVybGF5WCwgb3JpZ2luWTogb3ZlcmxheVksIG92ZXJsYXlYOiBvdmVybGF5WCwgb3ZlcmxheVk6IG92ZXJsYXlZIH07XG4gIH1cbn1cbiIsIjwhLS0gQmVmb3JlIGhvdmVyIHN0YXRlIC0tPlxuPGRpdiBjbGFzcz1cInAtMlwiPlxuICA8aSAqbmdJZj1cIiF0YWdcIiBjbGFzcz1cImVjLWljb24ge3tpY29ufX0gZWMtaWNvbi1zbVwiPjwvaT5cbiAgPGVjLXRhZ3MgKm5nSWY9XCJ0YWdcIlxuICAgICAgICAgICAgW2lzQ29uZGVuc2VkXSA9IFwidHJ1ZVwiXG4gICAgICAgICAgICBbdGFnc109XCJ0YWdcIj5cbiAgPC9lYy10YWdzPlxuPC9kaXY+XG48IS0tIC4vQmVmb3JlIGhvdmVyIHN0YXRlIC0tPlxuXG48IS0tIEhvdmVyIHN0YXRlIC0tPlxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICA8YXJ0aWNsZSBjbGFzcz1cInBvcG92ZXItY29udGVudFwiXG4gICAgICAgICAgIChkb2N1bWVudDptb3VzZW1vdmUpPVwib25Nb3VzZU1vdmUoJGV2ZW50KVwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9hcnRpY2xlPlxuICA8ZGl2IGNsYXNzPVwicC0yIHt7Y29udGVudFBvc2l0aW9ufX1cIj5cbiAgICA8aSAqbmdJZj1cIiF0YWdcIiBjbGFzcz1cImVjLWljb24ge3tpY29ufX0gZWMtaWNvbi1zbSB7e2ljb25Ib3ZlckNsYXNzfX1cIj48L2k+XG4gICAgPGVjLXRhZ3MgKm5nSWY9XCJ0YWdcIlxuICAgICAgICAgICAgIFtpc0NvbmRlbnNlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICBbdGFnc109XCJob3ZlclRhZ1wiPlxuICAgIDwvZWMtdGFncz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPCEtLSAuL0hvdmVyIHN0YXRlIC0tPlxuIl19
@@ -1,3 +0,0 @@
1
- export class RadioButtonOption {
2
- }
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tYnV0dG9uLW9wdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLW9wdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8saUJBQWlCO0NBa0I3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBSYWRpb0J1dHRvbk9wdGlvbjxUID0gYW55PiB7XG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0byBkaXNwbGF5IGFzIHRoZSByYWRpbyBidXR0b24gbGFiZWwsIHRoaXMgY2FuIGFsc28gaW5jbHVkZSBodG1sIGZvcm1hdHRpbmcgc3VjaFxuICAgKiBhcyBib2xkIGFuZCBpdGFsaWNzIHRvIGVtcGhhc2l6ZSB3b3JkcyBpbiB0aGUgc3RyaW5nXG4gICAqL1xuICBsYWJlbD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYSBzZWxlY3RlZCByYWRpbyBidXR0b24gbW9kZWxcbiAgICovXG4gIHZhbHVlPzogVDtcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIGRpc3BsYXkgd2l0aCB0aGUgcmFkaW8gYnV0dG9uIG9wdGlvblxuICAgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0b29sdGlwIHRleHQgdG8gc2hvdyB3aGVuIGhvdmVyaW5nIG92ZXIgYW4gb3B0aW9uXG4gICAqL1xuICB0b29sdGlwPzogc3RyaW5nO1xufSJdfQ==