@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"braille.d.ts","sourceRoot":"","sources":["../../src/graphics/braille.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"braille.d.ts","sourceRoot":"","sources":["../../src/graphics/braille.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,qBAAa,aAAa;IACxB,yDAAyD;IACzD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,IAAI,CAAa;IAEzB,YAAY,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAMrC;IAED,KAAK,IAAI,IAAI,CAEZ;IAED;;;;OAIG;IACH,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAMhC;IAED,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAMhC;IAED,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAMjC;IAED;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAO;IAEpC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAW;IAE3C,uEAAuE;IACvE,OAAO,CAAC,MAAM,CAAC,MAAM;IAMrB;;;;OAIG;IACH,OAAO,CAAC,IAAI;IAOZ;;;;OAIG;IACH,OAAO,CAAC,IAAI;IA+BZ,2DAA2D;IAC3D,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAqCzD;IAED,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,IAAI,CAIzC;IAED,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAG7C;IAED,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAG7C;IAED,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAKzD;IAED,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAG7D;IAED,yEAAyE;IACzE,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAa5D;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAwBnD;IAED,uEAAuE;IACvE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIrC;IAED,wEAAwE;IACxE,OAAO,IAAI,MAAM,EAAE,CAWlB;CACF"}
|
package/dist/graphics/braille.js
CHANGED
|
@@ -10,6 +10,19 @@ const DOT_BITS = [
|
|
|
10
10
|
[0x04, 0x20],
|
|
11
11
|
[0x40, 0x80],
|
|
12
12
|
];
|
|
13
|
+
/**
|
|
14
|
+
* Round, treating a value within a hair of .5 as the tie it mathematically is.
|
|
15
|
+
*
|
|
16
|
+
* Plot geometry runs through cos and sin, and libm implementations differ by an
|
|
17
|
+
* ULP at the exact angles where a coordinate lands on .5 -- cos(120 degrees) is
|
|
18
|
+
* -0.5, and V8 returns a hair under it where Go returns a hair over. Rounding
|
|
19
|
+
* the raw value makes that ULP decide a pixel, so the same widget at the same
|
|
20
|
+
* size differs between ports. The tolerance is far wider than an ULP and far
|
|
21
|
+
* narrower than anything geometric.
|
|
22
|
+
*/
|
|
23
|
+
function snap(v) {
|
|
24
|
+
return Math.round(v + (v >= 0 ? 1e-9 : -1e-9));
|
|
25
|
+
}
|
|
13
26
|
export class BrailleCanvas {
|
|
14
27
|
/** Pixel dimensions (cells * 2 wide, cells * 4 tall). */
|
|
15
28
|
width;
|
|
@@ -33,8 +46,8 @@ export class BrailleCanvas {
|
|
|
33
46
|
* everything, is ignored too rather than landing in cell 0.
|
|
34
47
|
*/
|
|
35
48
|
pixel(x, y) {
|
|
36
|
-
const px =
|
|
37
|
-
const py =
|
|
49
|
+
const px = snap(x);
|
|
50
|
+
const py = snap(y);
|
|
38
51
|
if (!(px >= 0 && py >= 0 && px < this.width && py < this.height))
|
|
39
52
|
return;
|
|
40
53
|
const cell = (py >> 2) * this.cols + (px >> 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"braille.js","sourceRoot":"","sources":["../../src/graphics/braille.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"braille.js","sourceRoot":"","sources":["../../src/graphics/braille.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A canvas you can draw on in your own coordinates.
|
|
3
|
+
*
|
|
4
|
+
* `BrailleCanvas` works in pixels: good primitives, but the caller does every
|
|
5
|
+
* unit conversion, and a drawing written for one panel size is wrong in the
|
|
6
|
+
* next. This wraps it with a domain per axis and a list of shapes placed in
|
|
7
|
+
* that domain, so the same drawing fits whatever region it is given.
|
|
8
|
+
*
|
|
9
|
+
* Y increases upwards, as it does on paper and in every plot, rather than
|
|
10
|
+
* downwards as it does in a terminal. A canvas is for drawing things that have
|
|
11
|
+
* their own geometry; making the caller flip every y would be handing them back
|
|
12
|
+
* the conversion this exists to take away.
|
|
13
|
+
*/
|
|
14
|
+
import type { Surface } from "../surface.ts";
|
|
15
|
+
import { type Color } from "../color.ts";
|
|
16
|
+
import { BrailleCanvas } from "./braille.ts";
|
|
17
|
+
export interface Bounds {
|
|
18
|
+
min: number;
|
|
19
|
+
max: number;
|
|
20
|
+
}
|
|
21
|
+
export type Shape = {
|
|
22
|
+
type: "line";
|
|
23
|
+
x1: number;
|
|
24
|
+
y1: number;
|
|
25
|
+
x2: number;
|
|
26
|
+
y2: number;
|
|
27
|
+
color?: Color;
|
|
28
|
+
} | {
|
|
29
|
+
type: "polyline";
|
|
30
|
+
points: [number, number][];
|
|
31
|
+
color?: Color;
|
|
32
|
+
} | {
|
|
33
|
+
type: "points";
|
|
34
|
+
points: [number, number][];
|
|
35
|
+
color?: Color;
|
|
36
|
+
} | {
|
|
37
|
+
type: "circle";
|
|
38
|
+
x: number;
|
|
39
|
+
y: number;
|
|
40
|
+
radius: number;
|
|
41
|
+
color?: Color;
|
|
42
|
+
} | {
|
|
43
|
+
type: "rect";
|
|
44
|
+
x: number;
|
|
45
|
+
y: number;
|
|
46
|
+
width: number;
|
|
47
|
+
height: number;
|
|
48
|
+
color?: Color;
|
|
49
|
+
fill?: boolean;
|
|
50
|
+
};
|
|
51
|
+
export interface CanvasOptions {
|
|
52
|
+
shapes: Shape[];
|
|
53
|
+
/** The span the drawing is in. Defaults to 0-1 on both axes. */
|
|
54
|
+
x?: Bounds;
|
|
55
|
+
y?: Bounds;
|
|
56
|
+
/** Colour for shapes that do not name their own. */
|
|
57
|
+
color?: Color;
|
|
58
|
+
background?: Color;
|
|
59
|
+
/** A faint dotted grid behind the shapes. */
|
|
60
|
+
grid?: boolean;
|
|
61
|
+
gridColor?: Color;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* A projection from the caller's coordinates onto the canvas's pixels.
|
|
65
|
+
*
|
|
66
|
+
* Handed out so a caller can place their own labels against the same drawing:
|
|
67
|
+
* a chart axis or a map legend has to agree with the shapes, and re-deriving
|
|
68
|
+
* the mapping by hand is exactly the arithmetic this is here to remove.
|
|
69
|
+
*/
|
|
70
|
+
export interface Projection {
|
|
71
|
+
x(value: number): number;
|
|
72
|
+
y(value: number): number;
|
|
73
|
+
}
|
|
74
|
+
export declare function projection(canvas: BrailleCanvas, xBounds: Bounds, yBounds: Bounds): Projection;
|
|
75
|
+
export declare function drawCanvas(surface: Surface, options: CanvasOptions): void;
|
|
76
|
+
//# sourceMappingURL=canvas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../src/graphics/canvas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,KAAK,EAAO,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,KAAK,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GAC/E;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GACvE;IACE,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEN,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,gEAAgE;IAChE,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB;AAYD;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,UAAU,CAQZ;AAwBD,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CA6DzE"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { mix } from "../color.js";
|
|
2
|
+
import { BrailleCanvas } from "./braille.js";
|
|
3
|
+
import { blit } from "./plot.js";
|
|
4
|
+
const UNIT = { min: 0, max: 1 };
|
|
5
|
+
/** A usable span: a zero-width one cannot be mapped onto anything. */
|
|
6
|
+
function span(bounds) {
|
|
7
|
+
if (!bounds)
|
|
8
|
+
return UNIT;
|
|
9
|
+
const { min, max } = bounds;
|
|
10
|
+
if (!Number.isFinite(min) || !Number.isFinite(max) || !(max > min))
|
|
11
|
+
return UNIT;
|
|
12
|
+
return { min, max };
|
|
13
|
+
}
|
|
14
|
+
export function projection(canvas, xBounds, yBounds) {
|
|
15
|
+
const width = Math.max(1, canvas.width - 1);
|
|
16
|
+
const height = Math.max(1, canvas.height - 1);
|
|
17
|
+
return {
|
|
18
|
+
x: (value) => ((value - xBounds.min) / (xBounds.max - xBounds.min)) * width,
|
|
19
|
+
// Flipped: the caller's y goes up, the canvas's goes down.
|
|
20
|
+
y: (value) => (1 - (value - yBounds.min) / (yBounds.max - yBounds.min)) * height,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function drawGrid(surface, color, bg) {
|
|
24
|
+
const { width: w, height: h } = surface;
|
|
25
|
+
for (let y = 0; y < h; y += Math.max(2, Math.floor(h / 4))) {
|
|
26
|
+
for (let x = 0; x < w; x += 2)
|
|
27
|
+
surface.char(x, y, "·", { fg: color, bg });
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Whether a shape has anything finite to draw. */
|
|
31
|
+
function usable(shape) {
|
|
32
|
+
const finite = (...values) => values.every((v) => Number.isFinite(v));
|
|
33
|
+
switch (shape.type) {
|
|
34
|
+
case "line":
|
|
35
|
+
return finite(shape.x1, shape.y1, shape.x2, shape.y2);
|
|
36
|
+
case "circle":
|
|
37
|
+
return finite(shape.x, shape.y, shape.radius);
|
|
38
|
+
case "rect":
|
|
39
|
+
return finite(shape.x, shape.y, shape.width, shape.height);
|
|
40
|
+
default:
|
|
41
|
+
return shape.points.some((p) => finite(p[0], p[1]));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function drawCanvas(surface, options) {
|
|
45
|
+
if (surface.empty || options.shapes.length === 0)
|
|
46
|
+
return;
|
|
47
|
+
const theme = surface.theme;
|
|
48
|
+
const bg = options.background;
|
|
49
|
+
const xb = span(options.x);
|
|
50
|
+
const yb = span(options.y);
|
|
51
|
+
if (options.grid) {
|
|
52
|
+
drawGrid(surface, options.gridColor ?? mix(theme.border, theme.background, 0.4), bg);
|
|
53
|
+
}
|
|
54
|
+
const canvas = new BrailleCanvas(surface.width, surface.height);
|
|
55
|
+
const at = projection(canvas, xb, yb);
|
|
56
|
+
const base = options.color ?? theme.accent;
|
|
57
|
+
// One shape at a time, blitted before the next is drawn, so each keeps its
|
|
58
|
+
// own colour. A shared canvas would make the last colour win everywhere the
|
|
59
|
+
// shapes overlap.
|
|
60
|
+
for (const shape of options.shapes) {
|
|
61
|
+
if (!usable(shape))
|
|
62
|
+
continue;
|
|
63
|
+
canvas.clear();
|
|
64
|
+
switch (shape.type) {
|
|
65
|
+
case "line":
|
|
66
|
+
canvas.line(at.x(shape.x1), at.y(shape.y1), at.x(shape.x2), at.y(shape.y2));
|
|
67
|
+
break;
|
|
68
|
+
case "polyline": {
|
|
69
|
+
const points = shape.points
|
|
70
|
+
.filter((p) => Number.isFinite(p[0]) && Number.isFinite(p[1]))
|
|
71
|
+
.map((p) => [at.x(p[0]), at.y(p[1])]);
|
|
72
|
+
if (points.length === 1)
|
|
73
|
+
canvas.pixel(points[0][0], points[0][1]);
|
|
74
|
+
else
|
|
75
|
+
canvas.polyline(points);
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
case "points":
|
|
79
|
+
for (const [px, py] of shape.points) {
|
|
80
|
+
if (Number.isFinite(px) && Number.isFinite(py))
|
|
81
|
+
canvas.pixel(at.x(px), at.y(py));
|
|
82
|
+
}
|
|
83
|
+
break;
|
|
84
|
+
case "circle": {
|
|
85
|
+
// A radius is a distance, not a position, so it is scaled by the span
|
|
86
|
+
// rather than projected. The two axes rarely scale alike in a terminal
|
|
87
|
+
// cell, and the x one is what a circle is measured against.
|
|
88
|
+
const scale = Math.max(1, canvas.width - 1) / (xb.max - xb.min);
|
|
89
|
+
canvas.circle(at.x(shape.x), at.y(shape.y), Math.abs(shape.radius) * scale);
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
case "rect": {
|
|
93
|
+
// Given as a corner and a size, in the caller's own direction: a
|
|
94
|
+
// positive height goes up, because their y does.
|
|
95
|
+
const x0 = at.x(shape.x);
|
|
96
|
+
const x1 = at.x(shape.x + shape.width);
|
|
97
|
+
const y0 = at.y(shape.y);
|
|
98
|
+
const y1 = at.y(shape.y + shape.height);
|
|
99
|
+
if (shape.fill)
|
|
100
|
+
canvas.fillRect(x0, Math.min(y0, y1), x1, Math.max(y0, y1));
|
|
101
|
+
else
|
|
102
|
+
canvas.rect(x0, Math.min(y0, y1), x1, Math.max(y0, y1));
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const color = shape.color ?? base;
|
|
107
|
+
blit(surface, canvas, () => color, bg);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=canvas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../src/graphics/canvas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Charts of arbitrary (x, y) data.
|
|
3
|
+
*
|
|
4
|
+
* `plot` takes `number[]` and puts one sample per column: the x axis is the
|
|
5
|
+
* array index. That is the right model for a history buffer and the wrong one
|
|
6
|
+
* for everything else -- two series of different lengths silently render at
|
|
7
|
+
* different horizontal scales, a gap in the data is indistinguishable from a
|
|
8
|
+
* shorter series, and there is no way at all to say where on the x axis a
|
|
9
|
+
* point belongs.
|
|
10
|
+
*
|
|
11
|
+
* This takes points and a domain for each axis, so a series is placed rather
|
|
12
|
+
* than appended. `plot` is untouched and still means what it meant.
|
|
13
|
+
*/
|
|
14
|
+
import type { Surface } from "../surface.ts";
|
|
15
|
+
import { type Color } from "../color.ts";
|
|
16
|
+
import { type FillMode } from "./blocks.ts";
|
|
17
|
+
export type Point = [number, number];
|
|
18
|
+
/** How a series is marked: joined, dotted, or dropped to the baseline. */
|
|
19
|
+
export type MarkType = "line" | "scatter" | "bar";
|
|
20
|
+
export interface ChartSeries {
|
|
21
|
+
points: Point[];
|
|
22
|
+
color?: Color;
|
|
23
|
+
label?: string;
|
|
24
|
+
type?: MarkType;
|
|
25
|
+
/** Shade between the line and the baseline. Ignored for scatter. */
|
|
26
|
+
fill?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/** One axis: what it spans and how its numbers read. */
|
|
29
|
+
export interface AxisOptions {
|
|
30
|
+
min?: number;
|
|
31
|
+
max?: number;
|
|
32
|
+
format?: (value: number) => string;
|
|
33
|
+
/** How many labels to place. Default 2 -- the ends. */
|
|
34
|
+
ticks?: number;
|
|
35
|
+
}
|
|
36
|
+
export interface ChartPlotOptions {
|
|
37
|
+
/** braille is sharpest; block and ascii are the graceful degradations. */
|
|
38
|
+
mode?: FillMode;
|
|
39
|
+
x?: AxisOptions;
|
|
40
|
+
y?: AxisOptions;
|
|
41
|
+
background?: Color;
|
|
42
|
+
grid?: boolean;
|
|
43
|
+
gridColor?: Color;
|
|
44
|
+
/** 0-1 opacity of the area fill against the background. */
|
|
45
|
+
fillAlpha?: number;
|
|
46
|
+
/** Where a bar or an area is measured from. Defaults to the y minimum. */
|
|
47
|
+
baseline?: number;
|
|
48
|
+
}
|
|
49
|
+
export interface Domain {
|
|
50
|
+
min: number;
|
|
51
|
+
max: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The span an axis covers, from the caller where they said and from the data
|
|
55
|
+
* where they did not.
|
|
56
|
+
*
|
|
57
|
+
* A domain of zero width cannot be mapped -- every point would land in the same
|
|
58
|
+
* place and a division would blow up -- so a flat series is given a unit of
|
|
59
|
+
* room around itself rather than being collapsed onto one line.
|
|
60
|
+
*/
|
|
61
|
+
export declare function domainOf(series: ChartSeries[], axis: AxisOptions | undefined, which: 0 | 1): Domain;
|
|
62
|
+
/**
|
|
63
|
+
* Draw point series across the whole surface.
|
|
64
|
+
*
|
|
65
|
+
* Points are drawn in the order they are given: a line joins them as they come,
|
|
66
|
+
* which is what lets a chart draw a loop or a path that doubles back. Sorting
|
|
67
|
+
* them would quietly make that impossible.
|
|
68
|
+
*/
|
|
69
|
+
export declare function plotPoints(surface: Surface, series: ChartSeries[], options?: ChartPlotOptions): void;
|
|
70
|
+
//# sourceMappingURL=chart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../src/graphics/chart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,KAAK,EAAO,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,KAAK,QAAQ,EAAiB,MAAM,aAAa,CAAC;AAI3D,MAAM,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErC,0EAA0E;AAC1E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;AAElD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,oEAAoE;IACpE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wDAAwD;AACxD,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,CAAC,CAAC,EAAE,WAAW,CAAC;IAChB,CAAC,CAAC,EAAE,WAAW,CAAC;IAChB,UAAU,CAAC,EAAE,KAAK,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAOD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,WAAW,EAAE,EACrB,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,KAAK,EAAE,CAAC,GAAG,CAAC,GACX,MAAM,CA2BR;AAcD;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,GAAE,gBAAqB,GAC7B,IAAI,CAuDN"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { mix } from "../color.js";
|
|
2
|
+
import { BrailleCanvas } from "./braille.js";
|
|
3
|
+
import { verticalGlyph } from "./blocks.js";
|
|
4
|
+
import { blit } from "./plot.js";
|
|
5
|
+
import { seriesColor } from "../theme.js";
|
|
6
|
+
/** A finite number, or undefined: a caller's bound is data, and data can be NaN. */
|
|
7
|
+
function bound(value) {
|
|
8
|
+
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The span an axis covers, from the caller where they said and from the data
|
|
12
|
+
* where they did not.
|
|
13
|
+
*
|
|
14
|
+
* A domain of zero width cannot be mapped -- every point would land in the same
|
|
15
|
+
* place and a division would blow up -- so a flat series is given a unit of
|
|
16
|
+
* room around itself rather than being collapsed onto one line.
|
|
17
|
+
*/
|
|
18
|
+
export function domainOf(series, axis, which) {
|
|
19
|
+
let min = bound(axis?.min);
|
|
20
|
+
let max = bound(axis?.max);
|
|
21
|
+
if (min === undefined || max === undefined) {
|
|
22
|
+
let lo = Infinity;
|
|
23
|
+
let hi = -Infinity;
|
|
24
|
+
for (const s of series) {
|
|
25
|
+
for (const p of s.points) {
|
|
26
|
+
const v = p?.[which];
|
|
27
|
+
if (typeof v !== "number" || !Number.isFinite(v))
|
|
28
|
+
continue;
|
|
29
|
+
if (v < lo)
|
|
30
|
+
lo = v;
|
|
31
|
+
if (v > hi)
|
|
32
|
+
hi = v;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (!Number.isFinite(lo)) {
|
|
36
|
+
lo = 0;
|
|
37
|
+
hi = 1;
|
|
38
|
+
}
|
|
39
|
+
min = min ?? lo;
|
|
40
|
+
max = max ?? hi;
|
|
41
|
+
}
|
|
42
|
+
if (!(max > min)) {
|
|
43
|
+
// A flat series still has to be drawn somewhere sensible.
|
|
44
|
+
const pad = Math.abs(min) > 0 ? Math.abs(min) * 0.5 : 0.5;
|
|
45
|
+
return { min: min - pad, max: min + pad };
|
|
46
|
+
}
|
|
47
|
+
return { min, max };
|
|
48
|
+
}
|
|
49
|
+
/** Where a value sits in its domain, 0 at the minimum and 1 at the maximum. */
|
|
50
|
+
function ratio(value, domain) {
|
|
51
|
+
return (value - domain.min) / (domain.max - domain.min);
|
|
52
|
+
}
|
|
53
|
+
function drawGrid(surface, color, bg) {
|
|
54
|
+
const { width: w, height: h } = surface;
|
|
55
|
+
for (let y = 0; y < h; y += Math.max(2, Math.floor(h / 4))) {
|
|
56
|
+
for (let x = 0; x < w; x += 2)
|
|
57
|
+
surface.char(x, y, "·", { fg: color, bg });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Draw point series across the whole surface.
|
|
62
|
+
*
|
|
63
|
+
* Points are drawn in the order they are given: a line joins them as they come,
|
|
64
|
+
* which is what lets a chart draw a loop or a path that doubles back. Sorting
|
|
65
|
+
* them would quietly make that impossible.
|
|
66
|
+
*/
|
|
67
|
+
export function plotPoints(surface, series, options = {}) {
|
|
68
|
+
if (surface.empty || series.length === 0)
|
|
69
|
+
return;
|
|
70
|
+
const theme = surface.theme;
|
|
71
|
+
const mode = options.mode ?? "braille";
|
|
72
|
+
const bg = options.background;
|
|
73
|
+
const w = surface.width;
|
|
74
|
+
const h = surface.height;
|
|
75
|
+
const xd = domainOf(series, options.x, 0);
|
|
76
|
+
const yd = domainOf(series, options.y, 1);
|
|
77
|
+
const baseline = bound(options.baseline) ?? yd.min;
|
|
78
|
+
if (options.grid) {
|
|
79
|
+
drawGrid(surface, options.gridColor ?? mix(theme.border, theme.background, 0.4), bg);
|
|
80
|
+
}
|
|
81
|
+
if (mode === "block" || mode === "ascii" || mode === "half") {
|
|
82
|
+
plotCells(surface, series, { mode, xd, yd, baseline, bg, theme });
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const canvas = new BrailleCanvas(w, h);
|
|
86
|
+
const px = canvas.width;
|
|
87
|
+
const py = canvas.height;
|
|
88
|
+
const at = (p) => [
|
|
89
|
+
Math.round(Math.max(0, Math.min(1, ratio(p[0], xd))) * (px - 1)),
|
|
90
|
+
Math.round((1 - Math.max(0, Math.min(1, ratio(p[1], yd)))) * (py - 1)),
|
|
91
|
+
];
|
|
92
|
+
series.forEach((s, si) => {
|
|
93
|
+
canvas.clear();
|
|
94
|
+
const color = s.color ?? seriesColor(theme, si);
|
|
95
|
+
const type = s.type ?? "line";
|
|
96
|
+
const finite = s.points.filter((p) => Array.isArray(p) && Number.isFinite(p[0]) && Number.isFinite(p[1]));
|
|
97
|
+
if (finite.length === 0)
|
|
98
|
+
return;
|
|
99
|
+
const pixels = finite.map(at);
|
|
100
|
+
if (type === "scatter") {
|
|
101
|
+
for (const [x, y] of pixels)
|
|
102
|
+
canvas.pixel(x, y);
|
|
103
|
+
}
|
|
104
|
+
else if (type === "bar") {
|
|
105
|
+
const floor = Math.round((1 - Math.max(0, Math.min(1, ratio(baseline, yd)))) * (py - 1));
|
|
106
|
+
for (const [x, y] of pixels)
|
|
107
|
+
canvas.vline(x, Math.min(y, floor), Math.max(y, floor));
|
|
108
|
+
}
|
|
109
|
+
else if (pixels.length === 1) {
|
|
110
|
+
canvas.pixel(pixels[0][0], pixels[0][1]);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
canvas.polyline(pixels);
|
|
114
|
+
}
|
|
115
|
+
if (s.fill && type !== "scatter") {
|
|
116
|
+
fillUnder(surface, finite, { xd, yd, baseline, color, bg, alpha: options.fillAlpha ?? 0.5 });
|
|
117
|
+
}
|
|
118
|
+
blit(surface, canvas, () => color, bg);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* The area between a series and its baseline, in block elements.
|
|
123
|
+
*
|
|
124
|
+
* Braille would give eight scattered dots per cell, which reads as noise where
|
|
125
|
+
* an area should read as an area. The line itself stays Braille, so it keeps
|
|
126
|
+
* the sub-cell resolution.
|
|
127
|
+
*
|
|
128
|
+
* The height of each column is interpolated along the line rather than sampled
|
|
129
|
+
* from the points that happen to land in it. Sampling leaves a gap wherever a
|
|
130
|
+
* column has no point of its own, which with arbitrary x values is most of
|
|
131
|
+
* them -- the area comes out striped instead of solid.
|
|
132
|
+
*/
|
|
133
|
+
function fillUnder(surface, points, o) {
|
|
134
|
+
const w = surface.width;
|
|
135
|
+
const h = surface.height;
|
|
136
|
+
if (w <= 0 || h <= 0 || points.length === 0)
|
|
137
|
+
return;
|
|
138
|
+
const base = o.bg ?? surface.theme.background;
|
|
139
|
+
const floor = Math.max(0, Math.min(1, ratio(o.baseline, o.yd)));
|
|
140
|
+
// Column index of a domain x, as a fraction, so a segment can be walked
|
|
141
|
+
// across the columns it actually spans.
|
|
142
|
+
const column = (x) => ratio(x, o.xd) * (w - 1);
|
|
143
|
+
const tops = new Array(w).fill(Number.NaN);
|
|
144
|
+
const record = (col, value) => {
|
|
145
|
+
if (col < 0 || col >= w)
|
|
146
|
+
return;
|
|
147
|
+
// A path that doubles back covers a column twice; the outer edge is the
|
|
148
|
+
// one that bounds the area.
|
|
149
|
+
const previous = tops[col];
|
|
150
|
+
const away = Math.abs(value - floor);
|
|
151
|
+
if (Number.isNaN(previous) || away > Math.abs(previous - floor))
|
|
152
|
+
tops[col] = value;
|
|
153
|
+
};
|
|
154
|
+
if (points.length === 1) {
|
|
155
|
+
record(Math.round(column(points[0][0])), Math.max(0, Math.min(1, ratio(points[0][1], o.yd))));
|
|
156
|
+
}
|
|
157
|
+
for (let i = 0; i + 1 < points.length; i++) {
|
|
158
|
+
const [x0, y0] = points[i];
|
|
159
|
+
const [x1, y1] = points[i + 1];
|
|
160
|
+
const c0 = column(x0);
|
|
161
|
+
const c1 = column(x1);
|
|
162
|
+
const from = Math.max(0, Math.floor(Math.min(c0, c1)));
|
|
163
|
+
const to = Math.min(w - 1, Math.ceil(Math.max(c0, c1)));
|
|
164
|
+
for (let col = from; col <= to; col++) {
|
|
165
|
+
const t = c1 === c0 ? 0 : (col - c0) / (c1 - c0);
|
|
166
|
+
if (t < -0.5 || t > 1.5)
|
|
167
|
+
continue;
|
|
168
|
+
const y = y0 + (y1 - y0) * Math.max(0, Math.min(1, t));
|
|
169
|
+
record(col, Math.max(0, Math.min(1, ratio(y, o.yd))));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
for (let x = 0; x < w; x++) {
|
|
173
|
+
const top = tops[x];
|
|
174
|
+
if (Number.isNaN(top))
|
|
175
|
+
continue;
|
|
176
|
+
const from01 = Math.min(floor, top);
|
|
177
|
+
const filled = (Math.max(floor, top) - from01) * h;
|
|
178
|
+
const bottom = Math.floor(from01 * h);
|
|
179
|
+
const full = Math.floor(filled);
|
|
180
|
+
for (let k = 0; k < full && k < h; k++) {
|
|
181
|
+
const row = h - 1 - bottom - k;
|
|
182
|
+
if (row < 0 || row >= h)
|
|
183
|
+
continue;
|
|
184
|
+
const depth = h <= 1 ? 0 : row / (h - 1);
|
|
185
|
+
surface.char(x, row, "█", { fg: mix(base, o.color, o.alpha * (1 - depth * 0.3)), bg: o.bg });
|
|
186
|
+
}
|
|
187
|
+
if (full < h) {
|
|
188
|
+
const glyph = verticalGlyph(filled - full, "block");
|
|
189
|
+
const row = h - 1 - bottom - full;
|
|
190
|
+
if (glyph !== " " && row >= 0 && row < h) {
|
|
191
|
+
const depth = h <= 1 ? 0 : row / (h - 1);
|
|
192
|
+
surface.char(x, row, glyph, {
|
|
193
|
+
fg: mix(base, o.color, o.alpha * (1 - depth * 0.3) + 0.12),
|
|
194
|
+
bg: o.bg,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* The block and ascii degradations: one column per cell, tallest point wins.
|
|
202
|
+
*
|
|
203
|
+
* A scatter keeps its dots rather than growing columns, because a scatter that
|
|
204
|
+
* fills to the baseline is a bar chart wearing the wrong name.
|
|
205
|
+
*/
|
|
206
|
+
function plotCells(surface, series, o) {
|
|
207
|
+
const w = surface.width;
|
|
208
|
+
const h = surface.height;
|
|
209
|
+
const floorRatio = Math.max(0, Math.min(1, ratio(o.baseline, o.yd)));
|
|
210
|
+
series.forEach((s, si) => {
|
|
211
|
+
const color = s.color ?? seriesColor(o.theme, si);
|
|
212
|
+
const type = s.type ?? "line";
|
|
213
|
+
// Highest value per column, so a column shows the peak that fell in it
|
|
214
|
+
// rather than whichever point happened to be last.
|
|
215
|
+
const tops = new Array(w).fill(Number.NaN);
|
|
216
|
+
for (const p of s.points) {
|
|
217
|
+
if (!Array.isArray(p) || !Number.isFinite(p[0]) || !Number.isFinite(p[1]))
|
|
218
|
+
continue;
|
|
219
|
+
const col = Math.min(w - 1, Math.max(0, Math.round(ratio(p[0], o.xd) * (w - 1))));
|
|
220
|
+
const value = Math.max(0, Math.min(1, ratio(p[1], o.yd)));
|
|
221
|
+
if (Number.isNaN(tops[col]) || value > tops[col])
|
|
222
|
+
tops[col] = value;
|
|
223
|
+
}
|
|
224
|
+
for (let x = 0; x < w; x++) {
|
|
225
|
+
const top = tops[x];
|
|
226
|
+
if (Number.isNaN(top))
|
|
227
|
+
continue;
|
|
228
|
+
if (type === "scatter") {
|
|
229
|
+
const row = h - 1 - Math.min(h - 1, Math.floor(top * h));
|
|
230
|
+
surface.char(x, row, o.mode === "ascii" ? "*" : "•", { fg: color, bg: o.bg });
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
const from = Math.min(floorRatio, top) * h;
|
|
234
|
+
const filled = (Math.max(floorRatio, top) - Math.min(floorRatio, top)) * h;
|
|
235
|
+
const full = Math.floor(filled);
|
|
236
|
+
for (let k = 0; k < full; k++) {
|
|
237
|
+
const row = h - 1 - Math.floor(from) - k;
|
|
238
|
+
if (row >= 0 && row < h)
|
|
239
|
+
surface.char(x, row, "█", { fg: color, bg: o.bg });
|
|
240
|
+
}
|
|
241
|
+
const glyph = verticalGlyph(filled - full, o.mode);
|
|
242
|
+
const row = h - 1 - Math.floor(from) - full;
|
|
243
|
+
if (glyph !== " " && row >= 0 && row < h) {
|
|
244
|
+
surface.char(x, row, glyph, { fg: color, bg: o.bg });
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=chart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart.js","sourceRoot":"","sources":["../../src/graphics/chart.ts"],"names":[],"mappings":"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"}
|