npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

key-definitions

v2.0.3

Published

get a keyboard key definition from event

Downloads

233

Readme

npm version Known Vulnerabilities

About

Key-definitions module is made by one purpose: to have key definitions in one place. Key definitions are followed by MDN documentation and as recommended a web developers should check event.key on keyup event to detect pressed key (not a keydown event nor keyCode property). The reason for this read more in documentation.

Because there are numerous keyboard layouts this library is not 100% bulletproof.

Defined layouts follow QWERTY keyboards.

Usage

Before

const onKeyUpHandler = (event) => {
  if (event.keyCode === 65) {
    // this approach is deprecated by MDN
  }

  if (event.key === "ArrowLeft") {
    // check if pressed key is arrow left
  }

  if (event.key === " ") {
    // check if the key represents space
  }

  if (event.key === "A" || event.key === "B" || event.key === "C") {
    // check if event key is one of the
  }
};

useEffect(() => {
  document.addEventListener("keyup", onKeyUpHandler);

  return () => {
    document.removeEventListener("keyup", onKeyUpHandler);
  };
}, []);

Now

With new approach you can easily:

  • forward event instance to compare function
  • read a code easily by not memorizing what ASCII number means
import { UpperCase, ARROW_LEFT, SPACE } from "key-definitions";

const onKeyUpHandler = (event) => {
  if (compare(event, ARROW_LEFT)) {
    // you can check if given event represents space
  }

  if (event.key === ARROW_LEFT.key) {
    // you can check value by _key_ property
  }

  if (compare(event, [UpperCase.A, UpperCase.B, UpperCase.C])) {
    // check if any character is matching with event key
  }
};

useEffect(() => {
  document.addEventListener("keyup", onKeyUpHandler);

  return () => {
    document.removeEventListener("keyup", onKeyUpHandler);
  };
}, []);

Install

npm install key-definitions

or

yarn add key-definitions

Interfaces

Each key inherits KeyInterface that has following structure:

interface KeyInterface {
  keyCode: number | number[]; // event.keyCode, it can be an array in case when numerous supports for different operation systems exists
  keyCodeDefinitions?: KeyCodeSupportOS[]; // description of keyCode in case if multiple keyCode values exists
  hex?: hexNumber | hexNumber[]; // key's hex number, it's array if multiple keyCodeDefinitions exists
  code: string; // the same as event.code
  key: string; // the same as event.key
  isAltKey?: boolean;
  isMetaKey?: boolean;
  isShiftKey?: boolean;
  isCtrlKey?: boolean;
}

Functions

| Name | Description | Return value | | ----------- | -------------------------------------------------------------------------------------------------------- | ------------ | | isCharacter | Detect if pressed value is a character a-z and A-Z. | boolean | | compare | compare two values; compares key property and code in case of SHIFT, ALT and CONTROL keyboard events | boolean |

compare (value: KeyboardEvent, equalToValue: KeyInterface)

Compare event with key definitions from library.

import { SPACE } from "key-definitions";

const onKeyUp = (e: KeyboardEvent) => {
  compare(event, SPACE); // true
};

compare (value: KeyboardEvent, equalToValue: KeyInterface[])

Compare does event is one of the several key definitions from library.

import { SPACE, TAB } from "key-definitions";

const onKeyUp = (e: KeyboardEvent) => {
  compare(e.key, [SPACE, TAB]); // true
};

isCharacter (x: KeyboardEvent)

Function will check key, code or keyCode values of KeyboardEvent.

const onKeyUp = (e: KeyboardEvent) => {
  isCharacter(e); // you can forward KeyboardEvent to detect if pressed key is a character
};

document.addEventListener("keyup", onKeyUp);

isCharacter(x: string) => boolean

isCharacter("A"); // true
isCharacter("a"); // true
isCharacter("?"); // false
isCharacter("č"); // true
isCharacter("1"); // false
isCharacter("KeyA"); // true
isCharacter("KeyZ"); // true
isCharacter("Enter"); // false

isCharacter(x: number)

Even keyCode is deprecated it's still in usage by some developers. Forward keyCode value from keyup event.

isCharacter(64); // check 'a' value --> true
isCharacter(90); // check 'Z' value --> true
isCharacter(191); // check '?' value --> false
isCharacter(49); // check '1' value --> false

Supported table

Language layouts

| Language | Layout | FileName | | -------- | ------ | ---------- | | English | US | - | | Croatian | CRO | Layout_CRO | | German | DE | Layout_DE |

By default US layout is set, for different layout you need to import it independently.

import { LowerCase }, Layout_CRO, Layout_DE from "key-definitions";

console.log(LowerCase.A.key); // --> returns US layout --> value 'a'
console.log(Layout_CRO.LowerCase.A.key); // --> returns croatian layout --> value 'a'
console.log(Layout_CRO.LowerCase.Č.key); // --> returns croatian layout --> value 'č'
console.log(LowerCase.Č.key); // --> undefined (not supported for US layout)
console.log(Layout_DE.LowerCase.Ü.key); // --> returns german layout ---> value 'ü'
console.log(Layout_DE.LowerCase.UMLAUT_U.key); // --> returns german layout ---> value 'ü'

