From 58466e049e0e4dfec8abc3f6a4d54124ec4c7ab0 Mon Sep 17 00:00:00 2001 From: Freedom <48708512+xddcode@users.noreply.github.com> Date: Tue, 14 Jul 2026 19:03:35 +0800 Subject: [PATCH] fix(objects): keep grid tile cards equal height --- .../src/components/objects/ObjectBrowser.vue | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) 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[] {