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

@acusti/use-keyboard-events

v0.7.0

Published

React hook that takes keyboard event handlers and attaches them to the document

Downloads

730

Readme

@acusti/use-keyboard-events

latest version maintenance status bundle size downloads per month

useKeyboardEvents is a React hook that takes the following payload:

{
    ignoreUsedKeyboardEvents?: boolean;
    onKeyDown?: (event: KeyboardEvent) => unknown;
    onKeyPress?: (event: KeyboardEvent) => unknown;
    onKeyUp?: (event: KeyboardEvent) => unknown;
    priority?: number;
}

The hook uses keyboard event listeners on the document to trigger the onKey(Down|Press|Up) functions in order to ensure that all key events are captured regardless of whether there is currently a focused element in the DOM (i.e. document.activeElement is set). This solves the problem where keyboard event handlers attached via React’s onKey(Down|Press|Up) props miss any keyboard events that occur when the target element and its descendants aren’t focused.

In addition to keyboard event handlers, you can pass the boolean prop ignoreUsedKeyboardEvents, which defaults to true. If the prop is true, the keyboard event target is an input, textarea, or contenteditable element, and the keyboard event is usable by the element, your keyboard event listeners will not be triggered. This makes it trivial to avoid erroneously handling keyboard shortcuts when the keyboard event is intended by the user to apply to the currently focused text editing UI. For example: you have a “todo” application that has a delete key handler for deleting the currently selected todo item when. If editing the text of a todo item also means the todo item is selected, a keydown handler that deletes the todo item would be triggered when the user is editing the text of the todo item and hits the delete key. If you use this package and ignoreUsedKeyboardEvents is true (it defaults to true), the hook will not trigger your handler if the target of the keyboard event is using it for input.

The hook exposes two more methods for controlling how events are handled: first, you can pass priority, which can be any number between -50 and 50. A higher number means a higher priority, and handlers will be executed in order from highest priority to lowest priority. In addition, you can return boolean false from your handler to indicate that no other handler should be triggered for this same event (akin to calling event.stopPropagation()).