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

hotkey-stack

v1.2.1

Published

Hotkey Event Listener Stacks

Downloads

1,600

Readme

Hotkey Stack

Setup

NPM

npm install hotkey-stack

Yarn

yarn add hotkey-stack

Usage

Basic

import hs from 'hotkey-stack'

const callback = () => {
  console.log('Callback Called')
}

hs.add('a', callback)

Output when A key is pressed

Callback Called

Multiple Listeners

import hs from 'hotkey-stack'

const oneCallback = () => {
  console.log('One Callback Called')
}

const twoCallback = () => {
  console.log('Two Callback Called')
}

hs.add('a', oneCallback)
hs.add('a', twoCallback)

Output when A key is pressed

Two Callback Called

Removing Listeners

import hs from 'hotkey-stack'

const oneCallback = () => {
  console.log('One Callback Called')
}

const twoCallback = () => {
  console.log('Two Callback Called')
}

hs.add('a', oneCallback)
hs.add('a', twoCallback)
hs.pull(twoCallback)

Output when A key is pressed

One Callback Called

Hotkey Config

Most API functions receive a HotkeyConfig which is either a string or HotkeyComboConfig. The HotkeyComboConfig has the following properties:

| Property | Type | Required | Description | | :---------------: | :-------: | :------: | ---------------------------------------------------------------------------------------------------------------------- | | key | string | Yes | Key from KeyboardEvent to be listened to. | | isMetaRequired | boolean | No | If true, meta key must be pressed. On Windows, this is the Windows Key (). On Mac, this is the Command Key (). | | isShiftRequired | boolean | No | If true, the shift key must be pressed. | | isCtrlRequired | boolean | No | If true, the ctrl key must be pressed. | | isAltRequired | boolean | No | If true, the alt key must be pressed. |

API

| Method | Description | Parameters | | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | | add | Add a new listener into the stack for the provided hotkey. Hotkeys are case insensitive. | hotkey: string, listener: Listener, symbol?: Symbol | | pull | Remove a listener from the stack. To prevent all listeners from all hotkeys being removed, provide a second parameter of the hotkey that should be removed. | listener: Listener, hotkey?: string | | skip | Remove a listener from the stack but retain place stack. This requires the symbol to be provided during add. Failure to provide relational symbol will execute pull method. To prevent all listeners from all hotkeys being skipped, provide a second parameter of the hotkey that should be skipped. | listener: Listener, hotkey?: string | | cut | Moves the listener to the top of the stack. To prevent all listeners from all hotkeys cutting, provide a second parameter of the hotkey that should cut. | listener: Listener, hotkey?: string | | pause | Pauses listening to all hotkeys. | | | start | Starts listening to all hotkeys. This is automatic during instantiation and does not need to be called. | |

Advanced Usage

Disabling Listener

The listener stack Listeners can be temporaily

import hs from 'hotkey-stack'

const oneCallback = () => {
  console.log('One Callback Called')
}

const twoCallback = () => {
  console.log('Two Callback Called')
}

hs.add('a', oneCallback)
hs.add('a', twoCallback)
hs.skip('a', twoCallback)

Output when A key is pressed

One Callback Called

Disabling Listener and Adding Back

This example uses skip, and then add. This does not require the listener to be the same reference. The symbol passed to add will be used as the reference to retain the position.

import hs from 'hotkey-stack'

const oneSymbol = Symbol()

const oneCallback = () => {
  console.log('One Callback Called')
}

const twoCallback = () => {
  console.log('Two Callback Called')
}

hs.add('a', oneCallback, oneSymbol)
hs.add('a', twoCallback)
hs.skip('a', oneCallback)
hs.add('a', oneCallback, oneSymbol)

Output when A key is pressed

Two Callback Called

Prioritizing Listener

import hs from 'hotkey-stack'

const oneCallback = () => {
  console.log('One Callback Called')
}

const twoCallback = () => {
  console.log('Two Callback Called')
}

hs.add('a', oneCallback)
hs.add('a', twoCallback)
hs.cut('a', oneCallback)

Output when A key is pressed

One Callback Called