@jrichman/ink 6.5.1-beta.0 → 6.5.1-beta.2

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 (109) hide show
  1. package/build/components/App.js +0 -3
  2. package/build/components/App.js.map +1 -1
  3. package/build/components/AppContext.js +0 -1
  4. package/build/components/AppContext.js.map +1 -1
  5. package/build/components/FocusContext.js +0 -1
  6. package/build/components/FocusContext.js.map +1 -1
  7. package/build/components/Static.js +1 -1
  8. package/build/components/Static.js.map +1 -1
  9. package/build/components/StaticRender.js +9 -1
  10. package/build/components/StaticRender.js.map +1 -1
  11. package/build/components/StderrContext.js +0 -1
  12. package/build/components/StderrContext.js.map +1 -1
  13. package/build/components/StdinContext.js +0 -3
  14. package/build/components/StdinContext.js.map +1 -1
  15. package/build/components/StdoutContext.js +0 -1
  16. package/build/components/StdoutContext.js.map +1 -1
  17. package/build/data-limited-lru-map.d.ts +1 -0
  18. package/build/data-limited-lru-map.js +4 -0
  19. package/build/data-limited-lru-map.js.map +1 -1
  20. package/build/devtools.js +0 -3
  21. package/build/devtools.js.map +1 -1
  22. package/build/dom.d.ts +7 -5
  23. package/build/dom.js +6 -2
  24. package/build/dom.js.map +1 -1
  25. package/build/hooks/use-input.js +0 -1
  26. package/build/hooks/use-input.js.map +1 -1
  27. package/build/index.d.ts +1 -1
  28. package/build/index.js +1 -0
  29. package/build/index.js.map +1 -1
  30. package/build/ink.d.ts +3 -1
  31. package/build/ink.js +12 -4
  32. package/build/ink.js.map +1 -1
  33. package/build/log-update.d.ts +2 -2
  34. package/build/log-update.js +4 -4
  35. package/build/log-update.js.map +1 -1
  36. package/build/measure-element.js +15 -45
  37. package/build/measure-element.js.map +1 -1
  38. package/build/measure-text.d.ts +11 -23
  39. package/build/measure-text.js +112 -136
  40. package/build/measure-text.js.map +1 -1
  41. package/build/output.d.ts +15 -14
  42. package/build/output.js +60 -87
  43. package/build/output.js.map +1 -1
  44. package/build/reconciler.js +23 -7
  45. package/build/reconciler.js.map +1 -1
  46. package/build/render-cached.d.ts +2 -1
  47. package/build/render-cached.js +6 -3
  48. package/build/render-cached.js.map +1 -1
  49. package/build/render-container.d.ts +2 -1
  50. package/build/render-container.js +4 -1
  51. package/build/render-container.js.map +1 -1
  52. package/build/render-node-to-output.d.ts +3 -1
  53. package/build/render-node-to-output.js +10 -2
  54. package/build/render-node-to-output.js.map +1 -1
  55. package/build/render-scrollbar.d.ts +5 -3
  56. package/build/render-scrollbar.js +9 -10
  57. package/build/render-scrollbar.js.map +1 -1
  58. package/build/render-sticky.d.ts +5 -8
  59. package/build/render-sticky.js +4 -1
  60. package/build/render-sticky.js.map +1 -1
  61. package/build/render-text-node.d.ts +4 -8
  62. package/build/render-text-node.js +62 -44
  63. package/build/render-text-node.js.map +1 -1
  64. package/build/render.d.ts +3 -1
  65. package/build/render.js.map +1 -1
  66. package/build/renderer.d.ts +3 -2
  67. package/build/renderer.js +7 -5
  68. package/build/renderer.js.map +1 -1
  69. package/build/replay.d.ts +1 -2
  70. package/build/replay.js +24 -34
  71. package/build/replay.js.map +1 -1
  72. package/build/selection.d.ts +3 -3
  73. package/build/selection.js +29 -36
  74. package/build/selection.js.map +1 -1
  75. package/build/serialization.d.ts +3 -6
  76. package/build/serialization.js +53 -98
  77. package/build/serialization.js.map +1 -1
  78. package/build/styled-line.d.ts +73 -0
  79. package/build/styled-line.js +412 -0
  80. package/build/styled-line.js.map +1 -0
  81. package/build/styled-lines.d.ts +29 -0
  82. package/build/styled-lines.js +110 -0
  83. package/build/styled-lines.js.map +1 -0
  84. package/build/styles.js.map +1 -1
  85. package/build/terminal-buffer.d.ts +4 -2
  86. package/build/terminal-buffer.js +33 -7
  87. package/build/terminal-buffer.js.map +1 -1
  88. package/build/text-wrap.d.ts +6 -6
  89. package/build/text-wrap.js +66 -50
  90. package/build/text-wrap.js.map +1 -1
  91. package/build/tokenize.d.ts +47 -0
  92. package/build/tokenize.js +419 -0
  93. package/build/tokenize.js.map +1 -0
  94. package/build/worker/canvas.d.ts +6 -16
  95. package/build/worker/canvas.js +10 -25
  96. package/build/worker/canvas.js.map +1 -1
  97. package/build/worker/compositor.js +27 -19
  98. package/build/worker/compositor.js.map +1 -1
  99. package/build/worker/render-worker.js +27 -19
  100. package/build/worker/render-worker.js.map +1 -1
  101. package/build/worker/scene-manager.js +12 -3
  102. package/build/worker/scene-manager.js.map +1 -1
  103. package/build/worker/terminal-writer.d.ts +4 -4
  104. package/build/worker/terminal-writer.js +36 -52
  105. package/build/worker/terminal-writer.js.map +1 -1
  106. package/build/wrap-text.d.ts +6 -0
  107. package/build/wrap-text.js +120 -0
  108. package/build/wrap-text.js.map +1 -0
  109. package/package.json +15 -4
