@piwitests/server 0.24.0 → 0.25.0
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/{DbmGeOus.js → 5nOoVJzL.js} +1 -1
- package/.output/public/_nuxt/6DSY_93j.js +1 -0
- package/.output/public/_nuxt/7vRR5W2L.js +1 -0
- package/.output/public/_nuxt/{DM3bDZC6.js → 9Dtlg-K4.js} +1 -1
- package/.output/public/_nuxt/9Yziijlb.js +1 -0
- package/.output/public/_nuxt/{BakMHV79.js → B-onBCAB.js} +1 -1
- package/.output/public/_nuxt/B2bK5uNR.js +1 -0
- package/.output/public/_nuxt/{BkM2KXUo.js → B63B19Iv.js} +2 -2
- package/.output/public/_nuxt/{BFxvHlO9.js → B77w1Eib.js} +1 -1
- package/.output/public/_nuxt/{Drw8yQg6.js → BC5bqlfM.js} +1 -1
- package/.output/public/_nuxt/{CJ1rmnk4.js → BF5JDf9_.js} +1 -1
- package/.output/public/_nuxt/BFVrl1ss.js +1 -0
- package/.output/public/_nuxt/{CjtjQV60.js → BIHMeNW-.js} +1 -1
- package/.output/public/_nuxt/BKqOGcst.js +1 -0
- package/.output/public/_nuxt/{Bme1UkOl.js → BLqooxh5.js} +1 -1
- package/.output/public/_nuxt/{D0Kop4bS.js → BMfTUMYy.js} +1 -1
- package/.output/public/_nuxt/{V9p3z39z.js → BOrnSpTA.js} +1 -1
- package/.output/public/_nuxt/{DEvYVl9M.js → BPQNVV4M.js} +1 -1
- package/.output/public/_nuxt/{DuOH5jcQ.js → BSKLNgre.js} +1 -1
- package/.output/public/_nuxt/BTCWUyBX.js +1 -0
- package/.output/public/_nuxt/BUYmGTVP.js +1 -0
- package/.output/public/_nuxt/{CgkXEZMo.js → BWddBCom.js} +1 -1
- package/.output/public/_nuxt/{B33YjaHr.js → BYQ9lXQb.js} +1 -1
- package/.output/public/_nuxt/BYWQ47QQ.js +5 -0
- package/.output/public/_nuxt/{BvAfKk6C.js → BYnqoVCE.js} +1 -1
- package/.output/public/_nuxt/{-COcylA_.js → BaU2hm4B.js} +1 -1
- package/.output/public/_nuxt/{6Z_ZwH8I.js → BbXvpkBp.js} +1 -1
- package/.output/public/_nuxt/Bb_925DD.js +1 -0
- package/.output/public/_nuxt/BcHU1KNK.js +1 -0
- package/.output/public/_nuxt/BdUGUwvE.js +1 -0
- package/.output/public/_nuxt/{DPZBpFOX.js → BeQq85yJ.js} +2 -2
- package/.output/public/_nuxt/Bg8yOdSf.js +1 -0
- package/.output/public/_nuxt/BhzfJaPC.js +1 -0
- package/.output/public/_nuxt/{D1vqYZsL.js → Bkb-0yS0.js} +4 -4
- package/.output/public/_nuxt/BmweLu9g.js +2 -0
- package/.output/public/_nuxt/Boyv6hLW.js +1 -0
- package/.output/public/_nuxt/{BtSGUY-7.js → Bq4xEWLF.js} +4 -4
- package/.output/public/_nuxt/{CMuzkARi.js → BraJd4EA.js} +1 -1
- package/.output/public/_nuxt/BvXrhZ8k.js +1 -0
- package/.output/public/_nuxt/{B8H4XydJ.js → Bw4oIhct.js} +1 -1
- package/.output/public/_nuxt/BxSrScjV.js +1 -0
- package/.output/public/_nuxt/Byqt8JHG.js +1 -0
- package/.output/public/_nuxt/{C5TrTuWv.js → BzBaMPgu.js} +3 -3
- package/.output/public/_nuxt/{BKrWWV14.js → C1-8_6cB.js} +1 -1
- package/.output/public/_nuxt/{CjBktNrC.js → C7SG50jD.js} +1 -1
- package/.output/public/_nuxt/{BkxRbXIj.js → C8WgBDU1.js} +1 -1
- package/.output/public/_nuxt/C8uZoJVq.js +1 -0
- package/.output/public/_nuxt/{Bg93Rnts.js → CBQXv4bU.js} +2 -2
- package/.output/public/_nuxt/CDEmotIt.js +1 -0
- package/.output/public/_nuxt/CIBOv3Ge.js +2 -0
- package/.output/public/_nuxt/CO7j4p5r.js +1 -0
- package/.output/public/_nuxt/COMhp7lz.js +1 -0
- package/.output/public/_nuxt/{CsV7pmcT.js → CPiLUjjx.js} +1 -1
- package/.output/public/_nuxt/{D_y2VS8k.js → CTYlay1H.js} +1 -1
- package/.output/public/_nuxt/{VACXezo0.js → CVEk4D8I.js} +1 -1
- package/.output/public/_nuxt/{P5uOaRUZ.js → CbuK1HIv.js} +1 -1
- package/.output/public/_nuxt/{opyDpgSw.js → CdLqOMvN.js} +1 -1
- package/.output/public/_nuxt/CdM2qNYM.js +2 -0
- package/.output/public/_nuxt/Ch8sGLqE.js +1 -0
- package/.output/public/_nuxt/CkdznmkX.js +1 -0
- package/.output/public/_nuxt/{B1LUinhp.js → Cmuwgbf4.js} +1 -1
- package/.output/public/_nuxt/{Ce5_Tq63.js → CnRNwiuE.js} +1 -1
- package/.output/public/_nuxt/{Bp3FRuEm.js → CnsaoeEq.js} +1 -1
- package/.output/public/_nuxt/{BUnwEAjq.js → Cp0V2FeW.js} +1 -1
- package/.output/public/_nuxt/Cvw4EFTy.js +17 -0
- package/.output/public/_nuxt/CwDej2Lz.js +1 -0
- package/.output/public/_nuxt/D-wlhH6J.js +1 -0
- package/.output/public/_nuxt/D5Mhpp98.js +1 -0
- package/.output/public/_nuxt/{CDTeSrLO.js → D8ixf-ZR.js} +5 -5
- package/.output/public/_nuxt/{DMWfVJCj.js → DBvdRbTA.js} +2 -2
- package/.output/public/_nuxt/DDho3MJD.js +1 -0
- package/.output/public/_nuxt/DEGHW4pO.js +1 -0
- package/.output/public/_nuxt/{BoNKdx5o.js → DHSYRMJp.js} +1 -1
- package/.output/public/_nuxt/DH_LEqhd.js +2 -0
- package/.output/public/_nuxt/{BVLqydCr.js → DIqik40e.js} +1 -1
- package/.output/public/_nuxt/DLwuL-qR.js +1 -0
- package/.output/public/_nuxt/{CIpF9l75.js → DPDFGVb_.js} +2 -2
- package/.output/public/_nuxt/DRNHuVn4.js +2 -0
- package/.output/public/_nuxt/{DcR0Mmdl.js → DUtYU4Sb.js} +1 -1
- package/.output/public/_nuxt/{opwuUqHG.js → DWl73MJR.js} +1 -1
- package/.output/public/_nuxt/{BCGljaM0.js → DWz_bHNP.js} +1 -1
- package/.output/public/_nuxt/{DGq4A2Pd.js → D_SCB-z2.js} +1 -1
- package/.output/public/_nuxt/{DMAiMrNr.js → D_j436ND.js} +1 -1
- package/.output/public/_nuxt/DamzjN7l.js +1 -0
- package/.output/public/_nuxt/Db5xe__T.js +1 -0
- package/.output/public/_nuxt/{CpcrljrH.js → DcUBmKKE.js} +1 -1
- package/.output/public/_nuxt/DiP18sFE.js +1 -0
- package/.output/public/_nuxt/Die1200X.js +1 -0
- package/.output/public/_nuxt/{BN1zZw5b.js → DihSeDlY.js} +4 -4
- package/.output/public/_nuxt/{DzZpIs4W.js → DkGXOZRW.js} +1 -1
- package/.output/public/_nuxt/{C7fq_rHE.js → DnOtRv65.js} +1 -1
- package/.output/public/_nuxt/DnV-BkUA.js +1 -0
- package/.output/public/_nuxt/DpeRrg68.js +1 -0
- package/.output/public/_nuxt/Dq6_-84R.js +1 -0
- package/.output/public/_nuxt/DqKFKS1b.js +1 -0
- package/.output/public/_nuxt/DrbO0dl5.js +6 -0
- package/.output/public/_nuxt/{Qo6oszaF.js → Ds8_6Fzl.js} +1 -1
- package/.output/public/_nuxt/{BtbpLWDs.js → DvewDI9t.js} +1 -1
- package/.output/public/_nuxt/E26Y1NWH.js +1 -0
- package/.output/public/_nuxt/Hp-_W7z4.js +1 -0
- package/.output/public/_nuxt/OanUGF_v.js +1 -0
- package/.output/public/_nuxt/{CX_G-FHC.js → RSS6R9Te.js} +13 -13
- package/.output/public/_nuxt/{BmzxRbcg.js → VqLetC2g.js} +1 -1
- package/.output/public/_nuxt/WCZdf9Ln.js +1 -0
- package/.output/public/_nuxt/{DF6Mes5z.js → Yl6iqHwK.js} +4 -4
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/03f2d81b-8c58-4ea8-9a9d-7553c8ca4af6.json +1 -0
- package/.output/public/_nuxt/{entry.DzPSf_u5.css → entry.DVKh2Fd6.css} +1 -1
- package/.output/public/_nuxt/iUf7K_JR.js +1 -0
- package/.output/public/_nuxt/{C8Paf_V1.js → kDEwM7SQ.js} +1 -1
- package/.output/public/_nuxt/{Bd8B-yeR.js → knaDbxMJ.js} +1 -1
- package/.output/public/_nuxt/lnpLc047.js +1 -0
- package/.output/public/_nuxt/{CD8ZzAFC.js → mhvG7mu8.js} +1 -1
- package/.output/public/_nuxt/{BgABj4Ty.js → qUaN2ZW8.js} +4 -4
- package/.output/public/_nuxt/qeqzb80l.js +1 -0
- package/.output/public/_nuxt/{Fsw2W4TA.js → uj92NYTx.js} +2 -2
- package/.output/public/_nuxt/vOZZ2cLi.js +1 -0
- package/.output/public/_nuxt/{CGHV0Y2d.js → zAFiz2Mg.js} +1 -1
- package/.output/public/demo/seed.version.json +2 -2
- package/.output/server/chunks/build/{Alert-He-UxEt6.mjs → Alert-BhTWQzM5.mjs} +2 -2
- package/.output/server/chunks/build/Alert-BhTWQzM5.mjs.map +1 -0
- package/.output/server/chunks/build/{Breadcrumb-DEP2dVCZ.mjs → Breadcrumb-BJnPB2AW.mjs} +3 -3
- package/.output/server/chunks/build/Breadcrumb-BJnPB2AW.mjs.map +1 -0
- package/.output/server/chunks/build/{BreadcrumbNav-y6nMDYcR.mjs → BreadcrumbNav-C6Cun6tF.mjs} +3 -3
- package/.output/server/chunks/build/BreadcrumbNav-C6Cun6tF.mjs.map +1 -0
- package/.output/server/chunks/build/{BrowserBadge-DIASU8Gf.mjs → BrowserBadge-T1KRMIXA.mjs} +4 -4
- package/.output/server/chunks/build/BrowserBadge-T1KRMIXA.mjs.map +1 -0
- package/.output/server/chunks/build/{ChartCard-ZTsCvItQ.mjs → ChartCard-D_asI_WF.mjs} +2 -2
- package/.output/server/chunks/build/ChartCard-D_asI_WF.mjs.map +1 -0
- package/.output/server/chunks/build/{ChartMarkerTooltip-u_1DUHh-.mjs → ChartMarkerTooltip-DscESDg7.mjs} +3 -3
- package/.output/server/chunks/build/ChartMarkerTooltip-DscESDg7.mjs.map +1 -0
- package/.output/server/chunks/build/{Checkbox-BisdHf8n.mjs → Checkbox-Y9ZiIRkJ.mjs} +6 -6
- package/.output/server/chunks/build/Checkbox-Y9ZiIRkJ.mjs.map +1 -0
- package/.output/server/chunks/build/{CodeBlock-B8BNtZAe.mjs → CodeBlock-Bnn_ps9O.mjs} +4 -4
- package/.output/server/chunks/build/CodeBlock-Bnn_ps9O.mjs.map +1 -0
- package/.output/server/chunks/build/{DashboardNavbar-D7-3zBUU.mjs → DashboardNavbar-D37dPEtR.mjs} +3 -3
- package/.output/server/chunks/build/DashboardNavbar-D37dPEtR.mjs.map +1 -0
- package/.output/server/chunks/build/{DashboardSidebarToggle-C3HdHvlE.mjs → DashboardSidebarToggle-DzwsZHVx.mjs} +2 -2
- package/.output/server/chunks/build/DashboardSidebarToggle-DzwsZHVx.mjs.map +1 -0
- package/.output/server/chunks/build/{DataLocationCard-CC2-lHiP.mjs → DataLocationCard-CUXgZQEs.mjs} +4 -4
- package/.output/server/chunks/build/DataLocationCard-CUXgZQEs.mjs.map +1 -0
- package/.output/server/chunks/build/{DesktopRunLocallyButton-iNzrDsEs.mjs → DesktopRunLocallyButton-BCmQklj6.mjs} +15 -76
- package/.output/server/chunks/build/DesktopRunLocallyButton-BCmQklj6.mjs.map +1 -0
- package/.output/server/chunks/build/{DiagnosisPanel-BVb2LgHu.mjs → DiagnosisPanel-haHS2azn.mjs} +7 -7
- package/.output/server/chunks/build/DiagnosisPanel-haHS2azn.mjs.map +1 -0
- package/.output/server/chunks/build/{DiagnosisResult-xVgZlfKK.mjs → DiagnosisResult-DqTIOelM.mjs} +10 -10
- package/.output/server/chunks/build/DiagnosisResult-DqTIOelM.mjs.map +1 -0
- package/.output/server/chunks/build/{DurationValue-UX9uajQJ.mjs → DurationValue-D6fQEi5S.mjs} +2 -2
- package/.output/server/chunks/build/DurationValue-D6fQEi5S.mjs.map +1 -0
- package/.output/server/chunks/build/{EmptyState-DC2q_7TD.mjs → EmptyState-C-mCzGhO.mjs} +2 -2
- package/.output/server/chunks/build/EmptyState-C-mCzGhO.mjs.map +1 -0
- package/.output/server/chunks/build/{EntityLinks-Dzn73fbq.mjs → EntityLinks-CRJQM9Vy.mjs} +3 -3
- package/.output/server/chunks/build/EntityLinks-CRJQM9Vy.mjs.map +1 -0
- package/.output/server/chunks/build/{EnvManagedBadge-C-agmABK.mjs → EnvManagedBadge-hyelwXrw.mjs} +4 -4
- package/.output/server/chunks/build/EnvManagedBadge-hyelwXrw.mjs.map +1 -0
- package/.output/server/chunks/build/{ErrorState-CktYyeEZ.mjs → ErrorState-9UPssp7w.mjs} +2 -2
- package/.output/server/chunks/build/ErrorState-9UPssp7w.mjs.map +1 -0
- package/.output/server/chunks/build/{FeatureUnavailable-DHFkwI7t.mjs → FeatureUnavailable-CDw3__eq.mjs} +3 -3
- package/.output/server/chunks/build/FeatureUnavailable-CDw3__eq.mjs.map +1 -0
- package/.output/server/chunks/build/{FormField-GYHKiSI6.mjs → FormField-8vSc-3mb.mjs} +2 -2
- package/.output/server/chunks/build/FormField-8vSc-3mb.mjs.map +1 -0
- package/.output/server/chunks/build/{GetStartedWizard-BpcGYsm2.mjs → GetStartedWizard-Dp_tjhry.mjs} +4 -4
- package/.output/server/chunks/build/GetStartedWizard-Dp_tjhry.mjs.map +1 -0
- package/.output/server/chunks/build/{HelpHint-plioHKA0.mjs → HelpHint-Bfyo3ar6.mjs} +4 -4
- package/.output/server/chunks/build/HelpHint-Bfyo3ar6.mjs.map +1 -0
- package/.output/server/chunks/build/{LoadingState-CwpfmI0W.mjs → LoadingState-CxfFwac9.mjs} +2 -2
- package/.output/server/chunks/build/LoadingState-CxfFwac9.mjs.map +1 -0
- package/.output/server/chunks/build/{MarkerBadge-Biz5--h2.mjs → MarkerBadge-DmubzeuF.mjs} +2 -2
- package/.output/server/chunks/build/MarkerBadge-DmubzeuF.mjs.map +1 -0
- package/.output/server/chunks/build/{MetaStripGroup-A0a72vt5.mjs → MetaStripGroup-C-cNBfC9.mjs} +6 -6
- package/.output/server/chunks/build/MetaStripGroup-C-cNBfC9.mjs.map +1 -0
- package/.output/server/chunks/build/{Modal-hKLvVFNp.mjs → Modal-DcNzjvnm.mjs} +2 -2
- package/.output/server/chunks/build/Modal-DcNzjvnm.mjs.map +1 -0
- package/.output/server/chunks/build/{NavbarActions-_YjrSUat.mjs → NavbarActions-VCHW0u67.mjs} +2 -2
- package/.output/server/chunks/build/NavbarActions-VCHW0u67.mjs.map +1 -0
- package/.output/server/chunks/build/{NavigationMenu-RfBOyS32.mjs → NavigationMenu-DG6V0R9Y.mjs} +4 -4
- package/.output/server/chunks/build/NavigationMenu-DG6V0R9Y.mjs.map +1 -0
- package/.output/server/chunks/build/{OpenInIdeLink-Jp6SzEtD.mjs → OpenInIdeLink-CLj2cTkc.mjs} +5 -5
- package/.output/server/chunks/build/{OpenInIdeLink-Jp6SzEtD.mjs.map → OpenInIdeLink-CLj2cTkc.mjs.map} +1 -1
- package/.output/server/chunks/build/{ProjectTestCasesTable-DxOTfhi4.mjs → ProjectTestCasesTable-BNd5Fn_G.mjs} +15 -15
- package/.output/server/chunks/build/{ProjectTestCasesTable-DxOTfhi4.mjs.map → ProjectTestCasesTable-BNd5Fn_G.mjs.map} +1 -1
- package/.output/server/chunks/build/{RovingFocusItem-BOSx1Z9Z.mjs → RovingFocusItem-DkZadRuK.mjs} +2 -2
- package/.output/server/chunks/build/RovingFocusItem-DkZadRuK.mjs.map +1 -0
- package/.output/server/chunks/build/{RunReports-nuLb-Nm3.mjs → RunReports-CnyGcU8K.mjs} +3 -3
- package/.output/server/chunks/build/RunReports-CnyGcU8K.mjs.map +1 -0
- package/.output/server/chunks/build/{RunStatusBadge-CvWmcFYM.mjs → RunStatusBadge-DTqX18X-.mjs} +3 -3
- package/.output/server/chunks/build/RunStatusBadge-DTqX18X-.mjs.map +1 -0
- package/.output/server/chunks/build/{SectionCard-DHAFvJxm.mjs → SectionCard-taTpPtua.mjs} +3 -3
- package/.output/server/chunks/build/SectionCard-taTpPtua.mjs.map +1 -0
- package/.output/server/chunks/build/{Select-CEyw7HGK.mjs → Select-BChKOOsc.mjs} +3 -3
- package/.output/server/chunks/build/Select-BChKOOsc.mjs.map +1 -0
- package/.output/server/chunks/build/{SelectMenu-C02Hs2_F.mjs → SelectMenu-DLkMyBsW.mjs} +4 -4
- package/.output/server/chunks/build/{SelectMenu-C02Hs2_F.mjs.map → SelectMenu-DLkMyBsW.mjs.map} +1 -1
- package/.output/server/chunks/build/{Separator-lrN70ODV.mjs → Separator-Dn-4PN3P.mjs} +2 -2
- package/.output/server/chunks/build/Separator-Dn-4PN3P.mjs.map +1 -0
- package/.output/server/chunks/build/{SettingsField-tRmytcEJ.mjs → SettingsField-BLO1C7uY.mjs} +6 -6
- package/.output/server/chunks/build/SettingsField-BLO1C7uY.mjs.map +1 -0
- package/.output/server/chunks/build/{Slideover-D6cRIqch.mjs → Slideover-BiDJaQrt.mjs} +3 -3
- package/.output/server/chunks/build/Slideover-BiDJaQrt.mjs.map +1 -0
- package/.output/server/chunks/build/{Switch-R2n82ncQ.mjs → Switch-Ca3fYrSH.mjs} +4 -4
- package/.output/server/chunks/build/Switch-Ca3fYrSH.mjs.map +1 -0
- package/.output/server/chunks/build/{Table-qZdnm9t2.mjs → Table-DQb34a0A.mjs} +2 -2
- package/.output/server/chunks/build/Table-DQb34a0A.mjs.map +1 -0
- package/.output/server/chunks/build/{Tabs-BDP7MWl4.mjs → Tabs-_ALhm_oG.mjs} +3 -3
- package/.output/server/chunks/build/Tabs-_ALhm_oG.mjs.map +1 -0
- package/.output/server/chunks/build/{TestCaseHistoryChart-CKDXQ2GI.mjs → TestCaseHistoryChart-D-TEUsZ8.mjs} +3 -3
- package/.output/server/chunks/build/TestCaseHistoryChart-D-TEUsZ8.mjs.map +1 -0
- package/.output/server/chunks/build/{TestMetaBadges-BlyKmfeP.mjs → TestMetaBadges-G2dAHnT-.mjs} +2 -2
- package/.output/server/chunks/build/TestMetaBadges-G2dAHnT-.mjs.map +1 -0
- package/.output/server/chunks/build/{TestStatusBar-CvsmKJ4D.mjs → TestStatusBar-CseETAdn.mjs} +2 -2
- package/.output/server/chunks/build/TestStatusBar-CseETAdn.mjs.map +1 -0
- package/.output/server/chunks/build/{Textarea-DpmpM-lN.mjs → Textarea-CXOoRq7y.mjs} +2 -2
- package/.output/server/chunks/build/Textarea-CXOoRq7y.mjs.map +1 -0
- package/.output/server/chunks/build/{Tooltip-BI3WQErw.mjs → Tooltip-trltUr5c.mjs} +2 -2
- package/.output/server/chunks/build/Tooltip-trltUr5c.mjs.map +1 -0
- package/.output/server/chunks/build/{VisuallyHiddenInput-D4E5aJCQ.mjs → VisuallyHiddenInput-CGURvg3N.mjs} +2 -2
- package/.output/server/chunks/build/VisuallyHiddenInput-CGURvg3N.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-w7YCSiiy.mjs → _id_-B-G4eG5U.mjs} +40 -40
- package/.output/server/chunks/build/{_id_-w7YCSiiy.mjs.map → _id_-B-G4eG5U.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-T965GKYC.mjs → _id_-Cnzg8n21.mjs} +41 -38
- package/.output/server/chunks/build/_id_-Cnzg8n21.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-wiULjAVc.mjs → _id_-Dp_d6gT7.mjs} +62 -54
- package/.output/server/chunks/build/{_id_-wiULjAVc.mjs.map → _id_-Dp_d6gT7.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-26komi8G.mjs → _id_-t2AWaYuK.mjs} +46 -46
- package/.output/server/chunks/build/{_id_-26komi8G.mjs.map → _id_-t2AWaYuK.mjs.map} +1 -1
- package/.output/server/chunks/build/{about-B3V_OEiu.mjs → about-BFsHkJwE.mjs} +8 -8
- package/.output/server/chunks/build/about-BFsHkJwE.mjs.map +1 -0
- package/.output/server/chunks/build/{account-DpBdYE46.mjs → account-CZAq8kVg.mjs} +8 -8
- package/.output/server/chunks/build/account-CZAq8kVg.mjs.map +1 -0
- package/.output/server/chunks/build/{ai-DYhpzbqp.mjs → ai-BGP3GcCR.mjs} +20 -20
- package/.output/server/chunks/build/{ai-DYhpzbqp.mjs.map → ai-BGP3GcCR.mjs.map} +1 -1
- package/.output/server/chunks/build/{analytics-CZJEU0an.mjs → analytics-CXl5OWV-.mjs} +25 -25
- package/.output/server/chunks/build/{analytics-CZJEU0an.mjs.map → analytics-CXl5OWV-.mjs.map} +1 -1
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/{default-CQa_bmAf.mjs → default-4ixAePum.mjs} +208 -76
- package/.output/server/chunks/build/default-4ixAePum.mjs.map +1 -0
- package/.output/server/chunks/build/{docs-C8bndVXg.mjs → docs-Cgsd01H9.mjs} +16 -16
- package/.output/server/chunks/build/{docs-C8bndVXg.mjs.map → docs-Cgsd01H9.mjs.map} +1 -1
- package/.output/server/chunks/build/{edit-BdfF9er2.mjs → edit-BEQ-ozj9.mjs} +436 -40
- package/.output/server/chunks/build/edit-BEQ-ozj9.mjs.map +1 -0
- package/.output/server/chunks/build/{fetch-tkz5_OA-.mjs → fetch-B5TVXZ1s.mjs} +2 -2
- package/.output/server/chunks/build/fetch-B5TVXZ1s.mjs.map +1 -0
- package/.output/server/chunks/build/{forgot-password-swZRcvXE.mjs → forgot-password-mqE1mpDI.mjs} +4 -4
- package/.output/server/chunks/build/forgot-password-mqE1mpDI.mjs.map +1 -0
- package/.output/server/chunks/build/{help-content-C876a9WD.mjs → help-content-Bc99BajS.mjs} +6 -1
- package/.output/server/chunks/build/help-content-Bc99BajS.mjs.map +1 -0
- package/.output/server/chunks/build/{import-B27Sv7h5.mjs → import-DqDDTcSc.mjs} +14 -14
- package/.output/server/chunks/build/import-DqDDTcSc.mjs.map +1 -0
- package/.output/server/chunks/build/{index-ID913tUa.mjs → index-Bpdj6TXV.mjs} +5 -5
- package/.output/server/chunks/build/index-Bpdj6TXV.mjs.map +1 -0
- package/.output/server/chunks/build/{index-Dq6nk6OB.mjs → index-DBFsIsjA.mjs} +180 -188
- package/.output/server/chunks/build/{index-Dq6nk6OB.mjs.map → index-DBFsIsjA.mjs.map} +1 -1
- package/.output/server/chunks/build/{index-C7m32bRI.mjs → index-DSufXCZq.mjs} +22 -18
- package/.output/server/chunks/build/index-DSufXCZq.mjs.map +1 -0
- package/.output/server/chunks/build/{index-BdZmxLtC.mjs → index-WXE60AXk.mjs} +24 -24
- package/.output/server/chunks/build/{index-BdZmxLtC.mjs.map → index-WXE60AXk.mjs.map} +1 -1
- package/.output/server/chunks/build/{index-ByWTzqF6.mjs → index-okKjrRhL.mjs} +15 -4
- package/.output/server/chunks/build/index-okKjrRhL.mjs.map +1 -0
- package/.output/server/chunks/build/{isValueEqualOrExist-D4lZ8uRY.mjs → isValueEqualOrExist-C-9DzL4K.mjs} +2 -2
- package/.output/server/chunks/build/isValueEqualOrExist-C-9DzL4K.mjs.map +1 -0
- package/.output/server/chunks/build/{login-hxCF06JT.mjs → login-eQ88UoBW.mjs} +6 -6
- package/.output/server/chunks/build/login-eQ88UoBW.mjs.map +1 -0
- package/.output/server/chunks/build/{mcp-BVW1llyW.mjs → mcp-frcSP2Zg.mjs} +13 -13
- package/.output/server/chunks/build/mcp-frcSP2Zg.mjs.map +1 -0
- package/.output/server/chunks/build/{notifications-Dn-evqXM.mjs → notifications-DAtRd5V6.mjs} +14 -14
- package/.output/server/chunks/build/notifications-DAtRd5V6.mjs.map +1 -0
- package/.output/server/chunks/build/{performance-CV8qm94u.mjs → performance-BcQzGXE7.mjs} +13 -13
- package/.output/server/chunks/build/performance-BcQzGXE7.mjs.map +1 -0
- package/.output/server/chunks/build/{pr-feedback-gKDz8LyA.mjs → pr-feedback-BHtgvegy.mjs} +11 -11
- package/.output/server/chunks/build/pr-feedback-BHtgvegy.mjs.map +1 -0
- package/.output/server/chunks/build/{reset-password-DtEISa1I.mjs → reset-password-DMHrp14-.mjs} +4 -4
- package/.output/server/chunks/build/reset-password-DMHrp14-.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +32 -32
- package/.output/server/chunks/build/{settings-BJDnuLpc.mjs → settings-Bo5OETop.mjs} +11 -11
- package/.output/server/chunks/build/settings-Bo5OETop.mjs.map +1 -0
- package/.output/server/chunks/build/{settings-metadata-DnAK4Rzg.mjs → settings-metadata-BHbsWQ2g.mjs} +2 -2
- package/.output/server/chunks/build/settings-metadata-BHbsWQ2g.mjs.map +1 -0
- package/.output/server/chunks/build/{setup-BO9tXa_G.mjs → setup-DAXcxuNY.mjs} +18 -18
- package/.output/server/chunks/build/{setup-BO9tXa_G.mjs.map → setup-DAXcxuNY.mjs.map} +1 -1
- package/.output/server/chunks/build/{storage-zN92cA9q.mjs → storage-BPK0fVwx.mjs} +12 -12
- package/.output/server/chunks/build/storage-BPK0fVwx.mjs.map +1 -0
- package/.output/server/chunks/build/{tags-CJFnoyQc.mjs → tags-CoxErA5m.mjs} +8 -8
- package/.output/server/chunks/build/tags-CoxErA5m.mjs.map +1 -0
- package/.output/server/chunks/build/{test-cases-0Q6rT73d.mjs → test-cases-D8rn-0le.mjs} +27 -27
- package/.output/server/chunks/build/test-cases-D8rn-0le.mjs.map +1 -0
- package/.output/server/chunks/build/{test-functions-DVRJgiWo.mjs → test-functions-pWs9mhbJ.mjs} +12 -12
- package/.output/server/chunks/build/test-functions-pWs9mhbJ.mjs.map +1 -0
- package/.output/server/chunks/build/{useCopyRich-BM9GTjJi.mjs → useCopyRich-BqVfhnoH.mjs} +27 -16
- package/.output/server/chunks/build/{useCopyRich-BM9GTjJi.mjs.map → useCopyRich-BqVfhnoH.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDesktopDownload-Dyf0fR47.mjs → useDesktopDownload-l80DQJ9e.mjs} +2 -2
- package/.output/server/chunks/build/useDesktopDownload-l80DQJ9e.mjs.map +1 -0
- package/.output/server/chunks/build/{useDesktopLocalRuns-k7Gw3Fv3.mjs → useDesktopLocalRuns-Dil3YzyU.mjs} +68 -6
- package/.output/server/chunks/build/useDesktopLocalRuns-Dil3YzyU.mjs.map +1 -0
- package/.output/server/chunks/build/{useDesktopProjectLink-WwLte59P.mjs → useDesktopProjectLink-BnIONB--.mjs} +21 -4
- package/.output/server/chunks/build/useDesktopProjectLink-BnIONB--.mjs.map +1 -0
- package/.output/server/chunks/build/{useFormControl-8skMOTIf.mjs → useFormControl-CXKztoWk.mjs} +2 -2
- package/.output/server/chunks/build/useFormControl-CXKztoWk.mjs.map +1 -0
- package/.output/server/chunks/build/{useOpenInIde-D74FmDNg.mjs → useOpenInIde-CbbYW3pd.mjs} +2 -2
- package/.output/server/chunks/build/useOpenInIde-CbbYW3pd.mjs.map +1 -0
- package/.output/server/chunks/build/{useSettingsNav-BLTHducV.mjs → useSettingsNav-C6NpD4Ab.mjs} +2 -2
- package/.output/server/chunks/build/useSettingsNav-C6NpD4Ab.mjs.map +1 -0
- package/.output/server/chunks/build/{users-C9bjOBde.mjs → users-C2MuCf5G.mjs} +9 -9
- package/.output/server/chunks/build/users-C2MuCf5G.mjs.map +1 -0
- package/.output/server/chunks/nitro/nitro.mjs +677 -670
- package/.output/server/package.json +1 -1
- package/package.json +1 -1
- package/.output/public/_nuxt/03FA4-rI.js +0 -1
- package/.output/public/_nuxt/5a7jHE9s.js +0 -1
- package/.output/public/_nuxt/7ZHq6PCI.js +0 -1
- package/.output/public/_nuxt/98sAB6Gu.js +0 -1
- package/.output/public/_nuxt/B--J7VNt.js +0 -1
- package/.output/public/_nuxt/B69RP95P.js +0 -1
- package/.output/public/_nuxt/B8Xm4_S_.js +0 -1
- package/.output/public/_nuxt/BBhrClA9.js +0 -1
- package/.output/public/_nuxt/BPXqL9vK.js +0 -1
- package/.output/public/_nuxt/BWMSVSNM.js +0 -1
- package/.output/public/_nuxt/B_r0xHVS.js +0 -1
- package/.output/public/_nuxt/BevElZaK.js +0 -1
- package/.output/public/_nuxt/BfA6lfg4.js +0 -1
- package/.output/public/_nuxt/BjaRappk.js +0 -1
- package/.output/public/_nuxt/Bn0jaRxI.js +0 -1
- package/.output/public/_nuxt/BrUBOQ0y.js +0 -1
- package/.output/public/_nuxt/BwEN1fJ1.js +0 -1
- package/.output/public/_nuxt/C-XjxjG5.js +0 -1
- package/.output/public/_nuxt/C3W_wyr9.js +0 -1
- package/.output/public/_nuxt/C7D5Wl7T.js +0 -1
- package/.output/public/_nuxt/COuZu9FO.js +0 -2
- package/.output/public/_nuxt/CX5Q0dZ8.js +0 -1
- package/.output/public/_nuxt/Cf4MFOuf.js +0 -1
- package/.output/public/_nuxt/Cq33x7yV.js +0 -1
- package/.output/public/_nuxt/Cu2Q4iPh.js +0 -1
- package/.output/public/_nuxt/CyLcEDg2.js +0 -2
- package/.output/public/_nuxt/D1Y43xM1.js +0 -2
- package/.output/public/_nuxt/D2rZosKf.js +0 -6
- package/.output/public/_nuxt/D7jpwkRG.js +0 -5
- package/.output/public/_nuxt/D8NAb7VE.js +0 -1
- package/.output/public/_nuxt/D8vguZKg.js +0 -17
- package/.output/public/_nuxt/DH5H1DJh.js +0 -1
- package/.output/public/_nuxt/DL8knjzi.js +0 -1
- package/.output/public/_nuxt/DMsm-RGQ.js +0 -1
- package/.output/public/_nuxt/DMtrFQqi.js +0 -2
- package/.output/public/_nuxt/DVEGfqtt.js +0 -2
- package/.output/public/_nuxt/DaNC-xl1.js +0 -1
- package/.output/public/_nuxt/DcLbz6DV.js +0 -1
- package/.output/public/_nuxt/DhYznn-U.js +0 -1
- package/.output/public/_nuxt/DhuRRlmK.js +0 -1
- package/.output/public/_nuxt/DuO5wfAC.js +0 -1
- package/.output/public/_nuxt/DvEsAuE9.js +0 -1
- package/.output/public/_nuxt/Dz6g_QJT.js +0 -1
- package/.output/public/_nuxt/DzzNS-K1.js +0 -1
- package/.output/public/_nuxt/LwoTUb-r.js +0 -1
- package/.output/public/_nuxt/OfPjZaky.js +0 -1
- package/.output/public/_nuxt/T5UuMUxA.js +0 -1
- package/.output/public/_nuxt/UY8pjaZA.js +0 -1
- package/.output/public/_nuxt/YmCeJkZ2.js +0 -1
- package/.output/public/_nuxt/builds/meta/70224ee0-4d1f-45d2-b380-2ecb18064bf1.json +0 -1
- package/.output/public/_nuxt/fXUwH_3d.js +0 -1
- package/.output/public/_nuxt/sVV8xB9f.js +0 -1
- package/.output/public/_nuxt/xa5UHCot.js +0 -1
- package/.output/server/chunks/build/Alert-He-UxEt6.mjs.map +0 -1
- package/.output/server/chunks/build/Breadcrumb-DEP2dVCZ.mjs.map +0 -1
- package/.output/server/chunks/build/BreadcrumbNav-y6nMDYcR.mjs.map +0 -1
- package/.output/server/chunks/build/BrowserBadge-DIASU8Gf.mjs.map +0 -1
- package/.output/server/chunks/build/ChartCard-ZTsCvItQ.mjs.map +0 -1
- package/.output/server/chunks/build/ChartMarkerTooltip-u_1DUHh-.mjs.map +0 -1
- package/.output/server/chunks/build/Checkbox-BisdHf8n.mjs.map +0 -1
- package/.output/server/chunks/build/CodeBlock-B8BNtZAe.mjs.map +0 -1
- package/.output/server/chunks/build/DashboardNavbar-D7-3zBUU.mjs.map +0 -1
- package/.output/server/chunks/build/DashboardSidebarToggle-C3HdHvlE.mjs.map +0 -1
- package/.output/server/chunks/build/DataLocationCard-CC2-lHiP.mjs.map +0 -1
- package/.output/server/chunks/build/DesktopRunLocallyButton-iNzrDsEs.mjs.map +0 -1
- package/.output/server/chunks/build/DiagnosisPanel-BVb2LgHu.mjs.map +0 -1
- package/.output/server/chunks/build/DiagnosisResult-xVgZlfKK.mjs.map +0 -1
- package/.output/server/chunks/build/DurationValue-UX9uajQJ.mjs.map +0 -1
- package/.output/server/chunks/build/EmptyState-DC2q_7TD.mjs.map +0 -1
- package/.output/server/chunks/build/EntityLinks-Dzn73fbq.mjs.map +0 -1
- package/.output/server/chunks/build/EnvManagedBadge-C-agmABK.mjs.map +0 -1
- package/.output/server/chunks/build/ErrorState-CktYyeEZ.mjs.map +0 -1
- package/.output/server/chunks/build/FeatureUnavailable-DHFkwI7t.mjs.map +0 -1
- package/.output/server/chunks/build/FormField-GYHKiSI6.mjs.map +0 -1
- package/.output/server/chunks/build/GetStartedWizard-BpcGYsm2.mjs.map +0 -1
- package/.output/server/chunks/build/HelpHint-plioHKA0.mjs.map +0 -1
- package/.output/server/chunks/build/LoadingState-CwpfmI0W.mjs.map +0 -1
- package/.output/server/chunks/build/MarkerBadge-Biz5--h2.mjs.map +0 -1
- package/.output/server/chunks/build/MetaStripGroup-A0a72vt5.mjs.map +0 -1
- package/.output/server/chunks/build/Modal-hKLvVFNp.mjs.map +0 -1
- package/.output/server/chunks/build/NavbarActions-_YjrSUat.mjs.map +0 -1
- package/.output/server/chunks/build/NavigationMenu-RfBOyS32.mjs.map +0 -1
- package/.output/server/chunks/build/RovingFocusItem-BOSx1Z9Z.mjs.map +0 -1
- package/.output/server/chunks/build/RunReports-nuLb-Nm3.mjs.map +0 -1
- package/.output/server/chunks/build/RunStatusBadge-CvWmcFYM.mjs.map +0 -1
- package/.output/server/chunks/build/SectionCard-DHAFvJxm.mjs.map +0 -1
- package/.output/server/chunks/build/Select-CEyw7HGK.mjs.map +0 -1
- package/.output/server/chunks/build/Separator-lrN70ODV.mjs.map +0 -1
- package/.output/server/chunks/build/SettingsField-tRmytcEJ.mjs.map +0 -1
- package/.output/server/chunks/build/Slideover-D6cRIqch.mjs.map +0 -1
- package/.output/server/chunks/build/Switch-R2n82ncQ.mjs.map +0 -1
- package/.output/server/chunks/build/Table-qZdnm9t2.mjs.map +0 -1
- package/.output/server/chunks/build/Tabs-BDP7MWl4.mjs.map +0 -1
- package/.output/server/chunks/build/TestCaseHistoryChart-CKDXQ2GI.mjs.map +0 -1
- package/.output/server/chunks/build/TestMetaBadges-BlyKmfeP.mjs.map +0 -1
- package/.output/server/chunks/build/TestStatusBar-CvsmKJ4D.mjs.map +0 -1
- package/.output/server/chunks/build/Textarea-DpmpM-lN.mjs.map +0 -1
- package/.output/server/chunks/build/Tooltip-BI3WQErw.mjs.map +0 -1
- package/.output/server/chunks/build/VisuallyHiddenInput-D4E5aJCQ.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-T965GKYC.mjs.map +0 -1
- package/.output/server/chunks/build/about-B3V_OEiu.mjs.map +0 -1
- package/.output/server/chunks/build/account-DpBdYE46.mjs.map +0 -1
- package/.output/server/chunks/build/default-CQa_bmAf.mjs.map +0 -1
- package/.output/server/chunks/build/edit-BdfF9er2.mjs.map +0 -1
- package/.output/server/chunks/build/fetch-tkz5_OA-.mjs.map +0 -1
- package/.output/server/chunks/build/forgot-password-swZRcvXE.mjs.map +0 -1
- package/.output/server/chunks/build/help-content-C876a9WD.mjs.map +0 -1
- package/.output/server/chunks/build/import-B27Sv7h5.mjs.map +0 -1
- package/.output/server/chunks/build/index-ByWTzqF6.mjs.map +0 -1
- package/.output/server/chunks/build/index-C7m32bRI.mjs.map +0 -1
- package/.output/server/chunks/build/index-ID913tUa.mjs.map +0 -1
- package/.output/server/chunks/build/isValueEqualOrExist-D4lZ8uRY.mjs.map +0 -1
- package/.output/server/chunks/build/login-hxCF06JT.mjs.map +0 -1
- package/.output/server/chunks/build/mcp-BVW1llyW.mjs.map +0 -1
- package/.output/server/chunks/build/notifications-Dn-evqXM.mjs.map +0 -1
- package/.output/server/chunks/build/performance-CV8qm94u.mjs.map +0 -1
- package/.output/server/chunks/build/pr-feedback-gKDz8LyA.mjs.map +0 -1
- package/.output/server/chunks/build/reset-password-DtEISa1I.mjs.map +0 -1
- package/.output/server/chunks/build/settings-BJDnuLpc.mjs.map +0 -1
- package/.output/server/chunks/build/settings-metadata-DnAK4Rzg.mjs.map +0 -1
- package/.output/server/chunks/build/storage-zN92cA9q.mjs.map +0 -1
- package/.output/server/chunks/build/tags-CJFnoyQc.mjs.map +0 -1
- package/.output/server/chunks/build/test-cases-0Q6rT73d.mjs.map +0 -1
- package/.output/server/chunks/build/test-functions-DVRJgiWo.mjs.map +0 -1
- package/.output/server/chunks/build/useDesktopDownload-Dyf0fR47.mjs.map +0 -1
- package/.output/server/chunks/build/useDesktopLocalRuns-k7Gw3Fv3.mjs.map +0 -1
- package/.output/server/chunks/build/useDesktopProjectLink-WwLte59P.mjs.map +0 -1
- package/.output/server/chunks/build/useFormControl-8skMOTIf.mjs.map +0 -1
- package/.output/server/chunks/build/useOpenInIde-D74FmDNg.mjs.map +0 -1
- package/.output/server/chunks/build/useSettingsNav-BLTHducV.mjs.map +0 -1
- package/.output/server/chunks/build/users-C9bjOBde.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as p,o as a,e as g,m as w,b as o,f as C,h as c,i as b,_ as v,k as x,t as y,c as u,l as d,V as f,I as V,g as _,F as h,z,J as U,r as M,v as j}from"./BzBaMPgu.js";import{j as B,C as L,B as F,k as N}from"./CdM2qNYM.js";import{_ as O}from"./qeqzb80l.js";import{_ as P}from"./CnRNwiuE.js";import{_ as T}from"./Dq6_-84R.js";const D=p({__name:"StatusChip",props:{status:{},size:{}},setup(e){return(t,n)=>{const l=v,r=w;return a(),g(r,{color:("getStatusColor"in t?t.getStatusColor:o(B))(e.status),size:e.size,variant:"subtle",class:"capitalize gap-1 items-center font-semibold shrink-0"},{default:C(()=>[c(l,{name:("getStatusIcon"in t?t.getStatusIcon:o(F))(e.status),class:b(["size-3.5 shrink-0",{"animate-spin":("isStatusInFlight"in t?t.isStatusInFlight:o(L))(e.status)}])},null,8,["name","class"]),x(" "+y(("formatStatusLabel"in t?t.formatStatusLabel:o(N))(e.status)),1)]),_:1},8,["color","size"])}}}),ee=Object.assign(D,{__name:"StatusChip"}),H=["title"],G=p({__name:"MetaStripGroup",props:{label:{},icon:{},help:{}},setup(e){return(t,n)=>{const l=v,r=O;return a(),u("div",{class:"inline-flex items-center flex-wrap gap-x-1.5 gap-y-1 min-w-0 py-0.5 mr-3 [&:not(:first-child)]:border-l [&:not(:first-child)]:border-default [&:not(:first-child)]:pl-3",title:e.label},[e.icon?(a(),g(l,{key:0,name:e.icon,class:"w-3.5 h-3.5 text-dimmed shrink-0"},null,8,["name"])):d("",!0),f(t.$slots,"default"),e.help?(a(),g(r,{key:1,topic:e.help},null,8,["topic"])):d("",!0)],8,H)}}}),te=Object.assign(G,{__name:"MetaStripGroup"}),q={class:"flex flex-wrap items-center gap-y-1 text-sm min-w-0"},E=p({__name:"SummaryMetaStrip",setup(e){return(t,n)=>(a(),u("div",q,[f(t.$slots,"default")]))}}),se=Object.assign(E,{__name:"SummaryMetaStrip"}),J={class:"flex flex-col h-full gap-4 p-1 max-lg:overflow-y-auto lg:overflow-hidden"},A={key:0,class:"lg:shrink-0"},K={class:"lg:shrink-0 max-lg:sticky max-lg:top-0 max-lg:z-10 max-lg:-mx-1 max-lg:bg-(--ui-bg-canvas) max-lg:px-1 max-lg:py-1.5"},Q=p({__name:"DetailPageLayout",props:U({tabItems:{},tabPanelClass:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const t=e,n=V(e,"modelValue"),l=M(!1),r=j(()=>t.tabItems.find(i=>i.value===n.value)?.icon);function S(i){return["min-h-0","lg:flex-1",t.tabPanelClass?.[i]??"overflow-y-auto","max-lg:!block","max-lg:!overflow-visible"]}return(i,m)=>{const k=v,$=P,I=T;return a(),u("div",J,[i.$slots.summary?(a(),u("div",A,[_("div",{class:b(o(l)?"max-lg:hidden":"")},[f(i.$slots,"summary")],2),_("button",{type:"button",class:"lg:hidden mt-2 w-full flex items-center justify-center gap-1 rounded-md border border-default py-1.5 text-xs font-medium text-muted hover:bg-elevated/60 transition-colors",onClick:m[0]||(m[0]=s=>l.value=!o(l))},[c(k,{name:o(l)?"i-lucide-chevron-down":"i-lucide-chevron-up",class:"size-3.5"},null,8,["name"]),x(" "+y(o(l)?"Show summary":"Hide summary"),1)])])):d("",!0),_("div",K,[c($,{modelValue:n.value,"onUpdate:modelValue":m[1]||(m[1]=s=>n.value=s),items:e.tabItems,icon:o(r),size:"md",class:"w-full sm:hidden"},null,8,["modelValue","items","icon"]),c(I,{modelValue:n.value,"onUpdate:modelValue":m[2]||(m[2]=s=>n.value=s),items:e.tabItems,size:"sm",class:"hidden sm:flex",ui:{list:"overflow-x-auto",trigger:"shrink-0"}},null,8,["modelValue","items"])]),(a(!0),u(h,null,z(e.tabItems,s=>(a(),u(h,{key:s.value},[n.value===s.value?(a(),u("div",{key:0,class:b(S(s.value))},[f(i.$slots,`tab-${s.slot??s.value}`)],2)):d("",!0)],64))),128))])}}}),ae=Object.assign(Q,{__name:"DetailPageLayout"});export{ee as _,se as a,te as b,ae as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a2 as m,a3 as y,a5 as g,o as i,
|
|
1
|
+
import{a2 as m,a3 as y,a5 as g,o as i,e as h,f as b,b as t,c as l,i as o,V as d,k as u,t as c,l as n,X as k,v as x,a8 as C}from"./BzBaMPgu.js";const q={slots:{root:"rounded-lg overflow-hidden",header:"p-4 sm:px-6",title:"text-highlighted font-semibold",description:"mt-1 text-muted text-sm",body:"p-4 sm:p-6",footer:"p-4 sm:px-6"},variants:{variant:{solid:{root:"bg-inverted text-inverted",title:"text-inverted",description:"text-dimmed"},outline:{root:"bg-default ring ring-default divide-y divide-default"},soft:{root:"bg-elevated/50 divide-y divide-default"},subtle:{root:"bg-elevated/50 ring ring-default divide-y divide-default"}}},defaultVariants:{variant:"outline"}},V={__name:"UCard",props:{as:{type:null,required:!1},title:{type:String,required:!1},description:{type:String,required:!1},variant:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(p){const v=p,s=m(),e=y("card",v),f=g(),a=x(()=>C({extend:q,...f.ui?.card||{}})({variant:e.variant}));return(r,S)=>(i(),h(t(k),{as:t(e).as,"data-slot":"root",class:o(a.value.root({class:[t(e).ui?.root,t(e).class]}))},{default:b(()=>[s.header||t(e).title||s.title||t(e).description||s.description?(i(),l("div",{key:0,"data-slot":"header",class:o(a.value.header({class:t(e).ui?.header}))},[d(r.$slots,"header",{},()=>[t(e).title||s.title?(i(),l("div",{key:0,"data-slot":"title",class:o(a.value.title({class:t(e).ui?.title}))},[d(r.$slots,"title",{},()=>[u(c(t(e).title),1)])],2)):n("",!0),t(e).description||s.description?(i(),l("div",{key:1,"data-slot":"description",class:o(a.value.description({class:t(e).ui?.description}))},[d(r.$slots,"description",{},()=>[u(c(t(e).description),1)])],2)):n("",!0)])],2)):n("",!0),s.default?(i(),l("div",{key:1,"data-slot":"body",class:o(a.value.body({class:t(e).ui?.body}))},[d(r.$slots,"default")],2)):n("",!0),s.footer?(i(),l("div",{key:2,"data-slot":"footer",class:o(a.value.footer({class:t(e).ui?.footer}))},[d(r.$slots,"footer")],2)):n("",!0)]),_:3},8,["as","class"]))}};export{V as _};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as B,U as Z,o as r,f as x,g as d,V as F,m as S,W as Q,k as e,X as H,Y as He,Z as Je,h as k,$ as We,a0 as Xe,a1 as Ye,t as P,c as I,i as f,R as ce,q as L,j as i,p as ee,F as A,y as oe,s as qe,G as Se,v as V,_ as G,r as w,a2 as et,a3 as tt,a4 as at,a5 as st,a6 as lt,a7 as nt,a8 as ot,u as it,a as rt,A as ut,J as ae,E as dt,l as se,a9 as Re,aa as de}from"./C5TrTuWv.js";import{_ as ct}from"./Ce5_Tq63.js";import{_ as pt}from"./B8H4XydJ.js";import{_ as ft}from"./DcLbz6DV.js";import{_ as gt}from"./DcR0Mmdl.js";import{_ as mt}from"./BFxvHlO9.js";import{_ as vt}from"./BBhrClA9.js";import{_ as ze}from"./VACXezo0.js";import{_ as Ie}from"./LwoTUb-r.js";import{k as pe,l as fe,p as ge,f as me,e as _t,t as yt}from"./DMtrFQqi.js";import{_ as bt}from"./CMuzkARi.js";import{_ as ht}from"./D0Kop4bS.js";import{_ as xt}from"./Bg93Rnts.js";import{_ as kt}from"./DMAiMrNr.js";import{u as Ct}from"./DzZpIs4W.js";import{u as Pt}from"./T5UuMUxA.js";var Rt=B({__name:"PaginationEllipsis",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(u){const c=u;return Z(),(s,_)=>(r(),x(e(H),Q(c,{"data-type":"ellipsis"}),{default:d(()=>[F(s.$slots,"default",{},()=>[_[0]||(_[0]=S("…"))])]),_:3},16))}}),$t=Rt;const[te,qt]=We("PaginationRoot");var St=B({__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(u,{emit:c}){const s=u,_=c,{siblingCount:m,disabled:t,showEdges:C}=He(s);Z();const b=Je(s,"page",_,{defaultValue:s.defaultPage,passive:s.page===void 0}),T=k(()=>Math.max(1,Math.ceil(s.total/(s.itemsPerPage||1))));return qt({page:b,onPageChange(z){b.value=z},pageCount:T,siblingCount:m,disabled:t,showEdges:C}),(z,E)=>(r(),x(e(H),{as:z.as,"as-child":z.asChild},{default:d(()=>[F(z.$slots,"default",{page:e(b),pageCount:T.value})]),_:3},8,["as","as-child"]))}}),zt=St,It=B({__name:"PaginationFirst",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(u){const c=u,s=te();Z();const _=k(()=>s.page.value===1||s.disabled.value);return(m,t)=>(r(),x(e(H),Q(c,{"aria-label":"First Page",type:m.as==="button"?"button":void 0,disabled:_.value,onClick:t[0]||(t[0]=C=>!_.value&&e(s).onPageChange(1))}),{default:d(()=>[F(m.$slots,"default",{},()=>[t[1]||(t[1]=S("First page"))])]),_:3},16,["type","disabled"]))}}),Lt=It,Nt=B({__name:"PaginationLast",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(u){const c=u,s=te();Z();const _=k(()=>s.page.value===s.pageCount.value||s.disabled.value);return(m,t)=>(r(),x(e(H),Q(c,{"aria-label":"Last Page",type:m.as==="button"?"button":void 0,disabled:_.value,onClick:t[0]||(t[0]=C=>!_.value&&e(s).onPageChange(e(s).pageCount.value))}),{default:d(()=>[F(m.$slots,"default",{},()=>[t[1]||(t[1]=S("Last page"))])]),_:3},16,["type","disabled"]))}}),Tt=Nt;function K(u,c){const s=c-u+1;return Array.from({length:s},(_,m)=>m+u)}function jt(u){return u.map(c=>typeof c=="number"?{type:"page",value:c}:{type:"ellipsis"})}const ne="ellipsis";function Ft(u,c,s,_){const t=c,C=Math.max(u-s,1),b=Math.min(u+s,t);if(_){const z=Math.min(2*s+5,c)-2,E=C>3&&Math.abs(t-z-1+1)>2&&Math.abs(C-1)>2,D=b<t-2&&Math.abs(t-z)>2&&Math.abs(t-b)>2;if(!E&&D)return[...K(1,z),ne,t];if(E&&!D){const l=K(t-z+1,t);return[1,ne,...l]}if(E&&D){const l=K(C,b);return[1,ne,...l,ne,t]}return K(1,t)}else{const T=s*2+1;return c<T?K(1,t):u<=s+1?K(1,T):c-u<=s?K(c-T+1,t):K(C,b)}}var wt=B({__name:"PaginationList",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(u){const c=u;Z();const s=te(),_=k(()=>jt(Ft(s.page.value,s.pageCount.value,s.siblingCount.value,s.showEdges.value)));return(m,t)=>(r(),x(e(H),Xe(Ye(c)),{default:d(()=>[F(m.$slots,"default",{items:_.value})]),_:3},16))}}),Vt=wt,Bt=B({__name:"PaginationListItem",props:{value:{type:Number,required:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(u){const c=u;Z();const s=te(),_=k(()=>s.page.value===c.value),m=k(()=>s.disabled.value);return(t,C)=>(r(),x(e(H),Q(c,{"data-type":"page","aria-label":`Page ${t.value}`,"aria-current":_.value?"page":void 0,"data-selected":_.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:d(()=>[F(t.$slots,"default",{},()=>[S(P(t.value),1)])]),_:3},16,["aria-label","aria-current","data-selected","disabled","type"]))}}),Et=Bt,Dt=B({__name:"PaginationNext",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(u){const c=u;Z();const s=te(),_=k(()=>s.page.value===s.pageCount.value||s.disabled.value);return(m,t)=>(r(),x(e(H),Q(c,{"aria-label":"Next Page",type:m.as==="button"?"button":void 0,disabled:_.value,onClick:t[0]||(t[0]=C=>!_.value&&e(s).onPageChange(e(s).page.value+1))}),{default:d(()=>[F(m.$slots,"default",{},()=>[t[1]||(t[1]=S("Next page"))])]),_:3},16,["type","disabled"]))}}),Mt=Dt,At=B({__name:"PaginationPrev",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(u){const c=u;Z();const s=te(),_=k(()=>s.page.value===1||s.disabled.value);return(m,t)=>(r(),x(e(H),Q(c,{"aria-label":"Previous Page",type:m.as==="button"?"button":void 0,disabled:_.value,onClick:t[0]||(t[0]=C=>!_.value&&e(s).onPageChange(e(s).page.value-1))}),{default:d(()=>[F(m.$slots,"default",{},()=>[t[1]||(t[1]=S("Prev page"))])]),_:3},16,["type","disabled"]))}}),Ut=At;const Ot=["title"],Kt={class:"h-1.5 w-14 shrink-0 overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700"},Gt={class:"text-sm font-medium tabular-nums"},Qt={key:1,class:"text-sm text-muted",title:"No executed runs yet"},Zt=B({__name:"PassRateIndicator",props:{rate:{}},setup(u){const c=u,s=k(()=>c.rate==null?null:Math.round(c.rate*100)),_=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?(r(),I("div",{key:0,class:"flex items-center gap-2",title:`${e(s)}% of executed runs passed`},[f("div",Kt,[f("div",{class:L([e(_),"h-full rounded-full transition-all"]),style:ce({width:`${e(s)}%`})},null,6)]),f("span",Gt,P(e(s))+"%",1)],8,Ot)):(r(),I("span",Qt,"—"))}}),Le=Object.assign(Zt,{__name:"PassRateIndicator"}),Ht={class:"rounded-lg border border-default bg-default text-sm"},Jt={class:"flex items-center justify-end px-3 py-1.5 border-b border-default bg-elevated"},Wt=["disabled","title"],Xt=["onClick"],Yt={class:"text-xs text-muted tabular-nums shrink-0"},ea={class:"w-24 sm:w-32 shrink-0 max-sm:hidden"},ta={class:"flex items-center gap-3 shrink-0"},aa=["title"],sa=["title"],la={key:0,class:"text-center py-8 text-muted"},na=B({__name:"ProjectTestCasesTree",props:{items:{},hasFilter:{type:Boolean}},setup(u){const c=u;function s(l){return(l.suitePath||"").split("").filter(Boolean)}function _(l){const n={passed:0,failed:0,skipped:0,flaky:0,didNotRun:0,total:0,cases:l.length};for(const v of l)n.passed+=v.passedRuns,n.failed+=v.failedRuns,n.skipped+=v.skippedRuns,n.flaky+=v.flakyRuns,n.didNotRun+=v.didNotRunRuns,n.total+=v.totalRuns;return n}const m=w(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 T(){const l=new Set;for(const n of c.items){l.add(`file:${n.filePath}`);const v=s(n);for(let y=1;y<=v.length;y++)l.add(`group:${n.filePath}${v.slice(0,y).join("")}`)}return[...l]}function z(){m.value=new Set(T())}function E(){m.value=new Set}function D(l,n,v,y,h){const $=n.filter(R=>s(R).length===y.length),q=n.filter(R=>s(R).length>y.length),j=new Map;for(const R of q){const o=s(R)[y.length];j.has(o)||j.set(o,[]),j.get(o).push(R)}for(const[R,o]of j){const J=[...y,R],N=`group:${v}${J.join("")}`;l.push({kind:"group",depth:h,key:N,label:R,agg:_(o)}),C(N)&&D(l,o,v,J,h+1)}for(const R of $)l.push({kind:"case",depth:h,key:`case:${R.id}`,testCase:R})}const U=k(()=>{const l=[],n=new Map;for(const v of c.items){const y=v.filePath||"unknown";n.has(y)||n.set(y,[]),n.get(y).push(v)}for(const[v,y]of[...n.entries()].sort(([h],[$])=>h.localeCompare($))){const h=`file:${v}`;l.push({kind:"group",depth:0,key:h,label:v,agg:_(y)}),C(h)&&D(l,y,v,[],1)}return l});return(l,n)=>{const v=ee,y=ze,h=qe,$=Se,q=Le,j=Ie,R=G;return r(),I("div",Ht,[f("div",Jt,[f("button",{class:L(["flex items-center gap-1 text-xs transition-colors",u.hasFilter?"text-muted cursor-not-allowed opacity-50":"text-muted hover:text-default"]),disabled:u.hasFilter,title:u.hasFilter?"Clear filters to collapse/expand":e(t)?"Collapse all":"Expand all",onClick:n[0]||(n[0]=o=>e(t)?z():E())},[i(v,{name:e(t)?"i-lucide-fold-vertical":"i-lucide-unfold-vertical",class:"size-3.5"},null,8,["name"]),S(" "+P(e(t)?"Collapse all":"Expand all"),1)],10,Wt)]),(r(!0),I(A,null,oe(e(U),o=>(r(),I(A,{key:o.key},[o.kind==="group"?(r(),I("div",{key:0,class:L(["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",!u.hasFilter&&"cursor-pointer"]]),style:ce({paddingLeft:`${o.depth*20+12}px`}),onClick:J=>b(o.key)},[i(v,{name:C(o.key)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5 text-muted shrink-0"},null,8,["name"]),i(v,{name:o.depth===0?"i-lucide-file-code-2":"i-lucide-folder-open",class:L(["size-4 shrink-0",o.depth===0?"text-blue-500":"text-amber-500"])},null,8,["name","class"]),f("span",{class:L(["font-medium truncate min-w-0",[o.depth===0?"text-default font-mono text-xs sm:text-sm":"text-muted"]])},P(o.label),3),f("span",Yt,P(o.agg.cases)+" "+P(o.agg.cases===1?"case":"cases"),1),n[1]||(n[1]=f("div",{class:"flex-1"},null,-1)),f("div",ea,[i(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,Xt)):(r(),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:ce({paddingLeft:`${o.depth*20+12}px`})},[i(v,{name:"i-lucide-flask-conical",class:"size-3.5 text-muted shrink-0"}),i(h,{color:("testCaseCategoryColor"in l?l.testCaseCategoryColor:e(fe))(o.testCase.status),size:"xs",variant:"subtle",class:"capitalize shrink-0"},{default:d(()=>[S(P(("formatStatusLabel"in l?l.formatStatusLabel:e(pe))(o.testCase.status)),1)]),_:2},1032,["color"]),i($,{to:`/test-cases/${o.testCase.id}`,class:"text-sm text-primary hover:underline truncate flex-1 min-w-32",title:o.testCase.title},{default:d(()=>[S(P(o.testCase.title),1)]),_:2},1032,["to","title"]),f("div",ta,[i(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`},P(o.testCase.totalRuns)+"× ",9,aa),o.testCase.avgDuration!=null?(r(),x(j,{key:0,ms:o.testCase.avgDuration,class:"text-xs text-muted max-sm:hidden"},null,8,["ms"])):V("",!0),f("span",{class:"text-xs text-muted max-sm:hidden",title:("prettyDateFormat"in l?l.prettyDateFormat:e(ge))(o.testCase.lastRun)},P(("formatRelativeTime"in l?l.formatRelativeTime:e(me))(o.testCase.lastRun)),9,sa),i(R,{to:`/test-cases/${o.testCase.id}`,size:"xs",variant:"outline"},{default:d(()=>[...n[2]||(n[2]=[S("View",-1)])]),_:1},8,["to"])])],4))],64))),128)),e(U).length===0?(r(),I("div",la,[i(v,{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))])):V("",!0)])}}}),oa=Object.assign(na,{__name:"ProjectTestCasesTree"}),ia={slots:{root:"",list:"flex items-center gap-1",ellipsis:"pointer-events-none",label:"min-w-5 text-center",first:"",prev:"",item:"",next:"",last:""}},ra={__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(u,{emit:c}){const s=u,_=c,m=et(),t=tt("pagination",s),{dir:C}=at(),b=st(),T=lt(nt(t,"as","defaultPage","disabled","itemsPerPage","page","showEdges","siblingCount","total"),_),z=k(()=>t.firstIcon||(C.value==="rtl"?b.ui.icons.chevronDoubleRight:b.ui.icons.chevronDoubleLeft)),E=k(()=>t.prevIcon||(C.value==="rtl"?b.ui.icons.chevronRight:b.ui.icons.chevronLeft)),D=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(()=>ot({extend:ia,...b.ui?.pagination||{}})());return(n,v)=>(r(),x(e(zt),Q(e(T),{"data-slot":"root",class:l.value.root({class:[e(t).ui?.root,e(t).class]})}),{default:d(({page:y,pageCount:h})=>[i(e(Vt),{"data-slot":"list",class:L(l.value.list({class:e(t).ui?.list}))},{default:d(({items:$})=>[e(t).showControls||m.first?(r(),x(e(Lt),{key:0,"as-child":"","data-slot":"first",class:L(l.value.first({class:e(t).ui?.first}))},{default:d(()=>[F(n.$slots,"first",{},()=>[i(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:z.value,to:e(t).to?.(1)},null,8,["color","variant","size","icon","to"])])]),_:3},8,["class"])):V("",!0),e(t).showControls||m.prev?(r(),x(e(Ut),{key:1,"as-child":"","data-slot":"prev",class:L(l.value.prev({class:e(t).ui?.prev}))},{default:d(()=>[F(n.$slots,"prev",{},()=>[i(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:E.value,to:y>1?e(t).to?.(y-1):void 0},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):V("",!0),(r(!0),I(A,null,oe($,(q,j)=>(r(),I(A,{key:j},[q.type==="page"?(r(),x(e(Et),{key:0,"as-child":"",value:q.value,"data-slot":"item",class:L(l.value.item({class:e(t).ui?.item}))},{default:d(()=>[F(n.$slots,"item",Q({ref_for:!0},{item:q,index:j,page:y,pageCount:h}),()=>[i(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"])):(r(),x(e($t),{key:1,"as-child":"","data-slot":"ellipsis",class:L(l.value.ellipsis({class:e(t).ui?.ellipsis}))},{default:d(()=>[F(n.$slots,"ellipsis",{ui:l.value},()=>[i(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?(r(),x(e(Mt),{key:2,"as-child":"","data-slot":"next",class:L(l.value.next({class:e(t).ui?.next}))},{default:d(()=>[F(n.$slots,"next",{},()=>[i(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:D.value,to:y<h?e(t).to?.(y+1):void 0},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):V("",!0),e(t).showControls||m.last?(r(),x(e(Tt),{key:3,"as-child":"","data-slot":"last",class:L(l.value.last({class:e(t).ui?.last}))},{default:d(()=>[F(n.$slots,"last",{},()=>[i(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"])):V("",!0)]),_:2},1032,["class"])]),_:3},16,["class"]))}},ua={class:"flex items-center rounded-md border border-default overflow-hidden"},da={class:"text-sm text-muted tabular-nums"},ca={class:"flex flex-wrap items-center gap-1"},pa=["aria-pressed","onClick"],fa={class:"mt-3 flex items-center justify-center gap-2"},ga={class:"hidden md:block overflow-x-auto"},ma={class:"min-w-0 space-y-0.5"},va={class:"flex items-center gap-1 text-xs text-muted"},_a={class:"text-sm tabular-nums"},ya=["title"],ba={class:"flex justify-end"},ha={class:"space-y-2 md:hidden"},xa={class:"flex items-start justify-between gap-2"},ka={class:"flex items-center gap-1 text-xs text-muted min-w-0"},Ca={class:"flex flex-wrap items-center justify-between gap-x-3 gap-y-1"},Pa={class:"text-xs text-muted tabular-nums"},Ra=["title"],$a={class:"mt-4 flex flex-wrap items-center justify-between gap-3"},qa={class:"flex flex-wrap items-center gap-3"},Sa={class:"text-sm text-muted tabular-nums"},za={class:"flex items-center gap-1.5"},Ia=1e3,$e=25,La=B({__name:"ProjectTestCasesTable",props:{projectId:{},projectName:{},syncQuery:{type:Boolean}},emits:["total"],setup(u,{expose:c,emit:s}){const _=u,m=s,t=it(),C=rt(),{treeView:b,setTreeView:T}=Ct("project-test-cases"),z=[{label:"10 / page",value:10},{label:"25 / page",value:25},{label:"50 / page",value:50},{label:"100 / page",value:100}],E=[{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}],D=[{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=ut().public.demoMode?0:30,l=_.syncQuery?t.query:{},n=w(Math.max(1,Number(l.page)||1)),v=w(typeof l.q=="string"?l.q:""),y=w(v.value),h=w(typeof l.status=="string"?l.status.split(",").filter(Boolean):[]),$=w(typeof l.age=="string"&&l.age!==""?Math.max(0,Number(l.age)||0):U),q=w(typeof l.tags=="string"?l.tags:""),j=w(q.value),R=w(typeof l.sort=="string"?l.sort:"lastRun"),o=w(l.dir==="asc"?"asc":"desc"),J=Number(l.pageSize),N=w(z.some(p=>p.value===J)?J:$e);ae(y,Re(p=>{v.value=p.trim()},300)),ae(j,Re(p=>{q.value=p.trim()},300)),ae([v,h,q,$,R,o,N,b],()=>{n.value=1});const Ne=k(()=>({limit:b.value?Ia:N.value,offset:b.value?0:(n.value-1)*N.value,...v.value?{q:v.value}:{},...h.value.length>0?{status:h.value.join(",")}:{},...q.value?{tags:q.value}:{},maxAgeDays:$.value,sort:R.value,dir:o.value})),{data:W,status:ie,error:ve,refresh:re}=Pt(`/api/projects/${_.projectId}/test-cases`,{query:Ne},"$SV884SqmUv");ae(()=>W.value?.total,p=>{p!=null&&m("total",p)},{immediate:!0}),_.syncQuery&&ae([v,h,q,$,R,o,n,N],()=>{C.replace({query:{...t.query,q:v.value||void 0,status:h.value.length>0?h.value.join(","):void 0,tags:q.value||void 0,age:$.value!==U?String($.value):void 0,sort:R.value!=="lastRun"?R.value:void 0,dir:o.value!=="desc"?o.value:void 0,page:n.value>1?String(n.value):void 0,pageSize:N.value!==$e?String(N.value):void 0}})});function Te(p){h.value=h.value.includes(p)?h.value.filter(g=>g!==p):[...h.value,p]}function je(p){R.value===p?o.value=o.value==="asc"?"desc":"asc":(R.value=p,o.value=p==="title"?"asc":"desc")}function X(p,g){return()=>{const O=R.value===g,le=O?o.value==="asc"?"i-lucide-chevron-up":"i-lucide-chevron-down":"i-lucide-chevrons-up-down";return de("button",{type:"button",class:"flex items-center gap-1 font-semibold select-none cursor-pointer hover:text-highlighted transition-colors",onClick:()=>je(g)},[p,de(ee,{name:le,class:["shrink-0 size-3.5",!O&&"opacity-40"]})])}}const Fe=k(()=>[{accessorKey:"title",header:X("Test case","title")},{accessorKey:"status",header:X("Status","status")},{accessorKey:"totalRuns",header:X("Runs","totalRuns")},{accessorKey:"passRate",header:X("Pass rate","passRate")},{id:"results",header:"Results"},{accessorKey:"avgDuration",header:X("Avg duration","avgDuration")},{accessorKey:"lastRun",header:X("Last run","lastRun")},{id:"actions",header:()=>de("div",{class:"text-right"},"Actions")}]),Y=k(()=>W.value?.items??[]),M=k(()=>W.value?.total??0),we=k(()=>M.value===0?0:(n.value-1)*N.value+1),Ve=k(()=>b.value?Y.value.length:Math.min(n.value*N.value,M.value)),ue=k(()=>v.value!==""||h.value.length>0),Be=k(()=>ue.value||$.value!==0),Ee=k(()=>ie.value==="pending"&&!W.value);return c({refresh:re}),(p,g)=>{const O=G,le=dt,_e=ct,De=pt,Me=ft,Ae=gt,ye=mt,Ue=vt,Oe=oa,be=Se,Ke=bt,he=ht,xe=qe,ke=Le,Ce=ze,Pe=Ie,Ge=xt,Qe=ra,Ze=kt;return r(),x(Ze,{title:"Test cases",icon:"i-lucide-flask-conical",count:e(W)?.total,help:"project.test-cases"},{actions:d(()=>[i(O,{icon:"i-lucide-refresh-cw",size:"sm",color:"neutral",variant:"ghost","aria-label":"Refresh test cases",loading:e(ie)==="pending"&&!!e(W),onClick:g[0]||(g[0]=()=>e(re)())},null,8,["loading"])]),default:d(()=>[i(De,{class:"mb-4"},{start:d(()=>[f("div",ua,[f("button",{type:"button",class:L(["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:g[1]||(g[1]=a=>e(T)(!1))},[i(e(ee),{name:"i-lucide-list",class:"size-3.5"})],2),f("button",{type:"button",class:L(["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:g[2]||(g[2]=a=>e(T)(!0))},[i(e(ee),{name:"i-lucide-folder-tree",class:"size-3.5"})],2)]),f("span",da,P(e(M))+" "+P(e(M)===1?"case":"cases"),1)]),default:d(()=>[i(le,{modelValue:e(y),"onUpdate:modelValue":g[3]||(g[3]=a=>se(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"]),i(le,{modelValue:e(j),"onUpdate:modelValue":g[4]||(g[4]=a=>se(j)?j.value=a:null),placeholder:"Tags (comma-separated)…",icon:"i-lucide-tag",size:"sm",class:"min-w-44 max-sm:flex-1","aria-label":"Filter by tag",title:"Show only cases carrying every listed tag. A leading @ is optional."},null,8,["modelValue"]),f("div",ca,[(r(),I(A,null,oe(D,a=>f("button",{key:a.value,type:"button",class:L(["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:Na=>Te(a.value)},[f("span",{class:L(["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),S(" "+P(a.label),1)],10,pa)),64))]),i(_e,{modelValue:e($),"onUpdate:modelValue":g[5]||(g[5]=a=>se($)?$.value=a:null),items:E,size:"sm",class:"w-36","aria-label":"Last run age filter"},null,8,["modelValue"])]),_:1}),e(Ee)?(r(),x(Me,{key:0,text:"Loading test cases..."})):e(ve)?(r(),x(Ae,{key:1,text:("errorMessage"in p?p.errorMessage:e(_t))(e(ve),"Failed to load test cases")},{action:d(()=>[i(O,{size:"sm",variant:"outline",onClick:g[6]||(g[6]=()=>e(re)())},{default:d(()=>[...g[11]||(g[11]=[S("Retry",-1)])]),_:1})]),_:1},8,["text"])):e(M)===0?(r(),I(A,{key:2},[e(Be)?(r(),x(ye,{key:1,icon:"i-lucide-search-x",text:"No test cases match your filters."},{default:d(()=>[f("div",fa,[e($)!==0?(r(),x(O,{key:0,size:"sm",variant:"outline",onClick:g[7]||(g[7]=a=>$.value=0)},{default:d(()=>[...g[12]||(g[12]=[S("Show all time",-1)])]),_:1})):V("",!0),e(ue)?(r(),x(O,{key:1,size:"sm",variant:"ghost",onClick:g[8]||(g[8]=()=>{y.value="",v.value="",h.value=[]})},{default:d(()=>[...g[13]||(g[13]=[S(" Clear filters ",-1)])]),_:1})):V("",!0)])]),_:1})):(r(),x(ye,{key:0,icon:"i-lucide-flask-conical",text:"No test cases yet for this project."}))],64)):(r(),I("div",{key:3,class:L([{"opacity-60 pointer-events-none":e(ie)==="pending"},"transition-opacity"])},[e(b)?(r(),I(A,{key:0},[e(Y).length<e(M)?(r(),x(Ue,{key:0,color:"warning",variant:"subtle",icon:"i-lucide-triangle-alert",class:"mb-3",title:`Showing the first ${e(Y).length} of ${e(M)} cases — narrow the search or filters to see the rest.`},null,8,["title"])):V("",!0),i(Oe,{items:e(Y),"has-filter":e(ue)},null,8,["items","has-filter"])],64)):(r(),I(A,{key:1},[f("div",ga,[i(Ge,{data:e(Y),columns:e(Fe),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":d(({row:a})=>[f("div",ma,[i(be,{to:`/test-cases/${a.original.id}`,class:"text-sm font-medium text-primary hover:underline truncate block",title:a.original.title},{default:d(()=>[S(P(a.original.title),1)]),_:2},1032,["to","title"]),i(Ke,{tags:a.original.tags,meta:{owner:a.original.owner??void 0,priority:("toTestPriority"in p?p.toTestPriority:e(yt))(a.original.priority),feature:a.original.feature??void 0,link:a.original.link??void 0},"max-tags":4},null,8,["tags","meta"]),f("div",va,[i(e(ee),{name:"i-lucide-file-code",class:"size-3 shrink-0"}),i(he,{"file-path":a.original.filePath,"project-key":u.projectId,"project-name":u.projectName,class:"min-w-0"},null,8,["file-path","project-key","project-name"])])])]),"status-cell":d(({row:a})=>[i(xe,{color:("testCaseCategoryColor"in p?p.testCaseCategoryColor:e(fe))(a.original.status),variant:"subtle",size:"sm",class:"capitalize"},{default:d(()=>[S(P(("formatStatusLabel"in p?p.formatStatusLabel:e(pe))(a.original.status)),1)]),_:2},1032,["color"])]),"totalRuns-cell":d(({row:a})=>[f("span",_a,P(a.original.totalRuns),1)]),"passRate-cell":d(({row:a})=>[i(ke,{rate:a.original.passRate},null,8,["rate"])]),"results-cell":d(({row:a})=>[i(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":d(({row:a})=>[i(Pe,{ms:a.original.avgDuration,class:"text-sm text-muted"},null,8,["ms"])]),"lastRun-cell":d(({row:a})=>[f("span",{class:"text-sm text-muted",title:("prettyDateFormat"in p?p.prettyDateFormat:e(ge))(a.original.lastRun)},P(a.original.lastRun!=null?("formatRelativeTime"in p?p.formatRelativeTime:e(me))(a.original.lastRun):"—"),9,ya)]),"actions-cell":d(({row:a})=>[f("div",ba,[i(O,{to:`/test-cases/${a.original.id}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:d(()=>[...g[14]||(g[14]=[S(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data","columns"])]),f("div",ha,[(r(!0),I(A,null,oe(e(Y),a=>(r(),I("div",{key:a.id,class:"rounded-lg border border-default p-3 space-y-2"},[f("div",xa,[i(be,{to:`/test-cases/${a.id}`,class:"text-sm font-medium text-primary hover:underline min-w-0 truncate",title:a.title},{default:d(()=>[S(P(a.title),1)]),_:2},1032,["to","title"]),i(xe,{color:("testCaseCategoryColor"in p?p.testCaseCategoryColor:e(fe))(a.status),variant:"subtle",size:"sm",class:"capitalize shrink-0"},{default:d(()=>[S(P(("formatStatusLabel"in p?p.formatStatusLabel:e(pe))(a.status)),1)]),_:2},1032,["color"])]),f("div",ka,[i(e(ee),{name:"i-lucide-file-code",class:"size-3 shrink-0"}),i(he,{"file-path":a.filePath,"project-key":u.projectId,"project-name":u.projectName,class:"min-w-0"},null,8,["file-path","project-key","project-name"])]),i(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",Ca,[i(ke,{rate:a.passRate},null,8,["rate"]),f("span",Pa,P(a.totalRuns)+" runs",1),a.avgDuration!=null?(r(),x(Pe,{key:0,ms:a.avgDuration,class:"text-xs text-muted"},null,8,["ms"])):V("",!0),f("span",{class:"text-xs text-muted",title:("prettyDateFormat"in p?p.prettyDateFormat:e(ge))(a.lastRun)},P(a.lastRun!=null?("formatRelativeTime"in p?p.formatRelativeTime:e(me))(a.lastRun):"—"),9,Ra)])]))),128))]),f("div",$a,[f("div",qa,[f("span",Sa,"Showing "+P(e(we))+"–"+P(e(Ve))+" of "+P(e(M)),1),f("div",za,[g[15]||(g[15]=f("span",{class:"text-sm text-muted"},"Rows per page",-1)),i(_e,{modelValue:e(N),"onUpdate:modelValue":g[9]||(g[9]=a=>se(N)?N.value=a:null),items:z,size:"sm",class:"w-28","aria-label":"Rows per page"},null,8,["modelValue"])])]),e(M)>e(N)?(r(),x(Qe,{key:0,page:e(n),"onUpdate:page":g[10]||(g[10]=a=>se(n)?n.value=a:null),total:e(M),"items-per-page":e(N),size:"sm"},null,8,["page","total","items-per-page"])):V("",!0)])],64))],2))]),_:1},8,["count"])}}}),Ha=Object.assign(La,{__name:"ProjectTestCasesTable"});export{Ha as _};
|
|
1
|
+
import{d as V,U as Z,o as r,e as x,f as d,V as F,k as q,W as Q,b as e,X as H,Y as He,Z as We,v as k,$ as Xe,a0 as Ye,a1 as Je,t as P,c as I,g as f,R as ce,i as L,h as i,_ as ee,F as U,z as oe,m as Se,H as qe,l as B,j as G,r as w,a2 as et,a3 as tt,a4 as at,a5 as st,a6 as lt,a7 as nt,a8 as ot,u as it,p as rt,B as ut,a as ae,G as dt,x as se,a9 as Re,aa as de}from"./BzBaMPgu.js";import{_ as ct}from"./CnRNwiuE.js";import{_ as pt}from"./Bw4oIhct.js";import{_ as ft}from"./Hp-_W7z4.js";import{_ as gt}from"./DUtYU4Sb.js";import{_ as mt}from"./B77w1Eib.js";import{_ as vt}from"./Db5xe__T.js";import{_ as ze}from"./CVEk4D8I.js";import{_ as Ie}from"./Ch8sGLqE.js";import{k as pe,l as fe,p as ge,f as me,e as _t,t as yt}from"./CdM2qNYM.js";import{_ as bt}from"./BraJd4EA.js";import{_ as ht}from"./BMfTUMYy.js";import{_ as xt}from"./CBQXv4bU.js";import{_ as kt}from"./D_j436ND.js";import{u as Ct}from"./DkGXOZRW.js";import{u as Pt}from"./CDEmotIt.js";var Rt=V({__name:"PaginationEllipsis",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(u){const c=u;return Z(),(s,_)=>(r(),x(e(H),Q(c,{"data-type":"ellipsis"}),{default:d(()=>[F(s.$slots,"default",{},()=>[_[0]||(_[0]=q("…"))])]),_:3},16))}}),$t=Rt;const[te,St]=Xe("PaginationRoot");var qt=V({__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(u,{emit:c}){const s=u,_=c,{siblingCount:m,disabled:t,showEdges:C}=He(s);Z();const b=We(s,"page",_,{defaultValue:s.defaultPage,passive:s.page===void 0}),T=k(()=>Math.max(1,Math.ceil(s.total/(s.itemsPerPage||1))));return St({page:b,onPageChange(z){b.value=z},pageCount:T,siblingCount:m,disabled:t,showEdges:C}),(z,E)=>(r(),x(e(H),{as:z.as,"as-child":z.asChild},{default:d(()=>[F(z.$slots,"default",{page:e(b),pageCount:T.value})]),_:3},8,["as","as-child"]))}}),zt=qt,It=V({__name:"PaginationFirst",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(u){const c=u,s=te();Z();const _=k(()=>s.page.value===1||s.disabled.value);return(m,t)=>(r(),x(e(H),Q(c,{"aria-label":"First Page",type:m.as==="button"?"button":void 0,disabled:_.value,onClick:t[0]||(t[0]=C=>!_.value&&e(s).onPageChange(1))}),{default:d(()=>[F(m.$slots,"default",{},()=>[t[1]||(t[1]=q("First page"))])]),_:3},16,["type","disabled"]))}}),Lt=It,Nt=V({__name:"PaginationLast",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(u){const c=u,s=te();Z();const _=k(()=>s.page.value===s.pageCount.value||s.disabled.value);return(m,t)=>(r(),x(e(H),Q(c,{"aria-label":"Last Page",type:m.as==="button"?"button":void 0,disabled:_.value,onClick:t[0]||(t[0]=C=>!_.value&&e(s).onPageChange(e(s).pageCount.value))}),{default:d(()=>[F(m.$slots,"default",{},()=>[t[1]||(t[1]=q("Last page"))])]),_:3},16,["type","disabled"]))}}),Tt=Nt;function K(u,c){const s=c-u+1;return Array.from({length:s},(_,m)=>m+u)}function jt(u){return u.map(c=>typeof c=="number"?{type:"page",value:c}:{type:"ellipsis"})}const ne="ellipsis";function Ft(u,c,s,_){const t=c,C=Math.max(u-s,1),b=Math.min(u+s,t);if(_){const z=Math.min(2*s+5,c)-2,E=C>3&&Math.abs(t-z-1+1)>2&&Math.abs(C-1)>2,D=b<t-2&&Math.abs(t-z)>2&&Math.abs(t-b)>2;if(!E&&D)return[...K(1,z),ne,t];if(E&&!D){const l=K(t-z+1,t);return[1,ne,...l]}if(E&&D){const l=K(C,b);return[1,ne,...l,ne,t]}return K(1,t)}else{const T=s*2+1;return c<T?K(1,t):u<=s+1?K(1,T):c-u<=s?K(c-T+1,t):K(C,b)}}var wt=V({__name:"PaginationList",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(u){const c=u;Z();const s=te(),_=k(()=>jt(Ft(s.page.value,s.pageCount.value,s.siblingCount.value,s.showEdges.value)));return(m,t)=>(r(),x(e(H),Ye(Je(c)),{default:d(()=>[F(m.$slots,"default",{items:_.value})]),_:3},16))}}),Bt=wt,Vt=V({__name:"PaginationListItem",props:{value:{type:Number,required:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(u){const c=u;Z();const s=te(),_=k(()=>s.page.value===c.value),m=k(()=>s.disabled.value);return(t,C)=>(r(),x(e(H),Q(c,{"data-type":"page","aria-label":`Page ${t.value}`,"aria-current":_.value?"page":void 0,"data-selected":_.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:d(()=>[F(t.$slots,"default",{},()=>[q(P(t.value),1)])]),_:3},16,["aria-label","aria-current","data-selected","disabled","type"]))}}),Et=Vt,Dt=V({__name:"PaginationNext",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(u){const c=u;Z();const s=te(),_=k(()=>s.page.value===s.pageCount.value||s.disabled.value);return(m,t)=>(r(),x(e(H),Q(c,{"aria-label":"Next Page",type:m.as==="button"?"button":void 0,disabled:_.value,onClick:t[0]||(t[0]=C=>!_.value&&e(s).onPageChange(e(s).page.value+1))}),{default:d(()=>[F(m.$slots,"default",{},()=>[t[1]||(t[1]=q("Next page"))])]),_:3},16,["type","disabled"]))}}),Mt=Dt,Ut=V({__name:"PaginationPrev",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(u){const c=u;Z();const s=te(),_=k(()=>s.page.value===1||s.disabled.value);return(m,t)=>(r(),x(e(H),Q(c,{"aria-label":"Previous Page",type:m.as==="button"?"button":void 0,disabled:_.value,onClick:t[0]||(t[0]=C=>!_.value&&e(s).onPageChange(e(s).page.value-1))}),{default:d(()=>[F(m.$slots,"default",{},()=>[t[1]||(t[1]=q("Prev page"))])]),_:3},16,["type","disabled"]))}}),At=Ut;const Ot=["title"],Kt={class:"h-1.5 w-14 shrink-0 overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700"},Gt={class:"text-sm font-medium tabular-nums"},Qt={key:1,class:"text-sm text-muted",title:"No executed runs yet"},Zt=V({__name:"PassRateIndicator",props:{rate:{}},setup(u){const c=u,s=k(()=>c.rate==null?null:Math.round(c.rate*100)),_=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?(r(),I("div",{key:0,class:"flex items-center gap-2",title:`${e(s)}% of executed runs passed`},[f("div",Kt,[f("div",{class:L([e(_),"h-full rounded-full transition-all"]),style:ce({width:`${e(s)}%`})},null,6)]),f("span",Gt,P(e(s))+"%",1)],8,Ot)):(r(),I("span",Qt,"—"))}}),Le=Object.assign(Zt,{__name:"PassRateIndicator"}),Ht={class:"rounded-lg border border-default bg-default text-sm"},Wt={class:"flex items-center justify-end px-3 py-1.5 border-b border-default bg-elevated"},Xt=["disabled","title"],Yt=["onClick"],Jt={class:"text-xs text-muted tabular-nums shrink-0"},ea={class:"w-24 sm:w-32 shrink-0 max-sm:hidden"},ta={class:"flex items-center gap-3 shrink-0"},aa=["title"],sa=["title"],la={key:0,class:"text-center py-8 text-muted"},na=V({__name:"ProjectTestCasesTree",props:{items:{},hasFilter:{type:Boolean}},setup(u){const c=u;function s(l){return(l.suitePath||"").split("").filter(Boolean)}function _(l){const n={passed:0,failed:0,skipped:0,flaky:0,didNotRun:0,total:0,cases:l.length};for(const v of l)n.passed+=v.passedRuns,n.failed+=v.failedRuns,n.skipped+=v.skippedRuns,n.flaky+=v.flakyRuns,n.didNotRun+=v.didNotRunRuns,n.total+=v.totalRuns;return n}const m=w(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 T(){const l=new Set;for(const n of c.items){l.add(`file:${n.filePath}`);const v=s(n);for(let y=1;y<=v.length;y++)l.add(`group:${n.filePath}${v.slice(0,y).join("")}`)}return[...l]}function z(){m.value=new Set(T())}function E(){m.value=new Set}function D(l,n,v,y,h){const $=n.filter(R=>s(R).length===y.length),S=n.filter(R=>s(R).length>y.length),j=new Map;for(const R of S){const o=s(R)[y.length];j.has(o)||j.set(o,[]),j.get(o).push(R)}for(const[R,o]of j){const W=[...y,R],N=`group:${v}${W.join("")}`;l.push({kind:"group",depth:h,key:N,label:R,agg:_(o)}),C(N)&&D(l,o,v,W,h+1)}for(const R of $)l.push({kind:"case",depth:h,key:`case:${R.id}`,testCase:R})}const A=k(()=>{const l=[],n=new Map;for(const v of c.items){const y=v.filePath||"unknown";n.has(y)||n.set(y,[]),n.get(y).push(v)}for(const[v,y]of[...n.entries()].sort(([h],[$])=>h.localeCompare($))){const h=`file:${v}`;l.push({kind:"group",depth:0,key:h,label:v,agg:_(y)}),C(h)&&D(l,y,v,[],1)}return l});return(l,n)=>{const v=ee,y=ze,h=Se,$=qe,S=Le,j=Ie,R=G;return r(),I("div",Ht,[f("div",Wt,[f("button",{class:L(["flex items-center gap-1 text-xs transition-colors",u.hasFilter?"text-muted cursor-not-allowed opacity-50":"text-muted hover:text-default"]),disabled:u.hasFilter,title:u.hasFilter?"Clear filters to collapse/expand":e(t)?"Collapse all":"Expand all",onClick:n[0]||(n[0]=o=>e(t)?z():E())},[i(v,{name:e(t)?"i-lucide-fold-vertical":"i-lucide-unfold-vertical",class:"size-3.5"},null,8,["name"]),q(" "+P(e(t)?"Collapse all":"Expand all"),1)],10,Xt)]),(r(!0),I(U,null,oe(e(A),o=>(r(),I(U,{key:o.key},[o.kind==="group"?(r(),I("div",{key:0,class:L(["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",!u.hasFilter&&"cursor-pointer"]]),style:ce({paddingLeft:`${o.depth*20+12}px`}),onClick:W=>b(o.key)},[i(v,{name:C(o.key)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5 text-muted shrink-0"},null,8,["name"]),i(v,{name:o.depth===0?"i-lucide-file-code-2":"i-lucide-folder-open",class:L(["size-4 shrink-0",o.depth===0?"text-blue-500":"text-amber-500"])},null,8,["name","class"]),f("span",{class:L(["font-medium truncate min-w-0",[o.depth===0?"text-default font-mono text-xs sm:text-sm":"text-muted"]])},P(o.label),3),f("span",Jt,P(o.agg.cases)+" "+P(o.agg.cases===1?"case":"cases"),1),n[1]||(n[1]=f("div",{class:"flex-1"},null,-1)),f("div",ea,[i(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,Yt)):(r(),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:ce({paddingLeft:`${o.depth*20+12}px`})},[i(v,{name:"i-lucide-flask-conical",class:"size-3.5 text-muted shrink-0"}),i(h,{color:("testCaseCategoryColor"in l?l.testCaseCategoryColor:e(fe))(o.testCase.status),size:"xs",variant:"subtle",class:"capitalize shrink-0"},{default:d(()=>[q(P(("formatStatusLabel"in l?l.formatStatusLabel:e(pe))(o.testCase.status)),1)]),_:2},1032,["color"]),i($,{to:`/test-cases/${o.testCase.id}`,class:"text-sm text-primary hover:underline truncate flex-1 min-w-32",title:o.testCase.title},{default:d(()=>[q(P(o.testCase.title),1)]),_:2},1032,["to","title"]),f("div",ta,[i(S,{rate:o.testCase.passRate},null,8,["rate"]),f("span",{class:"text-xs text-muted tabular-nums max-sm:hidden",title:`${o.testCase.totalRuns} runs`},P(o.testCase.totalRuns)+"× ",9,aa),o.testCase.avgDuration!=null?(r(),x(j,{key:0,ms:o.testCase.avgDuration,class:"text-xs text-muted max-sm:hidden"},null,8,["ms"])):B("",!0),f("span",{class:"text-xs text-muted max-sm:hidden",title:("prettyDateFormat"in l?l.prettyDateFormat:e(ge))(o.testCase.lastRun)},P(("formatRelativeTime"in l?l.formatRelativeTime:e(me))(o.testCase.lastRun)),9,sa),i(R,{to:`/test-cases/${o.testCase.id}`,size:"xs",variant:"outline"},{default:d(()=>[...n[2]||(n[2]=[q("View",-1)])]),_:1},8,["to"])])],4))],64))),128)),e(A).length===0?(r(),I("div",la,[i(v,{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))])):B("",!0)])}}}),oa=Object.assign(na,{__name:"ProjectTestCasesTree"}),ia={slots:{root:"",list:"flex items-center gap-1",ellipsis:"pointer-events-none",label:"min-w-5 text-center",first:"",prev:"",item:"",next:"",last:""}},ra={__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(u,{emit:c}){const s=u,_=c,m=et(),t=tt("pagination",s),{dir:C}=at(),b=st(),T=lt(nt(t,"as","defaultPage","disabled","itemsPerPage","page","showEdges","siblingCount","total"),_),z=k(()=>t.firstIcon||(C.value==="rtl"?b.ui.icons.chevronDoubleRight:b.ui.icons.chevronDoubleLeft)),E=k(()=>t.prevIcon||(C.value==="rtl"?b.ui.icons.chevronRight:b.ui.icons.chevronLeft)),D=k(()=>t.nextIcon||(C.value==="rtl"?b.ui.icons.chevronLeft:b.ui.icons.chevronRight)),A=k(()=>t.lastIcon||(C.value==="rtl"?b.ui.icons.chevronDoubleLeft:b.ui.icons.chevronDoubleRight)),l=k(()=>ot({extend:ia,...b.ui?.pagination||{}})());return(n,v)=>(r(),x(e(zt),Q(e(T),{"data-slot":"root",class:l.value.root({class:[e(t).ui?.root,e(t).class]})}),{default:d(({page:y,pageCount:h})=>[i(e(Bt),{"data-slot":"list",class:L(l.value.list({class:e(t).ui?.list}))},{default:d(({items:$})=>[e(t).showControls||m.first?(r(),x(e(Lt),{key:0,"as-child":"","data-slot":"first",class:L(l.value.first({class:e(t).ui?.first}))},{default:d(()=>[F(n.$slots,"first",{},()=>[i(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:z.value,to:e(t).to?.(1)},null,8,["color","variant","size","icon","to"])])]),_:3},8,["class"])):B("",!0),e(t).showControls||m.prev?(r(),x(e(At),{key:1,"as-child":"","data-slot":"prev",class:L(l.value.prev({class:e(t).ui?.prev}))},{default:d(()=>[F(n.$slots,"prev",{},()=>[i(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:E.value,to:y>1?e(t).to?.(y-1):void 0},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):B("",!0),(r(!0),I(U,null,oe($,(S,j)=>(r(),I(U,{key:j},[S.type==="page"?(r(),x(e(Et),{key:0,"as-child":"",value:S.value,"data-slot":"item",class:L(l.value.item({class:e(t).ui?.item}))},{default:d(()=>[F(n.$slots,"item",Q({ref_for:!0},{item:S,index:j,page:y,pageCount:h}),()=>[i(G,{color:y===S.value?e(t).activeColor:e(t).color,variant:y===S.value?e(t).activeVariant:e(t).variant,size:e(t).size,label:String(S.value),ui:{label:l.value.label()},to:e(t).to?.(S.value),square:""},null,8,["color","variant","size","label","ui","to"])])]),_:2},1032,["value","class"])):(r(),x(e($t),{key:1,"as-child":"","data-slot":"ellipsis",class:L(l.value.ellipsis({class:e(t).ui?.ellipsis}))},{default:d(()=>[F(n.$slots,"ellipsis",{ui:l.value},()=>[i(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?(r(),x(e(Mt),{key:2,"as-child":"","data-slot":"next",class:L(l.value.next({class:e(t).ui?.next}))},{default:d(()=>[F(n.$slots,"next",{},()=>[i(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:D.value,to:y<h?e(t).to?.(y+1):void 0},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):B("",!0),e(t).showControls||m.last?(r(),x(e(Tt),{key:3,"as-child":"","data-slot":"last",class:L(l.value.last({class:e(t).ui?.last}))},{default:d(()=>[F(n.$slots,"last",{},()=>[i(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:A.value,to:e(t).to?.(h)},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):B("",!0)]),_:2},1032,["class"])]),_:3},16,["class"]))}},ua={class:"flex items-center rounded-md border border-default overflow-hidden"},da={class:"text-sm text-muted tabular-nums"},ca={class:"flex flex-wrap items-center gap-1"},pa=["aria-pressed","onClick"],fa={class:"mt-3 flex items-center justify-center gap-2"},ga={class:"hidden md:block overflow-x-auto"},ma={class:"min-w-0 space-y-0.5"},va={class:"flex items-center gap-1 text-xs text-muted"},_a={class:"text-sm tabular-nums"},ya=["title"],ba={class:"flex justify-end"},ha={class:"space-y-2 md:hidden"},xa={class:"flex items-start justify-between gap-2"},ka={class:"flex items-center gap-1 text-xs text-muted min-w-0"},Ca={class:"flex flex-wrap items-center justify-between gap-x-3 gap-y-1"},Pa={class:"text-xs text-muted tabular-nums"},Ra=["title"],$a={class:"mt-4 flex flex-wrap items-center justify-between gap-3"},Sa={class:"flex flex-wrap items-center gap-3"},qa={class:"text-sm text-muted tabular-nums"},za={class:"flex items-center gap-1.5"},Ia=1e3,$e=25,La=V({__name:"ProjectTestCasesTable",props:{projectId:{},projectName:{},syncQuery:{type:Boolean}},emits:["total"],setup(u,{expose:c,emit:s}){const _=u,m=s,t=it(),C=rt(),{treeView:b,setTreeView:T}=Ct("project-test-cases"),z=[{label:"10 / page",value:10},{label:"25 / page",value:25},{label:"50 / page",value:50},{label:"100 / page",value:100}],E=[{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}],D=[{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"}],A=ut().public.demoMode?0:30,l=_.syncQuery?t.query:{},n=w(Math.max(1,Number(l.page)||1)),v=w(typeof l.q=="string"?l.q:""),y=w(v.value),h=w(typeof l.status=="string"?l.status.split(",").filter(Boolean):[]),$=w(typeof l.age=="string"&&l.age!==""?Math.max(0,Number(l.age)||0):A),S=w(typeof l.tags=="string"?l.tags:""),j=w(S.value),R=w(typeof l.sort=="string"?l.sort:"lastRun"),o=w(l.dir==="asc"?"asc":"desc"),W=Number(l.pageSize),N=w(z.some(p=>p.value===W)?W:$e);ae(y,Re(p=>{v.value=p.trim()},300)),ae(j,Re(p=>{S.value=p.trim()},300)),ae([v,h,S,$,R,o,N,b],()=>{n.value=1});const Ne=k(()=>({limit:b.value?Ia:N.value,offset:b.value?0:(n.value-1)*N.value,...v.value?{q:v.value}:{},...h.value.length>0?{status:h.value.join(",")}:{},...S.value?{tags:S.value}:{},maxAgeDays:$.value,sort:R.value,dir:o.value})),{data:X,status:ie,error:ve,refresh:re}=Pt(`/api/projects/${_.projectId}/test-cases`,{query:Ne},"$SV884SqmUv");ae(()=>X.value?.total,p=>{p!=null&&m("total",p)},{immediate:!0}),_.syncQuery&&ae([v,h,S,$,R,o,n,N],()=>{C.replace({query:{...t.query,q:v.value||void 0,status:h.value.length>0?h.value.join(","):void 0,tags:S.value||void 0,age:$.value!==A?String($.value):void 0,sort:R.value!=="lastRun"?R.value:void 0,dir:o.value!=="desc"?o.value:void 0,page:n.value>1?String(n.value):void 0,pageSize:N.value!==$e?String(N.value):void 0}})});function Te(p){h.value=h.value.includes(p)?h.value.filter(g=>g!==p):[...h.value,p]}function je(p){R.value===p?o.value=o.value==="asc"?"desc":"asc":(R.value=p,o.value=p==="title"?"asc":"desc")}function Y(p,g){return()=>{const O=R.value===g,le=O?o.value==="asc"?"i-lucide-chevron-up":"i-lucide-chevron-down":"i-lucide-chevrons-up-down";return de("button",{type:"button",class:"flex items-center gap-1 font-semibold select-none cursor-pointer hover:text-highlighted transition-colors",onClick:()=>je(g)},[p,de(ee,{name:le,class:["shrink-0 size-3.5",!O&&"opacity-40"]})])}}const Fe=k(()=>[{accessorKey:"title",header:Y("Test case","title")},{accessorKey:"status",header:Y("Status","status")},{accessorKey:"totalRuns",header:Y("Runs","totalRuns")},{accessorKey:"passRate",header:Y("Pass rate","passRate")},{id:"results",header:"Results"},{accessorKey:"avgDuration",header:Y("Avg duration","avgDuration")},{accessorKey:"lastRun",header:Y("Last run","lastRun")},{id:"actions",header:()=>de("div",{class:"text-right"},"Actions")}]),J=k(()=>X.value?.items??[]),M=k(()=>X.value?.total??0),we=k(()=>M.value===0?0:(n.value-1)*N.value+1),Be=k(()=>b.value?J.value.length:Math.min(n.value*N.value,M.value)),ue=k(()=>v.value!==""||h.value.length>0),Ve=k(()=>ue.value||$.value!==0),Ee=k(()=>ie.value==="pending"&&!X.value);return c({refresh:re}),(p,g)=>{const O=G,le=dt,_e=ct,De=pt,Me=ft,Ue=gt,ye=mt,Ae=vt,Oe=oa,be=qe,Ke=bt,he=ht,xe=Se,ke=Le,Ce=ze,Pe=Ie,Ge=xt,Qe=ra,Ze=kt;return r(),x(Ze,{title:"Test cases",icon:"i-lucide-flask-conical",count:e(X)?.total,help:"project.test-cases"},{actions:d(()=>[i(O,{icon:"i-lucide-refresh-cw",size:"sm",color:"neutral",variant:"ghost","aria-label":"Refresh test cases",loading:e(ie)==="pending"&&!!e(X),onClick:g[0]||(g[0]=()=>e(re)())},null,8,["loading"])]),default:d(()=>[i(De,{class:"mb-4"},{start:d(()=>[f("div",ua,[f("button",{type:"button",class:L(["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:g[1]||(g[1]=a=>e(T)(!1))},[i(e(ee),{name:"i-lucide-list",class:"size-3.5"})],2),f("button",{type:"button",class:L(["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:g[2]||(g[2]=a=>e(T)(!0))},[i(e(ee),{name:"i-lucide-folder-tree",class:"size-3.5"})],2)]),f("span",da,P(e(M))+" "+P(e(M)===1?"case":"cases"),1)]),default:d(()=>[i(le,{modelValue:e(y),"onUpdate:modelValue":g[3]||(g[3]=a=>se(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"]),i(le,{modelValue:e(j),"onUpdate:modelValue":g[4]||(g[4]=a=>se(j)?j.value=a:null),placeholder:"Tags (comma-separated)…",icon:"i-lucide-tag",size:"sm",class:"min-w-44 max-sm:flex-1","aria-label":"Filter by tag",title:"Show only cases carrying every listed tag. A leading @ is optional."},null,8,["modelValue"]),f("div",ca,[(r(),I(U,null,oe(D,a=>f("button",{key:a.value,type:"button",class:L(["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:Na=>Te(a.value)},[f("span",{class:L(["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),q(" "+P(a.label),1)],10,pa)),64))]),i(_e,{modelValue:e($),"onUpdate:modelValue":g[5]||(g[5]=a=>se($)?$.value=a:null),items:E,size:"sm",class:"w-36","aria-label":"Last run age filter"},null,8,["modelValue"])]),_:1}),e(Ee)?(r(),x(Me,{key:0,text:"Loading test cases..."})):e(ve)?(r(),x(Ue,{key:1,text:("errorMessage"in p?p.errorMessage:e(_t))(e(ve),"Failed to load test cases")},{action:d(()=>[i(O,{size:"sm",variant:"outline",onClick:g[6]||(g[6]=()=>e(re)())},{default:d(()=>[...g[11]||(g[11]=[q("Retry",-1)])]),_:1})]),_:1},8,["text"])):e(M)===0?(r(),I(U,{key:2},[e(Ve)?(r(),x(ye,{key:1,icon:"i-lucide-search-x",text:"No test cases match your filters."},{default:d(()=>[f("div",fa,[e($)!==0?(r(),x(O,{key:0,size:"sm",variant:"outline",onClick:g[7]||(g[7]=a=>$.value=0)},{default:d(()=>[...g[12]||(g[12]=[q("Show all time",-1)])]),_:1})):B("",!0),e(ue)?(r(),x(O,{key:1,size:"sm",variant:"ghost",onClick:g[8]||(g[8]=()=>{y.value="",v.value="",h.value=[]})},{default:d(()=>[...g[13]||(g[13]=[q(" Clear filters ",-1)])]),_:1})):B("",!0)])]),_:1})):(r(),x(ye,{key:0,icon:"i-lucide-flask-conical",text:"No test cases yet for this project."}))],64)):(r(),I("div",{key:3,class:L([{"opacity-60 pointer-events-none":e(ie)==="pending"},"transition-opacity"])},[e(b)?(r(),I(U,{key:0},[e(J).length<e(M)?(r(),x(Ae,{key:0,color:"warning",variant:"subtle",icon:"i-lucide-triangle-alert",class:"mb-3",title:`Showing the first ${e(J).length} of ${e(M)} cases — narrow the search or filters to see the rest.`},null,8,["title"])):B("",!0),i(Oe,{items:e(J),"has-filter":e(ue)},null,8,["items","has-filter"])],64)):(r(),I(U,{key:1},[f("div",ga,[i(Ge,{data:e(J),columns:e(Fe),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":d(({row:a})=>[f("div",ma,[i(be,{to:`/test-cases/${a.original.id}`,class:"text-sm font-medium text-primary hover:underline truncate block",title:a.original.title},{default:d(()=>[q(P(a.original.title),1)]),_:2},1032,["to","title"]),i(Ke,{tags:a.original.tags,meta:{owner:a.original.owner??void 0,priority:("toTestPriority"in p?p.toTestPriority:e(yt))(a.original.priority),feature:a.original.feature??void 0,link:a.original.link??void 0},"max-tags":4},null,8,["tags","meta"]),f("div",va,[i(e(ee),{name:"i-lucide-file-code",class:"size-3 shrink-0"}),i(he,{"file-path":a.original.filePath,"project-key":u.projectId,"project-name":u.projectName,class:"min-w-0"},null,8,["file-path","project-key","project-name"])])])]),"status-cell":d(({row:a})=>[i(xe,{color:("testCaseCategoryColor"in p?p.testCaseCategoryColor:e(fe))(a.original.status),variant:"subtle",size:"sm",class:"capitalize"},{default:d(()=>[q(P(("formatStatusLabel"in p?p.formatStatusLabel:e(pe))(a.original.status)),1)]),_:2},1032,["color"])]),"totalRuns-cell":d(({row:a})=>[f("span",_a,P(a.original.totalRuns),1)]),"passRate-cell":d(({row:a})=>[i(ke,{rate:a.original.passRate},null,8,["rate"])]),"results-cell":d(({row:a})=>[i(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":d(({row:a})=>[i(Pe,{ms:a.original.avgDuration,class:"text-sm text-muted"},null,8,["ms"])]),"lastRun-cell":d(({row:a})=>[f("span",{class:"text-sm text-muted",title:("prettyDateFormat"in p?p.prettyDateFormat:e(ge))(a.original.lastRun)},P(a.original.lastRun!=null?("formatRelativeTime"in p?p.formatRelativeTime:e(me))(a.original.lastRun):"—"),9,ya)]),"actions-cell":d(({row:a})=>[f("div",ba,[i(O,{to:`/test-cases/${a.original.id}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:d(()=>[...g[14]||(g[14]=[q(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data","columns"])]),f("div",ha,[(r(!0),I(U,null,oe(e(J),a=>(r(),I("div",{key:a.id,class:"rounded-lg border border-default p-3 space-y-2"},[f("div",xa,[i(be,{to:`/test-cases/${a.id}`,class:"text-sm font-medium text-primary hover:underline min-w-0 truncate",title:a.title},{default:d(()=>[q(P(a.title),1)]),_:2},1032,["to","title"]),i(xe,{color:("testCaseCategoryColor"in p?p.testCaseCategoryColor:e(fe))(a.status),variant:"subtle",size:"sm",class:"capitalize shrink-0"},{default:d(()=>[q(P(("formatStatusLabel"in p?p.formatStatusLabel:e(pe))(a.status)),1)]),_:2},1032,["color"])]),f("div",ka,[i(e(ee),{name:"i-lucide-file-code",class:"size-3 shrink-0"}),i(he,{"file-path":a.filePath,"project-key":u.projectId,"project-name":u.projectName,class:"min-w-0"},null,8,["file-path","project-key","project-name"])]),i(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",Ca,[i(ke,{rate:a.passRate},null,8,["rate"]),f("span",Pa,P(a.totalRuns)+" runs",1),a.avgDuration!=null?(r(),x(Pe,{key:0,ms:a.avgDuration,class:"text-xs text-muted"},null,8,["ms"])):B("",!0),f("span",{class:"text-xs text-muted",title:("prettyDateFormat"in p?p.prettyDateFormat:e(ge))(a.lastRun)},P(a.lastRun!=null?("formatRelativeTime"in p?p.formatRelativeTime:e(me))(a.lastRun):"—"),9,Ra)])]))),128))]),f("div",$a,[f("div",Sa,[f("span",qa,"Showing "+P(e(we))+"–"+P(e(Be))+" of "+P(e(M)),1),f("div",za,[g[15]||(g[15]=f("span",{class:"text-sm text-muted"},"Rows per page",-1)),i(_e,{modelValue:e(N),"onUpdate:modelValue":g[9]||(g[9]=a=>se(N)?N.value=a:null),items:z,size:"sm",class:"w-28","aria-label":"Rows per page"},null,8,["modelValue"])])]),e(M)>e(N)?(r(),x(Qe,{key:0,page:e(n),"onUpdate:page":g[10]||(g[10]=a=>se(n)?n.value=a:null),total:e(M),"items-per-page":e(N),size:"sm"},null,8,["page","total","items-per-page"])):B("",!0)])],64))],2))]),_:1},8,["count"])}}}),Ha=Object.assign(La,{__name:"ProjectTestCasesTable"});export{Ha as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as Ms}from"./D5Mhpp98.js";import{_ as Fs}from"./Ds8_6Fzl.js";import{q as Ae,B as St,d as oe,O as Ot,w as he,a as ge,b as e,o as n,e as g,f as t,h as a,j as ke,c as i,g as s,k as d,t as r,l as A,F as G,z as ae,_ as Le,H as Ve,x as J,P as Vt,Q as Nt,i as ie,v as B,r as I,K as Ps,m as Ce,R as qt,n as wt,E as Rt,G as Ht,M as Es,u as Bs,p as Ls,s as Vs,D as Kt,S as Ns,T as Ks}from"./BzBaMPgu.js";import{_ as Os}from"./BTCWUyBX.js";import{_ as Xe,a as qs}from"./qeqzb80l.js";import{_ as ze}from"./CnRNwiuE.js";import{_ as Qt}from"./Bg8yOdSf.js";import{u as Hs}from"./DIqik40e.js";import{u as xe}from"./CDEmotIt.js";import{_ as Qs}from"./BC5bqlfM.js";import{_ as Gs,a as Xs}from"./CdLqOMvN.js";import{_ as Gt}from"./C7SG50jD.js";import{_ as Ue}from"./kDEwM7SQ.js";import{u as Js,a as Ws,i as Ys}from"./vOZZ2cLi.js";import{_ as Xt}from"./D_SCB-z2.js";import{_ as $e}from"./B77w1Eib.js";import{C as jt,w as Jt,O as it,a as Wt,_ as Yt,u as Zt}from"./CbuK1HIv.js";import{N as Zs}from"./Yl6iqHwK.js";import{_ as en}from"./C8WgBDU1.js";import{_ as tn}from"./C8uZoJVq.js";import{_ as sn}from"./BvXrhZ8k.js";import{_ as es}from"./BSKLNgre.js";import{_ as nn}from"./OanUGF_v.js";import{_ as an}from"./CVEk4D8I.js";import{_ as on}from"./Ch8sGLqE.js";import{_ as ln}from"./9Yziijlb.js";import{_ as Ie}from"./CBQXv4bU.js";import{_ as Dt}from"./D_j436ND.js";import{_ as Ne}from"./5nOoVJzL.js";import{f as At,b as rn,c as cn,d as un,i as E,t as dn,e as ts,p as ct,j as ot}from"./CdM2qNYM.js";import{_ as ss}from"./BraJd4EA.js";import{_ as ut}from"./BMfTUMYy.js";import{_ as Je}from"./Hp-_W7z4.js";import{_ as mn}from"./BUYmGTVP.js";import{_ as pn}from"./knaDbxMJ.js";import{_ as gn}from"./DUtYU4Sb.js";import{_ as fn}from"./BF5JDf9_.js";import{_ as _n}from"./B-onBCAB.js";import{_ as vn}from"./6DSY_93j.js";import{_ as yn}from"./BYnqoVCE.js";import{_ as hn}from"./Die1200X.js";import{_ as zt}from"./BbXvpkBp.js";import{M as xn,D as Ct,g as Tt}from"./D7W_4Sqc.js";import{_ as bn}from"./Dq6_-84R.js";import{u as kn}from"./DnV-BkUA.js";import{u as $n}from"./BLqooxh5.js";import"./DWz_bHNP.js";import"./BcHU1KNK.js";import"./DDho3MJD.js";import"./CTYlay1H.js";import"./WCZdf9Ln.js";import"./Boyv6hLW.js";import"./D-c8ZSws.js";import"./BOrnSpTA.js";import"./7vRR5W2L.js";import"./Bw4oIhct.js";import"./Db5xe__T.js";import"./DkGXOZRW.js";import"./DcUBmKKE.js";import"./BPQNVV4M.js";const Cn=["run.finished","run.failed","run.failed.default_branch","cluster.new","flakiness.spike","perf.regression","diagnosis.completed"],lt=new Map,rt=new Map;function Tn(z,C){const $=[{event:"run.failed",scenario:{title:`Test run failed — ${z}`,description:"3 of 12 tests failed on main — checkout › applies discount code +2 more",icon:"i-lucide-circle-x",color:"error"}},{event:"run.failed.default_branch",scenario:{title:`Test run failed on main — ${z}`,description:"2 of 12 tests failed · main — auth › logs in with valid credentials +1 more",icon:"i-lucide-circle-x",color:"error"}},{event:"cluster.new",scenario:{title:`New failure cluster — ${z}`,description:"TimeoutError: locator.click: Timeout 30000ms exceeded",icon:"i-lucide-layers",color:"warning"}},{event:"flakiness.spike",scenario:{title:`Flakiness spike — ${z}`,description:"3 tests became flaky (8.3% rate)",icon:"i-lucide-shuffle",color:"warning"}},{event:"perf.regression",scenario:{title:`Performance regression — ${z}`,description:"p90 duration increased by 42% vs last week",icon:"i-lucide-trending-down",color:"warning"}},{event:"run.finished",scenario:{title:`Test run recovered — ${z}`,description:"All 12 tests passed on main",icon:"i-lucide-circle-check",color:"success"}},{event:"diagnosis.completed",scenario:{title:`Diagnosis complete — ${z}`,description:"Root cause: test bug — confidence: high",icon:"i-lucide-sparkles",color:"info"}}],x=$.filter(_=>C.length===0||C.includes(_.event)).map(_=>_.scenario);return x.length===0?[$[0].scenario,$[$.length-1].scenario]:x}function jn(){if(!St().public.demoMode)return null;const C=Ae();function $(_,p,c){x(_);const U=Tn(p,c);rt.set(_,0);function F(){const R=(rt.get(_)??0)%U.length;rt.set(_,R+1);const y=U[R];C.add({title:y.title,description:y.description,icon:y.icon,color:y.color,duration:7e3});const h=25e3+Math.random()*1e4;lt.set(_,setTimeout(F,h))}lt.set(_,setTimeout(F,8e3))}function x(_){const p=lt.get(_);p!==void 0&&(clearTimeout(p),lt.delete(_)),rt.delete(_)}return{scheduleFor:$,cancelFor:x}}const Sn={key:0,class:"p-3 space-y-3"},wn={key:0,class:"text-xs text-gray-500"},Rn={key:1,class:"text-xs text-gray-500"},Dn={key:2,class:"text-xs text-gray-500"},An={class:"space-y-1"},zn=["checked","onChange"],Un={key:1,class:"p-3 space-y-3"},In={class:"flex items-center justify-between"},Mn={class:"font-medium text-sm inline-flex items-center gap-1"},Fn={key:0,class:"text-xs text-muted bg-primary/5 rounded px-2 py-1.5"},Pn={key:1,class:"text-xs text-muted text-center py-2"},En={key:2,class:"space-y-1.5"},Bn={key:0,class:"space-y-2 rounded border border-primary/30 bg-primary/5 px-2 py-2"},Ln={class:"space-y-1"},Vn=["value"],Nn={class:"flex gap-1.5 justify-end"},Kn={class:"flex-1 font-medium truncate"},On={key:3,class:"text-xs text-muted text-center py-1"},qn={key:4,class:"space-y-2 border-t border-default pt-2"},Hn={class:"space-y-1"},Qn=["value"],Gn={class:"flex gap-1.5 justify-end"},Xn=oe({__name:"SubscribeBell",props:{projectId:{},projectLabel:{}},async setup(z){let C,$;const x=z,_=St(),p=_.public.demoMode,c=B(()=>_.public.authEnabled),{authState:U}=Ot(),F=B(()=>U.value.authenticated),R=Ae(),y=I(!1),h=p?jn():null,k=!c.value&&!p?Hs():null,T=I("default"),m=B(()=>"Notification"in window);"Notification"in window&&(T.value=Notification.permission);const v=B(()=>k?.getProject(x.projectId).events??[]),M=B(()=>k?.isSubscribed(x.projectId)??!1);async function V(){!m.value||T.value!=="default"||(T.value=await Notification.requestPermission())}function j(K){return v.value.includes(K)}function f(K){k?.toggleEvent(x.projectId,K)}const S=p||c.value&&F.value,O=p?{server:!1}:{},{data:D,refresh:Q}=([C,$]=he(()=>xe(`/api/subscriptions?projectId=${x.projectId}`,{immediate:S,...O},"$APDuK86tlj")),C=await C,$(),C),N=B(()=>D.value?.subscriptions??[]),ue=B(()=>N.value.length>0),{data:fe}=([C,$]=he(()=>xe("/api/channels",{immediate:S,...O},"$uK3f0xlELn")),C=await C,$(),C),b=B(()=>fe.value?.channels??[]),w=I(!1),H=I(void 0),de=I(["run.failed"]),Me=I(!1),me=I(null),be=I(void 0),_e=I([]),Fe=I(!1);function dt(K){me.value=K,be.value=K.channel.id,_e.value=[...K.events]}function mt(){me.value=null}async function Y(){if(!(!me.value||!be.value||_e.value.length===0)){Fe.value=!0;try{await $fetch(`/api/subscriptions/${me.value.id}`,{method:"PATCH",body:{channelId:be.value,events:_e.value}}),await Q(),me.value=null}catch(K){R.add({title:"Update failed",description:String(K?.message??K),color:"error"})}finally{Fe.value=!1}}}const We=B(()=>b.value.map(K=>({label:K.type==="personal_email"?`${K.name} (${K.config.address})`:K.name,value:K.id}))),Ke=Cn.map(K=>({label:K.replace(/\./g," › "),value:K}));ge(y,K=>{K?(S&&Q(),b.value.length>0&&!H.value&&(H.value=b.value[0].id)):(w.value=!1,me.value=null)});async function Oe(){if(!(!H.value||de.value.length===0)){Me.value=!0;try{await $fetch("/api/subscriptions",{method:"POST",body:{channelId:H.value,projectId:x.projectId,events:de.value,mode:"realtime"}}),await Q(),w.value=!1,R.add({title:"Subscribed",color:"success"}),p&&h?.scheduleFor(x.projectId,x.projectLabel||"this project",de.value)}catch(K){R.add({title:"Subscribe failed",description:String(K?.message??K),color:"error"})}finally{Me.value=!1}}}async function pt(K){try{await $fetch(`/api/subscriptions/${K}`,{method:"DELETE"}),await Q(),R.add({title:"Unsubscribed",color:"success"}),p&&N.value.length===0&&h?.cancelFor(x.projectId)}catch(P){R.add({title:"Failed",description:String(P?.message??P),color:"error"})}}async function ne(K){const P=K.mutedUntil&&new Date(K.mutedUntil)>new Date;try{await $fetch(`/api/subscriptions/${K.id}`,{method:"PATCH",body:{mutedUntil:P?null:new Date(Date.now()+10080*60*1e3).toISOString()}}),await Q()}catch(Z){R.add({title:"Failed",description:String(Z?.message??Z),color:"error"})}}function pe(K){return K.mutedUntil&&new Date(K.mutedUntil)>new Date}function qe(K){return K==="personal_email"?"i-lucide-user-round":K==="email"?"i-lucide-mail":K==="slack"?"i-lucide-slack":"i-lucide-webhook"}const gt=B(()=>p||c.value&&F.value||k!=null),He=B(()=>p||c.value?ue.value:M.value);return(K,P)=>{const Z=ke,ft=Os,Te=Xe,Ye=Le,Ze=Ve,Pe=ze,je=Qt,_t=Ps;return e(gt)?(n(),g(_t,{key:0,open:e(y),"onUpdate:open":P[6]||(P[6]=q=>J(y)?y.value=q:null),ui:{content:"w-72"}},{content:t(()=>[e(k)?(n(),i("div",Sn,[P[9]||(P[9]=s("div",{class:"flex items-center justify-between"},[s("span",{class:"font-medium text-sm"},"Browser notifications")],-1)),e(m)&&e(T)==="default"?(n(),i("p",wn,[a(Z,{variant:"link",size:"xs",class:"p-0",onClick:V},{default:t(()=>[...P[7]||(P[7]=[d(" Allow notifications ",-1)])]),_:1}),P[8]||(P[8]=d(" "+r(" ")+"in your browser to get alerts for this project. ",-1))])):e(m)&&e(T)==="denied"?(n(),i("p",Rn," Notifications are blocked. Check your browser settings to allow them. ")):e(m)?A("",!0):(n(),i("p",Dn,"Notifications are not supported in this browser.")),e(m)&&e(T)==="granted"?(n(),i(G,{key:3},[a(ft),s("div",An,[(n(!0),i(G,null,ae(e(Ke),q=>(n(),i("label",{key:q.value,class:"flex items-center gap-1.5 text-xs cursor-pointer"},[s("input",{type:"checkbox",checked:j(q.value),class:"accent-primary size-3",onChange:le=>f(q.value)},null,40,zn),d(" "+r(q.label),1)]))),128))])],64)):A("",!0)])):(n(),i("div",Un,[s("div",In,[s("span",Mn,[P[10]||(P[10]=d(" Notifications ",-1)),a(Te,{topic:"notifications.subscribe"})]),e(w)?A("",!0):(n(),g(Z,{key:0,size:"xs",icon:"i-lucide-plus",variant:"ghost",color:"neutral",disabled:e(b).length===0,onClick:P[0]||(P[0]=q=>w.value=!0)},{default:t(()=>[...P[11]||(P[11]=[d(" Add ",-1)])]),_:1},8,["disabled"]))]),e(p)?(n(),i("div",Fn,[a(Ye,{name:"i-lucide-sparkles",class:"size-3 inline-block mr-1 text-primary"}),P[12]||(P[12]=d(" Demo — notifications will appear as toasts in ~8 s. ",-1))])):e(b).length===0?(n(),i("div",Pn,[P[14]||(P[14]=d(" No channels configured.",-1)),P[15]||(P[15]=s("br",null,null,-1)),a(Ze,{to:"/settings/notifications",class:"text-primary underline"},{default:t(()=>[...P[13]||(P[13]=[d("Add one in Settings",-1)])]),_:1})])):A("",!0),e(N).length>0?(n(),i("div",En,[(n(!0),i(G,null,ae(e(N),q=>(n(),i(G,{key:q.id},[e(me)?.id===q.id?(n(),i("div",Bn,[a(je,{label:"Channel",size:"xs"},{default:t(()=>[a(Pe,{modelValue:e(be),"onUpdate:modelValue":P[1]||(P[1]=le=>J(be)?be.value=le:null),items:e(We),"value-key":"value",class:"w-full text-xs",size:"xs"},null,8,["modelValue","items"])]),_:1}),a(je,{label:"Events",size:"xs"},{default:t(()=>[s("div",Ln,[(n(!0),i(G,null,ae(e(Ke),le=>(n(),i("label",{key:le.value,class:"flex items-center gap-1.5 text-xs cursor-pointer"},[Vt(s("input",{type:"checkbox",value:le.value,"onUpdate:modelValue":P[2]||(P[2]=Qe=>J(_e)?_e.value=Qe:null),class:"accent-primary size-3"},null,8,Vn),[[Nt,e(_e)]]),d(" "+r(le.label),1)]))),128))])]),_:1}),s("div",Nn,[a(Z,{size:"xs",color:"neutral",variant:"ghost",onClick:mt},{default:t(()=>[...P[16]||(P[16]=[d("Cancel",-1)])]),_:1}),a(Z,{size:"xs",color:"primary",loading:e(Fe),disabled:!e(be)||e(_e).length===0,onClick:Y},{default:t(()=>[...P[17]||(P[17]=[d(" Save ",-1)])]),_:1},8,["loading","disabled"])])])):(n(),i("div",{key:1,class:ie(["flex items-center gap-2 rounded px-2 py-1.5 text-xs",pe(q)?"opacity-60":""])},[a(Ye,{name:qe(q.channel.type),class:"size-3.5 text-muted shrink-0"},null,8,["name"]),s("span",Kn,r(q.channel.name),1),a(Z,{icon:"i-lucide-pencil",color:"neutral",variant:"ghost",size:"xs",title:"Edit subscription",onClick:le=>dt(q)},null,8,["onClick"]),a(Z,{icon:pe(q)?"i-lucide-bell":"i-lucide-bell-off",color:"neutral",variant:"ghost",size:"xs",title:pe(q)?"Unmute":"Mute 7 days",onClick:le=>ne(q)},null,8,["icon","title","onClick"]),a(Z,{icon:"i-lucide-x",color:"error",variant:"ghost",size:"xs",title:"Unsubscribe",onClick:le=>pt(q.id)},null,8,["onClick"])],2))],64))),128))])):!e(w)&&e(b).length>0?(n(),i("div",On," Not subscribed to this project. ")):A("",!0),e(w)?(n(),i("div",qn,[a(je,{label:"Channel",size:"xs"},{default:t(()=>[a(Pe,{modelValue:e(H),"onUpdate:modelValue":P[3]||(P[3]=q=>J(H)?H.value=q:null),items:e(We),"value-key":"value",class:"w-full text-xs",size:"xs"},null,8,["modelValue","items"])]),_:1}),a(je,{label:"Events",size:"xs"},{default:t(()=>[s("div",Hn,[(n(!0),i(G,null,ae(e(Ke),q=>(n(),i("label",{key:q.value,class:"flex items-center gap-1.5 text-xs cursor-pointer"},[Vt(s("input",{type:"checkbox",value:q.value,"onUpdate:modelValue":P[4]||(P[4]=le=>J(de)?de.value=le:null),class:"accent-primary size-3"},null,8,Qn),[[Nt,e(de)]]),d(" "+r(q.label),1)]))),128))])]),_:1}),s("div",Gn,[a(Z,{size:"xs",color:"neutral",variant:"ghost",onClick:P[5]||(P[5]=q=>w.value=!1)},{default:t(()=>[...P[18]||(P[18]=[d("Cancel",-1)])]),_:1}),a(Z,{size:"xs",color:"primary",loading:e(Me),disabled:!e(H)||e(de).length===0,onClick:Oe},{default:t(()=>[...P[19]||(P[19]=[d(" Subscribe ",-1)])]),_:1},8,["loading","disabled"])])])):A("",!0)]))]),default:t(()=>[a(Z,{icon:e(He)?"i-lucide-bell-ring":"i-lucide-bell",size:"sm",color:e(He)?"primary":"neutral",variant:e(He)?"soft":"outline",title:"Notification subscriptions for this project"},null,8,["icon","color","variant"])]),_:1},8,["open"])):A("",!0)}}}),Jn=Object.assign(Xn,{__name:"SubscribeBell"}),Wn={class:"flex flex-wrap items-center justify-between gap-3"},Yn={class:"flex items-center gap-2 min-w-0 text-sm"},Zn={class:"text-xs break-all"},ea={key:1,class:"text-muted"},ta=oe({__name:"DesktopProjectLinkCard",props:{projectId:{}},setup(z){const C=z,{available:$,link:x}=Js(()=>C.projectId),_=I(null);ge(()=>x.value?.path,async c=>{_.value=c&&x.value?.exists?await Ws(c):null},{immediate:!0});const p=B(()=>Ys(_.value));return(c,U)=>{const F=Le,R=Ce,y=ke,h=Ue;return e($)?(n(),g(h,{key:0,class:"shrink-0",ui:{body:"p-3 sm:p-3"}},{default:t(()=>[s("div",Wn,[s("div",Yn,[a(F,{name:e(x)?e(x).exists?"i-lucide-folder-check":"i-lucide-folder-x":"i-lucide-folder-symlink",class:ie(["size-4 shrink-0",e(x)?e(x).exists?"text-success":"text-warning":"text-muted"])},null,8,["name","class"]),e(x)?(n(),i(G,{key:0},[s("code",Zn,r(e(x).path),1),e(x).exists?e(p)?(n(),g(R,{key:1,color:"success",variant:"subtle",size:"sm"},{default:t(()=>[...U[1]||(U[1]=[d("ready",-1)])]),_:1})):e(_)?(n(),g(R,{key:2,color:"warning",variant:"subtle",size:"sm"},{default:t(()=>[...U[2]||(U[2]=[d("needs setup",-1)])]),_:1})):A("",!0):(n(),g(R,{key:0,color:"warning",variant:"subtle",size:"sm"},{default:t(()=>[...U[0]||(U[0]=[d("missing",-1)])]),_:1}))],64)):(n(),i("span",ea," No local folder linked — link this project’s checkout to run tests from here and open files in your IDE. "))]),a(y,{size:"xs",color:"neutral",variant:"soft",icon:e(x)?"i-lucide-settings-2":"i-lucide-folder-plus",to:`/projects/${z.projectId}/edit#local-folder`,title:e(x)?"Manage the linked folder in project settings":"Link a folder in project settings"},{default:t(()=>[d(r(e(x)?"Manage":"Link folder"),1)]),_:1},8,["icon","to","title"])])]),_:1})):A("",!0)}}}),sa=Object.assign(ta,{__name:"DesktopProjectLinkCard"}),na={class:"w-full relative"},aa={key:0},oa={class:"p-2 text-sm text-gray-900 dark:text-gray-100"},la={class:"font-semibold mb-1"},ra={class:"capitalize mb-1"},ia={class:"space-y-0.5"},ca={class:"font-medium mt-1"},ua=oe({__name:"TestRunsChart",props:{testRuns:{},height:{default:300},markers:{default:()=>[]}},emits:["marker-click"],setup(z,{emit:C}){const $=z,x=C,_=B(()=>$.markers),p=B(()=>!$.testRuns||$.testRuns.length===0?[]:[...$.testRuns].sort((S,O)=>new Date(S.startTime).getTime()-new Date(O.startTime).getTime()).slice(-30).map(S=>({id:S.id,date:new Date(S.startTime),passed:S.passedTests||0,failed:S.failedTests||0,skipped:S.skippedTests||0,flaky:S.flakyTests||0,total:S.totalTests||0,status:S.status}))),c=f=>f.date,U=f=>f.passed,F=f=>f.failed,R=f=>f.skipped,y=f=>f.flaky,h=["rgb(34, 197, 94)","rgb(239, 68, 68)","rgb(245, 158, 11)","rgb(147, 51, 234)"],k=I(null),{tooltipData:T,tooltipPos:m,markerTooltip:v,markerTooltipPos:M,onRenderComplete:V}=Zt(k,p,{x:f=>f.date,series:[{y:f=>f.passed,color:h[0]},{y:f=>f.failed,color:h[1]},{y:f=>f.skipped,color:h[2]},{y:f=>f.flaky,color:h[3]}],onClick:f=>wt(`/test-runs/${f.id}`),markers:_,onMarkerClick:f=>x("marker-click",f.id)}),j=[{color:h[0],label:"Passed"},{color:h[1],label:"Failed"},{color:h[2],label:"Skipped"},{color:h[3],label:"Flaky"}];return(f,S)=>{const O=Xt,D=$e,Q=Yt;return n(),i("div",na,[e(p).length>0?(n(),i("div",aa,[a(e(Wt),{ref_key:"xyContainerRef",ref:k,data:e(p),height:z.height,padding:{top:10,right:10,bottom:0,left:0},"on-render-complete":e(V)},{default:t(()=>[a(e(Zs),{x:c,y:[U,F,R,y],color:h,"curve-type":e(jt).MonotoneX},null,8,["y","curve-type"]),a(e(Jt),{x:c,y:[U,F,R,y],color:h,"curve-type":e(jt).MonotoneX,"line-width":2},null,8,["y","curve-type"]),a(e(it),{type:"x","tick-format":N=>new Date(N).toLocaleDateString("en-US",{month:"short",day:"numeric"})},null,8,["tick-format"]),a(e(it),{type:"y",label:"Tests","tick-format":N=>N.toString()},null,8,["tick-format"])]),_:1},8,["data","height","on-render-complete"]),e(T)?(n(),i("div",{key:0,class:"fixed z-50 pointer-events-none bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 max-w-[260px]",style:qt({left:`${e(m).x}px`,top:`${e(m).y}px`})},[s("div",oa,[s("div",la,r(new Date(e(T).date).toLocaleDateString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})),1),s("div",ra,"Status: "+r(e(T).status),1),s("div",ia,[s("div",null,[S[0]||(S[0]=s("span",{class:"text-green-500 dark:text-green-400"},"●",-1)),d(" Passed: "+r(e(T).passed),1)]),s("div",null,[S[1]||(S[1]=s("span",{class:"text-red-500 dark:text-red-400"},"●",-1)),d(" Failed: "+r(e(T).failed),1)]),s("div",null,[S[2]||(S[2]=s("span",{class:"text-orange-500 dark:text-orange-400"},"●",-1)),d(" Skipped: "+r(e(T).skipped),1)]),s("div",null,[S[3]||(S[3]=s("span",{class:"text-purple-500 dark:text-purple-400"},"●",-1)),d(" Flaky: "+r(e(T).flaky),1)]),s("div",ca,"Total: "+r(e(T).total),1)]),S[4]||(S[4]=s("div",{class:"text-gray-400 dark:text-gray-500 text-xs mt-1"},"Click to view run details",-1))])],4)):A("",!0),a(O,{marker:e(v),pos:e(M)},null,8,["marker","pos"])])):(n(),g(D,{key:1,text:"No test run data available to display chart"})),a(Q,{items:j})])}}}),da=Object.assign(ua,{__name:"TestRunsChart"}),ma={class:"space-y-3"},pa={class:"min-w-0 space-y-1"},ga={class:"flex items-center gap-2 flex-wrap text-sm"},fa={key:0,class:"text-gray-500"},_a=["title"],va=["title"],ya={key:0,class:"text-xs text-gray-500 italic"},ha={class:"flex items-center gap-2 shrink-0"},xa=oe({__name:"ClusterMergeSuggestions",props:{projectId:{}},emits:["merged"],setup(z,{emit:C}){const $=z,x=C,_=Ae(),p=I([]),c=I(null);async function U(){try{p.value=await $fetch(`/api/projects/${$.projectId}/cluster-merge-suggestions`)}catch{p.value=[]}}ge(()=>$.projectId,U,{immediate:!0});async function F(y,h){c.value=y;try{await $fetch(`/api/cluster-merge-suggestions/${y}/${h}`,{method:"POST"}),_.add({title:h==="approve"?"Clusters merged":"Suggestion dismissed",color:"success"}),await U(),h==="approve"&&x("merged")}catch(k){_.add({title:"Action failed",description:String(k?.message??k),color:"error"})}finally{c.value=null}}const R=y=>y==null?"":`${Math.round(y*100)}% similar`;return(y,h)=>{const k=Ce,T=ke,m=Dt;return e(p).length?(n(),g(m,{key:0,icon:"i-lucide-git-merge",title:"Suggested merges",count:e(p).length,class:"mb-4"},{subtitle:t(()=>[...h[0]||(h[0]=[d(" Likely-duplicate clusters found by semantic analysis. Approving merges them into the older cluster. ",-1)])]),default:t(()=>[s("div",ma,[(n(!0),i(G,null,ae(e(p),v=>(n(),i("div",{key:v.id,class:"rounded-lg border border-default p-3 flex items-start justify-between gap-4"},[s("div",pa,[s("div",ga,[a(k,{color:v.method==="llm"?"primary":"neutral",variant:"subtle",size:"sm"},{default:t(()=>[d(r(v.method==="llm"?`AI · ${v.llmConfidence??""}`:"similarity"),1)]),_:2},1032,["color"]),R(v.score)?(n(),i("span",fa,r(R(v.score)),1)):A("",!0)]),s("p",{class:"text-sm truncate",title:v.clusterA?.signature||""},[h[1]||(h[1]=s("span",{class:"text-gray-400"},"A:",-1)),d(" "+r(v.clusterA?.signature||`#${v.id}`),1)],8,_a),s("p",{class:"text-sm truncate",title:v.clusterB?.signature||""},[h[2]||(h[2]=s("span",{class:"text-gray-400"},"B:",-1)),d(" "+r(v.clusterB?.signature||""),1)],8,va),v.llmReason?(n(),i("p",ya,r(v.llmReason),1)):A("",!0)]),s("div",ha,[a(T,{size:"sm",color:"primary",icon:"i-lucide-git-merge",loading:e(c)===v.id,onClick:M=>F(v.id,"approve")},{default:t(()=>[...h[3]||(h[3]=[d(" Merge ",-1)])]),_:1},8,["loading","onClick"]),a(T,{size:"sm",color:"neutral",variant:"ghost",icon:"i-lucide-x",disabled:e(c)===v.id,onClick:M=>F(v.id,"reject")},{default:t(()=>[...h[4]||(h[4]=[d(" Dismiss ",-1)])]),_:1},8,["disabled","onClick"])])]))),128))])]),_:1},8,["count"])):A("",!0)}}}),ba=Object.assign(xa,{__name:"ClusterMergeSuggestions"}),ka={class:"flex items-center justify-between"},$a={class:"text-sm text-gray-500 inline-flex items-center gap-1"},Ca={class:"min-w-0 space-y-0.5"},Ta={key:0,class:"text-xs text-gray-500 italic truncate"},ja={key:1,class:"text-gray-400 text-xs"},Sa={class:"space-y-1"},wa={class:"text-sm tabular-nums"},Ra={class:"text-sm tabular-nums"},Da={key:1,class:"text-gray-400 text-xs"},Aa={class:"text-sm text-gray-500 whitespace-nowrap"},za={key:0,class:"ml-1 text-xs text-gray-400"},Ua={class:"flex justify-end"},Ia=oe({__name:"FailureClustersList",props:{projectId:{}},async setup(z){let C,$;const x=z,_=I(void 0),{data:p,pending:c}=([C,$]=he(()=>xe(()=>{const R=new URLSearchParams;_.value&&R.set("status",_.value);const y=R.toString();return`/api/projects/${x.projectId}/failure-clusters${y?`?${y}`:""}`},{lazy:!0,server:!1,watch:[_]},"$fqv4nq7Mtw")),C=await C,$(),C),U=R=>un(R.fixVerification),F=[{accessorKey:"signature",header:E("Signature")},{accessorKey:"errorType",header:E("Type")},{accessorKey:"status",header:E("Status")},{accessorKey:"affectedTests",header:E("Tests")},{accessorKey:"occurrences",header:E("Occurrences")},{accessorKey:"diagnosis",header:"AI"},{accessorKey:"lastSeenAt",header:E("Last seen")},{id:"actions",header:"Actions"}];return(R,y)=>{const h=Xe,k=ze,T=Ve,m=Ce,v=Le,M=es,V=ke,j=Ie,f=Ne,S=$e,O=Ue;return n(),g(O,{"data-shot":"failure-clusters"},{header:t(()=>[s("div",ka,[s("p",$a,[y[1]||(y[1]=d(" Ongoing failure signatures grouped by normalized error. ",-1)),a(h,{topic:"cluster.concept"})]),a(k,{modelValue:e(_),"onUpdate:modelValue":y[0]||(y[0]=D=>J(_)?_.value=D:null),items:[{label:"All",value:void 0},{label:"Open",value:"open"},{label:"Resolved",value:"resolved"},{label:"Ignored",value:"ignored"}],size:"xs",class:"w-32"},null,8,["modelValue"])])]),default:t(()=>[a(f,{"min-width":"48rem",bleed:!1},{default:t(()=>[a(j,{data:e(p)??[],columns:F,loading:e(c)},{"actions-header":t(()=>[...y[2]||(y[2]=[s("div",{class:"text-right"},"Actions",-1)])]),"signature-cell":t(({row:D})=>[s("div",Ca,[a(T,{to:`/failure-clusters/${D.original.id}`,class:ie(["text-sm text-primary hover:underline truncate block",D.original.title?"":"font-mono"]),title:D.original.signature},{default:t(()=>[d(r(D.original.title||D.original.signature),1)]),_:2},1032,["to","class","title"]),D.original.triageNote?(n(),i("p",Ta,r(D.original.triageNote),1)):A("",!0)])]),"errorType-cell":t(({row:D})=>[D.original.errorType?(n(),g(m,{key:0,color:("clusterErrorTypeColor"in R?R.clusterErrorTypeColor:e(cn))(D.original.errorType),variant:"subtle",size:"sm"},{default:t(()=>[d(r(D.original.errorType),1)]),_:2},1032,["color"])):(n(),i("span",ja,"—"))]),"status-cell":t(({row:D})=>[s("div",Sa,[a(m,{color:("clusterStatusColor"in R?R.clusterStatusColor:e(rn))(D.original.status),variant:"subtle",size:"sm"},{default:t(()=>[d(r(D.original.status),1)]),_:2},1032,["color"]),U(D.original)?(n(),g(M,{key:0,text:U(D.original).hint},{default:t(()=>[a(m,{color:U(D.original).color,variant:"subtle",size:"sm",class:"gap-1"},{default:t(()=>[a(v,{name:U(D.original).icon,class:"size-3"},null,8,["name"]),d(" "+r(U(D.original).label),1)]),_:2},1032,["color"])]),_:2},1032,["text"])):A("",!0)])]),"affectedTests-cell":t(({row:D})=>[s("span",wa,r(D.original.affectedTests),1)]),"occurrences-cell":t(({row:D})=>[s("span",Ra,r(D.original.occurrences),1)]),"diagnosis-cell":t(({row:D})=>[D.original.diagnosis?.status==="completed"&&D.original.diagnosis.category?(n(),g(m,{key:0,color:"neutral",variant:"subtle",size:"sm",class:"gap-1"},{default:t(()=>[a(v,{name:"i-lucide-sparkles",class:"size-3"}),d(" "+r(D.original.diagnosis.category),1)]),_:2},1024)):(n(),i("span",Da,"—"))]),"lastSeenAt-cell":t(({row:D})=>[s("div",Aa,[a(T,{to:`/test-runs/${D.original.lastSeenRunId}`,class:"text-primary hover:underline"},{default:t(()=>[d(" run #"+r(D.original.lastSeenRunId),1)]),_:2},1032,["to"]),D.original.lastSeenAt?(n(),i("span",za," ("+r(("formatRelativeTime"in R?R.formatRelativeTime:e(At))(D.original.lastSeenAt))+") ",1)):A("",!0)])]),"actions-cell":t(({row:D})=>[s("div",Ua,[a(V,{to:`/failure-clusters/${D.original.id}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:t(()=>[...y[3]||(y[3]=[d(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data","loading"])]),_:1}),!e(c)&&e(p)&&e(p).length===0?(n(),g(S,{key:0,text:"No failure clusters recorded for this project.",padded:!1,class:"py-4"})):A("",!0)]),_:1})}}}),Ma=Object.assign(Ia,{__name:"FailureClustersList"}),Fa={class:"flex items-center justify-between"},Pa={class:"flex items-center gap-3"},Ea={class:"text-sm text-gray-500 inline-flex items-center gap-1"},Ba={class:"flex items-center gap-1.5"},La={class:"min-w-0 space-y-0.5"},Va={class:"flex items-center gap-2"},Na={class:"text-sm tabular-nums"},Ka={class:"text-sm tabular-nums"},Oa={key:1,class:"text-gray-400 text-xs"},qa={key:1,class:"text-gray-400 text-xs"},Ha={key:1,class:"text-gray-400 text-xs"},Qa={key:0,class:"text-sm text-gray-500"},Ga={key:1,class:"text-gray-400 text-xs"},Xa={class:"flex justify-end"},Ja={key:0,class:"text-sm text-gray-500 py-4 text-center"},Wa=oe({__name:"FlakyTestsList",props:{projectId:{},environment:{},projectName:{}},async setup(z){let C,$;const x=z,_=I(50),p=I([]),{data:c,pending:U}=([C,$]=he(()=>xe(()=>{const m=new URLSearchParams({runs:String(_.value)});return x.environment&&m.set("environment",x.environment),`/api/projects/${x.projectId}/flaky-tests?${m.toString()}`},{lazy:!0,server:!1,watch:[_,()=>x.environment]},"$BbmtLKIPAB")),C=await C,$(),C),F=B(()=>p.value.length===0?c.value??[]:(c.value??[]).filter(m=>p.value.includes(m.rootCause??"")));function R(m){return m>=60?"error":m>=30?"warning":"neutral"}function y(m){switch(m){case"timing":return"amber";case"network":return"red";case"assertion":return"blue";case"environment":return"purple";default:return"gray"}}function h(m){p.value.indexOf(m)>=0?p.value=p.value.filter(M=>M!==m):p.value=[...p.value,m]}const k=[{label:"Timing",value:"timing"},{label:"Network",value:"network"},{label:"Assertion",value:"assertion"},{label:"Environment",value:"environment"},{label:"Other",value:"other"}],T=[{accessorKey:"title",header:E("Test")},{accessorKey:"impact",header:E("Impact")},{accessorKey:"score",header:E("Score")},{accessorKey:"failureRate",header:E("Failure rate")},{accessorKey:"retryPassRuns",header:E("Retry passes")},{accessorKey:"alternations",header:E("Flips")},{accessorKey:"rootCause",header:"Root cause"},{accessorKey:"lastFlakeAt",header:E("Last flake")},{id:"actions",header:"Actions"}];return(m,v)=>{const M=Xe,V=Le,j=Ce,f=ke,S=ze,O=Ve,D=ss,Q=ut,N=Gt,ue=Ie,fe=Ne,b=Ue;return n(),g(b,{"data-shot":"flaky-table"},{header:t(()=>[s("div",Fa,[s("div",Pa,[s("p",Ea,[v[1]||(v[1]=d(" Tests that fail intermittently — detected by retry passes and status alternations ",-1)),a(M,{topic:"project.flaky-tests"})]),z.environment?(n(),g(j,{key:0,color:"neutral",variant:"subtle",size:"sm",class:"gap-1"},{default:t(()=>[a(V,{name:"i-lucide-layers",class:"size-3"}),d(" "+r(z.environment),1)]),_:1})):A("",!0),s("div",Ba,[(n(),i(G,null,ae(k,w=>a(f,{key:w.value,size:"xs",variant:e(p).includes(w.value)?"solid":"outline",color:(e(p).includes(w.value),"neutral"),onClick:H=>h(w.value)},{default:t(()=>[d(r(w.label),1)]),_:2},1032,["variant","color","onClick"])),64))])]),a(S,{modelValue:e(_),"onUpdate:modelValue":v[0]||(v[0]=w=>J(_)?_.value=w:null),items:[{label:"Last 20 runs",value:20},{label:"Last 50 runs",value:50},{label:"Last 100 runs",value:100}],size:"xs",class:"w-36"},null,8,["modelValue"])])]),default:t(()=>[a(fe,{"min-width":"52rem",bleed:!1},{default:t(()=>[a(ue,{data:e(F),columns:T,loading:e(U),sticky:"",class:"max-h-[32rem]"},{"actions-header":t(()=>[...v[2]||(v[2]=[s("div",{class:"text-right"},"Actions",-1)])]),"title-cell":t(({row:w})=>[s("div",La,[a(O,{to:`/test-run-cases/${w.original.latestRunsCaseId}`,class:"text-sm font-medium text-primary hover:underline truncate block",title:w.original.title},{default:t(()=>[d(r(w.original.title),1)]),_:2},1032,["to","title"]),a(D,{tags:w.original.tags,meta:{owner:w.original.owner??void 0,priority:("toTestPriority"in m?m.toTestPriority:e(dn))(w.original.priority)},"max-tags":3},null,8,["tags","meta"]),a(Q,{"file-path":w.original.filePath,"project-key":z.projectId,"project-name":z.projectName,class:"text-xs text-gray-400"},null,8,["file-path","project-key","project-name"])])]),"impact-cell":t(({row:w})=>[s("div",Va,[s("span",{class:ie(["inline-block w-2 h-2 rounded-full shrink-0",{"bg-red-500":w.original.wastedCiMinutes>=30,"bg-amber-500":w.original.wastedCiMinutes>=5&&w.original.wastedCiMinutes<30,"bg-green-500":w.original.wastedCiMinutes>=0&&w.original.wastedCiMinutes<5}])},null,2),s("span",Na,r(Math.round(w.original.wastedCiMinutes))+" min wasted",1)])]),"score-cell":t(({row:w})=>[a(j,{color:R(w.original.score),variant:"subtle",size:"sm"},{default:t(()=>[d(r(w.original.score),1)]),_:2},1032,["color"])]),"failureRate-cell":t(({row:w})=>[s("span",Ka,r(Math.round(w.original.failureRate*100))+"%",1)]),"retryPassRuns-cell":t(({row:w})=>[w.original.retryPassRuns?(n(),g(j,{key:0,color:"warning",variant:"outline",size:"sm"},{default:t(()=>[d(r(w.original.retryPassRuns)+" run"+r(w.original.retryPassRuns===1?"":"s"),1)]),_:2},1024)):(n(),i("span",Oa,"—"))]),"alternations-cell":t(({row:w})=>[w.original.alternations>=2?(n(),g(j,{key:0,color:"neutral",variant:"outline",size:"sm"},{default:t(()=>[d(r(w.original.alternations),1)]),_:2},1024)):(n(),i("span",qa,"—"))]),"rootCause-cell":t(({row:w})=>[w.original.rootCause?(n(),g(N,{key:0,text:w.original.rootCause,color:y(w.original.rootCause)},null,8,["text","color"])):(n(),i("span",Ha,"—"))]),"lastFlakeAt-cell":t(({row:w})=>[w.original.lastFlakeAt?(n(),i("span",Qa,r(("formatRelativeTime"in m?m.formatRelativeTime:e(At))(w.original.lastFlakeAt)),1)):(n(),i("span",Ga,"—"))]),"actions-cell":t(({row:w})=>[s("div",Xa,[a(f,{to:`/test-run-cases/${w.original.latestRunsCaseId}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:t(()=>[...v[3]||(v[3]=[d(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data","loading"])]),_:1}),!e(U)&&e(F).length===0?(n(),i("p",Ja," No flaky tests detected in the last "+r(e(_))+" runs. ",1)):A("",!0)]),_:1})}}}),Ya=Object.assign(Wa,{__name:"FlakyTestsList"}),Za={class:"w-full relative"},eo={key:0},to={class:"p-2 text-sm text-gray-900 dark:text-gray-100"},so={class:"font-semibold mb-1"},no={class:"capitalize mb-1"},ao={class:"space-y-0.5"},oo={class:"mt-1"},lo={key:0,class:"text-gray-400 dark:text-gray-500 text-xs"},ro=oe({__name:"PerformanceTrendChart",props:{data:{},height:{default:300},markers:{default:()=>[]}},emits:["marker-click"],setup(z,{emit:C}){const $=z,x=C,_=B(()=>$.markers),p=B(()=>!$.data||$.data.length===0?[]:$.data.map(j=>({id:j.id,date:new Date(j.startTime),duration:j.duration?Math.round(j.duration/1e3):null,avgTestDuration:j.avgTestDuration?Math.round(j.avgTestDuration/1e3):null,p90TestDuration:j.p90TestDuration?Math.round(j.p90TestDuration/1e3):null,commit:j.commit?j.commit.substring(0,7):null,status:j.status,totalTests:j.totalTests}))),c=j=>j.date,U=j=>j.duration??void 0,F=j=>j.avgTestDuration??void 0,R=j=>j.p90TestDuration??void 0,y=["rgb(59, 130, 246)","rgb(34, 197, 94)","rgb(249, 115, 22)"],h=I(null),{tooltipData:k,tooltipPos:T,markerTooltip:m,markerTooltipPos:v,onRenderComplete:M}=Zt(h,p,{x:j=>j.date,series:[{y:j=>j.duration,color:y[0]},{y:j=>j.avgTestDuration,color:y[1]},{y:j=>j.p90TestDuration,color:y[2]}],onClick:j=>wt(`/test-runs/${j.id}`),markers:_,onMarkerClick:j=>x("marker-click",j.id)}),V=[{color:y[0],label:"Total Duration"},{color:y[1],label:"Avg Test Duration"},{color:y[2],label:"P90 Test Duration"}];return(j,f)=>{const S=Xt,O=$e,D=Yt;return n(),i("div",Za,[e(p).length>0?(n(),i("div",eo,[a(e(Wt),{ref_key:"xyContainerRef",ref:h,data:e(p),height:z.height,padding:{top:10,right:10,bottom:0,left:0},"on-render-complete":e(M)},{default:t(()=>[a(e(Jt),{x:c,y:[U,F,R],color:y,"curve-type":e(jt).MonotoneX,"line-width":2},null,8,["y","curve-type"]),a(e(it),{type:"x","tick-format":Q=>new Date(Q).toLocaleDateString("en-US",{month:"short",day:"numeric"}),label:"Date"},null,8,["tick-format"]),a(e(it),{type:"y",label:"Duration (s)","tick-format":Q=>`${Q}s`},null,8,["tick-format"])]),_:1},8,["data","height","on-render-complete"]),e(k)?(n(),i("div",{key:0,class:"fixed z-50 pointer-events-none bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 max-w-[260px]",style:qt({left:`${e(T).x}px`,top:`${e(T).y}px`})},[s("div",to,[s("div",so,r(new Date(e(k).date).toLocaleDateString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})),1),s("div",no,"Status: "+r(e(k).status),1),s("div",ao,[s("div",null,[f[0]||(f[0]=s("span",{class:"text-blue-500 dark:text-blue-400"},"●",-1)),d(" Total: "+r(e(k).duration??"-")+"s ",1)]),s("div",null,[f[1]||(f[1]=s("span",{class:"text-green-500 dark:text-green-400"},"●",-1)),d(" Avg: "+r(e(k).avgTestDuration??"-")+"s ",1)]),s("div",null,[f[2]||(f[2]=s("span",{class:"text-orange-500 dark:text-orange-400"},"●",-1)),d(" P90: "+r(e(k).p90TestDuration??"-")+"s ",1)]),s("div",oo,"Tests: "+r(e(k).totalTests),1),e(k).commit?(n(),i("div",lo," Commit: "+r(e(k).commit),1)):A("",!0)]),f[3]||(f[3]=s("div",{class:"text-gray-400 dark:text-gray-500 text-xs mt-1"},"Click to view run details",-1))])],4)):A("",!0),a(S,{marker:e(m),pos:e(v)},null,8,["marker","pos"])])):(n(),g(O,{key:1,text:"No performance data available to display chart"})),a(D,{items:V})])}}}),io=Object.assign(ro,{__name:"PerformanceTrendChart"}),co={class:"min-w-0"},uo={class:"mt-1"},mo={class:"tabular-nums"},po={key:0,class:"ml-1 text-xs text-gray-500",title:"timeout ÷ p95"},go={class:"tabular-nums text-gray-500"},fo={key:0,class:"text-sm"},_o={key:1,class:"tabular-nums"},vo={class:"tabular-nums font-medium text-green-600 dark:text-green-400"},yo={class:"tabular-nums text-gray-500"},ho=oe({__name:"TimeoutOpportunitiesTable",props:{projectId:{},projectName:{}},async setup(z){let C,$;const x=z,{data:_,pending:p}=([C,$]=he(()=>xe(()=>`/api/projects/${x.projectId}/timeout-opportunities`,{lazy:!0,server:!1},"$zikJNhkkxJ")),C=await C,$(),C),c=B(()=>_.value??[]);function U(R){return R==null?"—":R<1e3?`${R}ms`:`${(R/1e3).toFixed(1)}s`}const F=[{accessorKey:"title",header:E("Test case")},{accessorKey:"kind",header:"Type"},{accessorKey:"timeout",header:E("Timeout")},{accessorKey:"p95",header:E("p95")},{accessorKey:"recommendedTimeout",header:"Recommendation"},{accessorKey:"estimatedSavingMs",header:E("Est. saving / failure")},{accessorKey:"runCount",header:E("Runs")}];return(R,y)=>{const h=Je,k=$e,T=Ve,m=ut,v=Ce,M=Ie,V=Ne,j=Ue;return n(),g(j,null,{header:t(()=>[...y[0]||(y[0]=[s("h2",{class:"text-xl font-semibold"},"Timeout opportunities",-1),s("p",{class:"text-sm text-gray-600 mt-1"},[d(" Tests whose configured timeout far exceeds their real duration, or that still carry a stale "),s("code",{class:"text-xs"},"test.slow()"),d(" mark — tightening these makes failures surface sooner. ")],-1)])]),default:t(()=>[e(p)?(n(),g(h,{key:0})):e(c).length===0?(n(),g(k,{key:1,text:"No timeout opportunities",description:"No oversized timeouts or stale test.slow() marks were found for this project."})):(n(),g(V,{key:2,"min-width":"52rem",bleed:!1},{default:t(()=>[a(M,{data:e(c),columns:F,sticky:"",class:"max-h-[32rem]"},{"title-cell":t(({row:f})=>[s("div",co,[a(T,{to:`/test-cases/${f.original.testCaseId}`,class:"font-medium truncate block hover:text-primary hover:underline"},{default:t(()=>[d(r(f.original.title),1)]),_:2},1032,["to"]),s("div",uo,[a(m,{"file-path":f.original.filePath,"project-key":z.projectId,"project-name":z.projectName,class:"text-xs"},null,8,["file-path","project-key","project-name"])])])]),"kind-cell":t(({row:f})=>[a(v,{color:f.original.kind==="oversized-timeout"?"warning":"info",variant:"subtle",size:"sm"},{default:t(()=>[d(r(f.original.kind==="oversized-timeout"?"Oversized timeout":"Stale test.slow()"),1)]),_:2},1032,["color"])]),"timeout-cell":t(({row:f})=>[s("span",mo,r(U(f.original.timeout)),1),f.original.headroomRatio!=null?(n(),i("span",po," ("+r(f.original.headroomRatio)+"×) ",1)):A("",!0)]),"p95-cell":t(({row:f})=>[s("span",go,r(U(f.original.p95)),1)]),"recommendedTimeout-cell":t(({row:f})=>[f.original.kind==="stale-slow"?(n(),i("span",fo,[...y[1]||(y[1]=[d("Remove ",-1),s("code",{class:"text-xs"},"test.slow()",-1)])])):(n(),i("span",_o,"Lower to ~"+r(U(f.original.recommendedTimeout)),1))]),"estimatedSavingMs-cell":t(({row:f})=>[s("span",vo,r(U(f.original.estimatedSavingMs)),1)]),"runCount-cell":t(({row:f})=>[s("span",yo,r(f.original.runCount),1)]),_:1},8,["data"])]),_:1}))]),_:1})}}}),xo=Object.assign(ho,{__name:"TimeoutOpportunitiesTable"}),bo={class:"flex items-center justify-between"},ko={class:"text-sm text-gray-500 inline-flex items-center gap-1"},$o={class:"truncate font-mono text-xs"},Co={class:"tabular-nums"},To={class:"tabular-nums text-gray-500"},jo={class:"tabular-nums text-gray-500"},So=oe({__name:"SpecHealthTable",props:{projectId:{}},async setup(z){let C,$;const x=z,_=I(30),{data:p,pending:c}=([C,$]=he(()=>xe(()=>`/api/projects/${x.projectId}/spec-health?days=${_.value}`,{lazy:!0,server:!1,watch:[_]},"$SX5aqvhtuX")),C=await C,$(),C),U=B(()=>p.value?.specs??[]);function F(m){return m>=.9?"bg-green-500":m>=.7?"bg-amber-500":m>0?"bg-red-500":"bg-gray-300 dark:bg-gray-600"}function R(m){return m>=.9?"text-green-600 dark:text-green-400":m>=.7?"text-amber-600 dark:text-amber-400":m>0?"text-red-600 dark:text-red-400":"text-gray-500"}function y(m){return`${Math.round(m*100)}%`}function h(m){return m<1e3?`${m}ms`:`${(m/1e3).toFixed(1)}s`}const k=[{label:"Last 7 days",value:7},{label:"Last 30 days",value:30},{label:"Last 90 days",value:90}],T=[{accessorKey:"prefix",header:E("Spec prefix")},{accessorKey:"passRate",header:E("Pass rate")},{accessorKey:"flakyRate",header:E("Flaky")},{accessorKey:"failureCount",header:E("Failures")},{accessorKey:"testCount",header:E("Tests")},{accessorKey:"avgDuration",header:E("Avg time")}];return(m,v)=>{const M=Xe,V=ze,j=Je,f=$e,S=Ve,O=Ie,D=Ne,Q=Ue;return n(),g(Q,null,{header:t(()=>[s("div",bo,[s("p",ko,[v[1]||(v[1]=d(" Spec-file health overview — pass rate, flaky rate, and failure count per spec prefix ",-1)),a(M,{topic:"project.spec-health"})]),a(V,{modelValue:e(_),"onUpdate:modelValue":v[0]||(v[0]=N=>J(_)?_.value=N:null),items:k,size:"xs",class:"w-32"},null,8,["modelValue"])])]),default:t(()=>[e(c)?(n(),g(j,{key:0})):e(U).length===0?(n(),g(f,{key:1,text:"No data",description:"No spec health data available for the selected period."})):(n(),g(D,{key:2,"min-width":"46rem",bleed:!1},{default:t(()=>[a(O,{data:e(U),columns:T,sticky:"",class:"max-h-[32rem]"},{"prefix-cell":t(({row:N})=>[a(S,{to:`/projects/${z.projectId}/test-cases?file=${encodeURIComponent(N.original.prefix)}`,class:"flex items-center gap-2 min-w-0 text-primary hover:underline",title:N.original.prefix},{default:t(()=>[s("span",{class:ie(["inline-block size-3 rounded shrink-0",F(N.original.passRate)])},null,2),s("span",$o,r(N.original.prefix),1)]),_:2},1032,["to","title"])]),"passRate-cell":t(({row:N})=>[s("span",{class:ie(["font-medium tabular-nums",R(N.original.passRate)])},r(y(N.original.passRate)),3)]),"flakyRate-cell":t(({row:N})=>[s("span",Co,r(Math.round(N.original.flakyRate*100))+"%",1)]),"failureCount-cell":t(({row:N})=>[s("span",{class:ie(["tabular-nums",N.original.failureCount>0?"text-red-600 dark:text-red-400":""])},r(N.original.failureCount),3)]),"testCount-cell":t(({row:N})=>[s("span",To,r(N.original.testCount),1)]),"avgDuration-cell":t(({row:N})=>[s("span",jo,r(h(N.original.avgDuration)),1)]),_:1},8,["data"])]),_:1}))]),_:1})}}}),wo=Object.assign(So,{__name:"SpecHealthTable"}),Ro={class:"flex items-center justify-between"},Do={key:2},Ao={class:"grid grid-cols-3 gap-3 mb-4"},zo={class:"rounded-lg border border-gray-200 dark:border-gray-800 p-3"},Uo={class:"text-2xl font-semibold tabular-nums"},Io={class:"rounded-lg border border-gray-200 dark:border-gray-800 p-3"},Mo={class:"text-2xl font-semibold tabular-nums"},Fo={class:"rounded-lg border border-gray-200 dark:border-gray-800 p-3"},Po={class:"text-2xl font-semibold tabular-nums"},Eo=["title"],Bo={class:"tabular-nums"},Lo={class:"tabular-nums text-gray-500"},Vo=["title"],No=oe({__name:"AiStepCoverage",props:{projectId:{}},async setup(z){let C,$;const x=z,_=I(30),{data:p,pending:c}=([C,$]=he(()=>xe(()=>`/api/projects/${x.projectId}/ai-steps?days=${_.value}`,{lazy:!0,server:!1,watch:[_]},"$XNuZ38B1nb")),C=await C,$(),C),U=B(()=>p.value?.artifacts??[]),F=B(()=>p.value?.summary??{artifactCount:0,testCount:0,runCount:0,replayCount:0});function R(T){const m=T.split(/[\\/]/);return m[m.length-1]||T}function y(T){if(!T)return"—";const m=new Date(T).getTime();if(!Number.isFinite(m))return"—";const v=Math.max(0,Math.round((Date.now()-m)/1e3));if(v<60)return"just now";const M=Math.round(v/60);if(M<60)return`${M}m ago`;const V=Math.round(M/60);return V<24?`${V}h ago`:`${Math.round(V/24)}d ago`}const h=[{label:"Last 7 days",value:7},{label:"Last 30 days",value:30},{label:"Last 90 days",value:90}],k=[{accessorKey:"entry",header:E("Artifact")},{accessorKey:"testCount",header:E("Tests")},{accessorKey:"replayCount",header:E("Replays")},{accessorKey:"lastSeen",header:E("Last seen")}];return(T,m)=>{const v=ze,M=Je,V=$e,j=Ie,f=Ne,S=Ue;return n(),g(S,null,{header:t(()=>[s("div",Ro,[m[1]||(m[1]=s("p",{class:"text-sm text-gray-500"},[d(" AI-step liveness — which committed "),s("code",{class:"text-xs"},"piwiLocator"),d(" / "),s("code",{class:"text-xs"},"piwiRun"),d(" artifacts were replayed, and when they were last seen ")],-1)),a(v,{modelValue:e(_),"onUpdate:modelValue":m[0]||(m[0]=O=>J(_)?_.value=O:null),items:h,size:"xs",class:"w-32"},null,8,["modelValue"])])]),default:t(()=>[e(c)?(n(),g(M,{key:0})):e(U).length===0?(n(),g(V,{key:1,text:"No AI steps",description:"No committed AI-step artifacts were replayed in the selected period. Author them with page.piwiLocator / page.piwiRun in resolve mode."})):(n(),i("div",Do,[s("div",Ao,[s("div",zo,[s("div",Uo,r(e(F).artifactCount),1),m[2]||(m[2]=s("div",{class:"text-xs text-gray-500"},"Artifacts replayed",-1))]),s("div",Io,[s("div",Mo,r(e(F).testCount),1),m[3]||(m[3]=s("div",{class:"text-xs text-gray-500"},"Tests using AI steps",-1))]),s("div",Fo,[s("div",Po,r(e(F).replayCount),1),m[4]||(m[4]=s("div",{class:"text-xs text-gray-500"},"Total replays",-1))])]),a(f,{"min-width":"40rem",bleed:!1},{default:t(()=>[a(j,{data:e(U),columns:k,sticky:"",class:"max-h-[32rem]"},{"entry-cell":t(({row:O})=>[s("span",{class:"font-mono text-xs truncate block max-w-[28rem]",title:O.original.entry},r(R(O.original.entry)),9,Eo)]),"testCount-cell":t(({row:O})=>[s("span",Bo,r(O.original.testCount),1)]),"replayCount-cell":t(({row:O})=>[s("span",Lo,r(O.original.replayCount),1)]),"lastSeen-cell":t(({row:O})=>[s("span",{class:"tabular-nums text-gray-500",title:O.original.lastSeen||""},r(y(O.original.lastSeen)),9,Vo)]),_:1},8,["data"])]),_:1})]))]),_:1})}}}),Ko=Object.assign(No,{__name:"AiStepCoverage"}),Oo={class:"space-y-6"},qo={class:"w-full text-sm"},Ho={class:"px-3 py-2 min-w-0"},Qo={class:"text-xs text-muted"},Go={class:"px-3 py-2 text-muted"},Xo={class:"px-3 py-2 whitespace-nowrap"},Jo={key:1,class:"text-xs text-muted"},Wo={key:2,class:"text-xs"},Yo={class:"px-3 py-2 whitespace-nowrap text-muted"},Zo={class:"px-3 py-2 text-right"},el={class:"w-full text-sm"},tl={class:"px-3 py-2 min-w-0"},sl={class:"text-xs text-muted"},nl={class:"px-3 py-2 text-right whitespace-nowrap"},al=oe({__name:"QuarantineTable",props:{projectId:{},projectName:{}},async setup(z){let C,$;const x=z,_=Ae(),p=I(null),{data:c,status:U,error:F,refresh:R}=([C,$]=he(()=>xe(()=>`/api/projects/${x.projectId}/quarantine`,"$BSyDdCMaDx")),C=await C,$(),C);function y(T){const m=Math.round(T/36e5);return m<48?`${Math.max(1,m)}h`:`${Math.round(m/24)}d`}async function h(T,m){p.value=T;try{await $fetch(`/api/projects/${x.projectId}/quarantine`,{method:"POST",body:{testCaseId:T,reason:m,source:"proposed"}}),_.add({title:"Quarantined",color:"success"}),await R()}catch{_.add({title:"Could not quarantine that test",color:"error"})}finally{p.value=null}}async function k(T){p.value=T;try{await $fetch(`/api/projects/${x.projectId}/quarantine/${T}`,{method:"DELETE"}),_.add({title:"Released",color:"success"}),await R()}catch{_.add({title:"Could not release that test",color:"error"})}finally{p.value=null}}return(T,m)=>{const v=Je,M=gn,V=fn,j=_n,f=$e,S=Ve,O=ss,D=ut,Q=Ce,N=ke,ue=Ne,fe=Dt;return n(),i("div",Oo,[a(fe,{title:"Quarantine",icon:"i-lucide-shield-alert",count:e(c)?.debt.active,help:"project.quarantine"},{subtitle:t(()=>[...m[0]||(m[0]=[d(" A quarantined test keeps running and keeps reporting — it is excluded from the CI gate's verdict and nothing else. That is what lets it earn its way back out. ",-1)])]),default:t(()=>[e(U)==="pending"?(n(),g(v,{key:0})):e(F)?(n(),g(M,{key:1,text:String(e(F))},null,8,["text"])):(n(),i(G,{key:2},[e(c)&&e(c).debt.active>0?(n(),g(j,{key:0,class:"mb-4"},{default:t(()=>[a(V,{label:"Quarantined",value:e(c).debt.active},null,8,["value"]),a(V,{label:"Ready to release",value:e(c).debt.readyToRelease,"value-class":e(c).debt.readyToRelease>0?"text-green-600 dark:text-green-400":"",hint:"earned their way out"},null,8,["value","value-class"]),a(V,{label:"Still failing",value:e(c).debt.stillFailing,hint:"no passing streak"},null,8,["value"]),a(V,{label:"Oldest",value:y(e(c).debt.oldestAgeMs),size:"sm"},null,8,["value"])]),_:1})):A("",!0),!e(c)||e(c).entries.length===0?(n(),g(f,{key:1,icon:"i-lucide-shield-check",text:"Nothing quarantined. Tests you quarantine appear here with their progress back out."})):(n(),g(ue,{key:2},{default:t(()=>[s("table",qo,[m[2]||(m[2]=s("thead",{class:"text-left text-xs text-muted"},[s("tr",null,[s("th",{class:"px-3 py-2"},"Test"),s("th",{class:"px-3 py-2"},"Reason"),s("th",{class:"px-3 py-2 whitespace-nowrap"},"Streak"),s("th",{class:"px-3 py-2 whitespace-nowrap"},"Age"),s("th",{class:"px-3 py-2 text-right"},"Actions")])],-1)),s("tbody",null,[(n(!0),i(G,null,ae(e(c).entries,b=>(n(),i("tr",{key:b.id,class:"border-t border-default"},[s("td",Ho,[a(S,{to:`/test-cases/${b.testCaseId}`,class:"text-primary hover:underline font-medium"},{default:t(()=>[d(r(b.title),1)]),_:2},1032,["to"]),a(O,{tags:b.tags,meta:{owner:b.owner??void 0},"max-tags":3,class:"ml-1"},null,8,["tags","meta"]),s("div",Qo,[a(D,{"file-path":b.filePath,"project-key":z.projectId,"project-name":z.projectName},null,8,["file-path","project-key","project-name"])])]),s("td",Go,r(b.reason||"—"),1),s("td",Xo,[b.releaseProposed?(n(),g(Q,{key:0,color:"success",variant:"soft",size:"xs"},{default:t(()=>[d(r(b.consecutivePasses)+" green — ready ",1)]),_:2},1024)):b.runsSinceQuarantine===0?(n(),i("span",Jo,"not run yet")):(n(),i("span",Wo,r(b.consecutivePasses)+" / "+r(e(c).releaseAfterConsecutivePasses),1))]),s("td",Yo,r(y(b.ageMs)),1),s("td",Zo,[a(N,{size:"xs",color:b.releaseProposed?"primary":"neutral",variant:"soft",loading:e(p)===b.testCaseId,onClick:w=>k(b.testCaseId)},{default:t(()=>[...m[1]||(m[1]=[d(" Release ",-1)])]),_:1},8,["color","loading","onClick"])])]))),128))])])]),_:1}))],64))]),_:1},8,["count"]),e(c)&&e(c).candidates.length>0?(n(),g(fe,{key:0,title:"Worth quarantining",icon:"i-lucide-lightbulb",count:e(c).candidates.length},{subtitle:t(()=>[...m[3]||(m[3]=[d(" Ranked by the CI minutes their flakiness wastes, not by how often they flake — a test that flakes constantly but finishes instantly costs nothing. ",-1)])]),default:t(()=>[a(ue,null,{default:t(()=>[s("table",el,[s("tbody",null,[(n(!0),i(G,null,ae(e(c).candidates,b=>(n(),i("tr",{key:b.testCaseId,class:"border-t border-default"},[s("td",tl,[a(S,{to:`/test-cases/${b.testCaseId}`,class:"text-primary hover:underline font-medium"},{default:t(()=>[d(r(b.title),1)]),_:2},1032,["to"]),s("div",sl,r(b.rationale),1)]),s("td",nl,[a(N,{size:"xs",color:"neutral",variant:"soft",loading:e(p)===b.testCaseId,onClick:w=>h(b.testCaseId,b.rationale)},{default:t(()=>[...m[4]||(m[4]=[d(" Quarantine ",-1)])]),_:1},8,["loading","onClick"])])]))),128))])])]),_:1})]),_:1},8,["count"])):A("",!0)])}}}),ol=Object.assign(al,{__name:"QuarantineTable"}),ll={class:"space-y-4"},rl={class:"grid grid-cols-1 sm:grid-cols-2 gap-4"},il={id:"marker-environments"},cl=["value"],ul=oe({__name:"MarkerFormModal",props:{open:{type:Boolean},projectId:{},marker:{},environments:{}},emits:["update:open","saved"],setup(z,{emit:C}){const $=z,x=C,_=Ae(),p=xn.map(h=>({label:h.label,value:h.id,icon:h.icon})),c=Es({label:"",occurredAt:"",category:Ct,environment:"",description:""}),U=B(()=>!!$.marker),F=I(!1);function R(h){const k=new Date(h),T=m=>String(m).padStart(2,"0");return`${k.getFullYear()}-${T(k.getMonth()+1)}-${T(k.getDate())}T${T(k.getHours())}:${T(k.getMinutes())}`}ge(()=>$.open,h=>{h&&($.marker?(c.label=$.marker.label,c.occurredAt=R($.marker.occurredAt),c.category=$.marker.category||Ct,c.environment=$.marker.environment??"",c.description=$.marker.description??""):(c.label="",c.occurredAt=R(new Date),c.category=Ct,c.environment="",c.description=""))});async function y(){if(!c.label.trim()){_.add({title:"Label is required",color:"error"});return}if(!c.occurredAt){_.add({title:"Date is required",color:"error"});return}F.value=!0;const h={label:c.label.trim(),occurredAt:new Date(c.occurredAt).toISOString(),category:c.category,environment:c.environment.trim()||null,description:c.description.trim()||null};try{$.marker?(await $fetch(`/api/markers/${$.marker.id}`,{method:"PUT",body:h}),_.add({title:"Marker updated",color:"success"})):(await $fetch(`/api/projects/${$.projectId}/markers`,{method:"POST",body:h}),_.add({title:"Marker created",color:"success"})),x("update:open",!1),x("saved")}catch(k){_.add({title:U.value?"Failed to update marker":"Failed to create marker",description:ts(k),color:"error"})}finally{F.value=!1}}return(h,k)=>{const T=Ht,m=Qt,v=ze,M=hn,V=ke,j=zt,f=Rt;return n(),g(f,null,{default:t(()=>[a(j,{open:z.open,title:e(U)?"Edit marker":"Add marker","onUpdate:open":k[6]||(k[6]=S=>x("update:open",S))},{body:t(()=>[s("div",ll,[a(m,{label:"Label",name:"label",required:""},{default:t(()=>[a(T,{modelValue:e(c).label,"onUpdate:modelValue":k[0]||(k[0]=S=>e(c).label=S),placeholder:"e.g. Migrated CI to new runners",class:"w-full"},null,8,["modelValue"])]),_:1}),s("div",rl,[a(m,{label:"Date & time",name:"occurredAt",required:""},{default:t(()=>[a(T,{modelValue:e(c).occurredAt,"onUpdate:modelValue":k[1]||(k[1]=S=>e(c).occurredAt=S),type:"datetime-local",class:"w-full"},null,8,["modelValue"])]),_:1}),a(m,{label:"Category",name:"category"},{default:t(()=>[a(v,{modelValue:e(c).category,"onUpdate:modelValue":k[2]||(k[2]=S=>e(c).category=S),items:e(p),class:"w-full"},null,8,["modelValue","items"])]),_:1})]),a(m,{label:"Environment",name:"environment",help:"Optional. Leave empty to apply to all environments."},{default:t(()=>[a(T,{modelValue:e(c).environment,"onUpdate:modelValue":k[3]||(k[3]=S=>e(c).environment=S),list:"marker-environments",placeholder:"e.g. production",class:"w-full"},null,8,["modelValue"]),s("datalist",il,[(n(!0),i(G,null,ae(z.environments||[],S=>(n(),i("option",{key:S,value:S},null,8,cl))),128))])]),_:1}),a(m,{label:"Description",name:"description"},{default:t(()=>[a(M,{modelValue:e(c).description,"onUpdate:modelValue":k[4]||(k[4]=S=>e(c).description=S),rows:3,placeholder:"Optional details",class:"w-full"},null,8,["modelValue"])]),_:1})])]),footer:t(()=>[a(V,{color:"neutral",variant:"ghost",label:"Cancel",onClick:k[5]||(k[5]=S=>x("update:open",!1))}),a(V,{label:e(U)?"Save changes":"Add marker",icon:e(U)?"i-lucide-check":"i-lucide-plus",loading:e(F),onClick:y},null,8,["label","icon","loading"])]),_:1},8,["open","title"])]),_:1})}}}),dl=Object.assign(ul,{__name:"MarkerFormModal"}),ml={class:"md:hidden space-y-3"},pl={class:"flex items-start justify-between gap-2"},gl={key:0,class:"flex gap-1 shrink-0"},fl={class:"text-sm text-muted"},_l={key:0,class:"text-xs"},vl={key:1,class:"text-sm text-muted"},yl={class:"whitespace-nowrap"},hl={class:"text-sm"},xl={class:"text-xs text-muted"},bl={class:"font-medium flex items-center gap-1"},kl={key:0,class:"text-xs text-muted line-clamp-1"},$l={key:1,class:"text-xs text-muted"},Cl={key:0,class:"flex gap-1 justify-end"},Tl=oe({__name:"ProjectTimeline",props:{projectId:{},markers:{},environments:{},canEdit:{type:Boolean},focusMarkerId:{}},emits:["changed","clear-focus"],setup(z,{emit:C}){const $=z,x=C,_=Ae(),p=B(()=>[...$.markers].sort((v,M)=>+new Date(M.occurredAt)-+new Date(v.occurredAt))),c=[{accessorKey:"occurredAt",header:"When"},{accessorKey:"category",header:"Category"},{accessorKey:"label",header:"Label"},{accessorKey:"environment",header:"Environment"},{accessorKey:"actions",header:""}],U=I(!1),F=I(null);function R(){F.value=null,U.value=!0}function y(v){F.value=v,U.value=!0}ge(()=>$.focusMarkerId,v=>{if(v==null)return;const M=$.markers.find(V=>V.id===v);M&&y(M),x("clear-focus")},{immediate:!0});const h=I(!1),k=I(null);function T(v){k.value=v,h.value=!0}async function m(){const v=k.value;if(h.value=!1,k.value=null,!!v)try{await $fetch(`/api/markers/${v.id}`,{method:"DELETE"}),_.add({title:"Marker deleted",color:"success"}),x("changed")}catch(M){_.add({title:"Failed to delete marker",description:ts(M),color:"error"})}}return(v,M)=>{const V=ke,j=$e,f=yn,S=Ce,O=Le,D=Ie,Q=dl,N=zt,ue=Rt,fe=Dt;return n(),g(fe,{title:"Timeline markers",count:z.markers.length,icon:"i-lucide-milestone",help:"project.timeline",subtitle:"Dated events overlaid on the analytics charts"},{actions:t(()=>[z.canEdit?(n(),g(V,{key:0,label:"Add marker",icon:"i-lucide-plus",size:"sm",onClick:R})):A("",!0)]),default:t(()=>[z.markers.length===0?(n(),g(j,{key:0,icon:"i-lucide-milestone",text:"No markers yet. Add a deploy, config change, or incident to see it on the charts."})):(n(),i(G,{key:1},[s("div",ml,[(n(!0),i(G,null,ae(e(p),b=>(n(),i("div",{key:b.id,class:"rounded-lg border border-default p-3 space-y-2"},[s("div",pl,[a(f,{marker:b},null,8,["marker"]),z.canEdit?(n(),i("div",gl,[a(V,{icon:"i-lucide-pencil",color:"neutral",variant:"ghost",size:"xs",onClick:w=>y(b)},null,8,["onClick"]),a(V,{icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"xs",onClick:w=>T(b)},null,8,["onClick"])])):A("",!0)]),s("div",fl,r(("prettyDateFormat"in v?v.prettyDateFormat:e(ct))(b.occurredAt)),1),b.environment?(n(),i("div",_l,[a(S,{color:"neutral",variant:"subtle",size:"xs"},{default:t(()=>[d(r(b.environment),1)]),_:2},1024)])):A("",!0),b.description?(n(),i("p",vl,r(b.description),1)):A("",!0)]))),128))]),a(D,{data:e(p),columns:c,class:"hidden md:block"},{"occurredAt-cell":t(({row:b})=>[s("div",yl,[s("div",hl,r(("prettyDateFormat"in v?v.prettyDateFormat:e(ct))(b.original.occurredAt)),1),s("div",xl,r(("formatRelativeTime"in v?v.formatRelativeTime:e(At))(b.original.occurredAt)),1)])]),"category-cell":t(({row:b})=>[a(S,{color:e(Tt)(b.original.category).color,variant:"subtle",size:"sm",class:"gap-1"},{default:t(()=>[a(O,{name:e(Tt)(b.original.category).icon,class:"size-3"},null,8,["name"]),d(" "+r(e(Tt)(b.original.category).label),1)]),_:2},1032,["color"])]),"label-cell":t(({row:b})=>[s("div",null,[s("div",bl,[d(r(b.original.label)+" ",1),b.original.source==="auto"?(n(),g(O,{key:0,name:"i-lucide-sparkles",class:"size-3 text-muted",title:"Automatically detected"})):A("",!0)]),b.original.description?(n(),i("div",kl,r(b.original.description),1)):A("",!0)])]),"environment-cell":t(({row:b})=>[b.original.environment?(n(),g(S,{key:0,color:"neutral",variant:"subtle",size:"xs"},{default:t(()=>[d(r(b.original.environment),1)]),_:2},1024)):(n(),i("span",$l,"All"))]),"actions-cell":t(({row:b})=>[z.canEdit?(n(),i("div",Cl,[a(V,{icon:"i-lucide-pencil",color:"neutral",variant:"ghost",size:"sm",onClick:w=>y(b.original)},null,8,["onClick"]),a(V,{icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"sm",onClick:w=>T(b.original)},null,8,["onClick"])])):A("",!0)]),_:1},8,["data"])],64)),a(Q,{open:e(U),"onUpdate:open":M[0]||(M[0]=b=>J(U)?U.value=b:null),"project-id":z.projectId,marker:e(F),environments:z.environments,onSaved:M[1]||(M[1]=b=>x("changed"))},null,8,["open","project-id","marker","environments"]),a(ue,null,{default:t(()=>[a(N,{open:e(h),title:"Delete marker","onUpdate:open":M[3]||(M[3]=b=>h.value=b)},{body:t(()=>[s("p",null,[M[4]||(M[4]=d(" Delete marker ",-1)),e(k)?(n(),g(f,{key:0,marker:e(k),class:"inline-flex align-middle"},null,8,["marker"])):A("",!0),M[5]||(M[5]=d("? This can't be undone. ",-1))])]),footer:t(()=>[a(V,{color:"neutral",variant:"ghost",label:"Cancel",onClick:M[2]||(M[2]=b=>h.value=!1)}),a(V,{color:"error",label:"Delete",icon:"i-lucide-trash-2",onClick:m})]),_:1},8,["open"])]),_:1})]),_:1},8,["count"])}}}),jl=Object.assign(Tl,{__name:"ProjectTimeline"}),Sl={class:"flex flex-col h-full overflow-y-auto gap-4"},wl={key:0,class:"pb-0 space-y-4"},Rl={key:0,class:"text-gray-600"},Dl={key:1,class:"flex flex-wrap gap-1 mt-2"},Al={class:"flex flex-wrap items-center gap-3 mb-4"},zl={class:"inline-flex items-center gap-1"},Ul=["onClick"],Il={key:0,class:"flex items-center gap-3 px-3 py-2 mb-3 rounded-lg bg-primary-50 dark:bg-primary-900/20 border border-primary-200 dark:border-primary-800"},Ml={class:"text-sm text-primary-700 dark:text-primary-300"},Fl={key:1,class:"text-xs text-primary-500"},Pl=["checked","onClick"],El={class:"flex items-center gap-2"},Bl=["href","onClick"],Ll={key:0,class:"text-xs text-gray-500 dark:text-gray-400 truncate max-w-32"},Vl={class:"inline-flex items-center gap-1"},Nl={key:0,class:"flex items-center gap-1"},Kl={class:"text-xs text-gray-600"},Ol={key:0,class:"flex items-center gap-1 flex-wrap"},ql={key:0,class:"text-xs font-medium bg-gray-100 dark:bg-gray-800 px-1.5 py-0.5 rounded"},Hl={key:1,class:"text-xs text-gray-500"},Ql={class:"space-y-1"},Gl={class:"flex justify-end gap-2"},Xl={key:2,class:"text-center py-8 text-gray-500"},Jl={class:"text-xs text-gray-400 max-w-sm"},Wl={class:"bg-gray-100 dark:bg-gray-800 px-1 rounded"},Yl={class:"flex flex-wrap items-center gap-3"},Zl={class:"text-xl font-semibold inline-flex items-center gap-1"},er={class:"font-medium"},tr={class:"mt-1"},sr={key:0,class:"text-red-600 font-medium"},nr={key:1,class:"text-green-600 font-medium"},ar={key:2,class:"text-gray-500"},or={key:2,class:"text-center py-8 text-red-500"},lr={key:3,class:"text-center py-8 text-gray-500"},rr={class:"flex items-center justify-between"},ir={class:"text-xl font-semibold inline-flex items-center gap-1"},cr={class:"space-y-4"},ur={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},dr={key:0,class:"text-center py-4 text-gray-500"},mr={key:1,class:"space-y-4"},pr={class:"flex gap-4 text-sm"},gr={key:0,class:"text-gray-400"},fr={key:0,class:"text-gray-400"},_r={key:1,class:"text-gray-400"},vr={key:1,class:"text-gray-400"},yr={key:0,class:"text-gray-400"},hr={key:0,class:"text-gray-400"},xr={key:2,class:"text-center py-8 text-gray-500"},br={key:3,class:"text-center py-8 text-gray-500"},kr={class:"flex items-center justify-between"},$r={class:"text-sm text-gray-600 inline-flex items-center gap-1"},Cr={class:"space-y-4"},Tr={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},jr={key:0,class:"text-center py-8 text-gray-500"},Sr={key:1,class:"space-y-4"},wr={class:"space-y-2"},Rr={class:"flex flex-wrap gap-4 text-sm"},Dr={key:3,class:"text-sm text-gray-500"},Ar={class:"flex flex-wrap gap-4 text-sm"},zr={key:0,class:"text-gray-400"},Ur={key:0,class:"text-gray-400"},Ir={key:1,class:"text-gray-400"},Mr={key:1,class:"text-gray-400"},Fr={key:0,class:"text-gray-400"},Pr={key:0,class:"text-gray-400"},Er={key:2,class:"text-center py-8 text-gray-500"},Br={key:3,class:"text-center py-8 text-gray-500"},Lr={class:"flex items-center justify-between"},Vr={class:"text-sm text-gray-600 inline-flex items-center gap-1"},Nr={key:0,class:"space-y-2"},Kr={class:"font-medium text-sm"},Or={class:"text-xs text-muted flex items-center gap-2"},qr={key:0,class:"italic"},Hr={key:1,class:"text-xs text-muted italic"},Qr={key:1,class:"text-center py-8 text-muted text-sm"},Gr={class:"space-y-4"},Xr={class:"text-sm text-gray-600 dark:text-gray-400"},Jr={class:"block text-sm font-medium mb-1"},Wr={class:"bg-gray-100 dark:bg-gray-800 px-1 rounded"},ac=oe({__name:"index",async setup(z){let C,$;const x=Bs(),_=Ls(),p=x.params.id,{data:c,refresh:U}=([C,$]=he(()=>xe(`/api/projects/${p}`,"$F60FKvNOBL")),C=await C,$(),C);Vs(B(()=>({title:`${c.value?.label||c.value?.name||"Project"} — Piwi Dashboard`})));const F=Ae(),R=I(null),y=I(null),{isAdmin:h,isReporter:k}=Ot(),T=St(),m=B(()=>!T.public.authEnabled||h.value),v=m,M=I(!1),V=I(""),j=I(!1),f=B(()=>V.value===c.value?.name);async function S(){if(f.value){j.value=!0;try{await $fetch(`/api/projects/${p}`,{method:"DELETE"}),F.add({title:"Project deleted",color:"success"}),await Ks(),await _.push("/")}catch(u){const o=u&&typeof u=="object"&&"data"in u?u.data?.message:void 0;F.add({title:"Delete failed",description:o||"An error occurred",color:"error"}),j.value=!1}}}$n(U);async function O(u){y.value=null,R.value=u;try{await $fetch(`/api/test-runs/${u}`,{method:"DELETE"}),F.add({title:"Test run deleted",color:"success"}),await U()}catch(o){const L=o&&typeof o=="object"&&"data"in o?o.data?.message:void 0;F.add({title:"Delete failed",description:L||"An error occurred",color:"error"})}finally{R.value=null}}const D=I([]),Q=I([]),N=I([]),ue=B(()=>{const u=new Map(D.value.map(L=>[L.id,L])),o=[];for(const L of Q.value){if(L.role==="administrator")continue;const X=u.get(L.id);o.push({id:L.id,username:L.username,name:L.name??null,role:L.role,global:X?.global??!1,hasAccess:!!X})}for(const L of D.value)L.role==="administrator"&&o.push({...L,hasAccess:!0});return o}),fe=B(()=>{const u=D.value.filter(L=>L.role!=="administrator"&&!L.global).map(L=>L.id).sort(),o=[...N.value].sort();return JSON.stringify(u)!==JSON.stringify(o)});ge(()=>c.value?.id,async u=>{if(!(!u||!h.value))try{const[o,L]=await Promise.all([$fetch(`/api/projects/${p}/members`),$fetch("/api/users")]);D.value=o.users,Q.value=L.users,N.value=o.users.filter(X=>X.role!=="administrator"&&!X.global).map(X=>X.id)}catch{D.value=[],Q.value=[],N.value=[]}},{immediate:!0});function b(u){const o=N.value.indexOf(u);o>=0?N.value.splice(o,1):N.value.push(u)}async function w(){try{await $fetch(`/api/projects/${p}/members`,{method:"PUT",body:{userIds:N.value}}),F.add({title:"Members updated",color:"success"});const u=await $fetch(`/api/projects/${p}/members`);D.value=u.users}catch(u){const o=u&&typeof u=="object"&&"data"in u?u.data?.message:void 0;F.add({title:"Update failed",description:o||"An error occurred",color:"error"})}}const H=I("test-runs"),de=I(0),Me=["test-runs","failure-clusters","flaky-tests","performance","test-cases","compare","spec-health","ai-steps","quarantine","timeline","members"],me=x.query.tab;typeof me=="string"&&Me.includes(me)&&(H.value=me),ge(H,u=>{x.query.tab!==u&&Me.includes(u)&&_.replace({query:{...x.query,tab:u}})});const be=B(()=>c.value?.testRuns?.some(u=>u.failedTests>0)??!1),_e=B(()=>[{label:"Results",items:[{label:`Test runs (${K.value.length})`,icon:"i-lucide-play-circle",value:"test-runs",slot:"test-runs"},{label:`Test cases${Qe.value!=null?` (${Qe.value})`:""}`,icon:"i-lucide-list-checks",value:"test-cases",slot:"test-cases"},{label:"Compare",icon:"i-lucide-git-compare-arrows",value:"compare",slot:"compare"}]},{label:"Failures",items:[...be.value?[{label:"Failure clusters",icon:"i-lucide-layers",value:"failure-clusters",slot:"failure-clusters"}]:[],{label:"Flaky tests",icon:"i-lucide-shuffle",value:"flaky-tests",slot:"flaky-tests"},{label:"Quarantine",icon:"i-lucide-shield-alert",value:"quarantine",slot:"quarantine"}]},{label:"Health",items:[{label:"Spec health",icon:"i-lucide-table-2",value:"spec-health",slot:"spec-health"},{label:"AI steps",icon:"i-lucide-wand-sparkles",value:"ai-steps",slot:"ai-steps"},{label:"Performance",icon:"i-lucide-trending-up",value:"performance",slot:"performance"},{label:`Timeline${Te.value.length?` (${Te.value.length})`:""}`,icon:"i-lucide-milestone",value:"timeline",slot:"timeline"}]},...h.value?[{label:"Admin",items:[{label:"Members",icon:"i-lucide-users",value:"members",slot:"members"}]}]:[]]),Fe=B(()=>_e.value.flatMap(u=>u.items)),dt=B(()=>_e.value.map(u=>u.items).filter(u=>u.length>0)),mt=B(()=>Fe.value.find(u=>u.value===H.value)?.icon),Y=I([]),We=u=>Y.value.includes(u);function Ke(u){const o=Y.value.indexOf(u);if(o>=0)Y.value.splice(o,1);else{if(Y.value.length>=2){F.add({title:"Maximum 2 runs",description:"Select at most 2 runs to compare. Deselect one first.",color:"warning"});return}Y.value.push(u)}}const Oe=I(null);function pt(){Y.value.length===2&&(Oe.value=[Y.value[0],Y.value[1]],H.value="compare")}const ne=I([]),pe=I(!0),qe=B(()=>{const u=new Set;for(const o of c.value?.testRuns||[])o.environment&&u.add(o.environment);return[...u].sort()});function gt(u){const o=ne.value.indexOf(u);o===-1?ne.value.push(u):ne.value.splice(o,1)}function He(u){return ne.value.includes(u)}const K=B(()=>{let u=c.value?.testRuns||[];return pe.value&&(u=u.filter(o=>o.isFullRun!==!1)),ne.value.length===0?u:u.filter(o=>o.environment&&ne.value.includes(o.environment))}),P=B(()=>ne.value.length===1?ne.value[0]:void 0),{data:Z,refresh:ft}=([C,$]=he(()=>xe(`/api/projects/${p}/markers`,{default:()=>({markers:[]})},"$jubPXy8o3y")),C=await C,$(),C),Te=B(()=>Z.value?.markers??[]),Ye=B(()=>!T.public.authEnabled||h.value||k.value),Ze=B(()=>ne.value.length===0?Te.value:Te.value.filter(u=>u.environment==null||ne.value.includes(u.environment))),Pe=I(null);function je(u){Pe.value=u,H.value="timeline"}const _t=B(()=>{const u=c.value?.testRuns||[];return pe.value?u.filter(o=>o.isFullRun!==!1):u});function q(u){if(u.isFullRun!==!1)return"Full run — the complete test suite ran";const o=[],L=u.filterDetails?.grep?.trim(),X=u.filterDetails?.grepInvert?.trim(),ve=u.filterDetails?.files;return L&&L!==".*"&&o.push(`grep: ${L}`),X&&o.push(`grep-invert: ${X}`),ve?.length&&o.push(`files: ${ve.join(", ")}`),o.length?`Partial run — ${o.join(" · ")}`:"Partial run — only a filtered subset of tests ran (grep, file, or line filter)"}const le=[{accessorKey:"select",header:""},{accessorKey:"id",header:E("Run")},{accessorKey:"status",header:E("Status")},{accessorKey:"isFullRun",header:"Scope"},{id:"browsers",accessorFn:u=>u.browsers,header:""},{accessorKey:"startTime",header:E("Started")},{accessorKey:"environment",header:E("Environment")},{accessorKey:"metadata",header:"Branch / Commit"},{accessorKey:"duration",header:E("Test status / Dur.")},{accessorKey:"reports",header:"Reports"},{id:"actions",header:"Actions"}],Qe=I(null),Se=I(""),we=I(""),ns=B(()=>{const u={};return Se.value&&(u.from=Se.value),we.value&&(u.to=we.value),u}),vt=I(null),yt=I(!1),Ee=I(null),ht=I(!1),et=I(!1),as=B(()=>yt.value&&vt.value===null);ge([H,ns,pe],async([u,o])=>{if(u!=="performance")return;yt.value=!0,Ee.value||(et.value=!0);const L=new URLSearchParams(o).toString(),X=pe.value?`${L?"&":""}fullRunsOnly=true`:"",ve=L||X?`?${L}${X}`:"";vt.value=await $fetch(`/api/projects/${p}/performance${ve}`).catch(ye=>(console.warn("[PerformanceTab] Failed to fetch performance trend:",ye),null)),yt.value=!1,et.value&&(ht.value=!1,Ee.value=await $fetch(`/api/projects/${p}/slow-tests`).catch(ye=>(ht.value=!0,console.warn("[PerformanceTab] Failed to fetch slow tests:",ye),null)),et.value=!1)},{immediate:!0});const os=[{accessorKey:"title",header:E("Test case")},{accessorKey:"avgDuration",header:E("Avg duration")},{accessorKey:"maxDuration",header:E("Max")},{accessorKey:"minDuration",header:E("Min")},{accessorKey:"latestDuration",header:E("Latest")},{accessorKey:"trend",header:E("Trend")},{accessorKey:"runCount",header:E("Runs")}];function ls(u){const o=ct(u.startTime,{dateOnly:!0}),L=u.metadata?.scm?.commit?` (${u.metadata.scm.commit.substring(0,7)})`:"";return`Run #${u.id} — ${o}${L}`}const ce=B(()=>c.value?.testRuns?[...c.value.testRuns].reverse().map(u=>({label:ls(u),value:u.id})):[]),ee=I(void 0),te=I(void 0),Ut=B(()=>x.query.runA?Number(x.query.runA):null),It=B(()=>x.query.runB?Number(x.query.runB):null);ge(ce,u=>{if(Ut.value){const o=u.find(L=>L.value===Ut.value);o&&(ee.value=o)}if(It.value){const o=u.find(L=>L.value===It.value);o&&(te.value=o)}},{immediate:!0}),ge(Oe,u=>{if(u){const o=ce.value.find(X=>X.value===u[0]),L=ce.value.find(X=>X.value===u[1]);o&&(ee.value=o),L&&(te.value=L),Oe.value=null}});function Mt(){ce.value.length>=2&&(ee.value=ce.value[1],te.value=ce.value[0])}const xt=I(null),bt=I(null),tt=I(!1);async function rs(){const u=ee.value,o=te.value;if(!(!u?.value&&!o?.value)){tt.value=!0;try{const L=[];u?.value&&L.push(u.value),o?.value&&L.push(o.value);const X=await Promise.all(L.map(ye=>$fetch(`/api/test-runs/${ye}/summary`))),ve=new Map;for(const ye of X)ve.set(ye.id,ye);xt.value=u?.value?ve.get(u.value)??null:null,bt.value=o?.value?ve.get(o.value)??null:null}catch{xt.value=null,bt.value=null}finally{tt.value=!1}}}ge([ee,te],()=>{rs()});const{comparisonData:st,comparisonSummary:W}=kn(xt,bt),Ft=[{accessorKey:"title",header:E("Test case")},{accessorKey:"statusA",header:E("Status A")},{accessorKey:"statusB",header:E("Status B")},{accessorKey:"durationA",header:E("Duration A")},{accessorKey:"durationB",header:E("Duration B")},{accessorKey:"delta",header:E("Delta")},{accessorKey:"percentChange",header:E("Change")}];return(u,o)=>{const L=Ms,X=Fs,ve=Jn,ye=Qs,is=Xs,cs=Gt,us=sa,ds=ze,ms=da,Pt=en,ps=tn,Be=Xe,re=ke,gs=sn,kt=Le,fs=es,_s=nn,se=Ce,vs=an,Re=on,ys=ln,nt=Ie,hs=qs,xs=$e,Ge=Ue,bs=ba,ks=Ma,$s=Ya,$t=Ht,Et=Je,Cs=io,Ts=ut,js=xo,at=mn,Ss=pn,ws=wo,Rs=Ko,Ds=ol,As=vn,zs=jl,Us=bn,Is=Gs,Bt=zt,Lt=Rt;return n(),i(G,null,[a(Is,{id:"project-detail"},{header:t(()=>[a(is,null,{leading:t(()=>[a(L),a(X,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},{label:e(c)?.label||e(c)?.name||"Project"}]},null,8,["items"])]),right:t(()=>[a(ye,{size:"sm",actions:[...e(m)?[{label:"Delete",icon:"i-lucide-trash-2",color:"error",variant:"ghost",onClick:()=>{V.value="",M.value=!0}}]:[],...e(v)?[{label:"Import",icon:"i-lucide-import",variant:"outline",to:`/projects/${e(p)}/import`}]:[],{label:"Test functions",icon:"i-lucide-function-square",variant:"outline",to:`/projects/${e(p)}/test-functions`},{label:"Edit",icon:"i-lucide-pencil",variant:"outline",to:`/projects/${e(p)}/edit`},{label:"Refresh",icon:"i-lucide-refresh-cw",variant:"outline",onClick:()=>e(U)()}]},{leading:t(()=>[a(ve,{"project-id":parseInt(e(p)),"project-label":e(c)?.label||e(c)?.name},null,8,["project-id","project-label"])]),_:1},8,["actions"])]),_:1})]),body:t(()=>[s("div",Sl,[e(c)?.description||e(c)?.tags&&e(c).tags.length>0?(n(),i("div",wl,[e(c)?.description?(n(),i("p",Rl,r(e(c).description),1)):A("",!0),e(c)?.tags&&e(c).tags.length>0?(n(),i("div",Dl,[(n(!0),i(G,null,ae(e(c).tags,l=>(n(),g(cs,{key:l.id,text:l.text,color:l.color},null,8,["text","color"]))),128))])):A("",!0)])):A("",!0),a(us,{"project-id":e(p)},null,8,["project-id"]),a(ds,{modelValue:e(H),"onUpdate:modelValue":o[0]||(o[0]=l=>J(H)?H.value=l:null),items:e(dt),icon:e(mt),size:"md",class:"w-full mx-1 mb-1 sm:hidden"},null,8,["modelValue","items","icon"]),a(Us,{modelValue:e(H),"onUpdate:modelValue":o[14]||(o[14]=l=>J(H)?H.value=l:null),items:e(Fe),size:"sm",class:"p-1",ui:{list:"max-sm:hidden overflow-x-auto",trigger:"shrink-0"}},{"test-runs":t(()=>[e(c)?.testRuns&&e(c).testRuns.length>0?(n(),g(Pt,{key:0,title:"Run trend",subtitle:`Test run statistics over time for ${e(c)?.label||e(c)?.name}`,help:"project.runs-trend"},{default:t(()=>[a(ms,{"test-runs":e(_t),height:200,markers:e(Ze),onMarkerClick:je},null,8,["test-runs","markers"])]),_:1},8,["subtitle"])):A("",!0),a(Ge,{class:"mt-4"},{default:t(()=>[s("div",Al,[s("div",zl,[a(ps,{modelValue:e(pe),"onUpdate:modelValue":o[1]||(o[1]=l=>J(pe)?pe.value=l:null),label:"Full runs only",ui:{label:"text-sm"}},null,8,["modelValue"]),a(Be,{topic:"project.run-scope"})]),e(qe).length>0?(n(),i(G,{key:0},[o[21]||(o[21]=s("span",{class:"text-sm text-muted shrink-0"},"Environment:",-1)),(n(!0),i(G,null,ae(e(qe),l=>(n(),i("button",{key:l,type:"button",class:ie(["text-xs font-medium px-2 py-1 rounded border cursor-pointer focus:outline-none transition-colors",He(l)?"bg-blue-100 text-blue-700 border-blue-300 dark:bg-blue-900/40 dark:text-blue-300 dark:border-blue-700":"bg-zinc-100 text-zinc-500 border-zinc-200 hover:bg-zinc-200 dark:bg-zinc-800 dark:text-zinc-400 dark:border-zinc-700 dark:hover:bg-zinc-700"]),onClick:De=>gt(l)},r(l),11,Ul))),128)),e(ne).length>0?(n(),g(re,{key:0,size:"xs",variant:"ghost",color:"neutral",icon:"i-lucide-x",label:"Clear filter",onClick:o[2]||(o[2]=l=>ne.value=[])})):A("",!0)],64)):A("",!0)]),e(Y).length>0?(n(),i("div",Il,[s("span",Ml,r(e(Y).length)+" run"+r(e(Y).length>1?"s":"")+" selected ",1),e(Y).length===2?(n(),g(re,{key:0,icon:"i-lucide-git-compare-arrows",size:"sm",color:"primary",label:"Compare selected runs",onClick:pt})):(n(),i("span",Fl," Select another run to compare ")),a(re,{size:"xs",variant:"ghost",color:"neutral",icon:"i-lucide-x",label:"Clear",onClick:o[3]||(o[3]=l=>Y.value=[])})])):A("",!0),e(K).length>0?(n(),g(nt,{key:1,data:e(K),columns:le,ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"select-cell":t(({row:l})=>[s("input",{type:"checkbox",checked:We(l.original.id),class:"cursor-pointer size-4 accent-primary",onClick:Kt(De=>Ke(l.original.id),["stop"])},null,8,Pl)]),"id-cell":t(({row:l})=>[s("div",El,[s("a",{href:`/test-runs/${l.original.id}`,class:"text-primary hover:underline font-medium",onClick:Kt(De=>("navigateTo"in u?u.navigateTo:e(wt))(`/test-runs/${l.original.id}`),["prevent"])}," Run #"+r(l.original.id),9,Bl),l.original.label?(n(),i("span",Ll,r(l.original.label),1)):A("",!0)])]),"status-cell":t(({row:l})=>[a(gs,{status:l.original.status},null,8,["status"])]),"isFullRun-header":t(()=>[s("span",Vl,[o[22]||(o[22]=d("Scope ",-1)),a(Be,{topic:"run.partial"})])]),"isFullRun-cell":t(({row:l})=>[a(fs,{text:q(l.original)},{default:t(()=>[a(kt,{name:l.original.isFullRun===!1?"i-lucide-list-filter":"i-lucide-list-checks",class:ie(["size-4 shrink-0 cursor-help",l.original.isFullRun===!1?"text-amber-500":"text-green-500"])},null,8,["name","class"])]),_:2},1032,["text"])]),"browsers-cell":t(({row:l})=>[l.original.browsers?.length?(n(),i("div",Nl,[(n(!0),i(G,null,ae(l.original.browsers,De=>(n(),g(_s,{key:De,browser:{projectName:De},size:"sm"},null,8,["browser"]))),128))])):A("",!0)]),"startTime-cell":t(({row:l})=>[s("span",Kl,r(("prettyDateFormat"in u?u.prettyDateFormat:e(ct))(l.original.startTime)),1)]),"environment-cell":t(({row:l})=>[l.original.environment?(n(),g(se,{key:0,color:"info",variant:"subtle",size:"sm"},{default:t(()=>[d(r(l.original.environment),1)]),_:2},1024)):A("",!0)]),"metadata-cell":t(({row:l})=>[l.original.metadata?.scm?(n(),i("div",Ol,[l.original.metadata.scm.branch?(n(),i("span",ql,r(l.original.metadata.scm.branch),1)):A("",!0),l.original.metadata.scm.commit?(n(),i("code",Hl,r(l.original.metadata.scm.commit.substring(0,7)),1)):A("",!0)])):A("",!0)]),"duration-cell":t(({row:l})=>[s("div",Ql,[a(vs,{passed:l.original.passedTests,failed:l.original.failedTests,skipped:l.original.skippedTests,flaky:l.original.flakyTests,"did-not-run":l.original.didNotRunTests??0,total:l.original.totalTests},null,8,["passed","failed","skipped","flaky","did-not-run","total"]),a(Re,{ms:l.original.duration,class:"text-xs text-gray-500"},null,8,["ms"])])]),"reports-cell":t(({row:l})=>[a(ys,{reports:l.original.reports},null,8,["reports"])]),"actions-header":t(()=>[...o[23]||(o[23]=[s("div",{class:"text-right"},"Actions",-1)])]),"actions-cell":t(({row:l})=>[s("div",Gl,[a(re,{to:`/test-runs/${l.original.id}`,size:"sm",variant:"outline"},{default:t(()=>[...o[24]||(o[24]=[d(" View ",-1)])]),_:1},8,["to"]),a(re,{size:"sm",color:"error",variant:"soft",icon:"i-lucide-trash-2",loading:e(R)===l.original.id,onClick:De=>y.value=l.original.id},{default:t(()=>[...o[25]||(o[25]=[d(" Delete ",-1)])]),_:1},8,["loading","onClick"])])]),_:1},8,["data"])):e(c)?.testRuns&&e(c).testRuns.length>0?(n(),i("div",Xl," No test runs match the selected environment filter. ")):(n(),g(xs,{key:3,icon:"i-lucide-rocket",text:"No test runs yet for this project."},{default:t(()=>[s("p",Jl,[o[27]||(o[27]=d(" Point the reporter's ",-1)),o[28]||(o[28]=s("code",{class:"bg-gray-100 dark:bg-gray-800 px-1 rounded"},"projectName",-1)),o[29]||(o[29]=d(" at ",-1)),s("code",Wl,r(e(c)?.name),1),o[30]||(o[30]=d(" to send results here — see the ",-1)),a(hs,{to:"reporter","no-icon":"",class:"text-primary hover:underline"},{default:t(()=>[...o[26]||(o[26]=[d("reporter docs",-1)])]),_:1}),o[31]||(o[31]=d(" for setup instructions. ",-1))])]),_:1}))]),_:1})]),"failure-clusters":t(()=>[e(H)==="failure-clusters"?(n(),i(G,{key:0},[(n(),g(bs,{key:`sug-${e(de)}`,"project-id":String(e(p)),onMerged:o[4]||(o[4]=l=>de.value++)},null,8,["project-id"])),(n(),g(ks,{key:e(de),"project-id":String(e(p))},null,8,["project-id"]))],64)):A("",!0)]),"flaky-tests":t(()=>[e(H)==="flaky-tests"?(n(),g($s,{key:0,"project-id":String(e(p)),environment:e(P),"project-name":e(c)?.name},null,8,["project-id","environment","project-name"])):A("",!0)]),performance:t(()=>[s("div",Yl,[o[32]||(o[32]=s("span",{class:"text-sm text-muted shrink-0"},"Date range:",-1)),a($t,{modelValue:e(Se),"onUpdate:modelValue":o[5]||(o[5]=l=>J(Se)?Se.value=l:null),type:"date",size:"sm",placeholder:"From",class:"w-40"},null,8,["modelValue"]),o[33]||(o[33]=s("span",{class:"text-sm text-muted"},"to",-1)),a($t,{modelValue:e(we),"onUpdate:modelValue":o[6]||(o[6]=l=>J(we)?we.value=l:null),type:"date",size:"sm",placeholder:"To",class:"w-40"},null,8,["modelValue"]),e(Se)||e(we)?(n(),g(re,{key:0,size:"xs",variant:"ghost",color:"neutral",icon:"i-lucide-x",label:"Clear",onClick:o[7]||(o[7]=l=>{Se.value="",we.value=""})})):A("",!0)]),a(Pt,{title:"Performance trend",subtitle:"Duration metrics over time",help:"project.performance","data-shot":"performance-trend"},{default:t(()=>[e(as)?(n(),g(Et,{key:0,text:"Loading chart…"})):(n(),g(Cs,{key:1,data:e(vt)||[],height:350,markers:e(Ze),onMarkerClick:je},null,8,["data","markers"]))]),_:1}),a(Ge,{"data-shot":"slowest-tests"},{header:t(()=>[s("h2",Zl,[o[34]||(o[34]=d(" Slowest tests ",-1)),a(Be,{topic:"project.slowest-tests"})]),o[35]||(o[35]=s("p",{class:"text-sm text-gray-600 mt-1"},"Top 20 slowest test cases across recent runs",-1))]),default:t(()=>[e(et)&&e(Ee)===null?(n(),g(Et,{key:0,text:"Loading…"})):e(Ee)&&e(Ee).length>0?(n(),g(nt,{key:1,data:e(Ee),columns:os,ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",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":t(({row:l})=>[s("div",null,[s("div",er,r(l.original.title),1),s("div",tr,[a(Ts,{"file-path":l.original.filePath,"project-key":e(p),"project-name":e(c)?.name,class:"text-xs"},null,8,["file-path","project-key","project-name"])])])]),"trend-cell":t(({row:l})=>[l.original.trend==="slower"?(n(),i("span",sr,"▲ Slower")):l.original.trend==="faster"?(n(),i("span",nr,"▼ Faster")):(n(),i("span",ar,"— Stable"))]),_:1},8,["data"])):e(ht)?(n(),i("div",or," Couldn't load the slowest tests — try refreshing. ")):(n(),i("div",lr,"No slow test data available yet."))]),_:1}),a(js,{"project-id":String(e(p)),"project-name":e(c)?.name},null,8,["project-id","project-name"]),a(Ge,null,{header:t(()=>[s("div",rr,[s("div",null,[s("h2",ir,[o[36]||(o[36]=d(" Run comparison ",-1)),a(Be,{topic:"project.run-compare"})]),o[37]||(o[37]=s("p",{class:"text-sm text-gray-600 mt-1"},"Compare duration changes between two runs",-1))]),e(ce).length>=2?(n(),g(re,{key:0,icon:"i-lucide-git-compare-arrows",size:"sm",variant:"outline",label:"Compare latest vs previous",onClick:Mt})):A("",!0)])]),default:t(()=>[s("div",cr,[s("div",ur,[s("div",null,[o[38]||(o[38]=s("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Run A (baseline)",-1)),a(at,{modelValue:e(ee),"onUpdate:modelValue":o[8]||(o[8]=l=>J(ee)?ee.value=l:null),items:e(ce),placeholder:"Select run A..."},null,8,["modelValue","items"])]),s("div",null,[o[39]||(o[39]=s("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Run B (comparison)",-1)),a(at,{modelValue:e(te),"onUpdate:modelValue":o[9]||(o[9]=l=>J(te)?te.value=l:null),items:e(ce),placeholder:"Select run B..."},null,8,["modelValue","items"])])]),e(tt)?(n(),i("div",dr,[a(kt,{name:"i-lucide-loader-2",class:"animate-spin mr-2"}),o[40]||(o[40]=d(" Loading run data… ",-1))])):e(ee)&&e(te)&&e(st).length>0?(n(),i("div",mr,[s("div",pr,[a(se,{color:"success",variant:"soft",size:"lg"},{default:t(()=>[d(r(e(W).improved)+" improved",1)]),_:1}),a(se,{color:"error",variant:"soft",size:"lg"},{default:t(()=>[d(r(e(W).regressed)+" regressed",1)]),_:1}),a(se,{color:"neutral",variant:"soft",size:"lg"},{default:t(()=>[d(r(e(W).unchanged)+" unchanged",1)]),_:1})]),a(nt,{data:e(st),columns:Ft,ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"statusA-cell":t(({row:l})=>[l.original.statusA?(n(),g(se,{key:1,color:("getStatusColor"in u?u.getStatusColor:e(ot))(l.original.statusA),variant:"subtle",class:"capitalize"},{default:t(()=>[d(r(l.original.statusA),1)]),_:2},1032,["color"])):(n(),i("span",gr,"—"))]),"statusB-cell":t(({row:l})=>[l.original.statusB?(n(),g(se,{key:1,color:("getStatusColor"in u?u.getStatusColor:e(ot))(l.original.statusB),variant:"subtle",class:"capitalize"},{default:t(()=>[d(r(l.original.statusB),1)]),_:2},1032,["color"])):(n(),i("span",fr,"—"))]),"durationA-cell":t(({row:l})=>[l.original.durationA!==null?(n(),g(Re,{key:0,ms:l.original.durationA},null,8,["ms"])):(n(),i("span",_r,"—"))]),"durationB-cell":t(({row:l})=>[l.original.durationB!==null?(n(),g(Re,{key:0,ms:l.original.durationB},null,8,["ms"])):(n(),i("span",vr,"—"))]),"delta-cell":t(({row:l})=>[l.original.delta===null?(n(),i("span",yr,"—")):(n(),i("span",{key:1,class:ie(l.original.delta>0?"text-red-600":l.original.delta<0?"text-green-600":"text-gray-500")},[d(r(l.original.delta>0?"+":""),1),a(Re,{ms:l.original.delta,"unit-class":"opacity-60"},null,8,["ms"])],2))]),"percentChange-cell":t(({row:l})=>[l.original.percentChange===null?(n(),i("span",hr,"—")):(n(),i("span",{key:1,class:ie(l.original.percentChange>10?"text-red-600 font-medium":l.original.percentChange<-10?"text-green-600 font-medium":"text-gray-500")},r(l.original.percentChange>0?"+":"")+r(l.original.percentChange)+"% ",3))]),_:1},8,["data"])])):!e(ee)||!e(te)?(n(),i("div",xr," Select two runs to compare their performance. ")):(n(),i("div",br," No overlapping test cases found between the selected runs. "))])]),_:1})]),"test-cases":t(()=>[a(Ss,{"project-id":e(p),"project-name":e(c)?.name,"sync-query":"",onTotal:o[10]||(o[10]=l=>Qe.value=l)},null,8,["project-id","project-name"])]),compare:t(()=>[a(Ge,null,{header:t(()=>[s("div",kr,[s("p",$r,[o[41]||(o[41]=d(" Compare two test runs side-by-side — status changes and duration deltas ",-1)),a(Be,{topic:"project.compare"})]),e(ce).length>=2?(n(),g(re,{key:0,icon:"i-lucide-git-compare-arrows",size:"sm",variant:"outline",label:"Latest vs previous",onClick:Mt})):A("",!0)])]),default:t(()=>[s("div",Cr,[s("div",Tr,[s("div",null,[o[42]||(o[42]=s("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Run A (baseline)",-1)),a(at,{modelValue:e(ee),"onUpdate:modelValue":o[11]||(o[11]=l=>J(ee)?ee.value=l:null),items:e(ce),placeholder:"Select run A..."},null,8,["modelValue","items"])]),s("div",null,[o[43]||(o[43]=s("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Run B (comparison)",-1)),a(at,{modelValue:e(te),"onUpdate:modelValue":o[12]||(o[12]=l=>J(te)?te.value=l:null),items:e(ce),placeholder:"Select run B..."},null,8,["modelValue","items"])])]),e(tt)?(n(),i("div",jr,[a(kt,{name:"i-lucide-loader-2",class:"animate-spin mr-2"}),o[44]||(o[44]=d(" Loading run data… ",-1))])):e(ee)&&e(te)&&e(st).length>0?(n(),i("div",Sr,[s("div",wr,[s("div",Rr,[o[45]||(o[45]=s("span",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mr-1"},"Status changes",-1)),e(W).newFailures>0?(n(),g(se,{key:0,color:"error",variant:"soft",size:"lg"},{default:t(()=>[d(r(e(W).newFailures)+" new failure"+r(e(W).newFailures>1?"s":""),1)]),_:1})):A("",!0),e(W).recovered>0?(n(),g(se,{key:1,color:"success",variant:"soft",size:"lg"},{default:t(()=>[d(r(e(W).recovered)+" recovered ",1)]),_:1})):A("",!0),e(W).stillFailing>0?(n(),g(se,{key:2,color:"warning",variant:"soft",size:"lg"},{default:t(()=>[d(r(e(W).stillFailing)+" still failing ",1)]),_:1})):A("",!0),e(W).newFailures===0&&e(W).recovered===0&&e(W).stillFailing===0?(n(),i("span",Dr,"No status changes")):A("",!0)]),s("div",Ar,[o[46]||(o[46]=s("span",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mr-1"},"Duration changes",-1)),e(W).regressed>0?(n(),g(se,{key:0,color:"error",variant:"soft",size:"lg"},{default:t(()=>[d(r(e(W).regressed)+" regressed ",1)]),_:1})):A("",!0),e(W).improved>0?(n(),g(se,{key:1,color:"success",variant:"soft",size:"lg"},{default:t(()=>[d(r(e(W).improved)+" improved ",1)]),_:1})):A("",!0),a(se,{color:"neutral",variant:"soft",size:"lg"},{default:t(()=>[d(r(e(W).unchanged)+" unchanged ",1)]),_:1})])]),a(nt,{data:e(st),columns:Ft,ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"statusA-cell":t(({row:l})=>[l.original.statusA?(n(),g(se,{key:1,color:("getStatusColor"in u?u.getStatusColor:e(ot))(l.original.statusA),variant:"subtle",class:"capitalize"},{default:t(()=>[d(r(l.original.statusA),1)]),_:2},1032,["color"])):(n(),i("span",zr,"—"))]),"statusB-cell":t(({row:l})=>[l.original.statusB?(n(),g(se,{key:1,color:("getStatusColor"in u?u.getStatusColor:e(ot))(l.original.statusB),variant:"subtle",class:"capitalize"},{default:t(()=>[d(r(l.original.statusB),1)]),_:2},1032,["color"])):(n(),i("span",Ur,"—"))]),"durationA-cell":t(({row:l})=>[l.original.durationA!==null?(n(),g(Re,{key:0,ms:l.original.durationA},null,8,["ms"])):(n(),i("span",Ir,"—"))]),"durationB-cell":t(({row:l})=>[l.original.durationB!==null?(n(),g(Re,{key:0,ms:l.original.durationB},null,8,["ms"])):(n(),i("span",Mr,"—"))]),"delta-cell":t(({row:l})=>[l.original.delta===null?(n(),i("span",Fr,"—")):(n(),i("span",{key:1,class:ie(l.original.delta>0?"text-red-600":l.original.delta<0?"text-green-600":"text-gray-500")},[d(r(l.original.delta>0?"+":""),1),a(Re,{ms:l.original.delta,"unit-class":"opacity-60"},null,8,["ms"])],2))]),"percentChange-cell":t(({row:l})=>[l.original.percentChange===null?(n(),i("span",Pr,"—")):(n(),i("span",{key:1,class:ie(l.original.percentChange>10?"text-red-600 font-medium":l.original.percentChange<-10?"text-green-600 font-medium":"text-gray-500")},r(l.original.percentChange>0?"+":"")+r(l.original.percentChange)+"% ",3))]),_:1},8,["data"])])):!e(ee)||!e(te)?(n(),i("div",Er," Select two runs to compare test results. ")):(n(),i("div",Br," No overlapping test cases found between the selected runs. "))])]),_:1})]),"spec-health":t(()=>[a(ws,{"project-id":String(e(p))},null,8,["project-id"])]),"ai-steps":t(()=>[a(Rs,{"project-id":String(e(p))},null,8,["project-id"])]),quarantine:t(()=>[a(Ds,{"project-id":String(e(p)),"project-name":e(c)?.name},null,8,["project-id","project-name"])]),members:t(()=>[a(Ge,null,{header:t(()=>[s("div",Lr,[s("p",Vr,[o[47]||(o[47]=d(" Users with access to this project ",-1)),a(Be,{topic:"project.members"})]),a(re,{label:"Save changes",icon:"i-lucide-check",size:"sm",disabled:!e(fe),onClick:w},null,8,["disabled"])])]),default:t(()=>[e(ue).length>0?(n(),i("div",Nr,[(n(!0),i(G,null,ae(e(ue),l=>(n(),i("div",{key:l.id,class:"flex items-center justify-between rounded-lg border border-default px-4 py-3"},[s("div",null,[s("div",Kr,r(l.name||l.username),1),s("div",Or,[s("span",null,"@"+r(l.username),1),a(se,{color:l.role==="administrator"?"primary":l.role==="reporter"?"info":"neutral",variant:"subtle",size:"xs"},{default:t(()=>[d(r(l.role),1)]),_:2},1032,["color"]),l.global?(n(),i("span",qr,"Global access")):A("",!0)])]),l.role!=="administrator"?(n(),g(As,{key:0,"model-value":e(N).includes(l.id),disabled:l.global,title:l.global?"Has global access — remove global assignment first":"",onChange:De=>b(l.id)},null,8,["model-value","disabled","title","onChange"])):(n(),i("span",Hr,"Admin"))]))),128))])):(n(),i("div",Qr,"Loading members…"))]),_:1})]),timeline:t(()=>[a(zs,{"project-id":Number(e(p)),markers:e(Te),environments:e(qe),"can-edit":e(Ye),"focus-marker-id":e(Pe),onChanged:e(ft),onClearFocus:o[13]||(o[13]=l=>Pe.value=null)},null,8,["project-id","markers","environments","can-edit","focus-marker-id","onChanged"])]),_:1},8,["modelValue","items"])])]),_:1}),a(Lt,null,{default:t(()=>[a(Bt,{open:e(M),title:"Delete project","onUpdate:open":o[17]||(o[17]=l=>{l||(M.value=!1)})},{body:t(()=>[s("div",Gr,[s("p",Xr,[o[48]||(o[48]=d(" This will permanently delete ",-1)),s("strong",null,r(e(c)?.label||e(c)?.name),1),o[49]||(o[49]=d(" and all its test runs, reports, traces, and failure clusters. This action cannot be undone. ",-1))]),s("div",null,[s("label",Jr,[o[50]||(o[50]=d(" Type the project key ",-1)),s("code",Wr,r(e(c)?.name),1),o[51]||(o[51]=d(" to confirm: ",-1))]),a($t,{modelValue:e(V),"onUpdate:modelValue":o[15]||(o[15]=l=>J(V)?V.value=l:null),placeholder:e(c)?.name,autofocus:"",onKeydown:Ns(S,["enter"])},null,8,["modelValue","placeholder"])])])]),footer:t(()=>[a(re,{color:"neutral",variant:"ghost",label:"Cancel",onClick:o[16]||(o[16]=l=>M.value=!1)}),a(re,{color:"error",label:"Delete project",icon:"i-lucide-trash-2",disabled:!e(f),loading:e(j),onClick:S},null,8,["disabled","loading"])]),_:1},8,["open"])]),_:1}),a(Lt,null,{default:t(()=>[a(Bt,{open:e(y)!==null,title:"Delete test run","onUpdate:open":o[20]||(o[20]=l=>{l||(y.value=null)})},{body:t(()=>[s("p",null,[o[52]||(o[52]=d(" Are you sure you want to delete ",-1)),s("strong",null,"Run #"+r(e(y)),1),o[53]||(o[53]=d("? This will also remove all associated test results, reports, and traces. This action cannot be undone. ",-1))])]),footer:t(()=>[a(re,{color:"neutral",variant:"ghost",label:"Cancel",onClick:o[18]||(o[18]=l=>y.value=null)}),a(re,{color:"error",label:"Delete",icon:"i-lucide-trash-2",loading:e(R)===e(y),onClick:o[19]||(o[19]=l=>O(e(y)))},null,8,["loading"])]),_:1},8,["open"])]),_:1})],64)}}});export{ac as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as p,o as s,c as u,
|
|
1
|
+
import{d as p,o as s,c as u,h as n,_ as f,g as e,t as a,f as c,k as l,j as x,e as g,l as y,V as k,i as b}from"./BzBaMPgu.js";import{a as B}from"./qeqzb80l.js";const v={class:"text-sm font-medium text-gray-600 dark:text-gray-300"},V={class:"text-sm max-w-md"},h={class:"flex items-center gap-3 mt-1"},z=p({__name:"FeatureUnavailable",props:{title:{},text:{},icon:{default:"i-lucide-plug-zap"},doc:{},to:{default:"/setup"},toLabel:{default:"How to enable"},padded:{type:Boolean,default:!0}},setup(i){const t=i;return(r,o)=>{const d=f,_=x,m=B;return s(),u("div",{class:b(["flex flex-col items-center justify-center gap-2 text-center text-gray-500",t.padded&&"py-8"])},[n(d,{name:t.icon,class:"size-6 opacity-60"},null,8,["name"]),e("p",v,a(t.title),1),e("p",V,a(t.text),1),e("div",h,[n(_,{to:t.to,size:"xs",variant:"soft",icon:"i-lucide-rocket"},{default:c(()=>[l(a(t.toLabel),1)]),_:1},8,["to"]),t.doc?(s(),g(m,{key:0,to:t.doc,class:"text-sm"},{default:c(()=>[...o[0]||(o[0]=[l("Docs",-1)])]),_:1},8,["to"])):y("",!0)]),k(r.$slots,"default")],2)}}}),U=Object.assign(z,{__name:"FeatureUnavailable"});export{U as _};
|