@skyux/lookup 5.6.0 → 5.7.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 (27) hide show
  1. package/bundles/skyux-lookup.umd.js +30 -44
  2. package/documentation.json +527 -645
  3. package/esm2015/lib/modules/autocomplete/autocomplete-adapter.service.js +0 -1
  4. package/esm2015/lib/modules/autocomplete/autocomplete-adapter.service.js.map +1 -1
  5. package/esm2015/lib/modules/autocomplete/autocomplete-input.directive.js +4 -3
  6. package/esm2015/lib/modules/autocomplete/autocomplete-input.directive.js.map +1 -1
  7. package/esm2015/lib/modules/autocomplete/autocomplete.component.js +11 -3
  8. package/esm2015/lib/modules/autocomplete/autocomplete.component.js.map +1 -1
  9. package/esm2015/lib/modules/country-field/country-field.component.js +2 -2
  10. package/esm2015/lib/modules/country-field/country-field.component.js.map +1 -1
  11. package/esm2015/lib/modules/lookup/lookup-autocomplete-adapter.js +7 -1
  12. package/esm2015/lib/modules/lookup/lookup-autocomplete-adapter.js.map +1 -1
  13. package/esm2015/lib/modules/lookup/lookup.component.js +5 -4
  14. package/esm2015/lib/modules/lookup/lookup.component.js.map +1 -1
  15. package/esm2015/lib/modules/shared/sky-lookup-resources.module.js +1 -1
  16. package/esm2015/lib/modules/shared/sky-lookup-resources.module.js.map +1 -1
  17. package/fesm2015/skyux-lookup.js +30 -44
  18. package/fesm2015/skyux-lookup.js.map +1 -1
  19. package/lib/modules/autocomplete/autocomplete-adapter.service.d.ts +0 -1
  20. package/lib/modules/autocomplete/autocomplete.component.d.ts +8 -2
  21. package/lib/modules/country-field/country-field.component.d.ts +3 -3
  22. package/lib/modules/lookup/lookup-autocomplete-adapter.d.ts +7 -1
  23. package/lib/modules/shared/sky-lookup-resources.module.d.ts +1 -1
  24. package/package.json +21 -18
  25. package/esm2015/lib/polyfills.js +0 -30
  26. package/esm2015/lib/polyfills.js.map +0 -1
  27. package/lib/polyfills.d.ts +0 -0
@@ -1,6 +1,5 @@
1
1
  import { Injectable, RendererFactory2, } from '@angular/core';
2
2
  import { SkyCoreAdapterService } from '@skyux/core';
3
- import '../../polyfills';
4
3
  import * as i0 from "@angular/core";
5
4
  import * as i1 from "@skyux/core";
