cps-ui-kit 18.10.0 → 19.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/cps-ui-kit.mjs +281 -319
- package/fesm2022/cps-ui-kit.mjs.map +1 -1
- package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +3 -3
- package/lib/components/cps-menu/cps-menu.component.d.ts +4 -3
- package/lib/components/cps-select/cps-select.component.d.ts +2 -2
- package/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.d.ts +3 -3
- package/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.d.ts +3 -3
- package/package.json +6 -8
- package/styles/styles.scss +9 -0
- package/esm2022/cps-ui-kit.mjs +0 -5
- package/esm2022/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +0 -948
- package/esm2022/lib/components/cps-button/cps-button.component.mjs +0 -205
- package/esm2022/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +0 -239
- package/esm2022/lib/components/cps-checkbox/cps-checkbox.component.mjs +0 -154
- package/esm2022/lib/components/cps-chip/cps-chip.component.mjs +0 -94
- package/esm2022/lib/components/cps-datepicker/cps-datepicker.component.mjs +0 -382
- package/esm2022/lib/components/cps-divider/cps-divider.component.mjs +0 -60
- package/esm2022/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +0 -213
- package/esm2022/lib/components/cps-file-upload/cps-file-upload.component.mjs +0 -182
- package/esm2022/lib/components/cps-icon/cps-icon.component.mjs +0 -203
- package/esm2022/lib/components/cps-info-circle/cps-info-circle.component.mjs +0 -61
- package/esm2022/lib/components/cps-input/cps-input.component.mjs +0 -385
- package/esm2022/lib/components/cps-loader/cps-loader.component.mjs +0 -58
- package/esm2022/lib/components/cps-menu/cps-menu.component.mjs +0 -572
- package/esm2022/lib/components/cps-paginator/cps-paginator.component.mjs +0 -118
- package/esm2022/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +0 -30
- package/esm2022/lib/components/cps-progress-circular/cps-progress-circular.component.mjs +0 -51
- package/esm2022/lib/components/cps-progress-linear/cps-progress-linear.component.mjs +0 -75
- package/esm2022/lib/components/cps-radio-group/cps-radio/cps-radio.component.mjs +0 -42
- package/esm2022/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +0 -77
- package/esm2022/lib/components/cps-radio-group/cps-radio-group.component.mjs +0 -225
- package/esm2022/lib/components/cps-scheduler/cps-scheduler.component.mjs +0 -682
- package/esm2022/lib/components/cps-scheduler/cps-scheduler.utils.mjs +0 -604
- package/esm2022/lib/components/cps-select/cps-select.component.mjs +0 -654
- package/esm2022/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +0 -110
- package/esm2022/lib/components/cps-switch/cps-switch.component.mjs +0 -131
- package/esm2022/lib/components/cps-tab-group/cps-tab/cps-tab.component.mjs +0 -86
- package/esm2022/lib/components/cps-tab-group/cps-tab-group.component.mjs +0 -308
- package/esm2022/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +0 -79
- package/esm2022/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +0 -407
- package/esm2022/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +0 -147
- package/esm2022/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +0 -105
- package/esm2022/lib/components/cps-table/cps-column-filter-types.mjs +0 -29
- package/esm2022/lib/components/cps-table/cps-table.component.mjs +0 -1022
- package/esm2022/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +0 -181
- package/esm2022/lib/components/cps-table/directives/cps-table-column-resizable.directive.mjs +0 -22
- package/esm2022/lib/components/cps-table/directives/cps-table-column-sortable.directive.mjs +0 -47
- package/esm2022/lib/components/cps-table/directives/cps-table-header-selectable.directive.mjs +0 -32
- package/esm2022/lib/components/cps-table/directives/cps-table-row-selectable.directive.mjs +0 -35
- package/esm2022/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +0 -212
- package/esm2022/lib/components/cps-table/pipes/cps-table-detect-filter-type.pipe.mjs +0 -29
- package/esm2022/lib/components/cps-tag/cps-tag.component.mjs +0 -121
- package/esm2022/lib/components/cps-textarea/cps-textarea.component.mjs +0 -290
- package/esm2022/lib/components/cps-timepicker/cps-timepicker.component.mjs +0 -370
- package/esm2022/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +0 -273
- package/esm2022/lib/components/cps-tree-select/cps-tree-select.component.mjs +0 -87
- package/esm2022/lib/components/cps-tree-table/cps-tree-table.component.mjs +0 -1279
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.mjs +0 -174
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-column-resizable.directive.mjs +0 -22
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.mjs +0 -47
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-header-selectable.directive.mjs +0 -33
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.mjs +0 -36
- package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +0 -48
- package/esm2022/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +0 -352
- package/esm2022/lib/components/cps-tree-table/pipes/cps-tree-table-detect-filter-type.pipe.mjs +0 -30
- package/esm2022/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +0 -656
- package/esm2022/lib/directives/cps-tooltip/cps-tooltip.directive.mjs +0 -275
- package/esm2022/lib/pipes/internal/check-option-selected.pipe.mjs +0 -24
- package/esm2022/lib/pipes/internal/combine-labels.pipe.mjs +0 -25
- package/esm2022/lib/pipes/internal/label-by-value.pipe.mjs +0 -16
- package/esm2022/lib/services/cps-dialog/cps-dialog.service.mjs +0 -146
- package/esm2022/lib/services/cps-dialog/internal/components/cps-confirmation/cps-confirmation.component.mjs +0 -25
- package/esm2022/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +0 -470
- package/esm2022/lib/services/cps-dialog/internal/directives/cps-dialog-content.directive.mjs +0 -18
- package/esm2022/lib/services/cps-dialog/utils/cps-dialog-config.mjs +0 -3
- package/esm2022/lib/services/cps-dialog/utils/cps-dialog-ref.mjs +0 -128
- package/esm2022/lib/services/cps-notification/cps-notification.service.mjs +0 -122
- package/esm2022/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +0 -95
- package/esm2022/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.mjs +0 -106
- package/esm2022/lib/services/cps-notification/utils/cps-notification-config.mjs +0 -27
- package/esm2022/lib/services/cps-notification/utils/internal/cps-notification-data.mjs +0 -12
- package/esm2022/lib/utils/colors-utils.mjs +0 -59
- package/esm2022/lib/utils/internal/size-utils.mjs +0 -24
- package/esm2022/public-api.mjs +0 -58
|
@@ -1,370 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Optional, Output, Self, ViewChild } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { FormsModule } from '@angular/forms';
|
|
4
|
-
import { CpsButtonToggleComponent } from '../cps-button-toggle/cps-button-toggle.component';
|
|
5
|
-
import { CpsAutocompleteComponent } from '../cps-autocomplete/cps-autocomplete.component';
|
|
6
|
-
import { CpsInfoCircleComponent } from '../cps-info-circle/cps-info-circle.component';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/forms";
|
|
9
|
-
import * as i2 from "@angular/common";
|
|
10
|
-
/**
|
|
11
|
-
* CpsTimepickerComponent allows to pick a specific time from a set of available options or input it manually.
|
|
12
|
-
* @group Components
|
|
13
|
-
*/
|
|
14
|
-
export class CpsTimepickerComponent {
|
|
15
|
-
/**
|
|
16
|
-
* Value of the timepicker.
|
|
17
|
-
* @group Props
|
|
18
|
-
*/
|
|
19
|
-
set value(value) {
|
|
20
|
-
if (!value)
|
|
21
|
-
value = undefined;
|
|
22
|
-
this._value = value;
|
|
23
|
-
this.onChange(value);
|
|
24
|
-
}
|
|
25
|
-
get value() {
|
|
26
|
-
return this._value;
|
|
27
|
-
}
|
|
28
|
-
constructor(_control) {
|
|
29
|
-
this._control = _control;
|
|
30
|
-
/**
|
|
31
|
-
* Label of the timepicker.
|
|
32
|
-
* @group Props
|
|
33
|
-
*/
|
|
34
|
-
this.label = '';
|
|
35
|
-
/**
|
|
36
|
-
* Determines whether the timepicker is disabled.
|
|
37
|
-
* @group Props
|
|
38
|
-
*/
|
|
39
|
-
this.disabled = false;
|
|
40
|
-
/**
|
|
41
|
-
* Determines whether the timepicker uses 24-hour format.
|
|
42
|
-
* @group Props
|
|
43
|
-
*/
|
|
44
|
-
this.use24HourTime = false;
|
|
45
|
-
/**
|
|
46
|
-
* Determines whether the timepicker has seconds.
|
|
47
|
-
* @group Props
|
|
48
|
-
*/
|
|
49
|
-
this.withSeconds = false;
|
|
50
|
-
/**
|
|
51
|
-
* Bottom hint text for the timepicker.
|
|
52
|
-
* @group Props
|
|
53
|
-
*/
|
|
54
|
-
this.hint = '';
|
|
55
|
-
/**
|
|
56
|
-
* Hides hint and validation errors.
|
|
57
|
-
* @group Props
|
|
58
|
-
*/
|
|
59
|
-
this.hideDetails = false;
|
|
60
|
-
/**
|
|
61
|
-
* When it is not an empty string, an info icon is displayed to show text for more info.
|
|
62
|
-
* @group Props
|
|
63
|
-
*/
|
|
64
|
-
this.infoTooltip = '';
|
|
65
|
-
/**
|
|
66
|
-
* InfoTooltip class for styling.
|
|
67
|
-
* @group Props
|
|
68
|
-
*/
|
|
69
|
-
this.infoTooltipClass = 'cps-tooltip-content';
|
|
70
|
-
/**
|
|
71
|
-
* Max width of infoTooltip, of type number denoting pixels or string.
|
|
72
|
-
* @group Props
|
|
73
|
-
*/
|
|
74
|
-
this.infoTooltipMaxWidth = '100%';
|
|
75
|
-
/**
|
|
76
|
-
* Determines whether the infoTooltip is persistent.
|
|
77
|
-
* @group Props
|
|
78
|
-
*/
|
|
79
|
-
this.infoTooltipPersistent = false;
|
|
80
|
-
/**
|
|
81
|
-
* Position of infoTooltip, it can be 'top', 'bottom', 'left' or 'right'.
|
|
82
|
-
* @group Props
|
|
83
|
-
*/
|
|
84
|
-
this.infoTooltipPosition = 'top';
|
|
85
|
-
/**
|
|
86
|
-
* Determines whether the timepicker input fields can be cleared.
|
|
87
|
-
* @group Props
|
|
88
|
-
*/
|
|
89
|
-
this.mandatoryValue = false;
|
|
90
|
-
/**
|
|
91
|
-
* Callback to invoke on value change.
|
|
92
|
-
* @param {string} string - value changed.
|
|
93
|
-
* @group Emits
|
|
94
|
-
*/
|
|
95
|
-
this.valueChanged = new EventEmitter();
|
|
96
|
-
/**
|
|
97
|
-
* Callback to invoke when the component receives focus.
|
|
98
|
-
* @param {any}
|
|
99
|
-
* @group Emits
|
|
100
|
-
*/
|
|
101
|
-
this.focused = new EventEmitter();
|
|
102
|
-
/**
|
|
103
|
-
* Callback to invoke when the component loses focus.
|
|
104
|
-
* @param {any}
|
|
105
|
-
* @group Emits
|
|
106
|
-
*/
|
|
107
|
-
this.blurred = new EventEmitter();
|
|
108
|
-
this.dayPeriodOptions = [
|
|
109
|
-
{ label: 'AM', value: 'AM' },
|
|
110
|
-
{ label: 'PM', value: 'PM' }
|
|
111
|
-
];
|
|
112
|
-
this.hoursOptions = [];
|
|
113
|
-
this.minutesOptions = this._getRange(0, 59).map((m) => ({
|
|
114
|
-
value: m.toString().padStart(2, '0'),
|
|
115
|
-
label: m.toString().padStart(2, '0')
|
|
116
|
-
}));
|
|
117
|
-
this.secondsOptions = [];
|
|
118
|
-
this.error = '';
|
|
119
|
-
this.hoursError = '';
|
|
120
|
-
this.minutesError = '';
|
|
121
|
-
this.secondsError = '';
|
|
122
|
-
this._value = undefined;
|
|
123
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
124
|
-
this.onChange = (event) => { };
|
|
125
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
126
|
-
this.onTouched = () => { };
|
|
127
|
-
if (this._control) {
|
|
128
|
-
this._control.valueAccessor = this;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
ngOnInit() {
|
|
132
|
-
this._initHoursOptions();
|
|
133
|
-
if (this.withSeconds) {
|
|
134
|
-
this.secondsOptions = this._getRange(0, 59).map((m) => ({
|
|
135
|
-
value: m.toString().padStart(2, '0'),
|
|
136
|
-
label: m.toString().padStart(2, '0')
|
|
137
|
-
}));
|
|
138
|
-
}
|
|
139
|
-
this._statusChangesSubscription = this._control?.statusChanges?.subscribe(() => {
|
|
140
|
-
this._checkErrors();
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
ngAfterViewInit() {
|
|
144
|
-
if (this.hoursField)
|
|
145
|
-
this.hoursField.isTimePickerField = true;
|
|
146
|
-
if (this.minutesField)
|
|
147
|
-
this.minutesField.isTimePickerField = true;
|
|
148
|
-
if (this.secondsField)
|
|
149
|
-
this.secondsField.isTimePickerField = true;
|
|
150
|
-
}
|
|
151
|
-
ngOnDestroy() {
|
|
152
|
-
this._statusChangesSubscription?.unsubscribe();
|
|
153
|
-
}
|
|
154
|
-
registerOnChange(fn) {
|
|
155
|
-
this.onChange = fn;
|
|
156
|
-
}
|
|
157
|
-
registerOnTouched(fn) {
|
|
158
|
-
this.onTouched = fn;
|
|
159
|
-
}
|
|
160
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
161
|
-
setDisabledState(disabled) { }
|
|
162
|
-
writeValue(value) {
|
|
163
|
-
this.value = value;
|
|
164
|
-
}
|
|
165
|
-
onFieldBlur() {
|
|
166
|
-
this._checkErrors();
|
|
167
|
-
this.blurred.emit();
|
|
168
|
-
}
|
|
169
|
-
onFieldFocus() {
|
|
170
|
-
this._control?.control?.markAsTouched();
|
|
171
|
-
this.focused.emit();
|
|
172
|
-
}
|
|
173
|
-
updateHours(hours) {
|
|
174
|
-
hours = hours || '';
|
|
175
|
-
const userInput = this.hoursField?.inputText || hours;
|
|
176
|
-
if (userInput) {
|
|
177
|
-
this._initValue();
|
|
178
|
-
const h = parseInt(userInput, 10);
|
|
179
|
-
if (!isNaN(h) && this.value) {
|
|
180
|
-
if (h >= 13 && h <= 23 && !this.use24HourTime) {
|
|
181
|
-
this.value.dayPeriod = 'PM';
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
if (this.value?.hours !== hours) {
|
|
186
|
-
if (this.value)
|
|
187
|
-
this.value.hours = hours;
|
|
188
|
-
}
|
|
189
|
-
this._updateValue(this.value);
|
|
190
|
-
}
|
|
191
|
-
updateMinutes(minutes) {
|
|
192
|
-
minutes = minutes || '';
|
|
193
|
-
if (minutes)
|
|
194
|
-
this._initValue();
|
|
195
|
-
if (this.value?.minutes !== minutes) {
|
|
196
|
-
if (this.value)
|
|
197
|
-
this.value.minutes = minutes;
|
|
198
|
-
}
|
|
199
|
-
this._updateValue(this.value);
|
|
200
|
-
}
|
|
201
|
-
updateSeconds(seconds) {
|
|
202
|
-
seconds = seconds || '';
|
|
203
|
-
if (seconds)
|
|
204
|
-
this._initValue();
|
|
205
|
-
if (this.value?.seconds !== seconds) {
|
|
206
|
-
if (this.value)
|
|
207
|
-
this.value.seconds = seconds;
|
|
208
|
-
}
|
|
209
|
-
this._updateValue(this.value);
|
|
210
|
-
}
|
|
211
|
-
updateDayPeriod(dayPeriod) {
|
|
212
|
-
if (dayPeriod)
|
|
213
|
-
this._initValue();
|
|
214
|
-
if (this.value?.dayPeriod !== dayPeriod) {
|
|
215
|
-
if (this.value)
|
|
216
|
-
this.value.dayPeriod = dayPeriod;
|
|
217
|
-
}
|
|
218
|
-
this._updateValue(this.value);
|
|
219
|
-
}
|
|
220
|
-
numberOnly(event) {
|
|
221
|
-
const charCode = event.which ? event.which : event.keyCode;
|
|
222
|
-
if (charCode > 31 && (charCode < 48 || charCode > 57)) {
|
|
223
|
-
return false;
|
|
224
|
-
}
|
|
225
|
-
return true;
|
|
226
|
-
}
|
|
227
|
-
_initValue() {
|
|
228
|
-
if (!this.value) {
|
|
229
|
-
this.value = {
|
|
230
|
-
hours: '',
|
|
231
|
-
minutes: ''
|
|
232
|
-
};
|
|
233
|
-
}
|
|
234
|
-
if (!this.use24HourTime && !('dayPeriod' in this.value)) {
|
|
235
|
-
this.value.dayPeriod = 'AM';
|
|
236
|
-
}
|
|
237
|
-
if (this.withSeconds && !('seconds' in this.value)) {
|
|
238
|
-
this.value.seconds = '';
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
_isValueValid() {
|
|
242
|
-
if (!this.value)
|
|
243
|
-
return false;
|
|
244
|
-
if (!this.value.hours || !this.value.minutes)
|
|
245
|
-
return false;
|
|
246
|
-
if (this.withSeconds && !this.value.seconds)
|
|
247
|
-
return false;
|
|
248
|
-
if (!this.use24HourTime && !this.value.dayPeriod)
|
|
249
|
-
return false;
|
|
250
|
-
return true;
|
|
251
|
-
}
|
|
252
|
-
_updateErrors() {
|
|
253
|
-
this.error = 'Time is invalid';
|
|
254
|
-
this.hoursError = this.value?.hours ? '' : this.error;
|
|
255
|
-
this.minutesError = this.value?.minutes ? '' : this.error;
|
|
256
|
-
if (this.withSeconds)
|
|
257
|
-
this.secondsError = this.value?.seconds ? '' : this.error;
|
|
258
|
-
}
|
|
259
|
-
_setErrors(error) {
|
|
260
|
-
this.error = error;
|
|
261
|
-
this.hoursError = error;
|
|
262
|
-
this.minutesError = error;
|
|
263
|
-
this.secondsError = this.withSeconds ? error : '';
|
|
264
|
-
}
|
|
265
|
-
_checkErrors() {
|
|
266
|
-
if (!this._control)
|
|
267
|
-
return;
|
|
268
|
-
if (this.value && !this._isValueValid()) {
|
|
269
|
-
this._updateErrors();
|
|
270
|
-
return;
|
|
271
|
-
}
|
|
272
|
-
const errors = this._control?.errors;
|
|
273
|
-
if (!this._control?.control?.touched || !errors) {
|
|
274
|
-
this._setErrors('');
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
if ('required' in errors) {
|
|
278
|
-
this._setErrors('Field is required');
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
const errArr = Object.values(errors);
|
|
282
|
-
if (errArr.length < 1) {
|
|
283
|
-
this._setErrors('');
|
|
284
|
-
return;
|
|
285
|
-
}
|
|
286
|
-
const message = errArr.find((msg) => typeof msg === 'string');
|
|
287
|
-
this._setErrors(message || 'Unknown error');
|
|
288
|
-
}
|
|
289
|
-
_initHoursOptions() {
|
|
290
|
-
const getHourAlias = (h) => {
|
|
291
|
-
h = h === 12 ? 0 : h + 12;
|
|
292
|
-
return h.toString().padStart(2, '0');
|
|
293
|
-
};
|
|
294
|
-
this.hoursOptions = (this.use24HourTime ? this._getRange(0, 23) : this._getRange(1, 12)).map((h) => {
|
|
295
|
-
const res = {
|
|
296
|
-
value: h.toString().padStart(2, '0'),
|
|
297
|
-
label: h.toString().padStart(2, '0')
|
|
298
|
-
};
|
|
299
|
-
if (!this.use24HourTime)
|
|
300
|
-
res.alias = getHourAlias(h);
|
|
301
|
-
return res;
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
_updateValue(value) {
|
|
305
|
-
this.writeValue(value);
|
|
306
|
-
this.onChange(value);
|
|
307
|
-
this.valueChanged.emit(value);
|
|
308
|
-
}
|
|
309
|
-
_getRange(startFrom, until) {
|
|
310
|
-
return Array.from({ length: until + 1 - startFrom }, (_, k) => k + startFrom);
|
|
311
|
-
}
|
|
312
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CpsTimepickerComponent, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
313
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.3", type: CpsTimepickerComponent, isStandalone: true, selector: "cps-timepicker", inputs: { label: "label", disabled: "disabled", use24HourTime: "use24HourTime", withSeconds: "withSeconds", hint: "hint", hideDetails: "hideDetails", infoTooltip: "infoTooltip", infoTooltipClass: "infoTooltipClass", infoTooltipMaxWidth: "infoTooltipMaxWidth", infoTooltipPersistent: "infoTooltipPersistent", infoTooltipPosition: "infoTooltipPosition", mandatoryValue: "mandatoryValue", value: "value" }, outputs: { valueChanged: "valueChanged", focused: "focused", blurred: "blurred" }, viewQueries: [{ propertyName: "hoursField", first: true, predicate: ["hoursField"], descendants: true }, { propertyName: "minutesField", first: true, predicate: ["minutesField"], descendants: true }, { propertyName: "secondsField", first: true, predicate: ["secondsField"], descendants: true }], ngImport: i0, template: "<div class=\"cps-timepicker\">\n <div\n class=\"cps-timepicker-label\"\n [ngClass]=\"{ 'cps-timepicker-label-disabled': disabled }\"\n *ngIf=\"label\">\n <label>{{ label }}</label>\n <cps-info-circle\n *ngIf=\"infoTooltip\"\n class=\"cps-timepicker-label-info-circle\"\n size=\"xsmall\"\n [tooltipPosition]=\"infoTooltipPosition\"\n [tooltipContentClass]=\"infoTooltipClass\"\n [tooltipMaxWidth]=\"infoTooltipMaxWidth\"\n [tooltipPersistent]=\"infoTooltipPersistent\"\n [tooltipText]=\"infoTooltip\">\n </cps-info-circle>\n </div>\n <div class=\"cps-timepicker-body\">\n <cps-autocomplete\n #hoursField\n (keypress)=\"numberOnly($event)\"\n width=\"60\"\n [emptyOptionIndex]=\"mandatoryValue ? 0 : -1\"\n [options]=\"hoursOptions\"\n [withOptionsAliases]=\"!use24HourTime\"\n [useOptionsAliasesWhenNoMatch]=\"true\"\n [hideDetails]=\"true\"\n [disabled]=\"disabled\"\n [showChevron]=\"false\"\n [showEmptyMessage]=\"false\"\n (focused)=\"onFieldFocus()\"\n (blurred)=\"onFieldBlur()\"\n [returnObject]=\"false\"\n [value]=\"value?.hours\"\n (valueChanged)=\"updateHours($event)\"\n [externalError]=\"hoursError\"\n placeholder=\"HH\"></cps-autocomplete>\n <span class=\"cps-timepicker-delimiter\">:</span>\n <cps-autocomplete\n #minutesField\n (keypress)=\"numberOnly($event)\"\n width=\"60\"\n [emptyOptionIndex]=\"mandatoryValue ? 0 : -1\"\n [options]=\"minutesOptions\"\n [hideDetails]=\"true\"\n [disabled]=\"disabled\"\n [showChevron]=\"false\"\n [showEmptyMessage]=\"false\"\n (focused)=\"onFieldFocus()\"\n (blurred)=\"onFieldBlur()\"\n [returnObject]=\"false\"\n [value]=\"value?.minutes\"\n (valueChanged)=\"updateMinutes($event)\"\n [externalError]=\"minutesError\"\n placeholder=\"MM\"></cps-autocomplete>\n <span *ngIf=\"withSeconds\" class=\"cps-timepicker-delimiter\">:</span>\n <cps-autocomplete\n *ngIf=\"withSeconds\"\n #secondsField\n (keypress)=\"numberOnly($event)\"\n width=\"60\"\n [emptyOptionIndex]=\"mandatoryValue ? 0 : -1\"\n [options]=\"secondsOptions\"\n [hideDetails]=\"true\"\n [disabled]=\"disabled\"\n [showChevron]=\"false\"\n [showEmptyMessage]=\"false\"\n (focused)=\"onFieldFocus()\"\n (blurred)=\"onFieldBlur()\"\n [returnObject]=\"false\"\n [value]=\"value?.seconds\"\n (valueChanged)=\"updateSeconds($event)\"\n [externalError]=\"secondsError\"\n placeholder=\"SS\"></cps-autocomplete>\n <cps-button-toggle\n *ngIf=\"!use24HourTime\"\n class=\"cps-timepicker-am-pm-selector\"\n [options]=\"dayPeriodOptions\"\n [disabled]=\"disabled\"\n [value]=\"value?.dayPeriod || 'AM'\"\n (valueChanged)=\"updateDayPeriod($event)\">\n </cps-button-toggle>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-timepicker-hint\">\n {{ hint }}\n </div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-timepicker-error\">\n {{ error }}\n </div>\n</div>\n", styles: [":host .cps-timepicker{display:flex;flex-direction:column}:host .cps-timepicker .cps-timepicker-label{align-items:center;display:inline-flex;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem;font-weight:600}:host .cps-timepicker .cps-timepicker-label-info-circle{margin-left:8px}:host .cps-timepicker .cps-timepicker-label-disabled{color:var(--cps-color-text-mild)}:host .cps-timepicker-body{display:flex;flex-direction:row}:host .cps-timepicker-body .cps-timepicker-am-pm-selector{margin-left:10px;margin-top:0}:host .cps-timepicker-body .cps-timepicker-delimiter{color:var(--cps-color-text-lightest);font-size:24px;margin:0 10px}:host .cps-timepicker .cps-timepicker-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-timepicker .cps-timepicker-error{color:var(--cps-color-error);font-weight:700;font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default;margin-top:.2rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CpsButtonToggleComponent, selector: "cps-button-toggle", inputs: ["label", "options", "multiple", "disabled", "mandatory", "equalWidths", "optionTooltipPosition", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "value"], outputs: ["valueChanged"] }, { kind: "component", type: CpsAutocompleteComponent, selector: "cps-autocomplete", inputs: ["label", "placeholder", "hint", "returnObject", "multiple", "disabled", "width", "selectAll", "showChevron", "withOptionsAliases", "useOptionsAliasesWhenNoMatch", "optionAlias", "chips", "closableChips", "clearable", "openOnClear", "keepInitialOrder", "optionLabel", "optionValue", "optionInfo", "hideDetails", "persistentClear", "prefixIcon", "prefixIconSize", "loading", "loadingMessage", "showLoadingMessage", "emptyMessage", "showEmptyMessage", "virtualScroll", "numToleratedItems", "externalError", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "appearance", "emptyOptionIndex", "inputChangeDebounceTime", "validating", "value", "options"], outputs: ["valueChanged", "inputChanged", "focused", "blurred"] }, { kind: "component", type: CpsInfoCircleComponent, selector: "cps-info-circle", inputs: ["size", "tooltipText", "tooltipPosition", "tooltipContentClass", "tooltipMaxWidth", "tooltipPersistent"] }] }); }
|
|
314
|
-
}
|
|
315
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: CpsTimepickerComponent, decorators: [{
|
|
316
|
-
type: Component,
|
|
317
|
-
args: [{ selector: 'cps-timepicker', standalone: true, imports: [
|
|
318
|
-
CommonModule,
|
|
319
|
-
FormsModule,
|
|
320
|
-
CpsButtonToggleComponent,
|
|
321
|
-
CpsAutocompleteComponent,
|
|
322
|
-
CpsInfoCircleComponent
|
|
323
|
-
], template: "<div class=\"cps-timepicker\">\n <div\n class=\"cps-timepicker-label\"\n [ngClass]=\"{ 'cps-timepicker-label-disabled': disabled }\"\n *ngIf=\"label\">\n <label>{{ label }}</label>\n <cps-info-circle\n *ngIf=\"infoTooltip\"\n class=\"cps-timepicker-label-info-circle\"\n size=\"xsmall\"\n [tooltipPosition]=\"infoTooltipPosition\"\n [tooltipContentClass]=\"infoTooltipClass\"\n [tooltipMaxWidth]=\"infoTooltipMaxWidth\"\n [tooltipPersistent]=\"infoTooltipPersistent\"\n [tooltipText]=\"infoTooltip\">\n </cps-info-circle>\n </div>\n <div class=\"cps-timepicker-body\">\n <cps-autocomplete\n #hoursField\n (keypress)=\"numberOnly($event)\"\n width=\"60\"\n [emptyOptionIndex]=\"mandatoryValue ? 0 : -1\"\n [options]=\"hoursOptions\"\n [withOptionsAliases]=\"!use24HourTime\"\n [useOptionsAliasesWhenNoMatch]=\"true\"\n [hideDetails]=\"true\"\n [disabled]=\"disabled\"\n [showChevron]=\"false\"\n [showEmptyMessage]=\"false\"\n (focused)=\"onFieldFocus()\"\n (blurred)=\"onFieldBlur()\"\n [returnObject]=\"false\"\n [value]=\"value?.hours\"\n (valueChanged)=\"updateHours($event)\"\n [externalError]=\"hoursError\"\n placeholder=\"HH\"></cps-autocomplete>\n <span class=\"cps-timepicker-delimiter\">:</span>\n <cps-autocomplete\n #minutesField\n (keypress)=\"numberOnly($event)\"\n width=\"60\"\n [emptyOptionIndex]=\"mandatoryValue ? 0 : -1\"\n [options]=\"minutesOptions\"\n [hideDetails]=\"true\"\n [disabled]=\"disabled\"\n [showChevron]=\"false\"\n [showEmptyMessage]=\"false\"\n (focused)=\"onFieldFocus()\"\n (blurred)=\"onFieldBlur()\"\n [returnObject]=\"false\"\n [value]=\"value?.minutes\"\n (valueChanged)=\"updateMinutes($event)\"\n [externalError]=\"minutesError\"\n placeholder=\"MM\"></cps-autocomplete>\n <span *ngIf=\"withSeconds\" class=\"cps-timepicker-delimiter\">:</span>\n <cps-autocomplete\n *ngIf=\"withSeconds\"\n #secondsField\n (keypress)=\"numberOnly($event)\"\n width=\"60\"\n [emptyOptionIndex]=\"mandatoryValue ? 0 : -1\"\n [options]=\"secondsOptions\"\n [hideDetails]=\"true\"\n [disabled]=\"disabled\"\n [showChevron]=\"false\"\n [showEmptyMessage]=\"false\"\n (focused)=\"onFieldFocus()\"\n (blurred)=\"onFieldBlur()\"\n [returnObject]=\"false\"\n [value]=\"value?.seconds\"\n (valueChanged)=\"updateSeconds($event)\"\n [externalError]=\"secondsError\"\n placeholder=\"SS\"></cps-autocomplete>\n <cps-button-toggle\n *ngIf=\"!use24HourTime\"\n class=\"cps-timepicker-am-pm-selector\"\n [options]=\"dayPeriodOptions\"\n [disabled]=\"disabled\"\n [value]=\"value?.dayPeriod || 'AM'\"\n (valueChanged)=\"updateDayPeriod($event)\">\n </cps-button-toggle>\n </div>\n <div *ngIf=\"!error && !hideDetails\" class=\"cps-timepicker-hint\">\n {{ hint }}\n </div>\n <div *ngIf=\"error && !hideDetails\" class=\"cps-timepicker-error\">\n {{ error }}\n </div>\n</div>\n", styles: [":host .cps-timepicker{display:flex;flex-direction:column}:host .cps-timepicker .cps-timepicker-label{align-items:center;display:inline-flex;margin-bottom:.2rem;color:var(--cps-color-text-dark);font-size:.875rem;font-weight:600}:host .cps-timepicker .cps-timepicker-label-info-circle{margin-left:8px}:host .cps-timepicker .cps-timepicker-label-disabled{color:var(--cps-color-text-mild)}:host .cps-timepicker-body{display:flex;flex-direction:row}:host .cps-timepicker-body .cps-timepicker-am-pm-selector{margin-left:10px;margin-top:0}:host .cps-timepicker-body .cps-timepicker-delimiter{color:var(--cps-color-text-lightest);font-size:24px;margin:0 10px}:host .cps-timepicker .cps-timepicker-hint{color:var(--cps-color-text-mild);font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default;margin-top:.2rem}:host .cps-timepicker .cps-timepicker-error{color:var(--cps-color-error);font-weight:700;font-size:.75rem;min-height:1.125rem;line-height:1.125rem;cursor:default;margin-top:.2rem}\n"] }]
|
|
324
|
-
}], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
|
|
325
|
-
type: Self
|
|
326
|
-
}, {
|
|
327
|
-
type: Optional
|
|
328
|
-
}] }], propDecorators: { label: [{
|
|
329
|
-
type: Input
|
|
330
|
-
}], disabled: [{
|
|
331
|
-
type: Input
|
|
332
|
-
}], use24HourTime: [{
|
|
333
|
-
type: Input
|
|
334
|
-
}], withSeconds: [{
|
|
335
|
-
type: Input
|
|
336
|
-
}], hint: [{
|
|
337
|
-
type: Input
|
|
338
|
-
}], hideDetails: [{
|
|
339
|
-
type: Input
|
|
340
|
-
}], infoTooltip: [{
|
|
341
|
-
type: Input
|
|
342
|
-
}], infoTooltipClass: [{
|
|
343
|
-
type: Input
|
|
344
|
-
}], infoTooltipMaxWidth: [{
|
|
345
|
-
type: Input
|
|
346
|
-
}], infoTooltipPersistent: [{
|
|
347
|
-
type: Input
|
|
348
|
-
}], infoTooltipPosition: [{
|
|
349
|
-
type: Input
|
|
350
|
-
}], mandatoryValue: [{
|
|
351
|
-
type: Input
|
|
352
|
-
}], value: [{
|
|
353
|
-
type: Input
|
|
354
|
-
}], valueChanged: [{
|
|
355
|
-
type: Output
|
|
356
|
-
}], focused: [{
|
|
357
|
-
type: Output
|
|
358
|
-
}], blurred: [{
|
|
359
|
-
type: Output
|
|
360
|
-
}], hoursField: [{
|
|
361
|
-
type: ViewChild,
|
|
362
|
-
args: ['hoursField']
|
|
363
|
-
}], minutesField: [{
|
|
364
|
-
type: ViewChild,
|
|
365
|
-
args: ['minutesField']
|
|
366
|
-
}], secondsField: [{
|
|
367
|
-
type: ViewChild,
|
|
368
|
-
args: ['secondsField']
|
|
369
|
-
}] } });
|
|
370
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRpbWVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRpbWVwaWNrZXIvY3BzLXRpbWVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRpbWVwaWNrZXIvY3BzLXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBRXhELE9BQU8sRUFDTCx3QkFBd0IsRUFFekIsTUFBTSxrREFBa0QsQ0FBQztBQUMxRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUUxRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7OztBQWF0Rjs7O0dBR0c7QUFjSCxNQUFNLE9BQU8sc0JBQXNCO0lBMkVqQzs7O09BR0c7SUFDSCxJQUFhLEtBQUssQ0FBQyxLQUEwQjtRQUMzQyxJQUFJLENBQUMsS0FBSztZQUFFLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUF1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QkFNRyxhQUFhO3NCQUFyQixLQUFLO2dCQU1HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTUcsSUFBSTtzQkFBWixLQUFLO2dCQU1HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTUcsV0FBVztzQkFBbkIsS0FBSztnQkFNRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBTUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQU1HLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFNRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBTUcsY0FBYztzQkFBdEIsS0FBSztnQkFNTyxLQUFLO3NCQUFqQixLQUFLO2dCQWVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBT0csT0FBTztzQkFBaEIsTUFBTTtnQkFPRyxPQUFPO3NCQUFoQixNQUFNO2dCQUdQLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxZQUFZO2dCQUl2QixZQUFZO3NCQURYLFNBQVM7dUJBQUMsY0FBYztnQkFJekIsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTZWxmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ3BzQnV0dG9uVG9nZ2xlQ29tcG9uZW50LFxuICBDcHNCdXR0b25Ub2dnbGVPcHRpb25cbn0gZnJvbSAnLi4vY3BzLWJ1dHRvbi10b2dnbGUvY3BzLWJ1dHRvbi10b2dnbGUuY29tcG9uZW50JztcbmltcG9ydCB7IENwc0F1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1hdXRvY29tcGxldGUvY3BzLWF1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jcHMtdG9vbHRpcC9jcHMtdG9vbHRpcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ3BzSW5mb0NpcmNsZUNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1pbmZvLWNpcmNsZS9jcHMtaW5mby1jaXJjbGUuY29tcG9uZW50JztcblxuLyoqXG4gKiBDcHNUaW1lIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSB0aW1lIGZvcm1hdC5cbiAqIEBncm91cCBJbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcHNUaW1lIHtcbiAgaG91cnM6IHN0cmluZztcbiAgbWludXRlczogc3RyaW5nO1xuICBzZWNvbmRzPzogc3RyaW5nO1xuICBkYXlQZXJpb2Q/OiAnQU0nIHwgJ1BNJztcbn1cblxuLyoqXG4gKiBDcHNUaW1lcGlja2VyQ29tcG9uZW50IGFsbG93cyB0byBwaWNrIGEgc3BlY2lmaWMgdGltZSBmcm9tIGEgc2V0IG9mIGF2YWlsYWJsZSBvcHRpb25zIG9yIGlucHV0IGl0IG1hbnVhbGx5LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3BzLXRpbWVwaWNrZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIENwc0J1dHRvblRvZ2dsZUNvbXBvbmVudCxcbiAgICBDcHNBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgQ3BzSW5mb0NpcmNsZUNvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY3BzLXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcHMtdGltZXBpY2tlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENwc1RpbWVwaWNrZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxue1xuICAvKipcbiAgICogTGFiZWwgb2YgdGhlIHRpbWVwaWNrZXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgbGFiZWwgPSAnJztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0aW1lcGlja2VyIGlzIGRpc2FibGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdGltZXBpY2tlciB1c2VzIDI0LWhvdXIgZm9ybWF0LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHVzZTI0SG91clRpbWUgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0aW1lcGlja2VyIGhhcyBzZWNvbmRzLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHdpdGhTZWNvbmRzID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEJvdHRvbSBoaW50IHRleHQgZm9yIHRoZSB0aW1lcGlja2VyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGhpbnQgPSAnJztcblxuICAvKipcbiAgICogSGlkZXMgaGludCBhbmQgdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaGlkZURldGFpbHMgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hlbiBpdCBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLCBhbiBpbmZvIGljb24gaXMgZGlzcGxheWVkIHRvIHNob3cgdGV4dCBmb3IgbW9yZSBpbmZvLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwID0gJyc7XG5cbiAgLyoqXG4gICAqIEluZm9Ub29sdGlwIGNsYXNzIGZvciBzdHlsaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwQ2xhc3MgPSAnY3BzLXRvb2x0aXAtY29udGVudCc7XG5cbiAgLyoqXG4gICAqIE1heCB3aWR0aCBvZiBpbmZvVG9vbHRpcCwgb2YgdHlwZSBudW1iZXIgZGVub3RpbmcgcGl4ZWxzIG9yIHN0cmluZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcE1heFdpZHRoOiBudW1iZXIgfCBzdHJpbmcgPSAnMTAwJSc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgaW5mb1Rvb2x0aXAgaXMgcGVyc2lzdGVudC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbmZvVG9vbHRpcFBlcnNpc3RlbnQgPSBmYWxzZTtcblxuICAvKipcbiAgICogUG9zaXRpb24gb2YgaW5mb1Rvb2x0aXAsIGl0IGNhbiBiZSAndG9wJywgJ2JvdHRvbScsICdsZWZ0JyBvciAncmlnaHQnLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwUG9zaXRpb246IENwc1Rvb2x0aXBQb3NpdGlvbiA9ICd0b3AnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRpbWVwaWNrZXIgaW5wdXQgZmllbGRzIGNhbiBiZSBjbGVhcmVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIG1hbmRhdG9yeVZhbHVlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSB0aW1lcGlja2VyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWx1ZTogQ3BzVGltZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghdmFsdWUpIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogQ3BzVGltZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSB2YWx1ZSBjaGFuZ2VkLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENwc1RpbWU+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSBjb21wb25lbnQgcmVjZWl2ZXMgZm9jdXMuXG4gICAqIEBwYXJhbSB7YW55fVxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBmb2N1c2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgY29tcG9uZW50IGxvc2VzIGZvY3VzLlxuICAgKiBAcGFyYW0ge2FueX1cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgYmx1cnJlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKCdob3Vyc0ZpZWxkJylcbiAgaG91cnNGaWVsZCE6IENwc0F1dG9jb21wbGV0ZUNvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCdtaW51dGVzRmllbGQnKVxuICBtaW51dGVzRmllbGQhOiBDcHNBdXRvY29tcGxldGVDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnc2Vjb25kc0ZpZWxkJylcbiAgc2Vjb25kc0ZpZWxkPzogQ3BzQXV0b2NvbXBsZXRlQ29tcG9uZW50O1xuXG4gIGRheVBlcmlvZE9wdGlvbnM6IENwc0J1dHRvblRvZ2dsZU9wdGlvbltdID0gW1xuICAgIHsgbGFiZWw6ICdBTScsIHZhbHVlOiAnQU0nIH0sXG4gICAgeyBsYWJlbDogJ1BNJywgdmFsdWU6ICdQTScgfVxuICBdO1xuXG4gIGhvdXJzT3B0aW9uczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSA9IFtdO1xuXG4gIG1pbnV0ZXNPcHRpb25zID0gdGhpcy5fZ2V0UmFuZ2UoMCwgNTkpLm1hcCgobSkgPT4gKHtcbiAgICB2YWx1ZTogbS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXG4gICAgbGFiZWw6IG0udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIH0pKTtcblxuICBzZWNvbmRzT3B0aW9uczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSA9IFtdO1xuXG4gIHByaXZhdGUgX3N0YXR1c0NoYW5nZXNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgZXJyb3IgPSAnJztcbiAgaG91cnNFcnJvciA9ICcnO1xuICBtaW51dGVzRXJyb3IgPSAnJztcbiAgc2Vjb25kc0Vycm9yID0gJyc7XG5cbiAgcHJpdmF0ZSBfdmFsdWU6IENwc1RpbWUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoQFNlbGYoKSBAT3B0aW9uYWwoKSBwcml2YXRlIF9jb250cm9sOiBOZ0NvbnRyb2wpIHtcbiAgICBpZiAodGhpcy5fY29udHJvbCkge1xuICAgICAgdGhpcy5fY29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbml0SG91cnNPcHRpb25zKCk7XG5cbiAgICBpZiAodGhpcy53aXRoU2Vjb25kcykge1xuICAgICAgdGhpcy5zZWNvbmRzT3B0aW9ucyA9IHRoaXMuX2dldFJhbmdlKDAsIDU5KS5tYXAoKG0pID0+ICh7XG4gICAgICAgIHZhbHVlOiBtLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcbiAgICAgICAgbGFiZWw6IG0udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuX2NvbnRyb2w/LnN0YXR1c0NoYW5nZXM/LnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hlY2tFcnJvcnMoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhvdXJzRmllbGQpIHRoaXMuaG91cnNGaWVsZC5pc1RpbWVQaWNrZXJGaWVsZCA9IHRydWU7XG4gICAgaWYgKHRoaXMubWludXRlc0ZpZWxkKSB0aGlzLm1pbnV0ZXNGaWVsZC5pc1RpbWVQaWNrZXJGaWVsZCA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2Vjb25kc0ZpZWxkKSB0aGlzLnNlY29uZHNGaWVsZC5pc1RpbWVQaWNrZXJGaWVsZCA9IHRydWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvbkNoYW5nZSA9IChldmVudDogYW55KSA9PiB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbikge31cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBDcHNUaW1lIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgb25GaWVsZEJsdXIoKSB7XG4gICAgdGhpcy5fY2hlY2tFcnJvcnMoKTtcbiAgICB0aGlzLmJsdXJyZWQuZW1pdCgpO1xuICB9XG5cbiAgb25GaWVsZEZvY3VzKCkge1xuICAgIHRoaXMuX2NvbnRyb2w/LmNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLmZvY3VzZWQuZW1pdCgpO1xuICB9XG5cbiAgdXBkYXRlSG91cnMoaG91cnM6IHN0cmluZykge1xuICAgIGhvdXJzID0gaG91cnMgfHwgJyc7XG4gICAgY29uc3QgdXNlcklucHV0ID0gdGhpcy5ob3Vyc0ZpZWxkPy5pbnB1dFRleHQgfHwgaG91cnM7XG4gICAgaWYgKHVzZXJJbnB1dCkge1xuICAgICAgdGhpcy5faW5pdFZhbHVlKCk7XG4gICAgICBjb25zdCBoID0gcGFyc2VJbnQodXNlcklucHV0LCAxMCk7XG4gICAgICBpZiAoIWlzTmFOKGgpICYmIHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWYgKGggPj0gMTMgJiYgaCA8PSAyMyAmJiAhdGhpcy51c2UyNEhvdXJUaW1lKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5kYXlQZXJpb2QgPSAnUE0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmFsdWU/LmhvdXJzICE9PSBob3Vycykge1xuICAgICAgaWYgKHRoaXMudmFsdWUpIHRoaXMudmFsdWUuaG91cnMgPSBob3VycztcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlVmFsdWUodGhpcy52YWx1ZSk7XG4gIH1cblxuICB1cGRhdGVNaW51dGVzKG1pbnV0ZXM6IHN0cmluZykge1xuICAgIG1pbnV0ZXMgPSBtaW51dGVzIHx8ICcnO1xuICAgIGlmIChtaW51dGVzKSB0aGlzLl9pbml0VmFsdWUoKTtcbiAgICBpZiAodGhpcy52YWx1ZT8ubWludXRlcyAhPT0gbWludXRlcykge1xuICAgICAgaWYgKHRoaXMudmFsdWUpIHRoaXMudmFsdWUubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgdXBkYXRlU2Vjb25kcyhzZWNvbmRzOiBzdHJpbmcpIHtcbiAgICBzZWNvbmRzID0gc2Vjb25kcyB8fCAnJztcbiAgICBpZiAoc2Vjb25kcykgdGhpcy5faW5pdFZhbHVlKCk7XG4gICAgaWYgKHRoaXMudmFsdWU/LnNlY29uZHMgIT09IHNlY29uZHMpIHtcbiAgICAgIGlmICh0aGlzLnZhbHVlKSB0aGlzLnZhbHVlLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIH1cbiAgICB0aGlzLl91cGRhdGVWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIHVwZGF0ZURheVBlcmlvZChkYXlQZXJpb2Q6ICdBTScgfCAnUE0nKSB7XG4gICAgaWYgKGRheVBlcmlvZCkgdGhpcy5faW5pdFZhbHVlKCk7XG4gICAgaWYgKHRoaXMudmFsdWU/LmRheVBlcmlvZCAhPT0gZGF5UGVyaW9kKSB7XG4gICAgICBpZiAodGhpcy52YWx1ZSkgdGhpcy52YWx1ZS5kYXlQZXJpb2QgPSBkYXlQZXJpb2Q7XG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgbnVtYmVyT25seShldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2hhckNvZGUgPSBldmVudC53aGljaCA/IGV2ZW50LndoaWNoIDogZXZlbnQua2V5Q29kZTtcbiAgICBpZiAoY2hhckNvZGUgPiAzMSAmJiAoY2hhckNvZGUgPCA0OCB8fCBjaGFyQ29kZSA+IDU3KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRWYWx1ZSgpIHtcbiAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB7XG4gICAgICAgIGhvdXJzOiAnJyxcbiAgICAgICAgbWludXRlczogJydcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghdGhpcy51c2UyNEhvdXJUaW1lICYmICEoJ2RheVBlcmlvZCcgaW4gdGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMudmFsdWUuZGF5UGVyaW9kID0gJ0FNJztcbiAgICB9XG4gICAgaWYgKHRoaXMud2l0aFNlY29uZHMgJiYgISgnc2Vjb25kcycgaW4gdGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMudmFsdWUuc2Vjb25kcyA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzVmFsdWVWYWxpZCgpIHtcbiAgICBpZiAoIXRoaXMudmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXRoaXMudmFsdWUuaG91cnMgfHwgIXRoaXMudmFsdWUubWludXRlcykgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLndpdGhTZWNvbmRzICYmICF0aGlzLnZhbHVlLnNlY29uZHMpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXRoaXMudXNlMjRIb3VyVGltZSAmJiAhdGhpcy52YWx1ZS5kYXlQZXJpb2QpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUVycm9ycygpIHtcbiAgICB0aGlzLmVycm9yID0gJ1RpbWUgaXMgaW52YWxpZCc7XG4gICAgdGhpcy5ob3Vyc0Vycm9yID0gdGhpcy52YWx1ZT8uaG91cnMgPyAnJyA6IHRoaXMuZXJyb3I7XG4gICAgdGhpcy5taW51dGVzRXJyb3IgPSB0aGlzLnZhbHVlPy5taW51dGVzID8gJycgOiB0aGlzLmVycm9yO1xuICAgIGlmICh0aGlzLndpdGhTZWNvbmRzKVxuICAgICAgdGhpcy5zZWNvbmRzRXJyb3IgPSB0aGlzLnZhbHVlPy5zZWNvbmRzID8gJycgOiB0aGlzLmVycm9yO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RXJyb3JzKGVycm9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgdGhpcy5ob3Vyc0Vycm9yID0gZXJyb3I7XG4gICAgdGhpcy5taW51dGVzRXJyb3IgPSBlcnJvcjtcbiAgICB0aGlzLnNlY29uZHNFcnJvciA9IHRoaXMud2l0aFNlY29uZHMgPyBlcnJvciA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tFcnJvcnMoKSB7XG4gICAgaWYgKCF0aGlzLl9jb250cm9sKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy52YWx1ZSAmJiAhdGhpcy5faXNWYWx1ZVZhbGlkKCkpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUVycm9ycygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuX2NvbnRyb2w/LmVycm9ycztcblxuICAgIGlmICghdGhpcy5fY29udHJvbD8uY29udHJvbD8udG91Y2hlZCB8fCAhZXJyb3JzKSB7XG4gICAgICB0aGlzLl9zZXRFcnJvcnMoJycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICgncmVxdWlyZWQnIGluIGVycm9ycykge1xuICAgICAgdGhpcy5fc2V0RXJyb3JzKCdGaWVsZCBpcyByZXF1aXJlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVyckFyciA9IE9iamVjdC52YWx1ZXMoZXJyb3JzKTtcbiAgICBpZiAoZXJyQXJyLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRoaXMuX3NldEVycm9ycygnJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJBcnIuZmluZCgobXNnKSA9PiB0eXBlb2YgbXNnID09PSAnc3RyaW5nJyk7XG5cbiAgICB0aGlzLl9zZXRFcnJvcnMobWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdEhvdXJzT3B0aW9ucygpIHtcbiAgICBjb25zdCBnZXRIb3VyQWxpYXMgPSAoaDogbnVtYmVyKSA9PiB7XG4gICAgICBoID0gaCA9PT0gMTIgPyAwIDogaCArIDEyO1xuICAgICAgcmV0dXJuIGgudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIH07XG5cbiAgICB0aGlzLmhvdXJzT3B0aW9ucyA9IChcbiAgICAgIHRoaXMudXNlMjRIb3VyVGltZSA/IHRoaXMuX2dldFJhbmdlKDAsIDIzKSA6IHRoaXMuX2dldFJhbmdlKDEsIDEyKVxuICAgICkubWFwKChoKSA9PiB7XG4gICAgICBjb25zdCByZXM6IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgYWxpYXM/OiBzdHJpbmcgfSA9IHtcbiAgICAgICAgdmFsdWU6IGgudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxuICAgICAgICBsYWJlbDogaC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgIH07XG4gICAgICBpZiAoIXRoaXMudXNlMjRIb3VyVGltZSkgcmVzLmFsaWFzID0gZ2V0SG91ckFsaWFzKGgpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVZhbHVlKHZhbHVlOiBDcHNUaW1lIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZC5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJhbmdlKHN0YXJ0RnJvbTogbnVtYmVyLCB1bnRpbDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICB7IGxlbmd0aDogdW50aWwgKyAxIC0gc3RhcnRGcm9tIH0sXG4gICAgICAoXywgaykgPT4gayArIHN0YXJ0RnJvbVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcHMtdGltZXBpY2tlclwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcHMtdGltZXBpY2tlci1sYWJlbFwiXG4gICAgW25nQ2xhc3NdPVwieyAnY3BzLXRpbWVwaWNrZXItbGFiZWwtZGlzYWJsZWQnOiBkaXNhYmxlZCB9XCJcbiAgICAqbmdJZj1cImxhYmVsXCI+XG4gICAgPGxhYmVsPnt7IGxhYmVsIH19PC9sYWJlbD5cbiAgICA8Y3BzLWluZm8tY2lyY2xlXG4gICAgICAqbmdJZj1cImluZm9Ub29sdGlwXCJcbiAgICAgIGNsYXNzPVwiY3BzLXRpbWVwaWNrZXItbGFiZWwtaW5mby1jaXJjbGVcIlxuICAgICAgc2l6ZT1cInhzbWFsbFwiXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cImluZm9Ub29sdGlwUG9zaXRpb25cIlxuICAgICAgW3Rvb2x0aXBDb250ZW50Q2xhc3NdPVwiaW5mb1Rvb2x0aXBDbGFzc1wiXG4gICAgICBbdG9vbHRpcE1heFdpZHRoXT1cImluZm9Ub29sdGlwTWF4V2lkdGhcIlxuICAgICAgW3Rvb2x0aXBQZXJzaXN0ZW50XT1cImluZm9Ub29sdGlwUGVyc2lzdGVudFwiXG4gICAgICBbdG9vbHRpcFRleHRdPVwiaW5mb1Rvb2x0aXBcIj5cbiAgICA8L2Nwcy1pbmZvLWNpcmNsZT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjcHMtdGltZXBpY2tlci1ib2R5XCI+XG4gICAgPGNwcy1hdXRvY29tcGxldGVcbiAgICAgICNob3Vyc0ZpZWxkXG4gICAgICAoa2V5cHJlc3MpPVwibnVtYmVyT25seSgkZXZlbnQpXCJcbiAgICAgIHdpZHRoPVwiNjBcIlxuICAgICAgW2VtcHR5T3B0aW9uSW5kZXhdPVwibWFuZGF0b3J5VmFsdWUgPyAwIDogLTFcIlxuICAgICAgW29wdGlvbnNdPVwiaG91cnNPcHRpb25zXCJcbiAgICAgIFt3aXRoT3B0aW9uc0FsaWFzZXNdPVwiIXVzZTI0SG91clRpbWVcIlxuICAgICAgW3VzZU9wdGlvbnNBbGlhc2VzV2hlbk5vTWF0Y2hdPVwidHJ1ZVwiXG4gICAgICBbaGlkZURldGFpbHNdPVwidHJ1ZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW3Nob3dDaGV2cm9uXT1cImZhbHNlXCJcbiAgICAgIFtzaG93RW1wdHlNZXNzYWdlXT1cImZhbHNlXCJcbiAgICAgIChmb2N1c2VkKT1cIm9uRmllbGRGb2N1cygpXCJcbiAgICAgIChibHVycmVkKT1cIm9uRmllbGRCbHVyKClcIlxuICAgICAgW3JldHVybk9iamVjdF09XCJmYWxzZVwiXG4gICAgICBbdmFsdWVdPVwidmFsdWU/LmhvdXJzXCJcbiAgICAgICh2YWx1ZUNoYW5nZWQpPVwidXBkYXRlSG91cnMoJGV2ZW50KVwiXG4gICAgICBbZXh0ZXJuYWxFcnJvcl09XCJob3Vyc0Vycm9yXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiSEhcIj48L2Nwcy1hdXRvY29tcGxldGU+XG4gICAgPHNwYW4gY2xhc3M9XCJjcHMtdGltZXBpY2tlci1kZWxpbWl0ZXJcIj46PC9zcGFuPlxuICAgIDxjcHMtYXV0b2NvbXBsZXRlXG4gICAgICAjbWludXRlc0ZpZWxkXG4gICAgICAoa2V5cHJlc3MpPVwibnVtYmVyT25seSgkZXZlbnQpXCJcbiAgICAgIHdpZHRoPVwiNjBcIlxuICAgICAgW2VtcHR5T3B0aW9uSW5kZXhdPVwibWFuZGF0b3J5VmFsdWUgPyAwIDogLTFcIlxuICAgICAgW29wdGlvbnNdPVwibWludXRlc09wdGlvbnNcIlxuICAgICAgW2hpZGVEZXRhaWxzXT1cInRydWVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtzaG93Q2hldnJvbl09XCJmYWxzZVwiXG4gICAgICBbc2hvd0VtcHR5TWVzc2FnZV09XCJmYWxzZVwiXG4gICAgICAoZm9jdXNlZCk9XCJvbkZpZWxkRm9jdXMoKVwiXG4gICAgICAoYmx1cnJlZCk9XCJvbkZpZWxkQmx1cigpXCJcbiAgICAgIFtyZXR1cm5PYmplY3RdPVwiZmFsc2VcIlxuICAgICAgW3ZhbHVlXT1cInZhbHVlPy5taW51dGVzXCJcbiAgICAgICh2YWx1ZUNoYW5nZWQpPVwidXBkYXRlTWludXRlcygkZXZlbnQpXCJcbiAgICAgIFtleHRlcm5hbEVycm9yXT1cIm1pbnV0ZXNFcnJvclwiXG4gICAgICBwbGFjZWhvbGRlcj1cIk1NXCI+PC9jcHMtYXV0b2NvbXBsZXRlPlxuICAgIDxzcGFuICpuZ0lmPVwid2l0aFNlY29uZHNcIiBjbGFzcz1cImNwcy10aW1lcGlja2VyLWRlbGltaXRlclwiPjo8L3NwYW4+XG4gICAgPGNwcy1hdXRvY29tcGxldGVcbiAgICAgICpuZ0lmPVwid2l0aFNlY29uZHNcIlxuICAgICAgI3NlY29uZHNGaWVsZFxuICAgICAgKGtleXByZXNzKT1cIm51bWJlck9ubHkoJGV2ZW50KVwiXG4gICAgICB3aWR0aD1cIjYwXCJcbiAgICAgIFtlbXB0eU9wdGlvbkluZGV4XT1cIm1hbmRhdG9yeVZhbHVlID8gMCA6IC0xXCJcbiAgICAgIFtvcHRpb25zXT1cInNlY29uZHNPcHRpb25zXCJcbiAgICAgIFtoaWRlRGV0YWlsc109XCJ0cnVlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbc2hvd0NoZXZyb25dPVwiZmFsc2VcIlxuICAgICAgW3Nob3dFbXB0eU1lc3NhZ2VdPVwiZmFsc2VcIlxuICAgICAgKGZvY3VzZWQpPVwib25GaWVsZEZvY3VzKClcIlxuICAgICAgKGJsdXJyZWQpPVwib25GaWVsZEJsdXIoKVwiXG4gICAgICBbcmV0dXJuT2JqZWN0XT1cImZhbHNlXCJcbiAgICAgIFt2YWx1ZV09XCJ2YWx1ZT8uc2Vjb25kc1wiXG4gICAgICAodmFsdWVDaGFuZ2VkKT1cInVwZGF0ZVNlY29uZHMoJGV2ZW50KVwiXG4gICAgICBbZXh0ZXJuYWxFcnJvcl09XCJzZWNvbmRzRXJyb3JcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJTU1wiPjwvY3BzLWF1dG9jb21wbGV0ZT5cbiAgICA8Y3BzLWJ1dHRvbi10b2dnbGVcbiAgICAgICpuZ0lmPVwiIXVzZTI0SG91clRpbWVcIlxuICAgICAgY2xhc3M9XCJjcHMtdGltZXBpY2tlci1hbS1wbS1zZWxlY3RvclwiXG4gICAgICBbb3B0aW9uc109XCJkYXlQZXJpb2RPcHRpb25zXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbdmFsdWVdPVwidmFsdWU/LmRheVBlcmlvZCB8fCAnQU0nXCJcbiAgICAgICh2YWx1ZUNoYW5nZWQpPVwidXBkYXRlRGF5UGVyaW9kKCRldmVudClcIj5cbiAgICA8L2Nwcy1idXR0b24tdG9nZ2xlPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cIiFlcnJvciAmJiAhaGlkZURldGFpbHNcIiBjbGFzcz1cImNwcy10aW1lcGlja2VyLWhpbnRcIj5cbiAgICB7eyBoaW50IH19XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiZXJyb3IgJiYgIWhpZGVEZXRhaWxzXCIgY2xhc3M9XCJjcHMtdGltZXBpY2tlci1lcnJvclwiPlxuICAgIHt7IGVycm9yIH19XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|