@jrichman/ink 6.4.7 → 6.4.9

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.
@@ -6,6 +6,37 @@ import colorize from './colorize.js';
6
6
  const enableSynchronizedOutput = true;
7
7
  const enterSynchronizedOutput = '\u001B[?2026h';
8
8
  const exitSynchronizedOutput = '\u001B[?2026l';
9
+ /**
10
+ * Build cursor movement sequence to move from currentRow to targetRow and targetCol.
11
+ * Uses safe pattern: go to line start → move rows → set column
12
+ * This avoids issues with intermediate lines being shorter than cursor position.
13
+ */
14
+ function buildCursorMovement(currentRow, targetRow, targetCol) {
15
+ let buffer = '';
16
+ buffer += ansiEscapes.cursorTo(0);
17
+ const rowDiff = targetRow - currentRow;
18
+ if (rowDiff > 0) {
19
+ buffer += ansiEscapes.cursorDown(rowDiff);
20
+ }
21
+ else if (rowDiff < 0) {
22
+ buffer += ansiEscapes.cursorUp(-rowDiff);
23
+ }
24
+ buffer += ansiEscapes.cursorTo(targetCol);
25
+ return buffer;
26
+ }
27
+ /**
28
+ * Position terminal cursor for IME support.
29
+ * Calculates relative distance from the end of output to the cursor position.
30
+ */
31
+ export function positionImeCursor(lineCount, cursorPosition) {
32
+ let buffer = '';
33
+ const moveUp = lineCount - 1 - cursorPosition.row;
34
+ if (moveUp > 0) {
35
+ buffer += ansiEscapes.cursorUp(moveUp);
36
+ }
37
+ buffer += ansiEscapes.cursorTo(cursorPosition.col);
38
+ return buffer;
39
+ }
9
40
  const enterAlternateBuffer = (stream, alreadyActive) => {
10
41
  if (!alreadyActive) {
11
42
  stream.write(ansiEscapes.enterAlternativeScreen);
@@ -39,6 +70,21 @@ const ensureCursorShown = (showCursor, stream) => {
39
70
  cliCursor.show(stream);
40
71
  }
41
72
  };
73
+ const isCursorPositionEqual = (a, b) => {
74
+ const posA = a ?? { row: 0, col: 0 };
75
+ const posB = b ?? { row: 0, col: 0 };
76
+ return posA.row === posB.row && posA.col === posB.col;
77
+ };
78
+ /**
79
+ * Get cursor position sequence for Alternate Buffer.
80
+ * Alternate Buffer has no scroll, so we can use absolute coordinates directly.
81
+ */
82
+ const getAlternateBufferCursorSequence = (cursorPosition) => {
83
+ if (!cursorPosition) {
84
+ return '';
85
+ }
86
+ return ansiEscapes.cursorTo(cursorPosition.col, cursorPosition.row);
87
+ };
42
88
  const moveCursorDown = (buffer, skippedLines) => {
43
89
  if (skippedLines > 0) {
44
90
  if (skippedLines === 1) {
@@ -50,6 +96,21 @@ const moveCursorDown = (buffer, skippedLines) => {
50
96
  }
51
97
  return 0;
52
98
  };
99
+ const getLineLength = (styledChars) => {
100
+ if (styledChars === undefined) {
101
+ return 0;
102
+ }
103
+ for (let j = styledChars.length - 1; j >= 0; j--) {
104
+ const char = styledChars[j];
105
+ if (char === undefined) {
106
+ continue;
107
+ }
108
+ if ((char.value !== ' ' && char.value !== '') || char.styles.length > 0) {
109
+ return j + (char.fullWidth ? 2 : 1);
110
+ }
111
+ }
112
+ return 0;
113
+ };
53
114
  const createStandard = (stream, { showCursor = false, alternateBuffer = false, alternateBufferAlreadyActive = false, getRows = () => 0, getColumns = () => 0, } = {}) => {
54
115
  let previousLineCount = 0;
55
116
  let previousOutput = '';
@@ -59,11 +120,15 @@ const createStandard = (stream, { showCursor = false, alternateBuffer = false, a
59
120
  let previousRows = 0;
60
121
  let previousColumns = 0;
61
122
  let hasHiddenCursor = false;
123
+ let isFirstRender = true;
124
+ let previousCursorPosition;
62
125
  if (alternateBuffer) {
63
126
  enterAlternateBuffer(stream, alternateBufferAlreadyActive);
64
127
  }
65
- const render = (str, _styledOutput, debugRainbowColor) => {
66
- hasHiddenCursor = ensureCursorHidden(showCursor, hasHiddenCursor, stream);
128
+ const render = (str, _styledOutput, debugRainbowColor, cursorPosition) => {
129
+ if (!showCursor) {
130
+ hasHiddenCursor = ensureCursorHidden(showCursor, hasHiddenCursor, stream);
131
+ }
67
132
  const output = str + '\n';
68
133
  if (alternateBuffer) {
69
134
  let alternateBufferOutput = output;
@@ -85,7 +150,8 @@ const createStandard = (stream, { showCursor = false, alternateBuffer = false, a
85
150
  // if the entire output string has not changed.
86
151
  if (alternateBufferOutput !== previousOutputAlternateBuffer ||
87
152
  rows !== previousRows ||
88
- columns !== previousColumns) {
153
+ columns !== previousColumns ||
154
+ !isCursorPositionEqual(cursorPosition, previousCursorPosition)) {
89
155
  // Unfortunately, eraseScreen does not work correctly in iTerm2 so we
90
156
  // have to use clearTerminal instead.
91
157
  const eraseOperation = process.env['TERM_PROGRAM'] === 'iTerm.app'
@@ -95,28 +161,57 @@ const createStandard = (stream, { showCursor = false, alternateBuffer = false, a
95
161
  outputToWrite = debugRainbowColor
96
162
  ? colorize(outputToWrite, debugRainbowColor, 'background')
97
163
  : outputToWrite;
164
+ const cursorSequence = getAlternateBufferCursorSequence(cursorPosition);
98
165
  stream.write((enableSynchronizedOutput ? enterSynchronizedOutput : '') +
99
166
  ansiEscapes.cursorTo(0, 0) +
100
167
  eraseOperation +
101
168
  outputToWrite +
169
+ cursorSequence +
102
170
  (enableSynchronizedOutput ? exitSynchronizedOutput : ''));
103
171
  previousOutputAlternateBuffer = alternateBufferOutput;
104
172
  previousRows = rows;
105
173
  previousColumns = columns;
174
+ previousCursorPosition = cursorPosition ?? { row: 0, col: 0 };
106
175
  }
107
176
  previousOutput = output;
108
177
  return;
109
178
  }
179
+ const cursorChanged = !isCursorPositionEqual(cursorPosition, previousCursorPosition);
110
180
  if (output === previousOutput) {
181
+ // Output is the same, but cursor position may have changed
182
+ if (cursorChanged && cursorPosition && previousCursorPosition) {
183
+ const buffer = buildCursorMovement(previousCursorPosition.row, cursorPosition.row, cursorPosition.col);
184
+ previousCursorPosition = cursorPosition;
185
+ stream.write(buffer);
186
+ }
111
187
  return;
112
188
  }
189
+ const lineCount = output.split('\n').length;
190
+ let buffer = '';
191
+ // Move cursor to end of previous output before erasing (only if we have previous cursor position)
192
+ if (!isFirstRender && previousCursorPosition) {
193
+ const moveDown = previousLineCount - 1 - previousCursorPosition.row;
194
+ if (moveDown > 0) {
195
+ buffer += ansiEscapes.cursorDown(moveDown);
196
+ }
197
+ }
198
+ // Always erase previous lines
199
+ buffer += ansiEscapes.eraseLines(previousLineCount);
200
+ buffer += output;
201
+ isFirstRender = false;
202
+ if (cursorPosition) {
203
+ buffer += positionImeCursor(lineCount, cursorPosition);
204
+ }
205
+ previousCursorPosition = cursorPosition;
113
206
  previousOutput = output;
114
- let outputToWrite = output;
115
- outputToWrite = debugRainbowColor
116
- ? colorize(outputToWrite, debugRainbowColor, 'background')
117
- : outputToWrite;
118
- stream.write(ansiEscapes.eraseLines(previousLineCount) + outputToWrite);
119
- previousLineCount = output.split('\n').length;
207
+ previousLineCount = lineCount;
208
+ let outputToWrite = buffer;
209
+ if (debugRainbowColor) {
210
+ outputToWrite =
211
+ ansiEscapes.eraseLines(previousLineCount) +
212
+ colorize(output, debugRainbowColor, 'background');
213
+ }
214
+ stream.write(outputToWrite);
120
215
  };
121
216
  render.clear = () => {
122
217
  hasHiddenCursor = false;
@@ -126,7 +221,14 @@ const createStandard = (stream, { showCursor = false, alternateBuffer = false, a
126
221
  previousOutputAlternateBuffer = '';
127
222
  return;
128
223
  }
129
- stream.write(ansiEscapes.eraseLines(previousLineCount));
224
+ let buffer = '';
225
+ if (previousCursorPosition) {
226
+ const moveDown = previousLineCount - 1 - previousCursorPosition.row;
227
+ if (moveDown > 0) {
228
+ buffer += ansiEscapes.cursorDown(moveDown);
229
+ }
230
+ }
231
+ stream.write(buffer + ansiEscapes.eraseLines(previousLineCount));
130
232
  previousOutput = '';
131
233
  previousLineCount = 0;
132
234
  };
@@ -134,13 +236,15 @@ const createStandard = (stream, { showCursor = false, alternateBuffer = false, a
134
236
  const lastFrame = previousOutput;
135
237
  previousOutput = '';
136
238
  previousLineCount = 0;
137
- ensureCursorShown(showCursor, stream);
138
- hasHiddenCursor = false;
239
+ if (!showCursor) {
240
+ ensureCursorShown(showCursor, stream);
241
+ hasHiddenCursor = false;
242
+ }
139
243
  if (alternateBuffer) {
140
244
  exitAlternateBuffer(stream, lastFrame);
141
245
  }
142
246
  };
143
- render.sync = (str) => {
247
+ render.sync = (str, _cursorPosition) => {
144
248
  if (alternateBuffer) {
145
249
  previousOutput = str;
146
250
  return;
@@ -159,11 +263,14 @@ const createIncremental = (stream, { showCursor = false, alternateBuffer = false
159
263
  let previousColumns = 0;
160
264
  let hasHiddenCursor = false;
161
265
  let alternateBufferStyledOutput = [];
266
+ let previousCursorPosition;
162
267
  if (alternateBuffer) {
163
268
  enterAlternateBuffer(stream, alternateBufferAlreadyActive);
164
269
  }
165
- const render = (str, styledOutput, debugRainbowColor) => {
166
- hasHiddenCursor = ensureCursorHidden(showCursor, hasHiddenCursor, stream);
270
+ const render = (str, styledOutput, debugRainbowColor, cursorPosition) => {
271
+ if (!showCursor) {
272
+ hasHiddenCursor = ensureCursorHidden(showCursor, hasHiddenCursor, stream);
273
+ }
167
274
  const output = str + '\n';
168
275
  if (alternateBuffer) {
169
276
  let alternateBufferOutput = output;
@@ -190,8 +297,10 @@ const createIncremental = (stream, { showCursor = false, alternateBuffer = false
190
297
  // if the entire output string has not changed.
191
298
  if (alternateBufferOutput !== previousOutputAlternateBuffer ||
192
299
  rows !== previousRows ||
193
- columns !== previousColumns) {
300
+ columns !== previousColumns ||
301
+ !isCursorPositionEqual(cursorPosition, previousCursorPosition)) {
194
302
  const nextLines = alternateBufferOutput.split('\n');
303
+ const cursorSequence = getAlternateBufferCursorSequence(cursorPosition);
195
304
  if (rows === previousRows && columns === previousColumns) {
196
305
  const buffer = [];
197
306
  if (enableSynchronizedOutput) {
@@ -206,19 +315,7 @@ const createIncremental = (stream, { showCursor = false, alternateBuffer = false
206
315
  }
207
316
  skippedLines = moveCursorDown(buffer, skippedLines);
208
317
  let lineToWrite = nextLines[i] ?? '';
209
- let lineLength = 0;
210
- const styledOutput = alternateBufferStyledOutput[i];
211
- if (styledOutput !== undefined) {
212
- for (let j = styledOutput.length - 1; j >= 0; j--) {
213
- const char = styledOutput[j];
214
- if (char === undefined)
215
- continue;
216
- if (char.value !== ' ' && char.value !== '') {
217
- lineLength = j + (char.fullWidth ? 2 : 1);
218
- break;
219
- }
220
- }
221
- }
318
+ const lineLength = getLineLength(alternateBufferStyledOutput[i]);
222
319
  lineToWrite = debugRainbowColor
223
320
  ? colorize(lineToWrite, debugRainbowColor, 'background')
224
321
  : lineToWrite;
@@ -242,6 +339,7 @@ const createIncremental = (stream, { showCursor = false, alternateBuffer = false
242
339
  buffer.push(ansiEscapes.eraseLine + ansiEscapes.cursorNextLine);
243
340
  }
244
341
  }
342
+ buffer.push(cursorSequence);
245
343
  if (enableSynchronizedOutput) {
246
344
  buffer.push(exitSynchronizedOutput);
247
345
  }
@@ -257,27 +355,72 @@ const createIncremental = (stream, { showCursor = false, alternateBuffer = false
257
355
  outputToWrite = debugRainbowColor
258
356
  ? colorize(outputToWrite, debugRainbowColor, 'background')
259
357
  : outputToWrite;
260
- stream.write(enterSynchronizedOutput +
358
+ stream.write((enableSynchronizedOutput ? enterSynchronizedOutput : '') +
261
359
  ansiEscapes.cursorTo(0, 0) +
262
360
  eraseOperation +
263
361
  outputToWrite +
264
- exitSynchronizedOutput);
362
+ cursorSequence +
363
+ (enableSynchronizedOutput ? exitSynchronizedOutput : ''));
265
364
  previousRows = rows;
266
365
  previousColumns = columns;
267
366
  }
268
367
  previousOutputAlternateBuffer = alternateBufferOutput;
269
368
  previousLines = nextLines;
369
+ previousCursorPosition = cursorPosition ?? { row: 0, col: 0 };
270
370
  }
271
371
  previousOutput = output;
272
372
  return;
273
373
  }
274
374
  if (output === previousOutput) {
375
+ if (!isCursorPositionEqual(cursorPosition, previousCursorPosition) &&
376
+ cursorPosition &&
377
+ previousCursorPosition) {
378
+ const buffer = buildCursorMovement(previousCursorPosition.row, cursorPosition.row, cursorPosition.col);
379
+ previousCursorPosition = cursorPosition;
380
+ stream.write(buffer);
381
+ }
275
382
  return;
276
383
  }
277
384
  const previousCount = previousLines.length;
278
385
  const nextLines = output.split('\n');
279
386
  const nextCount = nextLines.length;
280
387
  const visibleCount = nextCount - 1;
388
+ if (cursorPosition !== undefined || previousCursorPosition !== undefined) {
389
+ let buffer = '';
390
+ if (output === '\n' || previousOutput.length === 0) {
391
+ // First rendering
392
+ buffer += output;
393
+ buffer += ansiEscapes.cursorSavePosition;
394
+ }
395
+ else {
396
+ // Incremental rendering after cursor restore
397
+ buffer += ansiEscapes.cursorRestorePosition;
398
+ if (nextCount < previousCount) {
399
+ buffer += ansiEscapes.eraseLines(previousCount - nextCount + 1);
400
+ buffer += ansiEscapes.cursorUp(visibleCount);
401
+ }
402
+ else {
403
+ buffer += ansiEscapes.cursorUp(previousCount - 1);
404
+ }
405
+ for (let i = 0; i < visibleCount; i++) {
406
+ if (nextLines[i] === previousLines[i]) {
407
+ buffer += ansiEscapes.cursorNextLine;
408
+ continue;
409
+ }
410
+ buffer += ansiEscapes.eraseLine + nextLines[i] + '\n';
411
+ }
412
+ buffer += ansiEscapes.cursorSavePosition;
413
+ }
414
+ if (cursorPosition) {
415
+ // Move cursor to specified position
416
+ buffer += buildCursorMovement(visibleCount, cursorPosition.row, cursorPosition.col);
417
+ }
418
+ stream.write(buffer);
419
+ previousOutput = output;
420
+ previousLines = nextLines;
421
+ previousCursorPosition = cursorPosition;
422
+ return;
423
+ }
281
424
  if (output === '\n' || previousOutput.length === 0) {
282
425
  let outputToWrite = output;
283
426
  outputToWrite = debugRainbowColor
@@ -329,7 +472,14 @@ const createIncremental = (stream, { showCursor = false, alternateBuffer = false
329
472
  previousLines = [];
330
473
  return;
331
474
  }
332
- stream.write(ansiEscapes.eraseLines(previousLines.length));
475
+ let buffer = '';
476
+ if (previousCursorPosition) {
477
+ const moveDown = previousLines.length - 1 - previousCursorPosition.row;
478
+ if (moveDown > 0) {
479
+ buffer += ansiEscapes.cursorDown(moveDown);
480
+ }
481
+ }
482
+ stream.write(buffer + ansiEscapes.eraseLines(previousLines.length));
333
483
  previousOutput = '';
334
484
  previousLines = [];
335
485
  };
@@ -337,13 +487,15 @@ const createIncremental = (stream, { showCursor = false, alternateBuffer = false
337
487
  const lastFrame = previousOutput;
338
488
  previousOutput = '';
339
489
  previousLines = [];
340
- ensureCursorShown(showCursor, stream);
341
- hasHiddenCursor = false;
490
+ if (!showCursor) {
491
+ ensureCursorShown(showCursor, stream);
492
+ hasHiddenCursor = false;
493
+ }
342
494
  if (alternateBuffer) {
343
495
  exitAlternateBuffer(stream, lastFrame);
344
496
  }
345
497
  };
346
- render.sync = (str) => {
498
+ render.sync = (str, _cursorPosition) => {
347
499
  if (alternateBuffer) {
348
500
  previousOutput = str;
349
501
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"log-update.js","sourceRoot":"","sources":["../src/log-update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log-update.js","sourceRoot":"","sources":["../src/log-update.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,20 @@
1
1
  import { type StyledChar } from '@alcalzone/ansi-tokenize';
2
+ import { type DOMNode } from './dom.js';
2
3
  export type StringWidth = (text: string) => number;
4
+ /**
5
+ * Character offset range within a text sequence.
6
+ * Used for mapping DOM nodes to their character positions.
7
+ */
8
+ export type CharOffsetRange = {
9
+ start: number;
10
+ end: number;
11
+ };
12
+ /**
13
+ * Maps DOM nodes to their character offset ranges within squashed text.
14
+ * This is the same character counting method used by getPositionAtOffset(),
15
+ * ensuring consistent cursor position calculations across the codebase.
16
+ */
17
+ export type CharOffsetMap = Map<DOMNode, CharOffsetRange>;
3
18
  export declare function setStringWidthFunction(fn: StringWidth): void;
4
19
  export declare function clearStringWidthCache(): void;
5
20
  export declare function toStyledCharacters(text: string): StyledChar[];
@@ -12,3 +27,21 @@ export declare function measureStyledChars(styledChars: StyledChar[]): {
12
27
  width: number;
13
28
  height: number;
14
29
  };
30
+ /**
31
+ * Calculate row and column position at a given character offset.
32
+ * This is the unified cursor position calculation logic used by both
33
+ * render-node-to-output.ts and output.ts.
34
+ *
35
+ * The character offset counting method matches CharOffsetMap used in
36
+ * selection.ts and squash-text-nodes.ts, ensuring consistent behavior
37
+ * between cursor positioning and text selection.
38
+ *
39
+ * Character counting rules:
40
+ * - Each StyledChar counts by its value.length (handles combining marks)
41
+ * - Newlines ('\n') advance row and reset column
42
+ * - Other characters add their visual width to column
43
+ */
44
+ export declare function getPositionAtOffset(styledChars: StyledChar[], targetOffset: number): {
45
+ row: number;
46
+ col: number;
47
+ };
@@ -181,4 +181,37 @@ export function measureStyledChars(styledChars) {
181
181
  const dimensions = { width, height };
182
182
  return dimensions;
183
183
  }
184
+ /**
185
+ * Calculate row and column position at a given character offset.
186
+ * This is the unified cursor position calculation logic used by both
187
+ * render-node-to-output.ts and output.ts.
188
+ *
189
+ * The character offset counting method matches CharOffsetMap used in
190
+ * selection.ts and squash-text-nodes.ts, ensuring consistent behavior
191
+ * between cursor positioning and text selection.
192
+ *
193
+ * Character counting rules:
194
+ * - Each StyledChar counts by its value.length (handles combining marks)
195
+ * - Newlines ('\n') advance row and reset column
196
+ * - Other characters add their visual width to column
197
+ */
198
+ export function getPositionAtOffset(styledChars, targetOffset) {
199
+ let row = 0;
200
+ let col = 0;
201
+ let charCount = 0;
202
+ for (const char of styledChars) {
203
+ if (charCount >= targetOffset) {
204
+ break;
205
+ }
206
+ if (char.value === '\n') {
207
+ row++;
208
+ col = 0;
209
+ }
210
+ else {
211
+ col += inkCharacterWidth(char.value);
212
+ }
213
+ charCount += char.value.length;
214
+ }
215
+ return { row, col };
216
+ }
184
217
  //# sourceMappingURL=measure-text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"measure-text.js","sourceRoot":"","sources":["../src/measure-text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"measure-text.js","sourceRoot":"","sources":["../src/measure-text.ts"],"names":[],"mappings":"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"}
package/build/output.d.ts CHANGED
@@ -21,6 +21,7 @@ export default class Output {
21
21
  width: number;
22
22
  height: number;
23
23
  private readonly operations;
24
+ private cursorFocusInfo;
24
25
  private readonly clips;
25
26
  constructor(options: Options);
26
27
  getCurrentClip(): Clip | undefined;
@@ -28,6 +29,8 @@ export default class Output {
28
29
  transformers: OutputTransformer[];
29
30
  lineIndex?: number;
30
31
  preserveBackgroundColor?: boolean;
32
+ isTerminalCursorFocused?: boolean;
33
+ terminalCursorPosition?: number;
31
34
  }): void;
32
35
  clip(clip: Clip): void;
33
36
  unclip(): void;
@@ -35,6 +38,10 @@ export default class Output {
35
38
  output: string;
36
39
  height: number;
37
40
  styledOutput: StyledChar[][];
41
+ cursorPosition?: {
42
+ row: number;
43
+ col: number;
44
+ };
38
45
  };
39
46
  private clearRange;
40
47
  private applyWriteOperation;
package/build/output.js CHANGED
@@ -1,9 +1,10 @@
1
1
  import { styledCharsToString } from '@alcalzone/ansi-tokenize';
2
- import { toStyledCharacters, inkCharacterWidth, styledCharsWidth, } from './measure-text.js';
2
+ import { toStyledCharacters, inkCharacterWidth, styledCharsWidth, splitStyledCharsByNewline, getPositionAtOffset, } from './measure-text.js';
3
3
  export default class Output {
4
4
  width;
5
5
  height;
6
6
  operations = [];
7
+ cursorFocusInfo = undefined;
7
8
  clips = [];
8
9
  constructor(options) {
9
10
  const { width, height } = options;
@@ -14,7 +15,17 @@ export default class Output {
14
15
  return this.clips.at(-1);
15
16
  }
16
17
  write(x, y, items, options) {
17
- const { transformers, lineIndex, preserveBackgroundColor } = options;
18
+ const { transformers, lineIndex, preserveBackgroundColor, isTerminalCursorFocused, terminalCursorPosition, } = options;
19
+ // Track cursor target position for terminal cursor synchronization
20
+ if (isTerminalCursorFocused) {
21
+ const styledChars = typeof items === 'string' ? toStyledCharacters(items) : items;
22
+ this.cursorFocusInfo = {
23
+ x,
24
+ y,
25
+ styledChars,
26
+ terminalCursorPosition,
27
+ };
28
+ }
18
29
  if (items.length === 0) {
19
30
  return;
20
31
  }
@@ -126,6 +137,31 @@ export default class Output {
126
137
  this.applyWriteOperation(output, clips, operation);
127
138
  }
128
139
  }
140
+ // Calculate cursor position from cursor target (if exists)
141
+ let cursorPosition;
142
+ if (this.cursorFocusInfo) {
143
+ const { x, y, styledChars, terminalCursorPosition: charIndex, } = this.cursorFocusInfo;
144
+ if (charIndex === undefined) {
145
+ // Use text end (backward compatible)
146
+ const lines = splitStyledCharsByNewline(styledChars);
147
+ const lastLineIndex = lines.length - 1;
148
+ const lastLine = lines[lastLineIndex] ?? [];
149
+ cursorPosition = {
150
+ row: y + lastLineIndex,
151
+ col: lastLineIndex === 0
152
+ ? x + styledCharsWidth(lastLine)
153
+ : styledCharsWidth(lastLine),
154
+ };
155
+ }
156
+ else {
157
+ // Use character index to calculate cursor position using StyledChar[]
158
+ const { row, col } = getPositionAtOffset(styledChars, charIndex);
159
+ cursorPosition = {
160
+ row: y + row,
161
+ col: x + col,
162
+ };
163
+ }
164
+ }
129
165
  const generatedOutput = output
130
166
  .map(line => {
131
167
  // See https://github.com/vadimdemedes/ink/pull/564#issuecomment-1637022742
@@ -133,10 +169,21 @@ export default class Output {
133
169
  return styledCharsToString(lineWithoutEmptyItems).trimEnd();
134
170
  })
135
171
  .join('\n');
172
+ // Adjust cursor position based on actual output (after trimEnd)
173
+ if (cursorPosition) {
174
+ const lines = generatedOutput.split('\n');
175
+ const cursorLine = lines[cursorPosition.row];
176
+ if (cursorLine !== undefined) {
177
+ const actualLineWidth = styledCharsWidth(toStyledCharacters(cursorLine));
178
+ // Cursor should not go beyond the actual trimmed line width
179
+ cursorPosition.col = Math.min(cursorPosition.col, actualLineWidth);
180
+ }
181
+ }
136
182
  return {
137
183
  output: generatedOutput,
138
184
  height: output.length,
139
185
  styledOutput: output,
186
+ cursorPosition,
140
187
  };
141
188
  }
142
189
  clearRange(currentLine, range, styles, value = ' ') {