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.
@@ -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<Except<Styles, "textWrap"> & {
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;
@@ -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
- const transformedStyle = {
8
- ...style,
9
- columnGap: style.columnGap || style.gap || 0,
10
- rowGap: style.rowGap || style.gap || 0,
11
- marginLeft: style.marginLeft || style.marginX || style.margin || 0,
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,iEAAiE;AACjE,OAAO,KAAK,EAAE,EAAC,UAAU,EAAyB,MAAM,OAAO,CAAC;AA2FhE;;GAEG;AACH,MAAM,GAAG,GAAG,UAAU,CACrB,CAAC,EAAC,QAAQ,EAAE,GAAG,KAAK,EAAC,EAAE,GAAG,EAAE,EAAE;IAC7B,MAAM,gBAAgB,GAAG;QACxB,GAAG,KAAK;QACR,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC;QAC5C,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC;QACtC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAClE,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QACpE,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAChE,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QACtE,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC;QACtE,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC;QACxE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC;QACpE,aAAa,EACZ,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC;QAC5D,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,IAAI,SAAS;QACzD,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,IAAI,SAAS;KACzD,CAAC;IAEF,OAAO,CACN,iCAAS,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,gBAAgB,IACxC,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"}
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":"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"}
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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"}
@@ -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
- let input = String(data);
46
+ const keypress = parseKeypress(data);
45
47
  const key = {
46
- upArrow: input === '\u001B[A',
47
- downArrow: input === '\u001B[B',
48
- leftArrow: input === '\u001B[D',
49
- rightArrow: input === '\u001B[C',
50
- pageDown: input === '\u001B[6~',
51
- pageUp: input === '\u001B[5~',
52
- return: input === '\r',
53
- escape: input === '\u001B',
54
- ctrl: false,
55
- shift: false,
56
- tab: input === '\t' || input === '\u001B[Z',
57
- backspace: input === '\u0008',
58
- delete: input === '\u007F' || input === '\u001B[3~',
59
- meta: false
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
- // Copied from `keypress` module
62
- if (input <= '\u001A' && !key.return) {
63
- // eslint-disable-next-line unicorn/prefer-code-point
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
- // Shift+Tab
79
- if (key.tab && input === '[Z') {
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,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAEzB,MAAM,GAAG,GAAG;gBACX,OAAO,EAAE,KAAK,KAAK,UAAU;gBAC7B,SAAS,EAAE,KAAK,KAAK,UAAU;gBAC/B,SAAS,EAAE,KAAK,KAAK,UAAU;gBAC/B,UAAU,EAAE,KAAK,KAAK,UAAU;gBAChC,QAAQ,EAAE,KAAK,KAAK,WAAW;gBAC/B,MAAM,EAAE,KAAK,KAAK,WAAW;gBAC7B,MAAM,EAAE,KAAK,KAAK,IAAI;gBACtB,MAAM,EAAE,KAAK,KAAK,QAAQ;gBAC1B,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,KAAK;gBACZ,GAAG,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,UAAU;gBAC3C,SAAS,EAAE,KAAK,KAAK,QAAQ;gBAC7B,MAAM,EAAE,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,WAAW;gBACnD,IAAI,EAAE,KAAK;aACX,CAAC;YAEF,gCAAgC;YAChC,IAAI,KAAK,IAAI,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBACrC,qDAAqD;gBACrD,KAAK,GAAG,MAAM,CAAC,YAAY;gBAC1B,qDAAqD;gBACrD,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAC3C,CAAC;gBACF,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;aAChB;YAED,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBAC/B,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;aAChB;YAED,MAAM,gBAAgB,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC;YACtD,MAAM,mBAAmB,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC;YACzD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,mBAAmB,CAAC,EAAE;gBACpE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;aACjB;YAED,YAAY;YACZ,IAAI,GAAG,CAAC,GAAG,IAAI,KAAK,KAAK,IAAI,EAAE;gBAC9B,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;aACjB;YAED,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE;gBAC3C,KAAK,GAAG,EAAE,CAAC;aACX;YAED,8EAA8E;YAC9E,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAC1D,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;aACzB;QACF,CAAC,CAAC;QAEF,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAE9B,OAAO,GAAG,EAAE;YACX,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAChC,CAAC,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,oBAAoB,EAAE,YAAY,CAAC,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
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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"}