diff --git a/index.ts b/index.ts index 47470a9..46e045d 100644 --- a/index.ts +++ b/index.ts @@ -86,24 +86,31 @@ export function unindent(element: HTMLTextAreaElement): void { } export function eventHandler(event: KeyboardEvent): void { - if (event.defaultPrevented) { + if ( + event.defaultPrevented || + event.metaKey || + event.altKey || + event.ctrlKey + ) { return; } const textarea = event.target as HTMLTextAreaElement; - if ( - event.key === 'Tab' && - !event.metaKey && - !event.altKey && - !event.ctrlKey - ) { + if (event.key === 'Tab') { if (event.shiftKey) { unindent(textarea); } else { indent(textarea); } + event.preventDefault(); + event.stopImmediatePropagation(); + } else if ( + event.key === 'Escape' && + !event.shiftKey + ) { + textarea.blur(); event.preventDefault(); event.stopImmediatePropagation(); } diff --git a/readme.md b/readme.md index 8c4a1b4..f5bdb1f 100644 --- a/readme.md +++ b/readme.md @@ -55,7 +55,7 @@ If you prefer the raw `indent`/`unindent` methods, they're also available below. ### indentation.watch(textarea) -Adds tab and shift+tab event listeners to the provided `textarea`(s). +Adds tab and shift+tab event listeners to the provided `textarea`(s). It also listens to esc to blur/unfocus the field and allow the user to keep tabbing. #### textarea