@skyux/phone-field 5.0.2 → 5.5.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.
Files changed (53) hide show
  1. package/README.md +6 -4
  2. package/bundles/skyux-phone-field-testing.umd.js +4 -4
  3. package/bundles/skyux-phone-field.umd.js +21 -20
  4. package/documentation.json +107 -28
  5. package/esm2015/index.js +8 -0
  6. package/esm2015/index.js.map +1 -0
  7. package/esm2015/lib/modules/phone-field/phone-field-adapter.service.js +64 -0
  8. package/esm2015/lib/modules/phone-field/phone-field-adapter.service.js.map +1 -0
  9. package/esm2015/lib/modules/phone-field/phone-field-input.directive.js +279 -0
  10. package/esm2015/lib/modules/phone-field/phone-field-input.directive.js.map +1 -0
  11. package/esm2015/{modules → lib/modules}/phone-field/phone-field.component.js +11 -9
  12. package/esm2015/lib/modules/phone-field/phone-field.component.js.map +1 -0
  13. package/esm2015/lib/modules/phone-field/phone-field.module.js +50 -0
  14. package/esm2015/lib/modules/phone-field/phone-field.module.js.map +1 -0
  15. package/esm2015/lib/modules/phone-field/types/country.js +2 -0
  16. package/esm2015/lib/modules/phone-field/types/country.js.map +1 -0
  17. package/esm2015/lib/modules/phone-field/types/number-return-format.js +2 -0
  18. package/esm2015/lib/modules/phone-field/types/number-return-format.js.map +1 -0
  19. package/esm2015/lib/modules/shared/sky-phone-field-resources.module.js +60 -0
  20. package/esm2015/lib/modules/shared/sky-phone-field-resources.module.js.map +1 -0
  21. package/esm2015/skyux-phone-field.js +2 -2
  22. package/esm2015/skyux-phone-field.js.map +1 -0
  23. package/esm2015/testing/phonefield/phone-field-fixture.js +1 -1
  24. package/esm2015/testing/phonefield/phone-field-fixture.js.map +1 -0
  25. package/esm2015/testing/phonefield/phone-field-testing.module.js +5 -5
  26. package/esm2015/testing/phonefield/phone-field-testing.module.js.map +1 -0
  27. package/esm2015/testing/public-api.js +1 -1
  28. package/esm2015/testing/public-api.js.map +1 -0
  29. package/esm2015/testing/skyux-phone-field-testing.js +1 -1
  30. package/esm2015/testing/skyux-phone-field-testing.js.map +1 -0
  31. package/fesm2015/skyux-phone-field-testing.js +4 -4
  32. package/fesm2015/skyux-phone-field-testing.js.map +1 -1
  33. package/fesm2015/skyux-phone-field.js +21 -20
  34. package/fesm2015/skyux-phone-field.js.map +1 -1
  35. package/index.d.ts +5 -0
  36. package/{modules → lib/modules}/phone-field/phone-field-adapter.service.d.ts +0 -0
  37. package/{modules → lib/modules}/phone-field/phone-field-input.directive.d.ts +0 -0
  38. package/{modules → lib/modules}/phone-field/phone-field.component.d.ts +3 -2
  39. package/{modules → lib/modules}/phone-field/phone-field.module.d.ts +0 -0
  40. package/{modules → lib/modules}/phone-field/types/country.d.ts +0 -0
  41. package/{modules → lib/modules}/phone-field/types/number-return-format.d.ts +0 -0
  42. package/{modules → lib/modules}/shared/sky-phone-field-resources.module.d.ts +0 -0
  43. package/package.json +24 -10
  44. package/skyux-phone-field.d.ts +1 -1
  45. package/LICENSE +0 -21
  46. package/esm2015/modules/phone-field/phone-field-adapter.service.js +0 -63
  47. package/esm2015/modules/phone-field/phone-field-input.directive.js +0 -277
  48. package/esm2015/modules/phone-field/phone-field.module.js +0 -50
  49. package/esm2015/modules/phone-field/types/country.js +0 -2
  50. package/esm2015/modules/phone-field/types/number-return-format.js +0 -2
  51. package/esm2015/modules/shared/sky-phone-field-resources.module.js +0 -60
  52. package/esm2015/public-api.js +0 -8
  53. package/public-api.d.ts +0 -5
