From d56bdc830386712da93d1fc686151d1205702966 Mon Sep 17 00:00:00 2001 From: fullstackjam Date: Fri, 26 Jun 2026 13:21:21 +0800 Subject: [PATCH] style(ui): redesign dashboard as list-rows with package DNA bar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Aligns the dashboard with the updated OpenBoot Redesign mockup. Configs now render as a single-column list of rows instead of a card grid. Each row shows a package "DNA" bar (cli/cask/npm segments, brightening within each group), right-aligned stats, and a hero click-to-copy install command alongside edit and more (…) actions. - Add ConfigRow.svelte for the new dashboard row - Switch dashboard from ConfigCard grid to a ConfigRow column list - Add a backward-compatible `square` trigger variant to ContextMenu - Align the dashboard stats line tokens to the mockup Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Rp5Ri2TcfaCozPfpkrTDkw --- src/lib/components/ConfigRow.svelte | 332 ++++++++++++++++++++++++++ src/lib/components/ContextMenu.svelte | 14 +- src/routes/dashboard/+page.svelte | 35 +-- 3 files changed, 356 insertions(+), 25 deletions(-) create mode 100644 src/lib/components/ConfigRow.svelte diff --git a/src/lib/components/ConfigRow.svelte b/src/lib/components/ConfigRow.svelte new file mode 100644 index 0000000..907e115 --- /dev/null +++ b/src/lib/components/ConfigRow.svelte @@ -0,0 +1,332 @@ + + +
+
+
+
+

{config.name}

+ {config.visibility} +
+ {#if dna.length > 0} + + {/if} + {#if config.description} +

{config.description}

+ {/if} +
+ +
+ + + {config.install_count ?? 0} + + {cli} cli · {apps} apps + updated {formatDate(config.updated_at)} +
+
+ +
+ + + onaction(action, config.slug)} /> +
+
+ + diff --git a/src/lib/components/ContextMenu.svelte b/src/lib/components/ContextMenu.svelte index 0b97f22..36dc812 100644 --- a/src/lib/components/ContextMenu.svelte +++ b/src/lib/components/ContextMenu.svelte @@ -5,9 +5,10 @@ danger?: boolean; } - let { items, onselect }: { + let { items, onselect, square = false }: { items: MenuItem[]; onselect: (action: string) => void; + square?: boolean; } = $props(); let open = $state(false); @@ -36,7 +37,7 @@
- + {#if open} {:else} -
- {#each configs as config, i} +
+ {#each configs as config, i (config.id)}
-