@profullstack/hqtui 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ansi.d.ts +10 -0
- package/dist/ansi.d.ts.map +1 -1
- package/dist/ansi.js +18 -0
- package/dist/ansi.js.map +1 -1
- package/dist/app.d.ts +25 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +96 -29
- package/dist/app.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/diff.d.ts +37 -1
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +79 -4
- package/dist/diff.js.map +1 -1
- package/dist/graphics/braille.d.ts.map +1 -1
- package/dist/graphics/braille.js +15 -2
- package/dist/graphics/braille.js.map +1 -1
- package/dist/graphics/canvas.d.ts +76 -0
- package/dist/graphics/canvas.d.ts.map +1 -0
- package/dist/graphics/canvas.js +110 -0
- package/dist/graphics/canvas.js.map +1 -0
- package/dist/graphics/chart.d.ts +70 -0
- package/dist/graphics/chart.d.ts.map +1 -0
- package/dist/graphics/chart.js +249 -0
- package/dist/graphics/chart.js.map +1 -0
- package/dist/graphics/index.d.ts +3 -0
- package/dist/graphics/index.d.ts.map +1 -1
- package/dist/graphics/index.js +3 -0
- package/dist/graphics/index.js.map +1 -1
- package/dist/graphics/world-data.d.ts +22 -0
- package/dist/graphics/world-data.d.ts.map +1 -0
- package/dist/graphics/world-data.js +1300 -0
- package/dist/graphics/world-data.js.map +1 -0
- package/dist/graphics/world.d.ts +70 -0
- package/dist/graphics/world.d.ts.map +1 -0
- package/dist/graphics/world.js +137 -0
- package/dist/graphics/world.js.map +1 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +7 -0
- package/dist/input.d.ts.map +1 -1
- package/dist/input.js +1 -0
- package/dist/input.js.map +1 -1
- package/dist/layout.d.ts +21 -1
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +54 -4
- package/dist/layout.js.map +1 -1
- package/dist/richtext.d.ts +8 -0
- package/dist/richtext.d.ts.map +1 -1
- package/dist/richtext.js +29 -1
- package/dist/richtext.js.map +1 -1
- package/dist/surface.d.ts +28 -0
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +83 -15
- package/dist/surface.js.map +1 -1
- package/dist/terminal.d.ts +81 -0
- package/dist/terminal.d.ts.map +1 -1
- package/dist/terminal.js +131 -4
- package/dist/terminal.js.map +1 -1
- package/dist/testing.d.ts +12 -0
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +10 -1
- package/dist/testing.js.map +1 -1
- package/dist/ui.d.ts +152 -3
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +210 -15
- package/dist/ui.js.map +1 -1
- package/dist/unicode.d.ts +9 -0
- package/dist/unicode.d.ts.map +1 -1
- package/dist/unicode.js +25 -0
- package/dist/unicode.js.map +1 -1
- package/dist/widgets/calendar.d.ts +67 -0
- package/dist/widgets/calendar.d.ts.map +1 -0
- package/dist/widgets/calendar.js +118 -0
- package/dist/widgets/calendar.js.map +1 -0
- package/dist/widgets/chart.d.ts +24 -0
- package/dist/widgets/chart.d.ts.map +1 -0
- package/dist/widgets/chart.js +80 -0
- package/dist/widgets/chart.js.map +1 -0
- package/dist/widgets/controls.d.ts +22 -0
- package/dist/widgets/controls.d.ts.map +1 -1
- package/dist/widgets/controls.js +20 -7
- package/dist/widgets/controls.js.map +1 -1
- package/dist/widgets/index.d.ts +6 -0
- package/dist/widgets/index.d.ts.map +1 -1
- package/dist/widgets/index.js +6 -0
- package/dist/widgets/index.js.map +1 -1
- package/dist/widgets/meters.d.ts.map +1 -1
- package/dist/widgets/meters.js +11 -1
- package/dist/widgets/meters.js.map +1 -1
- package/dist/widgets/scrollbar.d.ts +66 -0
- package/dist/widgets/scrollbar.d.ts.map +1 -0
- package/dist/widgets/scrollbar.js +89 -0
- package/dist/widgets/scrollbar.js.map +1 -0
- package/dist/widgets/shadow.d.ts +42 -0
- package/dist/widgets/shadow.d.ts.map +1 -0
- package/dist/widgets/shadow.js +73 -0
- package/dist/widgets/shadow.js.map +1 -0
- package/dist/widgets/surface.d.ts +33 -0
- package/dist/widgets/surface.d.ts.map +1 -0
- package/dist/widgets/surface.js +37 -0
- package/dist/widgets/surface.js.map +1 -0
- package/dist/widgets/table.d.ts +1 -2
- package/dist/widgets/table.d.ts.map +1 -1
- package/dist/widgets/table.js +4 -12
- package/dist/widgets/table.js.map +1 -1
- package/dist/widgets/text.d.ts +26 -2
- package/dist/widgets/text.d.ts.map +1 -1
- package/dist/widgets/text.js +30 -8
- package/dist/widgets/text.js.map +1 -1
- package/dist/widgets/world.d.ts +32 -0
- package/dist/widgets/world.d.ts.map +1 -0
- package/dist/widgets/world.js +31 -0
- package/dist/widgets/world.js.map +1 -0
- package/package.json +1 -1
package/dist/widgets/text.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Attr } from "../buffer.js";
|
|
2
2
|
import { mix } from "../color.js";
|
|
3
|
-
import { fit, stringWidth, truncate, wrap } from "../unicode.js";
|
|
4
|
-
import { fitSpans, isRich, toSpanLines, wrapRich } from "../richtext.js";
|
|
3
|
+
import { dropColumns, fit, stringWidth, truncate, wrap } from "../unicode.js";
|
|
4
|
+
import { dropSpanColumns, fitSpans, isRich, toSpanLines, wrapRich, } from "../richtext.js";
|
|
5
5
|
import { elevate } from "../theme.js";
|
|
6
6
|
function attrsOf(o) {
|
|
7
7
|
let a = o.attrs ?? 0;
|
|
@@ -27,18 +27,28 @@ export function drawText(surface, content, options = {}) {
|
|
|
27
27
|
// the span code. The two agree — richtext.test.ts holds them to the same
|
|
28
28
|
// columns over a corpus — but "agree" and "emit identical cells" are not the
|
|
29
29
|
// same claim, and every committed fixture depends on the second one.
|
|
30
|
+
// Both offsets are clamped to zero: a negative scroll would otherwise read
|
|
31
|
+
// as "start before the beginning" and silently drop the first rows.
|
|
32
|
+
const scroll = Math.max(0, Math.floor(options.scroll ?? 0));
|
|
33
|
+
const scrollX = Math.max(0, Math.floor(options.scrollX ?? 0));
|
|
30
34
|
if (!isRich(content)) {
|
|
31
|
-
const
|
|
35
|
+
const wrapped = options.wrap ? wrap(content, surface.width) : content.split("\n");
|
|
36
|
+
const lines = scroll > 0 ? wrapped.slice(scroll) : wrapped;
|
|
32
37
|
for (let i = 0; i < lines.length && i < surface.height; i++) {
|
|
33
|
-
|
|
38
|
+
const line = scrollX > 0 ? dropColumns(lines[i], scrollX) : lines[i];
|
|
39
|
+
surface.text(0, i, fit(truncate(line, surface.width), surface.width, options.align ?? "left"), style);
|
|
34
40
|
}
|
|
35
41
|
return;
|
|
36
42
|
}
|
|
37
|
-
const
|
|
43
|
+
const wrapped = options.wrap
|
|
38
44
|
? wrapRich(content, surface.width)
|
|
39
45
|
: toSpanLines(content);
|
|
46
|
+
const lines = scroll > 0 ? wrapped.slice(scroll) : wrapped;
|
|
40
47
|
for (let i = 0; i < lines.length && i < surface.height; i++) {
|
|
41
|
-
|
|
48
|
+
const line = scrollX > 0
|
|
49
|
+
? dropSpanColumns(lines[i], scrollX)
|
|
50
|
+
: lines[i];
|
|
51
|
+
surface.spans(0, i, fitSpans(line, surface.width, options.align ?? "left"), style);
|
|
42
52
|
}
|
|
43
53
|
}
|
|
44
54
|
export function drawBadge(surface, options) {
|
|
@@ -98,19 +108,27 @@ export function drawDivider(surface, options = {}) {
|
|
|
98
108
|
surface.text(Math.max(0, x), 0, truncate(label, surface.width), { fg: theme.muted });
|
|
99
109
|
}
|
|
100
110
|
}
|
|
101
|
-
/**
|
|
111
|
+
/**
|
|
112
|
+
* The F1/F2/F10 bar along the bottom of every serious TUI.
|
|
113
|
+
*
|
|
114
|
+
* Returns the cells each item took, in the order they were drawn, so the
|
|
115
|
+
* caller can make them clickable: a key cap that says `F1 Help` and does
|
|
116
|
+
* nothing when clicked is a promise the bar does not keep.
|
|
117
|
+
*/
|
|
102
118
|
export function drawStatusBar(surface, options) {
|
|
103
119
|
if (surface.empty)
|
|
104
|
-
return;
|
|
120
|
+
return [];
|
|
105
121
|
const theme = surface.theme;
|
|
106
122
|
const bg = options.background ?? elevate(theme, 0.04);
|
|
107
123
|
surface.fill({ bg });
|
|
124
|
+
const spans = [];
|
|
108
125
|
let x = 1;
|
|
109
126
|
const drawItems = (items, startX) => {
|
|
110
127
|
let cx = startX;
|
|
111
128
|
for (const item of items) {
|
|
112
129
|
if (cx >= surface.width)
|
|
113
130
|
break;
|
|
131
|
+
const startedAt = cx;
|
|
114
132
|
if (item.key) {
|
|
115
133
|
const cap = options.keyStyle === "plain" ? item.key : item.key;
|
|
116
134
|
const capStyle = options.keyStyle === "plain"
|
|
@@ -124,6 +142,9 @@ export function drawStatusBar(surface, options) {
|
|
|
124
142
|
bg,
|
|
125
143
|
attrs: item.active ? Attr.Bold : 0,
|
|
126
144
|
});
|
|
145
|
+
// The span is the cap and the label, not the gap after them: two items
|
|
146
|
+
// side by side must not both answer a click on the space between.
|
|
147
|
+
spans.push({ item, x: startedAt, width: Math.max(0, Math.min(cx, surface.width) - startedAt) });
|
|
127
148
|
cx += surface.text(cx, 0, " ", { bg });
|
|
128
149
|
}
|
|
129
150
|
return cx;
|
|
@@ -133,5 +154,6 @@ export function drawStatusBar(surface, options) {
|
|
|
133
154
|
const width = options.right.reduce((a, i) => a + stringWidth(i.label) + (i.key ? stringWidth(i.key) + 1 : 0) + 2, 0);
|
|
134
155
|
drawItems(options.right, Math.max(x, surface.width - width - 1));
|
|
135
156
|
}
|
|
157
|
+
return spans;
|
|
136
158
|
}
|
|
137
159
|
//# sourceMappingURL=text.js.map
|
package/dist/widgets/text.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/widgets/text.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/widgets/text.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A world map you can click.
|
|
3
|
+
*
|
|
4
|
+
* The drawing is the canvas doing what it already does -- polylines in the
|
|
5
|
+
* caller's own coordinates, which for a map are degrees. What this adds is the
|
|
6
|
+
* other direction: turning a click back into a country.
|
|
7
|
+
*/
|
|
8
|
+
import type { Surface } from "../surface.ts";
|
|
9
|
+
import type { Color } from "../color.ts";
|
|
10
|
+
import type { Bounds } from "../graphics/canvas.ts";
|
|
11
|
+
import { type CountryOutline } from "../graphics/world.ts";
|
|
12
|
+
export interface WorldMapOptions {
|
|
13
|
+
/** The window on the globe. Defaults to all of it. */
|
|
14
|
+
x?: Bounds;
|
|
15
|
+
y?: Bounds;
|
|
16
|
+
/** Coastline colour. */
|
|
17
|
+
color?: Color;
|
|
18
|
+
/** Countries to pick out, by name or ISO code. */
|
|
19
|
+
highlight?: readonly string[];
|
|
20
|
+
highlightColor?: Color;
|
|
21
|
+
background?: Color;
|
|
22
|
+
grid?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function drawWorldMap(surface: Surface, options?: WorldMapOptions): void;
|
|
25
|
+
/**
|
|
26
|
+
* The country under a cell of a map drawn with these bounds.
|
|
27
|
+
*
|
|
28
|
+
* Exposed so a caller can answer a hover as well as a click, and so the
|
|
29
|
+
* arithmetic that has to agree with the drawing lives in one place.
|
|
30
|
+
*/
|
|
31
|
+
export declare function countryAtCell(column: number, row: number, width: number, height: number, options?: WorldMapOptions): CountryOutline | undefined;
|
|
32
|
+
//# sourceMappingURL=world.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../../src/widgets/world.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EACL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,wBAAwB;IACxB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,kDAAkD;IAClD,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,KAAK,CAAC;IACvB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI,CAclF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAoB,GAC5B,cAAc,GAAG,SAAS,CAI5B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { drawCanvas } from "../graphics/canvas.js";
|
|
2
|
+
import { WORLD_X, WORLD_Y, countryAt, degreesAt, worldShapes, } from "../graphics/world.js";
|
|
3
|
+
export function drawWorldMap(surface, options = {}) {
|
|
4
|
+
if (surface.empty)
|
|
5
|
+
return;
|
|
6
|
+
const theme = surface.theme;
|
|
7
|
+
drawCanvas(surface, {
|
|
8
|
+
shapes: worldShapes({
|
|
9
|
+
color: options.color ?? theme.border,
|
|
10
|
+
highlight: options.highlight,
|
|
11
|
+
highlightColor: options.highlightColor ?? theme.accent,
|
|
12
|
+
}),
|
|
13
|
+
x: options.x ?? WORLD_X,
|
|
14
|
+
y: options.y ?? WORLD_Y,
|
|
15
|
+
background: options.background,
|
|
16
|
+
grid: options.grid,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The country under a cell of a map drawn with these bounds.
|
|
21
|
+
*
|
|
22
|
+
* Exposed so a caller can answer a hover as well as a click, and so the
|
|
23
|
+
* arithmetic that has to agree with the drawing lives in one place.
|
|
24
|
+
*/
|
|
25
|
+
export function countryAtCell(column, row, width, height, options = {}) {
|
|
26
|
+
const at = degreesAt(column, row, width, height, options.x ?? WORLD_X, options.y ?? WORLD_Y);
|
|
27
|
+
if (!at)
|
|
28
|
+
return undefined;
|
|
29
|
+
return countryAt(at.lon, at.lat);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=world.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"world.js","sourceRoot":"","sources":["../../src/widgets/world.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACgB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,GACzE,MAAM,sBAAsB,CAAC;AAe9B,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,OAAO,GAAoB,EAAE;IAC1E,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO;IAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,UAAU,CAAC,OAAO,EAAE;QAClB,MAAM,EAAE,WAAW,CAAC;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM;YACpC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC,MAAM;SACvD,CAAC;QACF,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,OAAO;QACvB,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,OAAO;QACvB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,GAAW,EACX,KAAa,EACb,MAAc,EACd,OAAO,GAAoB,EAAE;IAE7B,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;IAC7F,IAAI,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAC1B,OAAO,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@profullstack/hqtui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "High Quality Terminal UI for TypeScript. btop-grade dashboards with a one-import API, dark by default, zero runtime dependencies.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|