From 3817111f80b054ec87dd4b75aca439c1477e30e0 Mon Sep 17 00:00:00 2001 From: Till JS Date: Tue, 14 Apr 2026 14:58:10 +0200 Subject: [PATCH] feat(themes): redesign theme picker with gradient cards + beefy mode selector MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the shared ThemePage component inside the Themes workbench panel with a custom compact layout better suited to the narrow (~300px) panel context. ThemePage was designed for a full-width desktop route and reads as noisy/overloaded in a panel. Mode selector (Hell/Dunkel/System) — primary-fill active state with white icon+text (was subtle shadow-sm that barely registered in dark mode), fill-weight icons when active, equal-width pill buttons in a shared muted container. Theme cards (Option D — "Farbton-Karte") — swap the 2×5 overlapping color-dot preview for a large 16:10 gradient (primary → secondary in the effective mode), theme name overlaid bottom-left with text-shadow, subtle dark-overlay at the bottom for readability, white check badge in the corner when active, 2px primary border + glow ring for the active state. Hover lifts the card 1px. Renders all 8 variants (default + extended) in a uniform 2-column grid. Wallpaper tabs (Farben/Bilder/Upload + scope toggle) — restyle via scoped :global() overrides to match the mode selector: muted pill container, primary-fill active state, muted-foreground inactive. Previously these used .bg-surface + .shadow-sm which was nearly invisible against the panel background. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/lib/modules/themes/ListView.svelte | 277 ++++++++++++++++-- 1 file changed, 254 insertions(+), 23 deletions(-) diff --git a/apps/mana/apps/web/src/lib/modules/themes/ListView.svelte b/apps/mana/apps/web/src/lib/modules/themes/ListView.svelte index ce383b354..3679b0f17 100644 --- a/apps/mana/apps/web/src/lib/modules/themes/ListView.svelte +++ b/apps/mana/apps/web/src/lib/modules/themes/ListView.svelte @@ -1,29 +1,106 @@
- theme.setVariant(v)} - showModeSelector={true} - currentMode={theme.mode} - onModeChange={(m) => theme.setMode(m)} - showBackButton={false} - transparent={wallpaperStore.hasWallpaper} - > -
-

Hintergrund

- -
-
+ +
+

Modus

+
+ {#each modes as m} + {@const isActive = theme.mode === m.id} + + {/each} +
+
+ + +
+

Aktuelles Theme

+
+ {#each allVariants as variant (variant)} + {@const def = THEME_DEFINITIONS[variant]} + {@const isActive = theme.variant === variant} + + {/each} +
+
+ + +
+

Hintergrund

+ +