{"release_id":"01a1998d-9802-0000-b0f7-33a23307f4ed","chunk_id":"01a1998d-9901-7eb2-9b73-60c87aa76e11","file":"By5ic7Mr.mjs","mappings":"2eASO,SAASA,EAAiBC,EAAgD,CAChF,OAAOC,EAAe,eAAgBD,EAAME,EAAI,MAAM,CACvD,CAGO,SAASC,EAAgBH,EAAgD,CAC/E,OAAOC,EAAe,eAAgBD,EAAME,EAAI,KAAK,CACtD,wRChBA,SAYY,IAAAE,qBAAa,IAAI,EAAEC,eAAO,EAAE,EAAEC,eAAO,IAAI,EAAEC,eAAO,EAAI,QAE3DC,EAAGC,EAAA,IAAYV,EAAiBK,EAAU,CAAA,CAAA,EAC1CM,EAAQD,EAAA,KAAAE,EAAA,KAAoB,KAAK,MAAM,EAAG,CAAC,EAAE,YAAW,CAAA,EACxDC,WAAuB,KAAK,MAAMP,IAAO,EAAG,CAAA,IAAA,EAC5CQ,QAAkBN,EAAI,EAAID,EAAI,SAAU,mBAAkBK,EAAA,GAAA,CAAA,GAAW,IAAI,kCAI9EG,EAACC,EAAA,MAADD,CAAC,iBACSE,EAAGC,EAAA,EAAHC,EAAA,IAAAC,EAAAH,UAASR,CAAG,CAAA,CAAA,MAAZQ,CAAG,aAA4BI,EAAIC,EAAA,MAAJD,EAAI,EAAA,IAAJA,CAAI,cAAEV,CAAQ,CAAA,CAAA,MAAdU,CAAI,aAAxCZ,CAAG,EAAAc,EAAAC,CAAA,EAAAD,EAAAE,EAAA,EAAA,MADRV,CAAC,SAADK,EAAAL,WAAuBD,CAAM,CAAA,IAA7BC,EAAC,OAA0CT,EAAI,GAAA,EAAA,iBAAAoB,EAAgBb,CAAQ,GAAA,EAAA,GAAA,IAAvEE,EAAC,aAAA,GAAAH,EAAA,KAAA,EAAA,OAAA,QAADG,CAAC,aAIDY,EAAIC,EAAA,MAAJD,CAAI,iBACME,EAAGC,EAAA,EAAHX,EAAA,IAAAC,EAAAS,UAASpB,CAAG,CAAA,CAAA,MAAZoB,CAAG,aAA4BE,EAAIC,EAAA,MAAJD,EAAI,EAAA,IAAJA,CAAI,cAAEpB,CAAQ,CAAA,CAAA,MAAdoB,CAAI,aAAxCtB,CAAG,EAAAc,EAAAU,CAAA,EAAAV,EAAAW,EAAA,EAAA,MADRP,CAAI,UAAJA,EAAI,OAAmCrB,EAAI,GAAA,EAAA,iBAAAoB,EAAgBb,CAAQ,GAAA,EAAA,GAAA,CAAA,MAAnEc,CAAI,aALDb,CAAM,EAAAS,EAAAY,CAAA,EAAAZ,EAAAa,EAAA,EAAA,cAFH","names":["getClanAvatarUrl","path","publicMediaUrl","IMG","getClanCoverUrl","avatarPath","size","href","link","url","$.derived","initials","$$props","fontSize","target","a","root_1","img","root_2","$.template_effect","$.set_attribute","span","root_3","$$render","consequent","alternate","$.get","span_1","root_4","img_1","root_5","span_2","root_6","consequent_2","alternate_1","consequent_1","alternate_2"],"sources":["../../../../../../src/lib/clan-avatar.ts","../../../../../../src/lib/components/clan/ClanEmblem.svelte"],"sourcesContent":["import { publicMediaUrl, IMG } from '$lib/cdn';\nimport type { ClanRole } from '$lib/types/clan';\n\n/**\n * Public delivery URL for a clan avatar in the public `clan-avatars` bucket\n * (mirrors $lib/avatar.ts getAvatarUrl). Routes through the Bunny edge (+ resize)\n * when PUBLIC_CDN_URL is set. Returns null when the clan has no avatar — callers\n * fall back to the tag-initials emblem.\n */\nexport function getClanAvatarUrl(path: string | null | undefined): string | null {\n\treturn publicMediaUrl('clan-avatars', path, IMG.avatar);\n}\n\n/** Public delivery URL for a clan cover banner (also the public clan-avatars bucket). */\nexport function getClanCoverUrl(path: string | null | undefined): string | null {\n\treturn publicMediaUrl('clan-avatars', path, IMG.cover);\n}\n\nexport const ROLE_LABEL: Record<ClanRole, string> = {\n\towner: 'owner',\n\tofficer: 'officer',\n\tmember: 'member'\n};\n\nexport const ROLE_RANK: Record<ClanRole, number> = {\n\towner: 3,\n\tofficer: 2,\n\tmember: 1\n};\n","<script lang=\"ts\">\n\timport { getClanAvatarUrl } from '$lib/clan-avatar';\n\n\tinterface Props {\n\t\ttag: string;\n\t\tavatarPath?: string | null;\n\t\tsize?: number;\n\t\thref?: string | null;\n\t\t/** Render as a plain element (no <a>) when wrapped in an outer link. */\n\t\tlink?: boolean;\n\t}\n\n\tlet { tag, avatarPath = null, size = 44, href = null, link = true }: Props = $props();\n\n\tconst url = $derived(getClanAvatarUrl(avatarPath));\n\tconst initials = $derived((tag || '?').slice(0, 2).toUpperCase());\n\tconst fontSize = $derived(`${Math.round(size * 0.4)}px`);\n\tconst target = $derived(link ? (href ?? `/k/${encodeURIComponent(tag)}`) : null);\n</script>\n\n{#if target}\n\t<a class=\"emblem\" href={target} style=\"--s:{size}px; font-size:{fontSize};\" aria-label=\"{tag} clan\">\n\t\t{#if url}<img src={url} alt=\"\" />{:else}<span>{initials}</span>{/if}\n\t</a>\n{:else}\n\t<span class=\"emblem static\" style=\"--s:{size}px; font-size:{fontSize};\" aria-hidden=\"true\">\n\t\t{#if url}<img src={url} alt=\"\" />{:else}<span>{initials}</span>{/if}\n\t</span>\n{/if}\n\n<style>\n\t.emblem {\n\t\twidth: var(--s);\n\t\theight: var(--s);\n\t\tborder-radius: 50%;\n\t\tflex-shrink: 0;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\toverflow: hidden;\n\t\tfont-family: var(--font-display);\n\t\tfont-weight: 800;\n\t\tletter-spacing: -0.02em;\n\t\tcolor: #fff;\n\t\tbackground: linear-gradient(135deg, var(--color-violet), #b06aff);\n\t\tborder: 1px solid rgba(124, 92, 255, 0.35);\n\t\ttext-decoration: none;\n\t}\n\t.emblem.static {\n\t\tcursor: default;\n\t}\n\t.emblem img {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tobject-fit: cover;\n\t}\n</style>\n"],"version":3}