Improve track dialog layout with responsive grid and cleaner status alignment
This commit is contained in:
parent
b021df31b4
commit
7815051e5d
2 changed files with 97 additions and 14 deletions
|
|
@ -198,10 +198,12 @@ async function openAlbumDialog(albumId, preselectedTrackNames = [], context = nu
|
|||
row.className = 'track-row';
|
||||
const isChecked = preselected.size > 0 ? preselected.has(track.name) : true;
|
||||
row.innerHTML = `
|
||||
<input type="checkbox" ${isChecked ? 'checked' : ''} data-track-name="${track.name.replace(/"/g, '"')}" data-exists="${Boolean(track.exists)}" />
|
||||
<span>${track.trackNumber}. ${track.name}</span>
|
||||
<small>(${formatDuration(track.durationMs)})</small>
|
||||
${pill(Boolean(track.exists))}
|
||||
<input class="track-check" type="checkbox" ${isChecked ? 'checked' : ''} data-track-name="${track.name.replace(/"/g, '"')}" data-exists="${Boolean(track.exists)}" />
|
||||
<span class="track-main">
|
||||
<span class="track-title">${track.trackNumber}. ${track.name}</span>
|
||||
<span class="track-meta">${formatDuration(track.durationMs)}</span>
|
||||
</span>
|
||||
<span class="track-status">${pill(Boolean(track.exists))}</span>
|
||||
`;
|
||||
const input = row.querySelector('input');
|
||||
input.addEventListener('change', updateDialogActionButton);
|
||||
|
|
|
|||
|
|
@ -167,42 +167,123 @@ button:hover {
|
|||
|
||||
dialog {
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 12px;
|
||||
border-radius: 16px;
|
||||
background: #0b1220;
|
||||
color: var(--text);
|
||||
width: min(620px, 95vw);
|
||||
width: min(760px, 96vw);
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.dialog-content {
|
||||
display: grid;
|
||||
gap: 0.6rem;
|
||||
gap: 0.8rem;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.track-list {
|
||||
max-height: 45vh;
|
||||
max-height: min(58vh, 640px);
|
||||
overflow: auto;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 8px;
|
||||
padding: 0.5rem;
|
||||
border-radius: 12px;
|
||||
padding: 0.6rem;
|
||||
display: grid;
|
||||
gap: 0.3rem;
|
||||
gap: 0.45rem;
|
||||
background: #0a1323;
|
||||
}
|
||||
|
||||
.track-row {
|
||||
display: flex;
|
||||
display: grid;
|
||||
grid-template-columns: 32px minmax(0, 1fr) auto;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
gap: 0.65rem;
|
||||
border: 1px solid #1f2f49;
|
||||
border-radius: 10px;
|
||||
padding: 0.5rem 0.6rem;
|
||||
background: #0d1a2e;
|
||||
}
|
||||
|
||||
.track-row:hover {
|
||||
border-color: #34517a;
|
||||
background: #10203a;
|
||||
}
|
||||
|
||||
.track-check {
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.track-main {
|
||||
min-width: 0;
|
||||
display: grid;
|
||||
gap: 0.1rem;
|
||||
}
|
||||
|
||||
.track-title {
|
||||
font-size: 1.02rem;
|
||||
font-weight: 600;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.track-meta {
|
||||
color: var(--muted);
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
.track-status {
|
||||
justify-self: end;
|
||||
}
|
||||
|
||||
.dialog-actions {
|
||||
margin-top: 0.7rem;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 0.5rem;
|
||||
position: sticky;
|
||||
bottom: 0;
|
||||
background: linear-gradient(180deg, rgba(11, 18, 32, 0.7), rgba(11, 18, 32, 1));
|
||||
padding-top: 0.6rem;
|
||||
}
|
||||
|
||||
@media (max-width: 680px) {
|
||||
.search-row {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
dialog {
|
||||
width: 98vw;
|
||||
}
|
||||
|
||||
.dialog-content {
|
||||
padding: 0.8rem;
|
||||
}
|
||||
|
||||
.track-row {
|
||||
grid-template-columns: 28px minmax(0, 1fr);
|
||||
grid-template-areas:
|
||||
"check title"
|
||||
"check status";
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.track-check {
|
||||
grid-area: check;
|
||||
margin-top: 0.15rem;
|
||||
}
|
||||
|
||||
.track-main {
|
||||
grid-area: title;
|
||||
}
|
||||
|
||||
.track-title {
|
||||
white-space: normal;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
.track-status {
|
||||
grid-area: status;
|
||||
justify-self: start;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue