@syntero/orca-cli 1.3.3 → 1.3.4

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.
Files changed (46) hide show
  1. package/dist/assistant/prompts.d.ts.map +1 -1
  2. package/dist/assistant/prompts.js +22 -0
  3. package/dist/assistant/prompts.js.map +1 -1
  4. package/dist/components/ChatApp.d.ts.map +1 -1
  5. package/dist/components/ChatApp.js +8 -6
  6. package/dist/components/ChatApp.js.map +1 -1
  7. package/dist/components/InputFooter.d.ts.map +1 -1
  8. package/dist/components/InputFooter.js +34 -695
  9. package/dist/components/InputFooter.js.map +1 -1
  10. package/dist/components/ResumeMenu.d.ts.map +1 -1
  11. package/dist/components/ResumeMenu.js +24 -3
  12. package/dist/components/ResumeMenu.js.map +1 -1
  13. package/dist/components/hooks/useCommandPalette.d.ts +13 -0
  14. package/dist/components/hooks/useCommandPalette.d.ts.map +1 -0
  15. package/dist/components/hooks/useCommandPalette.js +38 -0
  16. package/dist/components/hooks/useCommandPalette.js.map +1 -0
  17. package/dist/components/hooks/useInputKeyHandler.d.ts +14 -0
  18. package/dist/components/hooks/useInputKeyHandler.d.ts.map +1 -0
  19. package/dist/components/hooks/useInputKeyHandler.js +584 -0
  20. package/dist/components/hooks/useInputKeyHandler.js.map +1 -0
  21. package/dist/components/hooks/useInputLines.d.ts +18 -0
  22. package/dist/components/hooks/useInputLines.d.ts.map +1 -0
  23. package/dist/components/hooks/useInputLines.js +46 -0
  24. package/dist/components/hooks/useInputLines.js.map +1 -0
  25. package/dist/components/hooks/useMenus.d.ts +60 -0
  26. package/dist/components/hooks/useMenus.d.ts.map +1 -0
  27. package/dist/components/hooks/useMenus.js +266 -0
  28. package/dist/components/hooks/useMenus.js.map +1 -0
  29. package/dist/components/hooks/usePasteBlocks.d.ts +14 -0
  30. package/dist/components/hooks/usePasteBlocks.d.ts.map +1 -0
  31. package/dist/components/hooks/usePasteBlocks.js +32 -0
  32. package/dist/components/hooks/usePasteBlocks.js.map +1 -0
  33. package/dist/models.js +4 -4
  34. package/dist/settings.js +1 -1
  35. package/dist/tools/handler.d.ts.map +1 -1
  36. package/dist/tools/handler.js +11 -0
  37. package/dist/tools/handler.js.map +1 -1
  38. package/dist/tools/index.d.ts +152 -0
  39. package/dist/tools/index.d.ts.map +1 -1
  40. package/dist/tools/index.js +2 -0
  41. package/dist/tools/index.js.map +1 -1
  42. package/dist/tools/inference.d.ts +127 -0
  43. package/dist/tools/inference.d.ts.map +1 -0
  44. package/dist/tools/inference.js +318 -0
  45. package/dist/tools/inference.js.map +1 -0
  46. package/package.json +4 -4
