diff --git a/apps/desktop/src/components/objects/ObjectBrowser.vue b/apps/desktop/src/components/objects/ObjectBrowser.vue index b348a823c..d37e75b26 100644 --- a/apps/desktop/src/components/objects/ObjectBrowser.vue +++ b/apps/desktop/src/components/objects/ObjectBrowser.vue @@ -439,9 +439,9 @@ const selectableRows = computed(() => rows.value.filter((row) => row.type === "T // at once, which stalls the UI on schemas with thousands of objects. const OBJECT_GRID_MIN_CARD_WIDTH = 160; // former `minmax(160px, 1fr)` floor const OBJECT_GRID_GAP = 12; // 0.75rem, former grid gap (both axes) -// Card height is variable: only timestamp/comment rows that actually appear in -// the current dataset contribute. objectGridRowHeight (below) adapts accordingly -// so the row slot is as tight as possible instead of always using the worst case. +// Card height is dataset-stable: if any object has timestamps/comments, every card +// reserves those slots (even when empty) so borders stay level across a row. +// objectGridRowHeight adapts to the dataset instead of always using the worst case. // Base: p-3 top+bottom(24) + icon h-11(44) + name(18) + type/bytes(18) + gap-1×2(8) = 112 // + optional timestamp row: text-[10px](15) + gap-1(4) = 19 // + optional comment row: text-[10px](15) + gap-1(4) = 19 @@ -2626,7 +2626,7 @@ function getObjectBrowserMenuItems(item: ObjectBrowserRow): ContextMenuItem[] {
0" class="object-browser-stat-badge object-browser-stat-badge-bytes rounded-full bg-muted px-1.5 py-0.5 text-[10px] font-medium tabular-nums text-muted-foreground">{{ formatObjectBrowserBytes(item.totalBytes) }}
-
+ +
{{ formatObjectBrowserTimestamp(item.created_at) }} · {{ formatObjectBrowserTimestamp(item.updated_at) }}
-
- {{ item.comment }} +
+ {{ item.comment?.trim() || "\u00A0" }}
@@ -3073,7 +3074,8 @@ function getObjectBrowserMenuItems(item: ObjectBrowserRow): ContextMenuItem[] { .object-browser-grid-row { display: grid; column-gap: 12px; - align-items: start; + /* Stretch so cards with/without comment share one border height in the row. */ + align-items: stretch; } .object-browser-icon-bg-table {