conqr 1.7.1 → 2.0.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/ui.js DELETED
@@ -1,582 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useState, useEffect, useRef, useCallback } from 'react';
3
- import { render, Box, Text, useInput, useApp, useStdin } from 'ink';
4
- import stripAnsi from 'strip-ansi';
5
- function truncateToDisplayWidth(text, maxWidth) {
6
- let width = 0;
7
- let result = '';
8
- for (const char of text) {
9
- const charWidth = char.length;
10
- if (width + charWidth > maxWidth) {
11
- break;
12
- }
13
- result += char;
14
- width += charWidth;
15
- }
16
- return result;
17
- }
18
- function padStartByDisplayWidth(text, targetWidth, padChar = ' ') {
19
- const truncated = truncateToDisplayWidth(text, targetWidth);
20
- const textWidth = truncated.length;
21
- if (textWidth >= targetWidth) {
22
- return truncated;
23
- }
24
- return padChar.repeat(targetWidth - textWidth) + truncated;
25
- }
26
- function padEndByDisplayWidth(text, targetWidth, padChar = ' ') {
27
- const textWidth = text.length;
28
- if (textWidth >= targetWidth) {
29
- return truncateToDisplayWidth(text, targetWidth);
30
- }
31
- return text + padChar.repeat(targetWidth - textWidth);
32
- }
33
- function detectAnsiColor(line) {
34
- const ansiColorRegex = /\x1b\[(\d+)(?:;(\d+))?(?:;(\d+))?(?:;(\d+))?(?:;(\d+))?m/g;
35
- let match;
36
- let lastColor = null;
37
- while ((match = ansiColorRegex.exec(line)) !== null) {
38
- const code = match[1];
39
- const code2 = match[2];
40
- const code3 = match[3];
41
- const code4 = match[4];
42
- const code5 = match[5];
43
- if (code === '0') {
44
- lastColor = null;
45
- }
46
- else if (code === '31' || code === '91') {
47
- lastColor = '#ff0000';
48
- }
49
- else if (code === '33' || code === '93') {
50
- lastColor = '#ffaa00';
51
- }
52
- else if (code === '32' || code === '92') {
53
- lastColor = '#00ff00';
54
- }
55
- else if (code === '34' || code === '94') {
56
- lastColor = '#5555ff';
57
- }
58
- else if (code === '35' || code === '95') {
59
- lastColor = '#ff55ff';
60
- }
61
- else if (code === '36' || code === '96') {
62
- lastColor = '#55ffff';
63
- }
64
- else if (code === '37' || code === '97') {
65
- lastColor = '#ffffff';
66
- }
67
- else if (code === '30' || code === '90') {
68
- lastColor = '#000000';
69
- }
70
- else if (code === '38' && code2 === '5' && code3) {
71
- const color256 = parseInt(code3);
72
- if (color256 >= 0 && color256 <= 15) {
73
- const basicColors = [
74
- '#000000', '#800000', '#008000', '#808000',
75
- '#000080', '#800080', '#008080', '#c0c0c0',
76
- '#808080', '#ff0000', '#00ff00', '#ffff00',
77
- '#0000ff', '#ff00ff', '#00ffff', '#ffffff'
78
- ];
79
- lastColor = basicColors[color256] || null;
80
- }
81
- else if (color256 >= 16 && color256 <= 231) {
82
- const r = Math.floor((color256 - 16) / 36);
83
- const g = Math.floor(((color256 - 16) % 36) / 6);
84
- const b = (color256 - 16) % 6;
85
- const rVal = r === 0 ? 0 : 55 + r * 40;
86
- const gVal = g === 0 ? 0 : 55 + g * 40;
87
- const bVal = b === 0 ? 0 : 55 + b * 40;
88
- lastColor = `#${rVal.toString(16).padStart(2, '0')}${gVal.toString(16).padStart(2, '0')}${bVal.toString(16).padStart(2, '0')}`;
89
- }
90
- else if (color256 >= 232 && color256 <= 255) {
91
- const gray = 8 + (color256 - 232) * 10;
92
- const grayHex = gray.toString(16).padStart(2, '0');
93
- lastColor = `#${grayHex}${grayHex}${grayHex}`;
94
- }
95
- }
96
- else if (code === '38' && code2 === '2' && code3 && code4 && code5) {
97
- const r = parseInt(code3);
98
- const g = parseInt(code4);
99
- const b = parseInt(code5);
100
- lastColor = `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;
101
- }
102
- }
103
- return lastColor;
104
- }
105
- const ALL_PROCESSES_INDEX = -1;
106
- function resetTerminalMouseMode() {
107
- process.stdout.write('\x1b[?1000l');
108
- process.stdout.write('\x1b[?1002l');
109
- process.stdout.write('\x1b[?1003l');
110
- process.stdout.write('\x1b[?1006l');
111
- process.stdout.write('\x1b[?1015l');
112
- process.stdout.write('\x1b[?25h');
113
- }
114
- function useMouseWheel(onScroll, enabled = true) {
115
- const { stdin, setRawMode, isRawModeSupported } = useStdin();
116
- const mouseBufferRef = useRef('');
117
- useEffect(() => {
118
- if (!enabled || !isRawModeSupported || !stdin) {
119
- return;
120
- }
121
- process.stdout.write('\x1b[?1000h');
122
- process.stdout.write('\x1b[?1006h');
123
- const handleData = (data) => {
124
- const str = data.toString();
125
- mouseBufferRef.current += str;
126
- const wheelUpRegex = /\x1b\[<64;(\d+);(\d+)M/g;
127
- const wheelDownRegex = /\x1b\[<65;(\d+);(\d+)M/g;
128
- const wheelUpRegexAlt = /\x1b\[64;(\d+);(\d+)M/g;
129
- const wheelDownRegexAlt = /\x1b\[65;(\d+);(\d+)M/g;
130
- let match = null;
131
- let found = false;
132
- match = wheelUpRegex.exec(mouseBufferRef.current) || wheelUpRegexAlt.exec(mouseBufferRef.current);
133
- if (match) {
134
- onScroll(-3);
135
- found = true;
136
- }
137
- else {
138
- match = wheelDownRegex.exec(mouseBufferRef.current) || wheelDownRegexAlt.exec(mouseBufferRef.current);
139
- if (match) {
140
- onScroll(3);
141
- found = true;
142
- }
143
- }
144
- if (found && match) {
145
- const matchEnd = match.index + match[0].length;
146
- mouseBufferRef.current = mouseBufferRef.current.slice(matchEnd);
147
- }
148
- else if (mouseBufferRef.current.length > 100) {
149
- mouseBufferRef.current = mouseBufferRef.current.slice(-50);
150
- }
151
- };
152
- stdin.on('data', handleData);
153
- return () => {
154
- stdin.removeListener('data', handleData);
155
- resetTerminalMouseMode();
156
- };
157
- }, [enabled, stdin, isRawModeSupported, onScroll]);
158
- }
159
- export function TUI({ commands, processManager, logBuffer }) {
160
- const [selectedIndex, setSelectedIndex] = useState(0);
161
- const [focusedPane, setFocusedPane] = useState('sidebar');
162
- const [logScrollOffset, setLogScrollOffset] = useState(0);
163
- const [statuses, setStatuses] = useState(new Map());
164
- const [logs, setLogs] = useState([]);
165
- const [rawMode, setRawMode] = useState(false);
166
- const [restartStates, setRestartStates] = useState(new Map());
167
- const { exit } = useApp();
168
- const sidebarWidth = 30;
169
- const prevLogsRef = useRef([]);
170
- const prevStatusesRef = useRef(new Map());
171
- useEffect(() => {
172
- return () => {
173
- resetTerminalMouseMode();
174
- };
175
- }, []);
176
- useEffect(() => {
177
- const updateStatuses = () => {
178
- const newStatuses = new Map();
179
- commands.forEach(cmd => {
180
- newStatuses.set(cmd.id, processManager.getStatus(cmd.id));
181
- });
182
- const prevStatuses = prevStatusesRef.current;
183
- let hasChanged = false;
184
- if (prevStatuses.size !== newStatuses.size) {
185
- hasChanged = true;
186
- }
187
- else {
188
- for (const [id, status] of newStatuses) {
189
- if (prevStatuses.get(id) !== status) {
190
- hasChanged = true;
191
- break;
192
- }
193
- }
194
- }
195
- if (hasChanged) {
196
- prevStatusesRef.current = newStatuses;
197
- setStatuses(newStatuses);
198
- }
199
- };
200
- const updateLogs = () => {
201
- const unifiedView = selectedIndex === ALL_PROCESSES_INDEX;
202
- const bufferLogs = unifiedView
203
- ? logBuffer.getUnifiedLogs()
204
- : (() => {
205
- const selectedCmd = commands[selectedIndex];
206
- return logBuffer.getLogs(selectedCmd.id);
207
- })();
208
- const prevLogs = prevLogsRef.current;
209
- const prevLength = prevLogs.length;
210
- const newLength = bufferLogs.length;
211
- if (prevLength !== newLength || (newLength > 0 && prevLogs[prevLength - 1]?.timestamp !== bufferLogs[newLength - 1]?.timestamp)) {
212
- const newLogs = [...bufferLogs];
213
- prevLogsRef.current = newLogs;
214
- setLogs(newLogs);
215
- }
216
- };
217
- const updateRestartStates = (event) => {
218
- setRestartStates(prev => {
219
- const newMap = new Map(prev);
220
- newMap.set(event.processId, {
221
- isRestarting: event.isRestarting,
222
- restartCount: event.restartCount,
223
- crashCount: event.crashCount
224
- });
225
- return newMap;
226
- });
227
- };
228
- processManager.on('status-change', updateStatuses);
229
- processManager.on('log', updateLogs);
230
- processManager.on('restart-state-change', updateRestartStates);
231
- updateStatuses();
232
- updateLogs();
233
- // Initialize restart states for all commands
234
- const initialRestartStates = new Map();
235
- commands.forEach(cmd => {
236
- initialRestartStates.set(cmd.id, {
237
- isRestarting: processManager.isRestarting(cmd.id),
238
- restartCount: processManager.getRestartCount(cmd.id),
239
- crashCount: processManager.getCrashCount(cmd.id)
240
- });
241
- });
242
- setRestartStates(initialRestartStates);
243
- return () => {
244
- processManager.removeAllListeners('status-change');
245
- processManager.removeAllListeners('log');
246
- processManager.removeAllListeners('restart-state-change');
247
- };
248
- }, [commands, processManager, logBuffer, selectedIndex]);
249
- useEffect(() => {
250
- setLogScrollOffset(Infinity);
251
- prevLogsRef.current = [];
252
- }, [selectedIndex]);
253
- const prevLogsLengthRef = useRef(0);
254
- const terminalHeight = process.stdout.rows || 24;
255
- const displayHeight = terminalHeight - 1;
256
- const unifiedView = selectedIndex === ALL_PROCESSES_INDEX;
257
- useEffect(() => {
258
- const wasAtBottom = logScrollOffset === Infinity ||
259
- (logScrollOffset >= logs.length - displayHeight && logs.length > displayHeight);
260
- if (wasAtBottom && logs.length > prevLogsLengthRef.current && logScrollOffset !== Infinity) {
261
- setLogScrollOffset(Infinity);
262
- }
263
- if (logScrollOffset !== Infinity && logs.length > displayHeight) {
264
- const maxScroll = Math.max(0, logs.length - displayHeight);
265
- if (logScrollOffset >= maxScroll) {
266
- setLogScrollOffset(Infinity);
267
- }
268
- }
269
- prevLogsLengthRef.current = logs.length;
270
- }, [logs.length, logScrollOffset, displayHeight]);
271
- useInput((input, key) => {
272
- if (rawMode) {
273
- if (input === 'l' || input === 'L') {
274
- setRawMode(false);
275
- }
276
- else if (input === 'q' || input === 'Q' || (key.ctrl && input === 'c')) {
277
- const shutdownMessage = '› Shutting down all processes, SIGTERM signal sent';
278
- commands.forEach(cmd => {
279
- logBuffer.addLog(cmd.id, shutdownMessage, 'stdout', true);
280
- processManager.emit('log', { processId: cmd.id, line: shutdownMessage, source: 'stdout' });
281
- });
282
- resetTerminalMouseMode();
283
- processManager.killAll().then(() => {
284
- exit();
285
- process.exit(0);
286
- }).catch(() => {
287
- exit();
288
- process.exit(0);
289
- });
290
- }
291
- return;
292
- }
293
- if (key.leftArrow && focusedPane === 'main') {
294
- setFocusedPane('sidebar');
295
- }
296
- else if (key.rightArrow && focusedPane === 'sidebar') {
297
- setFocusedPane('main');
298
- }
299
- else if (key.upArrow) {
300
- if (focusedPane === 'sidebar') {
301
- if (selectedIndex === ALL_PROCESSES_INDEX) {
302
- setSelectedIndex(commands.length - 1);
303
- }
304
- else if (selectedIndex === 0) {
305
- setSelectedIndex(ALL_PROCESSES_INDEX);
306
- }
307
- else {
308
- setSelectedIndex(selectedIndex - 1);
309
- }
310
- setLogScrollOffset(Infinity);
311
- }
312
- }
313
- else if (key.downArrow) {
314
- if (focusedPane === 'sidebar') {
315
- if (selectedIndex === ALL_PROCESSES_INDEX) {
316
- setSelectedIndex(0);
317
- }
318
- else if (selectedIndex === commands.length - 1) {
319
- setSelectedIndex(ALL_PROCESSES_INDEX);
320
- }
321
- else {
322
- setSelectedIndex(selectedIndex + 1);
323
- }
324
- setLogScrollOffset(Infinity);
325
- }
326
- }
327
- else if (input === 'l' || input === 'L') {
328
- setRawMode(prev => !prev);
329
- }
330
- else if ((input === 'r' || input === 'R') && focusedPane === 'sidebar') {
331
- if (selectedIndex !== ALL_PROCESSES_INDEX) {
332
- processManager.restart(commands[selectedIndex].id, true); // true = manual restart
333
- }
334
- }
335
- else if (input === 'q' || input === 'Q' || (key.ctrl && input === 'c')) {
336
- const shutdownMessage = '› Shutting down all processes, SIGTERM signal sent';
337
- commands.forEach(cmd => {
338
- logBuffer.addLog(cmd.id, shutdownMessage, 'stdout', true);
339
- processManager.emit('log', { processId: cmd.id, line: shutdownMessage, source: 'stdout' });
340
- });
341
- resetTerminalMouseMode();
342
- processManager.killAll().then(() => {
343
- exit();
344
- process.exit(0);
345
- }).catch(() => {
346
- exit();
347
- process.exit(0);
348
- });
349
- }
350
- });
351
- const effectiveDisplayHeight = rawMode ? terminalHeight : displayHeight - 1;
352
- const wasAtBottom = logScrollOffset === Infinity ||
353
- (logScrollOffset >= logs.length - effectiveDisplayHeight && logs.length > effectiveDisplayHeight);
354
- const startIndex = wasAtBottom
355
- ? Math.max(0, logs.length - effectiveDisplayHeight)
356
- : Math.min(logScrollOffset, Math.max(0, logs.length - effectiveDisplayHeight));
357
- const displayLogs = logs.slice(startIndex, startIndex + effectiveDisplayHeight);
358
- const terminalWidth = process.stdout.columns || 80;
359
- const contentHeight = rawMode ? terminalHeight : terminalHeight - 1;
360
- const helpText = rawMode
361
- ? ''
362
- : focusedPane === 'sidebar'
363
- ? '←→: switch | r: restart | l: logs | q: quit'
364
- : '←→: switch | ↑↓: scroll | PageUp/Down: 10 lines | Home/End: top/bottom | l: logs | q: quit';
365
- return (_jsxs(Box, { flexDirection: "column", width: terminalWidth, height: terminalHeight, children: [!rawMode && (_jsxs(Box, { flexDirection: "row", width: terminalWidth, height: contentHeight, children: [_jsx(Sidebar, { width: sidebarWidth, height: contentHeight, commands: commands, selectedIndex: selectedIndex, statuses: statuses, focusedPane: focusedPane, restartStates: restartStates }), _jsx(Separator, { height: contentHeight }), _jsx(MainPane, { width: terminalWidth - sidebarWidth - 1, height: contentHeight, unifiedView: unifiedView, selectedCommand: unifiedView ? null : commands[selectedIndex], logs: displayLogs, focusedPane: focusedPane, commands: commands, logScrollOffset: logScrollOffset, totalLogs: logs.length, displayHeight: effectiveDisplayHeight, onScrollChange: setLogScrollOffset, enableInput: true, enableKeyboardInput: focusedPane === 'main', restartStates: restartStates })] })), rawMode && (_jsx(MainPane, { width: terminalWidth, height: terminalHeight, unifiedView: unifiedView, selectedCommand: null, logs: displayLogs, focusedPane: "main", commands: commands, logScrollOffset: logScrollOffset, totalLogs: logs.length, displayHeight: terminalHeight, onScrollChange: setLogScrollOffset, enableInput: false, enableKeyboardInput: true, showHeader: false, useColors: false, restartStates: restartStates })), !rawMode && (_jsx(Box, { width: terminalWidth, height: 1, children: _jsx(Text, { backgroundColor: "#585858", color: "#ffffff", children: helpText.padEnd(terminalWidth) }) }))] }));
366
- }
367
- function Sidebar({ width, height, commands, selectedIndex, statuses, focusedPane, restartStates }) {
368
- const headerBg = focusedPane === 'sidebar' ? '#0055ff' : '#585858';
369
- const headerFg = '#ffffff';
370
- const headerText = focusedPane === 'sidebar' ? '▶ Commands ' : ' Commands ';
371
- const availableHeight = height - 1;
372
- let renderIndex = 0;
373
- const isAllProcessesSelected = selectedIndex === ALL_PROCESSES_INDEX;
374
- const allProcessesBg = isAllProcessesSelected ? '#eeeeee' : undefined;
375
- const allProcessesFg = isAllProcessesSelected ? '#000000' : '#444444';
376
- const allProcessesDot = isAllProcessesSelected ? '• ' : ' ';
377
- const allProcessesName = 'All processes'.substring(0, width - 8);
378
- const allProcessesNamePadded = allProcessesName.padEnd(width - 8);
379
- const maxCommandsToShow = availableHeight - 1;
380
- let startCmdIndex = 0;
381
- if (selectedIndex !== ALL_PROCESSES_INDEX && selectedIndex >= maxCommandsToShow) {
382
- startCmdIndex = selectedIndex - maxCommandsToShow + 1;
383
- }
384
- const visibleCommands = commands.slice(startCmdIndex, startCmdIndex + maxCommandsToShow);
385
- const helpText = focusedPane === 'sidebar'
386
- ? '←→: switch | r: restart | q: quit'
387
- : '←→: switch | ↑↓: scroll | Home/End: top/bottom | q: quit';
388
- return (_jsxs(Box, { flexDirection: "column", width: width, height: height, children: [_jsx(Box, { width: width, height: 1, children: _jsx(Text, { backgroundColor: headerBg, color: headerFg, bold: focusedPane === 'sidebar', children: headerText.padEnd(width) }) }), _jsxs(Box, { width: width, height: 1, children: [_jsx(Text, { backgroundColor: allProcessesBg, color: allProcessesFg, bold: isAllProcessesSelected, children: allProcessesDot }), _jsx(Text, { backgroundColor: allProcessesBg, color: allProcessesFg, bold: isAllProcessesSelected, children: allProcessesNamePadded }), _jsx(Text, { backgroundColor: allProcessesBg, color: "#d7d7d7", children: ' ' }), _jsx(Text, { backgroundColor: allProcessesBg, color: "#d7d7d7", children: "---" })] }), visibleCommands.map((cmd, idx) => {
389
- const actualIndex = startCmdIndex + idx;
390
- const status = statuses.get(cmd.id) || 'unknown';
391
- const restartState = restartStates.get(cmd.id);
392
- const isRestarting = restartState?.isRestarting || false;
393
- const isSelected = actualIndex === selectedIndex;
394
- const itemBg = isSelected ? '#eeeeee' : undefined;
395
- const itemFg = isSelected ? '#000000' : '#444444';
396
- const dotText = isSelected ? '• ' : ' ';
397
- const statusColor = status === 'running' ? '#00ff00' : status === 'error' ? '#ffaa00' : '#ff0000';
398
- // Reserve fixed width of 8 terminal cells for status to prevent layout shifts
399
- const statusWidth = 8;
400
- const nameMaxWidth = width - 2 - statusWidth;
401
- const name = cmd.name.substring(0, nameMaxWidth);
402
- let statusText = status === 'running' ? 'UP' : status === 'error' ? 'ERROR' : 'DOWN';
403
- if (isRestarting && status !== 'running') {
404
- statusText = '› DOWN';
405
- }
406
- const statusWithPadding = padStartByDisplayWidth(statusText, statusWidth);
407
- return (_jsxs(Box, { width: width, height: 1, flexDirection: "row", children: [_jsx(Box, { width: 2, children: _jsx(Text, { backgroundColor: itemBg, color: itemFg, bold: isSelected, children: dotText }) }), _jsx(Box, { width: nameMaxWidth, children: _jsx(Text, { backgroundColor: itemBg, color: itemFg, bold: isSelected, children: name.padEnd(nameMaxWidth) }) }), _jsx(Box, { width: statusWidth, children: _jsx(Text, { backgroundColor: itemBg, color: statusColor, children: statusWithPadding }) })] }, cmd.id));
408
- })] }));
409
- }
410
- function Separator({ height }) {
411
- return (_jsx(Box, { flexDirection: "column", width: 1, height: height, children: Array.from({ length: height }, (_, i) => (_jsx(Text, { color: "#585858", children: "\u2502" }, i))) }));
412
- }
413
- function MoreLogsBelow({ width }) {
414
- return (_jsx(Box, { width: width, height: 1, children: _jsx(Text, { backgroundColor: "#ffaa00", color: "#000000", bold: true, children: ' ▼ More logs below - Press END to jump to bottom '.padEnd(width) }) }));
415
- }
416
- function LogsList({ logs, width, unifiedView, commands, useColors = true }) {
417
- return (_jsx(_Fragment, { children: logs.map((log, i) => {
418
- const ansiColor = useColors ? detectAnsiColor(log.line) : null;
419
- let line = stripAnsi(log.line);
420
- const originalLine = line;
421
- let prefix = '';
422
- if (unifiedView && log.processId !== undefined) {
423
- const cmd = commands.find(c => c.id === log.processId);
424
- prefix = `[${cmd ? cmd.name : log.processId}] `;
425
- line = prefix + line;
426
- }
427
- const isSystem = log.isSystem === true;
428
- const lineColor = useColors
429
- ? (isSystem
430
- ? '#ffffff' // White for system messages to be clearly visible on dark background
431
- : (ansiColor || (log.source === 'stderr' ? '#ff0000' : undefined)))
432
- : undefined;
433
- const backgroundColor = useColors && isSystem ? '#2a2a2a' : undefined;
434
- const paddingLeft = isSystem ? 2 : 0;
435
- // Check if this is a non-zero exit code message
436
- const isNonZeroExitCode = isSystem && useColors && originalLine.startsWith('× Process exited with code');
437
- if (isNonZeroExitCode) {
438
- // Color the entire exit code message in red for better visibility
439
- const truncated = truncateToDisplayWidth(line, width - paddingLeft);
440
- const paddedLine = isSystem ? ' ' + truncated : truncated;
441
- const finalLine = useColors ? padEndByDisplayWidth(paddedLine, width) : paddedLine;
442
- return (_jsx(Text, { color: "#ff0000", backgroundColor: backgroundColor, italic: isSystem, children: finalLine }, i));
443
- }
444
- // Regular rendering for non-exit-code messages
445
- const truncated = truncateToDisplayWidth(line, width - paddingLeft);
446
- const paddedLine = isSystem ? ' ' + truncated : truncated;
447
- const finalLine = useColors ? padEndByDisplayWidth(paddedLine, width) : paddedLine;
448
- return (_jsx(Text, { color: lineColor, backgroundColor: backgroundColor, italic: isSystem, children: finalLine }, i));
449
- }) }));
450
- }
451
- function MainPane({ width, height, unifiedView, selectedCommand, logs, focusedPane, commands, logScrollOffset, totalLogs, displayHeight, showHeader = true, useColors = true, onScrollChange, enableInput = true, enableKeyboardInput = true, restartStates }) {
452
- const title = unifiedView ? ' All Logs ' : ` ${selectedCommand?.name || ''} - ${selectedCommand?.command || ''} `;
453
- const headerBg = focusedPane === 'main' ? '#0055ff' : '#585858';
454
- const headerFg = '#ffffff';
455
- // Calculate restart and crash counts
456
- let restartCount = 0;
457
- let crashCount = 0;
458
- if (unifiedView) {
459
- commands.forEach(cmd => {
460
- const state = restartStates.get(cmd.id);
461
- if (state) {
462
- restartCount += state.restartCount;
463
- crashCount += state.crashCount;
464
- }
465
- });
466
- }
467
- else if (selectedCommand) {
468
- const state = restartStates.get(selectedCommand.id);
469
- if (state) {
470
- restartCount = state.restartCount;
471
- crashCount = state.crashCount;
472
- }
473
- }
474
- const indicatorsText = (restartCount > 0 || crashCount > 0)
475
- ? `🔄 ${restartCount} ❌ ${crashCount} `
476
- : '';
477
- const headerText = focusedPane === 'main' ? '▶' + title : ' ' + title;
478
- const isScrolledUp = logScrollOffset !== Infinity;
479
- const hasMoreBelow = isScrolledUp && totalLogs > displayHeight && logScrollOffset < totalLogs - displayHeight;
480
- const headerHeight = showHeader ? 1 : 0;
481
- const logAreaHeight = height - headerHeight - (hasMoreBelow ? 1 : 0);
482
- const handleMouseWheel = useCallback((delta) => {
483
- if (!enableInput) {
484
- return;
485
- }
486
- if (delta > 0) {
487
- if (logScrollOffset === Infinity) {
488
- const maxScroll = Math.max(0, totalLogs - displayHeight);
489
- onScrollChange(Math.max(0, maxScroll - delta));
490
- }
491
- else {
492
- onScrollChange(Math.max(0, logScrollOffset - delta));
493
- }
494
- }
495
- else {
496
- if (logScrollOffset === Infinity) {
497
- onScrollChange(Infinity);
498
- }
499
- else {
500
- const maxScroll = Math.max(0, totalLogs - displayHeight);
501
- const newScroll = Math.min(logScrollOffset - delta, maxScroll);
502
- onScrollChange(newScroll >= maxScroll ? Infinity : newScroll);
503
- }
504
- }
505
- }, [enableInput, logScrollOffset, totalLogs, displayHeight, onScrollChange]);
506
- useMouseWheel(handleMouseWheel, enableInput);
507
- useInput((input, key) => {
508
- if (!enableKeyboardInput) {
509
- return;
510
- }
511
- if (key.upArrow) {
512
- if (logScrollOffset === Infinity) {
513
- onScrollChange(Math.max(0, totalLogs - displayHeight - 1));
514
- }
515
- else {
516
- onScrollChange(Math.max(0, logScrollOffset - 1));
517
- }
518
- }
519
- else if (key.downArrow) {
520
- if (logScrollOffset === Infinity) {
521
- onScrollChange(Infinity);
522
- }
523
- else {
524
- const maxScroll = Math.max(0, totalLogs - displayHeight);
525
- const newScroll = Math.min(logScrollOffset + 1, maxScroll);
526
- onScrollChange(newScroll >= maxScroll ? Infinity : newScroll);
527
- }
528
- }
529
- else if (key.pageUp) {
530
- if (logScrollOffset === Infinity) {
531
- onScrollChange(Math.max(0, totalLogs - displayHeight - 10));
532
- }
533
- else {
534
- onScrollChange(Math.max(0, logScrollOffset - 10));
535
- }
536
- }
537
- else if (key.pageDown) {
538
- if (logScrollOffset === Infinity) {
539
- onScrollChange(Infinity);
540
- }
541
- else {
542
- const maxScroll = Math.max(0, totalLogs - displayHeight);
543
- const newScroll = Math.min(logScrollOffset + 10, maxScroll);
544
- onScrollChange(newScroll >= maxScroll ? Infinity : newScroll);
545
- }
546
- }
547
- else if (input === '\x1b[H' || input === '\x1bOH') {
548
- onScrollChange(0);
549
- }
550
- else if (input === '\x1b[F' || input === '\x1bOF') {
551
- onScrollChange(Infinity);
552
- }
553
- });
554
- return (_jsxs(Box, { flexDirection: "column", width: width, height: height, children: [showHeader && (_jsxs(Box, { width: width, height: 1, children: [_jsx(Text, { backgroundColor: headerBg, color: headerFg, bold: focusedPane === 'main', children: headerText.padEnd(width - (indicatorsText ? indicatorsText.length : 0)) }), indicatorsText && (_jsx(Text, { backgroundColor: headerBg, color: headerFg, children: indicatorsText }))] })), _jsx(Box, { flexDirection: "column", width: width, height: logAreaHeight, children: _jsx(LogsList, { logs: logs.slice(0, logAreaHeight), width: width, unifiedView: unifiedView, commands: commands, useColors: useColors }) }), hasMoreBelow && _jsx(MoreLogsBelow, { width: width })] }));
555
- }
556
- export function renderTUI(commands, processManager, logBuffer) {
557
- processManager.startAll(commands);
558
- const cleanup = async () => {
559
- resetTerminalMouseMode();
560
- await processManager.killAll();
561
- };
562
- process.once('exit', () => {
563
- resetTerminalMouseMode();
564
- });
565
- process.on('SIGINT', () => {
566
- resetTerminalMouseMode();
567
- cleanup().then(() => {
568
- process.exit(0);
569
- });
570
- });
571
- process.on('SIGTERM', () => {
572
- resetTerminalMouseMode();
573
- cleanup().then(() => {
574
- process.exit(0);
575
- });
576
- });
577
- const { waitUntilExit } = render(_jsx(TUI, { commands: commands, processManager: processManager, logBuffer: logBuffer }));
578
- waitUntilExit().then(() => {
579
- cleanup();
580
- });
581
- }
582
- //# sourceMappingURL=ui.js.map
package/dist/ui.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.tsx"],"names":[],"mappings":"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"}