@piwitests/server 0.19.0 → 0.21.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/{279D2RYp.js → 9ti9eNH9.js} +1 -1
- package/.output/public/_nuxt/{DcmZRa_F.js → B-zdP-D4.js} +1 -1
- package/.output/public/_nuxt/{eaVkJRSa.js → B1RmmOsM.js} +1 -1
- package/.output/public/_nuxt/{DprVVyUQ.js → B3Fsod9X.js} +1 -1
- package/.output/public/_nuxt/{HXerICAi.js → B3rirOqU.js} +34 -34
- package/.output/public/_nuxt/B3zmIJYb.js +1 -0
- package/.output/public/_nuxt/{CDk0q2hV.js → BAKUqW95.js} +2 -2
- package/.output/public/_nuxt/BG0KKQiT.js +7 -0
- package/.output/public/_nuxt/BGL_V7Y4.js +1 -0
- package/.output/public/_nuxt/{Jo8kRmHz.js → BGusFAvZ.js} +1 -1
- package/.output/public/_nuxt/{CGNkHojN.js → BNurUTla.js} +3 -3
- package/.output/public/_nuxt/BR5cR2Ot.js +1 -0
- package/.output/public/_nuxt/BTCh_0zN.js +1 -0
- package/.output/public/_nuxt/{ZFiQCMUB.js → BTVqMsA3.js} +1 -1
- package/.output/public/_nuxt/{BqV0l12c.js → B_13C0GF.js} +1 -1
- package/.output/public/_nuxt/BeDIjhoR.js +44 -0
- package/.output/public/_nuxt/{BDicZ1gQ.js → BerCW7Ug.js} +1 -1
- package/.output/public/_nuxt/BfTNbVc_.js +1 -0
- package/.output/public/_nuxt/BnbSEpXX.js +1 -0
- package/.output/public/_nuxt/Bo_dxehb.js +1 -0
- package/.output/public/_nuxt/{ClOqkAcc.js → BpBHls4-.js} +1 -1
- package/.output/public/_nuxt/{C7P1UCO2.js → BpM6ZPIG.js} +1 -1
- package/.output/public/_nuxt/BqGumsDo.js +4 -0
- package/.output/public/_nuxt/{DS636elg.js → BrxtP_cN.js} +1 -1
- package/.output/public/_nuxt/{YVN7WG7q.js → C2hNxjjz.js} +1 -1
- package/.output/public/_nuxt/C5PSqfKi.js +2 -0
- package/.output/public/_nuxt/C5vsaU4G.js +1 -0
- package/.output/public/_nuxt/C9sdHaXd.js +1 -0
- package/.output/public/_nuxt/{SfMRXW25.js → CAxgBYIt.js} +2 -2
- package/.output/public/_nuxt/{CZfMdzfk.js → CES2i5Pl.js} +1 -1
- package/.output/public/_nuxt/{BX9ZXe98.js → CFEdRqaj.js} +1 -1
- package/.output/public/_nuxt/{B44A4LSJ.js → CFTZwazK.js} +1 -1
- package/.output/public/_nuxt/CIBS7ye6.js +1 -0
- package/.output/public/_nuxt/CIEceDOw.js +1 -0
- package/.output/public/_nuxt/{DHDtnj7p.js → CJBhojV6.js} +1 -1
- package/.output/public/_nuxt/{BPQoBGg5.js → CKYddHa6.js} +1 -1
- package/.output/public/_nuxt/{BccXfBfI.js → CLVWiCds.js} +1 -1
- package/.output/public/_nuxt/{DX-MDGb3.js → CMYAryzi.js} +1 -1
- package/.output/public/_nuxt/{BuMC3WjZ.js → COhdybDy.js} +1 -1
- package/.output/public/_nuxt/{Bu2aaVIY.js → CRBXM2d6.js} +2 -2
- package/.output/public/_nuxt/{BYDaY0Z7.js → CTD_pJ_v.js} +1 -1
- package/.output/public/_nuxt/{C9_jrmk9.js → CTP8Pw0-.js} +2 -2
- package/.output/public/_nuxt/{D55D4EYo.js → CV8iF2kG.js} +1 -1
- package/.output/public/_nuxt/{BCMuIgP5.js → CWKmbYlT.js} +1 -1
- package/.output/public/_nuxt/C_NfGMTd.js +9 -0
- package/.output/public/_nuxt/Cejoebel.js +6 -0
- package/.output/public/_nuxt/{Dnpkl-1q.js → Chpah_7l.js} +1 -1
- package/.output/public/_nuxt/Ci9d8YVV.js +1 -0
- package/.output/public/_nuxt/{C95YAaJq.js → CifRHVaR.js} +1 -1
- package/.output/public/_nuxt/{BMvCSA6h.js → Ckgsh9AT.js} +1 -1
- package/.output/public/_nuxt/{eptP4pGv.js → Cpsq-kYE.js} +1 -1
- package/.output/public/_nuxt/Cqc-DSTF.js +1 -0
- package/.output/public/_nuxt/{KnfsST6Y.js → CsHulb12.js} +1 -1
- package/.output/public/_nuxt/Ctb2CqUf.js +5 -0
- package/.output/public/_nuxt/CtstIQSh.js +1 -0
- package/.output/public/_nuxt/{DGfAxLHV.js → CvMzDKvu.js} +1 -1
- package/.output/public/_nuxt/{fVcG504p.js → D2pBhsH8.js} +1 -1
- package/.output/public/_nuxt/{rWNTSFD6.js → D8gX1Jde.js} +3 -3
- package/.output/public/_nuxt/D9knOn6D.js +1 -0
- package/.output/public/_nuxt/DAPTVdvA.js +1 -0
- package/.output/public/_nuxt/{NQikbhmK.js → DCFbQvIN.js} +44 -43
- package/.output/public/_nuxt/DCoJlz_q.js +1 -0
- package/.output/public/_nuxt/DGnQ69wW.js +64 -0
- package/.output/public/_nuxt/{CTxDO9fB.js → DHzij16p.js} +1 -1
- package/.output/public/_nuxt/DJMCXRuW.js +5 -0
- package/.output/public/_nuxt/DJXcGkJP.js +2 -0
- package/.output/public/_nuxt/{CK_2LZBS.js → DKFXZdWZ.js} +1 -1
- package/.output/public/_nuxt/{tvgqrYDd.js → DL24AjfW.js} +1 -1
- package/.output/public/_nuxt/DON74Yh6.js +1 -0
- package/.output/public/_nuxt/{CHEFCN8Q.js → DQM62mxB.js} +1 -1
- package/.output/public/_nuxt/DSe8DxMl.js +1 -0
- package/.output/public/_nuxt/DWwiVTZX.js +24 -0
- package/.output/public/_nuxt/DX4tAP78.js +1 -0
- package/.output/public/_nuxt/{DLSrtpsA.js → D_eDAIsT.js} +1 -1
- package/.output/public/_nuxt/Da8A92cF.js +1 -0
- package/.output/public/_nuxt/{BxCKKeYs.js → DdH3op4b.js} +1 -1
- package/.output/public/_nuxt/DepFDZO3.js +1 -0
- package/.output/public/_nuxt/{CV9-fTmY.js → DfSBKzrC.js} +1 -1
- package/.output/public/_nuxt/{DT53RWbC.js → DfnKh3dZ.js} +1 -1
- package/.output/public/_nuxt/{ndShiWE8.js → DhpTfeip.js} +1 -1
- package/.output/public/_nuxt/{ybDYeNxd.js → Dk9nD32g.js} +1 -1
- package/.output/public/_nuxt/{D0HNloZ9.js → DkT2nCqn.js} +1 -1
- package/.output/public/_nuxt/DlW85lQq.js +4 -0
- package/.output/public/_nuxt/DnNio-ut.js +1 -0
- package/.output/public/_nuxt/{BfTuX0wq.js → DnQv_hst.js} +1 -1
- package/.output/public/_nuxt/{FUXhyidq.js → DqEOMteW.js} +1 -1
- package/.output/public/_nuxt/{Bti38m-M.js → Dsvu7YJT.js} +1 -1
- package/.output/public/_nuxt/DvhCDBrR.js +2 -0
- package/.output/public/_nuxt/DwQaVMZR.js +1 -0
- package/.output/public/_nuxt/E-_n_6vi.js +1 -0
- package/.output/public/_nuxt/{DP8hfJ9h.js → Ebw5l7n8.js} +1 -1
- package/.output/public/_nuxt/{nv9-6vBK.js → IPePdbzl.js} +1 -1
- package/.output/public/_nuxt/{BPRffDuo.js → LHoUGrfi.js} +1 -1
- package/.output/public/_nuxt/{CYsTqbBS.js → NERLHpOL.js} +1 -1
- package/.output/public/_nuxt/RAdNGxcF.js +1 -0
- package/.output/public/_nuxt/Vxyo_mU9.js +1 -0
- package/.output/public/_nuxt/{IvQlbZk6.js → YE1kAkU9.js} +1 -1
- package/.output/public/_nuxt/{DgE2YE3R.js → YmT5WiN5.js} +1 -1
- package/.output/public/_nuxt/ZcAfCxWE.js +17 -0
- package/.output/public/_nuxt/{cHAnlQbv.js → _rglcvXN.js} +1 -1
- package/.output/public/_nuxt/bFU9Y1Vw.js +10 -0
- package/.output/public/_nuxt/bfecIH89.js +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/31ca2be4-a949-4df6-9818-773fc085557a.json +1 -0
- package/.output/public/_nuxt/entry.BAvBQY-h.css +1 -0
- package/.output/public/_nuxt/four-S1Y.js +1 -0
- package/.output/public/_nuxt/{DiOLdHBC.js → gV2U_Gqd.js} +1 -1
- package/.output/public/_nuxt/{C-elpgyr.js → lGC893pn.js} +1 -1
- package/.output/public/_nuxt/nOfj-ar8.js +1 -0
- package/.output/public/_nuxt/oKrbs1XK.js +1 -0
- package/.output/public/_nuxt/oSJFAC38.js +1 -0
- package/.output/public/_nuxt/rL4C0HV5.js +1 -0
- package/.output/public/_nuxt/{Cdff9XNh.js → tQoyVPCE.js} +1 -1
- package/.output/public/_nuxt/{DEFEpYzn.js → uSPCvASp.js} +1 -1
- package/.output/public/_nuxt/{y17lMTFy.js → wkz5-1SO.js} +1 -1
- package/.output/public/_nuxt/yYlVYKCz.js +34 -0
- package/.output/public/_nuxt/{B9WhzpKO.js → zv8WdMx0.js} +1 -1
- package/.output/server/chunks/_/collect.mjs +1 -1
- package/.output/server/chunks/_/markers.mjs +1 -1
- package/.output/server/chunks/_/quarantine.mjs +1 -1
- package/.output/server/chunks/_/scope.mjs +43 -27
- package/.output/server/chunks/_/scope.mjs.map +1 -1
- package/.output/server/chunks/_/users.mjs +1 -1
- package/.output/server/chunks/build/{Breadcrumb-Ak2Lg3oM.mjs → Breadcrumb-3itRZ1uz.mjs} +2 -2
- package/.output/server/chunks/build/Breadcrumb-3itRZ1uz.mjs.map +1 -0
- package/.output/server/chunks/build/{BreadcrumbNav-DO7I_z-n.mjs → BreadcrumbNav-GnjBvXuT.mjs} +2 -2
- package/.output/server/chunks/build/BreadcrumbNav-GnjBvXuT.mjs.map +1 -0
- package/.output/server/chunks/build/{BrowserBadge-D33lqUcj.mjs → BrowserBadge-DQqJS9CV.mjs} +66 -6
- package/.output/server/chunks/build/BrowserBadge-DQqJS9CV.mjs.map +1 -0
- package/.output/server/chunks/build/{ChartCard-Y1UKwMsf.mjs → ChartCard-D0rzMf-N.mjs} +2 -2
- package/.output/server/chunks/build/ChartCard-D0rzMf-N.mjs.map +1 -0
- package/.output/server/chunks/build/{Checkbox-DvUBGagc.mjs → Checkbox-DmRKG-0s.mjs} +5 -5
- package/.output/server/chunks/build/Checkbox-DmRKG-0s.mjs.map +1 -0
- package/.output/server/chunks/build/{CodeBlock-BgE-NSmE.mjs → CodeBlock-DGhKVFad.mjs} +4 -4
- package/.output/server/chunks/build/CodeBlock-DGhKVFad.mjs.map +1 -0
- package/.output/server/chunks/build/{DashboardNavbar-BHmMSPX7.mjs → DashboardNavbar-DCr10nxL.mjs} +2 -2
- package/.output/server/chunks/build/DashboardNavbar-DCr10nxL.mjs.map +1 -0
- package/.output/server/chunks/build/{DashboardSidebarToggle-DCTnHiIv.mjs → DashboardSidebarToggle-8EpBhX0R.mjs} +3 -3
- package/.output/server/chunks/build/DashboardSidebarToggle-8EpBhX0R.mjs.map +1 -0
- package/.output/server/chunks/build/{DataLocationCard-B_YHdzSz.mjs → DataLocationCard-rzS-pgCP.mjs} +5 -5
- package/.output/server/chunks/build/DataLocationCard-rzS-pgCP.mjs.map +1 -0
- package/.output/server/chunks/build/{DiagnosisPanel-B646dK4p.mjs → DiagnosisPanel-BWTpoCKy.mjs} +8 -7
- package/.output/server/chunks/build/DiagnosisPanel-BWTpoCKy.mjs.map +1 -0
- package/.output/server/chunks/build/{useAiStatus-CWvIo32Q.mjs → DiagnosisResult-Br3qBLXe.mjs} +14 -36
- package/.output/server/chunks/build/DiagnosisResult-Br3qBLXe.mjs.map +1 -0
- package/.output/server/chunks/build/{DurationValue-D20oGbnc.mjs → DurationValue-CWKfjIF2.mjs} +2 -2
- package/.output/server/chunks/build/DurationValue-CWKfjIF2.mjs.map +1 -0
- package/.output/server/chunks/build/{EmptyState-Dtlab7S9.mjs → EmptyState-DC2q_7TD.mjs} +3 -3
- package/.output/server/chunks/build/EmptyState-DC2q_7TD.mjs.map +1 -0
- package/.output/server/chunks/build/{EntityLinks-D3fp57pR.mjs → EntityLinks-CF0xG3Y8.mjs} +6 -6
- package/.output/server/chunks/build/EntityLinks-CF0xG3Y8.mjs.map +1 -0
- package/.output/server/chunks/build/{EnvManagedBadge-Bg3FSiU1.mjs → EnvManagedBadge-UwD2b9v2.mjs} +3 -3
- package/.output/server/chunks/build/EnvManagedBadge-UwD2b9v2.mjs.map +1 -0
- package/.output/server/chunks/build/FeatureUnavailable-CwPms6X_.mjs +83 -0
- package/.output/server/chunks/build/FeatureUnavailable-CwPms6X_.mjs.map +1 -0
- package/.output/server/chunks/build/{FormField-B0HKsdMd.mjs → FormField-e7OnSKPM.mjs} +2 -2
- package/.output/server/chunks/build/FormField-e7OnSKPM.mjs.map +1 -0
- package/.output/server/chunks/build/GetStartedWizard-CB5v1Xzu.mjs +510 -0
- package/.output/server/chunks/build/GetStartedWizard-CB5v1Xzu.mjs.map +1 -0
- package/.output/server/chunks/build/{HelpHint-DrcIv-Oj.mjs → HelpHint-DjGrGFA7.mjs} +3 -3
- package/.output/server/chunks/build/HelpHint-DjGrGFA7.mjs.map +1 -0
- package/.output/server/chunks/build/{LoadingState-C3pBSuOO.mjs → LoadingState-B8v1nWJt.mjs} +3 -3
- package/.output/server/chunks/build/LoadingState-B8v1nWJt.mjs.map +1 -0
- package/.output/server/chunks/build/MetaStripGroup-dXXa_MzF.mjs +1205 -0
- package/.output/server/chunks/build/MetaStripGroup-dXXa_MzF.mjs.map +1 -0
- package/.output/server/chunks/build/{MiniRunBars-CZMugDrh.mjs → MiniRunBars-fgLMgRUp.mjs} +2 -2
- package/.output/server/chunks/build/MiniRunBars-fgLMgRUp.mjs.map +1 -0
- package/.output/server/chunks/build/{Modal-Ck2XLt8d.mjs → Modal-pSDlXzT3.mjs} +2 -2
- package/.output/server/chunks/build/Modal-pSDlXzT3.mjs.map +1 -0
- package/.output/server/chunks/build/{useSettingsNav-C3O866KC.mjs → NavigationMenu-cqpt11Ce.mjs} +6 -29
- package/.output/server/chunks/build/NavigationMenu-cqpt11Ce.mjs.map +1 -0
- package/.output/server/chunks/build/{OpenInIdeLink-C4MXA8ya.mjs → OpenInIdeLink-B9wvQkhy.mjs} +5 -5
- package/.output/server/chunks/build/{OpenInIdeLink-C4MXA8ya.mjs.map → OpenInIdeLink-B9wvQkhy.mjs.map} +1 -1
- package/.output/server/chunks/build/{ProjectTestCasesTable-CxfQ5wtN.mjs → ProjectTestCasesTable-BwHEtZTz.mjs} +19 -19
- package/.output/server/chunks/build/ProjectTestCasesTable-BwHEtZTz.mjs.map +1 -0
- package/.output/server/chunks/build/{RovingFocusItem-BJSzTBjy.mjs → RovingFocusItem--OEHI2P3.mjs} +2 -2
- package/.output/server/chunks/build/RovingFocusItem--OEHI2P3.mjs.map +1 -0
- package/.output/server/chunks/build/{RunReports-DFLv51TX.mjs → RunReports-BDRIWn3o.mjs} +3 -3
- package/.output/server/chunks/build/RunReports-BDRIWn3o.mjs.map +1 -0
- package/.output/server/chunks/build/{RunStatusBadge-FfGb6bkW.mjs → RunStatusBadge-CuTDknRJ.mjs} +2 -2
- package/.output/server/chunks/build/RunStatusBadge-CuTDknRJ.mjs.map +1 -0
- package/.output/server/chunks/build/{SectionCard-CN-v0FZ_.mjs → SectionCard-BW5Lynrr.mjs} +2 -2
- package/.output/server/chunks/build/SectionCard-BW5Lynrr.mjs.map +1 -0
- package/.output/server/chunks/build/{Select-CUqj50wi.mjs → Select-CVctwpib.mjs} +3 -3
- package/.output/server/chunks/build/Select-CVctwpib.mjs.map +1 -0
- package/.output/server/chunks/build/{SelectMenu-Db7osY7J.mjs → SelectMenu-XLVBEa11.mjs} +939 -7
- package/.output/server/chunks/build/{SelectMenu-Db7osY7J.mjs.map → SelectMenu-XLVBEa11.mjs.map} +1 -1
- package/.output/server/chunks/build/{SettingsField-D6iEYbEc.mjs → SettingsField-DvtRvI6O.mjs} +4 -4
- package/.output/server/chunks/build/SettingsField-DvtRvI6O.mjs.map +1 -0
- package/.output/server/chunks/build/{Slideover-DgCa80mf.mjs → Slideover-D270EZZD.mjs} +3 -3
- package/.output/server/chunks/build/Slideover-D270EZZD.mjs.map +1 -0
- package/.output/server/chunks/build/{StatTile-D61Vzo6e.mjs → StatTile-DpcVQFVI.mjs} +2 -26
- package/.output/server/chunks/build/StatTile-DpcVQFVI.mjs.map +1 -0
- package/.output/server/chunks/build/StatTileGrid-7zOFUQ6j.mjs +30 -0
- package/.output/server/chunks/build/StatTileGrid-7zOFUQ6j.mjs.map +1 -0
- package/.output/server/chunks/build/{Switch-CgUioOYB.mjs → Switch-8zWfwI5B.mjs} +3 -3
- package/.output/server/chunks/build/Switch-8zWfwI5B.mjs.map +1 -0
- package/.output/server/chunks/build/Table-BRk04Hd2.mjs +1 -1
- package/.output/server/chunks/build/{Tabs-Bbsg9wag.mjs → Tabs-BkSOnbaB.mjs} +2 -2
- package/.output/server/chunks/build/Tabs-BkSOnbaB.mjs.map +1 -0
- package/.output/server/chunks/build/{TestCaseHistoryChart-nMLPhdvD.mjs → TestCaseHistoryChart-C6t5RrCG.mjs} +6 -6
- package/.output/server/chunks/build/TestCaseHistoryChart-C6t5RrCG.mjs.map +1 -0
- package/.output/server/chunks/build/{TestMetaBadges-D5_yUtIP.mjs → TestMetaBadges-BlyKmfeP.mjs} +1 -1
- package/.output/server/chunks/build/TestMetaBadges-BlyKmfeP.mjs.map +1 -0
- package/.output/server/chunks/build/{TestStatusBar-j6h2Jp6A.mjs → TestStatusBar-DhbrM_rQ.mjs} +4 -4
- package/.output/server/chunks/build/TestStatusBar-DhbrM_rQ.mjs.map +1 -0
- package/.output/server/chunks/build/{Textarea-Dv2-lOvW.mjs → Textarea-vkMKVQTJ.mjs} +2 -2
- package/.output/server/chunks/build/Textarea-vkMKVQTJ.mjs.map +1 -0
- package/.output/server/chunks/build/{Tooltip-BOazooWP.mjs → Tooltip-Dv4htNP6.mjs} +3 -3
- package/.output/server/chunks/build/Tooltip-Dv4htNP6.mjs.map +1 -0
- package/.output/server/chunks/build/{VisuallyHiddenInput-D6kBJxVd.mjs → VisuallyHiddenInput-BHvzNumK.mjs} +2 -2
- package/.output/server/chunks/build/VisuallyHiddenInput-BHvzNumK.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-z5N6HPyC.mjs → _id_-2PMH6rl8.mjs} +26 -25
- package/.output/server/chunks/build/_id_-2PMH6rl8.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-BHh65pfg.mjs → _id_-8cGIgeg6.mjs} +1912 -1098
- package/.output/server/chunks/build/_id_-8cGIgeg6.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-Rzkqx55x.mjs → _id_-CUZ5S6y5.mjs} +43 -44
- package/.output/server/chunks/build/_id_-CUZ5S6y5.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-B78ky13D.mjs → _id_-DMkgWSLZ.mjs} +956 -429
- package/.output/server/chunks/build/_id_-DMkgWSLZ.mjs.map +1 -0
- package/.output/server/chunks/build/about-D3WXTDro.mjs +696 -0
- package/.output/server/chunks/build/about-D3WXTDro.mjs.map +1 -0
- package/.output/server/chunks/build/{account-DAfvaD-F.mjs → account-BslDNCoo.mjs} +6 -6
- package/.output/server/chunks/build/account-BslDNCoo.mjs.map +1 -0
- package/.output/server/chunks/build/{ai-B4VJ9K1K.mjs → ai-C23R9l94.mjs} +18 -18
- package/.output/server/chunks/build/{ai-B4VJ9K1K.mjs.map → ai-C23R9l94.mjs.map} +1 -1
- package/.output/server/chunks/build/{analytics-CJPC6t4L.mjs → analytics-DQHeToK0.mjs} +106 -80
- package/.output/server/chunks/build/analytics-DQHeToK0.mjs.map +1 -0
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/compare-RxHSOdsO.mjs +1 -0
- package/.output/server/chunks/build/{db.client-CQoVTYB9.mjs → db.client-D74DghqX.mjs} +38 -2
- package/.output/server/chunks/build/db.client-D74DghqX.mjs.map +1 -0
- package/.output/server/chunks/build/{default-zvbFgDJG.mjs → default-CeyePZ5I.mjs} +624 -79
- package/.output/server/chunks/build/default-CeyePZ5I.mjs.map +1 -0
- package/.output/server/chunks/build/{docs-DyuVEgtB.mjs → docs-f_bnC75q.mjs} +17 -17
- package/.output/server/chunks/build/{docs-DyuVEgtB.mjs.map → docs-f_bnC75q.mjs.map} +1 -1
- package/.output/server/chunks/build/{edit-CFR5g2Qf.mjs → edit-BOC4zWuH.mjs} +13 -15
- package/.output/server/chunks/build/edit-BOC4zWuH.mjs.map +1 -0
- package/.output/server/chunks/build/{fetch-B4FwBOzu.mjs → fetch-BQg_fhX0.mjs} +32 -4
- package/.output/server/chunks/build/fetch-BQg_fhX0.mjs.map +1 -0
- package/.output/server/chunks/build/{forgot-password-CC__1OnV.mjs → forgot-password-CxuVbGWy.mjs} +4 -3
- package/.output/server/chunks/build/forgot-password-CxuVbGWy.mjs.map +1 -0
- package/.output/server/chunks/build/{import-CZo3djDi.mjs → import-CC27wEIu.mjs} +14 -14
- package/.output/server/chunks/build/import-CC27wEIu.mjs.map +1 -0
- package/.output/server/chunks/build/{index-gCw_y4ZJ.mjs → index-B6PjfyTY.mjs} +44 -543
- package/.output/server/chunks/build/index-B6PjfyTY.mjs.map +1 -0
- package/.output/server/chunks/build/{index-CU2nZhAa.mjs → index-BOK1aJk9.mjs} +2 -1
- package/.output/server/chunks/build/index-BOK1aJk9.mjs.map +1 -0
- package/.output/server/chunks/build/{index-D7fe97l3.mjs → index-BhS1DuCr.mjs} +400 -151
- package/.output/server/chunks/build/index-BhS1DuCr.mjs.map +1 -0
- package/.output/server/chunks/build/{index-Stqw0dEI.mjs → index-DUmjP3Gr.mjs} +18 -19
- package/.output/server/chunks/build/index-DUmjP3Gr.mjs.map +1 -0
- package/.output/server/chunks/build/index-jvF53f7_.mjs +91 -0
- package/.output/server/chunks/build/index-jvF53f7_.mjs.map +1 -0
- package/.output/server/chunks/build/isValueEqualOrExist-D2qw9YEr.mjs +1 -1
- package/.output/server/chunks/build/{login-Da4u1IlW.mjs → login-CdpOhiP8.mjs} +8 -7
- package/.output/server/chunks/build/login-CdpOhiP8.mjs.map +1 -0
- package/.output/server/chunks/build/{mcp-B3IUvRgD.mjs → mcp-WTeO5WRo.mjs} +528 -16
- package/.output/server/chunks/build/mcp-WTeO5WRo.mjs.map +1 -0
- package/.output/server/chunks/build/{notifications-abDv0id8.mjs → notifications-yY6ik-fi.mjs} +11 -11
- package/.output/server/chunks/build/notifications-yY6ik-fi.mjs.map +1 -0
- package/.output/server/chunks/build/{pr-feedback-DjZID6q-.mjs → pr-feedback-Hv2Ydh_6.mjs} +8 -8
- package/.output/server/chunks/build/pr-feedback-Hv2Ydh_6.mjs.map +1 -0
- package/.output/server/chunks/build/{reset-password-BmrUS4ZD.mjs → reset-password-CFtO8A6n.mjs} +4 -3
- package/.output/server/chunks/build/reset-password-CFtO8A6n.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +51 -34
- package/.output/server/chunks/build/{settings-Du7YqF8i.mjs → settings-DIpvnY8_.mjs} +11 -9
- package/.output/server/chunks/build/settings-DIpvnY8_.mjs.map +1 -0
- package/.output/server/chunks/build/{settings-metadata-DrEqWcW-.mjs → settings-metadata-DRv9VveS.mjs} +32 -2
- package/.output/server/chunks/build/settings-metadata-DRv9VveS.mjs.map +1 -0
- package/.output/server/chunks/build/setup-Di0UMyWx.mjs +1116 -0
- package/.output/server/chunks/build/setup-Di0UMyWx.mjs.map +1 -0
- package/.output/server/chunks/build/{storage-B4vzxd8G.mjs → storage-gAbY1KbQ.mjs} +13 -13
- package/.output/server/chunks/build/storage-gAbY1KbQ.mjs.map +1 -0
- package/.output/server/chunks/build/{tags-DauTe_F-.mjs → tags-DJ80wCqt.mjs} +6 -7
- package/.output/server/chunks/build/tags-DJ80wCqt.mjs.map +1 -0
- package/.output/server/chunks/build/{test-cases-DUvaO1He.mjs → test-cases-YP83YlnL.mjs} +21 -21
- package/.output/server/chunks/build/test-cases-YP83YlnL.mjs.map +1 -0
- package/.output/server/chunks/build/test-functions-BwLTxGmM.mjs +550 -0
- package/.output/server/chunks/build/test-functions-BwLTxGmM.mjs.map +1 -0
- package/.output/server/chunks/build/{timeout-hygiene-CbnSaVbK.mjs → timeout-hygiene-RpXDjXTX.mjs} +6 -6
- package/.output/server/chunks/build/timeout-hygiene-RpXDjXTX.mjs.map +1 -0
- package/.output/server/chunks/build/useAiStatus-UR8x-feE.mjs +9 -0
- package/.output/server/chunks/build/useAiStatus-UR8x-feE.mjs.map +1 -0
- package/.output/server/chunks/build/{useCopyRich-BemRsKgv.mjs → useCopyRich-Cd5Yj_Wy.mjs} +721 -239
- package/.output/server/chunks/build/useCopyRich-Cd5Yj_Wy.mjs.map +1 -0
- package/.output/server/chunks/build/{useDesktopDownload-D49JRQSw.mjs → useDesktopDownload-BmR6ouz2.mjs} +3 -3
- package/.output/server/chunks/build/useDesktopDownload-BmR6ouz2.mjs.map +1 -0
- package/.output/server/chunks/build/{useOpenInIde-4GFf-kdi.mjs → useOpenInIde-DolN3bZ5.mjs} +2 -2
- package/.output/server/chunks/build/useOpenInIde-DolN3bZ5.mjs.map +1 -0
- package/.output/server/chunks/build/useSettingsNav-DfnOFlR_.mjs +19 -0
- package/.output/server/chunks/build/useSettingsNav-DfnOFlR_.mjs.map +1 -0
- package/.output/server/chunks/build/useTauri-Kf3HE_42.mjs +11 -0
- package/.output/server/chunks/build/useTauri-Kf3HE_42.mjs.map +1 -0
- package/.output/server/chunks/build/{users-CTUqXyGh.mjs → users-I2K7HXS2.mjs} +6 -7
- package/.output/server/chunks/build/users-I2K7HXS2.mjs.map +1 -0
- package/.output/server/chunks/build/{wasted-time-lYkx5YO4.mjs → wasted-time-DyIk0olc.mjs} +11 -11
- package/.output/server/chunks/build/wasted-time-DyIk0olc.mjs.map +1 -0
- package/.output/server/chunks/nitro/nitro.mjs +3124 -1782
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/__piwi/session.get.mjs +2 -1
- package/.output/server/chunks/routes/__piwi/session.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/admin/stats.get.mjs +1 -0
- package/.output/server/chunks/routes/api/admin/stats.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/ai/status.get.mjs +1 -0
- package/.output/server/chunks/routes/api/ai/status.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +1 -0
- package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/logout.post.mjs +1 -0
- package/.output/server/chunks/routes/api/auth/logout.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/me.get.mjs +1 -0
- package/.output/server/chunks/routes/api/auth/me.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +1 -0
- package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +1 -0
- package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +1 -0
- package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +1 -0
- package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/setup.get.mjs +1 -0
- package/.output/server/chunks/routes/api/auth/setup.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +1 -0
- package/.output/server/chunks/routes/api/auth/verify-email.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +1 -0
- package/.output/server/chunks/routes/api/channels/_id/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/channels/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +1 -0
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +1 -0
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/desktop/import-local.post.mjs +89 -0
- package/.output/server/chunks/routes/api/desktop/import-local.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs +1 -0
- package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/files/_...path_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/files/_...path_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +2 -1
- package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get2.mjs +2 -1
- package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get3.mjs +2 -1
- package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get4.mjs +2 -1
- package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get5.mjs +1 -0
- package/.output/server/chunks/routes/api/index.get5.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post2.mjs +1 -1
- package/.output/server/chunks/routes/api/index.post3.mjs +1 -1
- package/.output/server/chunks/routes/api/index.post4.mjs +1 -1
- package/.output/server/chunks/routes/api/index.post5.mjs +1 -1
- package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +2 -1
- package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/links/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/links/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/links/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/markers/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/markers/_id_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/notifications/stream.get.mjs +2 -1
- package/.output/server/chunks/routes/api/notifications/stream.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/members.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/members.put.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/test-functions/extract.post.mjs +76 -0
- package/.output/server/chunks/routes/api/projects/_id/test-functions/extract.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/projects/_id/test-functions/validate-proposal.post.mjs +66 -0
- package/.output/server/chunks/routes/api/projects/_id/test-functions/validate-proposal.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/projects/_id/test-functions.get.mjs +53 -0
- package/.output/server/chunks/routes/api/projects/_id/test-functions.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/projects/_id/test-functions.post.mjs +67 -0
- package/.output/server/chunks/routes/api/projects/_id/test-functions.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/menu.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/menu.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/overview.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects/overview.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects.get.mjs +2 -1
- package/.output/server/chunks/routes/api/projects.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/search.get.mjs +2 -1
- package/.output/server/chunks/routes/api/search.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +2 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +2 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/models.post.mjs +1 -0
- package/.output/server/chunks/routes/api/settings/ai/models.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +2 -1
- package/.output/server/chunks/routes/api/settings/ai/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +2 -1
- package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai.get.mjs +2 -1
- package/.output/server/chunks/routes/api/settings/ai.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai.put.mjs +2 -1
- package/.output/server/chunks/routes/api/settings/ai.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs +2 -1
- package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs +2 -1
- package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/smtp.get.mjs +2 -1
- package/.output/server/chunks/routes/api/settings/smtp.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +2 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +2 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +2 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +2 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/setup-status.get.mjs +99 -0
- package/.output/server/chunks/routes/api/setup-status.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/stream.get.mjs +2 -1
- package/.output/server/chunks/routes/api/stream.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/tags/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tags/_id_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-functions/_id_.delete.mjs +60 -0
- package/.output/server/chunks/routes/api/test-functions/_id_.delete.mjs.map +1 -0
- package/.output/server/chunks/routes/api/test-functions/_id_.put.mjs +69 -0
- package/.output/server/chunks/routes/api/test-functions/_id_.put.mjs.map +1 -0
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +2 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +6 -3
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs +2 -2
- package/.output/server/chunks/routes/api/test-runs/import.post.mjs +5 -128
- package/.output/server/chunks/routes/api/test-runs/import.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/recent.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/setup.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/start.post.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/start.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +4 -1
- package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/traces/check.post.mjs +2 -1
- package/.output/server/chunks/routes/api/traces/check.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/index.get.mjs +1 -0
- package/.output/server/chunks/routes/api/users/_id/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +2 -1
- package/.output/server/chunks/routes/api/users/_id/invite.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +2 -1
- package/.output/server/chunks/routes/api/users/_id/projects.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/version.get.mjs +2 -1
- package/.output/server/chunks/routes/api/version.get.mjs.map +1 -1
- package/.output/server/chunks/routes/mcp.post.mjs +41 -11
- package/.output/server/chunks/routes/mcp.post.mjs.map +1 -1
- package/.output/server/chunks/routes/renderer.mjs +1 -1
- package/.output/server/chunks/tasks/sweep.mjs +1 -0
- package/.output/server/chunks/tasks/sweep.mjs.map +1 -1
- package/.output/server/chunks/tasks/sweep2.mjs +1 -0
- package/.output/server/chunks/tasks/sweep2.mjs.map +1 -1
- package/.output/server/database/migrations/0043_watery_dragon_lord.sql +22 -0
- package/.output/server/database/migrations/meta/0043_snapshot.json +3764 -0
- package/.output/server/database/migrations/meta/_journal.json +7 -0
- package/.output/server/database/migrations-pg/0044_dark_triathlon.sql +22 -0
- package/.output/server/database/migrations-pg/meta/0044_snapshot.json +4473 -0
- package/.output/server/database/migrations-pg/meta/_journal.json +7 -0
- package/.output/server/index.mjs +2 -1
- package/.output/server/index.mjs.map +1 -1
- package/.output/server/package.json +1 -1
- package/package.json +1 -1
- package/.output/public/_nuxt/-09h6CA9.js +0 -1
- package/.output/public/_nuxt/81InBX9v.js +0 -1
- package/.output/public/_nuxt/Ar3IelOY.js +0 -1
- package/.output/public/_nuxt/B33iXw77.js +0 -1
- package/.output/public/_nuxt/B3B9Ii2A.js +0 -1
- package/.output/public/_nuxt/B3HO8kuh.js +0 -1
- package/.output/public/_nuxt/B7NBP1C-.js +0 -1
- package/.output/public/_nuxt/BJ0XQElc.js +0 -1
- package/.output/public/_nuxt/BSIxhGsh.js +0 -1
- package/.output/public/_nuxt/BVaxh6Nl.js +0 -4
- package/.output/public/_nuxt/Bc8mOoz9.js +0 -4
- package/.output/public/_nuxt/BeLWlVK0.js +0 -1
- package/.output/public/_nuxt/Bn0YQDyy.js +0 -1
- package/.output/public/_nuxt/Bp5ELvx9.js +0 -1
- package/.output/public/_nuxt/BpUaY9nH.js +0 -2
- package/.output/public/_nuxt/C2_3mdPC.js +0 -1
- package/.output/public/_nuxt/C5iG7O4O.js +0 -64
- package/.output/public/_nuxt/CHNwfU1y.js +0 -1
- package/.output/public/_nuxt/CNFYDQmj.js +0 -1
- package/.output/public/_nuxt/CU5S9GCh.js +0 -1
- package/.output/public/_nuxt/CUtJobDm.js +0 -1
- package/.output/public/_nuxt/CpjgB2aY.js +0 -1
- package/.output/public/_nuxt/CrwJAwhk.js +0 -1
- package/.output/public/_nuxt/CtQBsNUb.js +0 -1
- package/.output/public/_nuxt/CuSVQEkS.js +0 -3
- package/.output/public/_nuxt/CylWPruw.js +0 -1
- package/.output/public/_nuxt/CzGyac8q.js +0 -1
- package/.output/public/_nuxt/DDDpCFpF.js +0 -1
- package/.output/public/_nuxt/DVDXJYq2.js +0 -2
- package/.output/public/_nuxt/DW0xl3I6.js +0 -17
- package/.output/public/_nuxt/Dgf5N4Ng.js +0 -1
- package/.output/public/_nuxt/DiZyJYez.js +0 -1
- package/.output/public/_nuxt/Dk9fwOCm.js +0 -34
- package/.output/public/_nuxt/DoUy4UHi.js +0 -44
- package/.output/public/_nuxt/DslPMqfa.js +0 -1
- package/.output/public/_nuxt/OSduWzyz.js +0 -1
- package/.output/public/_nuxt/SlIRLREZ.js +0 -6
- package/.output/public/_nuxt/WsxFTEFq.js +0 -10
- package/.output/public/_nuxt/aQgs_c6e.js +0 -9
- package/.output/public/_nuxt/builds/meta/ab473028-4b37-4884-b243-b8f6e5046e5e.json +0 -1
- package/.output/public/_nuxt/dYCKgE-3.js +0 -5
- package/.output/public/_nuxt/entry.CPhW41mh.css +0 -1
- package/.output/public/_nuxt/g26aVPxc.js +0 -1
- package/.output/public/_nuxt/zQyPuvV1.js +0 -1
- package/.output/server/chunks/_/import-runs.mjs +0 -351
- package/.output/server/chunks/_/import-runs.mjs.map +0 -1
- package/.output/server/chunks/build/Breadcrumb-Ak2Lg3oM.mjs.map +0 -1
- package/.output/server/chunks/build/BreadcrumbNav-DO7I_z-n.mjs.map +0 -1
- package/.output/server/chunks/build/BrowserBadge-D33lqUcj.mjs.map +0 -1
- package/.output/server/chunks/build/ChartCard-Y1UKwMsf.mjs.map +0 -1
- package/.output/server/chunks/build/Checkbox-DvUBGagc.mjs.map +0 -1
- package/.output/server/chunks/build/CiEnvCard-CrjOM17n.mjs +0 -631
- package/.output/server/chunks/build/CiEnvCard-CrjOM17n.mjs.map +0 -1
- package/.output/server/chunks/build/CodeBlock-BgE-NSmE.mjs.map +0 -1
- package/.output/server/chunks/build/DashboardNavbar-BHmMSPX7.mjs.map +0 -1
- package/.output/server/chunks/build/DashboardSidebarToggle-DCTnHiIv.mjs.map +0 -1
- package/.output/server/chunks/build/DataLocationCard-B_YHdzSz.mjs.map +0 -1
- package/.output/server/chunks/build/DiagnosisPanel-B646dK4p.mjs.map +0 -1
- package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs.map +0 -1
- package/.output/server/chunks/build/EmptyState-Dtlab7S9.mjs.map +0 -1
- package/.output/server/chunks/build/EntityLinks-D3fp57pR.mjs.map +0 -1
- package/.output/server/chunks/build/EnvManagedBadge-Bg3FSiU1.mjs.map +0 -1
- package/.output/server/chunks/build/FormField-B0HKsdMd.mjs.map +0 -1
- package/.output/server/chunks/build/HelpHint-DrcIv-Oj.mjs.map +0 -1
- package/.output/server/chunks/build/LoadingState-C3pBSuOO.mjs.map +0 -1
- package/.output/server/chunks/build/MiniRunBars-CZMugDrh.mjs.map +0 -1
- package/.output/server/chunks/build/Modal-Ck2XLt8d.mjs.map +0 -1
- package/.output/server/chunks/build/ProjectTestCasesTable-CxfQ5wtN.mjs.map +0 -1
- package/.output/server/chunks/build/RovingFocusItem-BJSzTBjy.mjs.map +0 -1
- package/.output/server/chunks/build/RunReports-DFLv51TX.mjs.map +0 -1
- package/.output/server/chunks/build/RunStatusBadge-FfGb6bkW.mjs.map +0 -1
- package/.output/server/chunks/build/SectionCard-CN-v0FZ_.mjs.map +0 -1
- package/.output/server/chunks/build/Select-CUqj50wi.mjs.map +0 -1
- package/.output/server/chunks/build/SettingsField-D6iEYbEc.mjs.map +0 -1
- package/.output/server/chunks/build/Slideover-DgCa80mf.mjs.map +0 -1
- package/.output/server/chunks/build/StatTile-D61Vzo6e.mjs.map +0 -1
- package/.output/server/chunks/build/Switch-CgUioOYB.mjs.map +0 -1
- package/.output/server/chunks/build/Tabs-Bbsg9wag.mjs.map +0 -1
- package/.output/server/chunks/build/TestCaseHistoryChart-nMLPhdvD.mjs.map +0 -1
- package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs.map +0 -1
- package/.output/server/chunks/build/TestStatusBar-j6h2Jp6A.mjs.map +0 -1
- package/.output/server/chunks/build/Textarea-Dv2-lOvW.mjs.map +0 -1
- package/.output/server/chunks/build/Tooltip-BOazooWP.mjs.map +0 -1
- package/.output/server/chunks/build/VisuallyHiddenInput-D6kBJxVd.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-B78ky13D.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-BHh65pfg.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-Rzkqx55x.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-z5N6HPyC.mjs.map +0 -1
- package/.output/server/chunks/build/about-CvSP73Ug.mjs +0 -781
- package/.output/server/chunks/build/about-CvSP73Ug.mjs.map +0 -1
- package/.output/server/chunks/build/account-DAfvaD-F.mjs.map +0 -1
- package/.output/server/chunks/build/analytics-CJPC6t4L.mjs.map +0 -1
- package/.output/server/chunks/build/db.client-CQoVTYB9.mjs.map +0 -1
- package/.output/server/chunks/build/default-zvbFgDJG.mjs.map +0 -1
- package/.output/server/chunks/build/edit-CFR5g2Qf.mjs.map +0 -1
- package/.output/server/chunks/build/fetch-B4FwBOzu.mjs.map +0 -1
- package/.output/server/chunks/build/forgot-password-CC__1OnV.mjs.map +0 -1
- package/.output/server/chunks/build/import-CZo3djDi.mjs.map +0 -1
- package/.output/server/chunks/build/index-CU2nZhAa.mjs.map +0 -1
- package/.output/server/chunks/build/index-D7fe97l3.mjs.map +0 -1
- package/.output/server/chunks/build/index-Stqw0dEI.mjs.map +0 -1
- package/.output/server/chunks/build/index-gCw_y4ZJ.mjs.map +0 -1
- package/.output/server/chunks/build/index-tR6owKzj.mjs +0 -167
- package/.output/server/chunks/build/index-tR6owKzj.mjs.map +0 -1
- package/.output/server/chunks/build/login-Da4u1IlW.mjs.map +0 -1
- package/.output/server/chunks/build/mcp-B3IUvRgD.mjs.map +0 -1
- package/.output/server/chunks/build/notifications-abDv0id8.mjs.map +0 -1
- package/.output/server/chunks/build/pr-feedback-DjZID6q-.mjs.map +0 -1
- package/.output/server/chunks/build/reset-password-BmrUS4ZD.mjs.map +0 -1
- package/.output/server/chunks/build/settings-Du7YqF8i.mjs.map +0 -1
- package/.output/server/chunks/build/settings-metadata-DrEqWcW-.mjs.map +0 -1
- package/.output/server/chunks/build/storage-B4vzxd8G.mjs.map +0 -1
- package/.output/server/chunks/build/tags-DauTe_F-.mjs.map +0 -1
- package/.output/server/chunks/build/test-cases-DUvaO1He.mjs.map +0 -1
- package/.output/server/chunks/build/timeout-hygiene-CbnSaVbK.mjs.map +0 -1
- package/.output/server/chunks/build/useAiStatus-CWvIo32Q.mjs.map +0 -1
- package/.output/server/chunks/build/useCopy-CeKWgHyT.mjs +0 -33
- package/.output/server/chunks/build/useCopy-CeKWgHyT.mjs.map +0 -1
- package/.output/server/chunks/build/useCopyRich-BemRsKgv.mjs.map +0 -1
- package/.output/server/chunks/build/useDesktopDownload-D49JRQSw.mjs.map +0 -1
- package/.output/server/chunks/build/useOpenInIde-4GFf-kdi.mjs.map +0 -1
- package/.output/server/chunks/build/useSettingsNav-C3O866KC.mjs.map +0 -1
- package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs +0 -7
- package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs.map +0 -1
- package/.output/server/chunks/build/users-CTUqXyGh.mjs.map +0 -1
- package/.output/server/chunks/build/virtualizer-Cd1hhlxC.mjs +0 -940
- package/.output/server/chunks/build/virtualizer-Cd1hhlxC.mjs.map +0 -1
- package/.output/server/chunks/build/wasted-time-lYkx5YO4.mjs.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{_ as ts}from"./9ti9eNH9.js";import{d as fe,o as s,c as a,j as i,p as ve,i as n,z as ss,f as b,K as at,g as r,m as w,t as l,k as e,y as ie,_ as Ce,F as O,v as p,A as ot,b as ht,P as ft,l as Fe,ak as pt,s as we,G as Ee,D as lt,q as J,h as S,r as H,L as je,R as ke,C as Ae,n as Ge,H as Qe,J as me,al as gt,E as ns,I as as,u as Oe,w as Ue,ah as os,B as ls,ad as vt,a as is,e as rs}from"./DCFbQvIN.js";import{_ as kt}from"./Ebw5l7n8.js";import{_ as us}from"./B_13C0GF.js";import{_ as cs}from"./COhdybDy.js";import{_ as ds,a as ms}from"./DQM62mxB.js";import{_ as fs,d as ps,a as gs,b as xs,c as ys}from"./C5PSqfKi.js";import{_ as hs}from"./CtstIQSh.js";import{_ as Ke}from"./DfSBKzrC.js";import{_ as Ie}from"./BpM6ZPIG.js";import{_ as bt}from"./Chpah_7l.js";import{_ as vs}from"./D9knOn6D.js";import{y as wt,n as _t,p as $t,f as it,a as ks,h as Ct,m as bs,z as tt,A as st,k as De,B as Tt,j as nt,b as ws,c as _s,i as ce}from"./BAKUqW95.js";import{f as Ve}from"./D-c8ZSws.js";import{_ as $s}from"./wkz5-1SO.js";import{_ as rt}from"./Cpsq-kYE.js";import{_ as Cs}from"./B3rirOqU.js";import{b as Rt}from"./BfTNbVc_.js";import{a as ut,u as Le}from"./E-_n_6vi.js";import{_ as Ts}from"./BrxtP_cN.js";import{_ as zt}from"./Ckgsh9AT.js";import{_ as Rs}from"./Dsvu7YJT.js";import{_ as St}from"./LHoUGrfi.js";import{_ as zs}from"./IPePdbzl.js";import{_ as It}from"./CKYddHa6.js";import{u as Ss}from"./lGC893pn.js";import{_ as Is}from"./Dk9nD32g.js";import{_ as Ft}from"./DdH3op4b.js";import{_ as Pt}from"./D_eDAIsT.js";import{_ as Fs}from"./B3Fsod9X.js";import{_ as ct}from"./CTP8Pw0-.js";import{_ as Dt}from"./gV2U_Gqd.js";import{_ as Ps}from"./ZcAfCxWE.js";import{_ as jt}from"./oKrbs1XK.js";import{_ as Ds}from"./RAdNGxcF.js";import{_ as js}from"./DL24AjfW.js";import{_ as Ns}from"./DkT2nCqn.js";import{u as Bs}from"./BpBHls4-.js";import{_ as Ms}from"./DX4tAP78.js";import{u as As,s as Us}from"./CWKmbYlT.js";import"./C2hNxjjz.js";import"./zv8WdMx0.js";import"./NERLHpOL.js";import"./BGusFAvZ.js";import"./CIEceDOw.js";import"./Vxyo_mU9.js";import"./CTD_pJ_v.js";import"./D8gX1Jde.js";import"./_rglcvXN.js";import"./YE1kAkU9.js";import"./BjaRappk.js";import"./D7W_4Sqc.js";import"./B1RmmOsM.js";import"./uSPCvASp.js";import"./CFTZwazK.js";import"./DqEOMteW.js";import"./BGL_V7Y4.js";import"./CifRHVaR.js";const Ls={key:0,class:"inline-flex items-center gap-2 text-info"},Es={type:"button",class:"inline-flex items-center gap-1.5 rounded-md px-1.5 py-0.5 -my-0.5 -ml-1.5 text-muted hover:text-default hover:bg-elevated/60 transition-colors cursor-pointer",title:"Stored reports & artifacts"},Os={class:"tabular-nums whitespace-nowrap"},Ks={class:"text-dimmed"},Ws={class:"p-3 w-72 space-y-2"},Hs={class:"text-xs font-medium text-muted inline-flex items-center gap-1"},Vs={class:"text-xs tabular-nums text-dimmed shrink-0"},Gs={key:0,class:"flex items-center justify-between gap-2 text-sm border-t border-default pt-2"},Xs={class:"truncate"},qs={class:"text-xs tabular-nums text-dimmed shrink-0"},Ys=fe({__name:"RunStorageChip",props:{storageStats:{},reports:{},finalizing:{type:Boolean}},setup(t){const y=ot();return(k,R)=>{const C=ve,d=ss,T=Ie,u=Ce,h=at;return t.finalizing?(s(),a("div",Ls,[i(C,{name:"i-lucide-upload",class:"size-3.5 shrink-0 animate-pulse"}),R[0]||(R[0]=n("span",{class:"text-xs font-medium whitespace-nowrap"},"Uploading reports & traces…",-1)),i(d,{value:null,size:"sm",color:"info",class:"w-24 rounded-full animate-pulse"})])):t.storageStats?.totalFiles?(s(),b(h,{key:1},{content:r(()=>[n("div",Ws,[n("p",Hs,[R[1]||(R[1]=w(" Stored artifacts ",-1)),i(T,{topic:"run.reports"})]),(s(!0),a(O,null,ie(t.reports,B=>(s(),a("div",{key:`${B.type}-${B.path}`,class:"flex items-center justify-between gap-2 min-w-0"},[i(u,{href:("fileApiUrl"in k?k.fileApiUrl:e(_t))(B.path,null,e(y).app?.baseURL),icon:("reportIcon"in k?k.reportIcon:e(wt))(B.type),target:"_blank",size:"xs",variant:"outline",class:"min-w-0",ui:{label:"truncate"}},{default:r(()=>[w(l(B.label),1)]),_:2},1032,["href","icon"]),n("span",Vs,l(("formatBytes"in k?k.formatBytes:e(Ve))(B.size)),1)]))),128)),t.storageStats.testCaseFilesCount>0?(s(),a("div",Gs,[n("span",Xs,"Test files ("+l(t.storageStats.testCaseFilesCount)+")",1),n("span",qs,l(("formatBytes"in k?k.formatBytes:e(Ve))(t.storageStats.testCaseFilesSize)),1)])):p("",!0)])]),default:r(()=>[n("button",Es,[i(C,{name:"i-lucide-database",class:"size-3.5 text-dimmed shrink-0"}),n("span",Os,[w(l(("formatBytes"in k?k.formatBytes:e(Ve))(t.storageStats.totalSize))+" ",1),n("span",Ks,"· "+l(t.storageStats.totalFiles)+" file"+l(t.storageStats.totalFiles===1?"":"s"),1)]),i(C,{name:"i-lucide-chevron-down",class:"size-3 text-dimmed shrink-0"})])]),_:1})):p("",!0)}}}),Js=Object.assign(Ys,{__name:"RunStorageChip"}),Zs={class:"flex items-center gap-3 flex-1 min-w-0 justify-between"},Qs={class:"flex items-center gap-3 min-w-0"},en={class:"text-sm font-semibold truncate flex items-center gap-1"},tn={class:"flex items-center gap-3 shrink-0 max-sm:hidden"},sn={class:"text-xs text-zinc-500 tabular-nums whitespace-nowrap"},nn={class:"text-zinc-700 dark:text-zinc-300"},an={class:"text-xs text-emerald-600 dark:text-emerald-400 tabular-nums whitespace-nowrap"},on={class:"text-xs text-rose-600 dark:text-rose-400 tabular-nums whitespace-nowrap"},ln={class:"text-xs text-zinc-500 tabular-nums whitespace-nowrap"},rn={class:"text-xs text-amber-600 dark:text-amber-400 tabular-nums whitespace-nowrap",title:"Tests that never ran (maxFailures cutoff or a serial-group failure)"},un={class:"text-xs text-orange-600 dark:text-orange-400 tabular-nums whitespace-nowrap"},cn={class:"@container"},dn={class:"space-y-3"},mn={class:"flex items-start justify-between gap-x-3 gap-y-2 flex-wrap pr-8"},fn={class:"min-w-0 flex-1 basis-64"},pn={class:"flex items-center gap-2 flex-wrap"},gn={class:"text-base font-bold shrink-0 flex items-center gap-1"},xn={class:"mt-1 text-xs text-muted flex items-center gap-1.5 flex-wrap"},yn={class:"text-dimmed"},hn={class:"flex items-center gap-1.5 shrink-0"},vn={class:"p-2 space-y-1 min-w-32"},kn=["onClick"],bn={class:"hidden @2xl:inline"},wn={class:"text-xl font-bold mt-0.5"},_n={class:"relative"},$n={class:"text-xl font-bold mt-0.5 text-emerald-600 dark:text-emerald-400"},Cn={class:"text-xl font-bold mt-0.5 text-rose-600 dark:text-rose-400"},Tn={class:"text-xl font-bold mt-0.5 text-zinc-600 dark:text-zinc-400"},Rn={class:"text-xl font-bold mt-0.5 text-amber-600 dark:text-amber-400"},zn={key:0,class:"flex items-center gap-x-4 gap-y-1.5 flex-wrap"},Sn={class:"flex-1 basis-60 min-w-44 max-w-xl"},In={class:"flex items-center flex-wrap gap-x-3 gap-y-1 text-xs shrink-0"},Fn={class:"flex items-center gap-1"},Pn={key:0,class:"flex items-center gap-1"},Dn={key:1,class:"flex items-center gap-1"},jn={key:2,class:"flex items-center gap-1"},Nn={key:0,class:"rounded-full border border-default px-2 py-0.5 text-xs bg-elevated/60"},Bn={key:1},Mn=["href"],An={key:1},Un={class:"text-muted"},Ln={key:0,class:"font-medium"},En=["title"],On={key:2,class:"text-muted"},Kn=["title"],Wn={class:"text-muted whitespace-nowrap"},Hn={class:"text-muted"},Vn={key:0,class:"mt-2"},Gn={class:"bg-zinc-50 dark:bg-zinc-900 p-2.5 rounded text-xs font-mono overflow-x-auto max-h-48 overflow-y-auto"},Xn={class:"m-0"},qn=fe({__name:"RunSummary",props:{testRun:{},displayProgress:{},allReports:{},showCustomData:{type:Boolean},finalizing:{type:Boolean},activeFilter:{},totalWastedTime:{}},emits:["update:showCustomData","filter-status","label-updated"],setup(t,{emit:y}){const k=t,R=y,C=ht(),d=ot(),T=S(()=>k.testRun?.storageStats),u=S(()=>k.testRun?.metadata?.ci),h=S(()=>k.testRun?.metadata?.scm),B=S(()=>k.testRun?.metadata?.tags),M=S(()=>k.testRun?.metadata?.customData),P=S(()=>!!(u.value||k.testRun?.environment)),I=S(()=>!!(k.testRun?.playwrightVersion||k.testRun?.reporterVersion)),D=S(()=>!!(T.value?.totalFiles||k.finalizing)),W=S(()=>k.allReports[0]??null),{copy:L,copied:f}=ut(),z=H("file-line"),_=H(!1),c=S(()=>k.testRun?.testCases?k.testRun.testCases.filter(j=>j.status==="failed"||j.status==="timedout").map(j=>({filePath:(j.filePath||j.location?.split(":")[0])??"",title:j.title,line:j.location&&parseInt(j.location.split(":")[1]??"",10)||null,projectName:j.browser?.projectName||null})):[]);function m(){return Rt(c.value,{mode:z.value})}async function A(){const j=m();j&&(_.value=!0,await L(j,{toast:"Retry command copied"}),setTimeout(()=>{_.value=!1},2e3))}const $=S(()=>_.value?"Copied!":Ct(m()));function E(){const j=k.testRun;if(!j)return"";const o=j.status==="passed"?"✅":j.status==="failed"?"❌":j.status==="running"?"🔄":"⚠️",F=j.label?` — ${j.label}`:"",V=j.project?.label??j.project?.name??"",re=j.totalTests??0,Z=j.passedTests??0,v=j.failedTests??0,X=j.skippedTests??0,ne=j.didNotRunTests??0,te=j.flakyTests??0,xe=ks(j.duration),be=te>0?` · ${te} flaky`:"",se=ne>0?` · ${ne} didn't run`:"";return[`*Run #${j.id}*${F}`,`Status: ${o} ${j.status} | Project: ${V}`,`Tests: ${re} total · ${Z} passed · ${v} failed · ${X} skipped${se}${be}`,`Duration: ${xe}`].join(`
|
|
2
|
+
`)}const x=H(""),Y=H(!1),Q=H(!1);let oe=!1;const ee=H(null);function le(){oe=!1,x.value=k.testRun?.label??"",Y.value=!0,je(()=>ee.value?.focus())}async function K(){if(Q.value)return;if(oe){oe=!1;return}const j=k.testRun;if(j){Q.value=!0;try{await $fetch(`/api/test-runs/${j.id}`,{method:"PATCH",body:{label:x.value||null}}),Y.value=!1,R("label-updated")}catch(o){const F=o&&typeof o=="object"&&"data"in o?o.data?.message:"Failed to save label";C.add({title:"Error",description:F||"Failed to save label",color:"error"})}finally{Q.value=!1}}}function N(){oe=!0,Y.value=!1}function he(j){j.key==="Enter"?K():j.key==="Escape"&&N()}return(j,o)=>{const F=fs,V=ve,re=we,Z=hs,v=Ke,X=Ie,ne=bt,te=Ee,xe=kt,be=lt,se=Ce,Te=at,Re=ps,pe=vs,ge=xs,_e=Js,Se=$s,g=gs,$e=rt,Ne=Cs;return s(),b(Ne,{"storage-key":"test-run"},{folded:r(()=>[n("div",Zs,[n("div",Qs,[i(F,{status:t.testRun?.status??"",size:"sm"},null,8,["status"]),n("span",en,[w(" Run #"+l(t.testRun?.id)+" ",1),e(Y)?(s(),a(O,{key:0},[ft(n("input",{ref_key:"labelInputRef",ref:ee,"onUpdate:modelValue":o[0]||(o[0]=ae=>Fe(x)?x.value=ae:null),type:"text",placeholder:"Add a label...",class:"inline-block w-40 text-sm font-normal border-b border-dashed border-zinc-400 bg-transparent outline-none focus:border-primary px-0.5 py-0",onKeydown:he,onBlur:K},null,544),[[pt,e(x)]]),e(Q)?(s(),b(V,{key:0,name:"i-lucide-loader-circle",class:"size-3.5 text-zinc-400 animate-spin shrink-0"})):p("",!0)],64)):(s(),a(O,{key:1},[t.testRun?.label?(s(),a("span",{key:0,class:"font-normal text-zinc-500 ml-1.5 cursor-pointer hover:text-zinc-700 dark:hover:text-zinc-300 border-b border-dashed border-transparent hover:border-zinc-400",onClick:le},"— "+l(t.testRun.label),1)):(s(),a("button",{key:1,class:"text-xs text-zinc-400 hover:text-zinc-600 dark:hover:text-zinc-300 border-b border-dashed border-transparent hover:border-zinc-400 ml-1",title:"Add a label",onClick:le}," + label "))],64))]),t.testRun?.shardTotal&&t.testRun.shardTotal>1?(s(),b(re,{key:0,color:"neutral",variant:"soft",size:"sm",class:"shrink-0",title:`Shard ${t.testRun.shardsFinished??0}/${t.testRun.shardTotal}`},{default:r(()=>[i(V,{name:"i-lucide-layout-grid",class:"size-3 mr-1"}),w(" "+l(t.testRun.shardsFinished??0)+"/"+l(t.testRun.shardTotal),1)]),_:1},8,["title"])):p("",!0)]),n("div",tn,[n("span",sn,[o[12]||(o[12]=w(" T: ",-1)),n("strong",nn,l(t.displayProgress?.totalTests??t.testRun?.totalTests??0),1)]),n("span",an,[o[13]||(o[13]=w(" P: ",-1)),n("strong",null,l(t.displayProgress?.passedTests??t.testRun?.passedTests??0),1)]),n("span",on,[o[14]||(o[14]=w(" F: ",-1)),n("strong",null,l(t.displayProgress?.failedTests??t.testRun?.failedTests??0),1)]),n("span",ln,[o[15]||(o[15]=w(" S: ",-1)),n("strong",null,l(t.displayProgress?.skippedTests??t.testRun?.skippedTests??0),1)]),n("span",rn,[o[16]||(o[16]=w(" DNR: ",-1)),n("strong",null,l(t.testRun?.didNotRunTests??0),1)]),n("span",un,[o[17]||(o[17]=w(" Fl: ",-1)),n("strong",null,l(t.testRun?.flakyTests??0),1)]),i(Z,{passed:t.displayProgress?.passedTests??t.testRun?.passedTests??0,failed:t.displayProgress?.failedTests??t.testRun?.failedTests??0,skipped:t.displayProgress?.skippedTests??t.testRun?.skippedTests??0,flaky:t.testRun?.flakyTests??0,"did-not-run":t.testRun?.didNotRunTests??0,total:t.displayProgress?.totalTests??t.testRun?.totalTests??0},null,8,["passed","failed","skipped","flaky","did-not-run","total"]),i(v,{ms:t.testRun?.duration,class:"text-xs text-zinc-400"},null,8,["ms"])])])]),default:r(()=>[n("div",cn,[i($e,{class:"shadow-xs",ui:{footer:"px-4 py-2.5 sm:px-4 bg-muted/30"}},{footer:r(()=>[i(g,null,{default:r(()=>[e(P)?(s(),b(ge,{key:0,label:"CI & environment",icon:"i-lucide-cloud",help:"run.ci-env"},{default:r(()=>[t.testRun?.environment?(s(),a("span",Nn,l(t.testRun.environment),1)):p("",!0),e(u)?.provider?(s(),a("span",Bn,l(e(u).provider),1)):p("",!0),e(u)?.buildNumber||e(u)?.buildUrl?(s(),a(O,{key:2},[o[29]||(o[29]=n("span",{class:"text-dimmed"},"·",-1)),e(u)?.buildUrl?(s(),a("a",{key:0,href:e(u).buildUrl,target:"_blank",class:"text-primary hover:underline"},l(e(u)?.buildNumber?`Build #${e(u).buildNumber}`:"View build"),9,Mn)):(s(),a("span",An,"Build #"+l(e(u).buildNumber),1))],64)):p("",!0),e(u)?.workflow||e(u)?.jobName?(s(),a(O,{key:3},[o[30]||(o[30]=n("span",{class:"text-dimmed"},"·",-1)),n("span",Un,[e(u)?.workflow?(s(),a(O,{key:0},[w(l(e(u).workflow),1)],64)):p("",!0),e(u)?.workflow&&e(u)?.jobName?(s(),a(O,{key:1},[w(" · ")],64)):p("",!0),e(u)?.jobName?(s(),a(O,{key:2},[w(l(e(u).jobName),1)],64)):p("",!0)])],64)):p("",!0)]),_:1})):p("",!0),e(h)?(s(),b(ge,{key:1,label:"Source",icon:"i-lucide-git-branch"},{default:r(()=>[e(h).branch?(s(),a("span",Ln,l(e(h).branch),1)):p("",!0),e(h).commit?(s(),a("code",{key:1,class:"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1 py-0.5 rounded",title:e(h).commit},l(e(h).commit.length>=8?e(h).commit.substring(0,8):e(h).commit),9,En)):p("",!0),e(h).author?(s(),a("span",On,l(e(h).author),1)):p("",!0),e(h).commitMessage?(s(),a("span",{key:3,class:"text-xs text-dimmed truncate max-w-[40ch]",title:e(h).commitMessage},l(e(h).commitMessage),9,Kn)):p("",!0)]),_:1})):p("",!0),e(I)?(s(),b(ge,{key:2,label:"Tooling versions",icon:"i-lucide-tag"},{default:r(()=>[n("span",Wn,[t.testRun?.playwrightVersion?(s(),a(O,{key:0},[w("Playwright v"+l(t.testRun.playwrightVersion),1)],64)):p("",!0),t.testRun?.playwrightVersion&&t.testRun?.reporterVersion?(s(),a(O,{key:1},[w(" · ")],64)):p("",!0),t.testRun?.reporterVersion?(s(),a(O,{key:2},[w("Piwi v"+l(t.testRun.reporterVersion),1)],64)):p("",!0)])]),_:1})):p("",!0),e(B)?.length?(s(),b(ge,{key:3,label:"Tags",icon:"i-lucide-tags"},{default:r(()=>[(s(!0),a(O,null,ie(e(B),ae=>(s(),b(re,{key:ae,color:"neutral",variant:"soft",size:"sm"},{default:r(()=>[w(l(ae),1)]),_:2},1024))),128))]),_:1})):p("",!0),t.testRun?.metadata?.relatedIssue?(s(),b(ge,{key:4,label:"Related issue",icon:"i-lucide-bookmark"},{default:r(()=>[n("span",Hn,l(t.testRun.metadata.relatedIssue),1)]),_:1})):p("",!0),e(D)?(s(),b(ge,{key:5,label:"Storage"},{default:r(()=>[i(_e,{"storage-stats":e(T),reports:t.allReports,finalizing:t.finalizing},null,8,["storage-stats","reports","finalizing"])]),_:1})):p("",!0),i(ge,{label:"Links",icon:"i-lucide-link",help:"run.metadata"},{default:r(()=>[i(Se,{"entity-type":"test_run","entity-id":t.testRun.id,links:t.testRun.links??null,onUpdated:o[10]||(o[10]=ae=>j.$emit("label-updated"))},null,8,["entity-id","links"])]),_:1}),e(M)?(s(),b(ge,{key:6,label:"Custom data"},{default:r(()=>[i(se,{size:"xs",variant:"ghost",color:"neutral",icon:t.showCustomData?"i-lucide-chevron-up":"i-lucide-chevron-down",onClick:o[11]||(o[11]=ae=>R("update:showCustomData",!t.showCustomData))},{default:r(()=>[...o[31]||(o[31]=[w(" Custom data ",-1)])]),_:1},8,["icon"])]),_:1})):p("",!0)]),_:1}),t.showCustomData&&e(M)?(s(),a("div",Vn,[n("div",Gn,[n("pre",Xn,l(JSON.stringify(e(M),null,2)),1)])])):p("",!0)]),default:r(()=>[n("div",dn,[n("div",mn,[n("div",fn,[n("div",pn,[i(F,{status:t.testRun?.status??""},null,8,["status"]),n("h2",gn,[w(" Run #"+l(t.testRun?.id)+" ",1),e(Y)?(s(),a(O,{key:0},[ft(n("input",{ref_key:"labelInputRef",ref:ee,"onUpdate:modelValue":o[1]||(o[1]=ae=>Fe(x)?x.value=ae:null),type:"text",placeholder:"Add a label...",class:"inline-block w-48 text-sm font-normal border-b border-dashed border-zinc-400 bg-transparent outline-none focus:border-primary px-0.5 py-0",onKeydown:he,onBlur:K},null,544),[[pt,e(x)]]),e(Q)?(s(),b(V,{key:0,name:"i-lucide-loader-circle",class:"size-3.5 text-zinc-400 animate-spin shrink-0"})):p("",!0)],64)):(s(),a(O,{key:1},[t.testRun?.label?(s(),a("span",{key:0,class:"font-normal text-zinc-500 ml-1.5 cursor-pointer hover:text-zinc-700 dark:hover:text-zinc-300 border-b border-dashed border-transparent hover:border-zinc-400",onClick:le},"— "+l(t.testRun.label),1)):(s(),a("button",{key:1,class:"text-xs text-zinc-400 hover:text-zinc-600 dark:hover:text-zinc-300 border-b border-dashed border-transparent hover:border-zinc-400 ml-1.5",title:"Add a label",onClick:le}," + label "))],64)),i(X,{topic:"run.summary"})]),t.testRun?.shardTotal&&t.testRun.shardTotal>1?(s(),b(re,{key:0,color:"neutral",variant:"soft",size:"sm",class:"shrink-0",title:`Shard ${t.testRun.shardsFinished??0}/${t.testRun.shardTotal}`},{default:r(()=>[i(V,{name:"i-lucide-layout-grid",class:"size-3 mr-1"}),w(" "+l(t.testRun.shardsFinished??0)+"/"+l(t.testRun.shardTotal),1)]),_:1},8,["title"])):p("",!0),t.testRun?.precedingMarker?(s(),b(xe,{key:1,text:`This run started after: ${t.testRun.precedingMarker.label}`},{default:r(()=>[i(te,{to:`/projects/${t.testRun.projectId}?tab=timeline`,class:"shrink-0 inline-flex items-center gap-1"},{default:r(()=>[o[18]||(o[18]=n("span",{class:"text-xs text-muted"},"After",-1)),i(ne,{marker:t.testRun.precedingMarker,size:"xs"},null,8,["marker"])]),_:1},8,["to"])]),_:1},8,["text"])):p("",!0)]),n("p",xn,[n("span",null,"Started "+l(("prettyDateFormat"in j?j.prettyDateFormat:e($t))(t.testRun?.startTime)),1),i(be,null,{default:r(()=>[n("span",yn,"· "+l(("formatRelativeTime"in j?j.formatRelativeTime:e(it))(t.testRun?.startTime)),1)]),_:1})])]),n("div",hn,[i(xe,{text:e(f)?"Copied!":"Copy run summary"},{default:r(()=>[i(se,{size:"xs",variant:"ghost",color:"neutral",icon:e(f)?"i-lucide-check":"i-lucide-clipboard","aria-label":"Copy run summary",class:"text-zinc-400 hover:text-zinc-600 dark:hover:text-zinc-300",onClick:o[2]||(o[2]=ae=>e(L)(E(),{toast:"Run summary copied"}))},null,8,["icon"])]),_:1},8,["text"]),e(c).length>0?(s(),b(Te,{key:0},{content:r(()=>[n("div",vn,[o[20]||(o[20]=n("p",{class:"text-xs font-medium text-zinc-500 px-2 py-1"},"Mode",-1)),(s(),a(O,null,ie(["file-line","grep","file"],ae=>n("button",{key:ae,class:J(["w-full text-left px-2 py-1 text-sm rounded hover:bg-zinc-100 dark:hover:bg-zinc-800",e(z)===ae?"bg-primary/10 text-primary":""]),onClick:Je=>z.value=ae},l(ae==="file-line"?"File:line":ae==="grep"?"Title (grep)":"File only"),11,kn)),64))])]),default:r(()=>[i(se,{size:"xs",color:"warning",variant:"subtle",icon:e(_)?"i-lucide-check":"i-lucide-play",title:e($),"aria-label":"Retry",onClick:o[3]||(o[3]=ae=>A())},{default:r(()=>[...o[19]||(o[19]=[n("span",{class:"hidden @2xl:inline"},"Retry",-1)])]),_:1},8,["icon","title"])]),_:1})):p("",!0),e(c).length>0?(s(),b(Re,{key:1,"project-id":t.testRun?.project?.id,"project-label":t.testRun?.project?.label??t.testRun?.project?.name,cases:e(c)},null,8,["project-id","project-label","cases"])):p("",!0),e(W)?(s(),b(se,{key:2,href:("fileApiUrl"in j?j.fileApiUrl:e(_t))(e(W).path,null,e(d).app?.baseURL),icon:("reportIcon"in j?j.reportIcon:e(wt))(e(W).type),target:"_blank",size:"xs",color:"primary",variant:"outline","aria-label":e(W).label,title:e(W).size?`${e(W).label} · ${("formatBytes"in j?j.formatBytes:e(Ve))(e(W).size)}`:e(W).label},{default:r(()=>[n("span",bn,l(e(W).label),1)]),_:1},8,["href","icon","aria-label","title"])):p("",!0)])]),i(pe,{"min-tile-width":"7.5rem"},{default:r(()=>[n("button",{class:J(["rounded-lg p-3 text-left w-full transition-colors cursor-pointer",t.activeFilter==="all"?"bg-accented ring-2 ring-zinc-400 dark:ring-zinc-500":"bg-elevated/60 hover:bg-elevated"]),onClick:o[4]||(o[4]=ae=>R("filter-status","all"))},[o[21]||(o[21]=n("p",{class:"text-xs font-medium text-zinc-500 uppercase tracking-wider"},"Total",-1)),n("p",wn,l(t.displayProgress?.totalTests??t.testRun?.totalTests??0),1)],2),n("div",_n,[n("button",{class:J(["rounded-lg p-3 text-left w-full h-full transition-colors cursor-pointer",t.activeFilter==="passed"?"bg-emerald-100 dark:bg-emerald-900/30 ring-2 ring-emerald-400 dark:ring-emerald-600":"bg-emerald-50 dark:bg-emerald-900/20 hover:bg-emerald-100 dark:hover:bg-emerald-900/30"]),onClick:o[5]||(o[5]=ae=>R("filter-status","passed"))},[o[22]||(o[22]=n("p",{class:"text-xs font-medium text-emerald-700 dark:text-emerald-400 uppercase tracking-wider"}," Passed ",-1)),n("p",$n,l(t.displayProgress?.passedTests??t.testRun?.passedTests??0),1)],2),(t.testRun?.flakyTests??0)>0?(s(),a("button",{key:0,class:J(["absolute top-1.5 right-1.5 inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-xs font-semibold leading-none tabular-nums transition-colors cursor-pointer",t.activeFilter==="flaky"?"bg-orange-200 dark:bg-orange-800/60 text-orange-800 dark:text-orange-200 ring-2 ring-orange-400 dark:ring-orange-600":"bg-orange-100 dark:bg-orange-900/40 text-orange-700 dark:text-orange-300 hover:bg-orange-200 dark:hover:bg-orange-800/60"]),title:"Flaky — passed only after a retry (a subset of passed). Click to filter.",onClick:o[6]||(o[6]=ae=>R("filter-status","flaky"))},[i(V,{name:"i-lucide-shuffle",class:"size-3"}),w(" "+l(t.testRun?.flakyTests??0),1)],2)):p("",!0)]),n("button",{class:J(["rounded-lg p-3 text-left w-full transition-colors cursor-pointer",t.activeFilter==="failed"?"bg-rose-100 dark:bg-rose-900/30 ring-2 ring-rose-400 dark:ring-rose-600":"bg-rose-50 dark:bg-rose-900/20 hover:bg-rose-100 dark:hover:bg-rose-900/30"]),onClick:o[7]||(o[7]=ae=>R("filter-status","failed"))},[o[23]||(o[23]=n("p",{class:"text-xs font-medium text-rose-700 dark:text-rose-400 uppercase tracking-wider"},"Failed",-1)),n("p",Cn,l(t.displayProgress?.failedTests??t.testRun?.failedTests??0),1)],2),n("button",{class:J(["rounded-lg p-3 text-left w-full transition-colors cursor-pointer",t.activeFilter==="skipped"?"bg-accented ring-2 ring-zinc-400 dark:ring-zinc-500":"bg-elevated/60 hover:bg-elevated"]),onClick:o[8]||(o[8]=ae=>R("filter-status","skipped"))},[o[24]||(o[24]=n("p",{class:"text-xs font-medium text-zinc-500 uppercase tracking-wider"},"Skipped",-1)),n("p",Tn,l(t.displayProgress?.skippedTests??t.testRun?.skippedTests??0),1)],2),n("button",{class:J(["rounded-lg p-3 text-left w-full transition-colors cursor-pointer",t.activeFilter==="didnotrun"?"bg-amber-100 dark:bg-amber-900/30 ring-2 ring-amber-400 dark:ring-amber-600":"bg-amber-50 dark:bg-amber-900/20 hover:bg-amber-100 dark:hover:bg-amber-900/30"]),title:"Tests that never ran (maxFailures cutoff or a serial-group failure)",onClick:o[9]||(o[9]=ae=>R("filter-status","didnotrun"))},[o[25]||(o[25]=n("p",{class:"text-xs font-medium text-amber-700 dark:text-amber-400 uppercase tracking-wider"},"Didn't run",-1)),n("p",Rn,l(t.testRun?.didNotRunTests??0),1)],2)]),_:1}),t.testRun?(s(),a("div",zn,[n("div",Sn,[i(Z,{passed:t.displayProgress?.passedTests??t.testRun?.passedTests??0,failed:t.displayProgress?.failedTests??t.testRun?.failedTests??0,skipped:t.displayProgress?.skippedTests??t.testRun?.skippedTests??0,flaky:t.testRun?.flakyTests??0,"did-not-run":t.testRun?.didNotRunTests??0,total:t.displayProgress?.totalTests??t.testRun?.totalTests??0},null,8,["passed","failed","skipped","flaky","did-not-run","total"])]),n("div",In,[n("div",Fn,[i(V,{name:"i-lucide-clock",class:"size-3.5 text-zinc-400"}),i(v,{ms:t.testRun?.duration,class:"font-medium"},null,8,["ms"])]),t.testRun?.avgTestDuration?(s(),a("div",Pn,[i(V,{name:"i-lucide-gauge",class:"size-3.5 text-zinc-400"}),o[26]||(o[26]=n("span",{class:"text-zinc-500"},"Avg",-1)),i(v,{ms:t.testRun.avgTestDuration,class:"font-medium"},null,8,["ms"])])):p("",!0),t.testRun?.p90TestDuration?(s(),a("div",Dn,[i(V,{name:"i-lucide-arrow-up-right",class:"size-3.5 text-orange-500"}),o[27]||(o[27]=n("span",{class:"text-zinc-500"},"P90",-1)),i(v,{ms:t.testRun.p90TestDuration,class:"font-medium text-orange-600 dark:text-orange-400","unit-class":"opacity-60"},null,8,["ms"])])):p("",!0),t.totalWastedTime&&t.totalWastedTime>0?(s(),a("div",jn,[i(V,{name:"i-lucide-clock",class:"size-3.5 text-amber-500"}),o[28]||(o[28]=n("span",{class:"text-zinc-500"},"Wasted",-1)),i(v,{ms:t.totalWastedTime,class:"font-medium text-amber-600 dark:text-amber-400","unit-class":"opacity-60"},null,8,["ms"])])):p("",!0)])])):p("",!0)])]),_:1})])]),_:1})}}}),Yn=Object.assign(qn,{__name:"RunSummary"}),Jn={key:0,class:"inline-flex items-center gap-1 flex-wrap"},Zn=fe({__name:"TestRowBadges",props:{mode:{default:null},isNewRegression:{type:[Boolean,null],default:!1},isNewFlaky:{type:[Boolean,null],default:!1},annotations:{default:null},tags:{default:null},meta:{default:null},maxTags:{default:0}},setup(t){const y=t;function k(h){return h==="fixme"||h==="slow"?"warning":h==="fail"?"error":h==="skip"?"neutral":h==="tag"?"primary":"info"}function R(h){switch(h){case"fixme":return"i-lucide-wrench";case"skip":return"i-lucide-skip-forward";case"slow":return"i-lucide-timer";case"fail":return"i-lucide-x-circle";case"tag":return"i-lucide-tag";default:return null}}function C(h){return h.type==="tag"?h.description??h.type:h.type}const d=S(()=>(y.annotations??[]).filter(h=>!bs(h.type))),T=S(()=>!!((y.tags?.length??0)>0||y.meta?.owner||y.meta?.priority||y.meta?.feature||y.meta?.link)),u=S(()=>y.mode==="parallel"||y.mode==="serial"||!!y.isNewRegression||!!y.isNewFlaky||d.value.length>0||T.value);return(h,B)=>{const M=we,P=ve,I=zs;return e(u)?(s(),a("div",Jn,[t.mode==="parallel"?(s(),b(M,{key:0,color:"success",variant:"soft",size:"xs",class:"shrink-0"},{default:r(()=>[...B[0]||(B[0]=[w("parallel",-1)])]),_:1})):p("",!0),t.mode==="serial"?(s(),b(M,{key:1,color:"warning",variant:"soft",size:"xs",class:"shrink-0"},{default:r(()=>[...B[1]||(B[1]=[w("serial",-1)])]),_:1})):p("",!0),t.isNewRegression?(s(),b(M,{key:2,color:"error",variant:"solid",size:"xs",class:"uppercase tracking-wider shrink-0",title:"First run in which this test failed"},{default:r(()=>[...B[2]||(B[2]=[w(" NEW ",-1)])]),_:1})):p("",!0),t.isNewFlaky?(s(),b(M,{key:3,color:"info",variant:"solid",size:"xs",class:"uppercase tracking-wider shrink-0",title:"First run in which this test was flaky"},{default:r(()=>[...B[3]||(B[3]=[w(" FLAKY ",-1)])]),_:1})):p("",!0),(s(!0),a(O,null,ie(e(d),D=>(s(),b(M,{key:`${D.type}:${D.description??""}`,color:k(D.type),variant:"soft",size:"xs",title:D.type!=="tag"?D.description??void 0:void 0,class:"shrink-0 gap-1"},{default:r(()=>[R(D.type)?(s(),b(P,{key:0,name:R(D.type),class:"size-2.5 shrink-0"},null,8,["name"])):p("",!0),w(" "+l(C(D)),1)]),_:2},1032,["color","title"]))),128)),i(I,{tags:t.tags,meta:t.meta,"max-tags":t.maxTags},null,8,["tags","meta","max-tags"])])):p("",!0)}}}),Nt=Object.assign(Zn,{__name:"TestRowBadges"}),Qn={class:"rounded-lg border border-default bg-default text-sm flex flex-col flex-1 min-h-0"},ea={class:"flex items-center justify-end px-3 py-1.5 border-b border-default bg-elevated shrink-0"},ta=["disabled","title"],sa={class:"overflow-y-auto flex-1 min-h-0"},na=["onClick"],aa={key:1,class:"font-medium truncate min-w-0 text-muted"},oa={class:"flex items-center gap-1.5 sm:gap-2 shrink-0 tabular-nums"},la=["title"],ia={class:"max-sm:sr-only"},ra=["href","title","onClick"],ua={class:"truncate"},ca={class:"flex items-center gap-1.5 sm:gap-2 shrink-0 ml-auto"},da={key:0,class:"text-xs text-info"},ma={key:4,class:"inline-flex items-center gap-0.5 text-xs text-amber-600 dark:text-amber-400",title:"Wasted in fixed waits"},fa={key:0,class:"text-center py-8 text-muted"},pa=fe({__name:"TestCasesTree",props:{testCases:{},suites:{},hasFilter:{type:Boolean},highlightedCaseId:{},projectKey:{},projectName:{}},setup(t){const y=t,k=S(()=>{const f=new Map;for(const z of y.suites)f.set(`${z.filePath}${z.suitePath.join("")}`,z);return f});function R(f){return f==="timedOut"||f==="timedout"?"failed":f}const C=["failed","passed","skipped","didnotrun","running"];function d(f){return C.filter(z=>f[z]>0).map(z=>({key:z,count:f[z],label:De(z)}))}function T(f){const z={passed:0,failed:0,skipped:0,didnotrun:0,running:0,total:0};for(const _ of f){const c=R(_.status);c in z&&z[c]++,z.total++}return z}const u=H(new Set),h=S(()=>u.value.size===0);function B(f){return y.hasFilter?!0:!u.value.has(f)}function M(f){if(y.hasFilter)return;const z=new Set(u.value);z.has(f)?z.delete(f):z.add(f),u.value=z}function P(){const f=[],z=new Map;for(const _ of y.testCases){const c=_.filePath??"unknown";z.has(c)||z.set(c,[]),z.get(c).push(_)}for(const[_,c]of z){f.push(`file:${_}`);const m=new Set;for(const A of c){const $=A.suitePath??[];for(let E=1;E<=$.length;E++)m.add(`group:${_}${$.slice(0,E).join("")}`)}for(const A of m)f.push(A)}return f}function I(){u.value=new Set(P())}function D(){u.value=new Set}function W(f,z,_,c,m){const A=z.filter(x=>(x.suitePath??[]).length===c.length),$=z.filter(x=>(x.suitePath??[]).length>c.length),E=new Map;for(const x of $){const Y=(x.suitePath??[])[c.length];E.has(Y)||E.set(Y,[]),E.get(Y).push(x)}for(const[x,Y]of E){const Q=[...c,x],oe=`group:${_}${Q.join("")}`,ee=k.value.get(`${_}${Q.join("")}`);f.push({kind:"group",depth:m,key:oe,label:x,stats:T(Y),mode:ee?.mode??"default",annotations:ee?.annotations??[]}),B(oe)&&W(f,Y,_,Q,m+1)}for(const x of A)f.push({kind:"test",depth:m,key:`test:${x.id}`,test:x})}const L=S(()=>{const f=[],z=new Map;for(const _ of y.testCases){const c=_.filePath??"unknown";z.has(c)||z.set(c,[]),z.get(c).push(_)}for(const[_,c]of[...z.entries()].sort(([m],[A])=>m.localeCompare(A))){const m=`file:${_}`;f.push({kind:"group",depth:0,key:m,label:_,stats:T(c)}),B(m)&&W(f,c,_,[],1)}return f});return(f,z)=>{const _=ve,c=St,m=Nt,A=It,$=Ke,E=we;return s(),a("div",Qn,[n("div",ea,[n("button",{class:J(["flex items-center gap-1 text-xs transition-colors",t.hasFilter?"text-muted cursor-not-allowed opacity-50":"text-muted hover:text-default"]),disabled:t.hasFilter,title:t.hasFilter?"Clear filters to collapse/expand":h.value?"Collapse all":"Expand all",onClick:z[0]||(z[0]=x=>h.value?I():D())},[i(_,{name:h.value?"i-lucide-fold-vertical":"i-lucide-unfold-vertical",class:"size-3.5"},null,8,["name"]),w(" "+l(h.value?"Collapse all":"Expand all"),1)],10,ta)]),n("div",sa,[(s(!0),a(O,null,ie(L.value,x=>(s(),a(O,{key:x.key},[x.kind==="group"?(s(),a("div",{key:0,class:J(["flex items-center gap-2 py-2 pr-4 border-b border-default last:border-b-0 select-none sticky",[x.depth===0?"bg-elevated":"bg-default",!t.hasFilter&&"cursor-pointer"]]),style:ke({paddingLeft:`${x.depth*20+12}px`,top:`${x.depth*36}px`,zIndex:20-x.depth}),onClick:Y=>M(x.key)},[i(_,{name:B(x.key)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5 text-muted shrink-0"},null,8,["name"]),i(_,{name:x.depth===0?"i-lucide-file-code-2":"i-lucide-folder-open",class:J(["size-4 shrink-0",x.depth===0?"text-blue-500":"text-amber-500"])},null,8,["name","class"]),x.depth===0?(s(),a("span",{key:0,class:"min-w-0",onClick:z[1]||(z[1]=Ae(()=>{},["stop"]))},[i(c,{"file-path":x.label,"project-key":t.projectKey,"project-name":t.projectName,class:"font-medium text-default"},null,8,["file-path","project-key","project-name"])])):(s(),a("span",aa,l(x.label),1)),x.depth>0?(s(),b(m,{key:2,mode:x.mode,annotations:x.annotations,class:"shrink-0"},null,8,["mode","annotations"])):p("",!0),z[2]||(z[2]=n("div",{class:"flex-1"},null,-1)),n("div",oa,[(s(!0),a(O,null,ie(d(x.stats),Y=>(s(),a("span",{key:Y.key,class:J(["text-xs inline-flex items-center gap-0.5",[("getStatusTextClass"in f?f.getStatusTextClass:e(tt))(Y.key),Y.key==="failed"?"font-medium":""]]),title:`${Y.count} ${Y.label}`},[i(_,{name:("getStatusIcon"in f?f.getStatusIcon:e(st))(Y.key),class:"size-3 shrink-0 sm:hidden"},null,8,["name"]),w(" "+l(Y.count),1),n("span",ia,l(Y.label),1)],10,la))),128))])],14,na)):(s(),a("div",{key:1,class:J(["flex flex-wrap items-center gap-x-2 gap-y-1 pr-3 py-2 sm:py-1.5 border-b border-default last:border-b-0 hover:bg-zinc-50 dark:hover:bg-zinc-900/40 transition-colors",t.highlightedCaseId===x.test.id?"animate-pulse bg-yellow-100 dark:bg-yellow-900/30":""]),style:ke({paddingLeft:`${x.depth*20+12}px`})},[i(A,{browser:x.test.browser,size:"sm"},null,8,["browser"]),i(_,{name:("getStatusIcon"in f?f.getStatusIcon:e(st))(x.test.status),class:J(["size-4 shrink-0",[("getStatusTextClass"in f?f.getStatusTextClass:e(tt))(x.test.status),("isStatusInFlight"in f?f.isStatusInFlight:e(Tt))(x.test.status)?"animate-spin":""]]),role:"img","aria-label":`Status: ${("formatStatusLabel"in f?f.formatStatusLabel:e(De))(x.test.status)}`,title:("formatStatusLabel"in f?f.formatStatusLabel:e(De))(x.test.status)},null,8,["name","class","aria-label","title"]),n("a",{href:`/test-run-cases/${x.test.id}`,class:"text-highlighted hover:text-primary hover:underline min-w-32 self-stretch flex items-center",title:x.test.title,onClick:Ae(Y=>("navigateTo"in f?f.navigateTo:e(Ge))(`/test-run-cases/${x.test.id}`),["prevent"])},[n("span",ua,l(x.test.title),1)],8,ra),i(m,{"is-new-regression":!!x.test.isNewRegression,"is-new-flaky":!!x.test.isNewFlaky,annotations:x.test.testAnnotations,tags:x.test.tags,meta:x.test.testMeta,"max-tags":3,class:"shrink-0"},null,8,["is-new-regression","is-new-flaky","annotations","tags","meta"]),n("div",ca,[x.test.status==="running"?(s(),a("span",da,"In progress...")):x.test.duration?(s(),b($,{key:1,ms:x.test.duration,class:"text-xs text-muted"},null,8,["ms"])):p("",!0),x.test.workerIndex!=null?(s(),b(E,{key:2,color:"neutral",variant:"soft",size:"xs",class:"font-mono",title:`Worker ${x.test.workerIndex}`},{default:r(()=>[w(" w"+l(x.test.workerIndex),1)]),_:2},1032,["title"])):p("",!0),(x.test.retries??0)>0?(s(),b(E,{key:3,color:"warning",variant:"soft",size:"xs"},{default:r(()=>[w(l(x.test.retries)+"x ",1)]),_:2},1024)):p("",!0),x.test.wastedTimeMs?(s(),a("span",ma,[i(_,{name:"i-lucide-hourglass",class:"size-3 shrink-0"}),i($,{ms:x.test.wastedTimeMs,"unit-class":"opacity-60","no-title":""},null,8,["ms"])])):p("",!0)])],6))],64))),128)),L.value.length===0?(s(),a("div",fa,[i(_,{name:"i-lucide-search-x",class:"size-6 mx-auto mb-2 text-zinc-300 dark:text-zinc-600"}),z[3]||(z[3]=n("p",{class:"text-sm"},"No test cases match your filters.",-1))])):p("",!0)])])}}}),ga=Object.assign(pa,{__name:"TestCasesTree"}),xa={class:"flex flex-col min-h-0"},ya={class:"flex items-center rounded-md border border-default overflow-hidden"},ha={key:0,class:"text-sm text-zinc-500 tabular-nums inline-flex items-center gap-1"},va={key:1,class:"text-sm text-zinc-500 tabular-nums inline-flex items-center gap-1"},ka={class:"flex flex-wrap items-center gap-1"},ba=["onClick"],wa={key:2,class:"flex items-center gap-1 md:hidden"},_a={key:0,class:"flex-1 min-h-0 max-lg:h-[70dvh] md:overflow-x-auto overflow-y-hidden rounded-lg border border-default bg-default"},$a=["aria-rowcount"],Ca=["aria-sort","aria-label","title","onClick"],Ta={key:1,class:"truncate"},Ra={class:"flex items-start gap-2"},za=["href","onClick"],Sa={class:"pl-6 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-muted"},Ia={key:0,class:"text-info"},Fa={key:4,class:"inline-flex items-center gap-0.5 text-amber-600 dark:text-amber-400",title:"Wasted in fixed waits"},Pa={class:"px-3 py-2 flex items-center min-w-0",role:"cell"},Da={class:"px-3 py-2 min-w-0 space-y-0.5",role:"cell"},ja={class:"flex items-center gap-1.5 min-w-0"},Na=["href","title","onClick"],Ba={class:"px-3 py-2 flex items-center",role:"cell"},Ma={class:"px-3 py-2 flex items-center whitespace-nowrap",role:"cell"},Aa={key:0,class:"text-info text-xs"},Ua={class:"px-3 py-2 flex items-center",role:"cell"},La={class:"px-3 py-2 flex items-center tabular-nums",role:"cell"},Ea={key:0,class:"px-3 py-2 flex items-center whitespace-nowrap",role:"cell"},Oa={key:1,class:"text-zinc-400"},Ka={class:"flex-1 min-h-0 flex items-center justify-center py-10 text-sm text-zinc-500"},Wa={key:1,class:"text-center py-10 text-zinc-500"},Ha={key:2,class:"text-center py-10 text-zinc-500"},We="natural",Va=fe({__name:"TestCasesList",props:as({testCases:{},suites:{},isLive:{type:Boolean},failureClusterFilter:{},projectKey:{},projectName:{}},{search:{default:""},searchModifiers:{},activeStatuses:{default:()=>[]},activeStatusesModifiers:{},browserFilter:{default:"all"},browserFilterModifiers:{}}),emits:["update:search","update:activeStatuses","update:browserFilter"],setup(t,{expose:y}){const{treeView:k,setTreeView:R}=Ss("test-cases"),C=t,d=Qe(t,"search"),T=Qe(t,"activeStatuses"),u=Qe(t,"browserFilter"),h=H(!1),B=H(!1),M=[{label:"Passed",value:"passed",color:"green"},{label:"Failed",value:"failed",color:"red"},{label:"Skipped",value:"skipped",color:"gray"},{label:"Didn't run",value:"didnotrun",color:"amber"},{label:"Flaky",value:"flaky",color:"orange"}];function P(o){T.value.indexOf(o)>=0?T.value=T.value.filter(V=>V!==o):T.value=[...T.value,o]}const I=S(()=>{const o=new Set;for(const V of C.testCases){const re=V.browser?.projectName;re&&o.add(re)}const F=[{label:"All browsers",value:"all"}];for(const V of[...o].sort())F.push({label:V,value:V});return F});function D(o,F){return F==="failed"?o.status==="failed"||o.status==="timedOut"||o.status==="timedout":F==="flaky"?(o.retries??0)>0:o.status===F}const W=S(()=>{let o=C.testCases;if(C.failureClusterFilter!=null&&(o=o.filter(F=>F.failureClusterId===C.failureClusterFilter)),T.value.length>0&&(o=o.filter(F=>T.value.some(V=>D(F,V)))),u.value!=="all"&&(o=o.filter(F=>F.browser?.projectName===u.value)),d.value){const F=d.value.toLowerCase();o=o.filter(V=>V.title.toLowerCase().includes(F)||V.location&&V.location.toLowerCase().includes(F))}return h.value&&(o=o.filter(F=>F.isNewRegression)),B.value&&(o=o.filter(F=>F.isNewFlaky)),o}),L=H(null),f=H("asc");function z(o){L.value!==o?(L.value=o,f.value="asc"):f.value==="asc"?f.value="desc":L.value=null}function _(o){return L.value!==o?"i-lucide-chevrons-up-down":f.value==="asc"?"i-lucide-chevron-up":"i-lucide-chevron-down"}function c(o,F){switch(F){case"browser":return o.browser?.projectName??"";case"title":return o.title??"";case"status":return o.status??"";case"duration":return o.duration??0;case"workerIndex":return o.workerIndex??-1;case"retries":return o.retries??0;case"wastedTimeMs":return o.wastedTimeMs??0;default:return""}}const m=S(()=>{const o=W.value,F=L.value;if(!F)return o;const V=f.value==="asc"?1:-1;return[...o].sort((re,Z)=>{const v=c(re,F),X=c(Z,F);return typeof v=="number"&&typeof X=="number"?(v-X)*V:String(v).localeCompare(String(X))*V})}),A=S(()=>C.testCases.some(o=>(o.wastedTimeMs??0)>0)),$=S(()=>{const o=[{key:"browser",label:"Browser",sortable:!0,width:"3.25rem",align:"left",icon:"i-lucide-monitor"},{key:"title",label:"Test case",sortable:!0,width:"minmax(12rem, 3fr)",align:"left"},{key:"status",label:"Status",sortable:!0,width:"6rem",align:"left"},{key:"duration",label:"Duration",sortable:!0,width:"7rem",align:"left"},{key:"workerIndex",label:"Worker",sortable:!0,width:"6rem",align:"left"},{key:"retries",label:"Retries",sortable:!0,width:"6.5rem",align:"left"}];return A.value&&o.push({key:"wastedTimeMs",label:"Wasted",sortable:!0,width:"6rem",align:"left"}),o}),E=S(()=>[{label:"Run order",value:We},...$.value.map(o=>({label:o.label,value:o.key}))]),x=S({get:()=>L.value??We,set:o=>{L.value=o===We?null:o,o!==We&&(f.value="asc")}}),Y=S(()=>$.value.map(o=>o.width).join(" ")),Q=S(()=>A.value?"47.5rem":"41.5rem"),oe=S(()=>d.value!==""||T.value.length>0||u.value!=="all"||C.failureClusterFilter!=null),ee=H(null),le=H(!1),K=H(null);function N(o){return o.scrollHeight-o.scrollTop-o.clientHeight<50}function he(o){const F=o.target;F&&(le.value=!N(F))}me(()=>C.isLive,o=>{o||(le.value=!1)}),me(()=>m.value.length,()=>{!C.isLive||le.value||je(()=>ee.value?.scrollToBottom())});function j(o){R(!1),K.value=o;const F=()=>{const V=m.value.findIndex(re=>re.id===o);V>=0&&ee.value?.scrollToItem(V,{behavior:"smooth"})};je(()=>{ee.value?F():setTimeout(F,60),setTimeout(()=>{K.value=null},3e3)})}return y({scrollToCase:j}),(o,F)=>{const V=ve,re=Ie,Z=ns,v=Ts,X=zt,ne=Ce,te=Rs,xe=ga,be=It,se=St,Te=Nt,Re=Ke,pe=we,ge=gt("DynamicScrollerItem"),_e=gt("DynamicScroller"),Se=lt;return s(),a("div",xa,[i(te,{class:"mb-4 shrink-0"},{start:r(()=>[n("div",ya,[n("button",{class:J(["px-2 py-1 text-xs transition-colors",e(k)?"text-muted hover:bg-elevated/60":"bg-primary text-white dark:text-white"]),title:"Flat list",onClick:F[0]||(F[0]=g=>e(R)(!1))},[i(V,{name:"i-lucide-list",class:"size-3.5"})],2),n("button",{class:J(["px-2 py-1 text-xs transition-colors",e(k)?"bg-primary text-white dark:text-white":"text-muted hover:bg-elevated/60"]),title:"Tree view",onClick:F[1]||(F[1]=g=>e(R)(!0))},[i(V,{name:"i-lucide-folder-tree",class:"size-3.5"})],2)]),t.isLive?(s(),a("span",ha,[w(l(t.testCases.length)+" completed ",1),i(re,{topic:"run.live"})])):(s(),a("span",va,[w(l(m.value.length)+l(m.value.length!==t.testCases.length?` / ${t.testCases.length}`:"")+" cases ",1),i(re,{topic:"run.test-cases"})]))]),default:r(()=>[i(Z,{modelValue:d.value,"onUpdate:modelValue":F[2]||(F[2]=g=>d.value=g),placeholder:"Search test cases...",icon:"i-lucide-search",size:"sm",class:"min-w-48 max-sm:flex-1"},null,8,["modelValue"]),n("div",ka,[(s(),a(O,null,ie(M,g=>n("button",{key:g.value,class:J(["inline-flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium transition-colors whitespace-nowrap",T.value.includes(g.value)?g.color==="green"?"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400":g.color==="red"?"bg-rose-100 text-rose-700 dark:bg-rose-900/30 dark:text-rose-400":g.color==="orange"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-zinc-200 text-zinc-700 dark:bg-zinc-700 dark:text-zinc-300":"bg-zinc-100 text-zinc-500 dark:bg-zinc-800 dark:text-zinc-400 hover:bg-zinc-200 dark:hover:bg-zinc-700"]),onClick:$e=>P(g.value)},[n("span",{class:J(["size-2 rounded-full shrink-0",g.color==="green"?"bg-emerald-500":g.color==="red"?"bg-rose-500":g.color==="orange"?"bg-orange-500":"bg-zinc-400"])},null,2),w(" "+l(g.label),1)],10,ba)),64))]),i(v,{modelValue:u.value,"onUpdate:modelValue":F[3]||(F[3]=g=>u.value=g),items:I.value,size:"sm",class:"w-36"},null,8,["modelValue","items"]),t.isLive?p("",!0):(s(),b(X,{key:0,modelValue:h.value,"onUpdate:modelValue":F[4]||(F[4]=g=>h.value=g),label:"New regressions",size:"sm"},null,8,["modelValue"])),t.isLive?p("",!0):(s(),b(X,{key:1,modelValue:B.value,"onUpdate:modelValue":F[5]||(F[5]=g=>B.value=g),label:"New flaky",size:"sm"},null,8,["modelValue"])),e(k)?p("",!0):(s(),a("div",wa,[i(v,{modelValue:x.value,"onUpdate:modelValue":F[6]||(F[6]=g=>x.value=g),items:E.value,size:"sm",class:"w-32","aria-label":"Sort cases by"},null,8,["modelValue","items"]),i(ne,{size:"sm",variant:"outline",color:"neutral",disabled:L.value===null,icon:f.value==="asc"?"i-lucide-arrow-up-narrow-wide":"i-lucide-arrow-down-wide-narrow",title:f.value==="asc"?"Sorted ascending":"Sorted descending","aria-label":f.value==="asc"?"Sorted ascending":"Sorted descending",onClick:F[7]||(F[7]=g=>f.value=f.value==="asc"?"desc":"asc")},null,8,["disabled","icon","title","aria-label"])]))]),_:1}),e(k)&&t.testCases.length>0?(s(),b(xe,{key:0,"test-cases":m.value,suites:t.suites,"has-filter":oe.value,"highlighted-case-id":K.value,"project-key":t.projectKey,"project-name":t.projectName,class:"flex-1 min-h-0"},null,8,["test-cases","suites","has-filter","highlighted-case-id","project-key","project-name"])):e(k)?p("",!0):(s(),a(O,{key:1},[m.value.length>0?(s(),a("div",_a,[n("div",{class:"flex flex-col h-full md:min-w-(--grid-min-width)",role:"table","aria-label":"Test cases","aria-rowcount":m.value.length+1,style:ke({"--grid-min-width":Q.value})},[n("div",{class:"hidden md:grid shrink-0 bg-elevated/50 border-b border-default",role:"row",style:ke({gridTemplateColumns:Y.value})},[(s(!0),a(O,null,ie($.value,g=>(s(),a(O,{key:g.key},[g.sortable?(s(),a("button",{key:0,type:"button",role:"columnheader","aria-sort":L.value===g.key?f.value==="asc"?"ascending":"descending":"none","aria-label":g.icon?g.label:void 0,title:g.icon?g.label:void 0,class:J(["flex items-center gap-1 min-w-0 px-3 py-2 text-sm font-semibold select-none cursor-pointer hover:text-highlighted transition-colors",g.align==="right"?"justify-end":""]),onClick:$e=>z(g.key)},[g.icon?(s(),b(V,{key:0,name:g.icon,class:"shrink-0 size-4"},null,8,["name"])):(s(),a("span",Ta,l(g.label),1)),i(V,{name:_(g.key),class:J(["shrink-0 size-3.5",L.value===g.key?"":"opacity-40"])},null,8,["name","class"])],10,Ca)):(s(),a("div",{key:1,role:"columnheader",class:J(["px-3 py-2 text-sm font-semibold",g.align==="right"?"text-right":""])},l(g.label),3))],64))),128))],4),i(Se,null,{fallback:r(()=>[n("div",Ka,[i(V,{name:"i-lucide-loader-circle",class:"size-4 mr-2 animate-spin"}),F[8]||(F[8]=w(" Loading test cases… ",-1))])]),default:r(()=>[i(_e,{ref_key:"scrollerRef",ref:ee,items:m.value,"min-item-size":44,"key-field":"id",role:"rowgroup",class:"flex-1 min-h-0",onScrollPassive:he},{default:r(({item:g,index:$e,active:Ne})=>[i(ge,{item:g,active:Ne,"size-dependencies":[g.title,g.location,g.isNewRegression,g.isNewFlaky,g.testAnnotations,g.tags],"data-index":$e},{default:r(()=>[n("div",{class:J(["md:hidden border-b border-default px-3 py-2.5 space-y-1.5 text-sm transition-colors",K.value===g.id?"animate-pulse bg-yellow-100 dark:bg-yellow-900/30":""]),role:"row"},[n("div",Ra,[i(V,{name:("getStatusIcon"in o?o.getStatusIcon:e(st))(g.status),class:J(["size-4 shrink-0 mt-0.5",[("getStatusTextClass"in o?o.getStatusTextClass:e(tt))(g.status),("isStatusInFlight"in o?o.isStatusInFlight:e(Tt))(g.status)?"animate-spin":""]]),role:"img","aria-label":`Status: ${("formatStatusLabel"in o?o.formatStatusLabel:e(De))(g.status)}`,title:("formatStatusLabel"in o?o.formatStatusLabel:e(De))(g.status)},null,8,["name","class","aria-label","title"]),n("a",{href:`/test-run-cases/${g.id}`,class:"text-highlighted hover:text-primary hover:underline font-medium flex-1 min-w-0",onClick:Ae(ae=>("navigateTo"in o?o.navigateTo:e(Ge))(`/test-run-cases/${g.id}`),["prevent"])},l(g.title),9,za),i(be,{browser:g.browser,size:"sm",class:"mt-0.5"},null,8,["browser"])]),g.location?(s(),b(se,{key:0,location:g.location,"project-key":t.projectKey,"project-name":t.projectName,class:"block pl-6 text-xs text-gray-400 dark:text-gray-500"},null,8,["location","project-key","project-name"])):p("",!0),i(Te,{"is-new-regression":!!g.isNewRegression,"is-new-flaky":!!g.isNewFlaky,annotations:g.testAnnotations,tags:g.tags,meta:g.testMeta,"max-tags":3,class:"pl-6"},null,8,["is-new-regression","is-new-flaky","annotations","tags","meta"]),n("div",Sa,[g.status==="running"?(s(),a("span",Ia,"In progress...")):g.duration?(s(),b(Re,{key:1,ms:g.duration},null,8,["ms"])):p("",!0),g.workerIndex!=null?(s(),b(pe,{key:2,color:"neutral",variant:"soft",size:"xs",class:"font-mono",title:`Worker ${g.workerIndex}`},{default:r(()=>[w(" w"+l(g.workerIndex),1)]),_:2},1032,["title"])):p("",!0),(g.retries??0)>0?(s(),b(pe,{key:3,color:"warning",variant:"soft",size:"xs"},{default:r(()=>[w(l(g.retries)+"x ",1)]),_:2},1024)):p("",!0),g.wastedTimeMs?(s(),a("span",Fa,[i(V,{name:"i-lucide-hourglass",class:"size-3 shrink-0"}),i(Re,{ms:g.wastedTimeMs,"unit-class":"opacity-60","no-title":""},null,8,["ms"])])):p("",!0)])],2),n("div",{class:J(["hidden md:grid items-center border-b border-default text-sm transition-colors hover:bg-zinc-50 dark:hover:bg-zinc-900/50",K.value===g.id?"animate-pulse bg-yellow-100 dark:bg-yellow-900/30":""]),role:"row",style:ke({gridTemplateColumns:Y.value})},[n("div",Pa,[i(be,{browser:g.browser},null,8,["browser"])]),n("div",Da,[n("div",ja,[n("a",{href:`/test-run-cases/${g.id}`,class:"text-highlighted hover:text-primary hover:underline font-medium truncate",title:g.title,onClick:Ae(ae=>("navigateTo"in o?o.navigateTo:e(Ge))(`/test-run-cases/${g.id}`),["prevent"])},l(g.title),9,Na),i(Te,{"is-new-regression":!!g.isNewRegression,"is-new-flaky":!!g.isNewFlaky,annotations:g.testAnnotations,tags:g.tags,meta:g.testMeta,"max-tags":3,class:"shrink-0"},null,8,["is-new-regression","is-new-flaky","annotations","tags","meta"])]),g.location?(s(),b(se,{key:0,location:g.location,"project-key":t.projectKey,"project-name":t.projectName,class:"text-xs text-zinc-400 dark:text-zinc-500"},null,8,["location","project-key","project-name"])):p("",!0)]),n("div",Ba,[i(pe,{color:("getStatusColor"in o?o.getStatusColor:e(nt))(g.status==="timedOut"||g.status==="timedout"?"failed":g.status),variant:"subtle",class:"capitalize"},{default:r(()=>[w(l(("formatStatusLabel"in o?o.formatStatusLabel:e(De))(g.status)),1)]),_:2},1032,["color"])]),n("div",Ma,[g.status==="running"?(s(),a("span",Aa,"In progress...")):(s(),b(Re,{key:1,ms:g.duration,fallback:""},null,8,["ms"]))]),n("div",Ua,[g.workerIndex!=null?(s(),b(pe,{key:0,color:"neutral",variant:"soft",class:"font-mono text-xs"},{default:r(()=>[w(l(g.workerIndex),1)]),_:2},1024)):p("",!0)]),n("div",La,l(g.retries&&g.retries>0?g.retries:""),1),A.value?(s(),a("div",Ea,[g.wastedTimeMs?(s(),b(Re,{key:0,ms:g.wastedTimeMs,class:"text-amber-600 dark:text-amber-400","unit-class":"opacity-60"},null,8,["ms"])):(s(),a("span",Oa,"—"))])):p("",!0)],6)]),_:2},1032,["item","active","size-dependencies","data-index"])]),_:1},8,["items"])]),_:1})],12,$a)])):t.testCases.length===0?(s(),a("div",Wa,[i(V,{name:"i-lucide-beaker",class:"size-8 mx-auto mb-2 text-zinc-300 dark:text-zinc-600"}),F[9]||(F[9]=n("p",null,"No test cases recorded for this run.",-1))])):(s(),a("div",Ha,[i(V,{name:"i-lucide-search-x",class:"size-8 mx-auto mb-2 text-zinc-300 dark:text-zinc-600"}),F[10]||(F[10]=n("p",null,"No test cases match your filters.",-1))]))],64))])}}}),Ga=Object.assign(Va,{__name:"TestCasesList"}),Xa={key:2,class:"p-4"},qa={key:3,class:"p-4"},Ya={key:4,class:"p-4"},Ja={key:5,class:"space-y-6 p-4"},Za={class:"flex items-center gap-1.5 text-sm text-muted"},Qa={class:"grid grid-cols-1 sm:grid-cols-3 gap-4"},eo={class:"space-y-1"},to={class:"text-xl font-semibold"},so={key:0},no={key:1},ao={class:"space-y-1"},oo={key:1,class:"text-xl font-semibold text-muted"},lo={class:"space-y-1"},io={class:"space-y-0.5 text-sm"},ro={key:0,class:"text-red-500"},uo={key:1,class:"text-green-600"},co={key:2,class:"text-purple-500"},mo={key:3,class:"text-muted"},fo={class:"space-y-1"},po={class:"font-medium text-primary hover:underline truncate"},go={class:"text-gray-400 text-xs ml-auto shrink-0"},xo={class:"space-y-1"},yo={class:"font-medium text-primary hover:underline truncate"},ho={class:"space-y-1"},vo={class:"font-medium text-primary hover:underline truncate"},ko={class:"space-y-1"},bo={class:"font-medium text-primary hover:underline truncate"},wo={class:"text-gray-400 text-xs ml-auto shrink-0"},_o={class:"space-y-1"},$o={class:"font-medium text-primary hover:underline truncate"},Co={class:"grid grid-cols-2 gap-4"},To={key:0},Ro={class:"space-y-1"},zo={class:"text-red-500 font-mono shrink-0"},So={class:"truncate text-primary hover:underline"},Io={key:1},Fo={class:"space-y-1"},Po={class:"text-green-500 font-mono shrink-0"},Do={class:"truncate text-primary hover:underline"},jo={class:"space-y-1"},No={class:"flex-1 truncate text-primary hover:underline"},Bo={class:"text-gray-500 font-mono text-xs shrink-0"},Mo={class:"w-24 h-2 rounded-full bg-gray-100 shrink-0"},Ao={key:0,class:"flex items-center gap-1.5 text-xs text-amber-600 mb-3"},Uo={class:"flex items-end gap-2 h-20"},Lo={class:"text-xs text-gray-500"},Eo={class:"text-xs text-gray-400"},Oo={class:"space-y-1"},Ko={class:"truncate"},Wo=fe({__name:"RunInsights",props:{testRunId:{},runStatus:{},refreshKey:{}},setup(t){const y=t,k=S(()=>{if(!d.value)return"";const P=d.value.passRateDelta;return P>0?"text-green-600":P<0?"text-red-600":"text-muted"}),R=S(()=>{if(!d.value)return"";const P=d.value.passRateDelta;return P>0?"i-lucide-trending-up":P<0?"i-lucide-trending-down":"i-lucide-minus"}),C=S(()=>d.value?.avgDurationDelta==null?"":d.value.avgDurationDelta>0?"text-red-600":"text-green-600"),d=H(null),T=H(!1),u=H(null),h=S(()=>y.runStatus==="running"||y.runStatus==="initialising"||y.runStatus==="finalizing");async function B(){if(!y.testRunId||h.value){d.value=null;return}T.value=!0,u.value=null;try{d.value=await $fetch(`/api/test-runs/${y.testRunId}/insights`)}catch(P){console.error("[RunInsights] failed to load",P),u.value=P?.data?.message||P?.message||"Failed to load insights"}finally{T.value=!1}}me(()=>y.testRunId,B,{immediate:!0}),me(()=>y.refreshKey,(P,I)=>{P!==I&&P!==void 0&&B()});function M(P){return P==null?"—":P<1e3?`${P}ms`:`${(P/1e3).toFixed(1)}s`}return(P,I)=>{const D=Ce,W=Is,L=Ft,f=Pt,z=ve,_=Ie,c=Fs,m=we,A=Ee;return e(u)?(s(),b(W,{key:0,text:e(u),padded:""},{action:r(()=>[i(D,{size:"sm",onClick:B},{default:r(()=>[...I[0]||(I[0]=[w("Retry",-1)])]),_:1})]),_:1},8,["text"])):e(T)?(s(),b(L,{key:1,padded:""})):e(h)?(s(),a("div",Xa,[i(f,{icon:"i-lucide-loader-circle",text:"Run in progress"},{default:r(()=>[...I[1]||(I[1]=[n("p",{class:"text-sm text-muted max-w-sm text-center"}," Insights are computed once the run finishes. Switch back here when the run completes. ",-1)])]),_:1})])):e(d)?e(d).hasBaseline?(s(),a("div",Ja,[n("div",Za,[i(z,{name:"i-lucide-sparkles",class:"size-4 shrink-0 text-primary/70"}),I[3]||(I[3]=n("span",null,"Automatic highlights from this run",-1)),i(_,{topic:"run.insights"})]),i(c,{icon:"i-lucide-bar-chart-3","icon-class":"text-blue-500",title:"Run summary"},{default:r(()=>[n("div",Qa,[n("div",eo,[I[4]||(I[4]=n("p",{class:"text-xs text-muted"},"Pass rate",-1)),n("p",to,l(e(d).passRate)+"%",1),n("div",{class:J(["flex items-center gap-1 text-xs",e(k)])},[i(z,{name:e(R),class:"size-3.5"},null,8,["name"]),e(d).passRateDelta!==0?(s(),a("span",so,l(e(d).passRateDelta>0?"+":"")+l(e(d).passRateDelta)+"pp vs baseline",1)):(s(),a("span",no,"Same as baseline"))],2)]),n("div",ao,[I[5]||(I[5]=n("p",{class:"text-xs text-muted"},"Avg duration",-1)),e(d).avgDurationDelta!==null?(s(),a("p",{key:0,class:J(["text-xl font-semibold",e(C)])},l(e(d).avgDurationDelta>0?"+":"")+l(e(d).avgDurationDelta)+"% ",3)):(s(),a("p",oo,"—")),I[6]||(I[6]=n("p",{class:"text-xs text-muted"},"vs baseline (passing tests)",-1))]),n("div",lo,[I[7]||(I[7]=n("p",{class:"text-xs text-muted"},"Changes",-1)),n("div",io,[e(d).newRegressions.length>0?(s(),a("p",ro," +"+l(e(d).newRegressions.length)+" regressed ",1)):p("",!0),e(d).recovered.length>0?(s(),a("p",uo,"+"+l(e(d).recovered.length)+" fixed",1)):p("",!0),e(d).newFlaky.length>0?(s(),a("p",co,"+"+l(e(d).newFlaky.length)+" flaky",1)):p("",!0),!e(d).newRegressions.length&&!e(d).recovered.length&&!e(d).newFlaky.length?(s(),a("p",mo," No status changes ")):p("",!0)])])])]),_:1}),e(d).newRegressions.length>0?(s(),b(c,{key:0,icon:"i-lucide-alert-circle","icon-class":"text-red-500",title:"New regressions",count:e(d).newRegressions.length},{default:r(()=>[n("div",fo,[(s(!0),a(O,null,ie(e(d).newRegressions,$=>(s(),b(A,{key:$.testRunsCaseId,to:`/test-run-cases/${$.testRunsCaseId}`,class:"flex items-center gap-2 text-sm hover:bg-red-50 dark:hover:bg-red-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[i(m,{color:"error",variant:"solid",size:"xs"},{default:r(()=>[...I[8]||(I[8]=[w("NEW",-1)])]),_:1}),n("span",po,l($.title),1),n("span",go,l(M($.duration)),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):p("",!0),e(d).recurrences.length>0?(s(),b(c,{key:1,icon:"i-lucide-refresh-cw","icon-class":"text-amber-500",title:"Recurring failures",count:e(d).recurrences.length},{default:r(()=>[n("div",xo,[(s(!0),a(O,null,ie(e(d).recurrences,$=>(s(),b(A,{key:$.testRunsCaseId,to:`/test-run-cases/${$.testRunsCaseId}`,class:"flex items-center gap-2 text-sm hover:bg-amber-50 dark:hover:bg-amber-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[i(m,{color:"warning",variant:"solid",size:"xs"},{default:r(()=>[...I[9]||(I[9]=[w("RECURRING",-1)])]),_:1}),n("span",yo,l($.title),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):p("",!0),e(d).recovered.length>0?(s(),b(c,{key:2,icon:"i-lucide-check-circle","icon-class":"text-green-500",title:"Fixed tests",count:e(d).recovered.length},{default:r(()=>[n("div",ho,[(s(!0),a(O,null,ie(e(d).recovered,$=>(s(),b(A,{key:$.testRunsCaseId,to:`/test-run-cases/${$.testRunsCaseId}`,class:"flex items-center gap-2 text-sm hover:bg-green-50 dark:hover:bg-green-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[i(m,{color:"success",variant:"solid",size:"xs"},{default:r(()=>[...I[10]||(I[10]=[w("FIXED",-1)])]),_:1}),n("span",vo,l($.title),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):p("",!0),e(d).newFlaky.length>0?(s(),b(c,{key:3,icon:"i-lucide-flask","icon-class":"text-purple-500",title:"New flaky tests",count:e(d).newFlaky.length},{default:r(()=>[n("div",ko,[(s(!0),a(O,null,ie(e(d).newFlaky,$=>(s(),b(A,{key:$.testRunsCaseId,to:`/test-run-cases/${$.testRunsCaseId}?tab=history`,class:"flex items-center gap-2 text-sm hover:bg-purple-50 dark:hover:bg-purple-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[i(m,{color:"info",variant:"solid",size:"xs"},{default:r(()=>[...I[11]||(I[11]=[w("FLAKY",-1)])]),_:1}),n("span",bo,l($.title),1),n("span",wo,l(M($.duration)),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):p("",!0),e(d).flakyOnRetry.length>0?(s(),b(c,{key:4,icon:"i-lucide-repeat","icon-class":"text-orange-500",title:"Passed on retry",count:e(d).flakyOnRetry.length,subtitle:"Tests that passed but needed one or more retries"},{default:r(()=>[n("div",_o,[(s(!0),a(O,null,ie(e(d).flakyOnRetry,$=>(s(),b(A,{key:$.testRunsCaseId,to:`/test-run-cases/${$.testRunsCaseId}?tab=history`,class:"flex items-center gap-2 text-sm hover:bg-orange-50 dark:hover:bg-orange-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[i(m,{color:"warning",variant:"subtle",size:"xs"},{default:r(()=>[w("×"+l($.retries),1)]),_:2},1024),n("span",$o,l($.title),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):p("",!0),e(d).mostRegressed.length>0||e(d).mostImproved.length>0?(s(),b(c,{key:5,icon:"i-lucide-trending-up","icon-class":"text-blue-500",title:"Performance changes"},{default:r(()=>[n("div",Co,[e(d).mostRegressed.length>0?(s(),a("div",To,[I[12]||(I[12]=n("p",{class:"text-xs font-medium text-red-500 mb-2"},"Most regressed",-1)),n("div",Ro,[(s(!0),a(O,null,ie(e(d).mostRegressed,$=>(s(),b(A,{key:$.testRunsCaseId,to:`/test-run-cases/${$.testRunsCaseId}?tab=performance`,class:"flex items-center gap-2 text-sm hover:bg-red-50 dark:hover:bg-red-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[n("span",zo,"+"+l($.pctChange)+"%",1),n("span",So,l($.title),1)]),_:2},1032,["to"]))),128))])])):p("",!0),e(d).mostImproved.length>0?(s(),a("div",Io,[I[13]||(I[13]=n("p",{class:"text-xs font-medium text-green-500 mb-2"},"Most improved",-1)),n("div",Fo,[(s(!0),a(O,null,ie(e(d).mostImproved,$=>(s(),b(A,{key:$.testRunsCaseId,to:`/test-run-cases/${$.testRunsCaseId}?tab=performance`,class:"flex items-center gap-2 text-sm hover:bg-green-50 dark:hover:bg-green-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[n("span",Po,l($.pctChange)+"%",1),n("span",Do,l($.title),1)]),_:2},1032,["to"]))),128))])])):p("",!0)])]),_:1})):p("",!0),e(d).slowestTests.length>0?(s(),b(c,{key:6,icon:"i-lucide-clock","icon-class":"text-amber-500",title:"Slowest tests"},{default:r(()=>[n("div",jo,[(s(!0),a(O,null,ie(e(d).slowestTests,$=>(s(),b(A,{key:$.testRunsCaseId,to:`/test-run-cases/${$.testRunsCaseId}?tab=performance`,class:"flex items-center gap-2 text-sm hover:bg-amber-50 dark:hover:bg-amber-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[n("div",No,l($.title),1),n("div",Bo,l(M($.duration)),1),n("div",Mo,[n("div",{class:"h-full rounded-full bg-amber-400",style:ke({width:Math.min(100,$.duration/(e(d).slowestTests[0]?.duration||1)*100)+"%"})},null,4)])]),_:2},1032,["to"]))),128))])]),_:1})):p("",!0),e(d).workerImbalance.length>1?(s(),b(c,{key:7,icon:"i-lucide-users","icon-class":"text-gray-500",title:"Worker distribution"},{default:r(()=>[e(d).workerImbalanceWarning?(s(),a("div",Ao,[i(z,{name:"i-lucide-alert-triangle",class:"size-3.5 shrink-0"}),n("span",null,l(e(d).workerImbalanceWarning),1)])):p("",!0),n("div",Uo,[(s(!0),a(O,null,ie(e(d).workerImbalance,$=>(s(),a("div",{key:$.workerIndex,class:"flex-1 flex flex-col items-center gap-1"},[n("span",Lo,l($.count),1),n("div",{class:"w-full bg-blue-400 rounded-t",style:ke({height:Math.max(4,$.count/Math.max(...e(d).workerImbalance.map(E=>E.count))*60)+"px"})},null,4),n("span",Eo,"W"+l($.workerIndex),1)]))),128))])]),_:1})):p("",!0),e(d).clusterNew.length>0?(s(),b(c,{key:8,icon:"i-lucide-layers","icon-class":"text-purple-500",title:"New failure clusters",count:e(d).clusterNew.length},{default:r(()=>[n("div",Oo,[(s(!0),a(O,null,ie(e(d).clusterNew,$=>(s(),b(A,{key:$.clusterId,to:`/failure-clusters/${$.clusterId}`,class:"flex items-center gap-2 text-sm text-primary hover:underline"},{default:r(()=>[n("span",Ko,l($.signature),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):p("",!0)])):(s(),a("div",Ya,[i(f,{icon:"i-lucide-git-compare-arrows",text:"No baseline run found"},{default:r(()=>[...I[2]||(I[2]=[n("p",{class:"text-sm text-muted max-w-sm text-center"}," Insights compare this run against the most recent passing run in the same project. No previous passing run exists yet — once you have at least two completed runs, comparisons will appear here automatically. ",-1)])]),_:1})])):(s(),a("div",qa,[i(f,{text:"No insights yet"})]))}}}),Ho=Object.assign(Wo,{__name:"RunInsights"}),Vo=fe({__name:"ClusterDiagnosis",props:{clusterId:{}},setup(t){return(y,k)=>{const R=Ps;return s(),b(R,{"cluster-id":t.clusterId},null,8,["cluster-id"])}}}),Go=Object.assign(Vo,{__name:"ClusterDiagnosis"}),Xo={class:"pt-4 space-y-3"},qo={key:0,class:"flex items-center justify-center py-8 text-gray-500 gap-2"},Yo={class:"flex items-center justify-between gap-3"},Jo={class:"text-sm text-gray-500 dark:text-gray-400 inline-flex items-center gap-1"},Zo={class:"min-w-0 space-y-0.5"},Qo=["title"],el={key:0,class:"text-xs text-gray-500 truncate block"},tl={class:"font-mono"},sl={key:1,class:"text-gray-400 text-xs"},nl={key:1,class:"text-gray-400 text-xs"},al={class:"text-sm tabular-nums"},ol={key:0,class:"flex flex-wrap gap-1"},ll={key:1,class:"text-gray-400 text-xs"},il={key:0,class:"flex items-center gap-1 text-xs text-gray-500"},rl={key:2,class:"text-gray-400 text-xs"},ul={key:0,class:"text-xs font-medium text-warning-500"},cl={key:1,class:"text-sm text-gray-500 whitespace-nowrap"},dl={key:0,class:"ml-1 text-xs text-gray-400"},ml={class:"flex justify-end gap-2"},fl={key:2,class:"flex flex-col items-center justify-center py-8 text-gray-500 gap-2"},pl=fe({__name:"FailureGroups",props:{refreshKey:{}},emits:["selectCluster"],async setup(t,{emit:y}){let k,R;const C=y,d=t,u=Oe().params.id,{data:h,pending:B,refresh:M}=([k,R]=Ue(()=>Le(`/api/test-runs/${u}/failure-groups`,{lazy:!0,server:!1},"$qddF1IOQ64")),k=await k,R(),k);me(()=>d.refreshKey,(c,m)=>{c!==m&&c!==void 0&&M()});const P=H(null),{copy:I,copied:D}=ut(),W=S(()=>h.value?h.value.flatMap(c=>c.cases.filter(m=>!m.passedOnRetry).map(m=>({filePath:m.filePath,title:m.title,line:null,projectName:null}))):[]),L=S(()=>Rt(W.value));function f(){const c=L.value;c&&I(c,{toast:"Retry command copied"})}const z=[{accessorKey:"signature",header:ce("Signature")},{accessorKey:"errorType",header:ce("Type")},{accessorKey:"status",header:ce("Status")},{accessorKey:"caseCount",header:ce("Tests")},{accessorKey:"signals",header:"Signals"},{accessorKey:"diagnosis",header:"AI"},{accessorKey:"firstSeenRunId",header:ce("Known since")},{id:"actions",header:"Actions"}],_=S(()=>h.value?.reduce((c,m)=>c+m.caseCount,0)??0);return(c,m)=>{const A=ve,$=Ie,E=Ce,x=we,Y=Ee,Q=ct,oe=Dt,ee=rt,le=Go,K=jt;return s(),a(O,null,[n("div",Xo,[e(B)?(s(),a("div",qo,[i(A,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),m[2]||(m[2]=n("span",null,"Grouping failures...",-1))])):e(h)&&e(h).length?(s(),a(O,{key:1},[n("div",Yo,[n("p",Jo,[w(l(e(_))+" failing "+l(e(_)===1?"test":"tests")+" across "+l(e(h).length)+" "+l(e(h).length===1?"group":"groups")+" ",1),i($,{topic:"cluster.concept"})]),e(W).length>0?(s(),b(E,{key:0,size:"xs",variant:"outline",color:"neutral",icon:e(D)?"i-lucide-check":"i-lucide-play",title:e(D)?"Copied!":("copyPreview"in c?c.copyPreview:e(Ct))(e(L)),onClick:m[0]||(m[0]=N=>f())},{default:r(()=>[...m[3]||(m[3]=[w(" Copy retry command ",-1)])]),_:1},8,["icon","title"])):p("",!0)]),i(ee,{ui:{body:"p-0 sm:p-0"}},{default:r(()=>[i(oe,{"min-width":"46rem",bleed:!1},{default:r(()=>[i(Q,{data:e(h),columns:z},{"actions-header":r(()=>[...m[4]||(m[4]=[n("div",{class:"text-right"},"Actions",-1)])]),"signature-cell":r(({row:N})=>[n("div",Zo,[n("span",{class:J(["text-sm block truncate",N.original.title?"":"font-mono"]),title:N.original.signature},l(N.original.title||N.original.signature),11,Qo),N.original.selector?(s(),a("span",el,[m[5]||(m[5]=w(" Locator: ",-1)),n("code",tl,l(N.original.selector),1)])):p("",!0)])]),"errorType-cell":r(({row:N})=>[N.original.errorType?(s(),b(x,{key:0,color:("clusterErrorTypeColor"in c?c.clusterErrorTypeColor:e(_s))(N.original.errorType),variant:"subtle",size:"sm"},{default:r(()=>[w(l(N.original.errorType),1)]),_:2},1032,["color"])):(s(),a("span",sl,"—"))]),"status-cell":r(({row:N})=>[N.original.status?(s(),b(x,{key:0,color:("clusterStatusColor"in c?c.clusterStatusColor:e(ws))(N.original.status),variant:"subtle",size:"sm"},{default:r(()=>[w(l(N.original.status),1)]),_:2},1032,["color"])):(s(),a("span",nl,"—"))]),"caseCount-cell":r(({row:N})=>[n("span",al,l(N.original.caseCount),1)]),"signals-cell":r(({row:N})=>[N.original.isNew||N.original.flaky||N.original.workerCorrelated||N.original.locatorHealing?(s(),a("div",ol,[N.original.isNew?(s(),b(x,{key:0,color:"warning",variant:"subtle",size:"sm"},{default:r(()=>[...m[6]||(m[6]=[w(" New ",-1)])]),_:1})):p("",!0),N.original.flaky?(s(),b(x,{key:1,color:"warning",variant:"outline",size:"sm"},{default:r(()=>[...m[7]||(m[7]=[w(" Flaky ",-1)])]),_:1})):p("",!0),N.original.workerCorrelated?(s(),b(x,{key:2,color:"info",variant:"outline",size:"sm",title:"All failures ran on the same worker"},{default:r(()=>[...m[8]||(m[8]=[w(" Same worker ",-1)])]),_:1})):p("",!0),N.original.locatorHealing?.healed?(s(),b(x,{key:3,color:"success",variant:"subtle",size:"sm",icon:"i-lucide-circle-check",title:"The recommended locator already passes at this call site in a later run"},{default:r(()=>[...m[9]||(m[9]=[w(" Healed ",-1)])]),_:1})):N.original.locatorHealing?(s(),b(x,{key:4,color:"success",variant:"outline",size:"sm",icon:"i-lucide-bandage",title:`Locator fix available: ${N.original.locatorHealing.recommended} — open the cluster to apply it`},{default:r(()=>[...m[10]||(m[10]=[w(" Locator fix ",-1)])]),_:1},8,["title"])):p("",!0)])):(s(),a("span",ll,"—"))]),"diagnosis-cell":r(({row:N})=>[N.original.diagnosis?.status==="running"?(s(),a("div",il,[i(A,{name:"i-lucide-loader-2",class:"size-3 animate-spin"}),m[11]||(m[11]=w(" Running ",-1))])):N.original.diagnosis?.status==="completed"&&N.original.diagnosis.category?(s(),b(x,{key:1,color:"neutral",variant:"subtle",size:"sm",class:"gap-1"},{default:r(()=>[i(A,{name:"i-lucide-sparkles",class:"size-3"}),w(" "+l(N.original.diagnosis.category),1)]),_:2},1024)):(s(),a("span",rl,"—"))]),"firstSeenRunId-cell":r(({row:N})=>[N.original.isNew?(s(),a("span",ul,"New in this run")):(s(),a("div",cl,[i(Y,{to:`/test-runs/${N.original.firstSeenRunId}`,class:"text-primary hover:underline"},{default:r(()=>[w(" run #"+l(N.original.firstSeenRunId),1)]),_:2},1032,["to"]),N.original.firstSeenAt?(s(),a("span",dl," ("+l(("formatRelativeTime"in c?c.formatRelativeTime:e(it))(N.original.firstSeenAt))+") ",1)):p("",!0)]))]),"actions-cell":r(({row:N})=>[n("div",ml,[i(E,{size:"sm",color:"primary",variant:"soft",onClick:he=>C("selectCluster",N.original.clusterId)},{default:r(()=>[...m[12]||(m[12]=[w(" Filter ",-1)])]),_:1},8,["onClick"]),i(E,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-sparkles",onClick:he=>P.value=N.original.clusterId},{default:r(()=>[...m[13]||(m[13]=[w(" Diagnose ",-1)])]),_:1},8,["onClick"]),i(E,{to:`/failure-clusters/${N.original.clusterId}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:r(()=>[...m[14]||(m[14]=[w(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data"])]),_:1})]),_:1})],64)):(s(),a("div",fl,[i(A,{name:"i-lucide-party-popper",class:"size-6"}),m[15]||(m[15]=n("span",null,"No failure groups — failed tests without error details are not grouped",-1))]))]),i(K,{open:e(P)!==null,title:"AI Diagnosis",ui:{content:"max-w-2xl"},"onUpdate:open":m[1]||(m[1]=N=>{N||(P.value=null)})},{body:r(()=>[e(P)!==null?(s(),b(le,{key:0,"cluster-id":e(P)},null,8,["cluster-id"])):p("",!0)]),_:1},8,["open"])],64)}}}),gl=Object.assign(pl,{__name:"FailureGroups"}),xl={class:"pt-4"},yl={key:2,class:"space-y-4"},hl={class:"flex flex-wrap items-center gap-2 text-sm"},vl={class:"text-gray-500 inline-flex items-center gap-1"},kl={key:0,class:"text-gray-400"},bl={key:0,class:"flex flex-wrap items-center gap-2"},wl={class:"text-sm text-gray-500"},_l={key:1,class:"flex items-center gap-2"},$l={class:"text-sm text-gray-500"},Cl={class:"space-y-3"},Tl={class:"flex items-center gap-2 text-sm font-medium"},Rl={class:"flex flex-wrap items-center gap-2 text-sm font-mono"},zl={key:0,class:"text-xs text-gray-400 font-sans"},Sl={class:"flex flex-wrap items-center gap-2"},Il={class:"flex items-center gap-1.5 flex-1 min-w-0"},Fl={class:"flex-1 text-xs bg-gray-100 dark:bg-gray-800 px-3 py-1.5 rounded font-mono truncate select-all"},Pl={key:3,class:"text-sm text-gray-500 flex items-center gap-2"},Dl={class:"px-4 py-3 text-sm font-medium flex items-center gap-2 border-b border-default"},jl={class:"overflow-x-auto"},Nl={class:"w-full min-w-[36rem] text-sm"},Bl={class:"px-4 py-2 text-gray-500"},Ml={class:"px-4 py-2 font-mono text-xs"},Al={key:0,class:"text-green-700 dark:text-green-400"},Ul={key:1,class:"text-gray-400"},Ll={class:"px-4 py-2 font-mono text-xs"},El={key:0,class:"text-red-700 dark:text-red-400"},Ol={key:1,class:"text-gray-400"},Kl=fe({__name:"RegressionContext",props:{refreshKey:{}},async setup(t){let y,k;const C=Oe().params.id,d=t,{data:T,pending:u,refresh:h}=([y,k]=Ue(()=>Le(`/api/test-runs/${C}/regression-context`,{lazy:!0,server:!1},"$AcrCJopY1M")),y=await y,k(),y);me(()=>d.refreshKey,(I,D)=>{I!==D&&I!==void 0&&h()});const{copy:B,copied:M}=ut();function P(){B(T.value?.commitRange?.gitCommand)}return(I,D)=>{const W=Ft,L=Pt,f=ve,z=Ie,_=Ee,c=we,m=Ce,A=rt;return s(),a("div",xl,[e(u)?(s(),b(W,{key:0,text:"Looking for last passing run…"})):e(T)?.hasGreen?(s(),a("div",yl,[n("div",hl,[i(f,{name:"i-lucide-circle-check",class:"size-4 text-green-500 shrink-0"}),n("span",vl,[D[0]||(D[0]=w("Last passing run: ",-1)),i(z,{topic:"run.regression"})]),i(_,{to:`/test-runs/${e(T).lastGreenRunId}`,class:"font-medium text-primary hover:underline"},{default:r(()=>[w(" Run #"+l(e(T).lastGreenRunId),1)]),_:1},8,["to"]),e(T).lastGreenRunAt?(s(),a("span",kl," ("+l(("formatRelativeTime"in I?I.formatRelativeTime:e(it))(e(T).lastGreenRunAt))+") ",1)):p("",!0)]),(e(T).newFailures??0)>0?(s(),a("div",bl,[i(c,{color:"error",variant:"soft",size:"lg"},{default:r(()=>[w(l(e(T).newFailures)+" new "+l(e(T).newFailures===1?"failure":"failures"),1)]),_:1}),n("span",wl,l(e(T).newFailures===1?"test":"tests")+" that "+l((e(T).newFailures===1,"passed"))+" in run #"+l(e(T).lastGreenRunId)+" but "+l(e(T).newFailures===1?"fails":"fail")+" here ",1)])):(s(),a("div",_l,[i(c,{color:"warning",variant:"soft",size:"lg"},{default:r(()=>[...D[1]||(D[1]=[w(" No new regressions ",-1)])]),_:1}),n("span",$l,"All failing tests were also failing before run #"+l(e(T).lastGreenRunId),1)])),e(T).commitRange?(s(),b(A,{key:2,ui:{body:"p-4 sm:p-4"}},{default:r(()=>[n("div",Cl,[n("div",Tl,[i(f,{name:"i-lucide-git-commit-horizontal",class:"size-4"}),D[2]||(D[2]=w(" Commits introduced since last passing run ",-1))]),n("div",Rl,[i(c,{color:"success",variant:"soft",size:"sm"},{default:r(()=>[w(l(e(T).commitRange.fromShort),1)]),_:1}),i(f,{name:"i-lucide-arrow-right",class:"size-3 text-gray-400"}),i(c,{color:"error",variant:"soft",size:"sm"},{default:r(()=>[w(l(e(T).commitRange.toShort),1)]),_:1}),e(T).currentBranch||e(T).lastGreenBranch?(s(),a("span",zl," on "+l(e(T).currentBranch||e(T).lastGreenBranch),1)):p("",!0)]),n("div",Sl,[e(T).commitRange.compareUrl?(s(),b(m,{key:0,to:e(T).commitRange.compareUrl,target:"_blank",external:"",icon:"i-lucide-external-link",size:"sm",variant:"soft",color:"primary"},{default:r(()=>[...D[3]||(D[3]=[w(" View commits ",-1)])]),_:1},8,["to"])):p("",!0),n("div",Il,[n("code",Fl,l(e(T).commitRange.gitCommand),1),i(m,{icon:e(M)?"i-lucide-check":"i-lucide-clipboard",size:"xs",color:"neutral",variant:"ghost",title:e(M)?"Copied!":"Copy git command",onClick:P},null,8,["icon","title"])])])])]),_:1})):!e(T).currentCommit||!e(T).lastGreenCommit?(s(),a("div",Pl,[i(f,{name:"i-lucide-git-branch",class:"size-4 shrink-0"}),D[4]||(D[4]=w(" No commit info available — enable ",-1)),D[5]||(D[5]=n("code",{class:"font-mono text-xs"},"collectScmInfo: true",-1)),D[6]||(D[6]=w(" in the reporter to see commit ranges ",-1))])):p("",!0),e(T).metadataDiff&&e(T).metadataDiff.length>0?(s(),b(A,{key:4,ui:{body:"p-0 sm:p-0"}},{default:r(()=>[n("div",Dl,[i(f,{name:"i-lucide-sliders-horizontal",class:"size-4"}),D[7]||(D[7]=w(" What changed between runs ",-1))]),n("div",jl,[n("table",Nl,[D[8]||(D[8]=n("thead",null,[n("tr",{class:"text-xs text-gray-500 uppercase tracking-wider border-b border-default"},[n("th",{class:"text-left px-4 py-2 font-medium w-32"},"Field"),n("th",{class:"text-left px-4 py-2 font-medium"},"Last passing"),n("th",{class:"text-left px-4 py-2 font-medium"},"This run")])],-1)),n("tbody",null,[(s(!0),a(O,null,ie(e(T).metadataDiff,$=>(s(),a("tr",{key:$.key,class:"border-b last:border-b-0 border-default"},[n("td",Bl,l($.label),1),n("td",Ml,[$.before?(s(),a("span",Al,l($.before),1)):(s(),a("span",Ul,"—"))]),n("td",Ll,[$.after?(s(),a("span",El,l($.after),1)):(s(),a("span",Ol,"—"))])]))),128))])])])]),_:1})):p("",!0)])):(s(),b(L,{key:1,icon:"i-lucide-history",text:"No previous passing run found for this project"}))])}}}),Wl=Object.assign(Kl,{__name:"RegressionContext"}),Hl={class:"flex items-center justify-between mb-2"},Vl={class:"text-xs text-gray-500 inline-flex items-center gap-1"},Gl={class:"flex items-center gap-1"},Xl={class:"p-2 flex flex-col gap-2 min-w-56"},ql=fe({__name:"TimelineHeader",props:{workerCount:{},shardTotal:{},testCount:{},hookCount:{},waitCount:{},spanTypes:{},live:{type:Boolean}},emits:["reset","toggleSpan"],setup(t){return(y,k)=>{const R=Ie,C=Ce,d=zt,T=at;return s(),a("div",Hl,[n("span",Vl,[n("span",null,[w(l(t.workerCount)+" worker"+l(t.workerCount>1?"s":"")+" ",1),t.shardTotal&&t.shardTotal>1?(s(),a(O,{key:0},[w(" · "+l(t.shardTotal)+" shard"+l(t.shardTotal>1?"s":""),1)],64)):p("",!0),w(" · "+l(t.testCount)+" tests ",1),t.hookCount>0?(s(),a(O,{key:1},[w(" · "+l(t.hookCount)+" hooks ",1)],64)):p("",!0),t.waitCount>0?(s(),a(O,{key:2},[w(" · "+l(t.waitCount)+" waits ",1)],64)):p("",!0)]),i(R,{topic:"run.timeline"})]),n("div",Gl,[t.spanTypes.length>1?(s(),b(T,{key:0,content:{align:"end"}},{content:r(()=>[n("div",Xl,[(s(!0),a(O,null,ie(t.spanTypes,u=>(s(),b(d,{key:u.key,"model-value":u.checked,label:u.label,"onUpdate:modelValue":h=>y.$emit("toggleSpan",u.key,h===!0)},null,8,["model-value","label","onUpdate:modelValue"]))),128))])]),default:r(()=>[i(C,{size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-list-filter","trailing-icon":"i-lucide-chevron-down",title:"Show or hide span types"},{default:r(()=>[...k[1]||(k[1]=[w(" Span types ",-1)])]),_:1})]),_:1})):p("",!0),t.live?p("",!0):(s(),b(C,{key:1,size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-rotate-ccw",onClick:k[0]||(k[0]=u=>y.$emit("reset"))},{default:r(()=>[...k[2]||(k[2]=[w(" Reset view ",-1)])]),_:1}))])])}}}),Yl=Object.assign(ql,{__name:"TimelineHeader"}),Xe={barHeight:24,rowGap:8,labelWidth:80,sidePadding:16,axisHeight:28,get rowHeight(){return this.barHeight+this.rowGap}},Jl={passed:"#16a34a",failed:"#dc2626",timedOut:"#ea580c",running:"#2563eb",initialising:"#2563eb",skipped:"#9ca3af",cancelled:"#a1a1aa",interrupted:"#ea580c",flaky:"#ca8a04"},Pe={fill:"#facc15",stroke:"#ca8a04",swatch:"#f59e0b"};function Ye(t){return Jl[t]||"#a1a1aa"}function Bt(t){return Ye(t)+"66"}function Mt(t){return Ye(t)}function qe(t){return t<1e3?`${t}ms`:t<6e4?`${(t/1e3).toFixed(1)}s`:`${Math.floor(t/6e4)}m ${Math.floor(t%6e4/1e3)}s`}const Zl=["y","width","height"],Ql=["y1","x2","y2"],ei=["x1","y1","x2","y2"],ti=["x1","y1","x2","y2"],si=["x","y"],ni=["y"],ai=fe({__name:"TimelineGrid",props:{workerRows:{},shardGroups:{},tickMarks:{},contentWidth:{},shardTotal:{}},setup(t){const{barHeight:y,rowGap:k,axisHeight:R,rowHeight:C}=Xe;return(d,T)=>(s(),a("g",null,[(s(!0),a(O,null,ie(t.workerRows,(u,h)=>(s(),a("rect",{key:"bg-"+h,x:0,y:h*e(C)+e(R),width:t.contentWidth,height:e(C),class:J(h%2===1?"fill-black/[0.03] dark:fill-white/[0.03]":"fill-transparent")},null,10,Zl))),128)),(s(!0),a(O,null,ie(t.shardGroups.slice(1),u=>(s(),a("line",{key:"shard-sep-"+u.rowRange[0],x1:0,y1:u.rowRange[0]*e(C)+e(R)-e(k)/2,x2:t.contentWidth,y2:u.rowRange[0]*e(C)+e(R)-e(k)/2,stroke:"currentColor","stroke-dasharray":"4,3",class:"stroke-gray-400 dark:stroke-gray-500"},null,8,Ql))),128)),n("line",{x1:e(Xe).labelWidth,y1:e(R),x2:t.contentWidth,y2:e(R),stroke:"currentColor",class:"stroke-gray-300 dark:stroke-gray-600"},null,8,ei),(s(!0),a(O,null,ie(t.tickMarks,u=>(s(),a("g",{key:u.ms},[n("line",{x1:u.x,y1:e(R)-4,x2:u.x,y2:e(R),stroke:"currentColor",class:"stroke-gray-300 dark:stroke-gray-600"},null,8,ti),n("text",{x:u.x,y:e(R)-8,"text-anchor":"middle",class:"fill-gray-400 text-[10px]"},l(u.label),9,si)]))),128)),(s(!0),a(O,null,ie(t.workerRows,(u,h)=>(s(),a("text",{key:"label-"+h,x:6,y:h*e(C)+e(R)+e(y)/2+4,class:"fill-gray-500 text-[11px] font-medium"},l(u.shardIndex!=null&&t.shardTotal&&t.shardTotal>1?`S${u.shardIndex} W${u.workerIndex}`:`Worker ${u.workerIndex}`),9,ni))),128))]))}}),oi=Object.assign(ai,{__name:"TimelineGrid"}),li=["x","y","width","height","fill","stroke"],ii=["x","y"],ri=["x","y","width","height","fill","stroke"],ui=["x1","y1","x2","y2","stroke"],ci=["x1","y1","x2","y2","stroke"],di=["x","y"],mi=["cx","cy"],fi=["cx","cy"],pi=["x","y","width","height","fill"],gi=["x","y"],xi=fe({__name:"TimelineBar",props:{item:{},x:{},y:{},width:{}},emits:["select","hover","move","leave"],setup(t,{emit:y}){const k=t,R=y,{barHeight:C}=Xe,d=S(()=>["setup","hook","fixture"].includes(k.item.kind)),T=S(()=>k.item.testCaseId!=null),u=S(()=>T.value?"cursor-pointer":"cursor-default");function h(){k.item.testCaseId!=null&&R("select",k.item.testCaseId)}return(B,M)=>(s(),a("g",{class:"timeline-bar-group",onMouseenter:M[0]||(M[0]=P=>R("hover",t.item,P)),onMousemove:M[1]||(M[1]=P=>R("move",P)),onMouseleave:M[2]||(M[2]=P=>R("leave"))},[d.value?(s(),a(O,{key:0},[n("rect",{x:t.x,y:t.y,width:t.width,height:e(C),rx:3,ry:3,fill:e(Bt)(t.item.status),stroke:e(Mt)(t.item.status),"stroke-width":"1","stroke-dasharray":"3,2",class:J(["timeline-bar-shape transition-opacity duration-100 opacity-80",u.value]),onClick:h},null,10,li),t.width>60?(s(),a("text",{key:0,x:t.x+4,y:t.y+e(C)/2+4,class:"fill-gray-600 dark:fill-gray-300 text-[9px] font-medium pointer-events-none"},l(t.item.title),9,ii)):p("",!0)],64)):t.item.kind==="wait"?(s(),a(O,{key:1},[n("rect",{x:t.x,y:t.y-3,width:t.width,height:e(C)+6,rx:2,ry:2,fill:e(Pe).fill,"fill-opacity":"0.28",stroke:e(Pe).stroke,"stroke-width":"1.5",class:J(["timeline-bar-shape transition-opacity duration-100 opacity-90",u.value]),onClick:h},null,10,ri),t.width>4?(s(),a("line",{key:0,x1:t.x+1,y1:t.y-3,x2:t.x+t.width-1,y2:t.y+e(C)+3,stroke:e(Pe).stroke,"stroke-width":"1","stroke-opacity":"0.25",class:"pointer-events-none"},null,8,ui)):p("",!0),t.width>4?(s(),a("line",{key:1,x1:t.x+t.width-1,y1:t.y-3,x2:t.x+1,y2:t.y+e(C)+3,stroke:e(Pe).stroke,"stroke-width":"1","stroke-opacity":"0.25",class:"pointer-events-none"},null,8,ci)):p("",!0),t.width>50?(s(),a("text",{key:2,x:t.x+4,y:t.y+e(C)/2+4,class:"fill-yellow-800 dark:fill-yellow-200 text-[9px] font-bold pointer-events-none"}," wasted "+l(e(qe)(t.item.duration)),9,di)):p("",!0)],64)):t.item.status==="running"?(s(),a(O,{key:2},[n("circle",{cx:t.x+6,cy:t.y+e(C)/2,r:"3",fill:"#2563eb",filter:"url(#glow)",class:"timeline-bar-shape transition-opacity duration-100 cursor-pointer opacity-90",onClick:h},null,8,mi),n("circle",{cx:t.x+6,cy:t.y+e(C)/2,r:"5",fill:"none",stroke:"#2563eb","stroke-width":"1.5","stroke-opacity":"0.4",filter:"url(#glow)",class:"timeline-bar-shape transition-opacity duration-100 cursor-pointer opacity-90",onClick:h},null,8,fi)],64)):(s(),a(O,{key:3},[n("rect",{x:t.x,y:t.y,width:t.width,height:e(C),rx:3,ry:3,fill:e(Ye)(t.item.status),class:"timeline-bar-shape transition-opacity duration-100 cursor-pointer opacity-90",onClick:h},null,8,pi),t.width>40?(s(),a("text",{key:0,x:t.x+4,y:t.y+e(C)/2+4,class:"fill-white text-[10px] font-medium pointer-events-none"},l(e(qe)(t.item.duration)),9,gi)):p("",!0)],64))],32))}}),yi=Object.assign(xi,{__name:"TimelineBar"}),hi={class:"flex items-center gap-2 mb-1"},vi={class:"font-medium text-gray-900 dark:text-white max-w-64 truncate"},ki={class:"flex items-center gap-3 text-gray-500"},bi={class:"capitalize"},wi={key:0,class:"italic truncate max-w-48"},_i=340,$i=fe({__name:"TimelineTooltip",props:{item:{},pos:{}},setup(t){const y=t,k=S(()=>{const C=y.item;return C?C.kind==="test"?{backgroundColor:Ye(C.status)}:C.kind==="wait"?{backgroundColor:Pe.swatch+"66",borderColor:Pe.swatch}:{backgroundColor:Bt(C.status),borderColor:Mt(C.status)}:{}}),R=S(()=>{const{x:C,y:d}=y.pos;if(typeof window>"u")return{left:`${C+12}px`,top:`${d-10}px`};const T=C+12+_i>window.innerWidth,u=d+90>window.innerHeight;return{left:T?void 0:`${C+12}px`,right:T?`${window.innerWidth-C+12}px`:void 0,top:u?void 0:`${d-10}px`,bottom:u?`${window.innerHeight-d+10}px`:void 0}});return(C,d)=>(s(),b(os,{to:"body"},[t.item?(s(),a("div",{key:0,class:"fixed z-[9999] pointer-events-none rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 px-3 py-2 text-xs shadow-lg",style:ke(R.value)},[n("div",hi,[n("span",{class:J(["inline-block size-2.5 rounded-full shrink-0",{"border border-dashed":t.item.kind!=="test"}]),style:ke(k.value)},null,6),n("span",vi,[t.item.kind!=="test"?(s(),a("span",{key:0,class:J(["uppercase text-[10px] tracking-wider mr-1",t.item.kind==="wait"?"text-amber-500":"text-gray-500"])},l(t.item.kind),3)):p("",!0),w(" "+l(t.item.title),1)])]),n("div",ki,[n("span",bi,l(t.item.status),1),n("span",null,l(e(qe)(t.item.duration)),1),n("span",null,"Worker "+l(t.item.workerIndex),1),t.item.parentTitle?(s(),a("span",wi," for "+l(t.item.parentTitle),1)):p("",!0)])],4)):p("",!0)]))}}),Ci=Object.assign($i,{__name:"TimelineTooltip"}),Ti=["Wait for timeout*","*waitForTimeout*"];function Ri(t){const y=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(`^${y}$`,"i")}const xt=new Map;function zi(t){let y=xt.get(t);return y||(y=Ri(t),xt.set(t,y)),y}function Si(t,y){if(!y||y.length===0)return!1;const k=t.title??"",R=t.location??"";for(const C of y){const d=zi(C);if(d.test(k)||R&&d.test(R))return!0}return!1}function Ii(t){const y=new Map;for(const k of t){const R=k.workerIndex;if(R==null||R<0)continue;const C=k.shardIndex??null,d=`${C??"null"}|${R}`;let T=y.get(d);T||(T={shardIndex:C,workerIndex:R,cases:[]},y.set(d,T)),T.cases.push(k)}return[...y.values()].sort((k,R)=>{const C=k.shardIndex??1/0,d=R.shardIndex??1/0;return C!==d?C-d:k.workerIndex-R.workerIndex})}function He(t){if(t==null)return null;if(typeof t=="number")return Number.isFinite(t)?t:null;if(t instanceof Date)return t.getTime();const y=new Date(t).getTime();return Number.isNaN(y)?null:y}function Fi(t,y){return t.category==="wait"?Si(t,y)?"wait":null:t.category==="hook"||t.category==="fixture"?t.category:null}function Pi(t){const y=S(()=>t.wastedPatterns&&t.wastedPatterns.length>0?t.wastedPatterns:Ti),k=S(()=>Ii(t.testCases)),R=S(()=>{const u=k.value,h=y.value;let B=1/0;for(const W of u)for(const L of W.cases){const f=He(L.startedAt);f!=null&&f>0&&(B=Math.min(B,f))}const M=Number.isFinite(B),P=W=>Math.max(0,(He(W)??B)-B),I=[],D=new Map;if(u.forEach((W,L)=>{const f=[],z=M?W.cases:[...W.cases].sort((c,m)=>(He(c.startedAt)??0)-(He(m.startedAt)??0));let _=0;for(const c of z){const m=c.duration??1e3,A=M?P(c.startedAt):_;f.push({key:`t${c.id}`,kind:"test",testCaseId:c.id,title:c.title,status:c.status,workerIndex:W.workerIndex,start:A,duration:m,rowIndex:L}),_=A+m,(c.stepEvents??[]).forEach((E,x)=>{const Y=Fi(E,h);if(!Y)return;const Q=E.duration||0,oe=M?P(E.startedAt):_;f.push({key:`s${c.id}:${x}`,kind:Y,testCaseId:c.id,title:E.title,status:E.status||"passed",workerIndex:W.workerIndex,start:oe,duration:Q,rowIndex:L,parentTitle:c.title}),_=oe+Q})}f.sort((c,m)=>c.start-m.start),I.push(...f),D.has(W.workerIndex)||D.set(W.workerIndex,_)}),t.setupSteps&&t.setupSteps.length>0){const W=new Map;u.forEach((L,f)=>{W.has(L.workerIndex)||W.set(L.workerIndex,f)}),t.setupSteps.forEach((L,f)=>{const z=L.workerIndex;if(z==null||z<0)return;const _=W.get(z);if(_==null)return;const c=L.duration||0;let m;M?m=P(L.startedAt):(m=D.get(z)??0,D.set(z,m+c)),I.push({key:`setup${z}:${f}`,kind:"setup",testCaseId:null,title:`[Setup] ${L.title}`,status:L.status||"passed",workerIndex:z,start:m,duration:c,rowIndex:_,parentTitle:null})})}return I}),C=S(()=>k.value.map(u=>({shardIndex:u.shardIndex,workerIndex:u.workerIndex}))),d=S(()=>{const u=[];for(let h=0;h<C.value.length;h++){const B=C.value[h],M=u[u.length-1];!M||M.shardIndex!==B.shardIndex?u.push({shardIndex:B.shardIndex,rowRange:[h,h]}):M.rowRange[1]=h}return u}),T=S(()=>{let u=0;for(const h of R.value)u=Math.max(u,h.start+h.duration);return u||6e4});return{timelineData:R,workerRows:C,shardGroups:d,maxTime:T}}const yt=1.12,Di=10,ji=100,et=[10,20,50,100,200,500,1e3,2e3,5e3,1e4,15e3,3e4,6e4,12e4,3e5,6e5,9e5,18e5,36e5];function Ni(t){const{containerRef:y,maxTime:k,rowCount:R,hasData:C,live:d}=t,{labelWidth:T,sidePadding:u,axisHeight:h,rowHeight:B}=Xe,M=H(1),P=H(0),I=H(!1),D=H(0),W=H(0),L=S(()=>.5*M.value),f=S(()=>k.value*L.value+T+u),z=S(()=>R.value*B+h);function _(v){return v.start*L.value+T}function c(v){return Math.max(v.duration*L.value,3)}function m(v){return v.rowIndex*B+h}function A(){const v=y.value?.clientWidth;if(!v||k.value<=0)return 1;const X=(v-T)/k.value;return Math.min(1,X/.5)}function $(){const v=A();v>0&&(M.value=v,P.value=0)}function E(v){if(!y.value)return v;const X=y.value.clientWidth;return f.value<=X?0:Math.max(X-f.value,Math.min(0,v))}function x(v,X){const ne=Math.max(A(),Math.min(Di,v)),te=ne/M.value;M.value=ne,P.value=E(X-(X-P.value)*te)}const Y=S(()=>{const v=ji/L.value;let X=et.find(te=>te>=v)??et[et.length-1];for(;k.value/X>1e3;)X*=2;const ne=[];for(let te=0;te<=k.value;te+=X)ne.push({ms:te,x:te*L.value+T,label:qe(te)});return ne});function Q(v){if(d())return;const X=v.deltaY>0?1/yt:yt,ne=y.value?.getBoundingClientRect();x(M.value*X,ne?v.clientX-ne.left:0)}const oe=4,ee=new Map;let le=null,K=0,N=1,he=0;function j(v,X){le=v,D.value=X,W.value=P.value}function o(v){if(!d()&&!(v.pointerType==="mouse"&&v.button!==0)){if(ee.set(v.pointerId,{x:v.clientX,y:v.clientY}),ee.size===1)j(v.pointerId,v.clientX);else if(ee.size===2){le=null,I.value=!1;for(const xe of ee.keys())y.value?.setPointerCapture?.(xe);const[X,ne]=[...ee.values()];K=Math.hypot(X.x-ne.x,X.y-ne.y)||1,N=M.value;const te=y.value?.getBoundingClientRect();he=(X.x+ne.x)/2-(te?.left??0)}v.preventDefault()}}function F(v){if(!(d()||!ee.has(v.pointerId))){if(ee.set(v.pointerId,{x:v.clientX,y:v.clientY}),ee.size>=2){const[X,ne]=[...ee.values()],te=Math.hypot(X.x-ne.x,X.y-ne.y)||1;x(N*(te/K),he);return}I.value?P.value=E(W.value+(v.clientX-D.value)):le===v.pointerId&&Math.abs(v.clientX-D.value)>oe&&(y.value?.setPointerCapture?.(v.pointerId),I.value=!0,P.value=E(W.value+(v.clientX-D.value)))}}function V(v){if(ee.delete(v.pointerId),le===v.pointerId&&(le=null),y.value?.releasePointerCapture?.(v.pointerId),ee.size===1){const[X]=[...ee.entries()];j(X[0],X[1].x)}else ee.size===0&&(I.value=!1)}function re(){$()}let Z=null;return ls(()=>{je($),y.value&&(Z=new ResizeObserver(()=>$()),Z.observe(y.value))}),vt(()=>{Z?.disconnect()}),me(()=>[d(),C.value,k.value,R.value],([v,X])=>{v&&X&&je($)}),{panX:P,isPanning:I,pxPerMs:L,contentWidth:f,contentHeight:z,getBarX:_,getBarWidth:c,getBarTop:m,tickMarks:Y,onWheel:Q,onPointerDown:o,onPointerMove:F,onPointerUp:V,resetView:re}}const Bi={key:0,class:"relative select-none"},Mi=["width","height"],Ai={key:1,class:"text-center py-10 text-gray-500"},Ui=fe({__name:"WorkersTimeline",props:{testCases:{},setupSteps:{},shardTotal:{},live:{type:Boolean},wastedPatterns:{}},emits:["selectTestCase"],setup(t,{emit:y}){const k=t,R=y,{timelineData:C,workerRows:d,shardGroups:T,maxTime:u}=Pi(k),h=H(null),B=S(()=>d.value.length),M=S(()=>C.value.length>0),{panX:P,isPanning:I,contentWidth:D,contentHeight:W,getBarX:L,getBarWidth:f,getBarTop:z,tickMarks:_,onWheel:c,onPointerDown:m,onPointerMove:A,onPointerUp:$,resetView:E}=Ni({containerRef:h,maxTime:u,rowCount:B,hasData:M,live:()=>k.live}),x=S(()=>C.value.filter(Z=>Z.kind==="test").length),Y=S(()=>C.value.filter(Z=>Z.kind!=="test"&&Z.kind!=="wait").length),Q=S(()=>C.value.filter(Z=>Z.kind==="wait").length),oe=["test","setup","hook","fixture","wait"],ee={test:"Tests",setup:"Setup (beforeAll/afterAll)",hook:"Hooks",fixture:"Fixtures",wait:"Wasted waits"},le=H({}),K=S(()=>C.value.filter(Z=>!le.value[Z.kind])),N=S(()=>{const Z=new Set(C.value.map(v=>v.kind));return oe.filter(v=>Z.has(v)).map(v=>({key:v,label:ee[v],checked:!le.value[v]}))});function he(Z,v){le.value={...le.value,[Z]:!v}}const j=H(null),o=H({x:0,y:0});me(K,Z=>{j.value&&(j.value=Z.find(v=>v.key===j.value.key)??null)});function F(Z,v){j.value=Z,o.value={x:v.clientX,y:v.clientY}}function V(Z){o.value={x:Z.clientX,y:Z.clientY}}function re(){j.value=null}return(Z,v)=>{const X=Yl,ne=oi,te=yi,xe=Ci,be=ve;return e(C).length>0?(s(),a("div",Bi,[i(X,{"worker-count":e(d).length,"shard-total":t.shardTotal,"test-count":x.value,"hook-count":Y.value,"wait-count":Q.value,"span-types":N.value,live:t.live,onToggleSpan:he,onReset:e(E)},null,8,["worker-count","shard-total","test-count","hook-count","wait-count","span-types","live","onReset"]),n("div",{ref_key:"containerRef",ref:h,class:J(["relative overflow-hidden rounded-lg border border-gray-200 dark:border-gray-700 touch-pan-y",{"cursor-grab":!e(I),"cursor-grabbing":e(I)}]),style:ke({height:e(W)+"px"}),onWheel:v[1]||(v[1]=Ae((...se)=>e(c)&&e(c)(...se),["prevent"])),onPointerdown:v[2]||(v[2]=(...se)=>e(m)&&e(m)(...se)),onPointermove:v[3]||(v[3]=(...se)=>e(A)&&e(A)(...se)),onPointerup:v[4]||(v[4]=(...se)=>e($)&&e($)(...se)),onPointercancel:v[5]||(v[5]=(...se)=>e($)&&e($)(...se)),onPointerleave:v[6]||(v[6]=(...se)=>e($)&&e($)(...se))},[(s(),a("svg",{class:"overflow-visible",style:ke({transform:`translateX(${e(P)}px)`}),width:e(D),height:e(W)},[v[7]||(v[7]=n("defs",null,[n("filter",{id:"glow"},[n("feGaussianBlur",{stdDeviation:"2.5",result:"blur"}),n("feMerge",null,[n("feMergeNode",{in:"blur"}),n("feMergeNode",{in:"SourceGraphic"})])])],-1)),i(ne,{"worker-rows":e(d),"shard-groups":e(T),"tick-marks":e(_),"content-width":e(D),"shard-total":t.shardTotal},null,8,["worker-rows","shard-groups","tick-marks","content-width","shard-total"]),(s(!0),a(O,null,ie(K.value,se=>(s(),b(te,{key:se.key,item:se,x:e(L)(se),y:e(z)(se),width:e(f)(se),onSelect:v[0]||(v[0]=Te=>R("selectTestCase",Te)),onHover:F,onMove:V,onLeave:re},null,8,["item","x","y","width"]))),128))],12,Mi))],38),i(xe,{item:j.value,pos:o.value},null,8,["item","pos"])])):(s(),a("div",Ai,[i(be,{name:"i-lucide-rows-3",class:"size-8 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),v[8]||(v[8]=n("p",null,"No worker data available for this run.",-1))]))}}}),Li=Object.assign(Ui,{__name:"WorkersTimeline"}),Ei={key:0,class:"space-y-4"},Oi={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Ki={class:"flex items-center gap-2 py-1.5"},Wi={class:"font-medium"},Hi={key:0,class:"flex"},Vi={key:1,class:"flex items-center justify-center py-6 text-gray-500 gap-2"},Gi={class:"flex flex-wrap gap-2 mt-1"},Xi={class:"flex flex-wrap gap-4 text-sm"},qi={key:3,class:"text-sm text-gray-500"},Yi={class:"flex flex-wrap gap-4 text-sm"},Ji={key:0,class:"text-gray-400"},Zi={key:0,class:"text-gray-400"},Qi={key:1,class:"text-gray-400"},er={key:1,class:"text-gray-400"},tr={key:0,class:"text-gray-400"},sr={key:0,class:"text-gray-400"},nr={key:4,class:"text-center py-8 text-gray-500"},ar={key:5,class:"text-center py-8 text-gray-500"},or={key:1,class:"text-center py-10 text-gray-500"},lr=fe({__name:"RunCompare",props:{testRun:{}},setup(t){const y=t,R=Oe().params.id,C=H(null),d=H([]),T=S(()=>y.testRun?.status==="running"||y.testRun?.status==="finalizing");me(()=>y.testRun?.projectId,async _=>{if(!(!_||T.value)){try{C.value=await $fetch(`/api/projects/${_}`)}catch(c){console.error("Failed to fetch project for RunCompare",c)}try{const c=await $fetch(`/api/projects/${_}/markers`);d.value=c.markers??[]}catch{}}},{immediate:!0});const u=S(()=>{if(!P.value||!y.testRun)return[];const _=new Date(P.value.startTime).getTime(),c=new Date(y.testRun.startTime).getTime(),m=Math.min(_,c),A=Math.max(_,c),$=new Set([P.value.environment,y.testRun.environment].filter(E=>E!=null));return d.value.filter(E=>{const x=new Date(E.occurredAt).getTime();return x<=m||x>=A?!1:E.environment==null||$.has(E.environment)})}),h=S(()=>C.value?.testRuns?C.value.testRuns.filter(_=>_.id!==Number(R)).slice(0,50).map(_=>({label:`Run #${_.id} — ${$t(_.startTime,{dateOnly:!0})} (${_.status})`,value:_.id})):[]),B=S(()=>{if(!C.value?.testRuns)return null;const _=[...C.value.testRuns].sort((m,A)=>new Date(A.startTime).getTime()-new Date(m.startTime).getTime()),c=_.findIndex(m=>m.id===Number(R));return c>=0&&c<_.length-1?_[c+1].id:null}),M=H(void 0),P=H(null),I=H(!1);me(M,async _=>{if(!_?.value){P.value=null;return}I.value=!0;try{P.value=await $fetch(`/api/test-runs/${_.value}`)}catch{}finally{I.value=!1}});function D(){if(B.value){const _=h.value.find(c=>c.value===B.value);_&&(M.value=_)}}const W=S(()=>y.testRun??null),{comparisonData:L,comparisonSummary:f}=Bs(P,W),z=[{accessorKey:"title",header:ce("Test case")},{accessorKey:"statusA",header:ce("Status A")},{accessorKey:"statusB",header:ce("Status B")},{accessorKey:"durationA",header:ce("Duration A")},{accessorKey:"durationB",header:ce("Duration B")},{accessorKey:"delta",header:ce("Delta")},{accessorKey:"percentChange",header:ce("Change")}];return(_,c)=>{const m=Ds,A=js,$=Ce,E=ve,x=bt,Y=Ns,Q=we,oe=Ke,ee=ct,le=Dt;return s(),a("div",null,[t.testRun&&!T.value?(s(),a("div",Ei,[n("div",Oi,[n("div",null,[c[1]||(c[1]=n("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Run A (baseline)",-1)),i(m,{modelValue:M.value,"onUpdate:modelValue":c[0]||(c[0]=K=>M.value=K),items:h.value,placeholder:"Select a baseline run..."},null,8,["modelValue","items"])]),n("div",null,[c[2]||(c[2]=n("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Run B (this run)",-1)),n("div",Ki,[i(A,{status:t.testRun.status},null,8,["status"]),n("span",Wi,"#"+l(t.testRun.id),1)])])]),B.value?(s(),a("div",Hi,[i($,{icon:"i-lucide-arrow-left-right",size:"sm",variant:"outline",label:"Compare with previous run",onClick:D})])):p("",!0),I.value?(s(),a("div",Vi,[i(E,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),c[3]||(c[3]=n("span",null,"Loading baseline data...",-1))])):u.value.length>0?(s(),b(Y,{key:2,color:"warning",variant:"subtle",icon:"i-lucide-milestone",title:`${u.value.length} timeline marker${u.value.length>1?"s":""} between these runs`},{description:r(()=>[n("div",Gi,[(s(!0),a(O,null,ie(u.value,K=>(s(),b(x,{key:K.id,marker:K,size:"sm"},null,8,["marker"]))),128))])]),_:1},8,["title"])):P.value&&e(L).length>0?(s(),a(O,{key:3},[n("div",Xi,[c[4]||(c[4]=n("span",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mr-1"},"Status",-1)),e(f).newFailures>0?(s(),b(Q,{key:0,color:"error",variant:"soft",size:"lg"},{default:r(()=>[w(l(e(f).newFailures)+" new failure"+l(e(f).newFailures>1?"s":""),1)]),_:1})):p("",!0),e(f).recovered>0?(s(),b(Q,{key:1,color:"success",variant:"soft",size:"lg"},{default:r(()=>[w(l(e(f).recovered)+" recovered ",1)]),_:1})):p("",!0),e(f).stillFailing>0?(s(),b(Q,{key:2,color:"warning",variant:"soft",size:"lg"},{default:r(()=>[w(l(e(f).stillFailing)+" still failing ",1)]),_:1})):p("",!0),e(f).newFailures===0&&e(f).recovered===0&&e(f).stillFailing===0?(s(),a("span",qi,"No status changes")):p("",!0)]),n("div",Yi,[c[5]||(c[5]=n("span",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mr-1"},"Duration changes",-1)),e(f).regressed>0?(s(),b(Q,{key:0,color:"error",variant:"soft",size:"lg"},{default:r(()=>[w(l(e(f).regressed)+" regressed ",1)]),_:1})):p("",!0),e(f).improved>0?(s(),b(Q,{key:1,color:"success",variant:"soft",size:"lg"},{default:r(()=>[w(l(e(f).improved)+" improved ",1)]),_:1})):p("",!0),i(Q,{color:"neutral",variant:"soft",size:"lg"},{default:r(()=>[w(l(e(f).unchanged)+" unchanged ",1)]),_:1})]),i(le,{"min-width":"48rem",bleed:!1},{default:r(()=>[i(ee,{data:e(L),columns:z,ui:{base:"table-fixed border-separate border-spacing-0 min-w-[48rem]",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":r(({row:K})=>[K.original.statusA?(s(),b(Q,{key:1,color:("getStatusColor"in _?_.getStatusColor:e(nt))(K.original.statusA),variant:"subtle",class:"capitalize"},{default:r(()=>[w(l(K.original.statusA),1)]),_:2},1032,["color"])):(s(),a("span",Ji,"—"))]),"statusB-cell":r(({row:K})=>[K.original.statusB?(s(),b(Q,{key:1,color:("getStatusColor"in _?_.getStatusColor:e(nt))(K.original.statusB),variant:"subtle",class:"capitalize"},{default:r(()=>[w(l(K.original.statusB),1)]),_:2},1032,["color"])):(s(),a("span",Zi,"—"))]),"durationA-cell":r(({row:K})=>[K.original.durationA!==null?(s(),b(oe,{key:0,ms:K.original.durationA},null,8,["ms"])):(s(),a("span",Qi,"—"))]),"durationB-cell":r(({row:K})=>[K.original.durationB!==null?(s(),b(oe,{key:0,ms:K.original.durationB},null,8,["ms"])):(s(),a("span",er,"—"))]),"delta-cell":r(({row:K})=>[K.original.delta===null?(s(),a("span",tr,"—")):(s(),a("span",{key:1,class:J(K.original.delta>0?"text-red-600":K.original.delta<0?"text-green-600":"text-gray-500")},[w(l(K.original.delta>0?"+":""),1),i(oe,{ms:K.original.delta,"unit-class":"opacity-60"},null,8,["ms"])],2))]),"percentChange-cell":r(({row:K})=>[K.original.percentChange===null?(s(),a("span",sr,"—")):(s(),a("span",{key:1,class:J(K.original.percentChange>10?"text-red-600 font-medium":K.original.percentChange<-10?"text-green-600 font-medium":"text-gray-500")},l(K.original.percentChange>0?"+":"")+l(K.original.percentChange)+"% ",3))]),_:1},8,["data"])]),_:1})],64)):M.value&&!I.value?(s(),a("div",nr,[i(E,{name:"i-lucide-git-compare-arrows",class:"size-8 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),c[6]||(c[6]=n("p",null,"No comparison data available.",-1))])):(s(),a("div",ar,[i(E,{name:"i-lucide-arrow-left-right",class:"size-8 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),c[7]||(c[7]=n("p",null,"Select a baseline run to compare.",-1))]))])):T.value?(s(),a("div",or,[i(E,{name:"i-lucide-git-compare-arrows",class:"size-8 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),c[8]||(c[8]=n("p",null,"Comparison is available after the run finishes.",-1))])):p("",!0)])}}}),ir=Object.assign(lr,{__name:"RunCompare"}),rr={class:"flex flex-col overflow-hidden"},ur={key:0,class:"flex-1 flex items-center justify-center text-gray-500 gap-2"},cr={class:"text-xs font-mono break-all"},dr={key:0,class:"text-gray-400"},mr={key:1,class:"text-red-600 font-medium"},fr=fe({__name:"SlowEndpoints",props:{refreshKey:{}},emits:["endpointsCount"],async setup(t,{emit:y}){let k,R;const d=Oe().params.id,T=t,u=y,{data:h,pending:B,refresh:M}=([k,R]=Ue(()=>Le(`/api/test-runs/${d}/network-requests`,{lazy:!0,server:!1},"$DE3r8oSbIq")),k=await k,R(),k);me(h,I=>{u("endpointsCount",I?.length??0)}),me(()=>T.refreshKey,(I,D)=>{I!==D&&I!==void 0&&M()});const P=[{accessorKey:"method",header:ce("Method")},{accessorKey:"route",header:ce("Route")},{accessorKey:"count",header:ce("Calls")},{accessorKey:"avgDuration",header:ce("Avg")},{accessorKey:"p90Duration",header:ce("P90")},{accessorKey:"maxDuration",header:ce("Max")},{accessorKey:"errorRate",header:ce("Errors")}];return(I,D)=>{const W=ve,L=we,f=Ke,z=ct,_=Ms;return s(),a("div",rr,[e(B)?(s(),a("div",ur,[i(W,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),D[0]||(D[0]=n("span",null,"Loading network data...",-1))])):e(h)&&e(h).length>0?(s(),b(z,{key:1,sticky:"",data:e(h),columns:P,class:"flex-1 min-h-0",ui:{base:"table-fixed border-separate border-spacing-0 min-w-[44rem]",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"}},{"method-cell":r(({row:c})=>[i(L,{color:c.original.method==="GET"?"info":c.original.method==="POST"?"success":c.original.method==="PUT"||c.original.method==="PATCH"?"warning":c.original.method==="DELETE"?"error":"neutral",variant:"soft",class:"font-mono text-xs"},{default:r(()=>[w(l(c.original.method),1)]),_:2},1032,["color"])]),"route-cell":r(({row:c})=>[n("code",cr,l(c.original.route),1)]),"avgDuration-cell":r(({row:c})=>[n("span",{class:J(c.original.avgDuration>1e3?"text-red-600 font-medium":c.original.avgDuration>500?"text-orange-500 font-medium":"")},[i(f,{ms:c.original.avgDuration,"unit-class":"opacity-60"},null,8,["ms"])],2)]),"p90Duration-cell":r(({row:c})=>[n("span",{class:J(c.original.p90Duration>2e3?"text-red-600 font-medium":c.original.p90Duration>1e3?"text-orange-500":"")},[i(f,{ms:c.original.p90Duration,"unit-class":"opacity-60"},null,8,["ms"])],2)]),"errorRate-cell":r(({row:c})=>[c.original.errorRate===0?(s(),a("span",dr,"0%")):(s(),a("span",mr,l(c.original.errorRate)+"%",1))]),_:1},8,["data"])):(s(),b(_,{key:2,class:"flex-1",icon:"i-lucide-wifi-off",title:"No network requests captured",text:"Slow endpoints need the Piwi capture fixtures — extend your Playwright test with piwiFixtures and request timing rides along with every run.",doc:"capture-fixtures"}))])}}}),pr=Object.assign(fr,{__name:"SlowEndpoints"}),gr={class:"inline-flex items-center justify-center w-5 h-5 rounded-full bg-blue-500/10 hover:bg-blue-500/20 transition-colors ml-1"},xr={key:0,class:"flex items-center gap-2 mb-3 shrink-0"},bu=fe({__name:"[id]",async setup(t){let y,k;const R=Oe(),C=is(),d=R.params.id,T=!!ot().public.demoMode,{data:u,refresh:h}=([y,k]=Ue(()=>Le(`/api/test-runs/${d}`,"$D01RBpMFGT")),y=await y,k(),y),B=u.value?.projectId,{data:M,refresh:P}=B?([y,k]=Ue(()=>Le(`/api/projects/${B}/latest-run`,{key:`latest-run-${B}`},"$e4OLHgXNMR")),y=await y,k(),y):{data:H(null),refresh:async()=>{}};As(P);const I=S(()=>M.value?.id??u.value?.project?.latestRunId??null),D=S(()=>M.value?.status??u.value?.project?.latestRunStatus??null),W=S(()=>D.value==="running"||D.value==="finalizing");rs(S(()=>({title:`Test run #${d}${u.value?.project?` — ${u.value.project.name}`:""} — Piwi Dashboard`})));const L=ht(),f=H(!1),z=H(!1),_=S(()=>u.value?.status==="running"||u.value?.status==="finalizing"),c=H(!1),m=H([]),A=new Map,$=H(null);let E=null;const x=H([]);me([_,u],()=>{_.value&&m.value.length>0?x.value=[...m.value]:u.value?.testCases?x.value=u.value.testCases:x.value=[]},{immediate:!0});function Y(U){for(const G of U){const ue=`${G.title}@@${G.location}@@${JSON.stringify(G.browser)}`;A.has(ue)||(A.set(ue,!0),m.value=[...m.value,G])}x.value=[...m.value]}let Q=[],oe=null;function ee(){if(Q.length===0)return;const U=Q;Q=[];for(const G of U){const ue=G.data;if(G.type==="init")$.value={totalTests:ue.totalTests,passedTests:ue.passedTests,failedTests:ue.failedTests,skippedTests:ue.skippedTests};else if(G.type==="test-begin"){const q=ue;if(q.stepCategory)continue;const ze=`${q.title}@@${q.location}@@${JSON.stringify(q.browser)}`;A.has(ze)||(A.set(ze,!0),m.value=[...m.value,{id:m.value.length+1,title:q.title,filePath:q.filePath,suitePath:q.suitePath??void 0,status:"running",location:q.location,workerIndex:q.workerIndex??null,startedAt:q.startedAt??Date.now(),browser:q.browser??null}],x.value=[...m.value])}else if(G.type==="test-completed"){const q=ue;if(q.stepCategory)continue;const ze=`${q.title}@@${q.location}@@${JSON.stringify(q.browser)}`;if(A.has(ze)){const Be=m.value.findIndex(ye=>`${ye.title}@@${ye.location}@@${JSON.stringify(ye.browser)}`===ze);if(Be>=0){const ye=m.value[Be],Me=[...m.value];Me[Be]={...ye,filePath:q.filePath??ye.filePath,suitePath:q.suitePath??ye.suitePath,status:q.status,duration:q.duration,error:q.error,stepEvents:q.stepEvents??ye.stepEvents,wastedTimeMs:q.wastedTimeMs??ye.wastedTimeMs,workerIndex:q.workerIndex??ye.workerIndex,startedAt:q.startedAt?q.startedAt:ye.startedAt,browser:q.browser??ye.browser},m.value=Me,x.value=[...Me]}}else A.set(ze,!0),m.value=[...m.value,{id:m.value.length+1,title:q.title,filePath:q.filePath,suitePath:q.suitePath??void 0,status:q.status,duration:q.duration,location:q.location,error:q.error,stepEvents:q.stepEvents??null,wastedTimeMs:q.wastedTimeMs??null,workerIndex:q.workerIndex??null,startedAt:q.startedAt??void 0,browser:q.browser??null}],x.value=[...m.value]}else G.type==="run-progress"?$.value=ue:G.type==="run-finalizing"?(c.value=!0,$.value=ue):G.type==="run-finished"&&(c.value=!1,o(),h(),_e.value++,le())}}function le(U=0){T||U>=5||setTimeout(async()=>{await h(),le(U+1)},1500*(U+1))}function K(U){Q.push(U),oe&&clearTimeout(oe),oe=setTimeout(ee,200)}let N=null;function he(){N||(u.value?.testCases?.length&&Y(u.value.testCases),N=Us(U=>{U.scope==="run"&&U.runId===Number(d)?K(U.event):U.scope==="global"&&U.event.runId===Number(d)&&U.event.type==="run-started"&&h()}))}function j(){if(T){he();return}E||_.value&&(u.value?.testCases?.length&&Y(u.value.testCases),E=new EventSource(`/api/test-runs/${d}/stream`),E.onmessage=U=>{try{K(JSON.parse(U.data))}catch{}},E.onerror=()=>{})}function o(){E&&(E.close(),E=null),N&&(N(),N=null)}const F=S(()=>_.value||T&&u.value?.status==="initialising");me(F,U=>{U?j():o()},{immediate:!0}),vt(()=>{o()});let V=null;const re=H([]);me(x,U=>{V===null&&(V=requestAnimationFrame(()=>{re.value=U,V=null}))},{immediate:!0});const Z=S(()=>_.value&&$.value?$.value:u.value?{totalTests:u.value.totalTests,passedTests:u.value.passedTests,failedTests:u.value.failedTests,skippedTests:u.value.skippedTests}:null);async function v(){f.value=!1,z.value=!0;try{await $fetch(`/api/test-runs/${d}`,{method:"DELETE"}),L.add({title:"Test run deleted",color:"success"}),await Ge(`/projects/${u.value?.project?.id}`)}catch(U){const G=U&&typeof U=="object"&&"data"in U?U.data?.message:void 0;L.add({title:"Delete failed",description:G||"An error occurred",color:"error"})}finally{z.value=!1}}const X=H(!1),ne=H(""),te=H([]),xe=H("all"),be=S(()=>te.value.length===1?te.value[0]:"all");function se(U){te.value=!U||U==="all"?[]:[U]}const Te=S(()=>u.value?.reports||[]),Re=S(()=>{const U=x.value;return U?U.reduce((G,ue)=>G+(ue.wastedTimeMs??0),0):0}),pe=H("test-cases"),ge=H(null),_e=H(0),Se=H(0);function g(){ge.value=null}const $e=S(()=>u.value&&u.value.failedTests>0),Ne=S(()=>{if(!u.value?.testCases)return 0;const U=new Set;for(const G of u.value.testCases)G.failureClusterId!=null&&U.add(G.failureClusterId);return U.size}),ae=S(()=>{const U=_.value?x.value:u.value?.testCases;if(!U||U.length===0)return 0;const G=new Set;for(const ue of U)ue.workerIndex!=null&&ue.workerIndex>=0&&G.add(ue.workerIndex);return G.size}),Je=S(()=>[{label:`Test cases (${x.value.length})`,icon:"i-lucide-beaker",value:"test-cases",slot:"test-cases"},{label:"Insights",icon:"i-lucide-sparkles",value:"insights",slot:"insights"},{label:$e.value?`Failure groups (${Ne.value})`:"Failure groups",icon:"i-lucide-layers",value:"failure-groups",slot:"failure-groups",disabled:!$e.value},{label:"Regression",icon:"i-lucide-git-pull-request-arrow",value:"regression",slot:"regression",disabled:!$e.value},{label:`Timeline${ae.value>0?` (${ae.value})`:""}`,icon:"i-lucide-timeline",value:"workers",slot:"workers"},{label:"Compare",icon:"i-lucide-git-compare-arrows",value:"compare",slot:"compare"},{label:`Slow endpoints${Se.value>0?` (${Se.value})`:""}`,icon:"i-lucide-network",value:"endpoints",slot:"endpoints"}]),At={"test-cases":"overflow-hidden flex flex-col",endpoints:"overflow-hidden flex flex-col"},dt=S(()=>Je.value.filter(U=>!U.disabled).map(U=>U.value));typeof R.query.tab=="string"&&dt.value.includes(R.query.tab)&&(pe.value=R.query.tab),me(dt,U=>{U.includes(pe.value)||(pe.value="test-cases")}),me(pe,U=>{R.query.tab!==U&&C.replace({query:{...R.query,tab:U}})});const mt=H(null);function Ut(U){pe.value="test-cases",je(()=>{mt.value?.scrollToCase(U)})}function Lt(U){ge.value=U,pe.value="test-cases"}return(U,G)=>{const ue=ts,q=Ee,ze=ve,Be=kt,ye=us,Me=cs,Et=ms,Ot=Yn,Kt=we,Ze=Ce,Wt=Ga,Ht=Ho,Vt=gl,Gt=Wl,Xt=Li,qt=ir,Yt=pr,Jt=ys,Zt=ds,Qt=jt,es=lt;return s(),a(O,null,[i(Zt,{id:"test-run-detail"},{header:r(()=>[i(Et,null,{leading:r(()=>[i(ue),i(ye,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},...e(u)?.project?.id?[{label:e(u).project.label||e(u).project.name||"Project",to:`/projects/${e(u).project.id}`,slot:"project"}]:[{label:"Project"}],{label:`Run #${e(d)}`+(e(u)?.label?` — ${e(u).label}`:"")}]},{project:r(({item:de})=>[i(q,{to:de?.to,class:"text-sm font-medium text-[var(--ui-text-muted)] hover:text-[var(--ui-text)] transition-colors"},{default:r(()=>[w(l(de?.label),1)]),_:2},1032,["to"]),I.value&&I.value!==Number(e(d))?(s(),b(Be,{key:0,text:W.value?"Go to running run":"Go to latest run"},{default:r(()=>[i(q,{to:`/test-runs/${I.value}`},{default:r(()=>[n("span",gr,[i(ze,{name:"i-lucide-circle-play",class:J(["w-3.5 h-3.5 text-blue-500",{"animate-pulse":W.value}])},null,8,["class"])])]),_:1},8,["to"])]),_:1},8,["text"])):p("",!0)]),_:1},8,["items"])]),right:r(()=>[i(Me,{actions:[{label:"Refresh",icon:"i-lucide-refresh-cw",onClick:()=>e(h)()},{label:"Delete",icon:"i-lucide-trash-2",color:"error",variant:"soft",loading:e(z),onClick:()=>f.value=!0}]},null,8,["actions"])]),_:1})]),body:r(()=>[i(Jt,{modelValue:e(pe),"onUpdate:modelValue":G[5]||(G[5]=de=>Fe(pe)?pe.value=de:null),"tab-items":Je.value,"tab-panel-class":At},{summary:r(()=>[e(u)?(s(),b(Ot,{key:0,"test-run":e(u),"display-progress":Z.value,"all-reports":Te.value,"show-custom-data":e(X),finalizing:e(c),"active-filter":be.value,"total-wasted-time":Re.value,"onUpdate:showCustomData":G[0]||(G[0]=de=>X.value=de),onFilterStatus:se,onLabelUpdated:e(h)},null,8,["test-run","display-progress","all-reports","show-custom-data","finalizing","active-filter","total-wasted-time","onLabelUpdated"])):p("",!0)]),"tab-test-cases":r(()=>[e(ge)!=null?(s(),a("div",xr,[i(Kt,{color:"info",variant:"subtle",size:"sm"},{default:r(()=>[...G[8]||(G[8]=[w(" Filtered by failure group ",-1)])]),_:1}),i(Ze,{size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-x",label:"Clear filter",onClick:g})])):p("",!0),i(Wt,{ref_key:"testCasesListRef",ref:mt,search:e(ne),"onUpdate:search":G[1]||(G[1]=de=>Fe(ne)?ne.value=de:null),"active-statuses":e(te),"onUpdate:activeStatuses":G[2]||(G[2]=de=>Fe(te)?te.value=de:null),"browser-filter":e(xe),"onUpdate:browserFilter":G[3]||(G[3]=de=>Fe(xe)?xe.value=de:null),"test-cases":e(x),suites:e(u)?.suites??[],"is-live":_.value,"failure-cluster-filter":e(ge),"project-key":e(u)?.projectId,"project-name":e(u)?.project?.name,class:"flex-1 min-h-0"},null,8,["search","active-statuses","browser-filter","test-cases","suites","is-live","failure-cluster-filter","project-key","project-name"])]),"tab-insights":r(()=>[i(Ht,{"test-run-id":Number(e(d)),"run-status":e(u)?.status??"","refresh-key":e(_e),class:"flex-1 min-h-0 p-4"},null,8,["test-run-id","run-status","refresh-key"])]),"tab-failure-groups":r(()=>[i(Vt,{"refresh-key":e(_e),onSelectCluster:Lt},null,8,["refresh-key"])]),"tab-regression":r(()=>[i(Gt,{"refresh-key":e(_e)},null,8,["refresh-key"])]),"tab-workers":r(()=>[i(Xt,{"test-cases":e(re),"setup-steps":e(u)?.setupSteps??null,"shard-total":e(u)?.shardTotal??null,live:_.value,"wasted-patterns":e(u)?.wastedWaitPatterns??null,onSelectTestCase:Ut},null,8,["test-cases","setup-steps","shard-total","live","wasted-patterns"])]),"tab-compare":r(()=>[i(qt,{"test-run":e(u)},null,8,["test-run"])]),"tab-endpoints":r(()=>[i(Yt,{"refresh-key":e(_e),class:"flex-1 min-h-0",onEndpointsCount:G[4]||(G[4]=de=>Se.value=de)},null,8,["refresh-key"])]),_:1},8,["modelValue","tab-items"])]),_:1}),i(es,null,{default:r(()=>[i(Qt,{open:e(f),title:"Delete test run","onUpdate:open":G[7]||(G[7]=de=>f.value=de)},{body:r(()=>[n("p",null,[G[9]||(G[9]=w(" Are you sure you want to delete ",-1)),n("strong",null,"Test Run #"+l(e(u)?.id),1),G[10]||(G[10]=w("? This will also remove all associated test results, reports, and traces. This action cannot be undone. ",-1))])]),footer:r(()=>[i(Ze,{color:"neutral",variant:"ghost",label:"Cancel",onClick:G[6]||(G[6]=de=>f.value=!1)}),i(Ze,{color:"error",label:"Delete",icon:"i-lucide-trash-2",loading:e(z),onClick:v},null,8,["loading"])]),_:1},8,["open"])]),_:1})],64)}}});export{bu as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as C,b as S,o as r,f as k,g as s,i as y,
|
|
1
|
+
import{d as C,b as S,o as r,f as k,g as s,i as y,R as I,c as g,F as j,y as U,H as p,j as o,E as F,v,m as h,I as w}from"./DCFbQvIN.js";import{_ as $}from"./zv8WdMx0.js";import{_ as A}from"./B1RmmOsM.js";import{_ as B}from"./BpM6ZPIG.js";import{_ as E}from"./B-zdP-D4.js";import{_ as H}from"./RAdNGxcF.js";import{E as L}from"./BAKUqW95.js";const P={key:0,class:"flex flex-wrap gap-1 py-0.5"},N={key:1,class:"text-[var(--ui-text-muted)]"},O=C({__name:"TagsSelect",props:{modelValue:{},allTags:{}},emits:["update:modelValue","tagCreated"],setup(t,{emit:V}){const u=t,d=V,b=S();async function _(f){const n=f.trim();if(!n)return;const i=u.allTags.find(a=>a.text.toLowerCase()===n.toLowerCase());if(i){u.modelValue.some(a=>a.id===i.id)||d("update:modelValue",[...u.modelValue,i]);return}try{const a=await $fetch("/api/tags",{method:"POST",body:{text:n,color:L()}});d("tagCreated",a.tag),d("update:modelValue",[...u.modelValue,a.tag])}catch(a){const e=a&&typeof a=="object"&&"data"in a?a.data?.message:void 0;b.add({title:"Failed to create tag",description:e||"An error occurred",color:"error"})}}return(f,n)=>{const i=E,a=H;return r(),k(a,{"model-value":t.modelValue,items:t.allTags,multiple:"","create-item":"always","label-key":"text",by:"id",placeholder:"Select or create tags…",class:"w-full","onUpdate:modelValue":n[0]||(n[0]=e=>d("update:modelValue",e)),onCreate:_},{default:s(({modelValue:e})=>[e.length?(r(),g("div",P,[(r(!0),g(j,null,U(e,m=>(r(),k(i,{key:m.id,text:m.text,color:m.color},null,8,["text","color"]))),128))])):(r(),g("span",N,"Select or create tags…"))]),"item-leading":s(({item:e})=>[y("span",{class:"inline-block size-2 rounded-full shrink-0",style:I({backgroundColor:e.color})},null,4)]),_:1},8,["model-value","items"])}}}),D=Object.assign(O,{__name:"TagsSelect"}),q={class:"space-y-5"},z={class:"inline-flex items-center gap-1"},G={class:"inline-flex items-center gap-1"},R=C({__name:"ProjectFormFields",props:w({mode:{},allTags:{},hasToken:{type:Boolean,default:!1}},{name:{default:""},nameModifiers:{},label:{default:""},labelModifiers:{},description:{default:""},descriptionModifiers:{},diagnosisInstructions:{default:""},diagnosisInstructionsModifiers:{},scmToken:{default:""},scmTokenModifiers:{},tags:{default:()=>[]},tagsModifiers:{}}),emits:w(["tag-created"],["update:name","update:label","update:description","update:diagnosisInstructions","update:scmToken","update:tags"]),setup(t,{emit:V}){const u=V,d=p(t,"name"),b=p(t,"label"),_=p(t,"description"),f=p(t,"diagnosisInstructions"),n=p(t,"scmToken"),i=p(t,"tags");return(a,e)=>{const m=F,c=$,x=A,T=B,M=D;return r(),g("div",q,[t.mode==="create"?(r(),k(c,{key:0,label:"Project name",name:"name",required:"",description:"A unique identifier used to match test results from the reporter."},{default:s(()=>[o(m,{modelValue:d.value,"onUpdate:modelValue":e[0]||(e[0]=l=>d.value=l),placeholder:"e.g. my-app",class:"w-full"},null,8,["modelValue"])]),_:1})):v("",!0),o(c,{label:"Display label",name:"label",description:"A friendly name shown in the UI (defaults to project name if not set)."},{default:s(()=>[o(m,{modelValue:b.value,"onUpdate:modelValue":e[1]||(e[1]=l=>b.value=l),placeholder:"e.g. My Application",class:"w-full"},null,8,["modelValue"])]),_:1}),o(c,{label:"Description",name:"description",description:"Optional description of this project."},{default:s(()=>[o(x,{modelValue:_.value,"onUpdate:modelValue":e[2]||(e[2]=l=>_.value=l),placeholder:"Enter project description",rows:3,class:"w-full"},null,8,["modelValue"])]),_:1}),t.mode==="edit"?(r(),g(j,{key:1},[o(c,{name:"diagnosisInstructions",description:"Combined with the global instructions from Settings → AI."},{label:s(()=>[y("span",z,[e[7]||(e[7]=h(" AI diagnosis instructions ",-1)),o(T,{topic:"project.ai-instructions"})])]),default:s(()=>[o(x,{modelValue:f.value,"onUpdate:modelValue":e[3]||(e[3]=l=>f.value=l),placeholder:"e.g. This project tests the payment checkout flow. The backend uses Stripe for payments and the payment API is at /api/v2/payments. Database errors are usually caused by connection pool exhaustion under load.",rows:5,class:"w-full font-mono text-sm"},null,8,["modelValue"])]),_:1}),o(c,{name:"scmToken",description:t.hasToken?"Leave empty to keep the stored token, enter a new value to replace it, or save empty to remove it":"For GitHub, GitLab, or Bitbucket. Falls back to the global SCM token if not set."},{label:s(()=>[y("span",G,[e[8]||(e[8]=h("SCM token ",-1)),o(T,{topic:"project.scm-token"})])]),default:s(()=>[o(m,{modelValue:n.value,"onUpdate:modelValue":e[4]||(e[4]=l=>n.value=l),type:"password",placeholder:t.hasToken?"•••••••• (unchanged)":"ghp_..., glpat-..., or bitbucket token",class:"w-full font-mono"},null,8,["modelValue","placeholder"])]),_:1},8,["description"])],64)):v("",!0),o(c,{label:"Tags",name:"tags",description:"Select existing tags or type a new name and press Enter to create one."},{default:s(()=>[o(M,{modelValue:i.value,"onUpdate:modelValue":e[5]||(e[5]=l=>i.value=l),"all-tags":t.allTags,class:"w-full",onTagCreated:e[6]||(e[6]=l=>u("tag-created"))},null,8,["modelValue","all-tags"])]),_:1})])}}}),ee=Object.assign(R,{__name:"ProjectFormFields"});export{ee as _};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as o,o as s,f as e,g as c,p as u,v as r,m,t as l,k as g,s as d}from"./
|
|
1
|
+
import{d as o,o as s,f as e,g as c,p as u,v as r,m,t as l,k as g,s as d}from"./DCFbQvIN.js";import{j as f}from"./BAKUqW95.js";const _=o({__name:"RunStatusBadge",props:{status:{},size:{}},setup(t){return(a,z)=>{const n=u,i=d;return s(),e(i,{color:("getStatusColor"in a?a.getStatusColor:g(f))(t.status),size:t.size,variant:"subtle",class:"capitalize gap-1 items-center"},{default:c(()=>[t.status==="running"||t.status==="initialising"||t.status==="finalizing"?(s(),e(n,{key:0,name:"i-lucide-loader-circle",class:"size-3 animate-spin shrink-0"})):r("",!0),m(" "+l(t.status),1)]),_:1},8,["color","size"])}}}),S=Object.assign(_,{__name:"RunStatusBadge"});export{S as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a3 as se,a5 as ie,aP as oe,aQ as ue,an as $,aR as H,aS as Q,B as X,L as le,ad as fe,r as j,M as T,h as x,aT as k,o as ce,f as de,g as me,V as pe,C as ye,q as ve,k as b,ag as he,aU as Ee,a8 as ge,N as w,aV as be,aW as we,aX as Se,aY as Fe}from"./DCFbQvIN.js";function Ie(n){return"schema"in n&&typeof n.coercer=="function"&&typeof n.validator=="function"&&typeof n.refiner=="function"}function qe(n){return"~standard"in n}async function je(n,i){const f=await i["~standard"].validate(n);return f.issues?{errors:f.issues?.map(u=>({name:u.path?.map(o=>typeof o=="object"?o.key:o).join(".")||"",message:u.message}))||[],result:null}:{errors:null,result:f.value}}async function xe(n,i){const[f,u]=i.validate(n);return f?{errors:f.failures().map(r=>({message:r.message,name:r.path.join(".")})),result:null}:{errors:null,result:u}}function Be(n,i){if(qe(i))return je(n,i);if(Ie(i))return xe(n,i);throw new Error("Form validation failed: Unsupported form schema")}function Ne(n,i){return i?i.split(".").reduce((u,o)=>u?.[o],n):n}function Oe(n,i,f){if(!i)return Object.assign(n,f);if(!n)return n;const u=i.split(".");let o=n;for(let y=0;y<u.length-1;y++){const v=u[y];(o[v]===void 0||o[v]===null)&&(y+1<u.length&&!Number.isNaN(Number(u[y+1]))?o[v]=[]:o[v]={}),o=o[v]}const r=u[u.length-1];return o[r]=f,n}class B extends Error{formId;errors;constructor(i,f){super("Form validation exception"),this.formId=i,this.errors=f,Object.setPrototypeOf(this,B.prototype)}}const Re={base:""},Ae={__name:"UForm",props:{id:{type:[String,Number],required:!1},schema:{type:null,required:!1},state:{type:null,required:!1},validate:{type:Function,required:!1},validateOn:{type:Array,required:!1,default(){return["input","blur","change"]}},disabled:{type:Boolean,required:!1},name:{type:String,required:!1},validateOnInputDelay:{type:Number,required:!1,default:300},transform:{type:null,required:!1,default:()=>!0},nested:{type:Boolean,required:!1},loadingAuto:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1},onSubmit:{type:Function,required:!1}},emits:["submit","error"],setup(n,{expose:i,emit:f}){const u=n,o=f,r=se("form",u),y=ie(),v=x(()=>ge({extend:Re,...y.ui?.form||{}})),S=r.id??oe(),A=ue("formRef"),_=Ee(`form-${S}`),E=r.nested===!0&&$(H,void 0),C=r.nested===!0?$(Q,void 0):void 0,F=x(()=>C?.value?r.name?Ne(C.value,r.name):C.value:r.state);w(H,_),w(Q,F);const I=j(new Map);X(async()=>{E&&(await le(),E.emit({type:"attach",validate:q,formId:S,name:r.name,api:z}))}),fe(()=>{_.reset(),E&&E.emit({type:"detach",formId:S})}),X(async()=>{_.on(async e=>{e.type==="attach"?I.value.set(e.formId,{validate:e.validate,name:e.name,api:e.api}):e.type==="detach"?I.value.delete(e.formId):r.validateOn?.includes(e.type)&&!h.value&&(e.type!=="input"?await q({name:e.name,silent:!0,nested:!1}):(e.eager||K.has(e.name))&&await q({name:e.name,silent:!0,nested:!1})),e.type==="blur"&&K.add(e.name),(e.type==="change"||e.type==="input"||e.type==="blur"||e.type==="focus")&&M.add(e.name),(e.type==="change"||e.type==="input")&&O.add(e.name)})});const l=j([]);w(be,l);const N=j({});w(we,N);const O=T(new Set),M=T(new Set),K=T(new Set);function W(e){return e.map(t=>({...t,id:t?.name?N.value[t.name]?.id:void 0}))}const R=j(null);async function Y(){let e=r.validate?await r.validate(F.value)??[]:[];if(r.schema){const{errors:t,result:a}=await Be(F.value,r.schema);t?e=e.concat(t):R.value=a}return W(e)}async function q(e={silent:!1,nested:!1,transform:!1}){const t=e.name&&!Array.isArray(e.name)?[e.name]:e.name;let a=[],s=[];if(!t&&e.nested){const p=Array.from(I.value.values()).map(m=>G(m,e)),d=await Promise.all(p);s=d.filter(m=>m.error).flatMap(m=>m.error.errors.map(ne=>J(ne,m.name))),a=d.filter(m=>m.output!==void 0)}const g=[...await Y(),...s];if(t?l.value=ae(g,t):l.value=g,l.value?.length){if(e.silent)return!1;throw new B(S,l.value)}return e.transform?(a.forEach(p=>{p.name?Oe(R.value,p.name,p.output):Object.assign(R.value,p.output)}),R.value??F.value):F.value}const h=j(!1);w(Se,k(h));async function D(e){h.value=!!r.loadingAuto;const t=e;try{t.data=await q({nested:!0,transform:r.transform}),await r.onSubmit?.(t),O.clear()}catch(a){if(!(a instanceof B))throw a;const s={...t,errors:a.errors};o("error",s)}finally{h.value=!1}}const L=x(()=>r.disabled||h.value);w(Fe,x(()=>({disabled:L.value,validateOnInputDelay:r.validateOnInputDelay})));async function G(e,t){try{const a=await e.validate({...t,silent:!1});return{name:e.name,output:a}}catch(a){if(!(a instanceof B))throw a;return{name:e.name,error:a}}}function J(e,t){return!t||!e.name?e:{...e,name:t+"."+e.name}}function Z(e,t){const a=t+".",s=e?.name?.startsWith(a)?e.name.substring(a.length):e.name;return{...e,name:s}}function ee(e,t){return t?e.filter(a=>a?.name?.startsWith(t+".")).map(a=>Z(a,t)):e}function U(e){return e.api.getErrors().map(t=>e.name?{...t,name:e.name+"."+t.name}:t)}function P(e,t){return!e||!t?!0:e instanceof RegExp?e.test(t):t===e||typeof e=="string"&&e.startsWith(t+".")}function te(e,t){if(!e||e instanceof RegExp)return e;if(t!==e)return typeof e=="string"&&e.startsWith(t+".")?e.substring(t.length+1):e}function ae(e,t){const a=new Set(t),s=t.map(d=>N.value?.[d]?.pattern).filter(Boolean),c=d=>d.name?a.has(d.name)?!0:s.some(m=>m.test(d.name)):!1,g=l.value.filter(d=>!c(d)),p=e.filter(c);return[...g,...p]}function re(e,t){return e.filter(a=>t instanceof RegExp?!(a.name&&t.test(a.name)):!a.name||a.name!==t)}function V(e){return!e.name||!!N.value[e.name]}const z={validate:q,errors:l,setErrors(e,t){const a=W(e.filter(V)),s=[];for(const c of I.value.values())if(P(t,c.name)){const g=ee(e,c.name);c.api.setErrors(g,te(t,c.name||"")),s.push(...U(c))}if(t){const c=re(l.value,t);l.value=[...c,...a,...s]}else l.value=[...a,...s]},async submit(){A.value instanceof HTMLFormElement&&A.value.reportValidity()===!1||await D(new Event("submit"))},getErrors(e){return e?l.value.filter(t=>e instanceof RegExp?t.name&&e.test(t.name):t.name===e):l.value},clear(e){const t=e?l.value.filter(s=>V(s)&&(e instanceof RegExp?!(s.name&&e.test(s.name)):s.name!==e)):[],a=[];for(const s of I.value.values())P(e,s.name)&&s.api.clear(),a.push(...U(s));l.value=[...t,...a]},disabled:L,loading:h,dirty:x(()=>!!O.size),dirtyFields:k(O),blurredFields:k(K),touchedFields:k(M)};return i(z),(e,t)=>(ce(),de(he(b(E)?"div":"form"),{id:b(S),ref_key:"formRef",ref:A,name:b(E)?void 0:b(r).name,method:"post",class:ve(v.value({class:[b(r).ui?.base,b(r).class]})),onSubmit:ye(D,["prevent"])},{default:me(()=>[pe(e.$slots,"default",{errors:l.value,loading:h.value})]),_:3},40,["id","name","class"]))}};export{Ae as _};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a2 as
|
|
1
|
+
import{a2 as j,a3 as D,a5 as C,b6 as B,o as i,c as k,j as w,g as z,V as t,a0 as c,a1 as g,k as e,f as h,W as S,v as f,i as m,q as n,p as O,m as R,t as V,X as M,F as x,h as N,a8 as T,aP as A,b7 as F}from"./DCFbQvIN.js";import{a as P,_ as K,b as U,c as E}from"./C2hNxjjz.js";const I={slots:{root:"h-(--ui-header-height) shrink-0 flex items-center justify-between border-b border-default px-4 sm:px-6 gap-1.5",left:"flex items-center gap-1.5 min-w-0",icon:"shrink-0 size-5 self-center me-1.5",title:"flex items-center gap-1.5 font-semibold text-highlighted truncate",center:"hidden lg:flex",right:"flex items-center shrink-0 gap-1.5",toggle:""},variants:{toggleSide:{left:{toggle:""},right:{toggle:""}}}},L=Object.assign({inheritAttrs:!1},{__name:"UDashboardNavbar",props:{as:{type:null,required:!1},icon:{type:null,required:!1},title:{type:String,required:!1},toggle:{type:[Boolean,Object],required:!1,default:!0},toggleSide:{type:String,required:!1,default:"left"},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(b){const q=b,r=j(),s=D("dashboardNavbar",q),p=C(),o=P({}),[y,u]=B(),a=N(()=>T({extend:I,...p.ui?.dashboardNavbar||{}})());return(l,v)=>(i(),k(x,null,[w(e(y),null,{default:z(()=>[t(l.$slots,"toggle",c(g({...e(o),ui:a.value})),()=>[e(s).toggle?(i(),h(K,S({key:0},typeof e(s).toggle=="object"?e(s).toggle:{},{side:e(s).toggleSide,"data-slot":"toggle",class:a.value.toggle({class:e(s).ui?.toggle,toggleSide:e(s).toggleSide})}),null,16,["side","class"])):f("",!0)])]),_:3}),w(e(M),S({as:e(s).as,"data-slot":"root"},l.$attrs,{class:a.value.root({class:[e(s).ui?.root,e(s).class]})}),{default:z(()=>[m("div",{"data-slot":"left",class:n(a.value.left({class:e(s).ui?.left}))},[e(s).toggleSide==="left"?(i(),h(e(u),{key:0})):f("",!0),t(l.$slots,"left",c(g(e(o))),()=>[t(l.$slots,"leading",c(g({...e(o),ui:a.value})),()=>[e(s).icon?(i(),h(O,{key:0,name:e(s).icon,"data-slot":"icon",class:n(a.value.icon({class:e(s).ui?.icon}))},null,8,["name","class"])):f("",!0)]),m("h1",{"data-slot":"title",class:n(a.value.title({class:e(s).ui?.title}))},[t(l.$slots,"title",{},()=>[R(V(e(s).title),1)])],2),t(l.$slots,"trailing",c(g({...e(o),ui:a.value})))])],2),r.default?(i(),k("div",{key:0,"data-slot":"center",class:n(a.value.center({class:e(s).ui?.center}))},[t(l.$slots,"default",c(g(e(o))))],2)):f("",!0),m("div",{"data-slot":"right",class:n(a.value.right({class:e(s).ui?.right}))},[t(l.$slots,"right",c(g(e(o)))),e(s).toggleSide==="right"?(i(),h(e(u),{key:0})):f("",!0)],2)]),_:3},16,["as","class"])],64))}}),W={slots:{root:"relative flex flex-col min-w-0 min-h-svh lg:not-last:border-e lg:not-last:border-default shrink-0",body:"flex flex-col gap-4 sm:gap-6 flex-1 overflow-y-auto p-4 sm:p-6",handle:""},variants:{size:{true:{root:"w-full lg:w-(--width)"},false:{root:"flex-1"}}}},X=["data-dragging"],Q=Object.assign({inheritAttrs:!1},{__name:"UDashboardPanel",props:{class:{type:null,required:!1},ui:{type:Object,required:!1},id:{type:String,required:!1},minSize:{type:Number,required:!1,default:15},maxSize:{type:Number,required:!1},defaultSize:{type:Number,required:!1},resizable:{type:Boolean,required:!1,default:!1}},setup(b){const r=D("dashboardPanel",b),s=C(),p=P({storageKey:"dashboard",unit:"%"}),o=`${p.storageKey}-panel-${r.id||A()}`,{el:y,size:u,isDragging:a,onMouseDown:l,onTouchStart:v,onDoubleClick:_}=U(o,F(()=>({...p,...r}))),$=N(()=>T({extend:W,...s.ui?.dashboardPanel||{}})({size:!!u.value}));return(d,G)=>(i(),k(x,null,[m("div",S({id:o,ref_key:"el",ref:y,"data-slot":"root"},d.$attrs,{"data-dragging":e(a),class:$.value.root({class:[e(r).ui?.root,e(r).class]}),style:[e(u)?{"--width":`${e(u)}${e(p).unit}`}:void 0]}),[t(d.$slots,"default",{},()=>[t(d.$slots,"header"),m("div",{"data-slot":"body",class:n($.value.body({class:e(r).ui?.body}))},[t(d.$slots,"body")],2),t(d.$slots,"footer")])],16,X),t(d.$slots,"resize-handle",{onMouseDown:e(l),onTouchStart:e(v),onDoubleClick:e(_)},()=>[e(r).resizable?(i(),h(E,{key:0,"aria-controls":o,"data-slot":"handle",class:n($.value.handle({class:e(r).ui?.handle})),onMousedown:e(l),onTouchstart:e(v),onDblclick:e(_)},null,8,["class","onMousedown","onTouchstart","onDblclick"])):f("",!0)])],64))}});export{Q as _,L as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as oe}from"./BpM6ZPIG.js";import{_ as se}from"./DkT2nCqn.js";import{d as ne,b as le,u as ie,a as re,w as de,J as ce,B as ue,c,k as t,f as p,g as o,F as D,j as s,ac as me,v as w,o as l,i as d,m as r,E as pe,l as E,_ as fe,p as ye,t as H,y as ge,s as ve,h as $,r as u,A as we}from"./DCFbQvIN.js";import{_ as _e}from"./zv8WdMx0.js";import{_ as ke}from"./B3Fsod9X.js";import{u as he}from"./E-_n_6vi.js";import"./BjaRappk.js";import"./NERLHpOL.js";import"./Cpsq-kYE.js";const xe={class:"space-y-6"},be={class:"inline-flex items-center gap-1.5"},Pe={class:"flex justify-end"},Ce={class:"space-y-3"},Ve={key:0,class:"flex items-center gap-2 text-sm text-success-600 dark:text-success-400"},Ee={key:1,class:"flex items-center gap-2 text-sm text-warning-600 dark:text-warning-400"},$e={key:2,class:"text-xs text-gray-400"},Se={class:"flex justify-end"},Ae={class:"space-y-3"},Ue={class:"flex items-center gap-2 text-sm"},Be={key:1,class:"text-xs text-gray-400",title:"Set a password first to keep a way to sign in"},Fe={key:2,class:"text-xs text-gray-400"},Ne={class:"space-y-4"},Te={class:"flex justify-end"},qe={class:"text-sm text-gray-500"},Ge=ne({__name:"account",async setup(ze){let S,I;const i=le(),y=ie(),L=re(),U=we(),{data:m,refresh:A}=([S,I]=de(()=>he("/api/auth/me","$lZCnZ7VEtB")),S=await S,I(),S),g=$(()=>m.value?.user?.oauthProvider??null),O=$(()=>!!m.value?.user?.hasPassword),_=$(()=>!!g.value&&!O.value),B={google:{label:"Google",icon:"i-lucide-chrome"},github:{label:"GitHub",icon:"i-lucide-github"}},j=$(()=>U.public.demoMode?[]:(U.public.oauthProviders||[]).filter(a=>B[a])),k=u(""),F=u(!1),h=u(""),N=u(!1),T=u(!1),x=u(""),f=u(""),b=u(""),q=u(!1),z=u("");ce(()=>m.value?.user,a=>{a&&(k.value=a.name||"",h.value=a.email||"")},{immediate:!0});const M={"already-linked":"That provider account is already linked to another user.","link-requires-login":"Please sign in before connecting a provider.","domain-not-allowed":"That account’s email domain is not allowed.","org-not-allowed":"You are not a member of an allowed organization.","invalid-state":"Connecting failed (invalid state). Please try again.","access-denied":"Authorization was cancelled.","oauth-failed":"Connecting the provider failed."};ue(()=>{y.query.verified&&i.add({title:"Email verified",color:"success"}),y.query.linked&&(i.add({title:"Account connected",color:"success"}),A());const a=y.query.error;a&&i.add({title:"Could not connect account",description:M[a]||"Please try again.",color:"error"}),(y.query.linked||y.query.error||y.query.verified)&&L.replace({query:{}})});async function Y(){F.value=!0;try{await $fetch(`/api/users/${m.value?.user?.id}`,{method:"PATCH",body:{name:k.value||null}}),await A(),i.add({title:"Display name updated",color:"success"})}catch(a){i.add({title:"Failed to update display name",description:String(a?.message??a),color:"error"})}finally{F.value=!1}}async function G(){N.value=!0;try{await $fetch(`/api/users/${m.value?.user?.id}`,{method:"PATCH",body:{email:h.value||null}}),await A(),i.add({title:"Email updated",color:"success"})}catch(a){i.add({title:"Failed to update email",description:String(a?.message??a),color:"error"})}finally{N.value=!1}}async function W(){T.value=!0;try{await $fetch("/api/auth/send-verify-email",{method:"POST"}),i.add({title:"Verification email sent",description:"Check your inbox.",color:"success"})}catch(a){i.add({title:"Failed to send verification",description:String(a?.message??a),color:"error"})}finally{T.value=!1}}async function Z(){if(f.value.length<8){i.add({title:"Password too short",description:"At least 8 characters required",color:"error"});return}if(f.value!==b.value){i.add({title:"Passwords do not match",color:"error"});return}q.value=!0;try{await $fetch("/api/auth/change-password",{method:"POST",body:{currentPassword:x.value,newPassword:f.value}}),x.value="",f.value="",b.value="",i.add({title:"Password changed",color:"success"})}catch(a){i.add({title:"Failed to change password",description:String(a?.message??a),color:"error"})}finally{q.value=!1}}function J(a){window.location.href=`/api/auth/oauth/${a}/login?link=1`}async function K(a){z.value=a;try{await $fetch(`/api/auth/oauth/${a}/unlink`,{method:"POST"}),await A(),i.add({title:"Account disconnected",color:"success"})}catch(e){i.add({title:"Failed to disconnect",description:String(e?.data?.message??e?.message??e),color:"error"})}finally{z.value=""}}const Q=$(()=>U.public.authEnabled);return(a,e)=>{const X=oe,ee=se,P=pe,C=_e,v=fe,V=ke,R=ye,te=ve;return l(),c("div",xe,[t(Q)?t(m)?.user?(l(),c(D,{key:1},[s(V,{icon:"i-lucide-user",title:"Display name",help:"account.display-name"},{footer:o(()=>[d("div",Pe,[s(v,{color:"primary",loading:t(F),icon:"i-lucide-save",onClick:Y},{default:o(()=>[...e[8]||(e[8]=[r(" Save name ",-1)])]),_:1},8,["loading"])])]),default:o(()=>[s(C,{label:"Display name",name:"name"},{default:o(()=>[s(P,{modelValue:t(k),"onUpdate:modelValue":e[0]||(e[0]=n=>E(k)?k.value=n:null),placeholder:"Your display name (optional)",class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),s(V,{icon:"i-lucide-mail",title:"Email address",help:"account.email"},me({default:o(()=>[d("div",Ce,[t(m).user.emailVerified?(l(),c("div",Ve,[s(R,{name:"i-lucide-circle-check-big",class:"size-4"}),e[9]||(e[9]=r(" Verified ",-1))])):t(m).user.email?(l(),c("div",Ee,[s(R,{name:"i-lucide-circle-alert",class:"size-4"}),e[11]||(e[11]=r(" Not verified ",-1)),t(_)?w("",!0):(l(),p(v,{key:0,size:"xs",variant:"soft",color:"warning",loading:t(T),onClick:W},{default:o(()=>[...e[10]||(e[10]=[r(" Send verification email ",-1)])]),_:1},8,["loading"]))])):w("",!0),s(C,{label:"Email",name:"email"},{default:o(()=>[s(P,{modelValue:t(h),"onUpdate:modelValue":e[1]||(e[1]=n=>E(h)?h.value=n:null),type:"email",placeholder:"you@example.com",disabled:t(_),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),t(_)?(l(),c("p",$e,[e[12]||(e[12]=r(" Email is managed by ",-1)),d("strong",null,H(t(g)),1),e[13]||(e[13]=r(". ",-1))])):w("",!0)])]),_:2},[t(_)?void 0:{name:"footer",fn:o(()=>[d("div",Se,[s(v,{color:"primary",loading:t(N),icon:"i-lucide-save",onClick:G},{default:o(()=>[...e[14]||(e[14]=[r(" Save email ",-1)])]),_:1},8,["loading"])])]),key:"0"}]),1024),t(j).length>0?(l(),p(V,{key:0,icon:"i-lucide-link",title:"Connected accounts",help:"account.connected-accounts"},{default:o(()=>[d("div",Ae,[(l(!0),c(D,null,ge(t(j),n=>(l(),c("div",{key:n,class:"flex items-center justify-between gap-3 rounded-md border border-default px-3 py-2"},[d("div",Ue,[s(R,{name:B[n].icon,class:"size-5"},null,8,["name"]),d("span",null,H(B[n].label),1),t(g)===n?(l(),p(te,{key:0,color:"success",variant:"subtle",size:"sm"},{default:o(()=>[...e[15]||(e[15]=[r("Connected",-1)])]),_:1})):w("",!0)]),t(g)===n?(l(),c(D,{key:0},[t(O)?(l(),p(v,{key:0,size:"xs",color:"error",variant:"soft",icon:"i-lucide-unlink",loading:t(z)===n,onClick:ae=>K(n)},{default:o(()=>[...e[16]||(e[16]=[r(" Disconnect ",-1)])]),_:1},8,["loading","onClick"])):(l(),c("span",Be," Set a password to disconnect "))],64)):t(g)?(l(),c("span",Fe,"Another provider is connected")):(l(),p(v,{key:1,size:"xs",variant:"outline",color:"neutral",icon:"i-lucide-plus",onClick:ae=>J(n)},{default:o(()=>[...e[17]||(e[17]=[r(" Connect ",-1)])]),_:1},8,["onClick"]))]))),128)),e[18]||(e[18]=d("p",{class:"text-xs text-gray-400"},"One provider can be connected per account.",-1))])]),_:1})):w("",!0),t(_)?(l(),p(V,{key:2,icon:"i-lucide-lock",title:"Password"},{default:o(()=>[d("p",qe,[e[20]||(e[20]=r(" Your account is managed by ",-1)),d("strong",null,H(t(g)),1),e[21]||(e[21]=r(". Password management is handled by that provider. ",-1))])]),_:1})):(l(),p(V,{key:1,icon:"i-lucide-lock",title:"Change password",help:"account.password"},{footer:o(()=>[d("div",Te,[s(v,{color:"primary",loading:t(q),icon:"i-lucide-key-round",onClick:Z},{default:o(()=>[...e[19]||(e[19]=[r(" Change password ",-1)])]),_:1},8,["loading"])])]),default:o(()=>[d("div",Ne,[s(C,{label:"Current password",name:"currentPassword"},{default:o(()=>[s(P,{modelValue:t(x),"onUpdate:modelValue":e[2]||(e[2]=n=>E(x)?x.value=n:null),type:"password",placeholder:"Current password",autocomplete:"current-password",class:"w-full"},null,8,["modelValue"])]),_:1}),s(C,{label:"New password",name:"newPassword",description:"Minimum 8 characters"},{default:o(()=>[s(P,{modelValue:t(f),"onUpdate:modelValue":e[3]||(e[3]=n=>E(f)?f.value=n:null),type:"password",placeholder:"New password",autocomplete:"new-password",class:"w-full"},null,8,["modelValue"])]),_:1}),s(C,{label:"Confirm new password",name:"confirmPassword"},{default:o(()=>[s(P,{modelValue:t(b),"onUpdate:modelValue":e[4]||(e[4]=n=>E(b)?b.value=n:null),type:"password",placeholder:"Repeat new password",autocomplete:"new-password",class:"w-full"},null,8,["modelValue"])]),_:1})])]),_:1}))],64)):w("",!0):(l(),p(ee,{key:0,color:"warning",icon:"i-lucide-lock-open",title:"Authentication disabled",description:"Enable PIWI_AUTH_ENABLED=true to manage your account."},{description:o(()=>[d("span",be,[e[5]||(e[5]=r(" Enable ",-1)),e[6]||(e[6]=d("code",{class:"font-mono text-xs"},"PIWI_AUTH_ENABLED=true",-1)),e[7]||(e[7]=r(" to manage your account. ",-1)),s(X,{topic:"settings.auth-toggle"})])]),_:1}))])}}});export{Ge as default};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import{s as e,_ as o,o as a,a as t,n as r,b as s}from"./DGnQ69wW.js";const i=e().min(1,"Name is required").max(120).regex(/^[A-Za-z_$][A-Za-z0-9_$]*$/,"Must be a valid JS identifier"),n=e().max(120).regex(/^[A-Za-z_$][A-Za-z0-9_$]*$/,"Must be a valid JS identifier").nullish(),h=e().min(1,"Module is required").max(240).regex(/^[^'"`\r\n]+$/,"Must not contain quotes or line breaks"),g=o(["goto","click","fill","check","uncheck","selectOption","press","assertVisible"]),y=a({role:e().nullish(),name:e().nullish(),testId:e().nullish()}),l=a({name:e().min(1),type:o(["string","number","boolean","object"]),fields:t(e().min(1).max(80)).max(20).optional()}),c=a({action:g,target:y}),p=a({param:e().min(1),path:e().min(1).max(80).nullish(),stepIndex:r().int().min(0),from:o(["text","value","testId"])}),m=o(["page-object-method","helper","fixture"]);a({name:i,kind:m,receiver:n,importName:n,params:t(l).max(10),returnsPage:s().optional(),steps:t(c).min(1,"At least one pattern step is required").max(30),paramSources:t(p).max(10).optional(),confidence:r().min(0).max(1).optional(),notes:e().max(500).nullish()});a({name:i,kind:m,module:h,receiver:n,importName:n,params:t(l).max(10),returnsPage:s().optional(),urlPattern:e().max(240).nullish(),steps:t(c).min(1,"At least one pattern step is required").max(30),paramSources:t(p).max(10).optional(),source:o(["manual","scanned","recorded","ai-extracted"]).optional(),confidence:r().min(0).max(1).optional()});a({name:i.optional(),kind:m.optional(),module:h.optional(),receiver:n,importName:n,params:t(l).max(10).optional(),returnsPage:s().optional(),urlPattern:e().max(240).nullish(),steps:t(c).min(1).max(30).optional(),paramSources:t(p).max(10).optional(),source:o(["manual","scanned","recorded","ai-extracted"]).optional(),confidence:r().min(0).max(1).optional()});const f=`You analyze a single Playwright page-object method or helper function's TypeScript/JavaScript source code and extract a structured, reusable pattern describing what it does. You never execute the code — this is text analysis only. Reply strictly as JSON matching the given schema, nothing else.
|
|
2
|
+
|
|
3
|
+
Rules:
|
|
4
|
+
- "kind" is "page-object-method" when the code is a class method acting on "this.page" (or a "page" property) — set "receiver" to a sensible instance variable name (camelCase of the class name) and "importName" to the class name. "kind" is "helper" for a standalone exported function taking a Playwright "page" as its first parameter — "receiver" and "importName" must be null in that case. Use "fixture" only if the function is clearly Playwright fixture setup, not a page action.
|
|
5
|
+
- "params" lists the function's own parameters, excluding the leading Playwright handle — that first parameter is often named "page", but may be named anything and typed "Page", "Locator", or a union like "Page | Locator"; if the first parameter is a Playwright handle of any kind, skip it. Infer "type" from the TypeScript annotation, or absent one, from how the value is used.
|
|
6
|
+
- A parameter whose type is an object/interface (an options bag like "{ label?: string; testId?: string }", very common in helpers) MUST be typed "object", never "string". Set its "fields" to the object's own property names — from the interface declaration if you can see it, otherwise from the properties the function body actually reads off it. If the parameter is declared as an object OR an array of that object, still type it "object" and list the single object's fields. Never flatten an object parameter into a scalar.
|
|
7
|
+
- "steps" is the ordered sequence of page interactions the function performs, one entry per Playwright locator-then-action call (".click()", ".fill(value)", ".check()", ".uncheck()", ".selectOption(value)", ".press(key)"; a "page.goto(...)" call becomes a "goto" step). For each step's "target": "getByTestId('x')" sets "testId" only; "getByRole('role', { name: 'X' })" sets both "role" and "name"; a bare "getByRole('role')" sets only "role"; "getByText"/"getByLabel"/"getByPlaceholder" set "name" to that text and leave "role" null. Skip a step whose locator can't be classified this way rather than guessing.
|
|
8
|
+
- "paramSources" maps a step's argument back to a function parameter when that argument IS the parameter (e.g. ".fill(username)" where "username" is a parameter) — "from" is "value" for fill/selectOption/press arguments, "testId" when the parameter is interpolated into a getByTestId call, "text" when interpolated into a name/text match. Omit an entry when a step's value is a literal, not a parameter. When the value comes from a *field* of an object parameter (e.g. ".getByRole('option', { name: opt.value })"), set "param" to the parameter and "path" to that field name ("value") — one entry per field, and each field you reference this way must also appear in that parameter's "fields".
|
|
9
|
+
- "steps" must see through wrappers that aren't themselves page interactions: "test.step(...)" / "await test.step(...)" callbacks are transparent — extract the Playwright calls inside them as if the wrapper weren't there. The same goes for try/finally and "await Promise.all([...])".
|
|
10
|
+
- Branching and loops: when the body picks between alternative locators for the *same* logical interaction (an if/else chain over which option field was passed, a ".or(...)" locator), emit ONE step for that interaction using the most representative branch, and lower "confidence". Do not emit one step per branch — the pattern is matched against a real recording, which only ever took one path. For a loop that repeats an interaction an unknown number of times, emit the body once.
|
|
11
|
+
- A call to another helper in the same project that you cannot see the source of (e.g. "focusVSelect(...)", "getVSelectLocator(...)") is a real interaction you cannot classify. Do not silently drop it and do not guess its target: leave it out of "steps", lower "confidence", and name it in "notes".
|
|
12
|
+
- "confidence": your own 0-1 confidence that "steps" faithfully represents what the code does — lower it for loops, conditionals, or calls to other helper functions you can't see the inside of.
|
|
13
|
+
- "notes": one short sentence, only when something material could not be represented — unseen helper calls, branches you collapsed, or locators you had to skip. Null when the extraction is clean. This is shown to the user next to the confidence, so be specific about what is missing rather than generic.
|
|
14
|
+
- Never invent a step that isn't evidenced by an actual Playwright call in the code. A pattern of one or two well-grounded steps plus an honest "notes" is far more useful than a longer guessed one.`,b={type:"object",properties:{name:{type:"string"},kind:{type:"string",enum:["page-object-method","helper","fixture"]},receiver:{type:["string","null"]},importName:{type:["string","null"]},params:{type:"array",items:{type:"object",properties:{name:{type:"string"},type:{type:"string",enum:["string","number","boolean","object"]},fields:{type:"array",items:{type:"string"}}},required:["name","type"],additionalProperties:!1}},returnsPage:{type:"boolean"},steps:{type:"array",items:{type:"object",properties:{action:{type:"string",enum:["goto","click","fill","check","uncheck","selectOption","press","assertVisible"]},target:{type:"object",properties:{role:{type:["string","null"]},name:{type:["string","null"]},testId:{type:["string","null"]}},additionalProperties:!1}},required:["action","target"],additionalProperties:!1}},paramSources:{type:"array",items:{type:"object",properties:{param:{type:"string"},path:{type:["string","null"]},stepIndex:{type:"integer"},from:{type:"string",enum:["text","value","testId"]}},required:["param","stepIndex","from"],additionalProperties:!1}},confidence:{type:"number"},notes:{type:["string","null"]}},required:["name","kind","params","steps"],additionalProperties:!1};function w(d){const u=d.trim();return`${f}
|
|
15
|
+
|
|
16
|
+
Respond with ONLY a JSON object — no markdown code fences, no commentary — matching exactly this JSON schema:
|
|
17
|
+
|
|
18
|
+
${JSON.stringify(b,null,2)}
|
|
19
|
+
|
|
20
|
+
Here is the function to analyze:
|
|
21
|
+
|
|
22
|
+
\`\`\`
|
|
23
|
+
${u}
|
|
24
|
+
\`\`\``}const S=.6;export{f as E,S as L,w as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as p,o as s,c as u,j as n,p as f,i as e,t as a,g as c,m as l,_ as x,f as g,v as y,V as k,q as b}from"./DCFbQvIN.js";import{a as v}from"./BpM6ZPIG.js";const B={class:"text-sm font-medium text-gray-600 dark:text-gray-300"},V={class:"text-sm max-w-md"},z={class:"flex items-center gap-3 mt-1"},C=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=v;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",B,a(t.title),1),e("p",V,a(t.text),1),e("div",z,[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)}}}),h=Object.assign(C,{__name:"FeatureUnavailable"});export{h as _};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as s,o as t,c as o,f as c,v as l,i as m,t as r,V as i,q as d,p}from"./
|
|
1
|
+
import{d as s,o as t,c as o,f as c,v as l,i as m,t as r,V as i,q as d,p}from"./DCFbQvIN.js";const _={class:"text-sm"},f=s({__name:"EmptyState",props:{text:{},icon:{},padded:{type:Boolean,default:!0}},setup(e){return(a,u)=>{const n=p;return t(),o("div",{class:d(["flex flex-col items-center justify-center gap-2 text-center text-gray-500",e.padded&&"py-8"])},[e.icon?(t(),c(n,{key:0,name:e.icon,class:"size-6 opacity-60"},null,8,["name"])):l("",!0),m("p",_,r(e.text),1),i(a.$slots,"default")],2)}}}),y=Object.assign(f,{__name:"EmptyState"});export{y as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as j,b as F,w as R,aw as T,c as y,j as l,g as r,o as _,i as m,F as $,y as S,k as i,E as U,_ as V,m as u,r as C,M as O}from"./DCFbQvIN.js";import{_ as P}from"./zv8WdMx0.js";import{_ as A}from"./B3Fsod9X.js";import{u as B}from"./E-_n_6vi.js";import"./NERLHpOL.js";import"./BpM6ZPIG.js";import"./BjaRappk.js";import"./Cpsq-kYE.js";const E={class:"space-y-6"},N={class:"grid grid-cols-1 gap-x-4 gap-y-3 sm:grid-cols-2"},z={class:"flex items-center justify-end gap-2"},W=j({__name:"timeout-hygiene",async setup(L){let d,p;const c=F(),{data:s,refresh:f}=([d,p]=R(()=>B("/api/settings/timeout-hygiene","$8Luq-s6QSj")),d=await d,p(),d),o=C(!1),n=O({minRuns:0,factor:0,floorMs:0,safety:0,recommendedFloorMs:0,slowStaleP95Ms:0});T(()=>{s.value&&Object.assign(n,s.value.thresholds)});const g=[{key:"minRuns",label:"Minimum runs",description:"Executions with a duration needed before a test is judged.",min:1,step:1},{key:"factor",label:"Oversize factor (×)",description:"Flag a timeout when it is at least this many times the test’s p95 duration.",min:1,step:.5},{key:"floorMs",label:"Minimum headroom (ms)",description:"Only flag when the timeout − p95 gap is at least this many ms.",min:0,step:1e3},{key:"safety",label:"Recommendation safety (×)",description:"Recommended timeout = p95 × this.",min:1,step:.5},{key:"recommendedFloorMs",label:"Recommendation floor (ms)",description:"Never recommend a timeout below this many ms.",min:0,step:1e3},{key:"slowStaleP95Ms",label:"Stale slow() p95 (ms)",description:"A test.slow() test is stale when its p95 duration stays under this.",min:0,step:1e3}];async function v(){o.value=!0;try{const e=await $fetch("/api/settings/timeout-hygiene",{method:"PUT",body:{thresholds:{...n}}});s.value=e,c.add({title:"Timeout-hygiene thresholds saved",color:"success"}),await f()}catch(e){const a=e&&typeof e=="object"&&"data"in e?e.data?.message:void 0;c.add({title:"Save failed",description:a||"An error occurred",color:"error"})}finally{o.value=!1}}async function b(){o.value=!0;try{const e=await $fetch("/api/settings/timeout-hygiene",{method:"PUT",body:{thresholds:null}});s.value=e,Object.assign(n,e.thresholds),c.add({title:"Reset to defaults",color:"success"}),await f()}catch{c.add({title:"Reset failed",color:"error"})}finally{o.value=!1}}return(e,a)=>{const w=U,k=P,h=V,x=A;return _(),y("div",E,[l(x,{icon:"i-lucide-scissors",title:"Timeout hygiene",help:"settings.timeout-hygiene"},{subtitle:r(()=>[...a[0]||(a[0]=[u(" Tune how timeout opportunities are detected — oversized per-test timeouts and stale ",-1),m("code",null,"test.slow()",-1),u(" marks — surfaced per project (Performance tab) and in Analytics. Opportunities are recomputed when viewed, so changes apply to existing runs immediately. ",-1)])]),footer:r(()=>[m("div",z,[l(h,{variant:"ghost",color:"neutral",disabled:i(o),label:"Reset to defaults",onClick:b},null,8,["disabled"]),l(h,{color:"primary",loading:i(o),icon:"i-lucide-save",onClick:v},{default:r(()=>[...a[1]||(a[1]=[u("Save",-1)])]),_:1},8,["loading"])])]),default:r(()=>[m("div",N,[(_(),y($,null,S(g,t=>l(k,{key:t.key,label:t.label,description:t.description,hint:`default ${i(s)?.defaults[t.key]??""}`},{default:r(()=>[l(w,{modelValue:i(n)[t.key],"onUpdate:modelValue":M=>i(n)[t.key]=M,modelModifiers:{number:!0},type:"number",min:t.min,step:t.step,placeholder:`default ${i(s)?.defaults[t.key]??""}`,class:"w-full"},null,8,["modelValue","onUpdate:modelValue","min","step","placeholder"])]),_:2},1032,["label","description","hint"])),64))])]),_:1})])}}});export{W as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as a,o as s,c as n,j as o,p as c,i,t as r,q as d}from"./
|
|
1
|
+
import{d as a,o as s,c as n,j as o,p as c,i,t as r,q as d}from"./DCFbQvIN.js";const l={class:"text-sm"},p=a({__name:"LoadingState",props:{text:{default:"Loading…"},padded:{type:Boolean,default:!0}},setup(e){return(_,m)=>{const t=c;return s(),n("div",{role:"status","aria-live":"polite","aria-busy":"true",class:d(["flex items-center justify-center gap-2 text-gray-400",e.padded&&"py-8"])},[o(t,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),i("span",l,r(e.text),1)],2)}}}),f=Object.assign(p,{__name:"LoadingState"});export{f as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as o}from"./oSJFAC38.js";import{O as a,h as i,ab as n}from"./DCFbQvIN.js";import{u}from"./rL4C0HV5.js";function p(s){const{canSeeAdmin:t}=a(),e=u();return i(()=>o({canSeeAdmin:t.value,isDesktop:e,envManaged:s?n(s):void 0}))}export{p as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{G as m,a as p}from"./
|
|
1
|
+
import{G as m,a as p}from"./BAKUqW95.js";import{d,o as n,c as o,k as t,F as r,m as i,t as l,i as f,q as _,h as c}from"./DCFbQvIN.js";const k=["title"],x=d({__name:"DurationValue",props:{ms:{default:null},fallback:{default:"—"},unitClass:{default:"text-gray-400/70 dark:text-gray-500/70"},noTitle:{type:Boolean,default:!1}},setup(e){const a=e,s=c(()=>m(a.ms)),u=c(()=>a.noTitle||a.ms===null||a.ms===void 0?void 0:p(a.ms));return(y,g)=>(n(),o("span",{class:"tabular-nums whitespace-nowrap",title:t(u)},[t(s)?(n(),o(r,{key:0},[i(l(t(s).value),1),f("span",{class:_(e.unitClass)},l(t(s).unit),3)],64)):(n(),o(r,{key:1},[i(l(e.fallback),1)],64))],8,k))}}),h=Object.assign(x,{__name:"DurationValue"});export{h as _};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as _,f as m,g as i,o as p,i as s,t as n,j as c,k as l,m as u,_ as x}from"./
|
|
1
|
+
import{d as _,f as m,g as i,o as p,i as s,t as n,j as c,k as l,m as u,_ as x}from"./DCFbQvIN.js";import{_ as f}from"./B3Fsod9X.js";import{a as b}from"./E-_n_6vi.js";const g={class:"space-y-4 text-sm"},v={class:"space-y-1"},y={class:"flex items-start gap-2"},C={class:"text-xs break-all flex-1"},k={class:"space-y-1"},D={class:"flex items-start gap-2"},B={class:"text-xs break-all flex-1"},h=_({__name:"DataLocationCard",props:{database:{},storage:{}},setup(a){const{copy:e}=b();return(N,t)=>{const o=x,r=f;return p(),m(r,{icon:"i-lucide-folder-open",title:"Data location"},{subtitle:i(()=>[...t[2]||(t[2]=[u(" Where this instance keeps its database and files on disk. ",-1)])]),default:i(()=>[s("div",g,[s("div",v,[t[3]||(t[3]=s("div",{class:"text-muted"},"Database",-1)),s("div",y,[s("code",C,n(a.database),1),c(o,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy database location",onClick:t[0]||(t[0]=d=>l(e)(a.database,{toast:!0}))})])]),s("div",k,[t[4]||(t[4]=s("div",{class:"text-muted"},"File storage",-1)),s("div",D,[s("code",B,n(a.storage),1),c(o,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy storage location",onClick:t[1]||(t[1]=d=>l(e)(a.storage,{toast:!0}))})])])])]),_:1})}}}),z=Object.assign(h,{__name:"DataLocationCard"});export{z as _};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as o,u as s,w as c,n as u,o as p,c as i}from"./
|
|
1
|
+
import{d as o,u as s,w as c,n as u,o as p,c as i}from"./DCFbQvIN.js";const d=o({__name:"compare",async setup(_){let t,n;const e=s(),a=e.params.id;{const r=new URLSearchParams;r.set("tab","compare"),e.query.runA&&r.set("runA",String(e.query.runA)),e.query.runB&&r.set("runB",String(e.query.runB)),[t,n]=c(()=>u(`/projects/${a}?${r.toString()}`,{replace:!0})),await t,n()}return(r,m)=>(p(),i("div"))}});export{d as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as n,o as s,c as o,j as c,p as r,i as l,t as i,V as d,q as m}from"./
|
|
1
|
+
import{d as n,o as s,c as o,j as c,p as r,i as l,t as i,V as d,q as m}from"./DCFbQvIN.js";const _={class:"text-sm text-red-500"},p=n({__name:"ErrorState",props:{text:{},icon:{default:"i-lucide-circle-alert"},padded:{type:Boolean,default:!0}},setup(e){return(t,u)=>{const a=r;return s(),o("div",{role:"alert",class:m(["flex flex-col items-center justify-center gap-2 text-center",e.padded&&"p-4"])},[c(a,{name:e.icon,class:"size-5 text-red-400"},null,8,["name"]),l("p",_,i(e.text),1),d(t.$slots,"action")],2)}}}),f=Object.assign(p,{__name:"ErrorState"});export{f as _};
|