@profullstack/hqtui 0.1.12 → 0.3.0

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.
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Styled text: more than one colour on a line.
3
+ *
4
+ * A `Span` is a run of text with its own style; a line is a list of spans; text
5
+ * is a list of lines. Every widget that took a `string` takes `RichText` too,
6
+ * and a bare string is simply the one-span case, so nothing that worked before
7
+ * has to change.
8
+ *
9
+ * The measuring and cutting here mirrors `unicode.ts` exactly rather than
10
+ * approximating it. `truncateSpans`, `fitSpans` and `wrapSpans` produce the
11
+ * same columns as `truncate`, `fit` and `wrap` for single-span input — there
12
+ * are tests that assert precisely that over a corpus, because two text layout
13
+ * engines that disagree by one column is a bug you find in a screenshot six
14
+ * months later.
15
+ */
16
+ import { Attr } from "./buffer.js";
17
+ import { cellText, graphemes, stringWidth } from "./unicode.js";
18
+ /** True when the value carries styling rather than being a bare string. */
19
+ export function isRich(value) {
20
+ return typeof value !== "string";
21
+ }
22
+ function isLines(value) {
23
+ return value.length === 0 || Array.isArray(value[0]);
24
+ }
25
+ /** The style a span paints with, over whatever the widget already decided. */
26
+ export function spanStyle(span, base = {}) {
27
+ let attrs = span.attrs ?? base.attrs ?? 0;
28
+ if (span.bold)
29
+ attrs |= Attr.Bold;
30
+ if (span.dim)
31
+ attrs |= Attr.Dim;
32
+ if (span.italic)
33
+ attrs |= Attr.Italic;
34
+ if (span.underline)
35
+ attrs |= Attr.Underline;
36
+ return {
37
+ fg: span.fg ?? base.fg,
38
+ bg: span.bg ?? base.bg,
39
+ attrs,
40
+ };
41
+ }
42
+ /** Everything except the text, for cloning a span's styling onto new text. */
43
+ function styleOf(span) {
44
+ const { text: _text, ...rest } = span;
45
+ return rest;
46
+ }
47
+ /**
48
+ * Normalise any accepted shape into lines of spans, splitting on newlines.
49
+ *
50
+ * Empty spans are dropped, but a line that ends up with no spans is kept: a
51
+ * blank line between two paragraphs is content, not absence.
52
+ */
53
+ export function toSpanLines(value) {
54
+ if (typeof value === "string") {
55
+ return value.split("\n").map((line) => (line === "" ? [] : [{ text: line }]));
56
+ }
57
+ const lines = isLines(value) ? value : [value];
58
+ const out = [];
59
+ for (const line of lines) {
60
+ let current = [];
61
+ for (const span of line) {
62
+ if (span.text === "")
63
+ continue;
64
+ const parts = span.text.split("\n");
65
+ current.push({ ...styleOf(span), text: parts[0] });
66
+ for (let i = 1; i < parts.length; i++) {
67
+ out.push(dropEmpty(current));
68
+ current = [{ ...styleOf(span), text: parts[i] }];
69
+ }
70
+ }
71
+ out.push(dropEmpty(current));
72
+ }
73
+ return out;
74
+ }
75
+ function dropEmpty(line) {
76
+ return line.filter((s) => s.text !== "");
77
+ }
78
+ /** Display width of a line in terminal columns. */
79
+ export function spanWidth(line) {
80
+ let w = 0;
81
+ for (const span of line)
82
+ w += stringWidth(span.text);
83
+ return w;
84
+ }
85
+ /** Concatenated text of a line, with styling discarded. */
86
+ export function spanText(line) {
87
+ let out = "";
88
+ for (const span of line)
89
+ out += span.text;
90
+ return out;
91
+ }
92
+ /**
93
+ * Truncate a line to `max` columns, appending `ellipsis` when it does not fit.
94
+ *
95
+ * The ellipsis takes the style of the span it interrupts, so cutting a red
96
+ * error message short leaves a red ellipsis rather than a stray default-coloured
97
+ * one.
98
+ */
99
+ export function truncateSpans(line, max, ellipsis = "…") {
100
+ if (max <= 0)
101
+ return [];
102
+ if (spanWidth(line) <= max)
103
+ return line;
104
+ const limit = Math.max(0, max - stringWidth(ellipsis));
105
+ const out = [];
106
+ let w = 0;
107
+ let last;
108
+ for (const span of line) {
109
+ let text = "";
110
+ for (const g of graphemes(span.text)) {
111
+ if (w + g.width > limit)
112
+ break;
113
+ text += cellText(g.value);
114
+ w += g.width;
115
+ }
116
+ if (text !== "") {
117
+ last = span;
118
+ out.push({ ...styleOf(span), text });
119
+ }
120
+ if (w >= limit)
121
+ break;
122
+ }
123
+ const source = last ?? line[0];
124
+ out.push({ ...(source ? styleOf(source) : {}), text: ellipsis });
125
+ return out;
126
+ }
127
+ /** Pad or truncate a line to exactly `width` columns. */
128
+ export function fitSpans(line, width, align = "left") {
129
+ const cut = truncateSpans(line, width);
130
+ const pad = width - spanWidth(cut);
131
+ if (pad <= 0)
132
+ return cut;
133
+ // Padding carries no style of its own so it picks up the widget's, which is
134
+ // what the string path has always done by padding before it draws.
135
+ const space = (n) => (n > 0 ? [{ text: " ".repeat(n) }] : []);
136
+ if (align === "right")
137
+ return [...space(pad), ...cut];
138
+ if (align === "center") {
139
+ const left = Math.floor(pad / 2);
140
+ return [...space(left), ...cut, ...space(pad - left)];
141
+ }
142
+ return [...cut, ...space(pad)];
143
+ }
144
+ /** Split a line into whitespace and non-whitespace runs, keeping each style. */
145
+ function tokenize(line) {
146
+ const out = [];
147
+ for (const span of line) {
148
+ const style = styleOf(span);
149
+ for (const part of span.text.split(/(\s+)/)) {
150
+ if (part === "")
151
+ continue;
152
+ out.push({ text: part, style, space: /^\s+$/.test(part) });
153
+ }
154
+ }
155
+ return out;
156
+ }
157
+ /** Join runs that share a style, so the output has no needless span churn. */
158
+ function coalesce(spans) {
159
+ const out = [];
160
+ for (const span of spans) {
161
+ if (span.text === "")
162
+ continue;
163
+ const previous = out[out.length - 1];
164
+ if (previous && sameStyle(previous, span))
165
+ previous.text += span.text;
166
+ else
167
+ out.push({ ...span });
168
+ }
169
+ return out;
170
+ }
171
+ function sameStyle(a, b) {
172
+ return a.fg === b.fg && a.bg === b.bg && a.attrs === b.attrs
173
+ && !!a.bold === !!b.bold && !!a.dim === !!b.dim
174
+ && !!a.italic === !!b.italic && !!a.underline === !!b.underline;
175
+ }
176
+ /** Drop trailing whitespace spans, the way a soft wrap trims its line end. */
177
+ function trimEnd(spans) {
178
+ const out = spans.map((s) => ({ ...s }));
179
+ while (out.length > 0) {
180
+ const last = out[out.length - 1];
181
+ last.text = last.text.replace(/\s+$/, "");
182
+ if (last.text !== "")
183
+ break;
184
+ out.pop();
185
+ }
186
+ return out;
187
+ }
188
+ /**
189
+ * Greedy word wrap at `width` columns, preserving each span's style across the
190
+ * break. Mirrors `wrap()` in unicode.ts, including its hard split of a word
191
+ * longer than the line and its trimming of the soft-wrapped line end.
192
+ */
193
+ export function wrapSpans(line, width) {
194
+ if (width <= 0)
195
+ return [];
196
+ const lines = [];
197
+ let current = [];
198
+ let currentWidth = 0;
199
+ const push = (trim) => {
200
+ lines.push(coalesce(trim ? trimEnd(current) : current));
201
+ current = [];
202
+ currentWidth = 0;
203
+ };
204
+ for (const token of tokenize(line)) {
205
+ const w = stringWidth(token.text);
206
+ if (currentWidth + w > width && currentWidth > 0) {
207
+ push(true);
208
+ // A break swallows the whitespace that caused it, exactly as `wrap` does.
209
+ if (token.space)
210
+ continue;
211
+ }
212
+ if (w > width) {
213
+ for (const g of graphemes(token.text)) {
214
+ if (currentWidth + g.width > width)
215
+ push(false);
216
+ current.push({ ...token.style, text: cellText(g.value) });
217
+ currentWidth += g.width;
218
+ }
219
+ continue;
220
+ }
221
+ current.push({ ...token.style, text: token.text });
222
+ currentWidth += w;
223
+ }
224
+ // The last line is trimmed like a soft-wrapped one. Only the hard split of an
225
+ // overlong word pushes untrimmed, because there the break is mid-word and the
226
+ // whitespace it would trim is real content.
227
+ push(true);
228
+ return lines;
229
+ }
230
+ /** Wrap every line of a rich value, in order. */
231
+ export function wrapRich(value, width) {
232
+ const out = [];
233
+ for (const line of toSpanLines(value)) {
234
+ if (line.length === 0) {
235
+ // A blank line survives wrapping as a blank line.
236
+ out.push([]);
237
+ continue;
238
+ }
239
+ for (const wrapped of wrapSpans(line, width))
240
+ out.push(wrapped);
241
+ }
242
+ return out;
243
+ }
244
+ //# sourceMappingURL=richtext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"richtext.js","sourceRoot":"","sources":["../src/richtext.ts"],"names":[],"mappings":"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"}
package/dist/surface.d.ts CHANGED
@@ -2,6 +2,7 @@ import { FrameBuffer, type Style, type Attributes } from "./buffer.ts";
2
2
  import { DEFAULT_COLOR, type Color } from "./color.ts";
