
Security News
rv Is a New Rust-Powered Ruby Version Manager Inspired by Python's uv
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
hyper-interactive
Advanced tools
Events triggered on complex mouse and keyboard interactions.
Inspired by mousetrap
, hyper-interactive
is more flexible - It allows any key to act as a modifier, has parentheses and not operations, and allows to combine your event formulas in an almost infinite number of ways.
npm install hyper-interactive
import HyperInteractive from "hyper-interactive";
const hyper = new HyperInteractive();
You can add events using .addInteractions()
or a single event using .addInteraction()
.
hyper.addInteraction({
formula: "a",
reaction: () => alert("a key was pressed!")
});
Additionally you can check the latest event with .check()
hyper.check("space", "keydown);
You can get quite complex with you interaction codes, allowing you to enter sequences and combinations of keys
hyper.addInteractions([
{
formula: "space+b",
reaction: () => alert("spacebar and b keys were both pressed!")
},
{
formula: "[|]",
reaction: () => alert("[ or ] key was pressed!")
},
{
formula: "k o n a m i",
reaction: () => alert("konami was typed!")
},
{
formula: "esc+(k o n a m i)",
reaction: () => alert("konami was typed whilst holding the escape key!")
}
]);
Using a +
symbol you can create an event when a combination of keys are pressed. This is not just limited to the standard modifier keys but can be any key combination. The following are all valid formulas.
shift+a
a+b
space+F10
Using the |
you can create an or operator. The formula a|b
will trigger an event if either a
or b
is pressed.
You can create an event based on a sequence of key presses using a space inbetween codes. You can even combine it with the syntax above. Try the following.
h e l l o
space+(h e l l o)
a b+c d|e f g
You can use brackets to control the order of evaluation.
For example a+(b|c|d)
will check a
is pressed and any of b
, c
, or d
is pressed.
(a+b)|c|d
will check if a
and b
are pressed together or c
or c
are pressed on their own.
An !
can be used to exclude keys. !(a|b)
will fire any time a key is pressed that is not a
or b
. You could use this in combination, a+b+!c+!d
will be triggered if a
and b
are down but only if c
and d
are not.
You can use any KeyEvent.code
value as a key, along with the following aliases, all case insensitive. A KeyEvent.keyCode
fallback has been provided for older browsers.
KeyCode | Description |
---|---|
* , any | Any |
shift | ShiftLeft or ShiftRight |
ctrl , control | ControlLeft or ControlRight |
alt , opt , option | AltLeft or AltRight |
meta , cmd , command | MetaLeft or MetaRight |
mod , modifier | Meta for Apple devices, Control for others |
esc , escape | Escape |
_ , space | Space |
del | Backspace or Delete |
up | ArrowUp |
down | ArrowDown |
left | ArrowLeft |
right | ArrowRight |
- | Minus |
= | Equal |
[ | BracketLeft |
] | BracketRight |
; | Semicolon |
' | Quote |
\ | Backslash |
, | Comma |
. | Period |
/ | Slash |
0-9 | Digit0-Digit9 |
a-z | KeyA-KeyZ |
While we patiently wait for Keyboard.getLayoutMap()
you can pass different keyboard maps via the third argument of the HyperInteractive
constructor.
new HyperInteractive({target, interactions, keyboardMap, getTarget})
Additionally you can use .addKeyCodes()
to create additional key codes. These can use any formula value. For example.
hyper.addKeyCodes({
"?": "shift+/",
"save": "mod+s"
})
You can use getTarget
in the constructor to define custom target for events. This can allow you to select your own elements when using Canvas / WebGL.
const getTarget = event => (event.target === canvas ? getCanvasTarget() : event.target);
new HyperInteractive({target, interactions, keyboardMap, getTarget})
FAQs
Events triggered on complex mouse and keyboard interactions.
The npm package hyper-interactive receives a total of 23 weekly downloads. As such, hyper-interactive popularity was classified as not popular.
We found that hyper-interactive demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.
Security News
AGENTS.md is a fast-growing open format giving AI coding agents a shared, predictable way to understand project setup, style, and workflows.