{"release_id":"01a1c502-4ad1-0000-ec62-adc54d3c69aa","chunk_id":"01a1c502-4bc9-7841-aaf7-b2183a0c8c18","file":"B1-mZWRk.mjs","mappings":"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","names":["klass","surface","eager","$.prop","$$props","locked","a","root","header","$.child","getAvatarUrl","DuelAvatar","node","div","$.sibling","span","div_1","AlbumCoverMedia","$$anchor","div_2","root_2","$$render","consequent","alternate","div_3","node_1","span_1","node_2","svg","root_3","consequent_1","span_2","$.reset","node_3","span_3","root_4","node_4","TokenCoin","$.append","consequent_2","div_4","div_5","p","p_1","$.template_effect","$0","$.set_text","text_5","consequent_3","alternate_1","span_4","node_6","consequent_4","alternate_2","$.action","$$node","$$action_arg","albumImpression","$.set_attribute","$.set_class","$.get","albumCountLabel","$.delegated","recordAlbumClick"],"sources":["../../../../../../src/lib/components/album/AlbumRichCard.svelte"],"sourcesContent":["<script lang=\"ts\">\n\timport type { AlbumCard } from '$lib/types/album';\n\timport { albumCountLabel } from '$lib/types/album';\n\timport TokenCoin from '$lib/components/TokenCoin.svelte';\n\timport { getAvatarUrl } from '$lib/avatar';\n\timport DuelAvatar from '$lib/components/duel/DuelAvatar.svelte';\n\timport AlbumCoverMedia from '$lib/components/album/AlbumCoverMedia.svelte';\n\timport {\n\t\talbumImpression,\n\t\trecordAlbumClick,\n\t\ttype AlbumSurface\n\t} from '$lib/album-impressions';\n\n\t// The canonical paid-album card: creator header, cover (poster for video),\n\t// photo count, lock/price, title, unlock state + CTA. Shared verbatim between\n\t// the /f feed carousel and the /albums marketplace so both read identically.\n\t// `class` lets the caller add layout sizing (rail flex-basis, grid cell, etc.).\n\t// `surface` (RAT-449) opts the card into funnel tracking: real-visibility\n\t// impressions + clicks feed the self-optimizing ranking, and ?src= carries\n\t// the surface into the unlock for revenue attribution.\n\tlet {\n\t\talbum,\n\t\tclass: klass = '',\n\t\tsurface = null,\n\t\teager = false\n\t}: { album: AlbumCard; class?: string; surface?: AlbumSurface | null; eager?: boolean } = $props();\n\tconst locked = $derived(!album.unlocked);\n</script>\n\n<a\n\thref={`/album/${album.id}${surface ? `?src=${surface}` : ''}`}\n\tuse:albumImpression={surface ? { albumId: album.id, surface } : undefined}\n\tonclick={() => surface && recordAlbumClick(album.id, surface)}\n\tclass=\"block overflow-hidden rounded-2xl border border-border bg-surface no-underline {klass}\"\n>\n\t<header class=\"flex items-center gap-2.5 px-3.5 pt-3 pb-2.5\">\n\t\t<DuelAvatar\n\t\t\tnickname={album.creator.nickname}\n\t\t\tavatarUrl={getAvatarUrl(album.creator.avatarPath)}\n\t\t\tsize={38}\n\t\t\tlink={false}\n\t\t/>\n\t\t<div class=\"min-w-0 leading-tight\">\n\t\t\t<span class=\"block truncate text-[13px] font-semibold text-text\"\n\t\t\t\t>@{album.creator.nickname ?? 'creator'}</span\n\t\t\t>\n\t\t\t<span class=\"font-display text-[10px] font-bold tracking-[0.18em] text-fuchsia uppercase\"\n\t\t\t\t>paid album</span\n\t\t\t>\n\t\t</div>\n\t</header>\n\n\t<div class=\"relative aspect-[4/5] overflow-hidden bg-bg\">\n\t\t{#if album.coverUrl}\n\t\t\t<AlbumCoverMedia\n\t\t\t\turl={album.coverUrl}\n\t\t\t\tkind={album.coverKind}\n\t\t\t\tposterUrl={album.coverPosterUrl}\n\t\t\t\talt={album.title}\n\t\t\t\timgClass=\"h-full w-full object-cover\"\n\t\t\t\t{eager}\n\t\t\t/>\n\t\t{:else}\n\t\t\t<div class=\"absolute inset-0 bg-gradient-to-br from-fuchsia/25 to-bg/0\"></div>\n\t\t{/if}\n\t\t<div class=\"absolute inset-0 bg-gradient-to-t from-black/55 via-transparent to-transparent\"></div>\n\n\t\t<div class=\"absolute inset-x-0 top-0 flex items-start justify-between gap-2 p-3\">\n\t\t\t<!-- RAT-621: a play mark whenever there's a clip, cover photo or not -->\n\t\t\t<span\n\t\t\t\tclass=\"inline-flex min-w-0 items-center gap-1 rounded bg-black/70 px-2 py-1 font-display text-[10px] font-bold tracking-tight text-text/90 tabular-nums backdrop-blur-sm\"\n\t\t\t>\n\t\t\t\t{#if album.videoCount > 0}\n\t\t\t\t\t<svg class=\"h-2.5 w-2.5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"\n\t\t\t\t\t\t><path d=\"M8 5v14l11-7z\" /></svg\n\t\t\t\t\t>\n\t\t\t\t{/if}\n\t\t\t\t<span class=\"truncate\">{albumCountLabel(album)}</span>\n\t\t\t</span>\n\t\t\t{#if locked}\n\t\t\t\t<span\n\t\t\t\t\tclass=\"inline-flex shrink-0 items-center gap-1 rounded bg-black/75 px-2 py-1 font-display text-[11px] font-bold tracking-tight text-yellow backdrop-blur-sm\"\n\t\t\t\t>\n\t\t\t\t\t<svg class=\"h-3 w-3\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"\n\t\t\t\t\t\t><path\n\t\t\t\t\t\t\td=\"M12 1a5 5 0 0 0-5 5v3H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-9a2 2 0 0 0-2-2h-1V6a5 5 0 0 0-5-5zm3 8H9V6a3 3 0 0 1 6 0v3z\"\n\t\t\t\t\t\t/></svg\n\t\t\t\t\t>\n\t\t\t\t\t<TokenCoin size={11} />\n\t\t\t\t\t{album.priceTokens}\n\t\t\t\t</span>\n\t\t\t{/if}\n\t\t</div>\n\t</div>\n\n\t<div class=\"flex items-center gap-3 px-3.5 py-3\">\n\t\t<div class=\"min-w-0\">\n\t\t\t<p class=\"truncate font-display text-sm font-bold text-text\">{album.title}</p>\n\t\t\t<p class=\"text-[11px] text-muted\">\n\t\t\t\t{#if album.unlockCount > 0}{album.unlockCount} unlocked{:else}{Math.max(\n\t\t\t\t\t\talbum.previewCount,\n\t\t\t\t\t\t1\n\t\t\t\t\t)} free preview{/if}\n\t\t\t</p>\n\t\t</div>\n\t\t<span\n\t\t\tclass=\"ml-auto inline-flex shrink-0 items-center gap-1 rounded-lg px-4 py-2 font-display text-[13px] font-bold tracking-tight {locked\n\t\t\t\t? 'bg-yellow text-black'\n\t\t\t\t: 'border border-border bg-surface text-text'}\"\n\t\t>\n\t\t\t{#if locked}unlock · <TokenCoin size={12} /> {album.priceTokens}{:else}view{/if}\n\t\t</span>\n\t</div>\n</a>\n"],"version":3}