@syntero/orca-cli 1.0.0 → 1.1.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.
Files changed (111) hide show
  1. package/dist/assistant.d.ts +17 -3
  2. package/dist/assistant.d.ts.map +1 -1
  3. package/dist/assistant.js +217 -22
  4. package/dist/assistant.js.map +1 -1
  5. package/dist/auth.d.ts +97 -0
  6. package/dist/auth.d.ts.map +1 -0
  7. package/dist/auth.js +438 -0
  8. package/dist/auth.js.map +1 -0
  9. package/dist/autocomplete.d.ts +24 -0
  10. package/dist/autocomplete.d.ts.map +1 -0
  11. package/dist/autocomplete.js +43 -0
  12. package/dist/autocomplete.js.map +1 -0
  13. package/dist/components/ChatApp.d.ts +32 -0
  14. package/dist/components/ChatApp.d.ts.map +1 -0
  15. package/dist/components/ChatApp.js +470 -0
  16. package/dist/components/ChatApp.js.map +1 -0
  17. package/dist/components/CommandPalette.d.ts +15 -0
  18. package/dist/components/CommandPalette.d.ts.map +1 -0
  19. package/dist/components/CommandPalette.js +22 -0
  20. package/dist/components/CommandPalette.js.map +1 -0
  21. package/dist/components/ConfigWizard.d.ts +25 -0
  22. package/dist/components/ConfigWizard.d.ts.map +1 -0
  23. package/dist/components/ConfigWizard.js +401 -0
  24. package/dist/components/ConfigWizard.js.map +1 -0
  25. package/dist/components/InputFooter.d.ts +33 -0
  26. package/dist/components/InputFooter.d.ts.map +1 -0
  27. package/dist/components/InputFooter.js +618 -0
  28. package/dist/components/InputFooter.js.map +1 -0
  29. package/dist/components/InputModal.d.ts +25 -0
  30. package/dist/components/InputModal.d.ts.map +1 -0
  31. package/dist/components/InputModal.js +529 -0
  32. package/dist/components/InputModal.js.map +1 -0
  33. package/dist/components/ModelMenu.d.ts +24 -0
  34. package/dist/components/ModelMenu.d.ts.map +1 -0
  35. package/dist/components/ModelMenu.js +175 -0
  36. package/dist/components/ModelMenu.js.map +1 -0
  37. package/dist/components/ProviderMenu.d.ts +20 -0
  38. package/dist/components/ProviderMenu.d.ts.map +1 -0
  39. package/dist/components/ProviderMenu.js +31 -0
  40. package/dist/components/ProviderMenu.js.map +1 -0
  41. package/dist/components/SyncMenu.d.ts +23 -0
  42. package/dist/components/SyncMenu.d.ts.map +1 -0
  43. package/dist/components/SyncMenu.js +135 -0
  44. package/dist/components/SyncMenu.js.map +1 -0
  45. package/dist/components/TokenInput.d.ts +15 -0
  46. package/dist/components/TokenInput.d.ts.map +1 -0
  47. package/dist/components/TokenInput.js +103 -0
  48. package/dist/components/TokenInput.js.map +1 -0
  49. package/dist/index.js +323 -173
  50. package/dist/index.js.map +1 -1
  51. package/dist/ink-input.d.ts +14 -0
  52. package/dist/ink-input.d.ts.map +1 -0
  53. package/dist/ink-input.js +92 -0
  54. package/dist/ink-input.js.map +1 -0
  55. package/dist/models.d.ts +115 -0
  56. package/dist/models.d.ts.map +1 -0
  57. package/dist/models.js +221 -0
  58. package/dist/models.js.map +1 -0
  59. package/dist/providers.d.ts +19 -4
  60. package/dist/providers.d.ts.map +1 -1
  61. package/dist/providers.js +80 -112
  62. package/dist/providers.js.map +1 -1
  63. package/dist/settings.d.ts +15 -0
  64. package/dist/settings.d.ts.map +1 -1
  65. package/dist/settings.js +56 -21
  66. package/dist/settings.js.map +1 -1
  67. package/dist/sync/docker.d.ts +68 -0
  68. package/dist/sync/docker.d.ts.map +1 -0
  69. package/dist/sync/docker.js +234 -0
  70. package/dist/sync/docker.js.map +1 -0
  71. package/dist/sync/download.d.ts +87 -0
  72. package/dist/sync/download.d.ts.map +1 -0
  73. package/dist/sync/download.js +291 -0
  74. package/dist/sync/download.js.map +1 -0
  75. package/dist/sync/hash.d.ts +60 -0
  76. package/dist/sync/hash.d.ts.map +1 -0
  77. package/dist/sync/hash.js +92 -0
  78. package/dist/sync/hash.js.map +1 -0
  79. package/dist/sync/index.d.ts +15 -0
  80. package/dist/sync/index.d.ts.map +1 -0
  81. package/dist/sync/index.js +21 -0
  82. package/dist/sync/index.js.map +1 -0
  83. package/dist/sync/manifest.d.ts +132 -0
  84. package/dist/sync/manifest.d.ts.map +1 -0
  85. package/dist/sync/manifest.js +260 -0
  86. package/dist/sync/manifest.js.map +1 -0
  87. package/dist/sync/progress.d.ts +164 -0
  88. package/dist/sync/progress.d.ts.map +1 -0
  89. package/dist/sync/progress.js +233 -0
  90. package/dist/sync/progress.js.map +1 -0
  91. package/dist/sync/services.d.ts +70 -0
  92. package/dist/sync/services.d.ts.map +1 -0
  93. package/dist/sync/services.js +134 -0
  94. package/dist/sync/services.js.map +1 -0
  95. package/dist/sync/sync-engine.d.ts +69 -0
  96. package/dist/sync/sync-engine.d.ts.map +1 -0
  97. package/dist/sync/sync-engine.js +533 -0
  98. package/dist/sync/sync-engine.js.map +1 -0
  99. package/dist/tokens.d.ts +70 -0
  100. package/dist/tokens.d.ts.map +1 -0
  101. package/dist/tokens.js +198 -0
  102. package/dist/tokens.js.map +1 -0
  103. package/dist/tools.d.ts +60 -0
  104. package/dist/tools.d.ts.map +1 -1
  105. package/dist/tools.js +34 -0
  106. package/dist/tools.js.map +1 -1
  107. package/dist/types/sync.d.ts +284 -0
  108. package/dist/types/sync.d.ts.map +1 -0
  109. package/dist/types/sync.js +5 -0
  110. package/dist/types/sync.js.map +1 -0
  111. package/package.json +10 -2
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import { Settings } from '../settings.js';
3
+ interface InputModalProps {
4
+ label: string;
5
+ onSubmit: (value: string) => void;
6
+ settings?: Settings;
7
+ history?: string[];
8
+ }
9
+ /**
10
+ * Multi-line input modal with a bordered box and inline command palette.
11
+ *
12
+ * Controls:
13
+ * - Enter: Submit the input (or select command when palette is open)
14
+ * - Ctrl+J: Add a new line
15
+ * - Arrow Up/Down: Navigate between lines (or navigate palette when open)
16
+ * - Arrow Left/Right: Navigate within a line
17
+ * - Backspace: Delete character or merge lines
18
+ * - Escape: Close command palette
19
+ * - Ctrl+C: Exit
20
+ *
21
+ * When "/" is typed, the command palette appears automatically.
22
+ */
23
+ export declare function InputModal({ label, onSubmit, settings, history }: InputModalProps): React.ReactElement;
24
+ export {};
25
+ //# sourceMappingURL=InputModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputModal.d.ts","sourceRoot":"","sources":["../../src/components/InputModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAOzE,OAAO,EAAE,QAAQ,EAA0B,MAAM,gBAAgB,CAAC;AAElE,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAY,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAmoB3G"}
@@ -0,0 +1,529 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useCallback, useMemo, useEffect } from 'react';
3
+ import { Box, Text, useInput, useApp } from 'ink';
4
+ import { CommandPalette } from './CommandPalette.js';
5
+ import { ModelMenu } from './ModelMenu.js';
6
+ import { ConfigWizard } from './ConfigWizard.js';
7
+ import { TokenInput } from './TokenInput.js';
8
+ import { filterCommands } from '../autocomplete.js';
9
+ import { Provider, saveSettings } from '../settings.js';
10
+ /**
11
+ * Multi-line input modal with a bordered box and inline command palette.
12
+ *
13
+ * Controls:
14
+ * - Enter: Submit the input (or select command when palette is open)
15
+ * - Ctrl+J: Add a new line
16
+ * - Arrow Up/Down: Navigate between lines (or navigate palette when open)
17
+ * - Arrow Left/Right: Navigate within a line
18
+ * - Backspace: Delete character or merge lines
19
+ * - Escape: Close command palette
20
+ * - Ctrl+C: Exit
21
+ *
22
+ * When "/" is typed, the command palette appears automatically.
23
+ */
24
+ export function InputModal({ label, onSubmit, settings, history = [] }) {
25
+ const { exit } = useApp();
26
+ // State for multi-line input - combined into single object for atomic updates
27
+ const [inputState, setInputState] = useState({
28
+ lines: [''],
29
+ currentLine: 0,
30
+ cursorPos: 0,
31
+ });
32
+ // State for command history navigation
33
+ // historyIndex: -1 means not navigating, 0 = most recent, length-1 = oldest
34
+ const [historyIndex, setHistoryIndex] = useState(-1);
35
+ // savedInput: saves the current input when user starts navigating history
36
+ const [savedInput, setSavedInput] = useState('');
37
+ // Destructure for easier access in render
38
+ const { lines, currentLine, cursorPos } = inputState;
39
+ // Helper to update input state atomically
40
+ const updateInputState = (updates) => {
41
+ setInputState(prev => ({ ...prev, ...updates }));
42
+ };
43
+ // State for command palette
44
+ const [showPalette, setShowPalette] = useState(false);
45
+ const [paletteFilter, setPaletteFilter] = useState('');
46
+ const [selectedIndex, setSelectedIndex] = useState(0);
47
+ // State for model menu
48
+ const [showModelMenu, setShowModelMenu] = useState(false);
49
+ const [confirmationMessage, setConfirmationMessage] = useState(null);
50
+ // State for config wizard
51
+ const [showConfigWizard, setShowConfigWizard] = useState(false);
52
+ const [currentSettings, setCurrentSettings] = useState(settings);
53
+ // State for token input
54
+ const [showTokenInput, setShowTokenInput] = useState(false);
55
+ // Get filtered commands based on paletteFilter
56
+ const filteredCommands = useMemo(() => {
57
+ if (!showPalette)
58
+ return [];
59
+ return filterCommands(paletteFilter);
60
+ }, [showPalette, paletteFilter]);
61
+ // Reset selected index when filtered commands change
62
+ useMemo(() => {
63
+ if (selectedIndex >= filteredCommands.length) {
64
+ setSelectedIndex(Math.max(0, filteredCommands.length - 1));
65
+ }
66
+ }, [filteredCommands.length, selectedIndex]);
67
+ // Clear confirmation message after a delay
68
+ useEffect(() => {
69
+ if (confirmationMessage) {
70
+ const timer = setTimeout(() => {
71
+ setConfirmationMessage(null);
72
+ }, 2000);
73
+ return () => clearTimeout(timer);
74
+ }
75
+ }, [confirmationMessage]);
76
+ // Sync settings prop with local state
77
+ useEffect(() => {
78
+ if (settings) {
79
+ setCurrentSettings(settings);
80
+ }
81
+ }, [settings]);
82
+ // Config wizard callbacks
83
+ const closeConfigWizard = useCallback(() => {
84
+ setShowConfigWizard(false);
85
+ updateInputState({ lines: [''], cursorPos: 0 });
86
+ }, []);
87
+ const handleConfigComplete = useCallback((newSettings) => {
88
+ // Save the settings
89
+ saveSettings(newSettings);
90
+ setCurrentSettings(newSettings);
91
+ setConfirmationMessage(`Configuration saved for ${newSettings.provider}`);
92
+ closeConfigWizard();
93
+ // Trigger reconnect by submitting a special token
94
+ setTimeout(() => {
95
+ onSubmit('__CONFIG_SAVED__');
96
+ }, 100);
97
+ }, [closeConfigWizard, onSubmit]);
98
+ const handleConfigCancel = useCallback(() => {
99
+ setConfirmationMessage('Configuration cancelled');
100
+ closeConfigWizard();
101
+ }, [closeConfigWizard]);
102
+ // Token input callbacks
103
+ const closeTokenInput = useCallback(() => {
104
+ setShowTokenInput(false);
105
+ updateInputState({ lines: [''], cursorPos: 0 });
106
+ }, []);
107
+ const handleTokenSubmit = useCallback((token) => {
108
+ closeTokenInput();
109
+ // Submit with special prefix for index.ts to handle
110
+ onSubmit(`__TOKEN__:${token}`);
111
+ }, [closeTokenInput, onSubmit]);
112
+ const handleTokenCancel = useCallback(() => {
113
+ setConfirmationMessage('Token entry cancelled');
114
+ closeTokenInput();
115
+ }, [closeTokenInput]);
116
+ const handleSubmit = useCallback(() => {
117
+ const result = lines.join('\n').trim();
118
+ // Reset history navigation state
119
+ setHistoryIndex(-1);
120
+ setSavedInput('');
121
+ onSubmit(result);
122
+ }, [lines, onSubmit]);
123
+ const closePalette = useCallback(() => {
124
+ setShowPalette(false);
125
+ setPaletteFilter('');
126
+ setSelectedIndex(0);
127
+ }, []);
128
+ // Model menu callbacks
129
+ const closeModelMenu = useCallback(() => {
130
+ setShowModelMenu(false);
131
+ updateInputState({ lines: [''], cursorPos: 0 });
132
+ }, []);
133
+ const handleModelSelect = useCallback((provider, modelId) => {
134
+ if (!currentSettings) {
135
+ closeModelMenu();
136
+ return;
137
+ }
138
+ // Update the provider
139
+ currentSettings.provider = provider;
140
+ // Update the model in settings based on provider
141
+ if (provider === Provider.ANTHROPIC || provider === 'anthropic') {
142
+ currentSettings.anthropic.model = modelId;
143
+ }
144
+ else if (provider === Provider.OPENAI || provider === 'openai') {
145
+ currentSettings.openai.model = modelId;
146
+ }
147
+ else if (provider === Provider.AZURE || provider === 'azure') {
148
+ currentSettings.azure.deployment = modelId;
149
+ }
150
+ // Save the updated settings
151
+ saveSettings(currentSettings);
152
+ // Format confirmation message with provider and model
153
+ const providerName = provider.charAt(0).toUpperCase() + provider.slice(1);
154
+ setConfirmationMessage(`Provider changed to ${providerName}, model: ${modelId}`);
155
+ closeModelMenu();
156
+ // Trigger reconnect to use the new provider/model
157
+ setTimeout(() => {
158
+ onSubmit('__CONFIG_SAVED__');
159
+ }, 100);
160
+ }, [currentSettings, closeModelMenu, onSubmit]);
161
+ const handleModelCancel = useCallback(() => {
162
+ setConfirmationMessage('Model selection cancelled');
163
+ closeModelMenu();
164
+ }, [closeModelMenu]);
165
+ useInput((input, key) => {
166
+ // Ctrl+C to exit
167
+ if (input === 'c' && key.ctrl) {
168
+ exit();
169
+ return;
170
+ }
171
+ // Config wizard handles its own input
172
+ if (showConfigWizard) {
173
+ return;
174
+ }
175
+ // Token input handles its own input
176
+ if (showTokenInput) {
177
+ return;
178
+ }
179
+ // Model menu handles its own input
180
+ if (showModelMenu) {
181
+ return;
182
+ }
183
+ // Handle command palette navigation when it's open
184
+ if (showPalette) {
185
+ // Escape to close palette
186
+ if (key.escape) {
187
+ closePalette();
188
+ return;
189
+ }
190
+ // Arrow Up: navigate up in palette
191
+ if (key.upArrow) {
192
+ setSelectedIndex(prev => (prev > 0 ? prev - 1 : filteredCommands.length - 1));
193
+ return;
194
+ }
195
+ // Arrow Down: navigate down in palette
196
+ if (key.downArrow) {
197
+ setSelectedIndex(prev => (prev < filteredCommands.length - 1 ? prev + 1 : 0));
198
+ return;
199
+ }
200
+ // Tab: autocomplete with the highlighted command (keep palette open)
201
+ if (key.tab) {
202
+ if (filteredCommands.length > 0 && selectedIndex < filteredCommands.length) {
203
+ const selectedCommand = filteredCommands[selectedIndex].name;
204
+ // Update the input line with the full command and cursor position atomically
205
+ setInputState(prev => {
206
+ const newLines = [...prev.lines];
207
+ newLines[prev.currentLine] = selectedCommand;
208
+ return { ...prev, lines: newLines, cursorPos: selectedCommand.length };
209
+ });
210
+ // Reset filter to match the full command (minus the leading "/")
211
+ setPaletteFilter(selectedCommand.slice(1));
212
+ // Reset selected index
213
+ setSelectedIndex(0);
214
+ // Keep palette open - don't close it
215
+ }
216
+ return;
217
+ }
218
+ // Enter: select the highlighted command or submit full input
219
+ if (key.return) {
220
+ if (filteredCommands.length > 0 && selectedIndex < filteredCommands.length) {
221
+ const selectedCommand = filteredCommands[selectedIndex].name;
222
+ // Special handling for /config command
223
+ if (selectedCommand === '/config' && currentSettings) {
224
+ closePalette();
225
+ setShowConfigWizard(true);
226
+ // Clear the input since we're handling it inline
227
+ updateInputState({ lines: [''], cursorPos: 0 });
228
+ return;
229
+ }
230
+ // Special handling for /token command
231
+ if (selectedCommand === '/token') {
232
+ closePalette();
233
+ setShowTokenInput(true);
234
+ // Clear the input since we're handling it inline
235
+ updateInputState({ lines: [''], cursorPos: 0 });
236
+ return;
237
+ }
238
+ // Special handling for /model command
239
+ if (selectedCommand === '/model' && currentSettings) {
240
+ closePalette();
241
+ setShowModelMenu(true);
242
+ // Clear the input since we're handling it inline
243
+ updateInputState({ lines: [''], cursorPos: 0 });
244
+ return;
245
+ }
246
+ // Set the command in input and submit immediately
247
+ setInputState(prev => {
248
+ const newLines = [...prev.lines];
249
+ newLines[prev.currentLine] = selectedCommand;
250
+ return { ...prev, lines: newLines };
251
+ });
252
+ // Submit with the selected command
253
+ onSubmit(selectedCommand);
254
+ }
255
+ else {
256
+ // No matching commands - submit the full input as-is (for commands with arguments)
257
+ const fullInput = '/' + paletteFilter;
258
+ closePalette();
259
+ onSubmit(fullInput);
260
+ }
261
+ return;
262
+ }
263
+ // Backspace: remove from filter or close palette
264
+ if (key.backspace || key.delete) {
265
+ if (paletteFilter.length > 0) {
266
+ // Remove last character from filter
267
+ const newFilter = paletteFilter.slice(0, -1);
268
+ setPaletteFilter(newFilter);
269
+ setSelectedIndex(0);
270
+ // Update the input line and cursor atomically
271
+ setInputState(prev => {
272
+ const newLines = [...prev.lines];
273
+ newLines[prev.currentLine] = '/' + newFilter;
274
+ return { ...prev, lines: newLines, cursorPos: 1 + newFilter.length };
275
+ });
276
+ }
277
+ else {
278
+ // Filter is empty, delete the "/" and close palette
279
+ setInputState(prev => {
280
+ const newLines = [...prev.lines];
281
+ const line = newLines[prev.currentLine];
282
+ if (line.startsWith('/')) {
283
+ newLines[prev.currentLine] = line.slice(1);
284
+ }
285
+ return { ...prev, lines: newLines, cursorPos: Math.max(0, prev.cursorPos - 1) };
286
+ });
287
+ closePalette();
288
+ }
289
+ return;
290
+ }
291
+ // Regular character input: add to filter
292
+ if (input && !key.ctrl && !key.meta) {
293
+ const newFilter = paletteFilter + input;
294
+ setPaletteFilter(newFilter);
295
+ setSelectedIndex(0);
296
+ // Update the input line and cursor atomically
297
+ setInputState(prev => {
298
+ const newLines = [...prev.lines];
299
+ newLines[prev.currentLine] = '/' + newFilter;
300
+ return { ...prev, lines: newLines, cursorPos: 1 + newFilter.length };
301
+ });
302
+ return;
303
+ }
304
+ return;
305
+ }
306
+ // Normal input handling when palette is closed
307
+ // Ctrl+J for new line
308
+ if (input === 'j' && key.ctrl) {
309
+ setInputState(prev => {
310
+ const newLines = [...prev.lines];
311
+ // Split current line at cursor position
312
+ const currentLineContent = newLines[prev.currentLine];
313
+ const beforeCursor = currentLineContent.slice(0, prev.cursorPos);
314
+ const afterCursor = currentLineContent.slice(prev.cursorPos);
315
+ newLines[prev.currentLine] = beforeCursor;
316
+ newLines.splice(prev.currentLine + 1, 0, afterCursor);
317
+ return { lines: newLines, currentLine: prev.currentLine + 1, cursorPos: 0 };
318
+ });
319
+ return;
320
+ }
321
+ // Enter to submit
322
+ if (key.return) {
323
+ handleSubmit();
324
+ return;
325
+ }
326
+ // Arrow Up - navigate lines or history
327
+ if (key.upArrow) {
328
+ // If on first line, navigate history backward
329
+ if (currentLine === 0 && history.length > 0) {
330
+ const nextIndex = historyIndex + 1;
331
+ if (nextIndex < history.length) {
332
+ // Save current input when first starting to navigate
333
+ if (historyIndex === -1) {
334
+ setSavedInput(lines.join('\n'));
335
+ }
336
+ setHistoryIndex(nextIndex);
337
+ // History is stored newest first, so index 0 = most recent
338
+ const historyItem = history[nextIndex];
339
+ const historyLines = historyItem.split('\n');
340
+ setInputState({
341
+ lines: historyLines,
342
+ currentLine: 0,
343
+ cursorPos: historyLines[0].length,
344
+ });
345
+ }
346
+ return;
347
+ }
348
+ // Otherwise navigate between lines
349
+ setInputState(prev => {
350
+ if (prev.currentLine > 0) {
351
+ const newLine = prev.currentLine - 1;
352
+ return {
353
+ ...prev,
354
+ currentLine: newLine,
355
+ cursorPos: Math.min(prev.cursorPos, prev.lines[newLine].length),
356
+ };
357
+ }
358
+ return prev;
359
+ });
360
+ return;
361
+ }
362
+ // Arrow Down - navigate lines or history
363
+ if (key.downArrow) {
364
+ // If navigating history, move forward (toward more recent)
365
+ if (historyIndex >= 0) {
366
+ const nextIndex = historyIndex - 1;
367
+ if (nextIndex >= 0) {
368
+ // Still in history
369
+ setHistoryIndex(nextIndex);
370
+ const historyItem = history[nextIndex];
371
+ const historyLines = historyItem.split('\n');
372
+ setInputState({
373
+ lines: historyLines,
374
+ currentLine: 0,
375
+ cursorPos: historyLines[0].length,
376
+ });
377
+ }
378
+ else {
379
+ // Reached end of history, restore saved input
380
+ setHistoryIndex(-1);
381
+ const restoredLines = savedInput ? savedInput.split('\n') : [''];
382
+ setInputState({
383
+ lines: restoredLines,
384
+ currentLine: 0,
385
+ cursorPos: restoredLines[0].length,
386
+ });
387
+ setSavedInput('');
388
+ }
389
+ return;
390
+ }
391
+ // Otherwise navigate between lines
392
+ setInputState(prev => {
393
+ if (prev.currentLine < prev.lines.length - 1) {
394
+ const newLine = prev.currentLine + 1;
395
+ return {
396
+ ...prev,
397
+ currentLine: newLine,
398
+ cursorPos: Math.min(prev.cursorPos, prev.lines[newLine].length),
399
+ };
400
+ }
401
+ return prev;
402
+ });
403
+ return;
404
+ }
405
+ // Arrow Left
406
+ if (key.leftArrow) {
407
+ setInputState(prev => {
408
+ if (prev.cursorPos > 0) {
409
+ return { ...prev, cursorPos: prev.cursorPos - 1 };
410
+ }
411
+ else if (prev.currentLine > 0) {
412
+ // Move to end of previous line
413
+ const newLine = prev.currentLine - 1;
414
+ return { ...prev, currentLine: newLine, cursorPos: prev.lines[newLine].length };
415
+ }
416
+ return prev;
417
+ });
418
+ return;
419
+ }
420
+ // Arrow Right
421
+ if (key.rightArrow) {
422
+ setInputState(prev => {
423
+ if (prev.cursorPos < prev.lines[prev.currentLine].length) {
424
+ return { ...prev, cursorPos: prev.cursorPos + 1 };
425
+ }
426
+ else if (prev.currentLine < prev.lines.length - 1) {
427
+ // Move to start of next line
428
+ return { ...prev, currentLine: prev.currentLine + 1, cursorPos: 0 };
429
+ }
430
+ return prev;
431
+ });
432
+ return;
433
+ }
434
+ // Alt+Backspace: delete word before cursor
435
+ if (key.meta && (key.backspace || key.delete)) {
436
+ setInputState(prev => {
437
+ if (prev.cursorPos === 0)
438
+ return prev;
439
+ const line = prev.lines[prev.currentLine];
440
+ let pos = prev.cursorPos;
441
+ // Skip any whitespace immediately before cursor
442
+ while (pos > 0 && /\s/.test(line[pos - 1])) {
443
+ pos--;
444
+ }
445
+ // Delete back to the previous whitespace or start of line
446
+ while (pos > 0 && !/\s/.test(line[pos - 1])) {
447
+ pos--;
448
+ }
449
+ const newLines = [...prev.lines];
450
+ newLines[prev.currentLine] = line.slice(0, pos) + line.slice(prev.cursorPos);
451
+ return { ...prev, lines: newLines, cursorPos: pos };
452
+ });
453
+ return;
454
+ }
455
+ // Backspace
456
+ if (key.backspace || key.delete) {
457
+ setInputState(prev => {
458
+ if (prev.cursorPos > 0) {
459
+ // Delete character before cursor
460
+ const newLines = [...prev.lines];
461
+ const line = newLines[prev.currentLine];
462
+ newLines[prev.currentLine] = line.slice(0, prev.cursorPos - 1) + line.slice(prev.cursorPos);
463
+ return { ...prev, lines: newLines, cursorPos: prev.cursorPos - 1 };
464
+ }
465
+ else if (prev.currentLine > 0) {
466
+ // Merge with previous line
467
+ const prevLineLen = prev.lines[prev.currentLine - 1].length;
468
+ const newLines = [...prev.lines];
469
+ newLines[prev.currentLine - 1] += newLines[prev.currentLine];
470
+ newLines.splice(prev.currentLine, 1);
471
+ return { lines: newLines, currentLine: prev.currentLine - 1, cursorPos: prevLineLen };
472
+ }
473
+ return prev;
474
+ });
475
+ return;
476
+ }
477
+ // Home key (Ctrl+A in some terminals)
478
+ if (input === 'a' && key.ctrl) {
479
+ updateInputState({ cursorPos: 0 });
480
+ return;
481
+ }
482
+ // End key (Ctrl+E in some terminals)
483
+ if (input === 'e' && key.ctrl) {
484
+ setInputState(prev => ({ ...prev, cursorPos: prev.lines[prev.currentLine].length }));
485
+ return;
486
+ }
487
+ // Regular character input (including multi-character paste)
488
+ if (input && !key.ctrl && !key.meta) {
489
+ // Check if "/" is typed at the beginning of an empty line or at cursor position 0
490
+ if (input === '/' && (inputState.lines[inputState.currentLine] === '' || inputState.cursorPos === 0)) {
491
+ setShowPalette(true);
492
+ setPaletteFilter('');
493
+ setSelectedIndex(0);
494
+ }
495
+ setInputState(prev => {
496
+ const newLines = [...prev.lines];
497
+ const line = newLines[prev.currentLine];
498
+ newLines[prev.currentLine] = line.slice(0, prev.cursorPos) + input + line.slice(prev.cursorPos);
499
+ return {
500
+ ...prev,
501
+ lines: newLines,
502
+ cursorPos: prev.cursorPos + input.length
503
+ };
504
+ });
505
+ return;
506
+ }
507
+ });
508
+ // Render lines with cursor indicator
509
+ const renderLines = () => {
510
+ const maxDisplayLines = 5;
511
+ const displayLines = lines.slice(0, maxDisplayLines);
512
+ return displayLines.map((line, index) => {
513
+ const isCurrentLine = index === currentLine;
514
+ if (isCurrentLine) {
515
+ // Show cursor in current line
516
+ // Use sibling Text components instead of nesting to avoid Ink layout bugs
517
+ const beforeCursor = line.slice(0, cursorPos);
518
+ const cursorChar = line[cursorPos] || ' ';
519
+ const afterCursor = line.slice(cursorPos + 1);
520
+ return (_jsxs(Box, { children: [_jsx(Text, { children: beforeCursor }), _jsx(Text, { inverse: true, children: cursorChar }), _jsx(Text, { children: afterCursor })] }, index));
521
+ }
522
+ return (_jsx(Box, { children: _jsx(Text, { children: line || ' ' }) }, index));
523
+ });
524
+ };
525
+ // Calculate minimum height (at least 1 line)
526
+ const minHeight = Math.max(1, Math.min(lines.length, 5));
527
+ return (_jsxs(Box, { flexDirection: "column", children: [confirmationMessage && (_jsx(Box, { marginBottom: 0, children: _jsx(Text, { color: "green", children: confirmationMessage }) })), _jsx(Text, { dimColor: true, children: "(Enter to send, Ctrl+J for new line, \"/\" for commands, Up/Down for history)" }), _jsxs(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, flexDirection: "column", minHeight: minHeight + 2, children: [_jsx(Box, { marginTop: -1, marginLeft: -1, children: _jsxs(Text, { color: "gray", children: [" ", label, " "] }) }), _jsx(Box, { flexDirection: "column", minHeight: minHeight, children: renderLines() })] }), _jsx(CommandPalette, { commands: filteredCommands, selectedIndex: selectedIndex, filterText: paletteFilter, isOpen: showPalette }), currentSettings && (_jsx(ModelMenu, { isOpen: showModelMenu, settings: currentSettings, onSelect: handleModelSelect, onCancel: handleModelCancel })), currentSettings && (_jsx(ConfigWizard, { isOpen: showConfigWizard, settings: currentSettings, onComplete: handleConfigComplete, onCancel: handleConfigCancel })), _jsx(TokenInput, { isOpen: showTokenInput, onSubmit: handleTokenSubmit, onCancel: handleTokenCancel }), lines.length > 1 && !showPalette && !showModelMenu && !showConfigWizard && !showTokenInput && (_jsxs(Text, { dimColor: true, children: ["Line ", currentLine + 1, "/", lines.length] }))] }));
528
+ }
529
+ //# sourceMappingURL=InputModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputModal.js","sourceRoot":"","sources":["../../src/components/InputModal.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAY,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAY,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AASlE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAG,EAAE,EAAmB;IACrF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAE1B,8EAA8E;IAC9E,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC;QAC3C,KAAK,EAAE,CAAC,EAAE,CAAa;QACvB,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;KACb,CAAC,CAAC;IAEH,uCAAuC;IACvC,4EAA4E;IAC5E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,0EAA0E;IAC1E,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEjD,0CAA0C;IAC1C,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC;IAErD,0CAA0C;IAC1C,MAAM,gBAAgB,GAAG,CAAC,OAAmC,EAAE,EAAE;QAC/D,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC;IAEF,4BAA4B;IAC5B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtD,uBAAuB;IACvB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAEpF,0BAA0B;IAC1B,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAuB,QAAQ,CAAC,CAAC;IAEvF,wBAAwB;IACxB,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5D,+CAA+C;IAC/C,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAC5B,OAAO,cAAc,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;IAEjC,qDAAqD;IACrD,OAAO,CAAC,GAAG,EAAE;QACX,IAAI,aAAa,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAC7C,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAE7C,2CAA2C;IAC3C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,sBAAsB,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,sCAAsC;IACtC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,EAAE,CAAC;YACb,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,0BAA0B;IAC1B,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3B,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,oBAAoB,GAAG,WAAW,CAAC,CAAC,WAAqB,EAAE,EAAE;QACjE,oBAAoB;QACpB,YAAY,CAAC,WAAW,CAAC,CAAC;QAC1B,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAChC,sBAAsB,CAAC,2BAA2B,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,iBAAiB,EAAE,CAAC;QACpB,kDAAkD;QAClD,UAAU,CAAC,GAAG,EAAE;YACd,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAC/B,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,EAAE,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAElC,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1C,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;QAClD,iBAAiB,EAAE,CAAC;IACtB,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,wBAAwB;IACxB,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzB,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QACtD,eAAe,EAAE,CAAC;QAClB,oDAAoD;QACpD,QAAQ,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEhC,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;QAChD,eAAe,EAAE,CAAC;IACpB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,iCAAiC;QACjC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtB,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtB,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACrB,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,uBAAuB;IACvB,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACxB,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,QAAgB,EAAE,OAAe,EAAE,EAAE;QAC1E,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,cAAc,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,eAAe,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEpC,iDAAiD;QACjD,IAAI,QAAQ,KAAK,QAAQ,CAAC,SAAS,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAChE,eAAe,CAAC,SAAS,CAAC,KAAK,GAAG,OAAO,CAAC;QAC5C,CAAC;aAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjE,eAAe,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;QACzC,CAAC;aAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC,KAAK,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC/D,eAAe,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC;QAC7C,CAAC;QAED,4BAA4B;QAC5B,YAAY,CAAC,eAAe,CAAC,CAAC;QAE9B,sDAAsD;QACtD,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1E,sBAAsB,CAAC,uBAAuB,YAAY,YAAY,OAAO,EAAE,CAAC,CAAC;QACjF,cAAc,EAAE,CAAC;QAEjB,kDAAkD;QAClD,UAAU,CAAC,GAAG,EAAE;YACd,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QAC/B,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEhD,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,sBAAsB,CAAC,2BAA2B,CAAC,CAAC;QACpD,cAAc,EAAE,CAAC;IACnB,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,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,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,oCAAoC;QACpC,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,mCAAmC;QACnC,IAAI,aAAa,EAAE,CAAC;YAClB,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,kDAAkD;oBAClD,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,CAAC;oBACtC,CAAC,CAAC,CAAC;oBACH,mCAAmC;oBACnC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,mFAAmF;oBACnF,MAAM,SAAS,GAAG,GAAG,GAAG,aAAa,CAAC;oBACtC,YAAY,EAAE,CAAC;oBACf,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,qDAAqD;oBACrD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;wBACxB,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBAClC,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,mCAAmC;YACnC,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACrC,OAAO;wBACL,GAAG,IAAI;wBACP,WAAW,EAAE,OAAO;wBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;qBAChE,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,mCAAmC;YACnC,aAAa,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACrC,OAAO;wBACL,GAAG,IAAI;wBACP,WAAW,EAAE,OAAO;wBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;qBAChE,CAAC;gBACJ,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,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,+BAA+B;oBAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACrC,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;gBAClF,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,CAAC,CAAC,MAAM,EAAE,CAAC;oBACzD,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,6BAA6B;oBAC7B,OAAO,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;gBACtE,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,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAEtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC1C,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;gBAEzB,gDAAgD;gBAChD,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3C,GAAG,EAAE,CAAC;gBACR,CAAC;gBAED,0DAA0D;gBAC1D,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5C,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,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,CAAC,CAAC;oBACxC,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,2BAA2B;oBAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC5D,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,sCAAsC;QACtC,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QAED,qCAAqC;QACrC,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,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,kFAAkF;YAClF,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrG,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,CAAC,CAAC;gBACxC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChG,OAAO;oBACL,GAAG,IAAI;oBACP,KAAK,EAAE,QAAQ;oBACf,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM;iBACzC,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,qCAAqC;IACrC,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,MAAM,eAAe,GAAG,CAAC,CAAC;QAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;QAErD,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACtC,MAAM,aAAa,GAAG,KAAK,KAAK,WAAW,CAAC;YAE5C,IAAI,aAAa,EAAE,CAAC;gBAClB,8BAA8B;gBAC9B,0EAA0E;gBAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC;gBAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;gBAE9C,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,cAAE,YAAY,GAAQ,EAC3B,KAAC,IAAI,IAAC,OAAO,kBAAE,UAAU,GAAQ,EACjC,KAAC,IAAI,cAAE,WAAW,GAAQ,KAHlB,KAAK,CAIT,CACP,CAAC;YACJ,CAAC;YAED,OAAO,CACL,KAAC,GAAG,cACF,KAAC,IAAI,cAAE,IAAI,IAAI,GAAG,GAAQ,IADlB,KAAK,CAET,CACP,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,6CAA6C;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAEzD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aAExB,mBAAmB,IAAI,CACtB,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,mBAAmB,GAAQ,GAC5C,CACP,EAGD,KAAC,IAAI,IAAC,QAAQ,oGAAmF,EAGjG,MAAC,GAAG,IACF,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,EACX,aAAa,EAAC,QAAQ,EACtB,SAAS,EAAE,SAAS,GAAG,CAAC,aAGxB,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,YAChC,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kBAAG,KAAK,SAAS,GAC/B,EAGN,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,SAAS,YAC7C,WAAW,EAAE,GACV,IACF,EAGN,KAAC,cAAc,IACb,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,aAAa,EACzB,MAAM,EAAE,WAAW,GACnB,EAGD,eAAe,IAAI,CAClB,KAAC,SAAS,IACR,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,iBAAiB,GAC3B,CACH,EAGA,eAAe,IAAI,CAClB,KAAC,YAAY,IACX,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,oBAAoB,EAChC,QAAQ,EAAE,kBAAkB,GAC5B,CACH,EAGD,KAAC,UAAU,IACT,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,iBAAiB,GAC3B,EAGD,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa,IAAI,CAAC,gBAAgB,IAAI,CAAC,cAAc,IAAI,CAC7F,MAAC,IAAI,IAAC,QAAQ,4BAAO,WAAW,GAAG,CAAC,OAAG,KAAK,CAAC,MAAM,IAAQ,CAC5D,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { Settings } from '../settings.js';
3
+ export interface ModelInfo {
4
+ id: string;
5
+ description: string;
6
+ isCurrent: boolean;
7
+ }
8
+ interface ModelMenuProps {
9
+ isOpen: boolean;
10
+ settings: Settings;
11
+ onSelect: (provider: string, modelId: string) => void;
12
+ onCancel: () => void;
13
+ }
14
+ /**
15
+ * ModelMenu - Two-step inline model selection menu.
16
+ *
17
+ * Step 1: Select provider (Anthropic, OpenAI, Azure)
18
+ * Step 2: Select model for that provider
19
+ *
20
+ * For Azure: Step 2 shows a text input for deployment name.
21
+ */
22
+ export declare function ModelMenu({ isOpen, settings, onSelect, onCancel, }: ModelMenuProps): React.ReactElement | null;
23
+ export {};
24
+ //# sourceMappingURL=ModelMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelMenu.d.ts","sourceRoot":"","sources":["../../src/components/ModelMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAY,MAAM,gBAAgB,CAAC;AAIpD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAeD,UAAU,cAAc;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,GACT,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAkT5C"}