From c07c0fbdf75ed44e335e4a7dea79d0d32986beba Mon Sep 17 00:00:00 2001 From: Sucukdeluxe Date: Mon, 2 Mar 2026 23:21:21 +0100 Subject: [PATCH] Dual-layer text on progress bars: dark text on bar, light text on track (JDownloader style) Co-Authored-By: Claude Opus 4.6 --- package.json | 2 +- src/renderer/App.tsx | 14 +++++++++--- src/renderer/styles.css | 50 ++++++++++++++++++++++++++++++++++------- 3 files changed, 54 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index a07f44b..b4ac694 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "real-debrid-downloader", - "version": "1.5.30", + "version": "1.5.31", "description": "Real-Debrid Downloader Desktop (Electron + React + TypeScript)", "main": "build/main/main/main.js", "author": "Sucukdeluxe", diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index 4b077a8..fee5211 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -2180,10 +2180,12 @@ export function App(): ReactElement { {entry.status === "completed" ? "100%" : "-"} {(() => { const pct = entry.totalBytes > 0 ? Math.min(100, Math.round((entry.downloadedBytes / entry.totalBytes) * 100)) : 0; + const label = `${humanSize(entry.downloadedBytes)} / ${humanSize(entry.totalBytes)}`; return entry.totalBytes > 0 ? ( - {humanSize(entry.downloadedBytes)} / {humanSize(entry.totalBytes)} + {label} + {label} ) : "-"; })()} @@ -2810,16 +2812,19 @@ const PackageCard = memo(function PackageCard({ pkg, items, packageSpeed, isFirs {dlProgress}% + {dlProgress}% {(() => { const totalBytes = items.reduce((sum, item) => sum + (item.totalBytes || item.downloadedBytes || 0), 0); const dlBytes = items.reduce((sum, item) => sum + (item.downloadedBytes || 0), 0); const pct = totalBytes > 0 ? Math.min(100, Math.round((dlBytes / totalBytes) * 100)) : 0; + const label = `${humanSize(dlBytes)} / ${humanSize(totalBytes)}`; return totalBytes > 0 ? ( - {humanSize(dlBytes)} / {humanSize(totalBytes)} + {label} + {label} ) : "-"; })()} @@ -2849,6 +2854,7 @@ const PackageCard = memo(function PackageCard({ pkg, items, packageSpeed, isFirs {item.progressPercent}% + {item.progressPercent}% ) : "-"} @@ -2856,10 +2862,12 @@ const PackageCard = memo(function PackageCard({ pkg, items, packageSpeed, isFirs const total = item.totalBytes || item.downloadedBytes || 0; const dl = item.downloadedBytes || 0; const pct = total > 0 ? Math.min(100, Math.round((dl / total) * 100)) : 0; + const label = `${humanSize(dl)} / ${humanSize(total)}`; return total > 0 ? ( - {humanSize(dl)} / {humanSize(total)} + {label} + {label} ) : "-"; })()} diff --git a/src/renderer/styles.css b/src/renderer/styles.css index c7f6b5d..d44b8fe 100644 --- a/src/renderer/styles.css +++ b/src/renderer/styles.css @@ -669,18 +669,36 @@ body, align-items: center; justify-content: center; font-size: 10px; - font-weight: 600; + font-weight: 700; font-variant-numeric: tabular-nums; - color: var(--text); - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + color: var(--muted); white-space: nowrap; + z-index: 1; +} + +.progress-size-text-filled { + position: absolute; + top: 0; + left: 0; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + font-size: 10px; + font-weight: 700; + font-variant-numeric: tabular-nums; + color: #0a0f1a; + white-space: nowrap; + z-index: 2; + overflow: hidden; } .progress-size-small { height: 14px; } -.progress-size-small .progress-size-text { +.progress-size-small .progress-size-text, +.progress-size-small .progress-size-text-filled { font-size: 9px; } @@ -714,16 +732,32 @@ body, align-items: center; justify-content: center; font-size: 11px; - font-weight: 600; - color: var(--text); - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + font-weight: 700; + color: var(--muted); + z-index: 1; +} + +.progress-inline-text-filled { + position: absolute; + top: 0; + left: 0; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + font-size: 11px; + font-weight: 700; + color: #0a0f1a; + z-index: 2; + overflow: hidden; } .progress-inline-small { height: 14px; } -.progress-inline-small .progress-inline-text { +.progress-inline-small .progress-inline-text, +.progress-inline-small .progress-inline-text-filled { font-size: 10px; }