A simple, lightweight and Ember Octane-friendly keybindings for Ember applications. Powered by tinykeys.
- Ember.js v3.25 or above
- Ember CLI v3.25 or above
- ember-auto-import v2 or above
- tinykeys ^1.2.0
- ember-modifier ^2.0.0 || ^3.0.0
- ember-auto-import ^2.0.0
ember install ember-tinykeys
Keys are matched against
KeyboardEvent.code
and
KeyboardEvent.key
(case-insensitive).
Keys can optionally be prefixed with modifiers which match against any valid value to
KeyboardEvent.getModifierState()
.
There is also a special $mod
modifier, which is an alias for Meta
(⌘) on Mac, and Control
on Windows/Linux.
Keybindings can also consist of several key presses in a row.
Each press in the sequence must be pressed within options.timeout
ms of the last (1000ms by default).
See tinykeys README for details.
"d" // Matches `event.key`.
"KeyD" // Matches: `event.code`.
"Control+d"
"Meta+d"
"Shift+D"
"Alt+KeyD"
"Meta+Shift+D"
"$mod+D" // Meta/Control+D
"$mod+Shift+D" // Meta/Control+Shift+D
"g g" // vim-like go to top
"ArrowUp ArrowUp ArrowDown ArrowDown ArrowLeft ArrowRight ArrowLeft ArrowRight B A" // fatality
"$mod+K $mod+1"
There are on-shortcut-keydown
and on-shortcut-keyup
modifiers available.
import { onShortcutKeyDown, onShortcutKeyUp } from 'ember-tinykeys';
import { registerDestructor } from '@ember/destroyable';
const handler = (event) => {
this.doSomeWork();
event.stopPropagation();
event.preventDefault();
}
const unsubscribe = onShortcutKeyDown(element, 'Control+x', handler);
const unsubscribe = onShortcutKeyUp(element, 'Control+x', handler);
const unsubscribe = onShortcutKeyDown(window, 'Control+x', handler);
const unsubscribe = onShortcutKeyDown(element, 'Control+x m x y', handler);
const unsubscribe = onShortcutKeyDown(element, ['Alt+x', 'Control+x'], handler);
const unsubscribe = onShortcutKeyDown(element, { 'Alt+x': handlerA, 'Control+x': handlerB });
registerDestructor(this, () => unsubscribe());
-
isEventTargetTextualUserInput
You can use this to skip keybindings in textual controls (input, select, textarea, contenteditable).
import { onShortcutKeyDown, isEventTargetTextualUserInput } from 'ember-tinykeys'; const handler = (event) => { if (isEventTargetTextualUserInput(event)) { return; } this.doSomeWork(); event.stopPropagation(); event.preventDefault(); }
See the Contributing guide for details.
This project is licensed under the MIT License.