@elaraai/e3-ui-cli 1.0.73 → 1.0.74
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/bin/e3-ui.mjs +6 -0
- package/dist/commands/tui.d.ts.map +1 -1
- package/dist/commands/tui.js +4 -1
- package/dist/commands/tui.js.map +1 -1
- package/dist/tui/app.d.ts.map +1 -1
- package/dist/tui/app.js +3 -0
- package/dist/tui/app.js.map +1 -1
- package/dist/tui/controller.d.ts.map +1 -1
- package/dist/tui/controller.js +27 -3
- package/dist/tui/controller.js.map +1 -1
- package/dist/tui/model/tree.d.ts +16 -2
- package/dist/tui/model/tree.d.ts.map +1 -1
- package/dist/tui/model/tree.js +72 -33
- package/dist/tui/model/tree.js.map +1 -1
- package/dist/tui/render/text.d.ts +7 -3
- package/dist/tui/render/text.d.ts.map +1 -1
- package/dist/tui/render/text.js +64 -32
- package/dist/tui/render/text.js.map +1 -1
- package/dist/tui/ui/App.d.ts +6 -3
- package/dist/tui/ui/App.d.ts.map +1 -1
- package/dist/tui/ui/App.js +16 -3
- package/dist/tui/ui/App.js.map +1 -1
- package/dist/tui/ui/shell/widgets.d.ts +41 -0
- package/dist/tui/ui/shell/widgets.d.ts.map +1 -1
- package/dist/tui/ui/shell/widgets.js +63 -40
- package/dist/tui/ui/shell/widgets.js.map +1 -1
- package/dist/tui/ui/views/dashboard.d.ts +79 -24
- package/dist/tui/ui/views/dashboard.d.ts.map +1 -1
- package/dist/tui/ui/views/dashboard.js +221 -169
- package/dist/tui/ui/views/dashboard.js.map +1 -1
- package/package.json +14 -14
package/dist/tui/render/text.js
CHANGED
|
@@ -16,6 +16,13 @@
|
|
|
16
16
|
*/
|
|
17
17
|
export { formatSize } from '@elaraai/e3-cli/internal';
|
|
18
18
|
const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
|
|
19
|
+
/**
|
|
20
|
+
* Printable ASCII only — every character is one cell, so the width is the
|
|
21
|
+
* length and a cut is a `slice`. Almost every cell the TUI measures is
|
|
22
|
+
* ASCII (names, paths, numbers, hashes); the segmenter is kept for the
|
|
23
|
+
* rest (wide, combining, ZWJ sequences, controls).
|
|
24
|
+
*/
|
|
25
|
+
const ASCII = /^[\x20-\x7e]*$/;
|
|
19
26
|
/** Whether a code point renders two cells wide (East Asian Wide / Fullwidth, emoji presentation). */
|
|
20
27
|
function isWide(cp) {
|
|
21
28
|
return ((cp >= 0x1100 && cp <= 0x115f) ||
|
|
@@ -42,6 +49,13 @@ function isZeroWidth(cp) {
|
|
|
42
49
|
(cp >= 0xfe00 && cp <= 0xfe0f) ||
|
|
43
50
|
cp === 0xfeff);
|
|
44
51
|
}
|
|
52
|
+
/** The cells one grapheme cluster takes: its first code point decides. */
|
|
53
|
+
function graphemeWidth(segment) {
|
|
54
|
+
const cp = segment.codePointAt(0);
|
|
55
|
+
if (cp === undefined || isZeroWidth(cp))
|
|
56
|
+
return 0;
|
|
57
|
+
return isWide(cp) ? 2 : 1;
|
|
58
|
+
}
|
|
45
59
|
/**
|
|
46
60
|
* The number of terminal cells `text` occupies.
|
|
47
61
|
*
|
|
@@ -49,17 +63,16 @@ function isZeroWidth(cp) {
|
|
|
49
63
|
* @returns Its cell width
|
|
50
64
|
*/
|
|
51
65
|
export function displayWidth(text) {
|
|
66
|
+
if (ASCII.test(text))
|
|
67
|
+
return text.length;
|
|
52
68
|
let width = 0;
|
|
53
|
-
for (const { segment } of segmenter.segment(text))
|
|
54
|
-
|
|
55
|
-
if (cp === undefined || isZeroWidth(cp))
|
|
56
|
-
continue;
|
|
57
|
-
width += isWide(cp) ? 2 : 1;
|
|
58
|
-
}
|
|
69
|
+
for (const { segment } of segmenter.segment(text))
|
|
70
|
+
width += graphemeWidth(segment);
|
|
59
71
|
return width;
|
|
60
72
|
}
|
|
61
73
|
/**
|
|
62
|
-
* Truncates `text` to at most `width` cells, ending in `ellipsis` when cut
|
|
74
|
+
* Truncates `text` to at most `width` cells, ending in `ellipsis` when cut —
|
|
75
|
+
* one pass over the graphemes (one `length` check for ASCII).
|
|
63
76
|
*
|
|
64
77
|
* @param text - The text
|
|
65
78
|
* @param width - The cell budget
|
|
@@ -69,22 +82,28 @@ export function displayWidth(text) {
|
|
|
69
82
|
export function truncate(text, width, ellipsis = '…') {
|
|
70
83
|
if (width <= 0)
|
|
71
84
|
return '';
|
|
72
|
-
if (
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
85
|
+
if (ASCII.test(text)) {
|
|
86
|
+
if (text.length <= width)
|
|
87
|
+
return text;
|
|
88
|
+
const budget = width - displayWidth(ellipsis);
|
|
89
|
+
return budget <= 0 ? ellipsis.slice(0, width) : text.slice(0, budget) + ellipsis;
|
|
90
|
+
}
|
|
91
|
+
const budget = width - displayWidth(ellipsis);
|
|
78
92
|
let out = '';
|
|
79
93
|
let used = 0;
|
|
94
|
+
// The prefix within the budget is remembered as the walk passes it, so a
|
|
95
|
+
// cut needs no second measurement.
|
|
96
|
+
let kept = null;
|
|
80
97
|
for (const { segment } of segmenter.segment(text)) {
|
|
81
|
-
const w =
|
|
82
|
-
if (used + w > budget)
|
|
83
|
-
|
|
98
|
+
const w = graphemeWidth(segment);
|
|
99
|
+
if (kept === null && used + w > budget)
|
|
100
|
+
kept = out;
|
|
101
|
+
if (used + w > width)
|
|
102
|
+
return budget <= 0 ? ellipsis.slice(0, width) : `${kept ?? out}${ellipsis}`;
|
|
84
103
|
out += segment;
|
|
85
104
|
used += w;
|
|
86
105
|
}
|
|
87
|
-
return
|
|
106
|
+
return text;
|
|
88
107
|
}
|
|
89
108
|
/**
|
|
90
109
|
* Pads `text` on the right to exactly `width` cells, truncating when longer.
|
|
@@ -94,10 +113,14 @@ export function truncate(text, width, ellipsis = '…') {
|
|
|
94
113
|
* @returns The fitted text
|
|
95
114
|
*/
|
|
96
115
|
export function padEnd(text, width) {
|
|
116
|
+
if (ASCII.test(text))
|
|
117
|
+
return text.length > width ? text.slice(0, Math.max(0, width)) : text + ' '.repeat(width - text.length);
|
|
97
118
|
const w = displayWidth(text);
|
|
98
|
-
if (w
|
|
99
|
-
return
|
|
100
|
-
|
|
119
|
+
if (w <= width)
|
|
120
|
+
return text + ' '.repeat(width - w);
|
|
121
|
+
// A wide cluster that straddles the cut is dropped; the cell it leaves is padded.
|
|
122
|
+
const cut = truncate(text, width, '');
|
|
123
|
+
return cut + ' '.repeat(Math.max(0, width - displayWidth(cut)));
|
|
101
124
|
}
|
|
102
125
|
/**
|
|
103
126
|
* Pads `text` on the left to exactly `width` cells, truncating when longer.
|
|
@@ -107,10 +130,13 @@ export function padEnd(text, width) {
|
|
|
107
130
|
* @returns The fitted text
|
|
108
131
|
*/
|
|
109
132
|
export function padStart(text, width) {
|
|
133
|
+
if (ASCII.test(text))
|
|
134
|
+
return text.length > width ? text.slice(0, Math.max(0, width)) : ' '.repeat(width - text.length) + text;
|
|
110
135
|
const w = displayWidth(text);
|
|
111
|
-
if (w
|
|
112
|
-
return
|
|
113
|
-
|
|
136
|
+
if (w <= width)
|
|
137
|
+
return ' '.repeat(width - w) + text;
|
|
138
|
+
const cut = truncate(text, width, '');
|
|
139
|
+
return ' '.repeat(Math.max(0, width - displayWidth(cut))) + cut;
|
|
114
140
|
}
|
|
115
141
|
/**
|
|
116
142
|
* Centres `text` in `width` cells (the extra cell of an odd remainder goes
|
|
@@ -121,11 +147,12 @@ export function padStart(text, width) {
|
|
|
121
147
|
* @returns The centred, fitted text
|
|
122
148
|
*/
|
|
123
149
|
export function center(text, width) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
150
|
+
if (width <= 0)
|
|
151
|
+
return '';
|
|
152
|
+
const fitted = displayWidth(text) > width ? truncate(text, width, '') : text;
|
|
153
|
+
const w = displayWidth(fitted);
|
|
127
154
|
const left = Math.floor((width - w) / 2);
|
|
128
|
-
return ' '.repeat(left) +
|
|
155
|
+
return ' '.repeat(left) + fitted + ' '.repeat(width - w - left);
|
|
129
156
|
}
|
|
130
157
|
/**
|
|
131
158
|
* Fits `text` to exactly `width` cells — padded on the right, or truncated
|
|
@@ -216,17 +243,22 @@ export function timeAgo(then, now) {
|
|
|
216
243
|
return `${Math.floor(hours / 24)}d ago`;
|
|
217
244
|
}
|
|
218
245
|
/**
|
|
219
|
-
* How long ago `then` was,
|
|
220
|
-
* `
|
|
246
|
+
* How long ago `then` was, at whole seconds rounded down (`just now`,
|
|
247
|
+
* `7s ago`, `12s ago`, `2m ago`) — the "polled … ago" hint. Rounding down
|
|
248
|
+
* keeps the text stable between the clock's ticks: a poll that landed
|
|
249
|
+
* within the second reads `just now` at every render until the second
|
|
250
|
+
* turns, so an idle frame stays byte-identical and Ink writes nothing.
|
|
221
251
|
*
|
|
222
252
|
* @param then - The instant in epoch milliseconds
|
|
223
253
|
* @param now - The current epoch milliseconds
|
|
224
254
|
* @returns The relative text
|
|
225
255
|
*/
|
|
226
256
|
export function agoShort(then, now) {
|
|
227
|
-
const seconds = Math.max(0, (now - then) / 1000);
|
|
228
|
-
if (seconds <
|
|
229
|
-
return
|
|
257
|
+
const seconds = Math.max(0, Math.floor((now - then) / 1000));
|
|
258
|
+
if (seconds < 1)
|
|
259
|
+
return 'just now';
|
|
260
|
+
if (seconds < 60)
|
|
261
|
+
return `${seconds}s ago`;
|
|
230
262
|
return timeAgo(then, now);
|
|
231
263
|
}
|
|
232
264
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/tui/render/text.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AAE7E,qGAAqG;AACrG,SAAS,MAAM,CAAC,EAAU;IACtB,OAAO,CACH,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,CAAC;QAChC,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,CAAC;QAChC,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,CAAC,CACnC,CAAC;AACN,CAAC;AAED,mGAAmG;AACnG,SAAS,WAAW,CAAC,EAAU;IAC3B,OAAO,CACH,EAAE,GAAG,IAAI;QACT,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC;QACzB,CAAC,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,CAAC;QAC5B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,EAAE,KAAK,MAAM,CAChB,CAAC;AACN,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/tui/render/text.ts"],"names":[],"mappings":"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"}
|
package/dist/tui/ui/App.d.ts
CHANGED
|
@@ -5,8 +5,11 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* The Ink root — one column of exactly `rows` lines, each exactly
|
|
7
7
|
* `columns` cells, rendered from the store through the view router and the
|
|
8
|
-
* shell chrome. Keys go to the controller; the terminal size
|
|
9
|
-
*
|
|
8
|
+
* shell chrome. Keys go to the controller; the terminal size, the spinner
|
|
9
|
+
* and a one-second clock drive re-renders. The clock is state, not a
|
|
10
|
+
* `Date.now()` sampled while rendering: two frames between ticks see the
|
|
11
|
+
* same `now`, so an idle frame comes out byte-identical and Ink writes
|
|
12
|
+
* nothing.
|
|
10
13
|
*
|
|
11
14
|
* @packageDocumentation
|
|
12
15
|
*/
|
|
@@ -28,7 +31,7 @@ export interface AppProps {
|
|
|
28
31
|
facts: () => RepoFacts | null;
|
|
29
32
|
/** Overrides the terminal size (frame specs). */
|
|
30
33
|
size?: Size | undefined;
|
|
31
|
-
/** The clock (frame specs). */
|
|
34
|
+
/** The clock the one-second tick samples (frame specs; default `Date.now`). */
|
|
32
35
|
now?: (() => number) | undefined;
|
|
33
36
|
}
|
|
34
37
|
/**
|
package/dist/tui/ui/App.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/tui/ui/App.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/tui/ui/App.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EAAgC,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAGxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAA2B,KAAK,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAO3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAW,KAAK,SAAS,EAA6B,MAAM,YAAY,CAAC;AAEhF,uBAAuB;AACvB,MAAM,WAAW,QAAQ;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,SAAS,GAAG,IAAI,CAAC;IAC9B,iDAAiD;IACjD,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACxB,+EAA+E;IAC/E,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;CACpC;AAiCD;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,YAAY,CAgEjD"}
|
package/dist/tui/ui/App.js
CHANGED
|
@@ -6,8 +6,11 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
6
6
|
/**
|
|
7
7
|
* The Ink root — one column of exactly `rows` lines, each exactly
|
|
8
8
|
* `columns` cells, rendered from the store through the view router and the
|
|
9
|
-
* shell chrome. Keys go to the controller; the terminal size
|
|
10
|
-
*
|
|
9
|
+
* shell chrome. Keys go to the controller; the terminal size, the spinner
|
|
10
|
+
* and a one-second clock drive re-renders. The clock is state, not a
|
|
11
|
+
* `Date.now()` sampled while rendering: two frames between ticks see the
|
|
12
|
+
* same `now`, so an idle frame comes out byte-identical and Ink writes
|
|
13
|
+
* nothing.
|
|
11
14
|
*
|
|
12
15
|
* @packageDocumentation
|
|
13
16
|
*/
|
|
@@ -22,6 +25,8 @@ import { completionHits, headerHits, renderFrame } from './shell/chrome.js';
|
|
|
22
25
|
import { setLastFrame } from './frame.js';
|
|
23
26
|
import { renderView } from './views/index.js';
|
|
24
27
|
import { fitLine } from './lines.js';
|
|
28
|
+
/** How often the frame's clock advances. */
|
|
29
|
+
const CLOCK_TICK_MS = 1_000;
|
|
25
30
|
/** One rendered row. */
|
|
26
31
|
function Row({ line, theme }) {
|
|
27
32
|
return (_jsx(Text, { wrap: "truncate-end", children: line.map((span, i) => (_jsx(Text, { color: toneColor(theme, span.tone ?? 'plain'), bold: span.bold === true, dimColor: span.dim === true, inverse: span.inverse === true, children: span.text }, i))) }));
|
|
@@ -59,6 +64,15 @@ export function App(props) {
|
|
|
59
64
|
const timer = setInterval(() => setSpinner(s => s + 1), 120);
|
|
60
65
|
return () => clearInterval(timer);
|
|
61
66
|
}, [spinning]);
|
|
67
|
+
// The frame's clock: sampled once a second (ages read in whole seconds),
|
|
68
|
+
// never during a render. A fixed clock (the specs) sets the same value
|
|
69
|
+
// and React skips the render.
|
|
70
|
+
const sample = props.now ?? Date.now;
|
|
71
|
+
const [now, setNow] = useState(() => sample());
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
const timer = setInterval(() => setNow(sample()), CLOCK_TICK_MS);
|
|
74
|
+
return () => clearInterval(timer);
|
|
75
|
+
}, [sample]);
|
|
62
76
|
useInput((input, key) => {
|
|
63
77
|
controller.onKey(input, key);
|
|
64
78
|
});
|
|
@@ -70,7 +84,6 @@ export function App(props) {
|
|
|
70
84
|
registerSuspend((fn) => suspendTerminal(fn));
|
|
71
85
|
return () => registerSuspend(null);
|
|
72
86
|
}, [suspendTerminal]);
|
|
73
|
-
const now = props.now !== undefined ? props.now() : Date.now();
|
|
74
87
|
const lines = useMemo(() => {
|
|
75
88
|
const bp = breakpoint(size);
|
|
76
89
|
if (bp === 'refuse') {
|
package/dist/tui/ui/App.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../../src/tui/ui/App.tsx"],"names":[],"mappings":";AAAA;;;GAGG;AAEH
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../../src/tui/ui/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,47 @@ export interface TableRow {
|
|
|
35
35
|
/** A marker in the gutter instead of the selection bar (`┆` for a changed row). */
|
|
36
36
|
marker?: string | undefined;
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Fits a column plan to a table's rows: a `grow` column first widens to
|
|
40
|
+
* its longest cell (plus the gap, up to its cap), then the plan is fitted
|
|
41
|
+
* to the width ({@link fitPlan}). The one pass over every row — the
|
|
42
|
+
* dashboard computes it once per data change and keeps it.
|
|
43
|
+
*
|
|
44
|
+
* @param plan - The column plan (the last column takes the remainder)
|
|
45
|
+
* @param rows - Every row
|
|
46
|
+
* @param width - The row width
|
|
47
|
+
* @returns The fitted plan
|
|
48
|
+
*/
|
|
49
|
+
export declare function tablePlan(plan: ColumnSpec[], rows: readonly TableRow[], width: number): ColumnSpec[];
|
|
50
|
+
/**
|
|
51
|
+
* One line of a table: the header (`row` null) or a row, with the
|
|
52
|
+
* selection bar (`▌`) when selected. Cells are looked up by column key, so
|
|
53
|
+
* a plan that drops a column at a narrow width leaves the others aligned;
|
|
54
|
+
* a fixed cell that overflows ends in an ellipsis and keeps one cell of gap.
|
|
55
|
+
*
|
|
56
|
+
* @param fitted - The fitted plan ({@link tablePlan})
|
|
57
|
+
* @param row - The row, or null for the header
|
|
58
|
+
* @param selected - Whether the row is selected
|
|
59
|
+
* @param width - The row width
|
|
60
|
+
* @param g - The glyph set
|
|
61
|
+
* @returns The line
|
|
62
|
+
*/
|
|
63
|
+
export declare function tableLine(fitted: readonly ColumnSpec[], row: TableRow | null, selected: boolean, width: number, g: Glyphs): Line;
|
|
64
|
+
/**
|
|
65
|
+
* A table: a header row, then the rows in `[top, top + visible)` with a
|
|
66
|
+
* selection bar (`▌`) on `sel` — {@link tablePlan} then {@link tableLine}
|
|
67
|
+
* per row.
|
|
68
|
+
*
|
|
69
|
+
* @param plan - The column plan (the last column takes the remainder)
|
|
70
|
+
* @param rows - Every row
|
|
71
|
+
* @param sel - The selected row (or −1)
|
|
72
|
+
* @param top - The first visible row
|
|
73
|
+
* @param visible - Visible rows
|
|
74
|
+
* @param width - The row width
|
|
75
|
+
* @param g - The glyph set
|
|
76
|
+
* @param header - Whether to draw the header row
|
|
77
|
+
* @returns The lines
|
|
78
|
+
*/
|
|
38
79
|
export declare function renderTable(plan: ColumnSpec[], rows: TableRow[], sel: number, top: number, visible: number, width: number, g: Glyphs, header?: boolean): Line[];
|
|
39
80
|
/** A section title line: ` TITLE` with `right` flush right. */
|
|
40
81
|
export declare function sectionLine(title: string, right: string, width: number): Line;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widgets.d.ts","sourceRoot":"","sources":["../../../../src/tui/ui/shell/widgets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AAEH,OAAO,EAA2C,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAElG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAA4B,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAElE;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CAS1H;AAED,4EAA4E;AAC5E,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;IACtF,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;
|
|
1
|
+
{"version":3,"file":"widgets.d.ts","sourceRoot":"","sources":["../../../../src/tui/ui/shell/widgets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AAEH,OAAO,EAA2C,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAElG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAA4B,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAElE;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CAS1H;AAED,4EAA4E;AAC5E,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;IACtF,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAOpG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAiBhI;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,IAAI,EAAE,CAM5J;AAED,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAE7E;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,CAS5G;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,CASjH;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAQtF"}
|
|
@@ -35,13 +35,67 @@ export function withScrollbar(lines, width, total, visible, top, g) {
|
|
|
35
35
|
return [...fitLine(line, width - 1), b(ch, tone)];
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
|
+
function cellText(cell) {
|
|
39
|
+
return cell === undefined ? '' : typeof cell === 'string' ? cell : cell.text;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Fits a column plan to a table's rows: a `grow` column first widens to
|
|
43
|
+
* its longest cell (plus the gap, up to its cap), then the plan is fitted
|
|
44
|
+
* to the width ({@link fitPlan}). The one pass over every row — the
|
|
45
|
+
* dashboard computes it once per data change and keeps it.
|
|
46
|
+
*
|
|
47
|
+
* @param plan - The column plan (the last column takes the remainder)
|
|
48
|
+
* @param rows - Every row
|
|
49
|
+
* @param width - The row width
|
|
50
|
+
* @returns The fitted plan
|
|
51
|
+
*/
|
|
52
|
+
export function tablePlan(plan, rows, width) {
|
|
53
|
+
const grown = plan.map(col => {
|
|
54
|
+
if (col.grow === undefined)
|
|
55
|
+
return col;
|
|
56
|
+
const longest = rows.reduce((n, row) => Math.max(n, displayWidth(cellText(row.cells[col.key]))), displayWidth(col.title));
|
|
57
|
+
return { ...col, width: Math.min(col.grow, Math.max(col.width, longest + 1)) };
|
|
58
|
+
});
|
|
59
|
+
return fitPlan(grown, width);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* One line of a table: the header (`row` null) or a row, with the
|
|
63
|
+
* selection bar (`▌`) when selected. Cells are looked up by column key, so
|
|
64
|
+
* a plan that drops a column at a narrow width leaves the others aligned;
|
|
65
|
+
* a fixed cell that overflows ends in an ellipsis and keeps one cell of gap.
|
|
66
|
+
*
|
|
67
|
+
* @param fitted - The fitted plan ({@link tablePlan})
|
|
68
|
+
* @param row - The row, or null for the header
|
|
69
|
+
* @param selected - Whether the row is selected
|
|
70
|
+
* @param width - The row width
|
|
71
|
+
* @param g - The glyph set
|
|
72
|
+
* @returns The line
|
|
73
|
+
*/
|
|
74
|
+
export function tableLine(fitted, row, selected, width, g) {
|
|
75
|
+
const line = [t(' '), selected ? b(g.sel, 'brand') : t(row?.marker ?? ' ')];
|
|
76
|
+
let used = 2;
|
|
77
|
+
for (const col of fitted) {
|
|
78
|
+
const raw = row === null ? col.title : row.cells[col.key] ?? '';
|
|
79
|
+
const cell = typeof raw === 'string' ? { text: raw, tone: undefined } : raw;
|
|
80
|
+
const budget = col.width === 0 ? Math.max(0, width - used) : col.width;
|
|
81
|
+
// A fixed column keeps one cell of gap before the next; overflow ends in an ellipsis.
|
|
82
|
+
const room = col.width === 0 ? budget : Math.max(1, budget - 1);
|
|
83
|
+
const clipped = truncate(cell.text, room);
|
|
84
|
+
const text = col.align === 'right' ? padStart(clipped, budget) : padEnd(clipped, budget);
|
|
85
|
+
if (row === null)
|
|
86
|
+
line.push(d(text));
|
|
87
|
+
else if (selected)
|
|
88
|
+
line.push(b(text, cell.tone));
|
|
89
|
+
else
|
|
90
|
+
line.push(t(text, cell.tone));
|
|
91
|
+
used += budget;
|
|
92
|
+
}
|
|
93
|
+
return fitLine(line, width);
|
|
94
|
+
}
|
|
38
95
|
/**
|
|
39
96
|
* A table: a header row, then the rows in `[top, top + visible)` with a
|
|
40
|
-
* selection bar (`▌`) on `sel
|
|
41
|
-
*
|
|
42
|
-
* a `grow` column first widens to its longest cell (plus the gap), then
|
|
43
|
-
* the plan is fitted to the width ({@link fitPlan}). A fixed cell that
|
|
44
|
-
* overflows ends in an ellipsis and keeps one cell of gap.
|
|
97
|
+
* selection bar (`▌`) on `sel` — {@link tablePlan} then {@link tableLine}
|
|
98
|
+
* per row.
|
|
45
99
|
*
|
|
46
100
|
* @param plan - The column plan (the last column takes the remainder)
|
|
47
101
|
* @param rows - Every row
|
|
@@ -53,44 +107,13 @@ export function withScrollbar(lines, width, total, visible, top, g) {
|
|
|
53
107
|
* @param header - Whether to draw the header row
|
|
54
108
|
* @returns The lines
|
|
55
109
|
*/
|
|
56
|
-
function cellText(cell) {
|
|
57
|
-
return cell === undefined ? '' : typeof cell === 'string' ? cell : cell.text;
|
|
58
|
-
}
|
|
59
110
|
export function renderTable(plan, rows, sel, top, visible, width, g, header = true) {
|
|
111
|
+
const fitted = tablePlan(plan, rows, width);
|
|
60
112
|
const out = [];
|
|
61
|
-
const grown = plan.map(col => {
|
|
62
|
-
if (col.grow === undefined)
|
|
63
|
-
return col;
|
|
64
|
-
const longest = rows.reduce((n, row) => Math.max(n, displayWidth(cellText(row.cells[col.key]))), displayWidth(col.title));
|
|
65
|
-
return { ...col, width: Math.min(col.grow, Math.max(col.width, longest + 1)) };
|
|
66
|
-
});
|
|
67
|
-
const fitted = fitPlan(grown, width);
|
|
68
|
-
const cellsOf = (row, isHeader, selected) => {
|
|
69
|
-
const line = [t(' '), selected ? b(g.sel, 'brand') : t(row?.marker ?? ' ')];
|
|
70
|
-
let used = 2;
|
|
71
|
-
fitted.forEach((col) => {
|
|
72
|
-
const raw = isHeader ? col.title : row?.cells[col.key] ?? '';
|
|
73
|
-
const cell = typeof raw === 'string' ? { text: raw, tone: undefined } : raw;
|
|
74
|
-
const budget = col.width === 0 ? Math.max(0, width - used) : col.width;
|
|
75
|
-
// A fixed column keeps one cell of gap before the next; overflow ends in an ellipsis.
|
|
76
|
-
const room = col.width === 0 ? budget : Math.max(1, budget - 1);
|
|
77
|
-
const clipped = truncate(cell.text, room);
|
|
78
|
-
const text = col.align === 'right' ? padStart(clipped, budget) : padEnd(clipped, budget);
|
|
79
|
-
if (isHeader)
|
|
80
|
-
line.push(d(text));
|
|
81
|
-
else if (selected)
|
|
82
|
-
line.push(b(text, cell.tone));
|
|
83
|
-
else
|
|
84
|
-
line.push(t(text, cell.tone));
|
|
85
|
-
used += budget;
|
|
86
|
-
});
|
|
87
|
-
return line;
|
|
88
|
-
};
|
|
89
113
|
if (header)
|
|
90
|
-
out.push(
|
|
91
|
-
for (let i = top; i < Math.min(rows.length, top + visible); i++)
|
|
92
|
-
out.push(
|
|
93
|
-
}
|
|
114
|
+
out.push(tableLine(fitted, null, false, width, g));
|
|
115
|
+
for (let i = top; i < Math.min(rows.length, top + visible); i++)
|
|
116
|
+
out.push(tableLine(fitted, rows[i], i === sel, width, g));
|
|
94
117
|
return out;
|
|
95
118
|
}
|
|
96
119
|
/** A section title line: ` TITLE` with `right` flush right. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widgets.js","sourceRoot":"","sources":["../../../../src/tui/ui/shell/widgets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,SAAS,IAAI,iBAAiB,EAAmB,MAAM,wBAAwB,CAAC;AAClG,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGxF,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAa,MAAM,aAAa,CAAC;AAElE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa,EAAE,OAAe,EAAE,GAAW,EAAE,CAAS;IAC9G,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5E,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACzB,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnJ,MAAM,IAAI,GAAS,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QACtD,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACP,CAAC;AASD
|
|
1
|
+
{"version":3,"file":"widgets.js","sourceRoot":"","sources":["../../../../src/tui/ui/shell/widgets.ts"],"names":[],"mappings":"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"}
|