From 2362383275cf28178090254a968b6ad1d7b35aa8 Mon Sep 17 00:00:00 2001
From: Amr Mohammed El-Sheraey <141947355+AmrMsCLL@users.noreply.github.com>
Date: Thu, 5 Nov 2026 13:22:15 +0200
Subject: [PATCH] fix: aligned Backups tables and a stable scrollbar gutter
Every project's archive table, and the requests table, use fixed column widths,
so columns line up from card to card; actions sit on the right and narrow
screens scroll the table instead of squeezing it. The page and every scrolling
container reserve the scrollbar's space, so nothing shifts when a scrollbar
appears; the body padding MUI adds when a dialog locks scrolling is cancelled
because that space is already reserved.
---
app/src/web/pages/Backups.tsx | 56 ++++++++++++++++++++++-------------
app/src/web/styles.css | 15 ++++++++++
2 files changed, 51 insertions(+), 20 deletions(-)
diff --git a/app/src/web/pages/Backups.tsx b/app/src/web/pages/Backups.tsx
index 5a84489..0af199e 100644
--- a/app/src/web/pages/Backups.tsx
+++ b/app/src/web/pages/Backups.tsx
@@ -31,7 +31,7 @@ function Archive({ archive, onRestore }: { archive: BackupSummary; onRestore: ()
{bytes(archive.bytes)} |
{archive.bytes !== undefined && (
-
+
download
@@ -117,24 +117,33 @@ export function Backups() {
{data.requests.length > 0 && (
Recent requests
-
-
- {data.requests.map((entry) => (
-
- |
-
- |
-
- {entry.action} {entry.project}
- {entry.archive && {entry.archive}}
- |
- {entry.by} |
- {entry.output} |
- {entry.at && timeAgo(entry.at)} |
-
- ))}
-
-
+
+
+
+
+
+
+
+
+
+
+ {data.requests.map((entry) => (
+
+ |
+
+ |
+
+ {entry.action} {entry.project}
+ {entry.archive && {entry.archive}}
+ |
+ {entry.by} |
+ {entry.output} |
+ {entry.at && timeAgo(entry.at)} |
+
+ ))}
+
+
+
)}
{data.projects.map(({ project, archives }) => (
@@ -146,7 +155,14 @@ export function Backups() {
-
+
+
+
+
+
+
+
+
| taken |
diff --git a/app/src/web/styles.css b/app/src/web/styles.css
index ead8ad8..0bae120 100644
--- a/app/src/web/styles.css
+++ b/app/src/web/styles.css
@@ -3,6 +3,21 @@
@import '@xterm/xterm/css/xterm.css';
@source '../../node_modules/@project-graphite/ui/dist';
+@layer base {
+ html,
+ .overflow-auto,
+ .overflow-y-auto,
+ .overflow-scroll,
+ .overflow-y-scroll,
+ .log-frame {
+ scrollbar-gutter: stable;
+ }
+
+ body {
+ padding-right: 0 !important;
+ }
+}
+
@layer components {
.stat-card {
@apply rounded-xl border border-line bg-surface p-4;
|