@profullstack/hqtui 0.1.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/README.md +144 -0
- package/dist/ansi.d.ts +42 -0
- package/dist/ansi.d.ts.map +1 -0
- package/dist/ansi.js +66 -0
- package/dist/ansi.js.map +1 -0
- package/dist/app.d.ts +128 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +296 -0
- package/dist/app.js.map +1 -0
- package/dist/buffer.d.ts +50 -0
- package/dist/buffer.d.ts.map +1 -0
- package/dist/buffer.js +184 -0
- package/dist/buffer.js.map +1 -0
- package/dist/capabilities.d.ts +36 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +93 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/color.d.ts +47 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +176 -0
- package/dist/color.js.map +1 -0
- package/dist/diff.d.ts +39 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +203 -0
- package/dist/diff.js.map +1 -0
- package/dist/graphics/blocks.d.ts +26 -0
- package/dist/graphics/blocks.d.ts.map +1 -0
- package/dist/graphics/blocks.js +49 -0
- package/dist/graphics/blocks.js.map +1 -0
- package/dist/graphics/braille.d.ts +33 -0
- package/dist/graphics/braille.d.ts.map +1 -0
- package/dist/graphics/braille.js +166 -0
- package/dist/graphics/braille.js.map +1 -0
- package/dist/graphics/index.d.ts +4 -0
- package/dist/graphics/index.d.ts.map +1 -0
- package/dist/graphics/index.js +4 -0
- package/dist/graphics/index.js.map +1 -0
- package/dist/graphics/plot.d.ts +91 -0
- package/dist/graphics/plot.d.ts.map +1 -0
- package/dist/graphics/plot.js +291 -0
- package/dist/graphics/plot.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/input.d.ts +62 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +245 -0
- package/dist/input.js.map +1 -0
- package/dist/layout.d.ts +51 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +163 -0
- package/dist/layout.js.map +1 -0
- package/dist/surface.d.ts +81 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/surface.js +181 -0
- package/dist/surface.js.map +1 -0
- package/dist/terminal.d.ts +63 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +189 -0
- package/dist/terminal.js.map +1 -0
- package/dist/testing.d.ts +71 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +171 -0
- package/dist/testing.js.map +1 -0
- package/dist/theme.d.ts +58 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +238 -0
- package/dist/theme.js.map +1 -0
- package/dist/ui.d.ts +194 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +439 -0
- package/dist/ui.js.map +1 -0
- package/dist/unicode.d.ts +36 -0
- package/dist/unicode.d.ts.map +1 -0
- package/dist/unicode.js +221 -0
- package/dist/unicode.js.map +1 -0
- package/dist/widgets/controls.d.ts +95 -0
- package/dist/widgets/controls.d.ts.map +1 -0
- package/dist/widgets/controls.js +231 -0
- package/dist/widgets/controls.js.map +1 -0
- package/dist/widgets/index.d.ts +5 -0
- package/dist/widgets/index.d.ts.map +1 -0
- package/dist/widgets/index.js +5 -0
- package/dist/widgets/index.js.map +1 -0
- package/dist/widgets/meters.d.ts +100 -0
- package/dist/widgets/meters.d.ts.map +1 -0
- package/dist/widgets/meters.js +209 -0
- package/dist/widgets/meters.js.map +1 -0
- package/dist/widgets/table.d.ts +92 -0
- package/dist/widgets/table.d.ts.map +1 -0
- package/dist/widgets/table.js +228 -0
- package/dist/widgets/table.js.map +1 -0
- package/dist/widgets/text.d.ts +64 -0
- package/dist/widgets/text.d.ts.map +1 -0
- package/dist/widgets/text.js +123 -0
- package/dist/widgets/text.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { gradient as makeGradient, mix } from "../color.js";
|
|
2
|
+
import { BrailleCanvas } from "./braille.js";
|
|
3
|
+
import { verticalGlyph, horizontalGlyph } from "./blocks.js";
|
|
4
|
+
import { seriesColor } from "../theme.js";
|
|
5
|
+
function extent(seriesList, options) {
|
|
6
|
+
let min = options.min;
|
|
7
|
+
let max = options.max;
|
|
8
|
+
if (min === undefined || max === undefined) {
|
|
9
|
+
let lo = Infinity;
|
|
10
|
+
let hi = -Infinity;
|
|
11
|
+
for (const s of seriesList) {
|
|
12
|
+
for (const v of s.values) {
|
|
13
|
+
if (!Number.isFinite(v))
|
|
14
|
+
continue;
|
|
15
|
+
if (v < lo)
|
|
16
|
+
lo = v;
|
|
17
|
+
if (v > hi)
|
|
18
|
+
hi = v;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (!Number.isFinite(lo)) {
|
|
22
|
+
lo = 0;
|
|
23
|
+
hi = 1;
|
|
24
|
+
}
|
|
25
|
+
min = min ?? Math.min(0, lo);
|
|
26
|
+
max = max ?? hi;
|
|
27
|
+
}
|
|
28
|
+
if (max <= min)
|
|
29
|
+
max = min + 1;
|
|
30
|
+
return [min, max];
|
|
31
|
+
}
|
|
32
|
+
function drawGrid(surface, color, bg) {
|
|
33
|
+
const { width: w, height: h } = surface;
|
|
34
|
+
for (let y = 0; y < h; y += Math.max(2, Math.floor(h / 4))) {
|
|
35
|
+
for (let x = 0; x < w; x += 2)
|
|
36
|
+
surface.char(x, y, "·", { fg: color, bg });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Draw one or more series across the whole surface.
|
|
41
|
+
* With `mode: "braille"` each cell carries a 2x4 pixel matrix, so a 40x10 panel
|
|
42
|
+
* plots at 80x40 resolution.
|
|
43
|
+
*/
|
|
44
|
+
export function plot(surface, series, options = {}) {
|
|
45
|
+
if (surface.empty || series.length === 0)
|
|
46
|
+
return;
|
|
47
|
+
const theme = surface.theme;
|
|
48
|
+
const mode = options.mode ?? "braille";
|
|
49
|
+
const bg = options.background;
|
|
50
|
+
const w = surface.width;
|
|
51
|
+
const h = surface.height;
|
|
52
|
+
// Only the samples that will actually be drawn should set the scale, or an
|
|
53
|
+
// old spike still sitting in the history buffer flattens the live line.
|
|
54
|
+
const columns = mode === "braille" ? w * 2 : w;
|
|
55
|
+
const visible = series.map((s) => ({ ...s, values: s.values.slice(-Math.max(1, columns)) }));
|
|
56
|
+
const [min, max] = extent(visible, options);
|
|
57
|
+
const span = max - min;
|
|
58
|
+
series = visible;
|
|
59
|
+
if (options.grid)
|
|
60
|
+
drawGrid(surface, options.gridColor ?? mix(theme.border, theme.background, 0.4), bg);
|
|
61
|
+
if (mode === "block" || mode === "ascii" || mode === "half") {
|
|
62
|
+
// One column per cell, newest value on the right.
|
|
63
|
+
series.forEach((s, si) => {
|
|
64
|
+
const color = s.color ?? options.color ?? seriesColor(theme, si);
|
|
65
|
+
const ramp = options.colors ? makeGradient(options.colors) : undefined;
|
|
66
|
+
for (let x = 0; x < w; x++) {
|
|
67
|
+
const idx = s.values.length - w + x;
|
|
68
|
+
const v = idx >= 0 ? s.values[idx] : undefined;
|
|
69
|
+
if (v === undefined || !Number.isFinite(v))
|
|
70
|
+
continue;
|
|
71
|
+
const ratio = (v - min) / span;
|
|
72
|
+
const filled = ratio * h;
|
|
73
|
+
const full = Math.floor(filled);
|
|
74
|
+
const cellColor = ramp ? ramp(ratio) : color;
|
|
75
|
+
for (let k = 0; k < full && k < h; k++) {
|
|
76
|
+
surface.char(x, h - 1 - k, "█", { fg: cellColor, bg });
|
|
77
|
+
}
|
|
78
|
+
if (full < h) {
|
|
79
|
+
const glyph = verticalGlyph(filled - full, mode);
|
|
80
|
+
if (glyph !== " ")
|
|
81
|
+
surface.char(x, h - 1 - full, glyph, { fg: cellColor, bg });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
// Braille: build one canvas per series so colors stay separable.
|
|
88
|
+
const canvas = new BrailleCanvas(w, h);
|
|
89
|
+
const px = canvas.width;
|
|
90
|
+
const py = canvas.height;
|
|
91
|
+
series.forEach((s, si) => {
|
|
92
|
+
canvas.clear();
|
|
93
|
+
const color = s.color ?? options.color ?? seriesColor(theme, si);
|
|
94
|
+
const values = s.values;
|
|
95
|
+
if (values.length === 0)
|
|
96
|
+
return;
|
|
97
|
+
const count = Math.min(values.length, px);
|
|
98
|
+
const start = values.length - count;
|
|
99
|
+
const points = [];
|
|
100
|
+
for (let i = 0; i < count; i++) {
|
|
101
|
+
const v = values[start + i];
|
|
102
|
+
if (!Number.isFinite(v))
|
|
103
|
+
continue;
|
|
104
|
+
const ratio = (v - min) / span;
|
|
105
|
+
const x = count === 1 ? px - 1 : Math.round((i / (count - 1)) * (px - 1));
|
|
106
|
+
const y = Math.round((1 - Math.max(0, Math.min(1, ratio))) * (py - 1));
|
|
107
|
+
points.push([x, y]);
|
|
108
|
+
}
|
|
109
|
+
if (points.length === 0)
|
|
110
|
+
return;
|
|
111
|
+
if (points.length === 1)
|
|
112
|
+
canvas.pixel(points[0][0], points[0][1]);
|
|
113
|
+
else
|
|
114
|
+
canvas.polyline(points);
|
|
115
|
+
const wantFill = s.fill ?? options.fill ?? false;
|
|
116
|
+
const fillAlpha = options.fillAlpha ?? 0.35;
|
|
117
|
+
if (wantFill) {
|
|
118
|
+
const area = new BrailleCanvas(w, h);
|
|
119
|
+
area.polyline(points);
|
|
120
|
+
area.fillUnder(points, py - 1);
|
|
121
|
+
// Fade the shading downwards so the line stays the brightest thing on screen.
|
|
122
|
+
const base = bg ?? theme.background;
|
|
123
|
+
blit(surface, area, (_col, row) => {
|
|
124
|
+
const depth = h <= 1 ? 0 : row / (h - 1);
|
|
125
|
+
return mix(base, color, fillAlpha * (1 - depth * 0.6));
|
|
126
|
+
}, bg);
|
|
127
|
+
}
|
|
128
|
+
const ramp = options.colors ? makeGradient(options.colors) : undefined;
|
|
129
|
+
blit(surface, canvas, (col, row) => {
|
|
130
|
+
if (!ramp)
|
|
131
|
+
return color;
|
|
132
|
+
return ramp(1 - row / Math.max(1, h - 1));
|
|
133
|
+
}, bg);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/** Copy a Braille canvas onto a surface, one glyph per cell. */
|
|
137
|
+
export function blit(surface, canvas, colorAt, bg) {
|
|
138
|
+
for (let row = 0; row < canvas.rows; row++) {
|
|
139
|
+
for (let col = 0; col < canvas.cols; col++) {
|
|
140
|
+
const value = canvas.cell(col, row);
|
|
141
|
+
if (value === 0)
|
|
142
|
+
continue;
|
|
143
|
+
surface.char(col, row, value, { fg: colorAt(col, row), bg });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/** A single-row trend line. Cheap enough to put in a table cell. */
|
|
148
|
+
export function sparkline(surface, values, options = {}) {
|
|
149
|
+
if (surface.empty)
|
|
150
|
+
return;
|
|
151
|
+
const theme = surface.theme;
|
|
152
|
+
const w = surface.width;
|
|
153
|
+
const windowed = values.slice(-Math.max(1, w));
|
|
154
|
+
const [min, max] = extent([{ values: windowed }], options);
|
|
155
|
+
const span = max - min;
|
|
156
|
+
const ramp = options.colors ? makeGradient(options.colors) : undefined;
|
|
157
|
+
const color = options.color ?? theme.accent;
|
|
158
|
+
const count = Math.min(values.length, w);
|
|
159
|
+
const start = values.length - count;
|
|
160
|
+
const offset = w - count;
|
|
161
|
+
for (let i = 0; i < count; i++) {
|
|
162
|
+
const v = values[start + i];
|
|
163
|
+
if (!Number.isFinite(v))
|
|
164
|
+
continue;
|
|
165
|
+
const ratio = Math.max(0, Math.min(1, (v - min) / span));
|
|
166
|
+
surface.char(offset + i, 0, verticalGlyph(ratio, options.mode ?? "block"), {
|
|
167
|
+
fg: ramp ? ramp(ratio) : color,
|
|
168
|
+
bg: options.background,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/** A horizontal bar filling the surface's first row. */
|
|
173
|
+
export function bar(surface, options) {
|
|
174
|
+
if (surface.empty)
|
|
175
|
+
return;
|
|
176
|
+
const theme = surface.theme;
|
|
177
|
+
const w = surface.width;
|
|
178
|
+
const ratio = Math.max(0, Math.min(1, options.value));
|
|
179
|
+
const style = options.style ?? "smooth";
|
|
180
|
+
const trackColor = options.track ?? mix(theme.background, theme.border, 0.8);
|
|
181
|
+
const heat = options.heat ? makeGradient(theme.heat) : undefined;
|
|
182
|
+
const color = options.color ?? theme.primary;
|
|
183
|
+
const trackChar = options.trackChar ?? (style === "ascii" ? "-" : style === "segmented" ? "░" : "─");
|
|
184
|
+
const filled = ratio * w;
|
|
185
|
+
const full = Math.floor(filled);
|
|
186
|
+
for (let x = 0; x < w; x++) {
|
|
187
|
+
if (x < full) {
|
|
188
|
+
surface.char(x, 0, style === "ascii" ? "#" : "█", {
|
|
189
|
+
fg: heat ? heat(w <= 1 ? ratio : x / (w - 1)) : color,
|
|
190
|
+
bg: options.background,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
else if (x === full && style !== "segmented") {
|
|
194
|
+
const glyph = horizontalGlyph(filled - full, style === "ascii" ? "ascii" : "block");
|
|
195
|
+
surface.char(x, 0, glyph === " " ? trackChar : glyph, {
|
|
196
|
+
fg: glyph === " " ? trackColor : heat ? heat(ratio) : color,
|
|
197
|
+
bg: options.background,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
surface.char(x, 0, trackChar, { fg: trackColor, bg: options.background });
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* A semicircular dial drawn with Braille. Needs about 9x5 cells to look right.
|
|
207
|
+
*/
|
|
208
|
+
export function gauge(surface, options) {
|
|
209
|
+
if (surface.empty || surface.height < 3) {
|
|
210
|
+
bar(surface, { value: options.value, color: options.color, heat: options.heat });
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
const theme = surface.theme;
|
|
214
|
+
const ratio = Math.max(0, Math.min(1, options.value));
|
|
215
|
+
const canvas = new BrailleCanvas(surface.width, surface.height);
|
|
216
|
+
const cx = canvas.width / 2;
|
|
217
|
+
const cy = canvas.height - 2;
|
|
218
|
+
const radius = Math.min(canvas.width / 2 - 1, canvas.height - 3);
|
|
219
|
+
const heat = makeGradient(theme.heat);
|
|
220
|
+
const arcColors = [];
|
|
221
|
+
const steps = Math.max(24, Math.round(radius * 4));
|
|
222
|
+
for (let i = 0; i <= steps; i++) {
|
|
223
|
+
const t = i / steps;
|
|
224
|
+
const angle = Math.PI * (1 - t);
|
|
225
|
+
const x = cx + Math.cos(angle) * radius;
|
|
226
|
+
const y = cy - Math.sin(angle) * radius * 0.85;
|
|
227
|
+
if (t <= ratio) {
|
|
228
|
+
canvas.pixel(x, y);
|
|
229
|
+
canvas.pixel(x, y - 1);
|
|
230
|
+
arcColors.push(t);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
const color = options.color ?? (options.heat === false ? theme.primary : heat(ratio));
|
|
234
|
+
blit(surface, canvas, () => color, options.background);
|
|
235
|
+
// Unfilled remainder of the dial, dimmed.
|
|
236
|
+
const rest = new BrailleCanvas(surface.width, surface.height);
|
|
237
|
+
for (let i = 0; i <= steps; i++) {
|
|
238
|
+
const t = i / steps;
|
|
239
|
+
if (t <= ratio)
|
|
240
|
+
continue;
|
|
241
|
+
const angle = Math.PI * (1 - t);
|
|
242
|
+
rest.pixel(cx + Math.cos(angle) * radius, cy - Math.sin(angle) * radius * 0.85);
|
|
243
|
+
}
|
|
244
|
+
blit(surface, rest, () => mix(theme.background, theme.border, 0.9), options.background);
|
|
245
|
+
if (options.label) {
|
|
246
|
+
const y = surface.height - 1;
|
|
247
|
+
surface.textAligned(y, options.label, "center", { fg: color, attrs: 1 });
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/** A ring chart. Reads well from about 12x6 cells. */
|
|
251
|
+
export function donut(surface, options) {
|
|
252
|
+
if (surface.empty)
|
|
253
|
+
return;
|
|
254
|
+
const theme = surface.theme;
|
|
255
|
+
const total = options.segments.reduce((a, s) => a + Math.max(0, s.value), 0) || 1;
|
|
256
|
+
const canvas = new BrailleCanvas(surface.width, surface.height);
|
|
257
|
+
const cx = canvas.width / 2;
|
|
258
|
+
const cy = canvas.height / 2;
|
|
259
|
+
const outer = Math.min(canvas.width / 2, canvas.height / 2) - 1;
|
|
260
|
+
const inner = outer * 0.55;
|
|
261
|
+
const colorFor = new Map();
|
|
262
|
+
let angle = -Math.PI / 2;
|
|
263
|
+
options.segments.forEach((seg, i) => {
|
|
264
|
+
const sweep = (Math.max(0, seg.value) / total) * Math.PI * 2;
|
|
265
|
+
const color = seg.color ?? seriesColor(theme, i);
|
|
266
|
+
const steps = Math.max(8, Math.round(sweep * outer * 3));
|
|
267
|
+
for (let s = 0; s <= steps; s++) {
|
|
268
|
+
const a = angle + (sweep * s) / steps;
|
|
269
|
+
for (let r = inner; r <= outer; r += 0.4) {
|
|
270
|
+
const x = Math.round(cx + Math.cos(a) * r);
|
|
271
|
+
const y = Math.round(cy + Math.sin(a) * r * 0.9);
|
|
272
|
+
canvas.pixel(x, y);
|
|
273
|
+
colorFor.set(`${x >> 1},${y >> 2}`, color);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
angle += sweep;
|
|
277
|
+
});
|
|
278
|
+
blit(surface, canvas, (col, row) => colorFor.get(`${col},${row}`) ?? theme.muted, options.background);
|
|
279
|
+
}
|
|
280
|
+
/** Vertical column chart, one column per value, newest on the right. */
|
|
281
|
+
export function histogram(surface, options) {
|
|
282
|
+
plot(surface, [{ values: options.values }], {
|
|
283
|
+
mode: "block",
|
|
284
|
+
color: options.color,
|
|
285
|
+
colors: options.colors,
|
|
286
|
+
background: options.background,
|
|
287
|
+
max: options.max,
|
|
288
|
+
min: 0,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=plot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plot.js","sourceRoot":"","sources":["../../src/graphics/plot.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HQTUI — High Quality Terminal UI for TypeScript.
|
|
3
|
+
*
|
|
4
|
+
* import { createApp } from "@profullstack/hqtui";
|
|
5
|
+
*
|
|
6
|
+
* const app = await createApp();
|
|
7
|
+
* app.render(({ ui }) => {
|
|
8
|
+
* ui.panel({ title: "Hello" }, panel => panel.text("Hello, terminal."));
|
|
9
|
+
* });
|
|
10
|
+
* await app.start();
|
|
11
|
+
*
|
|
12
|
+
* Dark theme, mouse, truecolor, resize handling and terminal restoration are
|
|
13
|
+
* all on by default. https://hqtui.com
|
|
14
|
+
*/
|
|
15
|
+
export { App, createApp, type AppOptions, type RenderArgs, type RenderFn, type FrameStats } from "./app.ts";
|
|
16
|
+
export { Container, GridContainer } from "./ui.ts";
|
|
17
|
+
export type { RenderContext, ContainerOptions, PanelOptions, GridOptions, CellOptions, HitRegion, } from "./ui.ts";
|
|
18
|
+
export { Terminal, createTerminal, emergencyRestore, type TerminalOptions, type TerminalSize } from "./terminal.ts";
|
|
19
|
+
export { detectCapabilities, type Capabilities, type ColorDepth, type CapabilityOverrides } from "./capabilities.ts";
|
|
20
|
+
export { FrameBuffer, Attr, type Style, type Attributes } from "./buffer.ts";
|
|
21
|
+
export { Encoder, encodeFull, type EncodeResult } from "./diff.ts";
|
|
22
|
+
export { Surface, createSurface, BORDERS, type BorderStyle, type BoxOptions, type Align } from "./surface.ts";
|
|
23
|
+
export { ansi, stripAnsi, moveTo, setTitle } from "./ansi.ts";
|
|
24
|
+
export { rgb, hex, ansi256, gradient, gradientSteps, mix, alpha, lighten, darken, grayscale, luminance, contrast, to256, to16, from256, DEFAULT_COLOR, type Color, } from "./color.ts";
|
|
25
|
+
export { themes, themeList, defineTheme, resolveTheme, elevate, heatColor, seriesColor, type Theme, type ThemeName, } from "./theme.ts";
|
|
26
|
+
export { solve, stack, inset, intersect, contains, isEmpty, fixed, percent, flex, auto, fill, remaining, minmax, normalizePadding, type Rect, type Size, type Constraint, type Padding, } from "./layout.ts";
|
|
27
|
+
export { InputParser, matchKey, type InputEvent, type KeyEvent, type MouseEvent, type PasteEvent, type FocusEvent } from "./input.ts";
|
|
28
|
+
export { stringWidth, truncate, fit, wrap, graphemes, charWidth } from "./unicode.ts";
|
|
29
|
+
export { BrailleCanvas } from "./graphics/braille.ts";
|
|
30
|
+
export { plot, blit, sparkline, bar, gauge, donut, histogram, verticalGlyph, horizontalGlyph, shadeGlyph, bestMode, type Series, type PlotOptions, type FillMode, } from "./graphics/index.ts";
|
|
31
|
+
export * as widgets from "./widgets/index.ts";
|
|
32
|
+
export { renderToScreen, renderToText, renderToAnsi, renderToHtml, renderFrames } from "./testing.ts";
|
|
33
|
+
export type { RenderedScreen, RenderOptions, CellSnapshot } from "./testing.ts";
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5G,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,YAAY,EACV,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,GACnF,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGrH,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AAC9G,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG9D,OAAO,EACL,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAClF,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,KAAK,GACrE,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAC7E,KAAK,KAAK,EAAE,KAAK,SAAS,GAC3B,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACnF,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,OAAO,GACzF,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAGtI,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGtF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EACL,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EACnD,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EACpD,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,GAC7C,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAG9C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACtG,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HQTUI — High Quality Terminal UI for TypeScript.
|
|
3
|
+
*
|
|
4
|
+
* import { createApp } from "@profullstack/hqtui";
|
|
5
|
+
*
|
|
6
|
+
* const app = await createApp();
|
|
7
|
+
* app.render(({ ui }) => {
|
|
8
|
+
* ui.panel({ title: "Hello" }, panel => panel.text("Hello, terminal."));
|
|
9
|
+
* });
|
|
10
|
+
* await app.start();
|
|
11
|
+
*
|
|
12
|
+
* Dark theme, mouse, truecolor, resize handling and terminal restoration are
|
|
13
|
+
* all on by default. https://hqtui.com
|
|
14
|
+
*/
|
|
15
|
+
export { App, createApp } from "./app.js";
|
|
16
|
+
export { Container, GridContainer } from "./ui.js";
|
|
17
|
+
// Terminal + capabilities
|
|
18
|
+
export { Terminal, createTerminal, emergencyRestore } from "./terminal.js";
|
|
19
|
+
export { detectCapabilities } from "./capabilities.js";
|
|
20
|
+
// Rendering core
|
|
21
|
+
export { FrameBuffer, Attr } from "./buffer.js";
|
|
22
|
+
export { Encoder, encodeFull } from "./diff.js";
|
|
23
|
+
export { Surface, createSurface, BORDERS } from "./surface.js";
|
|
24
|
+
export { ansi, stripAnsi, moveTo, setTitle } from "./ansi.js";
|
|
25
|
+
// Color
|
|
26
|
+
export { rgb, hex, ansi256, gradient, gradientSteps, mix, alpha, lighten, darken, grayscale, luminance, contrast, to256, to16, from256, DEFAULT_COLOR, } from "./color.js";
|
|
27
|
+
// Theme
|
|
28
|
+
export { themes, themeList, defineTheme, resolveTheme, elevate, heatColor, seriesColor, } from "./theme.js";
|
|
29
|
+
// Layout
|
|
30
|
+
export { solve, stack, inset, intersect, contains, isEmpty, fixed, percent, flex, auto, fill, remaining, minmax, normalizePadding, } from "./layout.js";
|
|
31
|
+
// Input
|
|
32
|
+
export { InputParser, matchKey } from "./input.js";
|
|
33
|
+
// Text
|
|
34
|
+
export { stringWidth, truncate, fit, wrap, graphemes, charWidth } from "./unicode.js";
|
|
35
|
+
// Graphics
|
|
36
|
+
export { BrailleCanvas } from "./graphics/braille.js";
|
|
37
|
+
export { plot, blit, sparkline, bar, gauge, donut, histogram, verticalGlyph, horizontalGlyph, shadeGlyph, bestMode, } from "./graphics/index.js";
|
|
38
|
+
// Widgets (for drawing straight onto a Surface)
|
|
39
|
+
export * as widgets from "./widgets/index.js";
|
|
40
|
+
// Headless rendering + testing
|
|
41
|
+
export { renderToScreen, renderToText, renderToAnsi, renderToHtml, renderFrames } from "./testing.js";
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,GAAG,EAAE,SAAS,EAAoE,MAAM,UAAU,CAAC;AAC5G,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAKnD,0BAA0B;AAC1B,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAA2C,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,kBAAkB,EAAgE,MAAM,mBAAmB,CAAC;AAErH,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,IAAI,EAA+B,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAqB,MAAM,WAAW,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAiD,MAAM,cAAc,CAAC;AAC9G,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE9D,QAAQ;AACR,OAAO,EACL,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAClF,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,GACzD,MAAM,YAAY,CAAC;AAEpB,QAAQ;AACR,OAAO,EACL,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,GAE9E,MAAM,YAAY,CAAC;AAEpB,SAAS;AACT,OAAO,EACL,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACnF,SAAS,EAAE,MAAM,EAAE,gBAAgB,GACpC,MAAM,aAAa,CAAC;AAErB,QAAQ;AACR,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAqF,MAAM,YAAY,CAAC;AAEtI,OAAO;AACP,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEtF,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EACL,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EACnD,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,GAErD,MAAM,qBAAqB,CAAC;AAE7B,gDAAgD;AAChD,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAE9C,+BAA+B;AAC/B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/input.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decodes raw terminal bytes into normalized events. Applications should never
|
|
3
|
+
* see an escape sequence — only `"ctrl+c"`, `"up"`, or a printable character.
|
|
4
|
+
*/
|
|
5
|
+
export interface KeyEvent {
|
|
6
|
+
type: "key";
|
|
7
|
+
/** Normalized name: "a", "up", "enter", "f5", "escape", "space", … */
|
|
8
|
+
name: string;
|
|
9
|
+
ctrl: boolean;
|
|
10
|
+
alt: boolean;
|
|
11
|
+
shift: boolean;
|
|
12
|
+
/** The printable character, when there is one. */
|
|
13
|
+
char?: string;
|
|
14
|
+
/** Full form including modifiers, e.g. "ctrl+c" — what you usually match on. */
|
|
15
|
+
key: string;
|
|
16
|
+
raw: string;
|
|
17
|
+
}
|
|
18
|
+
export interface MouseEvent {
|
|
19
|
+
type: "mouse";
|
|
20
|
+
action: "press" | "release" | "move" | "drag" | "scroll";
|
|
21
|
+
button: "left" | "middle" | "right" | "none";
|
|
22
|
+
/** Zero-based cell coordinates. */
|
|
23
|
+
x: number;
|
|
24
|
+
y: number;
|
|
25
|
+
/** -1 up, 1 down; 0 when this is not a scroll. */
|
|
26
|
+
scroll: number;
|
|
27
|
+
ctrl: boolean;
|
|
28
|
+
alt: boolean;
|
|
29
|
+
shift: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface PasteEvent {
|
|
32
|
+
type: "paste";
|
|
33
|
+
text: string;
|
|
34
|
+
}
|
|
35
|
+
export interface FocusEvent {
|
|
36
|
+
type: "focus";
|
|
37
|
+
focused: boolean;
|
|
38
|
+
}
|
|
39
|
+
export type InputEvent = KeyEvent | MouseEvent | PasteEvent | FocusEvent;
|
|
40
|
+
/**
|
|
41
|
+
* Feed it chunks, get events. Stateful so a sequence split across two reads
|
|
42
|
+
* (common over SSH) still decodes correctly.
|
|
43
|
+
*/
|
|
44
|
+
export declare class InputParser {
|
|
45
|
+
private pending;
|
|
46
|
+
private pasteBuffer;
|
|
47
|
+
/** True when bytes are buffered awaiting the rest of a sequence. */
|
|
48
|
+
get hasPending(): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Resolve buffered bytes that turned out to be complete after all. A lone ESC
|
|
51
|
+
* is ambiguous — it only becomes the Escape key once no more bytes follow —
|
|
52
|
+
* so the terminal calls this on a short timeout.
|
|
53
|
+
*/
|
|
54
|
+
flush(): InputEvent[];
|
|
55
|
+
parse(chunk: string): InputEvent[];
|
|
56
|
+
private parsePlain;
|
|
57
|
+
private parseEscape;
|
|
58
|
+
private decodeMouse;
|
|
59
|
+
}
|
|
60
|
+
/** Does this event match a binding like `"ctrl+c"`, `"q"`, or `"f10"`? */
|
|
61
|
+
export declare function matchKey(event: KeyEvent, binding: string): boolean;
|
|
62
|
+
//# sourceMappingURL=input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,KAAK,CAAC;IACZ,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IACzD,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAC7C,mCAAmC;IACnC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AAsCzE;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,WAAW,CAAuB;IAE1C,oEAAoE;IACpE,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;;;OAIG;IACH,KAAK,IAAI,UAAU,EAAE;IAYrB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE;IA4ClC,OAAO,CAAC,UAAU;IA+BlB,OAAO,CAAC,WAAW;IAuEnB,OAAO,CAAC,WAAW;CAmCpB;AAID,0EAA0E;AAC1E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAKlE"}
|