import { Directive, Input, HostListener } from '@angular/core'; import { KeySet, ForbiddenInput } from './classes'; import { invalidInputError } from './exceptions'; @Directive({ selector: '[ang-allowed]' }) export class AllowedDirective { @Input('ang-allowed') allowedKeys: KeySet; @HostListener('keydown', ['$event']) whileTyping(e: KeyboardEvent){ if(!(this.allowedKeys instanceof KeySet)){ invalidInputError(); } const forbidden = !this.allowedKeys.has(e.key) if(forbidden){ !e.repeat && this.allowedKeys.forbiddenInput.next(new ForbiddenInput(e)); return false; } } }