@@ -0,0 +1,279 @@
1
+ import { ChangeDetectorRef, Directive, ElementRef, forwardRef, HostListener, Input, Optional, } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR, NG_VALIDATORS, } from '@angular/forms';
3
+ import { BehaviorSubject, Subject } from 'rxjs';
4
+ import { debounceTime, takeUntil } from 'rxjs/operators';
5
+ import { PhoneNumberFormat, PhoneNumberUtil } from 'google-libphonenumber';
6
+ import { SkyPhoneFieldComponent } from './phone-field.component';
7
+ import { SkyPhoneFieldAdapterService } from './phone-field-adapter.service';
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
+ // tslint:disable:no-forward-ref no-use-before-declare
12
+ const SKY_PHONE_FIELD_VALUE_ACCESSOR = {
13
+ provide: NG_VALUE_ACCESSOR,
14
+ useExisting: forwardRef(() => SkyPhoneFieldInputDirective),
15
+ multi: true,
16
+ };
17
+ const SKY_PHONE_FIELD_VALIDATOR = {
18
+ provide: NG_VALIDATORS,
19
+ useExisting: forwardRef(() => SkyPhoneFieldInputDirective),
20
+ multi: true,
21
+ };
22
+ // tslint:enable
23
+ /**
24
+ * Creates a button, search input, and text input for entering and validating
25
+ * international phone numbers. Place this attribute on an `input` element, and wrap
26
+ * that element in a `sky-phone-field` component. By default, the country selector
27
+ * button displays a flag icon for the default country, and the phone number input
28
+ * displays a sample of the correct phone number format. When users select the country
29
+ * selector button, they expose the country search input, which is
30
+ * [an autocomplete input](https://developer.blackbaud.com/skyux/components/autocomplete)
31
+ * that allows them to select different countries. When users enter `+` followed by an
32
+ * international dial code in the phone number input, the country automatically switches
33
+ * to the country associated with the dial code.
34
+ * @required
35
+ */
36
+ export class SkyPhoneFieldInputDirective {
37
+ constructor(changeDetector, elRef, adapterService, phoneFieldComponent) {
38
+ this.changeDetector = changeDetector;
39
+ this.elRef = elRef;
40
+ this.adapterService = adapterService;
41
+ this.phoneFieldComponent = phoneFieldComponent;
42
+ /**
43
+ * Indicates whether to prevent validation on the phone number input. For validation,
44
+ * phone numbers are driven through the `ngModel` attribute that you specify on an
45
+ * `input` element or on a `FormControl` in a reactive form. To prevent validation,
46
+ * set this property to `true`.
47
+ * @default false
48
+ */
49
+ this.skyPhoneFieldNoValidate = false;
50
+ this.ngUnsubscribe = new Subject();
51
+ this.phoneUtils = PhoneNumberUtil.getInstance();
52
+ this.onChange = (_) => { };
53
+ /* istanbul ignore next */
54
+ this.onTouched = () => { };
55
+ /* istanbul ignore next */
56
+ this.validatorChange = () => { };
57
+ }
58
+ /**
59
+ * Indicates whether to disable the phone field.
60
+ * @default false
61
+ */
62
+ set disabled(value) {
63
+ this.phoneFieldComponent.countrySelectDisabled = value;
64
+ this.adapterService.setElementDisabledState(this.elRef, value);
65
+ this._disabled = value;
66
+ }
67
+ get disabled() {
68
+ return this._disabled || false;
69
+ }
70
+ set modelValue(value) {
71
+ this._modelValue = value;
72
+ this.adapterService.setElementValue(this.elRef, value);
73
+ if (value) {
74
+ let formattedValue = this.formatNumber(value.toString());
75
+ this.onChange(formattedValue);
76
+ }
77
+ else {
78
+ this.onChange(value);
79
+ }
80
+ this.validatorChange();
81
+ }
82
+ get modelValue() {
83
+ return this._modelValue;
84
+ }
85
+ ngOnInit() {
86
+ if (!this.phoneFieldComponent) {
87
+ throw new Error('You must wrap the `skyPhoneFieldInput` directive within a ' +
88
+ '`<sky-phone-field>` component!');
89
+ }
90
+ this.adapterService.setElementType(this.elRef);
91
+ this.adapterService.addElementClass(this.elRef, 'sky-form-control');
92
+ if (this.phoneFieldComponent.selectedCountry) {
93
+ this.adapterService.setElementPlaceholder(this.elRef, this.phoneFieldComponent.selectedCountry.exampleNumber);
94
+ }
95
+ this.adapterService.setAriaLabel(this.elRef);
96
+ }
97
+ ngAfterViewInit() {
98
+ this.phoneFieldComponent.selectedCountryChange
99
+ .pipe(takeUntil(this.ngUnsubscribe))
100
+ .subscribe((country) => {
101
+ this.modelValue = this.elRef.nativeElement.value;
102
+ this.adapterService.setElementPlaceholder(this.elRef, country.exampleNumber);
103
+ });
104
+ // This is needed to address a bug in Angular 4, where the value is not changed on the view.
105
+ // See: https://github.com/angular/angular/issues/13792
106
+ /* istanbul ignore else */
107
+ if (this.control && this.modelValue) {
108
+ this.control.setValue(this.modelValue, { emitEvent: false });
109
+ this.changeDetector.detectChanges();
110
+ }
111
+ }
112
+ ngOnDestroy() {
113
+ this.ngUnsubscribe.next();
114
+ this.ngUnsubscribe.complete();
115
+ }
116
+ /**
117
+ * Writes the new value for reactive forms on change events on the input element
118
+ * @param event The change event that was received
119
+ */
120
+ onInputChange(event) {
121
+ if (!this.textChanges) {
122
+ this.setupTextChangeSubscription(event.target.value);
123
+ }
124
+ else {
125
+ this.textChanges.next(event.target.value);
126
+ }
127
+ }
128
+ /**
129
+ * Marks reactive form controls as touched on input blur events
130
+ */
131
+ onInputBlur() {
132
+ this.onTouched();
133
+ }
134
+ onInputTyping(event) {
135
+ if (!this.textChanges) {
136
+ this.setupTextChangeSubscription(event.target.value);
137
+ }
138
+ else {
139
+ this.textChanges.next(event.target.value);
140
+ }
141
+ }
142
+ /**
143
+ * Writes the new value for reactive forms
144
+ * @param value The new value for the input
145
+ */
146
+ writeValue(value) {
147
+ this.phoneFieldComponent.setCountryByDialCode(value);
148
+ this.modelValue = value;
149
+ }
150
+ registerOnChange(fn) {
151
+ this.onChange = fn;
152
+ }
153
+ registerOnTouched(fn) {
154
+ this.onTouched = fn;
155
+ }
156
+ registerOnValidatorChange(fn) {
157
+ this.validatorChange = fn;
158
+ }
159
+ /**
160
+ * Sets the disabled state on the input
161
+ * @param isDisabled the new value of the input's disabled state
162
+ */
163
+ setDisabledState(isDisabled) {
164
+ this.disabled = isDisabled;
165
+ }
166
+ /**
167
+ * Validate's the form control's current value
168
+ * @param control the form control for the input
169
+ */
170
+ validate(control) {
171
+ if (!this.control) {
172
+ this.control = control;
173
+ }
174
+ if (this.skyPhoneFieldNoValidate) {
175
+ return;
176
+ }
177
+ const value = control.value;
178
+ if (!value) {
179
+ return;
180
+ }
181
+ if (this.phoneFieldComponent.selectedCountry &&
182
+ !this.validateNumber(value)) {
183
+ if (!this.textChanges) {
184
+ // Mark the invalid control as touched so that the input's invalid CSS styles appear.
185
+ // (This is only required when the invalid value is set by the FormControl constructor.)
186
+ // We don't do this if the input is the active element so that we don't show validation
187
+ // errors unless it is invalid on initialization or the input has been blurred.
188
+ control.markAsTouched();
189
+ }
190
+ return {
191
+ skyPhoneField: {
192
+ invalid: value,
193
+ },
194
+ };
195
+ }
196
+ }
197
+ setupTextChangeSubscription(text) {
198
+ this.textChanges = new BehaviorSubject(text);
199
+ this.textChanges
200
+ .pipe(debounceTime(500), takeUntil(this.ngUnsubscribe))
201
+ .subscribe((newValue) => {
202
+ this.writeValue(newValue);
203
+ });
204
+ }
205
+ validateNumber(phoneNumber) {
206
+ try {
207
+ const numberObj = this.phoneUtils.parseAndKeepRawInput(phoneNumber, this.phoneFieldComponent.selectedCountry.iso2);
208
+ if (!this.phoneFieldComponent.allowExtensions &&
209
+ numberObj.getExtension()) {
210
+ return false;
211
+ }
212
+ return this.phoneUtils.isValidNumber(numberObj);
213
+ }
214
+ catch (e) {
215
+ return false;
216
+ }
217
+ }
218
+ /**
219
+ * Format's the given phone number based on the currently selected country.
220
+ * @param phoneNumber The number to format
221
+ */
222
+ formatNumber(phoneNumber) {
223
+ try {
224
+ const numberObj = this.phoneUtils.parseAndKeepRawInput(phoneNumber, this.phoneFieldComponent.selectedCountry.iso2);
225
+ if (this.phoneUtils.isPossibleNumber(numberObj)) {
226
+ switch (this.phoneFieldComponent.returnFormat) {
227
+ case 'international':
228
+ return this.phoneUtils.format(numberObj, PhoneNumberFormat.INTERNATIONAL);
229
+ case 'national':
230
+ return this.phoneUtils.format(numberObj, PhoneNumberFormat.NATIONAL);
231
+ case 'default':
232
+ default:
233
+ if (this.phoneFieldComponent.selectedCountry.iso2 !==
234
+ this.phoneFieldComponent.defaultCountry) {
235
+ return this.phoneUtils.format(numberObj, PhoneNumberFormat.INTERNATIONAL);
236
+ }
237
+ else {
238
+ return this.phoneUtils.format(numberObj, PhoneNumberFormat.NATIONAL);
239
+ }
240
+ }
241
+ }
242
+ else {
243
+ return phoneNumber;
244
+ }
245
+ }
246
+ catch (e) {
247
+ /* sanity check */
248
+ /* istanbul ignore next */
249
+ return phoneNumber;
250
+ }
251
+ }
252
+ }
253
+ SkyPhoneFieldInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", 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 });
254
+ SkyPhoneFieldInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", 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 });
255
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyPhoneFieldInputDirective, decorators: [{
256
+ type: Directive,
257
+ args: [{
258
+ selector: '[skyPhoneFieldInput]',
259
+ providers: [SKY_PHONE_FIELD_VALUE_ACCESSOR, SKY_PHONE_FIELD_VALIDATOR],
260
+ }]
261
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.SkyPhoneFieldAdapterService, decorators: [{
262
+ type: Optional
263
+ }] }, { type: i2.SkyPhoneFieldComponent, decorators: [{
264
+ type: Optional
265
+ }] }]; }, propDecorators: { disabled: [{
266
+ type: Input
267
+ }], skyPhoneFieldNoValidate: [{
268
+ type: Input
269
+ }], onInputChange: [{
270
+ type: HostListener,
271
+ args: ['change', ['$event']]
272
+ }], onInputBlur: [{
273
+ type: HostListener,
274
+ args: ['blur']
275
+ }], onInputTyping: [{
276
+ type: HostListener,
277
+ args: ['input', ['$event']]
278
+ }] } });
279
+ //# sourceMappingURL=phone-field-input.directive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone-field-input.directive.js","sourceRoot":"","sources":["../../../../../../../../libs/components/phone-field/src/lib/modules/phone-field/phone-field-input.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n forwardRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n} from '@angular/core';\n\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n NG_VALIDATORS,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport { BehaviorSubject, Subject } from 'rxjs';\n\nimport { debounceTime, takeUntil } from 'rxjs/operators';\n\nimport { PhoneNumberFormat, PhoneNumberUtil } from 'google-libphonenumber';\n\nimport { SkyPhoneFieldComponent } from './phone-field.component';\n\nimport { SkyPhoneFieldAdapterService } from './phone-field-adapter.service';\n\nimport { SkyPhoneFieldCountry } from './types/country';\n\n// tslint:disable:no-forward-ref no-use-before-declare\nconst SKY_PHONE_FIELD_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyPhoneFieldInputDirective),\n multi: true,\n};\n\nconst SKY_PHONE_FIELD_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyPhoneFieldInputDirective),\n multi: true,\n};\n// tslint:enable\n\n/**\n * Creates a button, search input, and text input for entering and validating\n * international phone numbers. Place this attribute on an `input` element, and wrap\n * that element in a `sky-phone-field` component. By default, the country selector\n * button displays a flag icon for the default country, and the phone number input\n * displays a sample of the correct phone number format. When users select the country\n * selector button, they expose the country search input, which is\n * [an autocomplete input](https://developer.blackbaud.com/skyux/components/autocomplete)\n * that allows them to select different countries. When users enter `+` followed by an\n * international dial code in the phone number input, the country automatically switches\n * to the country associated with the dial code.\n * @required\n */\n@Directive({\n selector: '[skyPhoneFieldInput]',\n providers: [SKY_PHONE_FIELD_VALUE_ACCESSOR, SKY_PHONE_FIELD_VALIDATOR],\n})\nexport class SkyPhoneFieldInputDirective\n implements OnInit, OnDestroy, AfterViewInit, ControlValueAccessor, Validator\n{\n /**\n * Indicates whether to disable the phone field.\n * @default false\n */\n @Input()\n public set disabled(value: boolean) {\n this.phoneFieldComponent.countrySelectDisabled = value;\n this.adapterService.setElementDisabledState(this.elRef, value);\n this._disabled = value;\n }\n\n public get disabled(): boolean {\n return this._disabled || false;\n }\n\n /**\n * Indicates whether to prevent validation on the phone number input. For validation,\n * phone numbers are driven through the `ngModel` attribute that you specify on an\n * `input` element or on a `FormControl` in a reactive form. To prevent validation,\n * set this property to `true`.\n * @default false\n */\n @Input()\n public skyPhoneFieldNoValidate: boolean = false;\n\n private set modelValue(value: string) {\n this._modelValue = value;\n\n this.adapterService.setElementValue(this.elRef, value);\n\n if (value) {\n let formattedValue = this.formatNumber(value.toString());\n\n this.onChange(formattedValue);\n } else {\n this.onChange(value);\n }\n this.validatorChange();\n }\n\n private get modelValue(): string {\n return this._modelValue;\n }\n\n private control: AbstractControl;\n\n private textChanges: BehaviorSubject<string>;\n\n private ngUnsubscribe = new Subject();\n\n private phoneUtils = PhoneNumberUtil.getInstance();\n\n private _disabled: boolean;\n\n private _modelValue: string;\n\n public constructor(\n private changeDetector: ChangeDetectorRef,\n private elRef: ElementRef,\n @Optional() private adapterService: SkyPhoneFieldAdapterService,\n @Optional() private phoneFieldComponent: SkyPhoneFieldComponent\n ) {}\n\n public ngOnInit(): void {\n if (!this.phoneFieldComponent) {\n throw new Error(\n 'You must wrap the `skyPhoneFieldInput` directive within a ' +\n '`<sky-phone-field>` component!'\n );\n }\n\n this.adapterService.setElementType(this.elRef);\n this.adapterService.addElementClass(this.elRef, 'sky-form-control');\n if (this.phoneFieldComponent.selectedCountry) {\n this.adapterService.setElementPlaceholder(\n this.elRef,\n this.phoneFieldComponent.selectedCountry.exampleNumber\n );\n }\n\n this.adapterService.setAriaLabel(this.elRef);\n }\n\n public ngAfterViewInit(): void {\n this.phoneFieldComponent.selectedCountryChange\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((country: SkyPhoneFieldCountry) => {\n this.modelValue = this.elRef.nativeElement.value;\n this.adapterService.setElementPlaceholder(\n this.elRef,\n country.exampleNumber\n );\n });\n\n // This is needed to address a bug in Angular 4, where the value is not changed on the view.\n // See: https://github.com/angular/angular/issues/13792\n /* istanbul ignore else */\n if (this.control && this.modelValue) {\n this.control.setValue(this.modelValue, { emitEvent: false });\n this.changeDetector.detectChanges();\n }\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n /**\n * Writes the new value for reactive forms on change events on the input element\n * @param event The change event that was received\n */\n @HostListener('change', ['$event'])\n public onInputChange(event: any): void {\n if (!this.textChanges) {\n this.setupTextChangeSubscription(event.target.value);\n } else {\n this.textChanges.next(event.target.value);\n }\n }\n\n /**\n * Marks reactive form controls as touched on input blur events\n */\n @HostListener('blur')\n public onInputBlur(): void {\n this.onTouched();\n }\n\n @HostListener('input', ['$event'])\n public onInputTyping(event: any): void {\n if (!this.textChanges) {\n this.setupTextChangeSubscription(event.target.value);\n } else {\n this.textChanges.next(event.target.value);\n }\n }\n\n /**\n * Writes the new value for reactive forms\n * @param value The new value for the input\n */\n public writeValue(value: string): void {\n this.phoneFieldComponent.setCountryByDialCode(value);\n\n this.modelValue = value;\n }\n\n public registerOnChange(fn: (value: any) => any): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => any): void {\n this.onTouched = fn;\n }\n\n public registerOnValidatorChange(fn: () => void): void {\n this.validatorChange = fn;\n }\n\n /**\n * Sets the disabled state on the input\n * @param isDisabled the new value of the input's disabled state\n */\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /**\n * Validate's the form control's current value\n * @param control the form control for the input\n */\n public validate(control: AbstractControl): ValidationErrors {\n if (!this.control) {\n this.control = control;\n }\n\n if (this.skyPhoneFieldNoValidate) {\n return;\n }\n\n const value = control.value;\n\n if (!value) {\n return;\n }\n\n if (\n this.phoneFieldComponent.selectedCountry &&\n !this.validateNumber(value)\n ) {\n if (!this.textChanges) {\n // Mark the invalid control as touched so that the input's invalid CSS styles appear.\n // (This is only required when the invalid value is set by the FormControl constructor.)\n // We don't do this if the input is the active element so that we don't show validation\n // errors unless it is invalid on initialization or the input has been blurred.\n control.markAsTouched();\n }\n\n return {\n skyPhoneField: {\n invalid: value,\n },\n };\n }\n }\n\n private setupTextChangeSubscription(text: string) {\n this.textChanges = new BehaviorSubject(text);\n\n this.textChanges\n .pipe(debounceTime(500), takeUntil(this.ngUnsubscribe))\n .subscribe((newValue) => {\n this.writeValue(newValue);\n });\n }\n\n private validateNumber(phoneNumber: string): boolean {\n try {\n const numberObj = this.phoneUtils.parseAndKeepRawInput(\n phoneNumber,\n this.phoneFieldComponent.selectedCountry.iso2\n );\n\n if (\n !this.phoneFieldComponent.allowExtensions &&\n numberObj.getExtension()\n ) {\n return false;\n }\n\n return this.phoneUtils.isValidNumber(numberObj);\n } catch (e) {\n return false;\n }\n }\n\n /**\n * Format's the given phone number based on the currently selected country.\n * @param phoneNumber The number to format\n */\n private formatNumber(phoneNumber: string): string {\n try {\n const numberObj = this.phoneUtils.parseAndKeepRawInput(\n phoneNumber,\n this.phoneFieldComponent.selectedCountry.iso2\n );\n if (this.phoneUtils.isPossibleNumber(numberObj)) {\n switch (this.phoneFieldComponent.returnFormat) {\n case 'international':\n return this.phoneUtils.format(\n numberObj,\n PhoneNumberFormat.INTERNATIONAL\n );\n case 'national':\n return this.phoneUtils.format(\n numberObj,\n PhoneNumberFormat.NATIONAL\n );\n case 'default':\n default:\n if (\n this.phoneFieldComponent.selectedCountry.iso2 !==\n this.phoneFieldComponent.defaultCountry\n ) {\n return this.phoneUtils.format(\n numberObj,\n PhoneNumberFormat.INTERNATIONAL\n );\n } else {\n return this.phoneUtils.format(\n numberObj,\n PhoneNumberFormat.NATIONAL\n );\n }\n }\n } else {\n return phoneNumber;\n }\n } catch (e) {\n /* sanity check */\n /* istanbul ignore next */\n return phoneNumber;\n }\n }\n\n private onChange = (_: any) => {};\n\n /* istanbul ignore next */\n private onTouched = () => {};\n\n /* istanbul ignore next */\n private validatorChange = () => {};\n}\n"]}
@@ -1,7 +1,8 @@
1
1
  import { animate, style, transition, trigger, } from '@angular/animations';
