@teaui/core 1.3.7 → 1.4.8
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/Buffer.d.ts +9 -4
- package/.dist/Buffer.js +19 -16
- package/.dist/Buffer.js.map +1 -1
- package/.dist/Color.js +8 -12
- package/.dist/Color.js.map +1 -1
- package/.dist/Container.d.ts +4 -4
- package/.dist/Container.js +6 -10
- package/.dist/Container.js.map +1 -1
- package/.dist/Screen.d.ts +40 -11
- package/.dist/Screen.js +134 -97
- package/.dist/Screen.js.map +1 -1
- package/.dist/StringTerminal.d.ts +21 -0
- package/.dist/StringTerminal.js +100 -0
- package/.dist/StringTerminal.js.map +1 -0
- package/.dist/Style.d.ts +1 -1
- package/.dist/Style.js +24 -32
- package/.dist/Style.js.map +1 -1
- package/.dist/System.d.ts +2 -2
- package/.dist/System.js +2 -7
- package/.dist/System.js.map +1 -1
- package/.dist/TestTerminal.d.ts +100 -0
- package/.dist/TestTerminal.js +290 -0
- package/.dist/TestTerminal.js.map +1 -0
- package/.dist/Theme.d.ts +2 -2
- package/.dist/Theme.js +11 -15
- package/.dist/Theme.js.map +1 -1
- package/.dist/UI.d.ts +1 -1
- package/.dist/UI.js +3 -6
- package/.dist/UI.js.map +1 -1
- package/.dist/View.d.ts +8 -8
- package/.dist/View.js +17 -22
- package/.dist/View.js.map +1 -1
- package/.dist/Viewport.d.ts +6 -6
- package/.dist/Viewport.js +26 -30
- package/.dist/Viewport.js.map +1 -1
- package/.dist/ansi.js +25 -43
- package/.dist/ansi.js.map +1 -1
- package/.dist/components/Accordion.d.ts +8 -9
- package/.dist/components/Accordion.js +32 -40
- package/.dist/components/Accordion.js.map +1 -1
- package/.dist/components/Box.d.ts +3 -3
- package/.dist/components/Box.js +27 -31
- package/.dist/components/Box.js.map +1 -1
- package/.dist/components/Button.d.ts +8 -8
- package/.dist/components/Button.js +18 -22
- package/.dist/components/Button.js.map +1 -1
- package/.dist/components/Checkbox.d.ts +7 -7
- package/.dist/components/Checkbox.js +15 -20
- package/.dist/components/Checkbox.js.map +1 -1
- package/.dist/components/Collapsible.d.ts +6 -6
- package/.dist/components/Collapsible.js +16 -20
- package/.dist/components/Collapsible.js.map +1 -1
- package/.dist/components/CollapsibleText.d.ts +6 -6
- package/.dist/components/CollapsibleText.js +22 -26
- package/.dist/components/CollapsibleText.js.map +1 -1
- package/.dist/components/Digits.d.ts +5 -5
- package/.dist/components/Digits.js +7 -11
- package/.dist/components/Digits.js.map +1 -1
- package/.dist/components/Drawer.d.ts +7 -7
- package/.dist/components/Drawer.js +34 -38
- package/.dist/components/Drawer.js.map +1 -1
- package/.dist/components/Dropdown.d.ts +6 -6
- package/.dist/components/Dropdown.js +21 -25
- package/.dist/components/Dropdown.js.map +1 -1
- package/.dist/components/Header.d.ts +5 -5
- package/.dist/components/Header.js +14 -24
- package/.dist/components/Header.js.map +1 -1
- package/.dist/components/HotKey.d.ts +4 -4
- package/.dist/components/HotKey.js +6 -10
- package/.dist/components/HotKey.js.map +1 -1
- package/.dist/components/Input.d.ts +7 -7
- package/.dist/components/Input.js +38 -42
- package/.dist/components/Input.js.map +1 -1
- package/.dist/components/Log.d.ts +5 -5
- package/.dist/components/Log.js +26 -31
- package/.dist/components/Log.js.map +1 -1
- package/.dist/components/Progress.d.ts +4 -4
- package/.dist/components/Progress.js +11 -15
- package/.dist/components/Progress.js.map +1 -1
- package/.dist/components/Scrollable.d.ts +4 -4
- package/.dist/components/Scrollable.js +21 -25
- package/.dist/components/Scrollable.js.map +1 -1
- package/.dist/components/ScrollableList.d.ts +5 -5
- package/.dist/components/ScrollableList.js +13 -17
- package/.dist/components/ScrollableList.js.map +1 -1
- package/.dist/components/Separator.d.ts +5 -5
- package/.dist/components/Separator.js +6 -10
- package/.dist/components/Separator.js.map +1 -1
- package/.dist/components/Slider.d.ts +5 -5
- package/.dist/components/Slider.js +34 -38
- package/.dist/components/Slider.js.map +1 -1
- package/.dist/components/Space.d.ts +5 -5
- package/.dist/components/Space.js +6 -10
- package/.dist/components/Space.js.map +1 -1
- package/.dist/components/Spinner.d.ts +4 -4
- package/.dist/components/Spinner.js +5 -9
- package/.dist/components/Spinner.js.map +1 -1
- package/.dist/components/Stack.d.ts +6 -6
- package/.dist/components/Stack.js +16 -20
- package/.dist/components/Stack.js.map +1 -1
- package/.dist/components/Tabs.d.ts +7 -7
- package/.dist/components/Tabs.js +30 -34
- package/.dist/components/Tabs.js.map +1 -1
- package/.dist/components/Text.d.ts +6 -6
- package/.dist/components/Text.js +19 -23
- package/.dist/components/Text.js.map +1 -1
- package/.dist/components/ToggleGroup.d.ts +7 -7
- package/.dist/components/ToggleGroup.js +20 -24
- package/.dist/components/ToggleGroup.js.map +1 -1
- package/.dist/components/Tree.d.ts +4 -4
- package/.dist/components/Tree.js +17 -21
- package/.dist/components/Tree.js.map +1 -1
- package/.dist/components/Window.d.ts +2 -2
- package/.dist/components/Window.js +2 -6
- package/.dist/components/Window.js.map +1 -1
- package/.dist/components/fonts.d.ts +1 -1
- package/.dist/components/fonts.js +1 -4
- package/.dist/components/fonts.js.map +1 -1
- package/.dist/components/index.d.ts +27 -27
- package/.dist/components/index.js +27 -47
- package/.dist/components/index.js.map +1 -1
- package/.dist/components/types.js +1 -4
- package/.dist/components/types.js.map +1 -1
- package/.dist/components/utility/TrackMouse.d.ts +5 -5
- package/.dist/components/utility/TrackMouse.js +14 -18
- package/.dist/components/utility/TrackMouse.js.map +1 -1
- package/.dist/components/utility/index.d.ts +1 -1
- package/.dist/components/utility/index.js +1 -5
- package/.dist/components/utility/index.js.map +1 -1
- package/.dist/events/index.d.ts +9 -10
- package/.dist/events/index.js +3 -19
- package/.dist/events/index.js.map +1 -1
- package/.dist/events/key.d.ts +17 -3
- package/.dist/events/key.js +6 -13
- package/.dist/events/key.js.map +1 -1
- package/.dist/events/mouse.d.ts +3 -3
- package/.dist/events/mouse.js +12 -24
- package/.dist/events/mouse.js.map +1 -1
- package/.dist/events/translate.d.ts +4 -0
- package/.dist/events/translate.js +84 -0
- package/.dist/events/translate.js.map +1 -0
- package/.dist/events/window.js +1 -2
- package/.dist/geometry.js +4 -11
- package/.dist/geometry.js.map +1 -1
- package/.dist/iTerm2.d.ts +8 -4
- package/.dist/iTerm2.js +5 -9
- package/.dist/iTerm2.js.map +1 -1
- package/.dist/index.d.ts +23 -19
- package/.dist/index.js +21 -37
- package/.dist/index.js.map +1 -1
- package/.dist/inspect.js +23 -28
- package/.dist/inspect.js.map +1 -1
- package/.dist/log.js +9 -17
- package/.dist/log.js.map +1 -1
- package/.dist/managers/FocusManager.d.ts +2 -2
- package/.dist/managers/FocusManager.js +3 -7
- package/.dist/managers/FocusManager.js.map +1 -1
- package/.dist/managers/ModalManager.d.ts +4 -4
- package/.dist/managers/ModalManager.js +5 -9
- package/.dist/managers/ModalManager.js.map +1 -1
- package/.dist/managers/MouseManager.d.ts +4 -4
- package/.dist/managers/MouseManager.js +11 -14
- package/.dist/managers/MouseManager.js.map +1 -1
- package/.dist/managers/TickManager.d.ts +1 -1
- package/.dist/managers/TickManager.js +1 -5
- package/.dist/managers/TickManager.js.map +1 -1
- package/.dist/renderToAnsi.d.ts +12 -0
- package/.dist/renderToAnsi.js +43 -0
- package/.dist/renderToAnsi.js.map +1 -0
- package/.dist/terminal.d.ts +8 -3
- package/.dist/terminal.js +1 -2
- package/.dist/testing.d.ts +44 -0
- package/.dist/testing.js +164 -0
- package/.dist/testing.js.map +1 -0
- package/.dist/util.js +17 -25
- package/.dist/util.js.map +1 -1
- package/LICENSE +0 -3
- package/package.json +9 -31
- package/.dist/sys/alias.d.ts +0 -470
- package/.dist/sys/alias.js +0 -487
- package/.dist/sys/alias.js.map +0 -1
- package/.dist/sys/colors.d.ts +0 -10
- package/.dist/sys/colors.js +0 -285
- package/.dist/sys/colors.js.map +0 -1
- package/.dist/sys/gpmclient.d.ts +0 -11
- package/.dist/sys/gpmclient.js +0 -193
- package/.dist/sys/gpmclient.js.map +0 -1
- package/.dist/sys/index.d.ts +0 -4
- package/.dist/sys/index.js +0 -41
- package/.dist/sys/index.js.map +0 -1
- package/.dist/sys/keys.d.ts +0 -4
- package/.dist/sys/keys.js +0 -531
- package/.dist/sys/keys.js.map +0 -1
- package/.dist/sys/program.d.ts +0 -356
- package/.dist/sys/program.js +0 -3739
- package/.dist/sys/program.js.map +0 -1
- package/.dist/sys/tput.d.ts +0 -297
- package/.dist/sys/tput.js +0 -2708
- package/.dist/sys/tput.js.map +0 -1
- package/.dist/sys/unicode.d.ts +0 -25
- package/.dist/sys/unicode.js +0 -593
- package/.dist/sys/unicode.js.map +0 -1
- package/.dist/sys/usr/linux +0 -0
- package/.dist/sys/usr/windows-ansi +0 -0
- package/.dist/sys/usr/xterm +0 -0
- package/.dist/sys/usr/xterm-256color +0 -0
- package/.dist/sys/usr/xterm.termcap +0 -243
- package/.dist/sys/usr/xterm.terminfo +0 -1977
package/.dist/Buffer.d.ts
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
import type { Terminal, SGRTerminal } from './terminal';
|
|
2
|
-
import type { Color } from './Color';
|
|
3
|
-
import { Style } from './Style';
|
|
4
|
-
import { Size } from './geometry';
|
|
1
|
+
import type { Terminal, SGRTerminal } from './terminal.js';
|
|
2
|
+
import type { Color } from './Color.js';
|
|
3
|
+
import { Style } from './Style.js';
|
|
4
|
+
import { Size } from './geometry.js';
|
|
5
5
|
export declare class Buffer implements Terminal {
|
|
6
6
|
#private;
|
|
7
7
|
size: Size;
|
|
8
8
|
setForeground(fg: Color): void;
|
|
9
9
|
setBackground(bg: Color): void;
|
|
10
10
|
resize(size: Size): void;
|
|
11
|
+
/**
|
|
12
|
+
* Invalidates the diff cache so the next flush writes all cells.
|
|
13
|
+
* Used by test harnesses that reset the terminal between renders.
|
|
14
|
+
*/
|
|
15
|
+
invalidate(): void;
|
|
11
16
|
/**
|
|
12
17
|
* Writes the string at the cursor from left to write. Exits on newline (no default
|
|
13
18
|
* wrapping behavior).
|
package/.dist/Buffer.js
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const geometry_1 = require("./geometry");
|
|
8
|
-
class Buffer {
|
|
9
|
-
size = geometry_1.Size.zero;
|
|
1
|
+
import * as unicode from '@teaui/term';
|
|
2
|
+
import { BG_DRAW } from './ansi.js';
|
|
3
|
+
import { Style } from './Style.js';
|
|
4
|
+
import { Size } from './geometry.js';
|
|
5
|
+
export class Buffer {
|
|
6
|
+
size = Size.zero;
|
|
10
7
|
#meta = '';
|
|
11
8
|
#canvas = new Map();
|
|
12
9
|
#prev = new Map();
|
|
@@ -18,6 +15,13 @@ class Buffer {
|
|
|
18
15
|
}
|
|
19
16
|
this.size = size;
|
|
20
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Invalidates the diff cache so the next flush writes all cells.
|
|
20
|
+
* Used by test harnesses that reset the terminal between renders.
|
|
21
|
+
*/
|
|
22
|
+
invalidate() {
|
|
23
|
+
this.#prev = new Map();
|
|
24
|
+
}
|
|
21
25
|
/**
|
|
22
26
|
* Writes the string at the cursor from left to write. Exits on newline (no default
|
|
23
27
|
* wrapping behavior).
|
|
@@ -28,7 +32,7 @@ class Buffer {
|
|
|
28
32
|
if (char === '\n') {
|
|
29
33
|
return;
|
|
30
34
|
}
|
|
31
|
-
const width =
|
|
35
|
+
const width = unicode.charWidth(char);
|
|
32
36
|
if (width === 0) {
|
|
33
37
|
return;
|
|
34
38
|
}
|
|
@@ -38,7 +42,7 @@ class Buffer {
|
|
|
38
42
|
let line = this.#canvas.get(y);
|
|
39
43
|
if (line) {
|
|
40
44
|
const prev = line.get(x);
|
|
41
|
-
if (prev?.char ===
|
|
45
|
+
if (prev?.char === BG_DRAW) {
|
|
42
46
|
const { foreground, background } = prev.style;
|
|
43
47
|
if (style.foreground === undefined) {
|
|
44
48
|
style = style.merge({ foreground });
|
|
@@ -90,7 +94,7 @@ class Buffer {
|
|
|
90
94
|
if (this.#meta) {
|
|
91
95
|
terminal.write(this.#meta);
|
|
92
96
|
}
|
|
93
|
-
let prevStyle =
|
|
97
|
+
let prevStyle = Style.NONE;
|
|
94
98
|
for (let y = 0; y < this.size.height; y++) {
|
|
95
99
|
const line = this.#canvas.get(y) ?? new Map();
|
|
96
100
|
const prevLine = this.#prev.get(y) ?? new Map();
|
|
@@ -98,7 +102,7 @@ class Buffer {
|
|
|
98
102
|
let didWrite = false;
|
|
99
103
|
let dx = 1;
|
|
100
104
|
for (let x = 0; x < this.size.width; x += dx) {
|
|
101
|
-
const chrInfo = line.get(x) ?? { char: ' ', style:
|
|
105
|
+
const chrInfo = line.get(x) ?? { char: ' ', style: Style.NONE, width: 1 };
|
|
102
106
|
const prevInfo = prevLine.get(x);
|
|
103
107
|
dx = chrInfo.width;
|
|
104
108
|
if (prevInfo && isCharEqual(chrInfo, prevInfo)) {
|
|
@@ -110,7 +114,7 @@ class Buffer {
|
|
|
110
114
|
terminal.move(x, y);
|
|
111
115
|
}
|
|
112
116
|
let { char, style } = chrInfo;
|
|
113
|
-
if (char ===
|
|
117
|
+
if (char === BG_DRAW) {
|
|
114
118
|
char = ' ';
|
|
115
119
|
}
|
|
116
120
|
if (!prevStyle.isEqual(style)) {
|
|
@@ -124,14 +128,13 @@ class Buffer {
|
|
|
124
128
|
}
|
|
125
129
|
}
|
|
126
130
|
}
|
|
127
|
-
if (prevStyle !==
|
|
131
|
+
if (prevStyle !== Style.NONE) {
|
|
128
132
|
terminal.write('\x1b[0m');
|
|
129
133
|
}
|
|
130
134
|
terminal.flush();
|
|
131
135
|
this.#canvas = new Map();
|
|
132
136
|
}
|
|
133
137
|
}
|
|
134
|
-
exports.Buffer = Buffer;
|
|
135
138
|
function isCharEqual(lhs, rhs) {
|
|
136
139
|
return (lhs.char === rhs.char &&
|
|
137
140
|
lhs.width === rhs.width &&
|
package/.dist/Buffer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Buffer.js","sourceRoot":"","sources":["../lib/Buffer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Buffer.js","sourceRoot":"","sources":["../lib/Buffer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,aAAa,CAAA;AAItC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;AAChC,OAAO,EAAC,IAAI,EAAC,MAAM,eAAe,CAAA;AAIlC,MAAM,OAAO,MAAM;IACjB,IAAI,GAAS,IAAI,CAAC,IAAI,CAAA;IAEtB,KAAK,GAAW,EAAE,CAAA;IAClB,OAAO,GAAmC,IAAI,GAAG,EAAE,CAAA;IACnD,KAAK,GAAmC,IAAI,GAAG,EAAE,CAAA;IAEjD,aAAa,CAAC,EAAS,IAAS,CAAC;IACjC,aAAa,CAAC,EAAS,IAAS,CAAC;IAEjC,MAAM,CAAC,IAAU;QACf,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACvE,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAA;QACxB,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAA;IACxB,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,IAAY,EAAE,CAAS,EAAE,CAAS,EAAE,KAAY;QACxD,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACP,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACP,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,OAAM;QACR,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QACrC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAM;QACR,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACpE,OAAM;QACR,CAAC;QAED,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,MAAM,EAAC,UAAU,EAAE,UAAU,EAAC,GAAG,IAAI,CAAC,KAAK,CAAA;gBAC3C,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBACnC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,CAAA;gBACnC,CAAC;gBACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBACnC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAC,UAAU,EAAC,CAAC,CAAA;gBACnC,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YAChC,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBACrC,+DAA+D;gBAC/D,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAC,CAAC,CAAA;gBAE7D,kEAAkE;gBAClE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAC,CAAA;gBACnD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBAChB,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBACpB,CAAC;gBAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;gBAC9B,IAAI,MAAM,EAAE,CAAC;oBACX,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAA;gBACzB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,gCAAgC;gBAChC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC,CAAA;gBACjC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBAChB,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBACpB,CAAC;gBAED,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC5B,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBACxB,4EAA4E;oBAC5E,aAAa;oBACb,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAC,GAAG,IAAI,EAAE,MAAM,EAAE,SAAS,EAAC,CAAC,CAAA;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC,CAAA;YAC3C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,GAAW;QACnB,IAAI,CAAC,KAAK,IAAI,GAAG,CAAA;IACnB,CAAC;IAED,KAAK,CAAC,QAAqB;QACzB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,EAAgB,CAAA;YAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,EAAgB,CAAA;YAC7D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;YAE3B,IAAI,QAAQ,GAAG,KAAK,CAAA;YACpB,IAAI,EAAE,GAAG,CAAC,CAAA;YACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAC,CAAA;gBACvE,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gBAChC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;gBAElB,IAAI,QAAQ,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;oBAC/C,QAAQ,GAAG,KAAK,CAAA;oBAChB,SAAQ;gBACV,CAAC;gBAED,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,QAAQ,GAAG,IAAI,CAAA;oBACf,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBACrB,CAAC;gBAED,IAAI,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,OAAO,CAAA;gBAC3B,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;oBACrB,IAAI,GAAG,GAAG,CAAA;gBACZ,CAAC;gBAED,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;oBACtC,SAAS,GAAG,KAAK,CAAA;gBACnB,CAAC;gBACD,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACpB,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;gBACxB,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;oBACxB,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC3B,CAAC;QACD,QAAQ,CAAC,KAAK,EAAE,CAAA;QAEhB,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;IAC1B,CAAC;CACF;AAED,SAAS,WAAW,CAAC,GAAS,EAAE,GAAS;IACvC,OAAO,CACL,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI;QACrB,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK;QACvB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAC7B,CAAA;AACH,CAAC"}
|
package/.dist/Color.js
CHANGED
|
@@ -1,27 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.colorToHex = colorToHex;
|
|
4
|
-
exports.colorToSGR = colorToSGR;
|
|
5
|
-
const sys_1 = require("./sys");
|
|
6
|
-
function colorToHex(color) {
|
|
1
|
+
import { colors } from '@teaui/term';
|
|
2
|
+
export function colorToHex(color) {
|
|
7
3
|
if (Array.isArray(color)) {
|
|
8
|
-
return
|
|
4
|
+
return colors.RGBtoHex(color);
|
|
9
5
|
}
|
|
10
6
|
else if (typeof color === 'string' && color.startsWith('#')) {
|
|
11
7
|
return color;
|
|
12
8
|
}
|
|
13
9
|
else if (typeof color === 'object' && 'sgr' in color) {
|
|
14
|
-
return
|
|
10
|
+
return colors.indexToHex(+color.sgr);
|
|
15
11
|
}
|
|
16
12
|
else if (typeof color === 'object' && 'grayscale' in color) {
|
|
17
|
-
return
|
|
13
|
+
return colors.RGBtoHex(color.grayscale, color.grayscale, color.grayscale);
|
|
18
14
|
}
|
|
19
15
|
else {
|
|
20
|
-
const index =
|
|
21
|
-
return index === -1 ? '#ffffff' :
|
|
16
|
+
const index = colors.nameToIndex(color);
|
|
17
|
+
return index === -1 ? '#ffffff' : colors.indexToHex(index);
|
|
22
18
|
}
|
|
23
19
|
}
|
|
24
|
-
function colorToSGR(color, fgbg) {
|
|
20
|
+
export function colorToSGR(color, fgbg) {
|
|
25
21
|
if (typeof color === 'object' && 'sgr' in color) {
|
|
26
22
|
return `${color.sgr} ${fgbg}`;
|
|
27
23
|
}
|
package/.dist/Color.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Color.js","sourceRoot":"","sources":["../lib/Color.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Color.js","sourceRoot":"","sources":["../lib/Color.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAuClC,MAAM,UAAU,UAAU,CAAC,KAAY;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO,KAAqB,CAAA;IAC9B,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACtC,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,IAAI,KAAK,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IAC3E,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACvC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IAC5D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAY,EAAE,IAAiB;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QAChD,OAAO,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAA;IAC/B,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAA;IACvC,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,IAAI,KAAK,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;QAC3D,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAA;IAChD,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,KAAK,IAAI,IAAI,EAAE,CAAA;IAC3B,CAAC;AACH,CAAC"}
|
package/.dist/Container.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Size } from './geometry';
|
|
2
|
-
import type { Viewport } from './Viewport';
|
|
3
|
-
import { type Props as ViewProps, View } from './View';
|
|
4
|
-
import { Screen } from './Screen';
|
|
1
|
+
import { Size } from './geometry.js';
|
|
2
|
+
import type { Viewport } from './Viewport.js';
|
|
3
|
+
import { type Props as ViewProps, View } from './View.js';
|
|
4
|
+
import { Screen } from './Screen.js';
|
|
5
5
|
export interface Props extends ViewProps {
|
|
6
6
|
child?: View;
|
|
7
7
|
children?: View[];
|
package/.dist/Container.js
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const View_1 = require("./View");
|
|
6
|
-
const util_1 = require("./util");
|
|
7
|
-
class Container extends View_1.View {
|
|
1
|
+
import { Size } from './geometry.js';
|
|
2
|
+
import { View } from './View.js';
|
|
3
|
+
import { define } from './util.js';
|
|
4
|
+
export class Container extends View {
|
|
8
5
|
#children = [];
|
|
9
6
|
constructor({ child, children, ...viewProps } = {}) {
|
|
10
7
|
super(viewProps);
|
|
11
|
-
|
|
8
|
+
define(this, 'children', { enumerable: true });
|
|
12
9
|
if (child) {
|
|
13
10
|
this.add(child);
|
|
14
11
|
}
|
|
@@ -59,7 +56,7 @@ class Container extends View_1.View {
|
|
|
59
56
|
width = Math.max(width, naturalSize.width);
|
|
60
57
|
height = Math.max(height, naturalSize.height);
|
|
61
58
|
}
|
|
62
|
-
return new
|
|
59
|
+
return new Size(width, height);
|
|
63
60
|
}
|
|
64
61
|
render(viewport) {
|
|
65
62
|
this.renderChildren(viewport);
|
|
@@ -134,5 +131,4 @@ class Container extends View_1.View {
|
|
|
134
131
|
}
|
|
135
132
|
}
|
|
136
133
|
}
|
|
137
|
-
exports.Container = Container;
|
|
138
134
|
//# sourceMappingURL=Container.js.map
|
package/.dist/Container.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Container.js","sourceRoot":"","sources":["../lib/Container.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Container.js","sourceRoot":"","sources":["../lib/Container.ts"],"names":[],"mappings":"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"}
|
package/.dist/Screen.d.ts
CHANGED
|
@@ -1,10 +1,39 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { SGRTerminal } from './terminal';
|
|
3
|
-
import type { Rect, Point } from './geometry';
|
|
4
|
-
import { View } from './View';
|
|
5
|
-
import type { HotKeyDef, KeyEvent, MouseEventListenerName, SystemEvent, SystemMouseEvent } from './events';
|
|
6
|
-
import { Window } from './components/Window';
|
|
7
|
-
type
|
|
1
|
+
import { Terminal as TermTerminal } from '@teaui/term';
|
|
2
|
+
import type { SGRTerminal } from './terminal.js';
|
|
3
|
+
import type { Rect, Point } from './geometry.js';
|
|
4
|
+
import { View } from './View.js';
|
|
5
|
+
import type { HotKeyDef, KeyEvent, MouseEventListenerName, SystemEvent, SystemMouseEvent } from './events/index.js';
|
|
6
|
+
import { Window } from './components/Window.js';
|
|
7
|
+
type KeyListener = (char: string, key: KeyEvent) => void;
|
|
8
|
+
/**
|
|
9
|
+
* Wraps @teaui/term's Terminal for use by Screen and the public API.
|
|
10
|
+
* Provides a blessed-compatible `.key()` helper and implements SGRTerminal.
|
|
11
|
+
*/
|
|
12
|
+
export declare class TerminalProgram implements SGRTerminal {
|
|
13
|
+
#private;
|
|
14
|
+
constructor();
|
|
15
|
+
get terminal(): TermTerminal;
|
|
16
|
+
get cols(): number;
|
|
17
|
+
get rows(): number;
|
|
18
|
+
move(x: number, y: number): void;
|
|
19
|
+
write(str: string): void;
|
|
20
|
+
flush(): void;
|
|
21
|
+
enterFullscreen(): void;
|
|
22
|
+
exitFullscreen(): void;
|
|
23
|
+
clear(): void;
|
|
24
|
+
startInput(screen: Screen): void;
|
|
25
|
+
stopInput(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Register a key binding (blessed-compatible).
|
|
28
|
+
* Pattern: 'escape', 'C-c', 'C-q', 'return', etc.
|
|
29
|
+
*/
|
|
30
|
+
key(pattern: string | string[], fn: KeyListener): void;
|
|
31
|
+
/**
|
|
32
|
+
* Provide raw data listener (for iTerm2 etc.)
|
|
33
|
+
*/
|
|
34
|
+
once(event: string, fn: (...args: any[]) => void): void;
|
|
35
|
+
}
|
|
36
|
+
type ViewConstructor<T extends View> = (program: TerminalProgram) => T | Promise<T>;
|
|
8
37
|
export interface ScreenOptions {
|
|
9
38
|
quitChar?: 'c' | 'q' | '' | undefined | false;
|
|
10
39
|
}
|
|
@@ -17,13 +46,13 @@ export declare class Screen {
|
|
|
17
46
|
* again.
|
|
18
47
|
*/
|
|
19
48
|
static reset(): void;
|
|
20
|
-
static start(): Promise<[Screen,
|
|
21
|
-
static start<T extends View>(viewConstructor: T | ViewConstructor<T>, opts?: Partial<ScreenOptions>): Promise<[Screen,
|
|
22
|
-
constructor(program:
|
|
49
|
+
static start(): Promise<[Screen, TerminalProgram, Window]>;
|
|
50
|
+
static start<T extends View>(viewConstructor: T | ViewConstructor<T>, opts?: Partial<ScreenOptions>): Promise<[Screen, TerminalProgram, T]>;
|
|
51
|
+
constructor(program: TerminalProgram, rootView: View);
|
|
23
52
|
onExit(callback: () => void): void;
|
|
24
53
|
/**
|
|
25
54
|
* Called from Screen.start(). Don't call this yourself unless you wanted
|
|
26
|
-
* to construct your own 'program'
|
|
55
|
+
* to construct your own 'program'. I recommend starting with a
|
|
27
56
|
* copy of the implementation of Screen.start.
|
|
28
57
|
*/
|
|
29
58
|
start(): void;
|
package/.dist/Screen.js
CHANGED
|
@@ -1,41 +1,132 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
import { Terminal as TermTerminal, cursorTo, isKeyEvent, isMouseEvent, isFocusEvent, } from '@teaui/term';
|
|
2
|
+
import { Size } from './geometry.js';
|
|
3
|
+
import { View } from './View.js';
|
|
4
|
+
import { Viewport } from './Viewport.js';
|
|
5
|
+
import { Buffer } from './Buffer.js';
|
|
6
|
+
import { translateTermKeyEvent, translateTermMouseEvent, } from './events/translate.js';
|
|
7
|
+
import { FocusManager } from './managers/FocusManager.js';
|
|
8
|
+
import { ModalManager } from './managers/ModalManager.js';
|
|
9
|
+
import { MouseManager } from './managers/MouseManager.js';
|
|
10
|
+
import { TickManager } from './managers/TickManager.js';
|
|
11
|
+
import { Window } from './components/Window.js';
|
|
12
|
+
import { UnboundSystem } from './System.js';
|
|
13
|
+
/**
|
|
14
|
+
* Wraps @teaui/term's Terminal for use by Screen and the public API.
|
|
15
|
+
* Provides a blessed-compatible `.key()` helper and implements SGRTerminal.
|
|
16
|
+
*/
|
|
17
|
+
export class TerminalProgram {
|
|
18
|
+
#terminal;
|
|
19
|
+
#keyListeners = [];
|
|
20
|
+
#cleanupInput;
|
|
21
|
+
constructor() {
|
|
22
|
+
this.#terminal = new TermTerminal();
|
|
23
|
+
this.#terminal.enableWriteBuffer();
|
|
24
|
+
}
|
|
25
|
+
get terminal() {
|
|
26
|
+
return this.#terminal;
|
|
27
|
+
}
|
|
28
|
+
// --- SGRTerminal interface ---
|
|
29
|
+
get cols() {
|
|
30
|
+
return this.#terminal.cols;
|
|
31
|
+
}
|
|
32
|
+
get rows() {
|
|
33
|
+
return this.#terminal.rows;
|
|
34
|
+
}
|
|
35
|
+
move(x, y) {
|
|
36
|
+
this.#terminal.write(cursorTo(x, y));
|
|
37
|
+
}
|
|
38
|
+
write(str) {
|
|
39
|
+
this.#terminal.write(str);
|
|
40
|
+
}
|
|
41
|
+
flush() {
|
|
42
|
+
this.#terminal.flushWrites();
|
|
43
|
+
}
|
|
44
|
+
// --- Lifecycle ---
|
|
45
|
+
enterFullscreen() {
|
|
46
|
+
this.#terminal.enterFullscreen({
|
|
47
|
+
mouse: true,
|
|
48
|
+
hideCursor: true,
|
|
49
|
+
focusEvents: true,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
exitFullscreen() {
|
|
53
|
+
this.#terminal.exitFullscreen();
|
|
54
|
+
}
|
|
55
|
+
clear() {
|
|
56
|
+
this.#terminal.clear();
|
|
57
|
+
}
|
|
58
|
+
// --- Input ---
|
|
59
|
+
startInput(screen) {
|
|
60
|
+
this.#cleanupInput = this.#terminal.onInput((event) => {
|
|
61
|
+
if (isFocusEvent(event)) {
|
|
62
|
+
screen.trigger({ type: event.focused ? 'focus' : 'blur' });
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (isKeyEvent(event)) {
|
|
66
|
+
const keyEvent = translateTermKeyEvent(event);
|
|
67
|
+
// Check .key() listeners
|
|
68
|
+
for (const { pattern, fn } of this.#keyListeners) {
|
|
69
|
+
if (matchKeyPattern(pattern, keyEvent)) {
|
|
70
|
+
fn(keyEvent.char, keyEvent);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
screen.trigger(keyEvent);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (isMouseEvent(event)) {
|
|
77
|
+
const mouseEvent = translateTermMouseEvent(event);
|
|
78
|
+
if (mouseEvent) {
|
|
79
|
+
screen.trigger(mouseEvent);
|
|
80
|
+
}
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
this.#terminal.onResize(() => {
|
|
85
|
+
screen.trigger({ type: 'resize' });
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
stopInput() {
|
|
89
|
+
this.#cleanupInput?.();
|
|
90
|
+
this.#cleanupInput = undefined;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Register a key binding (blessed-compatible).
|
|
94
|
+
* Pattern: 'escape', 'C-c', 'C-q', 'return', etc.
|
|
95
|
+
*/
|
|
96
|
+
key(pattern, fn) {
|
|
97
|
+
const patterns = Array.isArray(pattern) ? pattern : [pattern];
|
|
98
|
+
for (const p of patterns) {
|
|
99
|
+
this.#keyListeners.push({ pattern: p, fn });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Provide raw data listener (for iTerm2 etc.)
|
|
104
|
+
*/
|
|
105
|
+
once(event, fn) {
|
|
106
|
+
if (event === 'data') {
|
|
107
|
+
this.#terminal.onceRawData(fn);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
export class Screen {
|
|
17
112
|
#program;
|
|
18
113
|
#onExit;
|
|
19
114
|
rootView;
|
|
20
115
|
#buffer;
|
|
21
|
-
#focusManager = new
|
|
22
|
-
#modalManager = new
|
|
23
|
-
#mouseManager = new
|
|
24
|
-
#tickManager = new
|
|
116
|
+
#focusManager = new FocusManager();
|
|
117
|
+
#modalManager = new ModalManager();
|
|
118
|
+
#mouseManager = new MouseManager();
|
|
119
|
+
#tickManager = new TickManager(() => this.render());
|
|
25
120
|
/**
|
|
26
121
|
* A helper function that puts the terminal into a "known good" state. I use this
|
|
27
122
|
* during debugging, if the app crashes and I need to get the terminal CLI working
|
|
28
123
|
* again.
|
|
29
124
|
*/
|
|
30
125
|
static reset() {
|
|
31
|
-
const program = (
|
|
32
|
-
useBuffer: true,
|
|
33
|
-
tput: true,
|
|
34
|
-
});
|
|
126
|
+
const program = new TerminalProgram();
|
|
35
127
|
program.clear();
|
|
36
|
-
program.showCursor();
|
|
37
|
-
program.
|
|
38
|
-
(0, log_1.flushLogs)();
|
|
128
|
+
program.terminal.showCursor();
|
|
129
|
+
program.exitFullscreen();
|
|
39
130
|
setTimeout(() => {
|
|
40
131
|
process.exit(0);
|
|
41
132
|
}, 0);
|
|
@@ -45,76 +136,38 @@ class Screen {
|
|
|
45
136
|
* consumes all the available screen space) *or* an async function that creates the
|
|
46
137
|
* root node, and accepts a small amount of options.
|
|
47
138
|
*
|
|
48
|
-
* @return the Screen, the
|
|
139
|
+
* @return the Screen, the TerminalProgram that controls the terminal, and the root node
|
|
49
140
|
* instance.
|
|
50
141
|
*/
|
|
51
|
-
static async start(viewConstructor = new
|
|
142
|
+
static async start(viewConstructor = new Window(), opts) {
|
|
52
143
|
opts ??= {};
|
|
53
144
|
opts = {
|
|
54
145
|
quitChar: 'c',
|
|
55
146
|
...opts,
|
|
56
147
|
};
|
|
57
|
-
const program = (
|
|
58
|
-
|
|
59
|
-
tput: true,
|
|
60
|
-
});
|
|
61
|
-
program.alternateBuffer();
|
|
62
|
-
program.enableMouse();
|
|
63
|
-
program.hideCursor();
|
|
148
|
+
const program = new TerminalProgram();
|
|
149
|
+
program.enterFullscreen();
|
|
64
150
|
program.clear();
|
|
65
|
-
|
|
66
|
-
// weird quirk of blessed - bind anything to 'keypress' before
|
|
67
|
-
// attaching the screen or else I-don't-remember-what will happen.
|
|
68
|
-
const fn = function () { };
|
|
69
|
-
program.on('keypress', fn);
|
|
70
|
-
program.off('keypress', fn);
|
|
71
|
-
const rootView = viewConstructor instanceof View_1.View
|
|
151
|
+
const rootView = viewConstructor instanceof View
|
|
72
152
|
? viewConstructor
|
|
73
153
|
: await viewConstructor(program);
|
|
74
154
|
const screen = new Screen(program, rootView);
|
|
75
155
|
screen.onExit(() => {
|
|
76
156
|
program.clear();
|
|
77
|
-
program.
|
|
78
|
-
program.showCursor();
|
|
79
|
-
program.normalBuffer();
|
|
80
|
-
});
|
|
81
|
-
program.on('focus', function () {
|
|
82
|
-
screen.trigger({ type: 'focus' });
|
|
83
|
-
});
|
|
84
|
-
program.on('blur', function () {
|
|
85
|
-
screen.trigger({ type: 'blur' });
|
|
86
|
-
});
|
|
87
|
-
program.on('resize', function () {
|
|
88
|
-
screen.trigger({ type: 'resize' });
|
|
157
|
+
program.exitFullscreen();
|
|
89
158
|
});
|
|
90
159
|
if (opts.quitChar) {
|
|
91
160
|
program.key(`C-${opts.quitChar}`, () => {
|
|
92
161
|
screen.exit();
|
|
93
162
|
});
|
|
94
163
|
}
|
|
95
|
-
program.
|
|
96
|
-
screen.trigger({ type: 'key', ...key });
|
|
97
|
-
});
|
|
98
|
-
program.on('mouse', function (data) {
|
|
99
|
-
let action = data.action;
|
|
100
|
-
if (action === 'focus' || action === 'blur') {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
if (data.button === 'unknown') {
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
screen.trigger({
|
|
107
|
-
...data,
|
|
108
|
-
name: translateMouseAction(action),
|
|
109
|
-
type: 'mouse',
|
|
110
|
-
});
|
|
111
|
-
});
|
|
164
|
+
program.startInput(screen);
|
|
112
165
|
screen.start();
|
|
113
166
|
return [screen, program, rootView];
|
|
114
167
|
}
|
|
115
168
|
constructor(program, rootView) {
|
|
116
169
|
this.#program = program;
|
|
117
|
-
this.#buffer = new
|
|
170
|
+
this.#buffer = new Buffer();
|
|
118
171
|
this.rootView = rootView;
|
|
119
172
|
Object.defineProperty(this, 'program', {
|
|
120
173
|
enumerable: false,
|
|
@@ -134,7 +187,7 @@ class Screen {
|
|
|
134
187
|
}
|
|
135
188
|
/**
|
|
136
189
|
* Called from Screen.start(). Don't call this yourself unless you wanted
|
|
137
|
-
* to construct your own 'program'
|
|
190
|
+
* to construct your own 'program'. I recommend starting with a
|
|
138
191
|
* copy of the implementation of Screen.start.
|
|
139
192
|
*/
|
|
140
193
|
start() {
|
|
@@ -147,8 +200,8 @@ class Screen {
|
|
|
147
200
|
stop() {
|
|
148
201
|
this.#tickManager.stop();
|
|
149
202
|
this.rootView.moveToScreen(undefined);
|
|
203
|
+
this.#program.stopInput();
|
|
150
204
|
this.#onExit?.();
|
|
151
|
-
(0, log_1.flushLogs)();
|
|
152
205
|
}
|
|
153
206
|
/**
|
|
154
207
|
* Stops (putting the screen back in normal mode and buffer) and exits by emitting
|
|
@@ -217,7 +270,7 @@ class Screen {
|
|
|
217
270
|
this.#mouseManager.checkMouse(view, x, y);
|
|
218
271
|
}
|
|
219
272
|
triggerMouse(systemEvent) {
|
|
220
|
-
const system = new
|
|
273
|
+
const system = new UnboundSystem(this.#focusManager);
|
|
221
274
|
this.#mouseManager.trigger(systemEvent, system);
|
|
222
275
|
}
|
|
223
276
|
registerTick(view) {
|
|
@@ -234,7 +287,7 @@ class Screen {
|
|
|
234
287
|
* @return boolean Whether or not to rerender the view due to focus or mouse change
|
|
235
288
|
*/
|
|
236
289
|
commit() {
|
|
237
|
-
const system = new
|
|
290
|
+
const system = new UnboundSystem(this.#focusManager);
|
|
238
291
|
const focusNeedsRender = this.#focusManager.commit();
|
|
239
292
|
const mouseNeedsRender = this.#mouseManager.commit(system);
|
|
240
293
|
return focusNeedsRender || mouseNeedsRender;
|
|
@@ -243,12 +296,12 @@ class Screen {
|
|
|
243
296
|
this.#tickManager.needsRender();
|
|
244
297
|
}
|
|
245
298
|
render() {
|
|
246
|
-
const screenSize = new
|
|
299
|
+
const screenSize = new Size(this.#program.cols, this.#program.rows);
|
|
247
300
|
this.#buffer.resize(screenSize);
|
|
248
301
|
// this may be called again by renderModals, before the last modal renders
|
|
249
302
|
this.preRender(this.rootView);
|
|
250
303
|
const size = this.rootView.naturalSize(screenSize).max(screenSize);
|
|
251
|
-
const viewport = new
|
|
304
|
+
const viewport = new Viewport(this, this.#buffer, size);
|
|
252
305
|
this.rootView.render(viewport);
|
|
253
306
|
const rerenderView = this.#modalManager.renderModals(this, viewport);
|
|
254
307
|
const needsRerender = this.commit();
|
|
@@ -260,24 +313,8 @@ class Screen {
|
|
|
260
313
|
this.#buffer.flush(this.#program);
|
|
261
314
|
}
|
|
262
315
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
switch (action) {
|
|
266
|
-
case 'mousemove':
|
|
267
|
-
return 'mouse.move.in';
|
|
268
|
-
case 'mousedown':
|
|
269
|
-
return `mouse.button.down`;
|
|
270
|
-
case 'mouseup':
|
|
271
|
-
return `mouse.button.up`;
|
|
272
|
-
case 'wheeldown':
|
|
273
|
-
return 'mouse.wheel.down';
|
|
274
|
-
case 'wheelup':
|
|
275
|
-
return 'mouse.wheel.up';
|
|
276
|
-
case 'wheelleft':
|
|
277
|
-
return 'mouse.wheel.left';
|
|
278
|
-
case 'wheelright':
|
|
279
|
-
return 'mouse.wheel.right';
|
|
280
|
-
}
|
|
316
|
+
function matchKeyPattern(pattern, event) {
|
|
317
|
+
return event.full === pattern;
|
|
281
318
|
}
|
|
282
319
|
/**
|
|
283
320
|
* These are mostly due to my own terminal keybindings; would be better to have
|