1import{d as O,c as u,w as s,e as a,f as t,p as R,a as o,o as n,b as m,F as v,r as x,t as i,g as r,P as I,h as A,s as V}from"./app-DruhysRH.js";import{_ as z}from"./Pagination.vue_vue_type_script_setup_true_lang-CHwqJPsf.js";import{_ as L}from"./Breadcrumbs.vue_vue_type_script_setup_true_lang-CgDlAz95.js";import{_ as G}from"./index-Cn3tgvJS.js";import{_ as P}from"./Card.vue_vue_type_script_setup_true_lang-BLdLFqiD.js";import{_ as K}from"./SearchInput.vue_vue_type_script_setup_true_lang-B-ZWdGcl.js";import{_ as S,a as D,b as C,c as F,d as y}from"./SelectValue.vue_vue_type_script_setup_true_lang-elbgaPK8.js";import{_ as q,a as H,b as h,c as _,d as J,e as f}from"./TableHeader.vue_vue_type_script_setup_true_lang-dbmwMt-D.js";import{u as M,D as Q}from"./useServerTable-KAJ-WwI3.js";import{_ as W}from"./AdminLayout.vue_vue_type_script_setup_true_lang-BtQP8XAu.js";import{A as N,g as X,h as Y}from"./index-bwtYxKJl.js";/* empty css */import"./useForwardPropsEmits-BgC-kQXW.js";import"./RovingFocusGroup-D2z0I1Wa.js";import"./useForwardExpose-CTat24qG.js";import"./PopperContent-C-IOCxMx.js";import"./nullish-CHIgUVhi.js";import"./handleAndDispatchCustomEvent-ChOKVcqp.js";import"./utils-C1XTVx8V.js";import"./index-DJDSQw_v.js";import"./TooltipTrigger.vue_vue_type_script_setup_true_lang-DmB_b-AM.js";import"./index-CQrigcbS.js";import"./Input.vue_vue_type_script_setup_true_lang-BtkStPxd.js";import"./search-u0FFeFom.js";import"./useNonce-BLjEL9l9.js";import"./chevron-down-D-dnPIsn.js";import"./chevron-up-DQt6OmHL.js";import"./check-DCW5XOzx.js";import"./ohash.D__AXeF1-C-E83dC9.js";import"./useFormControl-DM77SyNv.js";import"./useTableSort-CIQZOZse.js";import"./index-CSEUMRIG.js";import"./chevrons-up-down-BfoXotSb.js";import"./user-cog-DF-DSDqk.js";import"./shield-C60pl2TM.js";import"./log-out-BC8F6KH-.js";import"./AppLogoIcon.vue_vue_type_script_setup_true_lang-uA8Y4q4f.js";import"./index-CpX20Zmd.js";import"./index-xGhovnIo.js";import"./index-DKG1WknE.js";import"./index-dJx_vnZ2.js";import"./shield-alert-QF3VqH9N.js";import"./refresh-cw-ICaCrnCz.js";import"./users-D9DT1FdC.js";import"./mail-C2m9H-SH.js";import"./arrow-right-left-DxxOyFOF.js";import"./server-BABDE0V1.js";import"./useFlashMessages-BaMa_VBu.js";import"./index-BoZx5lUw.js";import"./index-eYlWiynp.js";const Z={class:"px-4 py-6"},ee={class:"mb-6 grid gap-4 sm:grid-cols-2 lg:grid-cols-3"},te={class:"flex items-start justify-between gap-2"},se={class:"text-sm font-medium"},ae={class:"mt-1 text-2xl font-semibold"},le={class:"text-xs text-muted-foreground"},ie={class:"mt-3 text-xs text-muted-foreground"},re={class:"font-mono"},oe={class:"mb-4 flex flex-wrap items-center gap-2"},ne={class:"ml-1 text-xs opacity-70"},de={class:"ml-auto flex flex-wrap items-center gap-2"},ue={class:"font-medium"},me={class:"text-xs text-muted-foreground"},fe={key:0},pe={key:1},_e={key:1,class:"text-muted-foreground"},c="__all__",ft=O({__name:"Index",props:{advisories:{},counts:{},rollups:{},types:{},tiers:{},filters:{}},setup(d){const p=d,T=[{title:"Advisories",href:N().url}],{search:b,perPage:U,handlePerPageChange:j,applyFilters:k}=M({route:N().url,filters:{search:p.filters.search??void 0,per_page:p.filters.per_page},storageKey:"admin-advisories",customFilters:()=>({status:p.filters.status,type:p.filters.type??void 0,tier:p.filters.tier??void 0})}),B=[{key:"open",label:"Open"},{key:"acknowledged",label:"Acknowledged"},{key:"resolved",label:"Resolved"}],$={critical:"destructive",warning:"warning",info:"secondary",recommendation:"outline"};function E(g){return p.counts[g]??0}function w(g){return g?new Date(g).toLocaleDateString(void 0,{day:"numeric",month:"short",year:"numeric"}):"--"}return(g,l)=>(n(),u(W,{breadcrumbs:T},{default:s(()=>[a(t(R),{title:"Advisories"}),o("div",Z,[l[12]||(l[12]=o("div",{class:"mb-6"},[o("h1",{class:"text-2xl font-semibold tracking-tight"}," Advisories "),o("p",{class:"text-sm text-muted-foreground"}," Customer-facing warnings detected across the fleet. Detection runs for every team; each class stays invisible to customers until its surfacing flag is turned on. ")],-1)),o("div",ee,[(n(!0),m(v,null,x(d.rollups,e=>(n(),u(t(P),{key:e.type,class:"p-4","data-testid":`advisories-rollup-${e.type}`},{default:s(()=>[o("div",te,[o("div",null,[o("p",se,i(e.label),1),o("p",ae,i(e.advisories.toLocaleStr
1ing()),1),o("p",le," active across "+i(e.teams.toLocaleString())+" "+i(e.teams===1?"team":"teams"),1)]),a(t(L),{variant:$[e.default_tier]??"secondary"},{default:s(()=>[r(i(e.default_tier),1)]),_:2},1032,["variant"])]),o("p",ie,[r(i(e.delivery)+" delivery, gated by ",1),o("span",re,i(e.gating_feature),1)])]),_:2},1032,["data-testid"]))),128))]),o("div",oe,[(n(),m(v,null,x(B,e=>a(t(G),{key:e.key,variant:d.filters.status===e.key?"default":"outline",size:"sm","data-testid":`advisories-tab-${e.key}`,onClick:ce=>t(k)({status:e.key})},{default:s(()=>[r(i(e.label)+" ",1),o("span",ne,i(E(e.key).toLocaleString()),1)]),_:2},1032,["variant","data-testid","onClick"])),64)),o("div",de,[a(t(S),{"model-value":d.filters.type??c,"onUpdate:modelValue":l[0]||(l[0]=e=>t(k)({type:e===c?void 0:e}))},{default:s(()=>[a(t(D),{class:"w-44","data-testid":"advisories-filter-type"},{default:s(()=>[a(t(C),{placeholder:"All types"})]),_:1}),a(t(F),null,{default:s(()=>[a(t(y),{value:c},{default:s(()=>[...l[3]||(l[3]=[r("All types",-1)])]),_:1}),(n(!0),m(v,null,x(d.types,e=>(n(),u(t(y),{key:e.value,value:e.value},{default:s(()=>[r(i(e.label),1)]),_:2},1032,["value"]))),128))]),_:1})]),_:1},8,["model-value"]),a(t(S),{"model-value":d.filters.tier??c,"onUpdate:modelValue":l[1]||(l[1]=e=>t(k)({tier:e===c?void 0:e}))},{default:s(()=>[a(t(D),{class:"w-36","data-testid":"advisories-filter-tier"},{default:s(()=>[a(t(C),{placeholder:"All tiers"})]),_:1}),a(t(F),null,{default:s(()=>[a(t(y),{value:c},{default:s(()=>[...l[4]||(l[4]=[r("All tiers",-1)])]),_:1}),(n(!0),m(v,null,x(d.tiers,e=>(n(),u(t(y),{key:e.value,value:e.value},{default:s(()=>[r(i(e.label),1)]),_:2},1032,["value"]))),128))]),_:1})]),_:1},8,["model-value"]),a(t(K),{modelValue:t(b),"onUpdate:modelValue":l[2]||(l[2]=e=>I(b)?b.value=e:null),placeholder:"Search advisories or teams",class:"w-64","data-testid":"advisories-search"},null,8,["modelValue"])])]),a(t(P),{class:"py-0"},{default:s(()=>[a(t(q),{"data-testid":"advisories-table"},{default:s(()=>[a(t(H),null,{default:s(()=>[a(t(h),null,{default:s(()=>[a(t(_),null,{default:s(()=>[...l[5]||(l[5]=[r("Advisory",-1)])]),_:1}),a(t(_),null,{default:s(()=>[...l[6]||(l[6]=[r("Subject",-1)])]),_:1}),a(t(_),null,{default:s(()=>[...l[7]||(l[7]=[r("Team",-1)])]),_:1}),a(t(_),null,{default:s(()=>[...l[8]||(l[8]=[r("Tier",-1)])]),_:1}),a(t(_),null,{default:s(()=>[...l[9]||(l[9]=[r("Detected",-1)])]),_:1}),a(t(_),null,{default:s(()=>[...l[10]||(l[10]=[r("Last seen",-1)])]),_:1})]),_:1})]),_:1}),a(t(J),null,{default:s(()=>[d.advisories.data.length===0?(n(),u(t(h),{key:0},{default:s(()=>[a(t(f),{colspan:"6",class:"py-8 text-center text-muted-foreground"},{default:s(()=>[...l[11]||(l[11]=[r(" No advisories match these filters. ",-1)])]),_:1})]),_:1})):A("",!0),(n(!0),m(v,null,x(d.advisories.data,e=>(n(),u(t(h),{key:e.id},{default:s(()=>[a(t(f),null,{default:s(()=>
1[o("p",ue,i(e.title),1),o("p",me,[r(i(e.type_label),1),e.discriminator?(n(),m("span",fe," · "+i(e.discriminator),1)):A("",!0)])]),_:2},1024),a(t(f),null,{default:s(()=>[e.site_ulid?(n(),u(t(V),{key:0,href:t(X)(e.site_ulid).url,class:"hover:underline"},{default:s(()=>[r(i(e.subject_label),1)]),_:2},1032,["href"])):(n(),m("span",pe,i(e.subject_label??"--"),1))]),_:2},1024),a(t(f),null,{default:s(()=>[e.team_ulid?(n(),u(t(V),{key:0,href:t(Y)(e.team_ulid).url,class:"hover:underline"},{default:s(()=>[r(i(e.team_name),1)]),_:2},1032,["href"])):(n(),m("span",_e,"--"))]),_:2},1024),a(t(f),null,{default:s(()=>[a(t(L),{variant:$[e.tier]??"secondary"},{default:s(()=>[r(i(e.tier_label),1)]),_:2},1032,["variant"])]),_:2},1024),a(t(f),{class:"text-muted-foreground"},{default:s(()=>[r(i(w(e.detected_at)),1)]),_:2},1024),a(t(f),{class:"text-muted-foreground"},{default:s(()=>[r(i(w(e.last_seen_at)),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})]),_:1}),a(z,{class:"mt-4",paginator:d.advisories,numbered:"","per-page":t(U),"per-page-options":t(Q),"onUpdate:perPage":t(j)},null,8,["paginator","per-page","per-page-options","onUpdate:perPage"])])]),_:1}))}});export{ft 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.