diff --git a/tools/server/webui/src/app.css b/tools/server/webui/src/app.css index 9705040a4d..59c525d8c7 100644 --- a/tools/server/webui/src/app.css +++ b/tools/server/webui/src/app.css @@ -37,7 +37,7 @@ --sidebar-accent-foreground: oklch(0.205 0 0); --sidebar-border: oklch(0.922 0 0); --sidebar-ring: oklch(0.708 0 0); - --code-background: oklch(0.975 0 0); + --code-background: oklch(0.985 0 0); --code-foreground: oklch(0.145 0 0); --layer-popover: 1000000; } @@ -114,14 +114,19 @@ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-border: var(--sidebar-border); --color-sidebar-ring: var(--sidebar-ring); + + --chat-form-area-height: 24rem; } @layer base { * { @apply border-border outline-ring/50; } + body { @apply bg-background text-foreground; + scrollbar-width: thin; + scrollbar-gutter: stable; } } diff --git a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte index 797f192aab..d6644caaf0 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte @@ -1,37 +1,23 @@
@@ -315,126 +184,21 @@ /> {#if hasMcpServers} - - - - - - - -
-
- - -
-
- - -
- {#each displayedMcpServers() as server (server.id)} - {@const healthState = mcpGetHealthCheckState(server.id)} - {@const hasError = healthState.status === 'error'} - {@const isEnabledForChat = isServerEnabledForChat(server)} - {@const hasOverride = hasPerChatOverride(server.id)} -
-
- {#if getFaviconUrl(server)} - { - (e.currentTarget as HTMLImageElement).style.display = 'none'; - }} - /> - {/if} - {getServerDisplayName(server)} - {#if hasError} - Error - {:else if server.enabled} - Global - {/if} -
- toggleServerForChat(server.id, server.enabled)} - disabled={hasError} - class={hasOverride ? 'ring-2 ring-primary/50 ring-offset-1' : ''} - /> -
- {/each} - {#if displayedMcpServers().length === 0} -
- No servers found -
- {/if} -
- - (showMcpDialog = true)} - > - - Manage MCP Servers - -
-
+ (showMcpDialog = true)} /> {/if}
- +
+ +
{#if isLoading} + {/snippet} + + {#each filteredMcpServers() as server (server.id)} + {@const healthState = mcpGetHealthCheckState(server.id)} + {@const hasError = healthState.status === 'error'} + {@const isEnabledForChat = isServerEnabledForChat(server)} + {@const hasOverride = hasPerChatOverride(server.id)} + +
+
+ {#if getFaviconUrl(server)} + { + (e.currentTarget as HTMLImageElement).style.display = 'none'; + }} + /> + {/if} + {getServerDisplayName(server)} + {#if hasError} + Error + {:else if server.enabled} + Global + {/if} +
+ toggleServerForChat(server.id, server.enabled)} + disabled={hasError} + class={hasOverride ? 'ring-2 ring-primary/50 ring-offset-1' : ''} + /> +
+ {/each} + + {#snippet footer()} + + + Manage MCP Servers + + {/snippet} + diff --git a/tools/server/webui/src/lib/components/app/misc/MarkdownContent.svelte b/tools/server/webui/src/lib/components/app/misc/MarkdownContent.svelte index 8b2f39eebd..b6d7e0685f 100644 --- a/tools/server/webui/src/lib/components/app/misc/MarkdownContent.svelte +++ b/tools/server/webui/src/lib/components/app/misc/MarkdownContent.svelte @@ -677,25 +677,33 @@ /* Code blocks */ div :global(.code-block-wrapper) { + scrollbar-width: thin; + scrollbar-gutter: stable; margin: 1.5rem 0; border-radius: 0.75rem; - overflow: hidden; - border: 1px solid var(--border); + overflow: auto; + border: 1px solid color-mix(in oklch, var(--border) 30%, transparent); background: var(--code-background); + box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); + max-height: calc(100dvh - var(--chat-form-area-height)); + } + + :global(.dark) div :global(.code-block-wrapper) { + border-color: color-mix(in oklch, var(--border) 20%, transparent); } div :global(.code-block-header) { display: flex; justify-content: space-between; align-items: center; - padding: 0.5rem 1rem; - background: hsl(var(--muted) / 0.5); - border-bottom: 1px solid var(--border); + padding: 0.5rem 1rem 0; font-size: 0.875rem; + position: sticky; + top: 0; } div :global(.code-language) { - color: var(--code-foreground); + color: var(--color-foreground); font-weight: 500; font-family: ui-monospace, SFMono-Regular, 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, @@ -735,7 +743,7 @@ div :global(.code-block-wrapper pre) { background: transparent; - padding: 1rem; + padding: 0.5rem; margin: 0; overflow-x: auto; border-radius: 0; diff --git a/tools/server/webui/src/lib/components/app/misc/SearchableDropdownMenu.svelte b/tools/server/webui/src/lib/components/app/misc/SearchableDropdownMenu.svelte new file mode 100644 index 0000000000..37d975ee33 --- /dev/null +++ b/tools/server/webui/src/lib/components/app/misc/SearchableDropdownMenu.svelte @@ -0,0 +1,95 @@ + + + + + {@render trigger()} + + + +
+ +
+ +
+ {@render children()} + {#if isEmpty} +
{emptyMessage}
+ {/if} +
+ + {#if footer} + + {@render footer()} + {/if} +
+
diff --git a/tools/server/webui/src/lib/components/app/misc/SyntaxHighlightedCode.svelte b/tools/server/webui/src/lib/components/app/misc/SyntaxHighlightedCode.svelte index bc42f9dd1e..afdaea0dcb 100644 --- a/tools/server/webui/src/lib/components/app/misc/SyntaxHighlightedCode.svelte +++ b/tools/server/webui/src/lib/components/app/misc/SyntaxHighlightedCode.svelte @@ -75,7 +75,7 @@ style="max-height: {maxHeight}; max-width: {maxWidth};" > -
{@html highlightedHtml}
diff --git a/tools/server/webui/src/lib/components/app/models/ModelsSelector.svelte b/tools/server/webui/src/lib/components/app/models/ModelsSelector.svelte index efc9cd4e2f..c134f90542 100644 --- a/tools/server/webui/src/lib/components/app/models/ModelsSelector.svelte +++ b/tools/server/webui/src/lib/components/app/models/ModelsSelector.svelte @@ -1,8 +1,7 @@