@skyux/phone-field 5.9.4 → 6.0.0-beta.10
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/documentation.json +16 -16
- package/esm2020/index.mjs +8 -0
- package/esm2020/lib/modules/phone-field/phone-field-adapter.service.mjs +64 -0
- package/esm2020/lib/modules/phone-field/phone-field-input.directive.mjs +278 -0
- package/esm2020/lib/modules/phone-field/phone-field.component.mjs +334 -0
- package/esm2020/lib/modules/phone-field/phone-field.module.mjs +50 -0
- package/esm2020/lib/modules/phone-field/types/country.mjs +2 -0
- package/esm2020/lib/modules/phone-field/types/number-return-format.mjs +2 -0
- package/esm2020/lib/modules/shared/sky-phone-field-resources.module.mjs +60 -0
- package/esm2020/skyux-phone-field.mjs +5 -0
- package/esm2020/testing/phonefield/phone-field-fixture.mjs +159 -0
- package/esm2020/testing/phonefield/phone-field-testing.module.mjs +27 -0
- package/esm2020/testing/public-api.mjs +3 -0
- package/esm2020/testing/skyux-phone-field-testing.mjs +5 -0
- package/fesm2015/{skyux-phone-field-testing.js → skyux-phone-field-testing.mjs} +5 -6
- package/fesm2015/skyux-phone-field-testing.mjs.map +1 -0
- package/fesm2015/skyux-phone-field.mjs +771 -0
- package/fesm2015/skyux-phone-field.mjs.map +1 -0
- package/fesm2020/skyux-phone-field-testing.mjs +193 -0
- package/fesm2020/skyux-phone-field-testing.mjs.map +1 -0
- package/{fesm2015/skyux-phone-field.js → fesm2020/skyux-phone-field.mjs} +22 -32
- package/fesm2020/skyux-phone-field.mjs.map +1 -0
- package/package.json +41 -17
- package/testing/package.json +5 -5
- package/bundles/skyux-phone-field-testing.umd.js +0 -658
- package/bundles/skyux-phone-field.umd.js +0 -1164
- package/esm2015/index.js +0 -8
- package/esm2015/index.js.map +0 -1
- package/esm2015/lib/modules/phone-field/phone-field-adapter.service.js +0 -64
- package/esm2015/lib/modules/phone-field/phone-field-adapter.service.js.map +0 -1
- package/esm2015/lib/modules/phone-field/phone-field-input.directive.js +0 -280
- package/esm2015/lib/modules/phone-field/phone-field-input.directive.js.map +0 -1
- package/esm2015/lib/modules/phone-field/phone-field.component.js +0 -342
- package/esm2015/lib/modules/phone-field/phone-field.component.js.map +0 -1
- package/esm2015/lib/modules/phone-field/phone-field.module.js +0 -50
- package/esm2015/lib/modules/phone-field/phone-field.module.js.map +0 -1
- package/esm2015/lib/modules/phone-field/types/country.js +0 -2
- package/esm2015/lib/modules/phone-field/types/country.js.map +0 -1
- package/esm2015/lib/modules/phone-field/types/number-return-format.js +0 -2
- package/esm2015/lib/modules/phone-field/types/number-return-format.js.map +0 -1
- package/esm2015/lib/modules/shared/sky-phone-field-resources.module.js +0 -60
- package/esm2015/lib/modules/shared/sky-phone-field-resources.module.js.map +0 -1
- package/esm2015/skyux-phone-field.js +0 -5
- package/esm2015/skyux-phone-field.js.map +0 -1
- package/esm2015/testing/phonefield/phone-field-fixture.js +0 -185
- package/esm2015/testing/phonefield/phone-field-fixture.js.map +0 -1
- package/esm2015/testing/phonefield/phone-field-testing.module.js +0 -27
- package/esm2015/testing/phonefield/phone-field-testing.module.js.map +0 -1
- package/esm2015/testing/public-api.js +0 -3
- package/esm2015/testing/public-api.js.map +0 -1
- package/esm2015/testing/skyux-phone-field-testing.js +0 -5
- package/esm2015/testing/skyux-phone-field-testing.js.map +0 -1
- package/fesm2015/skyux-phone-field-testing.js.map +0 -1
- package/fesm2015/skyux-phone-field.js.map +0 -1
package/documentation.json
CHANGED
|
@@ -993,7 +993,7 @@
|
|
|
993
993
|
"sources": [
|
|
994
994
|
{
|
|
995
995
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
996
|
-
"line":
|
|
996
|
+
"line": 118,
|
|
997
997
|
"character": 2
|
|
998
998
|
}
|
|
999
999
|
],
|
|
@@ -1125,7 +1125,7 @@
|
|
|
1125
1125
|
"sources": [
|
|
1126
1126
|
{
|
|
1127
1127
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1128
|
-
"line":
|
|
1128
|
+
"line": 85,
|
|
1129
1129
|
"character": 9
|
|
1130
1130
|
}
|
|
1131
1131
|
],
|
|
@@ -1158,7 +1158,7 @@
|
|
|
1158
1158
|
"sources": [
|
|
1159
1159
|
{
|
|
1160
1160
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1161
|
-
"line":
|
|
1161
|
+
"line": 67,
|
|
1162
1162
|
"character": 13
|
|
1163
1163
|
}
|
|
1164
1164
|
],
|
|
@@ -1231,7 +1231,7 @@
|
|
|
1231
1231
|
"sources": [
|
|
1232
1232
|
{
|
|
1233
1233
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1234
|
-
"line":
|
|
1234
|
+
"line": 145,
|
|
1235
1235
|
"character": 9
|
|
1236
1236
|
}
|
|
1237
1237
|
],
|
|
@@ -1268,7 +1268,7 @@
|
|
|
1268
1268
|
"sources": [
|
|
1269
1269
|
{
|
|
1270
1270
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1271
|
-
"line":
|
|
1271
|
+
"line": 165,
|
|
1272
1272
|
"character": 9
|
|
1273
1273
|
}
|
|
1274
1274
|
],
|
|
@@ -1305,7 +1305,7 @@
|
|
|
1305
1305
|
"sources": [
|
|
1306
1306
|
{
|
|
1307
1307
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1308
|
-
"line":
|
|
1308
|
+
"line": 125,
|
|
1309
1309
|
"character": 9
|
|
1310
1310
|
}
|
|
1311
1311
|
],
|
|
@@ -1356,7 +1356,7 @@
|
|
|
1356
1356
|
"sources": [
|
|
1357
1357
|
{
|
|
1358
1358
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1359
|
-
"line":
|
|
1359
|
+
"line": 187,
|
|
1360
1360
|
"character": 9
|
|
1361
1361
|
}
|
|
1362
1362
|
],
|
|
@@ -1403,7 +1403,7 @@
|
|
|
1403
1403
|
"sources": [
|
|
1404
1404
|
{
|
|
1405
1405
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1406
|
-
"line":
|
|
1406
|
+
"line": 175,
|
|
1407
1407
|
"character": 9
|
|
1408
1408
|
}
|
|
1409
1409
|
],
|
|
@@ -1466,7 +1466,7 @@
|
|
|
1466
1466
|
"sources": [
|
|
1467
1467
|
{
|
|
1468
1468
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1469
|
-
"line":
|
|
1469
|
+
"line": 192,
|
|
1470
1470
|
"character": 9
|
|
1471
1471
|
}
|
|
1472
1472
|
],
|
|
@@ -1508,7 +1508,7 @@
|
|
|
1508
1508
|
"sources": [
|
|
1509
1509
|
{
|
|
1510
1510
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1511
|
-
"line":
|
|
1511
|
+
"line": 210,
|
|
1512
1512
|
"character": 9
|
|
1513
1513
|
}
|
|
1514
1514
|
],
|
|
@@ -1590,7 +1590,7 @@
|
|
|
1590
1590
|
"sources": [
|
|
1591
1591
|
{
|
|
1592
1592
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1593
|
-
"line":
|
|
1593
|
+
"line": 214,
|
|
1594
1594
|
"character": 9
|
|
1595
1595
|
}
|
|
1596
1596
|
],
|
|
@@ -1659,7 +1659,7 @@
|
|
|
1659
1659
|
"sources": [
|
|
1660
1660
|
{
|
|
1661
1661
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1662
|
-
"line":
|
|
1662
|
+
"line": 218,
|
|
1663
1663
|
"character": 9
|
|
1664
1664
|
}
|
|
1665
1665
|
],
|
|
@@ -1728,7 +1728,7 @@
|
|
|
1728
1728
|
"sources": [
|
|
1729
1729
|
{
|
|
1730
1730
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1731
|
-
"line":
|
|
1731
|
+
"line": 226,
|
|
1732
1732
|
"character": 9
|
|
1733
1733
|
}
|
|
1734
1734
|
],
|
|
@@ -1784,7 +1784,7 @@
|
|
|
1784
1784
|
"sources": [
|
|
1785
1785
|
{
|
|
1786
1786
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1787
|
-
"line":
|
|
1787
|
+
"line": 234,
|
|
1788
1788
|
"character": 9
|
|
1789
1789
|
}
|
|
1790
1790
|
],
|
|
@@ -1844,7 +1844,7 @@
|
|
|
1844
1844
|
"sources": [
|
|
1845
1845
|
{
|
|
1846
1846
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1847
|
-
"line":
|
|
1847
|
+
"line": 204,
|
|
1848
1848
|
"character": 9
|
|
1849
1849
|
}
|
|
1850
1850
|
],
|
|
@@ -1934,7 +1934,7 @@
|
|
|
1934
1934
|
"sources": [
|
|
1935
1935
|
{
|
|
1936
1936
|
"fileName": "projects/phone-field/src/modules/phone-field/phone-field-input.directive.ts",
|
|
1937
|
-
"line":
|
|
1937
|
+
"line": 59,
|
|
1938
1938
|
"character": 13
|
|
1939
1939
|
}
|
|
1940
1940
|
],
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './lib/modules/phone-field/phone-field.module';
|
|
2
|
+
export * from './lib/modules/phone-field/types/country';
|
|
3
|
+
export * from './lib/modules/phone-field/types/number-return-format';
|
|
4
|
+
// Components and directives must be exported to support Angular's "partial" Ivy compiler.
|
|
5
|
+
// Obscure names are used to indicate types are not part of the public API.
|
|
6
|
+
export { SkyPhoneFieldComponent as λ1 } from './lib/modules/phone-field/phone-field.component';
|
|
7
|
+
export { SkyPhoneFieldInputDirective as λ2 } from './lib/modules/phone-field/phone-field-input.directive';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvcGhvbmUtZmllbGQvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHNEQUFzRCxDQUFDO0FBRXJFLDBGQUEwRjtBQUMxRiwyRUFBMkU7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixJQUFJLEVBQUUsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSwyQkFBMkIsSUFBSSxFQUFFLEVBQUUsTUFBTSx1REFBdUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvcGhvbmUtZmllbGQvcGhvbmUtZmllbGQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvcGhvbmUtZmllbGQvdHlwZXMvY291bnRyeSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL3Bob25lLWZpZWxkL3R5cGVzL251bWJlci1yZXR1cm4tZm9ybWF0JztcblxuLy8gQ29tcG9uZW50cyBhbmQgZGlyZWN0aXZlcyBtdXN0IGJlIGV4cG9ydGVkIHRvIHN1cHBvcnQgQW5ndWxhcidzIFwicGFydGlhbFwiIEl2eSBjb21waWxlci5cbi8vIE9ic2N1cmUgbmFtZXMgYXJlIHVzZWQgdG8gaW5kaWNhdGUgdHlwZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLlxuZXhwb3J0IHsgU2t5UGhvbmVGaWVsZENvbXBvbmVudCBhcyDOuzEgfSBmcm9tICcuL2xpYi9tb2R1bGVzL3Bob25lLWZpZWxkL3Bob25lLWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgeyBTa3lQaG9uZUZpZWxkSW5wdXREaXJlY3RpdmUgYXMgzrsyIH0gZnJvbSAnLi9saWIvbW9kdWxlcy9waG9uZS1maWVsZC9waG9uZS1maWVsZC1pbnB1dC5kaXJlY3RpdmUnO1xuIl19
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Injectable, Renderer2 } from '@angular/core';
|
|
2
|
+
import { SkyLibResourcesService } from '@skyux/i18n';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { takeUntil } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@skyux/i18n";
|
|
7
|
+
/**
|
|
8
|
+
* Service for interacting with the DOM elements of the phone field.
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export class SkyPhoneFieldAdapterService {
|
|
12
|
+
constructor(renderer, resourcesService) {
|
|
13
|
+
this.renderer = renderer;
|
|
14
|
+
this.resourcesService = resourcesService;
|
|
15
|
+
this.ngUnsubscribe = new Subject();
|
|
16
|
+
}
|
|
17
|
+
ngOnDestroy() {
|
|
18
|
+
this.ngUnsubscribe.next();
|
|
19
|
+
this.ngUnsubscribe.complete();
|
|
20
|
+
}
|
|
21
|
+
addElementClass(elementRef, className) {
|
|
22
|
+
this.renderer.addClass(elementRef.nativeElement, className);
|
|
23
|
+
}
|
|
24
|
+
setElementDisabledState(elementRef, disabled) {
|
|
25
|
+
this.renderer.setProperty(elementRef.nativeElement, 'disabled', disabled);
|
|
26
|
+
}
|
|
27
|
+
setElementPlaceholder(elementRef, placeholder) {
|
|
28
|
+
this.renderer.setAttribute(elementRef.nativeElement, 'placeholder', placeholder);
|
|
29
|
+
}
|
|
30
|
+
setElementType(elementRef) {
|
|
31
|
+
this.renderer.setAttribute(elementRef.nativeElement, 'type', 'tel');
|
|
32
|
+
}
|
|
33
|
+
setElementValue(elementRef, value) {
|
|
34
|
+
if (value) {
|
|
35
|
+
this.renderer.setProperty(elementRef.nativeElement, 'value', value);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
setAriaLabel(element) {
|
|
39
|
+
/* Sanity check */
|
|
40
|
+
/* istanbul ignore else */
|
|
41
|
+
if (!element.nativeElement.getAttribute('aria-label')) {
|
|
42
|
+
this.resourcesService
|
|
43
|
+
.getString('skyux_phone_field_default_label')
|
|
44
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
45
|
+
.subscribe((value) => {
|
|
46
|
+
this.renderer.setAttribute(element.nativeElement, 'aria-label', value);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
focusCountrySearchElement(el) {
|
|
51
|
+
const input = el.querySelector('textarea');
|
|
52
|
+
input.focus();
|
|
53
|
+
}
|
|
54
|
+
focusPhoneInput(el) {
|
|
55
|
+
const input = el.querySelector('.sky-phone-field-container input');
|
|
56
|
+
input.focus();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
SkyPhoneFieldAdapterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyPhoneFieldAdapterService, deps: [{ token: i0.Renderer2 }, { token: i1.SkyLibResourcesService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
60
|
+
SkyPhoneFieldAdapterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyPhoneFieldAdapterService });
|
|
61
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyPhoneFieldAdapterService, decorators: [{
|
|
62
|
+
type: Injectable
|
|
63
|
+
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.SkyLibResourcesService }]; } });
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtZmllbGQtYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3Bob25lLWZpZWxkL3NyYy9saWIvbW9kdWxlcy9waG9uZS1maWVsZC9waG9uZS1maWVsZC1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXJELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFFM0M7OztHQUdHO0FBRUgsTUFBTSxPQUFPLDJCQUEyQjtJQUd0QyxZQUNVLFFBQW1CLEVBQ25CLGdCQUF3QztRQUR4QyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBd0I7UUFKMUMsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBS3pDLENBQUM7SUFFRyxXQUFXO1FBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU0sZUFBZSxDQUFDLFVBQXNCLEVBQUUsU0FBaUI7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU0sdUJBQXVCLENBQzVCLFVBQXNCLEVBQ3RCLFFBQWlCO1FBRWpCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTSxxQkFBcUIsQ0FDMUIsVUFBc0IsRUFDdEIsV0FBbUI7UUFFbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQ3hCLFVBQVUsQ0FBQyxhQUFhLEVBQ3hCLGFBQWEsRUFDYixXQUFXLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFTSxjQUFjLENBQUMsVUFBc0I7UUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVNLGVBQWUsQ0FBQyxVQUFzQixFQUFFLEtBQWE7UUFDMUQsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNyRTtJQUNILENBQUM7SUFFTSxZQUFZLENBQUMsT0FBbUI7UUFDckMsa0JBQWtCO1FBQ2xCLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDckQsSUFBSSxDQUFDLGdCQUFnQjtpQkFDbEIsU0FBUyxDQUFDLGlDQUFpQyxDQUFDO2lCQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDbkMsU0FBUyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUN4QixPQUFPLENBQUMsYUFBYSxFQUNyQixZQUFZLEVBQ1osS0FBSyxDQUNOLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0gsQ0FBQztJQUVNLHlCQUF5QixDQUFDLEVBQVc7UUFDMUMsTUFBTSxLQUFLLEdBQWdCLEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEQsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxlQUFlLENBQUMsRUFBVztRQUNoQyxNQUFNLEtBQUssR0FBZ0IsRUFBRSxDQUFDLGFBQWEsQ0FDekMsa0NBQWtDLENBQ25DLENBQUM7UUFDRixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEIsQ0FBQzs7d0hBeEVVLDJCQUEyQjs0SEFBM0IsMkJBQTJCOzJGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIERPTSBlbGVtZW50cyBvZiB0aGUgcGhvbmUgZmllbGQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreVBob25lRmllbGRBZGFwdGVyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcmVzb3VyY2VzU2VydmljZTogU2t5TGliUmVzb3VyY2VzU2VydmljZVxuICApIHt9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgYWRkRWxlbWVudENsYXNzKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGNsYXNzTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGNsYXNzTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0RWxlbWVudERpc2FibGVkU3RhdGUoXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBkaXNhYmxlZDogYm9vbGVhblxuICApOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc2FibGVkJywgZGlzYWJsZWQpO1xuICB9XG5cbiAgcHVibGljIHNldEVsZW1lbnRQbGFjZWhvbGRlcihcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAncGxhY2Vob2xkZXInLFxuICAgICAgcGxhY2Vob2xkZXJcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNldEVsZW1lbnRUeXBlKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd0eXBlJywgJ3RlbCcpO1xuICB9XG5cbiAgcHVibGljIHNldEVsZW1lbnRWYWx1ZShlbGVtZW50UmVmOiBFbGVtZW50UmVmLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRBcmlhTGFiZWwoZWxlbWVudDogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCFlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykpIHtcbiAgICAgIHRoaXMucmVzb3VyY2VzU2VydmljZVxuICAgICAgICAuZ2V0U3RyaW5nKCdza3l1eF9waG9uZV9maWVsZF9kZWZhdWx0X2xhYmVsJylcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICdhcmlhLWxhYmVsJyxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvY3VzQ291bnRyeVNlYXJjaEVsZW1lbnQoZWw6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dDogSFRNTEVsZW1lbnQgPSBlbC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpO1xuICAgIGlucHV0LmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgZm9jdXNQaG9uZUlucHV0KGVsOiBFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQ6IEhUTUxFbGVtZW50ID0gZWwucXVlcnlTZWxlY3RvcihcbiAgICAgICcuc2t5LXBob25lLWZpZWxkLWNvbnRhaW5lciBpbnB1dCdcbiAgICApO1xuICAgIGlucHV0LmZvY3VzKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { ChangeDetectorRef, Directive, ElementRef, HostListener, Input, Optional, forwardRef, } from '@angular/core';
|
|
2
|
+
import { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';
|
|
3
|
+
import { PhoneNumberFormat, PhoneNumberUtil } from 'google-libphonenumber';
|
|
4
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
5
|
+
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
6
|
+
import { SkyPhoneFieldAdapterService } from './phone-field-adapter.service';
|
|
7
|
+
import { SkyPhoneFieldComponent } from './phone-field.component';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "./phone-field-adapter.service";
|
|
10
|
+
import * as i2 from "./phone-field.component";
|
|
11
|
+
const SKY_PHONE_FIELD_VALUE_ACCESSOR = {
|
|
12
|
+
provide: NG_VALUE_ACCESSOR,
|
|
13
|
+
useExisting: forwardRef(() => SkyPhoneFieldInputDirective),
|
|
14
|
+
multi: true,
|
|
15
|
+
};
|
|
16
|
+
const SKY_PHONE_FIELD_VALIDATOR = {
|
|
17
|
+
provide: NG_VALIDATORS,
|
|
18
|
+
useExisting: forwardRef(() => SkyPhoneFieldInputDirective),
|
|
19
|
+
multi: true,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Creates a button, search input, and text input for entering and validating
|
|
23
|
+
* international phone numbers. Place this attribute on an `input` element, and wrap
|
|
24
|
+
* that element in a `sky-phone-field` component. By default, the country selector
|
|
25
|
+
* button displays a flag icon for the default country, and the phone number input
|
|
26
|
+
* displays a sample of the correct phone number format. When users select the country
|
|
27
|
+
* selector button, they expose the country search input, which is
|
|
28
|
+
* [an autocomplete input](https://developer.blackbaud.com/skyux/components/autocomplete)
|
|
29
|
+
* that allows them to select different countries. When users enter `+` followed by an
|
|
30
|
+
* international dial code in the phone number input, the country automatically switches
|
|
31
|
+
* to the country associated with the dial code.
|
|
32
|
+
* @required
|
|
33
|
+
*/
|
|
34
|
+
export class SkyPhoneFieldInputDirective {
|
|
35
|
+
constructor(changeDetector, elRef, adapterService, phoneFieldComponent) {
|
|
36
|
+
this.changeDetector = changeDetector;
|
|
37
|
+
this.elRef = elRef;
|
|
38
|
+
this.adapterService = adapterService;
|
|
39
|
+
this.phoneFieldComponent = phoneFieldComponent;
|
|
40
|
+
/**
|
|
41
|
+
* Indicates whether to prevent validation on the phone number input. For validation,
|
|
42
|
+
* phone numbers are driven through the `ngModel` attribute that you specify on an
|
|
43
|
+
* `input` element or on a `FormControl` in a reactive form. To prevent validation,
|
|
44
|
+
* set this property to `true`.
|
|
45
|
+
* @default false
|
|
46
|
+
*/
|
|
47
|
+
this.skyPhoneFieldNoValidate = false;
|
|
48
|
+
this.ngUnsubscribe = new Subject();
|
|
49
|
+
this.phoneUtils = PhoneNumberUtil.getInstance();
|
|
50
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
51
|
+
this.onChange = (_) => { };
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
53
|
+
this.onTouched = () => { };
|
|
54
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
55
|
+
this.validatorChange = () => { };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Indicates whether to disable the phone field.
|
|
59
|
+
* @default false
|
|
60
|
+
*/
|
|
61
|
+
set disabled(value) {
|
|
62
|
+
this.phoneFieldComponent.countrySelectDisabled = value;
|
|
63
|
+
this.adapterService.setElementDisabledState(this.elRef, value);
|
|
64
|
+
this._disabled = value;
|
|
65
|
+
}
|
|
66
|
+
get disabled() {
|
|
67
|
+
return this._disabled || false;
|
|
68
|
+
}
|
|
69
|
+
set modelValue(value) {
|
|
70
|
+
this._modelValue = value;
|
|
71
|
+
this.adapterService.setElementValue(this.elRef, value);
|
|
72
|
+
if (value) {
|
|
73
|
+
const formattedValue = this.formatNumber(value.toString());
|
|
74
|
+
this.onChange(formattedValue);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
this.onChange(value);
|
|
78
|
+
}
|
|
79
|
+
this.validatorChange();
|
|
80
|
+
}
|
|
81
|
+
get modelValue() {
|
|
82
|
+
return this._modelValue;
|
|
83
|
+
}
|
|
84
|
+
ngOnInit() {
|
|
85
|
+
if (!this.phoneFieldComponent) {
|
|
86
|
+
throw new Error('You must wrap the `skyPhoneFieldInput` directive within a ' +
|
|
87
|
+
'`<sky-phone-field>` component!');
|
|
88
|
+
}
|
|
89
|
+
this.adapterService.setElementType(this.elRef);
|
|
90
|
+
this.adapterService.addElementClass(this.elRef, 'sky-form-control');
|
|
91
|
+
if (this.phoneFieldComponent.selectedCountry) {
|
|
92
|
+
this.adapterService.setElementPlaceholder(this.elRef, this.phoneFieldComponent.selectedCountry.exampleNumber);
|
|
93
|
+
}
|
|
94
|
+
this.adapterService.setAriaLabel(this.elRef);
|
|
95
|
+
}
|
|
96
|
+
ngAfterViewInit() {
|
|
97
|
+
this.phoneFieldComponent.selectedCountryChange
|
|
98
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
99
|
+
.subscribe((country) => {
|
|
100
|
+
this.modelValue = this.elRef.nativeElement.value;
|
|
101
|
+
this.adapterService.setElementPlaceholder(this.elRef, country.exampleNumber);
|
|
102
|
+
});
|
|
103
|
+
// This is needed to address a bug in Angular 4, where the value is not changed on the view.
|
|
104
|
+
// See: https://github.com/angular/angular/issues/13792
|
|
105
|
+
/* istanbul ignore else */
|
|
106
|
+
if (this.control && this.modelValue) {
|
|
107
|
+
this.control.setValue(this.modelValue, { emitEvent: false });
|
|
108
|
+
this.changeDetector.detectChanges();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
ngOnDestroy() {
|
|
112
|
+
this.ngUnsubscribe.next();
|
|
113
|
+
this.ngUnsubscribe.complete();
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Writes the new value for reactive forms on change events on the input element
|
|
117
|
+
* @param event The change event that was received
|
|
118
|
+
*/
|
|
119
|
+
onInputChange(event) {
|
|
120
|
+
if (!this.textChanges) {
|
|
121
|
+
this.setupTextChangeSubscription(event.target.value);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
this.textChanges.next(event.target.value);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Marks reactive form controls as touched on input blur events
|
|
129
|
+
*/
|
|
130
|
+
onInputBlur() {
|
|
131
|
+
this.onTouched();
|
|
132
|
+
}
|
|
133
|
+
onInputTyping(event) {
|
|
134
|
+
if (!this.textChanges) {
|
|
135
|
+
this.setupTextChangeSubscription(event.target.value);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
this.textChanges.next(event.target.value);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Writes the new value for reactive forms
|
|
143
|
+
* @param value The new value for the input
|
|
144
|
+
*/
|
|
145
|
+
writeValue(value) {
|
|
146
|
+
this.phoneFieldComponent.setCountryByDialCode(value);
|
|
147
|
+
this.modelValue = value;
|
|
148
|
+
}
|
|
149
|
+
registerOnChange(fn) {
|
|
150
|
+
this.onChange = fn;
|
|
151
|
+
}
|
|
152
|
+
registerOnTouched(fn) {
|
|
153
|
+
this.onTouched = fn;
|
|
154
|
+
}
|
|
155
|
+
registerOnValidatorChange(fn) {
|
|
156
|
+
this.validatorChange = fn;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Sets the disabled state on the input
|
|
160
|
+
* @param isDisabled the new value of the input's disabled state
|
|
161
|
+
*/
|
|
162
|
+
setDisabledState(isDisabled) {
|
|
163
|
+
this.disabled = isDisabled;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Validate's the form control's current value
|
|
167
|
+
* @param control the form control for the input
|
|
168
|
+
*/
|
|
169
|
+
validate(control) {
|
|
170
|
+
if (!this.control) {
|
|
171
|
+
this.control = control;
|
|
172
|
+
}
|
|
173
|
+
if (this.skyPhoneFieldNoValidate) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const value = control.value;
|
|
177
|
+
if (!value) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (this.phoneFieldComponent.selectedCountry &&
|
|
181
|
+
!this.validateNumber(value)) {
|
|
182
|
+
if (!this.textChanges) {
|
|
183
|
+
// Mark the invalid control as touched so that the input's invalid CSS styles appear.
|
|
184
|
+
// (This is only required when the invalid value is set by the FormControl constructor.)
|
|
185
|
+
// We don't do this if the input is the active element so that we don't show validation
|
|
186
|
+
// errors unless it is invalid on initialization or the input has been blurred.
|
|
187
|
+
control.markAsTouched();
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
skyPhoneField: {
|
|
191
|
+
invalid: value,
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
setupTextChangeSubscription(text) {
|
|
197
|
+
this.textChanges = new BehaviorSubject(text);
|
|
198
|
+
this.textChanges
|
|
199
|
+
.pipe(debounceTime(500), takeUntil(this.ngUnsubscribe))
|
|
200
|
+
.subscribe((newValue) => {
|
|
201
|
+
this.writeValue(newValue);
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
validateNumber(phoneNumber) {
|
|
205
|
+
try {
|
|
206
|
+
const numberObj = this.phoneUtils.parseAndKeepRawInput(phoneNumber, this.phoneFieldComponent.selectedCountry.iso2);
|
|
207
|
+
if (!this.phoneFieldComponent.allowExtensions &&
|
|
208
|
+
numberObj.getExtension()) {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
return this.phoneUtils.isValidNumber(numberObj);
|
|
212
|
+
}
|
|
213
|
+
catch (e) {
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Format's the given phone number based on the currently selected country.
|
|
219
|
+
* @param phoneNumber The number to format
|
|
220
|
+
*/
|
|
221
|
+
formatNumber(phoneNumber) {
|
|
222
|
+
try {
|
|
223
|
+
const numberObj = this.phoneUtils.parseAndKeepRawInput(phoneNumber, this.phoneFieldComponent.selectedCountry.iso2);
|
|
224
|
+
if (this.phoneUtils.isPossibleNumber(numberObj)) {
|
|
225
|
+
switch (this.phoneFieldComponent.returnFormat) {
|
|
226
|
+
case 'international':
|
|
227
|
+
return this.phoneUtils.format(numberObj, PhoneNumberFormat.INTERNATIONAL);
|
|
228
|
+
case 'national':
|
|
229
|
+
return this.phoneUtils.format(numberObj, PhoneNumberFormat.NATIONAL);
|
|
230
|
+
case 'default':
|
|
231
|
+
default:
|
|
232
|
+
if (this.phoneFieldComponent.selectedCountry.iso2 !==
|
|
233
|
+
this.phoneFieldComponent.defaultCountry) {
|
|
234
|
+
return this.phoneUtils.format(numberObj, PhoneNumberFormat.INTERNATIONAL);
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
return this.phoneUtils.format(numberObj, PhoneNumberFormat.NATIONAL);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
return phoneNumber;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
catch (e) {
|
|
246
|
+
/* sanity check */
|
|
247
|
+
/* istanbul ignore next */
|
|
248
|
+
return phoneNumber;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
SkyPhoneFieldInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyPhoneFieldInputDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.SkyPhoneFieldAdapterService, optional: true }, { token: i2.SkyPhoneFieldComponent, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
253
|
+
SkyPhoneFieldInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.2", type: SkyPhoneFieldInputDirective, selector: "[skyPhoneFieldInput]", inputs: { disabled: "disabled", skyPhoneFieldNoValidate: "skyPhoneFieldNoValidate" }, host: { listeners: { "change": "onInputChange($event)", "blur": "onInputBlur()", "input": "onInputTyping($event)" } }, providers: [SKY_PHONE_FIELD_VALUE_ACCESSOR, SKY_PHONE_FIELD_VALIDATOR], ngImport: i0 });
|
|
254
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyPhoneFieldInputDirective, decorators: [{
|
|
255
|
+
type: Directive,
|
|
256
|
+
args: [{
|
|
257
|
+
selector: '[skyPhoneFieldInput]',
|
|
258
|
+
providers: [SKY_PHONE_FIELD_VALUE_ACCESSOR, SKY_PHONE_FIELD_VALIDATOR],
|
|
259
|
+
}]
|
|
260
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.SkyPhoneFieldAdapterService, decorators: [{
|
|
261
|
+
type: Optional
|
|
262
|
+
}] }, { type: i2.SkyPhoneFieldComponent, decorators: [{
|
|
263
|
+
type: Optional
|
|
264
|
+
}] }]; }, propDecorators: { disabled: [{
|
|
265
|
+
type: Input
|
|
266
|
+
}], skyPhoneFieldNoValidate: [{
|
|
267
|
+
type: Input
|
|
268
|
+
}], onInputChange: [{
|
|
269
|
+
type: HostListener,
|
|
270
|
+
args: ['change', ['$event']]
|
|
271
|
+
}], onInputBlur: [{
|
|
272
|
+
type: HostListener,
|
|
273
|
+
args: ['blur']
|
|
274
|
+
}], onInputTyping: [{
|
|
275
|
+
type: HostListener,
|
|
276
|
+
args: ['input', ['$event']]
|
|
277
|
+
}] } });
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtZmllbGQtaW5wdXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3Bob25lLWZpZWxkL3NyYy9saWIvbW9kdWxlcy9waG9uZS1maWVsZC9waG9uZS1maWVsZC1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUNSLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBR2pFLE1BQU0sOEJBQThCLEdBQUc7SUFDckMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO0lBQzFELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0seUJBQXlCLEdBQUc7SUFDaEMsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztJQUMxRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7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QUUsc0JBQXNCO29CQUNoQyxTQUFTLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSx5QkFBeUIsQ0FBQztpQkFDdkU7OzBCQStESSxRQUFROzswQkFDUixRQUFROzRDQXZEQSxRQUFRO3NCQURsQixLQUFLO2dCQW1CQyx1QkFBdUI7c0JBRDdCLEtBQUs7Z0JBMkZDLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWEzQixXQUFXO3NCQURqQixZQUFZO3VCQUFDLE1BQU07Z0JBTWIsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBQaG9uZU51bWJlckZvcm1hdCwgUGhvbmVOdW1iZXJVdGlsIH0gZnJvbSAnZ29vZ2xlLWxpYnBob25lbnVtYmVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVBob25lRmllbGRBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vcGhvbmUtZmllbGQtYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreVBob25lRmllbGRDb21wb25lbnQgfSBmcm9tICcuL3Bob25lLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lQaG9uZUZpZWxkQ291bnRyeSB9IGZyb20gJy4vdHlwZXMvY291bnRyeSc7XG5cbmNvbnN0IFNLWV9QSE9ORV9GSUVMRF9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreVBob25lRmllbGRJbnB1dERpcmVjdGl2ZSksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuY29uc3QgU0tZX1BIT05FX0ZJRUxEX1ZBTElEQVRPUiA9IHtcbiAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2t5UGhvbmVGaWVsZElucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBidXR0b24sIHNlYXJjaCBpbnB1dCwgYW5kIHRleHQgaW5wdXQgZm9yIGVudGVyaW5nIGFuZCB2YWxpZGF0aW5nXG4gKiBpbnRlcm5hdGlvbmFsIHBob25lIG51bWJlcnMuIFBsYWNlIHRoaXMgYXR0cmlidXRlIG9uIGFuIGBpbnB1dGAgZWxlbWVudCwgYW5kIHdyYXBcbiAqIHRoYXQgZWxlbWVudCBpbiBhIGBza3ktcGhvbmUtZmllbGRgIGNvbXBvbmVudC4gQnkgZGVmYXVsdCwgdGhlIGNvdW50cnkgc2VsZWN0b3JcbiAqIGJ1dHRvbiBkaXNwbGF5cyBhIGZsYWcgaWNvbiBmb3IgdGhlIGRlZmF1bHQgY291bnRyeSwgYW5kIHRoZSBwaG9uZSBudW1iZXIgaW5wdXRcbiAqIGRpc3BsYXlzIGEgc2FtcGxlIG9mIHRoZSBjb3JyZWN0IHBob25lIG51bWJlciBmb3JtYXQuIFdoZW4gdXNlcnMgc2VsZWN0IHRoZSBjb3VudHJ5XG4gKiBzZWxlY3RvciBidXR0b24sIHRoZXkgZXhwb3NlIHRoZSBjb3VudHJ5IHNlYXJjaCBpbnB1dCwgd2hpY2ggaXNcbiAqIFthbiBhdXRvY29tcGxldGUgaW5wdXRdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9hdXRvY29tcGxldGUpXG4gKiB0aGF0IGFsbG93cyB0aGVtIHRvIHNlbGVjdCBkaWZmZXJlbnQgY291bnRyaWVzLiBXaGVuIHVzZXJzIGVudGVyIGArYCBmb2xsb3dlZCBieSBhblxuICogaW50ZXJuYXRpb25hbCBkaWFsIGNvZGUgaW4gdGhlIHBob25lIG51bWJlciBpbnB1dCwgdGhlIGNvdW50cnkgYXV0b21hdGljYWxseSBzd2l0Y2hlc1xuICogdG8gdGhlIGNvdW50cnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBkaWFsIGNvZGUuXG4gKiBAcmVxdWlyZWRcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NreVBob25lRmllbGRJbnB1dF0nLFxuICBwcm92aWRlcnM6IFtTS1lfUEhPTkVfRklFTERfVkFMVUVfQUNDRVNTT1IsIFNLWV9QSE9ORV9GSUVMRF9WQUxJREFUT1JdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lQaG9uZUZpZWxkSW5wdXREaXJlY3RpdmVcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvclxue1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgcGhvbmUgZmllbGQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5waG9uZUZpZWxkQ29tcG9uZW50LmNvdW50cnlTZWxlY3REaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuYWRhcHRlclNlcnZpY2Uuc2V0RWxlbWVudERpc2FibGVkU3RhdGUodGhpcy5lbFJlZiwgdmFsdWUpO1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZCB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBwcmV2ZW50IHZhbGlkYXRpb24gb24gdGhlIHBob25lIG51bWJlciBpbnB1dC4gRm9yIHZhbGlkYXRpb24sXG4gICAqIHBob25lIG51bWJlcnMgYXJlIGRyaXZlbiB0aHJvdWdoIHRoZSBgbmdNb2RlbGAgYXR0cmlidXRlIHRoYXQgeW91IHNwZWNpZnkgb24gYW5cbiAgICogYGlucHV0YCBlbGVtZW50IG9yIG9uIGEgYEZvcm1Db250cm9sYCBpbiBhIHJlYWN0aXZlIGZvcm0uIFRvIHByZXZlbnQgdmFsaWRhdGlvbixcbiAgICogc2V0IHRoaXMgcHJvcGVydHkgdG8gYHRydWVgLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNreVBob25lRmllbGROb1ZhbGlkYXRlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzZXQgbW9kZWxWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbW9kZWxWYWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5hZGFwdGVyU2VydmljZS5zZXRFbGVtZW50VmFsdWUodGhpcy5lbFJlZiwgdmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuZm9ybWF0TnVtYmVyKHZhbHVlLnRvU3RyaW5nKCkpO1xuXG4gICAgICB0aGlzLm9uQ2hhbmdlKGZvcm1hdHRlZFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdG9yQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBtb2RlbFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGVsVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcblxuICBwcml2YXRlIHRleHRDaGFuZ2VzOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPjtcblxuICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgcGhvbmVVdGlscyA9IFBob25lTnVtYmVyVXRpbC5nZXRJbnN0YW5jZSgpO1xuXG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX21vZGVsVmFsdWU6IHN0cmluZztcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGFkYXB0ZXJTZXJ2aWNlOiBTa3lQaG9uZUZpZWxkQWRhcHRlclNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBwaG9uZUZpZWxkQ29tcG9uZW50OiBTa3lQaG9uZUZpZWxkQ29tcG9uZW50XG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBob25lRmllbGRDb21wb25lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1lvdSBtdXN0IHdyYXAgdGhlIGBza3lQaG9uZUZpZWxkSW5wdXRgIGRpcmVjdGl2ZSB3aXRoaW4gYSAnICtcbiAgICAgICAgICAnYDxza3ktcGhvbmUtZmllbGQ+YCBjb21wb25lbnQhJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkYXB0ZXJTZXJ2aWNlLnNldEVsZW1lbnRUeXBlKHRoaXMuZWxSZWYpO1xuICAgIHRoaXMuYWRhcHRlclNlcnZpY2UuYWRkRWxlbWVudENsYXNzKHRoaXMuZWxSZWYsICdza3ktZm9ybS1jb250cm9sJyk7XG4gICAgaWYgKHRoaXMucGhvbmVGaWVsZENvbXBvbmVudC5zZWxlY3RlZENvdW50cnkpIHtcbiAgICAgIHRoaXMuYWRhcHRlclNlcnZpY2Uuc2V0RWxlbWVudFBsYWNlaG9sZGVyKFxuICAgICAgICB0aGlzLmVsUmVmLFxuICAgICAgICB0aGlzLnBob25lRmllbGRDb21wb25lbnQuc2VsZWN0ZWRDb3VudHJ5LmV4YW1wbGVOdW1iZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGFwdGVyU2VydmljZS5zZXRBcmlhTGFiZWwodGhpcy5lbFJlZik7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucGhvbmVGaWVsZENvbXBvbmVudC5zZWxlY3RlZENvdW50cnlDaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoY291bnRyeTogU2t5UGhvbmVGaWVsZENvdW50cnkpID0+IHtcbiAgICAgICAgdGhpcy5tb2RlbFZhbHVlID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICB0aGlzLmFkYXB0ZXJTZXJ2aWNlLnNldEVsZW1lbnRQbGFjZWhvbGRlcihcbiAgICAgICAgICB0aGlzLmVsUmVmLFxuICAgICAgICAgIGNvdW50cnkuZXhhbXBsZU51bWJlclxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBhZGRyZXNzIGEgYnVnIGluIEFuZ3VsYXIgNCwgd2hlcmUgdGhlIHZhbHVlIGlzIG5vdCBjaGFuZ2VkIG9uIHRoZSB2aWV3LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTM3OTJcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmNvbnRyb2wgJiYgdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUodGhpcy5tb2RlbFZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgdGhlIG5ldyB2YWx1ZSBmb3IgcmVhY3RpdmUgZm9ybXMgb24gY2hhbmdlIGV2ZW50cyBvbiB0aGUgaW5wdXQgZWxlbWVudFxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGNoYW5nZSBldmVudCB0aGF0IHdhcyByZWNlaXZlZFxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uSW5wdXRDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy50ZXh0Q2hhbmdlcykge1xuICAgICAgdGhpcy5zZXR1cFRleHRDaGFuZ2VTdWJzY3JpcHRpb24oZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZXh0Q2hhbmdlcy5uZXh0KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIHJlYWN0aXZlIGZvcm0gY29udHJvbHMgYXMgdG91Y2hlZCBvbiBpbnB1dCBibHVyIGV2ZW50c1xuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIHB1YmxpYyBvbklucHV0Qmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25JbnB1dFR5cGluZyhldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRleHRDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnNldHVwVGV4dENoYW5nZVN1YnNjcmlwdGlvbihldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRleHRDaGFuZ2VzLm5leHQoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHRoZSBuZXcgdmFsdWUgZm9yIHJlYWN0aXZlIGZvcm1zXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IHZhbHVlIGZvciB0aGUgaW5wdXRcbiAgICovXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnBob25lRmllbGRDb21wb25lbnQuc2V0Q291bnRyeUJ5RGlhbENvZGUodmFsdWUpO1xuXG4gICAgdGhpcy5tb2RlbFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvbiB0aGUgaW5wdXRcbiAgICogQHBhcmFtIGlzRGlzYWJsZWQgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgaW5wdXQncyBkaXNhYmxlZCBzdGF0ZVxuICAgKi9cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlJ3MgdGhlIGZvcm0gY29udHJvbCdzIGN1cnJlbnQgdmFsdWVcbiAgICogQHBhcmFtIGNvbnRyb2wgdGhlIGZvcm0gY29udHJvbCBmb3IgdGhlIGlucHV0XG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgIHRoaXMuY29udHJvbCA9IGNvbnRyb2w7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2t5UGhvbmVGaWVsZE5vVmFsaWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5waG9uZUZpZWxkQ29tcG9uZW50LnNlbGVjdGVkQ291bnRyeSAmJlxuICAgICAgIXRoaXMudmFsaWRhdGVOdW1iZXIodmFsdWUpXG4gICAgKSB7XG4gICAgICBpZiAoIXRoaXMudGV4dENoYW5nZXMpIHtcbiAgICAgICAgLy8gTWFyayB0aGUgaW52YWxpZCBjb250cm9sIGFzIHRvdWNoZWQgc28gdGhhdCB0aGUgaW5wdXQncyBpbnZhbGlkIENTUyBzdHlsZXMgYXBwZWFyLlxuICAgICAgICAvLyAoVGhpcyBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gdGhlIGludmFsaWQgdmFsdWUgaXMgc2V0IGJ5IHRoZSBGb3JtQ29udHJvbCBjb25zdHJ1Y3Rvci4pXG4gICAgICAgIC8vIFdlIGRvbid0IGRvIHRoaXMgaWYgdGhlIGlucHV0IGlzIHRoZSBhY3RpdmUgZWxlbWVudCBzbyB0aGF0IHdlIGRvbid0IHNob3cgdmFsaWRhdGlvblxuICAgICAgICAvLyBlcnJvcnMgdW5sZXNzIGl0IGlzIGludmFsaWQgb24gaW5pdGlhbGl6YXRpb24gb3IgdGhlIGlucHV0IGhhcyBiZWVuIGJsdXJyZWQuXG4gICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBza3lQaG9uZUZpZWxkOiB7XG4gICAgICAgICAgaW52YWxpZDogdmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBUZXh0Q2hhbmdlU3Vic2NyaXB0aW9uKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMudGV4dENoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRleHQpO1xuXG4gICAgdGhpcy50ZXh0Q2hhbmdlc1xuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobmV3VmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU51bWJlcihwaG9uZU51bWJlcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG51bWJlck9iaiA9IHRoaXMucGhvbmVVdGlscy5wYXJzZUFuZEtlZXBSYXdJbnB1dChcbiAgICAgICAgcGhvbmVOdW1iZXIsXG4gICAgICAgIHRoaXMucGhvbmVGaWVsZENvbXBvbmVudC5zZWxlY3RlZENvdW50cnkuaXNvMlxuICAgICAgKTtcblxuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5waG9uZUZpZWxkQ29tcG9uZW50LmFsbG93RXh0ZW5zaW9ucyAmJlxuICAgICAgICBudW1iZXJPYmouZ2V0RXh0ZW5zaW9uKClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnBob25lVXRpbHMuaXNWYWxpZE51bWJlcihudW1iZXJPYmopO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0J3MgdGhlIGdpdmVuIHBob25lIG51bWJlciBiYXNlZCBvbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvdW50cnkuXG4gICAqIEBwYXJhbSBwaG9uZU51bWJlciBUaGUgbnVtYmVyIHRvIGZvcm1hdFxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXROdW1iZXIocGhvbmVOdW1iZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG51bWJlck9iaiA9IHRoaXMucGhvbmVVdGlscy5wYXJzZUFuZEtlZXBSYXdJbnB1dChcbiAgICAgICAgcGhvbmVOdW1iZXIsXG4gICAgICAgIHRoaXMucGhvbmVGaWVsZENvbXBvbmVudC5zZWxlY3RlZENvdW50cnkuaXNvMlxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLnBob25lVXRpbHMuaXNQb3NzaWJsZU51bWJlcihudW1iZXJPYmopKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5waG9uZUZpZWxkQ29tcG9uZW50LnJldHVybkZvcm1hdCkge1xuICAgICAgICAgIGNhc2UgJ2ludGVybmF0aW9uYWwnOlxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGhvbmVVdGlscy5mb3JtYXQoXG4gICAgICAgICAgICAgIG51bWJlck9iaixcbiAgICAgICAgICAgICAgUGhvbmVOdW1iZXJGb3JtYXQuSU5URVJOQVRJT05BTFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlICduYXRpb25hbCc6XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waG9uZVV0aWxzLmZvcm1hdChcbiAgICAgICAgICAgICAgbnVtYmVyT2JqLFxuICAgICAgICAgICAgICBQaG9uZU51bWJlckZvcm1hdC5OQVRJT05BTFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlICdkZWZhdWx0JzpcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLnBob25lRmllbGRDb21wb25lbnQuc2VsZWN0ZWRDb3VudHJ5LmlzbzIgIT09XG4gICAgICAgICAgICAgIHRoaXMucGhvbmVGaWVsZENvbXBvbmVudC5kZWZhdWx0Q291bnRyeVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnBob25lVXRpbHMuZm9ybWF0KFxuICAgICAgICAgICAgICAgIG51bWJlck9iaixcbiAgICAgICAgICAgICAgICBQaG9uZU51bWJlckZvcm1hdC5JTlRFUk5BVElPTkFMXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5waG9uZVV0aWxzLmZvcm1hdChcbiAgICAgICAgICAgICAgICBudW1iZXJPYmosXG4gICAgICAgICAgICAgICAgUGhvbmVOdW1iZXJGb3JtYXQuTkFUSU9OQUxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBob25lTnVtYmVyO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiBwaG9uZU51bWJlcjtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHByaXZhdGUgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBwcml2YXRlIHZhbGlkYXRvckNoYW5nZSA9ICgpID0+IHt9O1xufVxuIl19
|