From 3994a39675c5c981e103b12007fd63551e94a46b Mon Sep 17 00:00:00 2001 From: Aleksander Grygier Date: Mon, 23 Mar 2026 11:41:28 +0100 Subject: [PATCH] feat: UI improvements --- .../ChatFormActionAttachmentsDropdown.svelte | 57 ++- .../ChatFormActionAttachmentsSheet.svelte | 344 ++++++++++++++++-- .../ChatFormActions/ChatFormActions.svelte | 15 +- .../app/mcp/McpActiveServersAvatars.svelte | 41 ++- .../app/mcp/McpServersSelector.svelte | 20 +- .../app/models/ModelsSelectorSheet.svelte | 2 +- .../ui/tooltip/tooltip-trigger.svelte | 7 +- 7 files changed, 394 insertions(+), 92 deletions(-) diff --git a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsDropdown.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsDropdown.svelte index 9c421811fc..a72ef68d84 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsDropdown.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsDropdown.svelte @@ -105,6 +105,11 @@ return null; } + function getEnabledToolCount(group: ToolGroup): number { + if (isGroupDisabled(group)) return 0; + return group.tools.filter((tool) => toolsStore.isToolEnabled(tool.function.name)).length; + } + function handleToolsSubMenuOpen(open: boolean) { if (open) { if (toolsStore.builtinTools.length === 0 && !toolsStore.loading) { @@ -337,26 +342,44 @@ - {group.tools.length} + {getEnabledToolCount(group)}/{group.tools.length} {#if groupDisabled && hoveredGroup === group.label && group.serverId} - e.stopPropagation()} - onCheckedChange={() => - group.serverId && toggleServerForChat(group.serverId)} - class="mr-2 shrink-0" - /> + + + e.stopPropagation()} + onCheckedChange={() => + group.serverId && toggleServerForChat(group.serverId)} + class="mr-2 shrink-0" + /> + + +

Enable {group.label}

+
+
{:else} - toolsStore.toggleGroup(group)} - class="mr-2 h-4 w-4 shrink-0 {groupDisabled ? 'opacity-40' : ''}" - /> + + + toolsStore.toggleGroup(group)} + class="mr-2 h-4 w-4 shrink-0 {groupDisabled ? 'opacity-40' : ''}" + /> + + + +

+ {checked ? 'Disable' : 'Enable'} + {group.tools.length} tool{group.tools.length !== 1 ? 's' : ''} +

+
+
{/if} @@ -365,7 +388,7 @@ {#each group.tools as tool (tool.function.name)} diff --git a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsSheet.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsSheet.svelte index ae9fb7e760..d2ffe688c6 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsSheet.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsSheet.svelte @@ -1,8 +1,29 @@ {#if hasEnabledMcpServers && mcpFavicons.length > 0} -
+
+ {/if} diff --git a/tools/server/webui/src/lib/components/app/mcp/McpServersSelector.svelte b/tools/server/webui/src/lib/components/app/mcp/McpServersSelector.svelte index 1b5225440d..71e90d0ad2 100644 --- a/tools/server/webui/src/lib/components/app/mcp/McpServersSelector.svelte +++ b/tools/server/webui/src/lib/components/app/mcp/McpServersSelector.svelte @@ -2,6 +2,7 @@ import { Settings } from '@lucide/svelte'; import * as DropdownMenu from '$lib/components/ui/dropdown-menu'; import { Switch } from '$lib/components/ui/switch'; + import * as Tooltip from '$lib/components/ui/tooltip'; import { DropdownMenuSearchable, McpActiveServersAvatars } from '$lib/components/app'; import { conversationsStore } from '$lib/stores/conversations.svelte'; import { mcpStore } from '$lib/stores/mcp.svelte'; @@ -136,12 +137,19 @@ {/if} - e.stopPropagation()} - onCheckedChange={() => toggleServerForChat(server.id)} - /> + + + e.stopPropagation()} + onCheckedChange={() => toggleServerForChat(server.id)} + /> + + +

{isEnabledForChat ? 'Disable' : 'Enable'} {getServerLabel(server)}

+
+
{/each} diff --git a/tools/server/webui/src/lib/components/app/models/ModelsSelectorSheet.svelte b/tools/server/webui/src/lib/components/app/models/ModelsSelectorSheet.svelte index a478b05733..804f7c988a 100644 --- a/tools/server/webui/src/lib/components/app/models/ModelsSelectorSheet.svelte +++ b/tools/server/webui/src/lib/components/app/models/ModelsSelectorSheet.svelte @@ -228,7 +228,7 @@ : 'text-muted-foreground', sheetOpen ? 'text-foreground' : '' )} - style="max-width: min(calc(100cqw - 10.5rem), 20rem)" + style="max-width: min(calc(100cqw - 9rem), 20rem)" disabled={disabled || updating} onclick={() => handleOpenChange(true)} > diff --git a/tools/server/webui/src/lib/components/ui/tooltip/tooltip-trigger.svelte b/tools/server/webui/src/lib/components/ui/tooltip/tooltip-trigger.svelte index 5631d1b4c1..671d6e2201 100644 --- a/tools/server/webui/src/lib/components/ui/tooltip/tooltip-trigger.svelte +++ b/tools/server/webui/src/lib/components/ui/tooltip/tooltip-trigger.svelte @@ -4,4 +4,9 @@ let { ref = $bindable(null), ...restProps }: TooltipPrimitive.TriggerProps = $props(); - +