dmux 1.3.3 → 1.5.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/AutoUpdater.d.ts +35 -0
- package/dist/AutoUpdater.d.ts.map +1 -0
- package/dist/AutoUpdater.js +225 -0
- package/dist/AutoUpdater.js.map +1 -0
- package/dist/BetterTextInput.d.ts +10 -0
- package/dist/BetterTextInput.d.ts.map +1 -0
- package/dist/BetterTextInput.js +177 -0
- package/dist/BetterTextInput.js.map +1 -0
- package/dist/CleanTextInput.d.ts +10 -0
- package/dist/CleanTextInput.d.ts.map +1 -0
- package/dist/CleanTextInput.js +572 -0
- package/dist/CleanTextInput.js.map +1 -0
- package/dist/DmuxApp.d.ts +2 -0
- package/dist/DmuxApp.d.ts.map +1 -1
- package/dist/DmuxApp.js +330 -165
- package/dist/DmuxApp.js.map +1 -1
- package/dist/EnhancedTextInput.d.ts.map +1 -1
- package/dist/EnhancedTextInput.js +155 -50
- package/dist/EnhancedTextInput.js.map +1 -1
- package/dist/GeminiTextInput.d.ts +12 -0
- package/dist/GeminiTextInput.d.ts.map +1 -0
- package/dist/GeminiTextInput.js +210 -0
- package/dist/GeminiTextInput.js.map +1 -0
- package/dist/MultilineTextInput.d.ts +10 -0
- package/dist/MultilineTextInput.d.ts.map +1 -0
- package/dist/MultilineTextInput.js +184 -0
- package/dist/MultilineTextInput.js.map +1 -0
- package/dist/SimpleGeminiInput.d.ts +12 -0
- package/dist/SimpleGeminiInput.d.ts.map +1 -0
- package/dist/SimpleGeminiInput.js +223 -0
- package/dist/SimpleGeminiInput.js.map +1 -0
- package/dist/StyledTextInput.d.ts +10 -0
- package/dist/StyledTextInput.d.ts.map +1 -0
- package/dist/StyledTextInput.js +10 -0
- package/dist/StyledTextInput.js.map +1 -0
- package/dist/index.js +48 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,572 @@
|
|
|
1
|
+
import React, { useState, useEffect, useMemo } from 'react';
|
|
2
|
+
import { Box, Text, useInput, useFocus, useStdout } from 'ink';
|
|
3
|
+
const CleanTextInput = ({ value, onChange, onSubmit, placeholder = '' }) => {
|
|
4
|
+
const { isFocused } = useFocus({ autoFocus: true });
|
|
5
|
+
const [cursor, setCursor] = useState(value.length);
|
|
6
|
+
const { stdout } = useStdout();
|
|
7
|
+
const [pastedItems, setPastedItems] = useState(new Map());
|
|
8
|
+
const [nextPasteId, setNextPasteId] = useState(1);
|
|
9
|
+
const [isProcessingPaste, setIsProcessingPaste] = useState(false);
|
|
10
|
+
// Paste buffering state
|
|
11
|
+
const [pasteBuffer, setPasteBuffer] = useState('');
|
|
12
|
+
const [isPasting, setIsPasting] = useState(false);
|
|
13
|
+
const [pasteTimeout, setPasteTimeout] = useState(null);
|
|
14
|
+
const [inBracketedPaste, setInBracketedPaste] = useState(false);
|
|
15
|
+
// Calculate available width for text (terminal width - borders - padding - prompt)
|
|
16
|
+
// Subtract 2 for borders, 2 for padding, 2 for "> " prompt = 6 total
|
|
17
|
+
// The prompt is always rendered separately, so we need to account for it
|
|
18
|
+
// Use process.stdout.columns as fallback since useStdout might not update
|
|
19
|
+
const terminalWidth = process.stdout.columns || (stdout ? stdout.columns : 80);
|
|
20
|
+
// Reduce by 1 more to prevent edge case where text exactly fills width
|
|
21
|
+
const maxWidth = Math.max(20, terminalWidth - 7);
|
|
22
|
+
// Keep cursor in bounds
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (cursor > value.length) {
|
|
25
|
+
setCursor(value.length);
|
|
26
|
+
}
|
|
27
|
+
else if (cursor < 0) {
|
|
28
|
+
setCursor(0);
|
|
29
|
+
}
|
|
30
|
+
}, [value.length, cursor]);
|
|
31
|
+
// Enable bracketed paste mode with small delay to avoid blocking UI
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
let bracketedPasteTimer = null;
|
|
34
|
+
if (isFocused) {
|
|
35
|
+
// Small delay to let UI settle before enabling bracketed paste
|
|
36
|
+
bracketedPasteTimer = setTimeout(() => {
|
|
37
|
+
process.stdout.write('\x1b[?2004h');
|
|
38
|
+
}, 10);
|
|
39
|
+
}
|
|
40
|
+
return () => {
|
|
41
|
+
if (bracketedPasteTimer) {
|
|
42
|
+
clearTimeout(bracketedPasteTimer);
|
|
43
|
+
}
|
|
44
|
+
process.stdout.write('\x1b[?2004l');
|
|
45
|
+
// Clean up paste timeout if component unmounts
|
|
46
|
+
if (pasteTimeout) {
|
|
47
|
+
clearTimeout(pasteTimeout);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}, [isFocused, pasteTimeout]);
|
|
51
|
+
// Preprocess pasted content to remove formatting artifacts
|
|
52
|
+
const preprocessPastedContent = (input) => {
|
|
53
|
+
// Remove ANSI escape sequences (colors, cursor movements, etc)
|
|
54
|
+
let cleaned = input.replace(/\x1b\[[0-9;]*m/g, ''); // Remove color codes
|
|
55
|
+
cleaned = cleaned.replace(/\x1b\[[\d;]*[A-Za-z]/g, ''); // Remove cursor movements
|
|
56
|
+
// Remove box drawing characters
|
|
57
|
+
const boxChars = /[╭╮╰╯│─┌┐└┘├┤┬┴┼━┃┏┓┗┛┣┫┳┻╋]/g;
|
|
58
|
+
cleaned = cleaned.replace(boxChars, '');
|
|
59
|
+
// Normalize line endings
|
|
60
|
+
cleaned = cleaned.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
|
|
61
|
+
// Split into lines for processing
|
|
62
|
+
let lines = cleaned.split('\n');
|
|
63
|
+
// Remove common prompt patterns and clean each line
|
|
64
|
+
lines = lines.map(line => {
|
|
65
|
+
// Remove leading prompt indicators
|
|
66
|
+
line = line.replace(/^[>$#]\s+/, '');
|
|
67
|
+
// Trim whitespace
|
|
68
|
+
return line.trim();
|
|
69
|
+
});
|
|
70
|
+
// Remove empty lines at start and end
|
|
71
|
+
while (lines.length > 0 && lines[0] === '')
|
|
72
|
+
lines.shift();
|
|
73
|
+
while (lines.length > 0 && lines[lines.length - 1] === '')
|
|
74
|
+
lines.pop();
|
|
75
|
+
// Handle wrapped lines (lines that were split by terminal width)
|
|
76
|
+
const unwrappedLines = [];
|
|
77
|
+
for (let i = 0; i < lines.length; i++) {
|
|
78
|
+
const currentLine = lines[i];
|
|
79
|
+
const nextLine = lines[i + 1];
|
|
80
|
+
// If current line doesn't end with punctuation and next line starts lowercase,
|
|
81
|
+
// it's likely a wrapped line
|
|
82
|
+
if (nextLine &&
|
|
83
|
+
currentLine.length > 0 &&
|
|
84
|
+
!currentLine.match(/[.!?;:,]$/) &&
|
|
85
|
+
nextLine[0] &&
|
|
86
|
+
nextLine[0] === nextLine[0].toLowerCase()) {
|
|
87
|
+
// Join wrapped lines
|
|
88
|
+
unwrappedLines.push(currentLine + ' ' + nextLine);
|
|
89
|
+
i++; // Skip next line since we merged it
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
unwrappedLines.push(currentLine);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return unwrappedLines.join('\n');
|
|
96
|
+
};
|
|
97
|
+
// Expand paste references to their actual content
|
|
98
|
+
const expandPasteReferences = (text) => {
|
|
99
|
+
let expanded = text;
|
|
100
|
+
const tagPattern = /\[#(\d+) Pasted, \d+ lines?\]/g;
|
|
101
|
+
let match;
|
|
102
|
+
while ((match = tagPattern.exec(text)) !== null) {
|
|
103
|
+
const pasteId = parseInt(match[1]);
|
|
104
|
+
const pastedContent = pastedItems.get(pasteId);
|
|
105
|
+
if (pastedContent) {
|
|
106
|
+
expanded = expanded.replace(match[0], pastedContent.content);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return expanded;
|
|
110
|
+
};
|
|
111
|
+
// Process complete pasted content once buffering is done
|
|
112
|
+
const processPastedContent = (fullContent) => {
|
|
113
|
+
// Always preprocess pasted content
|
|
114
|
+
const cleaned = preprocessPastedContent(fullContent);
|
|
115
|
+
const lines = cleaned.split('\n');
|
|
116
|
+
if (lines.length > 10) {
|
|
117
|
+
// Large paste - create reference tag
|
|
118
|
+
const pasteId = nextPasteId;
|
|
119
|
+
const pasteRef = {
|
|
120
|
+
id: pasteId,
|
|
121
|
+
content: cleaned,
|
|
122
|
+
lineCount: lines.length,
|
|
123
|
+
timestamp: Date.now()
|
|
124
|
+
};
|
|
125
|
+
setPastedItems(prev => {
|
|
126
|
+
const newMap = new Map(prev);
|
|
127
|
+
newMap.set(pasteId, pasteRef);
|
|
128
|
+
return newMap;
|
|
129
|
+
});
|
|
130
|
+
setNextPasteId(pasteId + 1);
|
|
131
|
+
// Insert reference tag
|
|
132
|
+
const tag = `[#${pasteId} Pasted, ${lines.length} lines]`;
|
|
133
|
+
const before = value.slice(0, cursor);
|
|
134
|
+
const after = value.slice(cursor);
|
|
135
|
+
onChange(before + tag + after);
|
|
136
|
+
setCursor(cursor + tag.length);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
// Small paste - insert cleaned content directly
|
|
140
|
+
const before = value.slice(0, cursor);
|
|
141
|
+
const after = value.slice(cursor);
|
|
142
|
+
onChange(before + cleaned + after);
|
|
143
|
+
setCursor(cursor + cleaned.length);
|
|
144
|
+
}
|
|
145
|
+
// Reset paste state
|
|
146
|
+
setPasteBuffer('');
|
|
147
|
+
setIsPasting(false);
|
|
148
|
+
setInBracketedPaste(false);
|
|
149
|
+
};
|
|
150
|
+
useInput((input, key) => {
|
|
151
|
+
if (!isFocused)
|
|
152
|
+
return;
|
|
153
|
+
// Escape clears
|
|
154
|
+
if (key.escape) {
|
|
155
|
+
onChange('');
|
|
156
|
+
setCursor(0);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
// Shift+Enter submits with expanded content
|
|
160
|
+
if (key.return && key.shift) {
|
|
161
|
+
const expandedValue = expandPasteReferences(value);
|
|
162
|
+
onSubmit?.(expandedValue);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// Enter adds newline
|
|
166
|
+
if (key.return) {
|
|
167
|
+
const before = value.slice(0, cursor);
|
|
168
|
+
const after = value.slice(cursor);
|
|
169
|
+
const newValue = before + '\n' + after;
|
|
170
|
+
onChange(newValue);
|
|
171
|
+
setCursor(cursor + 1);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
// Backspace deletes BEFORE cursor
|
|
175
|
+
// IMPORTANT: Some terminals send 'delete' key when backspace is pressed
|
|
176
|
+
// Handle both key.backspace and key.delete as backspace
|
|
177
|
+
if (key.backspace || key.delete || input === '\x7f' || input === '\x08') {
|
|
178
|
+
// Clear any paste state when delete is pressed
|
|
179
|
+
if (isPasting) {
|
|
180
|
+
setIsPasting(false);
|
|
181
|
+
setPasteBuffer('');
|
|
182
|
+
if (pasteTimeout) {
|
|
183
|
+
clearTimeout(pasteTimeout);
|
|
184
|
+
setPasteTimeout(null);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (cursor > 0) {
|
|
188
|
+
const before = value.slice(0, cursor - 1);
|
|
189
|
+
const after = value.slice(cursor);
|
|
190
|
+
const newValue = before + after;
|
|
191
|
+
onChange(newValue);
|
|
192
|
+
setCursor(cursor - 1);
|
|
193
|
+
}
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
// Forward delete (actual delete key behavior) - removed since we're treating delete as backspace
|
|
197
|
+
// If you need forward delete, use a different key combination
|
|
198
|
+
// Ctrl-A: Jump to beginning of current visual line
|
|
199
|
+
if (key.ctrl && input === 'a') {
|
|
200
|
+
const wrapped = wrapText(value, maxWidth);
|
|
201
|
+
const currentPos = findCursorInWrappedLines(wrapped, cursor);
|
|
202
|
+
// Find absolute position of start of current visual line
|
|
203
|
+
let absolutePos = 0;
|
|
204
|
+
for (let i = 0; i < currentPos.line; i++) {
|
|
205
|
+
absolutePos += wrapped[i].line.length;
|
|
206
|
+
if (!wrapped[i].isHardBreak && i < wrapped.length - 1) {
|
|
207
|
+
absolutePos++; // Space between wrapped segments
|
|
208
|
+
}
|
|
209
|
+
else if (wrapped[i].isHardBreak) {
|
|
210
|
+
absolutePos++; // Newline character
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
setCursor(absolutePos);
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
// Ctrl-E: Jump to end of current visual line
|
|
217
|
+
if (key.ctrl && input === 'e') {
|
|
218
|
+
const wrapped = wrapText(value, maxWidth);
|
|
219
|
+
const currentPos = findCursorInWrappedLines(wrapped, cursor);
|
|
220
|
+
// Find absolute position of end of current visual line
|
|
221
|
+
let absolutePos = 0;
|
|
222
|
+
for (let i = 0; i <= currentPos.line; i++) {
|
|
223
|
+
if (i === currentPos.line) {
|
|
224
|
+
absolutePos += wrapped[i].line.length;
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
absolutePos += wrapped[i].line.length;
|
|
228
|
+
if (!wrapped[i].isHardBreak && i < wrapped.length - 1) {
|
|
229
|
+
absolutePos++; // Space between wrapped segments
|
|
230
|
+
}
|
|
231
|
+
else if (wrapped[i].isHardBreak) {
|
|
232
|
+
absolutePos++; // Newline character
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
setCursor(Math.min(absolutePos, value.length));
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
// Left arrow
|
|
240
|
+
if (key.leftArrow) {
|
|
241
|
+
setCursor(Math.max(0, cursor - 1));
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
// Right arrow
|
|
245
|
+
if (key.rightArrow) {
|
|
246
|
+
setCursor(Math.min(value.length, cursor + 1));
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
// Up/Down arrows for navigation (works with both hard and soft wrapped lines)
|
|
250
|
+
if (key.upArrow || key.downArrow) {
|
|
251
|
+
// Get wrapped lines to understand visual layout
|
|
252
|
+
const wrapped = wrapText(value, maxWidth);
|
|
253
|
+
const currentPos = findCursorInWrappedLines(wrapped, cursor);
|
|
254
|
+
if (key.upArrow && currentPos.line > 0) {
|
|
255
|
+
// Move up one visual line
|
|
256
|
+
const targetLine = currentPos.line - 1;
|
|
257
|
+
const targetCol = Math.min(currentPos.col, wrapped[targetLine].line.length);
|
|
258
|
+
// Convert back to absolute position
|
|
259
|
+
let absolutePos = 0;
|
|
260
|
+
for (let i = 0; i < targetLine; i++) {
|
|
261
|
+
absolutePos += wrapped[i].line.length;
|
|
262
|
+
// Add space if this was a soft wrap
|
|
263
|
+
if (!wrapped[i].isHardBreak && i < wrapped.length - 1) {
|
|
264
|
+
const nextLineExists = i + 1 < wrapped.length;
|
|
265
|
+
if (nextLineExists)
|
|
266
|
+
absolutePos++; // Space between wrapped segments
|
|
267
|
+
}
|
|
268
|
+
else if (wrapped[i].isHardBreak) {
|
|
269
|
+
absolutePos++; // Newline character
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
absolutePos += targetCol;
|
|
273
|
+
setCursor(Math.min(absolutePos, value.length));
|
|
274
|
+
}
|
|
275
|
+
else if (key.downArrow && currentPos.line < wrapped.length - 1) {
|
|
276
|
+
// Move down one visual line
|
|
277
|
+
const targetLine = currentPos.line + 1;
|
|
278
|
+
const targetCol = Math.min(currentPos.col, wrapped[targetLine].line.length);
|
|
279
|
+
// Convert back to absolute position
|
|
280
|
+
let absolutePos = 0;
|
|
281
|
+
for (let i = 0; i < targetLine; i++) {
|
|
282
|
+
absolutePos += wrapped[i].line.length;
|
|
283
|
+
// Add space if this was a soft wrap
|
|
284
|
+
if (!wrapped[i].isHardBreak && i < wrapped.length - 1) {
|
|
285
|
+
const nextLineExists = i + 1 < wrapped.length;
|
|
286
|
+
if (nextLineExists)
|
|
287
|
+
absolutePos++; // Space between wrapped segments
|
|
288
|
+
}
|
|
289
|
+
else if (wrapped[i].isHardBreak) {
|
|
290
|
+
absolutePos++; // Newline character
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
absolutePos += targetCol;
|
|
294
|
+
setCursor(Math.min(absolutePos, value.length));
|
|
295
|
+
}
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
// Regular text input with paste detection and buffering
|
|
299
|
+
if (input && !key.ctrl && !key.meta) {
|
|
300
|
+
// Detect bracketed paste sequences
|
|
301
|
+
const PASTE_START = '\x1b[200~';
|
|
302
|
+
const PASTE_END = '\x1b[201~';
|
|
303
|
+
// Check for bracketed paste markers
|
|
304
|
+
const hasPasteStart = input.includes(PASTE_START);
|
|
305
|
+
const hasPasteEnd = input.includes(PASTE_END);
|
|
306
|
+
// Handle bracketed paste mode
|
|
307
|
+
if (hasPasteStart) {
|
|
308
|
+
setInBracketedPaste(true);
|
|
309
|
+
// Extract content after paste start marker
|
|
310
|
+
const startIdx = input.indexOf(PASTE_START) + PASTE_START.length;
|
|
311
|
+
const content = hasPasteEnd ?
|
|
312
|
+
input.substring(startIdx, input.indexOf(PASTE_END)) :
|
|
313
|
+
input.substring(startIdx);
|
|
314
|
+
setPasteBuffer(content);
|
|
315
|
+
if (hasPasteEnd) {
|
|
316
|
+
// Complete paste in single chunk
|
|
317
|
+
processPastedContent(pasteBuffer + content);
|
|
318
|
+
setPasteBuffer('');
|
|
319
|
+
setInBracketedPaste(false);
|
|
320
|
+
}
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
if (hasPasteEnd && inBracketedPaste) {
|
|
324
|
+
// End of bracketed paste
|
|
325
|
+
const endIdx = input.indexOf(PASTE_END);
|
|
326
|
+
const finalContent = input.substring(0, endIdx);
|
|
327
|
+
processPastedContent(pasteBuffer + finalContent);
|
|
328
|
+
setPasteBuffer('');
|
|
329
|
+
setInBracketedPaste(false);
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
if (inBracketedPaste) {
|
|
333
|
+
// Continue buffering bracketed paste content
|
|
334
|
+
setPasteBuffer(prev => prev + input);
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
// Detect non-bracketed paste (fallback for terminals without bracketed paste mode)
|
|
338
|
+
// Exclude delete/backspace key sequences from paste detection
|
|
339
|
+
const isDeleteSequence = input === '\x7f' || input === '\x08' ||
|
|
340
|
+
input.split('').every(c => c === '\x7f' || c === '\x08');
|
|
341
|
+
// Better heuristics for paste detection:
|
|
342
|
+
// - Must have newlines OR be quite long (>10 chars at once)
|
|
343
|
+
// - Single chars or small groups (2-3) are likely fast typing
|
|
344
|
+
// - Already in paste mode should continue
|
|
345
|
+
const hasNewlines = input.includes('\n');
|
|
346
|
+
const isVeryLong = input.length > 10;
|
|
347
|
+
const isLikelyPaste = !isDeleteSequence && ((hasNewlines && input.length > 2) || // Multi-line content
|
|
348
|
+
isVeryLong || // Very long single chunk
|
|
349
|
+
(isPasting && input.length > 0)); // Continue existing paste
|
|
350
|
+
if (isLikelyPaste && !inBracketedPaste) {
|
|
351
|
+
// Clear any existing timeout
|
|
352
|
+
if (pasteTimeout) {
|
|
353
|
+
clearTimeout(pasteTimeout);
|
|
354
|
+
}
|
|
355
|
+
// Add to paste buffer
|
|
356
|
+
setPasteBuffer(prev => prev + input);
|
|
357
|
+
setIsPasting(true);
|
|
358
|
+
// Set timeout to detect end of paste (when no more input arrives)
|
|
359
|
+
const timeout = setTimeout(() => {
|
|
360
|
+
// Process the complete buffered paste
|
|
361
|
+
if (pasteBuffer || input) {
|
|
362
|
+
processPastedContent(pasteBuffer + input);
|
|
363
|
+
}
|
|
364
|
+
setPasteBuffer('');
|
|
365
|
+
setIsPasting(false);
|
|
366
|
+
}, 100); // 100ms timeout to collect all chunks
|
|
367
|
+
setPasteTimeout(timeout);
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
// Normal single character input (or fast typing)
|
|
371
|
+
if (!isPasting && !inBracketedPaste) {
|
|
372
|
+
const before = value.slice(0, cursor);
|
|
373
|
+
const after = value.slice(cursor);
|
|
374
|
+
onChange(before + input + after);
|
|
375
|
+
setCursor(cursor + input.length);
|
|
376
|
+
}
|
|
377
|
+
else if (isPasting && !isLikelyPaste && !inBracketedPaste) {
|
|
378
|
+
// If we're in paste mode but this doesn't look like a paste,
|
|
379
|
+
// it's probably just fast typing - cancel paste mode
|
|
380
|
+
if (pasteTimeout) {
|
|
381
|
+
clearTimeout(pasteTimeout);
|
|
382
|
+
setPasteTimeout(null);
|
|
383
|
+
}
|
|
384
|
+
setPasteBuffer('');
|
|
385
|
+
setIsPasting(false);
|
|
386
|
+
// Process as normal input
|
|
387
|
+
const before = value.slice(0, cursor);
|
|
388
|
+
const after = value.slice(cursor);
|
|
389
|
+
onChange(before + input + after);
|
|
390
|
+
setCursor(cursor + input.length);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
});
|
|
394
|
+
// Function to wrap text at word boundaries
|
|
395
|
+
const wrapText = (text, width) => {
|
|
396
|
+
if (!text)
|
|
397
|
+
return [{ line: '', isHardBreak: false }];
|
|
398
|
+
const hardLines = text.split('\n');
|
|
399
|
+
const wrappedLines = [];
|
|
400
|
+
for (let i = 0; i < hardLines.length; i++) {
|
|
401
|
+
const hardLine = hardLines[i];
|
|
402
|
+
const isLastHardLine = i === hardLines.length - 1;
|
|
403
|
+
if (hardLine.length <= width) {
|
|
404
|
+
// Line fits within width
|
|
405
|
+
wrappedLines.push({ line: hardLine, isHardBreak: !isLastHardLine });
|
|
406
|
+
}
|
|
407
|
+
else {
|
|
408
|
+
// Need to wrap this line at word boundaries
|
|
409
|
+
let remaining = hardLine;
|
|
410
|
+
while (remaining.length > 0) {
|
|
411
|
+
if (remaining.length <= width) {
|
|
412
|
+
// Last segment of this hard line
|
|
413
|
+
wrappedLines.push({
|
|
414
|
+
line: remaining,
|
|
415
|
+
isHardBreak: !isLastHardLine
|
|
416
|
+
});
|
|
417
|
+
break;
|
|
418
|
+
}
|
|
419
|
+
// Find last space within width limit
|
|
420
|
+
let breakPoint = width;
|
|
421
|
+
// Look for the last space that fits within the width - 1 to wrap before overflow
|
|
422
|
+
let lastSpace = remaining.lastIndexOf(' ', width - 1);
|
|
423
|
+
if (lastSpace > 0) {
|
|
424
|
+
// Found a space to break at
|
|
425
|
+
breakPoint = lastSpace;
|
|
426
|
+
}
|
|
427
|
+
else {
|
|
428
|
+
// No good space found, break at width or look for first space
|
|
429
|
+
const firstSpace = remaining.indexOf(' ');
|
|
430
|
+
if (firstSpace > 0 && firstSpace < width) {
|
|
431
|
+
breakPoint = firstSpace;
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
// No spaces or space is beyond width, break at width
|
|
435
|
+
breakPoint = Math.min(width, remaining.length);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
const segment = remaining.slice(0, breakPoint);
|
|
439
|
+
wrappedLines.push({
|
|
440
|
+
line: segment.trimEnd(),
|
|
441
|
+
isHardBreak: false // soft wrap
|
|
442
|
+
});
|
|
443
|
+
// Skip the space if we broke at a space
|
|
444
|
+
const nextChar = remaining[breakPoint];
|
|
445
|
+
if (nextChar === ' ') {
|
|
446
|
+
remaining = remaining.slice(breakPoint + 1);
|
|
447
|
+
}
|
|
448
|
+
else {
|
|
449
|
+
remaining = remaining.slice(breakPoint);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
return wrappedLines;
|
|
455
|
+
};
|
|
456
|
+
// Function to find cursor position in wrapped lines
|
|
457
|
+
const findCursorInWrappedLines = (wrappedLines, absoluteCursor) => {
|
|
458
|
+
let pos = 0;
|
|
459
|
+
// Walk through the original text and wrapped lines simultaneously
|
|
460
|
+
const originalLines = value.split('\n');
|
|
461
|
+
let originalPos = 0;
|
|
462
|
+
let wrappedIndex = 0;
|
|
463
|
+
for (let i = 0; i < originalLines.length; i++) {
|
|
464
|
+
const originalLine = originalLines[i];
|
|
465
|
+
// Count wrapped segments for this original line
|
|
466
|
+
let linePos = 0;
|
|
467
|
+
while (wrappedIndex < wrappedLines.length && linePos < originalLine.length) {
|
|
468
|
+
const wrappedLine = wrappedLines[wrappedIndex];
|
|
469
|
+
const segmentLength = wrappedLine.line.length;
|
|
470
|
+
// Check if cursor is in this wrapped segment
|
|
471
|
+
const segmentEnd = originalPos + segmentLength;
|
|
472
|
+
if (absoluteCursor <= segmentEnd) {
|
|
473
|
+
const colInSegment = absoluteCursor - originalPos;
|
|
474
|
+
return {
|
|
475
|
+
line: wrappedIndex,
|
|
476
|
+
col: colInSegment
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
originalPos = segmentEnd;
|
|
480
|
+
linePos += segmentLength;
|
|
481
|
+
// Account for space that was removed during wrapping
|
|
482
|
+
if (!wrappedLine.isHardBreak && wrappedIndex < wrappedLines.length - 1) {
|
|
483
|
+
// This was a soft wrap, account for the space that was trimmed
|
|
484
|
+
if (linePos < originalLine.length && originalLine[linePos] === ' ') {
|
|
485
|
+
originalPos++; // Skip the space in position counting
|
|
486
|
+
linePos++;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
wrappedIndex++;
|
|
490
|
+
if (wrappedLine.isHardBreak)
|
|
491
|
+
break;
|
|
492
|
+
}
|
|
493
|
+
// Account for the newline character
|
|
494
|
+
if (i < originalLines.length - 1) {
|
|
495
|
+
originalPos++; // newline character
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
// Cursor at very end
|
|
499
|
+
const lastLine = wrappedLines[wrappedLines.length - 1];
|
|
500
|
+
return {
|
|
501
|
+
line: wrappedLines.length - 1,
|
|
502
|
+
col: lastLine ? lastLine.line.length : 0
|
|
503
|
+
};
|
|
504
|
+
};
|
|
505
|
+
// Helper to render text with highlighted paste tags
|
|
506
|
+
const renderTextWithTags = (text, isInverse = false) => {
|
|
507
|
+
const tagPattern = /(\[#\d+ Pasted, \d+ lines?\])/g;
|
|
508
|
+
const parts = text.split(tagPattern);
|
|
509
|
+
return parts.map((part, i) => {
|
|
510
|
+
if (part.match(tagPattern)) {
|
|
511
|
+
// Render paste tag with special styling
|
|
512
|
+
return React.createElement(Text, { key: i, color: "cyan", dimColor: true }, part);
|
|
513
|
+
}
|
|
514
|
+
// Regular text
|
|
515
|
+
return isInverse ? React.createElement(Text, { key: i, inverse: true }, part) : React.createElement(Text, { key: i }, part);
|
|
516
|
+
});
|
|
517
|
+
};
|
|
518
|
+
// Memoize wrapped text to avoid recalculating on every render
|
|
519
|
+
const wrappedLines = useMemo(() => wrapText(value, maxWidth), [value, maxWidth]);
|
|
520
|
+
const hasMultipleLines = wrappedLines.length > 1;
|
|
521
|
+
if (value === '') {
|
|
522
|
+
// Show cursor for empty input (no placeholder)
|
|
523
|
+
return (React.createElement(Box, null,
|
|
524
|
+
React.createElement(Box, { width: 2 },
|
|
525
|
+
React.createElement(Text, null, '> ')),
|
|
526
|
+
React.createElement(Box, null,
|
|
527
|
+
React.createElement(Text, { inverse: true }, ' '))));
|
|
528
|
+
}
|
|
529
|
+
// Find cursor position in wrapped lines
|
|
530
|
+
const cursorPos = findCursorInWrappedLines(wrappedLines, cursor);
|
|
531
|
+
// Render wrapped lines
|
|
532
|
+
return (React.createElement(Box, { flexDirection: "column" }, wrappedLines.map((wrappedLine, idx) => {
|
|
533
|
+
const isFirst = idx === 0;
|
|
534
|
+
const hasCursor = idx === cursorPos.line;
|
|
535
|
+
const line = wrappedLine.line;
|
|
536
|
+
if (hasCursor) {
|
|
537
|
+
const before = line.slice(0, cursorPos.col);
|
|
538
|
+
const at = line[cursorPos.col] || ' ';
|
|
539
|
+
const after = line.slice(cursorPos.col + 1);
|
|
540
|
+
// Check if cursor is within a paste tag
|
|
541
|
+
const tagPattern = /\[#\d+ Pasted, \d+ lines?\]/g;
|
|
542
|
+
let match;
|
|
543
|
+
let cursorInTag = false;
|
|
544
|
+
while ((match = tagPattern.exec(line)) !== null) {
|
|
545
|
+
if (cursorPos.col >= match.index && cursorPos.col < match.index + match[0].length) {
|
|
546
|
+
cursorInTag = true;
|
|
547
|
+
break;
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
return (React.createElement(Box, { key: idx },
|
|
551
|
+
React.createElement(Box, { width: 2 },
|
|
552
|
+
React.createElement(Text, null, isFirst ? '> ' : ' ')),
|
|
553
|
+
React.createElement(Box, null, cursorInTag ? (
|
|
554
|
+
// Cursor is within a paste tag - render specially
|
|
555
|
+
React.createElement(React.Fragment, null,
|
|
556
|
+
renderTextWithTags(before),
|
|
557
|
+
React.createElement(Text, { inverse: true, color: "cyan" }, at),
|
|
558
|
+
renderTextWithTags(after))) : (
|
|
559
|
+
// Normal rendering with tag highlighting
|
|
560
|
+
React.createElement(React.Fragment, null,
|
|
561
|
+
renderTextWithTags(before),
|
|
562
|
+
React.createElement(Text, { inverse: true }, at),
|
|
563
|
+
renderTextWithTags(after))))));
|
|
564
|
+
}
|
|
565
|
+
return (React.createElement(Box, { key: idx },
|
|
566
|
+
React.createElement(Box, { width: 2 },
|
|
567
|
+
React.createElement(Text, null, isFirst ? '> ' : ' ')),
|
|
568
|
+
React.createElement(Box, null, line ? renderTextWithTags(line) : React.createElement(Text, null, ' '))));
|
|
569
|
+
})));
|
|
570
|
+
};
|
|
571
|
+
export default CleanTextInput;
|
|
572
|
+
//# sourceMappingURL=CleanTextInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CleanTextInput.js","sourceRoot":"","sources":["../src/CleanTextInput.tsx"],"names":[],"mappings":"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"}
|
package/dist/DmuxApp.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import type { AutoUpdater } from './AutoUpdater.js';
|
|
2
3
|
interface DmuxAppProps {
|
|
3
4
|
dmuxDir: string;
|
|
4
5
|
panesFile: string;
|
|
@@ -6,6 +7,7 @@ interface DmuxAppProps {
|
|
|
6
7
|
sessionName: string;
|
|
7
8
|
projectRoot?: string;
|
|
8
9
|
settingsFile: string;
|
|
10
|
+
autoUpdater?: AutoUpdater;
|
|
9
11
|
}
|
|
10
12
|
declare const DmuxApp: React.FC<DmuxAppProps>;
|
|
11
13
|
export default DmuxApp;
|
package/dist/DmuxApp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DmuxApp.d.ts","sourceRoot":"","sources":["../src/DmuxApp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DmuxApp.d.ts","sourceRoot":"","sources":["../src/DmuxApp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAUnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAoCpD,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAyyEnC,CAAC;AAEF,eAAe,OAAO,CAAC"}
|