3
3
  import { type Rect, type Padding } from "./layout.ts";
4
4
  import type { Theme } from "./theme.ts";
5
+ import { type SpanLine } from "./richtext.ts";
5
6
  export type BorderStyle = "rounded" | "single" | "double" | "thick" | "dashed" | "ascii" | "none";
6
7
  export interface BorderChars {
7
8
  tl: string;
@@ -17,6 +18,21 @@ export interface BorderChars {
17
18
  cross: string;
18
19
  }
19
20
  export declare const BORDERS: Record<Exclude<BorderStyle, "none">, BorderChars>;
21
+ /**
22
+ * Edge bits for a border glyph: 1 up, 2 right, 4 down, 8 left.
23
+ *
24
+ * Collapsing two panel borders is the union of their edges. A panel's top-right
25
+ * corner (down + left) landing on its neighbour's top-left (down + right) is
26
+ * down + left + right, which is the T that makes the two read as one frame.
27
+ */
28
+ export declare const EDGE_UP = 1;
29
+ export declare const EDGE_RIGHT = 2;
30
+ export declare const EDGE_DOWN = 4;
31
+ export declare const EDGE_LEFT = 8;
32
+ /** The glyph in `style` with exactly these edges, or null if there is none. */
33
+ export declare function borderGlyph(style: Exclude<BorderStyle, "none">, bits: number): string | null;
34
+ /** The edges of a border glyph, or null when it is not one. */
35
+ export declare function borderBits(codepoint: number): number | null;
20
36
  export type Align = "left" | "center" | "right";
21
37
  export interface TextOptions extends Style {
22
38
  align?: Align;
@@ -35,6 +51,12 @@ export interface BoxOptions extends Style {
35
51
  subtitleColor?: Color;
36
52
  /** Paint the interior with `bg` before drawing. */
37
53
  fill?: boolean;
54
+ /**
55
+ * Merge this border with one already drawn in the same cell, rather than
56
+ * overwriting it. Set for you by the container when the app asks for
57
+ * collapsed borders; there is no reason to pass it by hand.
58
+ */
59
+ collapse?: boolean;
38
60
  footer?: string;
39
61
  footerColor?: Color;
40
62
  }
@@ -58,8 +80,24 @@ export declare class Surface {
58
80
  inset(padding: Padding): Surface;
59
81
  private visible;
60
82
  char(x: number, y: number, value: number | string, style?: Style): void;
83
+ /**
84
+ * Writes a border glyph, merging it with whatever border is already there.
85
+ *
86
+ * Only border glyphs merge. Anything else in the cell is overwritten, which
87
+ * keeps a panel drawn over a chart looking like a panel rather than growing
88
+ * junctions out of the data.
89
+ */
90
+ private mergeBorder;
61
91
  /** Draw text at local (x, y). Returns columns written. */
62
92
  text(x: number, y: number, text: string, options?: TextOptions): number;
93
+ /**
94
+ * Draw one line of styled spans at local (x, y). Returns columns written.
95
+ *
96
+ * The same clipping, truncation and alignment as `text`, but each span paints
97
+ * with its own colours over the options given here, so a line can carry more
98
+ * than one style. `text` is the single-span case of this.
99
+ */
100
+ spans(x: number, y: number, line: SpanLine, options?: TextOptions): number;
63
101
  /** Text positioned within the full surface width. */
64
102
  textAligned(y: number, text: string, align: Align, options?: TextOptions): void;
65
103
  fill(style: Style, ch?: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"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"}
package/dist/surface.js CHANGED
@@ -2,6 +2,7 @@ import { FrameBuffer } from "./buffer.js";
2
2
  import { DEFAULT_COLOR } from "./color.js";
3
3
  import { inset, intersect, isEmpty } from "./layout.js";
4
4
  import { graphemes, stringWidth, truncate, fit } from "./unicode.js";
5
+ import { fitSpans, spanStyle, spanWidth, truncateSpans } from "./richtext.js";
5
6
  export const BORDERS = {
6
7
  rounded: { tl: "╭", tr: "╮", bl: "╰", br: "╯", h: "─", v: "│", ml: "├", mr: "┤", mt: "┬", mb: "┴", cross: "┼" },
7
8
  single: { tl: "┌", tr: "┐", bl: "└", br: "┘", h: "─", v: "│", ml: "├", mr: "┤", mt: "┬", mb: "┴", cross: "┼" },
@@ -10,6 +11,57 @@ export const BORDERS = {
10
11
  dashed: { tl: "╭", tr: "╮", bl: "╰", br: "╯", h: "╌", v: "╎", ml: "├", mr: "┤", mt: "┬", mb: "┴", cross: "┼" },
11
12
  ascii: { tl: "+", tr: "+", bl: "+", br: "+", h: "-", v: "|", ml: "+", mr: "+", mt: "+", mb: "+", cross: "+" },
12
13
  };
14
+ /**
15
+ * Edge bits for a border glyph: 1 up, 2 right, 4 down, 8 left.
16
+ *
17
+ * Collapsing two panel borders is the union of their edges. A panel's top-right
18
+ * corner (down + left) landing on its neighbour's top-left (down + right) is
19
+ * down + left + right, which is the T that makes the two read as one frame.
20
+ */
21
+ export const EDGE_UP = 1;
22
+ export const EDGE_RIGHT = 2;
23
+ export const EDGE_DOWN = 4;
24
+ export const EDGE_LEFT = 8;
25
+ const PART_BITS = {
26
+ tl: EDGE_RIGHT | EDGE_DOWN,
27
+ tr: EDGE_LEFT | EDGE_DOWN,
28
+ bl: EDGE_UP | EDGE_RIGHT,
29
+ br: EDGE_UP | EDGE_LEFT,
30
+ h: EDGE_LEFT | EDGE_RIGHT,
31
+ v: EDGE_UP | EDGE_DOWN,
32
+ ml: EDGE_UP | EDGE_DOWN | EDGE_RIGHT,
33
+ mr: EDGE_UP | EDGE_DOWN | EDGE_LEFT,
34
+ mt: EDGE_LEFT | EDGE_RIGHT | EDGE_DOWN,
35
+ mb: EDGE_LEFT | EDGE_RIGHT | EDGE_UP,
36
+ cross: EDGE_UP | EDGE_RIGHT | EDGE_DOWN | EDGE_LEFT,
37
+ };
38
+ /**
39
+ * Every border glyph in every style, to its edges. Built once. ASCII borders
40
+ * collide (every corner is `+`), and the first entry wins, which is right: the
41
+ * union of anything with a `+` is a `+`.
42
+ */
43
+ const BITS_BY_CODEPOINT = new Map();
44
+ for (const chars of Object.values(BORDERS)) {
45
+ for (const [part, ch] of Object.entries(chars)) {
46
+ const code = ch.codePointAt(0);
47
+ if (code !== undefined && !BITS_BY_CODEPOINT.has(code)) {
48
+ BITS_BY_CODEPOINT.set(code, PART_BITS[part]);
49
+ }
50
+ }
51
+ }
52
+ /** The glyph in `style` with exactly these edges, or null if there is none. */
53
+ export function borderGlyph(style, bits) {
54
+ const chars = BORDERS[style];
55
+ for (const [part, value] of Object.entries(PART_BITS)) {
56
+ if (value === bits)
57
+ return chars[part];
58
+ }
59
+ return null;
60
+ }
61
+ /** The edges of a border glyph, or null when it is not one. */
62
+ export function borderBits(codepoint) {
63
+ return BITS_BY_CODEPOINT.get(codepoint) ?? null;
64
+ }
13
65
  /**
14
66
  * A clipped, translated view onto the framebuffer. Widgets only ever see a
15
67
  * Surface, so nothing can draw outside the rectangle it was given.
@@ -58,6 +110,31 @@ export class Surface {
58
110
  const v = typeof value === "string" ? (value.codePointAt(0) ?? 32) : value;
59
111
  this.buffer.setCell(ax, ay, v, style);
60
112
  }
113
+ /**
114
+ * Writes a border glyph, merging it with whatever border is already there.
115
+ *
116
+ * Only border glyphs merge. Anything else in the cell is overwritten, which
117
+ * keeps a panel drawn over a chart looking like a panel rather than growing
118
+ * junctions out of the data.
119
+ */
120
+ mergeBorder(x, y, ch, style, cellStyle) {
121
+ const ax = this.rect.x + x;
122
+ const ay = this.rect.y + y;
123
+ if (!this.visible(ax, ay))
124
+ return;
125
+ const incoming = ch.codePointAt(0);
126
+ if (incoming === undefined)
127
+ return;
128
+ const existing = this.buffer.chars[this.buffer.index(ax, ay)] ?? 0;
129
+ const before = borderBits(existing);
130
+ const after = borderBits(incoming);
131
+ if (before === null || after === null || before === after) {
132
+ this.buffer.setCell(ax, ay, incoming, cellStyle);
133
+ return;
134
+ }
135
+ const merged = borderGlyph(style, before | after);
136
+ this.buffer.setCell(ax, ay, merged?.codePointAt(0) ?? incoming, cellStyle);
137
+ }
61
138
  /** Draw text at local (x, y). Returns columns written. */
62
139
  text(x, y, text, options = {}) {
63
140
  const ay = this.rect.y + y;
@@ -88,6 +165,45 @@ export class Surface {
88
165
  }
89
166
  return written;
90
167
  }
168
+ /**
169
+ * Draw one line of styled spans at local (x, y). Returns columns written.
170
+ *
171
+ * The same clipping, truncation and alignment as `text`, but each span paints
172
+ * with its own colours over the options given here, so a line can carry more
173
+ * than one style. `text` is the single-span case of this.
174
+ */
175
+ spans(x, y, line, options = {}) {
176
+ const ay = this.rect.y + y;
177
+ const c = this.clip;
178
+ if (ay < c.y || ay >= c.y + c.height)
179
+ return 0;
180
+ const limit = Math.min(options.maxWidth ?? this.width - x, this.width - x);
181
+ if (limit <= 0)
182
+ return 0;
183
+ let content = line;
184
+ if (options.ellipsis !== false && spanWidth(content) > limit) {
185
+ content = truncateSpans(content, limit);
186
+ }
187
+ if (options.align && options.align !== "left") {
188
+ content = fitSpans(content, limit, options.align);
189
+ }
190
+ const base = { fg: options.fg, bg: options.bg, attrs: options.attrs };
191
+ let cx = this.rect.x + x;
192
+ let written = 0;
193
+ for (const span of content) {
194
+ const style = spanStyle(span, base);
195
+ for (const g of graphemes(span.text)) {
196
+ if (written + g.width > limit)
197
+ return written;
198
+ if (cx >= c.x && cx + g.width <= c.x + c.width) {
199
+ this.buffer.setCell(cx, ay, g.value, style);
200
+ }
201
+ cx += g.width;
202
+ written += g.width;
203
+ }
204
+ }
205
+ return written;
206
+ }
91
207
  /** Text positioned within the full surface width. */
92
208
  textAligned(y, text, align, options = {}) {
93
209
  this.text(0, y, fit(truncate(text, this.width), this.width, align), { ...options, align: "left" });
@@ -133,15 +249,29 @@ export class Surface {
133
249
  const w = this.width;
134
250
  const h = this.height;
135
251
  const borderStyle = { fg, bg };
136
- this.char(0, 0, b.tl, borderStyle);
137
- this.char(w - 1, 0, b.tr, borderStyle);
138
- this.hline(1, 0, w - 2, b.h, borderStyle);
252
+ // With collapsing on, a border glyph landing on another one becomes the
253
+ // union of the two. Without it this is a plain write, so a screen that
254
+ // never asks for collapsing renders byte for byte as it always did.
255
+ const put = options.collapse
256
+ ? (x, y, ch) => this.mergeBorder(x, y, ch, style, borderStyle)
257
+ : (x, y, ch) => this.char(x, y, ch, borderStyle);
258
+ const putH = (x, y, length, ch) => {
259
+ for (let i = 0; i < length; i++)
260
+ put(x + i, y, ch);
261
+ };
262
+ const putV = (x, y, length, ch) => {
263
+ for (let i = 0; i < length; i++)
264
+ put(x, y + i, ch);
265
+ };
266
+ put(0, 0, b.tl);
267
+ put(w - 1, 0, b.tr);
268
+ putH(1, 0, w - 2, b.h);
139
269
  if (h > 1) {
140
- this.char(0, h - 1, b.bl, borderStyle);
141
- this.char(w - 1, h - 1, b.br, borderStyle);
142
- this.hline(1, h - 1, w - 2, b.h, borderStyle);
143
- this.vline(0, 1, h - 2, b.v, borderStyle);
144
- this.vline(w - 1, 1, h - 2, b.v, borderStyle);
270
+ put(0, h - 1, b.bl);
271
+ put(w - 1, h - 1, b.br);
272
+ putH(1, h - 1, w - 2, b.h);
273
+ putV(0, 1, h - 2, b.v);
274
+ putV(w - 1, 1, h - 2, b.v);
145
275
  }
146
276
  // Measured before the title is drawn: both share the top border row, and
147
277
  // the title used to be truncated against the full width and then painted
@@ -1 +1 @@
1
- {"version":3,"file":"surface.js","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"surface.js","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"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"}
package/dist/testing.d.ts CHANGED
@@ -12,6 +12,8 @@ export interface RenderOptions {
12
12
  frame?: number;
13
13
  elapsed?: number;
14
14
  focus?: number;
15
+ /** Merge the borders of adjacent panels, as `createApp` can. */
16
+ collapseBorders?: boolean;
15
17
  }
16
18
  export interface CellSnapshot {
17
19
  char: string;
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
package/dist/testing.js CHANGED
@@ -41,6 +41,7 @@ export function renderToScreen(view, options = {}) {
41
41
  frame: options.frame ?? 0,
42
42
  elapsed: options.elapsed ?? 0,
43
43
  focusIndex: options.focus ?? 0,
44
+ collapseBorders: options.collapseBorders ?? false,
44
45
  registerFocus: () => {
45
46
  const index = focusCursor++;
46
47
  return { index, focused: index === (options.focus ?? 0) };