1import{ab as z,Z as D,m as i,t as R,ac as S,b as r,e as u,f as e,K as g,u as c,G as w,an as T,b4 as $,a0 as L,$ as B,L as d,O as f,I as E,aD as G,a_ as F,M as I,by as O,W as l,E as U,aC as A,aj as q}from"./vue-vendor-fe2d361f.js";import{_ as C}from"./AsyncStateView-4db1bf77.js";import{_ as H}from"./ErrorBanner-e2595e8a.js";const P=e("div",null,[e("p",{class:"pluma-eyebrow"},"Global sources"),e("h2",{class:"pluma-heading mt-1 text-2xl"},"Feeds"),e("p",{class:"mt-1 text-sm text-neutral-500 dark:text-neutral-400"},"Health, subscriber reach, ingestion freshness, and refresh controls.")],-1),K={class:"relative"},Q=q('<option value="">All health states</option><option value="healthy">Healthy</option><option value="failing">Failing</option><option value="stale">Stale</option><option value="orphaned">Orphaned</option><option value="queued">Queued</option><option value="running">Running</option>',7),W=[Q],Z={class:"pluma-button-primary"},J={key:3,class:"mt-5 grid gap-3 xl:grid-cols-2"},X={class:"flex h-12 w-12 shrink-0 items-center justify-center overflow-hidden rounded-xl bg-neutral-100 dark:bg-neutral-800"},Y=["src"],ee={class:"min-w-0 flex-1"},te={class:"flex items-center gap-2"},se={class:"truncate font-semibold group-hover:text-violet-700 dark:group-hover:text-violet-300"},ae={class:"mt-1 truncate text-xs text-neutral-500"},re={class:"mt-3 flex flex-wrap gap-x-4 gap-y-1 text-xs text-neutral-400"},oe={key:0,class:"mt-2 line-clamp-1 text-xs text-red-600 dark:text-red-300"},le={key:4,class:"mt-5 flex justify-between"},ne=["disabled"],ie=["disabled"],pe={__name:"AdminFeeds",setup(ue){const n=z(),o=D({search:"",health:"",cursor:""}),m=i(()=>n.state.admin.feeds),x=i(()=>n.state.admin.feedsMeta),p=i(()=>n.getters["admin/isLoading"]("feeds")),b=i(()=>n.getters["admin/error"]("feeds")),h=i(()=>{var s,a;return(a=(s=x.value)==null?void 0:s.links)==null?void 0:a.prev}),v=i(()=>{var s,a;return(a=(s=x.value)==null?void 0:s.links)==null?void 0:a.next}),y=()=>Object.fromEntries(Object.entries(o).filter(([,s])=>s)),_=()=>{o.cursor="",n.dispatch("admin/loadFeeds",y())};function k(s){o.cursor=new URL(s).searchParams.get("cursor")||"",n.dispatch("admin/loadFeeds",y())}function M(s){return s?new Intl.RelativeTimeFormat(void 0,{numeric:"auto"}).format(Math.round((Number(s)-Date.now())/864e5),"day"):"never"}function N(s){return s==="healthy"?"bg-emerald-100 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300":s==="queued"||s==="running"?"bg-blue-100 text-blue-700 dark:bg-blue-500/15 dark:text-blue-300":"bg-red-100 text-red-700 dark:bg-red-500/15 dark:text-red-300"}return R(_),(s,a)=>{const V=S("router-link");return r(),u("section",null,[P,e("form",{class:"pluma-surface mt-5 grid gap-3 p-4 md:grid-cols-[minmax(16rem,1fr)_auto_auto]",onSubmit:B(_,["prevent"])},[e("label",K,[g(c(F),{class:"absolute left-3 top-3 text-neutral-400",size:18}),w(e("input",{"onUpdate:modelValue":a[0]||(a[0]=t=>o.search=t),class:"pluma-input !py-2.5 !pl-10",placeholder:"Title, domain, URL, or exact feed ID"},null,512),[[T,o.search,void 0,{trim:!0}]])]),w(e("select",{"onUpdate:modelValue":a[1]||(a[1]=t=>o.health=t),class:"pluma-input !py-2.5"},W,512),[[$,o.health]]),e("button",Z,[g(c(F),{size:17}),L("Filter")])],32),b.value?(r(),d(H,{key:0,class:"mt-4",message:b.value.message,retryable:"",onRetry:_},null,8,["message"])):f("",!0),p.value&&!m.value.length?(r(),d(C,{key:1,variant:"loading",rows:6})):m.value.length?(r(),u("div",J,[(r(!0),u(E,null,G(m.value,t=>(r(),d(V,{key:t.feed_id,to:{name:"AdminFeedDetail",params:{reference:t.reference}},class:"pluma-surface group flex gap-4 p-4 transition hover:ring-2 hover:ring-violet-300/60 dark:hover:ring-violet-500/30"},{default:I(()=>[e("span",X,[t.image_url?(r(),u("img",{key:0,src:t.image_url,alt:"",class:"h-full w-full object-cover",onError:a[2]||(a[2]=j=>j.currentTarget.style.display="none")},null,40,Y)):(r(),d(c(O),{key:1,size:21}))]),e("div",ee,[e("div",te,[e("p",se,l(t.title),1),e("span",{class:U(["rounded-full px-2 py-0.5 text-[11px] font-semibold capitalize",N(t.health)])},l(t.health),3)]),e("p",ae,l(t.url),1),e("div",re,[e("span",null,l(t.subscriber_count)+" subscribers",1),e("span",null,l(t.article_c
1ount)+" articles",1),e("span",null,"Refreshed "+l(M(t.last_successful_refresh)),1)]),t.sync_error?(r(),u("p",oe,l(t.sync_error.message),1)):f("",!0)]),g(c(A),{size:18,class:"self-center text-neutral-400"})]),_:2},1032,["to"]))),128))])):(r(),d(C,{key:2,variant:"empty",title:"No feeds found",message:"Try a different source or health filter."})),h.value||v.value?(r(),u("div",le,[e("button",{class:"pluma-button-secondary",disabled:!h.value||p.value,onClick:a[3]||(a[3]=t=>k(h.value))},"Previous",8,ne),e("button",{class:"pluma-button-secondary",disabled:!v.value||p.value,onClick:a[4]||(a[4]=t=>k(v.value))},"Next",8,ie)])):f("",!0)])}}};export{pe 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.