@teaui/core 1.3.8 → 1.5.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 +41 -11
- package/.dist/Screen.js +149 -94
- 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 +5 -3
- package/.dist/Theme.js +14 -16
- package/.dist/Theme.js.map +1 -1
- package/.dist/UI.d.ts +1 -1
- package/.dist/UI.js +4 -6
- package/.dist/UI.js.map +1 -1
- package/.dist/View.d.ts +19 -8
- package/.dist/View.js +35 -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 +22 -24
- 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 +9 -7
- package/.dist/components/Drawer.js +43 -39
- 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 +6 -4
- package/.dist/components/HotKey.js +12 -11
- 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 +35 -41
- 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 +28 -27
- 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 +28 -27
- package/.dist/components/index.js +28 -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 +17 -11
- 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 +19 -0
- package/.dist/renderToAnsi.js +45 -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 +10 -33
- 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":"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"}
|
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,12 +1,42 @@
|
|
|
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;
|
|
39
|
+
emoji?: boolean;
|
|
10
40
|
}
|
|
11
41
|
export declare class Screen {
|
|
12
42
|
#private;
|
|
@@ -17,13 +47,13 @@ export declare class Screen {
|
|
|
17
47
|
* again.
|
|
18
48
|
*/
|
|
19
49
|
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:
|
|
50
|
+
static start(): Promise<[Screen, TerminalProgram, Window]>;
|
|
51
|
+
static start<T extends View>(viewConstructor: T | ViewConstructor<T>, opts?: Partial<ScreenOptions>): Promise<[Screen, TerminalProgram, T]>;
|
|
52
|
+
constructor(program: TerminalProgram, rootView: View);
|
|
23
53
|
onExit(callback: () => void): void;
|
|
24
54
|
/**
|
|
25
55
|
* Called from Screen.start(). Don't call this yourself unless you wanted
|
|
26
|
-
* to construct your own 'program'
|
|
56
|
+
* to construct your own 'program'. I recommend starting with a
|
|
27
57
|
* copy of the implementation of Screen.start.
|
|
28
58
|
*/
|
|
29
59
|
start(): void;
|
package/.dist/Screen.js
CHANGED
|
@@ -1,39 +1,133 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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 { Theme } from './Theme.js';
|
|
13
|
+
import { UnboundSystem } from './System.js';
|
|
14
|
+
/**
|
|
15
|
+
* Wraps @teaui/term's Terminal for use by Screen and the public API.
|
|
16
|
+
* Provides a blessed-compatible `.key()` helper and implements SGRTerminal.
|
|
17
|
+
*/
|
|
18
|
+
export class TerminalProgram {
|
|
19
|
+
#terminal;
|
|
20
|
+
#keyListeners = [];
|
|
21
|
+
#cleanupInput;
|
|
22
|
+
constructor() {
|
|
23
|
+
this.#terminal = new TermTerminal();
|
|
24
|
+
this.#terminal.enableWriteBuffer();
|
|
25
|
+
}
|
|
26
|
+
get terminal() {
|
|
27
|
+
return this.#terminal;
|
|
28
|
+
}
|
|
29
|
+
// --- SGRTerminal interface ---
|
|
30
|
+
get cols() {
|
|
31
|
+
return this.#terminal.cols;
|
|
32
|
+
}
|
|
33
|
+
get rows() {
|
|
34
|
+
return this.#terminal.rows;
|
|
35
|
+
}
|
|
36
|
+
move(x, y) {
|
|
37
|
+
this.#terminal.write(cursorTo(x, y));
|
|
38
|
+
}
|
|
39
|
+
write(str) {
|
|
40
|
+
this.#terminal.write(str);
|
|
41
|
+
}
|
|
42
|
+
flush() {
|
|
43
|
+
this.#terminal.flushWrites();
|
|
44
|
+
}
|
|
45
|
+
// --- Lifecycle ---
|
|
46
|
+
enterFullscreen() {
|
|
47
|
+
this.#terminal.enterFullscreen({
|
|
48
|
+
mouse: true,
|
|
49
|
+
hideCursor: true,
|
|
50
|
+
focusEvents: true,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
exitFullscreen() {
|
|
54
|
+
this.#terminal.exitFullscreen();
|
|
55
|
+
}
|
|
56
|
+
clear() {
|
|
57
|
+
this.#terminal.clear();
|
|
58
|
+
}
|
|
59
|
+
// --- Input ---
|
|
60
|
+
startInput(screen) {
|
|
61
|
+
this.#cleanupInput = this.#terminal.onInput((event) => {
|
|
62
|
+
if (isFocusEvent(event)) {
|
|
63
|
+
screen.trigger({ type: event.focused ? 'focus' : 'blur' });
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (isKeyEvent(event)) {
|
|
67
|
+
const keyEvent = translateTermKeyEvent(event);
|
|
68
|
+
// Check .key() listeners
|
|
69
|
+
for (const { pattern, fn } of this.#keyListeners) {
|
|
70
|
+
if (matchKeyPattern(pattern, keyEvent)) {
|
|
71
|
+
fn(keyEvent.char, keyEvent);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
screen.trigger(keyEvent);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (isMouseEvent(event)) {
|
|
78
|
+
const mouseEvent = translateTermMouseEvent(event);
|
|
79
|
+
if (mouseEvent) {
|
|
80
|
+
screen.trigger(mouseEvent);
|
|
81
|
+
}
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
this.#terminal.onResize(() => {
|
|
86
|
+
screen.trigger({ type: 'resize' });
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
stopInput() {
|
|
90
|
+
this.#cleanupInput?.();
|
|
91
|
+
this.#cleanupInput = undefined;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Register a key binding (blessed-compatible).
|
|
95
|
+
* Pattern: 'escape', 'C-c', 'C-q', 'return', etc.
|
|
96
|
+
*/
|
|
97
|
+
key(pattern, fn) {
|
|
98
|
+
const patterns = Array.isArray(pattern) ? pattern : [pattern];
|
|
99
|
+
for (const p of patterns) {
|
|
100
|
+
this.#keyListeners.push({ pattern: p, fn });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Provide raw data listener (for iTerm2 etc.)
|
|
105
|
+
*/
|
|
106
|
+
once(event, fn) {
|
|
107
|
+
if (event === 'data') {
|
|
108
|
+
this.#terminal.onceRawData(fn);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export class Screen {
|
|
16
113
|
#program;
|
|
17
114
|
#onExit;
|
|
18
115
|
rootView;
|
|
19
116
|
#buffer;
|
|
20
|
-
#focusManager = new
|
|
21
|
-
#modalManager = new
|
|
22
|
-
#mouseManager = new
|
|
23
|
-
#tickManager = new
|
|
117
|
+
#focusManager = new FocusManager();
|
|
118
|
+
#modalManager = new ModalManager();
|
|
119
|
+
#mouseManager = new MouseManager();
|
|
120
|
+
#tickManager = new TickManager(() => this.render());
|
|
24
121
|
/**
|
|
25
122
|
* A helper function that puts the terminal into a "known good" state. I use this
|
|
26
123
|
* during debugging, if the app crashes and I need to get the terminal CLI working
|
|
27
124
|
* again.
|
|
28
125
|
*/
|
|
29
126
|
static reset() {
|
|
30
|
-
const program = (
|
|
31
|
-
useBuffer: true,
|
|
32
|
-
tput: true,
|
|
33
|
-
});
|
|
127
|
+
const program = new TerminalProgram();
|
|
34
128
|
program.clear();
|
|
35
|
-
program.showCursor();
|
|
36
|
-
program.
|
|
129
|
+
program.terminal.showCursor();
|
|
130
|
+
program.exitFullscreen();
|
|
37
131
|
setTimeout(() => {
|
|
38
132
|
process.exit(0);
|
|
39
133
|
}, 0);
|
|
@@ -43,76 +137,52 @@ class Screen {
|
|
|
43
137
|
* consumes all the available screen space) *or* an async function that creates the
|
|
44
138
|
* root node, and accepts a small amount of options.
|
|
45
139
|
*
|
|
46
|
-
* @return the Screen, the
|
|
140
|
+
* @return the Screen, the TerminalProgram that controls the terminal, and the root node
|
|
47
141
|
* instance.
|
|
48
142
|
*/
|
|
49
|
-
static async start(viewConstructor = new
|
|
143
|
+
static async start(viewConstructor = new Window(), opts) {
|
|
50
144
|
opts ??= {};
|
|
51
145
|
opts = {
|
|
52
146
|
quitChar: 'c',
|
|
53
147
|
...opts,
|
|
54
148
|
};
|
|
55
|
-
const program = (
|
|
56
|
-
|
|
57
|
-
tput: true,
|
|
58
|
-
});
|
|
59
|
-
program.alternateBuffer();
|
|
60
|
-
program.enableMouse();
|
|
61
|
-
program.hideCursor();
|
|
149
|
+
const program = new TerminalProgram();
|
|
150
|
+
program.enterFullscreen();
|
|
62
151
|
program.clear();
|
|
63
|
-
|
|
64
|
-
// weird quirk of blessed - bind anything to 'keypress' before
|
|
65
|
-
// attaching the screen or else I-don't-remember-what will happen.
|
|
66
|
-
const fn = function () { };
|
|
67
|
-
program.on('keypress', fn);
|
|
68
|
-
program.off('keypress', fn);
|
|
69
|
-
const rootView = viewConstructor instanceof View_1.View
|
|
152
|
+
const rootView = viewConstructor instanceof View
|
|
70
153
|
? viewConstructor
|
|
71
154
|
: await viewConstructor(program);
|
|
155
|
+
if (opts.emoji !== undefined) {
|
|
156
|
+
const currentTheme = rootView.theme;
|
|
157
|
+
rootView.theme = new Theme({
|
|
158
|
+
text: currentTheme.textColor,
|
|
159
|
+
brightText: currentTheme.brightTextColor,
|
|
160
|
+
dimText: currentTheme.dimTextColor,
|
|
161
|
+
dimBackground: currentTheme.dimBackgroundColor,
|
|
162
|
+
background: currentTheme.backgroundColor,
|
|
163
|
+
textBackground: currentTheme.textBackgroundColor,
|
|
164
|
+
highlight: currentTheme.highlightColor,
|
|
165
|
+
darken: currentTheme.darkenColor,
|
|
166
|
+
emoji: opts.emoji,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
72
169
|
const screen = new Screen(program, rootView);
|
|
73
170
|
screen.onExit(() => {
|
|
74
171
|
program.clear();
|
|
75
|
-
program.
|
|
76
|
-
program.showCursor();
|
|
77
|
-
program.normalBuffer();
|
|
78
|
-
});
|
|
79
|
-
program.on('focus', function () {
|
|
80
|
-
screen.trigger({ type: 'focus' });
|
|
81
|
-
});
|
|
82
|
-
program.on('blur', function () {
|
|
83
|
-
screen.trigger({ type: 'blur' });
|
|
84
|
-
});
|
|
85
|
-
program.on('resize', function () {
|
|
86
|
-
screen.trigger({ type: 'resize' });
|
|
172
|
+
program.exitFullscreen();
|
|
87
173
|
});
|
|
88
174
|
if (opts.quitChar) {
|
|
89
175
|
program.key(`C-${opts.quitChar}`, () => {
|
|
90
176
|
screen.exit();
|
|
91
177
|
});
|
|
92
178
|
}
|
|
93
|
-
program.
|
|
94
|
-
screen.trigger({ type: 'key', ...key });
|
|
95
|
-
});
|
|
96
|
-
program.on('mouse', function (data) {
|
|
97
|
-
let action = data.action;
|
|
98
|
-
if (action === 'focus' || action === 'blur') {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
if (data.button === 'unknown') {
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
screen.trigger({
|
|
105
|
-
...data,
|
|
106
|
-
name: translateMouseAction(action),
|
|
107
|
-
type: 'mouse',
|
|
108
|
-
});
|
|
109
|
-
});
|
|
179
|
+
program.startInput(screen);
|
|
110
180
|
screen.start();
|
|
111
181
|
return [screen, program, rootView];
|
|
112
182
|
}
|
|
113
183
|
constructor(program, rootView) {
|
|
114
184
|
this.#program = program;
|
|
115
|
-
this.#buffer = new
|
|
185
|
+
this.#buffer = new Buffer();
|
|
116
186
|
this.rootView = rootView;
|
|
117
187
|
Object.defineProperty(this, 'program', {
|
|
118
188
|
enumerable: false,
|
|
@@ -132,7 +202,7 @@ class Screen {
|
|
|
132
202
|
}
|
|
133
203
|
/**
|
|
134
204
|
* Called from Screen.start(). Don't call this yourself unless you wanted
|
|
135
|
-
* to construct your own 'program'
|
|
205
|
+
* to construct your own 'program'. I recommend starting with a
|
|
136
206
|
* copy of the implementation of Screen.start.
|
|
137
207
|
*/
|
|
138
208
|
start() {
|
|
@@ -145,6 +215,7 @@ class Screen {
|
|
|
145
215
|
stop() {
|
|
146
216
|
this.#tickManager.stop();
|
|
147
217
|
this.rootView.moveToScreen(undefined);
|
|
218
|
+
this.#program.stopInput();
|
|
148
219
|
this.#onExit?.();
|
|
149
220
|
}
|
|
150
221
|
/**
|
|
@@ -214,7 +285,7 @@ class Screen {
|
|
|
214
285
|
this.#mouseManager.checkMouse(view, x, y);
|
|
215
286
|
}
|
|
216
287
|
triggerMouse(systemEvent) {
|
|
217
|
-
const system = new
|
|
288
|
+
const system = new UnboundSystem(this.#focusManager);
|
|
218
289
|
this.#mouseManager.trigger(systemEvent, system);
|
|
219
290
|
}
|
|
220
291
|
registerTick(view) {
|
|
@@ -231,7 +302,7 @@ class Screen {
|
|
|
231
302
|
* @return boolean Whether or not to rerender the view due to focus or mouse change
|
|
232
303
|
*/
|
|
233
304
|
commit() {
|
|
234
|
-
const system = new
|
|
305
|
+
const system = new UnboundSystem(this.#focusManager);
|
|
235
306
|
const focusNeedsRender = this.#focusManager.commit();
|
|
236
307
|
const mouseNeedsRender = this.#mouseManager.commit(system);
|
|
237
308
|
return focusNeedsRender || mouseNeedsRender;
|
|
@@ -240,12 +311,12 @@ class Screen {
|
|
|
240
311
|
this.#tickManager.needsRender();
|
|
241
312
|
}
|
|
242
313
|
render() {
|
|
243
|
-
const screenSize = new
|
|
314
|
+
const screenSize = new Size(this.#program.cols, this.#program.rows);
|
|
244
315
|
this.#buffer.resize(screenSize);
|
|
245
316
|
// this may be called again by renderModals, before the last modal renders
|
|
246
317
|
this.preRender(this.rootView);
|
|
247
318
|
const size = this.rootView.naturalSize(screenSize).max(screenSize);
|
|
248
|
-
const viewport = new
|
|
319
|
+
const viewport = new Viewport(this, this.#buffer, size);
|
|
249
320
|
this.rootView.render(viewport);
|
|
250
321
|
const rerenderView = this.#modalManager.renderModals(this, viewport);
|
|
251
322
|
const needsRerender = this.commit();
|
|
@@ -257,24 +328,8 @@ class Screen {
|
|
|
257
328
|
this.#buffer.flush(this.#program);
|
|
258
329
|
}
|
|
259
330
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
switch (action) {
|
|
263
|
-
case 'mousemove':
|
|
264
|
-
return 'mouse.move.in';
|
|
265
|
-
case 'mousedown':
|
|
266
|
-
return `mouse.button.down`;
|
|
267
|
-
case 'mouseup':
|
|
268
|
-
return `mouse.button.up`;
|
|
269
|
-
case 'wheeldown':
|
|
270
|
-
return 'mouse.wheel.down';
|
|
271
|
-
case 'wheelup':
|
|
272
|
-
return 'mouse.wheel.up';
|
|
273
|
-
case 'wheelleft':
|
|
274
|
-
return 'mouse.wheel.left';
|
|
275
|
-
case 'wheelright':
|
|
276
|
-
return 'mouse.wheel.right';
|
|
277
|
-
}
|
|
331
|
+
function matchKeyPattern(pattern, event) {
|
|
332
|
+
return event.full === pattern;
|
|
278
333
|
}
|
|
279
334
|
/**
|
|
280
335
|
* These are mostly due to my own terminal keybindings; would be better to have
|