take4-console 0.30.0 → 0.31.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.
- package/CHANGELOG.md +60 -0
- package/README.md +3 -2
- package/dist/Screen/Screen.d.mts +40 -0
- package/dist/Screen/Screen.d.mts.map +1 -1
- package/dist/Screen/Screen.mjs +148 -1
- package/dist/Screen/Screen.mjs.map +1 -1
- package/dist/Screen/Window.d.mts +50 -1
- package/dist/Screen/Window.d.mts.map +1 -1
- package/dist/Screen/Window.mjs +176 -19
- package/dist/Screen/Window.mjs.map +1 -1
- package/dist/Screen/WindowManager.d.mts.map +1 -1
- package/dist/Screen/WindowManager.mjs +11 -0
- package/dist/Screen/WindowManager.mjs.map +1 -1
- package/dist/Screen/controls/BarChart.d.mts.map +1 -1
- package/dist/Screen/controls/BarChart.mjs +3 -0
- package/dist/Screen/controls/BarChart.mjs.map +1 -1
- package/dist/Screen/controls/Checkbox.d.mts.map +1 -1
- package/dist/Screen/controls/Checkbox.mjs +4 -0
- package/dist/Screen/controls/Checkbox.mjs.map +1 -1
- package/dist/Screen/controls/LineChart.d.mts.map +1 -1
- package/dist/Screen/controls/LineChart.mjs +3 -0
- package/dist/Screen/controls/LineChart.mjs.map +1 -1
- package/dist/Screen/controls/ListBox.d.mts.map +1 -1
- package/dist/Screen/controls/ListBox.mjs +9 -0
- package/dist/Screen/controls/ListBox.mjs.map +1 -1
- package/dist/Screen/controls/ProgressBar.d.mts.map +1 -1
- package/dist/Screen/controls/ProgressBar.mjs +2 -0
- package/dist/Screen/controls/ProgressBar.mjs.map +1 -1
- package/dist/Screen/controls/ProgressBarV.d.mts.map +1 -1
- package/dist/Screen/controls/ProgressBarV.mjs +2 -0
- package/dist/Screen/controls/ProgressBarV.mjs.map +1 -1
- package/dist/Screen/controls/Radio.d.mts.map +1 -1
- package/dist/Screen/controls/Radio.mjs +7 -1
- package/dist/Screen/controls/Radio.mjs.map +1 -1
- package/dist/Screen/controls/Sparkline.d.mts.map +1 -1
- package/dist/Screen/controls/Sparkline.mjs +3 -0
- package/dist/Screen/controls/Sparkline.mjs.map +1 -1
- package/dist/Screen/controls/Spinner.d.mts.map +1 -1
- package/dist/Screen/controls/Spinner.mjs +8 -0
- package/dist/Screen/controls/Spinner.mjs.map +1 -1
- package/dist/Screen/controls/StatusLED.d.mts.map +1 -1
- package/dist/Screen/controls/StatusLED.mjs +3 -0
- package/dist/Screen/controls/StatusLED.mjs.map +1 -1
- package/dist/Screen/controls/Tabs.d.mts.map +1 -1
- package/dist/Screen/controls/Tabs.mjs +2 -0
- package/dist/Screen/controls/Tabs.mjs.map +1 -1
- package/dist/Screen/controls/TextArea.d.mts.map +1 -1
- package/dist/Screen/controls/TextArea.mjs +11 -0
- package/dist/Screen/controls/TextArea.mjs.map +1 -1
- package/dist/Screen/controls/TextBox.d.mts.map +1 -1
- package/dist/Screen/controls/TextBox.mjs +13 -0
- package/dist/Screen/controls/TextBox.mjs.map +1 -1
- package/dist/Screen/types.d.mts +26 -0
- package/dist/Screen/types.d.mts.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.mts.map +1 -1
- package/package.json +1 -1
- package/src/Screen/Screen.mts +148 -2
- package/src/Screen/Window.mts +165 -16
- package/src/Screen/WindowManager.mts +11 -0
- package/src/Screen/controls/BarChart.mts +3 -0
- package/src/Screen/controls/Checkbox.mts +3 -0
- package/src/Screen/controls/LineChart.mts +3 -0
- package/src/Screen/controls/ListBox.mts +8 -0
- package/src/Screen/controls/ProgressBar.mts +2 -0
- package/src/Screen/controls/ProgressBarV.mts +2 -0
- package/src/Screen/controls/Radio.mts +6 -1
- package/src/Screen/controls/Sparkline.mts +3 -0
- package/src/Screen/controls/Spinner.mts +6 -0
- package/src/Screen/controls/StatusLED.mts +2 -0
- package/src/Screen/controls/Tabs.mts +2 -0
- package/src/Screen/controls/TextArea.mts +10 -0
- package/src/Screen/controls/TextBox.mts +12 -0
- package/src/Screen/types.mts +27 -0
- package/src/demo.mts +51 -0
- package/src/index.mts +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,65 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.31.0] – 2026-04-20
|
|
4
|
+
|
|
5
|
+
### Added — backlog P2-59 (damage tracking / dirty-region render)
|
|
6
|
+
- **`DirtyRect`** — nowy typ (`{ x, y, w, h }`) eksportowany z
|
|
7
|
+
`src/index.mts`. Reprezentuje zmieniony obszar w lokalnym
|
|
8
|
+
układzie współrzędnych `Window` albo (po zebraniu przez
|
|
9
|
+
`Screen.render()`) w układzie ekranowym.
|
|
10
|
+
- **`Window.markDirty(rect?)` / `Window.invalidate()`** — publiczny
|
|
11
|
+
API do zgłaszania zmian zawartości. Wszystkie metody zapisu
|
|
12
|
+
(`setCell`, `setChar`, `mergeStyle`, `fill`, `clear`, `writeText`)
|
|
13
|
+
same wołają `markDirty`, więc niestandardowe kontrolki dostają
|
|
14
|
+
tracking za darmo; `invalidate()` to alias „cała kontrolka brudna”.
|
|
15
|
+
Zapisy w obrębie `render()` są globalnie tłumione
|
|
16
|
+
(`Window.renderingDepth`) żeby re-paint w overriddowanym
|
|
17
|
+
`render()` nie unieważniał pustych klatek.
|
|
18
|
+
- **`Window.parent` + `markFullInvalidation()`** — okno trzyma
|
|
19
|
+
wskaźnik na rodzica, a każda zmiana geometrii / topologii
|
|
20
|
+
(`addChild`, `removeChild`, `setVisible`, `setZIndex`,
|
|
21
|
+
`resizeRegions`) propaguje się w górę do rootowego `Screen`,
|
|
22
|
+
który ustawia flagę `fullInvalidate`. `Screen` overriduje tę
|
|
23
|
+
metodę bezpośrednio, więc sygnał nie idzie wyżej.
|
|
24
|
+
- **`Screen.render()` — nowa ścieżka emisji**. Gdy
|
|
25
|
+
`damageTracking` jest włączone (default `true`) i żadna dirty
|
|
26
|
+
nie istnieje, klatka jest pomijana w całości (zero
|
|
27
|
+
`process.stdout.write`). W przeciwnym razie `Screen` zbiera
|
|
28
|
+
rect-y w dół drzewa (`collectDirtyRects`), koalescencja do
|
|
29
|
+
per-row min/max X (`emitDirty`), emit tylko dla zmienionych
|
|
30
|
+
komórek z cursor-addressingiem `\x1b[row;colH`. Pełny repaint
|
|
31
|
+
(`emitFull`) uruchamia się dla pierwszej klatki, po `resize()`,
|
|
32
|
+
po `invalidate()` / `markFullInvalidation()` bąbelkowanym z
|
|
33
|
+
dziecka i po `setDamageTracking(...)` (tranzycja zawsze resetuje
|
|
34
|
+
terminal).
|
|
35
|
+
- **`ScreenOptions.damageTracking`** — konfigurowalne w
|
|
36
|
+
konstruktorze (default `true`); `Screen.setDamageTracking(enabled)`
|
|
37
|
+
/ `Screen.isDamageTrackingEnabled()` do przełączania w runtime;
|
|
38
|
+
`Screen.invalidate()` do ręcznego forsowania pełnego repaintu.
|
|
39
|
+
- **`ScreenFrameStats.cellsEmitted` / `fullRepaint`** — nowe pola
|
|
40
|
+
w evencie `'frame'` raportujące ile cell-i realnie poszło na
|
|
41
|
+
stdout i czy była to pełna klatka. Klatki pominięte raportują
|
|
42
|
+
`cellsEmitted: 0` (`fullRepaint` pozostaje `undefined`).
|
|
43
|
+
- **WindowManager.resume()** — po wznowieniu z `pause()` woła
|
|
44
|
+
`screen.invalidate()`, więc klatka po powrocie z powłoki
|
|
45
|
+
zawsze jest pełna (cache dirty po pauzie jest już nieaktualny).
|
|
46
|
+
- **Audyt kontrolek** — state-setter-y w `TextBox`, `TextArea`,
|
|
47
|
+
`ListBox`, `Tabs`, `Checkbox`, `Radio`, `Spinner`, `Sparkline`,
|
|
48
|
+
`LineChart`, `BarChart`, `ProgressBar`, `ProgressBarV`,
|
|
49
|
+
`StatusLED` wołają `markDirty()`; `handleKey()` we wszystkich
|
|
50
|
+
interaktywnych kontrolkach również. Statyczne kontrolki nie
|
|
51
|
+
dostały zmian — ich zawartość zmienia się tylko przy jawnym
|
|
52
|
+
`markDirty` / `writeText`.
|
|
53
|
+
- **Demo + binding** — `Ctrl+D` przełącza damage tracking
|
|
54
|
+
(top-center toast z nowym stanem). `'frame'` event pozwala
|
|
55
|
+
zmierzyć różnicę `cellsEmitted`.
|
|
56
|
+
- **Doc** — `doc/p2-59-damage-tracking.md` opisuje algorytm,
|
|
57
|
+
propagację, escape hatches, backwards compatibility.
|
|
58
|
+
- **Testy** — `tests/Screen.test.mts` (6 nowych, 32 łącznie):
|
|
59
|
+
pełny repaint pierwszej klatki, skip klatki bez zmian, per-row
|
|
60
|
+
emit po `setCell`, `resize()` forsuje full, `invalidate()`
|
|
61
|
+
forsuje full, `setDamageTracking(false)` wraca do pre-0.31.
|
|
62
|
+
|
|
3
63
|
## [0.30.0] – 2026-04-18
|
|
4
64
|
|
|
5
65
|
### Added — backlog P1-27 (Toast / Notification overlay)
|
package/README.md
CHANGED
|
@@ -8,7 +8,8 @@ Ships 15 built-in controls — buttons, text inputs, checkboxes, radios,
|
|
|
8
8
|
listboxes, tabs, status LEDs, progress bars, line/bar/sparkline charts,
|
|
9
9
|
spinners — and an extension API for adding your own. Pure ESM, TypeScript
|
|
10
10
|
first, zero runtime dependencies besides a YAML parser, one `stdout.write()`
|
|
11
|
-
per frame
|
|
11
|
+
per frame, with built-in damage tracking that skips the write entirely
|
|
12
|
+
when nothing is dirty.
|
|
12
13
|
|
|
13
14
|
> **Requirements:** Node.js ≥ 18, a terminal that supports ANSI escape
|
|
14
15
|
> sequences and 256-colour / 24-bit colour. NerdFonts glyphs are supported
|
|
@@ -192,7 +193,7 @@ MIT © Jarosław Mężyk
|
|
|
192
193
|
| `Region` | A flat `chars[]` + `styleIds[]` buffer. Every Window has two: `content` (user writes) and `region` (composited on render). |
|
|
193
194
|
| `StyleRegistry` | Maps integer `StyleId` → `CellAttributes`. Identical attribute objects always get the same ID (deduplication). ID 0 = empty style. |
|
|
194
195
|
| `StyleId` | An opaque integer. Never construct cell attributes directly — always call `registry.register(attrs)` and keep the returned ID. |
|
|
195
|
-
| `Screen` | A `Window` sized to the terminal. Owns the root `StyleRegistry`. Serialises its `region` into a single ANSI escape string and writes it with one `process.stdout.write()`. |
|
|
196
|
+
| `Screen` | A `Window` sized to the terminal. Owns the root `StyleRegistry`. Serialises its `region` into a single ANSI escape string and writes it with one `process.stdout.write()`. Damage tracking (on by default) emits only changed cells and skips the write entirely when nothing is dirty. |
|
|
196
197
|
| `Pos` | Encodes position: absolute `new Pos(x, y)`, edge-relative `new Pos(-1, -1)`, percentage, or named preset (`Pos.center()`, …). |
|
|
197
198
|
| `Size` | Encodes size: absolute `new Size(w, h)`, percentage, or fill shorthand (`Size.fill()`, `Size.fillWidth(h)`, …). |
|
|
198
199
|
|
package/dist/Screen/Screen.d.mts
CHANGED
|
@@ -32,6 +32,18 @@ export declare class Screen extends Window {
|
|
|
32
32
|
/** Per-toast dismiss callbacks (from `ToastOptions.onDismiss`). Kept out of
|
|
33
33
|
* the `Toast` instance so the control stays free of bookkeeping code. */
|
|
34
34
|
private toastDismissHandlers;
|
|
35
|
+
/** When true, `render()` computes the union of every dirty rect propagated
|
|
36
|
+
* bottom-up from the window tree and emits ANSI sequences only for those
|
|
37
|
+
* cells. When false, every frame re-emits the full buffer (pre-0.31
|
|
38
|
+
* behaviour), which is useful for debugging or for terminals that
|
|
39
|
+
* mis-handle partial cursor jumps. Configured via `ScreenOptions.damageTracking`. */
|
|
40
|
+
private damageTracking;
|
|
41
|
+
/** Forces the next `render()` onto the full-repaint path regardless of the
|
|
42
|
+
* dirty state. Set on the first frame, after `resize()`, and bubbled up
|
|
43
|
+
* from descendants via `markFullInvalidation()` when they change
|
|
44
|
+
* geometry, visibility, or tree topology in ways that would leave
|
|
45
|
+
* stale cells on stdout. Cleared after every full-repaint emit. */
|
|
46
|
+
private fullInvalidate;
|
|
35
47
|
/** Initializes the root window sized to the current terminal dimensions.
|
|
36
48
|
* Creates a fresh StyleRegistry (with built-in styles pre-registered)
|
|
37
49
|
* and installs it as the global singleton. The optional ScreenOptions
|
|
@@ -123,6 +135,34 @@ export declare class Screen extends Window {
|
|
|
123
135
|
* Emits a 'frame' event with the wall-clock duration of the render after stdout has been written.
|
|
124
136
|
*/
|
|
125
137
|
render(): void;
|
|
138
|
+
/** Emits every visible cell in `this.region` as one ANSI write, starting
|
|
139
|
+
* with `\x1b[H` (cursor home) and ending with `\x1b[0m`. Returns the
|
|
140
|
+
* number of cells whose character was actually written (skips wide-char
|
|
141
|
+
* continuation sentinels). Used by the full-repaint path. */
|
|
142
|
+
private emitFull;
|
|
143
|
+
/** Coalesces the collected dirty rects into per-row horizontal intervals
|
|
144
|
+
* and emits only those cells, using `\x1b[row;colH` cursor jumps between
|
|
145
|
+
* rows. Returns the number of cells emitted so consumers of the 'frame'
|
|
146
|
+
* event can see how much work each frame did. */
|
|
147
|
+
private emitDirty;
|
|
148
|
+
/** Overrides the parent hook so bubbled full-invalidation signals land
|
|
149
|
+
* on this Screen's own `fullInvalidate` flag instead of walking further
|
|
150
|
+
* up a non-existent parent chain. Public so WindowManager can also
|
|
151
|
+
* request a full repaint after pause/resume or alt-screen toggling. */
|
|
152
|
+
markFullInvalidation(): void;
|
|
153
|
+
/** Public alias of `markFullInvalidation()` — schedules a full repaint on
|
|
154
|
+
* the next `render()` call. Use this when external state (terminal
|
|
155
|
+
* re-init, post-OS dialog, SSH reconnect, …) may have corrupted the
|
|
156
|
+
* on-screen buffer and the stored dirty rects are no longer sufficient. */
|
|
157
|
+
invalidate(): void;
|
|
158
|
+
/** Returns whether damage tracking is currently enabled. Useful for demo
|
|
159
|
+
* code and tests that want to assert or toggle the mode at runtime. */
|
|
160
|
+
isDamageTrackingEnabled(): boolean;
|
|
161
|
+
/** Enables or disables damage tracking at runtime. Disabling forces every
|
|
162
|
+
* subsequent frame onto the full-repaint path; re-enabling resumes the
|
|
163
|
+
* dirty-rect emit on the next frame (after one final full repaint, so
|
|
164
|
+
* the terminal state matches the tree-derived baseline). */
|
|
165
|
+
setDamageTracking(enabled: boolean): void;
|
|
126
166
|
/** Synchronous teardown of any terminal state we own. Used by both dispose()
|
|
127
167
|
* and the 'exit' listener, where async work would be discarded. */
|
|
128
168
|
private restoreTerminalState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Screen.d.mts","sourceRoot":"","sources":["../../src/Screen/Screen.mts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"Screen.d.mts","sourceRoot":"","sources":["../../src/Screen/Screen.mts"],"names":[],"mappings":"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"}
|
package/dist/Screen/Screen.mjs
CHANGED
|
@@ -40,6 +40,18 @@ export class Screen extends Window {
|
|
|
40
40
|
/** Per-toast dismiss callbacks (from `ToastOptions.onDismiss`). Kept out of
|
|
41
41
|
* the `Toast` instance so the control stays free of bookkeeping code. */
|
|
42
42
|
toastDismissHandlers;
|
|
43
|
+
/** When true, `render()` computes the union of every dirty rect propagated
|
|
44
|
+
* bottom-up from the window tree and emits ANSI sequences only for those
|
|
45
|
+
* cells. When false, every frame re-emits the full buffer (pre-0.31
|
|
46
|
+
* behaviour), which is useful for debugging or for terminals that
|
|
47
|
+
* mis-handle partial cursor jumps. Configured via `ScreenOptions.damageTracking`. */
|
|
48
|
+
damageTracking;
|
|
49
|
+
/** Forces the next `render()` onto the full-repaint path regardless of the
|
|
50
|
+
* dirty state. Set on the first frame, after `resize()`, and bubbled up
|
|
51
|
+
* from descendants via `markFullInvalidation()` when they change
|
|
52
|
+
* geometry, visibility, or tree topology in ways that would leave
|
|
53
|
+
* stale cells on stdout. Cleared after every full-repaint emit. */
|
|
54
|
+
fullInvalidate;
|
|
43
55
|
/** Initializes the root window sized to the current terminal dimensions.
|
|
44
56
|
* Creates a fresh StyleRegistry (with built-in styles pre-registered)
|
|
45
57
|
* and installs it as the global singleton. The optional ScreenOptions
|
|
@@ -63,6 +75,8 @@ export class Screen extends Window {
|
|
|
63
75
|
this.activeToasts = new Map();
|
|
64
76
|
this.toastTimers = new Map();
|
|
65
77
|
this.toastDismissHandlers = new Map();
|
|
78
|
+
this.damageTracking = options?.damageTracking ?? true;
|
|
79
|
+
this.fullInvalidate = true;
|
|
66
80
|
if (options?.altScreen)
|
|
67
81
|
this.enterAltScreen();
|
|
68
82
|
if (options?.hideCursor)
|
|
@@ -300,11 +314,46 @@ export class Screen extends Window {
|
|
|
300
314
|
*/
|
|
301
315
|
render() {
|
|
302
316
|
const start = Date.now();
|
|
317
|
+
// Fast path: damage tracking is on, nothing is dirty, no full
|
|
318
|
+
// invalidation pending — skip composition AND emit entirely. The
|
|
319
|
+
// terminal already shows the correct pixels from the previous frame.
|
|
320
|
+
if (this.damageTracking && !this.fullInvalidate) {
|
|
321
|
+
const rects = [];
|
|
322
|
+
this.collectDirtyRects(0, 0, rects);
|
|
323
|
+
if (rects.length === 0) {
|
|
324
|
+
this.events.emit('frame', { ms: Date.now() - start, cellsEmitted: 0 });
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
// Compose first so `this.region` reflects the latest content; the
|
|
328
|
+
// emit below reads from it. We keep `rects` for the emit phase
|
|
329
|
+
// instead of re-collecting, because `super.render()` does not
|
|
330
|
+
// mutate dirty flags (render-depth guard suppresses markDirty
|
|
331
|
+
// inside render overrides).
|
|
332
|
+
super.render();
|
|
333
|
+
const stats = this.emitDirty(rects);
|
|
334
|
+
this.clearDirtyRecursive();
|
|
335
|
+
this.events.emit('frame', { ms: Date.now() - start, cellsEmitted: stats, fullRepaint: false });
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
// Slow / fallback path: full repaint. Always used for the first
|
|
339
|
+
// frame, after `resize()`, after `markFullInvalidation()`, and when
|
|
340
|
+
// damage tracking has been disabled by the caller.
|
|
303
341
|
super.render();
|
|
342
|
+
const cellsEmitted = this.emitFull();
|
|
343
|
+
this.fullInvalidate = false;
|
|
344
|
+
this.clearDirtyRecursive();
|
|
345
|
+
this.events.emit('frame', { ms: Date.now() - start, cellsEmitted, fullRepaint: true });
|
|
346
|
+
}
|
|
347
|
+
/** Emits every visible cell in `this.region` as one ANSI write, starting
|
|
348
|
+
* with `\x1b[H` (cursor home) and ending with `\x1b[0m`. Returns the
|
|
349
|
+
* number of cells whose character was actually written (skips wide-char
|
|
350
|
+
* continuation sentinels). Used by the full-repaint path. */
|
|
351
|
+
emitFull() {
|
|
304
352
|
const reg = getRegistry();
|
|
305
353
|
const chars = this.region.getChars();
|
|
306
354
|
const styleIds = this.region.getStyleIds();
|
|
307
355
|
let output = '\x1b[H';
|
|
356
|
+
let count = 0;
|
|
308
357
|
for (let i = 0; i < chars.length; i++) {
|
|
309
358
|
const ch = chars[i];
|
|
310
359
|
// Empty-string sentinel = continuation cell of a wide character;
|
|
@@ -313,10 +362,108 @@ export class Screen extends Window {
|
|
|
313
362
|
continue;
|
|
314
363
|
output += this.buildAnsiSequence(reg.get(styleIds[i]));
|
|
315
364
|
output += ch;
|
|
365
|
+
count++;
|
|
316
366
|
}
|
|
317
367
|
output += '\x1b[0m';
|
|
318
368
|
process.stdout.write(output);
|
|
319
|
-
|
|
369
|
+
return count;
|
|
370
|
+
}
|
|
371
|
+
/** Coalesces the collected dirty rects into per-row horizontal intervals
|
|
372
|
+
* and emits only those cells, using `\x1b[row;colH` cursor jumps between
|
|
373
|
+
* rows. Returns the number of cells emitted so consumers of the 'frame'
|
|
374
|
+
* event can see how much work each frame did. */
|
|
375
|
+
emitDirty(rects) {
|
|
376
|
+
const { width: sw, height: sh } = this.getSize();
|
|
377
|
+
if (sw === 0 || sh === 0) {
|
|
378
|
+
process.stdout.write('');
|
|
379
|
+
return 0;
|
|
380
|
+
}
|
|
381
|
+
// Collapse rects into per-row min/max columns. A Map keyed by row is
|
|
382
|
+
// sparse enough for the common case (few small dirty regions) and
|
|
383
|
+
// avoids allocating a dense sh-sized array when only a couple of
|
|
384
|
+
// rows are touched.
|
|
385
|
+
const rowSpans = new Map();
|
|
386
|
+
for (const r of rects) {
|
|
387
|
+
const y0 = Math.max(0, r.y);
|
|
388
|
+
const y1 = Math.min(sh - 1, r.y + r.h - 1);
|
|
389
|
+
const x0 = Math.max(0, r.x);
|
|
390
|
+
const x1 = Math.min(sw - 1, r.x + r.w - 1);
|
|
391
|
+
if (y1 < y0 || x1 < x0)
|
|
392
|
+
continue;
|
|
393
|
+
for (let y = y0; y <= y1; y++) {
|
|
394
|
+
const existing = rowSpans.get(y);
|
|
395
|
+
if (existing) {
|
|
396
|
+
if (x0 < existing.minX)
|
|
397
|
+
existing.minX = x0;
|
|
398
|
+
if (x1 > existing.maxX)
|
|
399
|
+
existing.maxX = x1;
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
rowSpans.set(y, { minX: x0, maxX: x1 });
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
if (rowSpans.size === 0)
|
|
407
|
+
return 0;
|
|
408
|
+
// Emit rows in ascending order so the terminal cursor advances
|
|
409
|
+
// forward — random access is fine (we always send an explicit cursor
|
|
410
|
+
// move) but ordered output compresses a bit better and is easier to
|
|
411
|
+
// reason about in transcripts / tests.
|
|
412
|
+
const rows = [...rowSpans.keys()].sort((a, b) => a - b);
|
|
413
|
+
const reg = getRegistry();
|
|
414
|
+
const chars = this.region.getChars();
|
|
415
|
+
const styleIds = this.region.getStyleIds();
|
|
416
|
+
let output = '';
|
|
417
|
+
let count = 0;
|
|
418
|
+
for (const y of rows) {
|
|
419
|
+
const span = rowSpans.get(y);
|
|
420
|
+
// ANSI cursor addressing is 1-based.
|
|
421
|
+
output += `\x1b[${y + 1};${span.minX + 1}H`;
|
|
422
|
+
for (let x = span.minX; x <= span.maxX; x++) {
|
|
423
|
+
const i = y * sw + x;
|
|
424
|
+
const ch = chars[i];
|
|
425
|
+
if (ch === '')
|
|
426
|
+
continue;
|
|
427
|
+
output += this.buildAnsiSequence(reg.get(styleIds[i]));
|
|
428
|
+
output += ch;
|
|
429
|
+
count++;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
output += '\x1b[0m';
|
|
433
|
+
process.stdout.write(output);
|
|
434
|
+
return count;
|
|
435
|
+
}
|
|
436
|
+
/** Overrides the parent hook so bubbled full-invalidation signals land
|
|
437
|
+
* on this Screen's own `fullInvalidate` flag instead of walking further
|
|
438
|
+
* up a non-existent parent chain. Public so WindowManager can also
|
|
439
|
+
* request a full repaint after pause/resume or alt-screen toggling. */
|
|
440
|
+
markFullInvalidation() {
|
|
441
|
+
this.fullInvalidate = true;
|
|
442
|
+
}
|
|
443
|
+
/** Public alias of `markFullInvalidation()` — schedules a full repaint on
|
|
444
|
+
* the next `render()` call. Use this when external state (terminal
|
|
445
|
+
* re-init, post-OS dialog, SSH reconnect, …) may have corrupted the
|
|
446
|
+
* on-screen buffer and the stored dirty rects are no longer sufficient. */
|
|
447
|
+
invalidate() {
|
|
448
|
+
this.markFullInvalidation();
|
|
449
|
+
}
|
|
450
|
+
/** Returns whether damage tracking is currently enabled. Useful for demo
|
|
451
|
+
* code and tests that want to assert or toggle the mode at runtime. */
|
|
452
|
+
isDamageTrackingEnabled() {
|
|
453
|
+
return this.damageTracking;
|
|
454
|
+
}
|
|
455
|
+
/** Enables or disables damage tracking at runtime. Disabling forces every
|
|
456
|
+
* subsequent frame onto the full-repaint path; re-enabling resumes the
|
|
457
|
+
* dirty-rect emit on the next frame (after one final full repaint, so
|
|
458
|
+
* the terminal state matches the tree-derived baseline). */
|
|
459
|
+
setDamageTracking(enabled) {
|
|
460
|
+
if (this.damageTracking === enabled)
|
|
461
|
+
return;
|
|
462
|
+
this.damageTracking = enabled;
|
|
463
|
+
// Always do one full repaint on transition so the terminal buffer
|
|
464
|
+
// matches what the window tree would produce from scratch — useful
|
|
465
|
+
// when flipping back and forth for debugging.
|
|
466
|
+
this.fullInvalidate = true;
|
|
320
467
|
}
|
|
321
468
|
// ── Private helpers ───────────────────────────────────────────────────────
|
|
322
469
|
/** Synchronous teardown of any terminal state we own. Used by both dispose()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Screen.mjs","sourceRoot":"","sources":["../../src/Screen/Screen.mts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Screen.mjs","sourceRoot":"","sources":["../../src/Screen/Screen.mts"],"names":[],"mappings":"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"}
|
package/dist/Screen/Window.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Cell, StyleId, WindowBorder, WindowProperties, WriteTextOptions, WriteTextInput, TerminalSize, Margin } from './types.mjs';
|
|
1
|
+
import type { Cell, StyleId, WindowBorder, WindowProperties, WriteTextOptions, WriteTextInput, TerminalSize, Margin, DirtyRect } from './types.mjs';
|
|
2
2
|
import { Region } from './Region.mjs';
|
|
3
3
|
import { StyleRegistry } from './StyleRegistry.mjs';
|
|
4
4
|
export declare class Window {
|
|
@@ -62,12 +62,61 @@ export declare class Window {
|
|
|
62
62
|
private onFocusHandler;
|
|
63
63
|
/** Fires once when focused state flips from true to false. */
|
|
64
64
|
private onBlurHandler;
|
|
65
|
+
/** Parent window (set by `addChild`, cleared by `removeChild`). Damage
|
|
66
|
+
* tracking walks up this chain to notify the root `Screen` of geometry
|
|
67
|
+
* or topology changes that need a full repaint. */
|
|
68
|
+
protected parent: Window | null;
|
|
69
|
+
/** Accumulated dirty region in this window's local coordinates.
|
|
70
|
+
* - `null` — nothing changed since the last emit.
|
|
71
|
+
* - `'all'` — the whole window area needs to be re-emitted.
|
|
72
|
+
* - `DirtyRect` — bounding box of localised writes; `markDirty()` eagerly
|
|
73
|
+
* unions new rects so we only ever carry one rect per window.
|
|
74
|
+
* Windows start as `'all'` so the very first frame re-emits every cell. */
|
|
75
|
+
protected dirtyRect: DirtyRect | 'all' | null;
|
|
76
|
+
/** Depth of nested `Window.render()` calls currently executing. Increments
|
|
77
|
+
* at the top of every `render()` and decrements in a `finally`, so
|
|
78
|
+
* controls whose `render()` override re-writes content via `this.clear()`
|
|
79
|
+
* / `this.writeText(...)` do not re-mark themselves dirty every frame —
|
|
80
|
+
* render-time writes deterministically rebuild the display buffer from
|
|
81
|
+
* existing state, so marking them as "user-driven dirty" would defeat the
|
|
82
|
+
* "skip frame when nothing changed" optimisation. */
|
|
83
|
+
protected static renderingDepth: number;
|
|
65
84
|
/** Creates a window from the given properties.
|
|
66
85
|
* For percentage-based sizes, call addChild() before writing content to the window.
|
|
67
86
|
* Uses the global StyleRegistry set by the Screen constructor. */
|
|
68
87
|
constructor(wp: WindowProperties);
|
|
69
88
|
/** Returns the window dimensions (columns × rows). */
|
|
70
89
|
getSize(): TerminalSize;
|
|
90
|
+
/** Marks this window (or a sub-rectangle in its local coordinates) as
|
|
91
|
+
* dirty. Subsequent `Screen.render()` calls emit ANSI only for cells
|
|
92
|
+
* inside the collected dirty rects, skipping untouched regions. When
|
|
93
|
+
* `rect` is omitted, the entire window is flagged. Render-time writes
|
|
94
|
+
* are ignored so controls' `render()` overrides do not re-mark
|
|
95
|
+
* themselves every frame. Safe to call many times between renders —
|
|
96
|
+
* new rects are unioned into the existing bounding box. */
|
|
97
|
+
markDirty(rect?: DirtyRect): void;
|
|
98
|
+
/** Convenience alias — flags the entire window as dirty. Equivalent to
|
|
99
|
+
* calling `markDirty()` with no argument; kept as a named entry point
|
|
100
|
+
* so custom controls can invalidate themselves without depending on
|
|
101
|
+
* the default-argument behaviour. */
|
|
102
|
+
invalidate(): void;
|
|
103
|
+
/** Walks the parent chain up to the root window. Damage tracking uses
|
|
104
|
+
* this to bubble a full-invalidation signal to the root `Screen` when
|
|
105
|
+
* geometry or tree topology changes, because the cells previously
|
|
106
|
+
* occupied by a now-moved / resized / hidden window need to be repainted
|
|
107
|
+
* from the content underneath them. `Screen` overrides it to toggle its
|
|
108
|
+
* internal full-repaint flag; plain `Window`s forward the call up. */
|
|
109
|
+
protected markFullInvalidation(): void;
|
|
110
|
+
/** Appends this window's dirty rect (translated into screen coordinates
|
|
111
|
+
* via the running offset) and every descendant's dirty rects to `acc`.
|
|
112
|
+
* Hidden subtrees are skipped — invisible windows don't contribute to
|
|
113
|
+
* the emit phase, and any state change that flips visibility already
|
|
114
|
+
* escalated to a full invalidation so the vacated area repaints. */
|
|
115
|
+
protected collectDirtyRects(offsetX: number, offsetY: number, acc: DirtyRect[]): void;
|
|
116
|
+
/** Clears the dirty flag on this window and every descendant. Called by
|
|
117
|
+
* `Screen.render()` after the emit phase so the next frame starts from
|
|
118
|
+
* a clean slate. */
|
|
119
|
+
protected clearDirtyRecursive(): void;
|
|
71
120
|
/** Returns a snapshot of the resolved per-side margin (in cells). The parent's
|
|
72
121
|
* layout engine reads this to reserve outer spacing around the child. */
|
|
73
122
|
getMargin(): Readonly<Margin>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Window.d.mts","sourceRoot":"","sources":["../../src/Screen/Window.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAA4B,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAoB,YAAY,EAAgE,MAAM,EAAuB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Window.d.mts","sourceRoot":"","sources":["../../src/Screen/Window.mts"],"names":[],"mappings":"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"}
|