@creem_io/cli 0.2.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 +155 -0
- package/dist/commands/checkouts.d.ts +3 -0
- package/dist/commands/checkouts.d.ts.map +1 -0
- package/dist/commands/checkouts.js +175 -0
- package/dist/commands/checkouts.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +184 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/customers.d.ts +3 -0
- package/dist/commands/customers.d.ts.map +1 -0
- package/dist/commands/customers.js +246 -0
- package/dist/commands/customers.js.map +1 -0
- package/dist/commands/discounts.d.ts +3 -0
- package/dist/commands/discounts.d.ts.map +1 -0
- package/dist/commands/discounts.js +419 -0
- package/dist/commands/discounts.js.map +1 -0
- package/dist/commands/index.d.ts +12 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +26 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +115 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +3 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +61 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/migrate.d.ts +3 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +1073 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/products.d.ts +3 -0
- package/dist/commands/products.d.ts.map +1 -0
- package/dist/commands/products.js +400 -0
- package/dist/commands/products.js.map +1 -0
- package/dist/commands/subscriptions.d.ts +3 -0
- package/dist/commands/subscriptions.d.ts.map +1 -0
- package/dist/commands/subscriptions.js +476 -0
- package/dist/commands/subscriptions.js.map +1 -0
- package/dist/commands/transactions.d.ts +3 -0
- package/dist/commands/transactions.d.ts.map +1 -0
- package/dist/commands/transactions.js +326 -0
- package/dist/commands/transactions.js.map +1 -0
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +76 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +25 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +77 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/auth.d.ts +28 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +113 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/config.d.ts +34 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +144 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/env-cache.d.ts +10 -0
- package/dist/lib/env-cache.d.ts.map +1 -0
- package/dist/lib/env-cache.js +27 -0
- package/dist/lib/env-cache.js.map +1 -0
- package/dist/tui/command-bar.d.ts +10 -0
- package/dist/tui/command-bar.d.ts.map +1 -0
- package/dist/tui/command-bar.js +35 -0
- package/dist/tui/command-bar.js.map +1 -0
- package/dist/tui/engine.d.ts +3 -0
- package/dist/tui/engine.d.ts.map +1 -0
- package/dist/tui/engine.js +454 -0
- package/dist/tui/engine.js.map +1 -0
- package/dist/tui/index.d.ts +3 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +6 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/keymap.d.ts +29 -0
- package/dist/tui/keymap.d.ts.map +1 -0
- package/dist/tui/keymap.js +143 -0
- package/dist/tui/keymap.js.map +1 -0
- package/dist/tui/renderer.d.ts +12 -0
- package/dist/tui/renderer.d.ts.map +1 -0
- package/dist/tui/renderer.js +379 -0
- package/dist/tui/renderer.js.map +1 -0
- package/dist/tui/types.d.ts +53 -0
- package/dist/tui/types.d.ts.map +1 -0
- package/dist/tui/types.js +24 -0
- package/dist/tui/types.js.map +1 -0
- package/dist/utils/output.d.ts +67 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +245 -0
- package/dist/utils/output.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VimKeymap = void 0;
|
|
4
|
+
const PENDING_TIMEOUT_MS = 300;
|
|
5
|
+
class VimKeymap {
|
|
6
|
+
pendingKey = null;
|
|
7
|
+
pendingTimer = null;
|
|
8
|
+
onPendingExpired = null;
|
|
9
|
+
setPendingExpiredHandler(handler) {
|
|
10
|
+
this.onPendingExpired = handler;
|
|
11
|
+
}
|
|
12
|
+
resolve(str, key, mode) {
|
|
13
|
+
if (mode === "confirm") {
|
|
14
|
+
return this.resolveConfirmMode(str, key);
|
|
15
|
+
}
|
|
16
|
+
if (mode === "command" || mode === "search") {
|
|
17
|
+
return this.resolveInputMode(str, key);
|
|
18
|
+
}
|
|
19
|
+
if (mode === "detail") {
|
|
20
|
+
return this.resolveDetailMode(str, key);
|
|
21
|
+
}
|
|
22
|
+
return this.resolveListMode(str, key);
|
|
23
|
+
}
|
|
24
|
+
destroy() {
|
|
25
|
+
if (this.pendingTimer) {
|
|
26
|
+
clearTimeout(this.pendingTimer);
|
|
27
|
+
this.pendingTimer = null;
|
|
28
|
+
}
|
|
29
|
+
this.pendingKey = null;
|
|
30
|
+
}
|
|
31
|
+
resolveConfirmMode(str, key) {
|
|
32
|
+
// Ctrl+C should quit (consistent with other modes)
|
|
33
|
+
if (key?.ctrl && key?.name === "c")
|
|
34
|
+
return "quit";
|
|
35
|
+
if (str === "y" || str === "Y")
|
|
36
|
+
return "confirm_yes";
|
|
37
|
+
if (str === "n" || str === "N" || key?.name === "escape")
|
|
38
|
+
return "confirm_no";
|
|
39
|
+
return "none";
|
|
40
|
+
}
|
|
41
|
+
resolveInputMode(str, key) {
|
|
42
|
+
if (key?.name === "escape")
|
|
43
|
+
return "cancel_input";
|
|
44
|
+
if (key?.name === "return")
|
|
45
|
+
return "confirm_input";
|
|
46
|
+
if (key?.name === "backspace")
|
|
47
|
+
return "backspace_input";
|
|
48
|
+
// Ctrl-c should quit
|
|
49
|
+
if (key?.ctrl && key?.name === "c")
|
|
50
|
+
return "quit";
|
|
51
|
+
// Printable character
|
|
52
|
+
if (str && str.length === 1 && !key?.ctrl && !key?.meta) {
|
|
53
|
+
return { type: "char_input", char: str };
|
|
54
|
+
}
|
|
55
|
+
return "none";
|
|
56
|
+
}
|
|
57
|
+
resolveDetailMode(str, key) {
|
|
58
|
+
if (key?.ctrl && key?.name === "c")
|
|
59
|
+
return this.clearPending("quit");
|
|
60
|
+
if (str === "q" || key?.name === "escape")
|
|
61
|
+
return this.clearPending("back");
|
|
62
|
+
if (str === "j" || key?.name === "down")
|
|
63
|
+
return this.clearPending("move_down");
|
|
64
|
+
if (str === "k" || key?.name === "up")
|
|
65
|
+
return this.clearPending("move_up");
|
|
66
|
+
if (key?.ctrl && key?.name === "d")
|
|
67
|
+
return this.clearPending("half_page_down");
|
|
68
|
+
if (key?.ctrl && key?.name === "u")
|
|
69
|
+
return this.clearPending("half_page_up");
|
|
70
|
+
if (str === ":")
|
|
71
|
+
return this.clearPending("enter_command");
|
|
72
|
+
// gg / G
|
|
73
|
+
if (str === "G" && !key?.ctrl)
|
|
74
|
+
return this.clearPending("goto_bottom");
|
|
75
|
+
if (str === "g")
|
|
76
|
+
return this.handlePendingG();
|
|
77
|
+
this.clearPendingState();
|
|
78
|
+
return "none";
|
|
79
|
+
}
|
|
80
|
+
resolveListMode(str, key) {
|
|
81
|
+
// Ctrl-c always quits
|
|
82
|
+
if (key?.ctrl && key?.name === "c")
|
|
83
|
+
return "quit";
|
|
84
|
+
// Navigation
|
|
85
|
+
if (str === "j" || key?.name === "down")
|
|
86
|
+
return this.clearPending("move_down");
|
|
87
|
+
if (str === "k" || key?.name === "up")
|
|
88
|
+
return this.clearPending("move_up");
|
|
89
|
+
if (key?.ctrl && key?.name === "d")
|
|
90
|
+
return this.clearPending("half_page_down");
|
|
91
|
+
if (key?.ctrl && key?.name === "u")
|
|
92
|
+
return this.clearPending("half_page_up");
|
|
93
|
+
// G goes to bottom
|
|
94
|
+
if (str === "G" && !key?.ctrl)
|
|
95
|
+
return this.clearPending("goto_bottom");
|
|
96
|
+
// gg goes to top (multi-key sequence)
|
|
97
|
+
if (str === "g")
|
|
98
|
+
return this.handlePendingG();
|
|
99
|
+
// Actions
|
|
100
|
+
if (key?.name === "return")
|
|
101
|
+
return this.clearPending("select");
|
|
102
|
+
if (str === "q")
|
|
103
|
+
return this.clearPending("quit");
|
|
104
|
+
if (key?.name === "escape")
|
|
105
|
+
return this.clearPending("cancel_input");
|
|
106
|
+
if (str === ":")
|
|
107
|
+
return this.clearPending("enter_command");
|
|
108
|
+
if (str === "/")
|
|
109
|
+
return this.clearPending("enter_search");
|
|
110
|
+
// Any other key clears pending
|
|
111
|
+
this.clearPendingState();
|
|
112
|
+
return "none";
|
|
113
|
+
}
|
|
114
|
+
handlePendingG() {
|
|
115
|
+
if (this.pendingKey === "g") {
|
|
116
|
+
this.clearPendingState();
|
|
117
|
+
return "goto_top";
|
|
118
|
+
}
|
|
119
|
+
this.pendingKey = "g";
|
|
120
|
+
if (this.pendingTimer)
|
|
121
|
+
clearTimeout(this.pendingTimer);
|
|
122
|
+
this.pendingTimer = setTimeout(() => {
|
|
123
|
+
this.pendingKey = null;
|
|
124
|
+
this.pendingTimer = null;
|
|
125
|
+
if (this.onPendingExpired)
|
|
126
|
+
this.onPendingExpired();
|
|
127
|
+
}, PENDING_TIMEOUT_MS);
|
|
128
|
+
return "none";
|
|
129
|
+
}
|
|
130
|
+
clearPending(action) {
|
|
131
|
+
this.clearPendingState();
|
|
132
|
+
return action;
|
|
133
|
+
}
|
|
134
|
+
clearPendingState() {
|
|
135
|
+
if (this.pendingTimer) {
|
|
136
|
+
clearTimeout(this.pendingTimer);
|
|
137
|
+
this.pendingTimer = null;
|
|
138
|
+
}
|
|
139
|
+
this.pendingKey = null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.VimKeymap = VimKeymap;
|
|
143
|
+
//# sourceMappingURL=keymap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keymap.js","sourceRoot":"","sources":["../../src/tui/keymap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TuiModuleDescriptor, TuiState } from "./types";
|
|
2
|
+
import { resetEnvCache } from "../lib/env-cache";
|
|
3
|
+
export { resetEnvCache };
|
|
4
|
+
export declare function getVisibleRows(): number;
|
|
5
|
+
export declare function render<T>(descriptor: TuiModuleDescriptor<T>, state: TuiState<T>): void;
|
|
6
|
+
/**
|
|
7
|
+
* Word-wraps detail lines to fit within maxWidth.
|
|
8
|
+
* Handles lines with ANSI codes by stripping for measurement.
|
|
9
|
+
* Long values in key-value lines wrap with indentation to align under the value.
|
|
10
|
+
*/
|
|
11
|
+
export declare function wrapDetailLines(lines: string[], maxWidth: number): string[];
|
|
12
|
+
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/tui/renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAgB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAM/D,OAAO,EAAE,aAAa,EAAE,CAAC;AAqDzB,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAgBtF;AA4HD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAmF3E"}
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.resetEnvCache = void 0;
|
|
7
|
+
exports.getVisibleRows = getVisibleRows;
|
|
8
|
+
exports.render = render;
|
|
9
|
+
exports.wrapDetailLines = wrapDetailLines;
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const env_cache_1 = require("../lib/env-cache");
|
|
12
|
+
Object.defineProperty(exports, "resetEnvCache", { enumerable: true, get: function () { return env_cache_1.resetEnvCache; } });
|
|
13
|
+
// Regex matching all ANSI escape sequences (colors, cursor, etc.)
|
|
14
|
+
const ANSI_RE = /\x1b\[[0-9;]*m/g;
|
|
15
|
+
function stripAnsi(str) {
|
|
16
|
+
return str.replace(ANSI_RE, "");
|
|
17
|
+
}
|
|
18
|
+
function displayWidth(str) {
|
|
19
|
+
return stripAnsi(str).length;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Truncate a string that may contain ANSI codes to a given display width.
|
|
23
|
+
* Preserves escape sequences and appends ellipsis when truncated.
|
|
24
|
+
*/
|
|
25
|
+
function truncateAnsi(str, maxWidth) {
|
|
26
|
+
if (maxWidth <= 0)
|
|
27
|
+
return "";
|
|
28
|
+
const stripped = stripAnsi(str);
|
|
29
|
+
if (stripped.length <= maxWidth)
|
|
30
|
+
return str;
|
|
31
|
+
// Walk the original string, tracking visible character count
|
|
32
|
+
let visible = 0;
|
|
33
|
+
let result = "";
|
|
34
|
+
const ellipsis = maxWidth > 1 ? "\u2026" : "";
|
|
35
|
+
const limit = maxWidth - (ellipsis ? 1 : 0);
|
|
36
|
+
let i = 0;
|
|
37
|
+
while (i < str.length && visible < limit) {
|
|
38
|
+
// Check if current position starts an ANSI escape
|
|
39
|
+
if (str[i] === "\x1b" && str[i + 1] === "[") {
|
|
40
|
+
const end = str.indexOf("m", i);
|
|
41
|
+
if (end !== -1) {
|
|
42
|
+
result += str.slice(i, end + 1);
|
|
43
|
+
i = end + 1;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
result += str[i];
|
|
48
|
+
visible++;
|
|
49
|
+
i++;
|
|
50
|
+
}
|
|
51
|
+
// Close any open ANSI sequences with a reset
|
|
52
|
+
result += ellipsis + "\x1b[0m";
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
const HEADER_LINES = 3; // title + columns + separator
|
|
56
|
+
const FOOTER_LINES = 1; // bottom bar
|
|
57
|
+
const brandColor = chalk_1.default.hex("#ffbe98");
|
|
58
|
+
const BRAND_TEXT = "CREEM"; // fullwidth Unicode for robotic feel
|
|
59
|
+
const BRAND_TEXT_WIDTH = 10; // each fullwidth char is 2 cells wide
|
|
60
|
+
function getVisibleRows() {
|
|
61
|
+
return Math.max(1, (process.stdout.rows || 24) - HEADER_LINES - FOOTER_LINES);
|
|
62
|
+
}
|
|
63
|
+
function render(descriptor, state) {
|
|
64
|
+
const cols = process.stdout.columns || 80;
|
|
65
|
+
const rows = process.stdout.rows || 24;
|
|
66
|
+
let buffer = "";
|
|
67
|
+
// Move cursor to top-left and clear screen
|
|
68
|
+
buffer += "\x1b[H\x1b[2J";
|
|
69
|
+
if (state.mode === "detail" && state.selectedItem) {
|
|
70
|
+
buffer += renderDetailView(descriptor, state, cols, rows);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
buffer += renderListView(descriptor, state, cols, rows);
|
|
74
|
+
}
|
|
75
|
+
process.stdout.write(buffer);
|
|
76
|
+
}
|
|
77
|
+
function renderListView(descriptor, state, cols, rows) {
|
|
78
|
+
let buffer = "";
|
|
79
|
+
const visibleRows = Math.max(1, rows - HEADER_LINES - FOOTER_LINES);
|
|
80
|
+
const items = state.searchQuery ? state.filteredItems : state.items;
|
|
81
|
+
// Header line
|
|
82
|
+
const env = (0, env_cache_1.getCachedEnv)();
|
|
83
|
+
const itemCount = state.totalItems !== null ? state.totalItems : items.length;
|
|
84
|
+
const countSuffix = state.hasMorePages ? "+" : "";
|
|
85
|
+
let title = `${chalk_1.default.bold(descriptor.name)} ${chalk_1.default.dim(`(${env})`)} ${chalk_1.default.dim(`- ${itemCount}${countSuffix} items`)}`;
|
|
86
|
+
if (state.isLoading) {
|
|
87
|
+
title += chalk_1.default.yellow(" loading...");
|
|
88
|
+
}
|
|
89
|
+
if (state.searchQuery) {
|
|
90
|
+
title += chalk_1.default.cyan(` [/${state.searchQuery}]`);
|
|
91
|
+
}
|
|
92
|
+
buffer += truncateAnsi(` ${title}`, cols) + "\n";
|
|
93
|
+
// Column headers - compute widths that fit the terminal
|
|
94
|
+
const columnWidths = computeColumnWidths(descriptor.columns, cols);
|
|
95
|
+
let headerLine = " ";
|
|
96
|
+
for (let i = 0; i < descriptor.columns.length; i++) {
|
|
97
|
+
const col = descriptor.columns[i];
|
|
98
|
+
headerLine += chalk_1.default.cyan(padCell(col.header, columnWidths[i], col.align || "left"));
|
|
99
|
+
if (i < descriptor.columns.length - 1)
|
|
100
|
+
headerLine += " ";
|
|
101
|
+
}
|
|
102
|
+
buffer += truncateAnsi(headerLine, cols) + "\n";
|
|
103
|
+
// Separator - use terminal width, not headerLine length (which includes ANSI)
|
|
104
|
+
buffer += chalk_1.default.dim(" " + "\u2500".repeat(Math.max(0, cols - 2))) + "\n";
|
|
105
|
+
// Rows
|
|
106
|
+
if (items.length === 0) {
|
|
107
|
+
const emptyMsg = state.searchQuery
|
|
108
|
+
? "No matching items"
|
|
109
|
+
: state.isLoading
|
|
110
|
+
? "Loading..."
|
|
111
|
+
: "No items found";
|
|
112
|
+
const padTop = Math.floor(visibleRows / 2);
|
|
113
|
+
for (let i = 0; i < padTop; i++)
|
|
114
|
+
buffer += "\n";
|
|
115
|
+
buffer += chalk_1.default.dim(` ${emptyMsg}`) + "\n";
|
|
116
|
+
for (let i = padTop + 1; i < visibleRows; i++)
|
|
117
|
+
buffer += "\n";
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
for (let i = 0; i < visibleRows; i++) {
|
|
121
|
+
const itemIndex = state.scrollOffset + i;
|
|
122
|
+
if (itemIndex >= items.length) {
|
|
123
|
+
buffer += "\n";
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const item = items[itemIndex];
|
|
127
|
+
const isSelected = itemIndex === state.cursorIndex;
|
|
128
|
+
let rowStr = " ";
|
|
129
|
+
for (let c = 0; c < descriptor.columns.length; c++) {
|
|
130
|
+
const col = descriptor.columns[c];
|
|
131
|
+
const raw = col.value(item);
|
|
132
|
+
const cellVal = padCell(raw, columnWidths[c], col.align || "left");
|
|
133
|
+
rowStr += cellVal;
|
|
134
|
+
if (c < descriptor.columns.length - 1)
|
|
135
|
+
rowStr += " ";
|
|
136
|
+
}
|
|
137
|
+
// Truncate to terminal width to prevent wrapping
|
|
138
|
+
const truncatedRow = truncateAnsi(rowStr, cols);
|
|
139
|
+
if (isSelected) {
|
|
140
|
+
// Pad to full width for inverse highlight
|
|
141
|
+
const rowWidth = displayWidth(truncatedRow);
|
|
142
|
+
const padRight = Math.max(0, cols - rowWidth);
|
|
143
|
+
buffer += chalk_1.default.inverse(truncatedRow + " ".repeat(padRight)) + "\n";
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
buffer += truncatedRow + "\n";
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Bottom bar
|
|
151
|
+
buffer += renderBottomBar(descriptor, state, cols);
|
|
152
|
+
return buffer;
|
|
153
|
+
}
|
|
154
|
+
function renderDetailView(descriptor, state, cols, rows) {
|
|
155
|
+
let buffer = "";
|
|
156
|
+
const visibleRows = Math.max(1, rows - 2 - FOOTER_LINES); // title + separator + footer
|
|
157
|
+
// Render detail lines, then word-wrap them to fit the terminal
|
|
158
|
+
const rawLines = descriptor.renderDetail(state.selectedItem);
|
|
159
|
+
const detailLines = wrapDetailLines(rawLines, cols - 2); // -2 for leading space + margin
|
|
160
|
+
// Header
|
|
161
|
+
buffer += truncateAnsi(` ${chalk_1.default.bold(descriptor.name + " Details")}`, cols) + "\n";
|
|
162
|
+
buffer += chalk_1.default.dim(" " + "\u2500".repeat(Math.max(0, cols - 2))) + "\n";
|
|
163
|
+
// Detail content with scroll
|
|
164
|
+
const maxScroll = Math.max(0, detailLines.length - visibleRows);
|
|
165
|
+
const scrollOff = Math.min(state.detailScrollOffset, maxScroll);
|
|
166
|
+
for (let i = 0; i < visibleRows; i++) {
|
|
167
|
+
const lineIdx = scrollOff + i;
|
|
168
|
+
if (lineIdx < detailLines.length) {
|
|
169
|
+
buffer += " " + truncateAnsi(detailLines[lineIdx], cols - 2) + "\n";
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
buffer += "\n";
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Bottom bar
|
|
176
|
+
buffer += renderBottomBar(descriptor, state, cols);
|
|
177
|
+
return buffer;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Word-wraps detail lines to fit within maxWidth.
|
|
181
|
+
* Handles lines with ANSI codes by stripping for measurement.
|
|
182
|
+
* Long values in key-value lines wrap with indentation to align under the value.
|
|
183
|
+
*/
|
|
184
|
+
function wrapDetailLines(lines, maxWidth) {
|
|
185
|
+
if (maxWidth <= 0)
|
|
186
|
+
return lines;
|
|
187
|
+
const wrapped = [];
|
|
188
|
+
for (const line of lines) {
|
|
189
|
+
const visLen = displayWidth(line);
|
|
190
|
+
if (visLen <= maxWidth) {
|
|
191
|
+
wrapped.push(line);
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
// For empty/short lines, just truncate
|
|
195
|
+
if (maxWidth < 10) {
|
|
196
|
+
wrapped.push(truncateAnsi(line, maxWidth));
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
// Try to detect key-value format: "Key Value..."
|
|
200
|
+
// Look for double-space separator between label and value
|
|
201
|
+
const plain = stripAnsi(line);
|
|
202
|
+
const kvMatch = plain.match(/^(\S[^]*?\S)\s{2,}(.+)$/);
|
|
203
|
+
if (kvMatch) {
|
|
204
|
+
// Key-value line: wrap the value portion, indent continuation lines
|
|
205
|
+
const labelEnd = plain.indexOf(kvMatch[2]);
|
|
206
|
+
if (labelEnd >= maxWidth) {
|
|
207
|
+
// Label itself fills the line — treat as plain text wrap
|
|
208
|
+
let remaining = stripAnsi(line);
|
|
209
|
+
while (remaining.length > maxWidth) {
|
|
210
|
+
wrapped.push(remaining.slice(0, maxWidth));
|
|
211
|
+
remaining = remaining.slice(maxWidth);
|
|
212
|
+
}
|
|
213
|
+
if (remaining.length > 0)
|
|
214
|
+
wrapped.push(remaining);
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
const indentWidth = Math.min(labelEnd, Math.floor(maxWidth * 0.4));
|
|
218
|
+
// First line: preserve ANSI colors (truncateAnsi keeps escape sequences intact)
|
|
219
|
+
wrapped.push(truncateAnsi(line, maxWidth));
|
|
220
|
+
// Wrap remaining value text with indentation (plain text for continuations is fine)
|
|
221
|
+
const valueText = kvMatch[2];
|
|
222
|
+
const firstValueWidth = maxWidth - labelEnd;
|
|
223
|
+
if (firstValueWidth < valueText.length && firstValueWidth > 1) {
|
|
224
|
+
// Account for ellipsis taking one character position on truncated first line
|
|
225
|
+
// (need at least 2 chars of space to show 1 char + ellipsis)
|
|
226
|
+
const firstLineValueChars = Math.max(0, firstValueWidth - 1);
|
|
227
|
+
let remaining = valueText.slice(firstLineValueChars);
|
|
228
|
+
const wrapWidth = Math.max(1, maxWidth - indentWidth);
|
|
229
|
+
while (remaining.length > 0) {
|
|
230
|
+
const chunk = remaining.slice(0, wrapWidth);
|
|
231
|
+
wrapped.push(" ".repeat(indentWidth) + chunk);
|
|
232
|
+
remaining = remaining.slice(wrapWidth);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
// Plain text line: first chunk preserves ANSI colors, rest is plain
|
|
239
|
+
let remaining = stripAnsi(line);
|
|
240
|
+
let isFirst = true;
|
|
241
|
+
while (remaining.length > maxWidth) {
|
|
242
|
+
if (isFirst) {
|
|
243
|
+
wrapped.push(truncateAnsi(line, maxWidth));
|
|
244
|
+
isFirst = false;
|
|
245
|
+
// Account for ellipsis taking one character position in truncateAnsi
|
|
246
|
+
remaining = remaining.slice(maxWidth - 1);
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
// Continuation lines also need ellipsis when more content follows
|
|
250
|
+
wrapped.push(remaining.slice(0, maxWidth - 1) + "\u2026");
|
|
251
|
+
remaining = remaining.slice(maxWidth - 1);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (remaining.length > 0) {
|
|
255
|
+
if (isFirst) {
|
|
256
|
+
wrapped.push(line); // Short enough after strip — keep original with ANSI
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
wrapped.push(remaining);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return wrapped;
|
|
265
|
+
}
|
|
266
|
+
function buildBar(controls, cols) {
|
|
267
|
+
const brand = " " + brandColor.bold(BRAND_TEXT) + " ";
|
|
268
|
+
const brandWidth = BRAND_TEXT_WIDTH + 3; // space + text + 2 spaces
|
|
269
|
+
const controlsWidth = displayWidth(controls);
|
|
270
|
+
// Show brand on the left if there's room
|
|
271
|
+
if (cols >= brandWidth + controlsWidth) {
|
|
272
|
+
const padRight = Math.max(0, cols - brandWidth - controlsWidth);
|
|
273
|
+
return chalk_1.default.inverse(brand + controls + " ".repeat(padRight));
|
|
274
|
+
}
|
|
275
|
+
const padRight = Math.max(0, cols - controlsWidth);
|
|
276
|
+
return chalk_1.default.inverse(controls + " ".repeat(padRight));
|
|
277
|
+
}
|
|
278
|
+
function renderBottomBar(descriptor, state, cols) {
|
|
279
|
+
// Status message takes priority if present
|
|
280
|
+
if (state.statusMessage) {
|
|
281
|
+
const colorFn = state.statusType === "error"
|
|
282
|
+
? chalk_1.default.red
|
|
283
|
+
: state.statusType === "success"
|
|
284
|
+
? chalk_1.default.green
|
|
285
|
+
: chalk_1.default.blue;
|
|
286
|
+
const msg = truncateAnsi(` ${state.statusMessage}`, cols);
|
|
287
|
+
const padRight = Math.max(0, cols - displayWidth(msg));
|
|
288
|
+
return colorFn(msg + " ".repeat(padRight));
|
|
289
|
+
}
|
|
290
|
+
if (state.mode === "command") {
|
|
291
|
+
const msg = ` :${state.commandInput}`;
|
|
292
|
+
return chalk_1.default.inverse(msg.padEnd(cols));
|
|
293
|
+
}
|
|
294
|
+
if (state.mode === "search") {
|
|
295
|
+
const msg = ` /${state.searchQuery}`;
|
|
296
|
+
return chalk_1.default.inverse(msg.padEnd(cols));
|
|
297
|
+
}
|
|
298
|
+
if (state.mode === "confirm" && state.pendingCommand) {
|
|
299
|
+
const msg = ` ${state.pendingCommand.name} selected item? (y/n)`;
|
|
300
|
+
return chalk_1.default.yellow.inverse(msg.padEnd(cols));
|
|
301
|
+
}
|
|
302
|
+
if (state.mode === "detail") {
|
|
303
|
+
const cmdParts = [chalk_1.default.dim("q") + ":back"];
|
|
304
|
+
for (const cmd of descriptor.commands) {
|
|
305
|
+
cmdParts.push(chalk_1.default.dim(":" + cmd.name));
|
|
306
|
+
}
|
|
307
|
+
const bar = " " + cmdParts.join(" ");
|
|
308
|
+
return buildBar(bar, cols);
|
|
309
|
+
}
|
|
310
|
+
// List mode - adapt help hints to available width
|
|
311
|
+
let parts;
|
|
312
|
+
if (cols < 50) {
|
|
313
|
+
parts = [chalk_1.default.dim("j/k") + ":nav", chalk_1.default.dim("q") + ":quit"];
|
|
314
|
+
}
|
|
315
|
+
else if (cols < 70) {
|
|
316
|
+
parts = [
|
|
317
|
+
chalk_1.default.dim("j/k") + ":nav",
|
|
318
|
+
chalk_1.default.dim("Enter") + ":open",
|
|
319
|
+
chalk_1.default.dim("/") + ":search",
|
|
320
|
+
chalk_1.default.dim("q") + ":quit",
|
|
321
|
+
];
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
parts = [
|
|
325
|
+
chalk_1.default.dim("j/k") + ":nav",
|
|
326
|
+
chalk_1.default.dim("Enter") + ":details",
|
|
327
|
+
chalk_1.default.dim("/") + ":search",
|
|
328
|
+
chalk_1.default.dim(":") + ":command",
|
|
329
|
+
chalk_1.default.dim("q") + ":quit",
|
|
330
|
+
];
|
|
331
|
+
}
|
|
332
|
+
const bar = " " + parts.join(" ");
|
|
333
|
+
return buildBar(bar, cols);
|
|
334
|
+
}
|
|
335
|
+
function computeColumnWidths(columns, totalCols) {
|
|
336
|
+
const gap = 2;
|
|
337
|
+
const gapSpace = (columns.length - 1) * gap + 1; // +1 for leading space
|
|
338
|
+
const autoCount = columns.filter((c) => c.width === "auto").length;
|
|
339
|
+
// Calculate the total fixed width requested
|
|
340
|
+
const requestedFixed = columns.reduce((sum, col) => {
|
|
341
|
+
return sum + (typeof col.width === "number" ? col.width : 0);
|
|
342
|
+
}, 0);
|
|
343
|
+
const availableForContent = totalCols - gapSpace;
|
|
344
|
+
// If fixed columns alone exceed available space, shrink them proportionally
|
|
345
|
+
if (requestedFixed > availableForContent && requestedFixed > 0) {
|
|
346
|
+
const scale = Math.max(0.2, availableForContent / requestedFixed);
|
|
347
|
+
return columns.map((col) => {
|
|
348
|
+
if (typeof col.width === "number") {
|
|
349
|
+
return Math.max(col.header.length, Math.floor(col.width * scale));
|
|
350
|
+
}
|
|
351
|
+
// Auto columns get minimum header width when space is tight
|
|
352
|
+
return col.header.length;
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
const remaining = Math.max(0, availableForContent - requestedFixed);
|
|
356
|
+
const autoWidth = autoCount > 0 ? Math.floor(remaining / autoCount) : 0;
|
|
357
|
+
return columns.map((col) => {
|
|
358
|
+
if (typeof col.width === "number")
|
|
359
|
+
return col.width;
|
|
360
|
+
return Math.max(col.header.length, autoWidth);
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
function padCell(text, width, align) {
|
|
364
|
+
const visLen = displayWidth(text);
|
|
365
|
+
// Need to truncate — use truncateAnsi to preserve ANSI color codes
|
|
366
|
+
if (visLen > width) {
|
|
367
|
+
return truncateAnsi(text, width);
|
|
368
|
+
}
|
|
369
|
+
// Pad to desired width
|
|
370
|
+
const pad = Math.max(0, width - visLen);
|
|
371
|
+
if (align === "right")
|
|
372
|
+
return " ".repeat(pad) + text;
|
|
373
|
+
if (align === "center") {
|
|
374
|
+
const left = Math.floor(pad / 2);
|
|
375
|
+
return " ".repeat(left) + text + " ".repeat(pad - left);
|
|
376
|
+
}
|
|
377
|
+
return text + " ".repeat(pad);
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/tui/renderer.ts"],"names":[],"mappings":";;;;;;AA6DA,wCAEC;AAED,wBAgBC;AAiID,0CAmFC;AArSD,kDAA0B;AAE1B,gDAA+D;AAMtD,8FANc,yBAAa,OAMd;AAJtB,kEAAkE;AAClE,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAKlC,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,GAAW,EAAE,QAAgB;IACjD,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,GAAG,CAAC;IAE5C,6DAA6D;IAC7D,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,OAAO,GAAG,KAAK,EAAE,CAAC;QACzC,kDAAkD;QAClD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAChC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;gBAChC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;gBACZ,SAAS;YACX,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,EAAE,CAAC;QACV,CAAC,EAAE,CAAC;IACN,CAAC;IAED,6CAA6C;IAC7C,MAAM,IAAI,QAAQ,GAAG,SAAS,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,8BAA8B;AACtD,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,aAAa;AAErC,MAAM,UAAU,GAAG,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACxC,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,qCAAqC;AACjE,MAAM,gBAAgB,GAAG,EAAE,CAAC,CAAC,sCAAsC;AAEnE,SAAgB,cAAc;IAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC;AAChF,CAAC;AAED,SAAgB,MAAM,CAAI,UAAkC,EAAE,KAAkB;IAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAEvC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,2CAA2C;IAC3C,MAAM,IAAI,eAAe,CAAC;IAE1B,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAClD,MAAM,IAAI,gBAAgB,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CACrB,UAAkC,EAClC,KAAkB,EAClB,IAAY,EACZ,IAAY;IAEZ,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IAEpE,cAAc;IACd,MAAM,GAAG,GAAG,IAAA,wBAAY,GAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC9E,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,IAAI,KAAK,GAAG,GAAG,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,eAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,eAAK,CAAC,GAAG,CAAC,KAAK,SAAS,GAAG,WAAW,QAAQ,CAAC,EAAE,CAAC;IACzH,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,KAAK,IAAI,eAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,IAAI,eAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,IAAI,YAAY,CAAC,IAAI,KAAK,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;IAEjD,wDAAwD;IACxD,MAAM,YAAY,GAAG,mBAAmB,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnE,IAAI,UAAU,GAAG,GAAG,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClC,UAAU,IAAI,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,UAAU,IAAI,IAAI,CAAC;IAC5D,CAAC;IACD,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;IAEhD,8EAA8E;IAC9E,MAAM,IAAI,eAAK,CAAC,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAEzE,OAAO;IACP,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW;YAChC,CAAC,CAAC,mBAAmB;YACrB,CAAC,CAAC,KAAK,CAAC,SAAS;gBACf,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,gBAAgB,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE;YAAE,MAAM,IAAI,IAAI,CAAC;QAChD,MAAM,IAAI,eAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;QAC5C,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE;YAAE,MAAM,IAAI,IAAI,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;YACzC,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC9B,MAAM,IAAI,IAAI,CAAC;gBACf,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YAC9B,MAAM,UAAU,GAAG,SAAS,KAAK,KAAK,CAAC,WAAW,CAAC;YAEnD,IAAI,MAAM,GAAG,GAAG,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnD,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;gBACnE,MAAM,IAAI,OAAO,CAAC;gBAClB,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;oBAAE,MAAM,IAAI,IAAI,CAAC;YACxD,CAAC;YAED,iDAAiD;YACjD,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAChD,IAAI,UAAU,EAAE,CAAC;gBACf,0CAA0C;gBAC1C,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;gBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC,CAAC;gBAC9C,MAAM,IAAI,eAAK,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC;YACtE,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,YAAY,GAAG,IAAI,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,aAAa;IACb,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAEnD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CACvB,UAAkC,EAClC,KAAkB,EAClB,IAAY,EACZ,IAAY;IAEZ,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,6BAA6B;IAEvF,+DAA+D;IAC/D,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,YAAa,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,gCAAgC;IAEzF,SAAS;IACT,MAAM,IAAI,YAAY,CAAC,IAAI,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;IACpF,MAAM,IAAI,eAAK,CAAC,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAEzE,6BAA6B;IAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,SAAS,GAAG,CAAC,CAAC;QAC9B,IAAI,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAED,aAAa;IACb,MAAM,IAAI,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAEnD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,KAAe,EAAE,QAAgB;IAC/D,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAChC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QAED,uCAAuC;QACvC,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC3C,SAAS;QACX,CAAC;QAED,4DAA4D;QAC5D,0DAA0D;QAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAEvD,IAAI,OAAO,EAAE,CAAC;YACZ,oEAAoE;YACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;YAE5C,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;gBACzB,yDAAyD;gBACzD,IAAI,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;gBAChC,OAAO,SAAS,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;oBACnC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAC3C,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;gBACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;gBAEnE,gFAAgF;gBAChF,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAE3C,oFAAoF;gBACpF,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;gBAC9B,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,CAAC;gBAC5C,IAAI,eAAe,GAAG,SAAS,CAAC,MAAM,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;oBAC9D,6EAA6E;oBAC7E,6DAA6D;oBAC7D,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC;oBAC7D,IAAI,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;oBACrD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAC;oBACtD,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;wBAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,CAAC;wBAC9C,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oEAAoE;YACpE,IAAI,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,OAAO,SAAS,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;gBACnC,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAC3C,OAAO,GAAG,KAAK,CAAC;oBAChB,qEAAqE;oBACrE,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;gBAC5C,CAAC;qBAAM,CAAC;oBACN,kEAAkE;oBAClE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;oBAC1D,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;YACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,qDAAqD;gBAC3E,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,QAAgB,EAAE,IAAY;IAC9C,MAAM,KAAK,GAAG,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IACvD,MAAM,UAAU,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC,0BAA0B;IACnE,MAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC7C,yCAAyC;IACzC,IAAI,IAAI,IAAI,UAAU,GAAG,aAAa,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,UAAU,GAAG,aAAa,CAAC,CAAC;QAChE,OAAO,eAAK,CAAC,OAAO,CAAC,KAAK,GAAG,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC;IACnD,OAAO,eAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,eAAe,CACtB,UAAkC,EAClC,KAAkB,EAClB,IAAY;IAEZ,2CAA2C;IAC3C,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,OAAO,GACX,KAAK,CAAC,UAAU,KAAK,OAAO;YAC1B,CAAC,CAAC,eAAK,CAAC,GAAG;YACX,CAAC,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS;gBAC9B,CAAC,CAAC,eAAK,CAAC,KAAK;gBACb,CAAC,CAAC,eAAK,CAAC,IAAI,CAAC;QACnB,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,KAAK,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,OAAO,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC;QACtC,OAAO,eAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;QACrC,OAAO,eAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,uBAAuB,CAAC;QACjE,OAAO,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QACtD,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,kDAAkD;IAClD,IAAI,KAAe,CAAC;IACpB,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;QACd,KAAK,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAChE,CAAC;SAAM,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;QACrB,KAAK,GAAG;YACN,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM;YACzB,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,OAAO;YAC5B,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS;YAC1B,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO;SACzB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,GAAG;YACN,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM;YACzB,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,UAAU;YAC/B,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS;YAC1B,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU;YAC3B,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO;SACzB,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAqD,EACrD,SAAiB;IAEjB,MAAM,GAAG,GAAG,CAAC,CAAC;IACd,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,uBAAuB;IACxE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAEnE,4CAA4C;IAC5C,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACjD,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC,EAAE,CAAC,CAAC,CAAC;IAEN,MAAM,mBAAmB,GAAG,SAAS,GAAG,QAAQ,CAAC;IAEjD,4EAA4E;IAC5E,IAAI,cAAc,GAAG,mBAAmB,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,mBAAmB,GAAG,cAAc,CAAC,CAAC;QAClE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACzB,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;YACpE,CAAC;YACD,4DAA4D;YAC5D,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,GAAG,cAAc,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAExE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC;QACpD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,KAAa,EAAE,KAAkC;IAC9E,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAElC,mEAAmE;IACnE,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;QACnB,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,uBAAuB;IACvB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACrD,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACjC,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export interface TuiColumnDef<T> {
|
|
2
|
+
header: string;
|
|
3
|
+
width: number | "auto";
|
|
4
|
+
value: (item: T) => string;
|
|
5
|
+
align?: "left" | "right" | "center";
|
|
6
|
+
}
|
|
7
|
+
export interface TuiFetchResult<T> {
|
|
8
|
+
items: T[];
|
|
9
|
+
hasMore: boolean;
|
|
10
|
+
total?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface TuiCommandResult {
|
|
13
|
+
success: boolean;
|
|
14
|
+
message: string;
|
|
15
|
+
refreshList?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface TuiCommandDef<T> {
|
|
18
|
+
name: string;
|
|
19
|
+
description: string;
|
|
20
|
+
requiresSelection: boolean;
|
|
21
|
+
destructive?: boolean;
|
|
22
|
+
execute: (selectedItem: T | null, args: string) => Promise<TuiCommandResult>;
|
|
23
|
+
}
|
|
24
|
+
export interface TuiModuleDescriptor<T> {
|
|
25
|
+
name: string;
|
|
26
|
+
columns: TuiColumnDef<T>[];
|
|
27
|
+
fetchPage: (page: number, pageSize: number) => Promise<TuiFetchResult<T>>;
|
|
28
|
+
getId: (item: T) => string;
|
|
29
|
+
renderDetail: (item: T) => string[];
|
|
30
|
+
commands: TuiCommandDef<T>[];
|
|
31
|
+
searchFilter?: (item: T, query: string) => boolean;
|
|
32
|
+
}
|
|
33
|
+
export type TuiMode = "list" | "detail" | "command" | "search" | "confirm";
|
|
34
|
+
export interface TuiState<T> {
|
|
35
|
+
mode: TuiMode;
|
|
36
|
+
items: T[];
|
|
37
|
+
cursorIndex: number;
|
|
38
|
+
scrollOffset: number;
|
|
39
|
+
selectedItem: T | null;
|
|
40
|
+
detailScrollOffset: number;
|
|
41
|
+
commandInput: string;
|
|
42
|
+
searchQuery: string;
|
|
43
|
+
filteredItems: T[];
|
|
44
|
+
currentPage: number;
|
|
45
|
+
hasMorePages: boolean;
|
|
46
|
+
totalItems: number | null;
|
|
47
|
+
isLoading: boolean;
|
|
48
|
+
statusMessage: string | null;
|
|
49
|
+
statusType: "info" | "success" | "error";
|
|
50
|
+
pendingCommand: TuiCommandDef<T> | null;
|
|
51
|
+
}
|
|
52
|
+
export declare function createInitialState<T>(): TuiState<T>;
|
|
53
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;CACrC;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9E;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC3B,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;IACpC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CACpD;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE3E,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,CAAC,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACzC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACzC;AAED,wBAAgB,kBAAkB,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAmBnD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createInitialState = createInitialState;
|
|
4
|
+
function createInitialState() {
|
|
5
|
+
return {
|
|
6
|
+
mode: "list",
|
|
7
|
+
items: [],
|
|
8
|
+
cursorIndex: 0,
|
|
9
|
+
scrollOffset: 0,
|
|
10
|
+
selectedItem: null,
|
|
11
|
+
detailScrollOffset: 0,
|
|
12
|
+
commandInput: "",
|
|
13
|
+
searchQuery: "",
|
|
14
|
+
filteredItems: [],
|
|
15
|
+
currentPage: 0,
|
|
16
|
+
hasMorePages: true,
|
|
17
|
+
totalItems: null,
|
|
18
|
+
isLoading: false,
|
|
19
|
+
statusMessage: null,
|
|
20
|
+
statusType: "info",
|
|
21
|
+
pendingCommand: null,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=types.js.map
|