From eba5f9eda387a0cb0f8ad3a1ef98d4eaefc60560 Mon Sep 17 00:00:00 2001
From: Stan Runge
Date: Sun, 25 Oct 2026 17:41:10 +0000
Subject: [PATCH] =?UTF-8?q?start:=20one-container=20stacks=20as=20a=20sing?=
=?UTF-8?q?le=20row=20(project=20=C2=B7=20service),=20groups=20only=20for?=
=?UTF-8?q?=20multi-container=20stacks;=20same=20memory=20units=20in=20row?=
=?UTF-8?q?s=20and=20headers?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/routes/start/+page.svelte | 112 +++++++++++++++++++++++++---------
1 file changed, 84 insertions(+), 28 deletions(-)
diff --git a/src/routes/start/+page.svelte b/src/routes/start/+page.svelte
index 974864b..5887e94 100644
--- a/src/routes/start/+page.svelte
+++ b/src/routes/start/+page.svelte
@@ -528,36 +528,57 @@
{#each containerGroups as g (g.key)}
-
toggleStack(g.key, e.currentTarget.open)}
- >
-
+ {@const c = g.items[0]}
+
-
-
{g.name}
-
{g.up}/{g.items.length}
+
{g.name}{#if c.service && c.service !== g.name}
+ · {c.service}{/if}
-
{g.cpu ? `${g.cpu.toFixed(2)}%` : ''}
-
{g.mem ? bytes(g.mem) : ''}
-
-
- {#each g.items as c (c.name)}
- -
-
- {label(c)}
- {#if c.restarts}↻{c.restarts}{/if}
- {c.cpu ?? ''}
- {c.mem ?? ''}
-
- {/each}
-
-
+ {#if c.restarts}
↻{c.restarts}{/if}
+
{c.cpu ?? ''}
+
{c.mem ? bytes(memBytes(c.mem)) : ''}
+
+ {:else}
+ toggleStack(g.key, e.currentTarget.open)}
+ >
+
+
+ {g.name}
+ {g.up}/{g.items.length}
+ {g.cpu ? `${g.cpu.toFixed(2)}%` : ''}
+ {g.mem ? bytes(g.mem) : ''}
+
+
+ {#each g.items as c (c.name)}
+ -
+
+ {label(c)}
+ {#if c.restarts}↻{c.restarts}{/if}
+ {c.cpu ?? ''}
+ {c.mem ? bytes(memBytes(c.mem)) : ''}
+
+ {/each}
+
+
+ {/if}
{/each}
{:else}
@@ -1006,6 +1027,40 @@
display: grid;
gap: 2px;
}
+ .stack.solo {
+ display: flex;
+ align-items: center;
+ gap: 5px;
+ /* line up with group headers, whose chevron sits where this padding is */
+ padding: 3px 6px 3px 18px;
+ border-radius: 6px;
+ border: 1px solid transparent;
+ font-size: 11px;
+ text-transform: uppercase;
+ letter-spacing: 0.04em;
+ color: var(--site-muted);
+ transition:
+ background 120ms ease,
+ border-color 120ms ease,
+ color 120ms ease;
+ }
+ .stack.solo:hover {
+ background: rgba(255, 255, 255, 0.04);
+ border-color: var(--line);
+ color: var(--site-text);
+ }
+ .stack.solo .dot {
+ margin-right: 0;
+ }
+ .stack.solo small {
+ opacity: 0.7;
+ text-transform: none;
+ }
+ .stack.solo .num {
+ font-size: 11px;
+ text-transform: none;
+ letter-spacing: 0;
+ }
.group.stack > summary {
align-items: center;
gap: 5px;
@@ -1024,6 +1079,7 @@
.group.stack > summary .dot {
margin-right: 0;
}
+ .stack.solo .sname,
.group.stack .sname {
flex: 1;
min-width: 0;