@chengchenccc/tui 0.1.1-rc.3 → 0.2.0-rc.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.
- package/dist/components/ansi-console.d.ts +32 -0
- package/dist/components/ansi-console.d.ts.map +1 -0
- package/dist/components/ansi-console.js +75 -0
- package/dist/components/ansi-console.test.d.ts +2 -0
- package/dist/components/ansi-console.test.d.ts.map +1 -0
- package/dist/components/ansi-console.test.js +36 -0
- package/dist/components/loader.d.ts +21 -1
- package/dist/components/loader.d.ts.map +1 -1
- package/dist/components/loader.js +39 -15
- package/dist/components/markdown.d.ts +5 -0
- package/dist/components/markdown.d.ts.map +1 -1
- package/dist/components/markdown.js +47 -2
- package/dist/components/markdown.test.js +30 -1
- package/dist/components/select-list.d.ts +6 -0
- package/dist/components/select-list.d.ts.map +1 -1
- package/dist/components/select-list.js +18 -0
- package/dist/components/select-list.test.d.ts +2 -0
- package/dist/components/select-list.test.d.ts.map +1 -0
- package/dist/components/select-list.test.js +53 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/keybindings.d.ts +5 -0
- package/dist/keybindings.d.ts.map +1 -1
- package/dist/keybindings.js +7 -0
- package/dist/loader-sweep.test.d.ts +2 -0
- package/dist/loader-sweep.test.d.ts.map +1 -0
- package/dist/loader-sweep.test.js +67 -0
- package/dist/stdin-buffer.d.ts +1 -0
- package/dist/stdin-buffer.d.ts.map +1 -1
- package/dist/stdin-buffer.js +19 -0
- package/dist/stdin-buffer.test.d.ts +2 -0
- package/dist/stdin-buffer.test.d.ts.map +1 -0
- package/dist/stdin-buffer.test.js +38 -0
- package/dist/terminal-reassert.test.d.ts +2 -0
- package/dist/terminal-reassert.test.d.ts.map +1 -0
- package/dist/terminal-reassert.test.js +18 -0
- package/dist/terminal.d.ts +14 -0
- package/dist/terminal.d.ts.map +1 -1
- package/dist/terminal.js +18 -0
- package/dist/text-sizing.d.ts +7 -0
- package/dist/text-sizing.d.ts.map +1 -0
- package/dist/text-sizing.js +34 -0
- package/dist/text-sizing.test.d.ts +2 -0
- package/dist/text-sizing.test.d.ts.map +1 -0
- package/dist/text-sizing.test.js +43 -0
- package/dist/tui-scrollback.test.js +36 -0
- package/dist/tui.d.ts +8 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +73 -7
- package/dist/utils.d.ts +1 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +28 -0
- package/dist/virtual-terminal.d.ts +1 -0
- package/dist/virtual-terminal.d.ts.map +1 -1
- package/dist/virtual-terminal.js +3 -0
- package/package.json +2 -2
package/dist/tui.js
CHANGED
|
@@ -130,9 +130,17 @@ export class TUI extends Container {
|
|
|
130
130
|
/** Global callback for debug key (Shift+Ctrl+D). Called before input is forwarded to focused component. */
|
|
131
131
|
onDebug;
|
|
132
132
|
renderRequested = false;
|
|
133
|
+
/** Duration of the previous frame (drives adaptive backpressure). */
|
|
134
|
+
lastFrameCostMs = 0;
|
|
133
135
|
renderTimer;
|
|
134
136
|
lastRenderAt = 0;
|
|
135
137
|
static MIN_RENDER_INTERVAL_MS = 16;
|
|
138
|
+
/** Adaptive backpressure (omp #4145): the next frame starts no sooner than
|
|
139
|
+
* last_frame_start + 2 × last_frame_cost, targeting a ~50% render duty
|
|
140
|
+
* cycle so a heavy frame (long markdown tail) cannot saturate the loop and
|
|
141
|
+
* starve input/loader paints. Capped so a one-off spike cannot lock the
|
|
142
|
+
* UI. */
|
|
143
|
+
static MAX_ADAPTIVE_RENDER_MS = 200;
|
|
136
144
|
cursorRow = 0; // Logical cursor row (end of rendered content)
|
|
137
145
|
hardwareCursorRow = 0; // Actual terminal cursor row (may differ due to IME positioning)
|
|
138
146
|
showHardwareCursor = process.env.PI_HARDWARE_CURSOR === "1";
|
|
@@ -552,7 +560,9 @@ export class TUI extends Container {
|
|
|
552
560
|
}
|
|
553
561
|
this.renderRequested = false;
|
|
554
562
|
this.lastRenderAt = performance.now();
|
|
563
|
+
const frameStart = this.lastRenderAt;
|
|
555
564
|
this.doRender();
|
|
565
|
+
this.lastFrameCostMs = performance.now() - frameStart;
|
|
556
566
|
});
|
|
557
567
|
return;
|
|
558
568
|
}
|
|
@@ -566,7 +576,10 @@ export class TUI extends Container {
|
|
|
566
576
|
return;
|
|
567
577
|
}
|
|
568
578
|
const elapsed = performance.now() - this.lastRenderAt;
|
|
569
|
-
const
|
|
579
|
+
const cadenceDelay = Math.max(0, TUI.MIN_RENDER_INTERVAL_MS - elapsed);
|
|
580
|
+
const adaptiveFloor = Math.min(TUI.MAX_ADAPTIVE_RENDER_MS, this.lastFrameCostMs * 2);
|
|
581
|
+
const adaptiveDelay = Math.max(0, adaptiveFloor - elapsed);
|
|
582
|
+
const delay = Math.max(cadenceDelay, adaptiveDelay);
|
|
570
583
|
this.renderTimer = setTimeout(() => {
|
|
571
584
|
this.renderTimer = undefined;
|
|
572
585
|
if (this.stopped || !this.renderRequested) {
|
|
@@ -574,7 +587,9 @@ export class TUI extends Container {
|
|
|
574
587
|
}
|
|
575
588
|
this.renderRequested = false;
|
|
576
589
|
this.lastRenderAt = performance.now();
|
|
590
|
+
const frameStart = this.lastRenderAt;
|
|
577
591
|
this.doRender();
|
|
592
|
+
this.lastFrameCostMs = performance.now() - frameStart;
|
|
578
593
|
if (this.renderRequested) {
|
|
579
594
|
this.scheduleRender();
|
|
580
595
|
}
|
|
@@ -1070,8 +1085,26 @@ export class TUI extends Container {
|
|
|
1070
1085
|
let buffer = "\x1b[?2026h";
|
|
1071
1086
|
if (destructiveReset)
|
|
1072
1087
|
buffer += "\x1b[H\x1b[3J\x1b[2J";
|
|
1088
|
+
// Frame advance = history rows appended this frame. After those appends
|
|
1089
|
+
// the screen content that sits under new viewport slot i is the OLD
|
|
1090
|
+
// window's row (i + advance) — both when the appends scrolled the
|
|
1091
|
+
// terminal (full-height frames) and when the window slid down over the
|
|
1092
|
+
// scrollback (short frames). Rows equal under that mapping are already
|
|
1093
|
+
// correct on screen and are skipped.
|
|
1094
|
+
// Sound minimal differential: only frames WITHOUT history appends and
|
|
1095
|
+
// with an unchanged window origin may skip byte-identical rows. Scroll
|
|
1096
|
+
// frames (history pushes shift screen content by an amount the provider
|
|
1097
|
+
// may disagree with — its commit granularity differs from the slice)
|
|
1098
|
+
// stay on the full sequential write; generalizing the skip to detected
|
|
1099
|
+
// shifts corrupted the scrollback interplay (H-rows landing in V-slots)
|
|
1100
|
+
// and was reverted.
|
|
1101
|
+
const differential = !destructiveReset &&
|
|
1102
|
+
historyRows.length === 0 &&
|
|
1103
|
+
this.providerWindow.length === rows &&
|
|
1104
|
+
rows > 0 &&
|
|
1105
|
+
newTop === this.providerViewportTop;
|
|
1073
1106
|
const pushed = Math.max(0, startTop + historyRows.length + rows - height);
|
|
1074
|
-
if (pushed > this.providerViewportTop && this.providerWindow.length > 0) {
|
|
1107
|
+
if (!differential && pushed > this.providerViewportTop && this.providerWindow.length > 0) {
|
|
1075
1108
|
buffer += `\x1b[${this.providerViewportTop + 1};1H\x1b[J`;
|
|
1076
1109
|
}
|
|
1077
1110
|
buffer += `\x1b[${startTop + 1};1H`;
|
|
@@ -1082,11 +1115,44 @@ export class TUI extends Container {
|
|
|
1082
1115
|
buffer += `\x1b[2K${line}`;
|
|
1083
1116
|
screenRow++;
|
|
1084
1117
|
}
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1118
|
+
// Differential viewport write: frames without history appends and with
|
|
1119
|
+
// an unchanged window origin rewrite ONLY the rows whose bytes changed.
|
|
1120
|
+
// Terminals without synchronized-output support (tmux 3.3a ignores
|
|
1121
|
+
// DECSET 2026) would otherwise blank-and-rewrite every row on every
|
|
1122
|
+
// spinner tick — visible as constant transcript flicker. Frames that
|
|
1123
|
+
// scroll (history pushes shift screen content) fall back to the full
|
|
1124
|
+
// sequential write; the byte-identical skip is unsound there.
|
|
1125
|
+
if (differential) {
|
|
1126
|
+
let runStart = -1;
|
|
1127
|
+
const flushRun = (endExclusive) => {
|
|
1128
|
+
if (runStart < 0)
|
|
1129
|
+
return;
|
|
1130
|
+
buffer += `\x1b[${newTop + runStart + 1};1H`;
|
|
1131
|
+
for (let k = runStart; k < endExclusive; k++) {
|
|
1132
|
+
if (k > runStart)
|
|
1133
|
+
buffer += "\r\n";
|
|
1134
|
+
buffer += `\x1b[2K${viewport[k] ?? ""}`;
|
|
1135
|
+
}
|
|
1136
|
+
runStart = -1;
|
|
1137
|
+
};
|
|
1138
|
+
for (let index = 0; index < rows; index++) {
|
|
1139
|
+
if (this.providerWindow[index] !== viewport[index]) {
|
|
1140
|
+
if (runStart < 0)
|
|
1141
|
+
runStart = index;
|
|
1142
|
+
}
|
|
1143
|
+
else {
|
|
1144
|
+
flushRun(index);
|
|
1145
|
+
}
|
|
1146
|
+
}
|
|
1147
|
+
flushRun(rows);
|
|
1148
|
+
}
|
|
1149
|
+
else {
|
|
1150
|
+
for (let index = 0; index < rows; index++) {
|
|
1151
|
+
if (index > 0 || screenRow > startTop)
|
|
1152
|
+
buffer += "\r\n";
|
|
1153
|
+
buffer += `\x1b[2K${viewport[index] ?? ""}`;
|
|
1154
|
+
screenRow++;
|
|
1155
|
+
}
|
|
1090
1156
|
}
|
|
1091
1157
|
if (newTop + rows < height)
|
|
1092
1158
|
buffer += `\x1b[${newTop + rows + 1};1H\x1b[J`;
|
package/dist/utils.d.ts
CHANGED
|
@@ -7,9 +7,7 @@ export declare function getGraphemeSegmenter(): Intl.Segmenter;
|
|
|
7
7
|
*/
|
|
8
8
|
export declare function getWordSegmenter(): Intl.Segmenter;
|
|
9
9
|
export declare const cjkBreakRegex: RegExp;
|
|
10
|
-
|
|
11
|
-
* Calculate the visible width of a string in terminal columns.
|
|
12
|
-
*/
|
|
10
|
+
export declare function encodeTextSized(text: string, scale: number): string;
|
|
13
11
|
export declare function visibleWidth(str: string): number;
|
|
14
12
|
export declare function normalizeTerminalOutput(str: string): string;
|
|
15
13
|
/**
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,SAAS,CAErD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAAC,SAAS,CAEjD;AA+BD,eAAO,MAAM,aAAa,QAC4H,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,SAAS,CAErD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAAC,SAAS,CAEjD;AA+BD,eAAO,MAAM,aAAa,QAC4H,CAAC;AA+KvJ,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnE;AAgBD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAyDhD;AAWD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwCjG;AAmWD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAuBtE;AAmFD,eAAO,MAAM,iBAAiB,QAAyC,CAAC;AAExE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAuED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAC7B,MAAM,CAcR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAc,EACxB,GAAG,GAAE,OAAe,GACnB,MAAM,CAiJR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,UAAQ,GACb,MAAM,CAER;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,UAAQ,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAwCjC;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,UAAQ,GAClB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAiE5E"}
|
package/dist/utils.js
CHANGED
|
@@ -179,6 +179,32 @@ function graphemeWidth(segment) {
|
|
|
179
179
|
/**
|
|
180
180
|
* Calculate the visible width of a string in terminal columns.
|
|
181
181
|
*/
|
|
182
|
+
/** OSC 66 text-sizing spans: `\x1b]66;<meta>;<payload>` (BEL or ST). The
|
|
183
|
+
* payload is visible and scales by its `s=` factor, but the escape stripper
|
|
184
|
+
* drops the whole span — so the width is added back at scale, or the frame's
|
|
185
|
+
* padding math would treat a sized heading as a zero-width line. */
|
|
186
|
+
const OSC66_SPAN = /\x1b\]66;([^;]*);([\s\S]*?)(?:\x07|\x1b\\)/g;
|
|
187
|
+
/** Sequencing/control bytes are illegal inside an OSC 66 payload. */
|
|
188
|
+
const OSC66_UNSAFE = /[\x00-\x1f\x7f]/g;
|
|
189
|
+
export function encodeTextSized(text, scale) {
|
|
190
|
+
if (scale <= 1)
|
|
191
|
+
return text;
|
|
192
|
+
return `\x1b]66;s=${scale};${text.replace(OSC66_UNSAFE, " ")}\x1b\\`;
|
|
193
|
+
}
|
|
194
|
+
function textSizingSpansWidth(text) {
|
|
195
|
+
let total = 0;
|
|
196
|
+
for (const match of text.matchAll(OSC66_SPAN)) {
|
|
197
|
+
const scale = Number(/s=(\d+)/.exec(match[1] ?? "")?.[1] ?? "1");
|
|
198
|
+
if (!Number.isFinite(scale) || scale <= 1)
|
|
199
|
+
continue;
|
|
200
|
+
let payloadWidth = 0;
|
|
201
|
+
for (const { segment } of graphemeSegmenter.segment(match[2] ?? "")) {
|
|
202
|
+
payloadWidth += graphemeWidth(segment);
|
|
203
|
+
}
|
|
204
|
+
total += scale * payloadWidth;
|
|
205
|
+
}
|
|
206
|
+
return total;
|
|
207
|
+
}
|
|
182
208
|
export function visibleWidth(str) {
|
|
183
209
|
if (str.length === 0) {
|
|
184
210
|
return 0;
|
|
@@ -219,6 +245,8 @@ export function visibleWidth(str) {
|
|
|
219
245
|
for (const { segment } of graphemeSegmenter.segment(clean)) {
|
|
220
246
|
width += graphemeWidth(segment);
|
|
221
247
|
}
|
|
248
|
+
// A sized span survives the strip as nothing; add it back at its scale.
|
|
249
|
+
width += textSizingSpansWidth(str);
|
|
222
250
|
// Cache result
|
|
223
251
|
if (widthCache.size >= WIDTH_CACHE_SIZE) {
|
|
224
252
|
const firstKey = widthCache.keys().next().value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"virtual-terminal.d.ts","sourceRoot":"","sources":["../src/virtual-terminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,WAAW,EAAiC,MAAM,iBAAiB,CAAC;AAE/F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C;;GAEG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,YAAY,CAAC,CAAyB;IAC9C,OAAO,CAAC,aAAa,CAAC,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,SAAK,EAAE,IAAI,SAAK;IAcnC,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAO5D,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,IAAI,IAAI,IAAI;IAOZ,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,mBAAmB,IAAI,OAAO,CAGjC;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAW3B,UAAU,IAAI,IAAI;IAIlB,UAAU,IAAI,IAAI;IAIlB,SAAS,IAAI,IAAI;IAIjB,eAAe,IAAI,IAAI;IAIvB,WAAW,IAAI,IAAI;IAInB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAInC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM7B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAS3C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK9C;;;OAGG;IACH,WAAW,IAAI,MAAM,EAAE;IAiBvB;;OAEG;IACH;;;OAGG;IACH,eAAe,IAAI,MAAM,EAAE;IAa3B,0DAA0D;IAC1D,mBAAmB,IAAI,MAAM,EAAE;IAU/B,eAAe,IAAI,MAAM,EAAE;IAiB3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,iBAAiB,IAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAQ7C,0DAA0D;IACpD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAKrC;AAoCD,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAyBpD"}
|
|
1
|
+
{"version":3,"file":"virtual-terminal.d.ts","sourceRoot":"","sources":["../src/virtual-terminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,WAAW,EAAiC,MAAM,iBAAiB,CAAC;AAE/F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK9C;;GAEG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,YAAY,CAAC,CAAyB;IAC9C,OAAO,CAAC,aAAa,CAAC,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,SAAK,EAAE,IAAI,SAAK;IAcnC,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAO5D,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,IAAI,IAAI,IAAI;IAOZ,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,mBAAmB,IAAI,OAAO,CAGjC;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAW3B,qBAAqB,IAAI,IAAI;IAI7B,UAAU,IAAI,IAAI;IAIlB,UAAU,IAAI,IAAI;IAIlB,SAAS,IAAI,IAAI;IAIjB,eAAe,IAAI,IAAI;IAIvB,WAAW,IAAI,IAAI;IAInB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAInC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM7B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAS3C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK9C;;;OAGG;IACH,WAAW,IAAI,MAAM,EAAE;IAiBvB;;OAEG;IACH;;;OAGG;IACH,eAAe,IAAI,MAAM,EAAE;IAa3B,0DAA0D;IAC1D,mBAAmB,IAAI,MAAM,EAAE;IAU/B,eAAe,IAAI,MAAM,EAAE;IAiB3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,iBAAiB,IAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAQ7C,0DAA0D;IACpD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAKrC;AAoCD,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAyBpD"}
|
package/dist/virtual-terminal.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chengchenccc/tui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0-rc.2",
|
|
4
4
|
"description": "Terminal UI library with differential rendering (vendored from @earendil-works/pi-tui, MIT)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"scripts": {
|
|
21
21
|
"build": "tsc -p tsconfig.json",
|
|
22
22
|
"lint": "biome check . && eslint .",
|
|
23
|
-
"test": "bun test --pass-with-no-tests",
|
|
23
|
+
"test": "bun test src --pass-with-no-tests",
|
|
24
24
|
"typecheck": "tsc -p tsconfig.test.json --noEmit"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|