ink 4.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/components/Box.d.ts +2 -148
- package/build/components/Box.js +5 -17
- package/build/components/Box.js.map +1 -1
- package/build/dom.js +0 -4
- package/build/dom.js.map +1 -1
- package/build/hooks/use-input.js +29 -33
- package/build/hooks/use-input.js.map +1 -1
- package/build/parse-keypress.d.ts +14 -0
- package/build/parse-keypress.js +225 -0
- package/build/parse-keypress.js.map +1 -0
- package/build/reconciler.js +53 -59
- package/build/reconciler.js.map +1 -1
- package/build/render-border.js +47 -10
- package/build/render-border.js.map +1 -1
- package/build/render-node-to-output.js +2 -2
- package/build/render-node-to-output.js.map +1 -1
- package/build/styles.d.ts +87 -5
- package/build/styles.js +34 -5
- package/build/styles.js.map +1 -1
- package/package.json +7 -1
- package/readme.md +123 -21
|
@@ -2,157 +2,11 @@ import React from 'react';
|
|
|
2
2
|
import { type Except } from 'type-fest';
|
|
3
3
|
import { type Styles } from '../styles.js';
|
|
4
4
|
import { type DOMElement } from '../dom.js';
|
|
5
|
-
export type Props = Except<Styles, 'textWrap'
|
|
6
|
-
/**
|
|
7
|
-
* Size of the gap between an element's columns.
|
|
8
|
-
*
|
|
9
|
-
* @default 0
|
|
10
|
-
*/
|
|
11
|
-
readonly columnGap?: number;
|
|
12
|
-
/**
|
|
13
|
-
* Size of the gap between element's rows.
|
|
14
|
-
*
|
|
15
|
-
* @default 0
|
|
16
|
-
*/
|
|
17
|
-
readonly rowGap?: number;
|
|
18
|
-
/**
|
|
19
|
-
* Size of the gap between an element's columns and rows. Shorthand for `columnGap` and `rowGap`.
|
|
20
|
-
*
|
|
21
|
-
* @default 0
|
|
22
|
-
*/
|
|
23
|
-
readonly gap?: number;
|
|
24
|
-
/**
|
|
25
|
-
* Margin on all sides. Equivalent to setting `marginTop`, `marginBottom`, `marginLeft` and `marginRight`.
|
|
26
|
-
*
|
|
27
|
-
* @default 0
|
|
28
|
-
*/
|
|
29
|
-
readonly margin?: number;
|
|
30
|
-
/**
|
|
31
|
-
* Horizontal margin. Equivalent to setting `marginLeft` and `marginRight`.
|
|
32
|
-
*
|
|
33
|
-
* @default 0
|
|
34
|
-
*/
|
|
35
|
-
readonly marginX?: number;
|
|
36
|
-
/**
|
|
37
|
-
* Vertical margin. Equivalent to setting `marginTop` and `marginBottom`.
|
|
38
|
-
*
|
|
39
|
-
* @default 0
|
|
40
|
-
*/
|
|
41
|
-
readonly marginY?: number;
|
|
42
|
-
/**
|
|
43
|
-
* Padding on all sides. Equivalent to setting `paddingTop`, `paddingBottom`, `paddingLeft` and `paddingRight`.
|
|
44
|
-
*
|
|
45
|
-
* @default 0
|
|
46
|
-
*/
|
|
47
|
-
readonly padding?: number;
|
|
48
|
-
/**
|
|
49
|
-
* Horizontal padding. Equivalent to setting `paddingLeft` and `paddingRight`.
|
|
50
|
-
*
|
|
51
|
-
* @default 0
|
|
52
|
-
*/
|
|
53
|
-
readonly paddingX?: number;
|
|
54
|
-
/**
|
|
55
|
-
* Vertical padding. Equivalent to setting `paddingTop` and `paddingBottom`.
|
|
56
|
-
*
|
|
57
|
-
* @default 0
|
|
58
|
-
*/
|
|
59
|
-
readonly paddingY?: number;
|
|
60
|
-
/**
|
|
61
|
-
* Behavior for an element's overflow in both directions.
|
|
62
|
-
*
|
|
63
|
-
* @default 'visible'
|
|
64
|
-
*/
|
|
65
|
-
readonly overflow?: 'visible' | 'hidden';
|
|
66
|
-
/**
|
|
67
|
-
* Behavior for an element's overflow in horizontal direction.
|
|
68
|
-
*
|
|
69
|
-
* @default 'visible'
|
|
70
|
-
*/
|
|
71
|
-
readonly overflowX?: 'visible' | 'hidden';
|
|
72
|
-
/**
|
|
73
|
-
* Behavior for an element's overflow in vertical direction.
|
|
74
|
-
*
|
|
75
|
-
* @default 'visible'
|
|
76
|
-
*/
|
|
77
|
-
readonly overflowY?: 'visible' | 'hidden';
|
|
78
|
-
};
|
|
5
|
+
export type Props = Except<Styles, 'textWrap'>;
|
|
79
6
|
/**
|
|
80
7
|
* `<Box>` is an essential Ink component to build your layout. It's like `<div style="display: flex">` in the browser.
|
|
81
8
|
*/
|
|
82
|
-
declare const Box: React.ForwardRefExoticComponent<
|
|
83
|
-
/**
|
|
84
|
-
* Size of the gap between an element's columns.
|
|
85
|
-
*
|
|
86
|
-
* @default 0
|
|
87
|
-
*/
|
|
88
|
-
readonly columnGap?: number | undefined;
|
|
89
|
-
/**
|
|
90
|
-
* Size of the gap between element's rows.
|
|
91
|
-
*
|
|
92
|
-
* @default 0
|
|
93
|
-
*/
|
|
94
|
-
readonly rowGap?: number | undefined;
|
|
95
|
-
/**
|
|
96
|
-
* Size of the gap between an element's columns and rows. Shorthand for `columnGap` and `rowGap`.
|
|
97
|
-
*
|
|
98
|
-
* @default 0
|
|
99
|
-
*/
|
|
100
|
-
readonly gap?: number | undefined;
|
|
101
|
-
/**
|
|
102
|
-
* Margin on all sides. Equivalent to setting `marginTop`, `marginBottom`, `marginLeft` and `marginRight`.
|
|
103
|
-
*
|
|
104
|
-
* @default 0
|
|
105
|
-
*/
|
|
106
|
-
readonly margin?: number | undefined;
|
|
107
|
-
/**
|
|
108
|
-
* Horizontal margin. Equivalent to setting `marginLeft` and `marginRight`.
|
|
109
|
-
*
|
|
110
|
-
* @default 0
|
|
111
|
-
*/
|
|
112
|
-
readonly marginX?: number | undefined;
|
|
113
|
-
/**
|
|
114
|
-
* Vertical margin. Equivalent to setting `marginTop` and `marginBottom`.
|
|
115
|
-
*
|
|
116
|
-
* @default 0
|
|
117
|
-
*/
|
|
118
|
-
readonly marginY?: number | undefined;
|
|
119
|
-
/**
|
|
120
|
-
* Padding on all sides. Equivalent to setting `paddingTop`, `paddingBottom`, `paddingLeft` and `paddingRight`.
|
|
121
|
-
*
|
|
122
|
-
* @default 0
|
|
123
|
-
*/
|
|
124
|
-
readonly padding?: number | undefined;
|
|
125
|
-
/**
|
|
126
|
-
* Horizontal padding. Equivalent to setting `paddingLeft` and `paddingRight`.
|
|
127
|
-
*
|
|
128
|
-
* @default 0
|
|
129
|
-
*/
|
|
130
|
-
readonly paddingX?: number | undefined;
|
|
131
|
-
/**
|
|
132
|
-
* Vertical padding. Equivalent to setting `paddingTop` and `paddingBottom`.
|
|
133
|
-
*
|
|
134
|
-
* @default 0
|
|
135
|
-
*/
|
|
136
|
-
readonly paddingY?: number | undefined;
|
|
137
|
-
/**
|
|
138
|
-
* Behavior for an element's overflow in both directions.
|
|
139
|
-
*
|
|
140
|
-
* @default 'visible'
|
|
141
|
-
*/
|
|
142
|
-
readonly overflow?: "visible" | "hidden" | undefined;
|
|
143
|
-
/**
|
|
144
|
-
* Behavior for an element's overflow in horizontal direction.
|
|
145
|
-
*
|
|
146
|
-
* @default 'visible'
|
|
147
|
-
*/
|
|
148
|
-
readonly overflowX?: "visible" | "hidden" | undefined;
|
|
149
|
-
/**
|
|
150
|
-
* Behavior for an element's overflow in vertical direction.
|
|
151
|
-
*
|
|
152
|
-
* @default 'visible'
|
|
153
|
-
*/
|
|
154
|
-
readonly overflowY?: "visible" | "hidden" | undefined;
|
|
155
|
-
} & {
|
|
9
|
+
declare const Box: React.ForwardRefExoticComponent<Props & {
|
|
156
10
|
children?: React.ReactNode;
|
|
157
11
|
} & React.RefAttributes<DOMElement>>;
|
|
158
12
|
export default Box;
|
package/build/components/Box.js
CHANGED
|
@@ -1,25 +1,13 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */
|
|
2
1
|
import React, { forwardRef } from 'react';
|
|
3
2
|
/**
|
|
4
3
|
* `<Box>` is an essential Ink component to build your layout. It's like `<div style="display: flex">` in the browser.
|
|
5
4
|
*/
|
|
6
5
|
const Box = forwardRef(({ children, ...style }, ref) => {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
marginRight: style.marginRight || style.marginX || style.margin || 0,
|
|
13
|
-
marginTop: style.marginTop || style.marginY || style.margin || 0,
|
|
14
|
-
marginBottom: style.marginBottom || style.marginY || style.margin || 0,
|
|
15
|
-
paddingLeft: style.paddingLeft || style.paddingX || style.padding || 0,
|
|
16
|
-
paddingRight: style.paddingRight || style.paddingX || style.padding || 0,
|
|
17
|
-
paddingTop: style.paddingTop || style.paddingY || style.padding || 0,
|
|
18
|
-
paddingBottom: style.paddingBottom || style.paddingY || style.padding || 0,
|
|
19
|
-
overflowX: style.overflowX || style.overflow || 'visible',
|
|
20
|
-
overflowY: style.overflowY || style.overflow || 'visible'
|
|
21
|
-
};
|
|
22
|
-
return (React.createElement("ink-box", { ref: ref, style: transformedStyle }, children));
|
|
6
|
+
return (React.createElement("ink-box", { ref: ref, style: {
|
|
7
|
+
...style,
|
|
8
|
+
overflowX: style.overflowX ?? style.overflow ?? 'visible',
|
|
9
|
+
overflowY: style.overflowY ?? style.overflow ?? 'visible'
|
|
10
|
+
} }, children));
|
|
23
11
|
});
|
|
24
12
|
Box.displayName = 'Box';
|
|
25
13
|
Box.defaultProps = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Box.js","sourceRoot":"","sources":["../../src/components/Box.tsx"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"Box.js","sourceRoot":"","sources":["../../src/components/Box.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,UAAU,EAAyB,MAAM,OAAO,CAAC;AAOhE;;GAEG;AACH,MAAM,GAAG,GAAG,UAAU,CACrB,CAAC,EAAC,QAAQ,EAAE,GAAG,KAAK,EAAC,EAAE,GAAG,EAAE,EAAE;IAC7B,OAAO,CACN,iCACC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE;YACN,GAAG,KAAK;YACR,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,IAAI,SAAS;YACzD,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,IAAI,SAAS;SACzD,IAEA,QAAQ,CACA,CACV,CAAC;AACH,CAAC,CACD,CAAC;AAEF,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;AAExB,GAAG,CAAC,YAAY,GAAG;IAClB,QAAQ,EAAE,QAAQ;IAClB,aAAa,EAAE,KAAK;IACpB,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,CAAC;CACb,CAAC;AAEF,eAAe,GAAG,CAAC"}
|
package/build/dom.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// eslint-disable-next-line n/file-extension-in-import
|
|
2
2
|
import Yoga from 'yoga-wasm-web/auto';
|
|
3
3
|
import measureText from './measure-text.js';
|
|
4
|
-
import applyStyles from './styles.js';
|
|
5
4
|
import wrapText from './wrap-text.js';
|
|
6
5
|
import squashTextNodes from './squash-text-nodes.js';
|
|
7
6
|
export const createNode = (nodeName) => {
|
|
@@ -70,9 +69,6 @@ export const setAttribute = (node, key, value) => {
|
|
|
70
69
|
};
|
|
71
70
|
export const setStyle = (node, style) => {
|
|
72
71
|
node.style = style;
|
|
73
|
-
if (node.yogaNode) {
|
|
74
|
-
applyStyles(node.yogaNode, style);
|
|
75
|
-
}
|
|
76
72
|
};
|
|
77
73
|
export const createTextNode = (text) => {
|
|
78
74
|
const node = {
|
package/build/dom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,OAAO,IAA6B,MAAM,oBAAoB,CAAC;AAC/D,OAAO,WAAW,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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"}
|
package/build/hooks/use-input.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { useEffect } from 'react';
|
|
2
|
+
import { isUpperCase } from 'is-upper-case';
|
|
3
|
+
import parseKeypress, { nonAlphanumericKeys } from '../parse-keypress.js';
|
|
2
4
|
import useStdin from './use-stdin.js';
|
|
3
5
|
/**
|
|
4
6
|
* This hook is used for handling user input.
|
|
@@ -41,47 +43,41 @@ const useInput = (inputHandler, options = {}) => {
|
|
|
41
43
|
return;
|
|
42
44
|
}
|
|
43
45
|
const handleData = (data) => {
|
|
44
|
-
|
|
46
|
+
const keypress = parseKeypress(data);
|
|
45
47
|
const key = {
|
|
46
|
-
upArrow:
|
|
47
|
-
downArrow:
|
|
48
|
-
leftArrow:
|
|
49
|
-
rightArrow:
|
|
50
|
-
pageDown:
|
|
51
|
-
pageUp:
|
|
52
|
-
return:
|
|
53
|
-
escape:
|
|
54
|
-
ctrl:
|
|
55
|
-
shift:
|
|
56
|
-
tab:
|
|
57
|
-
backspace:
|
|
58
|
-
delete:
|
|
59
|
-
meta
|
|
48
|
+
upArrow: keypress.name === 'up',
|
|
49
|
+
downArrow: keypress.name === 'down',
|
|
50
|
+
leftArrow: keypress.name === 'left',
|
|
51
|
+
rightArrow: keypress.name === 'right',
|
|
52
|
+
pageDown: keypress.name === 'pagedown',
|
|
53
|
+
pageUp: keypress.name === 'pageup',
|
|
54
|
+
return: keypress.name === 'return',
|
|
55
|
+
escape: keypress.name === 'escape',
|
|
56
|
+
ctrl: keypress.ctrl,
|
|
57
|
+
shift: keypress.shift,
|
|
58
|
+
tab: keypress.name === 'tab',
|
|
59
|
+
backspace: keypress.name === 'backspace',
|
|
60
|
+
delete: keypress.name === 'delete',
|
|
61
|
+
// `parseKeypress` parses \u001B\u001B[A (meta + up arrow) as meta = false
|
|
62
|
+
// but with option = true, so we need to take this into account here
|
|
63
|
+
// to avoid breaking changes in Ink.
|
|
64
|
+
// TODO(vadimdemedes): consider removing this in the next major version.
|
|
65
|
+
meta: keypress.meta || keypress.name === 'escape' || keypress.option
|
|
60
66
|
};
|
|
61
|
-
|
|
62
|
-
if (
|
|
63
|
-
|
|
64
|
-
input = String.fromCharCode(
|
|
65
|
-
// eslint-disable-next-line unicorn/prefer-code-point
|
|
66
|
-
input.charCodeAt(0) + 'a'.charCodeAt(0) - 1);
|
|
67
|
-
key.ctrl = true;
|
|
67
|
+
let input = keypress.ctrl ? keypress.name : keypress.sequence;
|
|
68
|
+
if (nonAlphanumericKeys.includes(keypress.name)) {
|
|
69
|
+
input = '';
|
|
68
70
|
}
|
|
71
|
+
// Strip meta if it's still remaining after `parseKeypress`
|
|
72
|
+
// TODO(vadimdemedes): remove this in the next major version.
|
|
69
73
|
if (input.startsWith('\u001B')) {
|
|
70
74
|
input = input.slice(1);
|
|
71
|
-
key.meta = true;
|
|
72
|
-
}
|
|
73
|
-
const isLatinUppercase = input >= 'A' && input <= 'Z';
|
|
74
|
-
const isCyrillicUppercase = input >= 'А' && input <= 'Я';
|
|
75
|
-
if (input.length === 1 && (isLatinUppercase || isCyrillicUppercase)) {
|
|
76
|
-
key.shift = true;
|
|
77
75
|
}
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
if (input.length === 1 &&
|
|
77
|
+
typeof input[0] === 'string' &&
|
|
78
|
+
isUpperCase(input[0])) {
|
|
80
79
|
key.shift = true;
|
|
81
80
|
}
|
|
82
|
-
if (key.tab || key.backspace || key.delete) {
|
|
83
|
-
input = '';
|
|
84
|
-
}
|
|
85
81
|
// If app is not supposed to exit on Ctrl+C, then let input listener handle it
|
|
86
82
|
if (!(input === 'c' && key.ctrl) || !internal_exitOnCtrlC) {
|
|
87
83
|
inputHandler(input, key);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-input.js","sourceRoot":"","sources":["../../src/hooks/use-input.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAChC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAyFtC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,QAAQ,GAAG,CAAC,YAAqB,EAAE,UAAmB,EAAE,EAAE,EAAE;IACjE,gEAAgE;IAChE,MAAM,EAAC,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAC,GAAG,QAAQ,EAAE,CAAC;IAE7D,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE;YAC/B,OAAO;SACP;QAED,UAAU,CAAC,IAAI,CAAC,CAAC;QAEjB,OAAO,GAAG,EAAE;YACX,UAAU,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE;YAC/B,OAAO;SACP;QAED,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;YACnC,
|
|
1
|
+
{"version":3,"file":"use-input.js","sourceRoot":"","sources":["../../src/hooks/use-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
export declare const nonAlphanumericKeys: string[];
|
|
3
|
+
type ParsedKey = {
|
|
4
|
+
name: string;
|
|
5
|
+
ctrl: boolean;
|
|
6
|
+
meta: boolean;
|
|
7
|
+
shift: boolean;
|
|
8
|
+
option: boolean;
|
|
9
|
+
sequence: string;
|
|
10
|
+
raw: string | undefined;
|
|
11
|
+
code?: string;
|
|
12
|
+
};
|
|
13
|
+
declare const parseKeypress: (s?: Buffer | string) => ParsedKey;
|
|
14
|
+
export default parseKeypress;
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
// Copied from https://github.com/enquirer/enquirer/blob/36785f3399a41cd61e9d28d1eb9c2fcd73d69b4c/lib/keypress.js
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
3
|
+
const metaKeyCodeRe = /^(?:\x1b)([a-zA-Z0-9])$/;
|
|
4
|
+
const fnKeyRe = /^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/;
|
|
5
|
+
const keyName = {
|
|
6
|
+
/* xterm/gnome ESC O letter */
|
|
7
|
+
OP: 'f1',
|
|
8
|
+
OQ: 'f2',
|
|
9
|
+
OR: 'f3',
|
|
10
|
+
OS: 'f4',
|
|
11
|
+
/* xterm/rxvt ESC [ number ~ */
|
|
12
|
+
'[11~': 'f1',
|
|
13
|
+
'[12~': 'f2',
|
|
14
|
+
'[13~': 'f3',
|
|
15
|
+
'[14~': 'f4',
|
|
16
|
+
/* from Cygwin and used in libuv */
|
|
17
|
+
'[[A': 'f1',
|
|
18
|
+
'[[B': 'f2',
|
|
19
|
+
'[[C': 'f3',
|
|
20
|
+
'[[D': 'f4',
|
|
21
|
+
'[[E': 'f5',
|
|
22
|
+
/* common */
|
|
23
|
+
'[15~': 'f5',
|
|
24
|
+
'[17~': 'f6',
|
|
25
|
+
'[18~': 'f7',
|
|
26
|
+
'[19~': 'f8',
|
|
27
|
+
'[20~': 'f9',
|
|
28
|
+
'[21~': 'f10',
|
|
29
|
+
'[23~': 'f11',
|
|
30
|
+
'[24~': 'f12',
|
|
31
|
+
/* xterm ESC [ letter */
|
|
32
|
+
'[A': 'up',
|
|
33
|
+
'[B': 'down',
|
|
34
|
+
'[C': 'right',
|
|
35
|
+
'[D': 'left',
|
|
36
|
+
'[E': 'clear',
|
|
37
|
+
'[F': 'end',
|
|
38
|
+
'[H': 'home',
|
|
39
|
+
/* xterm/gnome ESC O letter */
|
|
40
|
+
OA: 'up',
|
|
41
|
+
OB: 'down',
|
|
42
|
+
OC: 'right',
|
|
43
|
+
OD: 'left',
|
|
44
|
+
OE: 'clear',
|
|
45
|
+
OF: 'end',
|
|
46
|
+
OH: 'home',
|
|
47
|
+
/* xterm/rxvt ESC [ number ~ */
|
|
48
|
+
'[1~': 'home',
|
|
49
|
+
'[2~': 'insert',
|
|
50
|
+
'[3~': 'delete',
|
|
51
|
+
'[4~': 'end',
|
|
52
|
+
'[5~': 'pageup',
|
|
53
|
+
'[6~': 'pagedown',
|
|
54
|
+
/* putty */
|
|
55
|
+
'[[5~': 'pageup',
|
|
56
|
+
'[[6~': 'pagedown',
|
|
57
|
+
/* rxvt */
|
|
58
|
+
'[7~': 'home',
|
|
59
|
+
'[8~': 'end',
|
|
60
|
+
/* rxvt keys with modifiers */
|
|
61
|
+
'[a': 'up',
|
|
62
|
+
'[b': 'down',
|
|
63
|
+
'[c': 'right',
|
|
64
|
+
'[d': 'left',
|
|
65
|
+
'[e': 'clear',
|
|
66
|
+
'[2$': 'insert',
|
|
67
|
+
'[3$': 'delete',
|
|
68
|
+
'[5$': 'pageup',
|
|
69
|
+
'[6$': 'pagedown',
|
|
70
|
+
'[7$': 'home',
|
|
71
|
+
'[8$': 'end',
|
|
72
|
+
Oa: 'up',
|
|
73
|
+
Ob: 'down',
|
|
74
|
+
Oc: 'right',
|
|
75
|
+
Od: 'left',
|
|
76
|
+
Oe: 'clear',
|
|
77
|
+
'[2^': 'insert',
|
|
78
|
+
'[3^': 'delete',
|
|
79
|
+
'[5^': 'pageup',
|
|
80
|
+
'[6^': 'pagedown',
|
|
81
|
+
'[7^': 'home',
|
|
82
|
+
'[8^': 'end',
|
|
83
|
+
/* misc. */
|
|
84
|
+
'[Z': 'tab'
|
|
85
|
+
};
|
|
86
|
+
export const nonAlphanumericKeys = [...Object.values(keyName), 'backspace'];
|
|
87
|
+
const isShiftKey = (code) => {
|
|
88
|
+
return [
|
|
89
|
+
'[a',
|
|
90
|
+
'[b',
|
|
91
|
+
'[c',
|
|
92
|
+
'[d',
|
|
93
|
+
'[e',
|
|
94
|
+
'[2$',
|
|
95
|
+
'[3$',
|
|
96
|
+
'[5$',
|
|
97
|
+
'[6$',
|
|
98
|
+
'[7$',
|
|
99
|
+
'[8$',
|
|
100
|
+
'[Z'
|
|
101
|
+
].includes(code);
|
|
102
|
+
};
|
|
103
|
+
const isCtrlKey = (code) => {
|
|
104
|
+
return [
|
|
105
|
+
'Oa',
|
|
106
|
+
'Ob',
|
|
107
|
+
'Oc',
|
|
108
|
+
'Od',
|
|
109
|
+
'Oe',
|
|
110
|
+
'[2^',
|
|
111
|
+
'[3^',
|
|
112
|
+
'[5^',
|
|
113
|
+
'[6^',
|
|
114
|
+
'[7^',
|
|
115
|
+
'[8^'
|
|
116
|
+
].includes(code);
|
|
117
|
+
};
|
|
118
|
+
const parseKeypress = (s = '') => {
|
|
119
|
+
let parts;
|
|
120
|
+
if (Buffer.isBuffer(s)) {
|
|
121
|
+
if (s[0] > 127 && s[1] === undefined) {
|
|
122
|
+
s[0] -= 128;
|
|
123
|
+
s = '\x1b' + String(s);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
s = String(s);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else if (s !== undefined && typeof s !== 'string') {
|
|
130
|
+
s = String(s);
|
|
131
|
+
}
|
|
132
|
+
else if (!s) {
|
|
133
|
+
s = '';
|
|
134
|
+
}
|
|
135
|
+
const key = {
|
|
136
|
+
name: '',
|
|
137
|
+
ctrl: false,
|
|
138
|
+
meta: false,
|
|
139
|
+
shift: false,
|
|
140
|
+
option: false,
|
|
141
|
+
sequence: s,
|
|
142
|
+
raw: s
|
|
143
|
+
};
|
|
144
|
+
key.sequence = key.sequence || s || key.name;
|
|
145
|
+
if (s === '\r') {
|
|
146
|
+
// carriage return
|
|
147
|
+
key.raw = undefined;
|
|
148
|
+
key.name = 'return';
|
|
149
|
+
}
|
|
150
|
+
else if (s === '\n') {
|
|
151
|
+
// enter, should have been called linefeed
|
|
152
|
+
key.name = 'enter';
|
|
153
|
+
}
|
|
154
|
+
else if (s === '\t') {
|
|
155
|
+
// tab
|
|
156
|
+
key.name = 'tab';
|
|
157
|
+
}
|
|
158
|
+
else if (s === '\b' || s === '\x1b\b') {
|
|
159
|
+
// backspace or ctrl+h
|
|
160
|
+
key.name = 'backspace';
|
|
161
|
+
key.meta = s.charAt(0) === '\x1b';
|
|
162
|
+
}
|
|
163
|
+
else if (s === '\x7f' || s === '\x1b\x7f') {
|
|
164
|
+
// TODO(vadimdemedes): `enquirer` detects delete key as backspace, but I had to split them up to avoid breaking changes in Ink. Merge them back together in the next major version.
|
|
165
|
+
// delete
|
|
166
|
+
key.name = 'delete';
|
|
167
|
+
key.meta = s.charAt(0) === '\x1b';
|
|
168
|
+
}
|
|
169
|
+
else if (s === '\x1b' || s === '\x1b\x1b') {
|
|
170
|
+
// escape key
|
|
171
|
+
key.name = 'escape';
|
|
172
|
+
key.meta = s.length === 2;
|
|
173
|
+
}
|
|
174
|
+
else if (s === ' ' || s === '\x1b ') {
|
|
175
|
+
key.name = 'space';
|
|
176
|
+
key.meta = s.length === 2;
|
|
177
|
+
}
|
|
178
|
+
else if (s <= '\x1a') {
|
|
179
|
+
// ctrl+letter
|
|
180
|
+
key.name = String.fromCharCode(s.charCodeAt(0) + 'a'.charCodeAt(0) - 1);
|
|
181
|
+
key.ctrl = true;
|
|
182
|
+
}
|
|
183
|
+
else if (s.length === 1 && s >= '0' && s <= '9') {
|
|
184
|
+
// number
|
|
185
|
+
key.name = 'number';
|
|
186
|
+
}
|
|
187
|
+
else if (s.length === 1 && s >= 'a' && s <= 'z') {
|
|
188
|
+
// lowercase letter
|
|
189
|
+
key.name = s;
|
|
190
|
+
}
|
|
191
|
+
else if (s.length === 1 && s >= 'A' && s <= 'Z') {
|
|
192
|
+
// shift+letter
|
|
193
|
+
key.name = s.toLowerCase();
|
|
194
|
+
key.shift = true;
|
|
195
|
+
}
|
|
196
|
+
else if ((parts = metaKeyCodeRe.exec(s))) {
|
|
197
|
+
// meta+character key
|
|
198
|
+
key.meta = true;
|
|
199
|
+
key.shift = /^[A-Z]$/.test(parts[1]);
|
|
200
|
+
}
|
|
201
|
+
else if ((parts = fnKeyRe.exec(s))) {
|
|
202
|
+
const segs = [...s];
|
|
203
|
+
if (segs[0] === '\u001b' && segs[1] === '\u001b') {
|
|
204
|
+
key.option = true;
|
|
205
|
+
}
|
|
206
|
+
// ansi escape sequence
|
|
207
|
+
// reassemble the key code leaving out leading \x1b's,
|
|
208
|
+
// the modifier key bitflag and any meaningless "1;" sequence
|
|
209
|
+
const code = [parts[1], parts[2], parts[4], parts[6]]
|
|
210
|
+
.filter(Boolean)
|
|
211
|
+
.join('');
|
|
212
|
+
const modifier = (parts[3] || parts[5] || 1) - 1;
|
|
213
|
+
// Parse the key modifier
|
|
214
|
+
key.ctrl = !!(modifier & 4);
|
|
215
|
+
key.meta = !!(modifier & 10);
|
|
216
|
+
key.shift = !!(modifier & 1);
|
|
217
|
+
key.code = code;
|
|
218
|
+
key.name = keyName[code];
|
|
219
|
+
key.shift = isShiftKey(code) || key.shift;
|
|
220
|
+
key.ctrl = isCtrlKey(code) || key.ctrl;
|
|
221
|
+
}
|
|
222
|
+
return key;
|
|
223
|
+
};
|
|
224
|
+
export default parseKeypress;
|
|
225
|
+
//# sourceMappingURL=parse-keypress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-keypress.js","sourceRoot":"","sources":["../src/parse-keypress.ts"],"names":[],"mappings":"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"}
|