All files / lib/internal virtual-listbox.directive.ts

93.97% Statements 78/83
100% Branches 17/17
84.61% Functions 11/13
93.97% Lines 78/83

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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 841x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 122x 122x 122x 1x 1x 122x 122x 122x 1x 1x 2517x 2517x 2517x 1x 1x 161x 161x 161x 1x 1x     1x 1x       1x 1x 122x 122x 1x 1x 1x 1x 1x 44x 44x 1x 1x 1x 18x 18x 1x 1x 1x 1x 62x 62x 1x  
import {
  Directive,
  EventEmitter,
  HostBinding,
  HostListener,
  Input,
  Output,
} from '@angular/core';
 
import { Converter, Item, Key } from '../utils/util.types';
 
import { VirtualListboxService } from './virtual-listbox.service';
 
export interface ListboxSelectEvent {
  key: Key;
  open: boolean;
}
 
/**
 * Aria Support for ListBox using a virtual focus with aria-activedescendant
 */
@Directive({
  selector: '[data-gc-virtual-listbox]',
  standalone: false,
})
export class VirtualListBoxDirective {
  @HostBinding('attr.role')
  protected readonly role = 'listbox';
 
  @HostBinding('tabindex')
  protected readonly tabindex = 0;
 
  @Output()
  public get onSelect(): EventEmitter<ListboxSelectEvent> {
    return this.vls.onSelect;
  }
 
  @Output()
  public get onKeypress(): EventEmitter<KeyboardEvent> {
    return this.vls.onKeypress;
  }
 
  @HostBinding('attr.aria-activedescendant')
  public get activeDescendant(): string | null {
    return this.vls.activeDescendant;
  }
 
  @Input()
  public set value(value: Key | undefined) {
    this.vls.value = value;
  }
 
  public get value(): Key | undefined {
    return this.vls.value;
  }
 
  @Input()
  public get itemIdComputer(): Converter<Item, string> {
    return this.vls.itemIdComputer;
  }
 
  public set itemIdComputer(itemIdComputer: Converter<Item, string>) {
    this.vls.itemIdComputer = itemIdComputer;
  }
 
  constructor(private readonly vls: VirtualListboxService) {}
 
  @HostListener('focus', ['$event'])
  public onFocus(): void {
    this.vls.onFocus();
  }
 
  @HostListener('blur', ['$event'])
  public onBlur(): void {
    this.vls.onBlur();
  }
 
  /** @ignore */
  @HostListener('keydown', ['$event'])
  public onKeyDown(event: KeyboardEvent): void {
    this.vls.onKeyDown(event);
  }
}