{"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  NOVO_OVERLAY_CONTAINER,\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: [\n        { provide: NOVO_OPTION_PARENT_COMPONENT, useExisting: NovoAutocompleteElement },\n        { provide: NOVO_OVERLAY_CONTAINER, useExisting: NovoAutocompleteElement },\n    ],\n    exportAs: 'novoAutocomplete',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: false,\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  @Input()\n  @BooleanInput()\n  makeFirstItemActive: 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        if (this.makeFirstItemActive && this.options.length > 0) {\n          this._keyManager.setFirstItemActive();\n        }\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      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) {\n        this._clearPreviousSelectedOption(event.source);\n      }\n      this._setTriggerValue(event.source);\n      this._emitSelectEvent(event.source);\n      this._watchSelectionEvents();\n    }\n\n    if (!this.multiple) {\n      this.closePanel();\n    }\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      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  }\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}