@jrichman/ink 6.4.2 → 6.4.4

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.
@@ -1,75 +1,128 @@
1
1
  import process from 'node:process';
2
2
  import ansiEscapes from 'ansi-escapes';
3
3
  import cliCursor from 'cli-cursor';
4
+ import colorize from './colorize.js';
5
+ // Debugging option to simulate flicker if for terminals that do not support enableSynchronizedOutput.
6
+ const enableSynchronizedOutput = true;
4
7
  const enterSynchronizedOutput = '\u001B[?2026h';
5
8
  const exitSynchronizedOutput = '\u001B[?2026l';
6
- const create = (stream, { showCursor = false, alternateBuffer = false, alternateBufferAlreadyActive = false, getRows = () => 0, } = {}) => {
9
+ const enterAlternateBuffer = (stream, alreadyActive) => {
10
+ if (!alreadyActive) {
11
+ stream.write(ansiEscapes.enterAlternativeScreen);
12
+ }
13
+ stream.write('\u001B[?7l');
14
+ };
15
+ const exitAlternateBuffer = (stream, lastFrame) => {
16
+ stream.write('\u001B[?7h');
17
+ stream.write(ansiEscapes.exitAlternativeScreen);
18
+ // The last frame was rendered to the alternate buffer.
19
+ // We need to render it again to the main buffer. If apps do not
20
+ // want this behavior, they can make sure the last frame is empty
21
+ // before unmounting.
22
+ stream.write(lastFrame);
23
+ };
24
+ const clearAlternateBuffer = (stream) => {
25
+ const eraseOperation = process.env['TERM_PROGRAM'] === 'iTerm.app'
26
+ ? ansiEscapes.clearTerminal
27
+ : ansiEscapes.eraseScreen;
28
+ stream.write(eraseOperation);
29
+ };
30
+ const ensureCursorHidden = (showCursor, hasHiddenCursor, stream) => {
31
+ if (!showCursor && !hasHiddenCursor) {
32
+ cliCursor.hide(stream);
33
+ return true;
34
+ }
35
+ return hasHiddenCursor;
36
+ };
37
+ const ensureCursorShown = (showCursor, stream) => {
38
+ if (!showCursor) {
39
+ cliCursor.show(stream);
40
+ }
41
+ };
42
+ const moveCursorDown = (buffer, skippedLines) => {
43
+ if (skippedLines > 0) {
44
+ if (skippedLines === 1) {
45
+ buffer.push(ansiEscapes.cursorNextLine);
46
+ }
47
+ else {
48
+ buffer.push(ansiEscapes.cursorDown(skippedLines));
49
+ }
50
+ }
51
+ return 0;
52
+ };
53
+ const createStandard = (stream, { showCursor = false, alternateBuffer = false, alternateBufferAlreadyActive = false, getRows = () => 0, getColumns = () => 0, } = {}) => {
7
54
  let previousLineCount = 0;
8
55
  let previousOutput = '';
9
56
  // Keep track of the actual previous output rendered to the alternate buffer
10
57
  // which may be truncated to the terminal height.
11
58
  let previousOutputAlternateBuffer = '';
59
+ let previousRows = 0;
60
+ let previousColumns = 0;
12
61
  let hasHiddenCursor = false;
13
- if (alternateBuffer && !alternateBufferAlreadyActive) {
14
- stream.write(ansiEscapes.enterAlternativeScreen);
62
+ if (alternateBuffer) {
63
+ enterAlternateBuffer(stream, alternateBufferAlreadyActive);
15
64
  }
16
- const render = (str) => {
17
- if (!showCursor && !hasHiddenCursor) {
18
- cliCursor.hide();
19
- hasHiddenCursor = true;
20
- }
65
+ const render = (str, _styledOutput, debugRainbowColor) => {
66
+ hasHiddenCursor = ensureCursorHidden(showCursor, hasHiddenCursor, stream);
21
67
  const output = str + '\n';
22
68
  if (alternateBuffer) {
23
69
  let alternateBufferOutput = output;
24
70
  const rows = getRows() ?? 0;
71
+ const columns = getColumns() ?? 0;
25
72
  if (rows > 0) {
26
73
  const lines = str.split('\n');
27
74
  const lineCount = lines.length;
28
- // Only write the last `rows` lines as the alternate buffer
75
+ // Only write the first `rows` lines as the alternate buffer
29
76
  // will not scroll so all we accomplish by writing more
30
77
  // content is risking flicker and confusing the terminal about
31
78
  // the cursor position.
32
79
  if (lineCount > rows) {
33
- alternateBufferOutput = lines.slice(-rows).join('\n');
34
- }
35
- // Only write the last `rows` lines as the alternate buffer
36
- // will not scroll so all we accomplish by writing more
37
- // content is risking flicker and confusing the terminal about
38
- // the cursor position.
39
- if (lineCount > rows) {
40
- alternateBufferOutput = str.split('\n').slice(-rows).join('\n');
80
+ alternateBufferOutput = lines.slice(0, rows).join('\n');
41
81
  }
42
82
  }
43
83
  // In alternate buffer mode we need to re-render based on whether content
44
84
  // visible within the clipped alternate output buffer has changed even
45
85
  // if the entire output string has not changed.
46
- if (alternateBufferOutput !== previousOutputAlternateBuffer) {
86
+ if (alternateBufferOutput !== previousOutputAlternateBuffer ||
87
+ rows !== previousRows ||
88
+ columns !== previousColumns) {
47
89
  // Unfortunately, eraseScreen does not work correctly in iTerm2 so we
48
90
  // have to use clearTerminal instead.
49
91
  const eraseOperation = process.env['TERM_PROGRAM'] === 'iTerm.app'
50
92
  ? ansiEscapes.clearTerminal
51
93
  : ansiEscapes.eraseScreen;
52
- stream.write(enterSynchronizedOutput +
94
+ let outputToWrite = alternateBufferOutput;
95
+ outputToWrite = debugRainbowColor
96
+ ? colorize(outputToWrite, debugRainbowColor, 'background')
97
+ : outputToWrite;
98
+ stream.write((enableSynchronizedOutput ? enterSynchronizedOutput : '') +
53
99
  ansiEscapes.cursorTo(0, 0) +
54
100
  eraseOperation +
55
- alternateBufferOutput +
56
- exitSynchronizedOutput);
101
+ outputToWrite +
102
+ (enableSynchronizedOutput ? exitSynchronizedOutput : ''));
57
103
  previousOutputAlternateBuffer = alternateBufferOutput;
104
+ previousRows = rows;
105
+ previousColumns = columns;
58
106
  }
59
107
  previousOutput = output;
60
108
  return;
61
109
  }
110
+ if (output === previousOutput) {
111
+ return;
112
+ }
62
113
  previousOutput = output;
63
- stream.write(ansiEscapes.eraseLines(previousLineCount) + output);
114
+ let outputToWrite = output;
115
+ outputToWrite = debugRainbowColor
116
+ ? colorize(outputToWrite, debugRainbowColor, 'background')
117
+ : outputToWrite;
118
+ stream.write(ansiEscapes.eraseLines(previousLineCount) + outputToWrite);
64
119
  previousLineCount = output.split('\n').length;
65
120
  };
66
121
  render.clear = () => {
67
122
  if (alternateBuffer) {
68
- const eraseOperation = process.env['TERM_PROGRAM'] === 'iTerm.app'
69
- ? ansiEscapes.clearTerminal
70
- : ansiEscapes.eraseScreen;
71
- stream.write(eraseOperation);
123
+ clearAlternateBuffer(stream);
72
124
  previousOutput = '';
125
+ previousOutputAlternateBuffer = '';
73
126
  return;
74
127
  }
75
128
  stream.write(ansiEscapes.eraseLines(previousLineCount));
@@ -80,17 +133,10 @@ const create = (stream, { showCursor = false, alternateBuffer = false, alternate
80
133
  const lastFrame = previousOutput;
81
134
  previousOutput = '';
82
135
  previousLineCount = 0;
83
- if (!showCursor) {
84
- cliCursor.show();
85
- hasHiddenCursor = false;
86
- }
136
+ ensureCursorShown(showCursor, stream);
137
+ hasHiddenCursor = false;
87
138
  if (alternateBuffer) {
88
- stream.write(ansiEscapes.exitAlternativeScreen);
89
- // The last frame was rendered to the alternate buffer.
90
- // We need to render it again to the main buffer. If apps do not
91
- // want this behavior, they can make sure the last frame is empty
92
- // before unmounting.
93
- stream.write(lastFrame);
139
+ exitAlternateBuffer(stream, lastFrame);
94
140
  }
95
141
  };
96
142
  render.sync = (str) => {
@@ -104,6 +150,225 @@ const create = (stream, { showCursor = false, alternateBuffer = false, alternate
104
150
  };
105
151
  return render;
106
152
  };
153
+ const createIncremental = (stream, { showCursor = false, alternateBuffer = false, alternateBufferAlreadyActive = false, getRows = () => 0, getColumns = () => 0, } = {}) => {
154
+ let previousLines = [];
155
+ let previousOutput = '';
156
+ let previousOutputAlternateBuffer = '';
157
+ let previousRows = 0;
158
+ let previousColumns = 0;
159
+ let hasHiddenCursor = false;
160
+ let alternateBufferStyledOutput = [];
161
+ if (alternateBuffer) {
162
+ enterAlternateBuffer(stream, alternateBufferAlreadyActive);
163
+ }
164
+ const render = (str, styledOutput, debugRainbowColor) => {
165
+ hasHiddenCursor = ensureCursorHidden(showCursor, hasHiddenCursor, stream);
166
+ const output = str + '\n';
167
+ if (alternateBuffer) {
168
+ let alternateBufferOutput = output;
169
+ const rows = getRows() ?? 0;
170
+ const columns = getColumns() ?? 0;
171
+ if (rows > 0) {
172
+ const lines = str.split('\n');
173
+ const lineCount = lines.length;
174
+ // Only write the first `rows` lines as the alternate buffer
175
+ // will not scroll so all we accomplish by writing more
176
+ // content is risking flicker and confusion about the terminal about
177
+ // the cursor position.
178
+ if (lineCount > rows) {
179
+ alternateBufferOutput = lines.slice(0, rows).join('\n');
180
+ alternateBufferStyledOutput = styledOutput.slice(0, rows);
181
+ }
182
+ else {
183
+ alternateBufferOutput = lines.join('\n');
184
+ alternateBufferStyledOutput = styledOutput;
185
+ }
186
+ }
187
+ // In alternate buffer mode we need to re-render based on whether content
188
+ // visible within the clipped alternate output buffer has changed even
189
+ // if the entire output string has not changed.
190
+ if (alternateBufferOutput !== previousOutputAlternateBuffer ||
191
+ rows !== previousRows ||
192
+ columns !== previousColumns) {
193
+ const nextLines = alternateBufferOutput.split('\n');
194
+ if (rows === previousRows && columns === previousColumns) {
195
+ const buffer = [];
196
+ if (enableSynchronizedOutput) {
197
+ buffer.push(enterSynchronizedOutput);
198
+ }
199
+ buffer.push(ansiEscapes.cursorTo(0, 0));
200
+ let skippedLines = 0;
201
+ for (let i = 0; i < nextLines.length; i++) {
202
+ if (nextLines[i] === previousLines[i]) {
203
+ skippedLines++;
204
+ continue;
205
+ }
206
+ skippedLines = moveCursorDown(buffer, skippedLines);
207
+ let lineToWrite = nextLines[i] ?? '';
208
+ let lineLength = 0;
209
+ const styledOutput = alternateBufferStyledOutput[i];
210
+ if (styledOutput !== undefined) {
211
+ for (let j = styledOutput.length - 1; j >= 0; j--) {
212
+ const char = styledOutput[j];
213
+ if (char === undefined)
214
+ continue;
215
+ if (char.value !== ' ' && char.value !== '') {
216
+ lineLength = j + (char.fullWidth ? 2 : 1);
217
+ break;
218
+ }
219
+ }
220
+ }
221
+ lineToWrite = debugRainbowColor
222
+ ? colorize(lineToWrite, debugRainbowColor, 'background')
223
+ : lineToWrite;
224
+ buffer.push(lineToWrite);
225
+ if (columns > lineLength) {
226
+ // Clear the rest of the line without introducing flicker.
227
+ // We could optimize this further by only writing spaces up to the last line length
228
+ // but this is safer.
229
+ // The one failure mode for this is that if we add too many spaces and there was a
230
+ // non space character at the very end of the line
231
+ buffer.push(' '.repeat(columns - lineLength));
232
+ }
233
+ if (i < nextLines.length - 1) {
234
+ buffer.push('\n');
235
+ }
236
+ }
237
+ skippedLines = moveCursorDown(buffer, skippedLines);
238
+ if (previousLines.length > nextLines.length) {
239
+ const linesToClear = previousLines.length - nextLines.length;
240
+ for (let i = 0; i < linesToClear; i++) {
241
+ buffer.push(ansiEscapes.eraseLine + ansiEscapes.cursorNextLine);
242
+ }
243
+ }
244
+ if (enableSynchronizedOutput) {
245
+ buffer.push(exitSynchronizedOutput);
246
+ }
247
+ stream.write(buffer.join(''));
248
+ }
249
+ else {
250
+ // Unfortunately, eraseScreen does not work correctly in iTerm2 so we
251
+ // have to use clearTerminal instead.
252
+ const eraseOperation = process.env['TERM_PROGRAM'] === 'iTerm.app'
253
+ ? ansiEscapes.clearTerminal
254
+ : ansiEscapes.eraseScreen;
255
+ let outputToWrite = alternateBufferOutput;
256
+ outputToWrite = debugRainbowColor
257
+ ? colorize(outputToWrite, debugRainbowColor, 'background')
258
+ : outputToWrite;
259
+ stream.write(enterSynchronizedOutput +
260
+ ansiEscapes.cursorTo(0, 0) +
261
+ eraseOperation +
262
+ outputToWrite +
263
+ exitSynchronizedOutput);
264
+ previousRows = rows;
265
+ previousColumns = columns;
266
+ }
267
+ previousOutputAlternateBuffer = alternateBufferOutput;
268
+ previousLines = nextLines;
269
+ }
270
+ previousOutput = output;
271
+ return;
272
+ }
273
+ if (output === previousOutput) {
274
+ return;
275
+ }
276
+ const previousCount = previousLines.length;
277
+ const nextLines = output.split('\n');
278
+ const nextCount = nextLines.length;
279
+ const visibleCount = nextCount - 1;
280
+ if (output === '\n' || previousOutput.length === 0) {
281
+ let outputToWrite = output;
282
+ outputToWrite = debugRainbowColor
283
+ ? colorize(outputToWrite, debugRainbowColor, 'background')
284
+ : outputToWrite;
285
+ stream.write(ansiEscapes.eraseLines(previousCount) + outputToWrite);
286
+ previousOutput = output;
287
+ previousLines = nextLines;
288
+ return;
289
+ }
290
+ // We aggregate all chunks for incremental rendering into a buffer, and then write them to stdout at the end.
291
+ const buffer = [];
292
+ // Clear extra lines if the current content's line count is lower than the previous.
293
+ if (nextCount < previousCount) {
294
+ buffer.push(
295
+ // Erases the trailing lines and the final newline slot.
296
+ ansiEscapes.eraseLines(previousCount - nextCount + 1),
297
+ // Positions cursor to the top of the rendered output.
298
+ ansiEscapes.cursorUp(visibleCount));
299
+ }
300
+ else {
301
+ buffer.push(ansiEscapes.cursorUp(previousCount - 1));
302
+ }
303
+ let skippedLines = 0;
304
+ for (let i = 0; i < visibleCount; i++) {
305
+ // We do not write lines if the contents are the same. This prevents flickering during renders.
306
+ if (nextLines[i] === previousLines[i]) {
307
+ skippedLines++;
308
+ continue;
309
+ }
310
+ skippedLines = moveCursorDown(buffer, skippedLines);
311
+ let lineToWrite = nextLines[i] ?? '';
312
+ lineToWrite = debugRainbowColor
313
+ ? colorize(lineToWrite, debugRainbowColor, 'background')
314
+ : lineToWrite;
315
+ buffer.push(ansiEscapes.eraseLine + lineToWrite + '\n');
316
+ }
317
+ skippedLines = moveCursorDown(buffer, skippedLines);
318
+ stream.write(buffer.join(''));
319
+ previousOutput = output;
320
+ previousLines = nextLines;
321
+ };
322
+ render.clear = () => {
323
+ if (alternateBuffer) {
324
+ clearAlternateBuffer(stream);
325
+ previousOutput = '';
326
+ previousOutputAlternateBuffer = '';
327
+ return;
328
+ }
329
+ stream.write(ansiEscapes.eraseLines(previousLines.length));
330
+ previousOutput = '';
331
+ previousLines = [];
332
+ };
333
+ render.done = () => {
334
+ const lastFrame = previousOutput;
335
+ previousOutput = '';
336
+ previousLines = [];
337
+ ensureCursorShown(showCursor, stream);
338
+ hasHiddenCursor = false;
339
+ if (alternateBuffer) {
340
+ exitAlternateBuffer(stream, lastFrame);
341
+ }
342
+ };
343
+ render.sync = (str) => {
344
+ if (alternateBuffer) {
345
+ previousOutput = str;
346
+ return;
347
+ }
348
+ const output = str + '\n';
349
+ previousOutput = output;
350
+ previousLines = output.split('\n');
351
+ };
352
+ return render;
353
+ };
354
+ const create = (stream, { showCursor = false, alternateBuffer = false, alternateBufferAlreadyActive = false, incremental = false, getRows, getColumns, } = {}) => {
355
+ if (incremental) {
356
+ return createIncremental(stream, {
357
+ showCursor,
358
+ alternateBuffer,
359
+ alternateBufferAlreadyActive,
360
+ getRows,
361
+ getColumns,
362
+ });
363
+ }
364
+ return createStandard(stream, {
365
+ showCursor,
366
+ alternateBuffer,
367
+ alternateBufferAlreadyActive,
368
+ getRows,
369
+ getColumns,
370
+ });
371
+ };
107
372
  const logUpdate = { create };
108
373
  export default logUpdate;
109
374
  //# sourceMappingURL=log-update.js.map
@@ -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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"}
@@ -27,4 +27,46 @@ export declare const getBoundingBox: (node: DOMElement) => {
27
27
  width: number;
28
28
  height: number;
29
29
  };
30
+ export type ScrollbarBoundingBox = {
31
+ x: number;
32
+ y: number;
33
+ width: number;
34
+ height: number;
35
+ thumb: {
36
+ x: number;
37
+ y: number;
38
+ width: number;
39
+ height: number;
40
+ start: number;
41
+ end: number;
42
+ startHalf: number;
43
+ endHalf: number;
44
+ };
45
+ };
46
+ export declare function calculateScrollbarThumb(options: {
47
+ scrollbarDimension: number;
48
+ clientDimension: number;
49
+ scrollDimension: number;
50
+ scrollPosition: number;
51
+ axis: 'vertical' | 'horizontal';
52
+ }): {
53
+ startIndex: number;
54
+ endIndex: number;
55
+ thumbStartHalf: number;
56
+ thumbEndHalf: number;
57
+ };
58
+ /**
59
+ * Get the bounding box of the vertical scrollbar.
60
+ */
61
+ export declare const getVerticalScrollbarBoundingBox: (node: DOMElement, offset?: {
62
+ x: number;
63
+ y: number;
64
+ }) => ScrollbarBoundingBox | undefined;
65
+ /**
66
+ * Get the bounding box of the horizontal scrollbar.
67
+ */
68
+ export declare const getHorizontalScrollbarBoundingBox: (node: DOMElement, offset?: {
69
+ x: number;
70
+ y: number;
71
+ }) => ScrollbarBoundingBox | undefined;
30
72
  export default measureElement;
@@ -64,5 +64,127 @@ export const getBoundingBox = (node) => {
64
64
  }
65
65
  return { x, y, width, height };
66
66
  };
67
+ export function calculateScrollbarThumb(options) {
68
+ const { scrollbarDimension, clientDimension, scrollDimension, scrollPosition, axis, } = options;
69
+ const scrollbarDimensionHalves = scrollbarDimension * 2;
70
+ const thumbDimensionHalves = Math.max(axis === 'vertical' ? 2 : 1, Math.round((clientDimension / scrollDimension) * scrollbarDimensionHalves));
71
+ const maxScrollPosition = scrollDimension - clientDimension;
72
+ const maxThumbPosition = scrollbarDimensionHalves - thumbDimensionHalves;
73
+ const thumbPosition = maxScrollPosition > 0
74
+ ? Math.round((scrollPosition / maxScrollPosition) * maxThumbPosition)
75
+ : 0;
76
+ const thumbStartHalf = thumbPosition;
77
+ const thumbEndHalf = thumbPosition + thumbDimensionHalves;
78
+ const startIndex = Math.floor(thumbStartHalf / 2);
79
+ const endIndex = Math.min(scrollbarDimension, Math.ceil(thumbEndHalf / 2));
80
+ return { startIndex, endIndex, thumbStartHalf, thumbEndHalf };
81
+ }
82
+ /**
83
+ * Get the bounding box of the vertical scrollbar.
84
+ */
85
+ export const getVerticalScrollbarBoundingBox = (node, offset) => {
86
+ const { yogaNode } = node;
87
+ if (!yogaNode) {
88
+ return undefined;
89
+ }
90
+ const overflow = node.style.overflow ?? 'visible';
91
+ const overflowY = node.style.overflowY ?? overflow;
92
+ if (overflowY !== 'scroll') {
93
+ return undefined;
94
+ }
95
+ const clientHeight = node.internal_scrollState?.clientHeight ?? 0;
96
+ const scrollHeight = node.internal_scrollState?.scrollHeight ?? 0;
97
+ if (scrollHeight <= clientHeight) {
98
+ return undefined;
99
+ }
100
+ const { x, y } = offset ?? getBoundingBox(node);
101
+ const scrollbarHeight = yogaNode.getComputedHeight() -
102
+ yogaNode.getComputedBorder(Yoga.EDGE_TOP) -
103
+ yogaNode.getComputedBorder(Yoga.EDGE_BOTTOM);
104
+ const { startIndex, endIndex, thumbStartHalf, thumbEndHalf } = calculateScrollbarThumb({
105
+ scrollbarDimension: scrollbarHeight,
106
+ clientDimension: clientHeight,
107
+ scrollDimension: scrollHeight,
108
+ scrollPosition: node.internal_scrollState?.scrollTop ?? 0,
109
+ axis: 'vertical',
110
+ });
111
+ const scrollbarX = x +
112
+ yogaNode.getComputedWidth() -
113
+ 1 -
114
+ yogaNode.getComputedBorder(Yoga.EDGE_RIGHT);
115
+ const scrollbarY = y + yogaNode.getComputedBorder(Yoga.EDGE_TOP);
116
+ return {
117
+ x: scrollbarX,
118
+ y: scrollbarY,
119
+ width: 1,
120
+ height: scrollbarHeight,
121
+ thumb: {
122
+ x: scrollbarX,
123
+ y: scrollbarY + startIndex,
124
+ width: 1,
125
+ height: endIndex - startIndex,
126
+ start: startIndex,
127
+ end: endIndex,
128
+ startHalf: thumbStartHalf,
129
+ endHalf: thumbEndHalf,
130
+ },
131
+ };
132
+ };
133
+ /**
134
+ * Get the bounding box of the horizontal scrollbar.
135
+ */
136
+ export const getHorizontalScrollbarBoundingBox = (node, offset) => {
137
+ const { yogaNode } = node;
138
+ if (!yogaNode) {
139
+ return undefined;
140
+ }
141
+ const overflow = node.style.overflow ?? 'visible';
142
+ const overflowX = node.style.overflowX ?? overflow;
143
+ if (overflowX !== 'scroll') {
144
+ return undefined;
145
+ }
146
+ const clientWidth = node.internal_scrollState?.clientWidth ?? 0;
147
+ const scrollWidth = node.internal_scrollState?.scrollWidth ?? 0;
148
+ if (scrollWidth <= clientWidth) {
149
+ return undefined;
150
+ }
151
+ const { x, y } = offset ?? getBoundingBox(node);
152
+ const overflowY = node.style.overflowY ?? overflow;
153
+ const clientHeight = node.internal_scrollState?.clientHeight ?? 0;
154
+ const scrollHeight = node.internal_scrollState?.scrollHeight ?? 0;
155
+ const isVerticalScrollbarVisible = overflowY === 'scroll' && scrollHeight > clientHeight;
156
+ const scrollbarWidth = yogaNode.getComputedWidth() -
157
+ yogaNode.getComputedBorder(Yoga.EDGE_LEFT) -
158
+ yogaNode.getComputedBorder(Yoga.EDGE_RIGHT) -
159
+ (isVerticalScrollbarVisible ? 1 : 0);
160
+ const { startIndex, endIndex, thumbStartHalf, thumbEndHalf } = calculateScrollbarThumb({
161
+ scrollbarDimension: scrollbarWidth,
162
+ clientDimension: clientWidth,
163
+ scrollDimension: scrollWidth,
164
+ scrollPosition: node.internal_scrollState?.scrollLeft ?? 0,
165
+ axis: 'horizontal',
166
+ });
167
+ const scrollbarX = x + yogaNode.getComputedBorder(Yoga.EDGE_LEFT);
168
+ const scrollbarY = y +
169
+ yogaNode.getComputedHeight() -
170
+ 1 -
171
+ yogaNode.getComputedBorder(Yoga.EDGE_BOTTOM);
172
+ return {
173
+ x: scrollbarX,
174
+ y: scrollbarY,
175
+ width: scrollbarWidth,
176
+ height: 1,
177
+ thumb: {
178
+ x: scrollbarX + startIndex,
179
+ y: scrollbarY,
180
+ width: endIndex - startIndex,
181
+ height: 1,
182
+ start: startIndex,
183
+ end: endIndex,
184
+ startHalf: thumbStartHalf,
185
+ endHalf: thumbEndHalf,
186
+ },
187
+ };
188
+ };
67
189
  export default measureElement;
68
190
  //# sourceMappingURL=measure-element.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"measure-element.js","sourceRoot":"","sources":["../src/measure-element.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"measure-element.js","sourceRoot":"","sources":["../src/measure-element.ts"],"names":[],"mappings":"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"}
package/build/output.d.ts CHANGED
@@ -34,6 +34,7 @@ export default class Output {
34
34
  get(): {
35
35
  output: string;
36
36
  height: number;
37
+ styledOutput: StyledChar[][];
37
38
  };
38
39
  private clearRange;
39
40
  private applyWriteOperation;
package/build/output.js CHANGED
@@ -136,6 +136,7 @@ export default class Output {
136
136
  return {
137
137
  output: generatedOutput,
138
138
  height: output.length,
139
+ styledOutput: output,
139
140
  };
140
141
  }
141
142
  clearRange(currentLine, range, styles, value = ' ') {