Asymmetrik/ngx-starter

View on GitHub
src/app/common/link-accessibility.directive.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { Directive, ElementRef, HostListener, Renderer2, inject } from '@angular/core';

/**
 * Used to enable link for keyboard accessibility.
 * This is only necessary for interactibles using that do not have a
 * href attribute, because those will naturally be ignored by
 * the tabbing structure.
 */
@Directive({
    selector: '[linkAccessibility]',
    standalone: true
})
export class LinkAccessibilityDirective {
    private elRef = inject(ElementRef);
    private renderer = inject(Renderer2);

    constructor() {
        const el = this.elRef.nativeElement;
        this.renderer.setAttribute(el, 'tabIndex', '0');
    }

    @HostListener('keydown.enter', ['$event'])
    onEnter(event: Event) {
        event.target?.dispatchEvent(new Event('click'));
    }
}