diff --git a/tools/server/webui/src/lib/components/app/misc/ConversationSelection.svelte b/tools/server/webui/src/lib/components/app/misc/ConversationSelection.svelte
index 21412f47e5..a0f1101fd8 100644
--- a/tools/server/webui/src/lib/components/app/misc/ConversationSelection.svelte
+++ b/tools/server/webui/src/lib/components/app/misc/ConversationSelection.svelte
@@ -1,8 +1,7 @@
-
-
-
-
-
- {#if searchQuery}
-
- {/if}
-
+
diff --git a/tools/server/webui/src/lib/components/ui/button/button.svelte b/tools/server/webui/src/lib/components/ui/button/button.svelte
index 5ced3eb9a0..f25c9e2116 100644
--- a/tools/server/webui/src/lib/components/ui/button/button.svelte
+++ b/tools/server/webui/src/lib/components/ui/button/button.svelte
@@ -9,7 +9,7 @@
variant: {
default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',
destructive:
- 'bg-destructive shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white',
+ 'bg-destructive shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white!',
outline:
'bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border',
secondary:
diff --git a/tools/server/webui/src/lib/components/ui/sidebar/sidebar.svelte b/tools/server/webui/src/lib/components/ui/sidebar/sidebar.svelte
index 6982daeac5..32bcf1249a 100644
--- a/tools/server/webui/src/lib/components/ui/sidebar/sidebar.svelte
+++ b/tools/server/webui/src/lib/components/ui/sidebar/sidebar.svelte
@@ -86,14 +86,14 @@
side === 'left'
? 'left-3 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-0.775)] group-data-[collapsible=offcanvas]:opacity-0'
: 'right-3 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-0.775)] group-data-[collapsible=offcanvas]:opacity-0',
- 'my-3 overflow-hidden rounded-2xl border border-sidebar-border shadow-md',
- ]
+ 'my-3 overflow-hidden rounded-2xl border border-sidebar-border shadow-md'
+ ]
: [
- 'transition-[left,right,width] h-svh',
+ 'h-svh transition-[left,right,width]',
side === 'left'
? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'
- : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',
- ],
+ : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]'
+ ],
// Adjust the padding for inset variant.
variant === 'inset'
? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'
diff --git a/tools/server/webui/src/routes/+layout.svelte b/tools/server/webui/src/routes/+layout.svelte
index a4566dfa94..a455a79c9c 100644
--- a/tools/server/webui/src/routes/+layout.svelte
+++ b/tools/server/webui/src/routes/+layout.svelte
@@ -11,7 +11,7 @@
DialogConversationTitleUpdate,
DialogChatSettingsImportExport
} from '$lib/components/app';
- import { Settings, Search, SquarePen } from '@lucide/svelte';
+ import { Database, Settings, Search, SquarePen } from '@lucide/svelte';
import { Button } from '$lib/components/ui/button';
import { isLoading } from '$lib/stores/chat.svelte';
import { conversationsStore, activeMessages } from '$lib/stores/conversations.svelte';
@@ -36,10 +36,6 @@
let { children } = $props();
- let isChatRoute = $derived(page.route.id === '/chat/[id]');
- let isHomeRoute = $derived(page.route.id === '/');
- let isNewChatMode = $derived(page.url.searchParams.get('new_chat') === 'true');
- let showSidebarByDefault = $derived(activeMessages().length > 0 || isLoading());
let alwaysShowSidebarOnDesktop = $derived(config().alwaysShowSidebarOnDesktop);
let isMobile = new IsMobile();
let isDesktop = $derived(!isMobile.current);
@@ -57,7 +53,9 @@
let activePanel = $state<'chat' | 'settings' | 'mcp'>('chat');
let isMcpActive = $derived(page.route.id === '/settings/mcp');
+ let isImportExportActive = $derived(page.route.id === '/settings/import-export');
let isSettingsActive = $derived(page.route.id === '/settings/chat');
+ let isSettingsRoute = $derived(!!page.route.id?.startsWith('/settings'));
// let chatSettingsInitialSection = $state(undefined);
let chatSettingsRef: ChatSettings | undefined = $state();
let importExportDialogOpen = $state(false);
@@ -269,7 +267,7 @@
- {#if !(alwaysShowSidebarOnDesktop && isDesktop)}
+ {#if !(alwaysShowSidebarOnDesktop && isDesktop) && !(isSettingsRoute && !isDesktop)}
+
+
+
+
+
{/if}
- {#if !sidebarOpen && !isDesktop}
-
-
-
-
-
- {/if}
+
{@render children?.()}
diff --git a/tools/server/webui/src/routes/settings/+layout.svelte b/tools/server/webui/src/routes/settings/+layout.svelte
new file mode 100644
index 0000000000..9d68f58967
--- /dev/null
+++ b/tools/server/webui/src/routes/settings/+layout.svelte
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+ {@render children?.()}
+
+
diff --git a/tools/server/webui/src/routes/settings/import-export/+page.svelte b/tools/server/webui/src/routes/settings/import-export/+page.svelte
new file mode 100644
index 0000000000..c85143b11a
--- /dev/null
+++ b/tools/server/webui/src/routes/settings/import-export/+page.svelte
@@ -0,0 +1,7 @@
+
+
+
+
+