r3bl-ts-utils
Version:
The `r3bl-ts-utils` package is a set of useful TypeScript functions and classes that can be used in Node.js and browser environments. They are inspired by Kotlin stdlib, and Rust to write code as expressions rather than statements, colorized text, powerfu
51 lines (50 loc) • 2.29 kB
TypeScript
import { ModifierKey, SpecialKey } from "./keypress-constants";
/**
* This class is immutable. In order to create an instance of it, please use the factory methods:
* createFromInk, createFromKeypress, createCopyOf
*
* Once an instance is created, only two mutation methods are provided which don't modify the
* original instance and return a newly deep copied instance:
* setModifierKeyFrom, setModifierKey
*
* A key press can be one of three things:
* 1. A char & Modifier keys (shift, meta, ctrl).
* 2. A special key (enter, left, right, backspace, etc) & Modifier keys.
* 3. Just modifier keys (not currently supported)
*
* ENHANCEMENT: https://github.com/r3bl-org/r3bl-cmdr/issues/1
*
* Currently this works for Ink's abstraction of key presses (via useInput) and it works when
* directly using Node.js readline's raw mode (keypress events). Howeever, there are severe
* limitations in both Ink and Node.js's handling of keypresses into a terminal that will
* require this functionality to be written natively in Rust (see gh issue above).
*/
export declare class Keypress {
readonly _key: (SpecialKey & ModifierKey) | undefined;
readonly _input: string | undefined;
/**
* Don't deep copy all the provided arguments, use them as is. Use builders instead.
*/
private constructor();
static buildMutable: (key?: (SpecialKey & ModifierKey) | undefined, input?: string | undefined) => Keypress;
/** @immutable */
static buildImmutable: (key?: (SpecialKey & ModifierKey) | undefined, input?: string | undefined) => Readonly<Keypress>;
/** @immutable */
makeImmutable: () => Readonly<Keypress>;
/** @immutable */
setModifierKey: (modifier: "shift" | "ctrl" | "meta", value: boolean) => Readonly<Keypress>;
get input(): string;
get key(): string;
toString: () => string;
/** Key is special if it can be pressed independently of input, eg: "upArrow" and "downArrow". */
isSpecialKey: () => boolean;
/**
* Key is modifier if "ctrl", "meta", or "shift" is true.
*/
isModifierKey: () => boolean;
matches: (selector: string) => boolean;
/**
* If _key is defined, then return it as a string (in lowercase), eg: "backspace", "downarrow".
*/
private convertKeyToString;
}