diff --git a/src/lib/components/chat/ChatTabs.svelte b/src/lib/components/chat/ChatTabs.svelte index c2962552a0..3cf4910127 100644 --- a/src/lib/components/chat/ChatTabs.svelte +++ b/src/lib/components/chat/ChatTabs.svelte @@ -482,6 +482,16 @@ { kind: 'comments', label: $i18n.t('Comments'), available: showCommentsTab } ]; + $: showFilesMenuItem = + showFilesTab && + !tabs.tabs.some( + (tab) => tab.id === ($selectedTerminalId ? `files:${$selectedTerminalId}` : 'files') + ); + $: newTabViews = availableViews.filter( + (view) => view.kind !== 'files' && view.kind !== 'voice' && view.available + ); + $: canOpenNewTab = showFilesMenuItem || terminalFilesAvailable || newTabViews.length > 0; + $: directTerminals = ($settings as { terminalServers?: { url: string; key?: string }[] })?.terminalServers ?? []; const terminalAccessible = (selector: string) => { @@ -499,6 +509,7 @@ ); }; const pruneTabs = () => { + const hadTabs = tabs.tabs.length > 0; for (const tab of tabs.tabs) { // An open side chat owns its model and context; changing the parent must not discard it. if (tab.kind === 'side') continue; @@ -511,6 +522,7 @@ delete fileContexts[tab.id]; } } + if (hadTabs && !tabs.tabs.length) showTabs.set(false); }; $: { availableViews; @@ -819,46 +831,50 @@ {/each} - - - - - {#if showFilesTab && !tabs.tabs.some((tab) => tab.id === ($selectedTerminalId ? `files:${$selectedTerminalId}` : 'files'))} - openFiles()} - >{$i18n.t('Files')} - {/if} - {#if terminalFilesAvailable}{$i18n.t('New File')}{/if} - {#if terminalEnabled}{$i18n.t('New Terminal')}{/if} - {#if browserEnabled} openBrowser()} - >{$i18n.t('Browser')}{/if} - {#if desktopEnabled}{$i18n.t('Desktop')}{/if} - {#each availableViews.filter((view) => view.kind !== 'files' && view.kind !== 'voice' && view.available) as view} - - openFeature(view.kind as 'artifacts' | 'preview' | 'voice' | 'comments' | 'side')} - > - {#if view.kind === 'comments'} - - {:else} - - {/if}{view.label} - - {/each} - - - + {#if canOpenNewTab} + + + + + {#if showFilesMenuItem} + openFiles()} + >{$i18n.t('Files')} + {/if} + {#if terminalFilesAvailable}{$i18n.t('New File')}{/if} + {#if terminalEnabled}{$i18n.t('New Terminal')}{/if} + {#if browserEnabled} openBrowser()} + >{$i18n.t('Browser')}{/if} + {#if desktopEnabled}{$i18n.t('Desktop')}{/if} + {#each newTabViews as view} + + openFeature( + view.kind as 'artifacts' | 'preview' | 'voice' | 'comments' | 'side' + )} + > + {#if view.kind === 'comments'} + + {:else} + + {/if}{view.label} + + {/each} + + + + {/if} {/each} - {#if !tabs.tabs.length} {$i18n.t('Open a tab using the + menu.')}