From 719b1768614bc48eaec3071344bddebc6883cdb3 Mon Sep 17 00:00:00 2001
From: TheGeneralist <180094941+thegeneralist01@users.noreply.github.com>
Date: Mon, 20 Jul 2026 13:33:19 +0200
Subject: [PATCH] feat(frontend): add SkeletonEntryRow with shimmer animation
Adds a new SkeletonEntryRow component that renders animated shimmer
placeholder cells matching the exact column layout of EntryRow
(col-added, col-title with icon circle, col-type pill, col-size,
col-url). CSS appended to styles.css using existing design tokens
(--paper-2, --line-soft, --paper-3) for the warm-toned shimmer.
---
frontend/src/components/SkeletonEntryRow.jsx | 22 ++++++++++++++
frontend/src/styles.css | 32 ++++++++++++++++++++
2 files changed, 54 insertions(+)
create mode 100644 frontend/src/components/SkeletonEntryRow.jsx
diff --git a/frontend/src/components/SkeletonEntryRow.jsx b/frontend/src/components/SkeletonEntryRow.jsx
new file mode 100644
index 0000000..b25e2d8
--- /dev/null
+++ b/frontend/src/components/SkeletonEntryRow.jsx
@@ -0,0 +1,22 @@
+export default function SkeletonEntryRow() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/frontend/src/styles.css b/frontend/src/styles.css
index cb5b7d2..9b8fe4f 100644
--- a/frontend/src/styles.css
+++ b/frontend/src/styles.css
@@ -2694,3 +2694,35 @@ select {
.preview-modal-newtab:hover { background: var(--field); color: var(--ink); }
/* Push content above the fixed AudioBar when it is visible */
body.has-audio-bar { padding-bottom: 56px; }
+
+/* ── Skeleton entry row ─────────────────────────────────────────────────── */
+@keyframes skeleton-shimmer {
+ 0% { background-position: 200% center; }
+ 100% { background-position: -200% center; }
+}
+
+.skeleton-cell {
+ display: inline-block;
+ border-radius: 3px;
+ background: linear-gradient(90deg, var(--paper-2) 25%, var(--line-soft) 50%, var(--paper-2) 75%);
+ background-size: 200% 100%;
+ animation: skeleton-shimmer 1.8s ease-in-out infinite;
+}
+
+/* Row container — flex row matching #entries-body > div layout */
+.skeleton-row {
+ display: flex;
+ align-items: center;
+ background: var(--paper-3);
+}
+.skeleton-row > div {
+ padding: 7px 10px;
+ flex-shrink: 0;
+ overflow: hidden;
+}
+.skeleton-row .col-added { padding-left: 22px; }
+.skeleton-row > div:last-child { padding-right: 22px; }
+
+@media (pointer: coarse) {
+ .skeleton-row .col-added { padding-left: 10px; }
+}