@envsec/tui 1.0.0-beta.13
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/LICENSE +21 -0
- package/dist/components.d.ts +23 -0
- package/dist/components.d.ts.map +1 -0
- package/dist/components.js +128 -0
- package/dist/components.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/terminal.d.ts +61 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +193 -0
- package/dist/terminal.js.map +1 -0
- package/dist/views.d.ts +8 -0
- package/dist/views.d.ts.map +1 -0
- package/dist/views.js +873 -0
- package/dist/views.js.map +1 -0
- package/package.json +54 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 David Nussio
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reusable TUI components: menus, lists, status bar, etc.
|
|
3
|
+
*/
|
|
4
|
+
export declare const renderHeader: (context: string | null, title: string, startRow?: number) => number;
|
|
5
|
+
export interface MenuItem {
|
|
6
|
+
hint?: string;
|
|
7
|
+
icon?: string;
|
|
8
|
+
key: string;
|
|
9
|
+
label: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const renderMenu: (items: MenuItem[], selected: number, startRow: number, maxVisible?: number) => number;
|
|
12
|
+
export interface TableColumn {
|
|
13
|
+
align?: "left" | "right";
|
|
14
|
+
header: string;
|
|
15
|
+
width: number;
|
|
16
|
+
}
|
|
17
|
+
export declare const renderTable: (columns: TableColumn[], rows: string[][], selected: number, startRow: number, maxVisible?: number) => number;
|
|
18
|
+
export declare const renderFooter: (hints: string[], row?: number) => void;
|
|
19
|
+
export declare const renderMessage: (row: number, msg: string, type?: "success" | "error" | "info" | "warning") => void;
|
|
20
|
+
export declare const enterTUI: () => void;
|
|
21
|
+
export declare const exitTUI: () => void;
|
|
22
|
+
export declare const renderEmpty: (row: number, message: string) => number;
|
|
23
|
+
//# sourceMappingURL=components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,eAAO,MAAM,YAAY,GACvB,SAAS,MAAM,GAAG,IAAI,EACtB,OAAO,MAAM,EACb,iBAAY,KACX,MAOF,CAAC;AAIF,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,UAAU,GACrB,OAAO,QAAQ,EAAE,EACjB,UAAU,MAAM,EAChB,UAAU,MAAM,EAChB,aAAa,MAAM,KAClB,MAkCF,CAAC;AAIF,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AASD,eAAO,MAAM,WAAW,GACtB,SAAS,WAAW,EAAE,EACtB,MAAM,MAAM,EAAE,EAAE,EAChB,UAAU,MAAM,EAChB,UAAU,MAAM,EAChB,aAAa,MAAM,KAClB,MAiCF,CAAC;AAuBF,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,EAAE,EAAE,MAAM,MAAM,KAAG,IAK5D,CAAC;AAIF,eAAO,MAAM,aAAa,GACxB,KAAK,MAAM,EACX,KAAK,MAAM,EACX,OAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,SAAkB,KACtD,IAQF,CAAC;AAIF,eAAO,MAAM,QAAQ,QAAO,IAI3B,CAAC;AAEF,eAAO,MAAM,OAAO,QAAO,IAG1B,CAAC;AAIF,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,EAAE,SAAS,MAAM,KAAG,MAK1D,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reusable TUI components: menus, lists, status bar, etc.
|
|
3
|
+
*/
|
|
4
|
+
import { icons } from "@envsec/core";
|
|
5
|
+
import { c, cursor, getSize, screen, write, writeLine } from "./terminal.js";
|
|
6
|
+
// ── Header ──────────────────────────────────────────────────────────
|
|
7
|
+
export const renderHeader = (context, title, startRow = 1) => {
|
|
8
|
+
const { cols } = getSize();
|
|
9
|
+
const ctx = context ? c.cyan(`[${context}]`) : c.dim("[no context]");
|
|
10
|
+
const line = `${c.bold(c.green(`${icons.lock} envsec`))} ${c.dim("›")} ${c.bold(title)} ${ctx}`;
|
|
11
|
+
writeLine(startRow, ` ${line}`);
|
|
12
|
+
writeLine(startRow + 1, ` ${c.dim("─".repeat(Math.min(cols - 2, 60)))}`);
|
|
13
|
+
return startRow + 2;
|
|
14
|
+
};
|
|
15
|
+
export const renderMenu = (items, selected, startRow, maxVisible) => {
|
|
16
|
+
const visible = maxVisible ?? items.length;
|
|
17
|
+
const { rows } = getSize();
|
|
18
|
+
const safeVisible = Math.min(visible, rows - startRow - 3);
|
|
19
|
+
let offset = 0;
|
|
20
|
+
if (selected >= offset + safeVisible) {
|
|
21
|
+
offset = selected - safeVisible + 1;
|
|
22
|
+
}
|
|
23
|
+
if (selected < offset) {
|
|
24
|
+
offset = selected;
|
|
25
|
+
}
|
|
26
|
+
let row = startRow;
|
|
27
|
+
for (let i = offset; i < Math.min(items.length, offset + safeVisible); i++) {
|
|
28
|
+
const item = items[i];
|
|
29
|
+
if (!item) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const isSelected = i === selected;
|
|
33
|
+
const prefix = isSelected ? c.cyan("❯") : " ";
|
|
34
|
+
const icon = item.icon ?? "";
|
|
35
|
+
const label = isSelected ? c.bold(c.cyan(item.label)) : item.label;
|
|
36
|
+
const hint = item.hint ? ` ${c.dim(item.hint)}` : "";
|
|
37
|
+
writeLine(row, ` ${prefix} ${icon}${icon ? " " : ""}${label}${hint}`);
|
|
38
|
+
row++;
|
|
39
|
+
}
|
|
40
|
+
// Clear remaining lines
|
|
41
|
+
for (let r = row; r < startRow + safeVisible; r++) {
|
|
42
|
+
writeLine(r, "");
|
|
43
|
+
}
|
|
44
|
+
return row;
|
|
45
|
+
};
|
|
46
|
+
const calcOffset = (selected, visible) => {
|
|
47
|
+
if (selected >= visible) {
|
|
48
|
+
return selected - visible + 1;
|
|
49
|
+
}
|
|
50
|
+
return 0;
|
|
51
|
+
};
|
|
52
|
+
export const renderTable = (columns, rows, selected, startRow, maxVisible) => {
|
|
53
|
+
const { rows: termRows, cols } = getSize();
|
|
54
|
+
const visible = Math.min(maxVisible ?? rows.length, termRows - startRow - 3);
|
|
55
|
+
// Header
|
|
56
|
+
let headerLine = " ";
|
|
57
|
+
for (const col of columns) {
|
|
58
|
+
const text = col.header.padEnd(col.width).slice(0, col.width);
|
|
59
|
+
headerLine += `${c.bold(c.dim(text))} `;
|
|
60
|
+
}
|
|
61
|
+
writeLine(startRow, headerLine);
|
|
62
|
+
writeLine(startRow + 1, ` ${c.dim("─".repeat(Math.min(cols - 2, 70)))}`);
|
|
63
|
+
const offset = calcOffset(selected, visible);
|
|
64
|
+
let row = startRow + 2;
|
|
65
|
+
for (let i = offset; i < Math.min(rows.length, offset + visible); i++) {
|
|
66
|
+
const data = rows[i];
|
|
67
|
+
if (!data) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const isSelected = i === selected;
|
|
71
|
+
const prefix = isSelected ? c.cyan("❯") : " ";
|
|
72
|
+
const line = formatTableRow(data, columns, isSelected);
|
|
73
|
+
writeLine(row, ` ${prefix} ${line}`);
|
|
74
|
+
row++;
|
|
75
|
+
}
|
|
76
|
+
for (let r = row; r < startRow + 2 + visible; r++) {
|
|
77
|
+
writeLine(r, "");
|
|
78
|
+
}
|
|
79
|
+
return row;
|
|
80
|
+
};
|
|
81
|
+
const formatTableRow = (data, columns, isSelected) => {
|
|
82
|
+
let line = "";
|
|
83
|
+
for (let j = 0; j < columns.length; j++) {
|
|
84
|
+
const col = columns[j];
|
|
85
|
+
if (!col) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const cell = (data[j] ?? "").slice(0, col.width);
|
|
89
|
+
const padded = col.align === "right" ? cell.padStart(col.width) : cell.padEnd(col.width);
|
|
90
|
+
line += `${isSelected ? c.cyan(padded) : padded} `;
|
|
91
|
+
}
|
|
92
|
+
return line;
|
|
93
|
+
};
|
|
94
|
+
// ── Status bar / footer ─────────────────────────────────────────────
|
|
95
|
+
export const renderFooter = (hints, row) => {
|
|
96
|
+
const { rows } = getSize();
|
|
97
|
+
const r = row ?? rows;
|
|
98
|
+
const text = hints.join(c.dim(" │ "));
|
|
99
|
+
writeLine(r, ` ${c.dim(text)}`);
|
|
100
|
+
};
|
|
101
|
+
// ── Message / toast ─────────────────────────────────────────────────
|
|
102
|
+
export const renderMessage = (row, msg, type = "info") => {
|
|
103
|
+
const iconMap = {
|
|
104
|
+
success: icons.success,
|
|
105
|
+
error: icons.error,
|
|
106
|
+
warning: icons.warning,
|
|
107
|
+
info: icons.info,
|
|
108
|
+
};
|
|
109
|
+
writeLine(row, ` ${iconMap[type]} ${msg}`);
|
|
110
|
+
};
|
|
111
|
+
// ── Screen management ───────────────────────────────────────────────
|
|
112
|
+
export const enterTUI = () => {
|
|
113
|
+
write(screen.altBuffer);
|
|
114
|
+
write(cursor.hide);
|
|
115
|
+
write(screen.clear);
|
|
116
|
+
};
|
|
117
|
+
export const exitTUI = () => {
|
|
118
|
+
write(cursor.show);
|
|
119
|
+
write(screen.mainBuffer);
|
|
120
|
+
};
|
|
121
|
+
// ── Empty state ─────────────────────────────────────────────────────
|
|
122
|
+
export const renderEmpty = (row, message) => {
|
|
123
|
+
writeLine(row, "");
|
|
124
|
+
writeLine(row + 1, ` ${icons.empty} ${c.dim(message)}`);
|
|
125
|
+
writeLine(row + 2, "");
|
|
126
|
+
return row + 3;
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @envsec/tui — Interactive terminal UI for envsec secrets management.
|
|
3
|
+
*/
|
|
4
|
+
import type { SecretStore } from "@envsec/core";
|
|
5
|
+
import { Effect } from "effect";
|
|
6
|
+
export declare const runTUI: (context: string | null) => Effect.Effect<void, never, SecretStore>;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,eAAO,MAAM,MAAM,GACjB,SAAS,MAAM,GAAG,IAAI,KACrB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAWrC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @envsec/tui — Interactive terminal UI for envsec secrets management.
|
|
3
|
+
*/
|
|
4
|
+
import { Effect } from "effect";
|
|
5
|
+
import { enterTUI, exitTUI } from "./components.js";
|
|
6
|
+
import { mainMenuView } from "./views.js";
|
|
7
|
+
export const runTUI = (context) => Effect.gen(function* () {
|
|
8
|
+
enterTUI();
|
|
9
|
+
yield* mainMenuView(context).pipe(Effect.ensuring(Effect.sync(() => {
|
|
10
|
+
exitTUI();
|
|
11
|
+
})));
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,OAAsB,EACmB,EAAE,CAC3C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,QAAQ,EAAE,CAAC;IAEX,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAC/B,MAAM,CAAC,QAAQ,CACb,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACf,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CACH,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Low-level terminal helpers for the interactive TUI.
|
|
3
|
+
* Raw ANSI escape sequences — zero dependencies.
|
|
4
|
+
*/
|
|
5
|
+
import { Effect } from "effect";
|
|
6
|
+
export declare const ESC = "\u001B";
|
|
7
|
+
export declare const CSI = "\u001B[";
|
|
8
|
+
export declare const cursor: {
|
|
9
|
+
hide: string;
|
|
10
|
+
show: string;
|
|
11
|
+
moveTo: (row: number, col: number) => string;
|
|
12
|
+
moveUp: (n?: number) => string;
|
|
13
|
+
moveDown: (n?: number) => string;
|
|
14
|
+
saveCursor: string;
|
|
15
|
+
restoreCursor: string;
|
|
16
|
+
};
|
|
17
|
+
export declare const screen: {
|
|
18
|
+
clear: string;
|
|
19
|
+
clearLine: string;
|
|
20
|
+
clearDown: string;
|
|
21
|
+
altBuffer: string;
|
|
22
|
+
mainBuffer: string;
|
|
23
|
+
};
|
|
24
|
+
export declare const c: {
|
|
25
|
+
bold: (text: string) => string;
|
|
26
|
+
dim: (text: string) => string;
|
|
27
|
+
italic: (text: string) => string;
|
|
28
|
+
underline: (text: string) => string;
|
|
29
|
+
inverse: (text: string) => string;
|
|
30
|
+
green: (text: string) => string;
|
|
31
|
+
red: (text: string) => string;
|
|
32
|
+
yellow: (text: string) => string;
|
|
33
|
+
blue: (text: string) => string;
|
|
34
|
+
cyan: (text: string) => string;
|
|
35
|
+
magenta: (text: string) => string;
|
|
36
|
+
white: (text: string) => string;
|
|
37
|
+
gray: (text: string) => string;
|
|
38
|
+
bgBlue: (text: string) => string;
|
|
39
|
+
bgGreen: (text: string) => string;
|
|
40
|
+
bgYellow: (text: string) => string;
|
|
41
|
+
bgRed: (text: string) => string;
|
|
42
|
+
bgCyan: (text: string) => string;
|
|
43
|
+
bgWhite: (text: string) => string;
|
|
44
|
+
};
|
|
45
|
+
export declare const getSize: () => {
|
|
46
|
+
rows: number;
|
|
47
|
+
cols: number;
|
|
48
|
+
};
|
|
49
|
+
export declare const write: (s: string) => void;
|
|
50
|
+
export declare const writeLine: (row: number, text: string) => void;
|
|
51
|
+
export interface KeyPress {
|
|
52
|
+
ctrl: boolean;
|
|
53
|
+
name: string;
|
|
54
|
+
raw: string;
|
|
55
|
+
shift: boolean;
|
|
56
|
+
}
|
|
57
|
+
export declare const readKey: Effect.Effect<KeyPress>;
|
|
58
|
+
export declare const readLine: (prompt: string, opts?: {
|
|
59
|
+
mask?: boolean;
|
|
60
|
+
}) => Effect.Effect<string | null>;
|
|
61
|
+
//# sourceMappingURL=terminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,eAAO,MAAM,GAAG,WAAS,CAAC;AAC1B,eAAO,MAAM,GAAG,YAAY,CAAC;AAE7B,eAAO,MAAM,MAAM;;;kBAGH,MAAM,OAAO,MAAM;;;;;CAKlC,CAAC;AAEF,eAAO,MAAM,MAAM;;;;;;CAMlB,CAAC;AAiBF,eAAO,MAAM,CAAC;iBAHwB,MAAM;gBAAN,MAAM;mBAAN,MAAM;sBAAN,MAAM;oBAAN,MAAM;kBAAN,MAAM;gBAAN,MAAM;mBAAN,MAAM;iBAAN,MAAM;iBAAN,MAAM;oBAAN,MAAM;kBAAN,MAAM;iBAAN,MAAM;mBAAN,MAAM;oBAAN,MAAM;qBAAN,MAAM;kBAAN,MAAM;mBAAN,MAAM;oBAAN,MAAM;CAuB3C,CAAC;AAIF,eAAO,MAAM,OAAO,QAAO;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAGrD,CAAC;AAIH,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,KAAG,IAEjC,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,MAAM,MAAM,KAAG,IAErD,CAAC;AAIF,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;CAChB;AAiDD,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAmB3C,CAAC;AAIF,eAAO,MAAM,QAAQ,GACnB,QAAQ,MAAM,EACd,OAAO;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,KACxB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAwE1B,CAAC"}
|
package/dist/terminal.js
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Low-level terminal helpers for the interactive TUI.
|
|
3
|
+
* Raw ANSI escape sequences — zero dependencies.
|
|
4
|
+
*/
|
|
5
|
+
import { Effect } from "effect";
|
|
6
|
+
// ── ANSI escape sequences ───────────────────────────────────────────
|
|
7
|
+
export const ESC = "\x1b";
|
|
8
|
+
export const CSI = `${ESC}[`;
|
|
9
|
+
export const cursor = {
|
|
10
|
+
hide: `${CSI}?25l`,
|
|
11
|
+
show: `${CSI}?25h`,
|
|
12
|
+
moveTo: (row, col) => `${CSI}${row};${col}H`,
|
|
13
|
+
moveUp: (n = 1) => `${CSI}${n}A`,
|
|
14
|
+
moveDown: (n = 1) => `${CSI}${n}B`,
|
|
15
|
+
saveCursor: `${ESC}7`,
|
|
16
|
+
restoreCursor: `${ESC}8`,
|
|
17
|
+
};
|
|
18
|
+
export const screen = {
|
|
19
|
+
clear: `${CSI}2J`,
|
|
20
|
+
clearLine: `${CSI}2K`,
|
|
21
|
+
clearDown: `${CSI}J`,
|
|
22
|
+
altBuffer: `${CSI}?1049h`,
|
|
23
|
+
mainBuffer: `${CSI}?1049l`,
|
|
24
|
+
};
|
|
25
|
+
// ── Colors (reuse project conventions) ──────────────────────────────
|
|
26
|
+
const useColor = (() => {
|
|
27
|
+
if (process.env.NO_COLOR) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
if (process.env.FORCE_COLOR) {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
return process.stdout.isTTY ?? false;
|
|
34
|
+
})();
|
|
35
|
+
const ansi = (code) => (text) => useColor ? `\x1b[${code}m${text}\x1b[0m` : text;
|
|
36
|
+
export const c = {
|
|
37
|
+
bold: ansi("1"),
|
|
38
|
+
dim: ansi("2"),
|
|
39
|
+
italic: ansi("3"),
|
|
40
|
+
underline: ansi("4"),
|
|
41
|
+
inverse: ansi("7"),
|
|
42
|
+
green: ansi("32"),
|
|
43
|
+
red: ansi("31"),
|
|
44
|
+
yellow: ansi("33"),
|
|
45
|
+
blue: ansi("34"),
|
|
46
|
+
cyan: ansi("36"),
|
|
47
|
+
magenta: ansi("35"),
|
|
48
|
+
white: ansi("37"),
|
|
49
|
+
gray: ansi("90"),
|
|
50
|
+
bgBlue: ansi("44"),
|
|
51
|
+
bgGreen: ansi("42"),
|
|
52
|
+
bgYellow: ansi("43"),
|
|
53
|
+
bgRed: ansi("41"),
|
|
54
|
+
bgCyan: ansi("46"),
|
|
55
|
+
bgWhite: ansi("47;30"),
|
|
56
|
+
};
|
|
57
|
+
// ── Terminal size ───────────────────────────────────────────────────
|
|
58
|
+
export const getSize = () => ({
|
|
59
|
+
rows: process.stdout.rows ?? 24,
|
|
60
|
+
cols: process.stdout.columns ?? 80,
|
|
61
|
+
});
|
|
62
|
+
// ── Write helpers ───────────────────────────────────────────────────
|
|
63
|
+
export const write = (s) => {
|
|
64
|
+
process.stdout.write(s);
|
|
65
|
+
};
|
|
66
|
+
export const writeLine = (row, text) => {
|
|
67
|
+
write(`${cursor.moveTo(row, 1)}${screen.clearLine}${text}`);
|
|
68
|
+
};
|
|
69
|
+
const CTRL_KEYS = {
|
|
70
|
+
"\x03": { name: "c", ctrl: true },
|
|
71
|
+
"\x04": { name: "d", ctrl: true },
|
|
72
|
+
"\x1a": { name: "z", ctrl: true },
|
|
73
|
+
};
|
|
74
|
+
const SPECIAL_KEYS = {
|
|
75
|
+
"\r": "return",
|
|
76
|
+
"\n": "return",
|
|
77
|
+
"\x1b": "escape",
|
|
78
|
+
"\x7f": "backspace",
|
|
79
|
+
"\b": "backspace",
|
|
80
|
+
"\t": "tab",
|
|
81
|
+
" ": "space",
|
|
82
|
+
"\x1b[A": "up",
|
|
83
|
+
"\x1b[B": "down",
|
|
84
|
+
"\x1b[C": "right",
|
|
85
|
+
"\x1b[D": "left",
|
|
86
|
+
"\x1b[5~": "pageup",
|
|
87
|
+
"\x1b[6~": "pagedown",
|
|
88
|
+
"\x1b[H": "home",
|
|
89
|
+
"\x1b[1~": "home",
|
|
90
|
+
"\x1b[F": "end",
|
|
91
|
+
"\x1b[4~": "end",
|
|
92
|
+
};
|
|
93
|
+
const parseKey = (data) => {
|
|
94
|
+
const raw = data.toString("utf-8");
|
|
95
|
+
const base = { ctrl: false, name: "", raw, shift: false };
|
|
96
|
+
const ctrl = CTRL_KEYS[raw];
|
|
97
|
+
if (ctrl) {
|
|
98
|
+
return { ...base, ...ctrl };
|
|
99
|
+
}
|
|
100
|
+
const special = SPECIAL_KEYS[raw];
|
|
101
|
+
if (special) {
|
|
102
|
+
return { ...base, name: special };
|
|
103
|
+
}
|
|
104
|
+
if (raw.length === 1 && raw >= " ") {
|
|
105
|
+
return { ...base, name: raw };
|
|
106
|
+
}
|
|
107
|
+
return { ...base, name: raw };
|
|
108
|
+
};
|
|
109
|
+
export const readKey = Effect.async((resume) => {
|
|
110
|
+
const wasRaw = process.stdin.isRaw;
|
|
111
|
+
if (process.stdin.isTTY) {
|
|
112
|
+
process.stdin.setRawMode(true);
|
|
113
|
+
}
|
|
114
|
+
process.stdin.resume();
|
|
115
|
+
const onData = (data) => {
|
|
116
|
+
process.stdin.removeListener("data", onData);
|
|
117
|
+
if (process.stdin.isTTY) {
|
|
118
|
+
process.stdin.setRawMode(wasRaw);
|
|
119
|
+
}
|
|
120
|
+
process.stdin.pause();
|
|
121
|
+
resume(Effect.succeed(parseKey(data)));
|
|
122
|
+
};
|
|
123
|
+
process.stdin.on("data", onData);
|
|
124
|
+
});
|
|
125
|
+
// ── Bracketed input reading (for text fields) ──────────────────────
|
|
126
|
+
export const readLine = (prompt, opts) => Effect.async((resume) => {
|
|
127
|
+
write(prompt);
|
|
128
|
+
const wasRaw = process.stdin.isRaw;
|
|
129
|
+
if (process.stdin.isTTY) {
|
|
130
|
+
process.stdin.setRawMode(true);
|
|
131
|
+
}
|
|
132
|
+
process.stdin.resume();
|
|
133
|
+
process.stdin.setEncoding("utf-8");
|
|
134
|
+
let buf = "";
|
|
135
|
+
const cleanup = () => {
|
|
136
|
+
process.stdin.removeListener("data", onData);
|
|
137
|
+
if (process.stdin.isTTY) {
|
|
138
|
+
process.stdin.setRawMode(wasRaw);
|
|
139
|
+
}
|
|
140
|
+
process.stdin.pause();
|
|
141
|
+
};
|
|
142
|
+
// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: char-by-char input handling
|
|
143
|
+
const handleChar = (ch) => {
|
|
144
|
+
if (ch === "\r" || ch === "\n") {
|
|
145
|
+
return "done";
|
|
146
|
+
}
|
|
147
|
+
if (ch === "\x03") {
|
|
148
|
+
return "cancel";
|
|
149
|
+
}
|
|
150
|
+
if (ch === "\x7f" || ch === "\b") {
|
|
151
|
+
if (buf.length > 0) {
|
|
152
|
+
buf = buf.slice(0, -1);
|
|
153
|
+
write("\b \b");
|
|
154
|
+
}
|
|
155
|
+
return "continue";
|
|
156
|
+
}
|
|
157
|
+
if (ch >= " ") {
|
|
158
|
+
buf += ch;
|
|
159
|
+
write(opts?.mask ? "*" : ch);
|
|
160
|
+
}
|
|
161
|
+
return "continue";
|
|
162
|
+
};
|
|
163
|
+
const onData = (chunk) => {
|
|
164
|
+
// Bare escape key (not part of an ANSI sequence like \x1b[A)
|
|
165
|
+
if (chunk === "\x1b") {
|
|
166
|
+
cleanup();
|
|
167
|
+
write("\n");
|
|
168
|
+
resume(Effect.succeed(null));
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
for (const ch of chunk) {
|
|
172
|
+
// Skip escape bytes that are part of ANSI sequences
|
|
173
|
+
if (ch === "\x1b") {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
const result = handleChar(ch);
|
|
177
|
+
if (result === "done") {
|
|
178
|
+
cleanup();
|
|
179
|
+
write("\n");
|
|
180
|
+
resume(Effect.succeed(buf));
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (result === "cancel") {
|
|
184
|
+
cleanup();
|
|
185
|
+
write("\n");
|
|
186
|
+
resume(Effect.succeed(null));
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
process.stdin.on("data", onData);
|
|
192
|
+
});
|
|
193
|
+
//# sourceMappingURL=terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"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"}
|
package/dist/views.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI views — each view is a self-contained interactive screen.
|
|
3
|
+
* All views consume SecretStore via Effect dependency injection.
|
|
4
|
+
*/
|
|
5
|
+
import { SecretStore } from "@envsec/core";
|
|
6
|
+
import { Effect } from "effect";
|
|
7
|
+
export declare const mainMenuView: (initialContext: string | null) => Effect.Effect<void, never, SecretStore>;
|
|
8
|
+
//# sourceMappingURL=views.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../src/views.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAOL,WAAW,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AA6EhC,eAAO,MAAM,YAAY,GACvB,gBAAgB,MAAM,GAAG,IAAI,KAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAyKrC,CAAC"}
|