{artistLabel}
{@render itemActions(artistItem, "artist")} {#if artistInfo} {@render externalLinks(artistInfo, "artist")} {/if}{artistInfo.biography}
{/if}
{#snippet externalLinks(
info: { musicBrainzId?: string; lastFmUrl?: string },
type: "artist" | "recording" | "release",
)}
{#if info.musicBrainzId || info.lastFmUrl}
{#if info.musicBrainzId}
MusicBrainz
{/if}
{#if info.lastFmUrl}
Last.fm
{/if}
{/if}
{/snippet}
{#snippet infoNavButton(
type: "album" | "artist",
id: string,
label: string,
)}
{#if id}
{:else}
{label}
{/if}
{/snippet}
{#snippet libraryItem(
type: StarredType,
item: LibraryItem,
fetcher: (() => Promise {t("common.busy")} {error} {artistInfo.biography} {albumInfo.notes} fadeImage(element, coverArtId)}
>
{/snippet}
{#snippet itemActions(
item: StarredItem,
type: StarredType,
)}
{JSON.stringify(details, null, 2)}
{:else}
{artistLabel}
{@render itemActions(artistItem, "artist")}
{#if artistInfo}
{@render externalLinks(artistInfo, "artist")}
{/if}
{songItem.title}
{#if songItem.year !== undefined}
({songItem.year})
{/if}
{#if albumLabel || artistLabel}
{/if}
{@render itemActions(songItem, "song")}
{@render externalLinks(songItem, "recording")}
{albumLabel}
{#if albumItem.year !== undefined}
({albumItem.year})
{/if}
{#if artistLabel}
{/if}
{@render itemActions(albumItem, "album")}
{#if albumInfo}
{@render externalLinks(albumInfo, "release")}
{/if}
API
{JSON.stringify({ item: details, artistInfo, albumInfo, artistAlbums }, null, 2)}