@nuvin/ink 7.5.0-alpha → 7.7.0-alpha
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/allocated-seek.d.ts +21 -0
- package/build/allocated-seek.js +273 -0
- package/build/allocated-seek.js.map +1 -0
- package/build/ansi-tokenizer.js.map +1 -1
- package/build/components/App.d.ts +5 -1
- package/build/components/App.js +48 -10
- package/build/components/App.js.map +1 -1
- package/build/components/Box.d.ts +95 -0
- package/build/components/Box.js +176 -140
- package/build/components/Box.js.map +1 -1
- package/build/components/Transform.js +1 -1
- package/build/components/Transform.js.map +1 -1
- package/build/components/VLBox.d.ts +87 -0
- package/build/components/VLBox.js +5 -0
- package/build/components/VLBox.js.map +1 -0
- package/build/dom.d.ts +45 -1
- package/build/dom.js +5 -0
- package/build/dom.js.map +1 -1
- package/build/explicit-width-detection.d.ts +45 -0
- package/build/explicit-width-detection.js +172 -0
- package/build/explicit-width-detection.js.map +1 -0
- package/build/explicit-width.d.ts +1 -0
- package/build/explicit-width.js +114 -0
- package/build/explicit-width.js.map +1 -0
- package/build/hooks/use-input.js +3 -3
- package/build/hooks/use-input.js.map +1 -1
- package/build/index.d.ts +2 -0
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/build/ink.d.ts +45 -2
- package/build/ink.js +691 -164
- package/build/ink.js.map +1 -1
- package/build/input-parser.d.ts +14 -1
- package/build/input-parser.js +74 -4
- package/build/input-parser.js.map +1 -1
- package/build/layout-metadata.d.ts +28 -0
- package/build/layout-metadata.js +302 -0
- package/build/layout-metadata.js.map +1 -0
- package/build/log-update.d.ts +16 -8
- package/build/log-update.js +439 -37
- package/build/log-update.js.map +1 -1
- package/build/measure-text.d.ts +1 -1
- package/build/measure-text.js +2 -2
- package/build/measure-text.js.map +1 -1
- package/build/output.d.ts +1 -0
- package/build/output.js +69 -28
- package/build/output.js.map +1 -1
- package/build/reconciler.js +84 -10
- package/build/reconciler.js.map +1 -1
- package/build/render-background.d.ts +2 -2
- package/build/render-background.js +33 -5
- package/build/render-background.js.map +1 -1
- package/build/render-border.d.ts +2 -2
- package/build/render-border.js +78 -34
- package/build/render-border.js.map +1 -1
- package/build/render-node-to-output.d.ts +7 -1
- package/build/render-node-to-output.js +118 -27
- package/build/render-node-to-output.js.map +1 -1
- package/build/render-to-string.js +2 -1
- package/build/render-to-string.js.map +1 -1
- package/build/render.d.ts +11 -0
- package/build/render.js.map +1 -1
- package/build/renderer.d.ts +1 -0
- package/build/renderer.js +10 -2
- package/build/renderer.js.map +1 -1
- package/build/styles.js.map +1 -1
- package/build/terminal-control.d.ts +6 -0
- package/build/terminal-control.js +124 -0
- package/build/terminal-control.js.map +1 -0
- package/build/terminal-paint.d.ts +38 -0
- package/build/terminal-paint.js +47 -0
- package/build/terminal-paint.js.map +1 -0
- package/build/wrap-text.d.ts +1 -1
- package/build/wrap-text.js +2 -2
- package/build/wrap-text.js.map +1 -1
- package/package.json +3 -1
- package/readme.md +98 -0
- package/build/reflow.d.ts +0 -12
- package/build/reflow.js +0 -47
- package/build/reflow.js.map +0 -1
package/build/dom.d.ts
CHANGED
|
@@ -11,6 +11,39 @@ type LayoutListener = () => void;
|
|
|
11
11
|
export type TextName = '#text';
|
|
12
12
|
export type ElementNames = 'ink-root' | 'ink-box' | 'ink-text' | 'ink-virtual-text';
|
|
13
13
|
export type NodeNames = ElementNames | TextName;
|
|
14
|
+
export type Rect = {
|
|
15
|
+
left: number;
|
|
16
|
+
top: number;
|
|
17
|
+
right: number;
|
|
18
|
+
bottom: number;
|
|
19
|
+
};
|
|
20
|
+
export type NodeLayoutMetadata = {
|
|
21
|
+
epoch: number;
|
|
22
|
+
subtreePaintBounds: Rect;
|
|
23
|
+
hasUnboundedTransform: boolean;
|
|
24
|
+
};
|
|
25
|
+
export type StickyCandidate = {
|
|
26
|
+
node: DOMElement;
|
|
27
|
+
parentOffset: {
|
|
28
|
+
x: number;
|
|
29
|
+
y: number;
|
|
30
|
+
};
|
|
31
|
+
parentBounds: {
|
|
32
|
+
top: number;
|
|
33
|
+
bottom: number;
|
|
34
|
+
};
|
|
35
|
+
parentIsViewport: boolean;
|
|
36
|
+
transformers: OutputTransformer[];
|
|
37
|
+
paintOrder: number;
|
|
38
|
+
};
|
|
39
|
+
export type ScrollViewportMetadata = {
|
|
40
|
+
epoch: number;
|
|
41
|
+
contentExtent: {
|
|
42
|
+
width: number;
|
|
43
|
+
height: number;
|
|
44
|
+
};
|
|
45
|
+
stickyCandidates: StickyCandidate[];
|
|
46
|
+
};
|
|
14
47
|
export type DOMElement = {
|
|
15
48
|
nodeName: ElementNames;
|
|
16
49
|
attributes: Record<string, DOMNodeAttribute>;
|
|
@@ -44,10 +77,20 @@ export type DOMElement = {
|
|
|
44
77
|
internal_scrollVersion?: number;
|
|
45
78
|
internal_paintEpoch?: number;
|
|
46
79
|
internal_paintIndex?: number;
|
|
80
|
+
internal_layoutEpoch?: number;
|
|
81
|
+
internal_viewportCulling?: boolean;
|
|
82
|
+
internal_viewportCullingCount?: number;
|
|
83
|
+
internal_layoutMetadata?: NodeLayoutMetadata;
|
|
84
|
+
internal_layoutMetadataDirty?: boolean;
|
|
85
|
+
internal_scrollViewportMetadata?: ScrollViewportMetadata;
|
|
86
|
+
internal_transformAffectsGeometry?: boolean;
|
|
47
87
|
internal_stickyRect?: {
|
|
48
88
|
x: number;
|
|
49
89
|
y: number;
|
|
50
90
|
};
|
|
91
|
+
internal_lastRenderVisitCount?: number;
|
|
92
|
+
internal_lastSurfaceWriteCount?: number;
|
|
93
|
+
internal_lastSurfaceCellCount?: number;
|
|
51
94
|
} & InkNode;
|
|
52
95
|
export type TextNode = {
|
|
53
96
|
nodeName: TextName;
|
|
@@ -60,7 +103,8 @@ export type DOMNode<T = {
|
|
|
60
103
|
} ? U extends '#text' ? TextNode : DOMElement : never;
|
|
61
104
|
export type DOMNodeAttribute = boolean | string | number;
|
|
62
105
|
export declare const createNode: (nodeName: ElementNames) => DOMElement;
|
|
63
|
-
export declare const
|
|
106
|
+
export declare const incrementLayoutEpoch: (root: DOMElement) => number;
|
|
107
|
+
export declare const appendChildNode: (node: DOMElement, childNode: DOMNode) => void;
|
|
64
108
|
export declare const insertBeforeNode: (node: DOMElement, newChildNode: DOMNode, beforeChildNode: DOMNode) => void;
|
|
65
109
|
export declare const removeChildNode: (node: DOMElement, removeNode: DOMNode) => void;
|
|
66
110
|
export declare const setAttribute: (node: DOMElement, key: string, value: DOMNodeAttribute) => void;
|
package/build/dom.js
CHANGED
|
@@ -18,6 +18,11 @@ export const createNode = (nodeName) => {
|
|
|
18
18
|
}
|
|
19
19
|
return node;
|
|
20
20
|
};
|
|
21
|
+
export const incrementLayoutEpoch = (root) => {
|
|
22
|
+
const next = (root.internal_layoutEpoch ?? 0) + 1;
|
|
23
|
+
root.internal_layoutEpoch = next;
|
|
24
|
+
return next;
|
|
25
|
+
};
|
|
21
26
|
export const appendChildNode = (node, childNode) => {
|
|
22
27
|
if (childNode.parentNode) {
|
|
23
28
|
removeChildNode(childNode.parentNode, childNode);
|
package/build/dom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"AAAA,OAAO,IAA6B,MAAM,aAAa,CAAC;AACxD,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAE5C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,eAAe,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
type Position = {
|
|
2
|
+
row: number;
|
|
3
|
+
column: number;
|
|
4
|
+
};
|
|
5
|
+
type Options = {
|
|
6
|
+
getSize: () => {
|
|
7
|
+
columns: number;
|
|
8
|
+
rows: number;
|
|
9
|
+
};
|
|
10
|
+
write: (text: string) => void;
|
|
11
|
+
reserve: () => boolean;
|
|
12
|
+
onResult: (supported: boolean) => void;
|
|
13
|
+
};
|
|
14
|
+
/** Whether pending Ink output will overwrite the one-cell probe at column 1. */
|
|
15
|
+
export declare const canOverwriteFirstCell: (text: string) => boolean;
|
|
16
|
+
/** One bounded, per-instance negotiation. Ink owns pending frames and raw input. */
|
|
17
|
+
export declare class ExplicitWidthDetection {
|
|
18
|
+
private phase;
|
|
19
|
+
private inputReady;
|
|
20
|
+
private firstRow;
|
|
21
|
+
private timer?;
|
|
22
|
+
private deadline?;
|
|
23
|
+
private writing;
|
|
24
|
+
private deferredResult?;
|
|
25
|
+
private readonly replies;
|
|
26
|
+
private readonly settlementCallbacks;
|
|
27
|
+
private resolveFinished;
|
|
28
|
+
readonly finished: Promise<void>;
|
|
29
|
+
private readonly options;
|
|
30
|
+
constructor(options: Options);
|
|
31
|
+
get pending(): boolean;
|
|
32
|
+
get settled(): boolean;
|
|
33
|
+
get publicationBlocked(): boolean;
|
|
34
|
+
onSettled(callback: () => void): void;
|
|
35
|
+
start(): void;
|
|
36
|
+
setInputReady(ready: boolean): void;
|
|
37
|
+
accept(position: Position): void;
|
|
38
|
+
cancel(): void;
|
|
39
|
+
private expired;
|
|
40
|
+
private queryIfReady;
|
|
41
|
+
private send;
|
|
42
|
+
private finish;
|
|
43
|
+
private publish;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import stringWidth from 'string-width';
|
|
2
|
+
/** Whether pending Ink output will overwrite the one-cell probe at column 1. */
|
|
3
|
+
export const canOverwriteFirstCell = (text) => {
|
|
4
|
+
let remaining = text;
|
|
5
|
+
while (remaining.startsWith('\u001B')) {
|
|
6
|
+
// Only rendition controls are safe here. Do not treat arbitrary CSI/OSC
|
|
7
|
+
// payloads as evidence that Ink will overwrite the reserved cell.
|
|
8
|
+
const prefix = /^(?:\u001B\[[\d;:]*m|\u001B\]8;[^\u001B\u0007\r\n]*(?:\u001B\\|\u0007))/.exec(remaining);
|
|
9
|
+
if (!prefix)
|
|
10
|
+
return false;
|
|
11
|
+
remaining = remaining.slice(prefix[0].length);
|
|
12
|
+
}
|
|
13
|
+
if (!/^[\p{L}\p{N}\p{P}\p{S}\p{Zs}]/u.test(remaining))
|
|
14
|
+
return false;
|
|
15
|
+
const first = new Intl.Segmenter(undefined, { granularity: 'grapheme' })
|
|
16
|
+
.segment(remaining)[Symbol.iterator]()
|
|
17
|
+
.next().value;
|
|
18
|
+
return first !== undefined && stringWidth(first.segment) > 0;
|
|
19
|
+
};
|
|
20
|
+
/** One bounded, per-instance negotiation. Ink owns pending frames and raw input. */
|
|
21
|
+
export class ExplicitWidthDetection {
|
|
22
|
+
phase = 'idle';
|
|
23
|
+
inputReady = false;
|
|
24
|
+
firstRow = 0;
|
|
25
|
+
timer;
|
|
26
|
+
deadline;
|
|
27
|
+
writing = false;
|
|
28
|
+
deferredResult;
|
|
29
|
+
replies = [];
|
|
30
|
+
settlementCallbacks = [];
|
|
31
|
+
resolveFinished;
|
|
32
|
+
finished = new Promise(resolve => {
|
|
33
|
+
this.resolveFinished = resolve;
|
|
34
|
+
});
|
|
35
|
+
options;
|
|
36
|
+
constructor(options) {
|
|
37
|
+
this.options = options;
|
|
38
|
+
}
|
|
39
|
+
get pending() {
|
|
40
|
+
return this.phase !== 'idle' && this.phase !== 'settled';
|
|
41
|
+
}
|
|
42
|
+
get settled() {
|
|
43
|
+
return this.phase === 'settled';
|
|
44
|
+
}
|
|
45
|
+
get publicationBlocked() {
|
|
46
|
+
return this.writing || this.phase === 'settling';
|
|
47
|
+
}
|
|
48
|
+
onSettled(callback) {
|
|
49
|
+
if (this.settled) {
|
|
50
|
+
callback();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this.settlementCallbacks.push(callback);
|
|
54
|
+
}
|
|
55
|
+
start() {
|
|
56
|
+
if (this.phase !== 'idle')
|
|
57
|
+
return;
|
|
58
|
+
this.phase = 'waiting';
|
|
59
|
+
this.deadline = Date.now() + 200;
|
|
60
|
+
this.timer = setTimeout(() => this.cancel(), 200);
|
|
61
|
+
this.queryIfReady();
|
|
62
|
+
}
|
|
63
|
+
setInputReady(ready) {
|
|
64
|
+
if (!ready && this.inputReady)
|
|
65
|
+
this.cancel();
|
|
66
|
+
this.inputReady = ready;
|
|
67
|
+
this.queryIfReady();
|
|
68
|
+
}
|
|
69
|
+
accept(position) {
|
|
70
|
+
if (this.writing) {
|
|
71
|
+
// There are only two outstanding measurements. Keep synchronous
|
|
72
|
+
// stream callbacks bounded and process them after the full write.
|
|
73
|
+
if (this.replies.length < 2)
|
|
74
|
+
this.replies.push(position);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (this.phase !== 'first' && this.phase !== 'second')
|
|
78
|
+
return;
|
|
79
|
+
if (this.expired()) {
|
|
80
|
+
this.cancel();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const { columns, rows } = this.options.getSize();
|
|
84
|
+
const { row, column } = position;
|
|
85
|
+
if (!Number.isInteger(row) ||
|
|
86
|
+
!Number.isInteger(column) ||
|
|
87
|
+
row < 1 ||
|
|
88
|
+
row > rows ||
|
|
89
|
+
column < 1 ||
|
|
90
|
+
column > columns) {
|
|
91
|
+
this.cancel();
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (this.phase === 'second') {
|
|
95
|
+
this.finish(row === this.firstRow && column === 2);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (column !== 1 ||
|
|
99
|
+
columns < 2 ||
|
|
100
|
+
!this.options.reserve() ||
|
|
101
|
+
this.expired()) {
|
|
102
|
+
this.cancel();
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
this.firstRow = row;
|
|
106
|
+
this.phase = 'second';
|
|
107
|
+
this.send('\u001B]66;w=1; \u001B\\\u001B[?6n\r');
|
|
108
|
+
}
|
|
109
|
+
cancel() {
|
|
110
|
+
this.finish(false);
|
|
111
|
+
}
|
|
112
|
+
expired() {
|
|
113
|
+
return this.deadline !== undefined && Date.now() >= this.deadline;
|
|
114
|
+
}
|
|
115
|
+
queryIfReady() {
|
|
116
|
+
if (this.phase !== 'waiting' || !this.inputReady)
|
|
117
|
+
return;
|
|
118
|
+
if (this.expired()) {
|
|
119
|
+
this.cancel();
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
this.phase = 'first';
|
|
123
|
+
this.send('\u001B[?6n');
|
|
124
|
+
}
|
|
125
|
+
send(text) {
|
|
126
|
+
this.writing = true;
|
|
127
|
+
try {
|
|
128
|
+
this.options.write(text);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
this.cancel();
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
this.writing = false;
|
|
135
|
+
}
|
|
136
|
+
if (this.deferredResult !== undefined) {
|
|
137
|
+
const result = this.deferredResult;
|
|
138
|
+
this.deferredResult = undefined;
|
|
139
|
+
this.publish(result);
|
|
140
|
+
}
|
|
141
|
+
while (this.replies.length > 0)
|
|
142
|
+
this.accept(this.replies.shift());
|
|
143
|
+
}
|
|
144
|
+
finish(supported) {
|
|
145
|
+
if (this.phase === 'settling' || this.settled)
|
|
146
|
+
return;
|
|
147
|
+
this.phase = 'settling';
|
|
148
|
+
clearTimeout(this.timer);
|
|
149
|
+
this.timer = undefined;
|
|
150
|
+
if (this.writing) {
|
|
151
|
+
this.deferredResult = supported;
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
this.publish(supported);
|
|
155
|
+
}
|
|
156
|
+
publish(supported) {
|
|
157
|
+
try {
|
|
158
|
+
this.options.onResult(supported);
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
this.phase = 'settled';
|
|
162
|
+
try {
|
|
163
|
+
for (const callback of this.settlementCallbacks.splice(0))
|
|
164
|
+
callback();
|
|
165
|
+
}
|
|
166
|
+
finally {
|
|
167
|
+
this.resolveFinished();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=explicit-width-detection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explicit-width-detection.js","sourceRoot":"","sources":["../src/explicit-width-detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function createExplicitWidthEncoder(): (text: string) => string;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
import stringWidth from 'string-width';
|
|
3
|
+
import { readTerminalControl } from './terminal-control.js';
|
|
4
|
+
const ascii = /^[\u0000-\u007F]*$/;
|
|
5
|
+
const terminalControl = /[\u0000-\u001F\u007F-\u009F]/;
|
|
6
|
+
const formatOnly = /^\p{Format}+$/u;
|
|
7
|
+
const noncharacter = /[\uFDD0-\uFDEF\uFFFE\uFFFF\u{1FFFE}\u{1FFFF}\u{2FFFE}\u{2FFFF}\u{3FFFE}\u{3FFFF}\u{4FFFE}\u{4FFFF}\u{5FFFE}\u{5FFFF}\u{6FFFE}\u{6FFFF}\u{7FFFE}\u{7FFFF}\u{8FFFE}\u{8FFFF}\u{9FFFE}\u{9FFFF}\u{AFFFE}\u{AFFFF}\u{BFFFE}\u{BFFFF}\u{CFFFE}\u{CFFFF}\u{DFFFE}\u{DFFFF}\u{EFFFE}\u{EFFFF}\u{FFFFE}\u{FFFFF}\u{10FFFE}\u{10FFFF}]/u;
|
|
8
|
+
const isWellFormed = (value) => value.isWellFormed();
|
|
9
|
+
const remember = (cache, key, value, maxEntries, maxBytes) => {
|
|
10
|
+
if (Buffer.byteLength(key, 'utf8') + Buffer.byteLength(value, 'utf8') >
|
|
11
|
+
maxBytes) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
if (!cache.has(key) && cache.size >= maxEntries) {
|
|
15
|
+
const oldest = cache.keys().next();
|
|
16
|
+
if (!oldest.done) {
|
|
17
|
+
cache.delete(oldest.value);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
cache.set(key, value);
|
|
21
|
+
};
|
|
22
|
+
export function createExplicitWidthEncoder() {
|
|
23
|
+
const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
|
|
24
|
+
const rowCache = new Map();
|
|
25
|
+
const graphemeCache = new Map();
|
|
26
|
+
const encodeGrapheme = (grapheme) => {
|
|
27
|
+
if (ascii.test(grapheme)) {
|
|
28
|
+
return grapheme;
|
|
29
|
+
}
|
|
30
|
+
const cached = graphemeCache.get(grapheme);
|
|
31
|
+
if (cached !== undefined) {
|
|
32
|
+
return cached;
|
|
33
|
+
}
|
|
34
|
+
let encoded = grapheme;
|
|
35
|
+
if (isWellFormed(grapheme) &&
|
|
36
|
+
!terminalControl.test(grapheme) &&
|
|
37
|
+
!formatOnly.test(grapheme) &&
|
|
38
|
+
!noncharacter.test(grapheme) &&
|
|
39
|
+
Buffer.byteLength(grapheme, 'utf8') <= 4096) {
|
|
40
|
+
const width = stringWidth(grapheme);
|
|
41
|
+
if (Number.isInteger(width) && width >= 1 && width <= 7) {
|
|
42
|
+
encoded = `\u001B]66;w=${width};${grapheme}\u001B\\`;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
remember(graphemeCache, grapheme, encoded, 1024, 8192);
|
|
46
|
+
return encoded;
|
|
47
|
+
};
|
|
48
|
+
const encodePrintable = (text) => {
|
|
49
|
+
if (ascii.test(text)) {
|
|
50
|
+
return text;
|
|
51
|
+
}
|
|
52
|
+
const pieces = [];
|
|
53
|
+
for (const { segment } of segmenter.segment(text)) {
|
|
54
|
+
pieces.push(encodeGrapheme(segment));
|
|
55
|
+
}
|
|
56
|
+
return pieces.join('');
|
|
57
|
+
};
|
|
58
|
+
const scanRow = (row) => {
|
|
59
|
+
const pieces = [];
|
|
60
|
+
let index = 0;
|
|
61
|
+
let printableStart = 0;
|
|
62
|
+
const flushPrintable = (end) => {
|
|
63
|
+
if (end > printableStart) {
|
|
64
|
+
pieces.push(encodePrintable(row.slice(printableStart, end)));
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
while (index < row.length) {
|
|
68
|
+
const code = row.charCodeAt(index);
|
|
69
|
+
if (code <= 0x1f || code === 0x7f || (code >= 0x80 && code <= 0x9f)) {
|
|
70
|
+
const control = readTerminalControl(row, index);
|
|
71
|
+
if (control === undefined) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
flushPrintable(index);
|
|
75
|
+
pieces.push(control.raw);
|
|
76
|
+
index = control.end;
|
|
77
|
+
printableStart = index;
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
index++;
|
|
81
|
+
}
|
|
82
|
+
flushPrintable(row.length);
|
|
83
|
+
return pieces.join('');
|
|
84
|
+
};
|
|
85
|
+
const encodeRow = (row) => {
|
|
86
|
+
const cached = rowCache.get(row);
|
|
87
|
+
if (cached !== undefined) {
|
|
88
|
+
return cached;
|
|
89
|
+
}
|
|
90
|
+
const encoded = scanRow(row);
|
|
91
|
+
if (encoded === undefined) {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
remember(rowCache, row, encoded, 256, 16_384);
|
|
95
|
+
return encoded;
|
|
96
|
+
};
|
|
97
|
+
return (text) => {
|
|
98
|
+
if (!text.includes('\n')) {
|
|
99
|
+
const encoded = encodeRow(text);
|
|
100
|
+
return encoded === undefined ? text : encoded;
|
|
101
|
+
}
|
|
102
|
+
const rows = text.split('\n');
|
|
103
|
+
const encodedRows = [];
|
|
104
|
+
for (const row of rows) {
|
|
105
|
+
const encoded = encodeRow(row);
|
|
106
|
+
if (encoded === undefined) {
|
|
107
|
+
return text;
|
|
108
|
+
}
|
|
109
|
+
encodedRows.push(encoded);
|
|
110
|
+
}
|
|
111
|
+
return encodedRows.join('\n');
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=explicit-width.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explicit-width.js","sourceRoot":"","sources":["../src/explicit-width.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACnC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAE1D,MAAM,KAAK,GAAG,oBAAoB,CAAC;AACnC,MAAM,eAAe,GAAG,8BAA8B,CAAC;AACvD,MAAM,UAAU,GAAG,gBAAgB,CAAC;AACpC,MAAM,YAAY,GACjB,gUAAgU,CAAC;AAElU,MAAM,YAAY,GAAG,CAAC,KAAa,EAAW,EAAE,CAC9C,KAAgD,CAAC,YAAY,EAAE,CAAC;AAElE,MAAM,QAAQ,GAAG,CAChB,KAA0B,EAC1B,GAAW,EACX,KAAa,EACb,UAAkB,EAClB,QAAgB,EACT,EAAE;IACT,IACC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;QACjE,QAAQ,EACP,CAAC;QACF,OAAO;IACR,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,UAAU,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,UAAU,0BAA0B;IACzC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAC,WAAW,EAAE,UAAU,EAAC,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEhD,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAU,EAAE;QACnD,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,QAAQ,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC;QACf,CAAC;QAED,IAAI,OAAO,GAAG,QAAQ,CAAC;QACvB,IACC,YAAY,CAAC,QAAQ,CAAC;YACtB,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/B,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC1B,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC5B,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,EAC1C,CAAC;YACF,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACzD,OAAO,GAAG,eAAe,KAAK,IAAI,QAAQ,UAAU,CAAC;YACtD,CAAC;QACF,CAAC;QAED,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACvD,OAAO,OAAO,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,IAAY,EAAU,EAAE;QAChD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,EAAC,OAAO,EAAC,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,GAAW,EAAsB,EAAE;QACnD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,cAAc,GAAG,CAAC,CAAC;QAEvB,MAAM,cAAc,GAAG,CAAC,GAAW,EAAQ,EAAE;YAC5C,IAAI,GAAG,GAAG,cAAc,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;QACF,CAAC,CAAC;QAEF,OAAO,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAEnC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;gBACrE,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAChD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC3B,OAAO,SAAS,CAAC;gBAClB,CAAC;gBAED,cAAc,CAAC,KAAK,CAAC,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACzB,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;gBACpB,cAAc,GAAG,KAAK,CAAC;gBACvB,SAAS;YACV,CAAC;YAED,KAAK,EAAE,CAAC;QACT,CAAC;QAED,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,GAAW,EAAsB,EAAE;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC;QACf,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO,CAAC,IAAY,EAAU,EAAE;QAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;QAC/C,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACb,CAAC;YAED,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC;AACH,CAAC"}
|
package/build/hooks/use-input.js
CHANGED
|
@@ -32,8 +32,8 @@ const useInput = (inputHandler, options = {}) => {
|
|
|
32
32
|
// closure bug in ink's custom React reconciler when used with forwardRef.
|
|
33
33
|
const handlerRef = useRef(inputHandler);
|
|
34
34
|
handlerRef.current = inputHandler;
|
|
35
|
-
const
|
|
36
|
-
|
|
35
|
+
const exitOnCtrlC = useRef(internal_exitOnCtrlC);
|
|
36
|
+
exitOnCtrlC.current = internal_exitOnCtrlC;
|
|
37
37
|
useEffect(() => {
|
|
38
38
|
if (options.isActive === false) {
|
|
39
39
|
return;
|
|
@@ -112,7 +112,7 @@ const useInput = (inputHandler, options = {}) => {
|
|
|
112
112
|
key.shift = true;
|
|
113
113
|
}
|
|
114
114
|
// If app is supposed to exit on Ctrl+C, skip input listeners.
|
|
115
|
-
if (input === 'c' && key.ctrl &&
|
|
115
|
+
if (input === 'c' && key.ctrl && exitOnCtrlC.current) {
|
|
116
116
|
return;
|
|
117
117
|
}
|
|
118
118
|
// Use discreteUpdates to assign DiscreteEventPriority to state
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-input.js","sourceRoot":"","sources":["../../src/hooks/use-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AACxC,OAAO,aAAa,EAAE,EAAC,mBAAmB,EAAC,MAAM,sBAAsB,CAAC;AACxE,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAqI/C;;;;;;;;;;;;;;;;;;;;;EAqBE;AACF,MAAM,QAAQ,GAAG,CAAC,YAAqB,EAAE,UAAmB,EAAE,EAAE,EAAE;IACjE,gEAAgE;IAChE,MAAM,EAAC,UAAU,EAAE,oBAAoB,EAAE,qBAAqB,EAAC,GAC9D,eAAe,EAAE,CAAC;IAEnB,qEAAqE;IACrE,qEAAqE;IACrE,0EAA0E;IAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACxC,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC;IAElC,MAAM,
|
|
1
|
+
{"version":3,"file":"use-input.js","sourceRoot":"","sources":["../../src/hooks/use-input.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export type { RenderToStringOptions } from './render-to-string.js';
|
|
|
4
4
|
export { default as renderToString } from './render-to-string.js';
|
|
5
5
|
export type { Props as BoxProps, BoxRef, PaintOrder } from './components/Box.js';
|
|
6
6
|
export { default as Box } from './components/Box.js';
|
|
7
|
+
export type { VLBoxProps, VLBoxRef } from './components/VLBox.js';
|
|
8
|
+
export { default as VLBox } from './components/VLBox.js';
|
|
7
9
|
export type { Props as TextProps } from './components/Text.js';
|
|
8
10
|
export { default as Text } from './components/Text.js';
|
|
9
11
|
export type { Props as AppProps } from './components/AppContext.js';
|
package/build/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { default as render } from './render.js';
|
|
2
2
|
export { default as renderToString } from './render-to-string.js';
|
|
3
3
|
export { default as Box } from './components/Box.js';
|
|
4
|
+
export { default as VLBox } from './components/VLBox.js';
|
|
4
5
|
export { default as Text } from './components/Text.js';
|
|
5
6
|
export { default as Static } from './components/Static.js';
|
|
6
7
|
export { default as Transform } from './components/Transform.js';
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAC,OAAO,IAAI,GAAG,EAAC,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,sBAAsB,CAAC;AAMrD,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAC,OAAO,IAAI,OAAO,EAAC,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAC,OAAO,IAAI,wBAAwB,EAAC,MAAM,yCAAyC,CAAC;AAC5F,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAC,OAAO,IAAI,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAEpE,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAEpE,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAalD,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAC,OAAO,IAAI,uBAAuB,EAAC,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAC,OAAO,IAAI,GAAG,EAAC,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAC,OAAO,IAAI,KAAK,EAAC,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,sBAAsB,CAAC;AAMrD,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAC,OAAO,IAAI,OAAO,EAAC,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAC,OAAO,IAAI,wBAAwB,EAAC,MAAM,yCAAyC,CAAC;AAC5F,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAC,OAAO,IAAI,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAEpE,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAEpE,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAalD,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAC,OAAO,IAAI,uBAAuB,EAAC,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,qBAAqB,CAAC"}
|
package/build/ink.d.ts
CHANGED
|
@@ -45,6 +45,7 @@ export type Options = {
|
|
|
45
45
|
*/
|
|
46
46
|
concurrent?: boolean;
|
|
47
47
|
kittyKeyboard?: KittyKeyboardOptions;
|
|
48
|
+
explicitWidth?: 'auto' | 'disabled';
|
|
48
49
|
/**
|
|
49
50
|
Override automatic interactive mode detection.
|
|
50
51
|
|
|
@@ -93,6 +94,7 @@ export default class Ink {
|
|
|
93
94
|
private alternateScreen;
|
|
94
95
|
private isUnmounted;
|
|
95
96
|
private isUnmounting;
|
|
97
|
+
private outputError;
|
|
96
98
|
private lastOutput;
|
|
97
99
|
private lastOutputToRender;
|
|
98
100
|
private lastOutputHeight;
|
|
@@ -114,12 +116,30 @@ export default class Ink {
|
|
|
114
116
|
private cancelKittyDetection?;
|
|
115
117
|
private nextRenderCommit?;
|
|
116
118
|
private readonly textSelection;
|
|
119
|
+
private lastLayoutWidth?;
|
|
120
|
+
private lastLayoutRows?;
|
|
121
|
+
private pendingStaticOutput;
|
|
122
|
+
private pendingHistoryAdvance;
|
|
123
|
+
private transformOutput?;
|
|
124
|
+
private paintEligible;
|
|
125
|
+
private paintCapability;
|
|
126
|
+
private readonly widthDetection?;
|
|
127
|
+
private pendingFrame?;
|
|
128
|
+
private reservedFrame?;
|
|
129
|
+
private readonly deferredWidthRenders;
|
|
130
|
+
private readonly deferredWidthLifecycleActions;
|
|
131
|
+
private rawInputReady;
|
|
132
|
+
private resumePendingInput?;
|
|
133
|
+
private kittyAutoFlags?;
|
|
134
|
+
private kittyQuerySent;
|
|
117
135
|
constructor(options: Options);
|
|
118
136
|
resized: () => void;
|
|
119
137
|
resolveExitPromise: (result?: unknown) => void;
|
|
120
138
|
rejectExitPromise: (reason?: Error) => void;
|
|
121
139
|
unsubscribeExit: () => void;
|
|
122
140
|
handleAppExit: (errorOrResult?: unknown) => void;
|
|
141
|
+
handleStdoutError: (error: Error) => void;
|
|
142
|
+
surfaceOutputError(error: unknown): void;
|
|
123
143
|
setCursorPosition: (position: CursorPosition | undefined) => void;
|
|
124
144
|
restoreLastOutput: () => void;
|
|
125
145
|
calculateLayout: () => void;
|
|
@@ -131,8 +151,8 @@ export default class Ink {
|
|
|
131
151
|
waitUntilExit(): Promise<unknown>;
|
|
132
152
|
waitUntilRenderFlush(): Promise<void>;
|
|
133
153
|
clear(): void;
|
|
134
|
-
private getPhysicalEraseOptions;
|
|
135
154
|
patchConsole(): void;
|
|
155
|
+
private getPhysicalEraseOptions;
|
|
136
156
|
private setAlternateScreen;
|
|
137
157
|
private resolveInteractiveOption;
|
|
138
158
|
private resolveAlternateScreenOption;
|
|
@@ -142,7 +162,30 @@ export default class Ink {
|
|
|
142
162
|
private hasPendingConcurrentWork;
|
|
143
163
|
private awaitNextRender;
|
|
144
164
|
private renderInteractiveFrame;
|
|
165
|
+
private renderPendingFrame;
|
|
166
|
+
private renderSeekFrame;
|
|
167
|
+
private renderRawInteractiveFrame;
|
|
168
|
+
private encodeTerminalOutput;
|
|
169
|
+
private commitInteractiveFrame;
|
|
170
|
+
private resolvePaintContext;
|
|
171
|
+
private getSeekPaintContext;
|
|
172
|
+
private clearPhysicalFrame;
|
|
173
|
+
private leaveSeekViewport;
|
|
174
|
+
private consumeHistoryAdvance;
|
|
175
|
+
private failExternalOutput;
|
|
176
|
+
private writeExternalOutput;
|
|
177
|
+
private writePaintRequest;
|
|
178
|
+
private publishLogicalFrame;
|
|
179
|
+
private takeStaticOutput;
|
|
180
|
+
private deferStatic;
|
|
181
|
+
private scheduleLayoutRender;
|
|
182
|
+
private reserveExplicitWidthFrame;
|
|
183
|
+
private settleExplicitWidth;
|
|
184
|
+
private deferUntilExplicitWidthSettlement;
|
|
185
|
+
private finishExplicitWidthSettlement;
|
|
186
|
+
private isTerminalResponsePending;
|
|
187
|
+
private handleInputReady;
|
|
188
|
+
private handleTerminalResponse;
|
|
145
189
|
private initKittyKeyboard;
|
|
146
|
-
private confirmKittySupport;
|
|
147
190
|
private enableKittyProtocol;
|
|
148
191
|
}
|