treesap 0.1.11 → 0.1.12
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/components/Terminal.js +1 -1
- package/dist/components/Terminal.js.map +1 -1
- package/dist/services/websocket.d.ts +4 -1
- package/dist/services/websocket.d.ts.map +1 -1
- package/dist/services/websocket.js +26 -0
- package/dist/services/websocket.js.map +1 -1
- package/dist/static/components/Terminal.js +97 -9
- package/dist/static/styles/main.css +8 -5
- package/package.json +1 -1
- package/src/components/Terminal.tsx +5 -5
- package/src/services/websocket.ts +32 -1
- package/src/static/components/Terminal.js +97 -9
- package/src/static/styles/main.css +8 -5
|
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
|
|
|
2
2
|
export function Terminal({ id, index = 1 }) {
|
|
3
3
|
const terminalId = id || `terminal-${index}`;
|
|
4
4
|
const sessionId = `terminal-${index}`;
|
|
5
|
-
return (_jsxs("sapling-island", { loading: "visible", children: [_jsxs("template", { children: [_jsx("link", { href: "https://cdn.jsdelivr.net/npm/@xterm/xterm@5.5.0/css/xterm.min.css", rel: "stylesheet" }), _jsx("script", { type: "module", src: "/components/Terminal.js" })] }), _jsx("div", { id: terminalId, class: "h-full bg-
|
|
5
|
+
return (_jsxs("sapling-island", { loading: "visible", children: [_jsxs("template", { children: [_jsx("link", { href: "https://cdn.jsdelivr.net/npm/@xterm/xterm@5.5.0/css/xterm.min.css", rel: "stylesheet" }), _jsx("script", { type: "module", src: "/components/Terminal.js" })] }), _jsx("div", { id: terminalId, class: "h-full bg-[#1e1e1e] flex font-sans overflow-hidden", children: _jsx("div", { class: "w-full flex flex-col bg-[#1e1e1e] relative min-w-0", children: _jsx("div", { id: `${terminalId}-container`, class: "h-full flex flex-col min-w-0", children: _jsx("div", { class: "flex-1 overflow-hidden min-w-0", children: _jsx("div", { id: `${terminalId}-xterm`, class: "h-full w-full min-w-0 max-w-full" }) }) }) }) }), _jsx("script", { dangerouslySetInnerHTML: { __html: `
|
|
6
6
|
// Pass terminal data to JavaScript
|
|
7
7
|
window.terminalData_${terminalId.replace(/-/g, '_')} = {
|
|
8
8
|
terminalId: '${terminalId}',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Terminal.js","sourceRoot":"","sources":["../../src/components/Terminal.tsx"],"names":[],"mappings":";AAKA,MAAM,UAAU,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,EAAiB;IACvD,MAAM,UAAU,GAAG,EAAE,IAAI,YAAY,KAAK,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,YAAY,KAAK,EAAE,CAAC;IACtC,OAAO,CACL,0BAAgB,OAAO,EAAC,SAAS,aAC/B,+BACE,eAAM,IAAI,EAAC,mEAAmE,EAAC,GAAG,EAAC,YAAY,GAAG,EAClG,iBAAQ,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,yBAAyB,GAAU,IACpD,EAEX,cAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"Terminal.js","sourceRoot":"","sources":["../../src/components/Terminal.tsx"],"names":[],"mappings":";AAKA,MAAM,UAAU,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,EAAiB;IACvD,MAAM,UAAU,GAAG,EAAE,IAAI,YAAY,KAAK,EAAE,CAAC;IAC7C,MAAM,SAAS,GAAG,YAAY,KAAK,EAAE,CAAC;IACtC,OAAO,CACL,0BAAgB,OAAO,EAAC,SAAS,aAC/B,+BACE,eAAM,IAAI,EAAC,mEAAmE,EAAC,GAAG,EAAC,YAAY,GAAG,EAClG,iBAAQ,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,yBAAyB,GAAU,IACpD,EAEX,cAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAC,oDAAoD,YAE7E,cAAK,KAAK,EAAC,oDAAoD,YAE7D,cAAK,EAAE,EAAE,GAAG,UAAU,YAAY,EAAE,KAAK,EAAC,8BAA8B,YAGtE,cAAK,KAAK,EAAC,gCAAgC,YACzC,cAAK,EAAE,EAAE,GAAG,UAAU,QAAQ,EAAE,KAAK,EAAC,kCAAkC,GAAO,GAC3E,GACF,GACF,GACF,EAEN,iBAAQ,uBAAuB,EAAE,EAAC,MAAM,EAAE;;8BAElB,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;yBAClC,UAAU;wBACX,SAAS;mBACd,KAAK;;OAEjB,EAAC,GAAW,IACE,CAClB,CAAC;AACJ,CAAC"}
|
|
@@ -8,10 +8,12 @@ export interface WebSocketClient {
|
|
|
8
8
|
lastPing: Date;
|
|
9
9
|
}
|
|
10
10
|
export interface WebSocketMessage {
|
|
11
|
-
type: 'join' | 'leave' | 'input' | 'ping' | 'pong';
|
|
11
|
+
type: 'join' | 'leave' | 'input' | 'resize' | 'ping' | 'pong';
|
|
12
12
|
sessionId?: string;
|
|
13
13
|
terminalId?: string;
|
|
14
14
|
data?: string;
|
|
15
|
+
cols?: number;
|
|
16
|
+
rows?: number;
|
|
15
17
|
timestamp?: number;
|
|
16
18
|
}
|
|
17
19
|
export declare class WebSocketTerminalService {
|
|
@@ -24,6 +26,7 @@ export declare class WebSocketTerminalService {
|
|
|
24
26
|
private static handleJoin;
|
|
25
27
|
private static handleLeave;
|
|
26
28
|
private static handleInput;
|
|
29
|
+
private static handleResize;
|
|
27
30
|
private static handleDisconnect;
|
|
28
31
|
private static addClientToSession;
|
|
29
32
|
private static removeClientFromSession;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/services/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,SAAS,EAAE,MAAM,IAAI,CAAC;AAKhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,SAAS,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/services/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,SAAS,EAAE,MAAM,IAAI,CAAC;AAKhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,SAAS,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAgC;IAClD,OAAO,CAAC,MAAM,CAAC,OAAO,CAAsC;IAC5D,OAAO,CAAC,MAAM,CAAC,cAAc,CAAkC;IAE/D,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM;IA8ChC,OAAO,CAAC,MAAM,CAAC,aAAa;IAsB5B,OAAO,CAAC,MAAM,CAAC,aAAa;IAqC5B,OAAO,CAAC,MAAM,CAAC,UAAU;IAuCzB,OAAO,CAAC,MAAM,CAAC,WAAW;IAe1B,OAAO,CAAC,MAAM,CAAC,WAAW;IA8B1B,OAAO,CAAC,MAAM,CAAC,YAAY;IA0B3B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAOjC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAYtC,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAiBzC,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAQ3C,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAcjC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAenC,OAAO,CAAC,MAAM,CAAC,YAAY;IAe3B,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAKrD,MAAM,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAaxE,MAAM,CAAC,iBAAiB,IAAI,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAO7E,MAAM,CAAC,mBAAmB,IAAI,MAAM;IAIpC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM;IAoBrC,MAAM,CAAC,OAAO;CAUf"}
|
|
@@ -80,6 +80,9 @@ export class WebSocketTerminalService {
|
|
|
80
80
|
case 'input':
|
|
81
81
|
this.handleInput(clientId, message);
|
|
82
82
|
break;
|
|
83
|
+
case 'resize':
|
|
84
|
+
this.handleResize(clientId, message);
|
|
85
|
+
break;
|
|
83
86
|
case 'ping':
|
|
84
87
|
this.sendToClient(clientId, {
|
|
85
88
|
type: 'pong',
|
|
@@ -167,6 +170,29 @@ export class WebSocketTerminalService {
|
|
|
167
170
|
});
|
|
168
171
|
}
|
|
169
172
|
}
|
|
173
|
+
static handleResize(clientId, message) {
|
|
174
|
+
const client = this.clients.get(clientId);
|
|
175
|
+
if (!client || !message.sessionId || message.cols === undefined || message.rows === undefined)
|
|
176
|
+
return;
|
|
177
|
+
// Get the terminal session
|
|
178
|
+
const session = TerminalService.getSession(message.sessionId);
|
|
179
|
+
if (!session) {
|
|
180
|
+
console.error(`Session ${message.sessionId} not found for resize`);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
// Resize the PTY
|
|
184
|
+
try {
|
|
185
|
+
console.log(`Resizing terminal session ${message.sessionId} to ${message.cols}x${message.rows}`);
|
|
186
|
+
session.process.resize(message.cols, message.rows);
|
|
187
|
+
session.lastActivity = new Date();
|
|
188
|
+
// Update session dimensions
|
|
189
|
+
session.cols = message.cols;
|
|
190
|
+
session.rows = message.rows;
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
console.error(`Failed to resize session ${message.sessionId}:`, error);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
170
196
|
static handleDisconnect(clientId) {
|
|
171
197
|
const client = this.clients.get(clientId);
|
|
172
198
|
console.log(`WebSocket client disconnected: ${clientId}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/services/websocket.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/services/websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,7 +58,10 @@ class TerminalManager {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
setupXterm() {
|
|
61
|
-
//
|
|
61
|
+
// Detect mobile devices for responsive terminal setup
|
|
62
|
+
const isMobile = window.innerWidth <= 768 || /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
|
63
|
+
|
|
64
|
+
// Create terminal instance with VS Code-like theme and responsive settings
|
|
62
65
|
this.terminal = new Terminal({
|
|
63
66
|
cursorBlink: true,
|
|
64
67
|
fontSize: 12,
|
|
@@ -86,9 +89,14 @@ class TerminalManager {
|
|
|
86
89
|
brightCyan: '#29b8db',
|
|
87
90
|
brightWhite: '#ffffff'
|
|
88
91
|
},
|
|
89
|
-
scrollback: 1000,
|
|
92
|
+
scrollback: isMobile ? 500 : 1000, // Smaller scrollback for mobile performance
|
|
90
93
|
tabStopWidth: 4,
|
|
91
|
-
allowTransparency: false
|
|
94
|
+
allowTransparency: false,
|
|
95
|
+
// Mobile-specific options
|
|
96
|
+
...(isMobile && {
|
|
97
|
+
convertEol: true,
|
|
98
|
+
disableStdin: false
|
|
99
|
+
})
|
|
92
100
|
});
|
|
93
101
|
|
|
94
102
|
// Open terminal in container
|
|
@@ -110,7 +118,20 @@ class TerminalManager {
|
|
|
110
118
|
|
|
111
119
|
// Resize handler
|
|
112
120
|
window.addEventListener('resize', () => {
|
|
113
|
-
|
|
121
|
+
// Add a small delay for mobile orientation changes
|
|
122
|
+
clearTimeout(this.resizeTimeout);
|
|
123
|
+
this.resizeTimeout = setTimeout(() => {
|
|
124
|
+
this.fitTerminal();
|
|
125
|
+
}, 100);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// Mobile orientation change handler
|
|
129
|
+
window.addEventListener('orientationchange', () => {
|
|
130
|
+
// Longer delay for orientation changes as they can be slower
|
|
131
|
+
clearTimeout(this.orientationTimeout);
|
|
132
|
+
this.orientationTimeout = setTimeout(() => {
|
|
133
|
+
this.fitTerminal();
|
|
134
|
+
}, 300);
|
|
114
135
|
});
|
|
115
136
|
}
|
|
116
137
|
|
|
@@ -120,10 +141,77 @@ class TerminalManager {
|
|
|
120
141
|
setTimeout(() => {
|
|
121
142
|
const containerRect = this.xtermContainer.getBoundingClientRect();
|
|
122
143
|
if (containerRect.width > 0 && containerRect.height > 0) {
|
|
123
|
-
|
|
124
|
-
const
|
|
125
|
-
|
|
144
|
+
// Detect mobile devices for responsive sizing
|
|
145
|
+
const isMobile = window.innerWidth <= 768 || /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
|
146
|
+
|
|
147
|
+
// Use consistent font size
|
|
148
|
+
const fontSize = 12;
|
|
149
|
+
|
|
150
|
+
// Calculate character dimensions more accurately
|
|
151
|
+
// Create a temporary element to measure actual character size
|
|
152
|
+
const testElement = document.createElement('div');
|
|
153
|
+
testElement.style.fontFamily = this.terminal.options.fontFamily;
|
|
154
|
+
testElement.style.fontSize = `${fontSize}px`;
|
|
155
|
+
testElement.style.position = 'absolute';
|
|
156
|
+
testElement.style.visibility = 'hidden';
|
|
157
|
+
testElement.style.whiteSpace = 'pre';
|
|
158
|
+
testElement.textContent = 'M'; // Use 'M' as it's typically the widest character
|
|
159
|
+
document.body.appendChild(testElement);
|
|
160
|
+
|
|
161
|
+
const charWidth = testElement.getBoundingClientRect().width;
|
|
162
|
+
const charHeight = testElement.getBoundingClientRect().height;
|
|
163
|
+
document.body.removeChild(testElement);
|
|
164
|
+
|
|
165
|
+
// Calculate columns and rows based on actual character dimensions
|
|
166
|
+
const cols = Math.max(20, Math.floor(containerRect.width / charWidth)); // Minimum 20 columns
|
|
167
|
+
const rows = Math.max(10, Math.floor(containerRect.height / charHeight)); // Minimum 10 rows
|
|
168
|
+
|
|
169
|
+
// Store previous dimensions to detect significant changes
|
|
170
|
+
const prevCols = this.lastCols || 0;
|
|
171
|
+
const prevRows = this.lastRows || 0;
|
|
172
|
+
const significantChange = Math.abs(cols - prevCols) > Math.max(10, prevCols * 0.3) ||
|
|
173
|
+
Math.abs(rows - prevRows) > Math.max(5, prevRows * 0.3);
|
|
174
|
+
|
|
175
|
+
console.log(`Fitting terminal ${this.terminalId}: ${cols}x${rows} (container: ${containerRect.width}x${containerRect.height}, charSize: ${charWidth}x${charHeight}, mobile: ${isMobile})`);
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
// Resize the terminal
|
|
126
179
|
this.terminal.resize(cols, rows);
|
|
180
|
+
|
|
181
|
+
// Send resize notification to backend PTY
|
|
182
|
+
if (this.websocket && this.websocket.readyState === WebSocket.OPEN) {
|
|
183
|
+
const resizeMessage = {
|
|
184
|
+
type: 'resize',
|
|
185
|
+
sessionId: this.sessionId,
|
|
186
|
+
terminalId: this.terminalId,
|
|
187
|
+
cols: cols,
|
|
188
|
+
rows: rows
|
|
189
|
+
};
|
|
190
|
+
this.websocket.send(JSON.stringify(resizeMessage));
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Force a refresh if there was a significant size change (like mobile rotation)
|
|
194
|
+
if (significantChange && (prevCols > 0 || prevRows > 0)) {
|
|
195
|
+
console.log(`Significant terminal size change detected, forcing refresh`);
|
|
196
|
+
// Small delay to ensure resize is processed, then refresh
|
|
197
|
+
setTimeout(() => {
|
|
198
|
+
if (this.websocket && this.websocket.readyState === WebSocket.OPEN) {
|
|
199
|
+
// Send Ctrl+L to clear and refresh the display
|
|
200
|
+
const refreshMessage = {
|
|
201
|
+
type: 'input',
|
|
202
|
+
sessionId: this.sessionId,
|
|
203
|
+
terminalId: this.terminalId,
|
|
204
|
+
data: '\x0C' // Ctrl+L (form feed) to refresh
|
|
205
|
+
};
|
|
206
|
+
this.websocket.send(JSON.stringify(refreshMessage));
|
|
207
|
+
}
|
|
208
|
+
}, 100);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Store current dimensions for next comparison
|
|
212
|
+
this.lastCols = cols;
|
|
213
|
+
this.lastRows = rows;
|
|
214
|
+
|
|
127
215
|
} else {
|
|
128
216
|
console.warn(`Terminal ${this.terminalId} container has zero dimensions, retrying...`);
|
|
129
217
|
// Retry after a short delay
|
|
@@ -336,8 +424,8 @@ function initializeTerminals() {
|
|
|
336
424
|
const saplingIslands = document.querySelectorAll('sapling-island');
|
|
337
425
|
|
|
338
426
|
for (const island of saplingIslands) {
|
|
339
|
-
// Look for a div with
|
|
340
|
-
const terminalDiv = island.querySelector('div
|
|
427
|
+
// Look for a div with terminal ID (updated selector for new background class)
|
|
428
|
+
const terminalDiv = island.querySelector('div[id^="terminal-"]');
|
|
341
429
|
if (terminalDiv && terminalDiv.id && terminalDiv.id.startsWith('terminal-')) {
|
|
342
430
|
const terminalId = terminalDiv.id;
|
|
343
431
|
console.log('Found terminal component with ID:', terminalId);
|
|
@@ -1249,10 +1249,18 @@ video {
|
|
|
1249
1249
|
width: 100%;
|
|
1250
1250
|
}
|
|
1251
1251
|
|
|
1252
|
+
.min-w-0 {
|
|
1253
|
+
min-width: 0px;
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1252
1256
|
.min-w-\[140px\] {
|
|
1253
1257
|
min-width: 140px;
|
|
1254
1258
|
}
|
|
1255
1259
|
|
|
1260
|
+
.max-w-full {
|
|
1261
|
+
max-width: 100%;
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1256
1264
|
.flex-1 {
|
|
1257
1265
|
flex: 1 1 0%;
|
|
1258
1266
|
}
|
|
@@ -1425,11 +1433,6 @@ video {
|
|
|
1425
1433
|
background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));
|
|
1426
1434
|
}
|
|
1427
1435
|
|
|
1428
|
-
.bg-gray-900 {
|
|
1429
|
-
--tw-bg-opacity: 1;
|
|
1430
|
-
background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));
|
|
1431
|
-
}
|
|
1432
|
-
|
|
1433
1436
|
.bg-transparent {
|
|
1434
1437
|
background-color: transparent;
|
|
1435
1438
|
}
|
package/package.json
CHANGED
|
@@ -13,15 +13,15 @@ export function Terminal({ id, index = 1 }: TerminalProps) {
|
|
|
13
13
|
<script type="module" src="/components/Terminal.js"></script>
|
|
14
14
|
</template>
|
|
15
15
|
|
|
16
|
-
<div id={terminalId} class="h-full bg-
|
|
16
|
+
<div id={terminalId} class="h-full bg-[#1e1e1e] flex font-sans overflow-hidden">
|
|
17
17
|
{/* Terminal Interface */}
|
|
18
|
-
<div class="w-full flex flex-col bg-
|
|
18
|
+
<div class="w-full flex flex-col bg-[#1e1e1e] relative min-w-0">
|
|
19
19
|
{/* Terminal header */}
|
|
20
|
-
<div id={`${terminalId}-container`} class="h-full flex flex-col">
|
|
20
|
+
<div id={`${terminalId}-container`} class="h-full flex flex-col min-w-0">
|
|
21
21
|
|
|
22
22
|
{/* Xterm.js terminal container */}
|
|
23
|
-
<div class="flex-1 overflow-hidden">
|
|
24
|
-
<div id={`${terminalId}-xterm`} class="h-full w-full"></div>
|
|
23
|
+
<div class="flex-1 overflow-hidden min-w-0">
|
|
24
|
+
<div id={`${terminalId}-xterm`} class="h-full w-full min-w-0 max-w-full"></div>
|
|
25
25
|
</div>
|
|
26
26
|
</div>
|
|
27
27
|
</div>
|
|
@@ -14,10 +14,12 @@ export interface WebSocketClient {
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
export interface WebSocketMessage {
|
|
17
|
-
type: 'join' | 'leave' | 'input' | 'ping' | 'pong';
|
|
17
|
+
type: 'join' | 'leave' | 'input' | 'resize' | 'ping' | 'pong';
|
|
18
18
|
sessionId?: string;
|
|
19
19
|
terminalId?: string;
|
|
20
20
|
data?: string;
|
|
21
|
+
cols?: number;
|
|
22
|
+
rows?: number;
|
|
21
23
|
timestamp?: number;
|
|
22
24
|
}
|
|
23
25
|
|
|
@@ -114,6 +116,9 @@ export class WebSocketTerminalService {
|
|
|
114
116
|
case 'input':
|
|
115
117
|
this.handleInput(clientId, message);
|
|
116
118
|
break;
|
|
119
|
+
case 'resize':
|
|
120
|
+
this.handleResize(clientId, message);
|
|
121
|
+
break;
|
|
117
122
|
case 'ping':
|
|
118
123
|
this.sendToClient(clientId, {
|
|
119
124
|
type: 'pong',
|
|
@@ -212,6 +217,32 @@ export class WebSocketTerminalService {
|
|
|
212
217
|
}
|
|
213
218
|
}
|
|
214
219
|
|
|
220
|
+
private static handleResize(clientId: string, message: WebSocketMessage) {
|
|
221
|
+
const client = this.clients.get(clientId);
|
|
222
|
+
if (!client || !message.sessionId || message.cols === undefined || message.rows === undefined) return;
|
|
223
|
+
|
|
224
|
+
// Get the terminal session
|
|
225
|
+
const session = TerminalService.getSession(message.sessionId);
|
|
226
|
+
if (!session) {
|
|
227
|
+
console.error(`Session ${message.sessionId} not found for resize`);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Resize the PTY
|
|
232
|
+
try {
|
|
233
|
+
console.log(`Resizing terminal session ${message.sessionId} to ${message.cols}x${message.rows}`);
|
|
234
|
+
session.process.resize(message.cols, message.rows);
|
|
235
|
+
session.lastActivity = new Date();
|
|
236
|
+
|
|
237
|
+
// Update session dimensions
|
|
238
|
+
session.cols = message.cols;
|
|
239
|
+
session.rows = message.rows;
|
|
240
|
+
|
|
241
|
+
} catch (error) {
|
|
242
|
+
console.error(`Failed to resize session ${message.sessionId}:`, error);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
215
246
|
private static handleDisconnect(clientId: string) {
|
|
216
247
|
const client = this.clients.get(clientId);
|
|
217
248
|
console.log(`WebSocket client disconnected: ${clientId}`);
|
|
@@ -58,7 +58,10 @@ class TerminalManager {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
setupXterm() {
|
|
61
|
-
//
|
|
61
|
+
// Detect mobile devices for responsive terminal setup
|
|
62
|
+
const isMobile = window.innerWidth <= 768 || /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
|
63
|
+
|
|
64
|
+
// Create terminal instance with VS Code-like theme and responsive settings
|
|
62
65
|
this.terminal = new Terminal({
|
|
63
66
|
cursorBlink: true,
|
|
64
67
|
fontSize: 12,
|
|
@@ -86,9 +89,14 @@ class TerminalManager {
|
|
|
86
89
|
brightCyan: '#29b8db',
|
|
87
90
|
brightWhite: '#ffffff'
|
|
88
91
|
},
|
|
89
|
-
scrollback: 1000,
|
|
92
|
+
scrollback: isMobile ? 500 : 1000, // Smaller scrollback for mobile performance
|
|
90
93
|
tabStopWidth: 4,
|
|
91
|
-
allowTransparency: false
|
|
94
|
+
allowTransparency: false,
|
|
95
|
+
// Mobile-specific options
|
|
96
|
+
...(isMobile && {
|
|
97
|
+
convertEol: true,
|
|
98
|
+
disableStdin: false
|
|
99
|
+
})
|
|
92
100
|
});
|
|
93
101
|
|
|
94
102
|
// Open terminal in container
|
|
@@ -110,7 +118,20 @@ class TerminalManager {
|
|
|
110
118
|
|
|
111
119
|
// Resize handler
|
|
112
120
|
window.addEventListener('resize', () => {
|
|
113
|
-
|
|
121
|
+
// Add a small delay for mobile orientation changes
|
|
122
|
+
clearTimeout(this.resizeTimeout);
|
|
123
|
+
this.resizeTimeout = setTimeout(() => {
|
|
124
|
+
this.fitTerminal();
|
|
125
|
+
}, 100);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// Mobile orientation change handler
|
|
129
|
+
window.addEventListener('orientationchange', () => {
|
|
130
|
+
// Longer delay for orientation changes as they can be slower
|
|
131
|
+
clearTimeout(this.orientationTimeout);
|
|
132
|
+
this.orientationTimeout = setTimeout(() => {
|
|
133
|
+
this.fitTerminal();
|
|
134
|
+
}, 300);
|
|
114
135
|
});
|
|
115
136
|
}
|
|
116
137
|
|
|
@@ -120,10 +141,77 @@ class TerminalManager {
|
|
|
120
141
|
setTimeout(() => {
|
|
121
142
|
const containerRect = this.xtermContainer.getBoundingClientRect();
|
|
122
143
|
if (containerRect.width > 0 && containerRect.height > 0) {
|
|
123
|
-
|
|
124
|
-
const
|
|
125
|
-
|
|
144
|
+
// Detect mobile devices for responsive sizing
|
|
145
|
+
const isMobile = window.innerWidth <= 768 || /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
|
146
|
+
|
|
147
|
+
// Use consistent font size
|
|
148
|
+
const fontSize = 12;
|
|
149
|
+
|
|
150
|
+
// Calculate character dimensions more accurately
|
|
151
|
+
// Create a temporary element to measure actual character size
|
|
152
|
+
const testElement = document.createElement('div');
|
|
153
|
+
testElement.style.fontFamily = this.terminal.options.fontFamily;
|
|
154
|
+
testElement.style.fontSize = `${fontSize}px`;
|
|
155
|
+
testElement.style.position = 'absolute';
|
|
156
|
+
testElement.style.visibility = 'hidden';
|
|
157
|
+
testElement.style.whiteSpace = 'pre';
|
|
158
|
+
testElement.textContent = 'M'; // Use 'M' as it's typically the widest character
|
|
159
|
+
document.body.appendChild(testElement);
|
|
160
|
+
|
|
161
|
+
const charWidth = testElement.getBoundingClientRect().width;
|
|
162
|
+
const charHeight = testElement.getBoundingClientRect().height;
|
|
163
|
+
document.body.removeChild(testElement);
|
|
164
|
+
|
|
165
|
+
// Calculate columns and rows based on actual character dimensions
|
|
166
|
+
const cols = Math.max(20, Math.floor(containerRect.width / charWidth)); // Minimum 20 columns
|
|
167
|
+
const rows = Math.max(10, Math.floor(containerRect.height / charHeight)); // Minimum 10 rows
|
|
168
|
+
|
|
169
|
+
// Store previous dimensions to detect significant changes
|
|
170
|
+
const prevCols = this.lastCols || 0;
|
|
171
|
+
const prevRows = this.lastRows || 0;
|
|
172
|
+
const significantChange = Math.abs(cols - prevCols) > Math.max(10, prevCols * 0.3) ||
|
|
173
|
+
Math.abs(rows - prevRows) > Math.max(5, prevRows * 0.3);
|
|
174
|
+
|
|
175
|
+
console.log(`Fitting terminal ${this.terminalId}: ${cols}x${rows} (container: ${containerRect.width}x${containerRect.height}, charSize: ${charWidth}x${charHeight}, mobile: ${isMobile})`);
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
// Resize the terminal
|
|
126
179
|
this.terminal.resize(cols, rows);
|
|
180
|
+
|
|
181
|
+
// Send resize notification to backend PTY
|
|
182
|
+
if (this.websocket && this.websocket.readyState === WebSocket.OPEN) {
|
|
183
|
+
const resizeMessage = {
|
|
184
|
+
type: 'resize',
|
|
185
|
+
sessionId: this.sessionId,
|
|
186
|
+
terminalId: this.terminalId,
|
|
187
|
+
cols: cols,
|
|
188
|
+
rows: rows
|
|
189
|
+
};
|
|
190
|
+
this.websocket.send(JSON.stringify(resizeMessage));
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Force a refresh if there was a significant size change (like mobile rotation)
|
|
194
|
+
if (significantChange && (prevCols > 0 || prevRows > 0)) {
|
|
195
|
+
console.log(`Significant terminal size change detected, forcing refresh`);
|
|
196
|
+
// Small delay to ensure resize is processed, then refresh
|
|
197
|
+
setTimeout(() => {
|
|
198
|
+
if (this.websocket && this.websocket.readyState === WebSocket.OPEN) {
|
|
199
|
+
// Send Ctrl+L to clear and refresh the display
|
|
200
|
+
const refreshMessage = {
|
|
201
|
+
type: 'input',
|
|
202
|
+
sessionId: this.sessionId,
|
|
203
|
+
terminalId: this.terminalId,
|
|
204
|
+
data: '\x0C' // Ctrl+L (form feed) to refresh
|
|
205
|
+
};
|
|
206
|
+
this.websocket.send(JSON.stringify(refreshMessage));
|
|
207
|
+
}
|
|
208
|
+
}, 100);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Store current dimensions for next comparison
|
|
212
|
+
this.lastCols = cols;
|
|
213
|
+
this.lastRows = rows;
|
|
214
|
+
|
|
127
215
|
} else {
|
|
128
216
|
console.warn(`Terminal ${this.terminalId} container has zero dimensions, retrying...`);
|
|
129
217
|
// Retry after a short delay
|
|
@@ -336,8 +424,8 @@ function initializeTerminals() {
|
|
|
336
424
|
const saplingIslands = document.querySelectorAll('sapling-island');
|
|
337
425
|
|
|
338
426
|
for (const island of saplingIslands) {
|
|
339
|
-
// Look for a div with
|
|
340
|
-
const terminalDiv = island.querySelector('div
|
|
427
|
+
// Look for a div with terminal ID (updated selector for new background class)
|
|
428
|
+
const terminalDiv = island.querySelector('div[id^="terminal-"]');
|
|
341
429
|
if (terminalDiv && terminalDiv.id && terminalDiv.id.startsWith('terminal-')) {
|
|
342
430
|
const terminalId = terminalDiv.id;
|
|
343
431
|
console.log('Found terminal component with ID:', terminalId);
|
|
@@ -1249,10 +1249,18 @@ video {
|
|
|
1249
1249
|
width: 100%;
|
|
1250
1250
|
}
|
|
1251
1251
|
|
|
1252
|
+
.min-w-0 {
|
|
1253
|
+
min-width: 0px;
|
|
1254
|
+
}
|
|
1255
|
+
|
|
1252
1256
|
.min-w-\[140px\] {
|
|
1253
1257
|
min-width: 140px;
|
|
1254
1258
|
}
|
|
1255
1259
|
|
|
1260
|
+
.max-w-full {
|
|
1261
|
+
max-width: 100%;
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1256
1264
|
.flex-1 {
|
|
1257
1265
|
flex: 1 1 0%;
|
|
1258
1266
|
}
|
|
@@ -1425,11 +1433,6 @@ video {
|
|
|
1425
1433
|
background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));
|
|
1426
1434
|
}
|
|
1427
1435
|
|
|
1428
|
-
.bg-gray-900 {
|
|
1429
|
-
--tw-bg-opacity: 1;
|
|
1430
|
-
background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));
|
|
1431
|
-
}
|
|
1432
|
-
|
|
1433
1436
|
.bg-transparent {
|
|
1434
1437
|
background-color: transparent;
|
|
1435
1438
|
}
|