2
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Optional, Output, SkipSelf, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core';
3
- import { FormControl } from '@angular/forms';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Optional, Output, SkipSelf, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core';
3
+ import { FormBuilder, FormControl } from '@angular/forms';
4
4
  import { SkyInputBoxHostService } from '@skyux/forms';
5
+ import { SkyThemeService } from '@skyux/theme';
5
6
  import { PhoneNumberFormat, PhoneNumberType, PhoneNumberUtil, } from 'google-libphonenumber';
6
7
  import 'intl-tel-input';
7
8
  import { SkyPhoneFieldAdapterService } from './phone-field-adapter.service';
@@ -31,7 +32,8 @@ export class SkyPhoneFieldComponent {
31
32
  this.allowExtensions = true;
32
33
  /**
33
34
  * Specifies the format for validated phone numbers.
34
- * @default 'default'
35
+ * Options include: `"default"`, `"international"`, and `"national"`.
36
+ * @default "default"
35
37
  */
36
38
  this.returnFormat = 'default';
37
39
  /**
@@ -68,7 +70,7 @@ export class SkyPhoneFieldComponent {
68
70
  * [International Organization for Standardization Alpha 2](https://www.nationsonline.org/oneworld/country_code_list.htm)
69
71
  * country code for the default country. The country selector button displays a flag
70
72
  * icon for this default country until users select a different country.
71
- * @default us
73
+ * @default "us"
72
74
  */
73
75
  set defaultCountry(value) {
74
76
  if (value && value !== this._defaultCountry) {
@@ -98,7 +100,7 @@ export class SkyPhoneFieldComponent {
98
100
  }
99
101
  ngOnInit() {
100
102
  // The timeout here is needed to avoid a change before checked error when a user specifies
101
- // a selected country on intialization of the component.
103
+ // a selected country on initialization of the component.
102
104
  setTimeout(() => {
103
105
  if (this.inputBoxHostSvc) {
104
106
  this.inputBoxHostSvc.populate({
@@ -197,8 +199,8 @@ export class SkyPhoneFieldComponent {
197
199
  return false;
198
200
  }
199
201
  }
200
- SkyPhoneFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SkyPhoneFieldComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SkyPhoneFieldAdapterService }, { token: i0.ChangeDetectorRef }, { token: i3.SkyThemeService, optional: true }, { token: i4.SkyInputBoxHostService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
201
- SkyPhoneFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: SkyPhoneFieldComponent, selector: "sky-phone-field", inputs: { allowExtensions: "allowExtensions", defaultCountry: "defaultCountry", returnFormat: "returnFormat", supportedCountryISOs: "supportedCountryISOs", selectedCountry: "selectedCountry" }, outputs: { selectedCountryChange: "selectedCountryChange" }, providers: [
202
+ SkyPhoneFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyPhoneFieldComponent, deps: [{ token: i1.FormBuilder }, { token: i2.SkyPhoneFieldAdapterService }, { token: i0.ChangeDetectorRef }, { token: i3.SkyThemeService, optional: true }, { token: i4.SkyInputBoxHostService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
203
+ SkyPhoneFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SkyPhoneFieldComponent, selector: "sky-phone-field", inputs: { allowExtensions: "allowExtensions", defaultCountry: "defaultCountry", returnFormat: "returnFormat", supportedCountryISOs: "supportedCountryISOs", selectedCountry: "selectedCountry" }, outputs: { selectedCountryChange: "selectedCountryChange" }, providers: [
202
204
  SkyPhoneFieldAdapterService,
203
205
  // Prevents the embedded country field component from changing its behavior based on
204
206
  // being inside an input box. The phone field itself will handle the required changes
@@ -243,7 +245,7 @@ SkyPhoneFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
243
245
  ]),
244
246
  ]),
245
247
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
246
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SkyPhoneFieldComponent, decorators: [{
248
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyPhoneFieldComponent, decorators: [{
247
249
  type: Component,
248
250
  args: [{
249
251
  selector: 'sky-phone-field',
@@ -335,4 +337,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
335
337
  static: true,
336
338
  }]
337
339
  }] } });
338
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGhvbmUtZmllbGQvc3JjL21vZHVsZXMvcGhvbmUtZmllbGQvcGhvbmUtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGhvbmUtZmllbGQvc3JjL21vZHVsZXMvcGhvbmUtZmllbGQvcGhvbmUtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE9BQU8sRUFFUCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFlLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQU10RCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixlQUFlLEdBQ2hCLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7OztBQU01RSxzRkFBc0Y7QUFDdEYsa0ZBQWtGO0FBQ2xGLDBJQUEwSTtBQWtFMUksTUFBTSxPQUFPLHNCQUFzQjtJQTRIakMsWUFDVSxXQUF3QixFQUN4QixjQUEyQyxFQUMzQyxjQUFpQyxFQUN0QixRQUEwQixFQUNkLGVBQXdDO1FBSi9ELGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUE2QjtRQUMz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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhbmltYXRlLFxuICBBbmltYXRpb25FdmVudCxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb24sXG4gIHRyaWdnZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNraXBTZWxmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBTa3lJbnB1dEJveEhvc3RTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2Zvcm1zJztcblxuaW1wb3J0IHsgU2t5Q291bnRyeUZpZWxkQ291bnRyeSB9IGZyb20gJ0Bza3l1eC9sb29rdXAnO1xuXG5pbXBvcnQgeyBTa3lUaGVtZVNlcnZpY2UgfSBmcm9tICdAc2t5dXgvdGhlbWUnO1xuXG5pbXBvcnQge1xuICBQaG9uZU51bWJlckZvcm1hdCxcbiAgUGhvbmVOdW1iZXJUeXBlLFxuICBQaG9uZU51bWJlclV0aWwsXG59IGZyb20gJ2dvb2dsZS1saWJwaG9uZW51bWJlcic7XG5cbmltcG9ydCAnaW50bC10ZWwtaW5wdXQnO1xuXG5pbXBvcnQgeyBTa3lQaG9uZUZpZWxkQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL3Bob25lLWZpZWxkLWFkYXB0ZXIuc2VydmljZSc7XG5cbmltcG9ydCB7IFNreVBob25lRmllbGRDb3VudHJ5IH0gZnJvbSAnLi90eXBlcy9jb3VudHJ5JztcblxuaW1wb3J0IHsgU2t5UGhvbmVGaWVsZE51bWJlclJldHVybkZvcm1hdCB9IGZyb20gJy4vdHlwZXMvbnVtYmVyLXJldHVybi1mb3JtYXQnO1xuXG4vLyBOT1RFOiBUaGUgbm8tb3AgYW5pbWF0aW9uIGlzIGhlcmUgaW4gb3JkZXIgdG8gYmxvY2sgdGhlIGlucHV0J3MgXCJmYWRlIGluXCIgYW5pbWF0aW9uXG4vLyBmcm9tIGZpcmluZyBvbiBpbml0aWFsIGxvYWQuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgdGVjaG5pcXVlIHlvdSBjYW4gc2VlXG4vLyBodHRwczovL3d3dy5iZW5uYWRlbC5jb20vYmxvZy8zNDE3LXVzaW5nLW5vLW9wLXRyYW5zaXRpb25zLXRvLXByZXZlbnQtYW5pbWF0aW9uLWR1cmluZy10aGUtaW5pdGlhbC1yZW5kZXItb2Ytbmdmb3ItaW4tYW5ndWxhci01LTItNi5odG1cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1waG9uZS1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9waG9uZS1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Bob25lLWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBTa3lQaG9uZUZpZWxkQWRhcHRlclNlcnZpY2UsXG4gICAgLy8gUHJldmVudHMgdGhlIGVtYmVkZGVkIGNvdW50cnkgZmllbGQgY29tcG9uZW50IGZyb20gY2hhbmdpbmcgaXRzIGJlaGF2aW9yIGJhc2VkIG9uXG4gICAgLy8gYmVpbmcgaW5zaWRlIGFuIGlucHV0IGJveC4gVGhlIHBob25lIGZpZWxkIGl0c2VsZiB3aWxsIGhhbmRsZSB0aGUgcmVxdWlyZWQgY2hhbmdlc1xuICAgIC8vIGZvciBpbnB1dCBib3guXG4gICAge1xuICAgICAgcHJvdmlkZTogU2t5SW5wdXRCb3hIb3N0U2VydmljZSxcbiAgICAgIHVzZVZhbHVlOiB1bmRlZmluZWQsXG4gICAgfSxcbiAgXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2Jsb2NrQW5pbWF0aW9uT25Mb2FkJywgW3RyYW5zaXRpb24oJzplbnRlcicsIFtdKV0pLFxuICAgIHRyaWdnZXIoJ2NvdW50cnlTZWFyY2hBbmltYXRpb24nLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICB9KSxcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAnMjAwbXMgZWFzZS1pbicsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgIHdpZHRoOiAnKicsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xuICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICcyMDBtcyBlYXNlLWluJyxcbiAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgIF0pLFxuICAgIF0pLFxuICAgIHRyaWdnZXIoJ3Bob25lSW5wdXRBbmltYXRpb24nLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICB9KSxcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAnMTUwbXMgZWFzZS1pbicsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgJzE1MG1zIGVhc2UtaW4nLFxuICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgIF0pLFxuICAgIF0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lQaG9uZUZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHBob25lIG51bWJlciBleHRlbnNpb25zIGFyZSBhbGxvd2VkLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWxsb3dFeHRlbnNpb25zOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZVxuICAgKiBbSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiBBbHBoYSAyXShodHRwczovL3d3dy5uYXRpb25zb25saW5lLm9yZy9vbmV3b3JsZC9jb3VudHJ5X2NvZGVfbGlzdC5odG0pXG4gICAqIGNvdW50cnkgY29kZSBmb3IgdGhlIGRlZmF1bHQgY291bnRyeS4gVGhlIGNvdW50cnkgc2VsZWN0b3IgYnV0dG9uIGRpc3BsYXlzIGEgZmxhZ1xuICAgKiBpY29uIGZvciB0aGlzIGRlZmF1bHQgY291bnRyeSB1bnRpbCB1c2VycyBzZWxlY3QgYSBkaWZmZXJlbnQgY291bnRyeS5cbiAgICogQGRlZmF1bHQgdXNcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGVmYXVsdENvdW50cnkodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gdGhpcy5fZGVmYXVsdENvdW50cnkpIHtcbiAgICAgIHRoaXMuX2RlZmF1bHRDb3VudHJ5ID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgdGhpcy5kZWZhdWx0Q291bnRyeURhdGEgPSB0aGlzLmNvdW50cmllcy5maW5kKFxuICAgICAgICAoY291bnRyeSkgPT4gY291bnRyeS5pc28yID09PSB0aGlzLl9kZWZhdWx0Q291bnRyeVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlZmF1bHRDb3VudHJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRDb3VudHJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZm9ybWF0IGZvciB2YWxpZGF0ZWQgcGhvbmUgbnVtYmVycy5cbiAgICogQGRlZmF1bHQgJ2RlZmF1bHQnXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcmV0dXJuRm9ybWF0OiBTa3lQaG9uZUZpZWxkTnVtYmVyUmV0dXJuRm9ybWF0ID0gJ2RlZmF1bHQnO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIFtJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIEFscGhhIDJdKGh0dHBzOi8vd3d3Lm5hdGlvbnNvbmxpbmUub3JnL29uZXdvcmxkL2NvdW50cnlfY29kZV9saXN0Lmh0bSlcbiAgICogY291bnRyeSBjb2RlcyBmb3IgdGhlIGNvdW50cmllcyB0aGF0IHVzZXJzIGNhbiBzZWxlY3QuIEJ5IGRlZmF1bHQsIGFsbCBjb3VudHJpZXMgYXJlIGF2YWlsYWJsZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdXBwb3J0ZWRDb3VudHJ5SVNPczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEVtaXRzIGEgYFNreVBob25lRmllbGRDb3VudHJ5YCBvYmplY3Qgd2hlbiB0aGUgc2VsZWN0ZWQgY291bnRyeSBpbiB0aGUgY291bnRyeSBzZWFyY2hcbiAgICogaW5wdXQgY2hhbmdlcy5cbiAgICovXG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWxlY3RlZENvdW50cnlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNreVBob25lRmllbGRDb3VudHJ5PigpO1xuXG4gIHB1YmxpYyBjb3VudHJpZXM6IFNreVBob25lRmllbGRDb3VudHJ5W107XG5cbiAgcHVibGljIGNvdW50cnlTZWxlY3REaXNhYmxlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjb3VudHJ5U2VhcmNoU2hvd24gPSBmYWxzZTtcblxuICBwdWJsaWMgcGhvbmVJbnB1dFNob3duID0gdHJ1ZTtcblxuICBwdWJsaWMgY291bnRyeVNlYXJjaEZvcm06IEZvcm1Hcm91cDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY291bnRyeSB0byB2YWxpZGF0ZSBhZ2FpbnN0LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RlZENvdW50cnkobmV3Q291bnRyeTogU2t5UGhvbmVGaWVsZENvdW50cnkpIHtcbiAgICBpZiAoXG4gICAgICBuZXdDb3VudHJ5ICYmXG4gICAgICAoIXRoaXMuX3NlbGVjdGVkQ291bnRyeSB8fCB0aGlzLl9zZWxlY3RlZENvdW50cnkuaXNvMiAhPT0gbmV3Q291bnRyeS5pc28yKVxuICAgICkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRDb3VudHJ5ID0gdGhpcy5jb3VudHJpZXMuZmluZChcbiAgICAgICAgKGNvdW50cnkpID0+IGNvdW50cnkuaXNvMiA9PT0gbmV3Q291bnRyeS5pc28yXG4gICAgICApO1xuXG4gICAgICBpZiAoIXRoaXMuX3NlbGVjdGVkQ291bnRyeS5leGFtcGxlTnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG51bWJlck9iaiA9IHRoaXMucGhvbmVVdGlscy5nZXRFeGFtcGxlTnVtYmVyRm9yVHlwZShcbiAgICAgICAgICBuZXdDb3VudHJ5LmlzbzIsXG4gICAgICAgICAgUGhvbmVOdW1iZXJUeXBlLkZJWEVEX0xJTkVcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb3VudHJ5LmV4YW1wbGVOdW1iZXIgPSB0aGlzLnBob25lVXRpbHMuZm9ybWF0KFxuICAgICAgICAgIG51bWJlck9iaixcbiAgICAgICAgICBQaG9uZU51bWJlckZvcm1hdC5OQVRJT05BTFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeUNoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkQ291bnRyeSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZENvdW50cnkoKTogU2t5UGhvbmVGaWVsZENvdW50cnkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENvdW50cnk7XG4gIH1cblxuICBAVmlld0NoaWxkKCdpbnB1dFRlbXBsYXRlUmVmJywge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJpdmF0ZSBpbnB1dFRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBWaWV3Q2hpbGQoJ2NvdW50cnlCdG5UZW1wbGF0ZVJlZicsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIHByaXZhdGUgY291bnRyeUJ0blRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBWaWV3Q2hpbGQoJ2J1dHRvbnNJbnNldFRlbXBsYXRlUmVmJywge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJpdmF0ZSBidXR0b25zSW5zZXRUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwcml2YXRlIGRlZmF1bHRDb3VudHJ5RGF0YTogU2t5UGhvbmVGaWVsZENvdW50cnk7XG5cbiAgcHJpdmF0ZSBwaG9uZUlucHV0QW5pbWF0aW9uVHJpZ2dlcmVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBwaG9uZVV0aWxzID0gUGhvbmVOdW1iZXJVdGlsLmdldEluc3RhbmNlKCk7XG5cbiAgcHJpdmF0ZSBsb25nZXN0RGlhbENvZGVMZW5ndGggPSAwO1xuXG4gIHByaXZhdGUgX2RlZmF1bHRDb3VudHJ5OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDb3VudHJ5OiBTa3lQaG9uZUZpZWxkQ291bnRyeTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGFkYXB0ZXJTZXJ2aWNlOiBTa3lQaG9uZUZpZWxkQWRhcHRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIHRoZW1lU3ZjPzogU2t5VGhlbWVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHB1YmxpYyBpbnB1dEJveEhvc3RTdmM/OiBTa3lJbnB1dEJveEhvc3RTZXJ2aWNlXG4gICkge1xuICAgIC8qKlxuICAgICAqIFRoZSBqc29uIGZ1bmN0aW9ucyBoZXJlIGVuc3VyZXMgdGhhdCB3ZSBnZXQgYSBjb3B5IG9mIHRoZSBhcnJheSBhbmQgbm90IHRoZSBnbG9iYWwgb3JpZ2luYWwuXG4gICAgICogVGhpcyBlbnN1cmVzIHRoYXQgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBjb21wb25lbnQgZG9uJ3Qgb3ZlcndyaXRlIHRoZSBvcmlnaW5hbCBkYXRhLlxuICAgICAqXG4gICAgICogV2UgbXVzdCB0eXBlIHRoZSB3aW5kb3cgb2JqZWN0IGFzIGFueSBoZXJlIGFzIHRoZSBpbnRsLXRlbC1pbnB1dCBsaWJyYXJ5IGFkZHMgaXRzIG9iamVjdFxuICAgICAqIHRvIHRoZSBtYWluIHdpbmRvdyBvYmplY3QuXG4gICAgICovXG4gICAgdGhpcy5jb3VudHJpZXMgPSBKU09OLnBhcnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoKHdpbmRvdyBhcyBhbnkpLmludGxUZWxJbnB1dEdsb2JhbHMuZ2V0Q291bnRyeURhdGEoKSlcbiAgICApO1xuICAgIGZvciAobGV0IGNvdW50cnkgb2YgdGhpcy5jb3VudHJpZXMpIHtcbiAgICAgIGNvdW50cnkuZGlhbENvZGUgPSAnKycgKyBjb3VudHJ5LmRpYWxDb2RlO1xuXG4gICAgICBpZiAoY291bnRyeS5kaWFsQ29kZS5sZW5ndGggPiB0aGlzLmxvbmdlc3REaWFsQ29kZUxlbmd0aCkge1xuICAgICAgICB0aGlzLmxvbmdlc3REaWFsQ29kZUxlbmd0aCA9IGNvdW50cnkuZGlhbENvZGUubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY291bnRyeVNlYXJjaEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGNvdW50cnlTZWFyY2g6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFRoZSB0aW1lb3V0IGhlcmUgaXMgbmVlZGVkIHRvIGF2b2lkIGEgY2hhbmdlIGJlZm9yZSBjaGVja2VkIGVycm9yIHdoZW4gYSB1c2VyIHNwZWNpZmllc1xuICAgIC8vIGEgc2VsZWN0ZWQgY291bnRyeSBvbiBpbnRpYWxpemF0aW9uIG9mIHRoZSBjb21wb25lbnQuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pbnB1dEJveEhvc3RTdmMpIHtcbiAgICAgICAgdGhpcy5pbnB1dEJveEhvc3RTdmMucG9wdWxhdGUoe1xuICAgICAgICAgIGlucHV0VGVtcGxhdGU6IHRoaXMuaW5wdXRUZW1wbGF0ZVJlZixcbiAgICAgICAgICBidXR0b25zSW5zZXRUZW1wbGF0ZTogdGhpcy5idXR0b25zSW5zZXRUZW1wbGF0ZVJlZixcbiAgICAgICAgICBidXR0b25zTGVmdFRlbXBsYXRlOiB0aGlzLmNvdW50cnlCdG5UZW1wbGF0ZVJlZixcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5kZWZhdWx0Q291bnRyeSkge1xuICAgICAgICB0aGlzLmRlZmF1bHRDb3VudHJ5ID0gJ3VzJztcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ291bnRyeSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuZGVmYXVsdENvdW50cnlEYXRhO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9LCAwKTtcblxuICAgIHRoaXMuY291bnRyeVNlYXJjaEZvcm1cbiAgICAgIC5nZXQoJ2NvdW50cnlTZWFyY2gnKVxuICAgICAgLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKG5ld1ZhbHVlOiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5KSA9PiB7XG4gICAgICAgIGlmIChuZXdWYWx1ZSAmJiBuZXdWYWx1ZS5pc28yICE9PSB0aGlzLnNlbGVjdGVkQ291bnRyeS5pc28yKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZENvdW50cnlDaGFuZ2UuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb3VudHJ5IHRvIHZhbGlkYXRlIGFnYWluc3QgYmFzZWQgb24gdGhlIGNvdW50eSdzIGlzbzIgY29kZS5cbiAgICogQHBhcmFtIGNvdW50cnlDb2RlIFRoZSBJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uJ3MgdHdvLWxldHRlciBjb2RlXG4gICAqIGZvciB0aGUgZGVmYXVsdCBjb3VudHJ5LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBvbkNvdW50cnlTZWxlY3RlZChuZXdDb3VudHJ5OiBTa3lDb3VudHJ5RmllbGRDb3VudHJ5KTogdm9pZCB7XG4gICAgaWYgKG5ld0NvdW50cnkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gdGhpcy5jb3VudHJpZXMuZmluZChcbiAgICAgICAgKGNvdW50cnlJbmZvKSA9PiBjb3VudHJ5SW5mby5pc28yID09PSBuZXdDb3VudHJ5LmlzbzJcbiAgICAgICk7XG4gICAgICB0aGlzLnRvZ2dsZUNvdW50cnlTZWFyY2goZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVDb3VudHJ5U2VhcmNoKHNob3dTZWFyY2g6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnBob25lSW5wdXRBbmltYXRpb25UcmlnZ2VyZWQgPSB0cnVlO1xuXG4gICAgaWYgKHNob3dTZWFyY2gpIHtcbiAgICAgIHRoaXMucGhvbmVJbnB1dFNob3duID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY291bnRyeVNlYXJjaFNob3duID0gZmFsc2U7XG5cbiAgICAgIHRoaXMuY291bnRyeVNlYXJjaEZvcm0uZ2V0KCdjb3VudHJ5U2VhcmNoJykuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGNvdW50cnlTZWFyY2hBbmltYXRpb25FbmQoZTogQW5pbWF0aW9uRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuY291bnRyeVNlYXJjaFNob3duKSB7XG4gICAgICB0aGlzLnBob25lSW5wdXRTaG93biA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRhcHRlclNlcnZpY2UuZm9jdXNDb3VudHJ5U2VhcmNoRWxlbWVudChlLmVsZW1lbnQpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgcGhvbmVJbnB1dEFuaW1hdGlvbkVuZChlOiBBbmltYXRpb25FdmVudCkge1xuICAgIGlmICghdGhpcy5waG9uZUlucHV0U2hvd24pIHtcbiAgICAgIHRoaXMuY291bnRyeVNlYXJjaFNob3duID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucGhvbmVJbnB1dEFuaW1hdGlvblRyaWdnZXJlZCkge1xuICAgICAgICB0aGlzLmFkYXB0ZXJTZXJ2aWNlLmZvY3VzUGhvbmVJbnB1dChlLmVsZW1lbnQpO1xuICAgICAgICB0aGlzLnBob25lSW5wdXRBbmltYXRpb25UcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIHNldENvdW50cnlCeURpYWxDb2RlKHBob25lTnVtYmVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXBob25lTnVtYmVyIHx8ICFwaG9uZU51bWJlci5zdGFydHNXaXRoKCcrJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgbmV3Q291bnRyeTogU2t5UGhvbmVGaWVsZENvdW50cnk7XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRoaXMubG9uZ2VzdERpYWxDb2RlTGVuZ3RoICsgMTsgaSsrKSB7XG4gICAgICBsZXQgZGlhbENvZGUgPSBwaG9uZU51bWJlci5zdWJzdHJpbmcoMCwgaSk7XG5cbiAgICAgIGxldCBmb3VuZENvdW50cnkgPSB0aGlzLmNvdW50cmllcy5maW5kKFxuICAgICAgICAoY291bnRyeSkgPT4gY291bnRyeS5kaWFsQ29kZSA9PT0gZGlhbENvZGUgJiYgY291bnRyeS5wcmlvcml0eSA9PT0gMFxuICAgICAgKTtcblxuICAgICAgaWYgKGZvdW5kQ291bnRyeSkge1xuICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgY291bnRyeSB0aGF0IHdhcyBmb3VuZCBpcyBvbmUgb2YgdGhlIHN1cHBvcnRlZCBjb3VudHJpZXNcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuc3VwcG9ydGVkQ291bnRyeUlTT3MgJiZcbiAgICAgICAgICB0aGlzLnN1cHBvcnRlZENvdW50cnlJU09zLmZpbmRJbmRleChcbiAgICAgICAgICAgIChpc29Db2RlKSA9PlxuICAgICAgICAgICAgICBpc29Db2RlLnRvVXBwZXJDYXNlKCkgPT09IGZvdW5kQ291bnRyeS5pc28yLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICApIDwgMFxuICAgICAgICApIHtcbiAgICAgICAgICBmb3VuZENvdW50cnkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm91bmRDb3VudHJ5ICE9PSB0aGlzLnNlbGVjdGVkQ291bnRyeSkge1xuICAgICAgICAgIG5ld0NvdW50cnkgPSBmb3VuZENvdW50cnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmV3Q291bnRyeSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSBuZXdDb3VudHJ5O1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbnB1dEJveEhvc3RTdmNcIj5cbiAgPGRpdiBjbGFzcz1cInNreS1pbnB1dC1ncm91cCBza3ktcGhvbmUtZmllbGRcIiBbQGJsb2NrQW5pbWF0aW9uT25Mb2FkXT5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY291bnRyeUJ0blRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0VGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc0luc2V0VGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNjb3VudHJ5QnRuVGVtcGxhdGVSZWY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInNreS1pbnB1dC1ncm91cC1idG4gc2t5LXBob25lLWZpZWxkLWNvdW50cnktYnRuXCJcbiAgICBbYXR0ci5kYXRhLXNreS10ZXN0LWlzbzJdPVwic2VsZWN0ZWRDb3VudHJ5Py5pc28yXCJcbiAgICBbYXR0ci5kYXRhLXNreS10ZXN0LW5hbWVdPVwic2VsZWN0ZWRDb3VudHJ5Py5uYW1lXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICBjbGFzcz1cInNreS1idG4gc2t5LWJ0bi1kZWZhdWx0XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIudGl0bGVdPVwiXG4gICAgICAgICgnc2t5dXhfcGhvbmVfZmllbGRfY291bnRyeV9zZWxlY3RfbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzKSArXG4gICAgICAgICcgJyArXG4gICAgICAgICgnc2t5dXhfcGhvbmVfZmllbGRfY291bnRyeV9zZWxlY3RlZF9sYWJlbCdcbiAgICAgICAgICB8IHNreUxpYlJlc291cmNlczogc2VsZWN0ZWRDb3VudHJ5Py5uYW1lKVxuICAgICAgXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICgnc2t5dXhfcGhvbmVfZmllbGRfY291bnRyeV9zZWxlY3RfbGFiZWwnIHwgc2t5TGliUmVzb3VyY2VzKSArXG4gICAgICAgICcgJyArXG4gICAgICAgICgnc2t5dXhfcGhvbmVfZmllbGRfY291bnRyeV9zZWxlY3RlZF9sYWJlbCdcbiAgICAgICAgICB8IHNreUxpYlJlc291cmNlczogc2VsZWN0ZWRDb3VudHJ5Py5uYW1lKVxuICAgICAgXCJcbiAgICAgIFtkaXNhYmxlZF09XCJjb3VudHJ5U2VsZWN0RGlzYWJsZWRcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvdW50cnlTZWFyY2godHJ1ZSlcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJza3ktcGhvbmUtZmllbGQtZmxhZyBpdGktZmxhZ1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkQ291bnRyeT8uaXNvMlwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbnB1dFRlbXBsYXRlUmVmPlxuICA8c3BhblxuICAgICpuZ0lmPVwicGhvbmVJbnB1dFNob3duXCJcbiAgICBjbGFzcz1cInNreS1waG9uZS1maWVsZC1jb250YWluZXJcIlxuICAgIFtALmRpc2FibGVkXT1cIlxuICAgICAgaW5wdXRCb3hIb3N0U3ZjICYmXG4gICAgICAodGhlbWVTdmM/LnNldHRpbmdzQ2hhbmdlIHwgYXN5bmMpPy5jdXJyZW50U2V0dGluZ3M/LnRoZW1lPy5uYW1lID09PVxuICAgICAgICAnbW9kZXJuJ1xuICAgIFwiXG4gICAgW0BwaG9uZUlucHV0QW5pbWF0aW9uXT1cInBob25lSW5wdXRTaG93biA/ICdvcGVuJyA6ICdjbG9zZWQnXCJcbiAgICAoQHBob25lSW5wdXRBbmltYXRpb24uZG9uZSk9XCJwaG9uZUlucHV0QW5pbWF0aW9uRW5kKCRldmVudClcIlxuICA+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3NwYW4+XG4gIDxzcGFuXG4gICAgKm5nSWY9XCJjb3VudHJ5U2VhcmNoU2hvd25cIlxuICAgIGNsYXNzPVwic2t5LXBob25lLWZpZWxkLWNvbnRhaW5lclwiXG4gICAgW0AuZGlzYWJsZWRdPVwiXG4gICAgICBpbnB1dEJveEhvc3RTdmMgJiZcbiAgICAgICh0aGVtZVN2Yz8uc2V0dGluZ3NDaGFuZ2UgfCBhc3luYyk/LmN1cnJlbnRTZXR0aW5ncz8udGhlbWU/Lm5hbWUgPT09XG4gICAgICAgICdtb2Rlcm4nXG4gICAgXCJcbiAgICBbQGNvdW50cnlTZWFyY2hBbmltYXRpb25dPVwiY291bnRyeVNlYXJjaFNob3duID8gJ29wZW4nIDogJ2Nsb3NlZCdcIlxuICAgIChAY291bnRyeVNlYXJjaEFuaW1hdGlvbi5kb25lKT1cImNvdW50cnlTZWFyY2hBbmltYXRpb25FbmQoJGV2ZW50KVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwic2t5LXBob25lLWZpZWxkLWNvdW50cnktc2VhcmNoXCIgW2Zvcm1Hcm91cF09XCJjb3VudHJ5U2VhcmNoRm9ybVwiPlxuICAgICAgPHNreS1jb3VudHJ5LWZpZWxkXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvdW50cnlTZWFyY2hcIlxuICAgICAgICBbZGVmYXVsdENvdW50cnldPVwiZGVmYXVsdENvdW50cnlcIlxuICAgICAgICBbaGlkZVNlbGVjdGVkQ291bnRyeUZsYWddPVwidHJ1ZVwiXG4gICAgICAgIFtpbmNsdWRlUGhvbmVJbmZvXT1cInRydWVcIlxuICAgICAgICBbc3VwcG9ydGVkQ291bnRyeUlTT3NdPVwic3VwcG9ydGVkQ291bnRyeUlTT3NcIlxuICAgICAgICAoc2VsZWN0ZWRDb3VudHJ5Q2hhbmdlKT1cIm9uQ291bnRyeVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgPlxuICAgICAgPC9za3ktY291bnRyeS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zSW5zZXRUZW1wbGF0ZVJlZj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiY291bnRyeVNlYXJjaFNob3duXCJcbiAgICBjbGFzcz1cInNreS1pbnB1dC1ncm91cC1idG4gc2t5LWlucHV0LWJveC1idG4taW5zZXQgc2t5LXNlYXJjaC1pdGVtLWRpc21pc3NcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJza3ktYnRuIHNreS1waG9uZS1maWVsZC1zZWFyY2gtYnRuLWRpc21pc3NcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbYXR0ci50aXRsZV09XCJcbiAgICAgICAgJ3NreXV4X3Bob25lX2ZpZWxkX2NvdW50cnlfc2VhcmNoX2Rpc21pc3MnIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICBcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnc2t5LWJ0bi1kZWZhdWx0JzpcbiAgICAgICAgICAodGhlbWVTdmM/LnNldHRpbmdzQ2hhbmdlIHwgYXN5bmMpPy5jdXJyZW50U2V0dGluZ3M/LnRoZW1lPy5uYW1lID09PVxuICAgICAgICAgICdtb2Rlcm4nXG4gICAgICB9XCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVDb3VudHJ5U2VhcmNoKGZhbHNlKVwiXG4gICAgPlxuICAgICAgPHNreS1pY29uICpza3lUaGVtZUlmPVwiJ2RlZmF1bHQnXCIgaWNvbj1cImNoZXZyb24tY2lyY2xlLWxlZnRcIiBzaXplPVwibGdcIj5cbiAgICAgIDwvc2t5LWljb24+XG4gICAgICA8c2t5LWljb25cbiAgICAgICAgKnNreVRoZW1lSWY9XCInbW9kZXJuJ1wiXG4gICAgICAgIGljb249XCJkb3VibGUtY2hldnJvbi1sZWZ0XCJcbiAgICAgICAgaWNvblR5cGU9XCJza3l1eFwiXG4gICAgICAgIHNpemU9XCIyeFwiXG4gICAgICA+XG4gICAgICA8L3NreS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIiAjY291bnRyeVNlYXJjaFJlc3VsdFRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwic2t5LXBob25lLWZpZWxkLXNlYXJjaC1yZXN1bHRcIj5cbiAgICA8aVxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIFtjbGFzc05hbWVdPVwiJ3NreS1waG9uZS1maWVsZC1mbGFnIGl0aS1mbGFnICcgKyBpdGVtLmlzbzJcIlxuICAgID48L2k+XG4gICAge3sgaXRlbS5uYW1lIH19XG4gICAgPHNwYW4gY2xhc3M9XCJza3ktZGVlbXBoYXNpemVkXCI+e3sgaXRlbS5kaWFsQ29kZSB9fTwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
340
+ //# sourceMappingURL=phone-field.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone-field.component.js","sourceRoot":"","sources":["../../../../../../../../libs/components/phone-field/src/lib/modules/phone-field/phone-field.component.ts","../../../../../../../../libs/components/phone-field/src/lib/modules/phone-field/phone-field.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n animate,\n AnimationEvent,\n style,\n transition,\n trigger,\n} from '@angular/animations';\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SkipSelf,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\n\nimport { SkyInputBoxHostService } from '@skyux/forms';\n\nimport { SkyCountryFieldCountry } from '@skyux/lookup';\n\nimport { SkyThemeService } from '@skyux/theme';\n\nimport {\n PhoneNumberFormat,\n PhoneNumberType,\n PhoneNumberUtil,\n} from 'google-libphonenumber';\n\nimport 'intl-tel-input';\n\nimport { SkyPhoneFieldAdapterService } from './phone-field-adapter.service';\n\nimport { SkyPhoneFieldCountry } from './types/country';\n\nimport { SkyPhoneFieldNumberReturnFormat } from './types/number-return-format';\n\n// NOTE: The no-op animation is here in order to block the input's \"fade in\" animation\n// from firing on initial load. For more information on this technique you can see\n// https://www.bennadel.com/blog/3417-using-no-op-transitions-to-prevent-animation-during-the-initial-render-of-ngfor-in-angular-5-2-6.htm\n@Component({\n selector: 'sky-phone-field',\n templateUrl: './phone-field.component.html',\n styleUrls: ['./phone-field.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n SkyPhoneFieldAdapterService,\n // Prevents the embedded country field component from changing its behavior based on\n // being inside an input box. The phone field itself will handle the required changes\n // for input box.\n {\n provide: SkyInputBoxHostService,\n useValue: undefined,\n },\n ],\n animations: [\n trigger('blockAnimationOnLoad', [transition(':enter', [])]),\n trigger('countrySearchAnimation', [\n transition(':enter', [\n style({\n opacity: 0,\n width: 0,\n }),\n animate(\n '200ms ease-in',\n style({\n opacity: 1,\n width: '*',\n })\n ),\n ]),\n transition(':leave', [\n animate(\n '200ms ease-in',\n style({\n opacity: 0,\n width: 0,\n })\n ),\n ]),\n ]),\n trigger('phoneInputAnimation', [\n transition(':enter', [\n style({\n opacity: 0,\n }),\n animate(\n '150ms ease-in',\n style({\n opacity: 1,\n })\n ),\n ]),\n transition(':leave', [\n animate(\n '150ms ease-in',\n style({\n opacity: 0,\n })\n ),\n ]),\n ]),\n ],\n})\nexport class SkyPhoneFieldComponent implements OnDestroy, OnInit {\n /**\n * Indicates whether or not phone number extensions are allowed.\n * @default true\n */\n @Input()\n public allowExtensions: boolean = true;\n\n /**\n * Specifies the\n * [International Organization for Standardization Alpha 2](https://www.nationsonline.org/oneworld/country_code_list.htm)\n * country code for the default country. The country selector button displays a flag\n * icon for this default country until users select a different country.\n * @default \"us\"\n */\n @Input()\n public set defaultCountry(value: string) {\n if (value && value !== this._defaultCountry) {\n this._defaultCountry = value.toLowerCase();\n\n this.defaultCountryData = this.countries.find(\n (country) => country.iso2 === this._defaultCountry\n );\n }\n }\n\n public get defaultCountry(): string {\n return this._defaultCountry;\n }\n\n /**\n * Specifies the format for validated phone numbers.\n * Options include: `\"default\"`, `\"international\"`, and `\"national\"`.\n * @default \"default\"\n */\n @Input()\n public returnFormat: SkyPhoneFieldNumberReturnFormat = 'default';\n\n /**\n * Specifies the [International Organization for Standardization Alpha 2](https://www.nationsonline.org/oneworld/country_code_list.htm)\n * country codes for the countries that users can select. By default, all countries are available.\n */\n @Input()\n public supportedCountryISOs: string[];\n\n /**\n * Emits a `SkyPhoneFieldCountry` object when the selected country in the country search\n * input changes.\n */\n\n @Output()\n public selectedCountryChange = new EventEmitter<SkyPhoneFieldCountry>();\n\n public countries: SkyPhoneFieldCountry[];\n\n public countrySelectDisabled = false;\n\n public countrySearchShown = false;\n\n public phoneInputShown = true;\n\n public countrySearchForm: FormGroup;\n\n /**\n * Specifies the currently selected country to validate against.\n */\n @Input()\n public set selectedCountry(newCountry: SkyPhoneFieldCountry) {\n if (\n newCountry &&\n (!this._selectedCountry || this._selectedCountry.iso2 !== newCountry.iso2)\n ) {\n this._selectedCountry = this.countries.find(\n (country) => country.iso2 === newCountry.iso2\n );\n\n if (!this._selectedCountry.exampleNumber) {\n const numberObj = this.phoneUtils.getExampleNumberForType(\n newCountry.iso2,\n PhoneNumberType.FIXED_LINE\n );\n this._selectedCountry.exampleNumber = this.phoneUtils.format(\n numberObj,\n PhoneNumberFormat.NATIONAL\n );\n }\n\n this.selectedCountryChange.emit(this._selectedCountry);\n }\n }\n\n public get selectedCountry(): SkyPhoneFieldCountry {\n return this._selectedCountry;\n }\n\n @ViewChild('inputTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private inputTemplateRef: TemplateRef<any>;\n\n @ViewChild('countryBtnTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private countryBtnTemplateRef: TemplateRef<any>;\n\n @ViewChild('buttonsInsetTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private buttonsInsetTemplateRef: TemplateRef<any>;\n\n private defaultCountryData: SkyPhoneFieldCountry;\n\n private phoneInputAnimationTriggered = false;\n\n private phoneUtils = PhoneNumberUtil.getInstance();\n\n private longestDialCodeLength = 0;\n\n private _defaultCountry: string;\n\n private _selectedCountry: SkyPhoneFieldCountry;\n\n constructor(\n private formBuilder: FormBuilder,\n private adapterService: SkyPhoneFieldAdapterService,\n private changeDetector: ChangeDetectorRef,\n @Optional() public themeSvc?: SkyThemeService,\n @Optional() @SkipSelf() public inputBoxHostSvc?: SkyInputBoxHostService\n ) {\n /**\n * The json functions here ensures that we get a copy of the array and not the global original.\n * This ensures that multiple instances of the component don't overwrite the original data.\n *\n * We must type the window object as any here as the intl-tel-input library adds its object\n * to the main window object.\n */\n this.countries = JSON.parse(\n JSON.stringify((window as any).intlTelInputGlobals.getCountryData())\n );\n for (let country of this.countries) {\n country.dialCode = '+' + country.dialCode;\n\n if (country.dialCode.length > this.longestDialCodeLength) {\n this.longestDialCodeLength = country.dialCode.length;\n }\n }\n\n this.countrySearchForm = this.formBuilder.group({\n countrySearch: new FormControl(),\n });\n }\n\n public ngOnInit(): void {\n // The timeout here is needed to avoid a change before checked error when a user specifies\n // a selected country on initialization of the component.\n setTimeout(() => {\n if (this.inputBoxHostSvc) {\n this.inputBoxHostSvc.populate({\n inputTemplate: this.inputTemplateRef,\n buttonsInsetTemplate: this.buttonsInsetTemplateRef,\n buttonsLeftTemplate: this.countryBtnTemplateRef,\n });\n }\n\n if (!this.defaultCountry) {\n this.defaultCountry = 'us';\n }\n\n if (!this.selectedCountry) {\n this.selectedCountry = this.defaultCountryData;\n }\n this.changeDetector.markForCheck();\n }, 0);\n\n this.countrySearchForm\n .get('countrySearch')\n .valueChanges.subscribe((newValue: SkyCountryFieldCountry) => {\n if (newValue && newValue.iso2 !== this.selectedCountry.iso2) {\n this.selectedCountry = newValue;\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.selectedCountryChange.complete();\n }\n\n /**\n * Sets the country to validate against based on the county's iso2 code.\n * @param countryCode The International Organization for Standardization's two-letter code\n * for the default country.\n * @internal\n */\n public onCountrySelected(newCountry: SkyCountryFieldCountry): void {\n if (newCountry) {\n this.selectedCountry = this.countries.find(\n (countryInfo) => countryInfo.iso2 === newCountry.iso2\n );\n this.toggleCountrySearch(false);\n }\n }\n\n public toggleCountrySearch(showSearch: boolean): void {\n this.phoneInputAnimationTriggered = true;\n\n if (showSearch) {\n this.phoneInputShown = false;\n } else {\n this.countrySearchShown = false;\n\n this.countrySearchForm.get('countrySearch').setValue(undefined);\n }\n\n this.changeDetector.markForCheck();\n }\n\n public countrySearchAnimationEnd(e: AnimationEvent) {\n if (!this.countrySearchShown) {\n this.phoneInputShown = true;\n } else {\n this.adapterService.focusCountrySearchElement(e.element);\n }\n\n this.changeDetector.markForCheck();\n }\n\n public phoneInputAnimationEnd(e: AnimationEvent) {\n if (!this.phoneInputShown) {\n this.countrySearchShown = true;\n } else {\n if (this.phoneInputAnimationTriggered) {\n this.adapterService.focusPhoneInput(e.element);\n this.phoneInputAnimationTriggered = false;\n }\n }\n\n this.changeDetector.markForCheck();\n }\n\n public setCountryByDialCode(phoneNumber: string): boolean {\n if (!phoneNumber || !phoneNumber.startsWith('+')) {\n return false;\n }\n\n let newCountry: SkyPhoneFieldCountry;\n\n for (let i = 1; i < this.longestDialCodeLength + 1; i++) {\n let dialCode = phoneNumber.substring(0, i);\n\n let foundCountry = this.countries.find(\n (country) => country.dialCode === dialCode && country.priority === 0\n );\n\n if (foundCountry) {\n // Ensure that the country that was found is one of the supported countries\n if (\n this.supportedCountryISOs &&\n this.supportedCountryISOs.findIndex(\n (isoCode) =>\n isoCode.toUpperCase() === foundCountry.iso2.toUpperCase()\n ) < 0\n ) {\n foundCountry = undefined;\n }\n\n if (foundCountry !== this.selectedCountry) {\n newCountry = foundCountry;\n }\n }\n }\n\n if (newCountry) {\n this.selectedCountry = newCountry;\n this.changeDetector.markForCheck();\n return true;\n }\n\n return false;\n }\n}\n","<ng-container *ngIf=\"!inputBoxHostSvc\">\n <div class=\"sky-input-group sky-phone-field\" [@blockAnimationOnLoad]>\n <ng-container *ngTemplateOutlet=\"countryBtnTemplateRef\"></ng-container>\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\"></ng-container>\n <ng-container *ngTemplateOutlet=\"buttonsInsetTemplateRef\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #countryBtnTemplateRef>\n <div\n class=\"sky-input-group-btn sky-phone-field-country-btn\"\n [attr.data-sky-test-iso2]=\"selectedCountry?.iso2\"\n [attr.data-sky-test-name]=\"selectedCountry?.name\"\n >\n <button\n aria-live=\"polite\"\n class=\"sky-btn sky-btn-default\"\n type=\"button\"\n [attr.title]=\"\n ('skyux_phone_field_country_select_label' | skyLibResources) +\n ' ' +\n ('skyux_phone_field_country_selected_label'\n | skyLibResources: selectedCountry?.name)\n \"\n [attr.aria-label]=\"\n ('skyux_phone_field_country_select_label' | skyLibResources) +\n ' ' +\n ('skyux_phone_field_country_selected_label'\n | skyLibResources: selectedCountry?.name)\n \"\n [disabled]=\"countrySelectDisabled\"\n (click)=\"toggleCountrySearch(true)\"\n >\n <div\n class=\"sky-phone-field-flag iti-flag\"\n [ngClass]=\"selectedCountry?.iso2\"\n ></div>\n </button>\n </div>\n</ng-template>\n\n<ng-template #inputTemplateRef>\n <span\n *ngIf=\"phoneInputShown\"\n class=\"sky-phone-field-container\"\n [@.disabled]=\"\n inputBoxHostSvc &&\n (themeSvc?.settingsChange | async)?.currentSettings?.theme?.name ===\n 'modern'\n \"\n [@phoneInputAnimation]=\"phoneInputShown ? 'open' : 'closed'\"\n (@phoneInputAnimation.done)=\"phoneInputAnimationEnd($event)\"\n >\n <ng-content></ng-content>\n </span>\n <span\n *ngIf=\"countrySearchShown\"\n class=\"sky-phone-field-container\"\n [@.disabled]=\"\n inputBoxHostSvc &&\n (themeSvc?.settingsChange | async)?.currentSettings?.theme?.name ===\n 'modern'\n \"\n [@countrySearchAnimation]=\"countrySearchShown ? 'open' : 'closed'\"\n (@countrySearchAnimation.done)=\"countrySearchAnimationEnd($event)\"\n >\n <div class=\"sky-phone-field-country-search\" [formGroup]=\"countrySearchForm\">\n <sky-country-field\n formControlName=\"countrySearch\"\n [defaultCountry]=\"defaultCountry\"\n [hideSelectedCountryFlag]=\"true\"\n [includePhoneInfo]=\"true\"\n [supportedCountryISOs]=\"supportedCountryISOs\"\n (selectedCountryChange)=\"onCountrySelected($event)\"\n >\n </sky-country-field>\n </div>\n </span>\n</ng-template>\n\n<ng-template #buttonsInsetTemplateRef>\n <div\n *ngIf=\"countrySearchShown\"\n class=\"sky-input-group-btn sky-input-box-btn-inset sky-search-item-dismiss\"\n >\n <button\n class=\"sky-btn sky-phone-field-search-btn-dismiss\"\n type=\"button\"\n [attr.title]=\"\n 'skyux_phone_field_country_search_dismiss' | skyLibResources\n \"\n [ngClass]=\"{\n 'sky-btn-default':\n (themeSvc?.settingsChange | async)?.currentSettings?.theme?.name ===\n 'modern'\n }\"\n (click)=\"toggleCountrySearch(false)\"\n >\n <sky-icon *skyThemeIf=\"'default'\" icon=\"chevron-circle-left\" size=\"lg\">\n </sky-icon>\n <sky-icon\n *skyThemeIf=\"'modern'\"\n icon=\"double-chevron-left\"\n iconType=\"skyux\"\n size=\"2x\"\n >\n </sky-icon>\n </button>\n </div>\n</ng-template>\n\n<ng-template let-item=\"item\" #countrySearchResultTemplate>\n <div class=\"sky-phone-field-search-result\">\n <i\n aria-hidden=\"true\"\n [className]=\"'sky-phone-field-flag iti-flag ' + item.iso2\"\n ></i>\n {{ item.name }}\n <span class=\"sky-deemphasized\">{{ item.dialCode }}</span>\n </div>\n</ng-template>\n"]}
@@ -0,0 +1,50 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { SkyIconModule } from '@skyux/indicators';
5
+ import { SkyI18nModule } from '@skyux/i18n';
6
+ import { SkyCountryFieldModule } from '@skyux/lookup';
7
+ import { SkyThemeModule } from '@skyux/theme';
8
+ import { SkyPhoneFieldResourcesModule } from '../shared/sky-phone-field-resources.module';
9
+ import { SkyPhoneFieldComponent } from './phone-field.component';
10
+ import { SkyPhoneFieldInputDirective } from './phone-field-input.directive';
11
+ import * as i0 from "@angular/core";
12
+ export class SkyPhoneFieldModule {
13
+ }
14
+ SkyPhoneFieldModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyPhoneFieldModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
+ SkyPhoneFieldModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyPhoneFieldModule, declarations: [SkyPhoneFieldComponent, SkyPhoneFieldInputDirective], imports: [CommonModule,
16
+ FormsModule,
17
+ ReactiveFormsModule,
18
+ SkyCountryFieldModule,
19
+ SkyI18nModule,
20
+ SkyIconModule,
21
+ SkyPhoneFieldResourcesModule,
22
+ SkyThemeModule], exports: [SkyPhoneFieldComponent, SkyPhoneFieldInputDirective] });
23
+ SkyPhoneFieldModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyPhoneFieldModule, imports: [[
24
+ CommonModule,
25
+ FormsModule,
26
+ ReactiveFormsModule,
27
+ SkyCountryFieldModule,
28
+ SkyI18nModule,
29
+ SkyIconModule,
30
+ SkyPhoneFieldResourcesModule,
31
+ SkyThemeModule,
32
+ ]] });
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyPhoneFieldModule, decorators: [{
34
+ type: NgModule,
35
+ args: [{
36
+ declarations: [SkyPhoneFieldComponent, SkyPhoneFieldInputDirective],
37
+ imports: [
38
+ CommonModule,
39
+ FormsModule,
40
+ ReactiveFormsModule,
41
+ SkyCountryFieldModule,
42
+ SkyI18nModule,
43
+ SkyIconModule,
44
+ SkyPhoneFieldResourcesModule,
45
+ SkyThemeModule,
46
+ ],
47
+ exports: [SkyPhoneFieldComponent, SkyPhoneFieldInputDirective],
48
+ }]
49
+ }] });
50
+ //# sourceMappingURL=phone-field.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone-field.module.js","sourceRoot":"","sources":["../../../../../../../../libs/components/phone-field/src/lib/modules/phone-field/phone-field.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAE1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;;AAgB5E,MAAM,OAAO,mBAAmB;;iHAAnB,mBAAmB;kHAAnB,mBAAmB,iBAbf,sBAAsB,EAAE,2BAA2B,aAEhE,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,qBAAqB;QACrB,aAAa;QACb,aAAa;QACb,4BAA4B;QAC5B,cAAc,aAEN,sBAAsB,EAAE,2BAA2B;kHAElD,mBAAmB,YAZrB;YACP,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,qBAAqB;YACrB,aAAa;YACb,aAAa;YACb,4BAA4B;YAC5B,cAAc;SACf;4FAGU,mBAAmB;kBAd/B,QAAQ;mBAAC;oBACR,YAAY,EAAE,CAAC,sBAAsB,EAAE,2BAA2B,CAAC;oBACnE,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,qBAAqB;wBACrB,aAAa;wBACb,aAAa;wBACb,4BAA4B;wBAC5B,cAAc;qBACf;oBACD,OAAO,EAAE,CAAC,sBAAsB,EAAE,2BAA2B,CAAC;iBAC/D","sourcesContent":["import { NgModule } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\n\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { SkyIconModule } from '@skyux/indicators';\n\nimport { SkyI18nModule } from '@skyux/i18n';\n\nimport { SkyCountryFieldModule } from '@skyux/lookup';\n\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyPhoneFieldResourcesModule } from '../shared/sky-phone-field-resources.module';\n\nimport { SkyPhoneFieldComponent } from './phone-field.component';\n\nimport { SkyPhoneFieldInputDirective } from './phone-field-input.directive';\n\n@NgModule({\n declarations: [SkyPhoneFieldComponent, SkyPhoneFieldInputDirective],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SkyCountryFieldModule,\n SkyI18nModule,\n SkyIconModule,\n SkyPhoneFieldResourcesModule,\n SkyThemeModule,\n ],\n exports: [SkyPhoneFieldComponent, SkyPhoneFieldInputDirective],\n})\nexport class SkyPhoneFieldModule {}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=country.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"country.js","sourceRoot":"","sources":["../../../../../../../../../libs/components/phone-field/src/lib/modules/phone-field/types/country.ts"],"names":[],"mappings":"","sourcesContent":["export interface SkyPhoneFieldCountry {\n /**\n * Specifies the country's\n * [International Organization for Standardization Alpha 2](https://www.nationsonline.org/oneworld/country_code_list.htm)\n * country code.\n * @required\n */\n iso2: string;\n /**\n * Specifies the country's international dial code.\n */\n dialCode?: string;\n /**\n * Specifies a placeholder value to demonstrate the country's number format. This\n * value is `undefined` until a country is selected to validate against.\n */\n exampleNumber?: string;\n /**\n * Specifies the name of the country.\n */\n name?: string;\n // NOTE: We intentionally don't document these properties as they are internal use properties\n /**\n * @internal\n */\n priority?: number;\n /**\n * @internal\n */\n areaCodes?: string[];\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=number-return-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-return-format.js","sourceRoot":"","sources":["../../../../../../../../../libs/components/phone-field/src/lib/modules/phone-field/types/number-return-format.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Represents the format for validated phone numbers. `default` returns the national format for the\n * default country, `national` returns the national format for all countries, and `international`\n * returns the international format for all countries.\n */\nexport type SkyPhoneFieldNumberReturnFormat =\n | 'default'\n | 'international'\n | 'national';\n"]}