// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-3.0-or-later // @source: https://gitlab.com/soapbox-pub/ditto/-/tree/f0a3877c import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{Ht as t,It as n,Kn as r,Mr as i,P as a,S as o,Wr as s,Zt as c,_n as l,cr as u,oi as d,qi as f,xn as p}from"./lucide-icons-BdRF0moN.js";import{t as m}from"./jsx-runtime-By8HlURe.js";import{t as h}from"./dist-DQ82bf9M.js";import{u as g}from"./esm-CRVqHnq2.js";import{t as _}from"./useQuery-rCAlChE8.js";import{t as v}from"./useInfiniteQuery-BFtb_-3K.js";import{t as y}from"./useAppContext-Ughdk2-Z.js";import{r as b}from"./sanitizeUrl-Bk5f35GN.js";import{l as x,p as S,t as C}from"./useCurrentUser-C6OJJlWo.js";import{t as w}from"./utils-BFSTDHdM.js";import{t as T}from"./nostrId-DuqQCAdJ.js";import{i as ee,n as E,r as D}from"./useFollowActions-cve70R08.js";import{r as O}from"./appRelays-Clm5NPIe.js";import{n as te,o as k,r as A,t as j}from"./avatar--oX_CTF4.js";import{n as M}from"./chunk-62JRHF6Z-yJW_vgm4.js";import{t as N}from"./useProfileUrl-DoFhqUUR.js";import{t as ne}from"./parseAddr-BmO3JZWT.js";import{t as P}from"./skeleton-CVls4GW9.js";import{a as F,n as I,r as re,s as ie,t as L}from"./musicHelpers-B271Bg0t.js";import{t as ae}from"./getDisplayName-B6lnEGRj.js";import{s as oe}from"./extraKinds-BydAXtVV.js";import{g as se}from"./sidebarItems-BFr7FKBa.js";import{t as ce}from"./formatTime-CT4ZmnVr.js";import{c as le}from"./LayoutContext-CjQBLGO-.js";import{t as R}from"./useInView-DAJQSIvc.js";import{t as ue}from"./SubHeaderBar-BYwNp4Nc.js";import{t as z}from"./DecryptedImage-DLbW5kmn.js";import{t as de}from"./useMutedAuthorFilter-CTggZCaG.js";import{o as B,w as fe,y as pe}from"./index-CYEZWNq6.js";import{t as me}from"./PageHeader-CMi4aeE4.js";import{t as V}from"./KindInfoButton-BL9_-Fdi.js";import{n as H,t as U}from"./MusicTrackRow-uvgpU0Oz.js";var W=e(f(),1),G=`3f770d65d3a764a9c5cb503ae123e62ec7598ad035d836e2a810f3877a745b24`,K=`195537a3-acca-4bbd-878a-4bf07a3896b6`,q=[`28ca019b78b494c25a9da2d645975a8501c7e99b11302e5cbe748ee593fcb2cc`,`8806372af51515bf4aef807291b96487ea1826c966a5596bca86697b5d8b23bc`,`5c7794d47115a1b133a19673d57346ca494d367379458d8e98bf24a498abc46b`,`312d00fab4860c967c98bb4585971ab1bef9475d51b4becbc9f313f968403f2b`,`fad80b7451b03f686fd9e487b05b69c04c808e26a1db655e59e0e296a5c9f4dd`,`d60b5c894df0163c9b3b1ac4e89fc94bfb6df473dbcff8c035d739f3ea8bcb59`,`6838a529bdf33d2569e3708df6373572f11b378114d225a4d467a9bd94abef2a`,`e61093809c30403b74392ec1853c1bc40b3364fd311fa2e5a919ef6c7e8bfde1`,`904b0d0fc90f04f03caef2ca07ca3fdb1a5f20020090181ce8e1fcf473f7554d`];function he(){let{nostr:e}=h();return _({queryKey:[`curated-music-artists`,G,K],queryFn:async({signal:t})=>{let n=await e.query([{kinds:[3e4],authors:[G],"#d":[K],limit:1}],{signal:AbortSignal.any([t,AbortSignal.timeout(8e3)])});if(n.length===0)return q;let r=n[0].tags.filter(([e])=>e===`p`).map(([,e])=>e).filter(T);return r.length>0?r:q},staleTime:600*1e3,gcTime:3600*1e3,placeholderData:q})}var ge=5;function _e(e){let{nostr:t}=h();return _({queryKey:[`featured-music-tracks`,e?.slice().sort().join(`,`)??``],queryFn:async({signal:n})=>{if(!e||e.length===0)return[];let r=AbortSignal.any([n,AbortSignal.timeout(1e4)]),i=t.group(O),a=(await i.query([{kinds:[36787],authors:e,search:`sort:hot distinct:author`,limit:12}],{signal:r})).filter(e=>I(e)!==null);if(a.lengthe.pubkey)),n=await i.query([{kinds:[36787],authors:e,search:`distinct:author`,limit:20}],{signal:r});for(let e of n){if(a.length>=12)break;t.has(e.pubkey)||I(e)&&(t.add(e.pubkey),a.push(e))}}return a},enabled:!!e&&e.length>0,staleTime:300*1e3,gcTime:900*1e3})}var ve=`3f770d65d3a764a9c5cb503ae123e62ec7598ad035d836e2a810f3877a745b24`;function ye(){let{nostr:e}=h(),{store:t}=S();return _({queryKey:[`music-curator-follows`,ve],queryFn:async({signal:n})=>D(await ee(e,t,ve,{signal:n})),staleTime:600*1e3,gcTime:3600*1e3})}function J(e={}){let{nostr:t}=h(),{authors:n,limit:r=200,enabled:i=!0}=e,a=_({queryKey:[`music-tracks`,n?n.slice().sort().join(`,`):`all`,r],queryFn:async({signal:e})=>{let i={kinds:[36787],limit:r};return n&&n.length>0&&(i.authors=n),t.query([i],{signal:AbortSignal.any([e,AbortSignal.timeout(1e4)])})},staleTime:300*1e3,gcTime:900*1e3,enabled:i,placeholderData:e=>e}),o=(0,W.useMemo)(()=>a.data?a.data.filter(e=>I(e)!==null):[],[a.data]),s=(0,W.useMemo)(()=>{if(!a.data)return[];let e=new Map;for(let t of a.data)for(let n of t.tags)if(n[0]===`t`&&n[1]&&n[1].toLowerCase()!==`music`){let t=n[1].toLowerCase();e.set(t,(e.get(t)??0)+1)}return Array.from(e.entries()).map(([e,t])=>({genre:e,count:t})).sort((e,t)=>t.count-e.count)},[a.data]),c=(0,W.useMemo)(()=>{if(!a.data)return[];let e=new Map;for(let t of a.data)I(t)!==null&&e.set(t.pubkey,(e.get(t.pubkey)??0)+1);return Array.from(e.entries()).map(([e,t])=>({pubkey:e,trackCount:t})).sort((e,t)=>t.trackCount-e.trackCount)},[a.data]);return{...a,tracks:o,genres:s,artists:c}}function be(e={}){let{nostr:t}=h(),{authors:n,search:r,limit:i=50,enabled:a=!0}=e;return _({queryKey:[`music-playlists`,n?n.slice().sort().join(`,`):`all`,r??``,i],queryFn:async({signal:e})=>{let a={kinds:[34139],limit:i};return n&&n.length>0&&(a.authors=n),r&&(a.search=r),(await(r?t.group(O):t).query([a],{signal:AbortSignal.any([e,AbortSignal.timeout(1e4)])})).filter(e=>L(e)!==null)},staleTime:300*1e3,gcTime:900*1e3,enabled:a,placeholderData:e=>e})}var Y=m();function X({title:e,seeAllLabel:t=`See all`,onSeeAll:n,className:r}){return(0,Y.jsxs)(`div`,{className:w(`flex items-center justify-between px-4 pt-5 pb-2`,r),children:[(0,Y.jsx)(`h2`,{className:`text-base font-semibold`,children:e}),n&&(0,Y.jsxs)(`button`,{onClick:n,className:`flex items-center gap-0.5 text-xs font-medium text-muted-foreground hover:text-foreground transition-colors`,children:[t,(0,Y.jsx)(d,{className:`size-3.5`})]})]})}function Z({children:e,className:t}){return(0,Y.jsx)(`div`,{className:w(`flex gap-3 overflow-x-auto scrollbar-none px-4 pb-1`,t),children:e})}function xe({tags:e,selected:t,onSelect:n,allLabel:r=`All`,className:i}){let a=!t;return(0,Y.jsxs)(`div`,{className:w(`flex gap-2 overflow-x-auto scrollbar-none px-4 py-3`,i),children:[(0,Y.jsx)(`button`,{onClick:()=>n(null),className:w(`shrink-0 px-4 py-1.5 rounded-full text-sm font-medium transition-colors duration-200`,a?`bg-primary text-primary-foreground`:`bg-secondary/50 text-muted-foreground hover:bg-secondary`),children:r}),e.map(e=>{let r=t===e;return(0,Y.jsx)(`button`,{onClick:()=>n(r?null:e),className:w(`shrink-0 px-4 py-1.5 rounded-full text-sm font-medium transition-colors duration-200 capitalize`,r?`bg-primary text-primary-foreground`:`bg-secondary/50 text-muted-foreground hover:bg-secondary`),children:e},e)})]})}function Se({pubkey:e,subtitle:t,className:n}){let r=x(e).data?.metadata,i=k(r),a=ae(r,e);return(0,Y.jsxs)(M,{to:N(e,r),className:w(`w-[110px] shrink-0 flex flex-col items-center cursor-pointer group`,n),children:[(0,Y.jsxs)(j,{shape:i,className:`size-20 border-2 border-border group-hover:border-primary/40 transition-colors`,children:[(0,Y.jsx)(A,{src:b(r?.picture),alt:a}),(0,Y.jsx)(te,{className:`bg-primary/20 text-primary text-lg font-semibold`,children:a[0]?.toUpperCase()})]}),(0,Y.jsx)(`p`,{className:`text-sm font-medium truncate mt-2 text-center w-full group-hover:text-primary transition-colors`,children:a}),t&&(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:t})]})}function Ce(){return(0,Y.jsxs)(`div`,{className:`w-[110px] shrink-0 flex flex-col items-center`,children:[(0,Y.jsx)(P,{className:`size-20 rounded-full`}),(0,Y.jsx)(P,{className:`h-4 w-16 mt-2`}),(0,Y.jsx)(P,{className:`h-3 w-12 mt-1`})]})}function we({kindDef:e,title:t,subtitle:n,icon:r,className:i}){let[a,o]=(0,W.useState)(!1);return(0,Y.jsxs)(`div`,{className:w(`mx-4 rounded-2xl overflow-hidden relative`,i),children:[(0,Y.jsx)(`div`,{className:`bg-gradient-to-br from-primary/20 via-primary/10 to-accent/10`,children:(0,Y.jsxs)(`div`,{className:`p-6 text-center`,children:[(0,Y.jsx)(`div`,{className:`flex justify-center text-primary/40`,children:r??(0,Y.jsx)(c,{className:`size-10`})}),(0,Y.jsx)(`h3`,{className:`text-lg font-bold mt-3`,children:t}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground mt-2 max-w-xs mx-auto`,children:n}),(0,Y.jsx)(`button`,{onClick:()=>o(!0),className:`mt-4 px-6 py-2 rounded-full bg-primary text-primary-foreground text-sm font-medium hover:bg-primary/90 transition-colors`,children:`Learn More`})]})}),(0,Y.jsx)(`div`,{className:`hidden`,children:(0,Y.jsx)(V,{kindDef:e,open:a,onOpenChange:o})})]})}var Te=[{value:`hot`,label:`Hot`,icon:u},{value:`top`,label:`Top`,icon:a},{value:`new`,label:`New`,icon:s}],Ee=[{value:`global`,label:`Global`,icon:r},{value:`following`,label:`Following`,icon:o}];function Q({sort:e,scope:t,onSortChange:n,onScopeChange:r,className:i}){let{user:a}=C();return(0,Y.jsxs)(`div`,{className:w(`flex items-center gap-2 px-4 py-2`,i),children:[(0,Y.jsx)(`div`,{className:`flex gap-1 p-1 rounded-lg bg-secondary/40`,children:Te.map(({value:t,label:r,icon:i})=>(0,Y.jsxs)(`button`,{onClick:()=>n(t),className:w(`flex items-center gap-1 px-2.5 py-1 text-xs font-medium rounded-md transition-colors`,e===t?`bg-background text-foreground shadow-sm`:`text-muted-foreground hover:text-foreground`),children:[(0,Y.jsx)(i,{className:`size-3`}),r]},t))}),(0,Y.jsx)(`div`,{className:`flex gap-1 p-1 rounded-lg bg-secondary/40`,children:Ee.map(({value:e,label:n,icon:i})=>e===`following`&&!a?null:(0,Y.jsxs)(`button`,{onClick:()=>r(e),className:w(`flex items-center gap-1 px-2.5 py-1 text-xs font-medium rounded-md transition-colors`,t===e?`bg-background text-foreground shadow-sm`:`text-muted-foreground hover:text-foreground`),children:[(0,Y.jsx)(i,{className:`size-3`}),n]},e))})]})}function De({event:e}){let r=ie(),i=(0,W.useMemo)(()=>I(e),[e]),a=x(e.pubkey),[o,s]=(0,W.useState)(!1),u=F(e.id);if(!i)return null;let d=r.currentTrack?.id===e.id,f=u.status===`decrypting`,p=i.duration?ce(i.duration):void 0,m=t=>{if(t.stopPropagation(),d&&r.isPlaying)r.pause();else if(d)r.resume();else{let t=re(e,i);t.artwork??=b(a.data?.metadata?.picture),r.playTrack(t)}};return(0,Y.jsxs)(`div`,{className:w(`mx-4 rounded-2xl overflow-hidden relative cursor-pointer`,d&&`ring-2 ring-primary`),onClick:m,children:[i.artwork&&!o?(0,Y.jsx)(z,{url:i.artwork,encryption:i.artworkEncryption,alt:i.title,className:`w-full aspect-[16/10] object-cover`,loading:`eager`,onError:()=>s(!0),decoding:`async`,noticeClassName:`aspect-[16/10]`}):(0,Y.jsx)(`div`,{className:`w-full aspect-[16/10] bg-gradient-to-br from-primary/20 via-primary/10 to-accent/10 flex items-center justify-center`,children:(0,Y.jsx)(c,{className:`size-16 text-primary/20`})}),(0,Y.jsx)(`div`,{className:`absolute inset-0 bg-gradient-to-t from-black/80 via-black/30 to-transparent`}),(0,Y.jsxs)(`div`,{className:`absolute bottom-0 left-0 right-0 p-5`,children:[(0,Y.jsx)(`span`,{className:`inline-block px-2.5 py-0.5 rounded-full bg-primary/80 text-primary-foreground text-xs font-medium mb-2`,children:`Featured`}),(0,Y.jsx)(`h3`,{className:`text-2xl font-bold text-white leading-tight truncate`,children:i.title}),i.artist&&(0,Y.jsx)(`p`,{className:`text-base text-white/80 truncate mt-0.5`,children:i.artist}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 mt-3`,children:[(0,Y.jsx)(`button`,{onClick:m,disabled:f,className:w(`size-12 rounded-full flex items-center justify-center transition-all hover:scale-105 disabled:cursor-progress`,d&&r.isPlaying||f?`bg-primary text-primary-foreground`:`bg-white/90 text-black hover:bg-white`),"aria-label":d&&r.isPlaying?`Pause`:`Play`,children:f?(0,Y.jsx)(l,{className:`size-5 animate-spin`}):d&&r.isPlaying?(0,Y.jsx)(t,{className:`size-5`,fill:`currentColor`}):(0,Y.jsx)(n,{className:`size-5 ml-0.5`,fill:`currentColor`})}),p&&(0,Y.jsx)(`span`,{className:`text-sm text-white/60`,children:p})]})]})]})}function Oe(){return(0,Y.jsx)(`div`,{className:`mx-4 rounded-2xl overflow-hidden`,children:(0,Y.jsx)(P,{className:`w-full aspect-[16/10]`})})}function ke({event:e}){let r=ie(),i=(0,W.useMemo)(()=>I(e),[e]),a=x(e.pubkey),o=(0,W.useMemo)(()=>{let t=e.tags.find(([e])=>e===`d`)?.[1]??``;return`/`+g.naddrEncode({kind:e.kind,pubkey:e.pubkey,identifier:t})},[e]),[s,u]=(0,W.useState)(!1),d=F(e.id);if(!i)return null;let f=r.currentTrack?.id===e.id,p=d.status===`decrypting`;return(0,Y.jsxs)(M,{to:o,className:`w-[140px] shrink-0 cursor-pointer group`,children:[(0,Y.jsxs)(`div`,{className:w(`w-full aspect-square rounded-xl overflow-hidden relative`,f&&`ring-2 ring-primary`),children:[i.artwork&&!s?(0,Y.jsx)(z,{url:i.artwork,encryption:i.artworkEncryption,alt:i.title,className:`w-full h-full object-cover`,onError:()=>u(!0),decoding:`async`,noticeFill:!0}):(0,Y.jsx)(`div`,{className:`w-full h-full bg-gradient-to-br from-primary/15 via-primary/5 to-transparent flex items-center justify-center`,children:(0,Y.jsx)(c,{className:`size-8 text-primary/20`})}),(0,Y.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center bg-black/0 group-hover:bg-black/20 transition-colors`,onClick:t=>{if(t.preventDefault(),t.stopPropagation(),f&&r.isPlaying)r.pause();else if(f)r.resume();else{let t=re(e,i);t.artwork??=b(a.data?.metadata?.picture),r.playTrack(t)}},children:(0,Y.jsx)(`div`,{className:w(`size-10 rounded-full flex items-center justify-center transition-all`,`opacity-0 group-hover:opacity-100 scale-90 group-hover:scale-100`,f&&r.isPlaying||p?`bg-primary text-primary-foreground opacity-100 scale-100`:`bg-white/90 text-black`),children:p?(0,Y.jsx)(l,{className:`size-4 animate-spin`}):f&&r.isPlaying?(0,Y.jsx)(t,{className:`size-4`,fill:`currentColor`}):(0,Y.jsx)(n,{className:`size-4 ml-0.5`,fill:`currentColor`})})})]}),(0,Y.jsx)(`p`,{className:`text-sm font-medium truncate mt-2`,children:i.title}),(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground truncate`,children:i.artist})]})}function Ae(){return(0,Y.jsxs)(`div`,{className:`w-[140px] shrink-0`,children:[(0,Y.jsx)(P,{className:`w-full aspect-square rounded-xl`}),(0,Y.jsx)(P,{className:`h-4 w-3/4 mt-2`}),(0,Y.jsx)(P,{className:`h-3 w-1/2 mt-1`})]})}function je(e,t,n=!0){let{nostr:r}=h(),i=(0,W.useMemo)(()=>{if(t.length!==0)return ne(t[0])},[t]),{data:a}=_({queryKey:[`playlist-cover-fallback`,i?.kind,i?.pubkey,i?.identifier],queryFn:async({signal:e})=>{if(!i)return null;let t=await r.query([{kinds:[i.kind],authors:[i.pubkey],"#d":[i.identifier],limit:1}],{signal:AbortSignal.any([e,AbortSignal.timeout(6e3)])});return t.length===0?null:I(t[0])?.artwork??null},enabled:n&&!e&&!!i,staleTime:300*1e3,gcTime:900*1e3});return e??b(a)??void 0}function Me({event:e}){let t=(0,W.useMemo)(()=>L(e),[e]),n=(0,W.useMemo)(()=>{let t=e.tags.find(([e])=>e===`d`)?.[1]??``;return`/`+g.naddrEncode({kind:e.kind,pubkey:e.pubkey,identifier:t})},[e]),[r,a]=(0,W.useState)(()=>new Set),o=je(t?.artwork&&!r.has(t.artwork)?t.artwork:void 0,t?.trackRefs??[]),s=o&&!r.has(o)?o:void 0;if(!t)return null;let c=t.trackRefs.length;return(0,Y.jsxs)(M,{to:n,className:`w-[160px] shrink-0 cursor-pointer group`,children:[(0,Y.jsx)(`div`,{className:`w-full aspect-square rounded-xl overflow-hidden`,children:s?(0,Y.jsx)(`img`,{src:s,alt:t.title,className:`w-full h-full object-cover group-hover:scale-105 transition-transform duration-300`,onError:()=>a(e=>new Set(e).add(s)),decoding:`async`}):(0,Y.jsx)(`div`,{className:`w-full h-full bg-gradient-to-br from-primary/15 via-primary/5 to-transparent flex items-center justify-center`,children:(0,Y.jsx)(p,{className:`size-10 text-primary/20`})})}),(0,Y.jsx)(`p`,{className:`text-sm font-medium truncate mt-2 group-hover:text-primary transition-colors`,children:t.title}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs text-muted-foreground`,children:[t.isAlbum&&(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-0.5 font-medium text-primary/70`,children:[(0,Y.jsx)(i,{className:`size-3`}),`Album`]}),t.isAlbum&&c>0&&(0,Y.jsx)(`span`,{children:`ยท`}),c>0&&(0,Y.jsxs)(`span`,{children:[c,` track`,c===1?``:`s`]})]})]})}function Ne(){return(0,Y.jsxs)(`div`,{className:`w-[160px] shrink-0`,children:[(0,Y.jsx)(P,{className:`w-full aspect-square rounded-xl`}),(0,Y.jsx)(P,{className:`h-4 w-3/4 mt-2`}),(0,Y.jsx)(P,{className:`h-3 w-12 mt-1`})]})}var Pe=oe(`music`);function Fe({onSwitchToTracks:e,onSwitchToPlaylists:t,onSwitchToArtists:n}){let{nostr:r}=h(),[i,a]=(0,W.useState)(null),[o,s]=(0,W.useState)(`hot`),[l,u]=(0,W.useState)(`global`),{data:d}=he(),{data:f,isLoading:p}=_e(d),m=f?.[0]??null,{data:g}=E(),v=g?.pubkeys,y=l===`following`?v:d,{tracks:b,genres:x,artists:S,isLoading:C}=J({authors:d}),{data:w,isLoading:T,isError:ee}=_({queryKey:[`discover-new-tracks`,o,l,y?.slice().sort().join(`,`)??``,i??``],queryFn:async({signal:e})=>{if(!y||y.length===0)return[];let t={kinds:[36787],authors:y,limit:20};i&&(t[`#t`]=[i]);let n=AbortSignal.any([e,AbortSignal.timeout(1e4)]),a;return o===`new`?a=await r.query([t],{signal:n}):(t.search=`sort:${o}`,a=await r.group(O).query([t],{signal:n}),a.length===0&&(delete t.search,a=await r.query([t],{signal:n}))),a.filter(e=>I(e)!==null).slice(0,8)},enabled:!!y&&y.length>0,staleTime:300*1e3,placeholderData:e=>e}),D=w??[],te=T&&!w,{data:k}=ye(),{data:A,isLoading:j}=be({authors:k,search:`sort:hot`,limit:10,enabled:!!k&&k.length>0}),M=(0,W.useMemo)(()=>x.slice(0,12).map(e=>e.genre),[x]),N=(0,W.useMemo)(()=>{if(d&&d.length>0){let e=new Map;for(let t of b)e.set(t.pubkey,(e.get(t.pubkey)??0)+1);return d.slice(0,10).map(t=>({pubkey:t,trackCount:e.get(t)??0}))}return S.slice(0,10)},[d,S,b]);return(0,Y.jsxs)(`div`,{className:`pb-8 space-y-1`,children:[p?(0,Y.jsx)(`div`,{className:`pt-3`,children:(0,Y.jsx)(Oe,{})}):m?(0,Y.jsx)(`div`,{className:`pt-3`,children:(0,Y.jsx)(De,{event:m})}):null,p?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(X,{title:`Featured`}),(0,Y.jsx)(Z,{children:Array.from({length:4}).map((e,t)=>(0,Y.jsx)(Ae,{},t))})]}):f&&f.length>1?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(X,{title:`Featured`,onSeeAll:e}),(0,Y.jsx)(Z,{children:f.slice(1,8).map(e=>(0,Y.jsx)(ke,{event:e},e.id))})]}):null,(C||N.length>0)&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(X,{title:`Artists`,onSeeAll:n}),C?(0,Y.jsx)(Z,{children:Array.from({length:5}).map((e,t)=>(0,Y.jsx)(Ce,{},t))}):(0,Y.jsx)(Z,{children:N.map(e=>(0,Y.jsx)(Se,{pubkey:e.pubkey,subtitle:e.trackCount>0?`${e.trackCount} track${e.trackCount===1?``:`s`}`:void 0},e.pubkey))})]}),(j||A&&A.length>0)&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(X,{title:`Playlists`,onSeeAll:t}),j?(0,Y.jsx)(Z,{children:Array.from({length:3}).map((e,t)=>(0,Y.jsx)(Ne,{},t))}):(0,Y.jsx)(Z,{children:A.slice(0,6).map(e=>(0,Y.jsx)(Me,{event:e},e.id))})]}),(0,Y.jsx)(X,{title:`New Tracks`,onSeeAll:e}),(0,Y.jsx)(Q,{sort:o,scope:l,onSortChange:s,onScopeChange:u}),M.length>0&&(0,Y.jsx)(xe,{tags:M,selected:i,onSelect:a}),ee?(0,Y.jsx)(`p`,{className:`px-4 py-6 text-sm text-muted-foreground text-center`,children:`Failed to load tracks. Check your relay connections and try again.`}):te?(0,Y.jsx)(`div`,{children:Array.from({length:5}).map((e,t)=>(0,Y.jsx)(H,{},t))}):D.length>0?(0,Y.jsx)(`div`,{children:D.map((e,t)=>(0,Y.jsx)(U,{event:e,index:t},e.id))}):(0,Y.jsx)(`p`,{className:`px-4 py-6 text-sm text-muted-foreground text-center`,children:l===`following`?`No tracks from people you follow yet.`:i?`No ${i} tracks found.`:`No music yet. Check back soon!`}),(0,Y.jsx)(`div`,{className:`pt-4`,children:(0,Y.jsx)(we,{kindDef:Pe,title:`Share Your Music on Nostr`,subtitle:`Upload tracks and reach a global audience. Earn sats directly from fans.`,icon:(0,Y.jsx)(c,{className:`size-10`})})})]})}var Ie=20;function $({kind:e,sort:t,scope:n,genre:r,enabled:i=!0}){let{nostr:a}=h(),{data:o}=E(),s=o?.pubkeys,{excludeMuted:c,mutedKey:l}=de(),u=(0,W.useMemo)(()=>{if(n!==`following`||!s||s.length===0)return;let e=c(s);return e.length>0?e:void 0},[n,s,c]),d=n!==`following`||u&&u.length>0;return v({queryKey:[`music-feed`,e,t,n,r??``,n===`following`?s?.join(`,`)??``:``,l],queryFn:async({pageParam:i,signal:o})=>{let s={kinds:[e],limit:Ie};i&&(s.until=i),n===`following`&&u&&u.length>0&&(s.authors=u),r&&(s[`#t`]=[r]),t===`hot`?s.search=`sort:hot`:t===`top`&&(s.search=`sort:top`);let c=t===`new`?a:a.group(O),l=AbortSignal.any([o,AbortSignal.timeout(1e4)]),d=await c.query([s],{signal:l});if(d.length===0&&t!==`new`){let{search:e,...t}=s;return a.query([t],{signal:l})}return d},getNextPageParam:e=>{if(!(e.lengthe})}function Le(){let[e,t]=(0,W.useState)(null),[n,r]=(0,W.useState)(`new`),[i,a]=(0,W.useState)(`global`),{isMuted:o}=pe(),{genres:s}=J(),c=(0,W.useMemo)(()=>s.slice(0,12).map(e=>e.genre),[s]),{data:u,isPending:d,isLoading:f,isError:p,fetchNextPage:m,hasNextPage:h,isFetchingNextPage:g}=$({kind:36787,sort:n,scope:i,genre:e});(0,W.useEffect)(()=>{h&&!g&&u?.pages?.length===1&&m()},[h,g,u?.pages?.length,m]);let{ref:_,inView:v}=R({threshold:0,rootMargin:`400px`});(0,W.useEffect)(()=>{v&&h&&!g&&m()},[v,h,g,m]);let y=(0,W.useMemo)(()=>{if(!u?.pages)return[];let e=new Set;return u.pages.flat().filter(t=>!(e.has(t.id)||(e.add(t.id),t.kind!==36787)||I(t)===null||o(t)))},[u?.pages,o]),b=d||f&&!u;return(0,Y.jsxs)(`div`,{className:`pb-8`,children:[(0,Y.jsx)(Q,{sort:n,scope:i,onSortChange:r,onScopeChange:a}),c.length>0&&(0,Y.jsx)(xe,{tags:c,selected:e,onSelect:t}),p?(0,Y.jsx)(`p`,{className:`px-4 py-12 text-sm text-muted-foreground text-center`,children:`Failed to load tracks. Check your relay connections and try again.`}):b?(0,Y.jsx)(`div`,{children:Array.from({length:10}).map((e,t)=>(0,Y.jsx)(H,{},t))}):y.length>0?(0,Y.jsxs)(`div`,{children:[y.map((e,t)=>(0,Y.jsx)(U,{event:e,index:t},e.id)),h&&(0,Y.jsx)(`div`,{ref:_,className:`py-4`,children:g&&(0,Y.jsx)(`div`,{className:`flex justify-center`,children:(0,Y.jsx)(l,{className:`size-5 animate-spin text-muted-foreground`})})})]}):(0,Y.jsx)(`p`,{className:`px-4 py-12 text-sm text-muted-foreground text-center`,children:e?`No ${e} tracks found. Try a different genre.`:i===`following`?`No tracks from people you follow yet.`:`No music tracks yet. Check back soon!`})]})}function Re(){let[e,t]=(0,W.useState)(`new`),[n,r]=(0,W.useState)(`global`),[i,a]=(0,W.useState)(`all`),{data:o,isPending:s,isLoading:c,isError:u,fetchNextPage:d,hasNextPage:f,isFetchingNextPage:p}=$({kind:34139,sort:e,scope:n});(0,W.useEffect)(()=>{f&&!p&&o?.pages?.length===1&&d()},[f,p,o?.pages?.length,d]);let{ref:m,inView:h}=R({threshold:0,rootMargin:`400px`});(0,W.useEffect)(()=>{h&&f&&!p&&d()},[h,f,p,d]);let g=(0,W.useMemo)(()=>{if(!o?.pages)return[];let e=new Set;return o.pages.flat().filter(t=>e.has(t.id)?!1:(e.add(t.id),L(t)!==null))},[o?.pages]),_=(0,W.useMemo)(()=>i===`all`?g:g.filter(e=>{let t=L(e);return t?i===`albums`?t.isAlbum:!t.isAlbum:!1}),[g,i]),v=(0,W.useMemo)(()=>g.some(e=>L(e)?.isAlbum),[g]),y=s||c&&!o;return(0,Y.jsxs)(`div`,{className:`pb-8`,children:[(0,Y.jsx)(Q,{sort:e,scope:n,onSortChange:t,onScopeChange:r}),v&&(0,Y.jsx)(`div`,{className:`px-4 pb-2`,children:(0,Y.jsx)(`div`,{className:`flex gap-1 p-1 rounded-lg bg-secondary/40 w-fit`,children:[`all`,`playlists`,`albums`].map(e=>(0,Y.jsx)(`button`,{onClick:()=>a(e),className:w(`px-3 py-1.5 text-xs font-medium rounded-md transition-colors capitalize`,i===e?`bg-background text-foreground shadow-sm`:`text-muted-foreground hover:text-foreground`),children:e},e))})}),u?(0,Y.jsx)(`p`,{className:`px-4 py-12 text-sm text-muted-foreground text-center`,children:`Failed to load playlists. Check your relay connections and try again.`}):y?(0,Y.jsx)(`div`,{className:`px-4 pt-2`,children:(0,Y.jsx)(`div`,{className:`grid grid-cols-2 md:grid-cols-3 gap-3`,children:Array.from({length:6}).map((e,t)=>(0,Y.jsx)(Ne,{},t))})}):_.length>0?(0,Y.jsxs)(`div`,{className:`px-4 pt-2`,children:[(0,Y.jsx)(`div`,{className:`grid grid-cols-2 md:grid-cols-3 gap-3`,children:_.map(e=>(0,Y.jsx)(Me,{event:e},e.id))}),f&&(0,Y.jsx)(`div`,{ref:m,className:`py-4`,children:p&&(0,Y.jsx)(`div`,{className:`flex justify-center`,children:(0,Y.jsx)(l,{className:`size-5 animate-spin text-muted-foreground`})})})]}):(0,Y.jsx)(`p`,{className:`px-4 py-12 text-sm text-muted-foreground text-center`,children:n===`following`?`No ${i===`albums`?`albums`:`playlists`} from people you follow yet.`:`No ${i===`albums`?`albums`:`playlists`} yet. Check back soon!`})]})}function ze(){let{data:e}=he(),{artists:t,isLoading:n,isError:r}=J(),i=(0,W.useMemo)(()=>{let n=new Map(t.map(e=>[e.pubkey,e.trackCount])),r=new Set,i=[];if(e)for(let t of e)r.has(t)||(r.add(t),i.push({pubkey:t,trackCount:n.get(t)??0}));for(let e of t)r.has(e.pubkey)||(r.add(e.pubkey),i.push(e));return i},[e,t]);return n?(0,Y.jsx)(`div`,{className:`grid grid-cols-3 gap-4 px-4 pt-4 pb-8`,children:Array.from({length:9}).map((e,t)=>(0,Y.jsx)(Ce,{},t))}):r?(0,Y.jsx)(`p`,{className:`px-4 py-12 text-sm text-muted-foreground text-center`,children:`Failed to load artists. Check your relay connections and try again.`}):i.length===0?(0,Y.jsx)(`p`,{className:`px-4 py-12 text-sm text-muted-foreground text-center`,children:`No music artists found yet. Check back soon!`}):(0,Y.jsx)(`div`,{className:`grid grid-cols-3 gap-4 px-4 pt-4 pb-8`,children:i.map(e=>(0,Y.jsx)(Se,{pubkey:e.pubkey,subtitle:e.trackCount>0?`${e.trackCount} track${e.trackCount===1?``:`s`}`:void 0},e.pubkey))})}var Be=oe(`music`);function Ve(){let{config:e}=y(),{user:t}=C(),[n,r]=(0,W.useState)(`discover`);fe({title:`Music | ${e.appName}`,description:`Discover music on Nostr`}),le({showFAB:!1,hasSubHeader:!!t});let i=(0,W.useCallback)(()=>r(`tracks`),[]),a=(0,W.useCallback)(()=>r(`playlists`),[]),o=(0,W.useCallback)(()=>r(`artists`),[]);return(0,Y.jsxs)(`main`,{className:`flex-1 min-w-0`,children:[(0,Y.jsx)(me,{title:`Music`,icon:se(`music`,`size-5`),children:(0,Y.jsx)(V,{kindDef:Be,icon:(0,Y.jsx)(c,{className:`size-5`})})}),(0,Y.jsxs)(ue,{children:[(0,Y.jsx)(B,{label:`Discover`,active:n===`discover`,onClick:()=>r(`discover`)}),(0,Y.jsx)(B,{label:`Tracks`,active:n===`tracks`,onClick:()=>r(`tracks`)}),(0,Y.jsx)(B,{label:`Playlists`,active:n===`playlists`,onClick:()=>r(`playlists`)}),(0,Y.jsx)(B,{label:`Artists`,active:n===`artists`,onClick:()=>r(`artists`)})]}),(0,Y.jsx)(`div`,{style:{height:20}}),n===`discover`&&(0,Y.jsx)(Fe,{onSwitchToTracks:i,onSwitchToPlaylists:a,onSwitchToArtists:o}),n===`tracks`&&(0,Y.jsx)(Le,{}),n===`playlists`&&(0,Y.jsx)(Re,{}),n===`artists`&&(0,Y.jsx)(ze,{})]})}export{Ve as MusicPage}; // @license-end