mirror of
https://github.com/markuryy/shark.git
synced 2025-12-12 11:41:02 +00:00
feat(ui): sequential playlist track numbering and banner panel
This commit is contained in:
@@ -11,6 +11,7 @@
|
|||||||
selectedTrackIndex?: number | null;
|
selectedTrackIndex?: number | null;
|
||||||
onTrackClick?: (index: number) => void;
|
onTrackClick?: (index: number) => void;
|
||||||
showAlbumColumn?: boolean;
|
showAlbumColumn?: boolean;
|
||||||
|
useSequentialNumbers?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
let {
|
let {
|
||||||
@@ -21,7 +22,8 @@
|
|||||||
tracks,
|
tracks,
|
||||||
selectedTrackIndex = null,
|
selectedTrackIndex = null,
|
||||||
onTrackClick,
|
onTrackClick,
|
||||||
showAlbumColumn = false
|
showAlbumColumn = false,
|
||||||
|
useSequentialNumbers = false
|
||||||
}: Props = $props();
|
}: Props = $props();
|
||||||
|
|
||||||
function getThumbnailUrl(coverPath?: string): string {
|
function getThumbnailUrl(coverPath?: string): string {
|
||||||
@@ -100,7 +102,7 @@
|
|||||||
onclick={() => handleTrackClick(i)}
|
onclick={() => handleTrackClick(i)}
|
||||||
>
|
>
|
||||||
<td class="track-number">
|
<td class="track-number">
|
||||||
{track.metadata.trackNumber ?? i + 1}
|
{useSequentialNumbers ? i + 1 : (track.metadata.trackNumber ?? i + 1)}
|
||||||
</td>
|
</td>
|
||||||
<td>{track.metadata.title ?? '—'}</td>
|
<td>{track.metadata.title ?? '—'}</td>
|
||||||
{#if showAlbumColumn}
|
{#if showAlbumColumn}
|
||||||
@@ -206,6 +208,13 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
thead {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
z-index: 1;
|
||||||
|
background: #121212;
|
||||||
|
}
|
||||||
|
|
||||||
th {
|
th {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
let playlists = $state<Playlist[]>([]);
|
let playlists = $state<Playlist[]>([]);
|
||||||
let playlistsLoadTimestamp = $state<number>(0);
|
let playlistsLoadTimestamp = $state<number>(0);
|
||||||
|
let showBanner = $state(false);
|
||||||
|
|
||||||
// Count active downloads (queued or downloading)
|
// Count active downloads (queued or downloading)
|
||||||
let activeDownloads = $derived(
|
let activeDownloads = $derived(
|
||||||
@@ -149,9 +150,17 @@
|
|||||||
</nav>
|
</nav>
|
||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
<main class="content-area sunken-panel">
|
<div class="right-column">
|
||||||
{@render children?.()}
|
<main class="content-area sunken-panel">
|
||||||
</main>
|
{@render children?.()}
|
||||||
|
</main>
|
||||||
|
|
||||||
|
{#if showBanner}
|
||||||
|
<div class="banner-panel sunken-panel">
|
||||||
|
Banner content here
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="status-text">Ready</div>
|
<div class="status-text">Ready</div>
|
||||||
@@ -230,15 +239,32 @@
|
|||||||
padding-left: 8px;
|
padding-left: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content-area {
|
.right-column {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-area {
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
font-family: "Pixelated MS Sans Serif", Arial;
|
font-family: "Pixelated MS Sans Serif", Arial;
|
||||||
background: #121212;
|
background: #121212;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.banner-panel {
|
||||||
|
flex-shrink: 0;
|
||||||
|
height: 120px;
|
||||||
|
padding: 8px;
|
||||||
|
font-family: "Pixelated MS Sans Serif", Arial;
|
||||||
|
background: #121212;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
.status-text {
|
.status-text {
|
||||||
padding: 6px 8px 10px 10px;
|
padding: 6px 8px 10px 10px;
|
||||||
font-family: "Pixelated MS Sans Serif", Arial;
|
font-family: "Pixelated MS Sans Serif", Arial;
|
||||||
|
|||||||
@@ -94,6 +94,7 @@
|
|||||||
{selectedTrackIndex}
|
{selectedTrackIndex}
|
||||||
onTrackClick={handleTrackClick}
|
onTrackClick={handleTrackClick}
|
||||||
showAlbumColumn={true}
|
showAlbumColumn={true}
|
||||||
|
useSequentialNumbers={true}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user