@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.
Files changed (80) hide show
  1. package/build/allocated-seek.d.ts +21 -0
  2. package/build/allocated-seek.js +273 -0
  3. package/build/allocated-seek.js.map +1 -0
  4. package/build/ansi-tokenizer.js.map +1 -1
  5. package/build/components/App.d.ts +5 -1
  6. package/build/components/App.js +48 -10
  7. package/build/components/App.js.map +1 -1
  8. package/build/components/Box.d.ts +95 -0
  9. package/build/components/Box.js +176 -140
  10. package/build/components/Box.js.map +1 -1
  11. package/build/components/Transform.js +1 -1
  12. package/build/components/Transform.js.map +1 -1
  13. package/build/components/VLBox.d.ts +87 -0
  14. package/build/components/VLBox.js +5 -0
  15. package/build/components/VLBox.js.map +1 -0
  16. package/build/dom.d.ts +45 -1
  17. package/build/dom.js +5 -0
  18. package/build/dom.js.map +1 -1
  19. package/build/explicit-width-detection.d.ts +45 -0
  20. package/build/explicit-width-detection.js +172 -0
  21. package/build/explicit-width-detection.js.map +1 -0
  22. package/build/explicit-width.d.ts +1 -0
  23. package/build/explicit-width.js +114 -0
  24. package/build/explicit-width.js.map +1 -0
  25. package/build/hooks/use-input.js +3 -3
  26. package/build/hooks/use-input.js.map +1 -1
  27. package/build/index.d.ts +2 -0
  28. package/build/index.js +1 -0
  29. package/build/index.js.map +1 -1
  30. package/build/ink.d.ts +45 -2
  31. package/build/ink.js +691 -164
  32. package/build/ink.js.map +1 -1
  33. package/build/input-parser.d.ts +14 -1
  34. package/build/input-parser.js +74 -4
  35. package/build/input-parser.js.map +1 -1
  36. package/build/layout-metadata.d.ts +28 -0
  37. package/build/layout-metadata.js +302 -0
  38. package/build/layout-metadata.js.map +1 -0
  39. package/build/log-update.d.ts +16 -8
  40. package/build/log-update.js +439 -37
  41. package/build/log-update.js.map +1 -1
  42. package/build/measure-text.d.ts +1 -1
  43. package/build/measure-text.js +2 -2
  44. package/build/measure-text.js.map +1 -1
  45. package/build/output.d.ts +1 -0
  46. package/build/output.js +69 -28
  47. package/build/output.js.map +1 -1
  48. package/build/reconciler.js +84 -10
  49. package/build/reconciler.js.map +1 -1
  50. package/build/render-background.d.ts +2 -2
  51. package/build/render-background.js +33 -5
  52. package/build/render-background.js.map +1 -1
  53. package/build/render-border.d.ts +2 -2
  54. package/build/render-border.js +78 -34
  55. package/build/render-border.js.map +1 -1
  56. package/build/render-node-to-output.d.ts +7 -1
  57. package/build/render-node-to-output.js +118 -27
  58. package/build/render-node-to-output.js.map +1 -1
  59. package/build/render-to-string.js +2 -1
  60. package/build/render-to-string.js.map +1 -1
  61. package/build/render.d.ts +11 -0
  62. package/build/render.js.map +1 -1
  63. package/build/renderer.d.ts +1 -0
  64. package/build/renderer.js +10 -2
  65. package/build/renderer.js.map +1 -1
  66. package/build/styles.js.map +1 -1
  67. package/build/terminal-control.d.ts +6 -0
  68. package/build/terminal-control.js +124 -0
  69. package/build/terminal-control.js.map +1 -0
  70. package/build/terminal-paint.d.ts +38 -0
  71. package/build/terminal-paint.js +47 -0
  72. package/build/terminal-paint.js.map +1 -0
  73. package/build/wrap-text.d.ts +1 -1
  74. package/build/wrap-text.js +2 -2
  75. package/build/wrap-text.js.map +1 -1
  76. package/package.json +3 -1
  77. package/readme.md +98 -0
  78. package/build/reflow.d.ts +0 -12
  79. package/build/reflow.js +0 -47
  80. 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 appendChildNode: (node: DOMElement, childNode: DOMElement) => void;
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":"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"}
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":"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"}
@@ -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 exitOnCtrlCRef = useRef(internal_exitOnCtrlC);
36
- exitOnCtrlCRef.current = internal_exitOnCtrlC;
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 && exitOnCtrlCRef.current) {
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":"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"}
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';
@@ -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
  }