fix(downloads): harden queue controls and resumable replacement

Prevent queue action clicks from triggering row double-clicks, preserve aria2/yt-dlp resumable sidecars during duplicate replacement, and make aria2 require resume instead of silently restarting.

Add a persisted, accessible Folders collapse control with reduced-motion animation and regression coverage for replacement sidecar handling.

Fixes #11

Fixes #12

Closes #13

Refs #14
This commit is contained in:
NimBold
2026-07-11 20:07:33 +03:30
parent 1922db8ea0
commit 33375df2ff
9 changed files with 182 additions and 19 deletions
+69
View File
@@ -1143,6 +1143,75 @@ html[data-list-density="relaxed"] {
color: hsl(var(--text-muted));
}
.sidebar-section-label-toggle {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
border: 0;
background: transparent;
color: hsl(var(--text-muted));
cursor: default;
transition: color 140ms ease;
}
.sidebar-section-label-toggle:hover {
color: hsl(var(--text-secondary));
}
.sidebar-section-chevron {
flex-shrink: 0;
opacity: 0.8;
transform: rotate(0deg);
transition: transform 240ms cubic-bezier(0.22, 1, 0.36, 1), opacity 140ms ease;
}
.sidebar-section-chevron.is-collapsed {
transform: rotate(-90deg);
opacity: 0.58;
}
.sidebar-collapse-grid {
display: grid;
grid-template-rows: 1fr;
transition: grid-template-rows 240ms cubic-bezier(0.22, 1, 0.36, 1);
}
.sidebar-collapse-grid.is-collapsed {
grid-template-rows: 0fr;
}
.sidebar-collapse-content {
min-height: 0;
overflow: hidden;
opacity: 1;
transform: translateY(0);
transform-origin: top;
transition:
opacity 150ms ease,
transform 240ms cubic-bezier(0.22, 1, 0.36, 1),
visibility 0s linear 0s;
}
.sidebar-collapse-grid.is-collapsed .sidebar-collapse-content {
opacity: 0;
transform: translateY(-6px);
pointer-events: none;
visibility: hidden;
transition:
opacity 120ms ease,
transform 240ms cubic-bezier(0.22, 1, 0.36, 1),
visibility 0s linear 120ms;
}
@media (prefers-reduced-motion: reduce) {
.sidebar-section-chevron,
.sidebar-collapse-grid,
.sidebar-collapse-content {
transition: none;
}
}
.sidebar-section {
margin-bottom: 14px;
}