ink 4.3.1 → 4.4.1
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/App.d.ts +4 -0
- package/build/components/App.js +28 -5
- package/build/components/App.js.map +1 -1
- package/build/components/StdinContext.d.ts +3 -0
- package/build/components/StdinContext.js +3 -0
- package/build/components/StdinContext.js.map +1 -1
- package/build/components/Transform.d.ts +1 -1
- package/build/devtools-window-polyfill.js +3 -0
- package/build/devtools-window-polyfill.js.map +1 -1
- package/build/hooks/use-input.js +3 -3
- package/build/hooks/use-input.js.map +1 -1
- package/build/output.js +2 -2
- package/build/output.js.map +1 -1
- package/build/render-node-to-output.d.ts +1 -1
- package/build/squash-text-nodes.js +19 -17
- package/build/squash-text-nodes.js.map +1 -1
- package/package.json +2 -2
- package/readme.md +41 -1
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
+
import { EventEmitter } from 'node:events';
|
|
2
4
|
import React, { PureComponent, type ReactNode } from 'react';
|
|
3
5
|
type Props = {
|
|
4
6
|
readonly children: ReactNode;
|
|
@@ -32,12 +34,14 @@ export default class App extends PureComponent<Props, State> {
|
|
|
32
34
|
error: undefined;
|
|
33
35
|
};
|
|
34
36
|
rawModeEnabledCount: number;
|
|
37
|
+
internal_eventEmitter: EventEmitter;
|
|
35
38
|
isRawModeSupported(): boolean;
|
|
36
39
|
render(): React.JSX.Element;
|
|
37
40
|
componentDidMount(): void;
|
|
38
41
|
componentWillUnmount(): void;
|
|
39
42
|
componentDidCatch(error: Error): void;
|
|
40
43
|
handleSetRawMode: (isEnabled: boolean) => void;
|
|
44
|
+
handleReadable: () => void;
|
|
41
45
|
handleInput: (input: string) => void;
|
|
42
46
|
handleExit: (error?: Error) => void;
|
|
43
47
|
enableFocus: () => void;
|
package/build/components/App.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
1
2
|
import process from 'node:process';
|
|
2
3
|
import React, { PureComponent } from 'react';
|
|
3
4
|
import cliCursor from 'cli-cursor';
|
|
@@ -35,6 +36,13 @@ export default class App extends PureComponent {
|
|
|
35
36
|
writable: true,
|
|
36
37
|
value: 0
|
|
37
38
|
});
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
40
|
+
Object.defineProperty(this, "internal_eventEmitter", {
|
|
41
|
+
enumerable: true,
|
|
42
|
+
configurable: true,
|
|
43
|
+
writable: true,
|
|
44
|
+
value: new EventEmitter()
|
|
45
|
+
});
|
|
38
46
|
Object.defineProperty(this, "handleSetRawMode", {
|
|
39
47
|
enumerable: true,
|
|
40
48
|
configurable: true,
|
|
@@ -53,9 +61,9 @@ export default class App extends PureComponent {
|
|
|
53
61
|
if (isEnabled) {
|
|
54
62
|
// Ensure raw mode is enabled only once
|
|
55
63
|
if (this.rawModeEnabledCount === 0) {
|
|
56
|
-
stdin.
|
|
57
|
-
stdin.resume();
|
|
64
|
+
stdin.ref();
|
|
58
65
|
stdin.setRawMode(true);
|
|
66
|
+
stdin.addListener('readable', this.handleReadable);
|
|
59
67
|
}
|
|
60
68
|
this.rawModeEnabledCount++;
|
|
61
69
|
return;
|
|
@@ -63,8 +71,21 @@ export default class App extends PureComponent {
|
|
|
63
71
|
// Disable raw mode only when no components left that are using it
|
|
64
72
|
if (--this.rawModeEnabledCount === 0) {
|
|
65
73
|
stdin.setRawMode(false);
|
|
66
|
-
stdin.removeListener('
|
|
67
|
-
stdin.
|
|
74
|
+
stdin.removeListener('readable', this.handleReadable);
|
|
75
|
+
stdin.unref();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
Object.defineProperty(this, "handleReadable", {
|
|
80
|
+
enumerable: true,
|
|
81
|
+
configurable: true,
|
|
82
|
+
writable: true,
|
|
83
|
+
value: () => {
|
|
84
|
+
let chunk;
|
|
85
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
86
|
+
while ((chunk = this.props.stdin.read()) !== null) {
|
|
87
|
+
this.handleInput(chunk);
|
|
88
|
+
this.internal_eventEmitter.emit('input', chunk);
|
|
68
89
|
}
|
|
69
90
|
}
|
|
70
91
|
});
|
|
@@ -303,7 +324,9 @@ export default class App extends PureComponent {
|
|
|
303
324
|
setRawMode: this.handleSetRawMode,
|
|
304
325
|
isRawModeSupported: this.isRawModeSupported(),
|
|
305
326
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
306
|
-
internal_exitOnCtrlC: this.props.exitOnCtrlC
|
|
327
|
+
internal_exitOnCtrlC: this.props.exitOnCtrlC,
|
|
328
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
329
|
+
internal_eventEmitter: this.internal_eventEmitter
|
|
307
330
|
} },
|
|
308
331
|
React.createElement(StdoutContext.Provider
|
|
309
332
|
// eslint-disable-next-line react/jsx-no-constructed-context-values
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/components/App.tsx"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,KAAK,EAAE,EAAC,aAAa,EAAiB,MAAM,OAAO,CAAC;AAC3D,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAE/C,MAAM,GAAG,GAAG,IAAI,CAAC;AACjB,MAAM,QAAQ,GAAG,UAAU,CAAC;AAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC;AAyBxB,kCAAkC;AAClC,mFAAmF;AACnF,uDAAuD;AACvD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,aAA2B;IAA5D;;QAOC;;;;mBAAiB;gBAChB,cAAc,EAAE,IAAI;gBACpB,aAAa,EAAE,SAAS;gBACxB,UAAU,EAAE,EAAE;gBACd,KAAK,EAAE,SAAS;aAChB;WAAC;QAEF,gEAAgE;QAChE,sDAAsD;QACtD;;;;mBAAsB,CAAC;WAAC;
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/components/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
3
|
/// <reference types="react" />
|
|
4
|
+
import { EventEmitter } from 'node:events';
|
|
3
5
|
export type Props = {
|
|
4
6
|
/**
|
|
5
7
|
* Stdin stream passed to `render()` in `options.stdin` or `process.stdin` by default. Useful if your app needs to handle user input.
|
|
@@ -15,6 +17,7 @@ export type Props = {
|
|
|
15
17
|
*/
|
|
16
18
|
readonly isRawModeSupported: boolean;
|
|
17
19
|
readonly internal_exitOnCtrlC: boolean;
|
|
20
|
+
readonly internal_eventEmitter: EventEmitter;
|
|
18
21
|
};
|
|
19
22
|
/**
|
|
20
23
|
* `StdinContext` is a React context, which exposes input stream.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
1
2
|
import process from 'node:process';
|
|
2
3
|
import { createContext } from 'react';
|
|
3
4
|
/**
|
|
@@ -6,6 +7,8 @@ import { createContext } from 'react';
|
|
|
6
7
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
7
8
|
const StdinContext = createContext({
|
|
8
9
|
stdin: process.stdin,
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
11
|
+
internal_eventEmitter: new EventEmitter(),
|
|
9
12
|
setRawMode() { },
|
|
10
13
|
isRawModeSupported: false,
|
|
11
14
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StdinContext.js","sourceRoot":"","sources":["../../src/components/StdinContext.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"StdinContext.js","sourceRoot":"","sources":["../../src/components/StdinContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AACzC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;AAwBpC;;GAEG;AACH,gEAAgE;AAChE,MAAM,YAAY,GAAG,aAAa,CAAQ;IACzC,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,gEAAgE;IAChE,qBAAqB,EAAE,IAAI,YAAY,EAAE;IACzC,UAAU,KAAI,CAAC;IACf,kBAAkB,EAAE,KAAK;IACzB,gEAAgE;IAChE,oBAAoB,EAAE,IAAI;CAC1B,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,GAAG,sBAAsB,CAAC;AAElD,eAAe,YAAY,CAAC"}
|
|
@@ -3,7 +3,7 @@ export type Props = {
|
|
|
3
3
|
/**
|
|
4
4
|
* Function which transforms children output. It accepts children and must return transformed children too.
|
|
5
5
|
*/
|
|
6
|
-
readonly transform: (children: string) => string;
|
|
6
|
+
readonly transform: (children: string, index: number) => string;
|
|
7
7
|
readonly children?: ReactNode;
|
|
8
8
|
};
|
|
9
9
|
/**
|
|
@@ -9,6 +9,9 @@ if (!customGlobal.WebSocket) {
|
|
|
9
9
|
if (!customGlobal.window) {
|
|
10
10
|
customGlobal.window = global;
|
|
11
11
|
}
|
|
12
|
+
if (!customGlobal.self) {
|
|
13
|
+
customGlobal.self = global;
|
|
14
|
+
}
|
|
12
15
|
// Filter out Ink's internal components from devtools for a cleaner view.
|
|
13
16
|
// Also, ince `react-devtools-shared` package isn't published on npm, we can't
|
|
14
17
|
// use its types, that's why there are hard-coded values in `type` fields below.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools-window-polyfill.js","sourceRoot":"","sources":["../src/devtools-window-polyfill.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,mEAAmE;AACnE,MAAM,YAAY,GAAG,MAAa,CAAC;AAEnC,iEAAiE;AACjE,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;IAC5B,YAAY,CAAC,SAAS,GAAG,EAAE,CAAC;CAC5B;AAED,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;IACzB,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED,yEAAyE;AACzE,8EAA8E;AAC9E,gFAAgF;AAChF,sIAAsI;AACtI,YAAY,CAAC,MAAM,CAAC,oCAAoC,GAAG;IAC1D;QACC,6BAA6B;QAC7B,IAAI,EAAE,CAAC;QACP,2BAA2B;QAC3B,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,IAAI;KACf;IACD;QACC,6BAA6B;QAC7B,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;KACb;IACD;QACC,6BAA6B;QAC7B,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,oBAAoB;QAC3B,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;KACb;IACD;QACC,6BAA6B;QAC7B,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,uBAAuB;QAC9B,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;KACb;IACD;QACC,6BAA6B;QAC7B,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,uBAAuB;QAC9B,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;KACb;IACD;QACC,6BAA6B;QAC7B,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,sBAAsB;QAC7B,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;KACb;IACD;QACC,6BAA6B;QAC7B,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,sBAAsB;QAC7B,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;KACb;CACD,CAAC"}
|
|
1
|
+
{"version":3,"file":"devtools-window-polyfill.js","sourceRoot":"","sources":["../src/devtools-window-polyfill.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,mEAAmE;AACnE,MAAM,YAAY,GAAG,MAAa,CAAC;AAEnC,iEAAiE;AACjE,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;IAC5B,YAAY,CAAC,SAAS,GAAG,EAAE,CAAC;CAC5B;AAED,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;IACzB,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC;CAC7B;AAED,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IACvB,YAAY,CAAC,IAAI,GAAG,MAAM,CAAC;CAC3B;AAED,yEAAyE;AACzE,8EAA8E;AAC9E,gFAAgF;AAChF,sIAAsI;AACtI,YAAY,CAAC,MAAM,CAAC,oCAAoC,GAAG;IAC1D;QACC,6BAA6B;QAC7B,IAAI,EAAE,CAAC;QACP,2BAA2B;QAC3B,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,IAAI;KACf;IACD;QACC,6BAA6B;QAC7B,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;KACb;IACD;QACC,6BAA6B;QAC7B,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,oBAAoB;QAC3B,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;KACb;IACD;QACC,6BAA6B;QAC7B,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,uBAAuB;QAC9B,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;KACb;IACD;QACC,6BAA6B;QAC7B,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,uBAAuB;QAC9B,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;KACb;IACD;QACC,6BAA6B;QAC7B,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,sBAAsB;QAC7B,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;KACb;IACD;QACC,6BAA6B;QAC7B,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,sBAAsB;QAC7B,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;KACb;CACD,CAAC"}
|
package/build/hooks/use-input.js
CHANGED
|
@@ -29,7 +29,7 @@ import useStdin from './use-stdin.js';
|
|
|
29
29
|
*/
|
|
30
30
|
const useInput = (inputHandler, options = {}) => {
|
|
31
31
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
32
|
-
const { stdin, setRawMode, internal_exitOnCtrlC } = useStdin();
|
|
32
|
+
const { stdin, setRawMode, internal_exitOnCtrlC, internal_eventEmitter } = useStdin();
|
|
33
33
|
useEffect(() => {
|
|
34
34
|
if (options.isActive === false) {
|
|
35
35
|
return;
|
|
@@ -87,9 +87,9 @@ const useInput = (inputHandler, options = {}) => {
|
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
89
|
};
|
|
90
|
-
|
|
90
|
+
internal_eventEmitter?.on('input', handleData);
|
|
91
91
|
return () => {
|
|
92
|
-
|
|
92
|
+
internal_eventEmitter?.removeListener('input', handleData);
|
|
93
93
|
};
|
|
94
94
|
}, [options.isActive, stdin, internal_exitOnCtrlC, inputHandler]);
|
|
95
95
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-input.js","sourceRoot":"","sources":["../../src/hooks/use-input.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-input.js","sourceRoot":"","sources":["../../src/hooks/use-input.ts"],"names":[],"mappings":"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"}
|
package/build/output.js
CHANGED
|
@@ -117,14 +117,14 @@ export default class Output {
|
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
let offsetY = 0;
|
|
120
|
-
for (let line of lines) {
|
|
120
|
+
for (let [index, line] of lines.entries()) {
|
|
121
121
|
const currentLine = output[y + offsetY];
|
|
122
122
|
// Line can be missing if `text` is taller than height of pre-initialized `this.output`
|
|
123
123
|
if (!currentLine) {
|
|
124
124
|
continue;
|
|
125
125
|
}
|
|
126
126
|
for (const transformer of transformers) {
|
|
127
|
-
line = transformer(line);
|
|
127
|
+
line = transformer(line, index);
|
|
128
128
|
}
|
|
129
129
|
const characters = styledCharsFromTokens(tokenize(line));
|
|
130
130
|
let offsetX = x;
|
package/build/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type DOMElement } from './dom.js';
|
|
2
2
|
import type Output from './output.js';
|
|
3
|
-
export type OutputTransformer = (s: string) => string;
|
|
3
|
+
export type OutputTransformer = (s: string, index: number) => string;
|
|
4
4
|
declare const renderNodeToOutput: (node: DOMElement, output: Output, options: {
|
|
5
5
|
offsetX?: number;
|
|
6
6
|
offsetY?: number;
|
|
@@ -6,26 +6,28 @@
|
|
|
6
6
|
// which need to wrap all children at once, instead of wrapping 3 text nodes separately.
|
|
7
7
|
const squashTextNodes = (node) => {
|
|
8
8
|
let text = '';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
for (let index = 0; index < node.childNodes.length; index++) {
|
|
10
|
+
const childNode = node.childNodes[index];
|
|
11
|
+
if (childNode === undefined) {
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
let nodeText = '';
|
|
15
|
+
if (childNode.nodeName === '#text') {
|
|
16
|
+
nodeText = childNode.nodeValue;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
if (childNode.nodeName === 'ink-text' ||
|
|
20
|
+
childNode.nodeName === 'ink-virtual-text') {
|
|
21
|
+
nodeText = squashTextNodes(childNode);
|
|
14
22
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
// Since these text nodes are being concatenated, `Output` instance won't be able to
|
|
21
|
-
// apply children transform, so we have to do it manually here for each text node
|
|
22
|
-
if (nodeText.length > 0 &&
|
|
23
|
-
typeof childNode.internal_transform === 'function') {
|
|
24
|
-
nodeText = childNode.internal_transform(nodeText);
|
|
25
|
-
}
|
|
23
|
+
// Since these text nodes are being concatenated, `Output` instance won't be able to
|
|
24
|
+
// apply children transform, so we have to do it manually here for each text node
|
|
25
|
+
if (nodeText.length > 0 &&
|
|
26
|
+
typeof childNode.internal_transform === 'function') {
|
|
27
|
+
nodeText = childNode.internal_transform(nodeText, index);
|
|
26
28
|
}
|
|
27
|
-
text += nodeText;
|
|
28
29
|
}
|
|
30
|
+
text += nodeText;
|
|
29
31
|
}
|
|
30
32
|
return text;
|
|
31
33
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"squash-text-nodes.js","sourceRoot":"","sources":["../src/squash-text-nodes.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,4EAA4E;AAC5E,qEAAqE;AACrE,EAAE;AACF,kGAAkG;AAClG,wFAAwF;AACxF,MAAM,eAAe,GAAG,CAAC,IAAgB,EAAU,EAAE;IACpD,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"squash-text-nodes.js","sourceRoot":"","sources":["../src/squash-text-nodes.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,4EAA4E;AAC5E,qEAAqE;AACrE,EAAE;AACF,kGAAkG;AAClG,wFAAwF;AACxF,MAAM,eAAe,GAAG,CAAC,IAAgB,EAAU,EAAE;IACpD,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAEzC,IAAI,SAAS,KAAK,SAAS,EAAE;YAC5B,SAAS;SACT;QAED,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,IAAI,SAAS,CAAC,QAAQ,KAAK,OAAO,EAAE;YACnC,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC;SAC/B;aAAM;YACN,IACC,SAAS,CAAC,QAAQ,KAAK,UAAU;gBACjC,SAAS,CAAC,QAAQ,KAAK,kBAAkB,EACxC;gBACD,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;aACtC;YAED,oFAAoF;YACpF,iFAAiF;YACjF,IACC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACnB,OAAO,SAAS,CAAC,kBAAkB,KAAK,UAAU,EACjD;gBACD,QAAQ,GAAG,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;aACzD;SACD;QAED,IAAI,IAAI,QAAQ,CAAC;KACjB;IAED,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ink",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.4.1",
|
|
4
4
|
"description": "React for CLI",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "vadimdemedes/ink",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"text"
|
|
44
44
|
],
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@alcalzone/ansi-tokenize": "^0.1.
|
|
46
|
+
"@alcalzone/ansi-tokenize": "^0.1.3",
|
|
47
47
|
"ansi-escapes": "^6.0.0",
|
|
48
48
|
"auto-bind": "^5.0.1",
|
|
49
49
|
"chalk": "^5.2.0",
|
package/readme.md
CHANGED
|
@@ -1373,7 +1373,41 @@ render(<Example />);
|
|
|
1373
1373
|
|
|
1374
1374
|
Since `transform` function converts all characters to upper case, final output that's rendered to the terminal will be "HELLO WORLD", not "Hello World".
|
|
1375
1375
|
|
|
1376
|
-
|
|
1376
|
+
When the output wraps to multiple lines, it can be helpful to know which line is being processed.
|
|
1377
|
+
|
|
1378
|
+
For example, to implement a hanging indent component, you can indent all the lines except for the first.
|
|
1379
|
+
|
|
1380
|
+
```jsx
|
|
1381
|
+
import {render, Transform} from 'ink';
|
|
1382
|
+
|
|
1383
|
+
const HangingIndent = ({content, indent = 4, children, ...props}) => (
|
|
1384
|
+
<Transform
|
|
1385
|
+
transform={(line, index) =>
|
|
1386
|
+
index === 0 ? line : ' '.repeat(indent) + line
|
|
1387
|
+
}
|
|
1388
|
+
{...props}
|
|
1389
|
+
>
|
|
1390
|
+
{children}
|
|
1391
|
+
</Transform>
|
|
1392
|
+
);
|
|
1393
|
+
|
|
1394
|
+
const text =
|
|
1395
|
+
'WHEN I WROTE the following pages, or rather the bulk of them, ' +
|
|
1396
|
+
'I lived alone, in the woods, a mile from any neighbor, in a ' +
|
|
1397
|
+
'house which I had built myself, on the shore of Walden Pond, ' +
|
|
1398
|
+
'in Concord, Massachusetts, and earned my living by the labor ' +
|
|
1399
|
+
'of my hands only. I lived there two years and two months. At ' +
|
|
1400
|
+
'present I am a sojourner in civilized life again.';
|
|
1401
|
+
|
|
1402
|
+
// Other text properties are allowed as well
|
|
1403
|
+
render(
|
|
1404
|
+
<HangingIndent bold dimColor indent={4}>
|
|
1405
|
+
{text}
|
|
1406
|
+
</HangingIndent>
|
|
1407
|
+
);
|
|
1408
|
+
```
|
|
1409
|
+
|
|
1410
|
+
#### transform(outputLine, index)
|
|
1377
1411
|
|
|
1378
1412
|
Type: `Function`
|
|
1379
1413
|
|
|
@@ -1386,6 +1420,12 @@ Type: `string`
|
|
|
1386
1420
|
|
|
1387
1421
|
Output of child components.
|
|
1388
1422
|
|
|
1423
|
+
##### index
|
|
1424
|
+
|
|
1425
|
+
Type: `number`
|
|
1426
|
+
|
|
1427
|
+
The zero-indexed line number of the line currently being transformed.
|
|
1428
|
+
|
|
1389
1429
|
## Hooks
|
|
1390
1430
|
|
|
1391
1431
|
### useInput(inputHandler, options?)
|