keyboard

Keyboard event stream that emits both keydown and keyup events. Shares underlying listeners per EventTarget.

Terminal window
npm install --save cereb

Basic Usage

import { keyboard } from "cereb";
keyboard(window).on((signal) => {
const { phase, code, key } = signal.value;
console.log(`${code} ${phase}`); // "KeyA down", "KeyA up"
});

Signature

function keyboard(target: EventTarget, options?: KeyboardOptions): Stream<KeyboardSignal>

Options

OptionTypeDefaultDescription
codeKeyCode | KeyCode[]-Filter by physical key code(s)
modifiersModifierKey[]-Filter by modifier keys (OR logic)
preventDefaultbooleantrueCall preventDefault on matching events
allowRepeatbooleanfalseAllow repeated keydown events

Signal Value

PropertyTypeDescription
phase"down" | "up"Key event phase
keystringLogical key value (e.g., ”+”, “a”, “Meta”)
codestringPhysical key code (e.g., “Equal”, “KeyA”)
repeatbooleanTrue if repeated from holding key
altKeybooleanAlt key pressed
ctrlKeybooleanCtrl key pressed
metaKeybooleanMeta (Cmd/Win) key pressed
shiftKeybooleanShift key pressed
originalEventKeyboardEventOriginal DOM event

Examples

Filter by Key Code

// Single key
keyboard(window, { code: "Escape" }).on(handleEscape);
// Multiple keys (OR logic)
keyboard(window, { code: ["ArrowUp", "ArrowDown"] }).on(handleArrows);

Filter by Modifiers

// Cmd+S (Mac) or Ctrl+S (Windows)
keyboard(window, {
code: "KeyS",
modifiers: ["meta", "ctrl"]
}).on(handleSave);

Key Codes

Key codes follow the W3C UI Events Code specification.

Common codes:

  • Letters: KeyA, KeyB, … KeyZ
  • Numbers: Digit0, Digit1, … Digit9
  • Special: Space, Enter, Escape, Tab
  • Arrows: ArrowUp, ArrowDown, ArrowLeft, ArrowRight
  • Modifiers: MetaLeft, ControlLeft, ShiftLeft, AltLeft
  • Symbols: Equal (+), Minus (-), BracketLeft, BracketRight