@geometra/renderer-terminal 0.2.0 → 0.3.1
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 +26 -0
- package/dist/renderer.d.ts +2 -0
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +62 -37
- package/dist/renderer.js.map +1 -1
- package/package.json +2 -2
package/README.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# @geometra/renderer-terminal
|
|
2
|
+
|
|
3
|
+
ANSI terminal renderer for Geometra. Renders UI element trees directly to the terminal using ANSI escape sequences.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @geometra/renderer-terminal
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Key Export
|
|
12
|
+
|
|
13
|
+
- `TerminalRenderer` -- renders Geometra element trees to stdout
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { TerminalRenderer } from '@geometra/renderer-terminal'
|
|
19
|
+
|
|
20
|
+
const renderer = new TerminalRenderer(process.stdout)
|
|
21
|
+
renderer.render(tree, layout)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Links
|
|
25
|
+
|
|
26
|
+
- [Main repo](https://github.com/AiGeekz/geometra)
|
package/dist/renderer.d.ts
CHANGED
|
@@ -13,11 +13,13 @@ export declare class TerminalRenderer implements Renderer {
|
|
|
13
13
|
private height;
|
|
14
14
|
private output;
|
|
15
15
|
private grid;
|
|
16
|
+
private clipStack;
|
|
16
17
|
constructor(options?: TerminalRendererOptions);
|
|
17
18
|
private createGrid;
|
|
18
19
|
render(layout: ComputedLayout, tree: UIElement): void;
|
|
19
20
|
private paintNode;
|
|
20
21
|
private paintBox;
|
|
22
|
+
private paintImagePlaceholder;
|
|
21
23
|
private paintText;
|
|
22
24
|
private setCell;
|
|
23
25
|
destroy(): void;
|
package/dist/renderer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAyC,MAAM,gBAAgB,CAAA;AAEhG,MAAM,WAAW,uBAAuB;IACtC,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;CAC/B;AA6BD,qBAAa,gBAAiB,YAAW,QAAQ;IAC/C,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,SAAS,CAAiB;gBAEtB,OAAO,GAAE,uBAA4B;IAOjD,OAAO,CAAC,UAAU;IAYlB,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAqBrD,OAAO,CAAC,SAAS;IA+CjB,OAAO,CAAC,QAAQ;IAgChB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,OAAO;IAcf,OAAO,IAAI,IAAI;CAGhB"}
|
package/dist/renderer.js
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
// ANSI escape helpers
|
|
2
1
|
const ESC = '\x1b[';
|
|
3
2
|
const RESET = `${ESC}0m`;
|
|
4
3
|
const CLEAR = `${ESC}2J${ESC}H`;
|
|
5
4
|
const HIDE_CURSOR = `${ESC}?25l`;
|
|
6
5
|
const SHOW_CURSOR = `${ESC}?25h`;
|
|
7
6
|
const moveTo = (x, y) => `${ESC}${y + 1};${x + 1}H`;
|
|
8
|
-
/** Map CSS hex colors to closest ANSI 256 color. */
|
|
9
7
|
function hexToAnsi256(hex) {
|
|
10
8
|
const r = parseInt(hex.slice(1, 3), 16);
|
|
11
9
|
const g = parseInt(hex.slice(3, 5), 16);
|
|
12
10
|
const b = parseInt(hex.slice(5, 7), 16);
|
|
13
|
-
// Grayscale ramp
|
|
14
11
|
if (r === g && g === b) {
|
|
15
12
|
if (r < 8)
|
|
16
13
|
return 16;
|
|
@@ -18,22 +15,16 @@ function hexToAnsi256(hex) {
|
|
|
18
15
|
return 231;
|
|
19
16
|
return Math.round((r - 8) / 247 * 24) + 232;
|
|
20
17
|
}
|
|
21
|
-
return
|
|
22
|
-
36 * Math.round(r / 255 * 5) +
|
|
23
|
-
6 * Math.round(g / 255 * 5) +
|
|
24
|
-
Math.round(b / 255 * 5));
|
|
25
|
-
}
|
|
26
|
-
function bg256(color) {
|
|
27
|
-
return `${ESC}48;5;${hexToAnsi256(color)}m`;
|
|
28
|
-
}
|
|
29
|
-
function fg256(color) {
|
|
30
|
-
return `${ESC}38;5;${hexToAnsi256(color)}m`;
|
|
18
|
+
return 16 + 36 * Math.round(r / 255 * 5) + 6 * Math.round(g / 255 * 5) + Math.round(b / 255 * 5);
|
|
31
19
|
}
|
|
20
|
+
function bg256(color) { return `${ESC}48;5;${hexToAnsi256(color)}m`; }
|
|
21
|
+
function fg256(color) { return `${ESC}38;5;${hexToAnsi256(color)}m`; }
|
|
32
22
|
export class TerminalRenderer {
|
|
33
23
|
width;
|
|
34
24
|
height;
|
|
35
25
|
output;
|
|
36
26
|
grid;
|
|
27
|
+
clipStack = [];
|
|
37
28
|
constructor(options = {}) {
|
|
38
29
|
this.width = options.width ?? process.stdout.columns ?? 80;
|
|
39
30
|
this.height = options.height ?? process.stdout.rows ?? 24;
|
|
@@ -52,17 +43,13 @@ export class TerminalRenderer {
|
|
|
52
43
|
return grid;
|
|
53
44
|
}
|
|
54
45
|
render(layout, tree) {
|
|
55
|
-
// Clear grid
|
|
56
46
|
this.grid = this.createGrid();
|
|
57
|
-
|
|
58
|
-
// because terminal characters are ~2x taller than wide
|
|
47
|
+
this.clipStack = [];
|
|
59
48
|
this.paintNode(tree, layout, 0, 0);
|
|
60
|
-
// Flush to terminal
|
|
61
49
|
let buf = HIDE_CURSOR + CLEAR;
|
|
62
50
|
for (let y = 0; y < this.height; y++) {
|
|
63
51
|
buf += moveTo(0, y);
|
|
64
|
-
let lastFg = '';
|
|
65
|
-
let lastBg = '';
|
|
52
|
+
let lastFg = '', lastBg = '';
|
|
66
53
|
for (let x = 0; x < this.width; x++) {
|
|
67
54
|
const cell = this.grid[y][x];
|
|
68
55
|
if (cell.bg !== lastBg) {
|
|
@@ -81,21 +68,42 @@ export class TerminalRenderer {
|
|
|
81
68
|
this.output.write(buf);
|
|
82
69
|
}
|
|
83
70
|
paintNode(element, layout, offsetX, offsetY) {
|
|
84
|
-
|
|
85
|
-
// We use a simple 1:1 horizontal, 0.5:1 vertical scale
|
|
86
|
-
const scale = 0.15; // ~1px = 0.15 columns, adjust per use case
|
|
71
|
+
const scale = 0.15;
|
|
87
72
|
const x = Math.round((offsetX + layout.x) * scale);
|
|
88
73
|
const y = Math.round((offsetY + layout.y) * scale * 0.5);
|
|
89
74
|
const w = Math.max(1, Math.round(layout.width * scale));
|
|
90
75
|
const h = Math.max(1, Math.round(layout.height * scale * 0.5));
|
|
91
76
|
if (element.kind === 'box') {
|
|
92
77
|
this.paintBox(element, x, y, w, h);
|
|
93
|
-
|
|
78
|
+
const { overflow, scrollX, scrollY } = element.props;
|
|
79
|
+
const shouldClip = overflow === 'hidden' || overflow === 'scroll';
|
|
80
|
+
if (shouldClip) {
|
|
81
|
+
this.clipStack.push({ x, y, w, h });
|
|
82
|
+
}
|
|
83
|
+
const childOffsetX = offsetX + layout.x - (scrollX ?? 0);
|
|
84
|
+
const childOffsetY = offsetY + layout.y - (scrollY ?? 0);
|
|
85
|
+
// Sort children by zIndex
|
|
86
|
+
const indices = element.children.map((_, i) => i);
|
|
87
|
+
const hasZIndex = element.children.some(c => c.props.zIndex !== undefined);
|
|
88
|
+
if (hasZIndex) {
|
|
89
|
+
indices.sort((a, b) => {
|
|
90
|
+
const zA = element.children[a].props.zIndex ?? 0;
|
|
91
|
+
const zB = element.children[b].props.zIndex ?? 0;
|
|
92
|
+
return zA - zB;
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
for (const i of indices) {
|
|
94
96
|
const childLayout = layout.children[i];
|
|
95
97
|
if (childLayout) {
|
|
96
|
-
this.paintNode(element.children[i], childLayout,
|
|
98
|
+
this.paintNode(element.children[i], childLayout, childOffsetX, childOffsetY);
|
|
97
99
|
}
|
|
98
100
|
}
|
|
101
|
+
if (shouldClip) {
|
|
102
|
+
this.clipStack.pop();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else if (element.kind === 'image') {
|
|
106
|
+
this.paintImagePlaceholder(element, x, y, w, h);
|
|
99
107
|
}
|
|
100
108
|
else {
|
|
101
109
|
this.paintText(element, x, y, w, h);
|
|
@@ -103,38 +111,50 @@ export class TerminalRenderer {
|
|
|
103
111
|
}
|
|
104
112
|
paintBox(element, x, y, w, h) {
|
|
105
113
|
const bg = element.props.backgroundColor;
|
|
106
|
-
|
|
114
|
+
// Use first gradient stop color as fallback
|
|
115
|
+
const gradientBg = element.props.gradient?.stops[0]?.color;
|
|
116
|
+
const fillColor = bg ?? gradientBg;
|
|
117
|
+
if (!fillColor)
|
|
107
118
|
return;
|
|
108
119
|
for (let dy = 0; dy < h; dy++) {
|
|
109
120
|
for (let dx = 0; dx < w; dx++) {
|
|
110
|
-
this.setCell(x + dx, y + dy, ' ', '',
|
|
121
|
+
this.setCell(x + dx, y + dy, ' ', '', fillColor);
|
|
111
122
|
}
|
|
112
123
|
}
|
|
113
|
-
// Draw border using box-drawing characters
|
|
114
124
|
if (element.props.borderColor) {
|
|
115
125
|
const bc = element.props.borderColor;
|
|
116
126
|
if (w >= 2 && h >= 2) {
|
|
117
|
-
this.setCell(x, y, '\u250c', bc,
|
|
118
|
-
this.setCell(x + w - 1, y, '\u2510', bc,
|
|
119
|
-
this.setCell(x, y + h - 1, '\u2514', bc,
|
|
120
|
-
this.setCell(x + w - 1, y + h - 1, '\u2518', bc,
|
|
127
|
+
this.setCell(x, y, '\u250c', bc, fillColor);
|
|
128
|
+
this.setCell(x + w - 1, y, '\u2510', bc, fillColor);
|
|
129
|
+
this.setCell(x, y + h - 1, '\u2514', bc, fillColor);
|
|
130
|
+
this.setCell(x + w - 1, y + h - 1, '\u2518', bc, fillColor);
|
|
121
131
|
for (let dx = 1; dx < w - 1; dx++) {
|
|
122
|
-
this.setCell(x + dx, y, '\u2500', bc,
|
|
123
|
-
this.setCell(x + dx, y + h - 1, '\u2500', bc,
|
|
132
|
+
this.setCell(x + dx, y, '\u2500', bc, fillColor);
|
|
133
|
+
this.setCell(x + dx, y + h - 1, '\u2500', bc, fillColor);
|
|
124
134
|
}
|
|
125
135
|
for (let dy = 1; dy < h - 1; dy++) {
|
|
126
|
-
this.setCell(x, y + dy, '\u2502', bc,
|
|
127
|
-
this.setCell(x + w - 1, y + dy, '\u2502', bc,
|
|
136
|
+
this.setCell(x, y + dy, '\u2502', bc, fillColor);
|
|
137
|
+
this.setCell(x + w - 1, y + dy, '\u2502', bc, fillColor);
|
|
128
138
|
}
|
|
129
139
|
}
|
|
130
140
|
}
|
|
131
141
|
}
|
|
142
|
+
paintImagePlaceholder(_element, x, y, w, h) {
|
|
143
|
+
const label = '[IMG]';
|
|
144
|
+
for (let dy = 0; dy < h; dy++) {
|
|
145
|
+
for (let dx = 0; dx < w; dx++) {
|
|
146
|
+
this.setCell(x + dx, y + dy, ' ', '', '#27272a');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
for (let i = 0; i < label.length && i < w; i++) {
|
|
150
|
+
this.setCell(x + i, y, label[i], '#a1a1aa', '#27272a');
|
|
151
|
+
}
|
|
152
|
+
}
|
|
132
153
|
paintText(element, x, y, w, _h) {
|
|
133
154
|
const { text, color, backgroundColor } = element.props;
|
|
134
155
|
const fg = color ?? '#ffffff';
|
|
135
156
|
const bg = backgroundColor ?? '';
|
|
136
|
-
let col = 0;
|
|
137
|
-
let row = 0;
|
|
157
|
+
let col = 0, row = 0;
|
|
138
158
|
for (const ch of text) {
|
|
139
159
|
if (ch === '\n') {
|
|
140
160
|
row++;
|
|
@@ -152,6 +172,11 @@ export class TerminalRenderer {
|
|
|
152
172
|
setCell(x, y, char, fg, bg) {
|
|
153
173
|
if (x < 0 || x >= this.width || y < 0 || y >= this.height)
|
|
154
174
|
return;
|
|
175
|
+
// Check clip stack
|
|
176
|
+
for (const clip of this.clipStack) {
|
|
177
|
+
if (x < clip.x || x >= clip.x + clip.w || y < clip.y || y >= clip.y + clip.h)
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
155
180
|
const cell = this.grid[y][x];
|
|
156
181
|
cell.char = char;
|
|
157
182
|
if (fg)
|
package/dist/renderer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAYA,
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geometra/renderer-terminal",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Terminal/TUI renderer for Geometra — the singularity frontend framework",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"check": "tsc --noEmit"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@geometra/core": "^0.
|
|
39
|
+
"@geometra/core": "^0.3.1"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/node": "^22.0.0"
|