6
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete-adapter.service.js","sourceRoot":"","sources":["../../../../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete-adapter.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAEV,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAsB,MAAM,aAAa,CAAC;AAExE,OAAO,iBAAiB,CAAC;;;AAEzB;;GAEG;AAEH,MAAM,OAAO,6BAA6B;IAGxC,YACU,kBAAyC,EACzC,eAAiC;QADjC,uBAAkB,GAAlB,kBAAkB,CAAuB;QACzC,oBAAe,GAAf,eAAe,CAAkB;QAEzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACI,WAAW,CAAC,OAAoB,EAAE,SAAiB;QACxD,kBAAkB;QAClB,0BAA0B;QAC1B,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;SAC5C;IACH,CAAC;IAEM,2BAA2B,CAChC,OAA2B;QAE3B,OAAO,IAAI,CAAC,kBAAkB,CAAC,oBAAoB;QACjD,yDAAyD;QACzD,0BAA0B;QAC1B,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,EAC5C,EAAE,cAAc,EAAE,IAAI,EAAE,CACzB,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,OAAoB,EAAE,SAAiB;QAC3D,kBAAkB;QAClB,0BAA0B;QAC1B,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;SAC/C;IACH,CAAC;IAEM,gBAAgB,CACrB,UAAsB,EACtB,WAAuB,EACvB,UAAmB;QAEnB,MAAM,aAAa,GAAG,UAAU;YAC9B,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC;YACpD,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC;QAC7B,IAAI,aAAa,EAAE;YACjB,MAAM,KAAK,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;YAC1D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;SAC1E;IACH,CAAC;IAED;;OAEG;IACI,WAAW,CAAC,OAAoB,EAAE,QAAgB;QACvD,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC9B,CAAC;;2HA9DU,6BAA6B;+HAA7B,6BAA6B;4FAA7B,6BAA6B;kBADzC,UAAU","sourcesContent":["import {\n ElementRef,\n Injectable,\n Renderer2,\n RendererFactory2,\n} from '@angular/core';\nimport { SkyCoreAdapterService, SkyOverlayInstance } from '@skyux/core';\n\nimport '../../polyfills';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyAutocompleteAdapterService {\n private renderer: Renderer2;\n\n constructor(\n private coreAdapterService: SkyCoreAdapterService,\n private rendererFactory: RendererFactory2\n ) {\n this.renderer = this.rendererFactory.createRenderer(undefined, undefined);\n }\n\n /**\n * Adds the className for the provided element.\n */\n public addCSSClass(element: HTMLElement, className: string): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (element) {\n this.renderer.addClass(element, className);\n }\n }\n\n public getOverlayFocusableElements(\n overlay: SkyOverlayInstance\n ): HTMLElement[] {\n return this.coreAdapterService.getFocusableChildren(\n /* Sanity check - calling function also has null check */\n /* istanbul ignore next */\n overlay?.componentRef.location.nativeElement,\n { ignoreTabIndex: true }\n );\n }\n\n /**\n * Removes the className for the provided element.\n */\n public removeCSSClass(element: HTMLElement, className: string): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (element) {\n this.renderer.removeClass(element, className);\n }\n }\n\n public setDropdownWidth(\n elementRef: ElementRef,\n dropdownRef: ElementRef,\n isInputBox: boolean\n ): void {\n const parentElement = isInputBox\n ? elementRef.nativeElement.closest('.sky-input-box')\n : elementRef.nativeElement;\n if (parentElement) {\n const width = parentElement.getBoundingClientRect().width;\n this.renderer.setStyle(dropdownRef.nativeElement, 'width', `${width}px`);\n }\n }\n\n /**\n * Sets the `tabIndex` of the `element` to the provided `tabIndex`.\n */\n public setTabIndex(element: HTMLElement, tabIndex: number): void {\n element.tabIndex = tabIndex;\n }\n}\n"]}
1
+ {"version":3,"file":"autocomplete-adapter.service.js","sourceRoot":"","sources":["../../../../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete-adapter.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAEV,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAsB,MAAM,aAAa,CAAC;;;AAExE;;GAEG;AAEH,MAAM,OAAO,6BAA6B;IAGxC,YACU,kBAAyC,EACzC,eAAiC;QADjC,uBAAkB,GAAlB,kBAAkB,CAAuB;QACzC,oBAAe,GAAf,eAAe,CAAkB;QAEzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACI,WAAW,CAAC,OAAoB,EAAE,SAAiB;QACxD,kBAAkB;QAClB,0BAA0B;QAC1B,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;SAC5C;IACH,CAAC;IAEM,2BAA2B,CAChC,OAA2B;QAE3B,OAAO,IAAI,CAAC,kBAAkB,CAAC,oBAAoB;QACjD,yDAAyD;QACzD,0BAA0B;QAC1B,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,EAC5C,EAAE,cAAc,EAAE,IAAI,EAAE,CACzB,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,OAAoB,EAAE,SAAiB;QAC3D,kBAAkB;QAClB,0BAA0B;QAC1B,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;SAC/C;IACH,CAAC;IAEM,gBAAgB,CACrB,UAAsB,EACtB,WAAuB,EACvB,UAAmB;QAEnB,MAAM,aAAa,GAAG,UAAU;YAC9B,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC;YACpD,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC;QAC7B,IAAI,aAAa,EAAE;YACjB,MAAM,KAAK,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;YAC1D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;SAC1E;IACH,CAAC;IAED;;OAEG;IACI,WAAW,CAAC,OAAoB,EAAE,QAAgB;QACvD,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC9B,CAAC;;2HA9DU,6BAA6B;+HAA7B,6BAA6B;4FAA7B,6BAA6B;kBADzC,UAAU","sourcesContent":["import {\n ElementRef,\n Injectable,\n Renderer2,\n RendererFactory2,\n} from '@angular/core';\nimport { SkyCoreAdapterService, SkyOverlayInstance } from '@skyux/core';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyAutocompleteAdapterService {\n private renderer: Renderer2;\n\n constructor(\n private coreAdapterService: SkyCoreAdapterService,\n private rendererFactory: RendererFactory2\n ) {\n this.renderer = this.rendererFactory.createRenderer(undefined, undefined);\n }\n\n /**\n * Adds the className for the provided element.\n */\n public addCSSClass(element: HTMLElement, className: string): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (element) {\n this.renderer.addClass(element, className);\n }\n }\n\n public getOverlayFocusableElements(\n overlay: SkyOverlayInstance\n ): HTMLElement[] {\n return this.coreAdapterService.getFocusableChildren(\n /* Sanity check - calling function also has null check */\n /* istanbul ignore next */\n overlay?.componentRef.location.nativeElement,\n { ignoreTabIndex: true }\n );\n }\n\n /**\n * Removes the className for the provided element.\n */\n public removeCSSClass(element: HTMLElement, className: string): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (element) {\n this.renderer.removeClass(element, className);\n }\n }\n\n public setDropdownWidth(\n elementRef: ElementRef,\n dropdownRef: ElementRef,\n isInputBox: boolean\n ): void {\n const parentElement = isInputBox\n ? elementRef.nativeElement.closest('.sky-input-box')\n : elementRef.nativeElement;\n if (parentElement) {\n const width = parentElement.getBoundingClientRect().width;\n this.renderer.setStyle(dropdownRef.nativeElement, 'width', `${width}px`);\n }\n }\n\n /**\n * Sets the `tabIndex` of the `element` to the provided `tabIndex`.\n */\n public setTabIndex(element: HTMLElement, tabIndex: number): void {\n element.tabIndex = tabIndex;\n }\n}\n"]}
@@ -25,7 +25,8 @@ export class SkyAutocompleteInputDirective {
25
25
  this._disabled = false;
26
26
  this._focus = new Subject();
27
27
  this._textChanges = new Subject();
28
- /* istanbul ignore next */
28
+ // istanbul ignore next
29
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
29
30
  this.onValidatorChange = () => { };
30
31
  }
31
32
  /**
@@ -189,9 +190,9 @@ export class SkyAutocompleteInputDirective {
189
190
  }
190
191
  }
191
192
  // Angular automatically constructs these methods.
192
- /* istanbul ignore next */
193
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
193
194
  onChange(value) { }
194
- /* istanbul ignore next */
195
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
195
196
  onTouched() { }
196
197
  setAttributes(element) {
197
198
  this.renderer.setAttribute(element, 'autocomplete', this.autocompleteAttribute);
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete-input.directive.js","sourceRoot":"","sources":["../../../../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete-input.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n forwardRef,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport { Observable, Subject, fromEvent as observableFromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyAutocompleteInputTextChange } from './types/autocomplete-input-text-change';\n\n// tslint:disable:no-forward-ref no-use-before-declare\nconst SKY_AUTOCOMPLETE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyAutocompleteInputDirective),\n multi: true,\n};\n\nconst SKY_AUTOCOMPLETE_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyAutocompleteInputDirective),\n multi: true,\n};\n// tslint:enable\n\n@Directive({\n selector: 'input[skyAutocomplete], textarea[skyAutocomplete]',\n providers: [SKY_AUTOCOMPLETE_VALUE_ACCESSOR, SKY_AUTOCOMPLETE_VALIDATOR],\n})\nexport class SkyAutocompleteInputDirective\n implements OnInit, OnDestroy, ControlValueAccessor, Validator\n{\n /**\n * Specifies the value for the `autocomplete` attribute on the form input.\n * @default \"off\"\n */\n @Input()\n public set autocompleteAttribute(value: string) {\n if (!value) {\n this._autocompleteAttribute = 'off';\n } else {\n this._autocompleteAttribute = value;\n }\n\n this.renderer.setAttribute(\n this.elementRef.nativeElement,\n 'autocomplete',\n this.autocompleteAttribute\n );\n }\n\n public get autocompleteAttribute(): string {\n return this._autocompleteAttribute || 'off';\n }\n\n /**\n * Indicates whether to disable the autocomplete field.\n * @default false\n */\n @Input()\n public set disabled(value: boolean) {\n this._disabled = value;\n this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', value);\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public get blur(): Observable<void> {\n return this._blur.asObservable();\n }\n\n public get displayWith(): string {\n return this._displayWith;\n }\n\n public set displayWith(value: string) {\n this._displayWith = value;\n this.inputTextValue = this.getValueByKey();\n }\n\n /**\n * @internal\n */\n public get inputElement(): any {\n return this.elementRef.nativeElement;\n }\n\n public get focus(): Observable<void> {\n return this._focus.asObservable();\n }\n\n public get inputTextValue(): string {\n return this.elementRef.nativeElement.value;\n }\n\n public set inputTextValue(value: string) {\n this.elementRef.nativeElement.value = value || '';\n }\n\n public get textChanges(): Observable<SkyAutocompleteInputTextChange> {\n return this._textChanges.asObservable();\n }\n\n public get value(): any {\n return this._value;\n }\n\n public set value(value: any) {\n const isNewValue = value !== this._value;\n\n /* istanbul ignore else */\n if (isNewValue) {\n this._value = value;\n this.inputTextValue = this.getValueByKey();\n this.onChange(this._value);\n\n // Do not mark the field as \"dirty\"\n // if the field has been initialized with a value.\n if (this.isFirstChange && this.control) {\n this.control.markAsPristine();\n }\n\n if (this.isFirstChange && this._value) {\n this.isFirstChange = false;\n }\n }\n }\n\n private control: AbstractControl;\n\n private isFirstChange = true;\n\n private ngUnsubscribe = new Subject<void>();\n\n private _autocompleteAttribute: string;\n\n private _blur = new Subject<void>();\n\n private _disabled = false;\n\n private _displayWith: string;\n\n private _focus = new Subject<void>();\n\n private _textChanges = new Subject<SkyAutocompleteInputTextChange>();\n\n private _value: any;\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {}\n\n public ngOnInit() {\n const element = this.elementRef.nativeElement;\n\n this.setAttributes(element);\n\n observableFromEvent(element, 'input')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n /** Sanity check */\n if (!this.disabled) {\n this._textChanges.next({\n value: this.elementRef.nativeElement.value,\n });\n }\n });\n\n observableFromEvent(element, 'blur')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n /** Sanity check */\n if (!this.disabled) {\n this._blur.next();\n }\n });\n\n observableFromEvent(element, 'focus')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n /** Sanity check */\n if (!this.disabled) {\n this._focus.next();\n }\n });\n\n observableFromEvent(element, 'change')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n /** Sanity check */\n /* istanbul ignore else */\n if (!this.disabled) {\n this.isFirstChange = false;\n }\n });\n }\n\n public ngOnDestroy(): void {\n this._blur.complete();\n this._textChanges.complete();\n\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n\n this._blur = this._textChanges = this.ngUnsubscribe = undefined;\n }\n\n public writeValue(value: any): void {\n this.value = value;\n }\n\n public registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n public restoreInputTextValueToPreviousState(): void {\n const modelValue = this.getValueByKey();\n\n // If the search field contains text, make sure that the value\n // matches the selected descriptor key.\n if (this.inputTextValue !== modelValue) {\n this.inputTextValue = modelValue;\n }\n\n this.onTouched();\n }\n\n public setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n public validate(control: AbstractControl): ValidationErrors {\n if (!this.control) {\n this.control = control;\n }\n return;\n }\n\n // See: https://www.w3.org/TR/wai-aria-practices/#kbd_focus_activedescendant\n public setActiveDescendant(descendantId: string | null): void {\n if (descendantId) {\n this.renderer.setAttribute(\n this.elementRef.nativeElement,\n 'aria-activedescendant',\n descendantId\n );\n } else {\n this.renderer.removeAttribute(\n this.elementRef.nativeElement,\n 'aria-activedescendant'\n );\n }\n }\n\n // Angular automatically constructs these methods.\n /* istanbul ignore next */\n public onChange(value: any): void {}\n /* istanbul ignore next */\n public onTouched(): void {}\n /* istanbul ignore next */\n public onValidatorChange = () => {};\n\n private setAttributes(element: any): void {\n this.renderer.setAttribute(\n element,\n 'autocomplete',\n this.autocompleteAttribute\n );\n this.renderer.setAttribute(element, 'autocapitalize', 'none');\n this.renderer.setAttribute(element, 'autocorrect', 'off');\n this.renderer.setAttribute(element, 'spellcheck', 'false');\n this.renderer.addClass(element, 'sky-form-control');\n }\n\n private getValueByKey(): string {\n return this.value ? this.value[this.displayWith] : undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"autocomplete-input.directive.js","sourceRoot":"","sources":["../../../../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete-input.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n forwardRef,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\n\nimport { Observable, Subject, fromEvent as observableFromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyAutocompleteInputTextChange } from './types/autocomplete-input-text-change';\n\n// tslint:disable:no-forward-ref no-use-before-declare\nconst SKY_AUTOCOMPLETE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SkyAutocompleteInputDirective),\n multi: true,\n};\n\nconst SKY_AUTOCOMPLETE_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyAutocompleteInputDirective),\n multi: true,\n};\n// tslint:enable\n\n@Directive({\n selector: 'input[skyAutocomplete], textarea[skyAutocomplete]',\n providers: [SKY_AUTOCOMPLETE_VALUE_ACCESSOR, SKY_AUTOCOMPLETE_VALIDATOR],\n})\nexport class SkyAutocompleteInputDirective\n implements OnInit, OnDestroy, ControlValueAccessor, Validator\n{\n /**\n * Specifies the value for the `autocomplete` attribute on the form input.\n * @default \"off\"\n */\n @Input()\n public set autocompleteAttribute(value: string) {\n if (!value) {\n this._autocompleteAttribute = 'off';\n } else {\n this._autocompleteAttribute = value;\n }\n\n this.renderer.setAttribute(\n this.elementRef.nativeElement,\n 'autocomplete',\n this.autocompleteAttribute\n );\n }\n\n public get autocompleteAttribute(): string {\n return this._autocompleteAttribute || 'off';\n }\n\n /**\n * Indicates whether to disable the autocomplete field.\n * @default false\n */\n @Input()\n public set disabled(value: boolean) {\n this._disabled = value;\n this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', value);\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public get blur(): Observable<void> {\n return this._blur.asObservable();\n }\n\n public get displayWith(): string {\n return this._displayWith;\n }\n\n public set displayWith(value: string) {\n this._displayWith = value;\n this.inputTextValue = this.getValueByKey();\n }\n\n /**\n * @internal\n */\n public get inputElement(): any {\n return this.elementRef.nativeElement;\n }\n\n public get focus(): Observable<void> {\n return this._focus.asObservable();\n }\n\n public get inputTextValue(): string {\n return this.elementRef.nativeElement.value;\n }\n\n public set inputTextValue(value: string) {\n this.elementRef.nativeElement.value = value || '';\n }\n\n public get textChanges(): Observable<SkyAutocompleteInputTextChange> {\n return this._textChanges.asObservable();\n }\n\n public get value(): any {\n return this._value;\n }\n\n public set value(value: any) {\n const isNewValue = value !== this._value;\n\n /* istanbul ignore else */\n if (isNewValue) {\n this._value = value;\n this.inputTextValue = this.getValueByKey();\n this.onChange(this._value);\n\n // Do not mark the field as \"dirty\"\n // if the field has been initialized with a value.\n if (this.isFirstChange && this.control) {\n this.control.markAsPristine();\n }\n\n if (this.isFirstChange && this._value) {\n this.isFirstChange = false;\n }\n }\n }\n\n private control: AbstractControl;\n\n private isFirstChange = true;\n\n private ngUnsubscribe = new Subject<void>();\n\n private _autocompleteAttribute: string;\n\n private _blur = new Subject<void>();\n\n private _disabled = false;\n\n private _displayWith: string;\n\n private _focus = new Subject<void>();\n\n private _textChanges = new Subject<SkyAutocompleteInputTextChange>();\n\n private _value: any;\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {}\n\n public ngOnInit() {\n const element = this.elementRef.nativeElement;\n\n this.setAttributes(element);\n\n observableFromEvent(element, 'input')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n /** Sanity check */\n if (!this.disabled) {\n this._textChanges.next({\n value: this.elementRef.nativeElement.value,\n });\n }\n });\n\n observableFromEvent(element, 'blur')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n /** Sanity check */\n if (!this.disabled) {\n this._blur.next();\n }\n });\n\n observableFromEvent(element, 'focus')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n /** Sanity check */\n if (!this.disabled) {\n this._focus.next();\n }\n });\n\n observableFromEvent(element, 'change')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n /** Sanity check */\n /* istanbul ignore else */\n if (!this.disabled) {\n this.isFirstChange = false;\n }\n });\n }\n\n public ngOnDestroy(): void {\n this._blur.complete();\n this._textChanges.complete();\n\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n\n this._blur = this._textChanges = this.ngUnsubscribe = undefined;\n }\n\n public writeValue(value: any): void {\n this.value = value;\n }\n\n public registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n public restoreInputTextValueToPreviousState(): void {\n const modelValue = this.getValueByKey();\n\n // If the search field contains text, make sure that the value\n // matches the selected descriptor key.\n if (this.inputTextValue !== modelValue) {\n this.inputTextValue = modelValue;\n }\n\n this.onTouched();\n }\n\n public setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n public validate(control: AbstractControl): ValidationErrors {\n if (!this.control) {\n this.control = control;\n }\n return;\n }\n\n // See: https://www.w3.org/TR/wai-aria-practices/#kbd_focus_activedescendant\n public setActiveDescendant(descendantId: string | null): void {\n if (descendantId) {\n this.renderer.setAttribute(\n this.elementRef.nativeElement,\n 'aria-activedescendant',\n descendantId\n );\n } else {\n this.renderer.removeAttribute(\n this.elementRef.nativeElement,\n 'aria-activedescendant'\n );\n }\n }\n\n // Angular automatically constructs these methods.\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onChange(value: any): void {}\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onTouched(): void {}\n // istanbul ignore next\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onValidatorChange = () => {};\n\n private setAttributes(element: any): void {\n this.renderer.setAttribute(\n element,\n 'autocomplete',\n this.autocompleteAttribute\n );\n this.renderer.setAttribute(element, 'autocapitalize', 'none');\n this.renderer.setAttribute(element, 'autocorrect', 'off');\n this.renderer.setAttribute(element, 'spellcheck', 'false');\n this.renderer.addClass(element, 'sky-form-control');\n }\n\n private getValueByKey(): string {\n return this.value ? this.value[this.displayWith] : undefined;\n }\n}\n"]}
@@ -52,6 +52,10 @@ export class SkyAutocompleteComponent {
52
52
  * Fires when users select the button to view all options.
53
53
  */
54
54
  this.showMoreClick = new EventEmitter();
55
+ /**
56
+ * Fires when users enter new search information and allows results to be
57
+ * returned via an observable.
58
+ */
55
59
  this.searchAsync = new EventEmitter();
56
60
  this.isOpen = false;
57
61
  this.isSearchingAsync = false;
@@ -75,7 +79,7 @@ export class SkyAutocompleteComponent {
75
79
  /**
76
80
  * Specifies a static data source for the autocomplete component to search
77
81
  * when users enter text. For a dynamic data source such as an array that
78
- * changes due to server calls, use the `search` property instead.
82
+ * changes due to server calls, use `search` or `searchAsync` instead.
79
83
  */
80
84
  set data(value) {
81
85
  this._data = value;
@@ -130,7 +134,9 @@ export class SkyAutocompleteComponent {
130
134
  * Specifies a function to dynamically manage the data source when users
131
135
  * change the text in the autocomplete field. The search function must return
132
136
  * an array or a promise of an array. The `search` property is particularly
133
- * useful when the data source does not live in the source code.
137
+ * useful when the data source does not live in the source code. If the
138
+ * search requires calling a remote data source, use `searchAsync` instead of
139
+ * `search`.
134
140
  */
135
141
  set search(value) {
136
142
  this._search = value;
@@ -401,7 +407,9 @@ export class SkyAutocompleteComponent {
401
407
  this.currentSearchSub = this.performSearch()
402
408
  .pipe(take(1))
403
409
  .subscribe((result) => {
404
- const items = result.items;
410
+ const items = result.items.filter((item) => {
411
+ return item && this.descriptorProperty in item;
412
+ });
405
413
  this.isSearchingAsync = false;
406
414
  this._searchResults = items.map((r, i) => {
407
415
  const result = {
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete.component.js","sourceRoot":"","sources":["../../../../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete.component.ts","../../../../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Optional,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport {\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAffixer,\n SkyOverlayInstance,\n SkyOverlayService,\n} from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\n\nimport {\n Observable,\n Subject,\n Subscription,\n from,\n fromEvent as observableFromEvent,\n of,\n} from 'rxjs';\nimport { debounceTime, map, switchMap, take, takeUntil } from 'rxjs/operators';\n\nimport { normalizeDiacritics } from '../shared/sky-lookup-string-utils';\n\nimport { SkyAutocompleteAdapterService } from './autocomplete-adapter.service';\nimport { skyAutocompleteDefaultSearchFunction } from './autocomplete-default-search-function';\nimport { SkyAutocompleteInputDirective } from './autocomplete-input.directive';\nimport { SkyAutocompleteMessage } from './types/autocomplete-message';\nimport { SkyAutocompleteMessageType } from './types/autocomplete-message-type';\nimport { SkyAutocompleteSearchAsyncArgs } from './types/autocomplete-search-async-args';\nimport { SkyAutocompleteSearchAsyncResult } from './types/autocomplete-search-async-result';\nimport { SkyAutocompleteSearchFunction } from './types/autocomplete-search-function';\nimport { SkyAutocompleteSearchFunctionFilter } from './types/autocomplete-search-function-filter';\nimport { SkyAutocompleteSelectionChange } from './types/autocomplete-selection-change';\nimport { SkyAutocompleteShowMoreArgs } from './types/autocomplete-show-more-args';\n\n/**\n * @internal\n */\ninterface SkyAutocompleteSearchResult {\n elementId: string;\n data: any;\n}\n\nlet uniqueId = 0;\n\n@Component({\n selector: 'sky-autocomplete',\n templateUrl: './autocomplete.component.html',\n styleUrls: ['./autocomplete.component.scss'],\n providers: [SkyAutocompleteAdapterService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyAutocompleteComponent\n implements OnDestroy, AfterContentInit, AfterViewInit\n{\n //#region public_api\n\n /**\n * Specifies the HTML element ID (without the leading `#`) of the element that labels\n * the autocomplete text input. This sets the input's `aria-labelledby` attribute\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n */\n @Input()\n public ariaLabelledBy: string;\n\n /**\n * Specifies a static data source for the autocomplete component to search\n * when users enter text. For a dynamic data source such as an array that\n * changes due to server calls, use the `search` property instead.\n */\n @Input()\n public set data(value: any[]) {\n this._data = value;\n }\n\n public get data(): any[] {\n return this._data || [];\n }\n\n /**\n * Specifies how many milliseconds to wait before searching while users\n * enter text in the autocomplete field.\n * @default 0\n */\n @Input()\n public set debounceTime(value: number) {\n this._debounceTime = value;\n }\n\n public get debounceTime(): number {\n return this._debounceTime || 0;\n }\n\n /**\n * Specifies an object property to display in the text input after users\n * select an item in the dropdown list.\n * @default \"name\"\n */\n @Input()\n public set descriptorProperty(value: string) {\n this._descriptorProperty = value;\n }\n\n public get descriptorProperty(): string {\n return this._descriptorProperty || 'name';\n }\n\n /**\n * @internal\n * Indicates whether to display a button in the dropdown that opens a picker where users can view all options.\n */\n @Input()\n public enableShowMore = false;\n\n /**\n * Specifies an observable of `SkyAutocompleteMessage` that can close the dropdown.\n * @internal\n */\n @Input()\n public set messageStream(value: Subject<SkyAutocompleteMessage>) {\n this._messageStream = value;\n this.initMessageStream();\n }\n\n public get messageStream(): Subject<SkyAutocompleteMessage> {\n return this._messageStream;\n }\n\n /**\n * @internal\n */\n @Input()\n public wrapperClass?: string;\n\n /**\n * Specifies the object properties to search.\n * @default [\"name\"]\n */\n @Input()\n public set propertiesToSearch(value: string[]) {\n this._propertiesToSearch = value;\n }\n\n public get propertiesToSearch(): string[] {\n return this._propertiesToSearch || ['name'];\n }\n\n /**\n * Specifies a function to dynamically manage the data source when users\n * change the text in the autocomplete field. The search function must return\n * an array or a promise of an array. The `search` property is particularly\n * useful when the data source does not live in the source code.\n */\n @Input()\n public set search(value: SkyAutocompleteSearchFunction) {\n this._search = value;\n }\n\n public get search(): SkyAutocompleteSearchFunction {\n return (\n this._search ||\n skyAutocompleteDefaultSearchFunction({\n propertiesToSearch: this.propertiesToSearch,\n searchFilters: this.searchFilters,\n })\n );\n }\n\n /**\n * Specifies a template to format each search result in the dropdown list.\n * The autocomplete component injects search result values into the template\n * as `item` variables that reference all of the object properties of the search results.\n */\n @Input()\n public set searchResultTemplate(value: TemplateRef<any>) {\n this._searchResultTemplate = value;\n }\n\n public get searchResultTemplate(): TemplateRef<any> {\n return this._searchResultTemplate || this.defaultSearchResultTemplate;\n }\n\n /**\n * Specifies the minimum number of characters that users must enter before\n * the autocomplete component searches the data source and displays search\n * results in the dropdown list.\n * @default 1\n */\n @Input()\n public set searchTextMinimumCharacters(value: number) {\n this._searchTextMinimumCharacters = value;\n }\n\n public get searchTextMinimumCharacters(): number {\n return this._searchTextMinimumCharacters > 0\n ? this._searchTextMinimumCharacters\n : 1;\n }\n\n /**\n * Specifies an array of functions to call against each search result in order\n * to filter the search results when using the default search function. When\n * using the `search` property to specify a custom search function, you must\n * manually apply filters inside that function. The function must return `true`\n * or `false` for each result to indicate whether to display it in the dropdown list.\n */\n @Input()\n public searchFilters: SkyAutocompleteSearchFunctionFilter[];\n\n /**\n * Specifies the maximum number of search results to display in the dropdown list.\n * By default, the component displays all matching results.\n */\n @Input()\n public set searchResultsLimit(value: number) {\n this._searchResultsLimit = value;\n }\n\n public get searchResultsLimit(): number {\n if (this._searchResultsLimit) {\n return this._searchResultsLimit;\n } else {\n return this.enableShowMore ? 5 : this._searchResultsLimit;\n }\n }\n\n /**\n * @internal\n * Indicates whether to display a button that lets users add options to the data source.\n */\n @Input()\n public showAddButton = false;\n\n /**\n * Specifies the text to display when no search results are found.\n * @default \"No matches found\"\n */\n @Input()\n public noResultsFoundText: string;\n\n /**\n * @internal\n * Allows async search to be disabled even when a listener is specified for\n * the `searchAsync` output.\n */\n @Input()\n public searchAsyncDisabled = false;\n\n /**\n * @internal\n * Fires when users select the button to add options to the data source.\n */\n @Output()\n public addClick: EventEmitter<void> = new EventEmitter();\n\n /**\n * @internal\n * Fires when users select the button to view all options.\n */\n @Output()\n public showMoreClick: EventEmitter<SkyAutocompleteShowMoreArgs> = new EventEmitter();\n\n /**\n * Fires when users select items in the dropdown list.\n */\n @Output()\n public get selectionChange(): EventEmitter<SkyAutocompleteSelectionChange> {\n return this._selectionChange;\n }\n\n @Output()\n public searchAsync = new EventEmitter<SkyAutocompleteSearchAsyncArgs>();\n\n //#endregion\n\n //#region template_properties\n\n public get searchResults(): SkyAutocompleteSearchResult[] {\n return this._searchResults || [];\n }\n\n public get highlightText(): string[] {\n return this._highlightText || [];\n }\n\n public isOpen = false;\n\n public resultsListId: string;\n\n public resultsWrapperId: string;\n\n public searchText: string;\n\n public get showActionsArea(): boolean {\n return this.showAddButton || this.enableShowMore;\n }\n\n public isSearchingAsync = false;\n\n public searchResultsCount: number | undefined;\n\n //#endregion\n\n @ViewChild('defaultSearchResultTemplate', {\n read: TemplateRef,\n static: false,\n })\n private defaultSearchResultTemplate: TemplateRef<any>;\n\n @ContentChild(SkyAutocompleteInputDirective)\n private set inputDirective(directive: SkyAutocompleteInputDirective) {\n if (this._inputDirective !== directive) {\n if (!directive) {\n throw Error(\n [\n 'The SkyAutocompleteComponent requires a ContentChild input or',\n 'textarea bound with the SkyAutocomplete directive. For example:',\n '`<input type=\"text\" skyAutocomplete>`.',\n ].join(' ')\n );\n }\n\n // Unsubscribe from old subscriptions on any previous input directive\n this.inputDirectiveUnsubscribe.next();\n\n this._inputDirective = directive;\n\n this._inputDirective.displayWith = this.descriptorProperty;\n\n this._inputDirective.textChanges\n .pipe(\n takeUntil(this.inputDirectiveUnsubscribe),\n debounceTime(this.debounceTime),\n switchMap((change) => {\n this.isSearchingAsync = true;\n return of(change);\n })\n )\n .subscribe((change) => {\n this.searchTextChanged(change.value);\n });\n\n this._inputDirective.blur\n .pipe(takeUntil(this.inputDirectiveUnsubscribe))\n .subscribe(() => {\n this.inputDirective.onTouched();\n });\n\n this._inputDirective.focus\n .pipe(takeUntil(this.inputDirectiveUnsubscribe))\n .subscribe(() => {\n if (this.showActionsArea) {\n this.openDropdown();\n }\n });\n }\n }\n\n private get inputDirective(): SkyAutocompleteInputDirective {\n return this._inputDirective;\n }\n\n @ViewChild('resultsTemplateRef', {\n read: TemplateRef,\n })\n private resultsTemplateRef: TemplateRef<any>;\n\n @ViewChild('resultsRef', {\n read: ElementRef,\n })\n private set resultsRef(value: ElementRef) {\n if (value) {\n this._resultsRef = value;\n this.destroyAffixer();\n this.createAffixer();\n }\n }\n\n private get resultsRef(): ElementRef {\n return this._resultsRef;\n }\n\n /**\n * Index that indicates which descendant of the overlay currently has focus.\n */\n private activeElementIndex = -1;\n\n private affixer: SkyAffixer;\n\n private inputDirectiveUnsubscribe = new Subject();\n\n private messageStreamSub: Subscription;\n\n private ngUnsubscribe = new Subject();\n\n private overlay: SkyOverlayInstance;\n\n /**\n * Elements within the autocomplete dropdown that are focusable.\n * These are typically the search results and action buttons, but could also be\n * elements provided in the consumer's own template.\n */\n private overlayFocusableElements: HTMLElement[] = [];\n\n private currentSearchSub: Subscription;\n\n private _data: any[];\n private _debounceTime: number;\n private _descriptorProperty: string;\n private _highlightText: string[];\n private _inputDirective: SkyAutocompleteInputDirective;\n private _messageStream: Subject<SkyAutocompleteMessage>;\n private _propertiesToSearch: string[];\n private _resultsRef: ElementRef;\n private _search: SkyAutocompleteSearchFunction;\n private _searchResults: SkyAutocompleteSearchResult[];\n private _searchResultTemplate: TemplateRef<any>;\n private _searchResultsLimit: number;\n private _searchTextMinimumCharacters: number;\n private _selectionChange = new EventEmitter<SkyAutocompleteSelectionChange>();\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n private elementRef: ElementRef,\n private affixService: SkyAffixService,\n private adapterService: SkyAutocompleteAdapterService,\n private overlayService: SkyOverlayService,\n @Optional() private inputBoxHostSvc?: SkyInputBoxHostService\n ) {\n const id = ++uniqueId;\n this.resultsListId = `sky-autocomplete-list-${id}`;\n this.resultsWrapperId = `sky-autocomplete-wrapper-${id}`;\n }\n\n public ngAfterContentInit(): void {\n if (!this.inputDirective) {\n throw Error(\n [\n 'The SkyAutocompleteComponent requires a ContentChild input or',\n 'textarea bound with the SkyAutocomplete directive. For example:',\n '`<input type=\"text\" skyAutocomplete>`.',\n ].join(' ')\n );\n }\n }\n\n public ngAfterViewInit(): void {\n this.addInputEventListeners();\n }\n\n public ngOnDestroy(): void {\n this.cancelCurrentSearch();\n this.inputDirectiveUnsubscribe.next();\n this.inputDirectiveUnsubscribe.complete();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.destroyAffixer();\n this.destroyOverlay();\n }\n\n public addButtonClicked(): void {\n this.addClick.emit();\n this.inputDirective.restoreInputTextValueToPreviousState();\n this.closeDropdown();\n }\n\n public handleKeydown(event: KeyboardEvent): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (event.key) {\n const key = event.key.toLowerCase();\n const activeElement = this.getActiveElement();\n const activeElementId = activeElement?.id;\n const targetIsSearchResult = this.searchResults.find(\n (r) => r.elementId === activeElementId\n );\n\n /* tslint:disable-next-line:switch-default */\n switch (key) {\n case 'enter':\n if (targetIsSearchResult) {\n this.selectSearchResultById(activeElementId);\n\n if (!this.showActionsArea) {\n this.closeDropdown();\n } else {\n this.resetSearch();\n }\n } else {\n if (activeElement) {\n activeElement.click();\n }\n }\n\n event.preventDefault();\n event.stopPropagation();\n break;\n\n case 'tab':\n if (targetIsSearchResult) {\n this.selectSearchResultById(activeElementId);\n } else {\n this.inputDirective.restoreInputTextValueToPreviousState();\n }\n\n this.closeDropdown();\n break;\n\n case 'escape':\n this.closeDropdown();\n break;\n\n case 'arrowdown':\n case 'down':\n this.removeFocusedClass();\n if (\n this.activeElementIndex ===\n this.overlayFocusableElements.length - 1 ||\n this.activeElementIndex === -1\n ) {\n this.activeElementIndex = 0;\n } else {\n this.activeElementIndex = this.activeElementIndex + 1;\n }\n this.addFocusedClass();\n this.changeDetector.markForCheck();\n event.preventDefault();\n event.stopPropagation();\n break;\n\n case 'arrowup':\n case 'up':\n this.removeFocusedClass();\n if (this.activeElementIndex <= 0) {\n this.activeElementIndex = this.overlayFocusableElements.length - 1;\n } else {\n this.activeElementIndex = this.activeElementIndex - 1;\n }\n this.addFocusedClass();\n this.changeDetector.markForCheck();\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n }\n\n public moreButtonClicked(): void {\n this.showMoreClick.emit({ inputValue: this.searchText });\n this.inputDirective.restoreInputTextValueToPreviousState();\n this.closeDropdown();\n }\n\n public onResultMouseDown(id: string, event: MouseEvent): void {\n this.selectSearchResultById(id);\n\n if (!this.showActionsArea) {\n this.closeDropdown();\n } else {\n this.resetSearch();\n }\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n public onResultMouseMove(id: number): void {\n if (id !== this.activeElementIndex) {\n this.removeFocusedClass();\n this.activeElementIndex = id;\n this.addFocusedClass();\n this.changeDetector.markForCheck();\n }\n }\n\n public isElementFocused(ref: HTMLElement): boolean {\n return ref === this.overlayFocusableElements[this.activeElementIndex];\n }\n\n private searchTextChanged(searchText: string): void {\n const isEmpty =\n !searchText || !searchText.trim() || searchText.match(/^\\s+$/);\n\n if (isEmpty) {\n // Emit selectionChange if value has been cleared.\n if (this.inputDirective.value) {\n this.inputDirective.value = undefined;\n this.selectionChange.emit({\n selectedItem: undefined,\n });\n }\n\n if (!this.showActionsArea) {\n this.closeDropdown();\n } else {\n this.resetSearch();\n }\n\n this.isSearchingAsync = false;\n this.changeDetector.markForCheck();\n\n return;\n }\n\n const isLongEnough = searchText.length >= this.searchTextMinimumCharacters;\n const isDifferent = searchText !== this.searchText;\n\n this.searchText = searchText.trim();\n\n if (isLongEnough && isDifferent) {\n this.cancelCurrentSearch();\n\n this.currentSearchSub = this.performSearch()\n .pipe(take(1))\n .subscribe((result) => {\n const items = result.items;\n\n this.isSearchingAsync = false;\n\n this._searchResults = items.map((r, i) => {\n const result: SkyAutocompleteSearchResult = {\n elementId: `${this.resultsListId}-item-${i}`,\n data: r,\n };\n return result;\n });\n\n this.searchResultsCount = result.totalCount;\n\n this._highlightText = this.getHighlightText(this.searchText);\n this.removeFocusedClass();\n this.removeActiveDescendant();\n if (this.searchResults.length > 0) {\n this.activeElementIndex = 0;\n } else {\n this.activeElementIndex = -1;\n }\n\n this.changeDetector.markForCheck();\n\n if (this.isOpen) {\n // Let the results populate in the DOM before recalculating placement.\n setTimeout(() => {\n this.affixer.reaffix();\n this.changeDetector.detectChanges();\n this.initOverlayFocusableElements();\n });\n } else {\n this.openDropdown();\n this.changeDetector.markForCheck();\n }\n });\n } else {\n this.isSearchingAsync = false;\n this.changeDetector.markForCheck();\n }\n }\n\n private performSearch(): Observable<SkyAutocompleteSearchAsyncResult> {\n if (!this.searchAsyncDisabled && this.searchAsync.observers.length > 0) {\n const searchAsyncArgs: SkyAutocompleteSearchAsyncArgs = {\n displayType: 'popover',\n offset: 0,\n searchText: this.searchText,\n };\n\n this.searchAsync.emit(searchAsyncArgs);\n\n return searchAsyncArgs.result;\n }\n\n const result = this.search(this.searchText, this.data);\n\n if (result instanceof Array) {\n return of({\n items: result,\n totalCount: result.length,\n });\n }\n\n return from(result).pipe(\n map((items) => {\n return {\n items,\n totalCount: items.length,\n };\n })\n );\n }\n\n private cancelCurrentSearch(): void {\n if (this.currentSearchSub) {\n this.currentSearchSub.unsubscribe();\n this.currentSearchSub = undefined;\n }\n }\n\n /**\n * Returns the text to highlight based on exact matches, case-insensitive matches, and matches for corresponding diacritical characters (a will match à).\n */\n private getHighlightText(searchText: string): string[] {\n const normalizedSearchText = normalizeDiacritics(\n this.searchText\n ).toLocaleUpperCase();\n\n let matchesToHighlight: string[] = [];\n for (let i = 0, n = this._searchResults.length; i < n; i++) {\n const value = this._searchResults[i].data[this.descriptorProperty]\n .toString()\n .toLocaleUpperCase() as string;\n const normalizedDataValue = normalizeDiacritics(value);\n\n let offset = 0;\n let index: number;\n while (\n (index = normalizedDataValue.indexOf(normalizedSearchText, offset)) > -1\n ) {\n const matchedString = value.slice(index, index + searchText.length);\n offset = index + searchText.length;\n matchesToHighlight = matchesToHighlight.concat(matchedString);\n }\n }\n\n // Remove any duplicates from the array.\n return [...new Set(matchesToHighlight)];\n }\n\n private selectSearchResultById(id: string): void {\n const result = this.searchResults.find((r) => r.elementId === id).data;\n /* Sanity check */\n /* istanbul ignore else */\n if (result) {\n this.searchText = result[this.descriptorProperty];\n this.inputDirective.value = result;\n this.selectionChange.emit({\n selectedItem: result,\n });\n }\n }\n\n private openDropdown(): void {\n if (!this.overlay) {\n const overlay = this.overlayService.create({\n enableClose: false,\n enablePointerEvents: true,\n wrapperClass: this.wrapperClass,\n });\n\n overlay.attachTemplate(this.resultsTemplateRef);\n\n this.overlay = overlay;\n this.isOpen = true;\n this.changeDetector.markForCheck();\n this.initOverlayFocusableElements();\n\n overlay.backdropClick\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n /* Sanity check as you should not be able to active the directive from the backdrop */\n /* istanbul ignore else */\n if (document.activeElement !== this.inputDirective.inputElement) {\n this.inputDirective.restoreInputTextValueToPreviousState();\n this.closeDropdown();\n }\n });\n }\n }\n\n private closeDropdown(): void {\n this.resetSearch();\n this.isOpen = false;\n this.destroyOverlay();\n this.removeActiveDescendant();\n this.changeDetector.markForCheck();\n }\n\n private setActiveDescendant(): void {\n const activeElement =\n this.overlayFocusableElements[this.activeElementIndex];\n /* Sanity check */\n /* istanbul ignore else */\n if (activeElement) {\n this.inputDirective.setActiveDescendant(activeElement.id);\n }\n }\n\n private removeActiveDescendant(): void {\n /* tslint:disable-next-line:no-null-keyword */\n this.inputDirective.setActiveDescendant(null);\n }\n\n private resetSearch(): void {\n this._searchResults = [];\n this.searchText = '';\n this._highlightText = [];\n this.activeElementIndex = -1;\n this.searchResultsCount = undefined;\n this.removeActiveDescendant();\n this.initOverlayFocusableElements();\n this.changeDetector.markForCheck();\n }\n\n private addInputEventListeners(): void {\n const element = this.elementRef.nativeElement;\n\n observableFromEvent(element, 'keydown')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((event: KeyboardEvent) => {\n this.handleKeydown(event);\n });\n\n observableFromEvent(window, 'resize')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (this.isOpen) {\n this.adapterService.setDropdownWidth(\n this.elementRef,\n this.resultsRef,\n !!this.inputBoxHostSvc\n );\n }\n });\n }\n\n private destroyOverlay(): void {\n if (this.overlay) {\n this.overlayService.close(this.overlay);\n this.overlay = undefined;\n }\n }\n\n private createAffixer(): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (!this.affixer) {\n const affixer = this.affixService.createAffixer(this.resultsRef);\n\n this.adapterService.setDropdownWidth(\n this.elementRef,\n this.resultsRef,\n !!this.inputBoxHostSvc\n );\n\n affixer.affixTo(this.elementRef.nativeElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n enableAutoFit: true,\n isSticky: true,\n placement: 'below',\n horizontalAlignment: 'left',\n });\n\n this.affixer = affixer;\n }\n }\n\n private destroyAffixer(): void {\n if (this.affixer) {\n this.affixer.destroy();\n this.affixer = undefined;\n }\n }\n\n private initMessageStream(): void {\n /* istanbul ignore if */\n if (this.messageStreamSub) {\n this.messageStreamSub.unsubscribe();\n }\n\n if (this.messageStream) {\n this.messageStreamSub = this.messageStream\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((message: SkyAutocompleteMessage) => {\n /* tslint:disable-next-line:switch-default */\n switch (message.type) {\n case SkyAutocompleteMessageType.CloseDropdown:\n this.closeDropdown();\n break;\n case SkyAutocompleteMessageType.RepositionDropdown:\n // Settimeout waits for changes in DOM (e.g., tokens being removed)\n setTimeout(() => {\n /* istanbul ignore else */\n if (this.affixer) {\n this.affixer.reaffix();\n }\n });\n break;\n }\n });\n }\n }\n\n private initOverlayFocusableElements(): void {\n // Wait for dropdown elements to render.\n setTimeout(() => {\n if (this.overlay) {\n this.overlayFocusableElements =\n this.adapterService.getOverlayFocusableElements(this.overlay);\n this.overlayFocusableElements.forEach((el) => {\n this.adapterService.setTabIndex(el, -1);\n });\n this.addFocusedClass();\n }\n });\n }\n\n private getActiveElement(): HTMLElement {\n return this.overlayFocusableElements[this.activeElementIndex];\n }\n\n private removeFocusedClass(): void {\n if (this.activeElementIndex > -1) {\n this.adapterService.removeCSSClass(\n this.overlayFocusableElements[this.activeElementIndex],\n 'sky-autocomplete-descendant-focus'\n );\n }\n }\n\n private addFocusedClass(): void {\n if (this.activeElementIndex > -1) {\n this.adapterService.addCSSClass(\n this.overlayFocusableElements[this.activeElementIndex],\n 'sky-autocomplete-descendant-focus'\n );\n this.setActiveDescendant();\n }\n }\n}\n","<div\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n class=\"sky-autocomplete\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen && searchText\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-owns]=\"isOpen ? resultsListId : null\"\n [attr.id]=\"resultsWrapperId\"\n>\n <ng-content></ng-content>\n</div>\n\n<ng-template #resultsTemplateRef>\n <div\n class=\"sky-autocomplete-results-container\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-4': 'modern'\n }\"\n (keydown)=\"handleKeydown($event)\"\n #resultsRef\n >\n <div\n *ngIf=\"isSearchingAsync; else resultControlsTemplateRef\"\n class=\"sky-autocomplete-results-waiting\"\n >\n <sky-wait [isWaiting]=\"true\"></sky-wait>\n </div>\n </div>\n</ng-template>\n\n<ng-template #resultControlsTemplateRef>\n <div\n *ngIf=\"searchText && (!showActionsArea || searchResults.length > 0)\"\n class=\"sky-autocomplete-results\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.id]=\"resultsListId\"\n >\n <ng-container *ngFor=\"let result of searchResults; let i = index\">\n <div\n *ngIf=\"!searchResultsLimit || i < searchResultsLimit\"\n class=\"sky-autocomplete-result\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"isElementFocused(searchResultEl)\"\n [attr.id]=\"result.elementId\"\n [skyHighlight]=\"highlightText\"\n (mousedown)=\"onResultMouseDown(result.elementId, $event)\"\n (mousemove)=\"onResultMouseMove(i)\"\n #searchResultEl\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchResultTemplate;\n context: { item: result.data }\n \"\n >\n </ng-container>\n </div>\n </ng-container>\n <div\n *ngIf=\"searchResults.length === 0\"\n class=\"sky-deemphasized sky-padding-squish-default\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n </div>\n <div *ngIf=\"showActionsArea\" class=\"sky-autocomplete-actions\">\n <button\n *ngIf=\"enableShowMore && (!searchText || searchResults.length > 0)\"\n class=\"\n sky-autocomplete-action\n sky-autocomplete-action-more\n sky-btn\n sky-btn-link\n \"\n type=\"button\"\n (click)=\"moreButtonClicked()\"\n >\n <ng-container\n *ngIf=\"\n !(\n searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled\n ) &&\n searchResults.length === 0 &&\n !searchText\n \"\n >\n {{ 'skyux_autocomplete_show_all' | skyLibResources }}\n </ng-container>\n <ng-container\n *ngIf=\"\n (searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled) &&\n !searchText\n \"\n >\n {{\n 'skyux_autocomplete_show_all_count'\n | skyLibResources: (data.length | skyNumeric: { truncate: false })\n }}\n </ng-container>\n <ng-container *ngIf=\"searchText\">\n {{\n 'skyux_autocomplete_show_matches_count'\n | skyLibResources\n : (searchResultsCount === undefined\n ? data.length\n : (searchResultsCount | skyNumeric: { truncate: false }))\n }}\n </ng-container>\n </button>\n <div\n *ngIf=\"searchText && searchResults.length === 0\"\n class=\"sky-font-deemphasized sky-autocomplete-actions-no-results\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n <button\n *ngIf=\"showAddButton\"\n class=\"\n sky-autocomplete-action sky-autocomplete-action-add sky-btn sky-btn-link\n \"\n tabindex=\"0\"\n type=\"button\"\n [class.focused]=\"isElementFocused(addButtonEl)\"\n (click)=\"addButtonClicked()\"\n #addButtonEl\n >\n <sky-icon *skyThemeIf=\"'modern'\" icon=\"add\" iconType=\"skyux\"></sky-icon>\n <sky-icon *skyThemeIf=\"'default'\" icon=\"plus-circle\"></sky-icon>\n {{ 'skyux_autocomplete_add' | skyLibResources }}\n </button>\n </div>\n</ng-template>\n\n<ng-template let-item=\"item\" #defaultSearchResultTemplate>\n {{ item[descriptorProperty] }}\n</ng-template>\n"]}
1
+ {"version":3,"file":"autocomplete.component.js","sourceRoot":"","sources":["../../../../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete.component.ts","../../../../../../../../libs/components/lookup/src/lib/modules/autocomplete/autocomplete.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Optional,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport {\n SkyAffixAutoFitContext,\n SkyAffixService,\n SkyAffixer,\n SkyOverlayInstance,\n SkyOverlayService,\n} from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\n\nimport {\n Observable,\n Subject,\n Subscription,\n from,\n fromEvent as observableFromEvent,\n of,\n} from 'rxjs';\nimport { debounceTime, map, switchMap, take, takeUntil } from 'rxjs/operators';\n\nimport { normalizeDiacritics } from '../shared/sky-lookup-string-utils';\n\nimport { SkyAutocompleteAdapterService } from './autocomplete-adapter.service';\nimport { skyAutocompleteDefaultSearchFunction } from './autocomplete-default-search-function';\nimport { SkyAutocompleteInputDirective } from './autocomplete-input.directive';\nimport { SkyAutocompleteMessage } from './types/autocomplete-message';\nimport { SkyAutocompleteMessageType } from './types/autocomplete-message-type';\nimport { SkyAutocompleteSearchAsyncArgs } from './types/autocomplete-search-async-args';\nimport { SkyAutocompleteSearchAsyncResult } from './types/autocomplete-search-async-result';\nimport { SkyAutocompleteSearchFunction } from './types/autocomplete-search-function';\nimport { SkyAutocompleteSearchFunctionFilter } from './types/autocomplete-search-function-filter';\nimport { SkyAutocompleteSelectionChange } from './types/autocomplete-selection-change';\nimport { SkyAutocompleteShowMoreArgs } from './types/autocomplete-show-more-args';\n\n/**\n * @internal\n */\ninterface SkyAutocompleteSearchResult {\n elementId: string;\n data: any;\n}\n\nlet uniqueId = 0;\n\n@Component({\n selector: 'sky-autocomplete',\n templateUrl: './autocomplete.component.html',\n styleUrls: ['./autocomplete.component.scss'],\n providers: [SkyAutocompleteAdapterService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyAutocompleteComponent\n implements OnDestroy, AfterContentInit, AfterViewInit\n{\n //#region public_api\n\n /**\n * Specifies the HTML element ID (without the leading `#`) of the element that labels\n * the autocomplete text input. This sets the input's `aria-labelledby` attribute\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n */\n @Input()\n public ariaLabelledBy: string;\n\n /**\n * Specifies a static data source for the autocomplete component to search\n * when users enter text. For a dynamic data source such as an array that\n * changes due to server calls, use `search` or `searchAsync` instead.\n */\n @Input()\n public set data(value: any[]) {\n this._data = value;\n }\n\n public get data(): any[] {\n return this._data || [];\n }\n\n /**\n * Specifies how many milliseconds to wait before searching while users\n * enter text in the autocomplete field.\n * @default 0\n */\n @Input()\n public set debounceTime(value: number) {\n this._debounceTime = value;\n }\n\n public get debounceTime(): number {\n return this._debounceTime || 0;\n }\n\n /**\n * Specifies an object property to display in the text input after users\n * select an item in the dropdown list.\n * @default \"name\"\n */\n @Input()\n public set descriptorProperty(value: string) {\n this._descriptorProperty = value;\n }\n\n public get descriptorProperty(): string {\n return this._descriptorProperty || 'name';\n }\n\n /**\n * @internal\n * Indicates whether to display a button in the dropdown that opens a picker where users can view all options.\n */\n @Input()\n public enableShowMore = false;\n\n /**\n * Specifies an observable of `SkyAutocompleteMessage` that can close the dropdown.\n * @internal\n */\n @Input()\n public set messageStream(value: Subject<SkyAutocompleteMessage>) {\n this._messageStream = value;\n this.initMessageStream();\n }\n\n public get messageStream(): Subject<SkyAutocompleteMessage> {\n return this._messageStream;\n }\n\n /**\n * @internal\n */\n @Input()\n public wrapperClass?: string;\n\n /**\n * Specifies the object properties to search.\n * @default [\"name\"]\n */\n @Input()\n public set propertiesToSearch(value: string[]) {\n this._propertiesToSearch = value;\n }\n\n public get propertiesToSearch(): string[] {\n return this._propertiesToSearch || ['name'];\n }\n\n /**\n * Specifies a function to dynamically manage the data source when users\n * change the text in the autocomplete field. The search function must return\n * an array or a promise of an array. The `search` property is particularly\n * useful when the data source does not live in the source code. If the\n * search requires calling a remote data source, use `searchAsync` instead of\n * `search`.\n */\n @Input()\n public set search(value: SkyAutocompleteSearchFunction) {\n this._search = value;\n }\n\n public get search(): SkyAutocompleteSearchFunction {\n return (\n this._search ||\n skyAutocompleteDefaultSearchFunction({\n propertiesToSearch: this.propertiesToSearch,\n searchFilters: this.searchFilters,\n })\n );\n }\n\n /**\n * Specifies a template to format each search result in the dropdown list.\n * The autocomplete component injects search result values into the template\n * as `item` variables that reference all of the object properties of the search results.\n */\n @Input()\n public set searchResultTemplate(value: TemplateRef<any>) {\n this._searchResultTemplate = value;\n }\n\n public get searchResultTemplate(): TemplateRef<any> {\n return this._searchResultTemplate || this.defaultSearchResultTemplate;\n }\n\n /**\n * Specifies the minimum number of characters that users must enter before\n * the autocomplete component searches the data source and displays search\n * results in the dropdown list.\n * @default 1\n */\n @Input()\n public set searchTextMinimumCharacters(value: number) {\n this._searchTextMinimumCharacters = value;\n }\n\n public get searchTextMinimumCharacters(): number {\n return this._searchTextMinimumCharacters > 0\n ? this._searchTextMinimumCharacters\n : 1;\n }\n\n /**\n * Specifies an array of functions to call against each search result in order\n * to filter the search results when using the default search function. When\n * using the `search` property to specify a custom search function, you must\n * manually apply filters inside that function. The function must return `true`\n * or `false` for each result to indicate whether to display it in the dropdown list.\n */\n @Input()\n public searchFilters: SkyAutocompleteSearchFunctionFilter[];\n\n /**\n * Specifies the maximum number of search results to display in the dropdown list.\n * By default, the component displays all matching results.\n */\n @Input()\n public set searchResultsLimit(value: number) {\n this._searchResultsLimit = value;\n }\n\n public get searchResultsLimit(): number {\n if (this._searchResultsLimit) {\n return this._searchResultsLimit;\n } else {\n return this.enableShowMore ? 5 : this._searchResultsLimit;\n }\n }\n\n /**\n * @internal\n * Indicates whether to display a button that lets users add options to the data source.\n */\n @Input()\n public showAddButton = false;\n\n /**\n * Specifies the text to display when no search results are found.\n * @default \"No matches found\"\n */\n @Input()\n public noResultsFoundText: string;\n\n /**\n * @internal\n * Allows async search to be disabled even when a listener is specified for\n * the `searchAsync` output.\n */\n @Input()\n public searchAsyncDisabled = false;\n\n /**\n * @internal\n * Fires when users select the button to add options to the data source.\n */\n @Output()\n public addClick: EventEmitter<void> = new EventEmitter();\n\n /**\n * @internal\n * Fires when users select the button to view all options.\n */\n @Output()\n public showMoreClick: EventEmitter<SkyAutocompleteShowMoreArgs> = new EventEmitter();\n\n /**\n * Fires when users select items in the dropdown list.\n */\n @Output()\n public get selectionChange(): EventEmitter<SkyAutocompleteSelectionChange> {\n return this._selectionChange;\n }\n\n /**\n * Fires when users enter new search information and allows results to be\n * returned via an observable.\n */\n @Output()\n public searchAsync = new EventEmitter<SkyAutocompleteSearchAsyncArgs>();\n\n //#endregion\n\n //#region template_properties\n\n public get searchResults(): SkyAutocompleteSearchResult[] {\n return this._searchResults || [];\n }\n\n public get highlightText(): string[] {\n return this._highlightText || [];\n }\n\n public isOpen = false;\n\n public resultsListId: string;\n\n public resultsWrapperId: string;\n\n public searchText: string;\n\n public get showActionsArea(): boolean {\n return this.showAddButton || this.enableShowMore;\n }\n\n public isSearchingAsync = false;\n\n public searchResultsCount: number | undefined;\n\n //#endregion\n\n @ViewChild('defaultSearchResultTemplate', {\n read: TemplateRef,\n static: false,\n })\n private defaultSearchResultTemplate: TemplateRef<any>;\n\n @ContentChild(SkyAutocompleteInputDirective)\n private set inputDirective(directive: SkyAutocompleteInputDirective) {\n if (this._inputDirective !== directive) {\n if (!directive) {\n throw Error(\n [\n 'The SkyAutocompleteComponent requires a ContentChild input or',\n 'textarea bound with the SkyAutocomplete directive. For example:',\n '`<input type=\"text\" skyAutocomplete>`.',\n ].join(' ')\n );\n }\n\n // Unsubscribe from old subscriptions on any previous input directive\n this.inputDirectiveUnsubscribe.next();\n\n this._inputDirective = directive;\n\n this._inputDirective.displayWith = this.descriptorProperty;\n\n this._inputDirective.textChanges\n .pipe(\n takeUntil(this.inputDirectiveUnsubscribe),\n debounceTime(this.debounceTime),\n switchMap((change) => {\n this.isSearchingAsync = true;\n return of(change);\n })\n )\n .subscribe((change) => {\n this.searchTextChanged(change.value);\n });\n\n this._inputDirective.blur\n .pipe(takeUntil(this.inputDirectiveUnsubscribe))\n .subscribe(() => {\n this.inputDirective.onTouched();\n });\n\n this._inputDirective.focus\n .pipe(takeUntil(this.inputDirectiveUnsubscribe))\n .subscribe(() => {\n if (this.showActionsArea) {\n this.openDropdown();\n }\n });\n }\n }\n\n private get inputDirective(): SkyAutocompleteInputDirective {\n return this._inputDirective;\n }\n\n @ViewChild('resultsTemplateRef', {\n read: TemplateRef,\n })\n private resultsTemplateRef: TemplateRef<any>;\n\n @ViewChild('resultsRef', {\n read: ElementRef,\n })\n private set resultsRef(value: ElementRef) {\n if (value) {\n this._resultsRef = value;\n this.destroyAffixer();\n this.createAffixer();\n }\n }\n\n private get resultsRef(): ElementRef {\n return this._resultsRef;\n }\n\n /**\n * Index that indicates which descendant of the overlay currently has focus.\n */\n private activeElementIndex = -1;\n\n private affixer: SkyAffixer;\n\n private inputDirectiveUnsubscribe = new Subject();\n\n private messageStreamSub: Subscription;\n\n private ngUnsubscribe = new Subject();\n\n private overlay: SkyOverlayInstance;\n\n /**\n * Elements within the autocomplete dropdown that are focusable.\n * These are typically the search results and action buttons, but could also be\n * elements provided in the consumer's own template.\n */\n private overlayFocusableElements: HTMLElement[] = [];\n\n private currentSearchSub: Subscription;\n\n private _data: any[];\n private _debounceTime: number;\n private _descriptorProperty: string;\n private _highlightText: string[];\n private _inputDirective: SkyAutocompleteInputDirective;\n private _messageStream: Subject<SkyAutocompleteMessage>;\n private _propertiesToSearch: string[];\n private _resultsRef: ElementRef;\n private _search: SkyAutocompleteSearchFunction;\n private _searchResults: SkyAutocompleteSearchResult[];\n private _searchResultTemplate: TemplateRef<any>;\n private _searchResultsLimit: number;\n private _searchTextMinimumCharacters: number;\n private _selectionChange = new EventEmitter<SkyAutocompleteSelectionChange>();\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n private elementRef: ElementRef,\n private affixService: SkyAffixService,\n private adapterService: SkyAutocompleteAdapterService,\n private overlayService: SkyOverlayService,\n @Optional() private inputBoxHostSvc?: SkyInputBoxHostService\n ) {\n const id = ++uniqueId;\n this.resultsListId = `sky-autocomplete-list-${id}`;\n this.resultsWrapperId = `sky-autocomplete-wrapper-${id}`;\n }\n\n public ngAfterContentInit(): void {\n if (!this.inputDirective) {\n throw Error(\n [\n 'The SkyAutocompleteComponent requires a ContentChild input or',\n 'textarea bound with the SkyAutocomplete directive. For example:',\n '`<input type=\"text\" skyAutocomplete>`.',\n ].join(' ')\n );\n }\n }\n\n public ngAfterViewInit(): void {\n this.addInputEventListeners();\n }\n\n public ngOnDestroy(): void {\n this.cancelCurrentSearch();\n this.inputDirectiveUnsubscribe.next();\n this.inputDirectiveUnsubscribe.complete();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.destroyAffixer();\n this.destroyOverlay();\n }\n\n public addButtonClicked(): void {\n this.addClick.emit();\n this.inputDirective.restoreInputTextValueToPreviousState();\n this.closeDropdown();\n }\n\n public handleKeydown(event: KeyboardEvent): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (event.key) {\n const key = event.key.toLowerCase();\n const activeElement = this.getActiveElement();\n const activeElementId = activeElement?.id;\n const targetIsSearchResult = this.searchResults.find(\n (r) => r.elementId === activeElementId\n );\n\n /* tslint:disable-next-line:switch-default */\n switch (key) {\n case 'enter':\n if (targetIsSearchResult) {\n this.selectSearchResultById(activeElementId);\n\n if (!this.showActionsArea) {\n this.closeDropdown();\n } else {\n this.resetSearch();\n }\n } else {\n if (activeElement) {\n activeElement.click();\n }\n }\n\n event.preventDefault();\n event.stopPropagation();\n break;\n\n case 'tab':\n if (targetIsSearchResult) {\n this.selectSearchResultById(activeElementId);\n } else {\n this.inputDirective.restoreInputTextValueToPreviousState();\n }\n\n this.closeDropdown();\n break;\n\n case 'escape':\n this.closeDropdown();\n break;\n\n case 'arrowdown':\n case 'down':\n this.removeFocusedClass();\n if (\n this.activeElementIndex ===\n this.overlayFocusableElements.length - 1 ||\n this.activeElementIndex === -1\n ) {\n this.activeElementIndex = 0;\n } else {\n this.activeElementIndex = this.activeElementIndex + 1;\n }\n this.addFocusedClass();\n this.changeDetector.markForCheck();\n event.preventDefault();\n event.stopPropagation();\n break;\n\n case 'arrowup':\n case 'up':\n this.removeFocusedClass();\n if (this.activeElementIndex <= 0) {\n this.activeElementIndex = this.overlayFocusableElements.length - 1;\n } else {\n this.activeElementIndex = this.activeElementIndex - 1;\n }\n this.addFocusedClass();\n this.changeDetector.markForCheck();\n event.preventDefault();\n event.stopPropagation();\n break;\n }\n }\n }\n\n public moreButtonClicked(): void {\n this.showMoreClick.emit({ inputValue: this.searchText });\n this.inputDirective.restoreInputTextValueToPreviousState();\n this.closeDropdown();\n }\n\n public onResultMouseDown(id: string, event: MouseEvent): void {\n this.selectSearchResultById(id);\n\n if (!this.showActionsArea) {\n this.closeDropdown();\n } else {\n this.resetSearch();\n }\n\n event.preventDefault();\n event.stopPropagation();\n }\n\n public onResultMouseMove(id: number): void {\n if (id !== this.activeElementIndex) {\n this.removeFocusedClass();\n this.activeElementIndex = id;\n this.addFocusedClass();\n this.changeDetector.markForCheck();\n }\n }\n\n public isElementFocused(ref: HTMLElement): boolean {\n return ref === this.overlayFocusableElements[this.activeElementIndex];\n }\n\n private searchTextChanged(searchText: string): void {\n const isEmpty =\n !searchText || !searchText.trim() || searchText.match(/^\\s+$/);\n\n if (isEmpty) {\n // Emit selectionChange if value has been cleared.\n if (this.inputDirective.value) {\n this.inputDirective.value = undefined;\n this.selectionChange.emit({\n selectedItem: undefined,\n });\n }\n\n if (!this.showActionsArea) {\n this.closeDropdown();\n } else {\n this.resetSearch();\n }\n\n this.isSearchingAsync = false;\n this.changeDetector.markForCheck();\n\n return;\n }\n\n const isLongEnough = searchText.length >= this.searchTextMinimumCharacters;\n const isDifferent = searchText !== this.searchText;\n\n this.searchText = searchText.trim();\n\n if (isLongEnough && isDifferent) {\n this.cancelCurrentSearch();\n\n this.currentSearchSub = this.performSearch()\n .pipe(take(1))\n .subscribe((result) => {\n const items = result.items.filter((item: never) => {\n return item && this.descriptorProperty in item;\n });\n\n this.isSearchingAsync = false;\n\n this._searchResults = items.map((r, i) => {\n const result: SkyAutocompleteSearchResult = {\n elementId: `${this.resultsListId}-item-${i}`,\n data: r,\n };\n return result;\n });\n\n this.searchResultsCount = result.totalCount;\n\n this._highlightText = this.getHighlightText(this.searchText);\n this.removeFocusedClass();\n this.removeActiveDescendant();\n if (this.searchResults.length > 0) {\n this.activeElementIndex = 0;\n } else {\n this.activeElementIndex = -1;\n }\n\n this.changeDetector.markForCheck();\n\n if (this.isOpen) {\n // Let the results populate in the DOM before recalculating placement.\n setTimeout(() => {\n this.affixer.reaffix();\n this.changeDetector.detectChanges();\n this.initOverlayFocusableElements();\n });\n } else {\n this.openDropdown();\n this.changeDetector.markForCheck();\n }\n });\n } else {\n this.isSearchingAsync = false;\n this.changeDetector.markForCheck();\n }\n }\n\n private performSearch(): Observable<SkyAutocompleteSearchAsyncResult> {\n if (!this.searchAsyncDisabled && this.searchAsync.observers.length > 0) {\n const searchAsyncArgs: SkyAutocompleteSearchAsyncArgs = {\n displayType: 'popover',\n offset: 0,\n searchText: this.searchText,\n };\n\n this.searchAsync.emit(searchAsyncArgs);\n\n return searchAsyncArgs.result;\n }\n\n const result = this.search(this.searchText, this.data);\n\n if (result instanceof Array) {\n return of({\n items: result,\n totalCount: result.length,\n });\n }\n\n return from(result).pipe(\n map((items) => {\n return {\n items,\n totalCount: items.length,\n };\n })\n );\n }\n\n private cancelCurrentSearch(): void {\n if (this.currentSearchSub) {\n this.currentSearchSub.unsubscribe();\n this.currentSearchSub = undefined;\n }\n }\n\n /**\n * Returns the text to highlight based on exact matches, case-insensitive matches, and matches for corresponding diacritical characters (a will match à).\n */\n private getHighlightText(searchText: string): string[] {\n const normalizedSearchText = normalizeDiacritics(\n this.searchText\n ).toLocaleUpperCase();\n\n let matchesToHighlight: string[] = [];\n for (let i = 0, n = this._searchResults.length; i < n; i++) {\n const value = this._searchResults[i].data[this.descriptorProperty]\n .toString()\n .toLocaleUpperCase() as string;\n const normalizedDataValue = normalizeDiacritics(value);\n\n let offset = 0;\n let index: number;\n while (\n (index = normalizedDataValue.indexOf(normalizedSearchText, offset)) > -1\n ) {\n const matchedString = value.slice(index, index + searchText.length);\n offset = index + searchText.length;\n matchesToHighlight = matchesToHighlight.concat(matchedString);\n }\n }\n\n // Remove any duplicates from the array.\n return [...new Set(matchesToHighlight)];\n }\n\n private selectSearchResultById(id: string): void {\n const result = this.searchResults.find((r) => r.elementId === id).data;\n /* Sanity check */\n /* istanbul ignore else */\n if (result) {\n this.searchText = result[this.descriptorProperty];\n this.inputDirective.value = result;\n this.selectionChange.emit({\n selectedItem: result,\n });\n }\n }\n\n private openDropdown(): void {\n if (!this.overlay) {\n const overlay = this.overlayService.create({\n enableClose: false,\n enablePointerEvents: true,\n wrapperClass: this.wrapperClass,\n });\n\n overlay.attachTemplate(this.resultsTemplateRef);\n\n this.overlay = overlay;\n this.isOpen = true;\n this.changeDetector.markForCheck();\n this.initOverlayFocusableElements();\n\n overlay.backdropClick\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n /* Sanity check as you should not be able to active the directive from the backdrop */\n /* istanbul ignore else */\n if (document.activeElement !== this.inputDirective.inputElement) {\n this.inputDirective.restoreInputTextValueToPreviousState();\n this.closeDropdown();\n }\n });\n }\n }\n\n private closeDropdown(): void {\n this.resetSearch();\n this.isOpen = false;\n this.destroyOverlay();\n this.removeActiveDescendant();\n this.changeDetector.markForCheck();\n }\n\n private setActiveDescendant(): void {\n const activeElement =\n this.overlayFocusableElements[this.activeElementIndex];\n /* Sanity check */\n /* istanbul ignore else */\n if (activeElement) {\n this.inputDirective.setActiveDescendant(activeElement.id);\n }\n }\n\n private removeActiveDescendant(): void {\n /* tslint:disable-next-line:no-null-keyword */\n this.inputDirective.setActiveDescendant(null);\n }\n\n private resetSearch(): void {\n this._searchResults = [];\n this.searchText = '';\n this._highlightText = [];\n this.activeElementIndex = -1;\n this.searchResultsCount = undefined;\n this.removeActiveDescendant();\n this.initOverlayFocusableElements();\n this.changeDetector.markForCheck();\n }\n\n private addInputEventListeners(): void {\n const element = this.elementRef.nativeElement;\n\n observableFromEvent(element, 'keydown')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((event: KeyboardEvent) => {\n this.handleKeydown(event);\n });\n\n observableFromEvent(window, 'resize')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n /* istanbul ignore else */\n if (this.isOpen) {\n this.adapterService.setDropdownWidth(\n this.elementRef,\n this.resultsRef,\n !!this.inputBoxHostSvc\n );\n }\n });\n }\n\n private destroyOverlay(): void {\n if (this.overlay) {\n this.overlayService.close(this.overlay);\n this.overlay = undefined;\n }\n }\n\n private createAffixer(): void {\n /* Sanity check */\n /* istanbul ignore else */\n if (!this.affixer) {\n const affixer = this.affixService.createAffixer(this.resultsRef);\n\n this.adapterService.setDropdownWidth(\n this.elementRef,\n this.resultsRef,\n !!this.inputBoxHostSvc\n );\n\n affixer.affixTo(this.elementRef.nativeElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n enableAutoFit: true,\n isSticky: true,\n placement: 'below',\n horizontalAlignment: 'left',\n });\n\n this.affixer = affixer;\n }\n }\n\n private destroyAffixer(): void {\n if (this.affixer) {\n this.affixer.destroy();\n this.affixer = undefined;\n }\n }\n\n private initMessageStream(): void {\n /* istanbul ignore if */\n if (this.messageStreamSub) {\n this.messageStreamSub.unsubscribe();\n }\n\n if (this.messageStream) {\n this.messageStreamSub = this.messageStream\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((message: SkyAutocompleteMessage) => {\n /* tslint:disable-next-line:switch-default */\n switch (message.type) {\n case SkyAutocompleteMessageType.CloseDropdown:\n this.closeDropdown();\n break;\n case SkyAutocompleteMessageType.RepositionDropdown:\n // Settimeout waits for changes in DOM (e.g., tokens being removed)\n setTimeout(() => {\n /* istanbul ignore else */\n if (this.affixer) {\n this.affixer.reaffix();\n }\n });\n break;\n }\n });\n }\n }\n\n private initOverlayFocusableElements(): void {\n // Wait for dropdown elements to render.\n setTimeout(() => {\n if (this.overlay) {\n this.overlayFocusableElements =\n this.adapterService.getOverlayFocusableElements(this.overlay);\n this.overlayFocusableElements.forEach((el) => {\n this.adapterService.setTabIndex(el, -1);\n });\n this.addFocusedClass();\n }\n });\n }\n\n private getActiveElement(): HTMLElement {\n return this.overlayFocusableElements[this.activeElementIndex];\n }\n\n private removeFocusedClass(): void {\n if (this.activeElementIndex > -1) {\n this.adapterService.removeCSSClass(\n this.overlayFocusableElements[this.activeElementIndex],\n 'sky-autocomplete-descendant-focus'\n );\n }\n }\n\n private addFocusedClass(): void {\n if (this.activeElementIndex > -1) {\n this.adapterService.addCSSClass(\n this.overlayFocusableElements[this.activeElementIndex],\n 'sky-autocomplete-descendant-focus'\n );\n this.setActiveDescendant();\n }\n }\n}\n","<div\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n class=\"sky-autocomplete\"\n role=\"combobox\"\n [attr.aria-expanded]=\"isOpen && searchText\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-owns]=\"isOpen ? resultsListId : null\"\n [attr.id]=\"resultsWrapperId\"\n>\n <ng-content></ng-content>\n</div>\n\n<ng-template #resultsTemplateRef>\n <div\n class=\"sky-autocomplete-results-container\"\n [skyThemeClass]=\"{\n 'sky-shadow': 'default',\n 'sky-elevation-4': 'modern'\n }\"\n (keydown)=\"handleKeydown($event)\"\n #resultsRef\n >\n <div\n *ngIf=\"isSearchingAsync; else resultControlsTemplateRef\"\n class=\"sky-autocomplete-results-waiting\"\n >\n <sky-wait [isWaiting]=\"true\"></sky-wait>\n </div>\n </div>\n</ng-template>\n\n<ng-template #resultControlsTemplateRef>\n <div\n *ngIf=\"searchText && (!showActionsArea || searchResults.length > 0)\"\n class=\"sky-autocomplete-results\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.id]=\"resultsListId\"\n >\n <ng-container *ngFor=\"let result of searchResults; let i = index\">\n <div\n *ngIf=\"!searchResultsLimit || i < searchResultsLimit\"\n class=\"sky-autocomplete-result\"\n role=\"option\"\n tabindex=\"0\"\n [attr.aria-selected]=\"isElementFocused(searchResultEl)\"\n [attr.id]=\"result.elementId\"\n [skyHighlight]=\"highlightText\"\n (mousedown)=\"onResultMouseDown(result.elementId, $event)\"\n (mousemove)=\"onResultMouseMove(i)\"\n #searchResultEl\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchResultTemplate;\n context: { item: result.data }\n \"\n >\n </ng-container>\n </div>\n </ng-container>\n <div\n *ngIf=\"searchResults.length === 0\"\n class=\"sky-deemphasized sky-padding-squish-default\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n </div>\n <div *ngIf=\"showActionsArea\" class=\"sky-autocomplete-actions\">\n <button\n *ngIf=\"enableShowMore && (!searchText || searchResults.length > 0)\"\n class=\"\n sky-autocomplete-action\n sky-autocomplete-action-more\n sky-btn\n sky-btn-link\n \"\n type=\"button\"\n (click)=\"moreButtonClicked()\"\n >\n <ng-container\n *ngIf=\"\n !(\n searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled\n ) &&\n searchResults.length === 0 &&\n !searchText\n \"\n >\n {{ 'skyux_autocomplete_show_all' | skyLibResources }}\n </ng-container>\n <ng-container\n *ngIf=\"\n (searchAsync\n | skyAutocompleteSearchAsyncDisabled: searchAsyncDisabled) &&\n !searchText\n \"\n >\n {{\n 'skyux_autocomplete_show_all_count'\n | skyLibResources: (data.length | skyNumeric: { truncate: false })\n }}\n </ng-container>\n <ng-container *ngIf=\"searchText\">\n {{\n 'skyux_autocomplete_show_matches_count'\n | skyLibResources\n : (searchResultsCount === undefined\n ? data.length\n : (searchResultsCount | skyNumeric: { truncate: false }))\n }}\n </ng-container>\n </button>\n <div\n *ngIf=\"searchText && searchResults.length === 0\"\n class=\"sky-font-deemphasized sky-autocomplete-actions-no-results\"\n >\n {{\n noResultsFoundText ||\n ('skyux_autocomplete_no_results' | skyLibResources)\n }}\n </div>\n <button\n *ngIf=\"showAddButton\"\n class=\"\n sky-autocomplete-action sky-autocomplete-action-add sky-btn sky-btn-link\n \"\n tabindex=\"0\"\n type=\"button\"\n [class.focused]=\"isElementFocused(addButtonEl)\"\n (click)=\"addButtonClicked()\"\n #addButtonEl\n >\n <sky-icon *skyThemeIf=\"'modern'\" icon=\"add\" iconType=\"skyux\"></sky-icon>\n <sky-icon *skyThemeIf=\"'default'\" icon=\"plus-circle\"></sky-icon>\n {{ 'skyux_autocomplete_add' | skyLibResources }}\n </button>\n </div>\n</ng-template>\n\n<ng-template let-item=\"item\" #defaultSearchResultTemplate>\n {{ item[descriptorProperty] }}\n</ng-template>\n"]}
@@ -47,9 +47,9 @@ export class SkyCountryFieldComponent {
47
47
  this._disabled = false;
48
48
  this._includePhoneInfo = false;
49
49
  // Angular automatically constructs these methods.
50
- /* istanbul ignore next */
50
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
51
51
  this.onChange = (value) => { };
52
- /* istanbul ignore next */
52
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
53
53
  this.onTouched = () => { };
54
54
  this.setupCountries();
55
55
  this.countrySearchFormControl = new FormControl();
@@ -1 +1 @@
1
- {"version":3,"file":"country-field.component.js","sourceRoot":"","sources":["../../../../../../../../libs/components/lookup/src/lib/modules/country-field/country-field.component.ts","../../../../../../../../libs/components/lookup/src/lib/modules/country-field/country-field.component.html"],"names":[],"mappings":"AAAA,OAAO,EAEL,uBAAuB,EACvB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,KAAK,EAGL,QAAQ,EACR,MAAM,EACN,WAAW,EAEX,SAAS,EACT,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,OAAO,EAGL,WAAW,EACX,aAAa,EACb,SAAS,EACT,OAAO,GAGR,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;;;;;;;;;;;AAK7F,sDAAsD;AACtD,MAAM,2BAA2B,GAAG;IAClC,OAAO,EAAE,aAAa;IACtB,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC;IACvD,KAAK,EAAE,IAAI;CACZ,CAAC;AAEF,gBAAgB;AAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;AASjB,MAAM,OAAO,wBAAwB;IA0MnC,YACU,cAAiC,EACjC,KAAiB,EACjB,SAA0B,EAC1B,QAAkB,EACP,eAAwC,EACvC,QAA0B;QALtC,mBAAc,GAAd,cAAc,CAAmB;QACjC,UAAK,GAAL,KAAK,CAAY;QACjB,cAAS,GAAT,SAAS,CAAiB;QAC1B,aAAQ,GAAR,QAAQ,CAAU;QACP,oBAAe,GAAf,eAAe,CAAyB;QACvC,aAAQ,GAAR,QAAQ,CAAkB;QAjHhD;;WAEG;QAEI,0BAAqB,GAAyC,IAAI,YAAY,EAA0B,CAAC;QAMzG,mBAAc,GAAG,KAAK,CAAC;QAEvB,gCAA2B,GAAG,CAAC,CAAC;QAyDhC,iBAAY,GAAG,SAAS,CAAC;QAkBxB,SAAI,GAAiB,IAAI,OAAO,EAAE,CAAC;QAEnC,uBAAkB,GAAG,KAAK,CAAC;QAE3B,oBAAe,GAAG,IAAI,CAAC;QAIvB,kBAAa,GAAG,IAAI,OAAO,EAAE,CAAC;QAI9B,cAAS,GAAG,KAAK,CAAC;QAElB,sBAAiB,GAAG,KAAK,CAAC;QA6GlC,kDAAkD;QAClD,0BAA0B;QACnB,aAAQ,GAAa,CAAC,KAA6B,EAAE,EAAE,GAAE,CAAC,CAAC;QAElE,0BAA0B;QACnB,cAAS,GAAa,GAAG,EAAE,GAAE,CAAC,CAAC;QApGpC,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,wBAAwB,GAAG,IAAI,WAAW,EAAE,CAAC;IACpD,CAAC;IA3MD;;;;;OAKG;IACH,IACW,cAAc,CAAC,KAAa;QACrC,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE;YAClC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YAE3C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAC3C,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,CACnD,CAAC;YAEF,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAChE;IACH,CAAC;IAED,IAAW,cAAc;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,IACW,QAAQ,CAAC,UAAmB;QACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,CAAC,UAAU,EAAE;YACf,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;QAED,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC;QAE5B,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IASD;;;OAGG;IACH,IACW,gBAAgB,CAAC,gBAAyB;QACnD,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QAE1C,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,IAAW,gBAAgB;QACzB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,IACW,oBAAoB,CAAC,KAAe;QAC7C,uCAAuC;QACvC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;SAC3C;QAED,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,IAAW,oBAAoB;QAC7B,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAmBD,IAAW,eAAe,CAAC,UAAkC;QAC3D,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,EAAE;YAC7D,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE;gBACjC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACpC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAC9C,CAAC;gBAEF,IAAI,UAAU,EAAE;oBACd,UAAU,GAAG,UAAU,CAAC;iBACzB;aACF;YAED,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;YAEnC,IAAI,CAAC,mCAAmC,CAAC,UAAU,CAAC,CAAC;YAErD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAE7D,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBACzB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC1B,IAAI,CAAC,SAAS,EAAE,CAAC;gBAEjB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAC7C;YAED,mCAAmC;YACnC,kDAAkD;YAClD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;gBACpE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;aACzC;YAED,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAE7B;;;;;eAKG;SACJ;aAAM,IACL,IAAI,CAAC,eAAe;YACpB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,YAAY,OAAO,CAAC,IAAI,UAAU,KAAK,IAAI,CAAC,EAC7D;YACA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;SAC9B;IACH,CAAC;IAED,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAqDD;;;OAGG;IACI,QAAQ;QACb,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,4CAA4C;QAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAChC,SAAuC,EACvC,IAAI,CACL,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,2BAA2B,QAAQ,EAAE,EAAE,CAAC;QAEvD,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;SACrC;aAAM;YACL;;;eAGG;YACH,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;SAC9B;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;SAC5B;QAED,IAAI,CAAC,wBAAwB,CAAC,YAAY;aACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aACnC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;YACtB,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBACxC,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;aACjC;QACH,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;IACH,CAAC;IAEM,eAAe;QACpB,0BAA0B;QAC1B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;gBAChD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;gBACtD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;YACrC,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED;;;OAGG;IACI,WAAW;QAChB,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED;;;OAGG;IACI,kBAAkB;QACvB,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACI,iBAAiB,CAAC,UAA0C;QACjE,IAAI,UAAU,CAAC,YAAY,EAAE;YAC3B,IAAI,CAAC,UAAU,CACb,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,CAAC,YAAY,CAAC,IAAI,CACnE,CACF,CAAC;SACH;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;SAC5B;IACH,CAAC;IASM,gBAAgB,CAAC,EAAwB;QAC9C,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAEM,iBAAiB,CAAC,EAAc;QACrC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,uCAAuC;IAChC,gBAAgB,CAAC,QAAiB;QACvC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAEM,QAAQ,CAAC,OAAwB;QACtC,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IACE,CAAC,IAAI,CAAC,oBAAoB;gBACxB,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC;gBACpC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC5D,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EACtE;gBACA,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;aACrC;SACF;QACD,OAAO;IACT,CAAC;IAEM,UAAU,CAAC,KAA6B;QAC7C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;QAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC;QAEzD,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;aAChC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC1B,SAAS,CAAC,CAAC,KAAiB,EAAE,EAAE;YAC/B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACtE,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;QAEL,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC;aAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC1B,SAAS,CAAC,CAAC,KAAoB,EAAE,EAAE;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACtE,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,iBAAiB,CACvB,QAAgC,EAChC,QAAgC;QAEhC,IAAI,QAAQ,IAAI,QAAQ,EAAE;YACxB,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;SACxC;QAED,uFAAuF;QACvF,2FAA2F;QAC3F,2CAA2C;QAC3C,OAAO,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC;IAChC,CAAC;IAEO,cAAc,CACpB,CAAyB,EACzB,CAAyB;QAEzB,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC;IAChD,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IACvB,CAAC;IAEO,cAAc;;QACpB;;;;;;WAMG;QACH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CACzB,IAAI,CAAC,SAAS,CAAE,MAAc,CAAC,mBAAmB,CAAC,cAAc,EAAE,CAAC,CACrE,CAAC;QAEF,sEAAsE;QACtE,uBAAuB;QACvB,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;YAC3D,IACE,MAAA,MACE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAC1B,0CAAE,SAAS,0CAAE,QAAQ,CAAC,gCAAgC,CAAC,EACxD;gBACA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC7B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;aACrC;SACF;QAED,0BAA0B;QAC1B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B;;;eAGG;YACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAY,EAAE,EAAE;gBACtC,OAAO,OAAO,CAAC,QAAQ,CAAC;gBACxB,OAAO,OAAO,CAAC,SAAS,CAAC;gBACzB,OAAO,OAAO,CAAC,QAAQ,CAAC;YAC1B,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAE/D,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;YACrE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CACpC,CAAC,OAA+B,EAAE,EAAE;gBAClC,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9D,CAAC,CACF,CAAC;SACH;IACH,CAAC;IAEO,mCAAmC,CACzC,eAAuC;QAEvC,IAAI,oBAA4B,CAAC;QACjC,IAAI,mBAA2C,CAAC;QAEhD,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACtD,IACE,CAAC,CAAC,IAAI,CAAC,kBAAkB;gBACvB,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAChD,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;gBAClB,CAAC,CAAC,IAAI,CAAC,kBAAkB;oBACvB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EACnD;gBACA,OAAO,CAAC,CAAC,CAAC;aACX;iBAAM;gBACL,OAAO,CAAC,CAAC;aACV;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,eAAe,EAAE;YACnB,0FAA0F;YAC1F,mFAAmF;YACnF,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACvC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,CAAC,iBAAiB,EAAE,CACvE,CAAC;YACF,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAEnE,IAAI,oBAAoB,IAAI,CAAC,EAAE;gBAC7B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;gBAC/C,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC;aACtD;SACF;QAED,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC;IACtC,CAAC;IAEO,cAAc;QACpB,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;gBAC5B,aAAa,EAAE,IAAI,CAAC,gBAAgB;gBACpC,kBAAkB,EAChB,IAAI,CAAC,YAAY,KAAK,QAAQ;oBAC5B,CAAC,CAAC,IAAI,CAAC,qBAAqB;oBAC5B,CAAC,CAAC,SAAS;aAChB,CAAC,CAAC;SACJ;IACH,CAAC;;sHAxeU,wBAAwB;0GAAxB,wBAAwB,qWAHxB,CAAC,2BAA2B,CAAC,8FAgH7B,6BAA6B,kIA4DhC,WAAW,uIAMX,WAAW,2CCzOrB,8/EA8EA;4FDpBa,wBAAwB;kBAPpC,SAAS;mBAAC;oBACT,QAAQ,EAAE,mBAAmB;oBAC7B,WAAW,EAAE,gCAAgC;oBAC7C,SAAS,EAAE,CAAC,gCAAgC,CAAC;oBAC7C,SAAS,EAAE,CAAC,2BAA2B,CAAC;oBACxC,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD;;0BAgNI,QAAQ;;0BACR,QAAQ;4CAxMJ,qBAAqB;sBAD3B,KAAK;gBAUK,cAAc;sBADxB,KAAK;gBAsBK,QAAQ;sBADlB,KAAK;gBAsBC,uBAAuB;sBAD7B,KAAK;gBAQK,gBAAgB;sBAD1B,KAAK;gBAgBK,oBAAoB;sBAD9B,KAAK;gBAmBC,qBAAqB;sBAD3B,MAAM;gBAYA,kCAAkC;sBADxC,SAAS;uBAAC,6BAA6B;gBA+DhC,gBAAgB;sBAJvB,SAAS;uBAAC,kBAAkB,EAAE;wBAC7B,IAAI,EAAE,WAAW;wBACjB,MAAM,EAAE,IAAI;qBACb;gBAOO,qBAAqB;sBAJ5B,SAAS;uBAAC,uBAAuB,EAAE;wBAClC,IAAI,EAAE,WAAW;wBACjB,MAAM,EAAE,IAAI;qBACb","sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n Type,\n ViewChild,\n forwardRef,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n NG_VALIDATORS,\n NgControl,\n NgModel,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SkyAppWindowRef } from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport 'intl-tel-input';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyAutocompleteInputDirective } from '../autocomplete/autocomplete-input.directive';\nimport { SkyAutocompleteSelectionChange } from '../autocomplete/types/autocomplete-selection-change';\n\nimport { SkyCountryFieldCountry } from './types/country';\n\n// tslint:disable:no-forward-ref no-use-before-declare\nconst SKY_COUNTRY_FIELD_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyCountryFieldComponent),\n multi: true,\n};\n\n// tslint:enable\nlet uniqueId = 0;\n\n@Component({\n selector: 'sky-country-field',\n templateUrl: './country-field.component.html',\n styleUrls: ['./country-field.component.scss'],\n providers: [SKY_COUNTRY_FIELD_VALIDATOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyCountryFieldComponent\n implements AfterViewInit, ControlValueAccessor, OnDestroy, OnInit, Validator\n{\n /**\n * Specifies the value for the `autocomplete` attribute on the form input.\n * @default \"off\"\n */\n @Input()\n public autocompleteAttribute: string;\n\n /**\n * Specifies the [International Organization for Standardization Alpha 2](https://www.nationsonline.org/oneworld/country_code_list.htm)\n * country code for the default country.\n * When search results include the default country, it appears at the top of the list.\n * @default \"us\"\n */\n @Input()\n public set defaultCountry(value: string) {\n if (value !== this._defaultCountry) {\n this._defaultCountry = value.toLowerCase();\n\n this.defaultCountryData = this.countries.find(\n (country) => country.iso2 === this._defaultCountry\n );\n\n this.sortCountriesWithSelectedAndDefault(this.selectedCountry);\n }\n }\n\n public get defaultCountry(): string {\n return this._defaultCountry;\n }\n\n /**\n * Indicates whether to disable the country field.\n * @default false\n */\n @Input()\n public set disabled(isDisabled: boolean) {\n this.removeEventListeners();\n\n if (!isDisabled) {\n this.addEventListeners();\n }\n\n this._disabled = isDisabled;\n\n this.changeDetector.markForCheck();\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n /**\n * Indicates whether to hide the flag in the input element.\n * @default false\n */\n @Input()\n public hideSelectedCountryFlag: boolean;\n\n /**\n * Indicates whether to include phone information in the selected country and country dropdown.\n * @default false\n */\n @Input()\n public set includePhoneInfo(includePhoneInfo: boolean) {\n this._includePhoneInfo = includePhoneInfo;\n\n this.setupCountries();\n }\n\n public get includePhoneInfo(): boolean {\n return this._includePhoneInfo;\n }\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 set supportedCountryISOs(value: string[]) {\n // Ensure all values are the same case.\n if (Array.isArray(value)) {\n value = value.map((v) => v.toLowerCase());\n }\n\n this._supportedCountryISOs = value;\n this.setupCountries();\n }\n\n public get supportedCountryISOs(): string[] {\n return this._supportedCountryISOs;\n }\n\n /**\n * Fires when the selected country changes.\n */\n @Output()\n public selectedCountryChange: EventEmitter<SkyCountryFieldCountry> = new EventEmitter<SkyCountryFieldCountry>();\n\n public countries: SkyCountryFieldCountry[];\n\n public countrySearchFormControl: FormControl;\n\n public isInputFocused = false;\n\n public searchTextMinimumCharacters = 2;\n\n @ViewChild(SkyAutocompleteInputDirective)\n public countrySearchAutocompleteDirective: SkyAutocompleteInputDirective;\n\n public set selectedCountry(newCountry: SkyCountryFieldCountry) {\n if (!this.countriesAreEqual(this.selectedCountry, newCountry)) {\n if (newCountry && newCountry.iso2) {\n const isoCountry = this.countries.find(\n (country) => country.iso2 === newCountry.iso2\n );\n\n if (isoCountry) {\n newCountry = isoCountry;\n }\n }\n\n this._selectedCountry = newCountry;\n\n this.sortCountriesWithSelectedAndDefault(newCountry);\n\n this.internalFormChange = true;\n this.countrySearchFormControl.setValue(this.selectedCountry);\n\n if (!this.isInitialChange) {\n this.onChange(newCountry);\n this.onTouched();\n\n this.selectedCountryChange.emit(newCountry);\n }\n\n // Do not mark the field as \"dirty\"\n // if the field has been initialized with a value.\n if (this.isInitialChange && this.ngControl && this.ngControl.control) {\n this.ngControl.control.markAsPristine();\n }\n\n this.isInitialChange = false;\n\n /**\n * The second portion of this if statement is complex. The control type check ensures that\n * we only watch for the initial time through this function on reactive forms. However,\n * template forms will send through `null` and then `undefined` on empty initialization\n * so we have to check for when the non-null pass through happens.\n */\n } else if (\n this.isInitialChange &&\n (!(this.ngControl instanceof NgModel) || newCountry !== null)\n ) {\n this.isInitialChange = false;\n }\n }\n\n public get selectedCountry(): SkyCountryFieldCountry {\n return this._selectedCountry;\n }\n\n public currentTheme = 'default';\n\n public inputId: string;\n\n @ViewChild('inputTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private inputTemplateRef: TemplateRef<any>;\n\n @ViewChild('searchIconTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private searchIconTemplateRef: TemplateRef<any>;\n\n private defaultCountryData: SkyCountryFieldCountry;\n\n private idle: Subject<any> = new Subject();\n\n private internalFormChange = false;\n\n private isInitialChange = true;\n\n private ngControl: NgControl;\n\n private ngUnsubscribe = new Subject();\n\n private _defaultCountry: string;\n\n private _disabled = false;\n\n private _includePhoneInfo = false;\n\n private _selectedCountry: SkyCountryFieldCountry;\n\n private _supportedCountryISOs: string[];\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n private elRef: ElementRef,\n private windowRef: SkyAppWindowRef,\n private injector: Injector,\n @Optional() public inputBoxHostSvc?: SkyInputBoxHostService,\n @Optional() private themeSvc?: SkyThemeService\n ) {\n this.setupCountries();\n\n this.countrySearchFormControl = new FormControl();\n }\n\n /**\n * Angular lifecycle hook for when the component is initialized\n * @internal\n */\n public ngOnInit(): void {\n this.updateInputBox();\n\n // tslint:disable-next-line: no-null-keyword\n this.ngControl = this.injector.get<NgControl>(\n NgControl as unknown as Type<NgControl>,\n null\n );\n\n this.inputId = `sky-country-field-input-${uniqueId++}`;\n\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n } else {\n /**\n * The initial change boolean is to determine if the form is setting the value. When no form\n * is present we don't want to ignore the first change.\n */\n this.isInitialChange = false;\n }\n\n if (!this.defaultCountry) {\n this.defaultCountry = 'us';\n }\n\n this.countrySearchFormControl.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((newValue) => {\n if (newValue && !this.internalFormChange) {\n this.selectedCountry = newValue;\n }\n });\n\n if (!this.disabled) {\n this.addEventListeners();\n }\n }\n\n public ngAfterViewInit(): void {\n /* istanbul ignore else */\n if (this.themeSvc) {\n this.themeSvc.settingsChange.subscribe((change) => {\n this.currentTheme = change.currentSettings.theme.name;\n this.updateInputBox();\n this.changeDetector.markForCheck();\n });\n }\n }\n\n /**\n * Angular lifecycle hook for when the compoennt is destructed.\n * @internal\n */\n public ngOnDestroy(): void {\n this.selectedCountryChange.complete();\n this.removeEventListeners();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n /**\n * Sets the component's touched value when the autocomplete is blurred\n * @internal\n */\n public onAutocompleteBlur(): void {\n this.onTouched();\n }\n\n /**\n * Sets the country to validate against based on the county's iso2 code.\n * @param newCountry The International Organization for Standardization's two-letter code\n * for the default country.\n * @internal\n */\n public onCountrySelected(newCountry: SkyAutocompleteSelectionChange): void {\n if (newCountry.selectedItem) {\n this.writeValue(\n this.countries.find(\n (countryInfo) => countryInfo.iso2 === newCountry.selectedItem.iso2\n )\n );\n } else {\n this.writeValue(undefined);\n }\n }\n\n // Angular automatically constructs these methods.\n /* istanbul ignore next */\n public onChange: Function = (value: SkyCountryFieldCountry) => {};\n\n /* istanbul ignore next */\n public onTouched: Function = () => {};\n\n public registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n // Allows Angular to disable the input.\n public setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n public validate(control: AbstractControl): ValidationErrors {\n if (control.value) {\n if (\n (this.supportedCountryISOs &&\n this.supportedCountryISOs.length > 0 &&\n this.supportedCountryISOs.indexOf(control.value.iso2) < 0) ||\n !this.countries.find((country) => country.iso2 === control.value.iso2)\n ) {\n return { unsupportedCountry: true };\n }\n }\n return;\n }\n\n public writeValue(value: SkyCountryFieldCountry): void {\n this.selectedCountry = value;\n this.changeDetector.markForCheck();\n }\n\n private addEventListeners(): void {\n this.removeEventListeners();\n\n this.idle = new Subject();\n\n const documentObj = this.windowRef.nativeWindow.document;\n\n fromEvent(documentObj, 'mousedown')\n .pipe(takeUntil(this.idle))\n .subscribe((event: MouseEvent) => {\n this.isInputFocused = this.elRef.nativeElement.contains(event.target);\n this.changeDetector.markForCheck();\n });\n\n fromEvent(documentObj, 'focusin')\n .pipe(takeUntil(this.idle))\n .subscribe((event: KeyboardEvent) => {\n this.isInputFocused = this.elRef.nativeElement.contains(event.target);\n this.changeDetector.markForCheck();\n });\n }\n\n private countriesAreEqual(\n country1: SkyCountryFieldCountry,\n country2: SkyCountryFieldCountry\n ): boolean {\n if (country1 && country2) {\n return country1.iso2 === country2.iso2;\n }\n\n // NOTE: We are doing this in this way because template forms will send through `null`\n // and then `undefined` on empty initialization. These are functionally equivalent but will\n // not pass a standard triple equals check.\n return !country1 && !country2;\n }\n\n private countriesEqual(\n a: SkyCountryFieldCountry,\n b: SkyCountryFieldCountry\n ): boolean {\n return a.iso2 === b.iso2 && a.name === b.name;\n }\n\n private removeEventListeners(): void {\n this.idle.next();\n this.idle.complete();\n }\n\n private setupCountries(): void {\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\n // Ignoring coverage here as this will be removed in the next release.\n // istanbul ignore next\n if (!this.includePhoneInfo && !this.hideSelectedCountryFlag) {\n if (\n (\n this.elRef.nativeElement.parentElement as HTMLElement\n )?.classList?.contains('sky-phone-field-country-search')\n ) {\n this.includePhoneInfo = true;\n this.hideSelectedCountryFlag = true;\n }\n }\n\n /* istanbul ignore else */\n if (!this.includePhoneInfo) {\n /**\n * The library we get the country data from includes extra phone properties.\n * We want to remove these unless we are in a phone field\n */\n this.countries.forEach((country: any) => {\n delete country.dialCode;\n delete country.areaCodes;\n delete country.priority;\n });\n }\n\n this.sortCountriesWithSelectedAndDefault(this.selectedCountry);\n\n if (this.supportedCountryISOs && this.supportedCountryISOs.length > 0) {\n this.countries = this.countries.filter(\n (country: SkyCountryFieldCountry) => {\n return this.supportedCountryISOs.indexOf(country.iso2) >= 0;\n }\n );\n }\n }\n\n private sortCountriesWithSelectedAndDefault(\n selectedCountry: SkyCountryFieldCountry\n ): void {\n let selectedCountryIndex: number;\n let selectedCountryData: SkyCountryFieldCountry;\n\n const sortedNewCountries = this.countries.sort((a, b) => {\n if (\n ((this.defaultCountryData &&\n this.countriesEqual(a, this.defaultCountryData)) ||\n a.name < b.name) &&\n (!this.defaultCountryData ||\n !this.countriesEqual(this.defaultCountryData, b))\n ) {\n return -1;\n } else {\n return 1;\n }\n });\n\n if (selectedCountry) {\n // Note: We are looking up this data here to ensure we are using the offical data from the\n // library and not the data provided by the user on initialization of the component\n selectedCountryData = this.countries.find(\n (country) => country.iso2 === selectedCountry.iso2.toLocaleLowerCase()\n );\n selectedCountryIndex = this.countries.indexOf(selectedCountryData);\n\n if (selectedCountryIndex >= 0) {\n this.countries.splice(selectedCountryIndex, 1);\n sortedNewCountries.splice(0, 0, selectedCountryData);\n }\n }\n\n this.countries = sortedNewCountries;\n }\n\n private updateInputBox(): void {\n if (this.inputBoxHostSvc) {\n this.inputBoxHostSvc.populate({\n inputTemplate: this.inputTemplateRef,\n iconsInsetTemplate:\n this.currentTheme === 'modern'\n ? this.searchIconTemplateRef\n : undefined,\n });\n }\n }\n}\n","<ng-container *ngIf=\"!inputBoxHostSvc\">\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\"></ng-container>\n</ng-container>\n\n<ng-template #inputTemplateRef>\n <span\n class=\"sky-country-field-container\"\n [ngClass]=\"{\n 'sky-country-field-disabled': disabled\n }\"\n >\n <sky-autocomplete\n [ariaLabelledBy]=\"inputId\"\n [data]=\"countries\"\n [propertiesToSearch]=\"['name', 'iso2']\"\n [searchResultTemplate]=\"countrySearchResultTemplate\"\n [searchTextMinimumCharacters]=\"searchTextMinimumCharacters\"\n (selectionChange)=\"onCountrySelected($event)\"\n >\n <div\n class=\"sky-country-field-input\"\n [ngClass]=\"{\n 'sky-country-field-input-with-flag':\n selectedCountry && selectedCountry.iso2 && !hideSelectedCountryFlag\n }\"\n >\n <div\n *ngIf=\"\n selectedCountry && selectedCountry.iso2 && !hideSelectedCountryFlag\n \"\n class=\"sky-country-field-flag\"\n >\n <div\n class=\"iti-flag\"\n [ngClass]=\"selectedCountry.iso2.toLowerCase()\"\n ></div>\n </div>\n <textarea\n class=\"sky-form-control\"\n name=\"selectedCountry\"\n rows=\"1\"\n skyAutocomplete\n [attr.aria-label]=\"\n 'skyux_country_field_search_placeholder' | skyLibResources\n \"\n [attr.disabled]=\"disabled ? true : undefined\"\n [attr.id]=\"inputId\"\n [autocompleteAttribute]=\"autocompleteAttribute\"\n [formControl]=\"countrySearchFormControl\"\n [placeholder]=\"\n currentTheme === 'default'\n ? ('skyux_country_field_search_placeholder' | skyLibResources)\n : ''\n \"\n (blur)=\"onAutocompleteBlur()\"\n ></textarea>\n </div>\n </sky-autocomplete>\n </span>\n</ng-template>\n\n<ng-template let-item=\"item\" #countrySearchResultTemplate>\n <div\n class=\"sky-country-field-search-result-flag\"\n [ngClass]=\"'iti-flag ' + item.iso2.toLowerCase()\"\n ></div>\n {{ item.name }}\n <span *ngIf=\"includePhoneInfo\" class=\"sky-deemphasized\">\n {{ item.dialCode }}\n </span>\n</ng-template>\n\n<!-- This template should only be used in modern theme input boxes. -->\n<ng-template #searchIconTemplateRef>\n <div class=\"sky-input-group-icon sky-input-box-icon-inset\">\n <sky-icon iconType=\"skyux\" icon=\"search\"></sky-icon>\n </div>\n</ng-template>\n"]}
1
+ {"version":3,"file":"country-field.component.js","sourceRoot":"","sources":["../../../../../../../../libs/components/lookup/src/lib/modules/country-field/country-field.component.ts","../../../../../../../../libs/components/lookup/src/lib/modules/country-field/country-field.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n TemplateRef,\n Type,\n ViewChild,\n forwardRef,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n NG_VALIDATORS,\n NgControl,\n NgModel,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { SkyAppWindowRef } from '@skyux/core';\nimport { SkyInputBoxHostService } from '@skyux/forms';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport 'intl-tel-input';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyAutocompleteInputDirective } from '../autocomplete/autocomplete-input.directive';\nimport { SkyAutocompleteSelectionChange } from '../autocomplete/types/autocomplete-selection-change';\n\nimport { SkyCountryFieldCountry } from './types/country';\n\n// tslint:disable:no-forward-ref no-use-before-declare\nconst SKY_COUNTRY_FIELD_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => SkyCountryFieldComponent),\n multi: true,\n};\n\n// tslint:enable\nlet uniqueId = 0;\n\n@Component({\n selector: 'sky-country-field',\n templateUrl: './country-field.component.html',\n styleUrls: ['./country-field.component.scss'],\n providers: [SKY_COUNTRY_FIELD_VALIDATOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyCountryFieldComponent\n implements AfterViewInit, ControlValueAccessor, OnDestroy, OnInit, Validator\n{\n /**\n * Specifies the value for the `autocomplete` attribute on the form input.\n * @default \"off\"\n */\n @Input()\n public autocompleteAttribute: string;\n\n /**\n * Specifies the [International Organization for Standardization Alpha 2](https://www.nationsonline.org/oneworld/country_code_list.htm)\n * country code for the default country.\n * When search results include the default country, it appears at the top of the list.\n * @default \"us\"\n */\n @Input()\n public set defaultCountry(value: string) {\n if (value !== this._defaultCountry) {\n this._defaultCountry = value.toLowerCase();\n\n this.defaultCountryData = this.countries.find(\n (country) => country.iso2 === this._defaultCountry\n );\n\n this.sortCountriesWithSelectedAndDefault(this.selectedCountry);\n }\n }\n\n public get defaultCountry(): string {\n return this._defaultCountry;\n }\n\n /**\n * Indicates whether to disable the country field.\n * @default false\n */\n @Input()\n public set disabled(isDisabled: boolean) {\n this.removeEventListeners();\n\n if (!isDisabled) {\n this.addEventListeners();\n }\n\n this._disabled = isDisabled;\n\n this.changeDetector.markForCheck();\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n /**\n * Indicates whether to hide the flag in the input element.\n * @default false\n */\n @Input()\n public hideSelectedCountryFlag: boolean;\n\n /**\n * Indicates whether to include phone information in the selected country and country dropdown.\n * @default false\n */\n @Input()\n public set includePhoneInfo(includePhoneInfo: boolean) {\n this._includePhoneInfo = includePhoneInfo;\n\n this.setupCountries();\n }\n\n public get includePhoneInfo(): boolean {\n return this._includePhoneInfo;\n }\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 set supportedCountryISOs(value: string[]) {\n // Ensure all values are the same case.\n if (Array.isArray(value)) {\n value = value.map((v) => v.toLowerCase());\n }\n\n this._supportedCountryISOs = value;\n this.setupCountries();\n }\n\n public get supportedCountryISOs(): string[] {\n return this._supportedCountryISOs;\n }\n\n /**\n * Fires when the selected country changes.\n */\n @Output()\n public selectedCountryChange: EventEmitter<SkyCountryFieldCountry> = new EventEmitter<SkyCountryFieldCountry>();\n\n public countries: SkyCountryFieldCountry[];\n\n public countrySearchFormControl: FormControl;\n\n public isInputFocused = false;\n\n public searchTextMinimumCharacters = 2;\n\n @ViewChild(SkyAutocompleteInputDirective)\n public countrySearchAutocompleteDirective: SkyAutocompleteInputDirective;\n\n public set selectedCountry(newCountry: SkyCountryFieldCountry) {\n if (!this.countriesAreEqual(this.selectedCountry, newCountry)) {\n if (newCountry && newCountry.iso2) {\n const isoCountry = this.countries.find(\n (country) => country.iso2 === newCountry.iso2\n );\n\n if (isoCountry) {\n newCountry = isoCountry;\n }\n }\n\n this._selectedCountry = newCountry;\n\n this.sortCountriesWithSelectedAndDefault(newCountry);\n\n this.internalFormChange = true;\n this.countrySearchFormControl.setValue(this.selectedCountry);\n\n if (!this.isInitialChange) {\n this.onChange(newCountry);\n this.onTouched();\n\n this.selectedCountryChange.emit(newCountry);\n }\n\n // Do not mark the field as \"dirty\"\n // if the field has been initialized with a value.\n if (this.isInitialChange && this.ngControl && this.ngControl.control) {\n this.ngControl.control.markAsPristine();\n }\n\n this.isInitialChange = false;\n\n /**\n * The second portion of this if statement is complex. The control type check ensures that\n * we only watch for the initial time through this function on reactive forms. However,\n * template forms will send through `null` and then `undefined` on empty initialization\n * so we have to check for when the non-null pass through happens.\n */\n } else if (\n this.isInitialChange &&\n (!(this.ngControl instanceof NgModel) || newCountry !== null)\n ) {\n this.isInitialChange = false;\n }\n }\n\n public get selectedCountry(): SkyCountryFieldCountry {\n return this._selectedCountry;\n }\n\n public currentTheme = 'default';\n\n public inputId: string;\n\n @ViewChild('inputTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private inputTemplateRef: TemplateRef<any>;\n\n @ViewChild('searchIconTemplateRef', {\n read: TemplateRef,\n static: true,\n })\n private searchIconTemplateRef: TemplateRef<any>;\n\n private defaultCountryData: SkyCountryFieldCountry;\n\n private idle: Subject<any> = new Subject();\n\n private internalFormChange = false;\n\n private isInitialChange = true;\n\n private ngControl: NgControl;\n\n private ngUnsubscribe = new Subject();\n\n private _defaultCountry: string;\n\n private _disabled = false;\n\n private _includePhoneInfo = false;\n\n private _selectedCountry: SkyCountryFieldCountry;\n\n private _supportedCountryISOs: string[];\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n private elRef: ElementRef,\n private windowRef: SkyAppWindowRef,\n private injector: Injector,\n @Optional() public inputBoxHostSvc?: SkyInputBoxHostService,\n @Optional() private themeSvc?: SkyThemeService\n ) {\n this.setupCountries();\n\n this.countrySearchFormControl = new FormControl();\n }\n\n /**\n * Angular lifecycle hook for when the component is initialized\n * @internal\n */\n public ngOnInit(): void {\n this.updateInputBox();\n\n // tslint:disable-next-line: no-null-keyword\n this.ngControl = this.injector.get<NgControl>(\n NgControl as unknown as Type<NgControl>,\n null\n );\n\n this.inputId = `sky-country-field-input-${uniqueId++}`;\n\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n } else {\n /**\n * The initial change boolean is to determine if the form is setting the value. When no form\n * is present we don't want to ignore the first change.\n */\n this.isInitialChange = false;\n }\n\n if (!this.defaultCountry) {\n this.defaultCountry = 'us';\n }\n\n this.countrySearchFormControl.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((newValue) => {\n if (newValue && !this.internalFormChange) {\n this.selectedCountry = newValue;\n }\n });\n\n if (!this.disabled) {\n this.addEventListeners();\n }\n }\n\n public ngAfterViewInit(): void {\n /* istanbul ignore else */\n if (this.themeSvc) {\n this.themeSvc.settingsChange.subscribe((change) => {\n this.currentTheme = change.currentSettings.theme.name;\n this.updateInputBox();\n this.changeDetector.markForCheck();\n });\n }\n }\n\n /**\n * Angular lifecycle hook for when the compoennt is destructed.\n * @internal\n */\n public ngOnDestroy(): void {\n this.selectedCountryChange.complete();\n this.removeEventListeners();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n /**\n * Sets the component's touched value when the autocomplete is blurred\n * @internal\n */\n public onAutocompleteBlur(): void {\n this.onTouched();\n }\n\n /**\n * Sets the country to validate against based on the county's iso2 code.\n * @param newCountry The International Organization for Standardization's two-letter code\n * for the default country.\n * @internal\n */\n public onCountrySelected(newCountry: SkyAutocompleteSelectionChange): void {\n if (newCountry.selectedItem) {\n this.writeValue(\n this.countries.find(\n (countryInfo) => countryInfo.iso2 === newCountry.selectedItem.iso2\n )\n );\n } else {\n this.writeValue(undefined);\n }\n }\n\n // Angular automatically constructs these methods.\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onChange = (value: SkyCountryFieldCountry) => {};\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onTouched = () => {};\n\n public registerOnChange(fn: (value: SkyCountryFieldCountry) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n // Allows Angular to disable the input.\n public setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n public validate(control: AbstractControl): ValidationErrors {\n if (control.value) {\n if (\n (this.supportedCountryISOs &&\n this.supportedCountryISOs.length > 0 &&\n this.supportedCountryISOs.indexOf(control.value.iso2) < 0) ||\n !this.countries.find((country) => country.iso2 === control.value.iso2)\n ) {\n return { unsupportedCountry: true };\n }\n }\n return;\n }\n\n public writeValue(value: SkyCountryFieldCountry): void {\n this.selectedCountry = value;\n this.changeDetector.markForCheck();\n }\n\n private addEventListeners(): void {\n this.removeEventListeners();\n\n this.idle = new Subject();\n\n const documentObj = this.windowRef.nativeWindow.document;\n\n fromEvent(documentObj, 'mousedown')\n .pipe(takeUntil(this.idle))\n .subscribe((event: MouseEvent) => {\n this.isInputFocused = this.elRef.nativeElement.contains(event.target);\n this.changeDetector.markForCheck();\n });\n\n fromEvent(documentObj, 'focusin')\n .pipe(takeUntil(this.idle))\n .subscribe((event: KeyboardEvent) => {\n this.isInputFocused = this.elRef.nativeElement.contains(event.target);\n this.changeDetector.markForCheck();\n });\n }\n\n private countriesAreEqual(\n country1: SkyCountryFieldCountry,\n country2: SkyCountryFieldCountry\n ): boolean {\n if (country1 && country2) {\n return country1.iso2 === country2.iso2;\n }\n\n // NOTE: We are doing this in this way because template forms will send through `null`\n // and then `undefined` on empty initialization. These are functionally equivalent but will\n // not pass a standard triple equals check.\n return !country1 && !country2;\n }\n\n private countriesEqual(\n a: SkyCountryFieldCountry,\n b: SkyCountryFieldCountry\n ): boolean {\n return a.iso2 === b.iso2 && a.name === b.name;\n }\n\n private removeEventListeners(): void {\n this.idle.next();\n this.idle.complete();\n }\n\n private setupCountries(): void {\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\n // Ignoring coverage here as this will be removed in the next release.\n // istanbul ignore next\n if (!this.includePhoneInfo && !this.hideSelectedCountryFlag) {\n if (\n (\n this.elRef.nativeElement.parentElement as HTMLElement\n )?.classList?.contains('sky-phone-field-country-search')\n ) {\n this.includePhoneInfo = true;\n this.hideSelectedCountryFlag = true;\n }\n }\n\n /* istanbul ignore else */\n if (!this.includePhoneInfo) {\n /**\n * The library we get the country data from includes extra phone properties.\n * We want to remove these unless we are in a phone field\n */\n this.countries.forEach((country: any) => {\n delete country.dialCode;\n delete country.areaCodes;\n delete country.priority;\n });\n }\n\n this.sortCountriesWithSelectedAndDefault(this.selectedCountry);\n\n if (this.supportedCountryISOs && this.supportedCountryISOs.length > 0) {\n this.countries = this.countries.filter(\n (country: SkyCountryFieldCountry) => {\n return this.supportedCountryISOs.indexOf(country.iso2) >= 0;\n }\n );\n }\n }\n\n private sortCountriesWithSelectedAndDefault(\n selectedCountry: SkyCountryFieldCountry\n ): void {\n let selectedCountryIndex: number;\n let selectedCountryData: SkyCountryFieldCountry;\n\n const sortedNewCountries = this.countries.sort((a, b) => {\n if (\n ((this.defaultCountryData &&\n this.countriesEqual(a, this.defaultCountryData)) ||\n a.name < b.name) &&\n (!this.defaultCountryData ||\n !this.countriesEqual(this.defaultCountryData, b))\n ) {\n return -1;\n } else {\n return 1;\n }\n });\n\n if (selectedCountry) {\n // Note: We are looking up this data here to ensure we are using the offical data from the\n // library and not the data provided by the user on initialization of the component\n selectedCountryData = this.countries.find(\n (country) => country.iso2 === selectedCountry.iso2.toLocaleLowerCase()\n );\n selectedCountryIndex = this.countries.indexOf(selectedCountryData);\n\n if (selectedCountryIndex >= 0) {\n this.countries.splice(selectedCountryIndex, 1);\n sortedNewCountries.splice(0, 0, selectedCountryData);\n }\n }\n\n this.countries = sortedNewCountries;\n }\n\n private updateInputBox(): void {\n if (this.inputBoxHostSvc) {\n this.inputBoxHostSvc.populate({\n inputTemplate: this.inputTemplateRef,\n iconsInsetTemplate:\n this.currentTheme === 'modern'\n ? this.searchIconTemplateRef\n : undefined,\n });\n }\n }\n}\n","<ng-container *ngIf=\"!inputBoxHostSvc\">\n <ng-container *ngTemplateOutlet=\"inputTemplateRef\"></ng-container>\n</ng-container>\n\n<ng-template #inputTemplateRef>\n <span\n class=\"sky-country-field-container\"\n [ngClass]=\"{\n 'sky-country-field-disabled': disabled\n }\"\n >\n <sky-autocomplete\n [ariaLabelledBy]=\"inputId\"\n [data]=\"countries\"\n [propertiesToSearch]=\"['name', 'iso2']\"\n [searchResultTemplate]=\"countrySearchResultTemplate\"\n [searchTextMinimumCharacters]=\"searchTextMinimumCharacters\"\n (selectionChange)=\"onCountrySelected($event)\"\n >\n <div\n class=\"sky-country-field-input\"\n [ngClass]=\"{\n 'sky-country-field-input-with-flag':\n selectedCountry && selectedCountry.iso2 && !hideSelectedCountryFlag\n }\"\n >\n <div\n *ngIf=\"\n selectedCountry && selectedCountry.iso2 && !hideSelectedCountryFlag\n \"\n class=\"sky-country-field-flag\"\n >\n <div\n class=\"iti-flag\"\n [ngClass]=\"selectedCountry.iso2.toLowerCase()\"\n ></div>\n </div>\n <textarea\n class=\"sky-form-control\"\n name=\"selectedCountry\"\n rows=\"1\"\n skyAutocomplete\n [attr.aria-label]=\"\n 'skyux_country_field_search_placeholder' | skyLibResources\n \"\n [attr.disabled]=\"disabled ? true : undefined\"\n [attr.id]=\"inputId\"\n [autocompleteAttribute]=\"autocompleteAttribute\"\n [formControl]=\"countrySearchFormControl\"\n [placeholder]=\"\n currentTheme === 'default'\n ? ('skyux_country_field_search_placeholder' | skyLibResources)\n : ''\n \"\n (blur)=\"onAutocompleteBlur()\"\n ></textarea>\n </div>\n </sky-autocomplete>\n </span>\n</ng-template>\n\n<ng-template let-item=\"item\" #countrySearchResultTemplate>\n <div\n class=\"sky-country-field-search-result-flag\"\n [ngClass]=\"'iti-flag ' + item.iso2.toLowerCase()\"\n ></div>\n {{ item.name }}\n <span *ngIf=\"includePhoneInfo\" class=\"sky-deemphasized\">\n {{ item.dialCode }}\n </span>\n</ng-template>\n\n<!-- This template should only be used in modern theme input boxes. -->\n<ng-template #searchIconTemplateRef>\n <div class=\"sky-input-group-icon sky-input-box-icon-inset\">\n <sky-icon iconType=\"skyux\" icon=\"search\"></sky-icon>\n </div>\n</ng-template>\n"]}
@@ -6,6 +6,10 @@ import * as i0 from "@angular/core";
6
6
  */
7
7
  export class SkyLookupAutocompleteAdapter {
8
8
  constructor() {
9
+ /**
10
+ * Fires when users enter new search information and allows results to be
11
+ * returned via an observable.
12
+ */
9
13
  this.searchAsync = new EventEmitter();
10
14
  }
11
15
  /**
@@ -33,7 +37,9 @@ export class SkyLookupAutocompleteAdapter {
33
37
  * Specifies a function to dynamically manage the data source when users
34
38
  * change the text in the lookup field. The search function must return
35
39
  * an array or a promise of an array. The `search` property is particularly
36
- * useful when the data source does not live in the source code.
40
+ * useful when the data source does not live in the source code. If the
41
+ * search requires calling a remote data source, use `searchAsync` instead of
42
+ * `search`.
37
43
  */
38
44
  set search(value) {
39
45
  this._search = value;