@lvce-editor/chat-view 6.62.0 → 6.64.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.
@@ -1198,6 +1198,7 @@ const Reference = 100;
1198
1198
 
1199
1199
  const ClientX = 'event.clientX';
1200
1200
  const ClientY = 'event.clientY';
1201
+ const DataTransferFiles2 = 'event.dataTransfer.files2';
1201
1202
  const DefaultPrevented = 'event.defaultPrevented';
1202
1203
  const Key = 'event.key';
1203
1204
  const ShiftKey = 'event.shiftKey';
@@ -1307,6 +1308,10 @@ const showContextMenu2 = async (uid, menuId, x, y, args) => {
1307
1308
  number(y);
1308
1309
  await invoke('ContextMenu.show2', uid, menuId, x, y, args);
1309
1310
  };
1311
+ const getFileHandles = async fileIds => {
1312
+ const files = await invoke('FileSystemHandle.getFileHandles', fileIds);
1313
+ return files;
1314
+ };
1310
1315
  const sendMessagePortToClipBoardWorker$1 = async (port, rpcId) => {
1311
1316
  const command = 'ClipBoard.handleMessagePort';
1312
1317
  await invokeAndTransfer('SendMessagePortToExtensionHostWorker.sendMessagePortToClipBoardWorker', port, command, rpcId);
@@ -2034,15 +2039,18 @@ const getDefaultModelsOpenAi = () => {
2034
2039
  id: 'openapi/codex-5.3',
2035
2040
  name: 'Codex 5.3',
2036
2041
  provider: 'openApi',
2042
+ supportsReasoningEffort: true,
2037
2043
  usageCost: 1
2038
2044
  }, {
2039
2045
  id: 'openapi/gpt-5.4-mini',
2040
2046
  name: 'GPT-5.4 Mini',
2041
- provider: 'openApi'
2047
+ provider: 'openApi',
2048
+ supportsReasoningEffort: true
2042
2049
  }, {
2043
2050
  id: 'openapi/gpt-5-mini',
2044
2051
  name: 'GPT-5 Mini',
2045
- provider: 'openApi'
2052
+ provider: 'openApi',
2053
+ supportsReasoningEffort: true
2046
2054
  }, {
2047
2055
  id: 'openapi/gpt-4o-mini',
2048
2056
  name: 'GPT-4o Mini',
@@ -4659,7 +4667,7 @@ const getOpenAiTools = tools => {
4659
4667
  };
4660
4668
  });
4661
4669
  };
