+1
-0
@@ -6,1 +6,2 @@ export * from "./reducers"; | ||
| export * from "./types"; | ||
| export { toKeyname } from "./utils"; |
+2
-0
@@ -10,1 +10,3 @@ "use strict"; | ||
| __export(require("./recipes")); | ||
| var utils_1 = require("./utils"); | ||
| exports.toKeyname = utils_1.toKeyname; |
+1
-1
| { | ||
| "name": "staerm", | ||
| "version": "3.1.5", | ||
| "version": "3.2.0", | ||
| "description": "Stateful, declarative & predictive library to build reactive terminal UIs", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
+11
-1
@@ -19,3 +19,3 @@ "use strict"; | ||
| get: () => currentState, | ||
| set: state => { | ||
| set: (state) => { | ||
| prevState = currentState; | ||
@@ -39,2 +39,12 @@ currentState = state; | ||
| } | ||
| }, | ||
| reduce: (reducer, initialState) => { | ||
| terminal.io.keypress.listen(key => terminal.state.reduce(state => reducer(state, key))); | ||
| terminal.state.set(initialState || | ||
| reducer(currentState, { | ||
| sequence: "", | ||
| ctrl: false, | ||
| meta: false, | ||
| shift: false | ||
| })); | ||
| } | ||
@@ -41,0 +51,0 @@ }; |
+1
-0
@@ -18,2 +18,3 @@ import { DeepReadonly } from "./utils"; | ||
| }; | ||
| reduce: (reducer: (state: TerminalState, keypressData: KeypressData) => TerminalState, initialState?: TerminalState) => void; | ||
| }; | ||
@@ -20,0 +21,0 @@ export declare type TerminalState = { |
+4
-1
@@ -1,2 +0,2 @@ | ||
| export declare const toKeyname: (sequence: string) => "LEFT" | "RIGHT" | "BACKSPACE" | "DELETE" | "HOME" | "END" | undefined; | ||
| export declare const toKeyname: (sequence: string) => "UP" | "DOWN" | "LEFT" | "RIGHT" | "BACKSPACE" | "DELETE" | "HOME" | "END" | "ENTER" | undefined; | ||
| export declare const ansiEscapes: { | ||
@@ -9,4 +9,7 @@ cursorMove: (x: number, y: number) => string; | ||
| export declare const mergeFns: <A extends any[]>(fns: ((...args: A) => any)[]) => (...args: A) => void; | ||
| export declare const use: <A extends any[]>(...a: A) => { | ||
| as: <R>(f: (...a: A) => R) => R; | ||
| }; | ||
| export declare type DeepReadonly<T> = Readonly<{ | ||
| [K in keyof T]: Readonly<T[K]>; | ||
| }>; |
+17
-13
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.toKeyname = (sequence) => sequence === "\u001b[D" | ||
| ? "LEFT" : | ||
| sequence === "\u001b[C" | ||
| ? "RIGHT" : | ||
| sequence === "\b" || sequence === "\u007f" // \u007f for linux | ||
| ? "BACKSPACE" : | ||
| sequence === "\u001b[3~" | ||
| ? "DELETE" : | ||
| sequence === "\u001b[1~" || sequence === "\u001b[H" // \u001b[H for xterm.js | ||
| ? "HOME" : | ||
| sequence === "\u001b[4~" || sequence === "\u001b[F" // \u001b[F for xterm.js | ||
| ? "END" : | ||
| undefined; | ||
| exports.toKeyname = (sequence) => exports.use({ | ||
| "\u001B[A": "UP", | ||
| "\u001B[B": "DOWN", | ||
| "\u001b[D": "LEFT", | ||
| "\u001b[C": "RIGHT", | ||
| "\b": "BACKSPACE", | ||
| "\u007f": "BACKSPACE", | ||
| "\u001b[3~": "DELETE", | ||
| "\u001b[1~": "HOME", | ||
| "\u001b[H": "END", | ||
| "\r": "ENTER" | ||
| }) | ||
| .as(sequences => isIn(sequences, sequence) | ||
| ? sequences[sequence] | ||
| : undefined); | ||
| const isIn = (o, k) => k in o; | ||
| exports.ansiEscapes = { | ||
@@ -28,1 +31,2 @@ cursorMove: (x, y) => (x < 0 | ||
| exports.mergeFns = (fns) => (...args) => fns.forEach(fn => fn(...args)); | ||
| exports.use = (...a) => ({ as: (f) => f(...a) }); |
15107
4.64%363
6.14%