From 11f8afead890cbe3b901002f79b0f2373761a5b9 Mon Sep 17 00:00:00 2001 From: Benson Wong Date: Sat, 27 Jun 2026 23:54:18 +0000 Subject: [PATCH] ui: add collapsible Models section to sidebar Move Models to the top of the sidebar as a collapsible item with each model listed as a sub-item. - add persistent modelsMenuOpen store for expand state - show status dot per model (grey/yellow/green for stopped/changing/loaded) - right-aligned load/unload button with Play/PowerOff/Loader2 icon - button stops propagation so it doesn't trigger navigation --- ui-svelte/src/components/AppSidebar.svelte | 125 ++++++++++++++++++--- ui-svelte/src/stores/sidebar.ts | 3 + 2 files changed, 115 insertions(+), 13 deletions(-) create mode 100644 ui-svelte/src/stores/sidebar.ts diff --git a/ui-svelte/src/components/AppSidebar.svelte b/ui-svelte/src/components/AppSidebar.svelte index 356981f7..603f4d67 100644 --- a/ui-svelte/src/components/AppSidebar.svelte +++ b/ui-svelte/src/components/AppSidebar.svelte @@ -1,16 +1,21 @@ @@ -58,6 +108,66 @@ + + modelsMenuOpen.set(v)} + class="gap-0" + > + + {#snippet child({ props })} + + + Models + + + {/snippet} + + + + {#each $models as model (model.id)} + + + {#snippet child({ props })} + + + {model.id} + + + {/snippet} + + + {/each} + + + + + - - - {#snippet child({ props })} - - - Models - - {/snippet} - - - {#snippet child({ props })} diff --git a/ui-svelte/src/stores/sidebar.ts b/ui-svelte/src/stores/sidebar.ts new file mode 100644 index 00000000..6d713bcd --- /dev/null +++ b/ui-svelte/src/stores/sidebar.ts @@ -0,0 +1,3 @@ +import { persistentStore } from "./persistent"; + +export const modelsMenuOpen = persistentStore("models-menu-open", true);