@@ -0,0 +1,419 @@
1
+ import isFullwidthCodePoint from 'is-fullwidth-code-point';
2
+ import ansiStyles from 'ansi-styles';
3
+ import { StyledLine } from './styled-line.js';
4
+ // --- consts.ts ---
5
+ const BEL = '\u0007';
6
+ const ESC = '\u001B';
7
+ const BACKSLASH = '\\';
8
+ const CSI = '[';
9
+ const OSC = ']';
10
+ const C1_ST = '\u009C';
11
+ export const CC_BEL = BEL.charCodeAt(0);
12
+ export const CC_ESC = ESC.charCodeAt(0);
13
+ export const CC_BACKSLASH = BACKSLASH.charCodeAt(0);
14
+ export const CC_CSI = CSI.charCodeAt(0);
15
+ export const CC_OSC = OSC.charCodeAt(0);
16
+ export const CC_C1_ST = C1_ST.charCodeAt(0);
17
+ export const CC_0 = '0'.charCodeAt(0);
18
+ export const CC_9 = '9'.charCodeAt(0);
19
+ export const CC_SEMI = ';'.charCodeAt(0);
20
+ export const CC_M = 'm'.charCodeAt(0);
21
+ export const ESCAPES = new Set([CC_ESC, 0x9b]);
22
+ export const linkCodePrefix = `${ESC}${OSC}8;`;
23
+ export const linkCodePrefixCharCodes = [...linkCodePrefix].map(char => char.charCodeAt(0));
24
+ export const linkCodeSuffix = BEL;
25
+ export const linkEndCode = `${ESC}${OSC}8;;${BEL}`;
26
+ export const linkEndCodeST = `${ESC}${OSC}8;;${ESC}${BACKSLASH}`;
27
+ export const linkEndCodeC1ST = `${ESC}${OSC}8;;${C1_ST}`;
28
+ // --- ansiCodes.ts ---
29
+ export const endCodesSet = new Set();
30
+ const endCodesMap = new Map();
31
+ for (const [start, end] of ansiStyles.codes) {
32
+ endCodesSet.add(ansiStyles.color.ansi(end));
33
+ endCodesMap.set(ansiStyles.color.ansi(start), ansiStyles.color.ansi(end));
34
+ }
35
+ export function getEndCode(code) {
36
+ if (endCodesSet.has(code))
37
+ return code;
38
+ if (endCodesMap.has(code))
39
+ return endCodesMap.get(code);
40
+ if (code.startsWith(linkCodePrefix)) {
41
+ if (code.endsWith('\u001B\\'))
42
+ return linkEndCodeST;
43
+ if (code.endsWith('\u009C'))
44
+ return linkEndCodeC1ST;
45
+ return linkEndCode;
46
+ }
47
+ code = code.slice(2);
48
+ if (code.startsWith('38')) {
49
+ return ansiStyles.color.close;
50
+ }
51
+ if (code.startsWith('48')) {
52
+ return ansiStyles.bgColor.close;
53
+ }
54
+ const ret = ansiStyles.codes.get(Number.parseInt(code, 10));
55
+ if (ret) {
56
+ return ansiStyles.color.ansi(ret);
57
+ }
58
+ return ansiStyles.reset.open;
59
+ }
60
+ export function isIntensityCode(code) {
61
+ return (code.code === ansiStyles.bold.open || code.code === ansiStyles.dim.open);
62
+ }
63
+ function findOSCTerminatorIndex(string, startIndex) {
64
+ for (let i = startIndex; i < string.length; i++) {
65
+ const ch = string.charCodeAt(i);
66
+ if (ch === CC_BEL)
67
+ return i;
68
+ if (ch === CC_C1_ST)
69
+ return i;
70
+ if (ch === CC_ESC &&
71
+ i + 1 < string.length &&
72
+ string.charCodeAt(i + 1) === CC_BACKSLASH) {
73
+ return i + 1;
74
+ }
75
+ }
76
+ return -1;
77
+ }
78
+ function parseLinkCode(string, offset) {
79
+ string = string.slice(offset);
80
+ for (let index = 1; index < linkCodePrefixCharCodes.length; index++) {
81
+ if (string.charCodeAt(index) !== linkCodePrefixCharCodes[index]) {
82
+ return undefined;
83
+ }
84
+ }
85
+ const paramsEndIndex = string.indexOf(';', linkCodePrefix.length);
86
+ if (paramsEndIndex === -1)
87
+ return undefined;
88
+ const endIndex = findOSCTerminatorIndex(string, paramsEndIndex + 1);
89
+ if (endIndex === -1)
90
+ return undefined;
91
+ return string.slice(0, endIndex + 1);
92
+ }
93
+ function parseOSCSequence(string, offset) {
94
+ string = string.slice(offset);
95
+ const endIndex = findOSCTerminatorIndex(string, 2);
96
+ if (endIndex === -1)
97
+ return undefined;
98
+ return string.slice(0, endIndex + 1);
99
+ }
100
+ function findSGRSequenceEndIndex(str) {
101
+ for (let index = 2; index < str.length; index++) {
102
+ const charCode = str.charCodeAt(index);
103
+ if (charCode === CC_M)
104
+ return index;
105
+ if (charCode === CC_SEMI)
106
+ continue;
107
+ if (charCode >= CC_0 && charCode <= CC_9)
108
+ continue;
109
+ break;
110
+ }
111
+ return -1;
112
+ }
113
+ function parseSGRSequence(string, offset) {
114
+ string = string.slice(offset);
115
+ const endIndex = findSGRSequenceEndIndex(string);
116
+ if (endIndex === -1)
117
+ return;
118
+ return string.slice(0, endIndex + 1);
119
+ }
120
+ function splitCompoundSGRSequences(code) {
121
+ if (!code.includes(';')) {
122
+ return [code];
123
+ }
124
+ const codeParts = code.slice(2, -1).split(';');
125
+ const ret = [];
126
+ for (let i = 0; i < codeParts.length; i++) {
127
+ const rawCode = codeParts[i];
128
+ if (rawCode === '38' || rawCode === '48') {
129
+ if (i + 2 < codeParts.length && codeParts[i + 1] === '5') {
130
+ ret.push(codeParts.slice(i, i + 3).join(';'));
131
+ i += 2;
132
+ continue;
133
+ }
134
+ else if (i + 4 < codeParts.length && codeParts[i + 1] === '2') {
135
+ ret.push(codeParts.slice(i, i + 5).join(';'));
136
+ i += 4;
137
+ continue;
138
+ }
139
+ }
140
+ ret.push(rawCode);
141
+ }
142
+ return ret.map(part => `\u001B[${part}m`);
143
+ }
144
+ export function tokenize(str, endChar = Number.POSITIVE_INFINITY) {
145
+ const ret = [];
146
+ let visible = 0;
147
+ let i = 0;
148
+ while (i < str.length) {
149
+ // Determine the next code point / surrogate pair string
150
+ const codePoint = str.codePointAt(i);
151
+ // If it's a surrogate pair, it will be 2 characters long
152
+ const charLength = codePoint > 0xff_ff ? 2 : 1;
153
+ const charStr = str.slice(i, i + charLength);
154
+ if (ESCAPES.has(codePoint)) {
155
+ let code;
156
+ const nextCodePoint = str.codePointAt(i + 1);
157
+ if (nextCodePoint === CC_OSC) {
158
+ code = parseLinkCode(str, i);
159
+ if (code) {
160
+ ret.push({
161
+ type: 'ansi',
162
+ code,
163
+ endCode: getEndCode(code),
164
+ });
165
+ }
166
+ else {
167
+ code = parseOSCSequence(str, i);
168
+ if (code) {
169
+ ret.push({
170
+ type: 'control',
171
+ code,
172
+ });
173
+ }
174
+ }
175
+ }
176
+ else if (nextCodePoint === CC_CSI) {
177
+ code = parseSGRSequence(str, i);
178
+ if (code) {
179
+ const codes = splitCompoundSGRSequences(code);
180
+ for (const individualCode of codes) {
181
+ ret.push({
182
+ type: 'ansi',
183
+ code: individualCode,
184
+ endCode: getEndCode(individualCode),
185
+ });
186
+ }
187
+ }
188
+ }
189
+ if (code) {
190
+ i += code.length;
191
+ continue;
192
+ }
193
+ }
194
+ // Variation Selector 16 forces emoji presentation (2 columns wide)
195
+ const isVariationSelector = charStr.includes('\uFE0F');
196
+ // Regional indicator pairs form flag emoji (2 columns wide)
197
+ const isRegionalIndicator = codePoint >= 0x1_f1_e6 && codePoint <= 0x1_f1_ff;
198
+ const fullWidth = isVariationSelector ||
199
+ isRegionalIndicator ||
200
+ isFullwidthCodePoint(codePoint);
201
+ ret.push({
202
+ type: 'char',
203
+ value: charStr,
204
+ fullWidth,
205
+ });
206
+ visible += fullWidth ? 2 : 1;
207
+ if (visible >= endChar) {
208
+ break;
209
+ }
210
+ i += charLength;
211
+ }
212
+ return ret;
213
+ }
214
+ export const BOLD_MASK = Math.trunc(1);
215
+ export const DIM_MASK = 1 << 1;
216
+ export const ITALIC_MASK = 1 << 2;
217
+ export const UNDERLINE_MASK = 1 << 3;
218
+ export const STRIKETHROUGH_MASK = 1 << 4;
219
+ export const INVERSE_MASK = 1 << 5;
220
+ export const HIDDEN_MASK = 1 << 6;
221
+ export const FULL_WIDTH_MASK = 1 << 7;
222
+ export function styledLineFromTokens(tokens) {
223
+ const line = new StyledLine([], []);
224
+ let formatFlags = 0;
225
+ let fgColor;
226
+ let bgColor;
227
+ let link;
228
+ for (const token of tokens) {
229
+ if (token.type === 'ansi') {
230
+ const { code } = token;
231
+ switch (code) {
232
+ case ansiStyles.reset.open: {
233
+ formatFlags = 0;
234
+ fgColor = undefined;
235
+ bgColor = undefined;
236
+ link = undefined;
237
+ break;
238
+ }
239
+ case ansiStyles.bold.open: {
240
+ formatFlags |= BOLD_MASK;
241
+ break;
242
+ }
243
+ case ansiStyles.dim.open: {
244
+ formatFlags |= DIM_MASK;
245
+ break;
246
+ }
247
+ case ansiStyles.italic.open: {
248
+ formatFlags |= ITALIC_MASK;
249
+ break;
250
+ }
251
+ case ansiStyles.underline.open: {
252
+ formatFlags |= UNDERLINE_MASK;
253
+ break;
254
+ }
255
+ case ansiStyles.strikethrough.open: {
256
+ formatFlags |= STRIKETHROUGH_MASK;
257
+ break;
258
+ }
259
+ case ansiStyles.inverse.open: {
260
+ formatFlags |= INVERSE_MASK;
261
+ break;
262
+ }
263
+ case ansiStyles.hidden.open: {
264
+ formatFlags |= HIDDEN_MASK;
265
+ break;
266
+ }
267
+ case ansiStyles.bold.close:
268
+ case ansiStyles.dim.close: {
269
+ formatFlags &= ~BOLD_MASK;
270
+ formatFlags &= ~DIM_MASK;
271
+ break;
272
+ }
273
+ case ansiStyles.italic.close: {
274
+ formatFlags &= ~ITALIC_MASK;
275
+ break;
276
+ }
277
+ case ansiStyles.underline.close: {
278
+ formatFlags &= ~UNDERLINE_MASK;
279
+ break;
280
+ }
281
+ case ansiStyles.strikethrough.close: {
282
+ formatFlags &= ~STRIKETHROUGH_MASK;
283
+ break;
284
+ }
285
+ case ansiStyles.inverse.close: {
286
+ formatFlags &= ~INVERSE_MASK;
287
+ break;
288
+ }
289
+ case ansiStyles.hidden.close: {
290
+ formatFlags &= ~HIDDEN_MASK;
291
+ break;
292
+ }
293
+ default: {
294
+ if (code.startsWith('\u001B[38;') ||
295
+ (code >= '\u001B[30m' && code <= '\u001B[37m') ||
296
+ (code >= '\u001B[90m' && code <= '\u001B[97m')) {
297
+ fgColor = code;
298
+ }
299
+ else if (code.startsWith('\u001B[48;') ||
300
+ (code >= '\u001B[40m' && code <= '\u001B[47m') ||
301
+ (code >= '\u001B[100m' && code <= '\u001B[107m')) {
302
+ bgColor = code;
303
+ }
304
+ else if (code === ansiStyles.color.close) {
305
+ fgColor = undefined;
306
+ }
307
+ else if (code === ansiStyles.bgColor.close) {
308
+ bgColor = undefined;
309
+ }
310
+ else if (code.startsWith(linkCodePrefix)) {
311
+ link = code;
312
+ }
313
+ else if (code === linkEndCode ||
314
+ code === linkEndCodeST ||
315
+ code === linkEndCodeC1ST) {
316
+ link = undefined;
317
+ }
318
+ }
319
+ }
320
+ }
321
+ else if (token.type === 'char') {
322
+ let finalFlags = formatFlags;
323
+ if (token.fullWidth) {
324
+ finalFlags |= FULL_WIDTH_MASK;
325
+ }
326
+ line.pushChar(token.value, finalFlags, fgColor, bgColor, link);
327
+ }
328
+ }
329
+ return line;
330
+ }
331
+ export function styledLineToString(line) {
332
+ let ret = '';
333
+ let prevFormatFlags = 0;
334
+ let prevFgColor;
335
+ let prevBgColor;
336
+ let prevLink;
337
+ for (const { value, formatFlags, fgColor, bgColor, link } of line) {
338
+ if (formatFlags === prevFormatFlags &&
339
+ fgColor === prevFgColor &&
340
+ bgColor === prevBgColor &&
341
+ link === prevLink) {
342
+ ret += value;
343
+ continue;
344
+ }
345
+ let needResetBoldDim = false;
346
+ if ((prevFormatFlags & BOLD_MASK && !(formatFlags & BOLD_MASK)) ||
347
+ (prevFormatFlags & DIM_MASK && !(formatFlags & DIM_MASK))) {
348
+ needResetBoldDim = true;
349
+ }
350
+ if (needResetBoldDim) {
351
+ ret += ansiStyles.bold.close;
352
+ }
353
+ if ((needResetBoldDim ||
354
+ (formatFlags & BOLD_MASK && !(prevFormatFlags & BOLD_MASK))) &&
355
+ formatFlags & BOLD_MASK)
356
+ ret += ansiStyles.bold.open;
357
+ if ((needResetBoldDim ||
358
+ (formatFlags & DIM_MASK && !(prevFormatFlags & DIM_MASK))) &&
359
+ formatFlags & DIM_MASK)
360
+ ret += ansiStyles.dim.open;
361
+ if (formatFlags & ITALIC_MASK && !(prevFormatFlags & ITALIC_MASK))
362
+ ret += ansiStyles.italic.open;
363
+ if (!(formatFlags & ITALIC_MASK) && prevFormatFlags & ITALIC_MASK)
364
+ ret += ansiStyles.italic.close;
365
+ if (formatFlags & UNDERLINE_MASK && !(prevFormatFlags & UNDERLINE_MASK))
366
+ ret += ansiStyles.underline.open;
367
+ if (!(formatFlags & UNDERLINE_MASK) && prevFormatFlags & UNDERLINE_MASK)
368
+ ret += ansiStyles.underline.close;
369
+ if (formatFlags & STRIKETHROUGH_MASK &&
370
+ !(prevFormatFlags & STRIKETHROUGH_MASK))
371
+ ret += ansiStyles.strikethrough.open;
372
+ if (!(formatFlags & STRIKETHROUGH_MASK) &&
373
+ prevFormatFlags & STRIKETHROUGH_MASK)
374
+ ret += ansiStyles.strikethrough.close;
375
+ if (formatFlags & INVERSE_MASK && !(prevFormatFlags & INVERSE_MASK))
376
+ ret += ansiStyles.inverse.open;
377
+ if (!(formatFlags & INVERSE_MASK) && prevFormatFlags & INVERSE_MASK)
378
+ ret += ansiStyles.inverse.close;
379
+ if (formatFlags & HIDDEN_MASK && !(prevFormatFlags & HIDDEN_MASK))
380
+ ret += ansiStyles.hidden.open;
381
+ if (!(formatFlags & HIDDEN_MASK) && prevFormatFlags & HIDDEN_MASK)
382
+ ret += ansiStyles.hidden.close;
383
+ if (fgColor !== prevFgColor) {
384
+ ret += fgColor === undefined ? ansiStyles.color.close : fgColor;
385
+ }
386
+ if (bgColor !== prevBgColor) {
387
+ ret += bgColor === undefined ? ansiStyles.bgColor.close : bgColor;
388
+ }
389
+ if (link !== prevLink) {
390
+ ret += link === undefined ? linkEndCode : link;
391
+ }
392
+ ret += value;
393
+ prevFormatFlags = formatFlags;
394
+ prevFgColor = fgColor;
395
+ prevBgColor = bgColor;
396
+ prevLink = link;
397
+ }
398
+ // Reset active styles at the end of the string
399
+ if (prevFgColor !== undefined)
400
+ ret += ansiStyles.color.close;
401
+ if (prevBgColor !== undefined)
402
+ ret += ansiStyles.bgColor.close;
403
+ if (prevFormatFlags & (BOLD_MASK | DIM_MASK))
404
+ ret += ansiStyles.bold.close;
405
+ if (prevFormatFlags & ITALIC_MASK)
406
+ ret += ansiStyles.italic.close;
407
+ if (prevFormatFlags & UNDERLINE_MASK)
408
+ ret += ansiStyles.underline.close;
409
+ if (prevFormatFlags & STRIKETHROUGH_MASK)
410
+ ret += ansiStyles.strikethrough.close;
411
+ if (prevFormatFlags & INVERSE_MASK)
412
+ ret += ansiStyles.inverse.close;
413
+ if (prevFormatFlags & HIDDEN_MASK)
414
+ ret += ansiStyles.hidden.close;
415
+ if (prevLink !== undefined)
416
+ ret += linkEndCode;
417
+ return ret;
418
+ }
419
+ //# sourceMappingURL=tokenize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../src/tokenize.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  * Copyright 2026 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { type StyledChar } from '@alcalzone/ansi-tokenize';
6
+ import { StyledLine } from '../styled-line.js';
7
7
  import { type RenderLine } from './terminal-writer.js';
