novo-elements 10.1.0 → 10.2.0-next.2

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 (61) hide show
  1. package/elements/chips/Chip.scss +1 -0
  2. package/elements/chips/Chips.d.ts +9 -2
  3. package/elements/chips/Chips.scss +5 -0
  4. package/elements/common/overlay/Overlay.d.ts +2 -1
  5. package/elements/data-table/interfaces.d.ts +7 -0
  6. package/elements/data-table/state/data-table-state.service.d.ts +2 -1
  7. package/elements/picker/Picker.d.ts +3 -1
  8. package/esm2022/elements/autocomplete/autocomplete.component.mjs +1 -1
  9. package/esm2022/elements/chips/Chip.mjs +2 -2
  10. package/esm2022/elements/chips/Chips.mjs +39 -9
  11. package/esm2022/elements/chips/RowChips.mjs +2 -2
  12. package/esm2022/elements/color-picker/color-input.component.mjs +1 -1
  13. package/esm2022/elements/common/overlay/Overlay.mjs +10 -2
  14. package/esm2022/elements/data-table/data-table.component.mjs +2 -1
  15. package/esm2022/elements/data-table/interfaces.mjs +7 -2
  16. package/esm2022/elements/data-table/state/data-table-state.service.mjs +7 -1
  17. package/esm2022/elements/date-picker/DatePickerInput.mjs +1 -1
  18. package/esm2022/elements/date-picker/DateRangeInput.mjs +1 -1
  19. package/esm2022/elements/date-picker/MultiDateInput.mjs +1 -1
  20. package/esm2022/elements/dropdown/Dropdown.mjs +1 -1
  21. package/esm2022/elements/field/toggle/picker-toggle.component.mjs +1 -1
  22. package/esm2022/elements/form/ControlTemplates.mjs +1 -1
  23. package/esm2022/elements/form/extras/address/Address.mjs +1 -1
  24. package/esm2022/elements/multi-picker/MultiPicker.mjs +2 -2
  25. package/esm2022/elements/picker/Picker.mjs +9 -5
  26. package/esm2022/elements/search/SearchBox.mjs +1 -1
  27. package/esm2022/elements/select/Select.mjs +1 -1
  28. package/esm2022/elements/time-picker/TimePickerInput.mjs +1 -1
  29. package/esm2022/utils/countries/Countries.mjs +2371 -399
  30. package/fesm2022/novo-elements-elements-autocomplete.mjs +1 -1
  31. package/fesm2022/novo-elements-elements-autocomplete.mjs.map +1 -1
  32. package/fesm2022/novo-elements-elements-chips.mjs +40 -11
  33. package/fesm2022/novo-elements-elements-chips.mjs.map +1 -1
  34. package/fesm2022/novo-elements-elements-color-picker.mjs +1 -1
  35. package/fesm2022/novo-elements-elements-color-picker.mjs.map +1 -1
  36. package/fesm2022/novo-elements-elements-common.mjs +9 -1
  37. package/fesm2022/novo-elements-elements-common.mjs.map +1 -1
  38. package/fesm2022/novo-elements-elements-data-table.mjs +15 -1
  39. package/fesm2022/novo-elements-elements-data-table.mjs.map +1 -1
  40. package/fesm2022/novo-elements-elements-date-picker.mjs +3 -3
  41. package/fesm2022/novo-elements-elements-date-picker.mjs.map +1 -1
  42. package/fesm2022/novo-elements-elements-dropdown.mjs +1 -1
  43. package/fesm2022/novo-elements-elements-dropdown.mjs.map +1 -1
  44. package/fesm2022/novo-elements-elements-field.mjs +1 -1
  45. package/fesm2022/novo-elements-elements-field.mjs.map +1 -1
  46. package/fesm2022/novo-elements-elements-form.mjs +2 -2
  47. package/fesm2022/novo-elements-elements-form.mjs.map +1 -1
  48. package/fesm2022/novo-elements-elements-multi-picker.mjs +2 -2
  49. package/fesm2022/novo-elements-elements-multi-picker.mjs.map +1 -1
  50. package/fesm2022/novo-elements-elements-picker.mjs +8 -4
  51. package/fesm2022/novo-elements-elements-picker.mjs.map +1 -1
  52. package/fesm2022/novo-elements-elements-search.mjs +1 -1
  53. package/fesm2022/novo-elements-elements-search.mjs.map +1 -1
  54. package/fesm2022/novo-elements-elements-select.mjs +1 -1
  55. package/fesm2022/novo-elements-elements-select.mjs.map +1 -1
  56. package/fesm2022/novo-elements-elements-time-picker.mjs +1 -1
  57. package/fesm2022/novo-elements-elements-time-picker.mjs.map +1 -1
  58. package/fesm2022/novo-elements-utils.mjs +2370 -398
  59. package/fesm2022/novo-elements-utils.mjs.map +1 -1
  60. package/package.json +1 -1
  61. package/utils/countries/Countries.d.ts +19 -23
