import { Directive, HostListener, Output, EventEmitter } from '@angular/core'; import { KeySet, ForbiddenInput } from './classes'; @Directive({ selector: '[ang-only-digits]' }) export class OnlyDigitsDirective { keyset = new KeySet().digits().modifiers().interactors(' ') // exclude 'SPACE'; @Output('ang-only-digits') forbiddenInput = new EventEmitter(); @HostListener('keydown', ['$event']) whileTyping(e: KeyboardEvent){ const forbidden = !this.keyset.has(e.key); if(forbidden){ !e.repeat && this.forbiddenInput.emit(new ForbiddenInput(e)); return false; } } }