@@ -0,0 +1,584 @@
1
+ import { useRef } from 'react';
2
+ import { useInput, useApp } from 'ink';
3
+ import { listConversations } from '../../conversations/index.js';
4
+ import { isPasteMarker, parsePasteMarker, makePasteMarker } from './usePasteBlocks.js';
5
+ // ---------------------------------------------------------------------------
6
+ // Hook
7
+ // ---------------------------------------------------------------------------
8
+ export function useInputKeyHandler({ pasteBlocks, inputLines, commandPalette, menus, history, onSubmit, }) {
9
+ const { exit } = useApp();
10
+ const { pasteBlocksRef, pasteCounterRef, expandLines, clearPasteBlocks } = pasteBlocks;
11
+ const { inputState, setInputState, updateInputState, historyIndex, setHistoryIndex, savedInput, setSavedInput, handleSubmit, } = inputLines;
12
+ const { showPalette, setShowPalette, paletteFilter, setPaletteFilter, selectedIndex, setSelectedIndex, filteredCommands, closePalette, } = commandPalette;
13
+ const { currentSettings, isAnyMenuOpen, setShowModelMenu, setShowStreamingMenu, setShowConfigWizard, setShowTokenInput, setShowSyncMenu, setShowUploadMenu, setShowResumeMenu, setResumeConversations, } = menus;
14
+ const { lines, currentLine, cursorPos } = inputState;
15
+ // Track last Escape press time for double-Escape-to-clear
16
+ const lastEscapeTime = useRef(0);
17
+ useInput((input, key) => {
18
+ // Ctrl+C to exit
19
+ if (input === 'c' && key.ctrl) {
20
+ exit();
21
+ return;
22
+ }
23
+ // Config wizard handles its own input
24
+ // Token input handles its own input
25
+ // Model menu handles its own input
26
+ // Sync menu handles its own input
27
+ // Upload menu handles its own input
28
+ // Resume menu handles its own input
29
+ // Streaming menu handles its own input
30
+ if (isAnyMenuOpen) {
31
+ return;
32
+ }
33
+ // NOTE: We no longer block input when streaming (isDisabled).
34
+ // Users can type, search history, and submit messages while streaming.
35
+ // The parent component handles queuing messages submitted during streaming.
36
+ // Double-Escape to clear input (when no palette/menu is open)
37
+ if (key.escape && !showPalette) {
38
+ const now = Date.now();
39
+ if (now - lastEscapeTime.current < 500) {
40
+ // Double Escape: clear the input
41
+ setInputState({ lines: [''], currentLine: 0, cursorPos: 0 });
42
+ setHistoryIndex(-1);
43
+ setSavedInput('');
44
+ clearPasteBlocks();
45
+ lastEscapeTime.current = 0;
46
+ }
47
+ else {
48
+ lastEscapeTime.current = now;
49
+ }
50
+ return;
51
+ }
52
+ // Handle command palette navigation when it's open
53
+ if (showPalette) {
54
+ // Escape to close palette
55
+ if (key.escape) {
56
+ closePalette();
57
+ return;
58
+ }
59
+ // Arrow Up: navigate up in palette
60
+ if (key.upArrow) {
61
+ setSelectedIndex(prev => (prev > 0 ? prev - 1 : filteredCommands.length - 1));
62
+ return;
63
+ }
64
+ // Arrow Down: navigate down in palette
65
+ if (key.downArrow) {
66
+ setSelectedIndex(prev => (prev < filteredCommands.length - 1 ? prev + 1 : 0));
67
+ return;
68
+ }
69
+ // Tab: autocomplete with the highlighted command (keep palette open)
70
+ if (key.tab) {
71
+ if (filteredCommands.length > 0 && selectedIndex < filteredCommands.length) {
72
+ const selectedCommand = filteredCommands[selectedIndex].name;
73
+ // Update the input line with the full command and cursor position atomically
74
+ setInputState(prev => {
75
+ const newLines = [...prev.lines];
76
+ newLines[prev.currentLine] = selectedCommand;
77
+ return { ...prev, lines: newLines, cursorPos: selectedCommand.length };
78
+ });
79
+ // Reset filter to match the full command (minus the leading "/")
80
+ setPaletteFilter(selectedCommand.slice(1));
81
+ // Reset selected index
82
+ setSelectedIndex(0);
83
+ // Keep palette open - don't close it
84
+ }
85
+ return;
86
+ }
87
+ // Enter: select the highlighted command or submit full input
88
+ if (key.return) {
89
+ if (filteredCommands.length > 0 && selectedIndex < filteredCommands.length) {
90
+ const selectedCommand = filteredCommands[selectedIndex].name;
91
+ // Special handling for /config command
92
+ if (selectedCommand === '/config' && currentSettings) {
93
+ closePalette();
94
+ setShowConfigWizard(true);
95
+ // Clear the input since we're handling it inline
96
+ updateInputState({ lines: [''], cursorPos: 0 });
97
+ return;
98
+ }
99
+ // Special handling for /token command
100
+ if (selectedCommand === '/token') {
101
+ closePalette();
102
+ setShowTokenInput(true);
103
+ // Clear the input since we're handling it inline
104
+ updateInputState({ lines: [''], cursorPos: 0 });
105
+ return;
106
+ }
107
+ // Special handling for /model command
108
+ if (selectedCommand === '/model' && currentSettings) {
109
+ closePalette();
110
+ setShowModelMenu(true);
111
+ // Clear the input since we're handling it inline
112
+ updateInputState({ lines: [''], cursorPos: 0 });
113
+ return;
114
+ }
115
+ // Special handling for /streaming command
116
+ if (selectedCommand === '/streaming' && currentSettings) {
117
+ closePalette();
118
+ setShowStreamingMenu(true);
119
+ // Clear the input since we're handling it inline
120
+ updateInputState({ lines: [''], cursorPos: 0 });
121
+ return;
122
+ }
123
+ // Special handling for /sync command
124
+ if (selectedCommand === '/sync') {
125
+ closePalette();
126
+ setShowSyncMenu(true);
127
+ // Clear the input since we're handling it inline
128
+ updateInputState({ lines: [''], cursorPos: 0 });
129
+ return;
130
+ }
131
+ // Special handling for /upload command
132
+ if (selectedCommand === '/upload') {
133
+ closePalette();
134
+ setShowUploadMenu(true);
135
+ // Clear the input since we're handling it inline
136
+ updateInputState({ lines: [''], cursorPos: 0 });
137
+ return;
138
+ }
139
+ // Special handling for /resume command
140
+ if (selectedCommand === '/resume') {
141
+ closePalette();
142
+ // Load conversations list before showing menu
143
+ setResumeConversations(listConversations());
144
+ setShowResumeMenu(true);
145
+ // Clear the input since we're handling it inline
146
+ updateInputState({ lines: [''], cursorPos: 0 });
147
+ return;
148
+ }
149
+ // Set the command in input and submit immediately
150
+ closePalette();
151
+ setInputState({ lines: [''], currentLine: 0, cursorPos: 0 });
152
+ onSubmit(selectedCommand);
153
+ }
154
+ else {
155
+ // No matching commands - submit the full input as-is (for commands with arguments)
156
+ const fullInput = '/' + paletteFilter;
157
+ closePalette();
158
+ setInputState({ lines: [''], currentLine: 0, cursorPos: 0 });
159
+ onSubmit(fullInput);
160
+ }
161
+ return;
162
+ }
163
+ // Backspace: remove from filter or close palette
164
+ if (key.backspace || key.delete) {
165
+ if (paletteFilter.length > 0) {
166
+ // Remove last character from filter
167
+ const newFilter = paletteFilter.slice(0, -1);
168
+ setPaletteFilter(newFilter);
169
+ setSelectedIndex(0);
170
+ // Update the input line and cursor atomically
171
+ setInputState(prev => {
172
+ const newLines = [...prev.lines];
173
+ newLines[prev.currentLine] = '/' + newFilter;
174
+ return { ...prev, lines: newLines, cursorPos: 1 + newFilter.length };
175
+ });
176
+ }
177
+ else {
178
+ // Filter is empty, delete the "/" and close palette
179
+ setInputState(prev => {
180
+ const newLines = [...prev.lines];
181
+ const line = newLines[prev.currentLine];
182
+ if (line.startsWith('/')) {
183
+ newLines[prev.currentLine] = line.slice(1);
184
+ }
185
+ return { ...prev, lines: newLines, cursorPos: Math.max(0, prev.cursorPos - 1) };
186
+ });
187
+ closePalette();
188
+ }
189
+ return;
190
+ }
191
+ // Regular character input: add to filter
192
+ if (input && !key.ctrl && !key.meta) {
193
+ const newFilter = paletteFilter + input;
194
+ setPaletteFilter(newFilter);
195
+ setSelectedIndex(0);
196
+ // Update the input line and cursor atomically
197
+ setInputState(prev => {
198
+ const newLines = [...prev.lines];
199
+ newLines[prev.currentLine] = '/' + newFilter;
200
+ return { ...prev, lines: newLines, cursorPos: 1 + newFilter.length };
201
+ });
202
+ return;
203
+ }
204
+ return;
205
+ }
206
+ // Normal input handling when palette is closed
207
+ // Ctrl+J for new line
208
+ if (input === 'j' && key.ctrl) {
209
+ setInputState(prev => {
210
+ const newLines = [...prev.lines];
211
+ // Split current line at cursor position
212
+ const currentLineContent = newLines[prev.currentLine];
213
+ const beforeCursor = currentLineContent.slice(0, prev.cursorPos);
214
+ const afterCursor = currentLineContent.slice(prev.cursorPos);
215
+ newLines[prev.currentLine] = beforeCursor;
216
+ newLines.splice(prev.currentLine + 1, 0, afterCursor);
217
+ return { lines: newLines, currentLine: prev.currentLine + 1, cursorPos: 0 };
218
+ });
219
+ return;
220
+ }
221
+ // Enter to submit
222
+ if (key.return) {
223
+ handleSubmit();
224
+ return;
225
+ }
226
+ // Arrow Up - navigate lines or history
227
+ if (key.upArrow) {
228
+ // If on first line, navigate history backward
229
+ if (currentLine === 0 && history.length > 0) {
230
+ const nextIndex = historyIndex + 1;
231
+ if (nextIndex < history.length) {
232
+ // Save current input when first starting to navigate (expand paste markers)
233
+ if (historyIndex === -1) {
234
+ setSavedInput(expandLines(lines).join('\n'));
235
+ clearPasteBlocks();
236
+ }
237
+ setHistoryIndex(nextIndex);
238
+ // History is stored newest first, so index 0 = most recent
239
+ const historyItem = history[nextIndex];
240
+ const historyLines = historyItem.split('\n');
241
+ setInputState({
242
+ lines: historyLines,
243
+ currentLine: 0,
244
+ cursorPos: historyLines[0].length,
245
+ });
246
+ }
247
+ return;
248
+ }
249
+ // Otherwise navigate between lines (skip paste markers)
250
+ setInputState(prev => {
251
+ if (prev.currentLine > 0) {
252
+ let newLine = prev.currentLine - 1;
253
+ while (newLine > 0 && isPasteMarker(prev.lines[newLine]))
254
+ newLine--;
255
+ if (isPasteMarker(prev.lines[newLine]))
256
+ return prev;
257
+ return {
258
+ ...prev,
259
+ currentLine: newLine,
260
+ cursorPos: Math.min(prev.cursorPos, prev.lines[newLine].length),
261
+ };
262
+ }
263
+ return prev;
264
+ });
265
+ return;
266
+ }
267
+ // Arrow Down - navigate lines or history
268
+ if (key.downArrow) {
269
+ // If navigating history, move forward (toward more recent)
270
+ if (historyIndex >= 0) {
271
+ const nextIndex = historyIndex - 1;
272
+ if (nextIndex >= 0) {
273
+ // Still in history
274
+ setHistoryIndex(nextIndex);
275
+ const historyItem = history[nextIndex];
276
+ const historyLines = historyItem.split('\n');
277
+ setInputState({
278
+ lines: historyLines,
279
+ currentLine: 0,
280
+ cursorPos: historyLines[0].length,
281
+ });
282
+ }
283
+ else {
284
+ // Reached end of history, restore saved input
285
+ setHistoryIndex(-1);
286
+ const restoredLines = savedInput ? savedInput.split('\n') : [''];
287
+ setInputState({
288
+ lines: restoredLines,
289
+ currentLine: 0,
290
+ cursorPos: restoredLines[0].length,
291
+ });
292
+ setSavedInput('');
293
+ }
294
+ return;
295
+ }
296
+ // Otherwise navigate between lines (skip paste markers)
297
+ setInputState(prev => {
298
+ if (prev.currentLine < prev.lines.length - 1) {
299
+ let newLine = prev.currentLine + 1;
300
+ while (newLine < prev.lines.length - 1 && isPasteMarker(prev.lines[newLine]))
301
+ newLine++;
302
+ if (isPasteMarker(prev.lines[newLine]))
303
+ return prev;
304
+ return {
305
+ ...prev,
306
+ currentLine: newLine,
307
+ cursorPos: Math.min(prev.cursorPos, prev.lines[newLine].length),
308
+ };
309
+ }
310
+ return prev;
311
+ });
312
+ return;
313
+ }
314
+ // Ctrl/Alt+Left: move cursor one word left
315
+ if (key.leftArrow && (key.ctrl || key.meta)) {
316
+ setInputState(prev => {
317
+ const line = prev.lines[prev.currentLine];
318
+ let pos = prev.cursorPos;
319
+ if (pos === 0) {
320
+ // Wrap to end of previous line (skip paste markers)
321
+ if (prev.currentLine === 0)
322
+ return prev;
323
+ let newLine = prev.currentLine - 1;
324
+ while (newLine > 0 && isPasteMarker(prev.lines[newLine]))
325
+ newLine--;
326
+ if (isPasteMarker(prev.lines[newLine]))
327
+ return prev;
328
+ return { ...prev, currentLine: newLine, cursorPos: prev.lines[newLine].length };
329
+ }
330
+ // Skip whitespace backwards
331
+ while (pos > 0 && /\s/.test(line[pos - 1]))
332
+ pos--;
333
+ // Skip word characters backwards
334
+ while (pos > 0 && !/\s/.test(line[pos - 1]))
335
+ pos--;
336
+ return { ...prev, cursorPos: pos };
337
+ });
338
+ return;
339
+ }
340
+ // Ctrl/Alt+Right: move cursor one word right
341
+ if (key.rightArrow && (key.ctrl || key.meta)) {
342
+ setInputState(prev => {
343
+ const line = prev.lines[prev.currentLine];
344
+ let pos = prev.cursorPos;
345
+ if (pos >= line.length) {
346
+ // Wrap to start of next line (skip paste markers)
347
+ if (prev.currentLine >= prev.lines.length - 1)
348
+ return prev;
349
+ let newLine = prev.currentLine + 1;
350
+ while (newLine < prev.lines.length - 1 && isPasteMarker(prev.lines[newLine]))
351
+ newLine++;
352
+ if (isPasteMarker(prev.lines[newLine]))
353
+ return prev;
354
+ return { ...prev, currentLine: newLine, cursorPos: 0 };
355
+ }
356
+ // Skip word characters forwards
357
+ while (pos < line.length && !/\s/.test(line[pos]))
358
+ pos++;
359
+ // Skip whitespace forwards
360
+ while (pos < line.length && /\s/.test(line[pos]))
361
+ pos++;
362
+ return { ...prev, cursorPos: pos };
363
+ });
364
+ return;
365
+ }
366
+ // Arrow Left
367
+ if (key.leftArrow) {
368
+ setInputState(prev => {
369
+ if (prev.cursorPos > 0) {
370
+ return { ...prev, cursorPos: prev.cursorPos - 1 };
371
+ }
372
+ else if (prev.currentLine > 0) {
373
+ // Move to end of previous line (skip paste markers)
374
+ let newLine = prev.currentLine - 1;
375
+ while (newLine > 0 && isPasteMarker(prev.lines[newLine]))
376
+ newLine--;
377
+ if (isPasteMarker(prev.lines[newLine]))
378
+ return prev;
379
+ return { ...prev, currentLine: newLine, cursorPos: prev.lines[newLine].length };
380
+ }
381
+ return prev;
382
+ });
383
+ return;
384
+ }
385
+ // Arrow Right
386
+ if (key.rightArrow) {
387
+ setInputState(prev => {
388
+ if (prev.cursorPos < prev.lines[prev.currentLine].length) {
389
+ return { ...prev, cursorPos: prev.cursorPos + 1 };
390
+ }
391
+ else if (prev.currentLine < prev.lines.length - 1) {
392
+ // Move to start of next line (skip paste markers)
393
+ let newLine = prev.currentLine + 1;
394
+ while (newLine < prev.lines.length - 1 && isPasteMarker(prev.lines[newLine]))
395
+ newLine++;
396
+ if (isPasteMarker(prev.lines[newLine]))
397
+ return prev;
398
+ return { ...prev, currentLine: newLine, cursorPos: 0 };
399
+ }
400
+ return prev;
401
+ });
402
+ return;
403
+ }
404
+ // Alt+Backspace: delete word before cursor
405
+ if (key.meta && (key.backspace || key.delete)) {
406
+ setInputState(prev => {
407
+ // If on a paste marker, delete the whole block
408
+ if (isPasteMarker(prev.lines[prev.currentLine])) {
409
+ const marker = parsePasteMarker(prev.lines[prev.currentLine]);
410
+ if (marker)
411
+ pasteBlocksRef.current.delete(marker.id);
412
+ const newLines = [...prev.lines];
413
+ newLines.splice(prev.currentLine, 1);
414
+ if (newLines.length === 0)
415
+ newLines.push('');
416
+ const newCurrent = Math.min(prev.currentLine, newLines.length - 1);
417
+ return { lines: newLines, currentLine: newCurrent, cursorPos: 0 };
418
+ }
419
+ if (prev.cursorPos === 0) {
420
+ if (prev.currentLine === 0)
421
+ return prev;
422
+ // If previous line is a paste marker, delete it
423
+ if (isPasteMarker(prev.lines[prev.currentLine - 1])) {
424
+ const marker = parsePasteMarker(prev.lines[prev.currentLine - 1]);
425
+ if (marker)
426
+ pasteBlocksRef.current.delete(marker.id);
427
+ const newLines = [...prev.lines];
428
+ newLines.splice(prev.currentLine - 1, 1);
429
+ return { lines: newLines, currentLine: prev.currentLine - 1, cursorPos: 0 };
430
+ }
431
+ // Merge with previous line (wrap up)
432
+ const prevLineLen = prev.lines[prev.currentLine - 1].length;
433
+ const newLines = [...prev.lines];
434
+ newLines[prev.currentLine - 1] += newLines[prev.currentLine];
435
+ newLines.splice(prev.currentLine, 1);
436
+ return { lines: newLines, currentLine: prev.currentLine - 1, cursorPos: prevLineLen };
437
+ }
438
+ const line = prev.lines[prev.currentLine];
439
+ let pos = prev.cursorPos;
440
+ // Skip any whitespace immediately before cursor
441
+ while (pos > 0 && /\s/.test(line[pos - 1])) {
442
+ pos--;
443
+ }
444
+ // Delete back to the previous whitespace or start of line
445
+ while (pos > 0 && !/\s/.test(line[pos - 1])) {
446
+ pos--;
447
+ }
448
+ const newLines = [...prev.lines];
449
+ newLines[prev.currentLine] = line.slice(0, pos) + line.slice(prev.cursorPos);
450
+ return { ...prev, lines: newLines, cursorPos: pos };
451
+ });
452
+ return;
453
+ }
454
+ // Backspace
455
+ if (key.backspace || key.delete) {
456
+ setInputState(prev => {
457
+ // If on a paste marker, delete the whole block
458
+ if (isPasteMarker(prev.lines[prev.currentLine])) {
459
+ const marker = parsePasteMarker(prev.lines[prev.currentLine]);
460
+ if (marker)
461
+ pasteBlocksRef.current.delete(marker.id);
462
+ const newLines = [...prev.lines];
463
+ newLines.splice(prev.currentLine, 1);
464
+ if (newLines.length === 0)
465
+ newLines.push('');
466
+ const newCurrent = Math.min(prev.currentLine, newLines.length - 1);
467
+ return { lines: newLines, currentLine: newCurrent, cursorPos: 0 };
468
+ }
469
+ if (prev.cursorPos > 0) {
470
+ // Delete character before cursor
471
+ const newLines = [...prev.lines];
472
+ const line = newLines[prev.currentLine];
473
+ newLines[prev.currentLine] = line.slice(0, prev.cursorPos - 1) + line.slice(prev.cursorPos);
474
+ return { ...prev, lines: newLines, cursorPos: prev.cursorPos - 1 };
475
+ }
476
+ else if (prev.currentLine > 0) {
477
+ // If previous line is a paste marker, delete it instead of merging
478
+ if (isPasteMarker(prev.lines[prev.currentLine - 1])) {
479
+ const marker = parsePasteMarker(prev.lines[prev.currentLine - 1]);
480
+ if (marker)
481
+ pasteBlocksRef.current.delete(marker.id);
482
+ const newLines = [...prev.lines];
483
+ newLines.splice(prev.currentLine - 1, 1);
484
+ return { lines: newLines, currentLine: prev.currentLine - 1, cursorPos: 0 };
485
+ }
486
+ // Merge with previous line
487
+ const prevLineLen = prev.lines[prev.currentLine - 1].length;
488
+ const newLines = [...prev.lines];
489
+ newLines[prev.currentLine - 1] += newLines[prev.currentLine];
490
+ newLines.splice(prev.currentLine, 1);
491
+ return { lines: newLines, currentLine: prev.currentLine - 1, cursorPos: prevLineLen };
492
+ }
493
+ return prev;
494
+ });
495
+ return;
496
+ }
497
+ // Home key
498
+ if (key.home) {
499
+ updateInputState({ cursorPos: 0 });
500
+ return;
501
+ }
502
+ // End key
503
+ if (key.end) {
504
+ setInputState(prev => ({ ...prev, cursorPos: prev.lines[prev.currentLine].length }));
505
+ return;
506
+ }
507
+ // Regular character input (including multi-character paste)
508
+ if (input && !key.ctrl && !key.meta) {
509
+ // Normalize line endings: terminals send \r for newlines in raw mode
510
+ const normalizedInput = input.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
511
+ // Don't allow typing on a paste marker line
512
+ if (isPasteMarker(inputState.lines[inputState.currentLine]))
513
+ return;
514
+ // Multi-line paste: input contains newlines
515
+ if (normalizedInput.includes('\n')) {
516
+ const pastedLines = normalizedInput.split('\n');
517
+ if (pastedLines.length > 10) {
518
+ // Collapse large paste into a marker
519
+ pasteCounterRef.current++;
520
+ const pasteId = pasteCounterRef.current;
521
+ setInputState(prev => {
522
+ const newLines = [...prev.lines];
523
+ const line = newLines[prev.currentLine];
524
+ const beforeCursor = line.slice(0, prev.cursorPos);
525
+ const afterCursor = line.slice(prev.cursorPos);
526
+ // Merge surrounding text into the pasted content
527
+ const mergedPaste = [...pastedLines];
528
+ mergedPaste[0] = beforeCursor + mergedPaste[0];
529
+ mergedPaste[mergedPaste.length - 1] += afterCursor;
530
+ pasteBlocksRef.current.set(pasteId, mergedPaste);
531
+ const marker = makePasteMarker(pasteId, mergedPaste.length);
532
+ // Replace current line with marker + empty line for cursor
533
+ newLines.splice(prev.currentLine, 1, marker, '');
534
+ return {
535
+ lines: newLines,
536
+ currentLine: prev.currentLine + 1,
537
+ cursorPos: 0,
538
+ };
539
+ });
540
+ }
541
+ else {
542
+ // Normal multi-line paste (<=10 lines) - split properly
543
+ setInputState(prev => {
544
+ const newLines = [...prev.lines];
545
+ const line = newLines[prev.currentLine];
546
+ const beforeCursor = line.slice(0, prev.cursorPos);
547
+ const afterCursor = line.slice(prev.cursorPos);
548
+ const merged = [...pastedLines];
549
+ merged[0] = beforeCursor + merged[0];
550
+ merged[merged.length - 1] += afterCursor;
551
+ newLines.splice(prev.currentLine, 1, ...merged);
552
+ const lastLine = merged[merged.length - 1];
553
+ const newCursorPos = lastLine.length - afterCursor.length;
554
+ return {
555
+ lines: newLines,
556
+ currentLine: prev.currentLine + merged.length - 1,
557
+ cursorPos: newCursorPos,
558
+ };
559
+ });
560
+ }
561
+ return;
562
+ }
563
+ // Single character / single-line paste
564
+ // Check if "/" is typed at the beginning of an empty line or at cursor position 0
565
+ if (normalizedInput === '/' && (inputState.lines[inputState.currentLine] === '' || inputState.cursorPos === 0)) {
566
+ setShowPalette(true);
567
+ setPaletteFilter('');
568
+ setSelectedIndex(0);
569
+ }
570
+ setInputState(prev => {
571
+ const newLines = [...prev.lines];
572
+ const line = newLines[prev.currentLine];
573
+ newLines[prev.currentLine] = line.slice(0, prev.cursorPos) + normalizedInput + line.slice(prev.cursorPos);
574
+ return {
575
+ ...prev,
576
+ lines: newLines,
577
+ cursorPos: prev.cursorPos + normalizedInput.length
578
+ };
579
+ });
580
+ return;
581
+ }
582
+ });
583
+ }
584
+ //# sourceMappingURL=useInputKeyHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInputKeyHandler.js","sourceRoot":"","sources":["../../../src/components/hooks/useInputKeyHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAmBvF,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,MAAM,UAAU,kBAAkB,CAAC,EACjC,WAAW,EACX,UAAU,EACV,cAAc,EACd,KAAK,EACL,OAAO,EACP,QAAQ,GACiB;IACzB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAE1B,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,WAAW,CAAC;IAEvF,MAAM,EACJ,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,UAAU,EACV,aAAa,EACb,YAAY,GACb,GAAG,UAAU,CAAC;IAEf,MAAM,EACJ,WAAW,EACX,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GACb,GAAG,cAAc,CAAC;IAEnB,MAAM,EACJ,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,GACvB,GAAG,KAAK,CAAC;IAEV,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC;IAErD,0DAA0D;IAC1D,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAEjC,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,iBAAiB;QACjB,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,sCAAsC;QACtC,oCAAoC;QACpC,mCAAmC;QACnC,kCAAkC;QAClC,oCAAoC;QACpC,oCAAoC;QACpC,uCAAuC;QACvC,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,8DAA8D;QAC9D,uEAAuE;QACvE,4EAA4E;QAE5E,8DAA8D;QAC9D,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,GAAG,GAAG,cAAc,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;gBACvC,iCAAiC;gBACjC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC7D,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpB,aAAa,CAAC,EAAE,CAAC,CAAC;gBAClB,gBAAgB,EAAE,CAAC;gBACnB,cAAc,CAAC,OAAO,GAAG,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,OAAO,GAAG,GAAG,CAAC;YAC/B,CAAC;YACD,OAAO;QACT,CAAC;QAED,mDAAmD;QACnD,IAAI,WAAW,EAAE,CAAC;YAChB,0BAA0B;YAC1B,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,YAAY,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,mCAAmC;YACnC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC9E,OAAO;YACT,CAAC;YAED,uCAAuC;YACvC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9E,OAAO;YACT,CAAC;YAED,qEAAqE;YACrE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;gBACZ,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBAC3E,MAAM,eAAe,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;oBAC7D,6EAA6E;oBAC7E,aAAa,CAAC,IAAI,CAAC,EAAE;wBACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;wBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC;wBAC7C,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,MAAM,EAAE,CAAC;oBACzE,CAAC,CAAC,CAAC;oBACH,iEAAiE;oBACjE,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3C,uBAAuB;oBACvB,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBACpB,qCAAqC;gBACvC,CAAC;gBACD,OAAO;YACT,CAAC;YAED,6DAA6D;YAC7D,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBAC3E,MAAM,eAAe,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC;oBAE7D,uCAAuC;oBACvC,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,EAAE,CAAC;wBACrD,YAAY,EAAE,CAAC;wBACf,mBAAmB,CAAC,IAAI,CAAC,CAAC;wBAC1B,iDAAiD;wBACjD,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;wBAChD,OAAO;oBACT,CAAC;oBAED,sCAAsC;oBACtC,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;wBACjC,YAAY,EAAE,CAAC;wBACf,iBAAiB,CAAC,IAAI,CAAC,CAAC;wBACxB,iDAAiD;wBACjD,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;wBAChD,OAAO;oBACT,CAAC;oBAED,sCAAsC;oBACtC,IAAI,eAAe,KAAK,QAAQ,IAAI,eAAe,EAAE,CAAC;wBACpD,YAAY,EAAE,CAAC;wBACf,gBAAgB,CAAC,IAAI,CAAC,CAAC;wBACvB,iDAAiD;wBACjD,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;wBAChD,OAAO;oBACT,CAAC;oBAED,0CAA0C;oBAC1C,IAAI,eAAe,KAAK,YAAY,IAAI,eAAe,EAAE,CAAC;wBACxD,YAAY,EAAE,CAAC;wBACf,oBAAoB,CAAC,IAAI,CAAC,CAAC;wBAC3B,iDAAiD;wBACjD,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;wBAChD,OAAO;oBACT,CAAC;oBAED,qCAAqC;oBACrC,IAAI,eAAe,KAAK,OAAO,EAAE,CAAC;wBAChC,YAAY,EAAE,CAAC;wBACf,eAAe,CAAC,IAAI,CAAC,CAAC;wBACtB,iDAAiD;wBACjD,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;wBAChD,OAAO;oBACT,CAAC;oBAED,uCAAuC;oBACvC,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;wBAClC,YAAY,EAAE,CAAC;wBACf,iBAAiB,CAAC,IAAI,CAAC,CAAC;wBACxB,iDAAiD;wBACjD,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;wBAChD,OAAO;oBACT,CAAC;oBAED,uCAAuC;oBACvC,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;wBAClC,YAAY,EAAE,CAAC;wBACf,8CAA8C;wBAC9C,sBAAsB,CAAC,iBAAiB,EAAE,CAAC,CAAC;wBAC5C,iBAAiB,CAAC,IAAI,CAAC,CAAC;wBACxB,iDAAiD;wBACjD,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;wBAChD,OAAO;oBACT,CAAC;oBAED,kDAAkD;oBAClD,YAAY,EAAE,CAAC;oBACf,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC7D,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,mFAAmF;oBACnF,MAAM,SAAS,GAAG,GAAG,GAAG,aAAa,CAAC;oBACtC,YAAY,EAAE,CAAC;oBACf,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC7D,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACtB,CAAC;gBACD,OAAO;YACT,CAAC;YAED,iDAAiD;YACjD,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBAChC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,oCAAoC;oBACpC,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC7C,gBAAgB,CAAC,SAAS,CAAC,CAAC;oBAC5B,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBACpB,8CAA8C;oBAC9C,aAAa,CAAC,IAAI,CAAC,EAAE;wBACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;wBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC;wBAC7C,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;oBACvE,CAAC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,oDAAoD;oBACpD,aAAa,CAAC,IAAI,CAAC,EAAE;wBACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;wBACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBACxC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;4BACzB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC7C,CAAC;wBACD,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;oBAClF,CAAC,CAAC,CAAC;oBACH,YAAY,EAAE,CAAC;gBACjB,CAAC;gBACD,OAAO;YACT,CAAC;YAED,yCAAyC;YACzC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,SAAS,GAAG,aAAa,GAAG,KAAK,CAAC;gBACxC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC5B,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBACpB,8CAA8C;gBAC9C,aAAa,CAAC,IAAI,CAAC,EAAE;oBACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC;oBAC7C,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;gBACvE,CAAC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,OAAO;QACT,CAAC;QAED,+CAA+C;QAE/C,sBAAsB;QACtB,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,wCAAwC;gBACxC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACtD,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACjE,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7D,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC;gBAC1C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;gBACtD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;YAC9E,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,kBAAkB;QAClB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,uCAAuC;QACvC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,8CAA8C;YAC9C,IAAI,WAAW,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC;gBACnC,IAAI,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC/B,4EAA4E;oBAC5E,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;wBACxB,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC7C,gBAAgB,EAAE,CAAC;oBACrB,CAAC;oBACD,eAAe,CAAC,SAAS,CAAC,CAAC;oBAC3B,2DAA2D;oBAC3D,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;oBACvC,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7C,aAAa,CAAC;wBACZ,KAAK,EAAE,YAAY;wBACnB,WAAW,EAAE,CAAC;wBACd,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM;qBAClC,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO;YACT,CAAC;YACD,wDAAwD;YACxD,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;oBACzB,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACnC,OAAO,OAAO,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;wBAAE,OAAO,EAAE,CAAC;oBACrE,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACrD,OAAO;wBACL,GAAG,IAAI;wBACP,WAAW,EAAE,OAAO;wBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC,MAAM,CAAC;qBACjE,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,yCAAyC;QACzC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,2DAA2D;YAC3D,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;gBACtB,MAAM,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC;gBACnC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;oBACnB,mBAAmB;oBACnB,eAAe,CAAC,SAAS,CAAC,CAAC;oBAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;oBACvC,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7C,aAAa,CAAC;wBACZ,KAAK,EAAE,YAAY;wBACnB,WAAW,EAAE,CAAC;wBACd,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM;qBAClC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,8CAA8C;oBAC9C,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpB,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACjE,aAAa,CAAC;wBACZ,KAAK,EAAE,aAAa;wBACpB,WAAW,EAAE,CAAC;wBACd,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM;qBACnC,CAAC,CAAC;oBACH,aAAa,CAAC,EAAE,CAAC,CAAC;gBACpB,CAAC;gBACD,OAAO;YACT,CAAC;YACD,wDAAwD;YACxD,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7C,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACnC,OAAO,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;wBAAE,OAAO,EAAE,CAAC;oBACzF,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACrD,OAAO;wBACL,GAAG,IAAI;wBACP,WAAW,EAAE,OAAO;wBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC,MAAM,CAAC;qBACjE,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,2CAA2C;QAC3C,IAAI,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC;gBAC3C,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;gBAEzB,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;oBACd,oDAAoD;oBACpD,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACxC,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACnC,OAAO,OAAO,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;wBAAE,OAAO,EAAE,CAAC;oBACrE,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACrD,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC,MAAM,EAAE,CAAC;gBACnF,CAAC;gBAED,4BAA4B;gBAC5B,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC;oBAAE,GAAG,EAAE,CAAC;gBACnD,iCAAiC;gBACjC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC;oBAAE,GAAG,EAAE,CAAC;gBAEpD,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,6CAA6C;QAC7C,IAAI,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC;gBAC3C,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;gBAEzB,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBACvB,kDAAkD;oBAClD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;wBAAE,OAAO,IAAI,CAAC;oBAC3D,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACnC,OAAO,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;wBAAE,OAAO,EAAE,CAAC;oBACzF,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACrD,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;gBACzD,CAAC;gBAED,gCAAgC;gBAChC,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC;oBAAE,GAAG,EAAE,CAAC;gBAC1D,2BAA2B;gBAC3B,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC;oBAAE,GAAG,EAAE,CAAC;gBAEzD,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,aAAa;QACb,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;oBACvB,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBACpD,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;oBAChC,oDAAoD;oBACpD,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACnC,OAAO,OAAO,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;wBAAE,OAAO,EAAE,CAAC;oBACrE,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACrD,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC,MAAM,EAAE,CAAC;gBACnF,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,cAAc;QACd,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC,MAAM,EAAE,CAAC;oBAC1D,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBACpD,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpD,kDAAkD;oBAClD,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACnC,OAAO,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;wBAAE,OAAO,EAAE,CAAC;oBACzF,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACrD,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;gBACzD,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,2CAA2C;QAC3C,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,+CAA+C;gBAC/C,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC,EAAE,CAAC;oBACjD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC,CAAC;oBAC/D,IAAI,MAAM;wBAAE,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACrD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;wBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACnE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;gBACpE,CAAC;gBACD,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC;wBAAE,OAAO,IAAI,CAAC;oBACxC,gDAAgD;oBAChD,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAE,CAAC,EAAE,CAAC;wBACrD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAE,CAAC,CAAC;wBACnE,IAAI,MAAM;4BAAE,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBACrD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;wBACjC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;wBACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;oBAC9E,CAAC;oBACD,qCAAqC;oBACrC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAE,CAAC,MAAM,CAAC;oBAC7D,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC7D,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;gBACxF,CAAC;gBAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC;gBAC3C,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;gBAEzB,gDAAgD;gBAChD,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC,EAAE,CAAC;oBAC5C,GAAG,EAAE,CAAC;gBACR,CAAC;gBAED,0DAA0D;gBAC1D,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC,EAAE,CAAC;oBAC7C,GAAG,EAAE,CAAC;gBACR,CAAC;gBAED,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7E,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,YAAY;QACZ,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAChC,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,+CAA+C;gBAC/C,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC,EAAE,CAAC;oBACjD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC,CAAC;oBAC/D,IAAI,MAAM;wBAAE,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACrD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;wBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACnE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;gBACpE,CAAC;gBACD,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;oBACvB,iCAAiC;oBACjC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC;oBACzC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC5F,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBACrE,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;oBAChC,mEAAmE;oBACnE,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAE,CAAC,EAAE,CAAC;wBACrD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAE,CAAC,CAAC;wBACnE,IAAI,MAAM;4BAAE,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBACrD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;wBACjC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;wBACzC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;oBAC9E,CAAC;oBACD,2BAA2B;oBAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAE,CAAC,MAAM,CAAC;oBAC7D,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC7D,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;gBACxF,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,WAAW;QACX,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QAED,UAAU;QACV,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QAED,4DAA4D;QAC5D,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACpC,qEAAqE;YACrE,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAE1E,4CAA4C;YAC5C,IAAI,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAE,CAAC;gBAAE,OAAO;YAErE,4CAA4C;YAC5C,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEhD,IAAI,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;oBAC5B,qCAAqC;oBACrC,eAAe,CAAC,OAAO,EAAE,CAAC;oBAC1B,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;oBAExC,aAAa,CAAC,IAAI,CAAC,EAAE;wBACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;wBACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC;wBACzC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;wBACnD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAE/C,iDAAiD;wBACjD,MAAM,WAAW,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;wBACrC,WAAW,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,WAAW,CAAC,CAAC,CAAE,CAAC;wBAChD,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,WAAW,CAAC;wBAEnD,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;wBACjD,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;wBAE5D,2DAA2D;wBAC3D,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;wBACjD,OAAO;4BACL,KAAK,EAAE,QAAQ;4BACf,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC;4BACjC,SAAS,EAAE,CAAC;yBACb,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,wDAAwD;oBACxD,aAAa,CAAC,IAAI,CAAC,EAAE;wBACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;wBACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC;wBACzC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;wBACnD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAE/C,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;wBAChC,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;wBACtC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,WAAW,CAAC;wBAEzC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;wBAEhD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;wBAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;wBAE1D,OAAO;4BACL,KAAK,EAAE,QAAQ;4BACf,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;4BACjD,SAAS,EAAE,YAAY;yBACxB,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO;YACT,CAAC;YAED,uCAAuC;YACvC,kFAAkF;YAClF,IAAI,eAAe,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC/G,cAAc,CAAC,IAAI,CAAC,CAAC;gBACrB,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBACrB,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YAED,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC1G,OAAO;oBACL,GAAG,IAAI;oBACP,KAAK,EAAE,QAAQ;oBACf,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC,MAAM;iBACnD,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { UsePasteBlocksReturn } from './usePasteBlocks.js';
2
+ export interface InputState {
3
+ lines: string[];
4
+ currentLine: number;
5
+ cursorPos: number;
6
+ }
7
+ export interface UseInputLinesReturn {
8
+ inputState: InputState;
9
+ setInputState: React.Dispatch<React.SetStateAction<InputState>>;
10
+ updateInputState: (updates: Partial<InputState>) => void;
11
+ historyIndex: number;
12
+ setHistoryIndex: React.Dispatch<React.SetStateAction<number>>;
13
+ savedInput: string;
14
+ setSavedInput: React.Dispatch<React.SetStateAction<string>>;
15
+ handleSubmit: () => void;
16
+ }
17
+ export declare function useInputLines(onSubmit: (value: string) => void, pasteBlocks: UsePasteBlocksReturn): UseInputLinesReturn;
18
+ //# sourceMappingURL=useInputLines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInputLines.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useInputLines.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAMhE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAChE,gBAAgB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAMD,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,WAAW,EAAE,oBAAoB,GAChC,mBAAmB,CA6CrB"}