4662
- const getOpenAiParams = (input, modelId, stream, includeObfuscation, tools, webSearchEnabled, maxToolCalls, systemPrompt = '', previousResponseId, reasoningEffort) => {
4670
+ const getOpenAiParams = (input, modelId, stream, includeObfuscation, tools, webSearchEnabled, maxToolCalls, systemPrompt = '', previousResponseId, reasoningEffort, supportsReasoningEffort = false) => {
4663
4671
  const openAiTools = getOpenAiTools(tools);
4664
4672
  return {
4665
4673
  input,
@@ -4678,7 +4686,7 @@ const getOpenAiParams = (input, modelId, stream, includeObfuscation, tools, webS
4678
4686
  ...(previousResponseId ? {
4679
4687
  previous_response_id: previousResponseId
4680
4688
  } : {}),
4681
- ...(reasoningEffort ? {
4689
+ ...(reasoningEffort && supportsReasoningEffort ? {
4682
4690
  reasoning: {
4683
4691
  effort: reasoningEffort
4684
4692
  }
@@ -5285,6 +5293,7 @@ const getOpenApiAssistantText = async (messages, modelId, openApiApiKey, openApi
5285
5293
  questionToolEnabled = false,
5286
5294
  reasoningEffort,
5287
5295
  stream,
5296
+ supportsReasoningEffort = false,
5288
5297
  systemPrompt = '',
5289
5298
  toolEnablement,
5290
5299
  useChatNetworkWorkerForRequests = false,
@@ -5303,7 +5312,7 @@ const getOpenApiAssistantText = async (messages, modelId, openApiApiKey, openApi
5303
5312
  const maxToolIterations = safeMaxToolCalls - 1;
5304
5313
  let previousResponseId;
5305
5314
  for (let i = 0; i <= maxToolIterations; i++) {
5306
- const postBody = getOpenAiParams(openAiInput, modelId, stream, includeObfuscation, tools, webSearchEnabled, safeMaxToolCalls, systemPrompt, previousResponseId, reasoningEffort);
5315
+ const postBody = getOpenAiParams(openAiInput, modelId, stream, includeObfuscation, tools, webSearchEnabled, safeMaxToolCalls, systemPrompt, previousResponseId, reasoningEffort, supportsReasoningEffort);
5307
5316
  if (stream) {
5308
5317
  const streamResult = useChatNetworkWorkerForRequests ? await (async () => {
5309
5318
  const requestResult = await makeStreamingApiRequest({
@@ -6313,6 +6322,8 @@ const getAiResponse = async ({
6313
6322
  }
6314
6323
  const usesOpenApiModel = isOpenApiModel(selectedModelId, models);
6315
6324
  const usesOpenRouterModel = isOpenRouterModel(selectedModelId, models);
6325
+ const selectedModel = models.find(model => model.id === selectedModelId);
6326
+ const supportsReasoningEffort = selectedModel?.supportsReasoningEffort ?? false;
6316
6327
  if (!text && usesOpenApiModel) {
6317
6328
  const safeMaxToolCalls = Math.max(1, maxToolCalls);
6318
6329
  if (useMockApi) {
@@ -6332,7 +6343,7 @@ const getAiResponse = async ({
6332
6343
  capture({
6333
6344
  headers,
6334
6345
  method: 'POST',
6335
- payload: getOpenAiParams(openAiInput, modelId, streamingEnabled, passIncludeObfuscation, await getBasicChatTools(agentMode, questionToolEnabled, toolEnablement), agentMode === 'plan' ? false : webSearchEnabled, safeMaxToolCalls, systemPrompt, previousResponseId, reasoningEffort),
6346
+ payload: getOpenAiParams(openAiInput, modelId, streamingEnabled, passIncludeObfuscation, await getBasicChatTools(agentMode, questionToolEnabled, toolEnablement), agentMode === 'plan' ? false : webSearchEnabled, safeMaxToolCalls, systemPrompt, previousResponseId, reasoningEffort, supportsReasoningEffort),
6336
6347
  url: getOpenApiApiEndpoint(openApiApiBaseUrl)
6337
6348
  });
6338
6349
  const result = await getMockOpenApiAssistantText(streamingEnabled, onTextChunk, onToolCallsChunk, onDataEvent, onEventStreamFinished);
@@ -6412,6 +6423,7 @@ const getAiResponse = async ({
6412
6423
  reasoningEffort
6413
6424
  } : {}),
6414
6425
  stream: streamingEnabled,
6426
+ supportsReasoningEffort,
6415
6427
  systemPrompt,
6416
6428
  ...(toolEnablement ? {
6417
6429
  toolEnablement
@@ -6512,6 +6524,7 @@ const ChatModelPickerItemSelected = 'ChatModelPickerItemSelected';
6512
6524
  const ChatModelPickerItemUsageCost = 'ChatModelPickerItemUsageCost';
6513
6525
  const ChatModelPickerList = 'ChatModelPickerList';
6514
6526
  const ChatName = 'ChatName';
6527
+ const ChatOverlays = 'ChatOverlays';
6515
6528
  const ChatOrderedList = 'ChatOrderedList';
6516
6529
  const ChatOrderedListItem = 'ChatOrderedListItem';
6517
6530
  const ChatOrderedListItemContent = 'ChatOrderedListItemContent';
@@ -9481,7 +9494,23 @@ const handleDragOver = async (state, name, hasFiles = true) => {
9481
9494
  };
9482
9495
  };
9483
9496
 
9484
- const handleDropFiles = async (state, name, files = []) => {
9497
+ const getDroppedFiles = async fileHandles => {
9498
+ // TODO adjust e2e test and remove this code
9499
+ if (fileHandles.some(item => typeof item !== 'number')) {
9500
+ return fileHandles.map(item => {
9501
+ return {
9502
+ getFile() {
9503
+ return item;
9504
+ }
9505
+ };
9506
+ });
9507
+ }
9508
+ const actualHandles = await getFileHandles(fileHandles);
9509
+ return actualHandles.map(item => item.value).filter(item => item.kind === 'file');
9510
+ };
9511
+
9512
+ const handleDropFiles = async (state, name, fileHandles = []) => {
9513
+ const droppedFileHandles = await getDroppedFiles(fileHandles);
9485
9514
  const {
9486
9515
  composerDropActive,
9487
9516
  composerDropEnabled,
@@ -9501,11 +9530,12 @@ const handleDropFiles = async (state, name, files = []) => {
9501
9530
  ...state,
9502
9531
  composerDropActive: false
9503
9532
  };
9504
- if (!selectedSessionId || files.length === 0) {
9533
+ if (!selectedSessionId || fileHandles.length === 0) {
9505
9534
  return nextState;
9506
9535
  }
9507
9536
  const nextAttachments = [];
9508
- for (const file of files) {
9537
+ for (const droppedFileHandle of droppedFileHandles) {
9538
+ const file = await droppedFileHandle.getFile();
9509
9539
  const attachmentId = crypto.randomUUID();
9510
9540
  const displayType = await getComposerAttachmentDisplayType(file, file.name, file.type);
9511
9541
  const previewSrc = await getComposerAttachmentPreviewSrc(file, displayType, file.type);
@@ -10751,6 +10781,16 @@ const getCss = (composerHeight, composerAttachmentsHeight, modelPickerHeight, li
10751
10781
  justify-content: flex-end;
10752
10782
  }
10753
10783
 
10784
+ .ChatOverlays{
10785
+ position: absolute;
10786
+ inset: 0;
10787
+ pointer-events: none;
10788
+ }
10789
+
10790
+ .ChatOverlays > *{
10791
+ pointer-events: auto;
10792
+ }
10793
+
10754
10794
  .RunModePickerPopOver{
10755
10795
  overflow: hidden;
10756
10796
  border: 1px solid var(--vscode-widget-border, var(--vscode-panel-border));
@@ -10922,57 +10962,6 @@ const HandleClickReasoningEffortPickerToggle = 56;
10922
10962
  const HandleClickAgentModePickerToggle = 57;
10923
10963
  const HandleContextMenuChatImageAttachment = 58;
10924
10964
 
10925
- const getCustomSelectOptionVirtualDom = (name, label, selected, detail = '') => {
10926
- const className = mergeClassNames(ChatModelPickerItem, selected ? ChatModelPickerItemSelected : '');
10927
- const hasDetail = detail !== '';
10928
- return [{
10929
- childCount: 1,
10930
- type: Li
10931
- }, {
10932
- childCount: hasDetail ? 2 : 1,
10933
- className,
10934
- inputType: 'button',
10935
- name,
10936
- onClick: HandleClick,
10937
- type: Button$1
10938
- }, {
10939
- childCount: 1,
10940
- className: ChatModelPickerItemLabel,
10941
- name,
10942
- type: Span
10943
- }, text(label), ...(hasDetail ? [{
10944
- childCount: 1,
10945
- className: ChatModelPickerItemUsageCost,
10946
- name,
10947
- type: Span
10948
- }, text(detail)] : [])];
10949
- };
10950
-
10951
- const getCustomSelectPopOverVirtualDom = (optionCount, height, optionNodes, containerClassName = '', popOverClassName = '') => {
10952
- return [{
10953
- childCount: 1,
10954
- className: mergeClassNames(ChatModelPickerContainer, containerClassName),
10955
- type: Div
10956
- }, {
10957
- childCount: 1,
10958
- className: mergeClassNames(ChatModelPicker, popOverClassName),
10959
- style: `height: ${height}px;`,
10960
- type: Div
10961
- }, {
10962
- childCount: optionCount,
10963
- className: ChatModelPickerList,
10964
- type: Ul
10965
- }, ...optionNodes];
10966
- };
10967
-
10968
- const agentModePickerHeight = agentModes.length * 28;
10969
- const getAgentModeOptionsVirtualDom = selectedAgentMode => {
10970
- return agentModes.flatMap(agentMode => getCustomSelectOptionVirtualDom(getAgentModePickerItemInputName(agentMode), getAgentModeLabel(agentMode), agentMode === selectedAgentMode));
10971
- };
10972
- const getAgentModePickerPopOverVirtualDom = selectedAgentMode => {
10973
- return getCustomSelectPopOverVirtualDom(agentModes.length, agentModePickerHeight, getAgentModeOptionsVirtualDom(selectedAgentMode));
10974
- };
10975
-
10976
10965
  const getAddContextButtonDom = () => {
10977
10966
  return [{
10978
10967
  childCount: 1,
@@ -11045,6 +11034,32 @@ const getCreatePullRequestButtonDom = () => {
11045
11034
  }];
11046
11035
  };
11047
11036
 
11037
+ const getCustomSelectOptionVirtualDom = (name, label, selected, detail = '') => {
11038
+ const className = mergeClassNames(ChatModelPickerItem, selected ? ChatModelPickerItemSelected : '');
11039
+ const hasDetail = detail !== '';
11040
+ return [{
11041
+ childCount: 1,
11042
+ type: Li
11043
+ }, {
11044
+ childCount: hasDetail ? 2 : 1,
11045
+ className,
11046
+ inputType: 'button',
11047
+ name,
11048
+ onClick: HandleClick,
11049
+ type: Button$1
11050
+ }, {
11051
+ childCount: 1,
11052
+ className: ChatModelPickerItemLabel,
11053
+ name,
11054
+ type: Span
11055
+ }, text(label), ...(hasDetail ? [{
11056
+ childCount: 1,
11057
+ className: ChatModelPickerItemUsageCost,
11058
+ name,
11059
+ type: Span
11060
+ }, text(detail)] : [])];
11061
+ };
11062
+
11048
11063
  const reasoningEffortPickerHeight = reasoningEfforts.length * 28;
11049
11064
  const getReasoningEffortOptionsVirtualDom = selectedReasoningEffort => {
11050
11065
  return reasoningEfforts.flatMap(reasoningEffort => {
@@ -11297,10 +11312,36 @@ const getChatSendAreaDom = (composerValue, composerAttachments, agentMode, agent
11297
11312
  }, {
11298
11313
  childCount: primaryControlsCount,
11299
11314
  className: ChatSendAreaPrimaryControls,
11315
+ role: 'toolbar',
11300
11316
  type: Div
11301
11317
  }, ...(showAgentModePicker ? getAgentModePickerVirtualDom(agentMode, agentModePickerOpen) : []), ...getChatModelPickerToggleVirtualDom(models, selectedModelId, modelPickerOpen), ...(reasoningPickerEnabled ? getReasoningEffortPickerVirtualDom(reasoningEffort, reasoningEffortPickerOpen) : []), ...(showResponsiveRunModePicker ? getRunModePickerVirtualDom(runMode, runModePickerOpen) : []), ...(usageOverviewEnabled ? getUsageOverviewDom(tokensUsed, tokensMax) : []), ...(addContextButtonEnabled ? getAddContextButtonDom() : []), ...(showCreatePullRequestButton ? getCreatePullRequestButtonDom() : []), ...getSendButtonDom(isSendDisabled, voiceDictationEnabled)];
11302
11318
  };
11303
11319
 
11320
+ const getCustomSelectPopOverVirtualDom = (optionCount, height, optionNodes, containerClassName = '', popOverClassName = '') => {
11321
+ return [{
11322
+ childCount: 1,
11323
+ className: mergeClassNames(ChatModelPickerContainer, containerClassName),
11324
+ type: Div
11325
+ }, {
11326
+ childCount: 1,
11327
+ className: mergeClassNames(ChatModelPicker, popOverClassName),
11328
+ style: `height: ${height}px;`,
11329
+ type: Div
11330
+ }, {
11331
+ childCount: optionCount,
11332
+ className: ChatModelPickerList,
11333
+ type: Ul
11334
+ }, ...optionNodes];
11335
+ };
11336
+
11337
+ const agentModePickerHeight = agentModes.length * 28;
11338
+ const getAgentModeOptionsVirtualDom = selectedAgentMode => {
11339
+ return agentModes.flatMap(agentMode => getCustomSelectOptionVirtualDom(getAgentModePickerItemInputName(agentMode), getAgentModeLabel(agentMode), agentMode === selectedAgentMode));
11340
+ };
11341
+ const getAgentModePickerPopOverVirtualDom = selectedAgentMode => {
11342
+ return getCustomSelectPopOverVirtualDom(agentModes.length, agentModePickerHeight, getAgentModeOptionsVirtualDom(selectedAgentMode));
11343
+ };
11344
+
11304
11345
  const getUsageCostLabel = model => {
11305
11346
  return `${model.usageCost ?? 1}x`;
11306
11347
  };
@@ -11367,6 +11408,51 @@ const getChatModelPickerPopOverVirtualDom = (models, selectedModelId, modelPicke
11367
11408
  }, ...getModelPickerHeaderDom(modelPickerSearchValue), ...getChatModelListVirtualDom(visibleModels, selectedModelId)];
11368
11409
  };
11369
11410
 
11411
+ const runModes = ['local', 'background', 'cloud'];
11412
+ const runModePickerHeight = runModes.length * 28;
11413
+ const getRunModeOptionsVirtualDom = selectedRunMode => {
11414
+ return runModes.flatMap(runMode => getCustomSelectOptionVirtualDom(getRunModePickerItemInputName(runMode), runMode, runMode === selectedRunMode));
11415
+ };
11416
+ const getRunModePickerPopOverVirtualDom = selectedRunMode => {
11417
+ return getCustomSelectPopOverVirtualDom(runModes.length, runModePickerHeight, getRunModeOptionsVirtualDom(selectedRunMode), RunModePickerContainer, RunModePickerPopOver);
11418
+ };
11419
+
11420
+ const getDropOverlayVirtualDom = () => {
11421
+ return [{
11422
+ childCount: 1,
11423
+ className: mergeClassNames(ChatViewDropOverlay, ChatViewDropOverlayActive),
11424
+ name: ComposerDropTarget,
11425
+ onDragLeave: HandleDragLeave,
11426
+ onDragOver: HandleDragOver,
11427
+ onDrop: HandleDrop,
11428
+ type: Div
11429
+ }, {
11430
+ text: attachImageAsContext(),
11431
+ type: Text
11432
+ }];
11433
+ };
11434
+ const getChatOverlaysVirtualDom = ({
11435
+ agentMode,
11436
+ agentModePickerVisible,
11437
+ dropOverlayVisible,
11438
+ modelPickerSearchValue,
11439
+ modelPickerVisible,
11440
+ runMode,
11441
+ runModePickerVisible,
11442
+ selectedModelId,
11443
+ visibleModels
11444
+ }) => {
11445
+ const overlayChildCount = (dropOverlayVisible ? 1 : 0) + (agentModePickerVisible ? 1 : 0) + (modelPickerVisible ? 1 : 0) + (runModePickerVisible ? 1 : 0);
11446
+ if (!overlayChildCount) {
11447
+ return [];
11448
+ }
11449
+ return [{
11450
+ childCount: overlayChildCount,
11451
+ className: ChatOverlays,
11452
+ type: Div
11453
+ }, ...(dropOverlayVisible ? getDropOverlayVirtualDom() : []), ...(agentModePickerVisible ? getAgentModePickerPopOverVirtualDom(agentMode) : []), ...(modelPickerVisible ? getChatModelPickerPopOverVirtualDom(visibleModels, selectedModelId, modelPickerSearchValue) : []), ...(runModePickerVisible ? getRunModePickerPopOverVirtualDom(runMode) : [])];
11454
+ };
11455
+
11370
11456
  const getBoldInlineNodeDom = (inlineNode, useChatMathWorker, renderInlineNodeDom) => {
11371
11457
  return [{
11372
11458
  childCount: inlineNode.children.length,
@@ -12862,15 +12948,6 @@ const getProjectListDom = (projects, sessions, projectExpandedIds, selectedProje
12862
12948
  }, text('+ Add Project'), ...(showBackToChatsButton ? getBackToChatsButtonDom() : [])];
12863
12949
  };
12864
12950
 
12865
- const runModes = ['local', 'background', 'cloud'];
12866
- const runModePickerHeight = runModes.length * 28;
12867
- const getRunModeOptionsVirtualDom = selectedRunMode => {
12868
- return runModes.flatMap(runMode => getCustomSelectOptionVirtualDom(getRunModePickerItemInputName(runMode), runMode, runMode === selectedRunMode));
12869
- };
12870
- const getRunModePickerPopOverVirtualDom = selectedRunMode => {
12871
- return getCustomSelectPopOverVirtualDom(runModes.length, runModePickerHeight, getRunModeOptionsVirtualDom(selectedRunMode), RunModePickerContainer, RunModePickerPopOver);
12872
- };
12873
-
12874
12951
  const getChatModeChatFocusVirtualDom = ({
12875
12952
  addContextButtonEnabled,
12876
12953
  agentMode,
@@ -12928,25 +13005,25 @@ const getChatModeChatFocusVirtualDom = ({
12928
13005
  const isAgentModePickerVisible = hasSpaceForAgentModePicker && agentModePickerOpen;
12929
13006
  const isNewModelPickerVisible = modelPickerOpen;
12930
13007
  const isRunModePickerVisible = showRunMode && hasSpaceForRunModePicker && runModePickerOpen;
12931
- const chatRootChildCount = 3 + (isDropOverlayVisible ? 1 : 0) + (isAgentModePickerVisible ? 1 : 0) + (isNewModelPickerVisible ? 1 : 0) + (isRunModePickerVisible ? 1 : 0);
13008
+ const hasVisibleOverlays = isDropOverlayVisible || isAgentModePickerVisible || isNewModelPickerVisible || isRunModePickerVisible;
13009
+ const chatRootChildCount = 3 + (hasVisibleOverlays ? 1 : 0);
12932
13010
  return [{
12933
13011
  childCount: chatRootChildCount,
12934
13012
  className: mergeClassNames(Viewlet, Chat, ChatFocus),
12935
13013
  onDragEnter: HandleDragEnterChatView,
12936
13014
  onDragOver: HandleDragOverChatView,
12937
13015
  type: Div
12938
- }, ...getProjectListDom(projects, sessions, projectExpandedIds, selectedProjectId, selectedSessionId, projectListScrollTop, true), ...getMessagesDom(messages, parsedMessages, openRouterApiKeyInput, openApiApiKeyInput, openApiApiKeyState, openApiApiKeysSettingsUrl, openApiApiKeyInputPattern, openRouterApiKeyState, messagesScrollTop, useChatMathWorker, true), ...getChatSendAreaDom(composerValue, composerAttachments, agentMode, agentModePickerOpen, hasSpaceForAgentModePicker, modelPickerOpen, models, selectedModelId, reasoningPickerEnabled, reasoningEffort, reasoningEffortPickerOpen, usageOverviewEnabled, tokensUsed, tokensMax, addContextButtonEnabled, showRunMode, hasSpaceForRunModePicker, runMode, runModePickerOpen, todoListToolEnabled, todoListItems, showCreatePullRequestButton, voiceDictationEnabled), ...(isDropOverlayVisible ? [{
12939
- childCount: 1,
12940
- className: mergeClassNames(ChatViewDropOverlay, ChatViewDropOverlayActive),
12941
- name: ComposerDropTarget,
12942
- onDragLeave: HandleDragLeave,
12943
- onDragOver: HandleDragOver,
12944
- onDrop: HandleDrop,
12945
- type: Div
12946
- }, {
12947
- text: attachImageAsContext(),
12948
- type: Text
12949
- }] : []), ...(isAgentModePickerVisible ? getAgentModePickerPopOverVirtualDom(agentMode) : []), ...(isNewModelPickerVisible ? getChatModelPickerPopOverVirtualDom(visibleModels, selectedModelId, modelPickerSearchValue) : []), ...(isRunModePickerVisible ? getRunModePickerPopOverVirtualDom(runMode) : [])];
13016
+ }, ...getProjectListDom(projects, sessions, projectExpandedIds, selectedProjectId, selectedSessionId, projectListScrollTop, true), ...getMessagesDom(messages, parsedMessages, openRouterApiKeyInput, openApiApiKeyInput, openApiApiKeyState, openApiApiKeysSettingsUrl, openApiApiKeyInputPattern, openRouterApiKeyState, messagesScrollTop, useChatMathWorker, true), ...getChatSendAreaDom(composerValue, composerAttachments, agentMode, agentModePickerOpen, hasSpaceForAgentModePicker, modelPickerOpen, models, selectedModelId, reasoningPickerEnabled, reasoningEffort, reasoningEffortPickerOpen, usageOverviewEnabled, tokensUsed, tokensMax, addContextButtonEnabled, showRunMode, hasSpaceForRunModePicker, runMode, runModePickerOpen, todoListToolEnabled, todoListItems, showCreatePullRequestButton, voiceDictationEnabled), ...getChatOverlaysVirtualDom({
13017
+ agentMode,
13018
+ agentModePickerVisible: isAgentModePickerVisible,
13019
+ dropOverlayVisible: isDropOverlayVisible,
13020
+ modelPickerSearchValue,
13021
+ modelPickerVisible: isNewModelPickerVisible,
13022
+ runMode,
13023
+ runModePickerVisible: isRunModePickerVisible,
13024
+ selectedModelId,
13025
+ visibleModels
13026
+ })];
12950
13027
  };
12951
13028
 
12952
13029
  const arrowLeft = {
@@ -13033,6 +13110,7 @@ const getChatHeaderActionsDom = (viewMode, authEnabled = false, authStatus = 'si
13033
13110
  title: closeChat()
13034
13111
  }];
13035
13112
  return [{
13113
+ 'aria-label': 'chat actions',
13036
13114
  childCount: items.length,
13037
13115
  className: ChatActions,
13038
13116
  role: ToolBar,
@@ -13056,7 +13134,7 @@ const getChatHeaderDomDetailMode = (selectedSessionTitle, authEnabled = false, a
13056
13134
  childCount: hasAuthError ? 3 : 2,
13057
13135
  className: ChatHeader,
13058
13136
  onContextMenu: HandleChatHeaderContextMenu,
13059
- type: Div
13137
+ type: Header
13060
13138
  }, {
13061
13139
  childCount: 2,
13062
13140
  className: ChatName,
@@ -13122,25 +13200,25 @@ const getChatModeDetailVirtualDom = ({
13122
13200
  const isAgentModePickerVisible = hasSpaceForAgentModePicker && agentModePickerOpen;
13123
13201
  const isNewModelPickerVisible = modelPickerOpen;
13124
13202
  const isRunModePickerVisible = showRunMode && hasSpaceForRunModePicker && runModePickerOpen;
13125
- const chatRootChildCount = 3 + (isDropOverlayVisible ? 1 : 0) + (isAgentModePickerVisible ? 1 : 0) + (isNewModelPickerVisible ? 1 : 0) + (isRunModePickerVisible ? 1 : 0);
13203
+ const hasVisibleOverlays = isDropOverlayVisible || isAgentModePickerVisible || isNewModelPickerVisible || isRunModePickerVisible;
13204
+ const chatRootChildCount = 3 + (hasVisibleOverlays ? 1 : 0);
13126
13205
  return [{
13127
13206
  childCount: chatRootChildCount,
13128
13207
  className: mergeClassNames(Viewlet, Chat),
13129
13208
  onDragEnter: HandleDragEnterChatView,
13130
13209
  onDragOver: HandleDragOverChatView,
13131
13210
  type: Div
13132
- }, ...getChatHeaderDomDetailMode(selectedSessionTitle, authEnabled, authStatus, authErrorMessage), ...getMessagesDom(messages, parsedMessages, openRouterApiKeyInput, openApiApiKeyInput, openApiApiKeyState, openApiApiKeysSettingsUrl, openApiApiKeyInputPattern, openRouterApiKeyState, messagesScrollTop, useChatMathWorker), ...getChatSendAreaDom(composerValue, composerAttachments, agentMode, agentModePickerOpen, hasSpaceForAgentModePicker, modelPickerOpen, models, selectedModelId, reasoningPickerEnabled, reasoningEffort, reasoningEffortPickerOpen, usageOverviewEnabled, tokensUsed, tokensMax, addContextButtonEnabled, showRunMode, hasSpaceForRunModePicker, runMode, runModePickerOpen, todoListToolEnabled, todoListItems, showCreatePullRequestButton, voiceDictationEnabled), ...(isDropOverlayVisible ? [{
13133
- childCount: 1,
13134
- className: mergeClassNames(ChatViewDropOverlay, ChatViewDropOverlayActive),
13135
- name: ComposerDropTarget,
13136
- onDragLeave: HandleDragLeave,
13137
- onDragOver: HandleDragOver,
13138
- onDrop: HandleDrop,
13139
- type: Div
13140
- }, {
13141
- text: attachImageAsContext(),
13142
- type: Text
13143
- }] : []), ...(isAgentModePickerVisible ? getAgentModePickerPopOverVirtualDom(agentMode) : []), ...(isNewModelPickerVisible ? getChatModelPickerPopOverVirtualDom(visibleModels, selectedModelId, modelPickerSearchValue) : []), ...(isRunModePickerVisible ? getRunModePickerPopOverVirtualDom(runMode) : [])];
13211
+ }, ...getChatHeaderDomDetailMode(selectedSessionTitle, authEnabled, authStatus, authErrorMessage), ...getMessagesDom(messages, parsedMessages, openRouterApiKeyInput, openApiApiKeyInput, openApiApiKeyState, openApiApiKeysSettingsUrl, openApiApiKeyInputPattern, openRouterApiKeyState, messagesScrollTop, useChatMathWorker), ...getChatSendAreaDom(composerValue, composerAttachments, agentMode, agentModePickerOpen, hasSpaceForAgentModePicker, modelPickerOpen, models, selectedModelId, reasoningPickerEnabled, reasoningEffort, reasoningEffortPickerOpen, usageOverviewEnabled, tokensUsed, tokensMax, addContextButtonEnabled, showRunMode, hasSpaceForRunModePicker, runMode, runModePickerOpen, todoListToolEnabled, todoListItems, showCreatePullRequestButton, voiceDictationEnabled), ...getChatOverlaysVirtualDom({
13212
+ agentMode,
13213
+ agentModePickerVisible: isAgentModePickerVisible,
13214
+ dropOverlayVisible: isDropOverlayVisible,
13215
+ modelPickerSearchValue,
13216
+ modelPickerVisible: isNewModelPickerVisible,
13217
+ runMode,
13218
+ runModePickerVisible: isRunModePickerVisible,
13219
+ selectedModelId,
13220
+ visibleModels
13221
+ })];
13144
13222
  };
13145
13223
 
13146
13224
  const getChatSearchDom = (hasSearchField, searchValue) => {
@@ -13170,7 +13248,7 @@ const getChatHeaderListModeDom = (authEnabled = false, authStatus = 'signed-out'
13170
13248
  childCount: headerChildCount,
13171
13249
  className: ChatHeader,
13172
13250
  onContextMenu: HandleChatHeaderContextMenu,
13173
- type: Div
13251
+ type: Header
13174
13252
  }, {
13175
13253
  childCount: 1,
13176
13254
  className: ChatHeaderLabel,
@@ -13269,23 +13347,6 @@ const getChatListDom = (sessions, selectedSessionId, listFocusedIndex, chatListS
13269
13347
  }, ...sessions.flatMap((session, index) => getSessionDom(session, index === listFocusedIndex))];
13270
13348
  };
13271
13349
 
13272
- const getDropOverlayVirtualDom = isDropOverlayVisible => {
13273
- if (!isDropOverlayVisible) {
13274
- return [];
13275
- }
13276
- return [{
13277
- childCount: 1,
13278
- className: mergeClassNames(ChatViewDropOverlay, ChatViewDropOverlayActive),
13279
- name: ComposerDropTarget,
13280
- onDragLeave: HandleDragLeave,
13281
- onDragOver: HandleDragOver,
13282
- onDrop: HandleDrop,
13283
- type: Div
13284
- }, {
13285
- text: attachImageAsContext(),
13286
- type: Text
13287
- }];
13288
- };
13289
13350
  const getChatModeListVirtualDom = ({
13290
13351
  addContextButtonEnabled,
13291
13352
  agentMode,
@@ -13332,7 +13393,8 @@ const getChatModeListVirtualDom = ({
13332
13393
  const isAgentModePickerVisible = hasSpaceForAgentModePicker && agentModePickerOpen;
13333
13394
  const isNewModelPickerVisible = modelPickerOpen;
13334
13395
  const isRunModePickerVisible = showRunMode && hasSpaceForRunModePicker && runModePickerOpen;
13335
- const chatRootChildCount = 3 + (isDropOverlayVisible ? 1 : 0) + (isAgentModePickerVisible ? 1 : 0) + (isNewModelPickerVisible ? 1 : 0) + (isRunModePickerVisible ? 1 : 0);
13396
+ const hasVisibleOverlays = isDropOverlayVisible || isAgentModePickerVisible || isNewModelPickerVisible || isRunModePickerVisible;
13397
+ const chatRootChildCount = 3 + (hasVisibleOverlays ? 1 : 0);
13336
13398
  const searchValueTrimmed = searchValue.trim().toLowerCase();
13337
13399
  const visibleSessions = searchEnabled && searchValueTrimmed ? sessions.filter(session => session.title.toLowerCase().includes(searchValueTrimmed)) : sessions;
13338
13400
  return [{
@@ -13341,7 +13403,17 @@ const getChatModeListVirtualDom = ({
13341
13403
  onDragEnter: HandleDragEnterChatView,
13342
13404
  onDragOver: HandleDragOverChatView,
13343
13405
  type: Div
13344
- }, ...getChatHeaderListModeDom(authEnabled, authStatus, authErrorMessage, searchEnabled, searchFieldVisible, searchValue), ...getChatListDom(visibleSessions, selectedSessionId, listFocusedIndex, chatListScrollTop), ...getChatSendAreaDom(composerValue, composerAttachments, agentMode, agentModePickerOpen, hasSpaceForAgentModePicker, modelPickerOpen, models, selectedModelId, reasoningPickerEnabled, reasoningEffort, reasoningEffortPickerOpen, usageOverviewEnabled, tokensUsed, tokensMax, addContextButtonEnabled, showRunMode, hasSpaceForRunModePicker, runMode, runModePickerOpen, todoListToolEnabled, todoListItems, false, voiceDictationEnabled), ...getDropOverlayVirtualDom(isDropOverlayVisible), ...(isAgentModePickerVisible ? getAgentModePickerPopOverVirtualDom(agentMode) : []), ...(isNewModelPickerVisible ? getChatModelPickerPopOverVirtualDom(visibleModels, selectedModelId, modelPickerSearchValue) : []), ...(isRunModePickerVisible ? getRunModePickerPopOverVirtualDom(runMode) : [])];
13406
+ }, ...getChatHeaderListModeDom(authEnabled, authStatus, authErrorMessage, searchEnabled, searchFieldVisible, searchValue), ...getChatListDom(visibleSessions, selectedSessionId, listFocusedIndex, chatListScrollTop), ...getChatSendAreaDom(composerValue, composerAttachments, agentMode, agentModePickerOpen, hasSpaceForAgentModePicker, modelPickerOpen, models, selectedModelId, reasoningPickerEnabled, reasoningEffort, reasoningEffortPickerOpen, usageOverviewEnabled, tokensUsed, tokensMax, addContextButtonEnabled, showRunMode, hasSpaceForRunModePicker, runMode, runModePickerOpen, todoListToolEnabled, todoListItems, false, voiceDictationEnabled), ...getChatOverlaysVirtualDom({
13407
+ agentMode,
13408
+ agentModePickerVisible: isAgentModePickerVisible,
13409
+ dropOverlayVisible: isDropOverlayVisible,
13410
+ modelPickerSearchValue,
13411
+ modelPickerVisible: isNewModelPickerVisible,
13412
+ runMode,
13413
+ runModePickerVisible: isRunModePickerVisible,
13414
+ selectedModelId,
13415
+ visibleModels
13416
+ })];
13345
13417
  };
13346
13418
 
13347
13419
  const getChatModeUnsupportedVirtualDom = () => {
@@ -13901,11 +13973,11 @@ const renderEventListeners = () => {
13901
13973
  params: ['handleSearchValueChange', TargetValue]
13902
13974
  }, {
13903
13975
  name: HandleDragEnter,
13904
- params: ['handleDragEnter', TargetName, 'Array.from(event.dataTransfer?.files || []).length > 0'],
13976
+ params: ['handleDragEnter', TargetName, DataTransferFiles2],
13905
13977
  preventDefault: true
13906
13978
  }, {
13907
13979
  name: HandleDragOver,
13908
- params: ['handleDragOver', TargetName, 'Array.from(event.dataTransfer?.files || []).length > 0'],
13980
+ params: ['handleDragOver', TargetName, DataTransferFiles2],
13909
13981
  preventDefault: true
13910
13982
  }, {
13911
13983
  name: HandleDragLeave,
@@ -13913,15 +13985,15 @@ const renderEventListeners = () => {
13913
13985
  preventDefault: true
13914
13986
  }, {
13915
13987
  name: HandleDrop,
13916
- params: ['handleDropFiles', TargetName, 'Array.from(event.dataTransfer?.files || [])'],
13988
+ params: ['handleDropFiles', TargetName, DataTransferFiles2],
13917
13989
  preventDefault: true
13918
13990
  }, {
13919
13991
  name: HandleDragEnterChatView,
13920
- params: ['handleDragEnter', 'composer-drop-target', 'Array.from(event.dataTransfer?.files || []).length > 0'],
13992
+ params: ['handleDragEnter', 'composer-drop-target', DataTransferFiles2],
13921
13993
  preventDefault: true
13922
13994
  }, {
13923
13995
  name: HandleDragOverChatView,
13924
- params: ['handleDragOver', 'composer-drop-target', 'Array.from(event.dataTransfer?.files || []).length > 0'],
13996
+ params: ['handleDragOver', 'composer-drop-target', DataTransferFiles2],
13925
13997
  preventDefault: true
13926
13998
  }, {
13927
13999
  name: HandleModelChange,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/chat-view",
3
- "version": "6.62.0",
3
+ "version": "6.64.0",
4
4
  "description": "Chat View Worker",
5
5
  "repository": {
6
6
  "type": "git",