Sections

Alpha


Includes lower and upper case a-zA-Z.

| Key | Layout | | --------------- | ------ | | A-Z | all | | Č | cro | | Ć | cro | | Ž | cro | | Đ | cro | | Š | cro | | Ü (or UMLAUT_U) | de | | Ö (or UMLAUT_O) | de | | Ä (or UMLAUT_A) | de | | ẞ (or UMLAUT_S) | de |

import { LowerCase, UpperCase } from "key-definitions";

console.log(LowerCase.A.key); // --> returns value 'a'
console.log(UpperCase.A.key); // --> returns value 'A'

Digits


Includes all numerical keys 0-9 in alphanumeric keyboard section.

| Key | Name | | --- | ----- | | 0 | ZERO | | 1 | ONE | | 2 | TWO | | 3 | THREE | | 4 | FOUR | | 5 | FIVE | | 6 | SIX | | 7 | SEVEN | | 8 | EIGHT | | 9 | NINE |

import { ZERO, SEVEN } from "key-definitions";

console.log(ZERO.key); // returns value '0'
console.log(SEVEN.key); // returns value '7'

Numpad


Includes all keys in numpad section - digits and general (functional keys such as enter, num lock). Example: 0-9, NumLock, Enter; We have two sections General (functional keys) and Digits (0-9 numbers).

| Key | Name | | -------------- | ----------- | | 0-9 | ZERO-NINE | | = (equal sign) | EQUAL | | enter | ENTER | | arrow up | ARROW_UP | | arrow down | ARROW_DOWN | | arrow right | ARROW_RIGHT | | arrow left | ARROW_LEFT | | * | MULTIPLY | | + | ADD | | - | SUBSTRACT | | , | COMMA | | / | DIVIDE | | . | DECIMAL | | insert | INSERT | | end | END | | page down | PAGE_DOWN | | home | HOME | | page up | PAGE_UP | | delete | DELETE |

import { Numpad } from "key-definitions";

console.log(Numpad.ARROW_DOWN.key); // returns value 'ArrowDown'
console.log(Numpad.ZERO.key); // returns '0'

Functions


Includes all keys from F1-F12 in function section.

import { F1 } from "key-definitions";

console.log(F1.key); // returns value 'F1'

Generics


Includes functional keys in alphanumeric keyboard section. Example: AltLeft, Shift, Enter, Tab, CapsLock.

| Key | Name | | ------------ | ------------ | | tab | TAB | | enter | ENTER | | shift left | SHIFT_LEFT | | shift right | SHIFT RIGHT | | ctrl left | CTRL_LEFT | | ctrl right | CTRL_RIGHT | | alt left | ALT_LEFT | | alt right | ALT_RIGHT | | caps lock | CAPS_LOCK | | escape | ESC | | space | SPACE | | page up | PAGE_UP | | page down | PAGE_DOWN | | end | END | | home | HOME | | arrow left | ARROW_LEFT | | arrow up | ARROW_UP | | arrow right | ARROW_RIGHT | | arrow down | ARROW_DOWN | | print screen | PRINT_SCREEN | | insert | INSERT | | delete | DELETE | | num lock | NUM_LOCK | | scroll lock | SCROLL_LOCK | | help | HELP | | pause | PAUSE |

import { ALT_LEFT, ALT_RIGHT } from "key-definitions";

console.log(ALT_LEFT.key); // returns value 'Alt'
console.log(ALT_LEFT.code); // returns value 'AltLeft'
console.log(ALT_RIGHT.key); // returns 'Alt'
console.log(ALT_RIGHT.code); // returns 'AltRight'

Specials

Includes special keys like question marks )!?.$&%/#"\*) as part of alphanumeric keyboard section.

| Key | Name | | --- | -------------------- | | ! | EXCLAMATION_MARK | | " | QUOTATION_MARK | | # | HASH | | $ | DOLLAR_SIGN | | % | PERCENT | | & | AMPERSAND | | ' | APOSTROPHE | | ( | OPEN_PARENTHESIS | | ) | CLOSE_PARENTHESIS | | * | ASTERISK | | + | PLUS | | , | COMMA | | - | DASH | | . | DOT | | / | SLASH | | : | COLON | | ; | SEMICOLON | | < | LESS_THAN_BRACKET | | = | EQUAL | | > | GREATER_THAN_BRACKET | | ? | QUESTION_MARK | | @ | AMPERSAT | | [ | OPEN_BRACKET | | \ | BACKSLASH | | ] | CLOSE_BRACKET | | ^ | CARET | | _ | UNDERSCORE | | ` | BACKQUOTE | | { | OPEN_BRACE | | | | VERTICAL_BAR | | } | CLOSE_BRACE | | ~ | TILDA |

import { DOLLAR_SIGN } from "key-definitions";

console.log(DOLLAR_SIGN.key); // returns value '$'

Other resources:

https://keycode.info/for/!

https://www.computerhope.com/jargon/s/specchar.htm

https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code

https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode