46 lines
1015 B
TypeScript
46 lines
1015 B
TypeScript
export function isKeyboardEvent(event: Event): event is KeyboardEvent {
|
|
return 'key' in event;
|
|
}
|
|
|
|
/**
|
|
* Normalises key values to consistent lowercase strings
|
|
*/
|
|
export function normalizeKey(key: string): string {
|
|
const lowerKey = key.toLowerCase();
|
|
|
|
switch (lowerKey) {
|
|
case ' ':
|
|
case 'spacebar': // for older browsers
|
|
return 'space';
|
|
|
|
case 'arrowup':
|
|
return 'up';
|
|
case 'arrowdown':
|
|
return 'down';
|
|
case 'arrowleft':
|
|
return 'left';
|
|
case 'arrowright':
|
|
return 'right';
|
|
|
|
case 'esc':
|
|
case 'escape':
|
|
return 'escape';
|
|
|
|
default:
|
|
return lowerKey;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Compare whether a key matches an `event.code` value,
|
|
* with support for single-letter keys (which are otherwise
|
|
* represented with a `Key` prefix, e.g. `m` is `KeyM`).
|
|
*/
|
|
export function matchesKeyCode(key: string, code: string) {
|
|
if (key.length === 1) {
|
|
return code === `Key${key.toUpperCase()}`;
|
|
} else {
|
|
return code.toLowerCase() === key.toLowerCase();
|
|
}
|
|
}
|