8
8
  export type Rect = {
9
9
  x: number;
@@ -19,27 +19,17 @@ export declare class Canvas {
19
19
  readonly width: number;
20
20
  readonly height: number;
21
21
  private readonly lines;
22
- /**
23
- * Creates a new Canvas from a set of lines.
24
- */
25
22
  static fromLines(width: number, height: number, lines: RenderLine[]): Canvas;
26
- /**
27
- * Creates an empty Canvas with the given dimensions.
28
- */
29
23
  static create(width: number, height: number, tainted?: boolean): Canvas;
30
24
  constructor(width: number, height: number, lines: RenderLine[]);
31
- /**
32
- * Returns the character at the given coordinates.
33
- */
34
- getChar(x: number, y: number): StyledChar | undefined;
35
- /**
36
- * Sets a character at the given coordinates, respecting clipping.
37
- */
38
- setChar(x: number, y: number, char: StyledChar, clip?: Rect): void;
25
+ getChar(x: number, y: number): {
26
+ bgColor?: string;
27
+ } | undefined;
28
+ setChar(x: number, y: number, char: StyledLine, clip?: Rect): void;
39
29
  /**
40
30
  * Draws a sequence of characters starting at (x, y).
41
31
  */
42
- drawStyledChars(x: number, y: number, chars: StyledChar[], clip?: Rect): void;
32
+ drawStyledChars(x: number, y: number, chars: StyledLine, clip?: Rect): void;
43
33
  /**
44
34
  * Returns the underlying lines.
45
35
  */
@@ -3,6 +3,7 @@
3
3
  * Copyright 2026 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { StyledLine } from '../styled-line.js';
6
7
  /**
7
8
  * A 2D drawing surface for terminal characters.
8
9
  * Handles clipping and bounds checking.
@@ -11,20 +12,14 @@ export class Canvas {
11
12
  width;
12
13
  height;
13
14
  lines;
14
- /**
15
- * Creates a new Canvas from a set of lines.
16
- */
17
15
  static fromLines(width, height, lines) {
18
16
  return new Canvas(width, height, lines);
19
17
  }
20
- /**
21
- * Creates an empty Canvas with the given dimensions.
22
- */
23
18
  static create(width, height, tainted = false) {
24
19
  const lines = [];
25
20
  for (let i = 0; i < height; i++) {
26
21
  lines.push({
27
- styledChars: [],
22
+ styledChars: new StyledLine(),
28
23
  text: '',
29
24
  length: 0,
30
25
  tainted,
@@ -37,22 +32,16 @@ export class Canvas {
37
32
  this.height = height;
38
33
  this.lines = lines;
39
34
  }
40
- /**
41
- * Returns the character at the given coordinates.
42
- */
43
35
  getChar(x, y) {
44
36
  if (y < 0 || y >= this.height || x < 0 || x >= this.width) {
45
37
  return undefined;
46
38
  }
47
39
  const line = this.lines[y];
48
- if (!line) {
40
+ if (!line || x >= line.styledChars.length) {
49
41
  return undefined;
50
42
  }
51
- return line.styledChars[x];
43
+ return { bgColor: line.styledChars.getBgColor(x) };
52
44
  }
53
- /**
54
- * Sets a character at the given coordinates, respecting clipping.
55
- */
56
45
  setChar(x, y, char, clip) {
57
46
  if (y < 0 || y >= this.height || x < 0 || x >= this.width) {
58
47
  return;
@@ -65,23 +54,19 @@ export class Canvas {
65
54
  if (!line) {
66
55
  return;
67
56
  }
68
- // Ensure the line is long enough
69
57
  while (line.styledChars.length <= x) {
70
- line.styledChars.push({
71
- type: 'char',
72
- value: ' ',
73
- fullWidth: false,
74
- styles: [],
75
- });
58
+ line.styledChars.pushChar(' ', 0);
76
59
  }
77
- line.styledChars[x] = char;
60
+ line.styledChars.setChar(x, char.getValue(0), char.getFormatFlags(0), char.getFgColor(0), char.getBgColor(0), char.getLink(0));
78
61
  }
79
62
  /**
80
63
  * Draws a sequence of characters starting at (x, y).
81
64
  */
82
65
  drawStyledChars(x, y, chars, clip) {
83
- for (const [i, char] of chars.entries()) {
84
- this.setChar(x + i, y, char, clip);
66
+ for (let i = 0; i < chars.length; i++) {
67
+ const styledChar = new StyledLine();
68
+ styledChar.pushChar(chars.getValue(i), chars.getFormatFlags(i), chars.getFgColor(i), chars.getBgColor(i), chars.getLink(i));
69
+ this.setChar(x + i, y, styledChar, clip);
85
70
  }
86
71
  }
87
72
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../src/worker/canvas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../src/worker/canvas.ts"],"names":[],"mappings":"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"}