@lvce-editor/chat-view 7.3.0 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chatViewWorkerMain.js +111 -48
- package/package.json +1 -1
|
@@ -1485,10 +1485,6 @@ const terminate = () => {
|
|
|
1485
1485
|
globalThis.close();
|
|
1486
1486
|
};
|
|
1487
1487
|
|
|
1488
|
-
const getComposerWidth = width => {
|
|
1489
|
-
return Math.max(1, width - 32);
|
|
1490
|
-
};
|
|
1491
|
-
|
|
1492
1488
|
const composerAttachmentGap = 8;
|
|
1493
1489
|
const composerAttachmentMarginBottom = 8;
|
|
1494
1490
|
const composerAttachmentFontSize = 12;
|
|
@@ -1497,6 +1493,18 @@ const composerAttachmentBorderWidth = 2;
|
|
|
1497
1493
|
const composerAttachmentHeight = 26;
|
|
1498
1494
|
const averageCharacterWidth = composerAttachmentFontSize * 0.6;
|
|
1499
1495
|
const fallbackComposerWidth = 480;
|
|
1496
|
+
|
|
1497
|
+
const getComposerWidth = width => {
|
|
1498
|
+
return Math.max(1, width - 32);
|
|
1499
|
+
};
|
|
1500
|
+
|
|
1501
|
+
const getAttachmentContainerWidth = width => {
|
|
1502
|
+
if (width <= 0) {
|
|
1503
|
+
return fallbackComposerWidth;
|
|
1504
|
+
}
|
|
1505
|
+
return Math.max(1, getComposerWidth(width));
|
|
1506
|
+
};
|
|
1507
|
+
|
|
1500
1508
|
const getComposerAttachmentLabel$1 = displayType => {
|
|
1501
1509
|
switch (displayType) {
|
|
1502
1510
|
case 'file':
|
|
@@ -1511,17 +1519,13 @@ const getComposerAttachmentLabel$1 = displayType => {
|
|
|
1511
1519
|
return displayType;
|
|
1512
1520
|
}
|
|
1513
1521
|
};
|
|
1514
|
-
|
|
1515
|
-
if (width <= 0) {
|
|
1516
|
-
return fallbackComposerWidth;
|
|
1517
|
-
}
|
|
1518
|
-
return Math.max(1, getComposerWidth(width));
|
|
1519
|
-
};
|
|
1522
|
+
|
|
1520
1523
|
const getComposerAttachmentWidth = (attachment, containerWidth) => {
|
|
1521
1524
|
const label = `${getComposerAttachmentLabel$1(attachment.displayType)} · ${attachment.name}`;
|
|
1522
1525
|
const estimatedWidth = Math.ceil(label.length * averageCharacterWidth) + composerAttachmentHorizontalPadding + composerAttachmentBorderWidth;
|
|
1523
1526
|
return Math.min(containerWidth, estimatedWidth);
|
|
1524
1527
|
};
|
|
1528
|
+
|
|
1525
1529
|
const getComposerAttachmentsHeight = (composerAttachments, width) => {
|
|
1526
1530
|
if (composerAttachments.length === 0) {
|
|
1527
1531
|
return 0;
|
|
@@ -2595,14 +2599,21 @@ const getChatViewEvents = async sessionId => {
|
|
|
2595
2599
|
return getEvents(sessionId);
|
|
2596
2600
|
};
|
|
2597
2601
|
|
|
2598
|
-
const textFileRegex = /\.txt$/i;
|
|
2599
|
-
const pngSignature = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);
|
|
2600
2602
|
const isImageFile = mimeType => {
|
|
2601
2603
|
return mimeType.startsWith('image/');
|
|
2602
2604
|
};
|
|
2605
|
+
|
|
2606
|
+
const textFileRegex = /\.txt$/i;
|
|
2603
2607
|
const isTextFile = (name, mimeType) => {
|
|
2604
2608
|
return mimeType === 'text/plain' || textFileRegex.test(name);
|
|
2605
2609
|
};
|
|
2610
|
+
|
|
2611
|
+
const isValidJpeg = async blob => {
|
|
2612
|
+
const bytes = new Uint8Array(await blob.arrayBuffer());
|
|
2613
|
+
return bytes.length >= 4 && bytes[0] === 0xff && bytes[1] === 0xd8 && bytes.at(-2) === 0xff && bytes.at(-1) === 0xd9;
|
|
2614
|
+
};
|
|
2615
|
+
|
|
2616
|
+
const pngSignature = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);
|
|
2606
2617
|
const isValidPng = async blob => {
|
|
2607
2618
|
const header = new Uint8Array(await blob.slice(0, pngSignature.length).arrayBuffer());
|
|
2608
2619
|
if (header.length !== pngSignature.length) {
|
|
@@ -2610,10 +2621,7 @@ const isValidPng = async blob => {
|
|
|
2610
2621
|
}
|
|
2611
2622
|
return pngSignature.every((value, index) => header[index] === value);
|
|
2612
2623
|
};
|
|
2613
|
-
|
|
2614
|
-
const bytes = new Uint8Array(await blob.arrayBuffer());
|
|
2615
|
-
return bytes.length >= 4 && bytes[0] === 0xff && bytes[1] === 0xd8 && bytes.at(-2) === 0xff && bytes.at(-1) === 0xd9;
|
|
2616
|
-
};
|
|
2624
|
+
|
|
2617
2625
|
const isValidImage = async (blob, mimeType) => {
|
|
2618
2626
|
if (mimeType.startsWith('image/') && mimeType !== 'image/png' && mimeType !== 'image/jpeg') {
|
|
2619
2627
|
return true;
|
|
@@ -2635,6 +2643,7 @@ const isValidImage = async (blob, mimeType) => {
|
|
|
2635
2643
|
return false;
|
|
2636
2644
|
}
|
|
2637
2645
|
};
|
|
2646
|
+
|
|
2638
2647
|
const getComposerAttachmentDisplayType = async (blob, name, mimeType) => {
|
|
2639
2648
|
if (isImageFile(mimeType)) {
|
|
2640
2649
|
return (await isValidImage(blob, mimeType)) ? 'image' : 'invalid-image';
|
|
@@ -2694,8 +2703,7 @@ const getComposerAttachments = async sessionId => {
|
|
|
2694
2703
|
continue;
|
|
2695
2704
|
}
|
|
2696
2705
|
const displayType = await getComposerAttachmentDisplayType(event.blob, event.name, event.mimeType);
|
|
2697
|
-
const previewSrc = await getComposerAttachmentPreviewSrc(event.blob, displayType, event.mimeType);
|
|
2698
|
-
const textContent = await getComposerAttachmentTextContent(event.blob, displayType);
|
|
2706
|
+
const [previewSrc, textContent] = await Promise.all([getComposerAttachmentPreviewSrc(event.blob, displayType, event.mimeType), getComposerAttachmentTextContent(event.blob, displayType)]);
|
|
2699
2707
|
attachments.set(event.attachmentId, {
|
|
2700
2708
|
attachmentId: event.attachmentId,
|
|
2701
2709
|
displayType,
|
|
@@ -8800,6 +8808,18 @@ const handleClickClose = async () => {
|
|
|
8800
8808
|
await invoke('Layout.hideSecondarySideBar');
|
|
8801
8809
|
};
|
|
8802
8810
|
|
|
8811
|
+
const handleClickCustomSelectOverlay = async (state, defaultPrevented) => {
|
|
8812
|
+
if (defaultPrevented) {
|
|
8813
|
+
return state;
|
|
8814
|
+
}
|
|
8815
|
+
return closeGitBranchPicker({
|
|
8816
|
+
...state,
|
|
8817
|
+
agentModePickerOpen: false,
|
|
8818
|
+
reasoningEffortPickerOpen: false,
|
|
8819
|
+
runModePickerOpen: false
|
|
8820
|
+
});
|
|
8821
|
+
};
|
|
8822
|
+
|
|
8803
8823
|
const handleClickDelete = async (state, sessionId = '') => {
|
|
8804
8824
|
return deleteSession(state, sessionId);
|
|
8805
8825
|
};
|
|
@@ -9083,8 +9103,7 @@ const handleDropFiles = async (state, name, fileHandles = []) => {
|
|
|
9083
9103
|
const file = await droppedFileHandle.getFile();
|
|
9084
9104
|
const attachmentId = `attachment-${nextAttachmentId + nextAttachments.length}`;
|
|
9085
9105
|
const displayType = await getComposerAttachmentDisplayType(file, file.name, file.type);
|
|
9086
|
-
const previewSrc = await getComposerAttachmentPreviewSrc(file, displayType, file.type);
|
|
9087
|
-
const textContent = await getComposerAttachmentTextContent(file, displayType);
|
|
9106
|
+
const [previewSrc, textContent] = await Promise.all([getComposerAttachmentPreviewSrc(file, displayType, file.type), getComposerAttachmentTextContent(file, displayType)]);
|
|
9088
9107
|
await appendChatViewEvent({
|
|
9089
9108
|
attachmentId,
|
|
9090
9109
|
blob: file,
|
|
@@ -9152,11 +9171,13 @@ const handleInput = async (state, name, value, inputSource = 'user') => {
|
|
|
9152
9171
|
}
|
|
9153
9172
|
if (name === ModelPickerSearch) {
|
|
9154
9173
|
const visibleModels = getVisibleModels(state.models, value);
|
|
9174
|
+
const selectedModelId = visibleModels.some(model => model.id === state.selectedModelId) ? state.selectedModelId : visibleModels[0]?.id || state.selectedModelId;
|
|
9155
9175
|
return {
|
|
9156
9176
|
...state,
|
|
9157
9177
|
modelPickerHeight: getModelPickerHeight(state.modelPickerHeaderHeight, visibleModels.length),
|
|
9158
9178
|
modelPickerListScrollTop: 0,
|
|
9159
9179
|
modelPickerSearchValue: value,
|
|
9180
|
+
selectedModelId,
|
|
9160
9181
|
visibleModels
|
|
9161
9182
|
};
|
|
9162
9183
|
}
|
|
@@ -10324,6 +10345,7 @@ const getCss = (composerHeight, composerAttachmentsHeight, modelPickerHeight, li
|
|
|
10324
10345
|
const buttonsHeight = 20;
|
|
10325
10346
|
const gap = 10;
|
|
10326
10347
|
const contentPadding = 10;
|
|
10348
|
+
const runModePickerHeight = 84;
|
|
10327
10349
|
const chatSendAreaHeight = composerHeight + composerAttachmentsHeight + chatSendAreaPaddingTop + chatSendAreaPaddingBottom + buttonsHeight + gap + contentPadding * 2;
|
|
10328
10350
|
const baseCss = `:root {
|
|
10329
10351
|
--ChatInputBoxHeight: ${composerHeight}px;
|
|
@@ -10344,6 +10366,11 @@ const getCss = (composerHeight, composerAttachmentsHeight, modelPickerHeight, li
|
|
|
10344
10366
|
--ChatMessageLineHeight: ${chatMessageLineHeight}px;
|
|
10345
10367
|
--ChatMessageFontFamily: ${chatMessageFontFamily};
|
|
10346
10368
|
--ChatFocusContentMaxWidth: ${chatFocusContentMaxWidth}px;
|
|
10369
|
+
--RunModePickerHeight: ${runModePickerHeight}px;
|
|
10370
|
+
}
|
|
10371
|
+
|
|
10372
|
+
:root{
|
|
10373
|
+
--WidgetBorder: white;
|
|
10347
10374
|
}
|
|
10348
10375
|
|
|
10349
10376
|
.ChatSendAreaBottom{
|
|
@@ -10369,7 +10396,7 @@ const getCss = (composerHeight, composerAttachmentsHeight, modelPickerHeight, li
|
|
|
10369
10396
|
min-width: 0;
|
|
10370
10397
|
overflow: hidden;
|
|
10371
10398
|
border-radius: 999px;
|
|
10372
|
-
border: 1px solid var(--
|
|
10399
|
+
border: 1px solid var(--WidgetBorder, white);
|
|
10373
10400
|
padding: 4px 10px;
|
|
10374
10401
|
background: var(--vscode-badge-background, color-mix(in srgb, var(--vscode-editor-background) 88%, white));
|
|
10375
10402
|
color: var(--vscode-badge-foreground, var(--vscode-foreground));
|
|
@@ -10419,7 +10446,7 @@ const getCss = (composerHeight, composerAttachmentsHeight, modelPickerHeight, li
|
|
|
10419
10446
|
}
|
|
10420
10447
|
|
|
10421
10448
|
.ChatComposerAttachmentTextFile{
|
|
10422
|
-
border-color: var(--vscode-charts-green, var(--
|
|
10449
|
+
border-color: var(--vscode-charts-green, var(--WidgetBorder, white));
|
|
10423
10450
|
}
|
|
10424
10451
|
|
|
10425
10452
|
.ChatAttachments{
|
|
@@ -10437,7 +10464,7 @@ const getCss = (composerHeight, composerAttachmentsHeight, modelPickerHeight, li
|
|
|
10437
10464
|
min-width: 0;
|
|
10438
10465
|
overflow: hidden;
|
|
10439
10466
|
border-radius: 999px;
|
|
10440
|
-
border: 1px solid var(--
|
|
10467
|
+
border: 1px solid var(--WidgetBorder, white);
|
|
10441
10468
|
padding: 4px 10px;
|
|
10442
10469
|
background: var(--vscode-badge-background, color-mix(in srgb, var(--vscode-editor-background) 88%, white));
|
|
10443
10470
|
color: var(--vscode-badge-foreground, var(--vscode-foreground));
|
|
@@ -10469,12 +10496,12 @@ const getCss = (composerHeight, composerAttachmentsHeight, modelPickerHeight, li
|
|
|
10469
10496
|
}
|
|
10470
10497
|
|
|
10471
10498
|
.ChatAttachmentTextFile{
|
|
10472
|
-
border-color: var(--vscode-charts-green, var(--
|
|
10499
|
+
border-color: var(--vscode-charts-green, var(--WidgetBorder, white));
|
|
10473
10500
|
}
|
|
10474
10501
|
|
|
10475
10502
|
.ChatImageMessageContent{
|
|
10476
10503
|
padding: 6px;
|
|
10477
|
-
border: 1px solid var(--
|
|
10504
|
+
border: 1px solid var(--WidgetBorder, white);
|
|
10478
10505
|
border-radius: 12px;
|
|
10479
10506
|
background: var(--vscode-editorWidget-background, var(--vscode-editor-background));
|
|
10480
10507
|
overflow: hidden;
|
|
@@ -10505,7 +10532,7 @@ const getCss = (composerHeight, composerAttachmentsHeight, modelPickerHeight, li
|
|
|
10505
10532
|
display: flex;
|
|
10506
10533
|
align-items: center;
|
|
10507
10534
|
justify-content: center;
|
|
10508
|
-
border: 1px solid var(--
|
|
10535
|
+
border: 1px solid var(--WidgetBorder, white);
|
|
10509
10536
|
border-radius: 12px;
|
|
10510
10537
|
background: var(--vscode-editorWidget-background, var(--vscode-editor-background));
|
|
10511
10538
|
box-shadow: 0 12px 28px color-mix(in srgb, var(--vscode-editor-background) 45%, black);
|
|
@@ -10564,8 +10591,9 @@ const getCss = (composerHeight, composerAttachmentsHeight, modelPickerHeight, li
|
|
|
10564
10591
|
}
|
|
10565
10592
|
|
|
10566
10593
|
.RunModePickerPopOver{
|
|
10594
|
+
height: var(--RunModePickerHeight);
|
|
10567
10595
|
overflow: hidden;
|
|
10568
|
-
border: 1px solid var(--
|
|
10596
|
+
border: 1px solid var(--WidgetBorder, white);
|
|
10569
10597
|
border-radius: 8px;
|
|
10570
10598
|
background: var(--vscode-editorWidget-background, var(--vscode-editor-background));
|
|
10571
10599
|
box-shadow: 0 8px 24px color-mix(in srgb, var(--vscode-editor-background) 50%, black);
|
|
@@ -11042,6 +11070,7 @@ const HandleClickAgentModePickerToggle = 57;
|
|
|
11042
11070
|
const HandleContextMenuChatImageAttachment = 58;
|
|
11043
11071
|
const HandleClickGitBranchPickerToggle = 59;
|
|
11044
11072
|
const HandleErrorComposerAttachmentPreviewOverlay = 60;
|
|
11073
|
+
const HandleClickCustomSelectOverlay = 61;
|
|
11045
11074
|
|
|
11046
11075
|
const getAddContextButtonDom = () => {
|
|
11047
11076
|
return [{
|
|
@@ -11056,7 +11085,7 @@ const getAddContextButtonDom = () => {
|
|
|
11056
11085
|
}];
|
|
11057
11086
|
};
|
|
11058
11087
|
|
|
11059
|
-
const getCustomSelectToggleVirtualDom = (label, name, open, onClick, title = label, ariaLabel = title) => {
|
|
11088
|
+
const getCustomSelectToggleVirtualDom = (label, name, open, onClick, title = label, ariaLabel = title, ariaControls = '') => {
|
|
11060
11089
|
const getChevronDom = expanded => {
|
|
11061
11090
|
return {
|
|
11062
11091
|
childCount: 0,
|
|
@@ -11067,6 +11096,9 @@ const getCustomSelectToggleVirtualDom = (label, name, open, onClick, title = lab
|
|
|
11067
11096
|
};
|
|
11068
11097
|
};
|
|
11069
11098
|
return [{
|
|
11099
|
+
...(ariaControls ? {
|
|
11100
|
+
'aria-controls': ariaControls
|
|
11101
|
+
} : {}),
|
|
11070
11102
|
'aria-expanded': open ? 'true' : 'false',
|
|
11071
11103
|
'aria-haspopup': 'true',
|
|
11072
11104
|
'aria-label': ariaLabel,
|
|
@@ -11087,8 +11119,8 @@ const getCustomSelectToggleVirtualDom = (label, name, open, onClick, title = lab
|
|
|
11087
11119
|
}, text(label), getChevronDom(open)];
|
|
11088
11120
|
};
|
|
11089
11121
|
|
|
11090
|
-
const getCustomSelectPickerToggleVirtualDom = (label, name, open, onClick, title = label, ariaLabel = title) => {
|
|
11091
|
-
return getCustomSelectToggleVirtualDom(label, name, open, onClick, title, ariaLabel);
|
|
11122
|
+
const getCustomSelectPickerToggleVirtualDom = (label, name, open, onClick, title = label, ariaLabel = title, ariaControls = '') => {
|
|
11123
|
+
return getCustomSelectToggleVirtualDom(label, name, open, onClick, title, ariaLabel, ariaControls);
|
|
11092
11124
|
};
|
|
11093
11125
|
|
|
11094
11126
|
const getAgentModePickerVirtualDom = (selectedAgentMode, agentModePickerOpen) => {
|
|
@@ -11099,7 +11131,7 @@ const getChatModelPickerToggleVirtualDom = (models, selectedModelId, modelPicker
|
|
|
11099
11131
|
const selectedModel = models.find(model => model.id === selectedModelId);
|
|
11100
11132
|
const selectedModelLabel = selectedModel ? selectedModel.name : selectedModelId;
|
|
11101
11133
|
const pickModelLabel = pickModel(selectedModelLabel);
|
|
11102
|
-
return getCustomSelectPickerToggleVirtualDom(selectedModelLabel, ModelPickerToggle, modelPickerOpen, HandleClickModelPickerToggle, pickModelLabel, pickModelLabel);
|
|
11134
|
+
return getCustomSelectPickerToggleVirtualDom(selectedModelLabel, ModelPickerToggle, modelPickerOpen, HandleClickModelPickerToggle, pickModelLabel, pickModelLabel, ModelPickerList);
|
|
11103
11135
|
};
|
|
11104
11136
|
|
|
11105
11137
|
const getCreatePullRequestButtonDom = () => {
|
|
@@ -11181,6 +11213,11 @@ const getGitBranchPickerVirtualDom = (gitBranches, gitBranchPickerOpen, gitBranc
|
|
|
11181
11213
|
const showMessage = messageDom.length > 0;
|
|
11182
11214
|
const popOverHeight = gitBranches.length * itemHeight + (showMessage ? messageHeight : 0);
|
|
11183
11215
|
return [...getCustomSelectPickerToggleVirtualDom(label, GitBranchPickerToggle, gitBranchPickerOpen, HandleClickGitBranchPickerToggle, 'Switch branch', 'Switch branch'), ...(gitBranchPickerOpen ? [{
|
|
11216
|
+
childCount: 1,
|
|
11217
|
+
className: ChatModelPickerContainer,
|
|
11218
|
+
onClick: HandleClickCustomSelectOverlay,
|
|
11219
|
+
type: Div
|
|
11220
|
+
}, {
|
|
11184
11221
|
childCount: (showMessage ? 1 : 0) + 1,
|
|
11185
11222
|
className: mergeClassNames(ChatModelPicker, CustomSelectPopOver, ChatGitBranchPicker),
|
|
11186
11223
|
style: `height: ${popOverHeight}px;`,
|
|
@@ -11202,6 +11239,11 @@ const getReasoningEffortOptionsVirtualDom = selectedReasoningEffort => {
|
|
|
11202
11239
|
};
|
|
11203
11240
|
const getReasoningEffortPickerVirtualDom = (selectedReasoningEffort, reasoningEffortPickerOpen) => {
|
|
11204
11241
|
return [...getCustomSelectPickerToggleVirtualDom(getReasoningEffortLabel(selectedReasoningEffort), ReasoningEffortPickerToggle, reasoningEffortPickerOpen, HandleClickReasoningEffortPickerToggle, 'Reasoning', 'Reasoning'), ...(reasoningEffortPickerOpen ? [{
|
|
11242
|
+
childCount: 1,
|
|
11243
|
+
className: ChatModelPickerContainer,
|
|
11244
|
+
onClick: HandleClickCustomSelectOverlay,
|
|
11245
|
+
type: Div
|
|
11246
|
+
}, {
|
|
11205
11247
|
childCount: 1,
|
|
11206
11248
|
className: mergeClassNames(ChatModelPicker, CustomSelectPopOver),
|
|
11207
11249
|
style: `height: ${reasoningEffortPickerHeight}px;`,
|
|
@@ -11583,16 +11625,21 @@ const getAgentModeOptionsVirtualDom = selectedAgentMode => {
|
|
|
11583
11625
|
return agentModes.flatMap(agentMode => getCustomSelectOptionVirtualDom(getAgentModePickerItemInputName(agentMode), getAgentModeLabel(agentMode), agentMode === selectedAgentMode));
|
|
11584
11626
|
};
|
|
11585
11627
|
|
|
11586
|
-
const getCustomSelectPopOverVirtualDom = (optionCount, height, optionNodes, containerClassName = '', popOverClassName = '') => {
|
|
11628
|
+
const getCustomSelectPopOverVirtualDom = (optionCount, height, optionNodes, containerClassName = '', popOverClassName = '', useInlineHeight = true) => {
|
|
11587
11629
|
return [{
|
|
11588
11630
|
childCount: 1,
|
|
11589
11631
|
className: mergeClassNames(ChatModelPickerContainer, containerClassName),
|
|
11632
|
+
onClick: HandleClickCustomSelectOverlay,
|
|
11590
11633
|
type: Div
|
|
11591
|
-
}, {
|
|
11634
|
+
}, useInlineHeight ? {
|
|
11592
11635
|
childCount: 1,
|
|
11593
11636
|
className: mergeClassNames(ChatModelPicker, popOverClassName),
|
|
11594
11637
|
style: `height: ${height}px;`,
|
|
11595
11638
|
type: Div
|
|
11639
|
+
} : {
|
|
11640
|
+
childCount: 1,
|
|
11641
|
+
className: mergeClassNames(ChatModelPicker, popOverClassName),
|
|
11642
|
+
type: Div
|
|
11596
11643
|
}, {
|
|
11597
11644
|
childCount: optionCount,
|
|
11598
11645
|
className: ChatModelPickerList,
|
|
@@ -11611,12 +11658,24 @@ const getUsageCostLabel = model => {
|
|
|
11611
11658
|
return `${model.usageCost ?? 1}x`;
|
|
11612
11659
|
};
|
|
11613
11660
|
|
|
11661
|
+
const getUsageCostDom = detail => {
|
|
11662
|
+
if (detail === '') {
|
|
11663
|
+
return [];
|
|
11664
|
+
}
|
|
11665
|
+
return [{
|
|
11666
|
+
childCount: 1,
|
|
11667
|
+
className: ChatModelPickerItemUsageCost,
|
|
11668
|
+
type: Span
|
|
11669
|
+
}, text(detail)];
|
|
11670
|
+
};
|
|
11614
11671
|
const getChatModelListItemVirtualDom = (model, selectedModelId) => {
|
|
11615
11672
|
const detail = getUsageCostLabel(model);
|
|
11616
11673
|
const hasDetail = detail !== '';
|
|
11674
|
+
const usageCostDom = getUsageCostDom(detail);
|
|
11617
11675
|
const selected = model.id === selectedModelId;
|
|
11618
11676
|
const className = mergeClassNames(ChatModelPickerItem, selected ? ChatModelPickerItemSelected : '');
|
|
11619
11677
|
return [{
|
|
11678
|
+
'aria-selected': selected ? 'true' : 'false',
|
|
11620
11679
|
childCount: hasDetail ? 2 : 1,
|
|
11621
11680
|
className,
|
|
11622
11681
|
'data-id': model.id,
|
|
@@ -11626,11 +11685,7 @@ const getChatModelListItemVirtualDom = (model, selectedModelId) => {
|
|
|
11626
11685
|
childCount: 1,
|
|
11627
11686
|
className: ChatModelPickerItemLabel,
|
|
11628
11687
|
type: Span
|
|
11629
|
-
}, text(getModelLabel(model)), ...
|
|
11630
|
-
childCount: 1,
|
|
11631
|
-
className: ChatModelPickerItemUsageCost,
|
|
11632
|
-
type: Span
|
|
11633
|
-
}, text(detail)] : [])];
|
|
11688
|
+
}, text(getModelLabel(model)), ...usageCostDom];
|
|
11634
11689
|
};
|
|
11635
11690
|
|
|
11636
11691
|
const parentNode$2 = {
|
|
@@ -11649,6 +11704,7 @@ const getChatModelListVirtualDom = (visibleModels, selectedModelId) => {
|
|
|
11649
11704
|
return [{
|
|
11650
11705
|
childCount: visibleModels.length,
|
|
11651
11706
|
className: ChatModelPickerList,
|
|
11707
|
+
id: ModelPickerList,
|
|
11652
11708
|
onClick: HandleClickModelPickerList,
|
|
11653
11709
|
onPointerDown: HandlePointerDownModelPickerList,
|
|
11654
11710
|
onPointerUp: HandlePointerUpModelPickerList,
|
|
@@ -11692,6 +11748,17 @@ const getChatModelPickerPopOverVirtualDom = (models, selectedModelId, modelPicke
|
|
|
11692
11748
|
}, ...getModelPickerHeaderDom(modelPickerSearchValue), ...getChatModelListVirtualDom(visibleModels, selectedModelId)];
|
|
11693
11749
|
};
|
|
11694
11750
|
|
|
11751
|
+
const getImageCouldNotBeLoadedDom = () => {
|
|
11752
|
+
return [{
|
|
11753
|
+
childCount: 1,
|
|
11754
|
+
className: mergeClassNames(ChatComposerAttachmentPreviewOverlayError, ImageErrorMessage),
|
|
11755
|
+
name: ComposerAttachmentPreviewOverlay,
|
|
11756
|
+
type: Div
|
|
11757
|
+
}, {
|
|
11758
|
+
text: imageCouldNotBeLoaded(),
|
|
11759
|
+
type: Text
|
|
11760
|
+
}];
|
|
11761
|
+
};
|
|
11695
11762
|
const getComposerAttachmentPreviewOverlayVirtualDom = (composerAttachments, attachmentId, hasError) => {
|
|
11696
11763
|
if (!attachmentId) {
|
|
11697
11764
|
return [];
|
|
@@ -11709,15 +11776,7 @@ const getComposerAttachmentPreviewOverlayVirtualDom = (composerAttachments, atta
|
|
|
11709
11776
|
onPointerOut: HandleMouseOut,
|
|
11710
11777
|
onPointerOver: HandleMouseOver,
|
|
11711
11778
|
type: Div
|
|
11712
|
-
}, ...(hasError ? [{
|
|
11713
|
-
childCount: 1,
|
|
11714
|
-
className: mergeClassNames(ChatComposerAttachmentPreviewOverlayError, ImageErrorMessage),
|
|
11715
|
-
name: ComposerAttachmentPreviewOverlay,
|
|
11716
|
-
type: Div
|
|
11717
|
-
}, {
|
|
11718
|
-
text: imageCouldNotBeLoaded(),
|
|
11719
|
-
type: Text
|
|
11720
|
-
}] : [{
|
|
11779
|
+
}, ...(hasError ? getImageCouldNotBeLoadedDom() : [{
|
|
11721
11780
|
alt: `Large image preview for ${attachment.name}`,
|
|
11722
11781
|
childCount: 0,
|
|
11723
11782
|
className: ChatComposerAttachmentPreviewOverlayImage,
|
|
@@ -11734,7 +11793,7 @@ const getRunModeOptionsVirtualDom = selectedRunMode => {
|
|
|
11734
11793
|
return runModes.flatMap(runMode => getCustomSelectOptionVirtualDom(getRunModePickerItemInputName(runMode), runMode, runMode === selectedRunMode));
|
|
11735
11794
|
};
|
|
11736
11795
|
const getRunModePickerPopOverVirtualDom = selectedRunMode => {
|
|
11737
|
-
return getCustomSelectPopOverVirtualDom(runModes.length, runModePickerHeight, getRunModeOptionsVirtualDom(selectedRunMode), RunModePickerContainer, RunModePickerPopOver);
|
|
11796
|
+
return getCustomSelectPopOverVirtualDom(runModes.length, runModePickerHeight, getRunModeOptionsVirtualDom(selectedRunMode), RunModePickerContainer, RunModePickerPopOver, false);
|
|
11738
11797
|
};
|
|
11739
11798
|
|
|
11740
11799
|
const getDropOverlayVirtualDom = () => {
|
|
@@ -14531,6 +14590,9 @@ const renderEventListeners = () => {
|
|
|
14531
14590
|
}, {
|
|
14532
14591
|
name: HandleClickGitBranchPickerToggle,
|
|
14533
14592
|
params: ['handleClickGitBranchPickerToggle']
|
|
14593
|
+
}, {
|
|
14594
|
+
name: HandleClickCustomSelectOverlay,
|
|
14595
|
+
params: ['handleClickCustomSelectOverlay', DefaultPrevented]
|
|
14534
14596
|
}, {
|
|
14535
14597
|
name: HandleClickModelPickerOverlay,
|
|
14536
14598
|
params: ['handleClickModelPickerOverlay', DefaultPrevented]
|
|
@@ -15022,6 +15084,7 @@ const commandMap = {
|
|
|
15022
15084
|
'Chat.handleClickBack': wrapCommand(handleClickBack),
|
|
15023
15085
|
'Chat.handleClickClose': handleClickClose,
|
|
15024
15086
|
'Chat.handleClickCreatePullRequest': wrapCommand(handleClickCreatePullRequest),
|
|
15087
|
+
'Chat.handleClickCustomSelectOverlay': wrapCommand(handleClickCustomSelectOverlay),
|
|
15025
15088
|
'Chat.handleClickDelete': wrapCommand(handleClickDelete),
|
|
15026
15089
|
'Chat.handleClickDictationButton': wrapCommand(handleClickDictationButton),
|
|
15027
15090
|
'Chat.handleClickFileName': wrapCommand(handleClickFileName),
|