diff --git a/web/src/lib/components/layout/FolderTree.svelte b/web/src/lib/components/layout/FolderTree.svelte index df1781d..3f1ff1d 100644 --- a/web/src/lib/components/layout/FolderTree.svelte +++ b/web/src/lib/components/layout/FolderTree.svelte @@ -110,15 +110,15 @@
{#if hasChildren} - {:else} + {:else if depth > 0} + {/if} + {/each} +
+ + + + diff --git a/web/src/lib/components/layout/LeftSidebar.svelte b/web/src/lib/components/layout/LeftSidebar.svelte index 071fef2..0b56648 100644 --- a/web/src/lib/components/layout/LeftSidebar.svelte +++ b/web/src/lib/components/layout/LeftSidebar.svelte @@ -2,6 +2,7 @@ import { goto } from '$app/navigation'; import { page } from '$app/state'; import { createMutation, createQuery, useQueryClient } from '@tanstack/svelte-query'; + import { mode, toggleMode } from 'mode-watcher'; import { toast } from 'svelte-sonner'; import { createFolder, @@ -12,6 +13,7 @@ heapDownloadUrl, listFolders, listHeaps, + logout, renameFolder, renameHeap, triggerDownload, @@ -24,11 +26,23 @@ setSection, type Section } from '$lib/stores/filters.svelte'; - import { isAuthenticated } from '$lib/stores/session.svelte'; + import { isAuthenticated, session } from '$lib/stores/session.svelte'; import FolderTree, { buildTree } from './FolderTree.svelte'; + import GeneralSettingsDialog from './GeneralSettingsDialog.svelte'; import HeapConvertDialog from './HeapConvertDialog.svelte'; import KebabMenu, { Item, Separator } from './KebabMenu.svelte'; - import { Copy, Download, FolderInput, Pencil, Trash2 } from 'lucide-svelte'; + import SettingsDialog from './SettingsDialog.svelte'; + import { + Copy, + Download, + FolderInput, + LogOut, + Moon, + Pencil, + Settings, + Sun, + Trash2 + } from 'lucide-svelte'; const qc = useQueryClient(); @@ -88,6 +102,18 @@ // mounts ; the dialog clears it on close. let convertingHeap = $state(null); + // Library/admin settings dialog visibility. + let settingsOpen = $state(false); + + // App-wide preferences dialog (theme etc.). Distinct from the library + // admin dialog above — opened from the bottom-of-sidebar footer. + let generalSettingsOpen = $state(false); + + async function onSignOut() { + await logout(); + await goto('/login', { replaceState: true }); + } + async function navigateTo(section: Section, heapUid: string | null = null) { setSection(section, heapUid); setFolderPath(null); @@ -220,7 +246,8 @@ } -