@metadev/lux 0.27.0 → 0.29.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/README.md +1 -1
- package/esm2022/lib/autocomplete/autocomplete.component.mjs +488 -488
- package/esm2022/lib/autocomplete-list/autocomplete-list.component.mjs +259 -259
- package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +78 -78
- package/esm2022/lib/checkbox/checkbox.component.mjs +156 -156
- package/esm2022/lib/datasource.mjs +1 -1
- package/esm2022/lib/datetime/datetime.component.mjs +312 -312
- package/esm2022/lib/filter/filter.component.mjs +158 -158
- package/esm2022/lib/geolocation/geolocation.component.mjs +423 -423
- package/esm2022/lib/geolocation/geolocation.service.mjs +123 -123
- package/esm2022/lib/geolocation/openlayer-loader.service.mjs +62 -62
- package/esm2022/lib/helperFns.mjs +118 -118
- package/esm2022/lib/input/input.component.mjs +469 -469
- package/esm2022/lib/input/regexp.service.mjs +195 -195
- package/esm2022/lib/lang.mjs +9 -9
- package/esm2022/lib/lux.module.mjs +118 -118
- package/esm2022/lib/map/geopoint.mjs +1 -1
- package/esm2022/lib/map/map.component.mjs +275 -275
- package/esm2022/lib/modal/modal-backdrop.mjs +24 -24
- package/esm2022/lib/modal/modal-config.mjs +11 -11
- package/esm2022/lib/modal/modal-dismiss-reasons.mjs +5 -5
- package/esm2022/lib/modal/modal-ref.mjs +101 -101
- package/esm2022/lib/modal/modal-stack.mjs +182 -182
- package/esm2022/lib/modal/modal-window.mjs +118 -118
- package/esm2022/lib/modal/modal.service.mjs +27 -27
- package/esm2022/lib/modal/util.mjs +82 -82
- package/esm2022/lib/pagination/pagination.component.mjs +144 -144
- package/esm2022/lib/pagination/pagination.mjs +1 -1
- package/esm2022/lib/radiogroup/radiogroup.component.mjs +129 -129
- package/esm2022/lib/select/select.component.mjs +148 -148
- package/esm2022/lib/tooltip/placement.mjs +7 -7
- package/esm2022/lib/tooltip/tooltip-context.mjs +1 -1
- package/esm2022/lib/tooltip/tooltip.component.mjs +21 -21
- package/esm2022/lib/tooltip/tooltip.directive.mjs +69 -69
- package/esm2022/lib/tooltip/tooltip.service.mjs +137 -137
- package/esm2022/lib/tooltip/tooltop-content.mjs +8 -8
- package/esm2022/lib/voice-recognition/voice-recognition.directive.mjs +79 -79
- package/esm2022/lib/window/window.service.mjs +46 -46
- package/esm2022/metadev-lux.mjs +4 -4
- package/esm2022/public-api.mjs +20 -20
- package/fesm2022/metadev-lux.mjs +4372 -4372
- package/fesm2022/metadev-lux.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/autocomplete/autocomplete.component.d.ts +81 -81
- package/lib/autocomplete-list/autocomplete-list.component.d.ts +65 -65
- package/lib/breadcrumb/breadcrumb.component.d.ts +22 -22
- package/lib/checkbox/checkbox.component.d.ts +47 -47
- package/lib/datasource.d.ts +13 -13
- package/lib/datetime/datetime.component.d.ts +69 -69
- package/lib/filter/filter.component.d.ts +51 -51
- package/lib/geolocation/geolocation.component.d.ts +123 -123
- package/lib/geolocation/geolocation.service.d.ts +32 -32
- package/lib/geolocation/openlayer-loader.service.d.ts +7 -7
- package/lib/helperFns.d.ts +15 -15
- package/lib/input/input.component.d.ts +108 -108
- package/lib/input/regexp.service.d.ts +15 -15
- package/lib/lang.d.ts +2 -2
- package/lib/lux.module.d.ts +27 -27
- package/lib/map/geopoint.d.ts +7 -7
- package/lib/map/map.component.d.ts +39 -39
- package/lib/modal/modal-backdrop.d.ts +8 -8
- package/lib/modal/modal-config.d.ts +14 -14
- package/lib/modal/modal-dismiss-reasons.d.ts +4 -4
- package/lib/modal/modal-ref.d.ts +41 -41
- package/lib/modal/modal-stack.d.ts +31 -31
- package/lib/modal/modal-window.d.ts +28 -28
- package/lib/modal/modal.service.d.ts +19 -19
- package/lib/modal/util.d.ts +40 -40
- package/lib/pagination/pagination.component.d.ts +52 -52
- package/lib/pagination/pagination.d.ts +10 -10
- package/lib/radiogroup/radiogroup.component.d.ts +37 -37
- package/lib/select/select.component.d.ts +38 -38
- package/lib/tooltip/placement.d.ts +7 -7
- package/lib/tooltip/tooltip-context.d.ts +3 -3
- package/lib/tooltip/tooltip.component.d.ts +11 -11
- package/lib/tooltip/tooltip.directive.d.ts +27 -27
- package/lib/tooltip/tooltip.service.d.ts +20 -20
- package/lib/tooltip/tooltop-content.d.ts +6 -6
- package/lib/voice-recognition/voice-recognition.directive.d.ts +16 -16
- package/lib/window/window.service.d.ts +11 -11
- package/package.json +3 -4
- package/public-api.d.ts +18 -18
|
@@ -1,118 +1,118 @@
|
|
|
1
|
-
/* eslint-disable no-useless-escape */
|
|
2
|
-
// undefined and null functions
|
|
3
|
-
export const exists = (value) => value !== null && value !== undefined;
|
|
4
|
-
export const hasValue = (value) => exists(value) && (typeof value === 'string' ? !isEmptyString(value) : true);
|
|
5
|
-
// string functions
|
|
6
|
-
export const isEmptyString = (value) => value.trim() === '';
|
|
7
|
-
export const isValidEmail = (value) => {
|
|
8
|
-
const re = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
|
|
9
|
-
return re.test(String(value).toLowerCase().trim());
|
|
10
|
-
};
|
|
11
|
-
export const isValidUrl = (value) => {
|
|
12
|
-
const pattern =
|
|
13
|
-
// eslint-disable-next-line max-len
|
|
14
|
-
/^((([a-z]+?:\/\/)?(((([a-z0-9]([a-z0-9-]*[a-z0-9])*)\.)+[a-z]{2,})|((([0-9]{1,3}\.){3}[0-9]{1,3}))|(localhost))(\:[0-9]+)?))?((\/[a-zA-Z0-9\-_+=~.,:;%]+)*\/?)((\?|;)[a-zA-Z0-9\-_+~.,:;%]+=[a-zA-Z0-9\-_+~.,:;%]+(((&|;)[a-zA-Z0-9\-_+~.,:;%]+=[a-zA-Z0-9\-_+~.,:;%]+)*))?(#[a-zA-Z0-9\-_+~.,:;%]+(=[a-zA-Z0-9\*\-_+~.,:;%]+)?)?$/;
|
|
15
|
-
return pattern.test(value);
|
|
16
|
-
};
|
|
17
|
-
export const isValidRelativeUrl = (value) => {
|
|
18
|
-
const pattern =
|
|
19
|
-
// eslint-disable-next-line max-len
|
|
20
|
-
/^((([a-z]+?:\/\/)?(((([a-z0-9]([a-z0-9-]*[a-z0-9])*)\.)+[a-z]{2,})|((([0-9]{1,3}\.){3}[0-9]{1,3}))|(localhost))(\:[0-9]+)?)|([a-zA-Z0-9\-_+=~.,:;%]+))?((\/[a-zA-Z0-9\-_+=~.,:;%]+)*\/?)((\?|;)[a-zA-Z0-9\-_+~.,:;%]+=[a-zA-Z0-9\-_+~.,:;%]+(((&|;)[a-zA-Z0-9\-_+~.,:;%]+=[a-zA-Z0-9\-_+~.,:;%]+)*))?(#[a-zA-Z0-9\-_+~.,:;%]+(=[a-zA-Z0-9\*\-_+~.,:;%]+)?)?$/;
|
|
21
|
-
return pattern.test(value);
|
|
22
|
-
};
|
|
23
|
-
export const isValidColor = (value) => {
|
|
24
|
-
value = String(value).toLowerCase();
|
|
25
|
-
// valid values for CSS color property, yet not valid colors by themselves
|
|
26
|
-
if (value === 'currentcolor' ||
|
|
27
|
-
value === 'inherit' ||
|
|
28
|
-
value === 'initial' ||
|
|
29
|
-
value === 'revert' ||
|
|
30
|
-
value === 'unset') {
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
return CSS.supports('color', value);
|
|
34
|
-
};
|
|
35
|
-
// date functions
|
|
36
|
-
export const isValidDate = (date) => exists(date) ? !isNaN(date.getTime()) : false;
|
|
37
|
-
export const normalizeDate = (value) => {
|
|
38
|
-
if (typeof value === 'string' && value.length > 10) {
|
|
39
|
-
return value.substr(0, 10);
|
|
40
|
-
}
|
|
41
|
-
return value ? value.toString() : null;
|
|
42
|
-
};
|
|
43
|
-
export const addTimezoneOffset = (date) => {
|
|
44
|
-
if (!isValidDate(date)) {
|
|
45
|
-
return date;
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
return new Date(date.getTime() - date.getTimezoneOffset() * 60000);
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
// number functions
|
|
52
|
-
export const isValidNumber = (value) => (hasValue(value) ? !Number.isNaN(Number(value)) : false);
|
|
53
|
-
export const numberOfDecimalDigits = (x) => {
|
|
54
|
-
if (isValidNumber(x)) {
|
|
55
|
-
const xString = String(Number(x));
|
|
56
|
-
if (xString === 'Infinity') {
|
|
57
|
-
return 0;
|
|
58
|
-
}
|
|
59
|
-
const indexOfE = xString.indexOf('e');
|
|
60
|
-
if (indexOfE >= 0) {
|
|
61
|
-
return 0;
|
|
62
|
-
}
|
|
63
|
-
const indexOfDecimalPoint = xString.indexOf('.');
|
|
64
|
-
if (indexOfDecimalPoint < 0) {
|
|
65
|
-
return 0;
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
return xString.length - indexOfDecimalPoint - 1;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return undefined;
|
|
72
|
-
};
|
|
73
|
-
export const numberOfWholeDigits = (x) => {
|
|
74
|
-
if (isValidNumber(x)) {
|
|
75
|
-
let xString = String(Number(x));
|
|
76
|
-
if (xString.indexOf('-') === 0) {
|
|
77
|
-
xString = xString.slice(1, xString.length);
|
|
78
|
-
}
|
|
79
|
-
if (xString === 'Infinity') {
|
|
80
|
-
return Infinity;
|
|
81
|
-
}
|
|
82
|
-
if (xString.indexOf('0') === 0) {
|
|
83
|
-
xString = xString.slice(1, xString.length);
|
|
84
|
-
}
|
|
85
|
-
const indexOfE = xString.indexOf('e');
|
|
86
|
-
if (indexOfE >= 0) {
|
|
87
|
-
return Number(xString.slice(indexOfE + 1, xString.length)) + 1;
|
|
88
|
-
}
|
|
89
|
-
const indexOfDecimalPoint = xString.indexOf('.');
|
|
90
|
-
if (indexOfDecimalPoint < 0) {
|
|
91
|
-
return xString.length;
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
return indexOfDecimalPoint;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return undefined;
|
|
98
|
-
};
|
|
99
|
-
export const roundToMultipleOf = (x, modulo) => {
|
|
100
|
-
const moduloString = String(modulo);
|
|
101
|
-
// approximates the result
|
|
102
|
-
// prone to inexactitude because of floating point arithmetic
|
|
103
|
-
const approximation = Math.round(x / modulo) * modulo;
|
|
104
|
-
const approximationString = String(approximation);
|
|
105
|
-
// remove useless decimals
|
|
106
|
-
const uselessDecimalsInApproximation = numberOfDecimalDigits(approximationString) -
|
|
107
|
-
numberOfDecimalDigits(moduloString);
|
|
108
|
-
const resultString = approximationString.slice(0, approximationString.length - uselessDecimalsInApproximation);
|
|
109
|
-
return Number(resultString);
|
|
110
|
-
};
|
|
111
|
-
// other functions
|
|
112
|
-
export const isInitialAndEmpty = (previousValue, newValue) => {
|
|
113
|
-
const isPrevArray = Array.isArray(previousValue);
|
|
114
|
-
const isNewArray = Array.isArray(newValue);
|
|
115
|
-
return !((isPrevArray ? previousValue.length !== 0 : Boolean(previousValue)) ||
|
|
116
|
-
(isNewArray ? newValue.length !== 0 : Boolean(newValue)));
|
|
117
|
-
};
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyRm5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvaGVscGVyRm5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNDQUFzQztBQUN0QywrQkFBK0I7QUFFL0IsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBVSxFQUFXLEVBQUUsQ0FDNUMsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQVUsRUFBVyxFQUFFLENBQzlDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRTlFLG1CQUFtQjtBQUVuQixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFhLEVBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBYSxFQUFXLEVBQUU7SUFDckQsTUFBTSxFQUFFLEdBQ04seUlBQXlJLENBQUM7SUFDNUksT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWEsRUFBVyxFQUFFO0lBQ25ELE1BQU0sT0FBTztJQUNYLG1DQUFtQztJQUNuQyxvVUFBb1UsQ0FBQztJQUN2VSxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFD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Q0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDekQsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtZXNjYXBlICovXHJcbi8vIHVuZGVmaW5lZCBhbmQgbnVsbCBmdW5jdGlvbnNcclxuXHJcbmV4cG9ydCBjb25zdCBleGlzdHMgPSAodmFsdWU6IGFueSk6IGJvb2xlYW4gPT5cclxuICB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xyXG5cclxuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+XHJcbiAgZXhpc3RzKHZhbHVlKSAmJiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/ICFpc0VtcHR5U3RyaW5nKHZhbHVlKSA6IHRydWUpO1xyXG5cclxuLy8gc3RyaW5nIGZ1bmN0aW9uc1xyXG5cclxuZXhwb3J0IGNvbnN0IGlzRW1wdHlTdHJpbmcgPSAodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4gPT4gdmFsdWUudHJpbSgpID09PSAnJztcclxuXHJcbmV4cG9ydCBjb25zdCBpc1ZhbGlkRW1haWwgPSAodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGNvbnN0IHJlID1cclxuICAgIC9eW2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKyg/OlxcLlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkAoPzpbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/XFwuKStbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/JC87XHJcbiAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpLnRyaW0oKSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNWYWxpZFVybCA9ICh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgY29uc3QgcGF0dGVybiA9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxyXG4gICAgL14oKChbYS16XSs/OlxcL1xcLyk/KCgoKFthLXowLTldKFthLXowLTktXSpbYS16MC05XSkqKVxcLikrW2Etel17Mix9KXwoKChbMC05XXsxLDN9XFwuKXszfVswLTldezEsM30pKXwobG9jYWxob3N0KSkoXFw6WzAtOV0rKT8pKT8oKFxcL1thLXpBLVowLTlcXC1fKz1+Liw6OyVdKykqXFwvPykoKFxcP3w7KVthLXpBLVowLTlcXC1fK34uLDo7JV0rPVthLXpBLVowLTlcXC1fK34uLDo7JV0rKCgoJnw7KVthLXpBLVowLTlcXC1fK34uLDo7JV0rPVthLXpBLVowLTlcXC1fK34uLDo7JV0rKSopKT8oI1thLXpBLVowLTlcXC1fK34uLDo7JV0rKD1bYS16QS1aMC05XFwqXFwtXyt+Liw6OyVdKyk/KT8kLztcclxuICByZXR1cm4gcGF0dGVybi50ZXN0KHZhbHVlKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc1ZhbGlkUmVsYXRpdmVVcmwgPSAodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGNvbnN0IHBhdHRlcm4gPVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cclxuICAgIC9eKCgoW2Etel0rPzpcXC9cXC8pPygoKChbYS16MC05XShbYS16MC05LV0qW2EtejAtOV0pKilcXC4pK1thLXpdezIsfSl8KCgoWzAtOV17MSwzfVxcLil7M31bMC05XXsxLDN9KSl8KGxvY2FsaG9zdCkpKFxcOlswLTldKyk/KXwoW2EtekEtWjAtOVxcLV8rPX4uLDo7JV0rKSk/KChcXC9bYS16QS1aMC05XFwtXys9fi4sOjslXSspKlxcLz8pKChcXD98OylbYS16QS1aMC05XFwtXyt+Liw6OyVdKz1bYS16QS1aMC05XFwtXyt+Liw6OyVdKygoKCZ8OylbYS16QS1aMC05XFwtXyt+Liw6OyVdKz1bYS16QS1aMC05XFwtXyt+Liw6OyVdKykqKSk/KCNbYS16QS1aMC05XFwtXyt+Liw6OyVdKyg9W2EtekEtWjAtOVxcKlxcLV8rfi4sOjslXSspPyk/JC87XHJcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh2YWx1ZSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNWYWxpZENvbG9yID0gKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcclxuICAvLyB2YWxpZCB2YWx1ZXMgZm9yIENTUyBjb2xvciBwcm9wZXJ0eSwgeWV0IG5vdCB2YWxpZCBjb2xvcnMgYnkgdGhlbXNlbHZlc1xyXG4gIGlmIChcclxuICAgIHZhbHVlID09PSAnY3VycmVudGNvbG9yJyB8fFxyXG4gICAgdmFsdWUgPT09ICdpbmhlcml0JyB8fFxyXG4gICAgdmFsdWUgPT09ICdpbml0aWFsJyB8fFxyXG4gICAgdmFsdWUgPT09ICdyZXZlcnQnIHx8XHJcbiAgICB2YWx1ZSA9PT0gJ3Vuc2V0J1xyXG4gICkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCdjb2xvcicsIHZhbHVlKTtcclxufTtcclxuXHJcbi8vIGRhdGUgZnVuY3Rpb25zXHJcblxyXG5leHBvcnQgY29uc3QgaXNWYWxpZERhdGUgPSAoZGF0ZTogRGF0ZSk6IGJvb2xlYW4gPT5cclxuICBleGlzdHMoZGF0ZSkgPyAhaXNOYU4oZGF0ZS5nZXRUaW1lKCkpIDogZmFsc2U7XHJcblxyXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplRGF0ZSA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IHtcclxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiAxMCkge1xyXG4gICAgcmV0dXJuIHZhbHVlLnN1YnN0cigwLCAxMCk7XHJcbiAgfVxyXG4gIHJldHVybiB2YWx1ZSA/IHZhbHVlLnRvU3RyaW5nKCkgOiBudWxsO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGFkZFRpbWV6b25lT2Zmc2V0ID0gKGRhdGU6IERhdGUpOiBEYXRlID0+IHtcclxuICBpZiAoIWlzVmFsaWREYXRlKGRhdGUpKSB7XHJcbiAgICByZXR1cm4gZGF0ZTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpIC0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApO1xyXG4gIH1cclxufTtcclxuXHJcbi8vIG51bWJlciBmdW5jdGlvbnNcclxuXHJcbmV4cG9ydCBjb25zdCBpc1ZhbGlkTnVtYmVyID0gKFxyXG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsXHJcbik6IGJvb2xlYW4gPT4gKGhhc1ZhbHVlKHZhbHVlKSA/ICFOdW1iZXIuaXNOYU4oTnVtYmVyKHZhbHVlKSkgOiBmYWxzZSk7XHJcblxyXG5leHBvcnQgY29uc3QgbnVtYmVyT2ZEZWNpbWFsRGlnaXRzID0gKFxyXG4gIHg6IG51bWJlciB8IHN0cmluZ1xyXG4pOiBudW1iZXIgfCB1bmRlZmluZWQgPT4ge1xyXG4gIGlmIChpc1ZhbGlkTnVtYmVyKHgpKSB7XHJcbiAgICBjb25zdCB4U3RyaW5nID0gU3RyaW5nKE51bWJlcih4KSk7XHJcbiAgICBpZiAoeFN0cmluZyA9PT0gJ0luZmluaXR5Jykge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4T2ZFID0geFN0cmluZy5pbmRleE9mKCdlJyk7XHJcbiAgICBpZiAoaW5kZXhPZkUgPj0gMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4T2ZEZWNpbWFsUG9pbnQgPSB4U3RyaW5nLmluZGV4T2YoJy4nKTtcclxuICAgIGlmIChpbmRleE9mRGVjaW1hbFBvaW50IDwgMCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB4U3RyaW5nLmxlbmd0aCAtIGluZGV4T2ZEZWNpbWFsUG9pbnQgLSAxO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gdW5kZWZpbmVkO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IG51bWJlck9mV2hvbGVEaWdpdHMgPSAoeDogbnVtYmVyIHwgc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkID0+IHtcclxuICBpZiAoaXNWYWxpZE51bWJlcih4KSkge1xyXG4gICAgbGV0IHhTdHJpbmcgPSBTdHJpbmcoTnVtYmVyKHgpKTtcclxuICAgIGlmICh4U3RyaW5nLmluZGV4T2YoJy0nKSA9PT0gMCkge1xyXG4gICAgICB4U3RyaW5nID0geFN0cmluZy5zbGljZSgxLCB4U3RyaW5nLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBpZiAoeFN0cmluZyA9PT0gJ0luZmluaXR5Jykge1xyXG4gICAgICByZXR1cm4gSW5maW5pdHk7XHJcbiAgICB9XHJcbiAgICBpZiAoeFN0cmluZy5pbmRleE9mKCcwJykgPT09IDApIHtcclxuICAgICAgeFN0cmluZyA9IHhTdHJpbmcuc2xpY2UoMSwgeFN0cmluZy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXhPZkUgPSB4U3RyaW5nLmluZGV4T2YoJ2UnKTtcclxuICAgIGlmIChpbmRleE9mRSA+PSAwKSB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIoeFN0cmluZy5zbGljZShpbmRleE9mRSArIDEsIHhTdHJpbmcubGVuZ3RoKSkgKyAxO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXhPZkRlY2ltYWxQb2ludCA9IHhTdHJpbmcuaW5kZXhPZignLicpO1xyXG4gICAgaWYgKGluZGV4T2ZEZWNpbWFsUG9pbnQgPCAwKSB7XHJcbiAgICAgIHJldHVybiB4U3RyaW5nLmxlbmd0aDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBpbmRleE9mRGVjaW1hbFBvaW50O1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gdW5kZWZpbmVkO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHJvdW5kVG9NdWx0aXBsZU9mID0gKHg6IG51bWJlciwgbW9kdWxvOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG4gIGNvbnN0IG1vZHVsb1N0cmluZyA9IFN0cmluZyhtb2R1bG8pO1xyXG4gIC8vIGFwcHJveGltYXRlcyB0aGUgcmVzdWx0XHJcbiAgLy8gcHJvbmUgdG8gaW5leGFjdGl0dWRlIGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpY1xyXG4gIGNvbnN0IGFwcHJveGltYXRpb24gPSBNYXRoLnJvdW5kKHggLyBtb2R1bG8pICogbW9kdWxvO1xyXG4gIGNvbnN0IGFwcHJveGltYXRpb25TdHJpbmcgPSBTdHJpbmcoYXBwcm94aW1hdGlvbik7XHJcbiAgLy8gcmVtb3ZlIHVzZWxlc3MgZGVjaW1hbHNcclxuICBjb25zdCB1c2VsZXNzRGVjaW1hbHNJbkFwcHJveGltYXRpb24gPVxyXG4gICAgbnVtYmVyT2ZEZWNpbWFsRGlnaXRzKGFwcHJveGltYXRpb25TdHJpbmcpIC1cclxuICAgIG51bWJlck9mRGVjaW1hbERpZ2l0cyhtb2R1bG9TdHJpbmcpO1xyXG4gIGNvbnN0IHJlc3VsdFN0cmluZyA9IGFwcHJveGltYXRpb25TdHJpbmcuc2xpY2UoXHJcbiAgICAwLFxyXG4gICAgYXBwcm94aW1hdGlvblN0cmluZy5sZW5ndGggLSB1c2VsZXNzRGVjaW1hbHNJbkFwcHJveGltYXRpb25cclxuICApO1xyXG4gIHJldHVybiBOdW1iZXIocmVzdWx0U3RyaW5nKTtcclxufTtcclxuXHJcbi8vIG90aGVyIGZ1bmN0aW9uc1xyXG5cclxuZXhwb3J0IGNvbnN0IGlzSW5pdGlhbEFuZEVtcHR5ID0gKFxyXG4gIHByZXZpb3VzVmFsdWU6IGFueSxcclxuICBuZXdWYWx1ZTogYW55XHJcbik6IGJvb2xlYW4gPT4ge1xyXG4gIGNvbnN0IGlzUHJldkFycmF5ID0gQXJyYXkuaXNBcnJheShwcmV2aW91c1ZhbHVlKTtcclxuICBjb25zdCBpc05ld0FycmF5ID0gQXJyYXkuaXNBcnJheShuZXdWYWx1ZSk7XHJcbiAgcmV0dXJuICEoXHJcbiAgICAoaXNQcmV2QXJyYXkgPyBwcmV2aW91c1ZhbHVlLmxlbmd0aCAhPT0gMCA6IEJvb2xlYW4ocHJldmlvdXNWYWx1ZSkpIHx8XHJcbiAgICAoaXNOZXdBcnJheSA/IG5ld1ZhbHVlLmxlbmd0aCAhPT0gMCA6IEJvb2xlYW4obmV3VmFsdWUpKVxyXG4gICk7XHJcbn07XHJcbiJdfQ==
|
|
1
|
+
/* eslint-disable no-useless-escape */
|
|
2
|
+
// undefined and null functions
|
|
3
|
+
export const exists = (value) => value !== null && value !== undefined;
|
|
4
|
+
export const hasValue = (value) => exists(value) && (typeof value === 'string' ? !isEmptyString(value) : true);
|
|
5
|
+
// string functions
|
|
6
|
+
export const isEmptyString = (value) => value.trim() === '';
|
|
7
|
+
export const isValidEmail = (value) => {
|
|
8
|
+
const re = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
|
|
9
|
+
return re.test(String(value).toLowerCase().trim());
|
|
10
|
+
};
|
|
11
|
+
export const isValidUrl = (value) => {
|
|
12
|
+
const pattern =
|
|
13
|
+
// eslint-disable-next-line max-len
|
|
14
|
+
/^((([a-z]+?:\/\/)?(((([a-z0-9]([a-z0-9-]*[a-z0-9])*)\.)+[a-z]{2,})|((([0-9]{1,3}\.){3}[0-9]{1,3}))|(localhost))(\:[0-9]+)?))?((\/[a-zA-Z0-9\-_+=~.,:;%]+)*\/?)((\?|;)[a-zA-Z0-9\-_+~.,:;%]+=[a-zA-Z0-9\-_+~.,:;%]+(((&|;)[a-zA-Z0-9\-_+~.,:;%]+=[a-zA-Z0-9\-_+~.,:;%]+)*))?(#[a-zA-Z0-9\-_+~.,:;%]+(=[a-zA-Z0-9\*\-_+~.,:;%]+)?)?$/;
|
|
15
|
+
return pattern.test(value);
|
|
16
|
+
};
|
|
17
|
+
export const isValidRelativeUrl = (value) => {
|
|
18
|
+
const pattern =
|
|
19
|
+
// eslint-disable-next-line max-len
|
|
20
|
+
/^((([a-z]+?:\/\/)?(((([a-z0-9]([a-z0-9-]*[a-z0-9])*)\.)+[a-z]{2,})|((([0-9]{1,3}\.){3}[0-9]{1,3}))|(localhost))(\:[0-9]+)?)|([a-zA-Z0-9\-_+=~.,:;%]+))?((\/[a-zA-Z0-9\-_+=~.,:;%]+)*\/?)((\?|;)[a-zA-Z0-9\-_+~.,:;%]+=[a-zA-Z0-9\-_+~.,:;%]+(((&|;)[a-zA-Z0-9\-_+~.,:;%]+=[a-zA-Z0-9\-_+~.,:;%]+)*))?(#[a-zA-Z0-9\-_+~.,:;%]+(=[a-zA-Z0-9\*\-_+~.,:;%]+)?)?$/;
|
|
21
|
+
return pattern.test(value);
|
|
22
|
+
};
|
|
23
|
+
export const isValidColor = (value) => {
|
|
24
|
+
value = String(value).toLowerCase();
|
|
25
|
+
// valid values for CSS color property, yet not valid colors by themselves
|
|
26
|
+
if (value === 'currentcolor' ||
|
|
27
|
+
value === 'inherit' ||
|
|
28
|
+
value === 'initial' ||
|
|
29
|
+
value === 'revert' ||
|
|
30
|
+
value === 'unset') {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return CSS.supports('color', value);
|
|
34
|
+
};
|
|
35
|
+
// date functions
|
|
36
|
+
export const isValidDate = (date) => exists(date) ? !isNaN(date.getTime()) : false;
|
|
37
|
+
export const normalizeDate = (value) => {
|
|
38
|
+
if (typeof value === 'string' && value.length > 10) {
|
|
39
|
+
return value.substr(0, 10);
|
|
40
|
+
}
|
|
41
|
+
return value ? value.toString() : null;
|
|
42
|
+
};
|
|
43
|
+
export const addTimezoneOffset = (date) => {
|
|
44
|
+
if (!isValidDate(date)) {
|
|
45
|
+
return date;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
return new Date(date.getTime() - date.getTimezoneOffset() * 60000);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
// number functions
|
|
52
|
+
export const isValidNumber = (value) => (hasValue(value) ? !Number.isNaN(Number(value)) : false);
|
|
53
|
+
export const numberOfDecimalDigits = (x) => {
|
|
54
|
+
if (isValidNumber(x)) {
|
|
55
|
+
const xString = String(Number(x));
|
|
56
|
+
if (xString === 'Infinity') {
|
|
57
|
+
return 0;
|
|
58
|
+
}
|
|
59
|
+
const indexOfE = xString.indexOf('e');
|
|
60
|
+
if (indexOfE >= 0) {
|
|
61
|
+
return 0;
|
|
62
|
+
}
|
|
63
|
+
const indexOfDecimalPoint = xString.indexOf('.');
|
|
64
|
+
if (indexOfDecimalPoint < 0) {
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
return xString.length - indexOfDecimalPoint - 1;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
};
|
|
73
|
+
export const numberOfWholeDigits = (x) => {
|
|
74
|
+
if (isValidNumber(x)) {
|
|
75
|
+
let xString = String(Number(x));
|
|
76
|
+
if (xString.indexOf('-') === 0) {
|
|
77
|
+
xString = xString.slice(1, xString.length);
|
|
78
|
+
}
|
|
79
|
+
if (xString === 'Infinity') {
|
|
80
|
+
return Infinity;
|
|
81
|
+
}
|
|
82
|
+
if (xString.indexOf('0') === 0) {
|
|
83
|
+
xString = xString.slice(1, xString.length);
|
|
84
|
+
}
|
|
85
|
+
const indexOfE = xString.indexOf('e');
|
|
86
|
+
if (indexOfE >= 0) {
|
|
87
|
+
return Number(xString.slice(indexOfE + 1, xString.length)) + 1;
|
|
88
|
+
}
|
|
89
|
+
const indexOfDecimalPoint = xString.indexOf('.');
|
|
90
|
+
if (indexOfDecimalPoint < 0) {
|
|
91
|
+
return xString.length;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
return indexOfDecimalPoint;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
};
|
|
99
|
+
export const roundToMultipleOf = (x, modulo) => {
|
|
100
|
+
const moduloString = String(modulo);
|
|
101
|
+
// approximates the result
|
|
102
|
+
// prone to inexactitude because of floating point arithmetic
|
|
103
|
+
const approximation = Math.round(x / modulo) * modulo;
|
|
104
|
+
const approximationString = String(approximation);
|
|
105
|
+
// remove useless decimals
|
|
106
|
+
const uselessDecimalsInApproximation = numberOfDecimalDigits(approximationString) -
|
|
107
|
+
numberOfDecimalDigits(moduloString);
|
|
108
|
+
const resultString = approximationString.slice(0, approximationString.length - uselessDecimalsInApproximation);
|
|
109
|
+
return Number(resultString);
|
|
110
|
+
};
|
|
111
|
+
// other functions
|
|
112
|
+
export const isInitialAndEmpty = (previousValue, newValue) => {
|
|
113
|
+
const isPrevArray = Array.isArray(previousValue);
|
|
114
|
+
const isNewArray = Array.isArray(newValue);
|
|
115
|
+
return !((isPrevArray ? previousValue.length !== 0 : Boolean(previousValue)) ||
|
|
116
|
+
(isNewArray ? newValue.length !== 0 : Boolean(newValue)));
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyRm5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvaGVscGVyRm5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNDQUFzQztBQUN0QywrQkFBK0I7QUFFL0IsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBVSxFQUFXLEVBQUUsQ0FDNUMsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQVUsRUFBVyxFQUFFLENBQzlDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRTlFLG1CQUFtQjtBQUVuQixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFhLEVBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBYSxFQUFXLEVBQUU7SUFDckQsTUFBTSxFQUFFLEdBQ04seUlBQXlJLENBQUM7SUFDNUksT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWEsRUFBVyxFQUFFO0lBQ25ELE1BQU0sT0FBTztJQUNYLG1DQUFtQztJQUNuQyxvVUFBb1UsQ0FBQztJQUN2VSxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFD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QzNDLE9BQU8sQ0FBQyxDQUNOLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25FLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ3pELENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xyXG4vLyB1bmRlZmluZWQgYW5kIG51bGwgZnVuY3Rpb25zXHJcblxyXG5leHBvcnQgY29uc3QgZXhpc3RzID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+XHJcbiAgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZDtcclxuXHJcbmV4cG9ydCBjb25zdCBoYXNWYWx1ZSA9ICh2YWx1ZTogYW55KTogYm9vbGVhbiA9PlxyXG4gIGV4aXN0cyh2YWx1ZSkgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyAhaXNFbXB0eVN0cmluZyh2YWx1ZSkgOiB0cnVlKTtcclxuXHJcbi8vIHN0cmluZyBmdW5jdGlvbnNcclxuXHJcbmV4cG9ydCBjb25zdCBpc0VtcHR5U3RyaW5nID0gKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+IHZhbHVlLnRyaW0oKSA9PT0gJyc7XHJcblxyXG5leHBvcnQgY29uc3QgaXNWYWxpZEVtYWlsID0gKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICBjb25zdCByZSA9XHJcbiAgICAvXlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pPyQvO1xyXG4gIHJldHVybiByZS50ZXN0KFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKS50cmltKCkpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGlzVmFsaWRVcmwgPSAodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGNvbnN0IHBhdHRlcm4gPVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cclxuICAgIC9eKCgoW2Etel0rPzpcXC9cXC8pPygoKChbYS16MC05XShbYS16MC05LV0qW2EtejAtOV0pKilcXC4pK1thLXpdezIsfSl8KCgoWzAtOV17MSwzfVxcLil7M31bMC05XXsxLDN9KSl8KGxvY2FsaG9zdCkpKFxcOlswLTldKyk/KSk/KChcXC9bYS16QS1aMC05XFwtXys9fi4sOjslXSspKlxcLz8pKChcXD98OylbYS16QS1aMC05XFwtXyt+Liw6OyVdKz1bYS16QS1aMC05XFwtXyt+Liw6OyVdKygoKCZ8OylbYS16QS1aMC05XFwtXyt+Liw6OyVdKz1bYS16QS1aMC05XFwtXyt+Liw6OyVdKykqKSk/KCNbYS16QS1aMC05XFwtXyt+Liw6OyVdKyg9W2EtekEtWjAtOVxcKlxcLV8rfi4sOjslXSspPyk/JC87XHJcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh2YWx1ZSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNWYWxpZFJlbGF0aXZlVXJsID0gKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICBjb25zdCBwYXR0ZXJuID1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXHJcbiAgICAvXigoKFthLXpdKz86XFwvXFwvKT8oKCgoW2EtejAtOV0oW2EtejAtOS1dKlthLXowLTldKSopXFwuKStbYS16XXsyLH0pfCgoKFswLTldezEsM31cXC4pezN9WzAtOV17MSwzfSkpfChsb2NhbGhvc3QpKShcXDpbMC05XSspPyl8KFthLXpBLVowLTlcXC1fKz1+Liw6OyVdKykpPygoXFwvW2EtekEtWjAtOVxcLV8rPX4uLDo7JV0rKSpcXC8/KSgoXFw/fDspW2EtekEtWjAtOVxcLV8rfi4sOjslXSs9W2EtekEtWjAtOVxcLV8rfi4sOjslXSsoKCgmfDspW2EtekEtWjAtOVxcLV8rfi4sOjslXSs9W2EtekEtWjAtOVxcLV8rfi4sOjslXSspKikpPygjW2EtekEtWjAtOVxcLV8rfi4sOjslXSsoPVthLXpBLVowLTlcXCpcXC1fK34uLDo7JV0rKT8pPyQvO1xyXG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodmFsdWUpO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGlzVmFsaWRDb2xvciA9ICh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgdmFsdWUgPSBTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCk7XHJcbiAgLy8gdmFsaWQgdmFsdWVzIGZvciBDU1MgY29sb3IgcHJvcGVydHksIHlldCBub3QgdmFsaWQgY29sb3JzIGJ5IHRoZW1zZWx2ZXNcclxuICBpZiAoXHJcbiAgICB2YWx1ZSA9PT0gJ2N1cnJlbnRjb2xvcicgfHxcclxuICAgIHZhbHVlID09PSAnaW5oZXJpdCcgfHxcclxuICAgIHZhbHVlID09PSAnaW5pdGlhbCcgfHxcclxuICAgIHZhbHVlID09PSAncmV2ZXJ0JyB8fFxyXG4gICAgdmFsdWUgPT09ICd1bnNldCdcclxuICApIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgcmV0dXJuIENTUy5zdXBwb3J0cygnY29sb3InLCB2YWx1ZSk7XHJcbn07XHJcblxyXG4vLyBkYXRlIGZ1bmN0aW9uc1xyXG5cclxuZXhwb3J0IGNvbnN0IGlzVmFsaWREYXRlID0gKGRhdGU6IERhdGUpOiBib29sZWFuID0+XHJcbiAgZXhpc3RzKGRhdGUpID8gIWlzTmFOKGRhdGUuZ2V0VGltZSgpKSA6IGZhbHNlO1xyXG5cclxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZURhdGUgPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMTApIHtcclxuICAgIHJldHVybiB2YWx1ZS5zdWJzdHIoMCwgMTApO1xyXG4gIH1cclxuICByZXR1cm4gdmFsdWUgPyB2YWx1ZS50b1N0cmluZygpIDogbnVsbDtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBhZGRUaW1lem9uZU9mZnNldCA9IChkYXRlOiBEYXRlKTogRGF0ZSA9PiB7XHJcbiAgaWYgKCFpc1ZhbGlkRGF0ZShkYXRlKSkge1xyXG4gICAgcmV0dXJuIGRhdGU7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSAtIGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKTtcclxuICB9XHJcbn07XHJcblxyXG4vLyBudW1iZXIgZnVuY3Rpb25zXHJcblxyXG5leHBvcnQgY29uc3QgaXNWYWxpZE51bWJlciA9IChcclxuICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbFxyXG4pOiBib29sZWFuID0+IChoYXNWYWx1ZSh2YWx1ZSkgPyAhTnVtYmVyLmlzTmFOKE51bWJlcih2YWx1ZSkpIDogZmFsc2UpO1xyXG5cclxuZXhwb3J0IGNvbnN0IG51bWJlck9mRGVjaW1hbERpZ2l0cyA9IChcclxuICB4OiBudW1iZXIgfCBzdHJpbmdcclxuKTogbnVtYmVyIHwgdW5kZWZpbmVkID0+IHtcclxuICBpZiAoaXNWYWxpZE51bWJlcih4KSkge1xyXG4gICAgY29uc3QgeFN0cmluZyA9IFN0cmluZyhOdW1iZXIoeCkpO1xyXG4gICAgaWYgKHhTdHJpbmcgPT09ICdJbmZpbml0eScpIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbmRleE9mRSA9IHhTdHJpbmcuaW5kZXhPZignZScpO1xyXG4gICAgaWYgKGluZGV4T2ZFID49IDApIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbmRleE9mRGVjaW1hbFBvaW50ID0geFN0cmluZy5pbmRleE9mKCcuJyk7XHJcbiAgICBpZiAoaW5kZXhPZkRlY2ltYWxQb2ludCA8IDApIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4geFN0cmluZy5sZW5ndGggLSBpbmRleE9mRGVjaW1hbFBvaW50IC0gMTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHVuZGVmaW5lZDtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBudW1iZXJPZldob2xlRGlnaXRzID0gKHg6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgaWYgKGlzVmFsaWROdW1iZXIoeCkpIHtcclxuICAgIGxldCB4U3RyaW5nID0gU3RyaW5nKE51bWJlcih4KSk7XHJcbiAgICBpZiAoeFN0cmluZy5pbmRleE9mKCctJykgPT09IDApIHtcclxuICAgICAgeFN0cmluZyA9IHhTdHJpbmcuc2xpY2UoMSwgeFN0cmluZy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHhTdHJpbmcgPT09ICdJbmZpbml0eScpIHtcclxuICAgICAgcmV0dXJuIEluZmluaXR5O1xyXG4gICAgfVxyXG4gICAgaWYgKHhTdHJpbmcuaW5kZXhPZignMCcpID09PSAwKSB7XHJcbiAgICAgIHhTdHJpbmcgPSB4U3RyaW5nLnNsaWNlKDEsIHhTdHJpbmcubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4T2ZFID0geFN0cmluZy5pbmRleE9mKCdlJyk7XHJcbiAgICBpZiAoaW5kZXhPZkUgPj0gMCkge1xyXG4gICAgICByZXR1cm4gTnVtYmVyKHhTdHJpbmcuc2xpY2UoaW5kZXhPZkUgKyAxLCB4U3RyaW5nLmxlbmd0aCkpICsgMTtcclxuICAgIH1cclxuICAgIGNvbnN0IGluZGV4T2ZEZWNpbWFsUG9pbnQgPSB4U3RyaW5nLmluZGV4T2YoJy4nKTtcclxuICAgIGlmIChpbmRleE9mRGVjaW1hbFBvaW50IDwgMCkge1xyXG4gICAgICByZXR1cm4geFN0cmluZy5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaW5kZXhPZkRlY2ltYWxQb2ludDtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHVuZGVmaW5lZDtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCByb3VuZFRvTXVsdGlwbGVPZiA9ICh4OiBudW1iZXIsIG1vZHVsbzogbnVtYmVyKTogbnVtYmVyID0+IHtcclxuICBjb25zdCBtb2R1bG9TdHJpbmcgPSBTdHJpbmcobW9kdWxvKTtcclxuICAvLyBhcHByb3hpbWF0ZXMgdGhlIHJlc3VsdFxyXG4gIC8vIHByb25lIHRvIGluZXhhY3RpdHVkZSBiZWNhdXNlIG9mIGZsb2F0aW5nIHBvaW50IGFyaXRobWV0aWNcclxuICBjb25zdCBhcHByb3hpbWF0aW9uID0gTWF0aC5yb3VuZCh4IC8gbW9kdWxvKSAqIG1vZHVsbztcclxuICBjb25zdCBhcHByb3hpbWF0aW9uU3RyaW5nID0gU3RyaW5nKGFwcHJveGltYXRpb24pO1xyXG4gIC8vIHJlbW92ZSB1c2VsZXNzIGRlY2ltYWxzXHJcbiAgY29uc3QgdXNlbGVzc0RlY2ltYWxzSW5BcHByb3hpbWF0aW9uID1cclxuICAgIG51bWJlck9mRGVjaW1hbERpZ2l0cyhhcHByb3hpbWF0aW9uU3RyaW5nKSAtXHJcbiAgICBudW1iZXJPZkRlY2ltYWxEaWdpdHMobW9kdWxvU3RyaW5nKTtcclxuICBjb25zdCByZXN1bHRTdHJpbmcgPSBhcHByb3hpbWF0aW9uU3RyaW5nLnNsaWNlKFxyXG4gICAgMCxcclxuICAgIGFwcHJveGltYXRpb25TdHJpbmcubGVuZ3RoIC0gdXNlbGVzc0RlY2ltYWxzSW5BcHByb3hpbWF0aW9uXHJcbiAgKTtcclxuICByZXR1cm4gTnVtYmVyKHJlc3VsdFN0cmluZyk7XHJcbn07XHJcblxyXG4vLyBvdGhlciBmdW5jdGlvbnNcclxuXHJcbmV4cG9ydCBjb25zdCBpc0luaXRpYWxBbmRFbXB0eSA9IChcclxuICBwcmV2aW91c1ZhbHVlOiBhbnksXHJcbiAgbmV3VmFsdWU6IGFueVxyXG4pOiBib29sZWFuID0+IHtcclxuICBjb25zdCBpc1ByZXZBcnJheSA9IEFycmF5LmlzQXJyYXkocHJldmlvdXNWYWx1ZSk7XHJcbiAgY29uc3QgaXNOZXdBcnJheSA9IEFycmF5LmlzQXJyYXkobmV3VmFsdWUpO1xyXG4gIHJldHVybiAhKFxyXG4gICAgKGlzUHJldkFycmF5ID8gcHJldmlvdXNWYWx1ZS5sZW5ndGggIT09IDAgOiBCb29sZWFuKHByZXZpb3VzVmFsdWUpKSB8fFxyXG4gICAgKGlzTmV3QXJyYXkgPyBuZXdWYWx1ZS5sZW5ndGggIT09IDAgOiBCb29sZWFuKG5ld1ZhbHVlKSlcclxuICApO1xyXG59O1xyXG4iXX0=
|