@@ -273,7 +273,7 @@ class NovoAutocompleteElement extends NovoAutocompleteMixins {
273
273
  return correspondingOption;
274
274
  }
275
275
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: NovoAutocompleteElement, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: 'tabindex', attribute: true }, { token: NOVO_FORM_FIELD, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
276
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: NovoAutocompleteElement, selector: "novo-autocomplete", inputs: { tabIndex: "tabIndex", triggerOn: "triggerOn", displayWith: "displayWith", ariaLabel: ["aria-label", "ariaLabel"], multiple: "multiple", disabled: "disabled" }, outputs: { optionSelected: "optionSelected", optionActivated: "optionActivated" }, host: { properties: { "attr.tabindex": "disabled ? null : -1" }, classAttribute: "novo-autocomplete" }, providers: [{ provide: NOVO_OPTION_PARENT_COMPONENT, useExisting: NovoAutocompleteElement }], queries: [{ propertyName: "optionGroups", predicate: NovoOptgroup, descendants: true }, { propertyName: "options", predicate: NovoOption, descendants: true }], viewQueries: [{ propertyName: "overlay", first: true, predicate: NovoOverlayTemplateComponent, descendants: true }], exportAs: ["novoAutocomplete"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<novo-overlay-template [parent]=\"element\" position=\"above-below\">\n <div class=\"novo-autocomplete-options\" cdk-scrollable>\n <ng-content></ng-content>\n </div>\n</novo-overlay-template>", styles: [".novo-autocomplete-options{background-color:var(--background-bright);cursor:default;list-style:none;padding-inline-start:0px!important;box-shadow:0 -1px 3px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}\n"], dependencies: [{ kind: "component", type: i1.NovoOverlayTemplateComponent, selector: "novo-overlay-template", inputs: ["position", "scrollStrategy", "width", "height", "closeOnSelect", "hasBackdrop", "parent"], outputs: ["select", "opening", "closing"] }, { kind: "directive", type: i2.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
276
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: NovoAutocompleteElement, selector: "novo-autocomplete", inputs: { tabIndex: "tabIndex", triggerOn: "triggerOn", displayWith: "displayWith", ariaLabel: ["aria-label", "ariaLabel"], multiple: "multiple", disabled: "disabled" }, outputs: { optionSelected: "optionSelected", optionActivated: "optionActivated" }, host: { properties: { "attr.tabindex": "disabled ? null : -1" }, classAttribute: "novo-autocomplete" }, providers: [{ provide: NOVO_OPTION_PARENT_COMPONENT, useExisting: NovoAutocompleteElement }], queries: [{ propertyName: "optionGroups", predicate: NovoOptgroup, descendants: true }, { propertyName: "options", predicate: NovoOption, descendants: true }], viewQueries: [{ propertyName: "overlay", first: true, predicate: NovoOverlayTemplateComponent, descendants: true }], exportAs: ["novoAutocomplete"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<novo-overlay-template [parent]=\"element\" position=\"above-below\">\n <div class=\"novo-autocomplete-options\" cdk-scrollable>\n <ng-content></ng-content>\n </div>\n</novo-overlay-template>", styles: [".novo-autocomplete-options{background-color:var(--background-bright);cursor:default;list-style:none;padding-inline-start:0px!important;box-shadow:0 -1px 3px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}\n"], dependencies: [{ kind: "component", type: i1.NovoOverlayTemplateComponent, selector: "novo-overlay-template", inputs: ["position", "scrollStrategy", "width", "minWidth", "height", "closeOnSelect", "hasBackdrop", "parent"], outputs: ["select", "opening", "closing"] }, { kind: "directive", type: i2.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
277
277
  }
278
278
  __decorate([
279
279
  BooleanInput(),
@@ -1 +1 @@
1
- {"version":3,"file":"novo-elements-elements-autocomplete.mjs","sources":["../../../projects/novo-elements/src/elements/autocomplete/autocomplete.component.ts","../../../projects/novo-elements/src/elements/autocomplete/autocomplete.component.html","../../../projects/novo-elements/src/elements/autocomplete/autocomplete.module.ts","../../../projects/novo-elements/src/elements/autocomplete/novo-elements-elements-autocomplete.ts"],"sourcesContent":["import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n AfterViewInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { fromEvent, interval, merge, of, Subscription } from 'rxjs';\nimport { debounce, take } from 'rxjs/operators';\nimport { BooleanInput, Key } from 'novo-elements/utils';\nimport type { NovoChipList } from 'novo-elements/elements/chips';\nimport {\n CanDisable,\n CanDisableCtor,\n HasOverlayCtor,\n mixinDisabled,\n mixinOverlay,\n NovoOptgroup,\n NovoOption,\n NovoOptionSelectionChange,\n NovoOverlayTemplateComponent,\n NOVO_OPTION_PARENT_COMPONENT,\n} from 'novo-elements/elements/common';\nimport { NovoFieldControl, NovoFieldElement, NOVO_FORM_FIELD } from 'novo-elements/elements/field';\n\n/** Event object that is emitted when an autocomplete option is selected. */\nexport class NovoOptionSelectedEvent {\n constructor(\n /** Reference to the autocomplete panel that emitted the event. */\n public source: NovoAutocompleteElement,\n /** Option that was selected. */\n public option: NovoOption,\n ) {}\n}\n\n// Boilerplate for applying mixins\nclass NovoAutocompleteBase {\n constructor() {}\n}\nconst NovoAutocompleteMixins: HasOverlayCtor & CanDisableCtor & typeof NovoAutocompleteBase = mixinOverlay(\n mixinDisabled(NovoAutocompleteBase),\n);\n\n@Component({\n selector: 'novo-autocomplete',\n templateUrl: 'autocomplete.component.html',\n styleUrls: ['autocomplete.component.scss'],\n host: {\n class: 'novo-autocomplete',\n // Always set the tabindex to -1 so that it doesn't overlap with any custom tabindex the\n // consumer may have provided, while still being able to receive focus.\n '[attr.tabindex]': 'disabled ? null : -1',\n },\n providers: [{ provide: NOVO_OPTION_PARENT_COMPONENT, useExisting: NovoAutocompleteElement }],\n exportAs: 'novoAutocomplete',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NovoAutocompleteElement\n extends NovoAutocompleteMixins\n implements CanDisable, AfterContentInit, AfterViewInit, OnChanges, OnDestroy\n{\n private _stateChanges = Subscription.EMPTY;\n private _activeOptionChanges = Subscription.EMPTY;\n private _selectedOptionChanges = Subscription.EMPTY;\n private _keyDownChanges = Subscription.EMPTY;\n\n /** Manages active item in option list based on key events. */\n private _keyManager: ActiveDescendantKeyManager<NovoOption>;\n\n /** Old value of the native input. Used to work around issues with the `input` event on IE. */\n private _previousValue: string | number | null;\n\n @ContentChildren(NovoOptgroup, { descendants: true }) optionGroups: QueryList<NovoOptgroup>;\n @ContentChildren(NovoOption, { descendants: true }) options: QueryList<NovoOption>;\n\n /** Event that is emitted whenever an option from the list is selected. */\n @Output() readonly optionSelected: EventEmitter<NovoOptionSelectedEvent> = new EventEmitter<NovoOptionSelectedEvent>();\n /** Emits whenever an option is activated using the keyboard. */\n @Output() readonly optionActivated: EventEmitter<NovoOptionSelectedEvent> = new EventEmitter<NovoOptionSelectedEvent>();\n\n /** Tabindex for the toggle. */\n @Input() tabIndex: number | null;\n\n /** Key to use to trigger autocomplete. used for textarea. */\n @Input() triggerOn: (control: NovoFieldControl<any>) => boolean = (control) => control.focused;\n\n /** Function that maps an option's control value to its display value in the trigger. */\n @Input() displayWith: ((value: any) => string) | null = null;\n\n /** Screenreader label for the button. */\n @Input('aria-label') ariaLabel: string;\n\n /** Whether the user should be allowed to select multiple options. */\n @Input()\n get multiple(): boolean {\n return this._multiple;\n }\n set multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n }\n private _multiple: boolean = false;\n\n /** Whether the toggle button is disabled. */\n @Input()\n @BooleanInput()\n get disabled(): boolean {\n if (this._disabled === undefined && this._formField?._control) {\n return this._formField._control.disabled;\n }\n return !!this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n private _disabled: boolean;\n\n /** Element for the panel containing the autocomplete options. */\n @ViewChild(NovoOverlayTemplateComponent)\n overlay: NovoOverlayTemplateComponent;\n\n element: ElementRef;\n\n constructor(\n private _elementRef: ElementRef,\n private cdr: ChangeDetectorRef,\n @Attribute('tabindex') defaultTabIndex: string,\n @Optional() @Inject(NOVO_FORM_FIELD) private _formField: NovoFieldElement,\n ) {\n super();\n const parsedTabIndex = Number(defaultTabIndex);\n this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this._watchStateChanges();\n this._watchSelectionEvents();\n }\n\n ngOnDestroy() {\n this._stateChanges.unsubscribe();\n this._activeOptionChanges.unsubscribe();\n this._selectedOptionChanges.unsubscribe();\n this._keyDownChanges.unsubscribe();\n }\n\n ngAfterContentInit() {\n this._keyManager = new ActiveDescendantKeyManager<NovoOption>(this.options).withWrap();\n this._activeOptionChanges = this._keyManager.change.subscribe((index) => {\n this.optionActivated.emit({ source: this, option: this.options.toArray()[index] || null });\n });\n this.element = this._formField.getConnectedOverlayOrigin() || this._elementRef;\n this._keyDownChanges = fromEvent(this.element.nativeElement, 'keydown').subscribe((event: KeyboardEvent) => this._handleKeydown(event));\n this.options.changes.subscribe(() => {\n this._watchStateChanges();\n this._watchSelectionEvents();\n Promise.resolve().then(() => {\n this.checkSelectedOptions();\n });\n });\n }\n\n ngAfterViewInit() {\n this._watchStateChanges();\n this._watchSelectionEvents();\n }\n\n checkPanel() {\n const isTriggered = this.triggerOn(this._formField._control);\n if (isTriggered && this.element) {\n this.openPanel();\n }\n }\n\n private _setTriggerValue(option: NovoOption): void {\n const toDisplay = this.displayWith ? this.displayWith(option) : option?.viewValue;\n // Simply falling back to an empty string if the display value is falsy does not work properly.\n // The display value can also be the number zero and shouldn't fall back to an empty string.\n const displayValue = toDisplay != null ? toDisplay : '';\n const optionValue = option.value;\n // If it's used within a `NovoField`, we should set it through the property so it can go\n // through change detection.\n if (this._formField) {\n const { controlType, lastCaretPosition = 0 } = this._formField._control;\n if (controlType === 'textarea') {\n const currentValue = this._formField._control.value.split('');\n currentValue.splice(lastCaretPosition, 0, displayValue);\n this._formField._control.value = currentValue.join('');\n } else if (controlType === 'chip-list') {\n const chipList = this._formField._control as NovoChipList;\n const currentValue = this._formField._control.value;\n if (currentValue.includes(optionValue)) {\n chipList.removeValue(optionValue);\n } else {\n chipList.addValue(optionValue);\n }\n } else {\n let valueToEmit: any = optionValue;\n if (this.multiple) {\n const currentValue = this._formField._control.value;\n if (Array.isArray(currentValue)) {\n if (currentValue.includes(optionValue)) {\n valueToEmit = currentValue.filter((it) => it === optionValue);\n } else {\n valueToEmit = [...currentValue, optionValue];\n }\n } else if (currentValue === optionValue) {\n valueToEmit = [];\n } else {\n valueToEmit = [currentValue, optionValue];\n }\n }\n this._formField._control.value = valueToEmit;\n }\n } else {\n // this._element.nativeElement.value = inputValue;\n console.warn(`AutoComplete only intended to be used within a NovoField`);\n }\n this._previousValue = optionValue;\n }\n\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n private _clearPreviousSelectedOption(skip: NovoOption) {\n this.options.forEach((option) => {\n if (option !== skip && option.selected) {\n option.deselect();\n }\n });\n }\n\n /** Emits the `select` event. */\n private _emitSelectEvent(option: NovoOption): void {\n const event = new NovoOptionSelectedEvent(this, option);\n this.optionSelected.emit(event);\n }\n\n /**\n * This method closes the panel, and if a value is specified, also sets the associated\n * control to that value. It will also mark the control as dirty if this interaction\n * stemmed from the user.\n */\n private _setValueAndClose(event: NovoOptionSelectionChange | null): void {\n if (event && event.source) {\n if (!this.multiple) this._clearPreviousSelectedOption(event.source);\n this._setTriggerValue(event.source);\n // this._onChange(event.source.value);\n // this._element.nativeElement.focus();\n // this._formField._control.focus();\n this._emitSelectEvent(event.source);\n this._watchSelectionEvents();\n }\n\n if (!this.multiple) this.closePanel();\n }\n\n private _watchSelectionEvents() {\n const selectionEvents = this.options ? merge(...this.options.map((option) => option.onSelectionChange)) : of();\n this._selectedOptionChanges.unsubscribe();\n this._selectedOptionChanges = selectionEvents.pipe(take(1)).subscribe((evt: NovoOptionSelectionChange) => {\n this._setValueAndClose(evt);\n });\n }\n\n private _watchStateChanges() {\n const inputStateChanged = this._formField.stateChanges;\n this._stateChanges.unsubscribe();\n this._stateChanges = merge(inputStateChanged)\n .pipe(debounce(() => interval(10)))\n .subscribe(() => {\n this.checkSelectedOptions();\n this.checkPanel();\n this.cdr.markForCheck();\n });\n }\n\n /** The currently active option, coerced to MatOption type. */\n get activeOption(): NovoOption | null {\n if (this._keyManager) {\n return this._keyManager.activeItem;\n }\n\n return null;\n }\n\n _handleKeydown(event: KeyboardEvent): void {\n const key = event.key;\n\n // Prevent the default action on all escape key presses. This is here primarily to bring IE\n // in line with other browsers. By default, pressing escape on IE will cause it to revert\n // the input value to the one that it had on focus, however it won't dispatch any events\n // which means that the model value will be out of sync with the view.\n if (key === Key.Escape && !hasModifierKey(event)) {\n event.preventDefault();\n }\n\n if (this.activeOption && key === Key.Enter && this.panelOpen) {\n this.activeOption._selectViaInteraction();\n // this._resetActiveItem();\n event.preventDefault();\n } else {\n const prevActiveItem = this._keyManager.activeItem;\n const isArrowKey = key === Key.ArrowUp || key === Key.ArrowDown;\n\n if (this.panelOpen || key === Key.Tab) {\n this._keyManager.onKeydown(event);\n } else if (isArrowKey && !this.overlay.panelOpen) {\n this.openPanel();\n }\n\n // if (isArrowKey || this.autocomplete._keyManager.activeItem !== prevActiveItem) {\n // this._scrollToOption(this.autocomplete._keyManager.activeItemIndex || 0);\n // }\n }\n }\n\n private checkSelectedOptions() {\n if (this.multiple && Array.isArray(this._formField._control.value)) {\n const value = this._formField._control.value;\n this.options.forEach((option) => option.deselect());\n value.forEach((currentValue: any) => this._selectValue(currentValue));\n }\n }\n /**\n * Finds and selects and option based on its value.\n * @returns Option that has the corresponding value.\n */\n private _selectValue(value: any): NovoOption | undefined {\n const correspondingOption = this.options.find((option: NovoOption) => {\n return option.value === value;\n });\n correspondingOption?.select();\n return correspondingOption;\n }\n}\n","<novo-overlay-template [parent]=\"element\" position=\"above-below\">\n <div class=\"novo-autocomplete-options\" cdk-scrollable>\n <ng-content></ng-content>\n </div>\n</novo-overlay-template>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { NovoCommonModule, NovoOptionModule, NovoOverlayModule } from 'novo-elements/elements/common';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoChipsModule } from 'novo-elements/elements/chips';\nimport { NovoFieldModule } from 'novo-elements/elements/field';\nimport { NovoAutocompleteElement } from './autocomplete.component';\n\n@NgModule({\n imports: [CommonModule, NovoButtonModule, NovoOverlayModule, NovoOptionModule, NovoCommonModule, NovoFieldModule, NovoChipsModule],\n declarations: [NovoAutocompleteElement],\n exports: [NovoAutocompleteElement],\n})\nexport class NovoAutoCompleteModule {}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"novo-elements-elements-autocomplete.mjs","sources":["../../../projects/novo-elements/src/elements/autocomplete/autocomplete.component.ts","../../../projects/novo-elements/src/elements/autocomplete/autocomplete.component.html","../../../projects/novo-elements/src/elements/autocomplete/autocomplete.module.ts","../../../projects/novo-elements/src/elements/autocomplete/novo-elements-elements-autocomplete.ts"],"sourcesContent":["import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n AfterViewInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { fromEvent, interval, merge, of, Subscription } from 'rxjs';\nimport { debounce, take } from 'rxjs/operators';\nimport { BooleanInput, Key } from 'novo-elements/utils';\nimport type { NovoChipList } from 'novo-elements/elements/chips';\nimport {\n CanDisable,\n CanDisableCtor,\n HasOverlayCtor,\n mixinDisabled,\n mixinOverlay,\n NovoOptgroup,\n NovoOption,\n NovoOptionSelectionChange,\n NovoOverlayTemplateComponent,\n NOVO_OPTION_PARENT_COMPONENT,\n} from 'novo-elements/elements/common';\nimport { NovoFieldControl, NovoFieldElement, NOVO_FORM_FIELD } from 'novo-elements/elements/field';\n\n/** Event object that is emitted when an autocomplete option is selected. */\nexport class NovoOptionSelectedEvent {\n constructor(\n /** Reference to the autocomplete panel that emitted the event. */\n public source: NovoAutocompleteElement,\n /** Option that was selected. */\n public option: NovoOption,\n ) {}\n}\n\n// Boilerplate for applying mixins\nclass NovoAutocompleteBase {\n constructor() {}\n}\nconst NovoAutocompleteMixins: HasOverlayCtor & CanDisableCtor & typeof NovoAutocompleteBase = mixinOverlay(\n mixinDisabled(NovoAutocompleteBase),\n);\n\n@Component({\n selector: 'novo-autocomplete',\n templateUrl: 'autocomplete.component.html',\n styleUrls: ['autocomplete.component.scss'],\n host: {\n class: 'novo-autocomplete',\n // Always set the tabindex to -1 so that it doesn't overlap with any custom tabindex the\n // consumer may have provided, while still being able to receive focus.\n '[attr.tabindex]': 'disabled ? null : -1',\n },\n providers: [{ provide: NOVO_OPTION_PARENT_COMPONENT, useExisting: NovoAutocompleteElement }],\n exportAs: 'novoAutocomplete',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NovoAutocompleteElement\n extends NovoAutocompleteMixins\n implements CanDisable, AfterContentInit, AfterViewInit, OnChanges, OnDestroy\n{\n private _stateChanges = Subscription.EMPTY;\n private _activeOptionChanges = Subscription.EMPTY;\n private _selectedOptionChanges = Subscription.EMPTY;\n private _keyDownChanges = Subscription.EMPTY;\n\n /** Manages active item in option list based on key events. */\n private _keyManager: ActiveDescendantKeyManager<NovoOption>;\n\n /** Old value of the native input. Used to work around issues with the `input` event on IE. */\n private _previousValue: string | number | null;\n\n @ContentChildren(NovoOptgroup, { descendants: true }) optionGroups: QueryList<NovoOptgroup>;\n @ContentChildren(NovoOption, { descendants: true }) options: QueryList<NovoOption>;\n\n /** Event that is emitted whenever an option from the list is selected. */\n @Output() readonly optionSelected: EventEmitter<NovoOptionSelectedEvent> = new EventEmitter<NovoOptionSelectedEvent>();\n /** Emits whenever an option is activated using the keyboard. */\n @Output() readonly optionActivated: EventEmitter<NovoOptionSelectedEvent> = new EventEmitter<NovoOptionSelectedEvent>();\n\n /** Tabindex for the toggle. */\n @Input() tabIndex: number | null;\n\n /** Key to use to trigger autocomplete. used for textarea. */\n @Input() triggerOn: (control: NovoFieldControl<any>) => boolean = (control) => control.focused;\n\n /** Function that maps an option's control value to its display value in the trigger. */\n @Input() displayWith: ((value: any) => string) | null = null;\n\n /** Screenreader label for the button. */\n @Input('aria-label') ariaLabel: string;\n\n /** Whether the user should be allowed to select multiple options. */\n @Input()\n get multiple(): boolean {\n return this._multiple;\n }\n set multiple(value: boolean) {\n this._multiple = coerceBooleanProperty(value);\n }\n private _multiple: boolean = false;\n\n /** Whether the toggle button is disabled. */\n @Input()\n @BooleanInput()\n get disabled(): boolean {\n if (this._disabled === undefined && this._formField?._control) {\n return this._formField._control.disabled;\n }\n return !!this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n }\n private _disabled: boolean;\n\n /** Element for the panel containing the autocomplete options. */\n @ViewChild(NovoOverlayTemplateComponent)\n overlay: NovoOverlayTemplateComponent;\n\n element: ElementRef;\n\n constructor(\n private _elementRef: ElementRef,\n private cdr: ChangeDetectorRef,\n @Attribute('tabindex') defaultTabIndex: string,\n @Optional() @Inject(NOVO_FORM_FIELD) private _formField: NovoFieldElement,\n ) {\n super();\n const parsedTabIndex = Number(defaultTabIndex);\n this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this._watchStateChanges();\n this._watchSelectionEvents();\n }\n\n ngOnDestroy() {\n this._stateChanges.unsubscribe();\n this._activeOptionChanges.unsubscribe();\n this._selectedOptionChanges.unsubscribe();\n this._keyDownChanges.unsubscribe();\n }\n\n ngAfterContentInit() {\n this._keyManager = new ActiveDescendantKeyManager<NovoOption>(this.options).withWrap();\n this._activeOptionChanges = this._keyManager.change.subscribe((index) => {\n this.optionActivated.emit({ source: this, option: this.options.toArray()[index] || null });\n });\n this.element = this._formField.getConnectedOverlayOrigin() || this._elementRef;\n this._keyDownChanges = fromEvent(this.element.nativeElement, 'keydown').subscribe((event: KeyboardEvent) => this._handleKeydown(event));\n this.options.changes.subscribe(() => {\n this._watchStateChanges();\n this._watchSelectionEvents();\n Promise.resolve().then(() => {\n this.checkSelectedOptions();\n });\n });\n }\n\n ngAfterViewInit() {\n this._watchStateChanges();\n this._watchSelectionEvents();\n }\n\n checkPanel() {\n const isTriggered = this.triggerOn(this._formField._control);\n if (isTriggered && this.element) {\n this.openPanel();\n }\n }\n\n private _setTriggerValue(option: NovoOption): void {\n const toDisplay = this.displayWith ? this.displayWith(option) : option?.viewValue;\n // Simply falling back to an empty string if the display value is falsy does not work properly.\n // The display value can also be the number zero and shouldn't fall back to an empty string.\n const displayValue = toDisplay != null ? toDisplay : '';\n const optionValue = option.value;\n // If it's used within a `NovoField`, we should set it through the property so it can go\n // through change detection.\n if (this._formField) {\n const { controlType, lastCaretPosition = 0 } = this._formField._control;\n if (controlType === 'textarea') {\n const currentValue = this._formField._control.value.split('');\n currentValue.splice(lastCaretPosition, 0, displayValue);\n this._formField._control.value = currentValue.join('');\n } else if (controlType === 'chip-list') {\n const chipList = this._formField._control as NovoChipList;\n const currentValue = this._formField._control.value;\n if (currentValue.includes(optionValue)) {\n chipList.removeValue(optionValue);\n } else {\n chipList.addValue(optionValue);\n }\n } else {\n let valueToEmit: any = optionValue;\n if (this.multiple) {\n const currentValue = this._formField._control.value;\n if (Array.isArray(currentValue)) {\n if (currentValue.includes(optionValue)) {\n valueToEmit = currentValue.filter((it) => it === optionValue);\n } else {\n valueToEmit = [...currentValue, optionValue];\n }\n } else if (currentValue === optionValue) {\n valueToEmit = [];\n } else {\n valueToEmit = [currentValue, optionValue];\n }\n }\n this._formField._control.value = valueToEmit;\n }\n } else {\n // this._element.nativeElement.value = inputValue;\n console.warn(`AutoComplete only intended to be used within a NovoField`);\n }\n this._previousValue = optionValue;\n }\n\n /**\n * Clear any previous selected option and emit a selection change event for this option\n */\n private _clearPreviousSelectedOption(skip: NovoOption) {\n this.options.forEach((option) => {\n if (option !== skip && option.selected) {\n option.deselect();\n }\n });\n }\n\n /** Emits the `select` event. */\n private _emitSelectEvent(option: NovoOption): void {\n const event = new NovoOptionSelectedEvent(this, option);\n this.optionSelected.emit(event);\n }\n\n /**\n * This method closes the panel, and if a value is specified, also sets the associated\n * control to that value. It will also mark the control as dirty if this interaction\n * stemmed from the user.\n */\n private _setValueAndClose(event: NovoOptionSelectionChange | null): void {\n if (event && event.source) {\n if (!this.multiple) this._clearPreviousSelectedOption(event.source);\n this._setTriggerValue(event.source);\n // this._onChange(event.source.value);\n // this._element.nativeElement.focus();\n // this._formField._control.focus();\n this._emitSelectEvent(event.source);\n this._watchSelectionEvents();\n }\n\n if (!this.multiple) this.closePanel();\n }\n\n private _watchSelectionEvents() {\n const selectionEvents = this.options ? merge(...this.options.map((option) => option.onSelectionChange)) : of();\n this._selectedOptionChanges.unsubscribe();\n this._selectedOptionChanges = selectionEvents.pipe(take(1)).subscribe((evt: NovoOptionSelectionChange) => {\n this._setValueAndClose(evt);\n });\n }\n\n private _watchStateChanges() {\n const inputStateChanged = this._formField.stateChanges;\n this._stateChanges.unsubscribe();\n this._stateChanges = merge(inputStateChanged)\n .pipe(debounce(() => interval(10)))\n .subscribe(() => {\n this.checkSelectedOptions();\n this.checkPanel();\n this.cdr.markForCheck();\n });\n }\n\n /** The currently active option, coerced to MatOption type. */\n get activeOption(): NovoOption | null {\n if (this._keyManager) {\n return this._keyManager.activeItem;\n }\n\n return null;\n }\n\n _handleKeydown(event: KeyboardEvent): void {\n const key = event.key;\n\n // Prevent the default action on all escape key presses. This is here primarily to bring IE\n // in line with other browsers. By default, pressing escape on IE will cause it to revert\n // the input value to the one that it had on focus, however it won't dispatch any events\n // which means that the model value will be out of sync with the view.\n if (key === Key.Escape && !hasModifierKey(event)) {\n event.preventDefault();\n }\n\n if (this.activeOption && key === Key.Enter && this.panelOpen) {\n this.activeOption._selectViaInteraction();\n // this._resetActiveItem();\n event.preventDefault();\n } else {\n const prevActiveItem = this._keyManager.activeItem;\n const isArrowKey = key === Key.ArrowUp || key === Key.ArrowDown;\n\n if (this.panelOpen || key === Key.Tab) {\n this._keyManager.onKeydown(event);\n } else if (isArrowKey && !this.overlay.panelOpen) {\n this.openPanel();\n }\n\n // if (isArrowKey || this.autocomplete._keyManager.activeItem !== prevActiveItem) {\n // this._scrollToOption(this.autocomplete._keyManager.activeItemIndex || 0);\n // }\n }\n }\n\n private checkSelectedOptions() {\n if (this.multiple && Array.isArray(this._formField._control.value)) {\n const value = this._formField._control.value;\n this.options.forEach((option) => option.deselect());\n value.forEach((currentValue: any) => this._selectValue(currentValue));\n }\n }\n /**\n * Finds and selects and option based on its value.\n * @returns Option that has the corresponding value.\n */\n private _selectValue(value: any): NovoOption | undefined {\n const correspondingOption = this.options.find((option: NovoOption) => {\n return option.value === value;\n });\n correspondingOption?.select();\n return correspondingOption;\n }\n}\n","<novo-overlay-template [parent]=\"element\" position=\"above-below\">\n <div class=\"novo-autocomplete-options\" cdk-scrollable>\n <ng-content></ng-content>\n </div>\n</novo-overlay-template>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { NovoCommonModule, NovoOptionModule, NovoOverlayModule } from 'novo-elements/elements/common';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoChipsModule } from 'novo-elements/elements/chips';\nimport { NovoFieldModule } from 'novo-elements/elements/field';\nimport { NovoAutocompleteElement } from './autocomplete.component';\n\n@NgModule({\n imports: [CommonModule, NovoButtonModule, NovoOverlayModule, NovoOptionModule, NovoCommonModule, NovoFieldModule, NovoChipsModule],\n declarations: [NovoAutocompleteElement],\n exports: [NovoAutocompleteElement],\n})\nexport class NovoAutoCompleteModule {}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}