// @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{It as t,Tr as n,kn as r,ln as i,mt as a,qi as o,r as s}from"./lucide-icons-BdRF0moN.js";import{t as c}from"./jsx-runtime-By8HlURe.js";import{E as l,L as u,R as d,T as f,r as p}from"./EmbeddedNote-BKfkvcrg.js";import{t as m}from"./useAppContext-Ughdk2-Z.js";import{l as h,t as g}from"./useCurrentUser-C6OJJlWo.js";import{t as _}from"./utils-BFSTDHdM.js";import{n as v}from"./appBlossom-CsMDSd4h.js";import{t as y}from"./useBlossomFallback-DY_46Uqi.js";import{n as b,o as x,r as S,t as C}from"./avatar--oX_CTF4.js";import{n as w}from"./chunk-62JRHF6Z-yJW_vgm4.js";import{t as T}from"./useProfileUrl-DoFhqUUR.js";import{r as E}from"./BioContent-BjUPDB1O.js";import{t as D}from"./skeleton-CVls4GW9.js";import{t as O}from"./getDisplayName-B6lnEGRj.js";import{p as k}from"./extraKinds-BydAXtVV.js";import{t as A}from"./formatNumber-D1ols1S-.js";import{i as j,o as M}from"./imeta-83Lqxs5-.js";import{t as N}from"./useInView-DAJQSIvc.js";import{t as P}from"./NoteMoreMenu-FwlS01AC.js";import{t as F}from"./useIsMobile-B6g4lnSy.js";import{r as I}from"./useRepostStatus-KJZve8_M.js";import{n as L,t as R}from"./RepostMenu-CULlcQsd.js";import{t as z}from"./useTrending-DsL3v2RN.js";import{n as B,t as V}from"./mediaUtils-CTfIfTcv.js";import{t as H}from"./CommentsSheet-C8LKdAjG.js";var U=e(o(),1),W=c();function G({event:e}){let{user:t}=g(),r=h(e.pubkey).data?.metadata,a=x(r),o=O(r,e.pubkey)??`Anonymous`,c=T(e.pubkey,r),{data:l}=z(e.id,e),{format:u}=p(),[d,f]=(0,U.useState)(!1),[m,_]=(0,U.useState)(!1),v=!!t&&t.pubkey!==e.pubkey;return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:`relative safe-area-bottom`,children:[(0,W.jsx)(`div`,{className:`absolute inset-x-0 bottom-0 h-32 bg-gradient-to-t from-black/70 to-transparent pointer-events-none`}),(0,W.jsxs)(`div`,{className:`relative flex items-center gap-1 px-4 py-3 max-w-xl mx-auto`,children:[(0,W.jsx)(E,{pubkey:e.pubkey,asChild:!0,children:(0,W.jsx)(w,{to:c,className:`shrink-0`,children:(0,W.jsxs)(C,{shape:a,className:`size-7`,children:[(0,W.jsx)(S,{src:r?.picture,alt:o}),(0,W.jsx)(b,{className:`bg-white/20 text-white text-xs`,children:o[0]?.toUpperCase()})]})})}),(0,W.jsx)(E,{pubkey:e.pubkey,asChild:!0,children:(0,W.jsx)(w,{to:c,className:`font-semibold text-sm text-white hover:underline truncate mr-1`,children:o})}),(0,W.jsxs)(`div`,{className:`flex items-center ml-auto shrink-0`,children:[(0,W.jsx)(L,{eventId:e.id,eventPubkey:e.pubkey,eventKind:e.kind,reactedEvent:e,reactionCount:l?.reactions,filledHeart:!0,className:`text-white hover:text-pink-400 hover:bg-white/10 p-2.5 [&_svg]:size-5`}),(0,W.jsxs)(`button`,{className:`flex items-center gap-1 p-2.5 text-white hover:text-blue-400 transition-colors`,onClick:()=>_(!0),children:[(0,W.jsx)(i,{className:`size-5`}),!!l?.replies&&(0,W.jsx)(`span`,{className:`text-sm tabular-nums drop-shadow`,children:A(l.replies)})]}),(0,W.jsx)(R,{event:e,children:e=>(0,W.jsxs)(`button`,{className:`flex items-center gap-1 p-2.5 transition-colors ${e?`text-accent`:`text-white hover:text-accent`}`,children:[(0,W.jsx)(k,{className:`size-5`}),!!((l?.reposts??0)+(l?.quotes??0))&&(0,W.jsx)(`span`,{className:`text-sm tabular-nums drop-shadow`,children:A((l?.reposts??0)+(l?.quotes??0))})]})}),v&&(0,W.jsx)(I,{target:e,children:(0,W.jsxs)(`button`,{className:`flex items-center gap-1 p-2.5 transition-colors text-white hover:text-amber-400`,title:`Zap`,children:[(0,W.jsx)(s,{className:`size-5`,fill:`none`}),!!l?.zapAmount&&(0,W.jsx)(`span`,{className:`text-sm tabular-nums drop-shadow`,children:u(l.zapAmount,{layout:`compact`})})]})}),(0,W.jsx)(`button`,{className:`p-2.5 text-white/70 hover:text-white transition-colors`,onClick:()=>f(!0),children:(0,W.jsx)(n,{className:`size-5`})})]})]})]}),(0,W.jsx)(P,{event:e,open:d,onOpenChange:f}),(0,W.jsx)(H,{event:e,open:m,onClose:()=>_(!1)})]})}function K(e,t,n=.3,r=5){if(e.length===0)return{rows:[],lastRowIncomplete:!1};let i=[],a=[],o=0;for(let s of e){let e=t(s);a.push(s),o+=e;let c=1/o;(c<=n||a.length>=r)&&(i.push({items:[...a],heightFraction:c}),a=[],o=0)}if(a.length>0){let e=1/o;return i.push({items:a,heightFraction:Math.min(e,n)}),{rows:i,lastRowIncomplete:!0}}return{rows:i,lastRowIncomplete:!1}}function q({pubkey:e}){let t=h(e).data?.metadata,n=x(t),r=t?.name??t?.display_name??`Anonymous`;return(0,W.jsxs)(`div`,{className:`absolute inset-0 flex items-center justify-center bg-gradient-to-br from-primary/20 via-background/40 to-primary/5`,children:[(0,W.jsxs)(`div`,{className:`absolute inset-0 flex items-center justify-center opacity-20`,children:[(0,W.jsx)(`div`,{className:`size-24 rounded-full border border-primary animate-ping`,style:{animationDuration:`3s`}}),(0,W.jsx)(`div`,{className:`absolute size-16 rounded-full border border-primary animate-ping`,style:{animationDuration:`2.3s`,animationDelay:`0.5s`}})]}),(0,W.jsxs)(C,{shape:n,className:`size-12 relative ring-2 ring-primary/40`,children:[(0,W.jsx)(S,{src:t?.picture,alt:r}),(0,W.jsx)(b,{className:`text-base`,children:r[0]?.toUpperCase()})]})]})}function J({item:e,onClick:n}){let[i,o]=(0,U.useState)(!1),{config:s}=m(),c=y(e.url),{ref:l,inView:f}=N({rootMargin:`400px`,skip:!e.encryption}),p=M(e.url,e.encryption,{enabled:f}),h=p.encrypted?p.src:c.src,g=p.encrypted?void 0:c.onError,v=e.contentWarning!==void 0,b=s.contentWarningPolicy,[x,S]=(0,U.useState)(!1),C=v&&b!==`show`&&!x;return(0,W.jsxs)(`button`,{ref:l,className:`relative overflow-hidden rounded-lg bg-muted group focus:outline-none focus-visible:ring-2 focus-visible:ring-primary w-full h-full`,onClick:C?e=>{e.stopPropagation(),S(!0)}:n,"aria-label":C?`Reveal sensitive content`:`View media`,children:[u(e.blurhash)&&(0,W.jsx)(d,{hash:e.blurhash,width:`100%`,height:`100%`,resolutionX:32,resolutionY:32,punch:1,className:_(`absolute inset-0 transition-opacity duration-300`,i&&!C?`opacity-0`:`opacity-100`),style:{width:`100%`,height:`100%`}}),!u(e.blurhash)&&!i&&e.type!==`audio`&&(0,W.jsx)(D,{className:`absolute inset-0 w-full h-full rounded-none`}),e.type===`video`&&!C&&(0,W.jsx)(`video`,{src:h,"data-no-native-poster":``,poster:`data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7`,className:_(`absolute inset-0 w-full h-full object-cover transition-opacity duration-300 group-hover:scale-[1.04]`,i?`opacity-100`:`opacity-0`),muted:!0,autoPlay:s.autoplayVideos,loop:!0,playsInline:!0,preload:`metadata`,onLoadedData:()=>o(!0),onError:g}),e.type===`image`&&!C&&(0,W.jsx)(`img`,{src:h,alt:e.alt??``,className:_(`absolute inset-0 w-full h-full object-cover transition-all duration-300 group-hover:scale-[1.04]`,i?`opacity-100`:`opacity-0`),loading:`lazy`,onLoad:()=>o(!0),onError:g,decoding:`async`}),e.type===`audio`&&!C&&(0,W.jsx)(q,{pubkey:e.event.pubkey}),p.encrypted&&!p.src&&!C&&(0,W.jsx)(j,{fill:!0,loading:p.loading,unsupported:p.unsupported,tooLarge:p.tooLarge,byteSize:p.byteSize,onDecryptAnyway:p.decryptAnyway}),C&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`absolute inset-0 bg-muted/60 blur-lg`}),(0,W.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center z-10`,children:(0,W.jsx)(a,{className:`size-5 text-muted-foreground`})})]}),e.type===`video`&&!C&&(0,W.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity`,children:(0,W.jsx)(`div`,{className:`bg-black/50 rounded-full p-2`,children:(0,W.jsx)(t,{className:`size-5 text-white fill-white`})})}),e.hasMultiple&&e.type===`image`&&!C&&(0,W.jsx)(`div`,{className:`absolute top-1.5 right-1.5 bg-black/60 text-white rounded p-0.5`,children:(0,W.jsx)(r,{className:`size-3.5`})}),!C&&(0,W.jsx)(`div`,{className:`absolute inset-0 bg-black/0 group-hover:bg-black/15 transition-colors duration-200`})]})}var Y=[[1.5,.8,1.2],[1,1.3,.9],[.75,1.5,1],[1.2,1,1.3],[1,.8,1.5]],X=[[1.4,.9],[.8,1.3],[1.2,1],[1,1.5],[1.3,.7],[.9,1.1],[1.5,.8]];function Z({count:e=15}){let t=F(),n=t?X:Y,r=t?2:3,i=Math.ceil(e/r);return(0,W.jsx)(`div`,{className:`flex flex-col gap-1.5 p-1.5`,children:Array.from({length:i}).map((t,i)=>{let a=n[i%n.length];return(0,W.jsx)(`div`,{className:`flex gap-1.5`,style:{aspectRatio:`${a.reduce((e,t)=>e+t,0)}`},children:a.map((t,n)=>i*r+n>=e?null:(0,W.jsx)(D,{className:`rounded-lg h-full`,style:{flexGrow:t,flexBasis:0}},n))},i)})})}function Q({events:e,className:t,initialOpenUrl:n,onInitialOpenConsumed:r,onNearEnd:i,hasNextPage:a}){let o=F(),{config:s}=m(),c=(0,U.useMemo)(()=>v(s.blossomServerMetadata,s.useAppBlossomServers),[s.blossomServerMetadata,s.useAppBlossomServers]),u=(0,U.useMemo)(()=>e.map(e=>V(e,c)).filter(e=>e!==null).filter(e=>!(e.contentWarning!==void 0&&s.contentWarningPolicy===`hide`)),[e,c,s.contentWarningPolicy]),d=(0,U.useMemo)(()=>u.flatMap(e=>e.allUrls.map((t,n)=>({url:t,type:e.allTypes[n]??e.type,mime:e.mime,dim:e.allDims[n]??e.dim,blurhash:e.blurhash,encryption:e.allEncryption[n]??e.encryption,pubkey:e.event.pubkey,event:e.event,indexInEvent:n,countInEvent:e.allUrls.length}))),[u]),p=(0,U.useMemo)(()=>{let e=[],t=0;for(let n of u)e.push(t),t+=n.allUrls.length;return e},[u]),{rows:h,lastRowIncomplete:g}=(0,U.useMemo)(()=>K(u.map((e,t)=>({item:e,index:t})),({item:e})=>B(e.dim),o?.45:.3,o?2:5),[u,o]),y=a&&g?h.slice(0,-1):h,b=(0,U.useMemo)(()=>{if(!n)return null;let e=d.findIndex(e=>e.url===n);return e>=0?e:null},[d,n]),[x,S]=(0,U.useState)(b);(0,U.useEffect)(()=>{b!==null&&S(b)},[b]);let C=x===null?null:d[x],w=(0,U.useMemo)(()=>{let e=d.map(e=>e.url);return a&&e.push(f),e},[d,a]),T=(0,U.useMemo)(()=>d.map(e=>e.type),[d]),E=(0,U.useMemo)(()=>d.map(e=>({mime:e.mime,dim:e.dim,blurhash:e.blurhash,pubkey:e.pubkey,encryption:e.encryption})),[d]),O=(0,U.useRef)(!1),k=(0,U.useRef)(d.length);(0,U.useEffect)(()=>{let e=k.current;k.current=d.length,O.current&&d.length>e&&x!==null&&(O.current=!1,S(x+1))},[d.length]);let A=(0,U.useCallback)(()=>{S(e=>{if(e===null)return null;if(e>=d.length-1)return O.current=!0,i?.(),e;let t=e+1;return t>=d.length-1&&i?.(),t})},[d.length,i]);return u.length===0?null:(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:_(`flex flex-col gap-1.5 p-1.5`,t),children:[y.map((e,t)=>(0,W.jsx)(`div`,{className:`flex gap-1.5`,style:{aspectRatio:`${e.items.reduce((e,{item:t})=>e+B(t.dim),0)}`},children:e.items.map(({item:e,index:t})=>(0,W.jsx)(`div`,{className:`relative h-full`,style:{flexGrow:B(e.dim),flexBasis:0},children:(0,W.jsx)(J,{item:e,onClick:()=>S(p[t])})},e.event.id))},t)),a&&(0,W.jsx)(W.Fragment,{children:(o?X:Y).slice(0,2).map((e,t)=>(0,W.jsx)(`div`,{className:`flex gap-1.5`,style:{aspectRatio:`${e.reduce((e,t)=>e+t,0)}`},children:e.map((e,t)=>(0,W.jsx)(D,{className:`rounded-lg h-full animate-pulse`,style:{flexGrow:e,flexBasis:0}},t))},`skel-${t}`))})]}),x!==null&&(0,W.jsx)(l,{images:w,mediaTypes:T,mediaMeta:E,currentIndex:x,onClose:()=>{S(null),r?.(),O.current=!1},onNext:A,onPrev:()=>S(e=>e===null?null:Math.max(e-1,0)),topBarLeft:C&&C.countInEvent>1?(0,W.jsxs)(`span`,{className:`text-white/80 text-sm font-medium tabular-nums`,children:[C.indexInEvent+1,` / `,C.countInEvent]}):(0,W.jsx)(`span`,{}),bottomBar:C?(0,W.jsx)(G,{event:C.event}):void 0})]})}export{Z as n,Q as t}; // @license-end