@entake/particle 18.0.5 → 19.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/app/{modules → shared/components}/accordion/accordion.component.d.ts +3 -3
- package/app/{modules/date-picker → shared}/components/calendar/calendar.component.d.ts +7 -12
- package/app/{modules → shared/components}/checkbox/checkbox.component.d.ts +5 -7
- package/app/{modules → shared/components}/color-picker/color-picker.component.d.ts +3 -9
- package/app/{modules → shared/components}/date-picker/date-picker.component.d.ts +20 -26
- package/app/{modules/date-picker → shared}/components/date-range-picker/date-range-picker.component.d.ts +10 -11
- package/app/{modules → shared/components}/dialog/dialog.component.d.ts +14 -24
- package/app/{modules → shared/components}/dropdown/dropdown.component.d.ts +12 -14
- package/app/{modules/icons/components → shared/components/icon-select}/icon-select.component.d.ts +14 -17
- package/app/{modules → shared/components}/idle-timeout/idle-timeout.component.d.ts +3 -4
- package/app/{modules → shared/components}/input-mask/input-mask.component.d.ts +6 -7
- package/app/shared/components/layout-full-framing/layout-full-framing.component.d.ts +27 -0
- package/app/shared/components/layout-fullwidth-sidebar/layout-fullwidth-sidebar.component.d.ts +23 -0
- package/app/{modules/loader/components → shared/components/loader}/loader.component.d.ts +2 -2
- package/app/{modules → shared/components}/multi-select/multi-select.component.d.ts +18 -24
- package/app/{modules → shared/components}/notification/notification.component.d.ts +5 -13
- package/app/{modules → shared/components}/paginator/paginator.component.d.ts +12 -11
- package/app/{modules → shared/components}/popover/popover.component.d.ts +10 -15
- package/app/{modules → shared/components}/profile-pic/profile-pic.component.d.ts +1 -1
- package/app/shared/components/progress-bar/progress-bar.component.d.ts +15 -0
- package/app/{modules → shared/components}/rich-text/rich-text.component.d.ts +11 -12
- package/app/shared/components/scroll-to-top/scroll-to-top.component.d.ts +18 -0
- package/app/shared/components/slideover/slideover.component.d.ts +35 -0
- package/app/{modules → shared/components}/slider/slider.component.d.ts +8 -22
- package/app/{modules → shared/components}/toggle-switch/toggle-switch.component.d.ts +4 -6
- package/app/{modules → shared/components}/week-picker/week-picker.component.d.ts +21 -22
- package/app/{modules/accordion → shared}/directives/accordion-content.directive.d.ts +1 -2
- package/app/{modules/accordion → shared}/directives/accordion-header.directive.d.ts +1 -2
- package/app/{modules/accordion → shared}/directives/accordion-item.directive.d.ts +1 -1
- package/app/{modules/background-carousel → shared/directives}/background-carousel.directive.d.ts +4 -4
- package/app/{modules/keyfilter → shared/directives}/keyfilter.directive.d.ts +1 -7
- package/app/{modules/tooltip → shared/directives}/tooltip.directive.d.ts +3 -9
- package/app/shared/models/carousel-options.model.d.ts +21 -0
- package/app/shared/models/pagination-event.model.d.ts +8 -0
- package/app/shared/models/particle-component-text.model.d.ts +0 -24
- package/app/shared/modules/icons/particle-icons.module.d.ts +7 -0
- package/app/{modules/ordinal-number-pipe → shared/pipes}/ordinal-number.pipe.d.ts +1 -1
- package/app/shared/services/base-data.service.d.ts +2 -2
- package/app/shared/services/dialog.service.d.ts +1 -1
- package/app/{modules/notification → shared}/services/notification.service.d.ts +0 -4
- package/app/{modules/theming → shared}/services/theming.service.d.ts +0 -19
- package/fesm2022/entake-particle.mjs +3871 -5573
- package/fesm2022/entake-particle.mjs.map +1 -1
- package/package.json +16 -25
- package/public_api.d.ts +47 -82
- package/app/modules/accordion/accordion.module.d.ts +0 -11
- package/app/modules/background-carousel/carousel-options.model.d.ts +0 -30
- package/app/modules/background-carousel/particle-background-carousel.module.d.ts +0 -8
- package/app/modules/checkbox/checkbox.module.d.ts +0 -9
- package/app/modules/color-picker/color-picker.module.d.ts +0 -9
- package/app/modules/date-picker/date-picker.module.d.ts +0 -15
- package/app/modules/dialog/dialog.module.d.ts +0 -9
- package/app/modules/dropdown/dropdown.module.d.ts +0 -9
- package/app/modules/endpoint-state/components/endpoint-state.component.d.ts +0 -46
- package/app/modules/endpoint-state/endpoint-state.module.d.ts +0 -8
- package/app/modules/icons/particle-icons.module.d.ts +0 -13
- package/app/modules/idle-timeout/particle-idle-timeout.module.d.ts +0 -9
- package/app/modules/input-mask/input-mask.module.d.ts +0 -8
- package/app/modules/keyfilter/keyfilter.module.d.ts +0 -8
- package/app/modules/layout/components/layout-full-framing/layout-full-framing.component.d.ts +0 -27
- package/app/modules/layout/components/layout-fullwidth-sidebar/layout-fullwidth-sidebar.component.d.ts +0 -23
- package/app/modules/layout/layout.module.d.ts +0 -10
- package/app/modules/loader/loader.module.d.ts +0 -8
- package/app/modules/multi-select/multi-select.module.d.ts +0 -8
- package/app/modules/notification/notification.module.d.ts +0 -8
- package/app/modules/ordinal-number-pipe/ordinal-number-pipe.module.d.ts +0 -8
- package/app/modules/paginator/pagination-event.model.d.ts +0 -24
- package/app/modules/paginator/particle-paginator.module.d.ts +0 -13
- package/app/modules/popover/popover.module.d.ts +0 -9
- package/app/modules/profile-pic/particle-profile-pic.module.d.ts +0 -9
- package/app/modules/progress-bar/progress-bar.component.d.ts +0 -16
- package/app/modules/progress-bar/progress-bar.module.d.ts +0 -8
- package/app/modules/push-container/particle-push-container.module.d.ts +0 -9
- package/app/modules/push-container/push-container-state.model.d.ts +0 -7
- package/app/modules/push-container/push-container.component.d.ts +0 -137
- package/app/modules/rich-text/particle-rich-text.module.d.ts +0 -15
- package/app/modules/rich-text/render-rich-text.component.d.ts +0 -6
- package/app/modules/scroll-to-top/particle-scroll-to-top.module.d.ts +0 -8
- package/app/modules/scroll-to-top/scroll-to-top.component.d.ts +0 -19
- package/app/modules/slideover/particle-slideover.module.d.ts +0 -8
- package/app/modules/slideover/slideover.component.d.ts +0 -35
- package/app/modules/slider/slider.module.d.ts +0 -9
- package/app/modules/theming/components/theming.component.d.ts +0 -43
- package/app/modules/theming/theming.module.d.ts +0 -12
- package/app/modules/toggle-switch/toggle-switch.module.d.ts +0 -8
- package/app/modules/tooltip/tooltip.module.d.ts +0 -8
- package/app/modules/week-picker/week-picker.module.d.ts +0 -13
- package/app/shared/enums/endpoint-status.enum.d.ts +0 -9
- package/esm2022/app/modules/accordion/accordion.component.mjs +0 -101
- package/esm2022/app/modules/accordion/accordion.module.mjs +0 -37
- package/esm2022/app/modules/accordion/directives/accordion-content.directive.mjs +0 -17
- package/esm2022/app/modules/accordion/directives/accordion-header.directive.mjs +0 -17
- package/esm2022/app/modules/accordion/directives/accordion-item.directive.mjs +0 -36
- package/esm2022/app/modules/background-carousel/background-carousel.directive.mjs +0 -91
- package/esm2022/app/modules/background-carousel/carousel-options.model.mjs +0 -36
- package/esm2022/app/modules/background-carousel/particle-background-carousel.module.mjs +0 -24
- package/esm2022/app/modules/checkbox/checkbox.component.mjs +0 -108
- package/esm2022/app/modules/checkbox/checkbox.module.mjs +0 -28
- package/esm2022/app/modules/color-picker/color-picker.component.mjs +0 -306
- package/esm2022/app/modules/color-picker/color-picker.module.mjs +0 -19
- package/esm2022/app/modules/date-picker/components/calendar/calendar.component.mjs +0 -496
- package/esm2022/app/modules/date-picker/components/date-range-picker/date-range-picker.component.mjs +0 -250
- package/esm2022/app/modules/date-picker/date-picker.component.mjs +0 -538
- package/esm2022/app/modules/date-picker/date-picker.module.mjs +0 -56
- package/esm2022/app/modules/dialog/dialog.component.mjs +0 -177
- package/esm2022/app/modules/dialog/dialog.module.mjs +0 -28
- package/esm2022/app/modules/dropdown/dropdown.component.mjs +0 -682
- package/esm2022/app/modules/dropdown/dropdown.module.mjs +0 -28
- package/esm2022/app/modules/dropdown/models/dropdown-option-group.model.mjs +0 -2
- package/esm2022/app/modules/dropdown/models/dropdown-option.model.mjs +0 -2
- package/esm2022/app/modules/endpoint-state/components/endpoint-state.component.mjs +0 -75
- package/esm2022/app/modules/endpoint-state/endpoint-state.module.mjs +0 -22
- package/esm2022/app/modules/icons/components/icon-select.component.mjs +0 -376
- package/esm2022/app/modules/icons/models/fontawesome-icons-brands.model.mjs +0 -471
- package/esm2022/app/modules/icons/models/fontawesome-icons-regular.model.mjs +0 -166
- package/esm2022/app/modules/icons/models/fontawesome-icons-solid.model.mjs +0 -1016
- package/esm2022/app/modules/icons/models/particle-icons-brands.model.mjs +0 -24
- package/esm2022/app/modules/icons/models/particle-icons-regular.model.mjs +0 -50
- package/esm2022/app/modules/icons/models/particle-icons-solid.model.mjs +0 -89
- package/esm2022/app/modules/icons/particle-icons.module.mjs +0 -66
- package/esm2022/app/modules/icons/services/icons.service.mjs +0 -82
- package/esm2022/app/modules/idle-timeout/idle-timeout.component.mjs +0 -85
- package/esm2022/app/modules/idle-timeout/idle-timer.mjs +0 -66
- package/esm2022/app/modules/idle-timeout/particle-idle-timeout.module.mjs +0 -28
- package/esm2022/app/modules/input-mask/input-mask.component.mjs +0 -594
- package/esm2022/app/modules/input-mask/input-mask.module.mjs +0 -18
- package/esm2022/app/modules/keyfilter/keyfilter.directive.mjs +0 -174
- package/esm2022/app/modules/keyfilter/keyfilter.module.mjs +0 -18
- package/esm2022/app/modules/layout/components/layout-full-framing/layout-full-framing.component.mjs +0 -81
- package/esm2022/app/modules/layout/components/layout-fullwidth-sidebar/layout-fullwidth-sidebar.component.mjs +0 -67
- package/esm2022/app/modules/layout/layout.module.mjs +0 -33
- package/esm2022/app/modules/loader/components/loader.component.mjs +0 -30
- package/esm2022/app/modules/loader/loader.module.mjs +0 -24
- package/esm2022/app/modules/multi-select/models/multi-select-option-group.model.mjs +0 -2
- package/esm2022/app/modules/multi-select/models/multi-select-option.model.mjs +0 -2
- package/esm2022/app/modules/multi-select/multi-select.component.mjs +0 -665
- package/esm2022/app/modules/multi-select/multi-select.module.mjs +0 -18
- package/esm2022/app/modules/notification/models/notification.model.mjs +0 -2
- package/esm2022/app/modules/notification/notification.component.mjs +0 -122
- package/esm2022/app/modules/notification/notification.module.mjs +0 -18
- package/esm2022/app/modules/notification/services/notification.service.mjs +0 -84
- package/esm2022/app/modules/ordinal-number-pipe/ordinal-number-pipe.module.mjs +0 -20
- package/esm2022/app/modules/ordinal-number-pipe/ordinal-number.pipe.mjs +0 -49
- package/esm2022/app/modules/paginator/pagination-event.model.mjs +0 -29
- package/esm2022/app/modules/paginator/paginator.component.mjs +0 -207
- package/esm2022/app/modules/paginator/particle-paginator.module.mjs +0 -48
- package/esm2022/app/modules/popover/popover.component.mjs +0 -352
- package/esm2022/app/modules/popover/popover.module.mjs +0 -24
- package/esm2022/app/modules/profile-pic/particle-profile-pic.module.mjs +0 -28
- package/esm2022/app/modules/profile-pic/profile-pic.component.mjs +0 -75
- package/esm2022/app/modules/progress-bar/progress-bar.component.mjs +0 -43
- package/esm2022/app/modules/progress-bar/progress-bar.module.mjs +0 -24
- package/esm2022/app/modules/push-container/particle-push-container.module.mjs +0 -26
- package/esm2022/app/modules/push-container/push-container-state.model.mjs +0 -2
- package/esm2022/app/modules/push-container/push-container.component.mjs +0 -363
- package/esm2022/app/modules/rich-text/particle-rich-text.module.mjs +0 -64
- package/esm2022/app/modules/rich-text/render-rich-text.component.mjs +0 -18
- package/esm2022/app/modules/rich-text/rich-text-capabilities.model.mjs +0 -2
- package/esm2022/app/modules/rich-text/rich-text.component.mjs +0 -209
- package/esm2022/app/modules/scroll-to-top/particle-scroll-to-top.module.mjs +0 -24
- package/esm2022/app/modules/scroll-to-top/scroll-to-top.component.mjs +0 -49
- package/esm2022/app/modules/slideover/particle-slideover.module.mjs +0 -24
- package/esm2022/app/modules/slideover/slideover.component.mjs +0 -115
- package/esm2022/app/modules/slider/slider.component.mjs +0 -243
- package/esm2022/app/modules/slider/slider.module.mjs +0 -26
- package/esm2022/app/modules/theming/components/theming.component.mjs +0 -86
- package/esm2022/app/modules/theming/models/theme.model.mjs +0 -9
- package/esm2022/app/modules/theming/services/theme-change-detection.service.mjs +0 -38
- package/esm2022/app/modules/theming/services/theming.service.mjs +0 -510
- package/esm2022/app/modules/theming/theming.module.mjs +0 -55
- package/esm2022/app/modules/toggle-switch/models/toggle-options.model.mjs +0 -2
- package/esm2022/app/modules/toggle-switch/toggle-switch.component.mjs +0 -107
- package/esm2022/app/modules/toggle-switch/toggle-switch.module.mjs +0 -24
- package/esm2022/app/modules/tooltip/tooltip.directive.mjs +0 -381
- package/esm2022/app/modules/tooltip/tooltip.module.mjs +0 -18
- package/esm2022/app/modules/week-picker/week-picker.component.mjs +0 -511
- package/esm2022/app/modules/week-picker/week-picker.module.mjs +0 -40
- package/esm2022/app/shared/enums/endpoint-status.enum.mjs +0 -11
- package/esm2022/app/shared/interceptors/json.interceptor.mjs +0 -23
- package/esm2022/app/shared/models/auditable.model.mjs +0 -2
- package/esm2022/app/shared/models/data-list.model.mjs +0 -2
- package/esm2022/app/shared/models/id.model.mjs +0 -2
- package/esm2022/app/shared/models/observable-container.mjs +0 -15
- package/esm2022/app/shared/models/particle-component-text.model.mjs +0 -2
- package/esm2022/app/shared/services/base-data.service.mjs +0 -190
- package/esm2022/app/shared/services/dialog.service.mjs +0 -50
- package/esm2022/app/shared/services/local-storage.service.mjs +0 -60
- package/esm2022/entake-particle.mjs +0 -5
- package/esm2022/public_api.mjs +0 -98
- /package/app/{modules/dropdown → shared}/models/dropdown-option-group.model.d.ts +0 -0
- /package/app/{modules/dropdown → shared}/models/dropdown-option.model.d.ts +0 -0
- /package/app/{modules/icons → shared}/models/fontawesome-icons-brands.model.d.ts +0 -0
- /package/app/{modules/icons → shared}/models/fontawesome-icons-regular.model.d.ts +0 -0
- /package/app/{modules/icons → shared}/models/fontawesome-icons-solid.model.d.ts +0 -0
- /package/app/{modules/multi-select → shared}/models/multi-select-option-group.model.d.ts +0 -0
- /package/app/{modules/multi-select → shared}/models/multi-select-option.model.d.ts +0 -0
- /package/app/{modules/notification → shared}/models/notification.model.d.ts +0 -0
- /package/app/{modules/icons → shared}/models/particle-icons-brands.model.d.ts +0 -0
- /package/app/{modules/icons → shared}/models/particle-icons-regular.model.d.ts +0 -0
- /package/app/{modules/icons → shared}/models/particle-icons-solid.model.d.ts +0 -0
- /package/app/{modules/rich-text → shared/models}/rich-text-capabilities.model.d.ts +0 -0
- /package/app/{modules/theming → shared}/models/theme.model.d.ts +0 -0
- /package/app/{modules/toggle-switch → shared}/models/toggle-options.model.d.ts +0 -0
- /package/app/{modules/icons → shared}/services/icons.service.d.ts +0 -0
- /package/app/{modules/idle-timeout → shared/services}/idle-timer.d.ts +0 -0
- /package/app/{modules/theming → shared}/services/theme-change-detection.service.d.ts +0 -0
|
@@ -1,594 +0,0 @@
|
|
|
1
|
-
import { Component, Input, forwardRef, Output, EventEmitter, ViewChild } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common";
|
|
5
|
-
export const INPUTMASK_VALUE_ACCESSOR = {
|
|
6
|
-
provide: NG_VALUE_ACCESSOR,
|
|
7
|
-
useExisting: forwardRef(() => InputMaskComponent),
|
|
8
|
-
multi: true
|
|
9
|
-
};
|
|
10
|
-
export class InputMaskComponent {
|
|
11
|
-
type = 'text';
|
|
12
|
-
slotChar = '_';
|
|
13
|
-
autoClear = true;
|
|
14
|
-
style;
|
|
15
|
-
inputId = null;
|
|
16
|
-
styleClass = null;
|
|
17
|
-
placeholder = null;
|
|
18
|
-
size = null;
|
|
19
|
-
maxlength = null;
|
|
20
|
-
tabindex = null;
|
|
21
|
-
ariaLabel = null;
|
|
22
|
-
ariaRequired = null;
|
|
23
|
-
disabled = null;
|
|
24
|
-
readonly = null;
|
|
25
|
-
unmask = null;
|
|
26
|
-
name = null;
|
|
27
|
-
required = null;
|
|
28
|
-
characterPattern = '[A-Za-z]';
|
|
29
|
-
autoFocus = false;
|
|
30
|
-
autocomplete = null;
|
|
31
|
-
inputViewChild = null;
|
|
32
|
-
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
|
|
33
|
-
onComplete = new EventEmitter();
|
|
34
|
-
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
|
|
35
|
-
onFocus = new EventEmitter();
|
|
36
|
-
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
|
|
37
|
-
onBlur = new EventEmitter();
|
|
38
|
-
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
|
|
39
|
-
onInput = new EventEmitter();
|
|
40
|
-
value;
|
|
41
|
-
_mask = null;
|
|
42
|
-
input = null;
|
|
43
|
-
filled = false;
|
|
44
|
-
defs;
|
|
45
|
-
tests = null;
|
|
46
|
-
partialPosition;
|
|
47
|
-
firstNonMaskPos = null;
|
|
48
|
-
lastRequiredNonMaskPos;
|
|
49
|
-
len = null;
|
|
50
|
-
oldVal = null;
|
|
51
|
-
buffer;
|
|
52
|
-
defaultBuffer = null;
|
|
53
|
-
focusText = null;
|
|
54
|
-
caretTimeoutId;
|
|
55
|
-
androidChrome = false;
|
|
56
|
-
focused = false;
|
|
57
|
-
onModelChange = () => { };
|
|
58
|
-
onModelTouched = () => { };
|
|
59
|
-
constructor() { }
|
|
60
|
-
ngOnInit() {
|
|
61
|
-
const ua = navigator.userAgent;
|
|
62
|
-
this.androidChrome = /chrome/i.test(ua) && /android/i.test(ua);
|
|
63
|
-
this.initMask();
|
|
64
|
-
}
|
|
65
|
-
get mask() {
|
|
66
|
-
return this._mask;
|
|
67
|
-
}
|
|
68
|
-
set mask(val) {
|
|
69
|
-
this._mask = val;
|
|
70
|
-
this.initMask();
|
|
71
|
-
this.writeValue('');
|
|
72
|
-
this.onModelChange(this.value);
|
|
73
|
-
}
|
|
74
|
-
initMask() {
|
|
75
|
-
this.tests = [];
|
|
76
|
-
this.partialPosition = this.mask.length;
|
|
77
|
-
this.len = this.mask.length;
|
|
78
|
-
this.firstNonMaskPos = null;
|
|
79
|
-
this.defs = {
|
|
80
|
-
'9': '[0-9]',
|
|
81
|
-
'a': this.characterPattern,
|
|
82
|
-
'*': `${this.characterPattern}|[0-9]`
|
|
83
|
-
};
|
|
84
|
-
const maskTokens = this.mask.split('');
|
|
85
|
-
for (let i = 0; i < maskTokens.length; i++) {
|
|
86
|
-
const c = maskTokens[i];
|
|
87
|
-
if (c === '?') {
|
|
88
|
-
this.len--;
|
|
89
|
-
this.partialPosition = i;
|
|
90
|
-
}
|
|
91
|
-
else if (this.defs[c]) {
|
|
92
|
-
this.tests.push(new RegExp(this.defs[c]));
|
|
93
|
-
if (this.firstNonMaskPos === null) {
|
|
94
|
-
this.firstNonMaskPos = this.tests.length - 1;
|
|
95
|
-
}
|
|
96
|
-
if (i < this.partialPosition) {
|
|
97
|
-
this.lastRequiredNonMaskPos = this.tests.length - 1;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
this.tests.push(null);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
this.buffer = [];
|
|
105
|
-
for (let i = 0; i < maskTokens.length; i++) {
|
|
106
|
-
const c = maskTokens[i];
|
|
107
|
-
if (c !== '?') {
|
|
108
|
-
if (this.defs[c]) {
|
|
109
|
-
this.buffer.push(this.getPlaceholder(i));
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
this.buffer.push(c);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
this.defaultBuffer = this.buffer.join('');
|
|
117
|
-
}
|
|
118
|
-
writeValue(value) {
|
|
119
|
-
this.value = value;
|
|
120
|
-
if (this.inputViewChild && this.inputViewChild.nativeElement) {
|
|
121
|
-
if (this.value === undefined || this.value == null) {
|
|
122
|
-
this.inputViewChild.nativeElement.value = '';
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
this.inputViewChild.nativeElement.value = this.value;
|
|
126
|
-
}
|
|
127
|
-
this.checkVal();
|
|
128
|
-
this.focusText = this.inputViewChild.nativeElement.value;
|
|
129
|
-
this.updateFilledState();
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
registerOnChange(fn) {
|
|
133
|
-
this.onModelChange = fn;
|
|
134
|
-
}
|
|
135
|
-
registerOnTouched(fn) {
|
|
136
|
-
this.onModelTouched = fn;
|
|
137
|
-
}
|
|
138
|
-
setDisabledState(val) {
|
|
139
|
-
this.disabled = val;
|
|
140
|
-
}
|
|
141
|
-
caret(first, last) {
|
|
142
|
-
let range, begin, end;
|
|
143
|
-
if (!this.inputViewChild.nativeElement.offsetParent || this.inputViewChild.nativeElement !== document.activeElement) {
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
if (typeof first === 'number') {
|
|
147
|
-
begin = first;
|
|
148
|
-
end = (typeof last === 'number') ? last : begin;
|
|
149
|
-
if (this.inputViewChild.nativeElement.setSelectionRange) {
|
|
150
|
-
this.inputViewChild.nativeElement.setSelectionRange(begin, end);
|
|
151
|
-
}
|
|
152
|
-
else if (this.inputViewChild.nativeElement['createTextRange']) {
|
|
153
|
-
range = this.inputViewChild.nativeElement['createTextRange']();
|
|
154
|
-
range.collapse(true);
|
|
155
|
-
range.moveEnd('character', end);
|
|
156
|
-
range.moveStart('character', begin);
|
|
157
|
-
range.select();
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
if (this.inputViewChild.nativeElement.setSelectionRange) {
|
|
162
|
-
begin = this.inputViewChild.nativeElement.selectionStart;
|
|
163
|
-
end = this.inputViewChild.nativeElement.selectionEnd;
|
|
164
|
-
}
|
|
165
|
-
else if (document['selection'] && document['selection'].createRange) {
|
|
166
|
-
range = document['selection'].createRange();
|
|
167
|
-
begin = 0 - range.duplicate().moveStart('character', -100000);
|
|
168
|
-
end = begin + range.text.length;
|
|
169
|
-
}
|
|
170
|
-
return { begin: begin, end: end };
|
|
171
|
-
}
|
|
172
|
-
return null;
|
|
173
|
-
}
|
|
174
|
-
isCompleted() {
|
|
175
|
-
for (let i = this.firstNonMaskPos; i <= this.lastRequiredNonMaskPos; i++) {
|
|
176
|
-
if (this.tests[i] && this.buffer[i] === this.getPlaceholder(i)) {
|
|
177
|
-
return false;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
return true;
|
|
181
|
-
}
|
|
182
|
-
getPlaceholder(i) {
|
|
183
|
-
if (i < this.slotChar.length) {
|
|
184
|
-
return this.slotChar.charAt(i);
|
|
185
|
-
}
|
|
186
|
-
return this.slotChar.charAt(0);
|
|
187
|
-
}
|
|
188
|
-
seekNext(pos) {
|
|
189
|
-
while (++pos < this.len && !this.tests[pos]) { }
|
|
190
|
-
return pos;
|
|
191
|
-
}
|
|
192
|
-
seekPrev(pos) {
|
|
193
|
-
while (--pos >= 0 && !this.tests[pos]) { }
|
|
194
|
-
return pos;
|
|
195
|
-
}
|
|
196
|
-
shiftL(begin, end) {
|
|
197
|
-
let i, j;
|
|
198
|
-
if (begin < 0) {
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
for (i = begin, j = this.seekNext(end); i < this.len; i++) {
|
|
202
|
-
if (this.tests[i]) {
|
|
203
|
-
if (j < this.len && this.tests[i].test(this.buffer[j])) {
|
|
204
|
-
this.buffer[i] = this.buffer[j];
|
|
205
|
-
this.buffer[j] = this.getPlaceholder(j);
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
break;
|
|
209
|
-
}
|
|
210
|
-
j = this.seekNext(j);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
this.writeBuffer();
|
|
214
|
-
this.caret(Math.max(this.firstNonMaskPos, begin));
|
|
215
|
-
}
|
|
216
|
-
shiftR(pos) {
|
|
217
|
-
let i, c, j, t;
|
|
218
|
-
for (i = pos, c = this.getPlaceholder(pos); i < this.len; i++) {
|
|
219
|
-
if (this.tests[i]) {
|
|
220
|
-
j = this.seekNext(i);
|
|
221
|
-
t = this.buffer[i];
|
|
222
|
-
this.buffer[i] = c;
|
|
223
|
-
if (j < this.len && this.tests[j].test(t)) {
|
|
224
|
-
c = t;
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
break;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
handleAndroidInput(e) {
|
|
233
|
-
const curVal = this.inputViewChild.nativeElement.value;
|
|
234
|
-
const pos = this.caret();
|
|
235
|
-
if (this.oldVal && this.oldVal.length && this.oldVal.length > curVal.length) {
|
|
236
|
-
// a deletion or backspace happened
|
|
237
|
-
this.checkVal(true);
|
|
238
|
-
while (pos.begin > 0 && !this.tests[pos.begin - 1]) {
|
|
239
|
-
pos.begin--;
|
|
240
|
-
}
|
|
241
|
-
if (pos.begin === 0) {
|
|
242
|
-
while (pos.begin < this.firstNonMaskPos && !this.tests[pos.begin]) {
|
|
243
|
-
pos.begin++;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
setTimeout(() => {
|
|
247
|
-
this.caret(pos.begin, pos.begin);
|
|
248
|
-
this.updateModel(e);
|
|
249
|
-
if (this.isCompleted()) {
|
|
250
|
-
this.onComplete.emit();
|
|
251
|
-
}
|
|
252
|
-
}, 0);
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
255
|
-
this.checkVal(true);
|
|
256
|
-
while (pos.begin < this.len && !this.tests[pos.begin]) {
|
|
257
|
-
pos.begin++;
|
|
258
|
-
}
|
|
259
|
-
setTimeout(() => {
|
|
260
|
-
this.caret(pos.begin, pos.begin);
|
|
261
|
-
this.updateModel(e);
|
|
262
|
-
if (this.isCompleted()) {
|
|
263
|
-
this.onComplete.emit();
|
|
264
|
-
}
|
|
265
|
-
}, 0);
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
onInputBlur(e) {
|
|
269
|
-
this.focused = false;
|
|
270
|
-
this.onModelTouched();
|
|
271
|
-
this.checkVal();
|
|
272
|
-
this.updateFilledState();
|
|
273
|
-
this.onBlur.emit(e);
|
|
274
|
-
if (this.inputViewChild.nativeElement.value !== this.focusText || this.inputViewChild.nativeElement.value !== this.value) {
|
|
275
|
-
this.updateModel(e);
|
|
276
|
-
const event = document.createEvent('HTMLEvents');
|
|
277
|
-
event.initEvent('change', true, false);
|
|
278
|
-
this.inputViewChild.nativeElement.dispatchEvent(event);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
onKeyDown(e) {
|
|
282
|
-
if (this.readonly) {
|
|
283
|
-
return;
|
|
284
|
-
}
|
|
285
|
-
const k = e.which || e.keyCode;
|
|
286
|
-
let pos, begin, end;
|
|
287
|
-
const iPhone = /iphone/i.test(navigator.userAgent);
|
|
288
|
-
this.oldVal = this.inputViewChild.nativeElement.value;
|
|
289
|
-
// backspace, delete, and escape get special treatment
|
|
290
|
-
if (k === 8 || k === 46 || (iPhone && k === 127)) {
|
|
291
|
-
pos = this.caret();
|
|
292
|
-
begin = pos.begin;
|
|
293
|
-
end = pos.end;
|
|
294
|
-
if (end - begin === 0) {
|
|
295
|
-
begin = k !== 46 ? this.seekPrev(begin) : (end = this.seekNext(begin - 1));
|
|
296
|
-
end = k === 46 ? this.seekNext(end) : end;
|
|
297
|
-
}
|
|
298
|
-
this.clearBuffer(begin, end);
|
|
299
|
-
this.shiftL(begin, end - 1);
|
|
300
|
-
this.updateModel(e);
|
|
301
|
-
e.preventDefault();
|
|
302
|
-
}
|
|
303
|
-
else if (k === 13) { // enter
|
|
304
|
-
this.onInputBlur(e);
|
|
305
|
-
this.updateModel(e);
|
|
306
|
-
}
|
|
307
|
-
else if (k === 27) { // escape
|
|
308
|
-
this.inputViewChild.nativeElement.value = this.focusText;
|
|
309
|
-
this.caret(0, this.checkVal());
|
|
310
|
-
this.updateModel(e);
|
|
311
|
-
e.preventDefault();
|
|
312
|
-
}
|
|
313
|
-
else if (e.key === 'ArrowLeft') {
|
|
314
|
-
const { selectionStart, selectionEnd } = this.inputViewChild.nativeElement;
|
|
315
|
-
const checkedVal = this.checkVal(true);
|
|
316
|
-
if (selectionStart === selectionEnd && (selectionStart - 1) > checkedVal) {
|
|
317
|
-
this.caret(checkedVal, checkedVal);
|
|
318
|
-
e.preventDefault();
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
else if (e.key === 'ArrowRight') {
|
|
322
|
-
const { selectionStart, selectionEnd } = this.inputViewChild.nativeElement;
|
|
323
|
-
const checkedVal = this.checkVal(true);
|
|
324
|
-
if (selectionStart === selectionEnd && (selectionStart + 1) > checkedVal) {
|
|
325
|
-
this.caret(checkedVal, checkedVal);
|
|
326
|
-
e.preventDefault();
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
onKeyPress(e) {
|
|
331
|
-
if (this.readonly) {
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
const k = e.which || e.keyCode;
|
|
335
|
-
const pos = this.caret();
|
|
336
|
-
let next = 0;
|
|
337
|
-
let p, c, completed;
|
|
338
|
-
if (e.ctrlKey || e.altKey || e.metaKey || k < 32 || (k > 34 && k < 41)) { // Ignore
|
|
339
|
-
return;
|
|
340
|
-
}
|
|
341
|
-
else if (k && k !== 13) {
|
|
342
|
-
if (pos.end - pos.begin !== 0) {
|
|
343
|
-
this.clearBuffer(pos.begin, pos.end);
|
|
344
|
-
this.shiftL(pos.begin, pos.end - 1);
|
|
345
|
-
}
|
|
346
|
-
p = this.seekNext(pos.begin - 1);
|
|
347
|
-
if (p < this.len) {
|
|
348
|
-
c = String.fromCharCode(k);
|
|
349
|
-
if (this.tests[p].test(c)) {
|
|
350
|
-
this.shiftR(p);
|
|
351
|
-
this.buffer[p] = c;
|
|
352
|
-
this.writeBuffer();
|
|
353
|
-
next = this.seekNext(p);
|
|
354
|
-
if (/android/i.test(navigator.userAgent)) {
|
|
355
|
-
// Path for CSP Violation on FireFox OS 1.1
|
|
356
|
-
const proxy = () => {
|
|
357
|
-
this.caret(next);
|
|
358
|
-
};
|
|
359
|
-
setTimeout(proxy, 0);
|
|
360
|
-
}
|
|
361
|
-
else {
|
|
362
|
-
this.caret(next);
|
|
363
|
-
}
|
|
364
|
-
if (pos.begin <= this.lastRequiredNonMaskPos) {
|
|
365
|
-
completed = this.isCompleted();
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
e.preventDefault();
|
|
370
|
-
}
|
|
371
|
-
this.updateModel(e);
|
|
372
|
-
this.updateFilledState();
|
|
373
|
-
if (completed) {
|
|
374
|
-
this.onComplete.emit();
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
/**
|
|
378
|
-
* Adjust cursor position if clicked on empty space ahead of the existing input
|
|
379
|
-
*/
|
|
380
|
-
onClick() {
|
|
381
|
-
const { selectionStart, selectionEnd } = this.inputViewChild.nativeElement;
|
|
382
|
-
const checkedVal = this.checkVal(true);
|
|
383
|
-
if (selectionStart === selectionEnd && selectionStart > checkedVal) {
|
|
384
|
-
this.caret(checkedVal, checkedVal);
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
clearBuffer(start, end) {
|
|
388
|
-
let i;
|
|
389
|
-
for (i = start; i < end && i < this.len; i++) {
|
|
390
|
-
if (this.tests[i]) {
|
|
391
|
-
this.buffer[i] = this.getPlaceholder(i);
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
writeBuffer() {
|
|
396
|
-
this.inputViewChild.nativeElement.value = this.buffer.join('');
|
|
397
|
-
}
|
|
398
|
-
checkVal(allow) {
|
|
399
|
-
// try to place characters where they belong
|
|
400
|
-
const test = this.inputViewChild.nativeElement.value;
|
|
401
|
-
let lastMatch = -1, i, c, pos;
|
|
402
|
-
for (i = 0, pos = 0; i < this.len; i++) {
|
|
403
|
-
if (this.tests[i]) {
|
|
404
|
-
this.buffer[i] = this.getPlaceholder(i);
|
|
405
|
-
while (pos++ < test.length) {
|
|
406
|
-
c = test.charAt(pos - 1);
|
|
407
|
-
if (this.tests[i].test(c)) {
|
|
408
|
-
this.buffer[i] = c;
|
|
409
|
-
lastMatch = i;
|
|
410
|
-
break;
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
if (pos > test.length) {
|
|
414
|
-
this.clearBuffer(i + 1, this.len);
|
|
415
|
-
break;
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
else {
|
|
419
|
-
if (this.buffer[i] === test.charAt(pos)) {
|
|
420
|
-
pos++;
|
|
421
|
-
}
|
|
422
|
-
if (i < this.partialPosition) {
|
|
423
|
-
lastMatch = i;
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
if (allow) {
|
|
428
|
-
this.writeBuffer();
|
|
429
|
-
}
|
|
430
|
-
else if (lastMatch + 1 < this.partialPosition) {
|
|
431
|
-
if (this.autoClear || this.buffer.join('') === this.defaultBuffer) {
|
|
432
|
-
// Invalid value. Remove it and replace it with the
|
|
433
|
-
// mask, which is the default behavior.
|
|
434
|
-
if (this.inputViewChild.nativeElement.value) {
|
|
435
|
-
this.inputViewChild.nativeElement.value = '';
|
|
436
|
-
}
|
|
437
|
-
this.clearBuffer(0, this.len);
|
|
438
|
-
}
|
|
439
|
-
else {
|
|
440
|
-
// Invalid value, but we opt to show the value to the
|
|
441
|
-
// user and allow them to correct their mistake.
|
|
442
|
-
this.writeBuffer();
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
else {
|
|
446
|
-
this.writeBuffer();
|
|
447
|
-
this.inputViewChild.nativeElement.value = this.inputViewChild.nativeElement.value.substring(0, lastMatch + 1);
|
|
448
|
-
}
|
|
449
|
-
return (this.partialPosition ? i : this.firstNonMaskPos);
|
|
450
|
-
}
|
|
451
|
-
onInputFocus(event) {
|
|
452
|
-
if (this.readonly) {
|
|
453
|
-
return;
|
|
454
|
-
}
|
|
455
|
-
this.focused = true;
|
|
456
|
-
clearTimeout(this.caretTimeoutId);
|
|
457
|
-
let pos;
|
|
458
|
-
this.focusText = this.inputViewChild.nativeElement.value;
|
|
459
|
-
pos = this.checkVal();
|
|
460
|
-
this.caretTimeoutId = setTimeout(() => {
|
|
461
|
-
if (this.inputViewChild.nativeElement !== document.activeElement) {
|
|
462
|
-
return;
|
|
463
|
-
}
|
|
464
|
-
this.writeBuffer();
|
|
465
|
-
if (pos === this.mask.replace('?', '').length) {
|
|
466
|
-
this.caret(0, pos);
|
|
467
|
-
}
|
|
468
|
-
else {
|
|
469
|
-
this.caret(pos);
|
|
470
|
-
}
|
|
471
|
-
}, 10);
|
|
472
|
-
this.onFocus.emit(event);
|
|
473
|
-
}
|
|
474
|
-
onInputChange(event) {
|
|
475
|
-
if (this.androidChrome) {
|
|
476
|
-
this.handleAndroidInput(event);
|
|
477
|
-
}
|
|
478
|
-
else {
|
|
479
|
-
this.handleInputChange(event);
|
|
480
|
-
}
|
|
481
|
-
this.onInput.emit(event);
|
|
482
|
-
}
|
|
483
|
-
handleInputChange(event) {
|
|
484
|
-
if (this.readonly) {
|
|
485
|
-
return;
|
|
486
|
-
}
|
|
487
|
-
setTimeout(() => {
|
|
488
|
-
const pos = this.checkVal(true);
|
|
489
|
-
this.caret(pos);
|
|
490
|
-
this.updateModel(event);
|
|
491
|
-
if (this.isCompleted()) {
|
|
492
|
-
this.onComplete.emit();
|
|
493
|
-
}
|
|
494
|
-
}, 0);
|
|
495
|
-
}
|
|
496
|
-
getUnmaskedValue() {
|
|
497
|
-
const unmaskedBuffer = [];
|
|
498
|
-
for (let i = 0; i < this.buffer.length; i++) {
|
|
499
|
-
const c = this.buffer[i];
|
|
500
|
-
if (this.tests[i] && c !== this.getPlaceholder(i)) {
|
|
501
|
-
unmaskedBuffer.push(c);
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
return unmaskedBuffer.join('');
|
|
505
|
-
}
|
|
506
|
-
updateModel(e) {
|
|
507
|
-
const updatedValue = this.unmask ? this.getUnmaskedValue() : e.target?.value;
|
|
508
|
-
if (updatedValue !== null && updatedValue !== undefined) {
|
|
509
|
-
this.value = updatedValue;
|
|
510
|
-
this.onModelChange(this.value);
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
updateFilledState() {
|
|
514
|
-
this.filled = this.inputViewChild.nativeElement && this.inputViewChild.nativeElement.value !== '';
|
|
515
|
-
}
|
|
516
|
-
focus() {
|
|
517
|
-
this.inputViewChild.nativeElement.focus();
|
|
518
|
-
}
|
|
519
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: InputMaskComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
520
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: InputMaskComponent, selector: "particle-input-mask", inputs: { type: "type", slotChar: "slotChar", autoClear: "autoClear", style: "style", inputId: "inputId", styleClass: "styleClass", placeholder: "placeholder", size: "size", maxlength: "maxlength", tabindex: "tabindex", ariaLabel: "ariaLabel", ariaRequired: "ariaRequired", disabled: "disabled", readonly: "readonly", unmask: "unmask", name: "name", required: "required", characterPattern: "characterPattern", autoFocus: "autoFocus", autocomplete: "autocomplete", mask: "mask" }, outputs: { onComplete: "onComplete", onFocus: "onFocus", onBlur: "onBlur", onInput: "onInput" }, host: { properties: { "class.ui-inputwrapper-filled": "filled", "class.ui-inputwrapper-focus": "focus" } }, providers: [INPUTMASK_VALUE_ACCESSOR], viewQueries: [{ propertyName: "inputViewChild", first: true, predicate: ["input"], descendants: true, static: true }], ngImport: i0, template: `<input #input [attr.id]="inputId" [attr.type]="type" [attr.name]="name" [ngStyle]="style" [ngClass]="styleClass" [attr.placeholder]="placeholder"
|
|
521
|
-
[attr.size]="size" [attr.autocomplete]="autocomplete" [attr.maxlength]="maxlength" [attr.tabindex]="tabindex" [attr.aria-label]="ariaLabel" [attr.aria-required]="ariaRequired" [disabled]="disabled" [readonly]="readonly" [attr.required]="required"
|
|
522
|
-
(focus)="onInputFocus($event)" (blur)="onInputBlur($event)" (keydown)="onKeyDown($event)" (keypress)="onKeyPress($event)" [attr.autofocus]="autoFocus"
|
|
523
|
-
(input)="onInputChange($event)" (paste)="handleInputChange($event)" (click)="onClick()">`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
524
|
-
}
|
|
525
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: InputMaskComponent, decorators: [{
|
|
526
|
-
type: Component,
|
|
527
|
-
args: [{
|
|
528
|
-
selector: 'particle-input-mask',
|
|
529
|
-
template: `<input #input [attr.id]="inputId" [attr.type]="type" [attr.name]="name" [ngStyle]="style" [ngClass]="styleClass" [attr.placeholder]="placeholder"
|
|
530
|
-
[attr.size]="size" [attr.autocomplete]="autocomplete" [attr.maxlength]="maxlength" [attr.tabindex]="tabindex" [attr.aria-label]="ariaLabel" [attr.aria-required]="ariaRequired" [disabled]="disabled" [readonly]="readonly" [attr.required]="required"
|
|
531
|
-
(focus)="onInputFocus($event)" (blur)="onInputBlur($event)" (keydown)="onKeyDown($event)" (keypress)="onKeyPress($event)" [attr.autofocus]="autoFocus"
|
|
532
|
-
(input)="onInputChange($event)" (paste)="handleInputChange($event)" (click)="onClick()">`,
|
|
533
|
-
// eslint-disable-next-line @angular-eslint/no-host-metadata-property
|
|
534
|
-
host: {
|
|
535
|
-
'[class.ui-inputwrapper-filled]': 'filled',
|
|
536
|
-
'[class.ui-inputwrapper-focus]': 'focus'
|
|
537
|
-
},
|
|
538
|
-
providers: [INPUTMASK_VALUE_ACCESSOR]
|
|
539
|
-
}]
|
|
540
|
-
}], ctorParameters: () => [], propDecorators: { type: [{
|
|
541
|
-
type: Input
|
|
542
|
-
}], slotChar: [{
|
|
543
|
-
type: Input
|
|
544
|
-
}], autoClear: [{
|
|
545
|
-
type: Input
|
|
546
|
-
}], style: [{
|
|
547
|
-
type: Input
|
|
548
|
-
}], inputId: [{
|
|
549
|
-
type: Input
|
|
550
|
-
}], styleClass: [{
|
|
551
|
-
type: Input
|
|
552
|
-
}], placeholder: [{
|
|
553
|
-
type: Input
|
|
554
|
-
}], size: [{
|
|
555
|
-
type: Input
|
|
556
|
-
}], maxlength: [{
|
|
557
|
-
type: Input
|
|
558
|
-
}], tabindex: [{
|
|
559
|
-
type: Input
|
|
560
|
-
}], ariaLabel: [{
|
|
561
|
-
type: Input
|
|
562
|
-
}], ariaRequired: [{
|
|
563
|
-
type: Input
|
|
564
|
-
}], disabled: [{
|
|
565
|
-
type: Input
|
|
566
|
-
}], readonly: [{
|
|
567
|
-
type: Input
|
|
568
|
-
}], unmask: [{
|
|
569
|
-
type: Input
|
|
570
|
-
}], name: [{
|
|
571
|
-
type: Input
|
|
572
|
-
}], required: [{
|
|
573
|
-
type: Input
|
|
574
|
-
}], characterPattern: [{
|
|
575
|
-
type: Input
|
|
576
|
-
}], autoFocus: [{
|
|
577
|
-
type: Input
|
|
578
|
-
}], autocomplete: [{
|
|
579
|
-
type: Input
|
|
580
|
-
}], inputViewChild: [{
|
|
581
|
-
type: ViewChild,
|
|
582
|
-
args: ['input', { static: true }]
|
|
583
|
-
}], onComplete: [{
|
|
584
|
-
type: Output
|
|
585
|
-
}], onFocus: [{
|
|
586
|
-
type: Output
|
|
587
|
-
}], onBlur: [{
|
|
588
|
-
type: Output
|
|
589
|
-
}], onInput: [{
|
|
590
|
-
type: Output
|
|
591
|
-
}], mask: [{
|
|
592
|
-
type: Input
|
|
593
|
-
}] } });
|
|
594
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbWFzay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvaW5wdXQtbWFzay9pbnB1dC1tYXNrLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULEtBQUssRUFDTCxVQUFVLEVBQ1YsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGlCQUFpQixFQUF1QixNQUFNLGdCQUFnQixDQUFDOzs7QUFDdkUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQVE7SUFDM0MsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQWNGLE1BQU0sT0FBTyxrQkFBa0I7SUFDcEIsSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUNkLFFBQVEsR0FBRyxHQUFHLENBQUM7SUFDZixTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLEtBQUssQ0FBTTtJQUNYLE9BQU8sR0FBVyxJQUFXLENBQUM7SUFDOUIsVUFBVSxHQUFXLElBQVcsQ0FBQztJQUNqQyxXQUFXLEdBQVcsSUFBVyxDQUFDO0lBQ2xDLElBQUksR0FBVyxJQUFXLENBQUM7SUFDM0IsU0FBUyxHQUFXLElBQVcsQ0FBQztJQUNoQyxRQUFRLEdBQVcsSUFBVyxDQUFDO0lBQy9CLFNBQVMsR0FBVyxJQUFXLENBQUM7SUFDaEMsWUFBWSxHQUFZLElBQVcsQ0FBQztJQUNwQyxRQUFRLEdBQVksSUFBVyxDQUFDO0lBQ2hDLFFBQVEsR0FBWSxJQUFXLENBQUM7SUFDaEMsTUFBTSxHQUFZLElBQVcsQ0FBQztJQUM5QixJQUFJLEdBQVcsSUFBVyxDQUFDO0lBQzNCLFFBQVEsR0FBWSxJQUFXLENBQUM7SUFDaEMs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c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIGZvcndhcmRSZWYsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3Nvcn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuZXhwb3J0IGNvbnN0IElOUFVUTUFTS19WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW5wdXRNYXNrQ29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn07XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwYXJ0aWNsZS1pbnB1dC1tYXNrJyxcbiAgdGVtcGxhdGU6IGA8aW5wdXQgI2lucHV0IFthdHRyLmlkXT1cImlucHV0SWRcIiBbYXR0ci50eXBlXT1cInR5cGVcIiBbYXR0ci5uYW1lXT1cIm5hbWVcIiBbbmdTdHlsZV09XCJzdHlsZVwiIFtuZ0NsYXNzXT1cInN0eWxlQ2xhc3NcIiBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnNpemVdPVwic2l6ZVwiIFthdHRyLmF1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGVcIiBbYXR0ci5tYXhsZW5ndGhdPVwibWF4bGVuZ3RoXCIgW2F0dHIudGFiaW5kZXhdPVwidGFiaW5kZXhcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwiYXJpYVJlcXVpcmVkXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2F0dHIucmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKCRldmVudClcIiAoYmx1cik9XCJvbklucHV0Qmx1cigkZXZlbnQpXCIgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIiAoa2V5cHJlc3MpPVwib25LZXlQcmVzcygkZXZlbnQpXCIgW2F0dHIuYXV0b2ZvY3VzXT1cImF1dG9Gb2N1c1wiXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIiAocGFzdGUpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIChjbGljayk9XCJvbkNsaWNrKClcIj5gLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWhvc3QtbWV0YWRhdGEtcHJvcGVydHlcbiAgaG9zdDoge1xuICAgICdbY2xhc3MudWktaW5wdXR3cmFwcGVyLWZpbGxlZF0nOiAnZmlsbGVkJyxcbiAgICAnW2NsYXNzLnVpLWlucHV0d3JhcHBlci1mb2N1c10nOiAnZm9jdXMnXG4gIH0sXG4gIHByb3ZpZGVyczogW0lOUFVUTUFTS19WQUxVRV9BQ0NFU1NPUl1cbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRNYXNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIHR5cGUgPSAndGV4dCc7XG4gIEBJbnB1dCgpIHNsb3RDaGFyID0gJ18nO1xuICBASW5wdXQoKSBhdXRvQ2xlYXIgPSB0cnVlO1xuICBASW5wdXQoKSBzdHlsZTogYW55O1xuICBASW5wdXQoKSBpbnB1dElkOiBzdHJpbmcgPSBudWxsIGFzIGFueTtcbiAgQElucHV0KCkgc3R5bGVDbGFzczogc3RyaW5nID0gbnVsbCBhcyBhbnk7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSBudWxsIGFzIGFueTtcbiAgQElucHV0KCkgc2l6ZTogbnVtYmVyID0gbnVsbCBhcyBhbnk7XG4gIEBJbnB1dCgpIG1heGxlbmd0aDogbnVtYmVyID0gbnVsbCBhcyBhbnk7XG4gIEBJbnB1dCgpIHRhYmluZGV4OiBzdHJpbmcgPSBudWxsIGFzIGFueTtcbiAgQElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmcgPSBudWxsIGFzIGFueTtcbiAgQElucHV0KCkgYXJpYVJlcXVpcmVkOiBib29sZWFuID0gbnVsbCBhcyBhbnk7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gbnVsbCBhcyBhbnk7XG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gbnVsbCBhcyBhbnk7XG4gIEBJbnB1dCgpIHVubWFzazogYm9vbGVhbiA9IG51bGwgYXMgYW55O1xuICBASW5wdXQoKSBuYW1lOiBzdHJpbmcgPSBudWxsIGFzIGFueTtcbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSBudWxsIGFzIGFueTtcbiAgQElucHV0KCkgY2hhcmFjdGVyUGF0dGVybiA9ICdbQS1aYS16XSc7XG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IGZhbHNlO1xuICBASW5wdXQoKSBhdXRvY29tcGxldGU6IHN0cmluZyA9IG51bGwgYXMgYW55O1xuICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0Vmlld0NoaWxkOiBFbGVtZW50UmVmID0gbnVsbCBhcyBhbnk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICBAT3V0cHV0KCkgb25Db21wbGV0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICBAT3V0cHV0KCkgb25Gb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICBAT3V0cHV0KCkgb25CbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gIEBPdXRwdXQoKSBvbklucHV0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgdmFsdWU6IGFueTtcbiAgX21hc2s6IHN0cmluZyA9IG51bGwgYXMgYW55O1xuICBpbnB1dDogSFRNTElucHV0RWxlbWVudCA9IG51bGwgYXMgYW55O1xuICBmaWxsZWQgPSBmYWxzZTtcbiAgZGVmczogYW55O1xuICB0ZXN0czogYW55W10gPSBudWxsIGFzIGFueTtcbiAgcGFydGlhbFBvc2l0aW9uOiBhbnk7XG4gIGZpcnN0Tm9uTWFza1BvczogbnVtYmVyID0gbnVsbCBhcyBhbnk7XG4gIGxhc3RSZXF1aXJlZE5vbk1hc2tQb3M6IGFueTtcbiAgbGVuOiBudW1iZXIgPSBudWxsIGFzIGFueTtcbiAgb2xkVmFsOiBzdHJpbmcgPSBudWxsIGFzIGFueTtcbiAgYnVmZmVyOiBhbnk7XG4gIGRlZmF1bHRCdWZmZXI6IHN0cmluZyA9IG51bGwgYXMgYW55O1xuICBmb2N1c1RleHQ6IHN0cmluZyA9IG51bGwgYXMgYW55O1xuICBjYXJldFRpbWVvdXRJZDogYW55O1xuICBhbmRyb2lkQ2hyb21lID0gZmFsc2U7XG4gIGZvY3VzZWQgPSBmYWxzZTtcbiAgb25Nb2RlbENoYW5nZTogRnVuY3Rpb24gPSAoKSA9PiB7fTtcbiAgb25Nb2RlbFRvdWNoZWQ6IEZ1bmN0aW9uID0gKCkgPT4ge307XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIHRoaXMuYW5kcm9pZENocm9tZSA9IC9jaHJvbWUvaS50ZXN0KHVhKSAmJiAvYW5kcm9pZC9pLnRlc3QodWEpO1xuICAgIHRoaXMuaW5pdE1hc2soKTtcbiAgfVxuICBASW5wdXQoKSBnZXQgbWFzaygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9tYXNrO1xuICB9XG4gIHNldCBtYXNrKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5fbWFzayA9IHZhbDtcbiAgICB0aGlzLmluaXRNYXNrKCk7XG4gICAgdGhpcy53cml0ZVZhbHVlKCcnKTtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy52YWx1ZSk7XG4gIH1cbiAgaW5pdE1hc2soKTogdm9pZCB7XG4gICAgdGhpcy50ZXN0cyA9IFtdO1xuICAgIHRoaXMucGFydGlhbFBvc2l0aW9uID0gdGhpcy5tYXNrLmxlbmd0aDtcbiAgICB0aGlzLmxlbiA9IHRoaXMubWFzay5sZW5ndGg7XG4gICAgdGhpcy5maXJzdE5vbk1hc2tQb3MgPSBudWxsIGFzIGFueTtcbiAgICB0aGlzLmRlZnMgPSB7XG4gICAgICAnOSc6ICdbMC05XScsXG4gICAgICAnYSc6IHRoaXMuY2hhcmFjdGVyUGF0dGVybixcbiAgICAgICcqJzogYCR7dGhpcy5jaGFyYWN0ZXJQYXR0ZXJufXxbMC05XWBcbiAgICB9O1xuICAgIGNvbnN0IG1hc2tUb2tlbnMgPSB0aGlzLm1hc2suc3BsaXQoJycpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWFza1Rva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYyA9IG1hc2tUb2tlbnNbaV07XG4gICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgIHRoaXMubGVuLS07XG4gICAgICAgIHRoaXMucGFydGlhbFBvc2l0aW9uID0gaTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kZWZzW2NdKSB7XG4gICAgICAgIHRoaXMudGVzdHMucHVzaChuZXcgUmVnRXhwKHRoaXMuZGVmc1tjXSkpO1xuICAgICAgICBpZiAodGhpcy5maXJzdE5vbk1hc2tQb3MgPT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmZpcnN0Tm9uTWFza1BvcyA9IHRoaXMudGVzdHMubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA8IHRoaXMucGFydGlhbFBvc2l0aW9uKSB7XG4gICAgICAgICAgdGhpcy5sYXN0UmVxdWlyZWROb25NYXNrUG9zID0gdGhpcy50ZXN0cy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRlc3RzLnB1c2gobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYnVmZmVyID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXNrVG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gbWFza1Rva2Vuc1tpXTtcbiAgICAgIGlmIChjICE9PSAnPycpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVmc1tjXSkge1xuICAgICAgICAgIHRoaXMuYnVmZmVyLnB1c2godGhpcy5nZXRQbGFjZWhvbGRlcihpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5idWZmZXIucHVzaChjKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRlZmF1bHRCdWZmZXIgPSB0aGlzLmJ1ZmZlci5qb2luKCcnKTtcbiAgfVxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuaW5wdXRWaWV3Q2hpbGQgJiYgdGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICB9XG4gICAgICB0aGlzLmNoZWNrVmFsKCk7XG4gICAgICB0aGlzLmZvY3VzVGV4dCA9IHRoaXMuaW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgIHRoaXMudXBkYXRlRmlsbGVkU3RhdGUoKTtcbiAgICB9XG4gIH1cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UgPSBmbjtcbiAgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLm9uTW9kZWxUb3VjaGVkID0gZm47XG4gIH1cbiAgc2V0RGlzYWJsZWRTdGF0ZSh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gdmFsO1xuICB9XG4gIGNhcmV0KGZpcnN0PzogbnVtYmVyLCBsYXN0PzogbnVtYmVyKTogYW55IHtcbiAgICBsZXQgcmFuZ2UsIGJlZ2luLCBlbmQ7XG4gICAgaWYgKCF0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQub2Zmc2V0UGFyZW50IHx8IHRoaXMuaW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJykge1xuICAgICAgYmVnaW4gPSBmaXJzdDtcbiAgICAgIGVuZCA9ICh0eXBlb2YgbGFzdCA9PT0gJ251bWJlcicpID8gbGFzdCA6IGJlZ2luO1xuICAgICAgaWYgKHRoaXMuaW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgICAgICB0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoYmVnaW4sIGVuZCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudFsnY3JlYXRlVGV4dFJhbmdlJ10pIHtcbiAgICAgICAgcmFuZ2UgPSB0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnRbJ2NyZWF0ZVRleHRSYW5nZSddKCk7XG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQpO1xuICAgICAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIGJlZ2luKTtcbiAgICAgICAgcmFuZ2Uuc2VsZWN0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgYmVnaW4gPSB0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgIGVuZCA9IHRoaXMuaW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQ7XG4gICAgICB9IGVsc2UgaWYgKChkb2N1bWVudCBhcyBhbnkpWydzZWxlY3Rpb24nXSAmJiAoZG9jdW1lbnQgYXMgYW55KVsnc2VsZWN0aW9uJ10uY3JlYXRlUmFuZ2UpIHtcbiAgICAgICAgcmFuZ2UgPSAoZG9jdW1lbnQgYXMgYW55KVsnc2VsZWN0aW9uJ10uY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgYmVnaW4gPSAwIC0gcmFuZ2UuZHVwbGljYXRlKCkubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCAtMTAwMDAwKTtcbiAgICAgICAgZW5kID0gYmVnaW4gKyByYW5nZS50ZXh0Lmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7YmVnaW46IGJlZ2luLCBlbmQ6IGVuZH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlzQ29tcGxldGVkKCk6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IGkgPSB0aGlzLmZpcnN0Tm9uTWFza1BvczsgaSA8PSB0aGlzLmxhc3RSZXF1aXJlZE5vbk1hc2tQb3M7IGkrKykge1xuICAgICAgaWYgKHRoaXMudGVzdHNbaV0gJiYgdGhpcy5idWZmZXJbaV0gPT09IHRoaXMuZ2V0UGxhY2Vob2xkZXIoaSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBnZXRQbGFjZWhvbGRlcihpOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChpIDwgdGhpcy5zbG90Q2hhci5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNsb3RDaGFyLmNoYXJBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2xvdENoYXIuY2hhckF0KDApO1xuICB9XG4gIHNlZWtOZXh0KHBvczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB3aGlsZSAoKytwb3MgPCB0aGlzLmxlbiAmJiAhdGhpcy50ZXN0c1twb3NdKSB7fVxuICAgIHJldHVybiBwb3M7XG4gIH1cbiAgc2Vla1ByZXYocG9zOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHdoaWxlICgtLXBvcyA+PSAwICYmICF0aGlzLnRlc3RzW3Bvc10pIHt9XG4gICAgcmV0dXJuIHBvcztcbiAgfVxuICBzaGlmdEwoYmVnaW46IG51bWJlciwgZW5kOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgaSwgajtcbiAgICBpZiAoYmVnaW4gPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoaSA9IGJlZ2luLCBqID0gdGhpcy5zZWVrTmV4dChlbmQpOyBpIDwgdGhpcy5sZW47IGkrKykge1xuICAgICAgaWYgKHRoaXMudGVzdHNbaV0pIHtcbiAgICAgICAgaWYgKGogPCB0aGlzLmxlbiAmJiB0aGlzLnRlc3RzW2ldLnRlc3QodGhpcy5idWZmZXJbal0pKSB7XG4gICAgICAgICAgdGhpcy5idWZmZXJbaV0gPSB0aGlzLmJ1ZmZlcltqXTtcbiAgICAgICAgICB0aGlzLmJ1ZmZlcltqXSA9IHRoaXMuZ2V0UGxhY2Vob2xkZXIoaik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaiA9IHRoaXMuc2Vla05leHQoaik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMud3JpdGVCdWZmZXIoKTtcbiAgICB0aGlzLmNhcmV0KE1hdGgubWF4KHRoaXMuZmlyc3ROb25NYXNrUG9zLCBiZWdpbikpO1xuICB9XG4gIHNoaWZ0Uihwb3M6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBpLCBjLCBqLCB0O1xuICAgIGZvciAoaSA9IHBvcywgYyA9IHRoaXMuZ2V0UGxhY2Vob2xkZXIocG9zKTsgaSA8IHRoaXMubGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnRlc3RzW2ldKSB7XG4gICAgICAgIGogPSB0aGlzLnNlZWtOZXh0KGkpO1xuICAgICAgICB0ID0gdGhpcy5idWZmZXJbaV07XG4gICAgICAgIHRoaXMuYnVmZmVyW2ldID0gYztcbiAgICAgICAgaWYgKGogPCB0aGlzLmxlbiAmJiB0aGlzLnRlc3RzW2pdLnRlc3QodCkpIHtcbiAgICAgICAgICBjID0gdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBoYW5kbGVBbmRyb2lkSW5wdXQoZTogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJWYWwgPSB0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgY29uc3QgcG9zID0gdGhpcy5jYXJldCgpIGFzIGFueTtcbiAgICBpZiAodGhpcy5vbGRWYWwgJiYgdGhpcy5vbGRWYWwubGVuZ3RoICYmIHRoaXMub2xkVmFsLmxlbmd0aCA+IGN1clZhbC5sZW5ndGggKSB7XG4gICAgICAvLyBhIGRlbGV0aW9uIG9yIGJhY2tzcGFjZSBoYXBwZW5lZFxuICAgICAgdGhpcy5jaGVja1ZhbCh0cnVlKTtcbiAgICAgIHdoaWxlIChwb3MuYmVnaW4gPiAwICYmICF0aGlzLnRlc3RzW3Bvcy5iZWdpbiAtIDFdKSB7XG4gICAgICAgIHBvcy5iZWdpbi0tO1xuICAgICAgfVxuICAgICAgaWYgKHBvcy5iZWdpbiA9PT0gMCkge1xuICAgICAgICB3aGlsZSAocG9zLmJlZ2luIDwgdGhpcy5maXJzdE5vbk1hc2tQb3MgJiYgIXRoaXMudGVzdHNbcG9zLmJlZ2luXSkge1xuICAgICAgICAgIHBvcy5iZWdpbisrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jYXJldChwb3MuYmVnaW4sIHBvcy5iZWdpbik7XG4gICAgICAgIHRoaXMudXBkYXRlTW9kZWwoZSk7XG4gICAgICAgIGlmICh0aGlzLmlzQ29tcGxldGVkKCkpIHtcbiAgICAgICAgICB0aGlzLm9uQ29tcGxldGUuZW1pdCgpO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGVja1ZhbCh0cnVlKTtcbiAgICAgIHdoaWxlIChwb3MuYmVnaW4gPCB0aGlzLmxlbiAmJiAhdGhpcy50ZXN0c1twb3MuYmVnaW5dKSB7XG4gICAgICAgIHBvcy5iZWdpbisrO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FyZXQocG9zLmJlZ2luLCBwb3MuYmVnaW4pO1xuICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKGUpO1xuICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlZCgpKSB7XG4gICAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG4gIG9uSW5wdXRCbHVyKGU6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5vbk1vZGVsVG91Y2hlZCgpO1xuICAgIHRoaXMuY2hlY2tWYWwoKTtcbiAgICB0aGlzLnVwZGF0ZUZpbGxlZFN0YXRlKCk7XG4gICAgdGhpcy5vbkJsdXIuZW1pdChlKTtcbiAgICBpZiAodGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnZhbHVlICE9PSB0aGlzLmZvY3VzVGV4dCB8fCB0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwoZSk7XG4gICAgICBjb25zdCBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJyk7XG4gICAgICBldmVudC5pbml0RXZlbnQoJ2NoYW5nZScsIHRydWUsIGZhbHNlKTtcbiAgICAgIHRoaXMuaW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrID0gZS53aGljaCB8fCBlLmtleUNvZGU7XG4gICAgbGV0IHBvcyxcbiAgICAgIGJlZ2luLFxuICAgICAgZW5kO1xuICAgIGNvbnN0IGlQaG9uZSA9IC9pcGhvbmUvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIHRoaXMub2xkVmFsID0gdGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIC8vIGJhY2tzcGFjZSwgZGVsZXRlLCBhbmQgZXNjYXBlIGdldCBzcGVjaWFsIHRyZWF0bWVudFxuICAgIGlmIChrID09PSA4IHx8IGsgPT09IDQ2IHx8IChpUGhvbmUgJiYgayA9PT0gMTI3KSkge1xuICAgICAgcG9zID0gdGhpcy5jYXJldCgpIGFzIGFueTtcbiAgICAgIGJlZ2luID0gcG9zLmJlZ2luO1xuICAgICAgZW5kID0gcG9zLmVuZDtcbiAgICAgIGlmIChlbmQgLSBiZWdpbiA9PT0gMCkge1xuICAgICAgICBiZWdpbiA9IGsgIT09IDQ2ID8gdGhpcy5zZWVrUHJldihiZWdpbikgOiAoZW5kID0gdGhpcy5zZWVrTmV4dChiZWdpbiAtIDEpKTtcbiAgICAgICAgZW5kID0gayA9PT0gNDYgPyB0aGlzLnNlZWtOZXh0KGVuZCkgOiBlbmQ7XG4gICAgICB9XG4gICAgICB0aGlzLmNsZWFyQnVmZmVyKGJlZ2luLCBlbmQpO1xuICAgICAgdGhpcy5zaGlmdEwoYmVnaW4sIGVuZCAtIDEpO1xuICAgICAgdGhpcy51cGRhdGVNb2RlbChlKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2UgaWYgKCBrID09PSAxMyApIHsgLy8gZW50ZXJcbiAgICAgIHRoaXMub25JbnB1dEJsdXIoZSk7XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKGUpO1xuICAgIH0gZWxzZSBpZiAoayA9PT0gMjcpIHsgLy8gZXNjYXBlXG4gICAgICB0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmZvY3VzVGV4dDtcbiAgICAgIHRoaXMuY2FyZXQoMCwgdGhpcy5jaGVja1ZhbCgpKTtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwoZSk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCB9ID0gdGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBjb25zdCBjaGVja2VkVmFsID0gdGhpcy5jaGVja1ZhbCh0cnVlKTtcbiAgICAgIGlmIChzZWxlY3Rpb25TdGFydCA9PT0gc2VsZWN0aW9uRW5kICYmIChzZWxlY3Rpb25TdGFydCBhcyBhbnkgLSAxKSA+IGNoZWNrZWRWYWwpIHtcbiAgICAgICAgdGhpcy5jYXJldChjaGVja2VkVmFsLCBjaGVja2VkVmFsKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgY29uc3QgeyBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kIH0gPSB0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGNvbnN0IGNoZWNrZWRWYWwgPSB0aGlzLmNoZWNrVmFsKHRydWUpO1xuICAgICAgaWYgKHNlbGVjdGlvblN0YXJ0ID09PSBzZWxlY3Rpb25FbmQgJiYgKHNlbGVjdGlvblN0YXJ0IGFzIGFueSArIDEpID4gY2hlY2tlZFZhbCkge1xuICAgICAgICB0aGlzLmNhcmV0KGNoZWNrZWRWYWwsIGNoZWNrZWRWYWwpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG9uS2V5UHJlc3MoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGsgPSBlLndoaWNoIHx8IGUua2V5Q29kZTtcbiAgICBjb25zdCBwb3MgPSB0aGlzLmNhcmV0KCkgYXMgYW55O1xuICAgIGxldCBuZXh0ID0gMDtcbiAgICBsZXQgcCwgYywgY29tcGxldGVkO1xuICAgIGlmIChlLmN0cmxLZXkgfHwgZS5hbHRLZXkgfHwgZS5tZXRhS2V5IHx8IGsgPCAzMiAgfHwgKGsgPiAzNCAmJiBrIDwgNDEpKSB7Ly8gSWdub3JlXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICggayAmJiBrICE9PSAxMyApIHtcbiAgICAgIGlmIChwb3MuZW5kIC0gcG9zLmJlZ2luICE9PSAwKSB7XG4gICAgICAgIHRoaXMuY2xlYXJCdWZmZXIocG9zLmJlZ2luLCBwb3MuZW5kKTtcbiAgICAgICAgdGhpcy5zaGlmdEwocG9zLmJlZ2luLCBwb3MuZW5kIC0gMSk7XG4gICAgICB9XG4gICAgICBwID0gdGhpcy5zZWVrTmV4dChwb3MuYmVnaW4gLSAxKTtcbiAgICAgIGlmIChwIDwgdGhpcy5sZW4pIHtcbiAgICAgICAgYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoayk7XG4gICAgICAgIGlmICh0aGlzLnRlc3RzW3BdLnRlc3QoYykpIHtcbiAgICAgICAgICB0aGlzLnNoaWZ0UihwKTtcbiAgICAgICAgICB0aGlzLmJ1ZmZlcltwXSA9IGM7XG4gICAgICAgICAgdGhpcy53cml0ZUJ1ZmZlcigpO1xuICAgICAgICAgIG5leHQgPSB0aGlzLnNlZWtOZXh0KHApO1xuICAgICAgICAgIGlmICgvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcbiAgICAgICAgICAgIC8vIFBhdGggZm9yIENTUCBWaW9sYXRpb24gb24gRmlyZUZveCBPUyAxLjFcbiAgICAgICAgICAgIGNvbnN0IHByb3h5ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNhcmV0KG5leHQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocHJveHksIDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhcmV0KG5leHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocG9zLmJlZ2luIDw9IHRoaXMubGFzdFJlcXVpcmVkTm9uTWFza1Bvcykge1xuICAgICAgICAgICAgY29tcGxldGVkID0gdGhpcy5pc0NvbXBsZXRlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZU1vZGVsKGUpO1xuICAgIHRoaXMudXBkYXRlRmlsbGVkU3RhdGUoKTtcbiAgICBpZiAoY29tcGxldGVkKSB7XG4gICAgICB0aGlzLm9uQ29tcGxldGUuZW1pdCgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQWRqdXN0IGN1cnNvciBwb3NpdGlvbiBpZiBjbGlja2VkIG9uIGVtcHR5IHNwYWNlIGFoZWFkIG9mIHRoZSBleGlzdGluZyBpbnB1dFxuICAgKi9cbiAgb25DbGljaygpOiB2b2lkIHtcbiAgICBjb25zdCB7IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQgfSA9IHRoaXMuaW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGNoZWNrZWRWYWwgPSB0aGlzLmNoZWNrVmFsKHRydWUpO1xuICAgIGlmIChzZWxlY3Rpb25TdGFydCA9PT0gc2VsZWN0aW9uRW5kICYmIHNlbGVjdGlvblN0YXJ0IGFzIGFueSA+IGNoZWNrZWRWYWwpIHtcbiAgICAgIHRoaXMuY2FyZXQoY2hlY2tlZFZhbCwgY2hlY2tlZFZhbCk7XG4gICAgfVxuICB9XG4gIGNsZWFyQnVmZmVyKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IGk7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQgJiYgaSA8IHRoaXMubGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnRlc3RzW2ldKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyW2ldID0gdGhpcy5nZXRQbGFjZWhvbGRlcihpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgd3JpdGVCdWZmZXIoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5idWZmZXIuam9pbignJyk7XG4gIH1cbiAgY2hlY2tWYWwoYWxsb3c/OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAvLyB0cnkgdG8gcGxhY2UgY2hhcmFjdGVycyB3aGVyZSB0aGV5IGJlbG9uZ1xuICAgIGNvbnN0IHRlc3QgPSB0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgbGV0IGxhc3RNYXRjaCA9IC0xLFxuICAgICAgaSxcbiAgICAgIGMsXG4gICAgICBwb3M7XG4gICAgZm9yIChpID0gMCwgcG9zID0gMDsgaSA8IHRoaXMubGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnRlc3RzW2ldKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyW2ldID0gdGhpcy5nZXRQbGFjZWhvbGRlcihpKTtcbiAgICAgICAgd2hpbGUgKHBvcysrIDwgdGVzdC5sZW5ndGgpIHtcbiAgICAgICAgICBjID0gdGVzdC5jaGFyQXQocG9zIC0gMSk7XG4gICAgICAgICAgaWYgKHRoaXMudGVzdHNbaV0udGVzdChjKSkge1xuICAgICAgICAgICAgdGhpcy5idWZmZXJbaV0gPSBjO1xuICAgICAgICAgICAgbGFzdE1hdGNoID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zID4gdGVzdC5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyQnVmZmVyKGkgKyAxLCB0aGlzLmxlbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlcltpXSA9PT0gdGVzdC5jaGFyQXQocG9zKSkge1xuICAgICAgICAgIHBvcysrO1xuICAgICAgICB9XG4gICAgICAgIGlmICggaSA8IHRoaXMucGFydGlhbFBvc2l0aW9uKSB7XG4gICAgICAgICAgbGFzdE1hdGNoID0gaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsb3cpIHtcbiAgICAgIHRoaXMud3JpdGVCdWZmZXIoKTtcbiAgICB9IGVsc2UgaWYgKGxhc3RNYXRjaCArIDEgPCB0aGlzLnBhcnRpYWxQb3NpdGlvbikge1xuICAgICAgaWYgKHRoaXMuYXV0b0NsZWFyIHx8IHRoaXMuYnVmZmVyLmpvaW4oJycpID09PSB0aGlzLmRlZmF1bHRCdWZmZXIpIHtcbiAgICAgICAgLy8gSW52YWxpZCB2YWx1ZS4gUmVtb3ZlIGl0IGFuZCByZXBsYWNlIGl0IHdpdGggdGhlXG4gICAgICAgIC8vIG1hc2ssIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLlxuICAgICAgICBpZiAodGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhckJ1ZmZlcigwLCB0aGlzLmxlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJbnZhbGlkIHZhbHVlLCBidXQgd2Ugb3B0IHRvIHNob3cgdGhlIHZhbHVlIHRvIHRoZVxuICAgICAgICAvLyB1c2VyIGFuZCBhbGxvdyB0aGVtIHRvIGNvcnJlY3QgdGhlaXIgbWlzdGFrZS5cbiAgICAgICAgdGhpcy53cml0ZUJ1ZmZlcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndyaXRlQnVmZmVyKCk7XG4gICAgICB0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmlucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUuc3Vic3RyaW5nKDAsIGxhc3RNYXRjaCArIDEpO1xuICAgIH1cbiAgICByZXR1cm4gKHRoaXMucGFydGlhbFBvc2l0aW9uID8gaSA6IHRoaXMuZmlyc3ROb25NYXNrUG9zKTtcbiAgfVxuICBvbklucHV0Rm9jdXMoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5jYXJldFRpbWVvdXRJZCk7XG4gICAgbGV0IHBvczogbnVtYmVyO1xuICAgIHRoaXMuZm9jdXNUZXh0ID0gdGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIHBvcyA9IHRoaXMuY2hlY2tWYWwoKTtcbiAgICB0aGlzLmNhcmV0VGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50ICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMud3JpdGVCdWZmZXIoKTtcbiAgICAgIGlmIChwb3MgPT09IHRoaXMubWFzay5yZXBsYWNlKCc/JywgJycpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmNhcmV0KDAsIHBvcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNhcmV0KHBvcyk7XG4gICAgICB9XG4gICAgfSwgMTApO1xuICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2ZW50KTtcbiAgfVxuICBvbklucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFuZHJvaWRDaHJvbWUpIHtcbiAgICAgIHRoaXMuaGFuZGxlQW5kcm9pZElucHV0KGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZShldmVudCk7XG4gICAgfVxuICAgIHRoaXMub25JbnB1dC5lbWl0KGV2ZW50KTtcbiAgfVxuICBoYW5kbGVJbnB1dENoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuY2hlY2tWYWwodHJ1ZSk7XG4gICAgICB0aGlzLmNhcmV0KHBvcyk7XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKGV2ZW50KTtcbiAgICAgIGlmICh0aGlzLmlzQ29tcGxldGVkKCkpIHtcbiAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQoKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuICBnZXRVbm1hc2tlZFZhbHVlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdW5tYXNrZWRCdWZmZXIgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYnVmZmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5idWZmZXJbaV07XG4gICAgICBpZiAodGhpcy50ZXN0c1tpXSAmJiBjICE9PSB0aGlzLmdldFBsYWNlaG9sZGVyKGkpKSB7XG4gICAgICAgIHVubWFza2VkQnVmZmVyLnB1c2goYyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bm1hc2tlZEJ1ZmZlci5qb2luKCcnKTtcbiAgfVxuICB1cGRhdGVNb2RlbChlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGVkVmFsdWUgPSB0aGlzLnVubWFzayA/IHRoaXMuZ2V0VW5tYXNrZWRWYWx1ZSgpIDogZS50YXJnZXQ/LnZhbHVlO1xuICAgIGlmICh1cGRhdGVkVmFsdWUgIT09IG51bGwgJiYgdXBkYXRlZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB1cGRhdGVkVmFsdWU7XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG4gIHVwZGF0ZUZpbGxlZFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsbGVkID0gdGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50ICYmIHRoaXMuaW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC52YWx1ZSAhPT0gJyc7XG4gIH1cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cbn1cbiJdfQ==
|