@piwitests/server 0.18.1 → 0.18.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{BEB2Mv6B.js → 4TxgDGVa.js} +1 -1
- package/.output/public/_nuxt/{CBEM3L1q.js → 9-wVZMur.js} +1 -1
- package/.output/public/_nuxt/{l0QnzFNM.js → B-5GukRk.js} +1 -1
- package/.output/public/_nuxt/{lowCGL2S.js → B-IcwqZ2.js} +1 -1
- package/.output/public/_nuxt/{CmbjAoQu.js → B1G3GGhQ.js} +1 -1
- package/.output/public/_nuxt/{Dwp3GkV-.js → B1X__ilH.js} +1 -1
- package/.output/public/_nuxt/{CCsl9MOZ.js → B1zMFx24.js} +1 -1
- package/.output/public/_nuxt/{B6IHiVa1.js → B2oUeBbA.js} +1 -1
- package/.output/public/_nuxt/{BAaSmp8J.js → B4jvLMfS.js} +1 -1
- package/.output/public/_nuxt/{mlAADjK3.js → BBK2-Krn.js} +1 -1
- package/.output/public/_nuxt/{Vnfkr1pJ.js → BFP6M-20.js} +1 -1
- package/.output/public/_nuxt/{oFIS9u6t.js → BHpUiv6j.js} +1 -1
- package/.output/public/_nuxt/{Bi3i470l.js → BJtlcTrb.js} +1 -1
- package/.output/public/_nuxt/{BoC6qaRF.js → BLIRKrbM.js} +1 -1
- package/.output/public/_nuxt/{D1ttGJfs.js → BLOUs6AE.js} +1 -1
- package/.output/public/_nuxt/{n-QWmQgc.js → BOCwBVnz.js} +1 -1
- package/.output/public/_nuxt/{CTgM5Fke.js → BT6p4Pgt.js} +1 -1
- package/.output/public/_nuxt/{DB3ljns7.js → BUXSUkJ_.js} +1 -1
- package/.output/public/_nuxt/{36cXPVrY.js → BVf6Yx9V.js} +1 -1
- package/.output/public/_nuxt/{DOr_4nln.js → BXY_PWcx.js} +1 -1
- package/.output/public/_nuxt/{B6rt3IcG.js → BbS6Bwby.js} +1 -1
- package/.output/public/_nuxt/{Dbg8z684.js → Bd3HqPMF.js} +1 -1
- package/.output/public/_nuxt/{DnThe2U0.js → BeFDVhpA.js} +1 -1
- package/.output/public/_nuxt/{BUMZHDRC.js → BeKvLsja.js} +1 -1
- package/.output/public/_nuxt/{BCArQk0c.js → BeUm5UNV.js} +1 -1
- package/.output/public/_nuxt/{TBDx0s9p.js → BfV444H3.js} +1 -1
- package/.output/public/_nuxt/{D8YZvjas.js → BjCHB89N.js} +1 -1
- package/.output/public/_nuxt/{C9ahP7km.js → BjKamgHq.js} +1 -1
- package/.output/public/_nuxt/{DRE6Aqqp.js → BlA8mIS-.js} +1 -1
- package/.output/public/_nuxt/{BaDv5D7A.js → BlnwU1OO.js} +1 -1
- package/.output/public/_nuxt/{C11lmBd4.js → BoJdjCVl.js} +1 -1
- package/.output/public/_nuxt/{BiX7c2qU.js → BreO2PiA.js} +1 -1
- package/.output/public/_nuxt/{EltzgiyS.js → BvIDC_R-.js} +1 -1
- package/.output/public/_nuxt/{D3MWm6JP.js → By4YL7mx.js} +1 -1
- package/.output/public/_nuxt/{BdHdHyop.js → ByuJWADR.js} +1 -1
- package/.output/public/_nuxt/{KYucVFu7.js → C1dyLp_j.js} +1 -1
- package/.output/public/_nuxt/{CPZ5wygb.js → C8OCrfDP.js} +1 -1
- package/.output/public/_nuxt/{AjuKBlzz.js → C9YzQCiq.js} +1 -1
- package/.output/public/_nuxt/{q0DPzLKN.js → CAUgpKsF.js} +1 -1
- package/.output/public/_nuxt/{riEUDnED.js → CL9-VLTJ.js} +1 -1
- package/.output/public/_nuxt/{empGC_x-.js → CN1mJlvD.js} +1 -1
- package/.output/public/_nuxt/{quV6tp4n.js → CNMoZYMv.js} +1 -1
- package/.output/public/_nuxt/{va1mwSm9.js → CPLJeOCb.js} +1 -1
- package/.output/public/_nuxt/{CRpbGS75.js → CUvGJXY3.js} +1 -1
- package/.output/public/_nuxt/{CU3W9YrI.js → CazDIG_m.js} +1 -1
- package/.output/public/_nuxt/{rm7OkgDG.js → CcXaak_K.js} +1 -1
- package/.output/public/_nuxt/{87SGk1nu.js → CdMuck_X.js} +1 -1
- package/.output/public/_nuxt/{BTYiG93l.js → CfOLBbW9.js} +1 -1
- package/.output/public/_nuxt/{Bi9DO8jm.js → CfPSts5n.js} +1 -1
- package/.output/public/_nuxt/{CLdGRzLL.js → CfROFPse.js} +1 -1
- package/.output/public/_nuxt/Cnapl7lZ.js +1 -0
- package/.output/public/_nuxt/{D51_cB9D.js → Cng9gj7q.js} +1 -1
- package/.output/public/_nuxt/{wGpfdK6o.js → CsUoYK75.js} +1 -1
- package/.output/public/_nuxt/{CGq9qR-0.js → CscWZxCi.js} +1 -1
- package/.output/public/_nuxt/{DcfRfTaA.js → CuicKV-B.js} +1 -1
- package/.output/public/_nuxt/{DraETso1.js → Cyiu1VQD.js} +1 -1
- package/.output/public/_nuxt/{B_aSGB8S.js → D0cnIs93.js} +1 -1
- package/.output/public/_nuxt/{CP0vUzbd.js → D5oNv2cB.js} +1 -1
- package/.output/public/_nuxt/{CCw3Tx4S.js → D6PUPmRC.js} +1 -1
- package/.output/public/_nuxt/{ClIKZ4qY.js → DBtBvrYc.js} +1 -1
- package/.output/public/_nuxt/{BFjmLXYo.js → DCl2yo4g.js} +1 -1
- package/.output/public/_nuxt/{BVDBIVAQ.js → DD5HpaW9.js} +1 -1
- package/.output/public/_nuxt/{C8cz5feG.js → DHXWp5yD.js} +1 -1
- package/.output/public/_nuxt/{D3SYPlEB.js → DHltYerF.js} +3 -3
- package/.output/public/_nuxt/{C4AfzZER.js → DLXydYJb.js} +1 -1
- package/.output/public/_nuxt/{BJltXwHg.js → DRPSi76A.js} +1 -1
- package/.output/public/_nuxt/{HTQtMbWb.js → DS53kyHJ.js} +1 -1
- package/.output/public/_nuxt/{C7ZVzS0K.js → DWhBqv_7.js} +1 -1
- package/.output/public/_nuxt/{DoYgYLOd.js → DWowvnwc.js} +1 -1
- package/.output/public/_nuxt/{Doul3p1_.js → DXbPFI1d.js} +1 -1
- package/.output/public/_nuxt/{BKaU95es.js → DZ1zNBVM.js} +1 -1
- package/.output/public/_nuxt/{Db_-yjYg.js → DZ3Vfcpz.js} +1 -1
- package/.output/public/_nuxt/{BfoG8R5a.js → DZOS7Fh7.js} +1 -1
- package/.output/public/_nuxt/{CUDeMcEK.js → DZUgX70W.js} +1 -1
- package/.output/public/_nuxt/{oWY3I9uX.js → Dd0kK5WH.js} +1 -1
- package/.output/public/_nuxt/{wQZj69OY.js → Df7kUO0m.js} +1 -1
- package/.output/public/_nuxt/{ClVRQpP_.js → Dga3Av-m.js} +1 -1
- package/.output/public/_nuxt/{Dy4TloG3.js → DgwTpwfB.js} +1 -1
- package/.output/public/_nuxt/DkI145a5.js +1 -0
- package/.output/public/_nuxt/{C9EpbPNU.js → DoFBTaDR.js} +1 -1
- package/.output/public/_nuxt/{DC51KKt4.js → Dr_dI5hB.js} +1 -1
- package/.output/public/_nuxt/{DoFSKAvY.js → Dwws9U0D.js} +1 -1
- package/.output/public/_nuxt/{DaewB_zT.js → EPZOxdgq.js} +1 -1
- package/.output/public/_nuxt/{DVgMaBxD.js → QmMoMxLM.js} +1 -1
- package/.output/public/_nuxt/{Dm1_3W9g.js → R1nNqTru.js} +1 -1
- package/.output/public/_nuxt/{WAaPPk0g.js → S5DLdEpg.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/7caf3cb3-d272-4dbd-bb3f-1eeb64fab5d1.json +1 -0
- package/.output/public/_nuxt/{BAkJhSAW.js → e7zD3uJ0.js} +1 -1
- package/.output/public/_nuxt/{CYIR2GbL.js → gCELhaU9.js} +1 -1
- package/.output/public/_nuxt/{Do6zIWQf.js → gnCL8GjZ.js} +1 -1
- package/.output/public/_nuxt/{BuuvTH9e.js → hH1UFE3Z.js} +1 -1
- package/.output/public/_nuxt/{BReNbog6.js → hgHc4teu.js} +1 -1
- package/.output/public/_nuxt/{uaqMzXqE.js → ipDzNHcs.js} +1 -1
- package/.output/public/_nuxt/{B1CB30tg.js → kS3boz40.js} +1 -1
- package/.output/public/_nuxt/{DIA_NAIv.js → kjYMoWWx.js} +1 -1
- package/.output/public/_nuxt/{BsDB_eCd.js → oFM1KLWA.js} +1 -1
- package/.output/public/_nuxt/qH_j2A3a.js +1 -0
- package/.output/public/_nuxt/{DM_YaJgJ.js → qpI-_f9Q.js} +1 -1
- package/.output/public/_nuxt/{CRcjGmf7.js → rTvJTef_.js} +1 -1
- package/.output/public/_nuxt/{Ccit_CX1.js → rsiRgrVM.js} +1 -1
- package/.output/public/_nuxt/{Tt5LX5Y-.js → swrbBdtB.js} +1 -1
- package/.output/public/_nuxt/{DCMFuzDI.js → wHnZ9OaL.js} +1 -1
- package/.output/public/_nuxt/{D4SFgXAf.js → xqiPI_FQ.js} +1 -1
- package/.output/public/sw.js +1 -1
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/nitro/nitro.mjs +753 -746
- package/.output/server/package.json +1 -1
- package/package.json +1 -1
- package/.output/public/_nuxt/CiPH-swI.js +0 -1
- package/.output/public/_nuxt/Cx65B3c3.js +0 -1
- package/.output/public/_nuxt/builds/meta/2f517ae9-c342-457e-b4c5-6301728179f5.json +0 -1
- package/.output/public/_nuxt/wgcgHmRR.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as ee,w as te,b as oe,L as ae,c as A,i as n,k as t,f as u,g as s,j as a,F as le,P as se,o as d,_ as ne,q as m,t as j,O as re,v as ie,D as ce,M as q,ai as M,m as S,h as P,r as v,I as B,K as de}from"./
|
|
1
|
+
import{d as ee,w as te,b as oe,L as ae,c as A,i as n,k as t,f as u,g as s,j as a,F as le,P as se,o as d,_ as ne,q as m,t as j,O as re,v as ie,D as ce,M as q,ai as M,m as S,h as P,r as v,I as B,K as de}from"./DHltYerF.js";import{_ as ue}from"./Dga3Av-m.js";import{_ as me}from"./BXY_PWcx.js";import{_ as pe}from"./CN1mJlvD.js";import{_ as ge}from"./DZ3Vfcpz.js";import{o as fe,s as N,_ as xe}from"./BLIRKrbM.js";import{_ as _e}from"./B-5GukRk.js";import{p as ve}from"./BeKvLsja.js";import{u as be}from"./DXbPFI1d.js";import"./BFP6M-20.js";import"./DHXWp5yD.js";import"./r3SBLxtE.js";import"./By4YL7mx.js";import"./Dwws9U0D.js";import"./e7zD3uJ0.js";const ye={class:"space-y-6"},Te={class:"flex items-center gap-2"},Ce={class:"text-sm font-mono text-muted"},ke={class:"text-sm text-muted"},he={class:"flex gap-1 justify-end"},$e={class:"text-center py-12"},Ue={class:"flex justify-center mb-4"},Ve={class:"flex items-center gap-3"},we={key:0,class:"mt-2"},Ae={class:"flex items-center gap-3"},De={key:0,class:"mt-2"},b="#6366f1",Ge=ee({__name:"tags",async setup(Fe){let y,D;const{data:z,refresh:U}=([y,D]=te(()=>be("/api/tags","$WIWNTsOq96")),y=await y,D(),y),p=oe(),{authState:I}=ae(),K=de(),V=P(()=>z.value?.tags||[]),T=P(()=>K.public.authEnabled?I.value.user?.role==="administrator":!0),L=[{accessorKey:"text",header:"Tag"},{accessorKey:"color",header:"Color"},{accessorKey:"createdAt",header:"Created"},{accessorKey:"actions",header:""}],g=v(!1),F=fe({text:N().min(1,"Tag text is required").max(50,"Tag text must be at most 50 characters"),color:N().min(1,"Color is required")}),r=B({text:"",color:b}),x=v(!1),C=v(null),i=B({text:"",color:b});function R(l){C.value=l,i.text=l.text,i.color=l.color,x.value=!0}async function W(){try{await $fetch("/api/tags",{method:"POST",body:r}),p.add({title:"Tag created",description:`Tag "${r.text}" has been created successfully`,color:"success"}),g.value=!1,r.text="",r.color=b,await U()}catch(l){const e=l&&typeof l=="object"&&"data"in l?l.data?.message:void 0;p.add({title:"Failed to create tag",description:e||"An error occurred",color:"error"})}}async function G(){if(C.value)try{await $fetch(`/api/tags/${C.value.id}`,{method:"PUT",body:{text:i.text,color:i.color}}),p.add({title:"Tag updated",description:"Tag has been updated successfully",color:"success"}),x.value=!1,C.value=null,await U()}catch(l){const e=l&&typeof l=="object"&&"data"in l?l.data?.message:void 0;p.add({title:"Failed to update tag",description:e||"An error occurred",color:"error"})}}const _=v(!1),f=v(null);function H(l){f.value=l,_.value=!0}async function J(){const l=f.value;if(l){_.value=!1,f.value=null;try{await $fetch(`/api/tags/${l.id}`,{method:"DELETE"}),p.add({title:"Tag deleted",description:`Tag "${l.text}" has been deleted`,color:"success"}),await U()}catch(e){const c=e&&typeof e=="object"&&"data"in e?e.data?.message:void 0;p.add({title:"Failed to delete tag",description:c||"An error occurred",color:"error"})}}}return(l,e)=>{const c=ne,k=ue,Q=me,E=pe,X=ie,h=ce,$=ge,O=xe,w=_e,Y=se;return d(),A(le,null,[n("div",ye,[t(V).length>0?(d(),u(E,{key:0,title:"Tags",count:t(V).length,help:"settings.tags"},{actions:s(()=>[t(T)?(d(),u(c,{key:0,label:"Add tag",icon:"i-lucide-tag",size:"sm",onClick:e[0]||(e[0]=o=>g.value=!0)})):m("",!0)]),default:s(()=>[a(Q,{data:t(V),columns:L},{"text-cell":s(({row:o})=>[a(k,{text:o.original.text,color:o.original.color},null,8,["text","color"])]),"color-cell":s(({row:o})=>[n("div",Te,[n("span",{class:"inline-block w-4 h-4 rounded-full border border-black/10",style:re({backgroundColor:o.original.color})},null,4),n("span",Ce,j(o.original.color),1)])]),"createdAt-cell":s(({row:o})=>[n("span",ke,j(("prettyDateFormat"in l?l.prettyDateFormat:t(ve))(o.original.createdAt,{dateOnly:!0})),1)]),"actions-cell":s(({row:o})=>[n("div",he,[t(T)?(d(),u(c,{key:0,icon:"i-lucide-pencil",color:"neutral",variant:"ghost",size:"sm",onClick:Z=>R(o.original)},null,8,["onClick"])):m("",!0),t(T)?(d(),u(c,{key:1,icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"sm",onClick:Z=>H(o.original)},null,8,["onClick"])):m("",!0)])]),_:1},8,["data"])]),_:1},8,["count"])):(d(),u(E,{key:1,title:"Tags",count:0,help:"settings.tags"},{default:s(()=>[n("div",$e,[n("div",Ue,[a(X,{name:"i-lucide-tags",class:"text-4xl text-muted"})]),e[14]||(e[14]=n("h3",{class:"text-lg font-semibold mb-2"},"No tags yet",-1)),e[15]||(e[15]=n("p",{class:"text-muted mb-4"},"Create tags to categorize and filter your projects",-1)),t(T)?(d(),u(c,{key:0,label:"Add tag",icon:"i-lucide-tag",onClick:e[1]||(e[1]=o=>g.value=!0)})):m("",!0)])]),_:1}))]),a(Y,null,{default:s(()=>[a(w,{open:t(g),title:"Add new tag","onUpdate:open":e[6]||(e[6]=o=>g.value=o)},{body:s(()=>[a(O,{schema:t(F),state:t(r)},{default:s(()=>[a($,{label:"Tag text",name:"text",required:"",class:"mb-4"},{default:s(()=>[a(h,{modelValue:t(r).text,"onUpdate:modelValue":e[2]||(e[2]=o=>t(r).text=o),placeholder:"Enter tag name"},null,8,["modelValue"])]),_:1}),a($,{label:"Color",name:"color",required:"",class:"mb-4"},{default:s(()=>[n("div",Ve,[q(n("input",{"onUpdate:modelValue":e[3]||(e[3]=o=>t(r).color=o),type:"color",class:"w-10 h-10 rounded cursor-pointer border border-default","aria-label":"Pick tag color"},null,512),[[M,t(r).color]]),a(h,{modelValue:t(r).color,"onUpdate:modelValue":e[4]||(e[4]=o=>t(r).color=o),class:"flex-1 font-mono",placeholder:"#6366f1"},null,8,["modelValue"])])]),_:1}),t(r).text?(d(),A("div",we,[e[16]||(e[16]=n("span",{class:"text-sm text-muted mr-2"},"Preview:",-1)),a(k,{text:t(r).text,color:t(r).color||b},null,8,["text","color"])])):m("",!0)]),_:1},8,["schema","state"])]),footer:s(()=>[a(c,{type:"button",color:"neutral",variant:"ghost",label:"Cancel",onClick:e[5]||(e[5]=o=>g.value=!1)}),a(c,{type:"submit",label:"Create tag",icon:"i-lucide-tag",onClick:W})]),_:1},8,["open"]),a(w,{open:t(x),title:"Edit tag","onUpdate:open":e[11]||(e[11]=o=>x.value=o)},{body:s(()=>[a(O,{schema:t(F),state:t(i)},{default:s(()=>[a($,{label:"Tag text",name:"text",required:"",class:"mb-4"},{default:s(()=>[a(h,{modelValue:t(i).text,"onUpdate:modelValue":e[7]||(e[7]=o=>t(i).text=o),placeholder:"Enter tag name"},null,8,["modelValue"])]),_:1}),a($,{label:"Color",name:"color",required:"",class:"mb-4"},{default:s(()=>[n("div",Ae,[q(n("input",{"onUpdate:modelValue":e[8]||(e[8]=o=>t(i).color=o),type:"color",class:"w-10 h-10 rounded cursor-pointer border border-default","aria-label":"Pick tag color"},null,512),[[M,t(i).color]]),a(h,{modelValue:t(i).color,"onUpdate:modelValue":e[9]||(e[9]=o=>t(i).color=o),class:"flex-1 font-mono",placeholder:"#6366f1"},null,8,["modelValue"])])]),_:1}),t(i).text?(d(),A("div",De,[e[17]||(e[17]=n("span",{class:"text-sm text-muted mr-2"},"Preview:",-1)),a(k,{text:t(i).text,color:t(i).color||b},null,8,["text","color"])])):m("",!0)]),_:1},8,["schema","state"])]),footer:s(()=>[a(c,{type:"button",color:"neutral",variant:"ghost",label:"Cancel",onClick:e[10]||(e[10]=o=>x.value=!1)}),a(c,{type:"submit",label:"Save changes",icon:"i-lucide-check",onClick:G})]),_:1},8,["open"]),a(w,{open:t(_),title:"Delete tag","onUpdate:open":e[13]||(e[13]=o=>_.value=o)},{body:s(()=>[n("p",null,[e[18]||(e[18]=S(" Are you sure you want to delete tag ",-1)),t(f)?(d(),u(k,{key:0,text:t(f).text,color:t(f).color,class:"inline-flex"},null,8,["text","color"])):m("",!0),e[19]||(e[19]=S("? It will be removed from all projects. ",-1))])]),footer:s(()=>[a(c,{color:"neutral",variant:"ghost",label:"Cancel",onClick:e[12]||(e[12]=o=>_.value=!1)}),a(c,{color:"error",label:"Delete",icon:"i-lucide-trash-2",onClick:J})]),_:1},8,["open"])]),_:1})],64)}}});export{Ge as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as Be}from"./BAaSmp8J.js";import{_ as Le}from"./Ccit_CX1.js";import{d as ee,o as s,f as S,g as p,i as t,p as Y,k as e,j as c,c as l,t as o,q as m,s as ue,m as w,v as te,x as ye,F as L,y as Q,_ as ie,z as Pe,A as De,h as P,r as x,B as ne,C as Oe,l as J,D as ke,E as He,G as qe,H as fe,I as Ge,b as Ke,u as We,w as Je,e as Ze,J as Qe}from"./D3SYPlEB.js";import{_ as be}from"./CCw3Tx4S.js";import{_ as Xe,a as Ye}from"./87SGk1nu.js";import{_ as ge}from"./C8cz5feG.js";import{_ as et}from"./HTQtMbWb.js";import{_ as tt}from"./empGC_x-.js";import{_ as $e}from"./DnThe2U0.js";import{u as st,_ as nt,a as at,i as ot,b as lt,c as rt,s as ve,d as it}from"./36cXPVrY.js";import{c as _e,f as ce,a as ct,b as Ce,s as pe,e as de,r as he,d as ut}from"./BUMZHDRC.js";import{_ as we,a as dt,b as mt,c as ft,d as pt,e as gt,f as xt,g as Se,h as vt,i as _t,j as ht,k as yt,l as kt}from"./D1ttGJfs.js";import{_ as xe}from"./Tt5LX5Y-.js";import{_ as bt}from"./Dwp3GkV-.js";import{_ as $t}from"./DaewB_zT.js";import{_ as Ct}from"./Bi3i470l.js";import{_ as wt}from"./DM_YaJgJ.js";import{_ as Te}from"./l0QnzFNM.js";import{u as St,p as Tt,_ as jt}from"./BdHdHyop.js";import{b as It}from"./wQZj69OY.js";import{u as Ut}from"./Doul3p1_.js";import{u as zt}from"./D3MWm6JP.js";import"./B6rt3IcG.js";import"./r3SBLxtE.js";import"./DoFSKAvY.js";import"./B6IHiVa1.js";import"./oFIS9u6t.js";import"./DB3ljns7.js";import"./Do6zIWQf.js";import"./Dbg8z684.js";import"./Cx65B3c3.js";import"./rm7OkgDG.js";import"./Vnfkr1pJ.js";import"./BuuvTH9e.js";const Rt={class:"flex items-center gap-3 flex-1 min-w-0 justify-between"},Et={class:"flex items-center gap-3 min-w-0"},At={class:"font-mono text-sm truncate text-gray-600 dark:text-gray-400 min-w-0"},Vt={class:"flex items-center gap-3 shrink-0 max-sm:hidden"},Mt={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Nt={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Ft={key:1,class:"text-xs text-gray-400 whitespace-nowrap"},Bt={class:"grid grid-cols-1 lg:grid-cols-12 gap-4"},Lt={class:"space-y-3"},Pt={key:0,class:"text-sm font-medium break-words text-gray-500 dark:text-gray-400"},Dt={class:"flex flex-wrap gap-2"},Ot={class:"text-sm text-gray-500"},Ht={class:"flex items-start gap-3"},qt={class:"flex flex-col gap-1 shrink-0"},Gt={class:"flex-1 min-w-0 space-y-1.5"},Kt={class:"flex justify-end"},Wt=ee({__name:"ClusterSummary",props:{cluster:{},triageStatus:{},triageNote:{},triageSaving:{type:Boolean},triageChanged:{type:Boolean}},emits:["update:triageStatus","update:triageNote","save-triage"],setup(a,{emit:U}){const u=U,{summaryColSpanClass:b}=st(()=>1),f=[{label:"Open",value:"open",color:"warning"},{label:"Resolved",value:"resolved",color:"success"},{label:"Ignored",value:"ignored",color:"neutral"}];return(g,n)=>{const d=ue,C=te,V=ge,E=ye,R=et,T=tt,h=ie,I=$e,v=nt;return s(),S(v,{"storage-key":"failure-cluster"},{folded:p(()=>[t("div",Rt,[t("div",Et,[c(d,{color:("clusterStatusColor"in g?g.clusterStatusColor:e(ct))(a.cluster.status),variant:"solid",size:"sm",class:"shrink-0 capitalize"},{default:p(()=>[w(o(a.cluster.status),1)]),_:1},8,["color"]),t("span",At,o(a.cluster.signature),1),a.cluster.errorType?(s(),S(d,{key:0,color:("clusterErrorTypeColor"in g?g.clusterErrorTypeColor:e(_e))(a.cluster.errorType),variant:"subtle",size:"sm"},{default:p(()=>[w(o(a.cluster.errorType),1)]),_:1},8,["color"])):m("",!0)]),t("div",Vt,[t("span",Mt,o(a.cluster.occurrences)+" occurrence"+o(a.cluster.occurrences===1?"":"s"),1),t("span",Nt,o(a.cluster.affectedTests)+" "+o(a.cluster.affectedTests===1?"test":"tests"),1),a.cluster.diagnosis?.status==="completed"&&a.cluster.diagnosis?.category?(s(),S(d,{key:0,color:"neutral",variant:"outline",size:"sm",class:"gap-1 whitespace-nowrap"},{default:p(()=>[c(C,{name:"i-lucide-sparkles",class:"size-3"}),w(" "+o(a.cluster.diagnosis.category),1)]),_:1})):m("",!0),a.cluster.lastSeenAt?(s(),l("span",Ft," last seen "+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.lastSeenAt)),1)):m("",!0)])])]),default:p(()=>[t("div",Bt,[t("div",{class:Y(e(b))},[c(T,{title:a.cluster.signature},{default:p(()=>[t("div",Lt,[a.cluster.title?(s(),l("p",Pt,o(a.cluster.title),1)):m("",!0),t("div",Dt,[a.cluster.errorType?(s(),S(d,{key:0,color:("clusterErrorTypeColor"in g?g.clusterErrorTypeColor:e(_e))(a.cluster.errorType),variant:"subtle"},{default:p(()=>[w(o(a.cluster.errorType),1)]),_:1},8,["color"])):m("",!0),c(d,{color:"neutral",variant:"subtle"},{default:p(()=>[w(o(a.cluster.occurrences)+" occurrence"+o(a.cluster.occurrences===1?"":"s"),1)]),_:1}),c(d,{color:"neutral",variant:"subtle"},{default:p(()=>[w(o(a.cluster.affectedTests)+" "+o(a.cluster.affectedTests===1?"test":"tests")+" affected ",1)]),_:1}),a.cluster.diagnosis?.status==="completed"&&a.cluster.diagnosis?.category?(s(),S(d,{key:1,color:"neutral",variant:"outline",class:"gap-1"},{default:p(()=>[c(C,{name:"i-lucide-sparkles",class:"size-3"}),w(" "+o(a.cluster.diagnosis.category),1)]),_:1})):m("",!0),c(V,{topic:"cluster.concept"})]),t("p",Ot,[n[2]||(n[2]=w(" First seen in ",-1)),c(E,{to:`/test-runs/${a.cluster.firstSeenRunId}`,class:"text-primary hover:underline"},{default:p(()=>[w(" run #"+o(a.cluster.firstSeenRunId),1)]),_:1},8,["to"]),a.cluster.firstSeenAt?(s(),l(L,{key:0},[w(" ("+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.firstSeenAt))+") ",1)],64)):m("",!0),n[3]||(n[3]=w(" · Last seen in ",-1)),c(E,{to:`/test-runs/${a.cluster.lastSeenRunId}`,class:"text-primary hover:underline"},{default:p(()=>[w(" run #"+o(a.cluster.lastSeenRunId),1)]),_:1},8,["to"]),a.cluster.lastSeenAt?(s(),l(L,{key:1},[w(" ("+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.lastSeenAt))+") ",1)],64)):m("",!0),a.cluster.lastSeenRunStatus?(s(),S(R,{key:2,status:a.cluster.lastSeenRunStatus,size:"sm",class:"ml-1 align-middle"},null,8,["status"])):m("",!0)])])]),_:1},8,["title"])],2),c(T,{class:"lg:col-span-3",icon:"i-lucide-triangle-alert","icon-class":"text-amber-500",title:"Triage",help:"cluster.triage"},{default:p(()=>[t("div",Ht,[t("div",qt,[(s(),l(L,null,Q(f,j=>c(h,{key:j.value,size:"xs",class:"justify-start",color:a.triageStatus===j.value?j.color:"neutral",variant:a.triageStatus===j.value?"solid":"outline",onClick:G=>u("update:triageStatus",j.value)},{default:p(()=>[w(o(j.label),1)]),_:2},1032,["color","variant","onClick"])),64))]),t("div",Gt,[c(I,{"model-value":a.triageNote,placeholder:"Optional note…",rows:3,class:"text-sm w-full","onUpdate:modelValue":n[0]||(n[0]=j=>u("update:triageNote",j))},null,8,["model-value"]),t("div",Kt,[a.triageChanged?(s(),S(h,{key:0,size:"xs",icon:"i-lucide-check",loading:a.triageSaving,onClick:n[1]||(n[1]=j=>u("save-triage"))},{default:p(()=>[...n[4]||(n[4]=[w(" Save ",-1)])]),_:1},8,["loading"])):m("",!0)])])])]),_:1})])]),_:1})}}}),Jt=Object.assign(Wt,{__name:"ClusterSummary"}),Zt={class:"divide-y divide-default"},Qt={class:"text-xs font-mono text-gray-700 dark:text-gray-300 break-all whitespace-pre-wrap"},Xt={class:"text-xs font-mono text-gray-600 dark:text-gray-400 truncate"},Yt=ee({__name:"TestEvidenceSignals",props:De({consoleLogs:{},networkRequests:{}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:["update:open"],setup(a){const U=a,u=P(()=>Array.isArray(U.consoleLogs)?U.consoleLogs.filter(d=>d.type==="error"||d.type==="warning"):[]),b=P(()=>Array.isArray(U.networkRequests)?U.networkRequests.filter(d=>d.status&&d.status>=400):[]),f=P(()=>u.value.length>0||b.value.length>0),g=P(()=>{const d=[];return u.value.length&&d.push(`${u.value.length} console`),b.value.length&&d.push(`${b.value.length} network`),d.join(", ")}),n=Pe(a,"open");return(d,C)=>{const V=te,E=ue,R=we;return e(f)?(s(),S(R,{key:0,icon:"i-lucide-triangle-alert",label:`Signals (${e(g)})`,open:n.value,"onUpdate:open":C[0]||(C[0]=T=>n.value=T)},{default:p(()=>[t("div",Zt,[e(u).length>0?(s(),l(L,{key:0},[C[1]||(C[1]=t("div",{class:"px-3 py-1 bg-gray-50 dark:bg-gray-800/40"},[t("p",{class:"text-[10px] font-semibold text-gray-400 uppercase tracking-wide"},"Console")],-1)),(s(!0),l(L,null,Q(e(u),(T,h)=>(s(),l("div",{key:"log-"+h,class:"px-3 py-1.5 flex items-start gap-2"},[c(V,{name:T.type==="error"?"i-lucide-x-circle":"i-lucide-alert-triangle",class:Y(["size-3.5 mt-0.5 shrink-0",T.type==="error"?"text-red-500":"text-yellow-500"])},null,8,["name","class"]),t("p",Qt,o(T.text),1)]))),128))],64)):m("",!0),e(b).length>0?(s(),l(L,{key:1},[C[2]||(C[2]=t("div",{class:"px-3 py-1 bg-gray-50 dark:bg-gray-800/40"},[t("p",{class:"text-[10px] font-semibold text-gray-400 uppercase tracking-wide"},"Network")],-1)),(s(!0),l(L,null,Q(e(b),(T,h)=>(s(),l("div",{key:"req-"+h,class:"px-3 py-1.5 flex items-center gap-2"},[c(E,{color:T.status>=500?"error":"warning",variant:"subtle",size:"sm",class:"shrink-0 font-mono"},{default:p(()=>[w(o(T.status),1)]),_:2},1032,["color"]),t("p",Xt,o(T.url),1)]))),128))],64)):m("",!0)])]),_:1},8,["label","open"])):m("",!0)}}}),es=Object.assign(Yt,{__name:"TestEvidenceSignals"}),ts={class:"space-y-3"},ss={key:0,class:"flex gap-0 border-b border-default overflow-x-auto"},ns=["title","onClick"],as={key:0,class:"opacity-60 ml-1"},os={key:1,class:"flex items-start justify-between gap-2 flex-wrap"},ls={class:"min-w-0"},rs={class:"text-sm font-medium break-words"},is={key:2,class:"flex items-center justify-center py-10"},cs={key:0,class:"flex flex-wrap gap-1.5"},us={class:"divide-y divide-default"},ds={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},ms={key:0,class:"text-xs font-mono text-red-500 whitespace-pre-wrap break-all"},fs={class:"overflow-x-auto max-h-72"},ps={class:"max-h-64 overflow-auto"},gs=ee({__name:"ClusterTestEvidence",props:{affectedTestCases:{},projectKey:{},projectName:{}},setup(a){const U=a,u=x(U.affectedTestCases[0]?.recentTestRunsCaseId??null),b=P(()=>U.affectedTestCases.find(r=>r.recentTestRunsCaseId===u.value)),f=x(null),g=x([]),n=x(!1),d=x(!1),C=x(!1),V=x(!1),E=x(!1),R=x(!1),T=x(!1),h=new Map;function I(){C.value=!1,V.value=!1,E.value=!1,R.value=!1,T.value=!1}async function v(r){I();const $=h.get(r);if($){f.value=$.detail,g.value=$.traces,n.value=!1,d.value=!1;return}n.value=!0,d.value=!0,f.value=null,g.value=[];const[B,H]=await Promise.allSettled([$fetch(`/api/test-run-cases/${r}`),$fetch(`/api/test-run-cases/${r}/traces`)]);B.status==="fulfilled"&&(f.value=B.value),n.value=!1,H.status==="fulfilled"&&(g.value=H.value),d.value=!1,B.status==="fulfilled"&&H.status==="fulfilled"&&h.set(r,{detail:B.value,traces:H.value})}const j=new Map,G=x(null),D=x("trace"),M=P(()=>G.value?.frames??[]);async function O(r){if(G.value=j.get(r)??null,j.has(r)||g.value.length===0)return;const $=f.value?.testRun?.id;if($)try{const B=await $fetch(`/api/test-runs/${$}/cases/${r}/trace-stacks`),H=B.status==="ok"&&B.frames?.length?B:null;j.set(r,H),u.value===r&&(G.value=H)}catch{j.set(r,null)}}ne([f,g],()=>{D.value="trace",u.value&&O(u.value)}),ne(u,r=>{r&&v(r)}),Oe(()=>{u.value&&v(u.value)});const A=P(()=>{const r=f.value?.steps;return Array.isArray(r)?r.filter($=>$.error):[]}),F=P(()=>f.value?.testSource?f.value.testSource.split(`
|
|
1
|
+
import{_ as Be}from"./B4jvLMfS.js";import{_ as Le}from"./rsiRgrVM.js";import{d as ee,o as s,f as S,g as p,i as t,p as Y,k as e,j as c,c as l,t as o,q as m,s as ue,m as w,v as te,x as ye,F as L,y as Q,_ as ie,z as Pe,A as De,h as P,r as x,B as ne,C as Oe,l as J,D as ke,E as He,G as qe,H as fe,I as Ge,b as Ke,u as We,w as Je,e as Ze,J as Qe}from"./DHltYerF.js";import{_ as be}from"./D6PUPmRC.js";import{_ as Xe,a as Ye}from"./CdMuck_X.js";import{_ as ge}from"./DHXWp5yD.js";import{_ as et}from"./DS53kyHJ.js";import{_ as tt}from"./CN1mJlvD.js";import{_ as $e}from"./BeFDVhpA.js";import{u as st,_ as nt,a as at,i as ot,b as lt,c as rt,s as ve,d as it}from"./BVf6Yx9V.js";import{c as _e,f as ce,a as ct,b as Ce,s as pe,e as de,r as he,d as ut}from"./BeKvLsja.js";import{_ as we,a as dt,b as mt,c as ft,d as pt,e as gt,f as xt,g as Se,h as vt,i as _t,j as ht,k as yt,l as kt}from"./BLOUs6AE.js";import{_ as xe}from"./swrbBdtB.js";import{_ as bt}from"./B1X__ilH.js";import{_ as $t}from"./EPZOxdgq.js";import{_ as Ct}from"./BJtlcTrb.js";import{_ as wt}from"./qpI-_f9Q.js";import{_ as Te}from"./B-5GukRk.js";import{u as St,p as Tt,_ as jt}from"./ByuJWADR.js";import{b as It}from"./Df7kUO0m.js";import{u as Ut}from"./DXbPFI1d.js";import{u as zt}from"./By4YL7mx.js";import"./BbS6Bwby.js";import"./r3SBLxtE.js";import"./Dwws9U0D.js";import"./B2oUeBbA.js";import"./BHpUiv6j.js";import"./BUXSUkJ_.js";import"./gnCL8GjZ.js";import"./Bd3HqPMF.js";import"./qH_j2A3a.js";import"./CcXaak_K.js";import"./BFP6M-20.js";import"./hH1UFE3Z.js";const Rt={class:"flex items-center gap-3 flex-1 min-w-0 justify-between"},Et={class:"flex items-center gap-3 min-w-0"},At={class:"font-mono text-sm truncate text-gray-600 dark:text-gray-400 min-w-0"},Vt={class:"flex items-center gap-3 shrink-0 max-sm:hidden"},Mt={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Nt={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Ft={key:1,class:"text-xs text-gray-400 whitespace-nowrap"},Bt={class:"grid grid-cols-1 lg:grid-cols-12 gap-4"},Lt={class:"space-y-3"},Pt={key:0,class:"text-sm font-medium break-words text-gray-500 dark:text-gray-400"},Dt={class:"flex flex-wrap gap-2"},Ot={class:"text-sm text-gray-500"},Ht={class:"flex items-start gap-3"},qt={class:"flex flex-col gap-1 shrink-0"},Gt={class:"flex-1 min-w-0 space-y-1.5"},Kt={class:"flex justify-end"},Wt=ee({__name:"ClusterSummary",props:{cluster:{},triageStatus:{},triageNote:{},triageSaving:{type:Boolean},triageChanged:{type:Boolean}},emits:["update:triageStatus","update:triageNote","save-triage"],setup(a,{emit:U}){const u=U,{summaryColSpanClass:b}=st(()=>1),f=[{label:"Open",value:"open",color:"warning"},{label:"Resolved",value:"resolved",color:"success"},{label:"Ignored",value:"ignored",color:"neutral"}];return(g,n)=>{const d=ue,C=te,V=ge,E=ye,R=et,T=tt,h=ie,I=$e,v=nt;return s(),S(v,{"storage-key":"failure-cluster"},{folded:p(()=>[t("div",Rt,[t("div",Et,[c(d,{color:("clusterStatusColor"in g?g.clusterStatusColor:e(ct))(a.cluster.status),variant:"solid",size:"sm",class:"shrink-0 capitalize"},{default:p(()=>[w(o(a.cluster.status),1)]),_:1},8,["color"]),t("span",At,o(a.cluster.signature),1),a.cluster.errorType?(s(),S(d,{key:0,color:("clusterErrorTypeColor"in g?g.clusterErrorTypeColor:e(_e))(a.cluster.errorType),variant:"subtle",size:"sm"},{default:p(()=>[w(o(a.cluster.errorType),1)]),_:1},8,["color"])):m("",!0)]),t("div",Vt,[t("span",Mt,o(a.cluster.occurrences)+" occurrence"+o(a.cluster.occurrences===1?"":"s"),1),t("span",Nt,o(a.cluster.affectedTests)+" "+o(a.cluster.affectedTests===1?"test":"tests"),1),a.cluster.diagnosis?.status==="completed"&&a.cluster.diagnosis?.category?(s(),S(d,{key:0,color:"neutral",variant:"outline",size:"sm",class:"gap-1 whitespace-nowrap"},{default:p(()=>[c(C,{name:"i-lucide-sparkles",class:"size-3"}),w(" "+o(a.cluster.diagnosis.category),1)]),_:1})):m("",!0),a.cluster.lastSeenAt?(s(),l("span",Ft," last seen "+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.lastSeenAt)),1)):m("",!0)])])]),default:p(()=>[t("div",Bt,[t("div",{class:Y(e(b))},[c(T,{title:a.cluster.signature},{default:p(()=>[t("div",Lt,[a.cluster.title?(s(),l("p",Pt,o(a.cluster.title),1)):m("",!0),t("div",Dt,[a.cluster.errorType?(s(),S(d,{key:0,color:("clusterErrorTypeColor"in g?g.clusterErrorTypeColor:e(_e))(a.cluster.errorType),variant:"subtle"},{default:p(()=>[w(o(a.cluster.errorType),1)]),_:1},8,["color"])):m("",!0),c(d,{color:"neutral",variant:"subtle"},{default:p(()=>[w(o(a.cluster.occurrences)+" occurrence"+o(a.cluster.occurrences===1?"":"s"),1)]),_:1}),c(d,{color:"neutral",variant:"subtle"},{default:p(()=>[w(o(a.cluster.affectedTests)+" "+o(a.cluster.affectedTests===1?"test":"tests")+" affected ",1)]),_:1}),a.cluster.diagnosis?.status==="completed"&&a.cluster.diagnosis?.category?(s(),S(d,{key:1,color:"neutral",variant:"outline",class:"gap-1"},{default:p(()=>[c(C,{name:"i-lucide-sparkles",class:"size-3"}),w(" "+o(a.cluster.diagnosis.category),1)]),_:1})):m("",!0),c(V,{topic:"cluster.concept"})]),t("p",Ot,[n[2]||(n[2]=w(" First seen in ",-1)),c(E,{to:`/test-runs/${a.cluster.firstSeenRunId}`,class:"text-primary hover:underline"},{default:p(()=>[w(" run #"+o(a.cluster.firstSeenRunId),1)]),_:1},8,["to"]),a.cluster.firstSeenAt?(s(),l(L,{key:0},[w(" ("+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.firstSeenAt))+") ",1)],64)):m("",!0),n[3]||(n[3]=w(" · Last seen in ",-1)),c(E,{to:`/test-runs/${a.cluster.lastSeenRunId}`,class:"text-primary hover:underline"},{default:p(()=>[w(" run #"+o(a.cluster.lastSeenRunId),1)]),_:1},8,["to"]),a.cluster.lastSeenAt?(s(),l(L,{key:1},[w(" ("+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.lastSeenAt))+") ",1)],64)):m("",!0),a.cluster.lastSeenRunStatus?(s(),S(R,{key:2,status:a.cluster.lastSeenRunStatus,size:"sm",class:"ml-1 align-middle"},null,8,["status"])):m("",!0)])])]),_:1},8,["title"])],2),c(T,{class:"lg:col-span-3",icon:"i-lucide-triangle-alert","icon-class":"text-amber-500",title:"Triage",help:"cluster.triage"},{default:p(()=>[t("div",Ht,[t("div",qt,[(s(),l(L,null,Q(f,j=>c(h,{key:j.value,size:"xs",class:"justify-start",color:a.triageStatus===j.value?j.color:"neutral",variant:a.triageStatus===j.value?"solid":"outline",onClick:G=>u("update:triageStatus",j.value)},{default:p(()=>[w(o(j.label),1)]),_:2},1032,["color","variant","onClick"])),64))]),t("div",Gt,[c(I,{"model-value":a.triageNote,placeholder:"Optional note…",rows:3,class:"text-sm w-full","onUpdate:modelValue":n[0]||(n[0]=j=>u("update:triageNote",j))},null,8,["model-value"]),t("div",Kt,[a.triageChanged?(s(),S(h,{key:0,size:"xs",icon:"i-lucide-check",loading:a.triageSaving,onClick:n[1]||(n[1]=j=>u("save-triage"))},{default:p(()=>[...n[4]||(n[4]=[w(" Save ",-1)])]),_:1},8,["loading"])):m("",!0)])])])]),_:1})])]),_:1})}}}),Jt=Object.assign(Wt,{__name:"ClusterSummary"}),Zt={class:"divide-y divide-default"},Qt={class:"text-xs font-mono text-gray-700 dark:text-gray-300 break-all whitespace-pre-wrap"},Xt={class:"text-xs font-mono text-gray-600 dark:text-gray-400 truncate"},Yt=ee({__name:"TestEvidenceSignals",props:De({consoleLogs:{},networkRequests:{}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:["update:open"],setup(a){const U=a,u=P(()=>Array.isArray(U.consoleLogs)?U.consoleLogs.filter(d=>d.type==="error"||d.type==="warning"):[]),b=P(()=>Array.isArray(U.networkRequests)?U.networkRequests.filter(d=>d.status&&d.status>=400):[]),f=P(()=>u.value.length>0||b.value.length>0),g=P(()=>{const d=[];return u.value.length&&d.push(`${u.value.length} console`),b.value.length&&d.push(`${b.value.length} network`),d.join(", ")}),n=Pe(a,"open");return(d,C)=>{const V=te,E=ue,R=we;return e(f)?(s(),S(R,{key:0,icon:"i-lucide-triangle-alert",label:`Signals (${e(g)})`,open:n.value,"onUpdate:open":C[0]||(C[0]=T=>n.value=T)},{default:p(()=>[t("div",Zt,[e(u).length>0?(s(),l(L,{key:0},[C[1]||(C[1]=t("div",{class:"px-3 py-1 bg-gray-50 dark:bg-gray-800/40"},[t("p",{class:"text-[10px] font-semibold text-gray-400 uppercase tracking-wide"},"Console")],-1)),(s(!0),l(L,null,Q(e(u),(T,h)=>(s(),l("div",{key:"log-"+h,class:"px-3 py-1.5 flex items-start gap-2"},[c(V,{name:T.type==="error"?"i-lucide-x-circle":"i-lucide-alert-triangle",class:Y(["size-3.5 mt-0.5 shrink-0",T.type==="error"?"text-red-500":"text-yellow-500"])},null,8,["name","class"]),t("p",Qt,o(T.text),1)]))),128))],64)):m("",!0),e(b).length>0?(s(),l(L,{key:1},[C[2]||(C[2]=t("div",{class:"px-3 py-1 bg-gray-50 dark:bg-gray-800/40"},[t("p",{class:"text-[10px] font-semibold text-gray-400 uppercase tracking-wide"},"Network")],-1)),(s(!0),l(L,null,Q(e(b),(T,h)=>(s(),l("div",{key:"req-"+h,class:"px-3 py-1.5 flex items-center gap-2"},[c(E,{color:T.status>=500?"error":"warning",variant:"subtle",size:"sm",class:"shrink-0 font-mono"},{default:p(()=>[w(o(T.status),1)]),_:2},1032,["color"]),t("p",Xt,o(T.url),1)]))),128))],64)):m("",!0)])]),_:1},8,["label","open"])):m("",!0)}}}),es=Object.assign(Yt,{__name:"TestEvidenceSignals"}),ts={class:"space-y-3"},ss={key:0,class:"flex gap-0 border-b border-default overflow-x-auto"},ns=["title","onClick"],as={key:0,class:"opacity-60 ml-1"},os={key:1,class:"flex items-start justify-between gap-2 flex-wrap"},ls={class:"min-w-0"},rs={class:"text-sm font-medium break-words"},is={key:2,class:"flex items-center justify-center py-10"},cs={key:0,class:"flex flex-wrap gap-1.5"},us={class:"divide-y divide-default"},ds={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},ms={key:0,class:"text-xs font-mono text-red-500 whitespace-pre-wrap break-all"},fs={class:"overflow-x-auto max-h-72"},ps={class:"max-h-64 overflow-auto"},gs=ee({__name:"ClusterTestEvidence",props:{affectedTestCases:{},projectKey:{},projectName:{}},setup(a){const U=a,u=x(U.affectedTestCases[0]?.recentTestRunsCaseId??null),b=P(()=>U.affectedTestCases.find(r=>r.recentTestRunsCaseId===u.value)),f=x(null),g=x([]),n=x(!1),d=x(!1),C=x(!1),V=x(!1),E=x(!1),R=x(!1),T=x(!1),h=new Map;function I(){C.value=!1,V.value=!1,E.value=!1,R.value=!1,T.value=!1}async function v(r){I();const $=h.get(r);if($){f.value=$.detail,g.value=$.traces,n.value=!1,d.value=!1;return}n.value=!0,d.value=!0,f.value=null,g.value=[];const[B,H]=await Promise.allSettled([$fetch(`/api/test-run-cases/${r}`),$fetch(`/api/test-run-cases/${r}/traces`)]);B.status==="fulfilled"&&(f.value=B.value),n.value=!1,H.status==="fulfilled"&&(g.value=H.value),d.value=!1,B.status==="fulfilled"&&H.status==="fulfilled"&&h.set(r,{detail:B.value,traces:H.value})}const j=new Map,G=x(null),D=x("trace"),M=P(()=>G.value?.frames??[]);async function O(r){if(G.value=j.get(r)??null,j.has(r)||g.value.length===0)return;const $=f.value?.testRun?.id;if($)try{const B=await $fetch(`/api/test-runs/${$}/cases/${r}/trace-stacks`),H=B.status==="ok"&&B.frames?.length?B:null;j.set(r,H),u.value===r&&(G.value=H)}catch{j.set(r,null)}}ne([f,g],()=>{D.value="trace",u.value&&O(u.value)}),ne(u,r=>{r&&v(r)}),Oe(()=>{u.value&&v(u.value)});const A=P(()=>{const r=f.value?.steps;return Array.isArray(r)?r.filter($=>$.error):[]}),F=P(()=>f.value?.testSource?f.value.testSource.split(`
|
|
2
2
|
`).length:0),z=P(()=>{const r=f.value;if(!r)return[];const $=r.attachments.filter(y=>ot(y.path,y.contentType)).length,B=r.attachments.filter(y=>lt(y.path,y.contentType)).length,H=Array.isArray(r.consoleLogs)?r.consoleLogs.filter(y=>y.type==="error"||y.type==="warning").length:0,X=Array.isArray(r.networkRequests)?r.networkRequests.filter(y=>(y.status??0)>=400).length:0;return[{icon:"i-lucide-image",label:"screenshots",count:$},{icon:"i-lucide-video",label:"videos",count:B},{icon:"i-lucide-bug-play",label:"traces",count:g.value.length},{icon:"i-lucide-list-checks",label:"failing steps",count:A.value.length},{icon:"i-lucide-triangle-alert",label:"signals",count:H+X},{icon:"i-lucide-code",label:"source",count:r.testSourceFrames?.length||(r.testSource?1:0)},{icon:"i-lucide-accessibility",label:"ARIA",count:r.ariaSnapshot?1:0}].filter(y=>y.count>0)});return(r,$)=>{const B=xe,H=ie,X=te,y=ue,i=dt,k=mt,N=ft,q=we,K=es,W=bt,Z=pt,ae=gt,se=at,oe=xt;return s(),l("div",ts,[a.affectedTestCases.length>1?(s(),l("div",ss,[(s(!0),l(L,null,Q(a.affectedTestCases,_=>(s(),l("button",{key:_.recentTestRunsCaseId,class:Y(["px-3 py-1.5 text-xs whitespace-nowrap border-b-2 -mb-px transition-colors",e(u)===_.recentTestRunsCaseId?"border-primary text-primary font-medium":"border-transparent text-gray-500 hover:text-gray-700 dark:hover:text-gray-300"]),title:_.title,onClick:le=>u.value=_.recentTestRunsCaseId},[w(o(_.title.split(" › ").pop())+" ",1),_.runCount>1?(s(),l("span",as,o(_.runCount)+"×",1)):m("",!0)],10,ns))),128))])):m("",!0),e(b)?(s(),l("div",os,[t("div",ls,[t("p",rs,o(e(b).title),1),c(B,{"file-path":e(b).filePath,"project-key":a.projectKey,"project-name":a.projectName,class:"text-xs text-gray-400"},null,8,["file-path","project-key","project-name"])]),c(H,{to:`/test-run-cases/${e(b).recentTestRunsCaseId}`,size:"xs",variant:"outline",color:"neutral","trailing-icon":"i-lucide-arrow-right"},{default:p(()=>[...$[6]||($[6]=[w(" Open test run case ",-1)])]),_:1},8,["to"])])):m("",!0),e(n)?(s(),l("div",is,[c(X,{name:"i-lucide-loader-circle",class:"size-5 animate-spin text-gray-400"})])):e(f)?(s(),l(L,{key:3},[e(z).length?(s(),l("div",cs,[(s(!0),l(L,null,Q(e(z),_=>(s(),S(y,{key:_.label,color:"neutral",variant:"subtle",size:"sm",class:"gap-1"},{default:p(()=>[c(X,{name:_.icon,class:"size-3"},null,8,["name"]),w(" "+o(_.count)+" "+o(_.label),1)]),_:2},1024))),128))])):m("",!0),c(i,{attachments:e(f).attachments},null,8,["attachments"]),c(k,{attachments:e(f).attachments},null,8,["attachments"]),c(N,{traces:e(g),loading:e(d)},null,8,["traces","loading"]),e(A).length>0?(s(),S(q,{key:1,icon:"i-lucide-list-checks",label:"Failing steps",count:e(A).length,open:e(C),"onUpdate:open":$[0]||($[0]=_=>J(C)?C.value=_:null)},{default:p(()=>[t("div",us,[(s(!0),l(L,null,Q(e(A),(_,le)=>(s(),l("div",{key:le,class:"px-3 py-2 space-y-0.5"},[t("p",ds,o(le+1)+". "+o(_.title),1),_.error?.message?(s(),l("p",ms,o(_.error.message),1)):m("",!0)]))),128))])]),_:1},8,["count","open"])):m("",!0),c(K,{"console-logs":e(f).consoleLogs,"network-requests":e(f).networkRequests,open:e(V),"onUpdate:open":$[1]||($[1]=_=>J(V)?V.value=_:null)},null,8,["console-logs","network-requests","open"]),e(f).testSourceFrames?.length||e(f).testSource||e(M).length?(s(),S(q,{key:2,icon:"i-lucide-code",label:"Test source",count:e(M).length||e(f).testSourceFrames?.length||e(F),open:e(E),"onUpdate:open":$[3]||($[3]=_=>J(E)?E.value=_:null)},{default:p(()=>[e(M).length&&(e(f).testSourceFrames?.length||e(f).testSource)?(s(),S(W,{key:0,modelValue:e(D),"onUpdate:modelValue":$[2]||($[2]=_=>J(D)?D.value=_:null),items:[{label:`Full stack (${e(M).length})`,value:"trace"},{label:`Captured (${e(f).testSourceFrames?.length||1})`,value:"captured"}],size:"xs",variant:"link",class:"mb-1.5",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"])):m("",!0),t("div",fs,[e(D)==="trace"&&e(M).length?(s(),S(Z,{key:0,frames:e(M),"project-key":a.projectKey,"project-name":a.projectName},null,8,["frames","project-key","project-name"])):e(f).testSourceFrames?.length?(s(),S(ae,{key:1,frames:e(f).testSourceFrames,"project-key":a.projectKey,"project-name":a.projectName},null,8,["frames","project-key","project-name"])):e(f).testSource?(s(),S(se,{key:2,text:"```typescript\n"+e(f).testSource+"\n```"},null,8,["text"])):m("",!0)])]),_:1},8,["count","open"])):m("",!0),e(f).ariaSnapshot?(s(),S(q,{key:3,icon:"i-lucide-accessibility",label:"ARIA snapshot",open:e(R),"onUpdate:open":$[4]||($[4]=_=>J(R)?R.value=_:null)},{default:p(()=>[t("div",ps,[c(se,{text:"```yaml\n"+e(f).ariaSnapshot+"\n```"},null,8,["text"])])]),_:1},8,["open"])):m("",!0),e(f).pageState?(s(),S(q,{key:4,icon:"i-lucide-database",label:"App state",open:e(T),"onUpdate:open":$[5]||($[5]=_=>J(T)?T.value=_:null)},{default:p(()=>[c(oe,{"page-state":e(f).pageState,plain:""},null,8,["page-state"])]),_:1},8,["open"])):m("",!0)],64)):m("",!0)])}}}),xs=Object.assign(gs,{__name:"ClusterTestEvidence"}),vs={key:0,class:"flex items-center gap-1.5 overflow-hidden min-w-0"},_s={class:"text-primary shrink-0"},hs={class:"text-gray-500 truncate text-xs font-sans"},ys={key:1,class:"text-primary text-xs"},ks={key:2,class:"text-gray-400 font-sans text-xs"},bs={class:"w-96 p-2 space-y-2"},$s={class:"flex items-center gap-1"},Cs={class:"flex items-center gap-1"},ws={key:0,class:"flex items-center gap-2 px-2 py-1.5 text-xs rounded-md bg-primary/5 text-gray-600 dark:text-gray-300"},Ss={class:"font-medium text-green-600 dark:text-green-400"},Ts={class:"font-medium text-red-600 dark:text-red-400"},js={class:"text-gray-400"},Is={key:1,class:"flex items-center justify-center gap-2 py-6 text-gray-400"},Us={key:2,class:"py-4 text-center text-sm text-red-500"},zs={key:3,class:"flex items-start gap-2 px-2 py-2 text-xs text-amber-700 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/20 rounded-md"},Rs={key:4,class:"max-h-80 overflow-y-auto space-y-px"},Es={class:"text-xs text-primary"},As={key:1,class:"py-4 text-center text-sm text-gray-400"},Vs=["onClick"],Ms={class:"text-xs text-primary shrink-0 w-14 pt-px"},Ns={class:"flex-1 min-w-0"},Fs={class:"text-xs font-medium leading-snug truncate"},Bs={class:"text-xs text-gray-400 leading-snug truncate"},Ls=ee({__name:"CommitPicker",props:{modelValue:{},clusterId:{}},emits:["update:modelValue"],setup(a,{emit:U}){const u=a,b=U,f=x(!1),g=x(""),n=x([]),d=x(null),C=x(null),V=x(!1),E=x(!1),R=x(null),T=x(null),h=x([]),I=x(!1),v=x(void 0),j=P(()=>{if(!u.modelValue)return null;const z=u.modelValue.trim();return n.value.find($=>$.sha===z||$.sha.startsWith(z))??{sha:z,shortSha:z.slice(0,7),message:"",author:"",date:""}});async function G(){if(!h.value.length){I.value=!0;try{const z=await $fetch(`/api/failure-clusters/${u.clusterId}/branches`);h.value=z.branches}catch{}finally{I.value=!1}}}async function D(){const z=u.modelValue||"";V.value=!0,E.value=!1,T.value=null;try{const r={};z&&(r.baseline=z),v.value&&(r.branch=v.value);const $=await $fetch(`/api/failure-clusters/${u.clusterId}/commits`,{query:r});n.value=$.commits,C.value=$.aggregate,d.value=$.error??null,T.value=z}catch{E.value=!0}finally{V.value=!1}}ne(v,()=>{n.value=[],T.value=null,D()}),ne(f,async z=>{if(z){await Promise.all([G(),D()]),await qe();const r=R.value?.$el?.querySelector("input")??R.value?.$el;r instanceof HTMLElement&&r.focus()}else g.value=""});const M=P(()=>Ce(n.value,g.value)),O=P(()=>{const z=g.value.trim();return!/^[0-9a-f]{7,40}$/i.test(z)||M.value.some(r=>r.sha.startsWith(z.toLowerCase()))?null:z});function A(z){b("update:modelValue",z),f.value=!1}function F(z){z.stopPropagation(),d.value=null,C.value=null,b("update:modelValue",""),f.value=!1}return(z,r)=>{const $=ie,B=te,H=$t,X=ke,y=He;return s(),S(y,{open:e(f),"onUpdate:open":r[4]||(r[4]=i=>J(f)?f.value=i:null)},{content:p(()=>[t("div",bs,[t("div",$s,[c(B,{name:"i-lucide-git-branch",class:"size-3.5 text-gray-400 shrink-0"}),c(H,{modelValue:e(v),"onUpdate:modelValue":r[0]||(r[0]=i=>J(v)?v.value=i:null),items:e(h),placeholder:"Default branch",size:"xs",class:"flex-1",loading:e(I),disabled:e(I)},null,8,["modelValue","items","loading","disabled"])]),t("div",Cs,[c(X,{ref_key:"searchInputRef",ref:R,modelValue:e(g),"onUpdate:modelValue":r[1]||(r[1]=i=>J(g)?g.value=i:null),placeholder:"Search message, author, SHA…",size:"xs",icon:"i-lucide-search",class:"flex-1"},null,8,["modelValue"]),a.modelValue?(s(),S($,{key:0,size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-x",title:"Clear baseline",onClick:r[2]||(r[2]=i=>F(i))})):m("",!0)]),e(C)&&a.modelValue&&!e(V)?(s(),l("div",ws,[c(B,{name:"i-lucide-git-compare-arrows",class:"size-3.5 shrink-0 text-primary"}),r[5]||(r[5]=t("span",null,"Since baseline:",-1)),t("span",Ss,"+"+o(e(C).linesAdded),1),t("span",Ts,"-"+o(e(C).linesRemoved),1),t("span",js,"across "+o(e(C).filesChanged)+" file"+o(e(C).filesChanged===1?"":"s"),1)])):m("",!0),e(V)?(s(),l("div",Is,[c(B,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),r[6]||(r[6]=t("span",{class:"text-sm"},"Loading commits…",-1))])):e(E)?(s(),l("div",Us," Failed to load commits — check your SCM token in Settings → AI ")):e(d)&&!e(V)&&e(n).length===0?(s(),l("div",zs,[c(B,{name:"i-lucide-triangle-alert",class:"size-3.5 shrink-0 mt-0.5"}),t("span",null,o(e(d)),1)])):(s(),l("div",Rs,[e(O)?(s(),l("button",{key:0,class:"w-full text-left px-2 py-1.5 rounded flex items-center gap-2 hover:bg-elevated transition-colors border border-dashed border-default",onClick:r[3]||(r[3]=i=>A(e(O)))},[c(B,{name:"i-lucide-git-commit-horizontal",class:"size-3.5 text-gray-400 shrink-0"}),r[7]||(r[7]=t("span",{class:"text-xs text-gray-500"},"Use commit",-1)),t("code",Es,o(e(O).slice(0,7)),1)])):m("",!0),e(M).length===0&&!e(O)?(s(),l("div",As,o(e(g)?"No commits match":"No commits available"),1)):m("",!0),(s(!0),l(L,null,Q(e(M),i=>(s(),l("button",{key:i.sha,class:Y(["w-full text-left px-2 py-1.5 rounded flex items-start gap-2 hover:bg-elevated transition-colors",a.modelValue===i.sha?"bg-primary/10 ring-1 ring-inset ring-primary/30":""]),onClick:k=>A(i.sha)},[t("code",Ms,o(i.shortSha),1),t("div",Ns,[t("p",Fs,o(i.message),1),t("p",Bs,[w(o(i.author),1),i.date?(s(),l(L,{key:0},[w(" · "+o(e(ce)(i.date)),1)],64)):m("",!0)])]),a.modelValue===i.sha?(s(),S(B,{key:0,name:"i-lucide-check",class:"size-3.5 text-primary shrink-0 mt-0.5"})):m("",!0)],10,Vs))),128))]))])]),default:p(()=>[c($,{size:"xs",color:"neutral",variant:"outline",icon:a.modelValue?"i-lucide-git-branch-plus":"i-lucide-git-branch","trailing-icon":"i-lucide-chevron-down",class:"min-w-36 max-w-48 font-mono"},{default:p(()=>[e(j)?.message?(s(),l("span",vs,[t("code",_s,o(e(j).shortSha),1),t("span",hs,o(e(j).message),1)])):a.modelValue?(s(),l("span",ys,o(a.modelValue.slice(0,7))+"…",1)):(s(),l("span",ks,"baseline commit…"))]),_:1},8,["icon"])]),_:1},8,["open"])}}}),Ps=Object.assign(Ls,{__name:"CommitPicker"}),Ds={class:"space-y-3"},Os={key:0,class:"space-y-1"},Hs={class:"text-xs font-semibold text-gray-500 uppercase tracking-wide px-1"},qs={class:"rounded-md border border-default overflow-hidden divide-y divide-default"},Gs={class:"text-xs text-gray-400 shrink-0"},Ks={class:"text-xs text-gray-700 dark:text-gray-300 truncate"},Ws={class:"space-y-1"},Js={class:"text-xs font-semibold text-gray-500 uppercase tracking-wide px-1"},Zs={key:0,class:"text-yellow-500 font-normal normal-case"},Qs={class:"rounded-md border border-default overflow-hidden divide-y divide-default"},Xs=["onClick"],Ys={class:"text-xs font-mono flex-1 truncate text-gray-700 dark:text-gray-300"},en={class:"text-xs text-gray-400 shrink-0 tabular-nums"},tn={key:0,class:"text-green-500"},sn={key:1,class:"text-gray-300 mx-0.5"},nn={key:2,class:"text-red-500"},an={key:0,class:"border-t border-default overflow-x-auto max-h-96"},on=ee({__name:"ScmChangesView",props:{changes:{}},setup(a){const U=x(new Set);function u(b){const f=new Set(U.value);f.has(b)?f.delete(b):f.add(b),U.value=f}return(b,f)=>{const g=te,n=Se;return s(),l("div",Ds,[a.changes.commits.length>0?(s(),l("div",Os,[t("p",Hs,o(a.changes.commits.length)+" commit"+o(a.changes.commits.length===1?"":"s"),1),t("div",qs,[(s(!0),l(L,null,Q(a.changes.commits,d=>(s(),l("div",{key:d.sha,class:"flex items-center gap-2 px-3 py-1.5"},[c(g,{name:"i-lucide-git-commit-horizontal",class:"size-3.5 text-gray-400 shrink-0"}),t("code",Gs,o(d.sha.slice(0,7)),1),t("span",Ks,o(d.message),1)]))),128))])])):m("",!0),t("div",Ws,[t("p",Js,[w(o(a.changes.files.length)+" file"+o(a.changes.files.length===1?"":"s")+" changed ",1),a.changes.patchesOmitted?(s(),l("span",Zs," — diff too large, file names only ")):m("",!0)]),t("div",Qs,[(s(!0),l(L,null,Q(a.changes.files,d=>(s(),l("div",{key:d.filename},[t("button",{class:Y(["w-full flex items-center gap-2 px-3 py-1.5 text-left hover:bg-gray-50 dark:hover:bg-gray-800/50 transition-colors",d.patch?"cursor-pointer":"cursor-default"]),onClick:C=>d.patch&&u(d.filename)},[c(g,{name:("scmFileStatusMeta"in b?b.scmFileStatusMeta:e(pe))(d.status).icon,class:Y(["size-3.5 shrink-0",("scmFileStatusMeta"in b?b.scmFileStatusMeta:e(pe))(d.status).color])},null,8,["name","class"]),t("span",Ys,o(d.filename),1),t("span",en,[d.additions?(s(),l("span",tn,"+"+o(d.additions),1)):m("",!0),d.additions&&d.deletions?(s(),l("span",sn,"/")):m("",!0),d.deletions?(s(),l("span",nn,"-"+o(d.deletions),1)):m("",!0)]),d.patch?(s(),S(g,{key:0,name:e(U).has(d.filename)?"i-lucide-chevron-up":"i-lucide-chevron-down",class:"size-3.5 text-gray-400 shrink-0"},null,8,["name"])):m("",!0)],10,Xs),d.patch&&e(U).has(d.filename)?(s(),l("div",an,[c(n,{patch:d.patch},null,8,["patch"])])):m("",!0)]))),128))])])])}}}),ln=Object.assign(on,{__name:"ScmChangesView"}),rn={class:"border border-default rounded-lg overflow-clip text-xs font-mono"},cn={class:"sticky top-0 z-10 flex items-center justify-between px-3 py-1.5 bg-elevated border-b border-default text-gray-600 dark:text-gray-300"},un={class:"font-medium truncate"},dn={class:"shrink-0 flex items-center gap-1.5 ml-2 text-[11px]"},mn={key:0,class:"text-green-600 dark:text-green-400"},fn={key:1,class:"text-red-600 dark:text-red-400"},pn={key:1,class:"px-3 py-2 text-gray-400 text-[11px]"},gn=ee({__name:"DiffFile",props:{file:{}},setup(a){return(U,u)=>{const b=ue,f=Se;return s(),l("div",rn,[t("div",cn,[t("span",un,o(a.file.filename),1),t("span",dn,[a.file.additions?(s(),l("span",mn,"+"+o(a.file.additions),1)):m("",!0),a.file.deletions?(s(),l("span",fn,"-"+o(a.file.deletions),1)):m("",!0),c(b,{label:a.file.status,size:"xs",variant:"subtle",color:("scmFileStatusMeta"in U?U.scmFileStatusMeta:e(pe))(a.file.status).badgeColor},null,8,["label","color"])])]),a.file.patch?(s(),S(f,{key:0,patch:a.file.patch},null,8,["patch"])):(s(),l("div",pn,"No patch available"))])}}}),xn=Object.assign(gn,{__name:"DiffFile"}),vn={class:"inline-flex items-center gap-1"},_n={class:"flex h-[72vh] overflow-hidden"},hn={class:"w-72 shrink-0 border-r border-default flex flex-col"},yn={class:"p-2 border-b border-default space-y-2 shrink-0"},kn={class:"flex items-center gap-2 text-xs text-gray-500"},bn={class:"ml-auto"},$n={key:2,class:"flex-1 overflow-y-auto flex flex-col"},Cn={key:0,class:"py-6 text-center text-sm text-gray-400 flex-1"},wn=["onClick"],Sn=["checked","onChange"],Tn={class:"flex-1 min-w-0"},jn={class:"text-xs font-medium leading-snug truncate"},In={class:"text-[10px] text-gray-400 leading-snug mt-0.5 flex items-center gap-1 min-w-0"},Un={class:"text-primary shrink-0"},zn={class:"truncate"},Rn={key:0,class:"shrink-0"},En={key:1,class:"p-2 shrink-0 space-y-1.5"},An={key:0,class:"flex items-center gap-1.5 text-xs text-red-500 px-1"},Vn={class:"flex-1 overflow-y-auto flex flex-col min-w-0"},Mn={key:0,class:"flex-1 flex items-center justify-center text-gray-400 text-sm"},Nn={key:2,class:"flex-1 p-4 space-y-3"},Fn={key:0,class:"space-y-0.5 pb-3 border-b border-default"},Bn={class:"flex items-center gap-2"},Ln={class:"text-xs font-mono text-primary"},Pn={class:"text-xs text-gray-400"},Dn={class:"text-sm font-semibold"},On={key:1,class:"text-sm text-gray-400 pt-2"},Hn={key:4,class:"flex-1 flex items-center justify-center text-sm text-gray-400"},qn={class:"flex items-center gap-3 w-full"},Gn={class:"flex-1 flex items-center gap-2 text-sm text-gray-500 min-w-0"},Kn={class:"font-medium text-gray-700 dark:text-gray-200 shrink-0"},Wn={class:"shrink-0"},Jn={class:"text-green-600 dark:text-green-400 shrink-0 font-medium"},Zn={class:"text-red-600 dark:text-red-400 shrink-0 font-medium"},Qn={key:1,class:"text-gray-400 text-xs shrink-0"},Xn={key:1},me=50,Yn=ee({__name:"CommitBrowserModal",props:{open:{type:Boolean},clusterId:{},initialSelected:{},autoSelectedShas:{}},emits:["update:open","confirm"],setup(a,{emit:U}){const u=a,b=P(()=>new Set(u.autoSelectedShas??[])),f=U,g=x(""),n=x([]),d=x(me),C=x(!1),V=x(!1),E=x(!1),R=x(null),T=x(null),h=x(new Set),I=x(null),v=Ge({}),j=x(null),G=x(!1),D=x(null),M=P(()=>n.value.find(y=>y.sha===I.value)??null),O=P(()=>Ce(n.value,g.value)),A=P(()=>{let y=0,i=0,k=0,N=0;for(const q of h.value){if(!(q in v)){N++;continue}const K=v[q];K&&(y+=K.files.length,i+=K.files.reduce((W,Z)=>W+Z.additions,0),k+=K.files.reduce((W,Z)=>W+Z.deletions,0))}return{files:y,linesAdded:i,linesRemoved:k,unreviewed:N}});async function F(y){y?(V.value=!0,R.value=null):(E.value=!0,T.value=null);try{const i=await $fetch(`/api/failure-clusters/${u.clusterId}/commits`,{query:{limit:d.value}});n.value=i.commits,C.value=i.hasMore??!1,i.error&&!i.commits.length&&(y?R.value=i.error:T.value=i.error),y&&i.commits[0]&&r(i.commits[0].sha)}catch(i){y?R.value=de(i):T.value=de(i)}finally{V.value=!1,E.value=!1}}async function z(){d.value+=me,await F(!1)}ne(()=>u.open,async y=>{if(y){if(h.value=new Set(u.initialSelected??[]),n.value.length){!I.value&&n.value[0]&&r(n.value[0].sha);return}d.value=me,await F(!0)}});async function r(y){if(I.value!==y){if(I.value=y,D.value=null,y in v){j.value=v[y],G.value=!1;return}j.value=null,G.value=!0;try{const i=await $fetch(`/api/failure-clusters/${u.clusterId}/commit-diff`,{query:{sha:y}});v[y]=i,I.value===y&&(j.value=i)}catch(i){I.value===y&&(D.value=de(i))}finally{I.value===y&&(G.value=!1)}}}function $(y){const i=new Set(h.value);i.has(y)?i.delete(y):i.add(y),h.value=i}function B(){h.value=new Set(O.value.map(y=>y.sha))}function H(){h.value=new Set}function X(){f("confirm",[...h.value]),f("update:open",!1)}return(y,i)=>{const k=ge,N=ke,q=Ct,K=ie,W=wt,Z=ue,ae=te,se=xn,oe=Te;return s(),S(oe,{open:a.open,title:"Browse commits",ui:{content:"max-w-6xl",body:"p-0 overflow-hidden"},"onUpdate:open":i[4]||(i[4]=_=>f("update:open",_))},{title:p(()=>[t("span",vn,[i[5]||(i[5]=w("Browse commits ",-1)),c(k,{topic:"cluster.commit-browser"})])]),body:p(()=>[t("div",_n,[t("div",hn,[t("div",yn,[c(N,{modelValue:e(g),"onUpdate:modelValue":i[0]||(i[0]=_=>J(g)?g.value=_:null),placeholder:"Search commits…",size:"xs",icon:"i-lucide-search"},null,8,["modelValue"]),t("div",kn,[t("button",{class:"hover:text-primary transition-colors",onClick:B},"All"),i[6]||(i[6]=t("span",null,"·",-1)),t("button",{class:"hover:text-primary transition-colors",onClick:H},"None"),t("span",bn,o(e(h).size>0?`${e(h).size} selected`:"none selected"),1)])]),e(V)?(s(),S(q,{key:0,text:"Loading…",padded:!1,class:"flex-1"})):e(R)?(s(),S(W,{key:1,text:e(R),padded:!1,class:"flex-1 p-4"},{action:p(()=>[c(K,{size:"xs",color:"neutral",variant:"outline",onClick:i[1]||(i[1]=_=>F(!0))},{default:p(()=>[...i[7]||(i[7]=[w(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):(s(),l("div",$n,[e(O).length===0?(s(),l("div",Cn,o(e(g)?"No commits match":"No commits"),1)):m("",!0),(s(!0),l(L,null,Q(e(O),_=>(s(),l("button",{key:_.sha,class:Y(["w-full text-left px-2.5 py-2 flex items-start gap-2.5 hover:bg-elevated transition-colors border-b border-default/50 last:border-0 shrink-0",e(I)===_.sha?"bg-elevated":""]),onClick:le=>r(_.sha)},[t("input",{type:"checkbox",checked:e(h).has(_.sha),class:"mt-0.5 shrink-0 cursor-pointer accent-primary",onClick:i[2]||(i[2]=fe(()=>{},["stop"])),onChange:le=>$(_.sha)},null,40,Sn),t("div",Tn,[t("p",jn,o(_.message||"(no message)"),1),t("p",In,[t("code",Un,o(_.shortSha),1),t("span",zn,o(_.author),1),_.date?(s(),l("span",Rn,"· "+o(e(ce)(_.date)),1)):m("",!0),e(b).has(_.sha)?(s(),S(Z,{key:1,size:"xs",color:"info",variant:"soft",class:"shrink-0"},{default:p(()=>[...i[8]||(i[8]=[w(" auto ",-1)])]),_:1})):m("",!0)])])],10,wn))),128)),e(C)&&!e(g)?(s(),l("div",En,[e(T)?(s(),l("p",An,[c(ae,{name:"i-lucide-circle-alert",class:"size-3.5 shrink-0"}),w(" "+o(e(T)),1)])):m("",!0),c(K,{size:"xs",color:"neutral",variant:"outline",block:"",loading:e(E),onClick:z},{default:p(()=>[...i[9]||(i[9]=[w(" Load more ",-1)])]),_:1},8,["loading"])])):m("",!0)]))]),t("div",Vn,[e(I)?e(G)?(s(),S(q,{key:1,text:"Loading diff…",padded:!1,class:"flex-1"})):e(j)?(s(),l("div",Nn,[e(M)?(s(),l("div",Fn,[t("div",Bn,[t("code",Ln,o(e(M).shortSha),1),t("span",Pn,[w(o(e(M).author),1),e(M).date?(s(),l(L,{key:0},[w(" · "+o(e(ce)(e(M).date)),1)],64)):m("",!0)])]),t("p",Dn,o(e(M).message),1)])):m("",!0),e(j).files.length===0?(s(),l("div",On,"No file changes in this commit")):m("",!0),(s(!0),l(L,null,Q(e(j).files,_=>(s(),S(se,{key:_.filename,file:_},null,8,["file"]))),128))])):e(D)?(s(),S(W,{key:3,text:e(D),padded:!1,class:"flex-1 p-6"},{action:p(()=>[...i[10]||(i[10]=[t("p",{class:"text-xs text-gray-400"},"Click the commit again to retry",-1)])]),_:1},8,["text"])):(s(),l("div",Hn," Diff not available for this commit ")):(s(),l("div",Mn," Select a commit to view its diff "))])])]),footer:p(()=>[t("div",qn,[t("div",Gn,[e(h).size>0?(s(),l(L,{key:0},[t("span",Kn,o(e(h).size)+" commit"+o(e(h).size===1?"":"s"),1),e(A).files>0||e(A).linesAdded>0||e(A).linesRemoved>0?(s(),l(L,{key:0},[i[11]||(i[11]=t("span",{class:"text-gray-300 dark:text-gray-600"},"·",-1)),t("span",Wn,o(e(A).files)+" file"+o(e(A).files===1?"":"s"),1),t("span",Jn,"+"+o(e(A).linesAdded),1),t("span",Zn,"-"+o(e(A).linesRemoved),1)],64)):m("",!0),e(A).unreviewed>0?(s(),l("span",Qn," ("+o(e(A).unreviewed)+" unreviewed) ",1)):m("",!0)],64)):(s(),l("span",Xn,"No commits selected"))]),c(K,{color:"neutral",variant:"ghost",onClick:i[3]||(i[3]=_=>f("update:open",!1))},{default:p(()=>[...i[12]||(i[12]=[w(" Cancel ",-1)])]),_:1}),c(K,{color:"primary",disabled:e(h).size===0,onClick:X},{default:p(()=>[...i[13]||(i[13]=[w(" Add to context ",-1)])]),_:1},8,["disabled"])])]),_:1},8,["open"])}}}),ea=Object.assign(Yn,{__name:"CommitBrowserModal"});function je(a){return{scmStatus:P(()=>{const u=a.value?.scm;if(!u)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"Git context unavailable",detail:""};if(u.baseCommitUsed){if(u.filesCount===0)return{color:"text-yellow-500",icon:"i-lucide-git-branch-plus",text:`Manual baseline ${u.baseCommitUsed.slice(0,7)} · fetch failed`,detail:"network error or missing SCM token (check AI settings)"};const g=u.patchesOmitted?", no patches (diff too large)":u.patchesTruncated?`, ${u.patchedFilesCount} with patches (some cut)`:`, ${u.patchedFilesCount} with patches`;return{color:"text-blue-500",icon:"i-lucide-git-branch-plus",text:`Manual baseline ${u.baseCommitUsed.slice(0,7)} · ${u.filesCount} files${g}`,detail:u.hasLastGreen?"overrides last passing run baseline":"no last passing run"}}if(!u.hasLastGreen)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"No last passing run",detail:"enter a baseline commit below to enable diff"};if(!u.hasCommitRange)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"No commit range",detail:"reporter did not send SCM metadata"};if(!u.provider)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:"Unsupported SCM host",detail:"only GitHub, GitLab and Bitbucket are supported"};if(u.filesCount===0)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:`${u.provider} · fetch failed`,detail:"network error or missing SCM token (check AI settings)"};if(u.patchesOmitted)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:`${u.provider} · ${u.filesCount} files`,detail:"diff too large — file list only, no patches"};const b=u.patchesTruncated?", some patches cut (budget)":"",f=u.commitsCount>0?` · ${u.commitsCount} commit${u.commitsCount>1?"s":""}`:"";return{color:"text-green-500",icon:"i-lucide-git-branch",text:`${u.provider} · ${u.filesCount} files · ${u.patchedFilesCount} with patches${b}${f}`,detail:""}})}}const ta={class:"space-y-3"},sa={class:"pb-2 border-b border-default"},na={class:"flex items-center gap-2 flex-wrap"},aa={class:"text-xs text-gray-500 font-medium shrink-0 inline-flex items-center gap-1"},oa={class:"flex items-center gap-1.5 ml-auto"},la={key:0,class:"flex items-center gap-1 px-2 py-0.5 rounded-full bg-primary/10 text-primary text-xs font-medium"},ra={key:0,class:"flex items-start gap-1.5 text-xs px-2 py-1.5 rounded-md bg-elevated border border-default"},ia={key:0,class:"text-gray-400 ml-1"},ca={key:1,class:"flex items-center justify-center py-6"},ua={key:3,class:"text-xs text-gray-400 text-center py-4"},da=ee({__name:"ClusterInvestigation",setup(a){const{clusterId:U,baseCommit:u,selectedCommitShas:b,autoSelectedCommits:f,baseCommitIsPinned:g,coverage:n,scmChanges:d,contextLoading:C,refreshContext:V}=St(),E=x(!1),{scmStatus:R}=je(n);return(T,h)=>{const I=ge,v=Ps,j=te,G=be,D=ie,M=ln,O=ea;return s(),l(L,null,[t("div",ta,[t("div",sa,[t("div",na,[t("span",aa,[h[5]||(h[5]=w(" Baseline ",-1)),c(I,{topic:"cluster.baseline"})]),c(v,{modelValue:e(u),"onUpdate:modelValue":h[0]||(h[0]=A=>J(u)?u.value=A:null),"cluster-id":e(U)},null,8,["modelValue","cluster-id"]),e(g)?(s(),S(G,{key:0,text:"Baseline commit pinned for this cluster"},{default:p(()=>[c(j,{name:"i-lucide-pin",class:"size-3.5 text-primary shrink-0"})]),_:1})):m("",!0),t("div",oa,[e(b).length?(s(),l("div",la,[c(j,{name:"i-lucide-git-commit-horizontal",class:"size-3"}),t("span",null,o(e(b).length)+" commit"+o(e(b).length===1?"":"s"),1),t("button",{class:"ml-0.5 hover:opacity-70 transition-opacity",onClick:h[1]||(h[1]=A=>b.value=[])},[c(j,{name:"i-lucide-x",class:"size-3"})])])):m("",!0),c(D,{size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-list",onClick:h[2]||(h[2]=A=>E.value=!0)},{default:p(()=>[...h[6]||(h[6]=[w(" Browse ",-1)])]),_:1}),c(D,{icon:"i-lucide-refresh-cw",size:"xs",color:"neutral",variant:"outline",loading:e(C),onClick:e(V)},null,8,["loading","onClick"])])])]),e(n)?(s(),l("div",ra,[c(j,{name:e(R).icon,class:Y(["size-3.5 mt-0.5 shrink-0",e(R).color])},null,8,["name","class"]),t("div",null,[t("span",{class:Y(e(R).color)},o(e(R).text),3),e(R).detail?(s(),l("span",ia,"— "+o(e(R).detail),1)):m("",!0)])])):m("",!0),e(C)&&!e(d)?(s(),l("div",ca,[c(j,{name:"i-lucide-loader-circle",class:"size-4 animate-spin text-gray-400"})])):e(d)?(s(),S(M,{key:2,changes:e(d)},null,8,["changes"])):e(n)&&!e(C)&&!e(d)?(s(),l("p",ua," No changes found in this range. ")):m("",!0)]),c(O,{open:e(E),"onUpdate:open":h[3]||(h[3]=A=>J(E)?E.value=A:null),"cluster-id":e(U),"initial-selected":e(b),"auto-selected-shas":e(f),onConfirm:h[4]||(h[4]=A=>b.value=A)},null,8,["open","cluster-id","initial-selected","auto-selected-shas"])],64)}}}),ma=Object.assign(da,{__name:"ClusterInvestigation"}),fa={class:"flex flex-col h-[60vh]"},pa={class:"flex items-center gap-3 px-4 py-2.5 border-b border-default text-sm shrink-0"},ga={key:0,class:"ml-auto text-xs text-gray-500"},xa={class:"flex-1 overflow-y-auto"},va={class:"w-full text-sm"},_a=["onClick"],ha={class:"px-4 py-2.5"},ya=["checked","onChange"],ka={class:"px-2 py-2.5 min-w-0"},ba={class:"truncate font-medium text-gray-800 dark:text-gray-200 max-w-[24rem]"},$a={class:"px-2 py-2.5 text-gray-500 text-xs max-w-[16rem] hidden sm:table-cell"},Ca={class:"px-2 py-2.5 text-right text-gray-500 text-xs"},wa={key:0},Sa={class:"shrink-0 border-t border-default px-4 py-3 space-y-1.5"},Ta={key:0,class:"shrink-0 px-4 pb-3 flex items-center gap-1.5 text-xs text-red-500"},ja={class:"flex items-center gap-3 w-full"},Ia=ee({__name:"ClusterExtractCasesModal",props:{open:{type:Boolean},clusterId:{},affectedTestCases:{},projectKey:{},projectName:{}},emits:["update:open","extracted"],setup(a,{emit:U}){const u=a,b=U,f=Ke(),g=x(new Set),n=x(""),d=x(!1),C=x(null);function V(){g.value=new Set(u.affectedTestCases.map(I=>I.testCaseId))}function E(){g.value=new Set}function R(I){const v=new Set(g.value);v.has(I)?v.delete(I):v.add(I),g.value=v}ne(()=>u.open,I=>{I&&(E(),n.value="",C.value=null)});const T=P(()=>g.value.size);async function h(){if(T.value!==0){d.value=!0,C.value=null;try{await $fetch(`/api/failure-clusters/${u.clusterId}/extract-cases`,{method:"POST",body:{testCaseIds:[...g.value],triageNote:n.value.trim()||void 0}}),f.add({title:`Extracted ${T.value} test ${T.value===1?"case":"cases"}`,color:"success"}),b("extracted"),b("update:open",!1)}catch(I){C.value=de(I)}finally{d.value=!1}}}return(I,v)=>{const j=ye,G=xe,D=$e,M=te,O=ie,A=Te;return s(),S(A,{open:a.open,title:"Extract test cases",ui:{content:"max-w-4xl",body:"p-0 flex flex-col overflow-hidden"},"onUpdate:open":v[4]||(v[4]=F=>b("update:open",F))},{body:p(()=>[t("div",fa,[t("div",pa,[t("button",{class:"text-xs font-medium text-primary hover:underline",onClick:V},"Select all"),v[5]||(v[5]=t("span",{class:"text-gray-300 dark:text-gray-600"},"·",-1)),t("button",{class:"text-xs font-medium text-primary hover:underline",onClick:E},"Deselect all"),e(T)>0?(s(),l("span",ga,o(e(T))+" selected ",1)):m("",!0)]),t("div",xa,[t("table",va,[v[8]||(v[8]=t("thead",{class:"sticky top-0 bg-gray-50 dark:bg-gray-800 border-b border-default"},[t("tr",null,[t("th",{class:"w-10 px-4 py-2.5"}),t("th",{class:"text-left px-2 py-2.5 font-medium text-gray-500 text-xs uppercase tracking-wide"},"Test"),t("th",{class:"text-left px-2 py-2.5 font-medium text-gray-500 text-xs uppercase tracking-wide hidden sm:table-cell"}," File "),t("th",{class:"text-right px-2 py-2.5 font-medium text-gray-500 text-xs uppercase tracking-wide w-20"}," Occurrences ")])],-1)),t("tbody",null,[(s(!0),l(L,null,Q(a.affectedTestCases,F=>(s(),l("tr",{key:F.testCaseId,class:"border-b border-default/50 hover:bg-elevated transition-colors cursor-pointer",onClick:z=>R(F.testCaseId)},[t("td",ha,[t("input",{type:"checkbox",checked:e(g).has(F.testCaseId),class:"shrink-0 cursor-pointer accent-primary",onClick:v[0]||(v[0]=fe(()=>{},["stop"])),onChange:z=>R(F.testCaseId)},null,40,ya)]),t("td",ka,[t("p",ba,o(F.title),1),c(j,{to:`/test-cases/${F.testCaseId}`,class:"text-[10px] text-primary hover:underline mt-0.5 inline-block",onClick:v[1]||(v[1]=fe(()=>{},["stop"]))},{default:p(()=>[...v[6]||(v[6]=[w(" View details ",-1)])]),_:1},8,["to"])]),t("td",$a,[c(G,{"file-path":F.filePath,"project-key":a.projectKey,"project-name":a.projectName,class:"max-w-full"},null,8,["file-path","project-key","project-name"])]),t("td",Ca,o(F.runCount),1)],8,_a))),128)),a.affectedTestCases.length===0?(s(),l("tr",wa,[...v[7]||(v[7]=[t("td",{colspan:"4",class:"px-4 py-8 text-center text-gray-400 text-sm"},"No test cases in this cluster.",-1)])])):m("",!0)])])]),t("div",Sa,[v[9]||(v[9]=t("label",{class:"text-xs font-medium text-gray-500 uppercase tracking-wide"},"Triage note (optional)",-1)),c(D,{modelValue:e(n),"onUpdate:modelValue":v[2]||(v[2]=F=>J(n)?n.value=F:null),placeholder:"Add a note explaining why these tests were extracted…",rows:2,class:"text-sm w-full"},null,8,["modelValue"])]),e(C)?(s(),l("p",Ta,[c(M,{name:"i-lucide-circle-alert",class:"size-3.5 shrink-0"}),w(" "+o(e(C)),1)])):m("",!0)])]),footer:p(()=>[t("div",ja,[v[11]||(v[11]=t("div",{class:"flex-1"},null,-1)),c(O,{color:"neutral",variant:"ghost",disabled:e(d),onClick:v[3]||(v[3]=F=>b("update:open",!1))},{default:p(()=>[...v[10]||(v[10]=[w(" Cancel ",-1)])]),_:1},8,["disabled"]),c(O,{color:"warning",disabled:e(T)===0,loading:e(d),onClick:h},{default:p(()=>[w(" Extract"+o(e(T)>0?` ${e(T)}`:""),1)]),_:1},8,["disabled","loading"])])]),_:1},8,["open"])}}}),Ua=Object.assign(Ia,{__name:"ClusterExtractCasesModal"}),za={key:0,class:"flex flex-col h-full min-h-0 max-xl:overflow-y-auto xl:overflow-hidden"},Ra={class:"border-b border-default shrink-0"},Ea={class:"grid grid-cols-1 xl:grid-cols-[3fr_2fr] gap-4 p-1 xl:flex-1 xl:min-h-0 xl:overflow-hidden"},Aa={class:"space-y-4 xl:overflow-y-auto"},Va={class:"font-mono text-xs"},Ma=["innerHTML"],Na={class:"inline-flex items-center gap-1.5"},Fa={class:"xl:overflow-y-auto"},Ba={key:1,class:"flex items-center justify-center h-64 text-gray-500"},ko=ee({__name:"[id]",async setup(a){let U,u;const b=We(),f=parseInt(String(b.params.id)),g=Tt(f),{data:n,refresh:d}=([U,u]=Je(()=>Ut(`/api/failure-clusters/${f}`,"$y4C0kntcH9")),U=await U,u(),U);Ze(P(()=>({title:`${n.value?.signature??"Failure cluster"} — Piwi Dashboard`})));const C=x(n.value?.status??"open"),V=x(n.value?.triageNote??""),E=x(!1);ne(()=>n.value?.status,k=>{k&&(C.value=k)}),ne(()=>n.value?.triageNote,k=>{V.value=k??""});const R=P(()=>C.value!==(n.value?.status??"open")||V.value.trim()!==(n.value?.triageNote??""));async function T(){E.value=!0;try{await $fetch(`/api/failure-clusters/${f}/status`,{method:"PATCH",body:{status:C.value,triageNote:V.value.trim()||null}}),d()}finally{E.value=!1}}const h=x(!1);function I(){h.value=!1,d()}const{copyRich:v,copied:j}=rt();function G(){const k=n.value;if(!k)return;const N=window.location.href,q=se=>se.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),K=[k.errorType,`${k.occurrences} occurrence${k.occurrences===1?"":"s"}`,`${k.affectedTests} test${k.affectedTests===1?"":"s"} affected`,k.status!=="open"?k.status:null].filter(Boolean).join(" · "),W=k.diagnosis?.status==="completed"&&k.diagnosis.summary?`AI diagnosis (${k.diagnosis.category??"unknown"}, ${k.diagnosis.confidence??"?"} confidence): ${k.diagnosis.summary}`:null,Z=[`❌ Failure cluster: ${k.signature}`,K,"",...k.sampleError?["Sample error:",ve(k.sampleError),""]:[],...W?[W,""]:[],`Cluster: ${N}`].join(`
|
|
3
3
|
`),ae=[`<p><strong>❌ Failure cluster</strong>: <code>${q(k.signature)}</code></p>`,`<p><em>${q(K)}</em></p>`,k.sampleError?`<p><strong>Sample error:</strong></p><pre>${he(k.sampleError)}</pre>`:"",W?`<p><strong>AI diagnosis</strong> (${q(k.diagnosis?.category??"unknown")}, ${q(k.diagnosis?.confidence??"?")} confidence):<br>${q(k.diagnosis.summary)}</p>`:"",`<p>🔗 <a href="${N}">View failure cluster</a></p>`].join("");v(Z,ae,{toast:"Failure cluster copied"})}const D=P(()=>{const k=n.value?.sampleError;return k?ve(k).split(`
|
|
4
4
|
`).find(N=>N.trim())??"":""}),{scmStatus:M}=je(g.coverage),O=P(()=>It((n.value?.affectedTestCases??[]).map(k=>({filePath:k.filePath,title:k.title,line:null,projectName:null})))),{copy:A,copied:F}=zt(),z=x(null),r=x(null),$=x(null),B=x(null),H=x(null),X=x(null),y={sampleError:()=>z.value,executionError:()=>z.value,environmentDiff:()=>B.value,visualDiff:()=>H.value,domSnapshot:()=>X.value,scmInvestigation:()=>$.value,selectedCommits:()=>$.value,topSuspectedCommit:()=>$.value,failingAction:()=>$.value,affectedTests:()=>r.value,testSource:()=>r.value,sourceFiles:()=>r.value,steps:()=>r.value,failingSteps:()=>r.value,console:()=>r.value,networkRequests:()=>r.value,serverTraces:()=>r.value,ariaSnapshot:()=>r.value,screenshots:()=>r.value,tracePointers:()=>r.value,artifacts:()=>r.value};Qe(it,{canLocate:k=>k in y,open:k=>y[k]?.()?.reveal()});const i=P(()=>[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},...n.value?.project?[{label:n.value.project.label||n.value.project.name||"Project",to:`/projects/${n.value.project.id}?tab=failure-clusters`}]:[{label:"Project"}],{label:`Failure cluster #${f}`}]);return(k,N)=>{const q=Be,K=Le,W=ie,Z=be,ae=Ye,se=Jt,oe=vt,_=_t,le=ht,Ie=yt,Ue=kt,ze=xe,Re=ue,Ee=xs,Ae=te,Ve=ma,Me=jt,Ne=Xe,Fe=Ua;return s(),l(L,null,[c(Ne,{id:"failure-cluster-detail"},{header:p(()=>[c(ae,null,{leading:p(()=>[c(q),c(K,{items:e(i)},null,8,["items"])]),right:p(()=>[e(n)?(s(),S(Z,{key:0,text:e(j)?"Copied!":"Copy failure cluster"},{default:p(()=>[c(W,{size:"sm",variant:"ghost",color:"neutral",icon:e(j)?"i-lucide-check":"i-lucide-clipboard",onClick:G},null,8,["icon"])]),_:1},8,["text"])):m("",!0)]),_:1})]),body:p(()=>[e(n)?(s(),l("div",za,[t("div",Ra,[c(se,{cluster:e(n),"triage-status":e(C),"triage-note":e(V),"triage-saving":e(E),"triage-changed":e(R),"onUpdate:triageStatus":N[0]||(N[0]=re=>C.value=re),"onUpdate:triageNote":N[1]||(N[1]=re=>V.value=re),onSaveTriage:T},null,8,["cluster","triage-status","triage-note","triage-saving","triage-changed"])]),t("div",Ea,[t("div",Aa,[e(n).sampleError?(s(),S(oe,{key:0,ref_key:"errorSection",ref:z,"storage-key":"cluster-error",icon:"i-lucide-circle-x","icon-class":"text-red-500",title:"Error message"},{folded:p(()=>[t("span",Va,o(e(D)),1)]),default:p(()=>[t("div",{class:"text-xs font-mono overflow-x-auto whitespace-pre-wrap",innerHTML:e(he)(e(n).sampleError)},null,8,Ma)]),_:1},512)):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(_,{key:1,ref:"locatorSection","storage-key":"cluster-locators","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId,"affected-count":e(n).affectedTestCases.length},null,8,["run-id","test-runs-case-id","affected-count"])):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(le,{key:2,ref_key:"envDiffSection",ref:B,"storage-key":"cluster-env-diff","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId},null,8,["run-id","test-runs-case-id"])):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(Ie,{key:3,ref_key:"visualDiffSection",ref:H,"storage-key":"cluster-visual-diff","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId},null,8,["run-id","test-runs-case-id"])):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(Ue,{key:4,ref_key:"domSnapshotSection",ref:X,"storage-key":"cluster-dom-snapshot","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId},null,8,["run-id","test-runs-case-id"])):m("",!0),e(n).affectedTestCases?.length?(s(),S(oe,{key:5,ref_key:"evidenceSection",ref:r,"storage-key":"cluster-evidence",icon:"i-lucide-flask-conical",title:"Test evidence",help:"cluster.evidence"},{folded:p(()=>[w(o(e(n).affectedTests)+" "+o(e(n).affectedTests===1?"test":"tests")+" · "+o(e(n).occurrences)+" occurrence"+o(e(n).occurrences===1?"":"s")+" · ",1),e(n).affectedTestCases[0]?.filePath?(s(),S(ze,{key:0,"file-path":e(n).affectedTestCases[0].filePath,"project-key":e(n).project?.id,"project-name":e(n).project?.name,class:"text-xs"},null,8,["file-path","project-key","project-name"])):m("",!0)]),actions:p(()=>[c(Re,{color:"neutral",variant:"subtle",size:"sm"},{default:p(()=>[w(o(e(n).affectedTestCases.length)+" "+o(e(n).affectedTestCases.length===1?"test":"tests"),1)]),_:1}),c(W,{size:"xs",variant:"outline",color:"neutral",icon:e(F)?"i-lucide-check":"i-lucide-play",title:e(F)?"Copied!":("copyPreview"in k?k.copyPreview:e(ut))(e(O)),onClick:N[2]||(N[2]=re=>e(A)(e(O),{toast:"Retry command copied"}))},{default:p(()=>[...N[5]||(N[5]=[w(" Copy retry command ",-1)])]),_:1},8,["icon","title"]),c(Z,{text:"Unlink incorrectly clustered test cases from this group"},{default:p(()=>[c(W,{size:"xs",color:"warning",variant:"outline",icon:"i-lucide-arrow-up-from-line",onClick:N[3]||(N[3]=re=>h.value=!0)},{default:p(()=>[...N[6]||(N[6]=[w(" Extract ",-1)])]),_:1})]),_:1})]),default:p(()=>[c(Ee,{"affected-test-cases":e(n).affectedTestCases,"project-key":e(n).project?.id,"project-name":e(n).project?.name},null,8,["affected-test-cases","project-key","project-name"])]),_:1},512)):m("",!0),c(oe,{ref_key:"scmSection",ref:$,"storage-key":"cluster-scm",icon:"i-lucide-git-compare-arrows",title:"What changed",help:"cluster.scm"},{folded:p(()=>[t("span",Na,[c(Ae,{name:e(M).icon,class:Y(["size-3.5 shrink-0",e(M).color])},null,8,["name","class"]),t("span",{class:Y(e(M).color)},o(e(M).text),3)])]),default:p(()=>[c(Ve)]),_:1},512)]),t("div",Fa,[c(Me,{"cluster-id":e(f),"last-seen-run-id":e(n)?.lastSeenRunId,"affected-test-cases":e(n)?.affectedTestCases??[]},null,8,["cluster-id","last-seen-run-id","affected-test-cases"])])])])):(s(),l("div",Ba,"Cluster not found."))]),_:1}),e(n)?(s(),S(Fe,{key:0,open:e(h),"cluster-id":e(f),"affected-test-cases":e(n).affectedTestCases??[],"project-key":e(n).project?.id,"project-name":e(n).project?.name,"onUpdate:open":N[4]||(N[4]=re=>h.value=re),onExtracted:I},null,8,["open","cluster-id","affected-test-cases","project-key","project-name"])):m("",!0)],64)}}});export{ko as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as k}from"./
|
|
1
|
+
import{_ as k}from"./B2oUeBbA.js";import{d as _,f as r,g as l,k as b,o as n,c as a,t as u,m as h,F as g,y as V,h as f,i as y,q as v,aa as x,T as p}from"./DHltYerF.js";import{_ as B}from"./DHXWp5yD.js";import{_ as $}from"./C9YzQCiq.js";import{_ as E}from"./DZ3Vfcpz.js";import{h as M}from"./r3SBLxtE.js";const F={key:0},q={key:1},S={class:"font-mono text-xs"},T={key:0},A={key:2},C=_({__name:"EnvManagedAlert",props:{envVars:{},title:{},description:{}},setup(e){const t=e,c=f(()=>t.title??"Managed by environment variables");return(o,s)=>{const d=k;return n(),r(d,{icon:"i-lucide-lock",color:"neutral",variant:"subtle",title:b(c)},{description:l(()=>[e.description?(n(),a("span",F,u(e.description),1)):e.envVars?.length?(n(),a("span",q,[s[0]||(s[0]=h(" These settings are pinned by ",-1)),(n(!0),a(g,null,V(e.envVars,(i,m)=>(n(),a(g,{key:i},[y("code",S,u(i),1),m<e.envVars.length-1?(n(),a("span",T,", ")):v("",!0)],64))),128)),s[1]||(s[1]=h(" and cannot be changed here. Edit the environment and restart to change them. ",-1))])):(n(),a("span",A," These settings are pinned by environment variables and cannot be changed here. "))]),_:1},8,["title"])}}}),z=Object.assign(C,{__name:"EnvManagedAlert"}),N={class:"inline-flex items-center gap-1"},j=_({__name:"SettingsField",props:{label:{},help:{},envVars:{},envManaged:{type:Boolean},description:{},hint:{},required:{type:Boolean},name:{},disabled:{type:Boolean}},setup(e){const t=e,c=f(()=>{if(t.envVars)return t.envVars;if(t.help)return M(t.help)});return(o,s)=>{const d=B,i=$,m=E;return n(),r(m,{label:e.label,description:e.description,hint:e.hint,required:e.required,name:e.name,disabled:e.disabled||e.envManaged},x({label:l(()=>[y("span",N,[h(u(e.label)+" ",1),e.help?(n(),r(d,{key:0,topic:e.help},null,8,["topic"])):v("",!0),e.envManaged?(n(),r(i,{key:1,"env-vars":b(c)},null,8,["env-vars"])):v("",!0)])]),default:l(()=>[p(o.$slots,"default")]),_:2},[o.$slots.trailing?{name:"trailing",fn:l(()=>[p(o.$slots,"trailing")]),key:"0"}:void 0]),1032,["label","description","hint","required","name","disabled"])}}}),G=Object.assign(j,{__name:"SettingsField"});export{z as _,G as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as F,S as Z,o as i,f as P,g as u,T,m as I,U as Q,k as e,V as H,W as Oe,X as Ke,h as k,Y as Ge,Z as Qe,$ as Ze,t as x,c as $,i as f,O as de,p as N,j as d,v as Y,F as A,y as le,s as Re,x as $e,q as w,_ as G,r as M,a0 as He,a1 as We,a2 as Xe,a3 as Ye,a4 as Je,a5 as et,a6 as tt,u as at,a as st,K as lt,B as te,D as nt,l as ae,a7 as ot,a8 as ue}from"./D3SYPlEB.js";import{_ as it}from"./CCsl9MOZ.js";import{_ as rt}from"./D8YZvjas.js";import{_ as ut}from"./Bi3i470l.js";import{_ as dt}from"./DM_YaJgJ.js";import{_ as ct}from"./KYucVFu7.js";import{_ as pt}from"./B6IHiVa1.js";import{_ as qe}from"./C9EpbPNU.js";import{j as ce,t as pe,h as fe,p as me,f as ge,e as ft}from"./BUMZHDRC.js";import{_ as mt}from"./Tt5LX5Y-.js";import{_ as gt}from"./DOr_4nln.js";import{_ as vt}from"./empGC_x-.js";import{u as _t}from"./BTYiG93l.js";import{u as yt}from"./Doul3p1_.js";var bt=F({__name:"PaginationEllipsis",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const c=r;return Z(),(s,v)=>(i(),P(e(H),Q(c,{"data-type":"ellipsis"}),{default:u(()=>[T(s.$slots,"default",{},()=>[v[0]||(v[0]=I("…"))])]),_:3},16))}}),ht=bt;const[J,xt]=Ge("PaginationRoot");var kt=F({__name:"PaginationRoot",props:{page:{type:Number,required:!1},defaultPage:{type:Number,required:!1,default:1},itemsPerPage:{type:Number,required:!0},total:{type:Number,required:!1,default:0},siblingCount:{type:Number,required:!1,default:2},disabled:{type:Boolean,required:!1},showEdges:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"nav"}},emits:["update:page"],setup(r,{emit:c}){const s=r,v=c,{siblingCount:m,disabled:t,showEdges:C}=Oe(s);Z();const b=Ke(s,"page",v,{defaultValue:s.defaultPage,passive:s.page===void 0}),j=k(()=>Math.max(1,Math.ceil(s.total/(s.itemsPerPage||1))));return xt({page:b,onPageChange(L){b.value=L},pageCount:j,siblingCount:m,disabled:t,showEdges:C}),(L,D)=>(i(),P(e(H),{as:L.as,"as-child":L.asChild},{default:u(()=>[T(L.$slots,"default",{page:e(b),pageCount:j.value})]),_:3},8,["as","as-child"]))}}),Ct=kt,Pt=F({__name:"PaginationFirst",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r,s=J();Z();const v=k(()=>s.page.value===1||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"First Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("First page"))])]),_:3},16,["type","disabled"]))}}),Rt=Pt,$t=F({__name:"PaginationLast",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r,s=J();Z();const v=k(()=>s.page.value===s.pageCount.value||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Last Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).pageCount.value))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Last page"))])]),_:3},16,["type","disabled"]))}}),qt=$t;function K(r,c){const s=c-r+1;return Array.from({length:s},(v,m)=>m+r)}function St(r){return r.map(c=>typeof c=="number"?{type:"page",value:c}:{type:"ellipsis"})}const se="ellipsis";function zt(r,c,s,v){const t=c,C=Math.max(r-s,1),b=Math.min(r+s,t);if(v){const L=Math.min(2*s+5,c)-2,D=C>3&&Math.abs(t-L-1+1)>2&&Math.abs(C-1)>2,B=b<t-2&&Math.abs(t-L)>2&&Math.abs(t-b)>2;if(!D&&B)return[...K(1,L),se,t];if(D&&!B){const l=K(t-L+1,t);return[1,se,...l]}if(D&&B){const l=K(C,b);return[1,se,...l,se,t]}return K(1,t)}else{const j=s*2+1;return c<j?K(1,t):r<=s+1?K(1,j):c-r<=s?K(c-j+1,t):K(C,b)}}var It=F({__name:"PaginationList",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const c=r;Z();const s=J(),v=k(()=>St(zt(s.page.value,s.pageCount.value,s.siblingCount.value,s.showEdges.value)));return(m,t)=>(i(),P(e(H),Qe(Ze(c)),{default:u(()=>[T(m.$slots,"default",{items:v.value})]),_:3},16))}}),Lt=It,Nt=F({__name:"PaginationListItem",props:{value:{type:Number,required:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===c.value),m=k(()=>s.disabled.value);return(t,C)=>(i(),P(e(H),Q(c,{"data-type":"page","aria-label":`Page ${t.value}`,"aria-current":v.value?"page":void 0,"data-selected":v.value?"true":void 0,disabled:m.value,type:t.as==="button"?"button":void 0,onClick:C[0]||(C[0]=b=>!m.value&&e(s).onPageChange(t.value))}),{default:u(()=>[T(t.$slots,"default",{},()=>[I(x(t.value),1)])]),_:3},16,["aria-label","aria-current","data-selected","disabled","type"]))}}),jt=Nt,Tt=F({__name:"PaginationNext",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===s.pageCount.value||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Next Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).page.value+1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Next page"))])]),_:3},16,["type","disabled"]))}}),wt=Tt,Ft=F({__name:"PaginationPrev",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===1||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Previous Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).page.value-1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Prev page"))])]),_:3},16,["type","disabled"]))}}),Dt=Ft;const Bt=["title"],Et={class:"h-1.5 w-14 shrink-0 overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700"},Vt={class:"text-sm font-medium tabular-nums"},Mt={key:1,class:"text-sm text-muted",title:"No executed runs yet"},At=F({__name:"PassRateIndicator",props:{rate:{}},setup(r){const c=r,s=k(()=>c.rate==null?null:Math.round(c.rate*100)),v=k(()=>s.value==null?"":s.value>=80?"bg-green-500":s.value>=50?"bg-amber-500":"bg-red-500");return(m,t)=>e(s)!=null?(i(),$("div",{key:0,class:"flex items-center gap-2",title:`${e(s)}% of executed runs passed`},[f("div",Et,[f("div",{class:N([e(v),"h-full rounded-full transition-all"]),style:de({width:`${e(s)}%`})},null,6)]),f("span",Vt,x(e(s))+"%",1)],8,Bt)):(i(),$("span",Mt,"—"))}}),Se=Object.assign(At,{__name:"PassRateIndicator"}),Ut={class:"rounded-lg border border-default text-sm"},Ot={class:"flex items-center justify-end px-3 py-1.5 border-b border-default bg-elevated"},Kt=["disabled","title"],Gt=["onClick"],Qt={class:"text-xs text-muted tabular-nums shrink-0"},Zt={class:"w-24 sm:w-32 shrink-0 max-sm:hidden"},Ht={class:"flex items-center gap-3 shrink-0"},Wt=["title"],Xt={key:0,class:"text-xs text-muted tabular-nums max-sm:hidden"},Yt=["title"],Jt={key:0,class:"text-center py-8 text-muted"},ea=F({__name:"ProjectTestCasesTree",props:{items:{},hasFilter:{type:Boolean}},setup(r){const c=r;function s(l){return(l.suitePath||"").split("").filter(Boolean)}function v(l){const n={passed:0,failed:0,skipped:0,flaky:0,didNotRun:0,total:0,cases:l.length};for(const g of l)n.passed+=g.passedRuns,n.failed+=g.failedRuns,n.skipped+=g.skippedRuns,n.flaky+=g.flakyRuns,n.didNotRun+=g.didNotRunRuns,n.total+=g.totalRuns;return n}const m=M(new Set),t=k(()=>m.value.size===0);function C(l){return c.hasFilter?!0:!m.value.has(l)}function b(l){if(c.hasFilter)return;const n=new Set(m.value);n.has(l)?n.delete(l):n.add(l),m.value=n}function j(){const l=new Set;for(const n of c.items){l.add(`file:${n.filePath}`);const g=s(n);for(let y=1;y<=g.length;y++)l.add(`group:${n.filePath}${g.slice(0,y).join("")}`)}return[...l]}function L(){m.value=new Set(j())}function D(){m.value=new Set}function B(l,n,g,y,h){const S=n.filter(o=>s(o).length===y.length),q=n.filter(o=>s(o).length>y.length),z=new Map;for(const o of q){const R=s(o)[y.length];z.has(R)||z.set(R,[]),z.get(R).push(o)}for(const[o,R]of z){const ee=[...y,o],V=`group:${g}${ee.join("")}`;l.push({kind:"group",depth:h,key:V,label:o,agg:v(R)}),C(V)&&B(l,R,g,ee,h+1)}for(const o of S)l.push({kind:"case",depth:h,key:`case:${o.id}`,testCase:o})}const U=k(()=>{const l=[],n=new Map;for(const g of c.items){const y=g.filePath||"unknown";n.has(y)||n.set(y,[]),n.get(y).push(g)}for(const[g,y]of[...n.entries()].sort(([h],[S])=>h.localeCompare(S))){const h=`file:${g}`;l.push({kind:"group",depth:0,key:h,label:g,agg:v(y)}),C(h)&&B(l,y,g,[],1)}return l});return(l,n)=>{const g=Y,y=qe,h=Re,S=$e,q=Se,z=G;return i(),$("div",Ut,[f("div",Ot,[f("button",{class:N(["flex items-center gap-1 text-xs transition-colors",r.hasFilter?"text-muted cursor-not-allowed opacity-50":"text-muted hover:text-default"]),disabled:r.hasFilter,title:r.hasFilter?"Clear filters to collapse/expand":e(t)?"Collapse all":"Expand all",onClick:n[0]||(n[0]=o=>e(t)?L():D())},[d(g,{name:e(t)?"i-lucide-fold-vertical":"i-lucide-unfold-vertical",class:"size-3.5"},null,8,["name"]),I(" "+x(e(t)?"Collapse all":"Expand all"),1)],10,Kt)]),(i(!0),$(A,null,le(e(U),o=>(i(),$(A,{key:o.key},[o.kind==="group"?(i(),$("div",{key:0,class:N(["flex items-center gap-2 py-2 pr-3 border-b border-default last:border-b-0 select-none",[o.depth===0?"bg-elevated":"bg-default",!r.hasFilter&&"cursor-pointer"]]),style:de({paddingLeft:`${o.depth*20+12}px`}),onClick:R=>b(o.key)},[d(g,{name:C(o.key)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5 text-muted shrink-0"},null,8,["name"]),d(g,{name:o.depth===0?"i-lucide-file-code-2":"i-lucide-folder-open",class:N(["size-4 shrink-0",o.depth===0?"text-blue-500":"text-amber-500"])},null,8,["name","class"]),f("span",{class:N(["font-medium truncate min-w-0",[o.depth===0?"text-default font-mono text-xs sm:text-sm":"text-muted"]])},x(o.label),3),f("span",Qt,x(o.agg.cases)+" "+x(o.agg.cases===1?"case":"cases"),1),n[1]||(n[1]=f("div",{class:"flex-1"},null,-1)),f("div",Zt,[d(y,{passed:o.agg.passed,failed:o.agg.failed,skipped:o.agg.skipped,flaky:o.agg.flaky,"did-not-run":o.agg.didNotRun,total:o.agg.total},null,8,["passed","failed","skipped","flaky","did-not-run","total"])])],14,Gt)):(i(),$("div",{key:1,class:"flex flex-wrap items-center gap-x-2 gap-y-1 pr-3 py-1.5 border-b border-default last:border-b-0 hover:bg-gray-50 dark:hover:bg-gray-900/40 transition-colors",style:de({paddingLeft:`${o.depth*20+12}px`})},[d(g,{name:"i-lucide-flask-conical",class:"size-3.5 text-muted shrink-0"}),d(h,{color:("testCaseCategoryColor"in l?l.testCaseCategoryColor:e(pe))(o.testCase.status),size:"xs",variant:"subtle",class:"capitalize shrink-0"},{default:u(()=>[I(x(("formatStatusLabel"in l?l.formatStatusLabel:e(ce))(o.testCase.status)),1)]),_:2},1032,["color"]),d(S,{to:`/test-cases/${o.testCase.id}`,class:"text-sm text-primary hover:underline truncate flex-1 min-w-32",title:o.testCase.title},{default:u(()=>[I(x(o.testCase.title),1)]),_:2},1032,["to","title"]),f("div",Ht,[d(q,{rate:o.testCase.passRate},null,8,["rate"]),f("span",{class:"text-xs text-muted tabular-nums max-sm:hidden",title:`${o.testCase.totalRuns} runs`},x(o.testCase.totalRuns)+"× ",9,Wt),o.testCase.avgDuration!=null?(i(),$("span",Xt,x(("formatDuration"in l?l.formatDuration:e(fe))(o.testCase.avgDuration)),1)):w("",!0),f("span",{class:"text-xs text-muted max-sm:hidden",title:("prettyDateFormat"in l?l.prettyDateFormat:e(me))(o.testCase.lastRun)},x(("formatRelativeTime"in l?l.formatRelativeTime:e(ge))(o.testCase.lastRun)),9,Yt),d(z,{to:`/test-cases/${o.testCase.id}`,size:"xs",variant:"outline"},{default:u(()=>[...n[2]||(n[2]=[I("View",-1)])]),_:1},8,["to"])])],4))],64))),128)),e(U).length===0?(i(),$("div",Jt,[d(g,{name:"i-lucide-search-x",class:"size-6 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),n[3]||(n[3]=f("p",{class:"text-sm"},"No test cases match your filters.",-1))])):w("",!0)])}}}),ta=Object.assign(ea,{__name:"ProjectTestCasesTree"}),aa={slots:{root:"",list:"flex items-center gap-1",ellipsis:"pointer-events-none",label:"min-w-5 text-center",first:"",prev:"",item:"",next:"",last:""}},sa={__name:"UPagination",props:{as:{type:null,required:!1},firstIcon:{type:null,required:!1},prevIcon:{type:null,required:!1},nextIcon:{type:null,required:!1},lastIcon:{type:null,required:!1},ellipsisIcon:{type:null,required:!1},color:{type:null,required:!1,default:"neutral"},variant:{type:null,required:!1,default:"outline"},activeColor:{type:null,required:!1,default:"primary"},activeVariant:{type:null,required:!1,default:"solid"},showControls:{type:Boolean,required:!1,default:!0},size:{type:null,required:!1},to:{type:Function,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultPage:{type:Number,required:!1},disabled:{type:Boolean,required:!1},itemsPerPage:{type:Number,required:!1,default:10},page:{type:Number,required:!1},showEdges:{type:Boolean,required:!1,default:!1},siblingCount:{type:Number,required:!1,default:2},total:{type:Number,required:!1,default:0}},emits:["update:page"],setup(r,{emit:c}){const s=r,v=c,m=He(),t=We("pagination",s),{dir:C}=Xe(),b=Ye(),j=Je(et(t,"as","defaultPage","disabled","itemsPerPage","page","showEdges","siblingCount","total"),v),L=k(()=>t.firstIcon||(C.value==="rtl"?b.ui.icons.chevronDoubleRight:b.ui.icons.chevronDoubleLeft)),D=k(()=>t.prevIcon||(C.value==="rtl"?b.ui.icons.chevronRight:b.ui.icons.chevronLeft)),B=k(()=>t.nextIcon||(C.value==="rtl"?b.ui.icons.chevronLeft:b.ui.icons.chevronRight)),U=k(()=>t.lastIcon||(C.value==="rtl"?b.ui.icons.chevronDoubleLeft:b.ui.icons.chevronDoubleRight)),l=k(()=>tt({extend:aa,...b.ui?.pagination||{}})());return(n,g)=>(i(),P(e(Ct),Q(e(j),{"data-slot":"root",class:l.value.root({class:[e(t).ui?.root,e(t).class]})}),{default:u(({page:y,pageCount:h})=>[d(e(Lt),{"data-slot":"list",class:N(l.value.list({class:e(t).ui?.list}))},{default:u(({items:S})=>[e(t).showControls||m.first?(i(),P(e(Rt),{key:0,"as-child":"","data-slot":"first",class:N(l.value.first({class:e(t).ui?.first}))},{default:u(()=>[T(n.$slots,"first",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:L.value,to:e(t).to?.(1)},null,8,["color","variant","size","icon","to"])])]),_:3},8,["class"])):w("",!0),e(t).showControls||m.prev?(i(),P(e(Dt),{key:1,"as-child":"","data-slot":"prev",class:N(l.value.prev({class:e(t).ui?.prev}))},{default:u(()=>[T(n.$slots,"prev",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:D.value,to:y>1?e(t).to?.(y-1):void 0},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0),(i(!0),$(A,null,le(S,(q,z)=>(i(),$(A,{key:z},[q.type==="page"?(i(),P(e(jt),{key:0,"as-child":"",value:q.value,"data-slot":"item",class:N(l.value.item({class:e(t).ui?.item}))},{default:u(()=>[T(n.$slots,"item",Q({ref_for:!0},{item:q,index:z,page:y,pageCount:h}),()=>[d(G,{color:y===q.value?e(t).activeColor:e(t).color,variant:y===q.value?e(t).activeVariant:e(t).variant,size:e(t).size,label:String(q.value),ui:{label:l.value.label()},to:e(t).to?.(q.value),square:""},null,8,["color","variant","size","label","ui","to"])])]),_:2},1032,["value","class"])):(i(),P(e(ht),{key:1,"as-child":"","data-slot":"ellipsis",class:N(l.value.ellipsis({class:e(t).ui?.ellipsis}))},{default:u(()=>[T(n.$slots,"ellipsis",{ui:l.value},()=>[d(G,{as:"div",color:e(t).color,variant:e(t).variant,size:e(t).size,icon:e(t).ellipsisIcon||e(b).ui.icons.ellipsis},null,8,["color","variant","size","icon"])])]),_:3},8,["class"]))],64))),128)),e(t).showControls||m.next?(i(),P(e(wt),{key:2,"as-child":"","data-slot":"next",class:N(l.value.next({class:e(t).ui?.next}))},{default:u(()=>[T(n.$slots,"next",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:B.value,to:y<h?e(t).to?.(y+1):void 0},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0),e(t).showControls||m.last?(i(),P(e(qt),{key:3,"as-child":"","data-slot":"last",class:N(l.value.last({class:e(t).ui?.last}))},{default:u(()=>[T(n.$slots,"last",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:U.value,to:e(t).to?.(h)},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0)]),_:2},1032,["class"])]),_:3},16,["class"]))}},la={class:"flex items-center rounded-md border border-default overflow-hidden"},na={class:"text-sm text-muted tabular-nums"},oa={class:"flex flex-wrap items-center gap-1"},ia=["aria-pressed","onClick"],ra={class:"mt-3 flex items-center justify-center gap-2"},ua={class:"hidden md:block overflow-x-auto"},da={class:"min-w-0 space-y-0.5"},ca={class:"flex items-center gap-1 text-xs text-muted"},pa={class:"text-sm tabular-nums"},fa={key:0,class:"text-sm text-muted tabular-nums"},ma={key:1,class:"text-sm text-muted"},ga=["title"],va={class:"flex justify-end"},_a={class:"space-y-2 md:hidden"},ya={class:"flex items-start justify-between gap-2"},ba={class:"flex items-center gap-1 text-xs text-muted min-w-0"},ha={class:"flex flex-wrap items-center justify-between gap-x-3 gap-y-1"},xa={class:"text-xs text-muted tabular-nums"},ka={key:0,class:"text-xs text-muted tabular-nums"},Ca=["title"],Pa={class:"mt-4 flex flex-wrap items-center justify-between gap-3"},Ra={class:"flex flex-wrap items-center gap-3"},$a={class:"text-sm text-muted tabular-nums"},qa={class:"flex items-center gap-1.5"},Sa=1e3,Pe=25,za=F({__name:"ProjectTestCasesTable",props:{projectId:{},projectName:{},syncQuery:{type:Boolean}},emits:["total"],setup(r,{expose:c,emit:s}){const v=r,m=s,t=at(),C=st(),{treeView:b,setTreeView:j}=_t("project-test-cases"),L=[{label:"10 / page",value:10},{label:"25 / page",value:25},{label:"50 / page",value:50},{label:"100 / page",value:100}],D=[{label:"Last 7 days",value:7},{label:"Last 30 days",value:30},{label:"Last 90 days",value:90},{label:"Last year",value:365},{label:"All time",value:0}],B=[{label:"Passed",value:"passed",color:"green"},{label:"Failed",value:"failed",color:"red"},{label:"Flaky",value:"flaky",color:"orange"},{label:"Skipped",value:"skipped",color:"gray"},{label:"Didn't run",value:"didnotrun",color:"amber"}],U=lt().public.demoMode?0:30,l=v.syncQuery?t.query:{},n=M(Math.max(1,Number(l.page)||1)),g=M(typeof l.q=="string"?l.q:""),y=M(g.value),h=M(typeof l.status=="string"?l.status.split(",").filter(Boolean):[]),S=M(typeof l.age=="string"&&l.age!==""?Math.max(0,Number(l.age)||0):U),q=M(typeof l.sort=="string"?l.sort:"lastRun"),z=M(l.dir==="asc"?"asc":"desc"),o=Number(l.pageSize),R=M(L.some(p=>p.value===o)?o:Pe);te(y,ot(p=>{g.value=p.trim()},300)),te([g,h,S,q,z,R,b],()=>{n.value=1});const ee=k(()=>({limit:b.value?Sa:R.value,offset:b.value?0:(n.value-1)*R.value,...g.value?{q:g.value}:{},...h.value.length>0?{status:h.value.join(",")}:{},maxAgeDays:S.value,sort:q.value,dir:z.value})),{data:V,status:ne,error:ve,refresh:oe}=yt(`/api/projects/${v.projectId}/test-cases`,{query:ee},"$6hxagaRDEc");te(()=>V.value?.total,p=>{p!=null&&m("total",p)},{immediate:!0}),v.syncQuery&&te([g,h,S,q,z,n,R],()=>{C.replace({query:{...t.query,q:g.value||void 0,status:h.value.length>0?h.value.join(","):void 0,age:S.value!==U?String(S.value):void 0,sort:q.value!=="lastRun"?q.value:void 0,dir:z.value!=="desc"?z.value:void 0,page:n.value>1?String(n.value):void 0,pageSize:R.value!==Pe?String(R.value):void 0}})});function ze(p){h.value=h.value.includes(p)?h.value.filter(_=>_!==p):[...h.value,p]}function Ie(p){q.value===p?z.value=z.value==="asc"?"desc":"asc":(q.value=p,z.value=p==="title"?"asc":"desc")}function W(p,_){return()=>{const O=q.value===_,re=O?z.value==="asc"?"i-lucide-chevron-up":"i-lucide-chevron-down":"i-lucide-chevrons-up-down";return ue("button",{type:"button",class:"flex items-center gap-1 font-semibold select-none cursor-pointer hover:text-highlighted transition-colors",onClick:()=>Ie(_)},[p,ue(Y,{name:re,class:["shrink-0 size-3.5",!O&&"opacity-40"]})])}}const Le=k(()=>[{accessorKey:"title",header:W("Test case","title")},{accessorKey:"status",header:W("Status","status")},{accessorKey:"totalRuns",header:W("Runs","totalRuns")},{accessorKey:"passRate",header:W("Pass rate","passRate")},{id:"results",header:"Results"},{accessorKey:"avgDuration",header:W("Avg duration","avgDuration")},{accessorKey:"lastRun",header:W("Last run","lastRun")},{id:"actions",header:()=>ue("div",{class:"text-right"},"Actions")}]),X=k(()=>V.value?.items??[]),E=k(()=>V.value?.total??0),Ne=k(()=>E.value===0?0:(n.value-1)*R.value+1),je=k(()=>b.value?X.value.length:Math.min(n.value*R.value,E.value)),ie=k(()=>g.value!==""||h.value.length>0),Te=k(()=>ie.value||S.value!==0),we=k(()=>ne.value==="pending"&&!V.value);return c({refresh:oe}),(p,_)=>{const O=G,re=nt,_e=it,Fe=rt,De=ut,Be=dt,ye=ct,Ee=pt,Ve=ta,be=$e,he=mt,xe=Re,ke=Se,Ce=qe,Me=gt,Ae=sa,Ue=vt;return i(),P(Ue,{title:"Test cases",icon:"i-lucide-flask-conical",count:e(V)?.total,help:"project.test-cases"},{actions:u(()=>[d(O,{icon:"i-lucide-refresh-cw",size:"sm",color:"neutral",variant:"ghost","aria-label":"Refresh test cases",loading:e(ne)==="pending"&&!!e(V),onClick:_[0]||(_[0]=()=>e(oe)())},null,8,["loading"])]),default:u(()=>[d(Fe,{class:"mb-4"},{start:u(()=>[f("div",la,[f("button",{type:"button",class:N(["px-2 py-1 text-xs transition-colors",e(b)?"text-muted hover:bg-elevated/60":"bg-primary text-white dark:text-white"]),title:"Flat list",onClick:_[1]||(_[1]=a=>e(j)(!1))},[d(e(Y),{name:"i-lucide-list",class:"size-3.5"})],2),f("button",{type:"button",class:N(["px-2 py-1 text-xs transition-colors",e(b)?"bg-primary text-white dark:text-white":"text-muted hover:bg-elevated/60"]),title:"Tree view",onClick:_[2]||(_[2]=a=>e(j)(!0))},[d(e(Y),{name:"i-lucide-folder-tree",class:"size-3.5"})],2)]),f("span",na,x(e(E))+" "+x(e(E)===1?"case":"cases"),1)]),default:u(()=>[d(re,{modelValue:e(y),"onUpdate:modelValue":_[3]||(_[3]=a=>ae(y)?y.value=a:null),placeholder:"Search title or file...",icon:"i-lucide-search",size:"sm",class:"min-w-48 max-sm:flex-1","aria-label":"Search test cases"},null,8,["modelValue"]),f("div",oa,[(i(),$(A,null,le(B,a=>f("button",{key:a.value,type:"button",class:N(["inline-flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium transition-colors whitespace-nowrap",e(h).includes(a.value)?a.color==="green"?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":a.color==="red"?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":a.color==="orange"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":a.color==="amber"?"bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400":"bg-gray-200 text-gray-700 dark:bg-gray-700 dark:text-gray-300":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700"]),"aria-pressed":e(h).includes(a.value),onClick:Ia=>ze(a.value)},[f("span",{class:N(["size-2 rounded-full shrink-0",a.color==="green"?"bg-green-500":a.color==="red"?"bg-red-500":a.color==="orange"?"bg-orange-500":a.color==="amber"?"bg-amber-500":"bg-gray-400"])},null,2),I(" "+x(a.label),1)],10,ia)),64))]),d(_e,{modelValue:e(S),"onUpdate:modelValue":_[4]||(_[4]=a=>ae(S)?S.value=a:null),items:D,size:"sm",class:"w-36","aria-label":"Last run age filter"},null,8,["modelValue"])]),_:1}),e(we)?(i(),P(De,{key:0,text:"Loading test cases..."})):e(ve)?(i(),P(Be,{key:1,text:("errorMessage"in p?p.errorMessage:e(ft))(e(ve),"Failed to load test cases")},{action:u(()=>[d(O,{size:"sm",variant:"outline",onClick:_[5]||(_[5]=()=>e(oe)())},{default:u(()=>[..._[10]||(_[10]=[I("Retry",-1)])]),_:1})]),_:1},8,["text"])):e(E)===0?(i(),$(A,{key:2},[e(Te)?(i(),P(ye,{key:1,icon:"i-lucide-search-x",text:"No test cases match your filters."},{default:u(()=>[f("div",ra,[e(S)!==0?(i(),P(O,{key:0,size:"sm",variant:"outline",onClick:_[6]||(_[6]=a=>S.value=0)},{default:u(()=>[..._[11]||(_[11]=[I("Show all time",-1)])]),_:1})):w("",!0),e(ie)?(i(),P(O,{key:1,size:"sm",variant:"ghost",onClick:_[7]||(_[7]=()=>{y.value="",g.value="",h.value=[]})},{default:u(()=>[..._[12]||(_[12]=[I(" Clear filters ",-1)])]),_:1})):w("",!0)])]),_:1})):(i(),P(ye,{key:0,icon:"i-lucide-flask-conical",text:"No test cases yet for this project."}))],64)):(i(),$("div",{key:3,class:N([{"opacity-60 pointer-events-none":e(ne)==="pending"},"transition-opacity"])},[e(b)?(i(),$(A,{key:0},[e(X).length<e(E)?(i(),P(Ee,{key:0,color:"warning",variant:"subtle",icon:"i-lucide-triangle-alert",class:"mb-3",title:`Showing the first ${e(X).length} of ${e(E)} cases — narrow the search or filters to see the rest.`},null,8,["title"])):w("",!0),d(Ve,{items:e(X),"has-filter":e(ie)},null,8,["items","has-filter"])],64)):(i(),$(A,{key:1},[f("div",ua,[d(Me,{data:e(X),columns:e(Le),ui:{base:"w-full table-fixed border-separate border-spacing-0 min-w-[56rem]",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0 [&>tr]:hover:bg-gray-50 dark:[&>tr]:hover:bg-gray-900/50",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"title-cell":u(({row:a})=>[f("div",da,[d(be,{to:`/test-cases/${a.original.id}`,class:"text-sm font-medium text-primary hover:underline truncate block",title:a.original.title},{default:u(()=>[I(x(a.original.title),1)]),_:2},1032,["to","title"]),f("div",ca,[d(e(Y),{name:"i-lucide-file-code",class:"size-3 shrink-0"}),d(he,{"file-path":a.original.filePath,"project-key":r.projectId,"project-name":r.projectName,class:"min-w-0"},null,8,["file-path","project-key","project-name"])])])]),"status-cell":u(({row:a})=>[d(xe,{color:("testCaseCategoryColor"in p?p.testCaseCategoryColor:e(pe))(a.original.status),variant:"subtle",size:"sm",class:"capitalize"},{default:u(()=>[I(x(("formatStatusLabel"in p?p.formatStatusLabel:e(ce))(a.original.status)),1)]),_:2},1032,["color"])]),"totalRuns-cell":u(({row:a})=>[f("span",pa,x(a.original.totalRuns),1)]),"passRate-cell":u(({row:a})=>[d(ke,{rate:a.original.passRate},null,8,["rate"])]),"results-cell":u(({row:a})=>[d(Ce,{passed:a.original.passedRuns,failed:a.original.failedRuns,skipped:a.original.skippedRuns,flaky:a.original.flakyRuns,"did-not-run":a.original.didNotRunRuns,total:a.original.totalRuns},null,8,["passed","failed","skipped","flaky","did-not-run","total"])]),"avgDuration-cell":u(({row:a})=>[a.original.avgDuration!=null?(i(),$("span",fa,x(("formatDuration"in p?p.formatDuration:e(fe))(a.original.avgDuration)),1)):(i(),$("span",ma,"—"))]),"lastRun-cell":u(({row:a})=>[f("span",{class:"text-sm text-muted",title:("prettyDateFormat"in p?p.prettyDateFormat:e(me))(a.original.lastRun)},x(a.original.lastRun!=null?("formatRelativeTime"in p?p.formatRelativeTime:e(ge))(a.original.lastRun):"—"),9,ga)]),"actions-cell":u(({row:a})=>[f("div",va,[d(O,{to:`/test-cases/${a.original.id}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:u(()=>[..._[13]||(_[13]=[I(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data","columns"])]),f("div",_a,[(i(!0),$(A,null,le(e(X),a=>(i(),$("div",{key:a.id,class:"rounded-lg border border-default p-3 space-y-2"},[f("div",ya,[d(be,{to:`/test-cases/${a.id}`,class:"text-sm font-medium text-primary hover:underline min-w-0 truncate",title:a.title},{default:u(()=>[I(x(a.title),1)]),_:2},1032,["to","title"]),d(xe,{color:("testCaseCategoryColor"in p?p.testCaseCategoryColor:e(pe))(a.status),variant:"subtle",size:"sm",class:"capitalize shrink-0"},{default:u(()=>[I(x(("formatStatusLabel"in p?p.formatStatusLabel:e(ce))(a.status)),1)]),_:2},1032,["color"])]),f("div",ba,[d(e(Y),{name:"i-lucide-file-code",class:"size-3 shrink-0"}),d(he,{"file-path":a.filePath,"project-key":r.projectId,"project-name":r.projectName,class:"min-w-0"},null,8,["file-path","project-key","project-name"])]),d(Ce,{passed:a.passedRuns,failed:a.failedRuns,skipped:a.skippedRuns,flaky:a.flakyRuns,"did-not-run":a.didNotRunRuns,total:a.totalRuns},null,8,["passed","failed","skipped","flaky","did-not-run","total"]),f("div",ha,[d(ke,{rate:a.passRate},null,8,["rate"]),f("span",xa,x(a.totalRuns)+" runs",1),a.avgDuration!=null?(i(),$("span",ka,x(("formatDuration"in p?p.formatDuration:e(fe))(a.avgDuration)),1)):w("",!0),f("span",{class:"text-xs text-muted",title:("prettyDateFormat"in p?p.prettyDateFormat:e(me))(a.lastRun)},x(a.lastRun!=null?("formatRelativeTime"in p?p.formatRelativeTime:e(ge))(a.lastRun):"—"),9,Ca)])]))),128))]),f("div",Pa,[f("div",Ra,[f("span",$a,"Showing "+x(e(Ne))+"–"+x(e(je))+" of "+x(e(E)),1),f("div",qa,[_[14]||(_[14]=f("span",{class:"text-sm text-muted"},"Rows per page",-1)),d(_e,{modelValue:e(R),"onUpdate:modelValue":_[8]||(_[8]=a=>ae(R)?R.value=a:null),items:L,size:"sm",class:"w-28","aria-label":"Rows per page"},null,8,["modelValue"])])]),e(E)>e(R)?(i(),P(Ae,{key:0,page:e(n),"onUpdate:page":_[9]||(_[9]=a=>ae(n)?n.value=a:null),total:e(E),"items-per-page":e(R),size:"sm"},null,8,["page","total","items-per-page"])):w("",!0)])],64))],2))]),_:1},8,["count"])}}}),Ka=Object.assign(za,{__name:"ProjectTestCasesTable"});export{Ka as _};
|
|
1
|
+
import{d as F,S as Z,o as i,f as P,g as u,T,m as I,U as Q,k as e,V as H,W as Oe,X as Ke,h as k,Y as Ge,Z as Qe,$ as Ze,t as x,c as $,i as f,O as de,p as N,j as d,v as Y,F as A,y as le,s as Re,x as $e,q as w,_ as G,r as M,a0 as He,a1 as We,a2 as Xe,a3 as Ye,a4 as Je,a5 as et,a6 as tt,u as at,a as st,K as lt,B as te,D as nt,l as ae,a7 as ot,a8 as ue}from"./DHltYerF.js";import{_ as it}from"./B1zMFx24.js";import{_ as rt}from"./BjCHB89N.js";import{_ as ut}from"./BJtlcTrb.js";import{_ as dt}from"./qpI-_f9Q.js";import{_ as ct}from"./C1dyLp_j.js";import{_ as pt}from"./B2oUeBbA.js";import{_ as qe}from"./DoFBTaDR.js";import{j as ce,t as pe,h as fe,p as me,f as ge,e as ft}from"./BeKvLsja.js";import{_ as mt}from"./swrbBdtB.js";import{_ as gt}from"./BXY_PWcx.js";import{_ as vt}from"./CN1mJlvD.js";import{u as _t}from"./CfOLBbW9.js";import{u as yt}from"./DXbPFI1d.js";var bt=F({__name:"PaginationEllipsis",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const c=r;return Z(),(s,v)=>(i(),P(e(H),Q(c,{"data-type":"ellipsis"}),{default:u(()=>[T(s.$slots,"default",{},()=>[v[0]||(v[0]=I("…"))])]),_:3},16))}}),ht=bt;const[J,xt]=Ge("PaginationRoot");var kt=F({__name:"PaginationRoot",props:{page:{type:Number,required:!1},defaultPage:{type:Number,required:!1,default:1},itemsPerPage:{type:Number,required:!0},total:{type:Number,required:!1,default:0},siblingCount:{type:Number,required:!1,default:2},disabled:{type:Boolean,required:!1},showEdges:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"nav"}},emits:["update:page"],setup(r,{emit:c}){const s=r,v=c,{siblingCount:m,disabled:t,showEdges:C}=Oe(s);Z();const b=Ke(s,"page",v,{defaultValue:s.defaultPage,passive:s.page===void 0}),j=k(()=>Math.max(1,Math.ceil(s.total/(s.itemsPerPage||1))));return xt({page:b,onPageChange(L){b.value=L},pageCount:j,siblingCount:m,disabled:t,showEdges:C}),(L,D)=>(i(),P(e(H),{as:L.as,"as-child":L.asChild},{default:u(()=>[T(L.$slots,"default",{page:e(b),pageCount:j.value})]),_:3},8,["as","as-child"]))}}),Ct=kt,Pt=F({__name:"PaginationFirst",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r,s=J();Z();const v=k(()=>s.page.value===1||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"First Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("First page"))])]),_:3},16,["type","disabled"]))}}),Rt=Pt,$t=F({__name:"PaginationLast",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r,s=J();Z();const v=k(()=>s.page.value===s.pageCount.value||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Last Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).pageCount.value))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Last page"))])]),_:3},16,["type","disabled"]))}}),qt=$t;function K(r,c){const s=c-r+1;return Array.from({length:s},(v,m)=>m+r)}function St(r){return r.map(c=>typeof c=="number"?{type:"page",value:c}:{type:"ellipsis"})}const se="ellipsis";function zt(r,c,s,v){const t=c,C=Math.max(r-s,1),b=Math.min(r+s,t);if(v){const L=Math.min(2*s+5,c)-2,D=C>3&&Math.abs(t-L-1+1)>2&&Math.abs(C-1)>2,B=b<t-2&&Math.abs(t-L)>2&&Math.abs(t-b)>2;if(!D&&B)return[...K(1,L),se,t];if(D&&!B){const l=K(t-L+1,t);return[1,se,...l]}if(D&&B){const l=K(C,b);return[1,se,...l,se,t]}return K(1,t)}else{const j=s*2+1;return c<j?K(1,t):r<=s+1?K(1,j):c-r<=s?K(c-j+1,t):K(C,b)}}var It=F({__name:"PaginationList",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const c=r;Z();const s=J(),v=k(()=>St(zt(s.page.value,s.pageCount.value,s.siblingCount.value,s.showEdges.value)));return(m,t)=>(i(),P(e(H),Qe(Ze(c)),{default:u(()=>[T(m.$slots,"default",{items:v.value})]),_:3},16))}}),Lt=It,Nt=F({__name:"PaginationListItem",props:{value:{type:Number,required:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===c.value),m=k(()=>s.disabled.value);return(t,C)=>(i(),P(e(H),Q(c,{"data-type":"page","aria-label":`Page ${t.value}`,"aria-current":v.value?"page":void 0,"data-selected":v.value?"true":void 0,disabled:m.value,type:t.as==="button"?"button":void 0,onClick:C[0]||(C[0]=b=>!m.value&&e(s).onPageChange(t.value))}),{default:u(()=>[T(t.$slots,"default",{},()=>[I(x(t.value),1)])]),_:3},16,["aria-label","aria-current","data-selected","disabled","type"]))}}),jt=Nt,Tt=F({__name:"PaginationNext",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===s.pageCount.value||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Next Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).page.value+1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Next page"))])]),_:3},16,["type","disabled"]))}}),wt=Tt,Ft=F({__name:"PaginationPrev",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===1||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Previous Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).page.value-1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Prev page"))])]),_:3},16,["type","disabled"]))}}),Dt=Ft;const Bt=["title"],Et={class:"h-1.5 w-14 shrink-0 overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700"},Vt={class:"text-sm font-medium tabular-nums"},Mt={key:1,class:"text-sm text-muted",title:"No executed runs yet"},At=F({__name:"PassRateIndicator",props:{rate:{}},setup(r){const c=r,s=k(()=>c.rate==null?null:Math.round(c.rate*100)),v=k(()=>s.value==null?"":s.value>=80?"bg-green-500":s.value>=50?"bg-amber-500":"bg-red-500");return(m,t)=>e(s)!=null?(i(),$("div",{key:0,class:"flex items-center gap-2",title:`${e(s)}% of executed runs passed`},[f("div",Et,[f("div",{class:N([e(v),"h-full rounded-full transition-all"]),style:de({width:`${e(s)}%`})},null,6)]),f("span",Vt,x(e(s))+"%",1)],8,Bt)):(i(),$("span",Mt,"—"))}}),Se=Object.assign(At,{__name:"PassRateIndicator"}),Ut={class:"rounded-lg border border-default text-sm"},Ot={class:"flex items-center justify-end px-3 py-1.5 border-b border-default bg-elevated"},Kt=["disabled","title"],Gt=["onClick"],Qt={class:"text-xs text-muted tabular-nums shrink-0"},Zt={class:"w-24 sm:w-32 shrink-0 max-sm:hidden"},Ht={class:"flex items-center gap-3 shrink-0"},Wt=["title"],Xt={key:0,class:"text-xs text-muted tabular-nums max-sm:hidden"},Yt=["title"],Jt={key:0,class:"text-center py-8 text-muted"},ea=F({__name:"ProjectTestCasesTree",props:{items:{},hasFilter:{type:Boolean}},setup(r){const c=r;function s(l){return(l.suitePath||"").split("").filter(Boolean)}function v(l){const n={passed:0,failed:0,skipped:0,flaky:0,didNotRun:0,total:0,cases:l.length};for(const g of l)n.passed+=g.passedRuns,n.failed+=g.failedRuns,n.skipped+=g.skippedRuns,n.flaky+=g.flakyRuns,n.didNotRun+=g.didNotRunRuns,n.total+=g.totalRuns;return n}const m=M(new Set),t=k(()=>m.value.size===0);function C(l){return c.hasFilter?!0:!m.value.has(l)}function b(l){if(c.hasFilter)return;const n=new Set(m.value);n.has(l)?n.delete(l):n.add(l),m.value=n}function j(){const l=new Set;for(const n of c.items){l.add(`file:${n.filePath}`);const g=s(n);for(let y=1;y<=g.length;y++)l.add(`group:${n.filePath}${g.slice(0,y).join("")}`)}return[...l]}function L(){m.value=new Set(j())}function D(){m.value=new Set}function B(l,n,g,y,h){const S=n.filter(o=>s(o).length===y.length),q=n.filter(o=>s(o).length>y.length),z=new Map;for(const o of q){const R=s(o)[y.length];z.has(R)||z.set(R,[]),z.get(R).push(o)}for(const[o,R]of z){const ee=[...y,o],V=`group:${g}${ee.join("")}`;l.push({kind:"group",depth:h,key:V,label:o,agg:v(R)}),C(V)&&B(l,R,g,ee,h+1)}for(const o of S)l.push({kind:"case",depth:h,key:`case:${o.id}`,testCase:o})}const U=k(()=>{const l=[],n=new Map;for(const g of c.items){const y=g.filePath||"unknown";n.has(y)||n.set(y,[]),n.get(y).push(g)}for(const[g,y]of[...n.entries()].sort(([h],[S])=>h.localeCompare(S))){const h=`file:${g}`;l.push({kind:"group",depth:0,key:h,label:g,agg:v(y)}),C(h)&&B(l,y,g,[],1)}return l});return(l,n)=>{const g=Y,y=qe,h=Re,S=$e,q=Se,z=G;return i(),$("div",Ut,[f("div",Ot,[f("button",{class:N(["flex items-center gap-1 text-xs transition-colors",r.hasFilter?"text-muted cursor-not-allowed opacity-50":"text-muted hover:text-default"]),disabled:r.hasFilter,title:r.hasFilter?"Clear filters to collapse/expand":e(t)?"Collapse all":"Expand all",onClick:n[0]||(n[0]=o=>e(t)?L():D())},[d(g,{name:e(t)?"i-lucide-fold-vertical":"i-lucide-unfold-vertical",class:"size-3.5"},null,8,["name"]),I(" "+x(e(t)?"Collapse all":"Expand all"),1)],10,Kt)]),(i(!0),$(A,null,le(e(U),o=>(i(),$(A,{key:o.key},[o.kind==="group"?(i(),$("div",{key:0,class:N(["flex items-center gap-2 py-2 pr-3 border-b border-default last:border-b-0 select-none",[o.depth===0?"bg-elevated":"bg-default",!r.hasFilter&&"cursor-pointer"]]),style:de({paddingLeft:`${o.depth*20+12}px`}),onClick:R=>b(o.key)},[d(g,{name:C(o.key)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5 text-muted shrink-0"},null,8,["name"]),d(g,{name:o.depth===0?"i-lucide-file-code-2":"i-lucide-folder-open",class:N(["size-4 shrink-0",o.depth===0?"text-blue-500":"text-amber-500"])},null,8,["name","class"]),f("span",{class:N(["font-medium truncate min-w-0",[o.depth===0?"text-default font-mono text-xs sm:text-sm":"text-muted"]])},x(o.label),3),f("span",Qt,x(o.agg.cases)+" "+x(o.agg.cases===1?"case":"cases"),1),n[1]||(n[1]=f("div",{class:"flex-1"},null,-1)),f("div",Zt,[d(y,{passed:o.agg.passed,failed:o.agg.failed,skipped:o.agg.skipped,flaky:o.agg.flaky,"did-not-run":o.agg.didNotRun,total:o.agg.total},null,8,["passed","failed","skipped","flaky","did-not-run","total"])])],14,Gt)):(i(),$("div",{key:1,class:"flex flex-wrap items-center gap-x-2 gap-y-1 pr-3 py-1.5 border-b border-default last:border-b-0 hover:bg-gray-50 dark:hover:bg-gray-900/40 transition-colors",style:de({paddingLeft:`${o.depth*20+12}px`})},[d(g,{name:"i-lucide-flask-conical",class:"size-3.5 text-muted shrink-0"}),d(h,{color:("testCaseCategoryColor"in l?l.testCaseCategoryColor:e(pe))(o.testCase.status),size:"xs",variant:"subtle",class:"capitalize shrink-0"},{default:u(()=>[I(x(("formatStatusLabel"in l?l.formatStatusLabel:e(ce))(o.testCase.status)),1)]),_:2},1032,["color"]),d(S,{to:`/test-cases/${o.testCase.id}`,class:"text-sm text-primary hover:underline truncate flex-1 min-w-32",title:o.testCase.title},{default:u(()=>[I(x(o.testCase.title),1)]),_:2},1032,["to","title"]),f("div",Ht,[d(q,{rate:o.testCase.passRate},null,8,["rate"]),f("span",{class:"text-xs text-muted tabular-nums max-sm:hidden",title:`${o.testCase.totalRuns} runs`},x(o.testCase.totalRuns)+"× ",9,Wt),o.testCase.avgDuration!=null?(i(),$("span",Xt,x(("formatDuration"in l?l.formatDuration:e(fe))(o.testCase.avgDuration)),1)):w("",!0),f("span",{class:"text-xs text-muted max-sm:hidden",title:("prettyDateFormat"in l?l.prettyDateFormat:e(me))(o.testCase.lastRun)},x(("formatRelativeTime"in l?l.formatRelativeTime:e(ge))(o.testCase.lastRun)),9,Yt),d(z,{to:`/test-cases/${o.testCase.id}`,size:"xs",variant:"outline"},{default:u(()=>[...n[2]||(n[2]=[I("View",-1)])]),_:1},8,["to"])])],4))],64))),128)),e(U).length===0?(i(),$("div",Jt,[d(g,{name:"i-lucide-search-x",class:"size-6 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),n[3]||(n[3]=f("p",{class:"text-sm"},"No test cases match your filters.",-1))])):w("",!0)])}}}),ta=Object.assign(ea,{__name:"ProjectTestCasesTree"}),aa={slots:{root:"",list:"flex items-center gap-1",ellipsis:"pointer-events-none",label:"min-w-5 text-center",first:"",prev:"",item:"",next:"",last:""}},sa={__name:"UPagination",props:{as:{type:null,required:!1},firstIcon:{type:null,required:!1},prevIcon:{type:null,required:!1},nextIcon:{type:null,required:!1},lastIcon:{type:null,required:!1},ellipsisIcon:{type:null,required:!1},color:{type:null,required:!1,default:"neutral"},variant:{type:null,required:!1,default:"outline"},activeColor:{type:null,required:!1,default:"primary"},activeVariant:{type:null,required:!1,default:"solid"},showControls:{type:Boolean,required:!1,default:!0},size:{type:null,required:!1},to:{type:Function,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultPage:{type:Number,required:!1},disabled:{type:Boolean,required:!1},itemsPerPage:{type:Number,required:!1,default:10},page:{type:Number,required:!1},showEdges:{type:Boolean,required:!1,default:!1},siblingCount:{type:Number,required:!1,default:2},total:{type:Number,required:!1,default:0}},emits:["update:page"],setup(r,{emit:c}){const s=r,v=c,m=He(),t=We("pagination",s),{dir:C}=Xe(),b=Ye(),j=Je(et(t,"as","defaultPage","disabled","itemsPerPage","page","showEdges","siblingCount","total"),v),L=k(()=>t.firstIcon||(C.value==="rtl"?b.ui.icons.chevronDoubleRight:b.ui.icons.chevronDoubleLeft)),D=k(()=>t.prevIcon||(C.value==="rtl"?b.ui.icons.chevronRight:b.ui.icons.chevronLeft)),B=k(()=>t.nextIcon||(C.value==="rtl"?b.ui.icons.chevronLeft:b.ui.icons.chevronRight)),U=k(()=>t.lastIcon||(C.value==="rtl"?b.ui.icons.chevronDoubleLeft:b.ui.icons.chevronDoubleRight)),l=k(()=>tt({extend:aa,...b.ui?.pagination||{}})());return(n,g)=>(i(),P(e(Ct),Q(e(j),{"data-slot":"root",class:l.value.root({class:[e(t).ui?.root,e(t).class]})}),{default:u(({page:y,pageCount:h})=>[d(e(Lt),{"data-slot":"list",class:N(l.value.list({class:e(t).ui?.list}))},{default:u(({items:S})=>[e(t).showControls||m.first?(i(),P(e(Rt),{key:0,"as-child":"","data-slot":"first",class:N(l.value.first({class:e(t).ui?.first}))},{default:u(()=>[T(n.$slots,"first",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:L.value,to:e(t).to?.(1)},null,8,["color","variant","size","icon","to"])])]),_:3},8,["class"])):w("",!0),e(t).showControls||m.prev?(i(),P(e(Dt),{key:1,"as-child":"","data-slot":"prev",class:N(l.value.prev({class:e(t).ui?.prev}))},{default:u(()=>[T(n.$slots,"prev",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:D.value,to:y>1?e(t).to?.(y-1):void 0},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0),(i(!0),$(A,null,le(S,(q,z)=>(i(),$(A,{key:z},[q.type==="page"?(i(),P(e(jt),{key:0,"as-child":"",value:q.value,"data-slot":"item",class:N(l.value.item({class:e(t).ui?.item}))},{default:u(()=>[T(n.$slots,"item",Q({ref_for:!0},{item:q,index:z,page:y,pageCount:h}),()=>[d(G,{color:y===q.value?e(t).activeColor:e(t).color,variant:y===q.value?e(t).activeVariant:e(t).variant,size:e(t).size,label:String(q.value),ui:{label:l.value.label()},to:e(t).to?.(q.value),square:""},null,8,["color","variant","size","label","ui","to"])])]),_:2},1032,["value","class"])):(i(),P(e(ht),{key:1,"as-child":"","data-slot":"ellipsis",class:N(l.value.ellipsis({class:e(t).ui?.ellipsis}))},{default:u(()=>[T(n.$slots,"ellipsis",{ui:l.value},()=>[d(G,{as:"div",color:e(t).color,variant:e(t).variant,size:e(t).size,icon:e(t).ellipsisIcon||e(b).ui.icons.ellipsis},null,8,["color","variant","size","icon"])])]),_:3},8,["class"]))],64))),128)),e(t).showControls||m.next?(i(),P(e(wt),{key:2,"as-child":"","data-slot":"next",class:N(l.value.next({class:e(t).ui?.next}))},{default:u(()=>[T(n.$slots,"next",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:B.value,to:y<h?e(t).to?.(y+1):void 0},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0),e(t).showControls||m.last?(i(),P(e(qt),{key:3,"as-child":"","data-slot":"last",class:N(l.value.last({class:e(t).ui?.last}))},{default:u(()=>[T(n.$slots,"last",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:U.value,to:e(t).to?.(h)},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0)]),_:2},1032,["class"])]),_:3},16,["class"]))}},la={class:"flex items-center rounded-md border border-default overflow-hidden"},na={class:"text-sm text-muted tabular-nums"},oa={class:"flex flex-wrap items-center gap-1"},ia=["aria-pressed","onClick"],ra={class:"mt-3 flex items-center justify-center gap-2"},ua={class:"hidden md:block overflow-x-auto"},da={class:"min-w-0 space-y-0.5"},ca={class:"flex items-center gap-1 text-xs text-muted"},pa={class:"text-sm tabular-nums"},fa={key:0,class:"text-sm text-muted tabular-nums"},ma={key:1,class:"text-sm text-muted"},ga=["title"],va={class:"flex justify-end"},_a={class:"space-y-2 md:hidden"},ya={class:"flex items-start justify-between gap-2"},ba={class:"flex items-center gap-1 text-xs text-muted min-w-0"},ha={class:"flex flex-wrap items-center justify-between gap-x-3 gap-y-1"},xa={class:"text-xs text-muted tabular-nums"},ka={key:0,class:"text-xs text-muted tabular-nums"},Ca=["title"],Pa={class:"mt-4 flex flex-wrap items-center justify-between gap-3"},Ra={class:"flex flex-wrap items-center gap-3"},$a={class:"text-sm text-muted tabular-nums"},qa={class:"flex items-center gap-1.5"},Sa=1e3,Pe=25,za=F({__name:"ProjectTestCasesTable",props:{projectId:{},projectName:{},syncQuery:{type:Boolean}},emits:["total"],setup(r,{expose:c,emit:s}){const v=r,m=s,t=at(),C=st(),{treeView:b,setTreeView:j}=_t("project-test-cases"),L=[{label:"10 / page",value:10},{label:"25 / page",value:25},{label:"50 / page",value:50},{label:"100 / page",value:100}],D=[{label:"Last 7 days",value:7},{label:"Last 30 days",value:30},{label:"Last 90 days",value:90},{label:"Last year",value:365},{label:"All time",value:0}],B=[{label:"Passed",value:"passed",color:"green"},{label:"Failed",value:"failed",color:"red"},{label:"Flaky",value:"flaky",color:"orange"},{label:"Skipped",value:"skipped",color:"gray"},{label:"Didn't run",value:"didnotrun",color:"amber"}],U=lt().public.demoMode?0:30,l=v.syncQuery?t.query:{},n=M(Math.max(1,Number(l.page)||1)),g=M(typeof l.q=="string"?l.q:""),y=M(g.value),h=M(typeof l.status=="string"?l.status.split(",").filter(Boolean):[]),S=M(typeof l.age=="string"&&l.age!==""?Math.max(0,Number(l.age)||0):U),q=M(typeof l.sort=="string"?l.sort:"lastRun"),z=M(l.dir==="asc"?"asc":"desc"),o=Number(l.pageSize),R=M(L.some(p=>p.value===o)?o:Pe);te(y,ot(p=>{g.value=p.trim()},300)),te([g,h,S,q,z,R,b],()=>{n.value=1});const ee=k(()=>({limit:b.value?Sa:R.value,offset:b.value?0:(n.value-1)*R.value,...g.value?{q:g.value}:{},...h.value.length>0?{status:h.value.join(",")}:{},maxAgeDays:S.value,sort:q.value,dir:z.value})),{data:V,status:ne,error:ve,refresh:oe}=yt(`/api/projects/${v.projectId}/test-cases`,{query:ee},"$6hxagaRDEc");te(()=>V.value?.total,p=>{p!=null&&m("total",p)},{immediate:!0}),v.syncQuery&&te([g,h,S,q,z,n,R],()=>{C.replace({query:{...t.query,q:g.value||void 0,status:h.value.length>0?h.value.join(","):void 0,age:S.value!==U?String(S.value):void 0,sort:q.value!=="lastRun"?q.value:void 0,dir:z.value!=="desc"?z.value:void 0,page:n.value>1?String(n.value):void 0,pageSize:R.value!==Pe?String(R.value):void 0}})});function ze(p){h.value=h.value.includes(p)?h.value.filter(_=>_!==p):[...h.value,p]}function Ie(p){q.value===p?z.value=z.value==="asc"?"desc":"asc":(q.value=p,z.value=p==="title"?"asc":"desc")}function W(p,_){return()=>{const O=q.value===_,re=O?z.value==="asc"?"i-lucide-chevron-up":"i-lucide-chevron-down":"i-lucide-chevrons-up-down";return ue("button",{type:"button",class:"flex items-center gap-1 font-semibold select-none cursor-pointer hover:text-highlighted transition-colors",onClick:()=>Ie(_)},[p,ue(Y,{name:re,class:["shrink-0 size-3.5",!O&&"opacity-40"]})])}}const Le=k(()=>[{accessorKey:"title",header:W("Test case","title")},{accessorKey:"status",header:W("Status","status")},{accessorKey:"totalRuns",header:W("Runs","totalRuns")},{accessorKey:"passRate",header:W("Pass rate","passRate")},{id:"results",header:"Results"},{accessorKey:"avgDuration",header:W("Avg duration","avgDuration")},{accessorKey:"lastRun",header:W("Last run","lastRun")},{id:"actions",header:()=>ue("div",{class:"text-right"},"Actions")}]),X=k(()=>V.value?.items??[]),E=k(()=>V.value?.total??0),Ne=k(()=>E.value===0?0:(n.value-1)*R.value+1),je=k(()=>b.value?X.value.length:Math.min(n.value*R.value,E.value)),ie=k(()=>g.value!==""||h.value.length>0),Te=k(()=>ie.value||S.value!==0),we=k(()=>ne.value==="pending"&&!V.value);return c({refresh:oe}),(p,_)=>{const O=G,re=nt,_e=it,Fe=rt,De=ut,Be=dt,ye=ct,Ee=pt,Ve=ta,be=$e,he=mt,xe=Re,ke=Se,Ce=qe,Me=gt,Ae=sa,Ue=vt;return i(),P(Ue,{title:"Test cases",icon:"i-lucide-flask-conical",count:e(V)?.total,help:"project.test-cases"},{actions:u(()=>[d(O,{icon:"i-lucide-refresh-cw",size:"sm",color:"neutral",variant:"ghost","aria-label":"Refresh test cases",loading:e(ne)==="pending"&&!!e(V),onClick:_[0]||(_[0]=()=>e(oe)())},null,8,["loading"])]),default:u(()=>[d(Fe,{class:"mb-4"},{start:u(()=>[f("div",la,[f("button",{type:"button",class:N(["px-2 py-1 text-xs transition-colors",e(b)?"text-muted hover:bg-elevated/60":"bg-primary text-white dark:text-white"]),title:"Flat list",onClick:_[1]||(_[1]=a=>e(j)(!1))},[d(e(Y),{name:"i-lucide-list",class:"size-3.5"})],2),f("button",{type:"button",class:N(["px-2 py-1 text-xs transition-colors",e(b)?"bg-primary text-white dark:text-white":"text-muted hover:bg-elevated/60"]),title:"Tree view",onClick:_[2]||(_[2]=a=>e(j)(!0))},[d(e(Y),{name:"i-lucide-folder-tree",class:"size-3.5"})],2)]),f("span",na,x(e(E))+" "+x(e(E)===1?"case":"cases"),1)]),default:u(()=>[d(re,{modelValue:e(y),"onUpdate:modelValue":_[3]||(_[3]=a=>ae(y)?y.value=a:null),placeholder:"Search title or file...",icon:"i-lucide-search",size:"sm",class:"min-w-48 max-sm:flex-1","aria-label":"Search test cases"},null,8,["modelValue"]),f("div",oa,[(i(),$(A,null,le(B,a=>f("button",{key:a.value,type:"button",class:N(["inline-flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium transition-colors whitespace-nowrap",e(h).includes(a.value)?a.color==="green"?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":a.color==="red"?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":a.color==="orange"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":a.color==="amber"?"bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400":"bg-gray-200 text-gray-700 dark:bg-gray-700 dark:text-gray-300":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700"]),"aria-pressed":e(h).includes(a.value),onClick:Ia=>ze(a.value)},[f("span",{class:N(["size-2 rounded-full shrink-0",a.color==="green"?"bg-green-500":a.color==="red"?"bg-red-500":a.color==="orange"?"bg-orange-500":a.color==="amber"?"bg-amber-500":"bg-gray-400"])},null,2),I(" "+x(a.label),1)],10,ia)),64))]),d(_e,{modelValue:e(S),"onUpdate:modelValue":_[4]||(_[4]=a=>ae(S)?S.value=a:null),items:D,size:"sm",class:"w-36","aria-label":"Last run age filter"},null,8,["modelValue"])]),_:1}),e(we)?(i(),P(De,{key:0,text:"Loading test cases..."})):e(ve)?(i(),P(Be,{key:1,text:("errorMessage"in p?p.errorMessage:e(ft))(e(ve),"Failed to load test cases")},{action:u(()=>[d(O,{size:"sm",variant:"outline",onClick:_[5]||(_[5]=()=>e(oe)())},{default:u(()=>[..._[10]||(_[10]=[I("Retry",-1)])]),_:1})]),_:1},8,["text"])):e(E)===0?(i(),$(A,{key:2},[e(Te)?(i(),P(ye,{key:1,icon:"i-lucide-search-x",text:"No test cases match your filters."},{default:u(()=>[f("div",ra,[e(S)!==0?(i(),P(O,{key:0,size:"sm",variant:"outline",onClick:_[6]||(_[6]=a=>S.value=0)},{default:u(()=>[..._[11]||(_[11]=[I("Show all time",-1)])]),_:1})):w("",!0),e(ie)?(i(),P(O,{key:1,size:"sm",variant:"ghost",onClick:_[7]||(_[7]=()=>{y.value="",g.value="",h.value=[]})},{default:u(()=>[..._[12]||(_[12]=[I(" Clear filters ",-1)])]),_:1})):w("",!0)])]),_:1})):(i(),P(ye,{key:0,icon:"i-lucide-flask-conical",text:"No test cases yet for this project."}))],64)):(i(),$("div",{key:3,class:N([{"opacity-60 pointer-events-none":e(ne)==="pending"},"transition-opacity"])},[e(b)?(i(),$(A,{key:0},[e(X).length<e(E)?(i(),P(Ee,{key:0,color:"warning",variant:"subtle",icon:"i-lucide-triangle-alert",class:"mb-3",title:`Showing the first ${e(X).length} of ${e(E)} cases — narrow the search or filters to see the rest.`},null,8,["title"])):w("",!0),d(Ve,{items:e(X),"has-filter":e(ie)},null,8,["items","has-filter"])],64)):(i(),$(A,{key:1},[f("div",ua,[d(Me,{data:e(X),columns:e(Le),ui:{base:"w-full table-fixed border-separate border-spacing-0 min-w-[56rem]",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0 [&>tr]:hover:bg-gray-50 dark:[&>tr]:hover:bg-gray-900/50",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"title-cell":u(({row:a})=>[f("div",da,[d(be,{to:`/test-cases/${a.original.id}`,class:"text-sm font-medium text-primary hover:underline truncate block",title:a.original.title},{default:u(()=>[I(x(a.original.title),1)]),_:2},1032,["to","title"]),f("div",ca,[d(e(Y),{name:"i-lucide-file-code",class:"size-3 shrink-0"}),d(he,{"file-path":a.original.filePath,"project-key":r.projectId,"project-name":r.projectName,class:"min-w-0"},null,8,["file-path","project-key","project-name"])])])]),"status-cell":u(({row:a})=>[d(xe,{color:("testCaseCategoryColor"in p?p.testCaseCategoryColor:e(pe))(a.original.status),variant:"subtle",size:"sm",class:"capitalize"},{default:u(()=>[I(x(("formatStatusLabel"in p?p.formatStatusLabel:e(ce))(a.original.status)),1)]),_:2},1032,["color"])]),"totalRuns-cell":u(({row:a})=>[f("span",pa,x(a.original.totalRuns),1)]),"passRate-cell":u(({row:a})=>[d(ke,{rate:a.original.passRate},null,8,["rate"])]),"results-cell":u(({row:a})=>[d(Ce,{passed:a.original.passedRuns,failed:a.original.failedRuns,skipped:a.original.skippedRuns,flaky:a.original.flakyRuns,"did-not-run":a.original.didNotRunRuns,total:a.original.totalRuns},null,8,["passed","failed","skipped","flaky","did-not-run","total"])]),"avgDuration-cell":u(({row:a})=>[a.original.avgDuration!=null?(i(),$("span",fa,x(("formatDuration"in p?p.formatDuration:e(fe))(a.original.avgDuration)),1)):(i(),$("span",ma,"—"))]),"lastRun-cell":u(({row:a})=>[f("span",{class:"text-sm text-muted",title:("prettyDateFormat"in p?p.prettyDateFormat:e(me))(a.original.lastRun)},x(a.original.lastRun!=null?("formatRelativeTime"in p?p.formatRelativeTime:e(ge))(a.original.lastRun):"—"),9,ga)]),"actions-cell":u(({row:a})=>[f("div",va,[d(O,{to:`/test-cases/${a.original.id}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:u(()=>[..._[13]||(_[13]=[I(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data","columns"])]),f("div",_a,[(i(!0),$(A,null,le(e(X),a=>(i(),$("div",{key:a.id,class:"rounded-lg border border-default p-3 space-y-2"},[f("div",ya,[d(be,{to:`/test-cases/${a.id}`,class:"text-sm font-medium text-primary hover:underline min-w-0 truncate",title:a.title},{default:u(()=>[I(x(a.title),1)]),_:2},1032,["to","title"]),d(xe,{color:("testCaseCategoryColor"in p?p.testCaseCategoryColor:e(pe))(a.status),variant:"subtle",size:"sm",class:"capitalize shrink-0"},{default:u(()=>[I(x(("formatStatusLabel"in p?p.formatStatusLabel:e(ce))(a.status)),1)]),_:2},1032,["color"])]),f("div",ba,[d(e(Y),{name:"i-lucide-file-code",class:"size-3 shrink-0"}),d(he,{"file-path":a.filePath,"project-key":r.projectId,"project-name":r.projectName,class:"min-w-0"},null,8,["file-path","project-key","project-name"])]),d(Ce,{passed:a.passedRuns,failed:a.failedRuns,skipped:a.skippedRuns,flaky:a.flakyRuns,"did-not-run":a.didNotRunRuns,total:a.totalRuns},null,8,["passed","failed","skipped","flaky","did-not-run","total"]),f("div",ha,[d(ke,{rate:a.passRate},null,8,["rate"]),f("span",xa,x(a.totalRuns)+" runs",1),a.avgDuration!=null?(i(),$("span",ka,x(("formatDuration"in p?p.formatDuration:e(fe))(a.avgDuration)),1)):w("",!0),f("span",{class:"text-xs text-muted",title:("prettyDateFormat"in p?p.prettyDateFormat:e(me))(a.lastRun)},x(a.lastRun!=null?("formatRelativeTime"in p?p.formatRelativeTime:e(ge))(a.lastRun):"—"),9,Ca)])]))),128))]),f("div",Pa,[f("div",Ra,[f("span",$a,"Showing "+x(e(Ne))+"–"+x(e(je))+" of "+x(e(E)),1),f("div",qa,[_[14]||(_[14]=f("span",{class:"text-sm text-muted"},"Rows per page",-1)),d(_e,{modelValue:e(R),"onUpdate:modelValue":_[8]||(_[8]=a=>ae(R)?R.value=a:null),items:L,size:"sm",class:"w-28","aria-label":"Rows per page"},null,8,["modelValue"])])]),e(E)>e(R)?(i(),P(Ae,{key:0,page:e(n),"onUpdate:page":_[9]||(_[9]=a=>ae(n)?n.value=a:null),total:e(E),"items-per-page":e(R),size:"sm"},null,8,["page","total","items-per-page"])):w("",!0)])],64))],2))]),_:1},8,["count"])}}}),Ka=Object.assign(za,{__name:"ProjectTestCasesTable"});export{Ka as _};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ci as u,b as n}from"./
|
|
1
|
+
import{ci as u,b as n}from"./DHltYerF.js";function d(c={}){const{copy:i,copied:r,isSupported:a}=u({copiedDuring:c.duration??2e3,legacy:!0}),e=n();async function s(t,o={}){if(t){try{await i(t)}catch{return}o.toast&&e.add({title:typeof o.toast=="string"?o.toast:"Copied to clipboard",icon:"i-lucide-check",color:"success",duration:2e3})}}return{copy:s,copied:r,isSupported:a}}export{d as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as se,B as V,C as be,al as ke,r as h,h as Q,am as Ce,J as qe,d as re,o as p,f as H,g as D,j as g,_ as le,m as k,i as l,q as T,l as _e,k as e,E as We,c as $,v as we,t as j,F as K,y as ie,p as Z,x as Ve,G as Je}from"./
|
|
1
|
+
import{b as se,B as V,C as be,al as ke,r as h,h as Q,am as Ce,J as qe,d as re,o as p,f as H,g as D,j as g,_ as le,m as k,i as l,q as T,l as _e,k as e,E as We,c as $,v as we,t as j,F as K,y as ie,p as Z,x as Ve,G as Je}from"./DHltYerF.js";import{_ as Ye}from"./DHXWp5yD.js";import{_ as Ge}from"./BUXSUkJ_.js";import{c as Xe,m as Ke,i as Qe,e as Ze,h as et,f as tt,g as st,j as nt}from"./BVf6Yx9V.js";import{u as ot}from"./By4YL7mx.js";import{_ as at}from"./BeFDVhpA.js";import{f as $e,w as it,k as rt}from"./BeKvLsja.js";import{_ as lt}from"./B2oUeBbA.js";import{u as ct}from"./hH1UFE3Z.js";const ut=globalThis.setInterval,ce=Symbol("cluster-diagnosis");function dt(v){const a=se(),u=h(""),d=h(""),x=h([]),y=h([]),I=Q(()=>!!d.value),O=h(null),R=h([]),U=h(0),P=h(0),M=h(null),f=h(null),r=h(!1),t=h(null),o=h(!1);let s=null,i=null,m=!0;function S(){const c={};return u.value.trim()&&(c.baseCommit=u.value.trim()),x.value.length&&(c.selectedCommitShas=x.value),c}async function C(){r.value=!0;try{const c=await $fetch(`/api/failure-clusters/${v}/context`,{query:{...S(),format:"json"}});O.value=c.text,R.value=c.sections,U.value=c.tokenEstimate,P.value=c.imageTokenEstimate??0,M.value=c.coverage,f.value=c.scmChanges??null}catch{O.value="(failed to load context)",R.value=[],U.value=0,P.value=0,M.value=null,f.value=null}finally{r.value=!1}}async function A(c){try{await $fetch(`/api/failure-clusters/${v}/base-commit`,{method:"PATCH",body:{commit:c||null}}),d.value=c}catch{}}function z(){s&&(clearInterval(s),s=null)}function w(){if(s)return;let c=0;s=ut(async()=>{c+=3e3,await W(),(!t.value||t.value.status!=="running"||c>=12e4)&&z()},3e3)}async function W(){try{const c=await $fetch(`/api/failure-clusters/${v}/diagnosis`);t.value=c.diagnosis}catch{}}async function J(c={}){o.value=!0;try{const E=c.force?`/api/failure-clusters/${v}/diagnose?force=true`:`/api/failure-clusters/${v}/diagnose`,F={};c.additionalContext&&(F.additionalContext=c.additionalContext),u.value.trim()&&(F.baseCommit=u.value.trim()),x.value.length&&(F.selectedCommitShas=x.value),c.images?.length&&(F.images=c.images),t.value=await $fetch(E,{method:"POST",body:Object.keys(F).length?F:void 0}),t.value?.status==="running"&&w()}catch(E){E?.statusCode===409?w():a.add({title:"Diagnosis failed",description:String(E?.message??E),color:"error"})}finally{o.value=!1}}return V(u,c=>{m||(i&&clearTimeout(i),i=setTimeout(()=>C(),900),c!==d.value&&A(c))}),V(x,()=>{m||C()},{deep:!0}),V(t,c=>{c?.status==="running"?w():z()}),be(async()=>{try{const c=await $fetch(`/api/failure-clusters/${v}/diagnosis`);t.value=c.diagnosis,c.manualBaseCommit&&(d.value=c.manualBaseCommit,u.value=c.manualBaseCommit);const E=c.diagnosis?.details;E?.selectedCommitShas&&Array.isArray(E.selectedCommitShas)&&(x.value=E.selectedCommitShas),E?.autoSelectedCommits&&Array.isArray(E.autoSelectedCommits)&&(y.value=E.autoSelectedCommits)}catch{}m=!1,C(),t.value?.status==="running"&&w()}),ke(()=>{z(),i&&clearTimeout(i)}),{clusterId:v,baseCommit:u,savedBaseCommit:d,selectedCommitShas:x,autoSelectedCommits:y,baseCommitIsPinned:I,contextText:O,contextSections:R,tokenEstimate:U,imageTokenEstimate:P,coverage:M,scmChanges:f,contextLoading:r,refreshContext:C,diagnosis:t,posting:o,runDiagnosis:J}}function ft(v){const a=dt(v);return qe(ce,a),a}function Os(){const v=Ce(ce);if(!v)throw new Error("useClusterDiagnosis() must be used under a page that called provideClusterDiagnosis()");return v}function pt(v){const a=Ce(ce,null);if(a)return a;if(v==null)throw new Error("useOrProvideClusterDiagnosis() requires a clusterId when used outside provideClusterDiagnosis()");return ft(v)}const mt={class:"w-56 p-1 space-y-0.5"},gt=re({__name:"DiagnosisExportMenu",props:{contextText:{},diagnosis:{},screenshots:{},clusterSignature:{},clusterUrl:{},clusterOccurrences:{},clusterErrorType:{},sampleError:{}},setup(v){const a=v,{copy:u}=ot(),{copyRich:d}=Xe(),x=h(!1);function y(){const t=[];return a.clusterErrorType&&t.push(a.clusterErrorType),a.clusterOccurrences&&t.push(`${a.clusterOccurrences} occurrence${a.clusterOccurrences===1?"":"s"}`),t.join(" · ")}function I(){const t=a.clusterSignature??"Failure cluster",o=y(),s=a.diagnosis?.status==="completed"&&a.diagnosis.summary?`AI diagnosis (${a.diagnosis.category??"unknown"}, ${a.diagnosis.confidence??"?"}): ${a.diagnosis.summary}`:null,i=[`🔍 Investigation: ${t}`,o||null,"",...a.sampleError?["Error:",Ke(a.sampleError),""]:[],...s?[s,""]:[],a.clusterUrl?`Cluster: ${a.clusterUrl}`:null].filter(C=>C!==null).join(`
|
|
2
2
|
`),m=C=>C.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),S=[`<p><strong>🔍 Investigation: <code>${m(t)}</code></strong></p>`,o?`<p><em>${m(o)}</em></p>`:"",a.sampleError?`<p><strong>Error:</strong></p><pre>${m(a.sampleError)}</pre>`:"",s?`<p><strong>AI diagnosis</strong> (${m(a.diagnosis?.category??"")}, ${m(a.diagnosis?.confidence??"")}):<br>${m(a.diagnosis.summary)}</p>`:"",a.clusterUrl?`<p>🔗 <a href="${a.clusterUrl}">View cluster</a></p>`:""].join("");d(i,S,{toast:"Investigation summary copied"}),x.value=!1}function O(){if(!a.contextText)return;const o=(a.screenshots?.length?`## Screenshots
|
|
3
3
|
|
|
4
4
|
${a.screenshots.map(s=>``).join(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as s,o as t,c as o,f as c,q as l,i as m,t as r,T as i,p as d,v as p}from"./
|
|
1
|
+
import{d as s,o as t,c as o,f as c,q as l,i as m,t as r,T as i,p as d,v as p}from"./DHltYerF.js";const _={class:"text-sm"},f=s({__name:"EmptyState",props:{text:{},icon:{},padded:{type:Boolean,default:!0}},setup(e){return(a,u)=>{const n=p;return t(),o("div",{class:d(["flex flex-col items-center justify-center gap-2 text-center text-gray-500",e.padded&&"py-8"])},[e.icon?(t(),c(n,{key:0,name:e.icon,class:"size-6 opacity-60"},null,8,["name"])):l("",!0),m("p",_,r(e.text),1),i(a.$slots,"default")],2)}}}),y=Object.assign(f,{__name:"EmptyState"});export{y as _};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b$ as t}from"./
|
|
1
|
+
import{b$ as t}from"./DHltYerF.js";import{h as a}from"./r3SBLxtE.js";const l=[{id:"account",label:"Account",icon:"i-lucide-user-round",to:"/settings/account",authOnly:!0,fields:[{id:"account.display-name",label:"Display name",help:"account.display-name"},{id:"account.email",label:"Email address",help:"account.email"},{id:"account.connected-accounts",label:"Connected accounts",help:"account.connected-accounts"},{id:"account.password",label:"Password",help:"account.password"},{id:"account.auth-toggle",label:"Authentication",help:"settings.auth-toggle",envOnly:!0}]},{id:"users",label:"Users",icon:"i-lucide-users",to:"/settings/users",roles:[t.ADMINISTRATOR],authOnly:!0,introHelp:"settings.users",fields:[{id:"users.list",label:"Users & roles",help:"settings.users"},{id:"users.api-keys",label:"API keys",help:"settings.api-keys"}]},{id:"notifications",label:"Notifications",icon:"i-lucide-bell",to:"/settings/notifications",fields:[{id:"notifications.smtp",label:"SMTP email delivery",help:"settings.smtp",envOnly:!0},{id:"notifications.test-email",label:"Send test email",help:"notifications.test-email"},{id:"notifications.channels",label:"Notification channels",help:"notifications.channels"},{id:"notifications.subscriptions",label:"My subscriptions",help:"notifications.subscriptions"}]},{id:"tags",label:"Tags",icon:"i-lucide-tags",to:"/settings/tags",roles:[t.ADMINISTRATOR],introHelp:"settings.tags",fields:[{id:"tags.list",label:"Tags",help:"settings.tags"}]},{id:"storage",label:"Storage",icon:"i-lucide-hard-drive",to:"/settings/storage",roles:[t.ADMINISTRATOR],fields:[{id:"storage.backend",label:"Storage backend",help:"settings.storage-backend",envOnly:!0},{id:"storage.stats",label:"Storage statistics",help:"settings.storage-stats"},{id:"storage.cleanup",label:"Cleanup old test runs",help:"settings.cleanup"}]},{id:"wasted-time",label:"Wasted time",icon:"i-lucide-hourglass",to:"/settings/wasted-time",roles:[t.ADMINISTRATOR],introHelp:"settings.wasted-time",fields:[{id:"wasted-time.patterns",label:"Wasted-time patterns",help:"settings.wasted-time"}]},{id:"timeout-hygiene",label:"Timeout hygiene",icon:"i-lucide-scissors",to:"/settings/timeout-hygiene",roles:[t.ADMINISTRATOR],introHelp:"settings.timeout-hygiene",fields:[{id:"timeout-hygiene.thresholds",label:"Detection thresholds",help:"settings.timeout-hygiene"}]},{id:"ai",label:"AI diagnosis",icon:"i-lucide-sparkles",to:"/settings/ai",roles:[t.ADMINISTRATOR],fields:[{id:"ai.diagnosis",label:"Diagnosis model",help:"settings.ai-provider"},{id:"ai.research",label:"Research model",help:"settings.ai-research"},{id:"ai.embedding",label:"Embedding model",help:"settings.embedding-model"},{id:"ai.auto-diagnose",label:"Auto-diagnose",help:"settings.auto-diagnose"},{id:"ai.context-limits",label:"Diagnosis context limits",help:"settings.ai-limits"},{id:"ai.instructions",label:"Global analysis instructions",help:"settings.ai-instructions"},{id:"ai.scm-token",label:"Repository access token",help:"project.scm-token"},{id:"ai.privacy",label:"Privacy notice",help:"settings.privacy"}]},{id:"about",label:"About",icon:"i-lucide-info",to:"/settings/about",fields:[]}];function o(e){return a(e.help)}function r(e){const i=new Set;for(const s of e.fields)for(const n of o(s))i.add(n);return[...i]}function g(e){const i=l.find(s=>s.id===e);if(!i)throw new Error(`Unknown settings page: ${e}`);return i}export{l as S,g,r as p};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as _,o as l,f as p,g as u,j as d,v as f,p as g,k as a,h as o}from"./
|
|
1
|
+
import{d as _,o as l,f as p,g as u,j as d,v as f,p as g,k as a,h as o}from"./DHltYerF.js";import{_ as v}from"./D6PUPmRC.js";import{g as x}from"./DHXWp5yD.js";const h=_({__name:"EnvManagedBadge",props:{envVars:{},size:{default:"sm"}},setup(r){const s=r,c=o(()=>{switch(s.size){case"xs":return"size-3";case"md":return"size-4";default:return"size-3.5"}}),i=o(()=>{if(!s.envVars?.length)return"Managed by environment variable";const e=s.envVars.map(n=>{const t=x(n).description;return t?`${n} — ${t}`:n});return e.length===1?`Set via ${e[0]}`:["Set via environment variables:",...e].join(`
|
|
2
2
|
`)});return(e,n)=>{const t=f,m=v;return l(),p(m,{text:a(i),ui:{content:"whitespace-pre-line max-w-sm"}},{default:u(()=>[d(t,{name:"i-lucide-lock",class:g(["text-gray-400",a(c)])},null,8,["class"])]),_:1},8,["text"])}}}),b=Object.assign(h,{__name:"EnvManagedBadge"});export{b as _};
|