1import{d as Ge,aX as Je,u as Ke,bR as Ye,fu as He,e as fe,aU as We,c as o,Q as S,w as Z,a as P,v as c,n as q,k as a,b3 as $,m as B,F as ge,y as he,p as ee,b6 as Xe,bg as Ze,o as h,j as C,l as Q,b as u,gi as et,gj as tt,gk as lt,aD as ye,bN as _e,z as te,fN as xe,a1 as at,c6 as st,gm as rt,q as ot,c0 as nt,eD as le,e3 as ut}from"./DvgxvNL0.js";import{F as it}from"./BiDyM4rQ.js";import{_ as ct}from"./D9Zv7lng.js";import{_ as pt,M as mt}from"./7pyNScS8.js";import{M as dt}from"./nr-tjVFo.js";import{e as vt}from"./e5DEcwLH.js";import{a as ft}from"./CBTnUKTP.js";import{q as I,b as be}from"./U-AdfSvf.js";import{_ as gt}from"./COIvG6NE.js";import{_ as ht}from"./BdoLP461.js";import{a as yt}from"./hfN1AajU.js";import{C as G}from"./CAEf2ok7.js";import{M as _t}from"./BjU-IAMN.js";import{C as xt}from"./DQoYOIvj.js";import"./Cvyrctwg.js";import"./Dt8Hubkr.js";import"./BEQ0QmdP.js";import"./DG1csYqL.js";import"./C0jx6QEY.js";import"./DfQlAftT.js";import"./C4HPFwuH.js";import"./ChnkET4H.js";import"./CdqRIBwd.js";import"./JsiB6ufH.js";import"./C1aTU94V.js";import"./0Xf0gEog.js";import"./CaaCIJD6.js";import"./f3yt5Spu.js";import"./DSCNxbqv.js";import"./BuVIxg8d.js";import"./DQSAL0As.js";import"./BsvTVIu5.js";import"./C6ZpWnnc.js";import"./DIaiVQoC.js";import"./D7TGyTV9.js";import"./C_QTH23T.js";import"./B0nhbelq.js";import"./BYO7PYqm.js";import"./Cvd_CCXx.js";import"./bo9oh1VK.js";import"./BmilNSRs.js";import"./Ba6enZVq.js";import"./BT-X2sQH.js";const bt={class:"flex flex-col gap-4"},wt={class:"flex flex-row gap-2 align-middle font-semibold"},Tt={class:"flex flex-row gap-2 align-middle font-semibold"},kt={class:"truncate text-contrast"},Rt={class:"flex min-h-7 min-w-0 max-w-full flex-1 items-center gap-1.5 pr-1"},St={class:"min-w-0 flex-1 truncate px-0.5 font-semibold text-inherit"},jt={class:"flex flex-row justify-between gap-1 border-0 border-b border-solid border-b-surface-5 py-2"},Vt={class:"font-semibold text-primary"},Pt=["aria-selected"],qt={class:"flex shrink-0 items-center justify-center text-brand"},Et={class:"flex min-w-64 flex-col gap-3"},Mt={class:"flex flex-col gap-2"},$t={class:"flex min-w-64 flex-col gap-3"},Ft={class:"flex flex-col gap-2"},At={class:"flex flex-col gap-2"},Ct={key:0},It={key:1,class:"universal-card flex h-24 items-center justify-center text-secondary"},Ot={key:2,class:"flex flex-col gap-4 overflow-x-clip"},Lt={key:3,class:"flex justify-end"},O=15,ql=Ge({__name:"index",async setup(Nt){let j,J;Je({title:"Reports queue - Modrinth"});const{formatMessage:F}=Ke(),E=yt(),n=Ye(),we=He(),Te=([j,J]=fe(()=>Xe()),j=await j,J(),j),ke=We(),Re=nt(),{data:f,pending:Se}=([j,J]=fe(async()=>ft("new-moderation-reports",async()=>{const e=performance.now();let t=0;const l=350,r=[],m=[];let d,v=!0;for(;v&&(d=await Ze(`report?count=${l}&offset=${t}&all=true`,{apiVersion:3}),v=d.length>0,!!v);){const Be=vt(d,ke);if(m.push(Be),t+=l,m.length>=3){const Qe=await Promise.all(m.splice(0,2));r.push(...Qe.flat())}}const s=await Promise.all(m);r.push(...s.flat());const ve=performance.now()-e;return Re(`Reports fetched and processed in ${ve.toFixed(2)}ms (${(ve/1e3).toFixed(2)}s)`),r})),j=await j,J(),j),R=o(()=>Se.value||f.value==null),ae=["oldest","newest"],je=[{value:"oldest",label:"Oldest"},{value:"newest",label:"Newest"}],H=[{value:"all",name:"All"},{value:"unread",name:"Unread"},{value:"read",name:"Read"},{value:"involved",name:"Involved"}],se=H.map(e=>e.value),re=[{value:"all",name:"All project types"},{value:"modpack",name:"Modpacks"},{value:"mod",name:"Mods"},{value:"resourcepack",name:"Resource Packs"},{value:"datapack",name:"Data Packs"},{value:"plugin",name:"Plugins"},{value:"shader",name:"Shaders"},{value:"minecraft_java_server",name:"Servers"},{value:"shared-instance",name:"Shared instance"}],oe=re.map(e=>e.value),ne=[{value:"all",name:"All"},{value:"project",name:"Projects"},{value:"user",name:"Users"},{value:"version",name:"Versions"},{value:"shared-instance",name:"Shared instances"}],ue=ne.map(e=>e.value);function V(e,t,l){const r=I(e??"");return t.includes(r)?r:l}function ie(e){const t=Number.parseInt(I(e??""),10);return Number.isInteger(t)&&t>0?t:1}function Ve(e,t){return e.length!==t.length?!1:e.every((l,r)=>l===t[r])}function ce(e){const t=Object.keys(e).sort();return JSON.stringify(Object.fromEntries(t.flatMap(l=>{const r=e[l];return r==null||r===""?[]:[[l,Array.isArray(r)?r.map(String):String(r)]]})))}const T=S(I(n.query.q??"")),k=S(V(n.query.sort,ae,"oldest")),g=S(V(n.query.messages,se,"all")),Pe=o(()=>H.find(e=>e.value===g.value)?.name??"All"),y=S(V(n.query.projectType,oe,"all")),_=S(V(n.query.target,ue,"all")),x=S(I(n.query.issue??"")||"all"),i=S(be(n.query.selected)),p=S(ie(n.query.page));function qe(){const e={...n.query};T.value?e.q=T.value:delete e.q,k.value!=="oldest"?e.sort=k.value:delete e.sort,g.value!=="all"?e.messages=g.value:delete e.messages,_.value!=="all"?e.target=_.value:delete e.target,x.value!=="all"?e.issue=x.value:delete e.issue,y.value!=="all"?e.projectType=y.value:delete e.projectType,i.value.length===1?e.selected=i.value[0]:i.value.length>1?e.selected=i.value:delete e.selected,p.value>1?e.page=String(p.value):delete e.page,ce(n.query)!==ce(e)&&we.replace({path:n.path,query:e})}function Ee(){const e=I(n.query.q??"");T.value!==e&&(T.value=e);const t=V(n.query.sort,ae,"oldest");k.value!==t&&(k.value=t);const l=V(n.query.messages,se,"all");g.value!==l&&(g.value=l);const r=V(n.query.projectType,oe,"all");y.value!==r&&(y.value=r);const m=V(n.query.target,ue,"all");_.value!==m&&(_.value=m);const d=I(n.query.issue??"")||"all";x.value!==d&&(x.value=d);const v=be(n.query.selected);Ve(i.value,v)||(i.value=v);const s=ie(n.query.page);p.value!==s&&(p.value=s)}Z([T,k,g,y,_,x,i,p],qe,{deep:!0}),Z(()=>n.query,Ee,{deep:!0});const K=S([{key:"project",enabled:!0},{key:"reporter",enabled:!0},{key:"target",enabled:!0}]),pe=o(()=>
1{if(!f.value)return[];const e=[],t={},l={},r={},m=K.value.find(s=>s.key==="project")?.enabled??!0,d=K.value.find(s=>s.key==="reporter")?.enabled??!0,v=K.value.find(s=>s.key==="target")?.enabled??!0;for(const s of W.value)s.project&&m&&(t[s.project.id]={...s.project,report_item_count:(t[s.project.id]?.report_item_count||0)+1}),s.reporter_user&&d&&(l[s.reporter_user.id]={...s.reporter_user,report_item_count:(l[s.reporter_user.id]?.report_item_count||0)+1}),s.target&&v&&(r[s.target.slug]={...s.target,report_item_count:(r[s.target.slug]?.report_item_count||0)+1});return Object.keys(t).length!==0&&(e.push({type:"section-header",label:"Projects"}),Object.values(t).sort((s,w)=>s.report_item_count===w.report_item_count?s.title.localeCompare(w.title):w.report_item_count-s.report_item_count).forEach(s=>{e.push({value:`project/${s.id}`,label:`${s.title} (${E(s.report_item_count)})`,icon:s.icon_url?le("img",{src:s.icon_url}):void 0})})),Object.keys(l).length!==0&&(e.push({type:"section-header",label:"Reporters"}),Object.values(l).sort((s,w)=>s.report_item_count===w.report_item_count?s.username.localeCompare(w.username):w.report_item_count-s.report_item_count).forEach(s=>{e.push({value:`reporter/${s.id}`,label:`${s.username} (${E(s.report_item_count)})`,icon:s.avatar_url?le("img",{src:s.avatar_url}):void 0})})),Object.keys(r).length!==0&&(e.push({type:"section-header",label:"Targets"}),Object.values(r).sort((s,w)=>s.report_item_count===w.report_item_count?s.name.localeCompare(w.name):w.report_item_count-s.report_item_count).forEach(s=>{e.push({value:`target/${s.slug}`,label:`${s.name} (${E(s.report_item_count)})`,icon:s.avatar_url?le("img",{src:s.avatar_url}):void 0})})),e}),A=o(()=>Math.ceil((M.value?.length||0)/O)),me=o(()=>!f.value||f.value.length===0?null:new it(f.value,{keys:[{name:"id",weight:3},{name:"body",weight:3},{name:"report_type",weight:3},{name:"item_id",weight:2},{name:"reporter_user.username",weight:2},"project.name","project.slug","user.username","version.name","target.name","target.slug"],includeScore:!0,threshold:.4})),Me=o(()=>{if(!f.value?.length)return new Map;const e=new Map;for(const t of f.value)if(t.thread?.members?.length){const l=new Map;for(const r of t.thread.members)l.set(r.id,r.role);e.set(t.id,l)}return e}),de=o(()=>!T.value||!me.value?null:me.value.search(T.value).map(e=>e.item)),L=o(()=>f.value?T.value&&de.value?de.value:[...f.value]:[]),W=o(()=>L.value.filter(e=>N(e,g.value)&&U(e,y.value)&&z(e,_.value)&&D(e,x.value)));function N(e,t){if(t==="all")return!0;const l=e.thread?.messages||[];if(l.length===0)return t==="unread";if(!l[l.length-1].author_id)return!1;if(t==="involved"){const v=Te.value.user?.id;return!!v&&l.some(s=>s.author_id===v)}const r=Me.value.get(e.id);if(!r)return!1;const m=r.get(l[l.length-1].author_id),d=m==="moderator"||m==="admin";return t==="read"?d:!d}function U(e,t){return t==="all"?!0:t==="shared-instance"?e.item_type==="shared-instance":e.project?.project_type===t}function z(e,t){return t==="all"||e.item_type===t}function D(e,t){return t==="all"||e.report_type===t}function Y(e,t){return`${e} (${E(t)})`}const $e=o(()=>L.value.filter(e=>U(e,y.value)&&z(e,_.value)&&D(e,x.value))),Fe=o(()=>L.value.filter(e=>N(e,g.value)&&z(e,_.value)&&D(e,x.value))),Ae=o(()=>L.value.filter(e=>N(e,g.value)&&U(e,y.value)&&D(e,x.value))),Ce=o(()=>L.value.filter(e=>N(e,g.value)&&U(e,y.value)&&z(e,_.value))),Ie=o(()=>H.map(e=>({value:e.value,label:R.value?e.name:Y(e.name,$e.value.filter(t=>N(t,e.value)).length)}))),Oe=o(()=>re.map(e=>({value:e.value,label:R.value?e.name:Y(e.name,Fe.value.filter(t=>U(t,e.value)).length)}))),Le=o(()=>ne.map(e=>({value:e.value,label:R.value?e.name:Y(e.name,Ae.value.filter(t=>z(t,e.value)).length)}))),Ne=o(()=>
1{const e=new Set((f.value??[]).map(l=>l.report_type));return[{value:"all",name:"All"},...Array.from(e).sort().map(l=>({value:l,name:ut(F,l)}))].map(l=>({value:l.value,label:R.value?l.name:Y(l.name,Ce.value.filter(r=>D(r,l.value)).length)}))}),M=o(()=>{const e=i.value,t=e.length===0?[...W.value]:W.value.filter(l=>{const r=new Set(e),m=l.reporter_user?`reporter/${l.reporter_user.id}`:null,d=l.project?`project/${l.project.id}`:null,v=l.target?`target/${l.target.slug}`:null;return m&&r.has(m)||(d&&r.has(d))|(v&&r.has(v))});return k.value==="oldest"?t.sort((l,r)=>new Date(l.created).getTime()-new Date(r.created).getTime()):t.sort((l,r)=>new Date(r.created).getTime()-new Date(l.created).getTime()),t}),X=o(()=>{if(!M.value)return[];const e=(p.value-1)*O,t=e+O;return M.value.slice(e,t)}),Ue=o(()=>M.value.length===0?0:O*(p.value-1)+1),ze=o(()=>O*(p.value-1)+Math.min(O,X.value.length));function b(e){p.value=e}Z(A,e=>{if(!R.value){if(e===0){p.value!==1&&b(1);return}p.value>e&&b(e)}});function De(e){f.value&&(f.value=f.value.filter(t=>t.id!==e),p.value>A.value&&(p.value=Math.max(1,A.value)))}return(e,t)=>(h(),P("div",bt,[c(pt,{modelValue:a(T),"onUpdate:modelValue":t[15]||(t[15]=l=>$(T)?T.value=l:null),page:a(p),"total-pages":a(A),loading:a(R),onSearch:t[16]||(t[16]=l=>b(1)),onSwitchPage:b},{actions:q(()=>[c(a(G),{modelValue:a(g),"onUpdate:modelValue":t[0]||(t[0]=l=>$(g)?g.value=l:null),class:"!w-full flex-grow sm:!w-[200px] sm:flex-grow-0",options:a(Ie),placeholder:a(F)(a(Q).filterByLabel),"trigger-type":"base","trigger-size":"lg",onSelect:t[1]||(t[1]=l=>b(1))},{selected:q(()=>[u("span",wt,[c(a(et),{class:"size-5 flex-shrink-0 text-secondary"}),c(ct,{label:a(Pe),count:a(M).length,loading:a(R)},null,8,["label","count","loading"])])]),_:1},8,["modelValue","options","placeholder"]),c(a(G),{modelValue:a(k),"onUpdate:modelValue":t[2]||(t[2]=l=>$(k)?k.value=l:null),class:"!w-full flex-grow sm:!w-[150px] sm:flex-grow-0 lg:!w-[150px]",options:je,placeholder:a(F)(a(Q).sortByLabel),"trigger-type":"base","trigger-size":"lg",onSelect:t[3]||(t[3]=l=>b(1))},{selected:q(({label:l})=>[u("span",Tt,[a(k)==="oldest"?(h(),B(a(tt),{key:0,class:"size-5 flex-shrink-0 text-secondary"})):(h(),B(a(lt),{key:1,class:"size-5 flex-shrink-0 text-secondary"})),u("span",kt,C(l),1)])]),_:1},8,["modelValue","placeholder"]),c(a(_t),{modelValue:a(i),"onUpdate:modelValue":[t[7]||(t[7]=l=>$(i)?i.value=l:null),t[8]||(t[8]=l=>b(1))],options:a(pe),"max-height":500,"dropdown-min-width":"360px","no-options-message":"no options found",searchable:a(pe).length>6,"max-tag-rows":1,"fit-content":"","trigger-type":"base","trigger-size":"lg","checkbox-position":"right","show-selection-actions":"","should-show-select-all":""},{"input-content":q(({isOpen:l,openDirection:r})=>[u("div",Rt,[c(a(xe),{class:"size-5 shrink-0 text-primary"}),u("span",St,C(a(i).length===0?"All reports":`${a(i).length} selected`),1),c(a(st),{class:te(["size-5 shrink-0 text-primary transition-transform duration-150",l&&r==="down"?"rotate-90":"-rotate-90"])},null,8,["class"])])]),top:q(()=>[u("div",jt,[(h(!0),P(ge,null,he(a(K),l=>(h(),P("div",{key:l.key,class:"flex flex-row gap-2 px-4"},[u("span",Vt,C(l.key),1),c(a(xt),{modelValue:l.enabled,"onUpdate:modelValue":r=>l.enabled=r},null,8,["modelValue","onUpdate:modelValue"])]))),128))]),u("div",null,[u("button",{type:"button",class:te(["flex w-full cursor-pointer items-center gap-1.5 border-0 bg-surface-4 px-4 py-3 text-left shadow-none transition-all duration-150 hover:brightness-[115%] focus:brightness-[115%]",a(i).length===0?"text-contrast":"text-primary"]),"aria-selected":a(i).length===0,role:"option",onClick:t[4]||(t[4]=()=>{i.value=[],b(1)}),onKeydown:[t[5]||(t[5]=ye(_e(()=>{},["stop"]),["enter"])),t[6]||(t[6]=ye(_e(()=>{},["stop"]),["space"]))]},[c(a(xe),{class:te(["h-5 w-5 shrink-0 text-primary",a(i).length===0?"text-contrast":"text-primary"])},null,8,["class"]),t[17]||(t[17]=u("span",{class:"min-w-0 flex-1 font-semibold leading-tight"},"All reports",-1)),u("span",qt,[a(i).length===0?(h(),B(a(at),{key:0,"aria-hidden":"true",class:"size-5"})):ee("",!0)])],42,Pt)])]),_:1},8,["modelValue","options","searchable"]),c(a(gt),{label:"Advanced filters",size:"lg","auto-focus":!1},{trigger:q(()=>[c(a(rt),{"aria-hidden":"true"}),t[18]||(t[18]=ot(" Advanced filters ",-1))]),panel:q(()=>[u("div",Et,[u("div",Mt,[t[19]||(t[19]=u("span",{class:"text-sm font-semibold text-secondary"},"Report target",-1)),c(a(G),{modelValue:a(_),"onUpdate:modelValue":t[9]||(t[9]=l=>$(_)?_.value=l:null),class:"!w-full",options:a(Le),placeholder:a(F)(a(Q).filterByLabel),onSelect:t[10]||(t[10]=l=>b(1))},null,8,["modelValue","options","placeholder"])]),u("div",$t,[u("div",Ft,[t[20]||(t[20]=u("span",{class:"text-sm font-semibold text-secondary"},"Issue type",-1)),c(a(G),{modelValue:a(x),"onUpdate:modelValue":t[11]||(t[11]=l=>$(x)?x.value=l:null),class:"!w-full",options:a(Ne),placeholder:a(F)(a(Q).filterByLabel),onSelect:t[12]||(t[12]=l=>b(1))},null,8,["modelValue","options","placeholder"])])]),u("div",At,[t[21]||(t[21]=u("span",{class:"text-sm font-semibold text-secondary"},"Project type",-1)),c(a(G),{modelValue:a(y),"onUpdate:modelValue":t[13]||(t[13]=l=>$(y)?y.value=l:null),class:"!w-full",options:a(Oe),placeholder:a(F)(a(Q).filterByLabel),onSelect:t[14]||(t[14]=l=>b(1))},null,8,["modelValue","options","placeholder"])])])]),_:1})]),meta:q(()=>[!a(R)&&a(M).length>0?(h(),P("div",Ct," Showing "+C(a(E)(a(Ue)))+"â"+C(a(E)(a(ze)))+" of "+C(a(E)(a(M).length))+" reports ",1)):ee("",!0)]),_:1},8,["modelValue","page","total-pages","loading"]),a(R)?(h(),B(mt,{key:0})):a(X).length===0?(h(),P("div",It," No reports in queue. ")):(h(),P("div",Ot,[(h(!0),P(ge,null,he(a(X),l=>(h(),B(dt,{key:l.id,report:l,collapsed:!0,"dismiss-after-close":"",onDismiss:r=>De(l.id)},null,8,["report","onDismiss"]))),128))])),a(A)>1?(h(),P("div",Lt,[c(a(ht),{page:a(p),count:a(A),onSwitchPage:b}
1,null,8,["page","count"])])):ee("",!0)]))}});export{ql as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.