@openmrs/ngx-formentry 19.0.1-pre.492 → 19.0.1-pre.504
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/components/input/label.component.d.ts +1 -1
- package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +1 -1
- package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +1 -1
- package/components/number-input/number-input.component.d.ts +1 -1
- package/components/select/select.component.d.ts +1 -1
- package/fesm2022/openmrs-ngx-formentry.mjs +364 -346
- package/fesm2022/openmrs-ngx-formentry.mjs.map +1 -1
- package/form-entry/helpers/js-expression-helper.d.ts +1 -1
- package/package.json +15 -16
- package/esm2022/abstract-controls-extension/afe-control-type.mjs +0 -8
- package/esm2022/abstract-controls-extension/afe-form-array.mjs +0 -89
- package/esm2022/abstract-controls-extension/afe-form-control.mjs +0 -91
- package/esm2022/abstract-controls-extension/afe-form-group.mjs +0 -66
- package/esm2022/abstract-controls-extension/control-extensions.mjs +0 -5
- package/esm2022/abstract-controls-extension/index.mjs +0 -5
- package/esm2022/abstract-controls-extension/value-change.listener.mjs +0 -2
- package/esm2022/change-tracking/control-relation.mjs +0 -42
- package/esm2022/change-tracking/control-relations.mjs +0 -32
- package/esm2022/components/afe-ng-select.component.mjs +0 -101
- package/esm2022/components/appointments-overview/appointments-overview.component.mjs +0 -116
- package/esm2022/components/check-box/checkbox.component.mjs +0 -110
- package/esm2022/components/check-box/checkbox.module.mjs +0 -19
- package/esm2022/components/custom-component-wrapper/custom-component-wrapper.component.mjs +0 -21
- package/esm2022/components/custom-component-wrapper/custom-component-wrapper.module.mjs +0 -22
- package/esm2022/components/custom-control-wrapper/custom-control-wrapper.component.mjs +0 -68
- package/esm2022/components/custom-control-wrapper/custom-control-wrapper.module.mjs +0 -23
- package/esm2022/components/date-time-picker/date-picker/date-picker.component.mjs +0 -188
- package/esm2022/components/date-time-picker/date-time-picker.component.mjs +0 -115
- package/esm2022/components/date-time-picker/date-time-picker.module.mjs +0 -48
- package/esm2022/components/date-time-picker/index.mjs +0 -9
- package/esm2022/components/date-time-picker/picker-modal/modal.component.mjs +0 -25
- package/esm2022/components/date-time-picker/pipes/moment.pipe.mjs +0 -17
- package/esm2022/components/date-time-picker/time-picker/time-picker.component.mjs +0 -121
- package/esm2022/components/file-upload/file-upload.component.mjs +0 -109
- package/esm2022/components/file-upload/file-upload.module.mjs +0 -37
- package/esm2022/components/file-upload/secure.pipe.mjs +0 -101
- package/esm2022/components/input/input.directive.mjs +0 -78
- package/esm2022/components/input/input.module.mjs +0 -23
- package/esm2022/components/input/label.component.mjs +0 -263
- package/esm2022/components/input/text-area.directive.mjs +0 -58
- package/esm2022/components/ngx-datetime-picker/ngx-datetime-picker.component.mjs +0 -87
- package/esm2022/components/ngx-datetime-picker/ngx-datetime-picker.module.mjs +0 -40
- package/esm2022/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.mjs +0 -114
- package/esm2022/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.mjs +0 -7
- package/esm2022/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.mjs +0 -347
- package/esm2022/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.mjs +0 -16
- package/esm2022/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.mjs +0 -39
- package/esm2022/components/ngx-pick-datetime/lib/date-time/calendar-body.component.mjs +0 -142
- package/esm2022/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.mjs +0 -439
- package/esm2022/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.mjs +0 -373
- package/esm2022/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.mjs +0 -367
- package/esm2022/components/ngx-pick-datetime/lib/date-time/calendar.component.mjs +0 -342
- package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.mjs +0 -259
- package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.mjs +0 -392
- package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.mjs +0 -614
- package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.mjs +0 -65
- package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.mjs +0 -70
- package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.mjs +0 -21
- package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.mjs +0 -522
- package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time.class.mjs +0 -166
- package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time.module.mjs +0 -97
- package/esm2022/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.mjs +0 -28
- package/esm2022/components/ngx-pick-datetime/lib/date-time/timer-box.component.mjs +0 -90
- package/esm2022/components/ngx-pick-datetime/lib/date-time/timer.component.mjs +0 -292
- package/esm2022/components/ngx-pick-datetime/lib/dialog/dialog-config.class.mjs +0 -56
- package/esm2022/components/ngx-pick-datetime/lib/dialog/dialog-container.component.mjs +0 -243
- package/esm2022/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.mjs +0 -119
- package/esm2022/components/ngx-pick-datetime/lib/dialog/dialog.module.mjs +0 -26
- package/esm2022/components/ngx-pick-datetime/lib/dialog/dialog.service.mjs +0 -233
- package/esm2022/components/ngx-pick-datetime/lib/utils/index.mjs +0 -5
- package/esm2022/components/ngx-pick-datetime/lib/utils/object.utils.mjs +0 -26
- package/esm2022/components/ngx-remote-select/ngx-remote-select.component.mjs +0 -151
- package/esm2022/components/ngx-remote-select/ngx-remote-select.module.mjs +0 -22
- package/esm2022/components/ngx-tabset/components/ngx-tab-set.component.mjs +0 -74
- package/esm2022/components/ngx-tabset/components/tab.component.mjs +0 -33
- package/esm2022/components/ngx-tabset/directives/hover-class.directive.mjs +0 -30
- package/esm2022/components/ngx-tabset/modules/ngx-tabset.module.mjs +0 -38
- package/esm2022/components/number-input/number-input.component.mjs +0 -254
- package/esm2022/components/number-input/number-input.module.mjs +0 -21
- package/esm2022/components/number-input/number.directive.mjs +0 -22
- package/esm2022/components/radio-button/radio.component.mjs +0 -98
- package/esm2022/components/radio-button/radio.module.mjs +0 -19
- package/esm2022/components/select/optgroup.directive.mjs +0 -19
- package/esm2022/components/select/option.directive.mjs +0 -19
- package/esm2022/components/select/select.component.mjs +0 -182
- package/esm2022/components/select/select.module.mjs +0 -23
- package/esm2022/components/workspace-launcher/workspace-launcher.component.mjs +0 -26
- package/esm2022/components/workspace-launcher/workspace-launcher.module.mjs +0 -19
- package/esm2022/form-entry/control-alerts/alert-helpers.mjs +0 -40
- package/esm2022/form-entry/control-alerts/can-generate-alert.mjs +0 -2
- package/esm2022/form-entry/control-calculators/can-calculate.mjs +0 -2
- package/esm2022/form-entry/control-hiders-disablers/can-disable.mjs +0 -2
- package/esm2022/form-entry/control-hiders-disablers/can-hide.mjs +0 -2
- package/esm2022/form-entry/control-hiders-disablers/disabler-helper.mjs +0 -32
- package/esm2022/form-entry/control-hiders-disablers/hider-helpers.mjs +0 -41
- package/esm2022/form-entry/data-sources/data-sources.mjs +0 -30
- package/esm2022/form-entry/data-sources/dummy-data-source.mjs +0 -104
- package/esm2022/form-entry/directives/collapse-animations.mjs +0 -11
- package/esm2022/form-entry/directives/collapse.directive.mjs +0 -172
- package/esm2022/form-entry/directives/historical-value.directive.mjs +0 -68
- package/esm2022/form-entry/error-renderer/error-renderer.component.mjs +0 -53
- package/esm2022/form-entry/expression-runner/expression-runner.mjs +0 -170
- package/esm2022/form-entry/form-entry.module.mjs +0 -188
- package/esm2022/form-entry/form-factory/control-relations.factory.mjs +0 -238
- package/esm2022/form-entry/form-factory/form-control.service.mjs +0 -118
- package/esm2022/form-entry/form-factory/form-node.mjs +0 -99
- package/esm2022/form-entry/form-factory/form.factory.mjs +0 -143
- package/esm2022/form-entry/form-factory/form.mjs +0 -190
- package/esm2022/form-entry/form-factory/hiders-disablers.factory.mjs +0 -68
- package/esm2022/form-entry/form-factory/index.mjs +0 -7
- package/esm2022/form-entry/form-factory/question.factory.mjs +0 -1123
- package/esm2022/form-entry/form-factory/show-messages.factory.mjs +0 -31
- package/esm2022/form-entry/form-factory/validation.factory.mjs +0 -182
- package/esm2022/form-entry/form-renderer/form-renderer.component.mjs +0 -277
- package/esm2022/form-entry/helpers/historical-expression-helper-service.mjs +0 -42
- package/esm2022/form-entry/helpers/historical-field-helper-service.mjs +0 -39
- package/esm2022/form-entry/helpers/js-expression-helper.mjs +0 -322
- package/esm2022/form-entry/helpers/risk-dataset-table.mjs +0 -247
- package/esm2022/form-entry/pipes/time-ago.pipe.mjs +0 -110
- package/esm2022/form-entry/question-models/checkbox.model.mjs +0 -11
- package/esm2022/form-entry/question-models/conditional-validation.model.mjs +0 -9
- package/esm2022/form-entry/question-models/custom-control-question.model.mjs +0 -10
- package/esm2022/form-entry/question-models/date-question.mjs +0 -12
- package/esm2022/form-entry/question-models/date-validation.model.mjs +0 -10
- package/esm2022/form-entry/question-models/decimal-validation.model.mjs +0 -19
- package/esm2022/form-entry/question-models/diagnosis-question.mjs +0 -12
- package/esm2022/form-entry/question-models/disallow-decimals-validation.model.mjs +0 -18
- package/esm2022/form-entry/question-models/file-upload-question.mjs +0 -13
- package/esm2022/form-entry/question-models/group-question.mjs +0 -12
- package/esm2022/form-entry/question-models/index.mjs +0 -24
- package/esm2022/form-entry/question-models/interfaces/base-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/checkbox-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/data-source.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/date-question-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/diagnosis-question-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/file-upload-question-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/group-question-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/multi-select-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/nested-questions.mjs +0 -7
- package/esm2022/form-entry/question-models/interfaces/radio-button-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/remote-select-question-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/repeating-question-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/select-option.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/select-question-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/test-order-question-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/text-area-question-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/text-question-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/ui-select-question-options.mjs +0 -2
- package/esm2022/form-entry/question-models/interfaces/workspace-launcher-options.mjs +0 -2
- package/esm2022/form-entry/question-models/js-expression-validation.model.mjs +0 -8
- package/esm2022/form-entry/question-models/max-length-validation.model.mjs +0 -9
- package/esm2022/form-entry/question-models/max-validation.model.mjs +0 -9
- package/esm2022/form-entry/question-models/min-length-validation.model.mjs +0 -9
- package/esm2022/form-entry/question-models/min-validation.model.mjs +0 -9
- package/esm2022/form-entry/question-models/models.mjs +0 -13
- package/esm2022/form-entry/question-models/multi-select-question.mjs +0 -11
- package/esm2022/form-entry/question-models/pair.model.mjs +0 -7
- package/esm2022/form-entry/question-models/question-base.mjs +0 -26
- package/esm2022/form-entry/question-models/radio-button.model.mjs +0 -12
- package/esm2022/form-entry/question-models/remote-select-question.mjs +0 -12
- package/esm2022/form-entry/question-models/rendering-type.mjs +0 -9
- package/esm2022/form-entry/question-models/repeating-question.mjs +0 -11
- package/esm2022/form-entry/question-models/select-option.mjs +0 -7
- package/esm2022/form-entry/question-models/select-question.mjs +0 -12
- package/esm2022/form-entry/question-models/test-order-question.mjs +0 -15
- package/esm2022/form-entry/question-models/text-area-input-question.mjs +0 -13
- package/esm2022/form-entry/question-models/text-input-question.mjs +0 -10
- package/esm2022/form-entry/question-models/ui-select-question.mjs +0 -11
- package/esm2022/form-entry/question-models/validation.model.mjs +0 -7
- package/esm2022/form-entry/question-models/workspace-launcher.model.mjs +0 -15
- package/esm2022/form-entry/services/debug-mode.service.mjs +0 -24
- package/esm2022/form-entry/services/form-errors.service.mjs +0 -21
- package/esm2022/form-entry/services/form-schema-compiler.service.mjs +0 -262
- package/esm2022/form-entry/services/historical-encounter-data.service.mjs +0 -172
- package/esm2022/form-entry/validators/conditional-answered.validator.mjs +0 -46
- package/esm2022/form-entry/validators/conditional-required.validator.mjs +0 -40
- package/esm2022/form-entry/validators/date.validator.mjs +0 -18
- package/esm2022/form-entry/validators/disallow-decimals.validator.mjs +0 -15
- package/esm2022/form-entry/validators/future-date-restriction.validator.mjs +0 -21
- package/esm2022/form-entry/validators/js-expression.validator.mjs +0 -26
- package/esm2022/form-entry/validators/max-date.validator.mjs +0 -23
- package/esm2022/form-entry/validators/max-length.validator.mjs +0 -17
- package/esm2022/form-entry/validators/max.validator.mjs +0 -21
- package/esm2022/form-entry/validators/min-date.validator.mjs +0 -23
- package/esm2022/form-entry/validators/min-length.validator.mjs +0 -17
- package/esm2022/form-entry/validators/min.validator.mjs +0 -21
- package/esm2022/form-entry/validators/required.validator.mjs +0 -11
- package/esm2022/form-entry/validators/validations.mjs +0 -5
- package/esm2022/form-entry/value-adapters/diagnosis.adapter.mjs +0 -241
- package/esm2022/form-entry/value-adapters/encounter.adapter.mjs +0 -190
- package/esm2022/form-entry/value-adapters/obs-adapter-helper.mjs +0 -559
- package/esm2022/form-entry/value-adapters/obs.adapter.mjs +0 -541
- package/esm2022/form-entry/value-adapters/order.adapter.mjs +0 -186
- package/esm2022/form-entry/value-adapters/patient-identifier.adapter.mjs +0 -77
- package/esm2022/form-entry/value-adapters/person-attribute.adapter.mjs +0 -88
- package/esm2022/form-entry/value-adapters/value.adapter.mjs +0 -2
- package/esm2022/lib/index.mjs +0 -59
- package/esm2022/openmrs-ngx-formentry.mjs +0 -5
- package/esm2022/public_api.mjs +0 -2
- package/esm2022/shared.module.mjs +0 -21
package/esm2022/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.mjs
DELETED
|
@@ -1,392 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Optional, ViewChild } from '@angular/core';
|
|
2
|
-
import { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';
|
|
3
|
-
import { Subject } from 'rxjs';
|
|
4
|
-
import { DateTimeAdapter } from './adapter/date-time-adapter.class';
|
|
5
|
-
import { OwlCalendarComponent } from './calendar.component';
|
|
6
|
-
import { OwlDateTimeIntl } from './date-time-picker-intl.service';
|
|
7
|
-
import { owlDateTimePickerAnimations } from './date-time-picker.animations';
|
|
8
|
-
import { OwlTimerComponent } from './timer.component';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "./date-time-picker-intl.service";
|
|
11
|
-
import * as i2 from "./adapter/date-time-adapter.class";
|
|
12
|
-
import * as i3 from "@angular/common";
|
|
13
|
-
import * as i4 from "@angular/cdk/a11y";
|
|
14
|
-
import * as i5 from "./timer.component";
|
|
15
|
-
import * as i6 from "./calendar.component";
|
|
16
|
-
export class OwlDateTimeContainerComponent {
|
|
17
|
-
get owlDTContainerClass() {
|
|
18
|
-
return true;
|
|
19
|
-
}
|
|
20
|
-
get owlDTPopupContainerClass() {
|
|
21
|
-
return this.picker.pickerMode === 'popup';
|
|
22
|
-
}
|
|
23
|
-
get owlDTDialogContainerClass() {
|
|
24
|
-
return this.picker.pickerMode === 'dialog';
|
|
25
|
-
}
|
|
26
|
-
get owlDTInlineContainerClass() {
|
|
27
|
-
return this.picker.pickerMode === 'inline';
|
|
28
|
-
}
|
|
29
|
-
get owlDTContainerDisabledClass() {
|
|
30
|
-
return this.picker.disabled;
|
|
31
|
-
}
|
|
32
|
-
get owlDTContainerId() {
|
|
33
|
-
return this.picker.id;
|
|
34
|
-
}
|
|
35
|
-
get owlDTContainerAnimation() {
|
|
36
|
-
return this.picker.pickerMode === 'inline' ? '' : 'enter';
|
|
37
|
-
}
|
|
38
|
-
handleContainerAnimationDone(event) {
|
|
39
|
-
const toState = event.toState;
|
|
40
|
-
if (toState === 'enter') {
|
|
41
|
-
this.pickerOpened$.next(true);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
get hidePickerStream() {
|
|
45
|
-
return this.hidePicker$.asObservable();
|
|
46
|
-
}
|
|
47
|
-
get confirmSelectedStream() {
|
|
48
|
-
return this.confirmSelected$.asObservable();
|
|
49
|
-
}
|
|
50
|
-
get pickerOpenedStream() {
|
|
51
|
-
return this.pickerOpened$.asObservable();
|
|
52
|
-
}
|
|
53
|
-
get pickerMoment() {
|
|
54
|
-
return this._clamPickerMoment;
|
|
55
|
-
}
|
|
56
|
-
set pickerMoment(value) {
|
|
57
|
-
if (value) {
|
|
58
|
-
this._clamPickerMoment = this.dateTimeAdapter.clampDate(value, this.picker.minDateTime, this.picker.maxDateTime);
|
|
59
|
-
}
|
|
60
|
-
this.cdRef.markForCheck();
|
|
61
|
-
}
|
|
62
|
-
get pickerType() {
|
|
63
|
-
return this.picker.pickerType;
|
|
64
|
-
}
|
|
65
|
-
get cancelLabel() {
|
|
66
|
-
return this.pickerIntl.cancelBtnLabel;
|
|
67
|
-
}
|
|
68
|
-
get setLabel() {
|
|
69
|
-
return this.pickerIntl.setBtnLabel;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* The range 'from' label
|
|
73
|
-
* */
|
|
74
|
-
get fromLabel() {
|
|
75
|
-
return this.pickerIntl.rangeFromLabel;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* The range 'to' label
|
|
79
|
-
* */
|
|
80
|
-
get toLabel() {
|
|
81
|
-
return this.pickerIntl.rangeToLabel;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* The range 'from' formatted value
|
|
85
|
-
* */
|
|
86
|
-
get fromFormattedValue() {
|
|
87
|
-
const value = this.picker.selecteds[0];
|
|
88
|
-
return value
|
|
89
|
-
? this.dateTimeAdapter.format(value, this.picker.formatString)
|
|
90
|
-
: '';
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* The range 'to' formatted value
|
|
94
|
-
* */
|
|
95
|
-
get toFormattedValue() {
|
|
96
|
-
const value = this.picker.selecteds[1];
|
|
97
|
-
return value
|
|
98
|
-
? this.dateTimeAdapter.format(value, this.picker.formatString)
|
|
99
|
-
: '';
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Cases in which the control buttons show in the picker
|
|
103
|
-
* 1) picker mode is 'dialog'
|
|
104
|
-
* 2) picker type is NOT 'calendar' and the picker mode is NOT 'inline'
|
|
105
|
-
* */
|
|
106
|
-
get showControlButtons() {
|
|
107
|
-
return (this.picker.pickerMode === 'dialog' ||
|
|
108
|
-
(this.picker.pickerType !== 'calendar' &&
|
|
109
|
-
this.picker.pickerMode !== 'inline'));
|
|
110
|
-
}
|
|
111
|
-
get containerElm() {
|
|
112
|
-
return this.elmRef.nativeElement;
|
|
113
|
-
}
|
|
114
|
-
constructor(cdRef, elmRef, pickerIntl, dateTimeAdapter) {
|
|
115
|
-
this.cdRef = cdRef;
|
|
116
|
-
this.elmRef = elmRef;
|
|
117
|
-
this.pickerIntl = pickerIntl;
|
|
118
|
-
this.dateTimeAdapter = dateTimeAdapter;
|
|
119
|
-
this.activeSelectedIndex = 0; // The current active SelectedIndex in range select mode (0: 'from', 1: 'to')
|
|
120
|
-
/**
|
|
121
|
-
* Stream emits when try to hide picker
|
|
122
|
-
* */
|
|
123
|
-
this.hidePicker$ = new Subject();
|
|
124
|
-
/**
|
|
125
|
-
* Stream emits when try to confirm the selected value
|
|
126
|
-
* */
|
|
127
|
-
this.confirmSelected$ = new Subject();
|
|
128
|
-
this.pickerOpened$ = new Subject();
|
|
129
|
-
}
|
|
130
|
-
ngAfterContentInit() {
|
|
131
|
-
this.initPicker();
|
|
132
|
-
}
|
|
133
|
-
ngAfterViewInit() {
|
|
134
|
-
this.focusPicker();
|
|
135
|
-
}
|
|
136
|
-
dateSelected(date) {
|
|
137
|
-
let result;
|
|
138
|
-
if (this.picker.isInSingleMode) {
|
|
139
|
-
result = this.dateSelectedInSingleMode(date);
|
|
140
|
-
if (result) {
|
|
141
|
-
this.pickerMoment = result;
|
|
142
|
-
this.picker.select(result);
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
// we close the picker when result is null and pickerType is calendar.
|
|
146
|
-
if (this.pickerType === 'calendar') {
|
|
147
|
-
this.hidePicker$.next(null);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
if (this.picker.isInRangeMode) {
|
|
153
|
-
result = this.dateSelectedInRangeMode(date);
|
|
154
|
-
if (result) {
|
|
155
|
-
this.pickerMoment = result[this.activeSelectedIndex];
|
|
156
|
-
this.picker.select(result);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
timeSelected(time) {
|
|
161
|
-
this.pickerMoment = this.dateTimeAdapter.clone(time);
|
|
162
|
-
if (!this.picker.dateTimeChecker(this.pickerMoment)) {
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
if (this.picker.isInSingleMode) {
|
|
166
|
-
this.picker.select(this.pickerMoment);
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
if (this.picker.isInRangeMode) {
|
|
170
|
-
const selecteds = [...this.picker.selecteds];
|
|
171
|
-
// check if the 'from' is after 'to' or 'to'is before 'from'
|
|
172
|
-
// In this case, we set both the 'from' and 'to' the same value
|
|
173
|
-
if ((this.activeSelectedIndex === 0 &&
|
|
174
|
-
selecteds[1] &&
|
|
175
|
-
this.dateTimeAdapter.compare(this.pickerMoment, selecteds[1]) ===
|
|
176
|
-
1) ||
|
|
177
|
-
(this.activeSelectedIndex === 1 &&
|
|
178
|
-
selecteds[0] &&
|
|
179
|
-
this.dateTimeAdapter.compare(this.pickerMoment, selecteds[0]) === -1)) {
|
|
180
|
-
selecteds[0] = this.pickerMoment;
|
|
181
|
-
selecteds[1] = this.pickerMoment;
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
selecteds[this.activeSelectedIndex] = this.pickerMoment;
|
|
185
|
-
}
|
|
186
|
-
this.picker.select(selecteds);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Handle click on cancel button
|
|
191
|
-
*/
|
|
192
|
-
onCancelClicked(event) {
|
|
193
|
-
this.hidePicker$.next(null);
|
|
194
|
-
event.preventDefault();
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Handle click on set button
|
|
199
|
-
*/
|
|
200
|
-
onSetClicked(event) {
|
|
201
|
-
if (!this.picker.dateTimeChecker(this.pickerMoment)) {
|
|
202
|
-
this.hidePicker$.next(null);
|
|
203
|
-
event.preventDefault();
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
this.confirmSelected$.next(event);
|
|
207
|
-
event.preventDefault();
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Handle click on inform radio group
|
|
212
|
-
*/
|
|
213
|
-
handleClickOnInfoGroup(event, index) {
|
|
214
|
-
this.setActiveSelectedIndex(index);
|
|
215
|
-
event.preventDefault();
|
|
216
|
-
event.stopPropagation();
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Handle click on inform radio group
|
|
220
|
-
*/
|
|
221
|
-
handleKeydownOnInfoGroup(event, next, index) {
|
|
222
|
-
switch (event.keyCode) {
|
|
223
|
-
case DOWN_ARROW:
|
|
224
|
-
case RIGHT_ARROW:
|
|
225
|
-
case UP_ARROW:
|
|
226
|
-
case LEFT_ARROW:
|
|
227
|
-
next.focus();
|
|
228
|
-
this.setActiveSelectedIndex(index === 0 ? 1 : 0);
|
|
229
|
-
event.preventDefault();
|
|
230
|
-
event.stopPropagation();
|
|
231
|
-
break;
|
|
232
|
-
case SPACE:
|
|
233
|
-
this.setActiveSelectedIndex(index);
|
|
234
|
-
event.preventDefault();
|
|
235
|
-
event.stopPropagation();
|
|
236
|
-
break;
|
|
237
|
-
default:
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Set the value of activeSelectedIndex
|
|
243
|
-
*/
|
|
244
|
-
setActiveSelectedIndex(index) {
|
|
245
|
-
if (this.picker.selectMode === 'range' &&
|
|
246
|
-
this.activeSelectedIndex !== index) {
|
|
247
|
-
this.activeSelectedIndex = index;
|
|
248
|
-
const selected = this.picker.selecteds[this.activeSelectedIndex];
|
|
249
|
-
if (this.picker.selecteds && selected) {
|
|
250
|
-
this.pickerMoment = this.dateTimeAdapter.clone(selected);
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
initPicker() {
|
|
256
|
-
this.pickerMoment = this.picker.startAt || this.dateTimeAdapter.now();
|
|
257
|
-
this.activeSelectedIndex = this.picker.selectMode === 'rangeTo' ? 1 : 0;
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Select calendar date in single mode,
|
|
261
|
-
* it returns null when date is not selected.
|
|
262
|
-
*/
|
|
263
|
-
dateSelectedInSingleMode(date) {
|
|
264
|
-
if (this.dateTimeAdapter.isSameDay(date, this.picker.selected)) {
|
|
265
|
-
return null;
|
|
266
|
-
}
|
|
267
|
-
return this.updateAndCheckCalendarDate(date);
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* Select dates in range Mode
|
|
271
|
-
*/
|
|
272
|
-
dateSelectedInRangeMode(date) {
|
|
273
|
-
let from = this.picker.selecteds[0];
|
|
274
|
-
let to = this.picker.selecteds[1];
|
|
275
|
-
const result = this.updateAndCheckCalendarDate(date);
|
|
276
|
-
if (!result) {
|
|
277
|
-
return null;
|
|
278
|
-
}
|
|
279
|
-
// if the given calendar day is after or equal to 'from',
|
|
280
|
-
// set ths given date as 'to'
|
|
281
|
-
// otherwise, set it as 'from' and set 'to' to null
|
|
282
|
-
if (this.picker.selectMode === 'range') {
|
|
283
|
-
if (this.picker.selecteds &&
|
|
284
|
-
this.picker.selecteds.length &&
|
|
285
|
-
!to &&
|
|
286
|
-
from &&
|
|
287
|
-
this.dateTimeAdapter.differenceInCalendarDays(result, from) >= 0) {
|
|
288
|
-
to = result;
|
|
289
|
-
this.activeSelectedIndex = 1;
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
from = result;
|
|
293
|
-
to = null;
|
|
294
|
-
this.activeSelectedIndex = 0;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
else if (this.picker.selectMode === 'rangeFrom') {
|
|
298
|
-
from = result;
|
|
299
|
-
// if the from value is after the to value, set the to value as null
|
|
300
|
-
if (to && this.dateTimeAdapter.compare(from, to) > 0) {
|
|
301
|
-
to = null;
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
else if (this.picker.selectMode === 'rangeTo') {
|
|
305
|
-
to = result;
|
|
306
|
-
// if the from value is after the to value, set the from value as null
|
|
307
|
-
if (from && this.dateTimeAdapter.compare(from, to) > 0) {
|
|
308
|
-
from = null;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
return [from, to];
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Update the given calendar date's time and check if it is valid
|
|
315
|
-
* Because the calendar date has 00:00:00 as default time, if the picker type is 'both',
|
|
316
|
-
* we need to update the given calendar date's time before selecting it.
|
|
317
|
-
* if it is valid, return the updated dateTime
|
|
318
|
-
* if it is not valid, return null
|
|
319
|
-
*/
|
|
320
|
-
updateAndCheckCalendarDate(date) {
|
|
321
|
-
let result;
|
|
322
|
-
// if the picker is 'both', update the calendar date's time value
|
|
323
|
-
if (this.picker.pickerType === 'both') {
|
|
324
|
-
result = this.dateTimeAdapter.createDate(this.dateTimeAdapter.getYear(date), this.dateTimeAdapter.getMonth(date), this.dateTimeAdapter.getDate(date), this.dateTimeAdapter.getHours(this.pickerMoment), this.dateTimeAdapter.getMinutes(this.pickerMoment), this.dateTimeAdapter.getSeconds(this.pickerMoment));
|
|
325
|
-
result = this.dateTimeAdapter.clampDate(result, this.picker.minDateTime, this.picker.maxDateTime);
|
|
326
|
-
}
|
|
327
|
-
else {
|
|
328
|
-
result = this.dateTimeAdapter.clone(date);
|
|
329
|
-
}
|
|
330
|
-
// check the updated dateTime
|
|
331
|
-
return this.picker.dateTimeChecker(result) ? result : null;
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* Focus to the picker
|
|
335
|
-
* */
|
|
336
|
-
focusPicker() {
|
|
337
|
-
if (this.picker.pickerMode === 'inline') {
|
|
338
|
-
return;
|
|
339
|
-
}
|
|
340
|
-
if (this.calendar) {
|
|
341
|
-
this.calendar.focusActiveCell();
|
|
342
|
-
}
|
|
343
|
-
else if (this.timer) {
|
|
344
|
-
this.timer.focus();
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OwlDateTimeContainerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.OwlDateTimeIntl }, { token: i2.DateTimeAdapter, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
348
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OwlDateTimeContainerComponent, selector: "ofe-owl-date-time-container", host: { listeners: { "@transformPicker.done": "handleContainerAnimationDone($event)" }, properties: { "class.owl-dt-container": "this.owlDTContainerClass", "class.owl-dt-popup-container": "this.owlDTPopupContainerClass", "class.owl-dt-dialog-container": "this.owlDTDialogContainerClass", "class.owl-dt-inline-container": "this.owlDTInlineContainerClass", "class.owl-dt-container-disabled": "this.owlDTContainerDisabledClass", "attr.id": "this.owlDTContainerId", "@transformPicker": "this.owlDTContainerAnimation" } }, viewQueries: [{ propertyName: "calendar", first: true, predicate: OwlCalendarComponent, descendants: true }, { propertyName: "timer", first: true, predicate: OwlTimerComponent, descendants: true }], exportAs: ["owlDateTimeContainer"], ngImport: i0, template: "<div\n [cdkTrapFocus]=\"picker.pickerMode !== 'inline'\"\n [@fadeInPicker]=\"picker.pickerMode === 'inline' ? '' : 'enter'\"\n class=\"owl-dt-container-inner\"\n>\n <ofe-owl-date-time-calendar\n *ngIf=\"pickerType === 'both' || pickerType === 'calendar'\"\n class=\"owl-dt-container-row\"\n [firstDayOfWeek]=\"picker.firstDayOfWeek\"\n [(pickerMoment)]=\"pickerMoment\"\n [selected]=\"picker.selected\"\n [selecteds]=\"picker.selecteds\"\n [selectMode]=\"picker.selectMode\"\n [minDate]=\"picker.minDateTime\"\n [maxDate]=\"picker.maxDateTime\"\n [dateFilter]=\"picker.dateTimeFilter\"\n [startView]=\"picker.startView\"\n [hideOtherMonths]=\"picker.hideOtherMonths\"\n (yearSelected)=\"picker.selectYear($event)\"\n (monthSelected)=\"picker.selectMonth($event)\"\n (selectedChange)=\"dateSelected($event)\"\n ></ofe-owl-date-time-calendar>\n <ofe-owl-date-time-timer\n *ngIf=\"pickerType === 'both' || pickerType === 'timer'\"\n class=\"owl-dt-container-row\"\n [pickerMoment]=\"pickerMoment\"\n [minDateTime]=\"picker.minDateTime\"\n [maxDateTime]=\"picker.maxDateTime\"\n [showSecondsTimer]=\"picker.showSecondsTimer\"\n [hour12Timer]=\"picker.hour12Timer\"\n [stepHour]=\"picker.stepHour\"\n [stepMinute]=\"picker.stepMinute\"\n [stepSecond]=\"picker.stepSecond\"\n (selectedChange)=\"timeSelected($event)\"\n ></ofe-owl-date-time-timer>\n <div\n *ngIf=\"picker.isInRangeMode\"\n role=\"radiogroup\"\n class=\"owl-dt-container-info owl-dt-container-row\"\n >\n <div\n role=\"radio\"\n [tabindex]=\"activeSelectedIndex === 0 ? 0 : -1\"\n [attr.aria-checked]=\"activeSelectedIndex === 0\"\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-from\"\n [ngClass]=\"{ 'owl-dt-container-info-active': activeSelectedIndex === 0 }\"\n (click)=\"handleClickOnInfoGroup($event, 0)\"\n (keydown)=\"handleKeydownOnInfoGroup($event, to, 0)\"\n #from\n >\n <span\n class=\"owl-dt-control-content owl-dt-container-range-content\"\n tabindex=\"-1\"\n >\n <span class=\"owl-dt-container-info-label\">{{ fromLabel }}:</span>\n <span class=\"owl-dt-container-info-value\">{{\n fromFormattedValue\n }}</span>\n </span>\n </div>\n <div\n role=\"radio\"\n [tabindex]=\"activeSelectedIndex === 1 ? 0 : -1\"\n [attr.aria-checked]=\"activeSelectedIndex === 1\"\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-to\"\n [ngClass]=\"{ 'owl-dt-container-info-active': activeSelectedIndex === 1 }\"\n (click)=\"handleClickOnInfoGroup($event, 1)\"\n (keydown)=\"handleKeydownOnInfoGroup($event, from, 1)\"\n #to\n >\n <span\n class=\"owl-dt-control-content owl-dt-container-range-content\"\n tabindex=\"-1\"\n >\n <span class=\"owl-dt-container-info-label\">{{ toLabel }}:</span>\n <span class=\"owl-dt-container-info-value\">{{ toFormattedValue }}</span>\n </span>\n </div>\n </div>\n\n <div\n *ngIf=\"showControlButtons\"\n class=\"owl-dt-container-buttons owl-dt-container-row\"\n >\n <button\n class=\"owl-dt-control owl-dt-control-button owl-dt-container-control-button\"\n type=\"button\"\n tabindex=\"0\"\n (click)=\"onCancelClicked($event)\"\n >\n <span\n class=\"owl-dt-control-content owl-dt-control-button-content\"\n tabindex=\"-1\"\n >\n {{ cancelLabel }}\n </span>\n </button>\n <button\n class=\"owl-dt-control owl-dt-control-button owl-dt-container-control-button\"\n type=\"button\"\n tabindex=\"0\"\n (click)=\"onSetClicked($event)\"\n >\n <span\n class=\"owl-dt-control-content owl-dt-control-button-content\"\n tabindex=\"-1\"\n >\n {{ setLabel }}\n </span>\n </button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: i5.OwlTimerComponent, selector: "ofe-owl-date-time-timer", inputs: ["pickerMoment", "minDateTime", "maxDateTime", "showSecondsTimer", "hour12Timer", "stepHour", "stepMinute", "stepSecond"], outputs: ["selectedChange"], exportAs: ["owlDateTimeTimer"] }, { kind: "component", type: i6.OwlCalendarComponent, selector: "ofe-owl-date-time-calendar", inputs: ["minDate", "maxDate", "pickerMoment", "selected", "selecteds", "dateFilter", "firstDayOfWeek", "selectMode", "startView", "hideOtherMonths"], outputs: ["pickerMomentChange", "selectedChange", "userSelection", "yearSelected", "monthSelected"], exportAs: ["owlDateTimeCalendar"] }], animations: [
|
|
349
|
-
owlDateTimePickerAnimations.transformPicker,
|
|
350
|
-
owlDateTimePickerAnimations.fadeInPicker
|
|
351
|
-
], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
352
|
-
}
|
|
353
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OwlDateTimeContainerComponent, decorators: [{
|
|
354
|
-
type: Component,
|
|
355
|
-
args: [{ exportAs: 'owlDateTimeContainer', selector: 'ofe-owl-date-time-container', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
|
|
356
|
-
owlDateTimePickerAnimations.transformPicker,
|
|
357
|
-
owlDateTimePickerAnimations.fadeInPicker
|
|
358
|
-
], template: "<div\n [cdkTrapFocus]=\"picker.pickerMode !== 'inline'\"\n [@fadeInPicker]=\"picker.pickerMode === 'inline' ? '' : 'enter'\"\n class=\"owl-dt-container-inner\"\n>\n <ofe-owl-date-time-calendar\n *ngIf=\"pickerType === 'both' || pickerType === 'calendar'\"\n class=\"owl-dt-container-row\"\n [firstDayOfWeek]=\"picker.firstDayOfWeek\"\n [(pickerMoment)]=\"pickerMoment\"\n [selected]=\"picker.selected\"\n [selecteds]=\"picker.selecteds\"\n [selectMode]=\"picker.selectMode\"\n [minDate]=\"picker.minDateTime\"\n [maxDate]=\"picker.maxDateTime\"\n [dateFilter]=\"picker.dateTimeFilter\"\n [startView]=\"picker.startView\"\n [hideOtherMonths]=\"picker.hideOtherMonths\"\n (yearSelected)=\"picker.selectYear($event)\"\n (monthSelected)=\"picker.selectMonth($event)\"\n (selectedChange)=\"dateSelected($event)\"\n ></ofe-owl-date-time-calendar>\n <ofe-owl-date-time-timer\n *ngIf=\"pickerType === 'both' || pickerType === 'timer'\"\n class=\"owl-dt-container-row\"\n [pickerMoment]=\"pickerMoment\"\n [minDateTime]=\"picker.minDateTime\"\n [maxDateTime]=\"picker.maxDateTime\"\n [showSecondsTimer]=\"picker.showSecondsTimer\"\n [hour12Timer]=\"picker.hour12Timer\"\n [stepHour]=\"picker.stepHour\"\n [stepMinute]=\"picker.stepMinute\"\n [stepSecond]=\"picker.stepSecond\"\n (selectedChange)=\"timeSelected($event)\"\n ></ofe-owl-date-time-timer>\n <div\n *ngIf=\"picker.isInRangeMode\"\n role=\"radiogroup\"\n class=\"owl-dt-container-info owl-dt-container-row\"\n >\n <div\n role=\"radio\"\n [tabindex]=\"activeSelectedIndex === 0 ? 0 : -1\"\n [attr.aria-checked]=\"activeSelectedIndex === 0\"\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-from\"\n [ngClass]=\"{ 'owl-dt-container-info-active': activeSelectedIndex === 0 }\"\n (click)=\"handleClickOnInfoGroup($event, 0)\"\n (keydown)=\"handleKeydownOnInfoGroup($event, to, 0)\"\n #from\n >\n <span\n class=\"owl-dt-control-content owl-dt-container-range-content\"\n tabindex=\"-1\"\n >\n <span class=\"owl-dt-container-info-label\">{{ fromLabel }}:</span>\n <span class=\"owl-dt-container-info-value\">{{\n fromFormattedValue\n }}</span>\n </span>\n </div>\n <div\n role=\"radio\"\n [tabindex]=\"activeSelectedIndex === 1 ? 0 : -1\"\n [attr.aria-checked]=\"activeSelectedIndex === 1\"\n class=\"owl-dt-control owl-dt-container-range owl-dt-container-to\"\n [ngClass]=\"{ 'owl-dt-container-info-active': activeSelectedIndex === 1 }\"\n (click)=\"handleClickOnInfoGroup($event, 1)\"\n (keydown)=\"handleKeydownOnInfoGroup($event, from, 1)\"\n #to\n >\n <span\n class=\"owl-dt-control-content owl-dt-container-range-content\"\n tabindex=\"-1\"\n >\n <span class=\"owl-dt-container-info-label\">{{ toLabel }}:</span>\n <span class=\"owl-dt-container-info-value\">{{ toFormattedValue }}</span>\n </span>\n </div>\n </div>\n\n <div\n *ngIf=\"showControlButtons\"\n class=\"owl-dt-container-buttons owl-dt-container-row\"\n >\n <button\n class=\"owl-dt-control owl-dt-control-button owl-dt-container-control-button\"\n type=\"button\"\n tabindex=\"0\"\n (click)=\"onCancelClicked($event)\"\n >\n <span\n class=\"owl-dt-control-content owl-dt-control-button-content\"\n tabindex=\"-1\"\n >\n {{ cancelLabel }}\n </span>\n </button>\n <button\n class=\"owl-dt-control owl-dt-control-button owl-dt-container-control-button\"\n type=\"button\"\n tabindex=\"0\"\n (click)=\"onSetClicked($event)\"\n >\n <span\n class=\"owl-dt-control-content owl-dt-control-button-content\"\n tabindex=\"-1\"\n >\n {{ setLabel }}\n </span>\n </button>\n </div>\n</div>\n" }]
|
|
359
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.OwlDateTimeIntl }, { type: i2.DateTimeAdapter, decorators: [{
|
|
360
|
-
type: Optional
|
|
361
|
-
}] }], propDecorators: { calendar: [{
|
|
362
|
-
type: ViewChild,
|
|
363
|
-
args: [OwlCalendarComponent, { static: false }]
|
|
364
|
-
}], timer: [{
|
|
365
|
-
type: ViewChild,
|
|
366
|
-
args: [OwlTimerComponent, { static: false }]
|
|
367
|
-
}], owlDTContainerClass: [{
|
|
368
|
-
type: HostBinding,
|
|
369
|
-
args: ['class.owl-dt-container']
|
|
370
|
-
}], owlDTPopupContainerClass: [{
|
|
371
|
-
type: HostBinding,
|
|
372
|
-
args: ['class.owl-dt-popup-container']
|
|
373
|
-
}], owlDTDialogContainerClass: [{
|
|
374
|
-
type: HostBinding,
|
|
375
|
-
args: ['class.owl-dt-dialog-container']
|
|
376
|
-
}], owlDTInlineContainerClass: [{
|
|
377
|
-
type: HostBinding,
|
|
378
|
-
args: ['class.owl-dt-inline-container']
|
|
379
|
-
}], owlDTContainerDisabledClass: [{
|
|
380
|
-
type: HostBinding,
|
|
381
|
-
args: ['class.owl-dt-container-disabled']
|
|
382
|
-
}], owlDTContainerId: [{
|
|
383
|
-
type: HostBinding,
|
|
384
|
-
args: ['attr.id']
|
|
385
|
-
}], owlDTContainerAnimation: [{
|
|
386
|
-
type: HostBinding,
|
|
387
|
-
args: ['@transformPicker']
|
|
388
|
-
}], handleContainerAnimationDone: [{
|
|
389
|
-
type: HostListener,
|
|
390
|
-
args: ['@transformPicker.done', ['$event']]
|
|
391
|
-
}] } });
|
|
392
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLXBpY2tlci1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvY29tcG9uZW50cy9uZ3gtcGljay1kYXRldGltZS9saWIvZGF0ZS10aW1lL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1mb3JtZW50cnkvc3JjL2NvbXBvbmVudHMvbmd4LXBpY2stZGF0ZXRpbWUvbGliL2RhdGUtdGltZS9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osUUFBUSxFQUNSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsVUFBVSxFQUNWLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFDVCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7QUFhdEQsTUFBTSxPQUFPLDZCQUE2QjtJQVF4QyxJQUEyQyxtQkFBbUI7UUFDNUQsT0FB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Ozs0RkFFVSw2QkFBNkI7a0JBWHpDLFNBQVM7K0JBQ0Usc0JBQXNCLFlBQ3RCLDZCQUE2QixtQkFHdEIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQzt3QkFDViwyQkFBMkIsQ0FBQyxlQUFlO3dCQUMzQywyQkFBMkIsQ0FBQyxZQUFZO3FCQUN6Qzs7MEJBb0tFLFFBQVE7eUNBL0pYLFFBQVE7c0JBRFAsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSWxELEtBQUs7c0JBREosU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR0osbUJBQW1CO3NCQUE3RCxXQUFXO3VCQUFDLHdCQUF3QjtnQkFJWSx3QkFBd0I7c0JBQXhFLFdBQVc7dUJBQUMsOEJBQThCO2dCQUt2Qyx5QkFBeUI7c0JBRDVCLFdBQVc7dUJBQUMsK0JBQStCO2dCQU14Qyx5QkFBeUI7c0JBRDVCLFdBQVc7dUJBQUMsK0JBQStCO2dCQU14QywyQkFBMkI7c0JBRDlCLFdBQVc7dUJBQUMsaUNBQWlDO2dCQUtsQixnQkFBZ0I7c0JBQTNDLFdBQVc7dUJBQUMsU0FBUztnQkFJZSx1QkFBdUI7c0JBQTNELFdBQVc7dUJBQUMsa0JBQWtCO2dCQUt4Qiw0QkFBNEI7c0JBRGxDLFlBQVk7dUJBQUMsdUJBQXVCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT3B0aW9uYWwsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuaW1hdGlvbkV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQge1xuICBET1dOX0FSUk9XLFxuICBMRUZUX0FSUk9XLFxuICBSSUdIVF9BUlJPVyxcbiAgU1BBQ0UsXG4gIFVQX0FSUk9XXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IERhdGVUaW1lQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlci9kYXRlLXRpbWUtYWRhcHRlci5jbGFzcyc7XG5pbXBvcnQgeyBPd2xDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXIuY29tcG9uZW50JztcbmltcG9ydCB7IE93bERhdGVUaW1lLCBQaWNrZXJUeXBlIH0gZnJvbSAnLi9kYXRlLXRpbWUuY2xhc3MnO1xuaW1wb3J0IHsgT3dsRGF0ZVRpbWVJbnRsIH0gZnJvbSAnLi9kYXRlLXRpbWUtcGlja2VyLWludGwuc2VydmljZSc7XG5pbXBvcnQgeyBvd2xEYXRlVGltZVBpY2tlckFuaW1hdGlvbnMgfSBmcm9tICcuL2RhdGUtdGltZS1waWNrZXIuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBPd2xUaW1lckNvbXBvbmVudCB9IGZyb20gJy4vdGltZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIGV4cG9ydEFzOiAnb3dsRGF0ZVRpbWVDb250YWluZXInLFxuICBzZWxlY3RvcjogJ29mZS1vd2wtZGF0ZS10aW1lLWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXRpbWUtcGlja2VyLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUtdGltZS1waWNrZXItY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbXG4gICAgb3dsRGF0ZVRpbWVQaWNrZXJBbmltYXRpb25zLnRyYW5zZm9ybVBpY2tlcixcbiAgICBvd2xEYXRlVGltZVBpY2tlckFuaW1hdGlvbnMuZmFkZUluUGlja2VyXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgT3dsRGF0ZVRpbWVDb250YWluZXJDb21wb25lbnQ8VD5cbiAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZChPd2xDYWxlbmRhckNvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGNhbGVuZGFyOiBPd2xDYWxlbmRhckNvbXBvbmVudDxUPjtcblxuICBAVmlld0NoaWxkKE93bFRpbWVyQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgdGltZXI6IE93bFRpbWVyQ29tcG9uZW50PFQ+O1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mub3dsLWR0LWNvbnRhaW5lcicpIGdldCBvd2xEVENvbnRhaW5lckNsYXNzKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vd2wtZHQtcG9wdXAtY29udGFpbmVyJykgZ2V0IG93bERUUG9wdXBDb250YWluZXJDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5waWNrZXIucGlja2VyTW9kZSA9PT0gJ3BvcHVwJztcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mub3dsLWR0LWRpYWxvZy1jb250YWluZXInKVxuICBnZXQgb3dsRFREaWFsb2dDb250YWluZXJDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5waWNrZXIucGlja2VyTW9kZSA9PT0gJ2RpYWxvZyc7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm93bC1kdC1pbmxpbmUtY29udGFpbmVyJylcbiAgZ2V0IG93bERUSW5saW5lQ29udGFpbmVyQ2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMucGlja2VyLnBpY2tlck1vZGUgPT09ICdpbmxpbmUnO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vd2wtZHQtY29udGFpbmVyLWRpc2FibGVkJylcbiAgZ2V0IG93bERUQ29udGFpbmVyRGlzYWJsZWRDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5waWNrZXIuZGlzYWJsZWQ7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBnZXQgb3dsRFRDb250YWluZXJJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5waWNrZXIuaWQ7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ0B0cmFuc2Zvcm1QaWNrZXInKSBnZXQgb3dsRFRDb250YWluZXJBbmltYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucGlja2VyLnBpY2tlck1vZGUgPT09ICdpbmxpbmUnID8gJycgOiAnZW50ZXInO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignQHRyYW5zZm9ybVBpY2tlci5kb25lJywgWyckZXZlbnQnXSlcbiAgcHVibGljIGhhbmRsZUNvbnRhaW5lckFuaW1hdGlvbkRvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdG9TdGF0ZSA9IGV2ZW50LnRvU3RhdGU7XG4gICAgaWYgKHRvU3RhdGUgPT09ICdlbnRlcicpIHtcbiAgICAgIHRoaXMucGlja2VyT3BlbmVkJC5uZXh0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwaWNrZXI6IE93bERhdGVUaW1lPFQ+O1xuICBwdWJsaWMgYWN0aXZlU2VsZWN0ZWRJbmRleCA9IDA7IC8vIFRoZSBjdXJyZW50IGFjdGl2ZSBTZWxlY3RlZEluZGV4IGluIHJhbmdlIHNlbGVjdCBtb2RlICgwOiAnZnJvbScsIDE6ICd0bycpXG5cbiAgLyoqXG4gICAqIFN0cmVhbSBlbWl0cyB3aGVuIHRyeSB0byBoaWRlIHBpY2tlclxuICAgKiAqL1xuICBwcml2YXRlIGhpZGVQaWNrZXIkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIGdldCBoaWRlUGlja2VyU3RyZWFtKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaGlkZVBpY2tlciQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RyZWFtIGVtaXRzIHdoZW4gdHJ5IHRvIGNvbmZpcm0gdGhlIHNlbGVjdGVkIHZhbHVlXG4gICAqICovXG4gIHByaXZhdGUgY29uZmlybVNlbGVjdGVkJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICBnZXQgY29uZmlybVNlbGVjdGVkU3RyZWFtKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlybVNlbGVjdGVkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcGlja2VyT3BlbmVkJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICBnZXQgcGlja2VyT3BlbmVkU3RyZWFtKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucGlja2VyT3BlbmVkJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBwaWNrZXIgbW9tZW50LiBUaGlzIGRldGVybWluZXMgd2hpY2ggdGltZSBwZXJpb2QgaXMgc2hvd24gYW5kIHdoaWNoIGRhdGUgaXNcbiAgICogaGlnaGxpZ2h0ZWQgd2hlbiB1c2luZyBrZXlib2FyZCBuYXZpZ2F0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBfY2xhbVBpY2tlck1vbWVudDogVDtcblxuICBnZXQgcGlja2VyTW9tZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jbGFtUGlja2VyTW9tZW50O1xuICB9XG5cbiAgc2V0IHBpY2tlck1vbWVudCh2YWx1ZTogVCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fY2xhbVBpY2tlck1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNsYW1wRGF0ZShcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMucGlja2VyLm1pbkRhdGVUaW1lLFxuICAgICAgICB0aGlzLnBpY2tlci5tYXhEYXRlVGltZVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCBwaWNrZXJUeXBlKCk6IFBpY2tlclR5cGUge1xuICAgIHJldHVybiB0aGlzLnBpY2tlci5waWNrZXJUeXBlO1xuICB9XG5cbiAgZ2V0IGNhbmNlbExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5jYW5jZWxCdG5MYWJlbDtcbiAgfVxuXG4gIGdldCBzZXRMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBpY2tlckludGwuc2V0QnRuTGFiZWw7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJhbmdlICdmcm9tJyBsYWJlbFxuICAgKiAqL1xuICBnZXQgZnJvbUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGlja2VySW50bC5yYW5nZUZyb21MYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmFuZ2UgJ3RvJyBsYWJlbFxuICAgKiAqL1xuICBnZXQgdG9MYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBpY2tlckludGwucmFuZ2VUb0xhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByYW5nZSAnZnJvbScgZm9ybWF0dGVkIHZhbHVlXG4gICAqICovXG4gIGdldCBmcm9tRm9ybWF0dGVkVmFsdWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGlja2VyLnNlbGVjdGVkc1swXTtcbiAgICByZXR1cm4gdmFsdWVcbiAgICAgID8gdGhpcy5kYXRlVGltZUFkYXB0ZXIuZm9ybWF0KHZhbHVlLCB0aGlzLnBpY2tlci5mb3JtYXRTdHJpbmcpXG4gICAgICA6ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByYW5nZSAndG8nIGZvcm1hdHRlZCB2YWx1ZVxuICAgKiAqL1xuICBnZXQgdG9Gb3JtYXR0ZWRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5waWNrZXIuc2VsZWN0ZWRzWzFdO1xuICAgIHJldHVybiB2YWx1ZVxuICAgICAgPyB0aGlzLmRhdGVUaW1lQWRhcHRlci5mb3JtYXQodmFsdWUsIHRoaXMucGlja2VyLmZvcm1hdFN0cmluZylcbiAgICAgIDogJyc7XG4gIH1cblxuICAvKipcbiAgICogQ2FzZXMgaW4gd2hpY2ggdGhlIGNvbnRyb2wgYnV0dG9ucyBzaG93IGluIHRoZSBwaWNrZXJcbiAgICogMSkgcGlja2VyIG1vZGUgaXMgJ2RpYWxvZydcbiAgICogMikgcGlja2VyIHR5cGUgaXMgTk9UICdjYWxlbmRhcicgYW5kIHRoZSBwaWNrZXIgbW9kZSBpcyBOT1QgJ2lubGluZSdcbiAgICogKi9cbiAgZ2V0IHNob3dDb250cm9sQnV0dG9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5waWNrZXIucGlja2VyTW9kZSA9PT0gJ2RpYWxvZycgfHxcbiAgICAgICh0aGlzLnBpY2tlci5waWNrZXJUeXBlICE9PSAnY2FsZW5kYXInICYmXG4gICAgICAgIHRoaXMucGlja2VyLnBpY2tlck1vZGUgIT09ICdpbmxpbmUnKVxuICAgICk7XG4gIH1cblxuICBnZXQgY29udGFpbmVyRWxtKCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbG1SZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWxtUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcGlja2VySW50bDogT3dsRGF0ZVRpbWVJbnRsLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGF0ZVRpbWVBZGFwdGVyOiBEYXRlVGltZUFkYXB0ZXI8VD5cbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0UGlja2VyKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNQaWNrZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBkYXRlU2VsZWN0ZWQoZGF0ZTogVCk6IHZvaWQge1xuICAgIGxldCByZXN1bHQ7XG5cbiAgICBpZiAodGhpcy5waWNrZXIuaXNJblNpbmdsZU1vZGUpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuZGF0ZVNlbGVjdGVkSW5TaW5nbGVNb2RlKGRhdGUpO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLnBpY2tlck1vbWVudCA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5waWNrZXIuc2VsZWN0KHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB3ZSBjbG9zZSB0aGUgcGlja2VyIHdoZW4gcmVzdWx0IGlzIG51bGwgYW5kIHBpY2tlclR5cGUgaXMgY2FsZW5kYXIuXG4gICAgICAgIGlmICh0aGlzLnBpY2tlclR5cGUgPT09ICdjYWxlbmRhcicpIHtcbiAgICAgICAgICB0aGlzLmhpZGVQaWNrZXIkLm5leHQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waWNrZXIuaXNJblJhbmdlTW9kZSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5kYXRlU2VsZWN0ZWRJblJhbmdlTW9kZShkYXRlKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5waWNrZXJNb21lbnQgPSByZXN1bHRbdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4XTtcbiAgICAgICAgdGhpcy5waWNrZXIuc2VsZWN0KHJlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRpbWVTZWxlY3RlZCh0aW1lOiBUKTogdm9pZCB7XG4gICAgdGhpcy5waWNrZXJNb21lbnQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jbG9uZSh0aW1lKTtcblxuICAgIGlmICghdGhpcy5waWNrZXIuZGF0ZVRpbWVDaGVja2VyKHRoaXMucGlja2VyTW9tZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBpY2tlci5pc0luU2luZ2xlTW9kZSkge1xuICAgICAgdGhpcy5waWNrZXIuc2VsZWN0KHRoaXMucGlja2VyTW9tZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waWNrZXIuaXNJblJhbmdlTW9kZSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRzID0gWy4uLnRoaXMucGlja2VyLnNlbGVjdGVkc107XG5cbiAgICAgIC8vIGNoZWNrIGlmIHRoZSAnZnJvbScgaXMgYWZ0ZXIgJ3RvJyBvciAndG8naXMgYmVmb3JlICdmcm9tJ1xuICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBzZXQgYm90aCB0aGUgJ2Zyb20nIGFuZCAndG8nIHRoZSBzYW1lIHZhbHVlXG4gICAgICBpZiAoXG4gICAgICAgICh0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXggPT09IDAgJiZcbiAgICAgICAgICBzZWxlY3RlZHNbMV0gJiZcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKHRoaXMucGlja2VyTW9tZW50LCBzZWxlY3RlZHNbMV0pID09PVxuICAgICAgICAgICAgMSkgfHxcbiAgICAgICAgKHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMSAmJlxuICAgICAgICAgIHNlbGVjdGVkc1swXSAmJlxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUodGhpcy5waWNrZXJNb21lbnQsIHNlbGVjdGVkc1swXSkgPT09IC0xKVxuICAgICAgKSB7XG4gICAgICAgIHNlbGVjdGVkc1swXSA9IHRoaXMucGlja2VyTW9tZW50O1xuICAgICAgICBzZWxlY3RlZHNbMV0gPSB0aGlzLnBpY2tlck1vbWVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdGVkc1t0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXhdID0gdGhpcy5waWNrZXJNb21lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGlja2VyLnNlbGVjdChzZWxlY3RlZHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY2xpY2sgb24gY2FuY2VsIGJ1dHRvblxuICAgKi9cbiAgcHVibGljIG9uQ2FuY2VsQ2xpY2tlZChldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5oaWRlUGlja2VyJC5uZXh0KG51bGwpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjbGljayBvbiBzZXQgYnV0dG9uXG4gICAqL1xuICBwdWJsaWMgb25TZXRDbGlja2VkKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGlja2VyLmRhdGVUaW1lQ2hlY2tlcih0aGlzLnBpY2tlck1vbWVudCkpIHtcbiAgICAgIHRoaXMuaGlkZVBpY2tlciQubmV4dChudWxsKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb25maXJtU2VsZWN0ZWQkLm5leHQoZXZlbnQpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjbGljayBvbiBpbmZvcm0gcmFkaW8gZ3JvdXBcbiAgICovXG4gIHB1YmxpYyBoYW5kbGVDbGlja09uSW5mb0dyb3VwKGV2ZW50OiBhbnksIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNldEFjdGl2ZVNlbGVjdGVkSW5kZXgoaW5kZXgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNsaWNrIG9uIGluZm9ybSByYWRpbyBncm91cFxuICAgKi9cbiAgcHVibGljIGhhbmRsZUtleWRvd25PbkluZm9Hcm91cChldmVudDogYW55LCBuZXh0OiBhbnksIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgIGNhc2UgRE9XTl9BUlJPVzpcbiAgICAgIGNhc2UgUklHSFRfQVJST1c6XG4gICAgICBjYXNlIFVQX0FSUk9XOlxuICAgICAgY2FzZSBMRUZUX0FSUk9XOlxuICAgICAgICBuZXh0LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlU2VsZWN0ZWRJbmRleChpbmRleCA9PT0gMCA/IDEgOiAwKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNQQUNFOlxuICAgICAgICB0aGlzLnNldEFjdGl2ZVNlbGVjdGVkSW5kZXgoaW5kZXgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSBvZiBhY3RpdmVTZWxlY3RlZEluZGV4XG4gICAqL1xuICBwcml2YXRlIHNldEFjdGl2ZVNlbGVjdGVkSW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMucGlja2VyLnNlbGVjdE1vZGUgPT09ICdyYW5nZScgJiZcbiAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCAhPT0gaW5kZXhcbiAgICApIHtcbiAgICAgIHRoaXMuYWN0aXZlU2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuXG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMucGlja2VyLnNlbGVjdGVkc1t0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXhdO1xuICAgICAgaWYgKHRoaXMucGlja2VyLnNlbGVjdGVkcyAmJiBzZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnBpY2tlck1vbWVudCA9IHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNsb25lKHNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0UGlja2VyKCk6IHZvaWQge1xuICAgIHRoaXMucGlja2VyTW9tZW50ID0gdGhpcy5waWNrZXIuc3RhcnRBdCB8fCB0aGlzLmRhdGVUaW1lQWRhcHRlci5ub3coKTtcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdGVkSW5kZXggPSB0aGlzLnBpY2tlci5zZWxlY3RNb2RlID09PSAncmFuZ2VUbycgPyAxIDogMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgY2FsZW5kYXIgZGF0ZSBpbiBzaW5nbGUgbW9kZSxcbiAgICogaXQgcmV0dXJucyBudWxsIHdoZW4gZGF0ZSBpcyBub3Qgc2VsZWN0ZWQuXG4gICAqL1xuICBwcml2YXRlIGRhdGVTZWxlY3RlZEluU2luZ2xlTW9kZShkYXRlOiBUKTogVCB8IG51bGwge1xuICAgIGlmICh0aGlzLmRhdGVUaW1lQWRhcHRlci5pc1NhbWVEYXkoZGF0ZSwgdGhpcy5waWNrZXIuc2VsZWN0ZWQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51cGRhdGVBbmRDaGVja0NhbGVuZGFyRGF0ZShkYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgZGF0ZXMgaW4gcmFuZ2UgTW9kZVxuICAgKi9cbiAgcHJpdmF0ZSBkYXRlU2VsZWN0ZWRJblJhbmdlTW9kZShkYXRlOiBUKTogVFtdIHwgbnVsbCB7XG4gICAgbGV0IGZyb20gPSB0aGlzLnBpY2tlci5zZWxlY3RlZHNbMF07XG4gICAgbGV0IHRvID0gdGhpcy5waWNrZXIuc2VsZWN0ZWRzWzFdO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy51cGRhdGVBbmRDaGVja0NhbGVuZGFyRGF0ZShkYXRlKTtcblxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgZ2l2ZW4gY2FsZW5kYXIgZGF5IGlzIGFmdGVyIG9yIGVxdWFsIHRvICdmcm9tJyxcbiAgICAvLyBzZXQgdGhzIGdpdmVuIGRhdGUgYXMgJ3RvJ1xuICAgIC8vIG90aGVyd2lzZSwgc2V0IGl0IGFzICdmcm9tJyBhbmQgc2V0ICd0bycgdG8gbnVsbFxuICAgIGlmICh0aGlzLnBpY2tlci5zZWxlY3RNb2RlID09PSAncmFuZ2UnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucGlja2VyLnNlbGVjdGVkcyAmJlxuICAgICAgICB0aGlzLnBpY2tlci5zZWxlY3RlZHMubGVuZ3RoICYmXG4gICAgICAgICF0byAmJlxuICAgICAgICBmcm9tICYmXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhyZXN1bHQsIGZyb20pID49IDBcbiAgICAgICkge1xuICAgICAgICB0byA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyb20gPSByZXN1bHQ7XG4gICAgICAgIHRvID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY3RpdmVTZWxlY3RlZEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucGlja2VyLnNlbGVjdE1vZGUgPT09ICdyYW5nZUZyb20nKSB7XG4gICAgICBmcm9tID0gcmVzdWx0O1xuXG4gICAgICAvLyBpZiB0aGUgZnJvbSB2YWx1ZSBpcyBhZnRlciB0aGUgdG8gdmFsdWUsIHNldCB0aGUgdG8gdmFsdWUgYXMgbnVsbFxuICAgICAgaWYgKHRvICYmIHRoaXMuZGF0ZVRpbWVBZGFwdGVyLmNvbXBhcmUoZnJvbSwgdG8pID4gMCkge1xuICAgICAgICB0byA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnBpY2tlci5zZWxlY3RNb2RlID09PSAncmFuZ2VUbycpIHtcbiAgICAgIHRvID0gcmVzdWx0O1xuXG4gICAgICAvLyBpZiB0aGUgZnJvbSB2YWx1ZSBpcyBhZnRlciB0aGUgdG8gdmFsdWUsIHNldCB0aGUgZnJvbSB2YWx1ZSBhcyBudWxsXG4gICAgICBpZiAoZnJvbSAmJiB0aGlzLmRhdGVUaW1lQWRhcHRlci5jb21wYXJlKGZyb20sIHRvKSA+IDApIHtcbiAgICAgICAgZnJvbSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtmcm9tLCB0b107XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBnaXZlbiBjYWxlbmRhciBkYXRlJ3MgdGltZSBhbmQgY2hlY2sgaWYgaXQgaXMgdmFsaWRcbiAgICogQmVjYXVzZSB0aGUgY2FsZW5kYXIgZGF0ZSBoYXMgMDA6MDA6MDAgYXMgZGVmYXVsdCB0aW1lLCBpZiB0aGUgcGlja2VyIHR5cGUgaXMgJ2JvdGgnLFxuICAgKiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgZ2l2ZW4gY2FsZW5kYXIgZGF0ZSdzIHRpbWUgYmVmb3JlIHNlbGVjdGluZyBpdC5cbiAgICogaWYgaXQgaXMgdmFsaWQsIHJldHVybiB0aGUgdXBkYXRlZCBkYXRlVGltZVxuICAgKiBpZiBpdCBpcyBub3QgdmFsaWQsIHJldHVybiBudWxsXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUFuZENoZWNrQ2FsZW5kYXJEYXRlKGRhdGU6IFQpOiBUIHtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgLy8gaWYgdGhlIHBpY2tlciBpcyAnYm90aCcsIHVwZGF0ZSB0aGUgY2FsZW5kYXIgZGF0ZSdzIHRpbWUgdmFsdWVcbiAgICBpZiAodGhpcy5waWNrZXIucGlja2VyVHlwZSA9PT0gJ2JvdGgnKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRZZWFyKGRhdGUpLFxuICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNb250aChkYXRlKSxcbiAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0RGF0ZShkYXRlKSxcbiAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0SG91cnModGhpcy5waWNrZXJNb21lbnQpLFxuICAgICAgICB0aGlzLmRhdGVUaW1lQWRhcHRlci5nZXRNaW51dGVzKHRoaXMucGlja2VyTW9tZW50KSxcbiAgICAgICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuZ2V0U2Vjb25kcyh0aGlzLnBpY2tlck1vbWVudClcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jbGFtcERhdGUoXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgdGhpcy5waWNrZXIubWluRGF0ZVRpbWUsXG4gICAgICAgIHRoaXMucGlja2VyLm1heERhdGVUaW1lXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB0aGlzLmRhdGVUaW1lQWRhcHRlci5jbG9uZShkYXRlKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB0aGUgdXBkYXRlZCBkYXRlVGltZVxuICAgIHJldHVybiB0aGlzLnBpY2tlci5kYXRlVGltZUNoZWNrZXIocmVzdWx0KSA/IHJlc3VsdCA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRm9jdXMgdG8gdGhlIHBpY2tlclxuICAgKiAqL1xuICBwcml2YXRlIGZvY3VzUGlja2VyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBpY2tlci5waWNrZXJNb2RlID09PSAnaW5saW5lJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNhbGVuZGFyKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyLmZvY3VzQWN0aXZlQ2VsbCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lcikge1xuICAgICAgdGhpcy50aW1lci5mb2N1cygpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBbY2RrVHJhcEZvY3VzXT1cInBpY2tlci5waWNrZXJNb2RlICE9PSAnaW5saW5lJ1wiXG4gIFtAZmFkZUluUGlja2VyXT1cInBpY2tlci5waWNrZXJNb2RlID09PSAnaW5saW5lJyA/ICcnIDogJ2VudGVyJ1wiXG4gIGNsYXNzPVwib3dsLWR0LWNvbnRhaW5lci1pbm5lclwiXG4+XG4gIDxvZmUtb3dsLWRhdGUtdGltZS1jYWxlbmRhclxuICAgICpuZ0lmPVwicGlja2VyVHlwZSA9PT0gJ2JvdGgnIHx8IHBpY2tlclR5cGUgPT09ICdjYWxlbmRhcidcIlxuICAgIGNsYXNzPVwib3dsLWR0LWNvbnRhaW5lci1yb3dcIlxuICAgIFtmaXJzdERheU9mV2Vla109XCJwaWNrZXIuZmlyc3REYXlPZldlZWtcIlxuICAgIFsocGlja2VyTW9tZW50KV09XCJwaWNrZXJNb21lbnRcIlxuICAgIFtzZWxlY3RlZF09XCJwaWNrZXIuc2VsZWN0ZWRcIlxuICAgIFtzZWxlY3RlZHNdPVwicGlja2VyLnNlbGVjdGVkc1wiXG4gICAgW3NlbGVjdE1vZGVdPVwicGlja2VyLnNlbGVjdE1vZGVcIlxuICAgIFttaW5EYXRlXT1cInBpY2tlci5taW5EYXRlVGltZVwiXG4gICAgW21heERhdGVdPVwicGlja2VyLm1heERhdGVUaW1lXCJcbiAgICBbZGF0ZUZpbHRlcl09XCJwaWNrZXIuZGF0ZVRpbWVGaWx0ZXJcIlxuICAgIFtzdGFydFZpZXddPVwicGlja2VyLnN0YXJ0Vmlld1wiXG4gICAgW2hpZGVPdGhlck1vbnRoc109XCJwaWNrZXIuaGlkZU90aGVyTW9udGhzXCJcbiAgICAoeWVhclNlbGVjdGVkKT1cInBpY2tlci5zZWxlY3RZZWFyKCRldmVudClcIlxuICAgIChtb250aFNlbGVjdGVkKT1cInBpY2tlci5zZWxlY3RNb250aCgkZXZlbnQpXCJcbiAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwiZGF0ZVNlbGVjdGVkKCRldmVudClcIlxuICA+PC9vZmUtb3dsLWRhdGUtdGltZS1jYWxlbmRhcj5cbiAgPG9mZS1vd2wtZGF0ZS10aW1lLXRpbWVyXG4gICAgKm5nSWY9XCJwaWNrZXJUeXBlID09PSAnYm90aCcgfHwgcGlja2VyVHlwZSA9PT0gJ3RpbWVyJ1wiXG4gICAgY2xhc3M9XCJvd2wtZHQtY29udGFpbmVyLXJvd1wiXG4gICAgW3BpY2tlck1vbWVudF09XCJwaWNrZXJNb21lbnRcIlxuICAgIFttaW5EYXRlVGltZV09XCJwaWNrZXIubWluRGF0ZVRpbWVcIlxuICAgIFttYXhEYXRlVGltZV09XCJwaWNrZXIubWF4RGF0ZVRpbWVcIlxuICAgIFtzaG93U2Vjb25kc1RpbWVyXT1cInBpY2tlci5zaG93U2Vjb25kc1RpbWVyXCJcbiAgICBbaG91cjEyVGltZXJdPVwicGlja2VyLmhvdXIxMlRpbWVyXCJcbiAgICBbc3RlcEhvdXJdPVwicGlja2VyLnN0ZXBIb3VyXCJcbiAgICBbc3RlcE1pbnV0ZV09XCJwaWNrZXIuc3RlcE1pbnV0ZVwiXG4gICAgW3N0ZXBTZWNvbmRdPVwicGlja2VyLnN0ZXBTZWNvbmRcIlxuICAgIChzZWxlY3RlZENoYW5nZSk9XCJ0aW1lU2VsZWN0ZWQoJGV2ZW50KVwiXG4gID48L29mZS1vd2wtZGF0ZS10aW1lLXRpbWVyPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJwaWNrZXIuaXNJblJhbmdlTW9kZVwiXG4gICAgcm9sZT1cInJhZGlvZ3JvdXBcIlxuICAgIGNsYXNzPVwib3dsLWR0LWNvbnRhaW5lci1pbmZvIG93bC1kdC1jb250YWluZXItcm93XCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIHJvbGU9XCJyYWRpb1wiXG4gICAgICBbdGFiaW5kZXhdPVwiYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMCA/IDAgOiAtMVwiXG4gICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiYWN0aXZlU2VsZWN0ZWRJbmRleCA9PT0gMFwiXG4gICAgICBjbGFzcz1cIm93bC1kdC1jb250cm9sIG93bC1kdC1jb250YWluZXItcmFuZ2Ugb3dsLWR0LWNvbnRhaW5lci1mcm9tXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ293bC1kdC1jb250YWluZXItaW5mby1hY3RpdmUnOiBhY3RpdmVTZWxlY3RlZEluZGV4ID09PSAwIH1cIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrT25JbmZvR3JvdXAoJGV2ZW50LCAwKVwiXG4gICAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlkb3duT25JbmZvR3JvdXAoJGV2ZW50LCB0bywgMClcIlxuICAgICAgI2Zyb21cbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cIm93bC1kdC1jb250cm9sLWNvbnRlbnQgb3dsLWR0LWNvbnRhaW5lci1yYW5nZS1jb250ZW50XCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwib3dsLWR0LWNvbnRhaW5lci1pbmZvLWxhYmVsXCI+e3sgZnJvbUxhYmVsIH19Ojwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJvd2wtZHQtY29udGFpbmVyLWluZm8tdmFsdWVcIj57e1xuICAgICAgICAgIGZyb21Gb3JtYXR0ZWRWYWx1ZVxuICAgICAgICB9fTwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICByb2xlPVwicmFkaW9cIlxuICAgICAgW3RhYmluZGV4XT1cImFjdGl2ZVNlbGVjdGVkSW5kZXggPT09IDEgPyAwIDogLTFcIlxuICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImFjdGl2ZVNlbGVjdGVkSW5kZXggPT09IDFcIlxuICAgICAgY2xhc3M9XCJvd2wtZHQtY29udHJvbCBvd2wtZHQtY29udGFpbmVyLXJhbmdlIG93bC1kdC1jb250YWluZXItdG9cIlxuICAgICAgW25nQ2xhc3NdPVwieyAnb3dsLWR0LWNvbnRhaW5lci1pbmZvLWFjdGl2ZSc6IGFjdGl2ZVNlbGVjdGVkSW5kZXggPT09IDEgfVwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2tPbkluZm9Hcm91cCgkZXZlbnQsIDEpXCJcbiAgICAgIChrZXlkb3duKT1cImhhbmRsZUtleWRvd25PbkluZm9Hcm91cCgkZXZlbnQsIGZyb20sIDEpXCJcbiAgICAgICN0b1xuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwib3dsLWR0LWNvbnRyb2wtY29udGVudCBvd2wtZHQtY29udGFpbmVyLXJhbmdlLWNvbnRlbnRcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJvd2wtZHQtY29udGFpbmVyLWluZm8tbGFiZWxcIj57eyB0b0xhYmVsIH19Ojwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJvd2wtZHQtY29udGFpbmVyLWluZm8tdmFsdWVcIj57eyB0b0Zvcm1hdHRlZFZhbHVlIH19PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgKm5nSWY9XCJzaG93Q29udHJvbEJ1dHRvbnNcIlxuICAgIGNsYXNzPVwib3dsLWR0LWNvbnRhaW5lci1idXR0b25zIG93bC1kdC1jb250YWluZXItcm93XCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwib3dsLWR0LWNvbnRyb2wgb3dsLWR0LWNvbnRyb2wtYnV0dG9uIG93bC1kdC1jb250YWluZXItY29udHJvbC1idXR0b25cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cIm93bC1kdC1jb250cm9sLWNvbnRlbnQgb3dsLWR0LWNvbnRyb2wtYnV0dG9uLWNvbnRlbnRcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgID5cbiAgICAgICAge3sgY2FuY2VsTGFiZWwgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cIm93bC1kdC1jb250cm9sIG93bC1kdC1jb250cm9sLWJ1dHRvbiBvd2wtZHQtY29udGFpbmVyLWNvbnRyb2wtYnV0dG9uXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgIChjbGljayk9XCJvblNldENsaWNrZWQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJvd2wtZHQtY29udHJvbC1jb250ZW50IG93bC1kdC1jb250cm9sLWJ1dHRvbi1jb250ZW50XCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICA+XG4gICAgICAgIHt7IHNldExhYmVsIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|