All files / autocomplete si-autocomplete.directive.ts

100% Statements 6/6
100% Branches 2/2
100% Functions 5/5
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46                                  1x           1012x         1012x         1012x         292x       2x      
/**
 * Copyright (c) Siemens 2016 - 2025
 * SPDX-License-Identifier: MIT
 */
import { Directive, HostBinding, HostListener } from '@angular/core';
 
import { SiAutocompleteListboxDirective } from './si-autocomplete-listbox.directive';
import { SiAutocompleteOptionDirective } from './si-autocomplete-option.directive';
 
@Directive({
  selector: 'input[siAutocomplete]',
  host: {
    role: 'combobox',
    'aria-autocomplete': 'list'
  },
  exportAs: 'siAutocomplete'
})
export class SiAutocompleteDirective<T> {
  /** @internal */
  listbox?: SiAutocompleteListboxDirective<T>;
 
  @HostBinding('attr.aria-activedescendant')
  protected get activeDescendant(): string {
    return this.listbox?.active?.id() ?? '';
  }
 
  @HostBinding('attr.aria-controls')
  protected get ariaControls(): string | undefined {
    return this.listbox?.id();
  }
 
  @HostBinding('attr.aria-expanded')
  protected get expanded(): boolean {
    return !!this.listbox;
  }
 
  @HostListener('keydown', ['$event'])
  protected keydown(event: KeyboardEvent): void {
    this.listbox?.onKeydown(event);
  }
 
  get active(): SiAutocompleteOptionDirective<T> | undefined | null {
    return this.listbox?.active;
  }
}