@piwitests/server 0.19.0 → 0.20.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/{eptP4pGv.js → -f7BAm1H.js} +1 -1
- package/.output/public/_nuxt/{Bti38m-M.js → 4gYNA-d4.js} +1 -1
- package/.output/public/_nuxt/{CHEFCN8Q.js → 5A6ITZXj.js} +1 -1
- package/.output/public/_nuxt/{DoUy4UHi.js → 8PUUncmO.js} +2 -2
- package/.output/public/_nuxt/{DS636elg.js → A1pj0VnG.js} +1 -1
- package/.output/public/_nuxt/{B9WhzpKO.js → AbmKWFQQ.js} +1 -1
- package/.output/public/_nuxt/{rWNTSFD6.js → B3obW6cw.js} +3 -3
- package/.output/public/_nuxt/{Bu2aaVIY.js → B7FTvFWq.js} +1 -1
- package/.output/public/_nuxt/{CpjgB2aY.js → B8zkOmwo.js} +1 -1
- package/.output/public/_nuxt/B96M2gdj.js +1 -0
- package/.output/public/_nuxt/{FUXhyidq.js → B99fbi73.js} +1 -1
- package/.output/public/_nuxt/{DslPMqfa.js → B9OLmp0f.js} +1 -1
- package/.output/public/_nuxt/{BccXfBfI.js → BKkF4pPD.js} +1 -1
- package/.output/public/_nuxt/{DP8hfJ9h.js → BT3wGCTI.js} +1 -1
- package/.output/public/_nuxt/{B3B9Ii2A.js → BUa0V0Ly.js} +1 -1
- package/.output/public/_nuxt/{B3HO8kuh.js → BUkim3TM.js} +1 -1
- package/.output/public/_nuxt/{BVaxh6Nl.js → BVc14Ncz.js} +3 -3
- package/.output/public/_nuxt/{DW0xl3I6.js → BY0HxR3t.js} +1 -1
- package/.output/public/_nuxt/B_xAMWQS.js +2 -0
- package/.output/public/_nuxt/{C2_3mdPC.js → BdQoBaOv.js} +1 -1
- package/.output/public/_nuxt/{DT53RWbC.js → BdfhYr-u.js} +1 -1
- package/.output/public/_nuxt/{CtQBsNUb.js → BgRu_3tT.js} +1 -1
- package/.output/public/_nuxt/{SlIRLREZ.js → BiO7RBWb.js} +1 -1
- package/.output/public/_nuxt/BicAJ6U8.js +1 -0
- package/.output/public/_nuxt/{C7P1UCO2.js → Bm62iDV5.js} +1 -1
- package/.output/public/_nuxt/{CZfMdzfk.js → BmUfSNMV.js} +1 -1
- package/.output/public/_nuxt/{tvgqrYDd.js → Bnxf8nbZ.js} +1 -1
- package/.output/public/_nuxt/{ndShiWE8.js → Bow4tTR0.js} +1 -1
- package/.output/public/_nuxt/{D0HNloZ9.js → BrQEE053.js} +1 -1
- package/.output/public/_nuxt/{CV9-fTmY.js → BzRRzmwm.js} +1 -1
- package/.output/public/_nuxt/{DprVVyUQ.js → C0_yH0N7.js} +1 -1
- package/.output/public/_nuxt/{DLSrtpsA.js → C1gTN4Q8.js} +1 -1
- package/.output/public/_nuxt/{ClOqkAcc.js → C2hkrSey.js} +1 -1
- package/.output/public/_nuxt/{ZFiQCMUB.js → C8e1EbJI.js} +1 -1
- package/.output/public/_nuxt/{nv9-6vBK.js → CA9B2HE5.js} +1 -1
- package/.output/public/_nuxt/{KnfsST6Y.js → CAAwCT7H.js} +1 -1
- package/.output/public/_nuxt/{ybDYeNxd.js → CAvY22RE.js} +1 -1
- package/.output/public/_nuxt/{C5iG7O4O.js → CEfS4-oS.js} +1 -1
- package/.output/public/_nuxt/{Bp5ELvx9.js → CIoSMkpp.js} +1 -1
- package/.output/public/_nuxt/{C95YAaJq.js → CIrFl3MW.js} +1 -1
- package/.output/public/_nuxt/{DiOLdHBC.js → CJFtzlQ4.js} +1 -1
- package/.output/public/_nuxt/{BX9ZXe98.js → CNyV9YpI.js} +1 -1
- package/.output/public/_nuxt/CSJ-eOQM.js +1 -0
- package/.output/public/_nuxt/{fVcG504p.js → CTU1mrhq.js} +1 -1
- package/.output/public/_nuxt/{279D2RYp.js → CXEH9OPk.js} +1 -1
- package/.output/public/_nuxt/CahpB9Z2.js +5 -0
- package/.output/public/_nuxt/{B7NBP1C-.js → Cbh--1MW.js} +1 -1
- package/.output/public/_nuxt/CeG9pBAD.js +1 -0
- package/.output/public/_nuxt/{D55D4EYo.js → CeW8v31b.js} +1 -1
- package/.output/public/_nuxt/{BuMC3WjZ.js → CjPfj7ya.js} +1 -1
- package/.output/public/_nuxt/{HXerICAi.js → Cnsmicv2.js} +1 -1
- package/.output/public/_nuxt/{DgE2YE3R.js → CsLojMwR.js} +1 -1
- package/.output/public/_nuxt/{C9_jrmk9.js → Cus22Ud3.js} +2 -2
- package/.output/public/_nuxt/{DX-MDGb3.js → CwGWJbiy.js} +1 -1
- package/.output/public/_nuxt/{BJ0XQElc.js → Cx6gc2VW.js} +1 -1
- package/.output/public/_nuxt/{cHAnlQbv.js → CxyAzHr3.js} +1 -1
- package/.output/public/_nuxt/{BxCKKeYs.js → CzAPFPpL.js} +1 -1
- package/.output/public/_nuxt/{B33iXw77.js → D--H4jLI.js} +1 -1
- package/.output/public/_nuxt/D1POo6S4.js +10 -0
- package/.output/public/_nuxt/{BDicZ1gQ.js → D5tke0B5.js} +1 -1
- package/.output/public/_nuxt/D8nkF-OO.js +3 -0
- package/.output/public/_nuxt/{CzGyac8q.js → DA25RkyK.js} +1 -1
- package/.output/public/_nuxt/{CUtJobDm.js → DIB-5fUJ.js} +1 -1
- package/.output/public/_nuxt/{BPRffDuo.js → DJmoLeVt.js} +1 -1
- package/.output/public/_nuxt/{DGfAxLHV.js → DJxlKFGb.js} +1 -1
- package/.output/public/_nuxt/{81InBX9v.js → DMec-OLo.js} +1 -1
- package/.output/public/_nuxt/{CK_2LZBS.js → DPCxhHri.js} +1 -1
- package/.output/public/_nuxt/{Bn0YQDyy.js → DSqHUrvO.js} +1 -1
- package/.output/public/_nuxt/{BqV0l12c.js → DabzhQB1.js} +1 -1
- package/.output/public/_nuxt/{BfTuX0wq.js → DdwHkKfV.js} +1 -1
- package/.output/public/_nuxt/{C-elpgyr.js → DeY2JkR2.js} +1 -1
- package/.output/public/_nuxt/{DEFEpYzn.js → DfgOx_ou.js} +1 -1
- package/.output/public/_nuxt/DmkUdSS4.js +1 -0
- package/.output/public/_nuxt/{Ar3IelOY.js → DoIREDVb.js} +1 -1
- package/.output/public/_nuxt/DpZ1r1HA.js +1 -0
- package/.output/public/_nuxt/{Jo8kRmHz.js → Dpd16JVI.js} +1 -1
- package/.output/public/_nuxt/{BSIxhGsh.js → DqcKngf3.js} +1 -1
- package/.output/public/_nuxt/{BMvCSA6h.js → DrfE8IY0.js} +1 -1
- package/.output/public/_nuxt/{eaVkJRSa.js → DsesNydr.js} +1 -1
- package/.output/public/_nuxt/{zQyPuvV1.js → DtHJgCS8.js} +1 -1
- package/.output/public/_nuxt/Dtd4rC58.js +9 -0
- package/.output/public/_nuxt/{NQikbhmK.js → Du2W7Jne.js} +37 -36
- package/.output/public/_nuxt/{CDk0q2hV.js → DuwtTfO8.js} +1 -1
- package/.output/public/_nuxt/{B44A4LSJ.js → Dy-TJ0Mt.js} +1 -1
- package/.output/public/_nuxt/{-09h6CA9.js → Dy86h-7P.js} +1 -1
- package/.output/public/_nuxt/{Cdff9XNh.js → Dyeqn3aG.js} +1 -1
- package/.output/public/_nuxt/{Dnpkl-1q.js → FaFoMVKo.js} +1 -1
- package/.output/public/_nuxt/GPNI1ffD.js +4 -0
- package/.output/public/_nuxt/{BCMuIgP5.js → H94BMf3L.js} +1 -1
- package/.output/public/_nuxt/HPNQD6v3.js +1 -0
- package/.output/public/_nuxt/HXadJrHu.js +2 -0
- package/.output/public/_nuxt/{YVN7WG7q.js → KyA_4Ks-.js} +1 -1
- package/.output/public/_nuxt/{CYsTqbBS.js → L3kAWB2a.js} +1 -1
- package/.output/public/_nuxt/{Dk9fwOCm.js → McL25vkx.js} +2 -2
- package/.output/public/_nuxt/Nn93e_Mz.js +1 -0
- package/.output/public/_nuxt/UdR3DBPS.js +1 -0
- package/.output/public/_nuxt/{SfMRXW25.js → Und3xXFc.js} +1 -1
- package/.output/public/_nuxt/_mj6CfPa.js +1 -0
- package/.output/public/_nuxt/{BPQoBGg5.js → b-GYfcrQ.js} +1 -1
- package/.output/public/_nuxt/{DHDtnj7p.js → bLcjFslv.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/e659b3e1-0e61-4971-940e-10063f9f4763.json +1 -0
- package/.output/public/_nuxt/entry.DmptwB51.css +1 -0
- package/.output/public/_nuxt/{y17lMTFy.js → hC_z4G8p.js} +1 -1
- package/.output/public/_nuxt/{CTxDO9fB.js → hNh4CIL0.js} +1 -1
- package/.output/public/_nuxt/{CGNkHojN.js → l5WKbU4h.js} +1 -1
- package/.output/public/_nuxt/{DcmZRa_F.js → oAClCn_h.js} +1 -1
- package/.output/public/_nuxt/{IvQlbZk6.js → pQqGiNch.js} +1 -1
- package/.output/public/_nuxt/ryMzSDUj.js +2 -0
- 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/_/users.mjs +1 -1
- package/.output/server/chunks/build/{BrowserBadge-D33lqUcj.mjs → BrowserBadge-MFvBwxmD.mjs} +66 -6
- package/.output/server/chunks/build/BrowserBadge-MFvBwxmD.mjs.map +1 -0
- package/.output/server/chunks/build/{Checkbox-DvUBGagc.mjs → Checkbox-4Q5d0fa0.mjs} +4 -4
- package/.output/server/chunks/build/Checkbox-4Q5d0fa0.mjs.map +1 -0
- package/.output/server/chunks/build/CiEnvCard-DB5DvBh1.mjs +1492 -0
- package/.output/server/chunks/build/CiEnvCard-DB5DvBh1.mjs.map +1 -0
- package/.output/server/chunks/build/CodeBlock-BgE-NSmE.mjs +1 -1
- package/.output/server/chunks/build/DashboardSidebarToggle-DCTnHiIv.mjs +1 -1
- package/.output/server/chunks/build/{DiagnosisPanel-B646dK4p.mjs → DiagnosisPanel-CALyEmcJ.mjs} +3 -3
- package/.output/server/chunks/build/DiagnosisPanel-CALyEmcJ.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-BBHWssHH.mjs} +4 -4
- package/.output/server/chunks/build/EntityLinks-BBHWssHH.mjs.map +1 -0
- package/.output/server/chunks/build/{EnvManagedBadge-Bg3FSiU1.mjs → EnvManagedBadge-UwD2b9v2.mjs} +2 -2
- package/.output/server/chunks/build/EnvManagedBadge-UwD2b9v2.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/{OpenInIdeLink-C4MXA8ya.mjs → OpenInIdeLink-CQWKKChd.mjs} +3 -3
- package/.output/server/chunks/build/{OpenInIdeLink-C4MXA8ya.mjs.map → OpenInIdeLink-CQWKKChd.mjs.map} +1 -1
- package/.output/server/chunks/build/{ProjectTestCasesTable-CxfQ5wtN.mjs → ProjectTestCasesTable-Bo61P5K1.mjs} +8 -8
- package/.output/server/chunks/build/{ProjectTestCasesTable-CxfQ5wtN.mjs.map → ProjectTestCasesTable-Bo61P5K1.mjs.map} +1 -1
- 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 +1 -1
- package/.output/server/chunks/build/{Select-CUqj50wi.mjs → Select-5DK9frQ7.mjs} +3 -3
- package/.output/server/chunks/build/Select-5DK9frQ7.mjs.map +1 -0
- package/.output/server/chunks/build/{SelectMenu-Db7osY7J.mjs → SelectMenu-D-2FSqBU.mjs} +939 -7
- package/.output/server/chunks/build/{SelectMenu-Db7osY7J.mjs.map → SelectMenu-D-2FSqBU.mjs.map} +1 -1
- package/.output/server/chunks/build/{SettingsField-D6iEYbEc.mjs → SettingsField-BZfx4ma1.mjs} +2 -2
- package/.output/server/chunks/build/SettingsField-BZfx4ma1.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/{Switch-CgUioOYB.mjs → Switch-B5Fp8ULt.mjs} +2 -2
- package/.output/server/chunks/build/Switch-B5Fp8ULt.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-CSi64vVA.mjs} +5 -5
- package/.output/server/chunks/build/TestCaseHistoryChart-CSi64vVA.mjs.map +1 -0
- package/.output/server/chunks/build/{TestStatusBar-j6h2Jp6A.mjs → TestStatusBar-DX3EhlyP.mjs} +2 -2
- package/.output/server/chunks/build/TestStatusBar-DX3EhlyP.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_-BdG37K7s.mjs} +12 -12
- package/.output/server/chunks/build/_id_-BdG37K7s.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-BHh65pfg.mjs → _id_-BdJs7BJZ.mjs} +57 -33
- package/.output/server/chunks/build/{_id_-BHh65pfg.mjs.map → _id_-BdJs7BJZ.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-B78ky13D.mjs → _id_-BxA6IgWr.mjs} +96 -73
- package/.output/server/chunks/build/_id_-BxA6IgWr.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-Rzkqx55x.mjs → _id_-C_uSBiyU.mjs} +22 -23
- package/.output/server/chunks/build/{_id_-Rzkqx55x.mjs.map → _id_-C_uSBiyU.mjs.map} +1 -1
- package/.output/server/chunks/build/{about-CvSP73Ug.mjs → about-BE0UV-8-.mjs} +365 -18
- package/.output/server/chunks/build/about-BE0UV-8-.mjs.map +1 -0
- package/.output/server/chunks/build/{ai-B4VJ9K1K.mjs → ai-Cn05ch0u.mjs} +9 -9
- package/.output/server/chunks/build/{ai-B4VJ9K1K.mjs.map → ai-Cn05ch0u.mjs.map} +1 -1
- package/.output/server/chunks/build/{analytics-CJPC6t4L.mjs → analytics-Bo_B_jko.mjs} +20 -21
- package/.output/server/chunks/build/analytics-Bo_B_jko.mjs.map +1 -0
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/{default-zvbFgDJG.mjs → default-CbNHaFsy.mjs} +603 -71
- package/.output/server/chunks/build/default-CbNHaFsy.mjs.map +1 -0
- package/.output/server/chunks/build/{docs-DyuVEgtB.mjs → docs-B_llWMxx.mjs} +6 -6
- package/.output/server/chunks/build/{docs-DyuVEgtB.mjs.map → docs-B_llWMxx.mjs.map} +1 -1
- package/.output/server/chunks/build/{edit-CFR5g2Qf.mjs → edit-J0asTFg8.mjs} +4 -5
- package/.output/server/chunks/build/edit-J0asTFg8.mjs.map +1 -0
- package/.output/server/chunks/build/fetch-B4FwBOzu.mjs +1 -1
- package/.output/server/chunks/build/{import-CZo3djDi.mjs → import-CS9oylTN.mjs} +4 -4
- package/.output/server/chunks/build/import-CS9oylTN.mjs.map +1 -0
- package/.output/server/chunks/build/{index-Stqw0dEI.mjs → index-DE45ycdZ.mjs} +9 -9
- package/.output/server/chunks/build/index-DE45ycdZ.mjs.map +1 -0
- package/.output/server/chunks/build/{index-gCw_y4ZJ.mjs → index-e9skCi-V.mjs} +10 -11
- package/.output/server/chunks/build/{index-gCw_y4ZJ.mjs.map → index-e9skCi-V.mjs.map} +1 -1
- package/.output/server/chunks/build/{index-D7fe97l3.mjs → index-hGHlmyxj.mjs} +299 -91
- package/.output/server/chunks/build/index-hGHlmyxj.mjs.map +1 -0
- package/.output/server/chunks/build/isValueEqualOrExist-D2qw9YEr.mjs +1 -1
- package/.output/server/chunks/build/login-Da4u1IlW.mjs +1 -1
- package/.output/server/chunks/build/{mcp-B3IUvRgD.mjs → mcp-uhVCCwQM.mjs} +339 -10
- package/.output/server/chunks/build/mcp-uhVCCwQM.mjs.map +1 -0
- package/.output/server/chunks/build/{notifications-abDv0id8.mjs → notifications-fx_qnKGA.mjs} +4 -4
- package/.output/server/chunks/build/notifications-fx_qnKGA.mjs.map +1 -0
- package/.output/server/chunks/build/{pr-feedback-DjZID6q-.mjs → pr-feedback-X6-70iF0.mjs} +3 -3
- package/.output/server/chunks/build/pr-feedback-X6-70iF0.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +24 -24
- package/.output/server/chunks/build/{settings-Du7YqF8i.mjs → settings-CCYe7rsc.mjs} +3 -3
- package/.output/server/chunks/build/settings-CCYe7rsc.mjs.map +1 -0
- package/.output/server/chunks/build/{storage-B4vzxd8G.mjs → storage-CJEmviCD.mjs} +5 -5
- package/.output/server/chunks/build/storage-CJEmviCD.mjs.map +1 -0
- package/.output/server/chunks/build/{test-cases-DUvaO1He.mjs → test-cases-thBbAykw.mjs} +9 -9
- package/.output/server/chunks/build/test-cases-thBbAykw.mjs.map +1 -0
- package/.output/server/chunks/build/{useAiStatus-CWvIo32Q.mjs → useAiStatus-CxjMmDDY.mjs} +8 -8
- package/.output/server/chunks/build/useAiStatus-CxjMmDDY.mjs.map +1 -0
- package/.output/server/chunks/build/{useCopyRich-BemRsKgv.mjs → useCopyRich-RJKhWoyj.mjs} +74 -44
- package/.output/server/chunks/build/useCopyRich-RJKhWoyj.mjs.map +1 -0
- package/.output/server/chunks/build/{useDesktopDownload-D49JRQSw.mjs → useDesktopDownload-BepjqxOt.mjs} +2 -2
- package/.output/server/chunks/build/useDesktopDownload-BepjqxOt.mjs.map +1 -0
- package/.output/server/chunks/build/{useOpenInIde-4GFf-kdi.mjs → useOpenInIde-BbTnPhFA.mjs} +2 -2
- package/.output/server/chunks/build/useOpenInIde-BbTnPhFA.mjs.map +1 -0
- package/.output/server/chunks/build/{useSettingsNav-C3O866KC.mjs → useSettingsNav-DnQKacz8.mjs} +4 -4
- package/.output/server/chunks/build/useSettingsNav-DnQKacz8.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/{wasted-time-lYkx5YO4.mjs → wasted-time-BNTPIyrC.mjs} +4 -4
- package/.output/server/chunks/build/wasted-time-BNTPIyrC.mjs.map +1 -0
- package/.output/server/chunks/nitro/nitro.mjs +3471 -2802
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/__piwi/session.get.mjs +1 -1
- package/.output/server/chunks/routes/api/desktop/import-local.post.mjs +88 -0
- package/.output/server/chunks/routes/api/desktop/import-local.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/files/_...path_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +1 -1
- package/.output/server/chunks/routes/api/index.get2.mjs +1 -1
- package/.output/server/chunks/routes/api/index.get3.mjs +1 -1
- package/.output/server/chunks/routes/api/index.get4.mjs +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 +1 -1
- package/.output/server/chunks/routes/api/links/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/links/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/markers/_id_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/notifications/stream.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +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 +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 +1 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/menu.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/overview.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects.get.mjs +1 -1
- package/.output/server/chunks/routes/api/search.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/ai.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/ai.put.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/smtp.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +1 -1
- package/.output/server/chunks/routes/api/stream.get.mjs +1 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +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 +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +5 -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 +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs +1 -2
- package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/import.post.mjs +4 -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 +1 -1
- package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/start.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +3 -1
- package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/traces/check.post.mjs +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 +1 -1
- package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +1 -1
- package/.output/server/chunks/routes/api/version.get.mjs +1 -1
- package/.output/server/chunks/routes/mcp.post.mjs +1 -1
- package/.output/server/chunks/routes/renderer.mjs +1 -1
- package/.output/server/index.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/package.json +1 -1
- package/.output/public/_nuxt/BYDaY0Z7.js +0 -1
- package/.output/public/_nuxt/Bc8mOoz9.js +0 -4
- package/.output/public/_nuxt/BeLWlVK0.js +0 -1
- package/.output/public/_nuxt/BpUaY9nH.js +0 -2
- 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/CrwJAwhk.js +0 -1
- package/.output/public/_nuxt/CuSVQEkS.js +0 -3
- package/.output/public/_nuxt/CylWPruw.js +0 -1
- package/.output/public/_nuxt/DDDpCFpF.js +0 -1
- package/.output/public/_nuxt/DVDXJYq2.js +0 -2
- package/.output/public/_nuxt/Dgf5N4Ng.js +0 -1
- package/.output/public/_nuxt/DiZyJYez.js +0 -1
- package/.output/public/_nuxt/OSduWzyz.js +0 -1
- 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/server/chunks/_/import-runs.mjs +0 -351
- package/.output/server/chunks/_/import-runs.mjs.map +0 -1
- package/.output/server/chunks/build/BrowserBadge-D33lqUcj.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/DiagnosisPanel-B646dK4p.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/Modal-Ck2XLt8d.mjs.map +0 -1
- package/.output/server/chunks/build/RovingFocusItem-BJSzTBjy.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/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/TestStatusBar-j6h2Jp6A.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_-z5N6HPyC.mjs.map +0 -1
- package/.output/server/chunks/build/about-CvSP73Ug.mjs.map +0 -1
- package/.output/server/chunks/build/analytics-CJPC6t4L.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/import-CZo3djDi.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/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/settings-Du7YqF8i.mjs.map +0 -1
- package/.output/server/chunks/build/storage-B4vzxd8G.mjs.map +0 -1
- package/.output/server/chunks/build/test-cases-DUvaO1He.mjs.map +0 -1
- package/.output/server/chunks/build/useAiStatus-CWvIo32Q.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/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
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{_ as $,a as G}from"./CHEFCN8Q.js";import{_ as F}from"./D0HNloZ9.js";import{d as H,w as W,e as V,f as k,g as o,A as Y,o as n,i as t,k as r,v as j,j as i,c as a,t as m,_ as J,m as s,F as g,y as K,p as Q,h as d}from"./NQikbhmK.js";import{_ as X}from"./rWNTSFD6.js";import{_ as Z}from"./cHAnlQbv.js";import{_ as ee}from"./DprVVyUQ.js";import{u as te}from"./CHNwfU1y.js";import{u as se}from"./Bn0YQDyy.js";import{u as re}from"./CpjgB2aY.js";import"./YVN7WG7q.js";import"./CDk0q2hV.js";import"./IvQlbZk6.js";import"./C7P1UCO2.js";import"./BjaRappk.js";import"./eptP4pGv.js";const ie=[{name:"list_projects",description:"List all projects with stats: total runs, test cases, latest run status and branch. Use this first to discover available projects and their IDs.",inputSchema:{type:"object",properties:{}}},{name:"get_project",description:"Get project details and its recent test runs with pass/fail counts. Results are paginated — use pageSize and cursor for the runs list.",inputSchema:{type:"object",properties:{id:{type:"number",description:"Project ID from list_projects"},pageSize:{type:"number",description:"Runs per page (default 10, max 50)"},cursor:{type:"string",description:"Opaque cursor from a previous response to get the next page of runs"}},required:["id"]}},{name:"list_runs",description:"List test runs for a project with filters.",inputSchema:{type:"object",properties:{projectId:{type:"number",description:"Project ID"},status:{type:"string",enum:["passed","failed","running","initialising","aborted"],description:"Filter by status"},branch:{type:"string",description:"Filter by branch name (exact match against SCM metadata)"},pageSize:{type:"number",description:"Results per page (default 10, max 50)"},cursor:{type:"string",description:"Opaque cursor from a previous response to get the next page"}},required:["projectId"]}},{name:"get_run",description:"Get a test run summary plus its test cases (paginated), with status, truncated error text, and failure cluster IDs. Filter by status and page with pageSize/cursor.",inputSchema:{type:"object",properties:{id:{type:"number",description:"Test run ID"},status_filter:{type:"string",enum:["failed","flaky","all"],description:'Which test cases to include (default: "failed" — only failed+timedOut; "flaky" — only flaky; "all" — every case)'},pageSize:{type:"number",description:"Cases per page (default 10, max 50)"},cursor:{type:"string",description:"Opaque cursor from a previous response for the next page of cases"}},required:["id"]}},{name:"list_failed_cases",description:"List failed and timed-out test cases across recent runs for a project.",inputSchema:{type:"object",properties:{projectId:{type:"number",description:"Project ID"},pageSize:{type:"number",description:"Results per page (default 10, max 50)"},cursor:{type:"string",description:"Opaque cursor from a previous response to get the next page"},runId:{type:"number",description:"Optional: restrict to a specific run"}},required:["projectId"]}},{name:"list_flaky_tests",description:"List flaky tests for a project with flakiness scores.",inputSchema:{type:"object",properties:{projectId:{type:"number",description:"Project ID"},runs:{type:"number",description:"Number of recent runs to analyze (default 50, max 200)"},pageSize:{type:"number",description:"Results per page (default 10, max 50)"},cursor:{type:"string",description:"Opaque cursor from a previous response. Cursor is the flakyScore value (descending)."}},required:["projectId"]}},{name:"get_test_case",description:"Get test case details including aggregated pass/fail stats, flakiness metrics, and recent executions (paginated). Use testCaseId (stable identity), not the per-run caseId.",inputSchema:{type:"object",properties:{id:{type:"number",description:"Test case ID (testCaseId from list_failed_cases or list_flaky_tests)"},pageSize:{type:"number",description:"Executions per page (default 10, max 50)"},cursor:{type:"string",description:"Opaque cursor from a previous response to get the next page of executions"}},required:["id"]}},{name:"list_clusters",description:"List failure clusters for a project. Each cluster groups similar failures by error fingerprint.",inputSchema:{type:"object",properties:{projectId:{type:"number",description:"Project ID"},status:{type:"string",enum:["open","resolved","ignored"],description:"Filter by triage status (default: all statuses)"},pageSize:{type:"number",description:"Results per page (default 10, max 50)"},cursor:{type:"string",description:"Opaque cursor from a previous response to get the next page"}},required:["projectId"]}},{name:"get_cluster",description:"Get full details for a failure cluster including all affected test cases, a compact diagnosis summary, and locator healing suggestions for up to 5 affected cases. Each healing entry includes the failing locator, the recommended fix, and the number of alternatives available. Use get_cluster_diagnosis for the full diagnosis text, or get_cluster_context for the raw AI evidence.",inputSchema:{type:"object",properties:{id:{type:"number",description:"Cluster ID from list_clusters"}},required:["id"]}},{name:"get_fix_plan",description:"Everything needed to fix one failure cluster, in a single answer: the diagnosis and its validated patch, ranked locator replacements with the exact file and line to edit, the failing tests, the owning team, and the command that verifies the work. `verify.expectation` states what the dashboard records once those tests pass, so you can confirm the fix landed rather than guessing. Prefer this over assembling get_cluster + get_cluster_diagnosis + get_locator_healing yourself.",inputSchema:{type:"object",properties:{clusterId:{type:"number",description:"Cluster ID from list_clusters or list_open_clusters"}},required:["clusterId"]}},{name:"get_cluster_diagnosis",description:"Get the stored AI diagnosis for a failure cluster. Returns category, confidence, root cause, evidence, and suggested fix. Returns null if no diagnosis has been run yet.",inputSchema:{type:"object",properties:{id:{type:"number",description:"Cluster ID"}},required:["id"]}},{name:"get_test_case_context",description:"Get the AI evidence context for a specific test-run-case (execution scope). Use this when debugging a single test failure — it provides the execution-scoped evidence including steps, console, network, and SCM diff.",inputSchema:{type:"object",properties:{id:{type:"number",description:"Test run case ID"}},required:["id"]}},{name:"get_case_screenshots",description:"Get screenshots for a test-run-case. By default returns metadata only (name, type, size). Set content=true to include base64-encoded image data (max 3, capped at ~100 KB each). Call metadata-only first to discover what exists, then request content for the ones you need.",inputSchema:{type:"object",properties:{testRunsCaseId:{type:"number",description:"Test run case ID"},content:{type:"boolean",description:"Include base64 image data (default false — metadata only)"}},required:["testRunsCaseId"]}},{name:"get_cluster_context",description:"Get the full AI evidence context for a failure cluster — the same data sent to the diagnosis AI. Includes error samples, stack traces, test steps, console logs, network failures, ARIA snapshots, SCM diff (changed files since last green run), and a per-section breakdown with char counts and truncation flags. This is the richest available evidence for debugging a failure.",inputSchema:{type:"object",properties:{id:{type:"number",description:"Cluster ID"},baseCommit:{type:"string",description:"Optional: override the baseline commit SHA for SCM diff comparison"},selectedCommitShas:{type:"array",items:{type:"string"},description:"Optional: specific commit SHAs to include in the diff context (max 10)"}},required:["id"]}},{name:"search_test_cases",description:"Search test cases by title or file path within a project. Accepts a free-text query and returns matching test cases with basic stats. Use this to find a test case when you don't know its ID.",inputSchema:{type:"object",properties:{projectId:{type:"number",description:"Project ID"},q:{type:"string",description:"Search query — matched against title and file path (case-insensitive)"},pageSize:{type:"number",description:"Results per page (default 10, max 50)"},cursor:{type:"string",description:"Opaque cursor from a previous response to get the next page"}},required:["projectId","q"]}},{name:"get_test_run_case",description:"Get a single test-run-case execution record with full (untruncated) error text plus steps, console logs, web vitals, and ARIA snapshot. Use include to fetch only the blobs you need. The ID is the executionId from get_run.cases or testRunsCaseId from get_cluster.affectedTestCases.",inputSchema:{type:"object",properties:{id:{type:"number",description:"Test run case ID (executionId from get_run.cases or testRunsCaseId from get_cluster.affectedTestCases)"},include:{type:"array",items:{type:"string",enum:["steps","console","webVitals","aria","source"]},description:"Optional: which heavy blobs to include (default: all). The error, status, and summary are always returned."}},required:["id"]}},{name:"list_recent_activity",description:"List the most recent test runs across all projects. No projectId required — returns a cross-project view of recent CI activity. Paginated by startTime descending.",inputSchema:{type:"object",properties:{pageSize:{type:"number",description:"Results per page (default 10, max 50)"},cursor:{type:"string",description:"Opaque cursor from a previous response to get the next page"}}}},{name:"get_repo_commits",description:"List recent commits for a project's repository. Requires SCM token configuration (per-project or global). Returns commit details (SHA, message, author, date).",inputSchema:{type:"object",properties:{projectId:{type:"number",description:"Project ID"},branch:{type:"string",description:"Branch name (default: repository default branch)"},limit:{type:"number",description:"Max commits (default 20, max 100)"}},required:["projectId"]}},{name:"get_repo_diff",description:"Get the diff (changed files with patches) for a single commit in a project's repository. Requires SCM token configuration (per-project or global). Useful for inspecting what code changed in a specific commit suspected of causing a failure.",inputSchema:{type:"object",properties:{projectId:{type:"number",description:"Project ID"},sha:{type:"string",description:"Full commit SHA"}},required:["projectId","sha"]}},{name:"get_run_insights",description:'Compare a run to its last green baseline: pass-rate delta, new regressions, recurrences, recovered tests, new flaky tests, biggest perf improvements/regressions, worker imbalance, and newly opened clusters. Use this to answer "what changed?" and "did my fix work?".',inputSchema:{type:"object",properties:{id:{type:"number",description:"Test run ID"}},required:["id"]}},{name:"get_spec_health",description:"Per-spec-file health for a project: pass rate, flaky rate, failure count, test count, and average duration grouped by spec-file prefix over the last N days. Use to find which areas of the suite are unhealthy.",inputSchema:{type:"object",properties:{projectId:{type:"number",description:"Project ID"},days:{type:"number",description:"Lookback window in days (default 30, max 90)"}},required:["projectId"]}},{name:"get_slow_tests",description:"Slowest test cases in a project by average duration, with max/min and trend direction across recent runs. Use to target performance work.",inputSchema:{type:"object",properties:{projectId:{type:"number",description:"Project ID"},runs:{type:"number",description:"Recent runs to analyze (default 50, max 100)"}},required:["projectId"]}},{name:"get_performance_trend",description:'Time series of run duration, average test duration, and p90 test duration for a project. Use to answer "is the suite getting slower?".',inputSchema:{type:"object",properties:{projectId:{type:"number",description:"Project ID"},limit:{type:"number",description:"Number of recent runs (default 30, max 100)"}},required:["projectId"]}},{name:"get_test_stability_trend",description:'Time-series stability for a single test case: flaky rate, pass rate, and average duration bucketed over its recent execution history. Use to answer "is this test getting flakier?".',inputSchema:{type:"object",properties:{id:{type:"number",description:"Test case ID (stable testCaseId)"},buckets:{type:"number",description:"Number of time buckets (default 20, 5–50)"}},required:["id"]}},{name:"get_network_requests",description:"A run's network requests aggregated by method + normalized route, sorted by average duration, with status codes and captured backend server logs. Use to pin a UI failure on a slow or failing endpoint.",inputSchema:{type:"object",properties:{id:{type:"number",description:"Test run ID"}},required:["id"]}},{name:"get_failure_groups",description:"One run's failures grouped by failure cluster, with per-group affected cases and worker correlation. Run-scoped counterpart to list_clusters.",inputSchema:{type:"object",properties:{id:{type:"number",description:"Test run ID"}},required:["id"]}},{name:"get_locator_healing",description:"Ranked alternative locators for a failing test-run-case: the failing locator, the recommended durable fix, and the full alternative lists (from prior success, element match, and ARIA snapshot). Use when fixing a broken selector.",inputSchema:{type:"object",properties:{testRunsCaseId:{type:"number",description:"Test run case ID (executionId)"}},required:["testRunsCaseId"]}},{name:"search",description:"Global search across all in-scope projects, runs (by label or numeric id), and test cases (by title). Use to find a run by its label or locate an entity across projects.",inputSchema:{type:"object",properties:{q:{type:"string",description:"Search query (min 2 chars)"}},required:["q"]}},{name:"list_case_traces",description:"List Playwright trace files for a test-run-case, with a download path for each. Fetch the bytes via GET /api/files/<path>.",inputSchema:{type:"object",properties:{testRunsCaseId:{type:"number",description:"Test run case ID (executionId)"}},required:["testRunsCaseId"]}},{name:"list_links",description:"List external entity links (Jira, GitHub PR/issue, etc.) attached to a run, test-run-case, or test case, with provider and unfurled status.",inputSchema:{type:"object",properties:{entityType:{type:"string",enum:["test_run","test_runs_case","test_case"],description:"Which entity the links are attached to"},id:{type:"number",description:"The entity ID matching entityType"}},required:["entityType","id"]}},{name:"list_tags",description:"List the project tag catalog (id, text, color).",inputSchema:{type:"object",properties:{}}},{name:"get_project_test_catalog",description:"The full test-case catalog for a project with aggregated pass/fail/flaky counts, average duration, and last status per test. Offset-paginated bulk companion to get_test_case.",inputSchema:{type:"object",properties:{projectId:{type:"number",description:"Project ID"},pageSize:{type:"number",description:"Results per page (default 10, max 50)"},offset:{type:"number",description:"Row offset for paging (default 0)"},query:{type:"string",description:"Optional case-insensitive substring filter on title or file path"},tags:{type:"string",description:"Comma-separated tags; a test must carry every one of them. A leading @ is optional."},owner:{type:"string",description:"Exact owner declared via the piwi:owner annotation"},priority:{type:"string",enum:["critical","high","medium","low"],description:"Priority declared via the piwi:priority annotation"}},required:["projectId"]}},{name:"list_open_clusters",description:"Open failure clusters across all in-scope projects, ranked by occurrences — a cross-project triage queue. Filter by status; paginate with pageSize/cursor.",inputSchema:{type:"object",properties:{status:{type:"string",enum:["open","resolved","ignored"],description:"Triage status (default: open)"},pageSize:{type:"number",description:"Results per page (default 10, max 50)"},cursor:{type:"string",description:"Opaque cursor from a previous response to get the next page"}}}},{name:"get_instance_stats",description:"Instance-wide counts (projects, runs, test cases, executions, files) and total storage size. Admin only.",inputSchema:{type:"object",properties:{}}},{name:"explain_failure",description:"One-call evidence bundle for a single failing execution: error, steps, console, ARIA snapshot, the recommended locator fix, a screenshot count, and the AI diagnosis context. Prefer this over chaining get_test_run_case + get_locator_healing + get_test_case_context.",inputSchema:{type:"object",properties:{testRunsCaseId:{type:"number",description:"Test run case ID (executionId)"}},required:["testRunsCaseId"]}},{name:"set_cluster_status",description:"Triage a failure cluster: set its status to open, resolved, or ignored with an optional note. Requires reporter or admin access. Use after fixing the underlying issue.",inputSchema:{type:"object",properties:{id:{type:"number",description:"Cluster ID"},status:{type:"string",enum:["open","resolved","ignored"],description:"New triage status"},triageNote:{type:"string",description:"Optional note explaining the status change"}},required:["id","status"]}},{name:"set_cluster_base_commit",description:'Pin the baseline commit SHA a cluster uses for its SCM-diff diagnosis context, so "what changed since green" is accurate. Requires reporter or admin access.',inputSchema:{type:"object",properties:{id:{type:"number",description:"Cluster ID"},commit:{type:"string",description:"Baseline commit SHA (empty to clear)"}},required:["id","commit"]}},{name:"submit_diagnosis_feedback",description:"Record thumbs up/down feedback on a stored diagnosis, with an optional note. Requires reporter or admin access.",inputSchema:{type:"object",properties:{id:{type:"number",description:"Diagnosis ID"},feedback:{type:"string",enum:["up","down"],description:"Rating (omit to clear)"},feedbackNote:{type:"string",description:"Optional note"}},required:["id"]}},{name:"run_cluster_diagnosis",description:"Trigger an AI diagnosis for a failure cluster and return the result (category, confidence, root cause, suggested fix). Returns the existing completed diagnosis unless force is set. Requires reporter or admin access and a configured AI provider.",inputSchema:{type:"object",properties:{id:{type:"number",description:"Cluster ID"},force:{type:"boolean",description:"Re-run even if a completed diagnosis exists (default false)"},baseCommit:{type:"string",description:"Optional baseline commit SHA for SCM-diff context"}},required:["id"]}}];function oe(S){return new URL(globalThis.location.href)}const ne={class:"max-w-3xl mx-auto p-6 space-y-6"},ae={key:0,class:"mb-4 space-y-3 rounded-md border border-default bg-elevated/50 p-3"},ce={class:"space-y-1"},pe={class:"flex items-start gap-2"},de={class:"text-xs break-all flex-1"},ue={class:"space-y-1"},le={class:"flex items-start gap-2"},me={class:"text-xs break-all flex-1"},ge={class:"text-sm text-gray-500 dark:text-gray-400 mb-4"},fe={class:"space-y-3"},ye={class:"space-y-3"},he={class:"space-y-3"},be={class:"space-y-3"},xe={class:"space-y-3"},_e={class:"space-y-3"},ve={class:"flex flex-col gap-1.5"},Ie={class:"min-w-0"},we={class:"text-sm font-mono font-semibold text-foreground"},ke={class:"text-xs text-gray-500 dark:text-gray-400 mt-0.5"},je={class:"space-y-3 text-sm text-gray-600 dark:text-gray-400"},Se={key:0},Ce={key:1},qe={key:2,class:"text-xs text-gray-400"},Re={key:3,class:"text-xs text-gray-400"},Ae={class:"space-y-2"},Pe={class:"flex items-center gap-2"},De={class:"flex-1 px-3 py-2 bg-muted rounded-md text-sm font-mono break-all"},Te={class:"text-xs text-gray-400"},Ue="pd_YOUR_API_KEY",Ke=H({__name:"mcp",async setup(S){let f,_;const v=Y(),I=v.public.demoMode,y=te(),{copy:w}=se(),{data:h}=([f,_]=W(()=>re("/api/desktop/reporter-config",{immediate:y,default:()=>null},"$fdl6kilREP")),f=await f,_(),f),p=d(()=>h.value?.token??Ue),C=oe(),c=d(()=>`${h.value?.url??v.public.siteUrl??C.origin}/mcp`);V({title:"MCP server — Piwi Dashboard"});const q=ie,R=[{label:"Claude Code",slot:"claude-code"},{label:"Cursor",slot:"cursor"},{label:"VS Code",slot:"vscode"},{label:"Claude Desktop",slot:"claude-desktop"},{label:"Gemini CLI",slot:"gemini"},{label:"Windsurf / Continue",slot:"windsurf"}],A=d(()=>`claude mcp add --transport http piwi ${c.value} \\
|
|
2
|
-
--header "Authorization: Bearer ${p.value}"`),P=d(()=>JSON.stringify({mcpServers:{piwi:{url:c.value,headers:{Authorization:`Bearer ${p.value}`}}}},null,2)),D=d(()=>JSON.stringify({servers:{piwi:{type:"http",url:c.value,headers:{Authorization:`Bearer ${p.value}`}}}},null,2)),T=d(()=>JSON.stringify({mcpServers:{piwi:{type:"http",url:c.value,headers:{Authorization:`Bearer ${p.value}`}}}},null,2)),U=d(()=>`gemini mcp add --transport http piwi ${c.value} \\
|
|
3
|
-
--header "Authorization: Bearer ${p.value}"`),O=d(()=>JSON.stringify({mcpServers:{piwi:{serverUrl:c.value,headers:{Authorization:`Bearer ${p.value}`}}}},null,2));return(z,e)=>{const L=G,M=F,x=J,u=X,B=Z,b=ee,N=Q,E=$;return n(),k(E,null,{header:o(()=>[i(L,{title:"MCP server"})]),body:o(()=>[t("div",ne,[r(I)?(n(),k(M,{key:0,color:"info",icon:"i-lucide-bot",title:"Feature preview",description:"The MCP endpoint is not active in this demo — it requires a real Piwi backend. The tools and client setup shown below reflect what your own deployment exposes."})):j("",!0),i(b,{icon:"i-lucide-settings-2",title:"Client setup",help:"mcp.client-setup"},{default:o(()=>[r(h)?(n(),a("div",ae,[t("div",ce,[e[2]||(e[2]=t("div",{class:"text-xs text-muted"},"MCP URL",-1)),t("div",pe,[t("code",de,m(r(c)),1),i(x,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy MCP URL",onClick:e[0]||(e[0]=l=>r(w)(r(c),{toast:!0}))})])]),t("div",ue,[e[3]||(e[3]=t("div",{class:"text-xs text-muted"},"Access token",-1)),t("div",le,[t("code",me,m(r(p)),1),i(x,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy access token",onClick:e[1]||(e[1]=l=>r(w)(r(p),{toast:!0}))})])]),e[4]||(e[4]=t("p",{class:"text-xs text-muted"},[s(" This app authenticates with a local access token even though sign-in is off — it is the "),t("code",{class:"font-mono"},"Bearer"),s(" value, already filled into the snippets below. ")],-1))])):j("",!0),t("p",ge,[r(h)?(n(),a(g,{key:0},[s("Pick your client below — the URL and access token above are already baked into each snippet.")],64)):(n(),a(g,{key:1},[e[5]||(e[5]=s("Replace ",-1)),e[6]||(e[6]=t("code",{class:"px-1 py-0.5 bg-muted rounded text-xs font-mono"},"pd_YOUR_API_KEY",-1)),e[7]||(e[7]=s(" with your actual API key. The MCP URL shown in the snippets is auto-detected from your current browser origin.",-1))],64))]),i(B,{items:R,ui:{list:"mb-4"}},{"claude-code":o(()=>[t("div",fe,[e[8]||(e[8]=t("p",{class:"text-sm text-gray-600 dark:text-gray-400"}," Run once in any terminal. Claude Code stores the server in your global MCP config. ",-1)),i(u,{code:r(A),lang:"sh"},null,8,["code"]),e[9]||(e[9]=t("p",{class:"text-xs text-gray-400"},[s(" After adding, restart Claude Code and use "),t("code",{class:"font-mono"},"/mcp"),s(" to verify "),t("strong",null,"piwi"),s(" is connected. Claude will call the tools automatically when you ask about test results or failures. ")],-1))])]),cursor:o(()=>[t("div",ye,[e[10]||(e[10]=t("p",{class:"text-sm text-gray-600 dark:text-gray-400"},[s(" Add to "),t("code",{class:"font-mono text-xs"},"~/.cursor/mcp.json"),s(" (global) or "),t("code",{class:"font-mono text-xs"},".cursor/mcp.json"),s(" in your project root: ")],-1)),i(u,{code:r(P),lang:"json"},null,8,["code"]),e[11]||(e[11]=t("p",{class:"text-xs text-gray-400"}," Restart Cursor, then enable the MCP server in Cursor Settings → MCP. ",-1))])]),vscode:o(()=>[t("div",he,[e[12]||(e[12]=t("p",{class:"text-sm text-gray-600 dark:text-gray-400"},[s(" Add to "),t("code",{class:"font-mono text-xs"},".vscode/mcp.json"),s(" in your workspace (VS Code Copilot agent mode, version 1.99+): ")],-1)),i(u,{code:r(D),lang:"json"},null,8,["code"]),e[13]||(e[13]=t("p",{class:"text-xs text-gray-400"}," The server appears in the Copilot chat agent drop-down once the file is saved. ",-1))])]),"claude-desktop":o(()=>[t("div",be,[e[14]||(e[14]=t("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"Add to your Claude Desktop config file:",-1)),e[15]||(e[15]=t("ul",{class:"text-xs text-gray-400 space-y-0.5 mb-2"},[t("li",null,[t("strong",null,"macOS:"),t("code",{class:"font-mono"},"~/Library/Application Support/Claude/claude_desktop_config.json")]),t("li",null,[t("strong",null,"Windows:"),t("code",{class:"font-mono"},"%APPDATA%\\Claude\\claude_desktop_config.json")])],-1)),i(u,{code:r(T),lang:"json"},null,8,["code"]),e[16]||(e[16]=t("p",{class:"text-xs text-gray-400"}," Requires Claude Desktop with remote MCP support (released early 2025). Restart the app after saving. ",-1))])]),gemini:o(()=>[t("div",xe,[e[17]||(e[17]=t("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"Run once to register the server with Gemini CLI:",-1)),i(u,{code:r(U),lang:"sh"},null,8,["code"]),e[18]||(e[18]=t("p",{class:"text-xs text-gray-400"}," Gemini CLI fetches the tool list on startup and makes them available in agent mode. ",-1))])]),windsurf:o(()=>[t("div",_e,[e[19]||(e[19]=t("p",{class:"text-sm text-gray-600 dark:text-gray-400"},[s(" Add to your Windsurf or Continue MCP config. For Windsurf: "),t("code",{class:"font-mono text-xs"},"~/.codeium/windsurf/mcp_config.json"),s(". For Continue: "),t("code",{class:"font-mono text-xs"},"~/.continue/config.json"),s(" under "),t("code",{class:"font-mono text-xs"},"mcpServers"),s(". ")],-1)),i(u,{code:r(O),lang:"json"},null,8,["code"])])]),_:1})]),_:1}),i(b,{icon:"i-lucide-bot",title:"What it provides",help:"mcp.tools"},{default:o(()=>[t("div",ve,[(n(!0),a(g,null,K(r(q),l=>(n(),a("div",{key:l.name,class:"flex items-start gap-3 px-3 py-2.5 rounded-md bg-elevated/50 border border-default hover:bg-elevated transition-colors"},[i(N,{name:"i-lucide-wrench",class:"size-4 mt-0.5 shrink-0 text-primary"}),t("div",Ie,[t("p",we,m(l.name),1),t("p",ke,m(l.description),1)])]))),128))])]),_:1}),i(b,{icon:"i-lucide-key",title:"Authentication",help:"mcp.auth"},{default:o(()=>[t("div",je,[e[24]||(e[24]=t("p",null,[s(" MCP requests are authenticated with the same API keys used by the REST API. API keys start with "),t("code",{class:"px-1 py-0.5 bg-muted rounded text-xs font-mono"},"pd_"),s(". ")],-1)),r(y)?(n(),a("p",Ce,[...e[21]||(e[21]=[s(" This app provides a local access token automatically — shown in ",-1),t("strong",null,"Client setup",-1),s(" above and already filled into every snippet, so there is nothing to replace. ",-1)])])):(n(),a("p",Se,[...e[20]||(e[20]=[s(" Generate a key in ",-1),t("strong",null,"Settings → Users → [your account] → API keys",-1),s(", then replace ",-1),t("code",{class:"px-1 py-0.5 bg-muted rounded text-xs font-mono"},"pd_YOUR_API_KEY",-1),s(" in the snippets above. ",-1)])])),r(y)?(n(),a("p",Re,[...e[23]||(e[23]=[s(" This desktop app keeps sign-in off but still requires its own local access token on every request — it is the ",-1),t("code",{class:"font-mono"},"Bearer",-1),s(" value. The endpoint is not open. ",-1)])])):(n(),a("p",qe,[...e[22]||(e[22]=[s(" When authentication is disabled (",-1),t("code",{class:"font-mono"},"PIWI_AUTH_ENABLED",-1),s(" not set), any request is accepted without a key. ",-1)])]))])]),_:1}),i(b,{icon:"i-lucide-link",title:"Server URL"},{default:o(()=>[t("div",Ae,[t("div",Pe,[t("code",De,m(r(c)),1),i(x,{icon:"i-lucide-external-link",size:"sm",color:"neutral",variant:"outline",title:"Open API docs",to:"/docs",external:!r(I)},{default:o(()=>[...e[25]||(e[25]=[s(" REST API docs ",-1)])]),_:1},8,["external"])]),t("p",Te,[e[32]||(e[32]=s(" This is your Piwi instance's MCP endpoint. It is also the server URL to paste into client configs above. ",-1)),r(y)?(n(),a(g,{key:0},[e[26]||(e[26]=s("This desktop app requires its local access token as the ",-1)),e[27]||(e[27]=t("code",{class:"font-mono"},"Bearer",-1)),e[28]||(e[28]=s(" value on every request.",-1))],64)):(n(),a(g,{key:1},[e[29]||(e[29]=s("The server requires a valid Bearer token (or no auth if ",-1)),e[30]||(e[30]=t("code",{class:"font-mono"},"PIWI_AUTH_ENABLED",-1)),e[31]||(e[31]=s(" is not set).",-1))],64))])])]),_:1})])]),_:1})}}});export{Ke as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{aw as B,b as H,ao as I,h as V}from"./NQikbhmK.js";const k=4096;function x(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function j(e){return'"'+e.replace(/"/g,'\\"')+'"'}function u(e){return e.replace(/\\/g,"/")}function T(e){const n=new Map;for(const r of e){const i=r.projectName||"";n.has(i)||n.set(i,[]),n.get(i).push(r)}return n}function D(e){const n=new Set;return e.filter(r=>{const i=r.filePath;return n.has(i)?!1:(n.add(i),!0)}).map(r=>r.filePath)}function A(e,n){const r=n?.mode??"file-line",p=`${n?.pkgRunner??"npx"} playwright test`;if(e.length===0)return"";const v=T(e),m=[];for(const[g,d]of v){let c;if(r==="file"){const l=D(d).map(t=>j(u(t))).join(" ");c=`${p} ${l}`}else if(r==="file-line"){const a=new Set,l=d.filter(t=>{const o=t.filePath+":"+t.line;return t.line&&a.has(o)?!1:(t.line&&a.add(o),!0)}).map(t=>t.line?j(`${u(t.filePath)}:${t.line}`):j(u(t.filePath))).join(" ");c=`${p} ${l}`}else{const a=d.map(t=>x(t.title)),l=a.length===1?a[0]:`(${a.join("|")})`;c=`${p} --grep ${j(l)}`}g&&(c+=` --project=${j(g)}`),m.push(c)}let b=m.join(" && ");if(b.length>k){if(r==="grep")return A(e,{...n,mode:"file-line"});if(r==="file-line")return A(e,{...n,mode:"file"});const d=_(e).map(a=>j(u(a))).join(" ");let c=`${p} ${d}`;return c.length>k&&(c=c.slice(0,k-3)+"..."),c}return b}function _(e){const n=new Set;return e.reduce((r,i)=>(n.has(i.filePath)||(n.add(i.filePath),r.push(i.filePath)),r),[])}function C(e,n){return e==null?"":n==null?`:${e}`:`:${e}:${n}`}function w(e){return e.replace(/%/g,"%25").replace(/ /g,"%20").replace(/#/g,"%23").replace(/\?/g,"%3F")}function S(e,n){const r=u(e).replace(/\/+$/,""),i=u(n).replace(/^\.?\/+/,"");return r?`${r}/${i}`:i}function L(e){const n=w(u(e.absPath)),r=n.startsWith("/")?n:`/${n}`;return`${e.scheme}://file${r}${C(e.line,e.column)}`}function F(e){const n=w(u(e.relPath))+C(e.line,e.column);return`jetbrains://${e.product}/navigate/reference?project=${encodeURIComponent(e.projectName)}&path=${n}`}function K(e){const n=w(u(e.path));return`http://localhost:${e.port}/api/file/${n}${C(e.line,e.column)}`}const M="piwi-ide-prefs",G={method:"auto",vscodeScheme:"vscode",jetbrainsProduct:"idea",jetbrainsPort:63342,jetbrainsHttpUsesRelativePath:!1,defaultRoot:"",projectRoots:{},jetbrainsProjectNames:{}},W={vscode:"VS Code","vscode-insiders":"VS Code Insiders",vscodium:"VSCodium",cursor:"Cursor"},X={auto:"Auto (try all)",vscode:"VS Code","jetbrains-url":"JetBrains (URL)","jetbrains-http":"JetBrains (local server)"},Y=["idea","webstorm","pycharm","phpstorm","goland","rubymine","clion","rider","rustrover"];function Q(){const e=B(M,G,{mergeDefaults:!0}),n=H(),r=I("piwi-ide-settings-open",()=>!1),i=I("piwi-ide-settings-context",()=>({}));function p(t){return t==null||t===""?null:String(t)}function v(t={}){i.value={projectKey:t.projectKey??null,projectName:t.projectName??null},r.value=!0}function m(t){const o=p(t);return((o?e.value.projectRoots[o]:void 0)||e.value.defaultRoot||"").trim()}function b(t,o){const s=p(t);return((s?e.value.jetbrainsProjectNames[s]:void 0)||o||"").trim()}function g(t,o){const s=m(o);return s?S(s,t):null}const d=V(()=>!!e.value.defaultRoot?.trim()||Object.keys(e.value.projectRoots).length>0||Object.keys(e.value.jetbrainsProjectNames).length>0);function c(t){try{const o=document.createElement("iframe");o.style.display="none",o.src=t,document.body.appendChild(o),setTimeout(()=>o.remove(),1e3)}catch{const o=document.createElement("a");o.href=t,o.style.display="none",document.body.appendChild(o),o.click(),setTimeout(()=>o.remove(),1e3)}}async function a(t,o,s){const f=K({port:e.value.jetbrainsPort,path:t,line:o,column:s});try{return await fetch(f,{mode:"no-cors",signal:AbortSignal.timeout(1200)}),!0}catch{return!1}}async function l(t){const o=t.method??e.value.method,s=t.filePath,f=t.line??null,P=t.column??null,h=m(t.projectKey),$=b(t.projectKey,t.projectName),O={projectKey:p(t.projectKey),projectName:t.projectName??null},y={label:"Configure",color:"info",onClick:()=>v(O)},J=()=>h?(c(L({scheme:e.value.vscodeScheme,absPath:S(h,s),line:f,column:P})),n.add({title:`Opening ${W[e.value.vscodeScheme]}…`,description:"If nothing opens, the editor may not be installed or the workspace root is wrong.",color:"neutral",icon:"i-lucide-external-link"}),!0):(n.add({title:"Set a workspace root",description:"VS Code needs the local folder that contains this file.",color:"info",icon:"i-lucide-folder-cog",actions:[y]}),!1),E=()=>$?(c(F({product:e.value.jetbrainsProduct,projectName:$,relPath:s,line:f,column:P})),n.add({title:"Opening JetBrains…",description:"If nothing opens, JetBrains Toolbox may not be installed or the project is not open.",color:"neutral",icon:"i-lucide-external-link"}),!0):(n.add({title:"Set a JetBrains project name",description:"The jetbrains:// link needs the open IDE project name.",color:"info",icon:"i-lucide-folder-cog",actions:[y]}),!1),U=async()=>{const R=e.value.jetbrainsHttpUsesRelativePath?s:h?S(h,s):s,N=await a(R,f,P);return n.add(N?{title:"Opened in JetBrains",color:"success",icon:"i-lucide-check"}:{title:"JetBrains not reachable",description:`Nothing responded on localhost:${e.value.jetbrainsPort}. Start the IDE with the Remote Control plugin (and "Allow unsigned requests").`,color:"error",icon:"i-lucide-plug-zap"}),N};if(o==="vscode"){J();return}if(o==="jetbrains-url"){E();return}if(o==="jetbrains-http"){await U();return}if(e.value.jetbrainsHttpUsesRelativePath||!!h){const R=e.value.jetbrainsHttpUsesRelativePath?s:S(h,s);if(await a(R,f,P)){n.add({title:"Opened in JetBrains",color:"success",icon:"i-lucide-check"});return}}if(h){J();return}if($){E();return}n.add({title:'Set up "Open in IDE"',description:"Add your local workspace folder (for VS Code) or a JetBrains project name to open files from here.",color:"info",icon:"i-lucide-folder-cog",actions:[y]})}return{prefs:e,isConfigured:d,openInIde:l,openInVscode:t=>l({...t,method:"vscode"}),openViaJetbrainsUrl:t=>l({...t,method:"jetbrains-url"}),openViaJetbrainsHttp:t=>l({...t,method:"jetbrains-http"}),resolveRoot:m,resolveJbProjectName:b,resolveAbsPath:g,settingsOpen:r,settingsContext:i,openSettings:v}}export{X as I,Y as J,W as V,A as b,Q as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as p,a_ as f,f as r,g as n,A as _,o as s,k as o,c as m,i as t,m as a,_ as g,v as h}from"./NQikbhmK.js";import{_ as x}from"./DprVVyUQ.js";import"./C7P1UCO2.js";import"./BjaRappk.js";import"./Bn0YQDyy.js";import"./eptP4pGv.js";const b={key:0,class:"flex max-sm:flex-col justify-between items-start gap-4"},v={key:1,class:"text-sm text-muted"},N=p({__name:"index",setup(k){const i=_().public.demoMode,{isResetting:d,resetDemo:c}=f();return(C,e)=>{const l=g,u=x;return s(),r(u,{icon:"i-lucide-settings",title:"General settings",help:"settings.general"},{actions:n(()=>[o(i)?(s(),r(l,{key:0,color:"error",variant:"soft",icon:"i-lucide-refresh-cw",loading:o(d),onClick:o(c)},{default:n(()=>[...e[0]||(e[0]=[a(" Reset demo ",-1)])]),_:1},8,["loading","onClick"])):h("",!0)]),default:n(()=>[o(i)?(s(),m("div",b,[...e[1]||(e[1]=[t("div",null,[t("p",{class:"font-medium text-sm"},"Reset demo data"),t("p",{class:"text-sm text-muted"}," Wipe the in-browser database and reload with fresh sample data dated to the current moment. All changes made during this demo session will be lost. ")],-1)])])):(s(),m("div",v,[...e[2]||(e[2]=[t("p",null," Appearance and theme are in the top bar. Use the sidebar to manage your account, users, AI diagnosis, notifications, storage, and tags. ",-1),t("p",{class:"mt-2"},[a(" Settings that can be overridden by "),t("code",{class:"font-mono text-xs"},"PIWI_*"),a(" environment variables show a lock badge with the variable name — hover the help icon on any card to see which env var backs a setting. ")],-1)])]))]),_:1})}}});export{N as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{_ as Qt}from"./279D2RYp.js";import{d as pe,b as gt,o as s,f as _,g as i,i as n,q,k as e,j as o,m as $,t as l,c as a,F as G,O as ut,l as Ie,ak as ct,p as ve,v as k,s as ke,D as Ue,_ as Re,J as pt,y as oe,z as es,A as xt,h as D,r as K,K as De,Q as he,C as Ne,n as He,E as Je,H as ge,al as dt,I as ts,R as yt,G as ss,u as Le,w as Me,ah as ns,B as as,ad as ht,a as os,e as ls}from"./NQikbhmK.js";import{_ as vt}from"./DP8hfJ9h.js";import{_ as is}from"./BqV0l12c.js";import{_ as rs}from"./BuMC3WjZ.js";import{_ as us,a as cs}from"./CHEFCN8Q.js";import{_ as ds,b as ms,a as fs,c as gs,d as ps}from"./Dgf5N4Ng.js";import{_ as xs}from"./BSIxhGsh.js";import{_ as Ee}from"./CV9-fTmY.js";import{_ as Pe}from"./C7P1UCO2.js";import{_ as kt}from"./Dnpkl-1q.js";import{_ as nt}from"./eptP4pGv.js";import{_ as ys}from"./y17lMTFy.js";import{u as hs,_ as vs}from"./HXerICAi.js";import{p as bt,y as ks,n as bs,a as ws,h as wt,m as _s,z as et,A as tt,k as Fe,B as _t,j as st,f as $t,b as $s,c as Cs,i as de}from"./CDk0q2hV.js";import{f as Ze}from"./D-c8ZSws.js";import{b as Ct}from"./CylWPruw.js";import{u as at}from"./Bn0YQDyy.js";import{_ as Ts}from"./DS636elg.js";import{_ as Tt}from"./BMvCSA6h.js";import{_ as Rs}from"./Bti38m-M.js";import{_ as Rt}from"./BPRffDuo.js";import{_ as zs}from"./nv9-6vBK.js";import{_ as zt}from"./BPQoBGg5.js";import{u as Is}from"./C-elpgyr.js";import{_ as Ss}from"./ybDYeNxd.js";import{_ as It}from"./BxCKKeYs.js";import{_ as St}from"./DLSrtpsA.js";import{_ as Fs}from"./DprVVyUQ.js";import{_ as ot}from"./C9_jrmk9.js";import{_ as Ft}from"./DiOLdHBC.js";import{_ as Ds}from"./DW0xl3I6.js";import{_ as Dt}from"./B3HO8kuh.js";import{u as Ae}from"./CpjgB2aY.js";import{_ as Ps}from"./DiZyJYez.js";import{_ as js}from"./tvgqrYDd.js";import{_ as Bs}from"./D0HNloZ9.js";import{u as Ns}from"./ClOqkAcc.js";import{u as Ms,s as As}from"./BCMuIgP5.js";import"./YVN7WG7q.js";import"./cHAnlQbv.js";import"./IvQlbZk6.js";import"./BjaRappk.js";import"./D7W_4Sqc.js";import"./rWNTSFD6.js";import"./eaVkJRSa.js";import"./g26aVPxc.js";import"./DEFEpYzn.js";import"./CNFYDQmj.js";import"./BYDaY0Z7.js";import"./CYsTqbBS.js";import"./B44A4LSJ.js";import"./FUXhyidq.js";import"./C95YAaJq.js";import"./BeLWlVK0.js";const Us={class:"flex items-center gap-3 flex-1 min-w-0 justify-between"},Ls={class:"flex items-center gap-3 min-w-0"},Es={class:"text-sm font-semibold truncate flex items-center gap-1"},Os={class:"flex items-center gap-3 shrink-0 max-sm:hidden"},Ks={class:"text-xs text-zinc-500 tabular-nums whitespace-nowrap"},Ws={class:"text-zinc-700 dark:text-zinc-300"},Hs={class:"text-xs text-emerald-600 dark:text-emerald-400 tabular-nums whitespace-nowrap"},Vs={class:"text-xs text-rose-600 dark:text-rose-400 tabular-nums whitespace-nowrap"},Gs={class:"text-xs text-zinc-500 tabular-nums whitespace-nowrap"},Xs={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)"},qs={class:"text-xs text-orange-600 dark:text-orange-400 tabular-nums whitespace-nowrap"},Ys={class:"grid grid-cols-1 lg:grid-cols-12 gap-4"},Js={class:"space-y-3"},Zs={class:"flex items-start gap-3"},Qs={class:"flex items-center gap-2.5 min-w-0 flex-1"},en={class:"min-w-0 flex-1"},tn={class:"flex items-center gap-2"},sn={class:"text-base font-bold shrink-0 flex items-center gap-1"},nn={class:"text-xs text-zinc-500 ml-auto whitespace-nowrap"},an={class:"p-2 space-y-1 min-w-32"},on=["onClick"],ln={class:"grid grid-cols-3 sm:grid-cols-5 gap-2"},rn={class:"text-xl font-bold mt-0.5"},un={class:"relative"},cn={class:"text-xl font-bold mt-0.5 text-emerald-600 dark:text-emerald-400"},dn={class:"text-xl font-bold mt-0.5 text-rose-600 dark:text-rose-400"},mn={class:"text-xl font-bold mt-0.5 text-zinc-600 dark:text-zinc-400"},fn={class:"text-xl font-bold mt-0.5 text-amber-600 dark:text-amber-400"},gn={key:0,class:"flex items-center gap-3"},pn={class:"flex-1 max-w-md"},xn={class:"flex items-center gap-3 text-xs shrink-0"},yn={class:"flex items-center gap-1"},hn={key:0,class:"flex items-center gap-1"},vn={key:1,class:"flex items-center gap-1"},kn={key:2,class:"flex items-center gap-1"},bn={key:0,class:"flex items-center gap-3"},wn={class:"flex-1 min-w-0"},_n={key:1,class:"space-y-1.5 text-sm"},$n={class:"text-xs tabular-nums text-zinc-400 dark:text-zinc-500 shrink-0"},Cn={key:0,class:"flex items-center justify-between gap-2 min-w-0"},Tn={class:"truncate"},Rn={class:"text-xs tabular-nums text-zinc-400 dark:text-zinc-500 shrink-0"},zn={class:"space-y-3 text-sm"},In={key:0},Sn={class:"flex flex-wrap gap-1.5"},Fn={key:1,class:"flex items-center gap-1"},Dn={key:3},Pn={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"},jn={class:"m-0"},Bn=pe({__name:"RunSummary",props:{testRun:{},displayProgress:{},allReports:{},showCustomData:{type:Boolean},finalizing:{type:Boolean},activeFilter:{},totalWastedTime:{}},emits:["update:showCustomData","filter-status","label-updated"],setup(t,{emit:h}){const C=t,F=h,R=gt(),u=xt(),w=D(()=>C.testRun?.storageStats),r=D(()=>!!(C.testRun?.metadata?.ci||C.testRun?.environment||C.testRun?.playwrightVersion||C.testRun?.reporterVersion)),T=D(()=>!!C.testRun?.metadata?.scm),E=D(()=>!!(w.value?.totalFiles||C.finalizing)),N=D(()=>!!(C.testRun?.metadata?.tags?.length||C.testRun?.metadata?.projectDescription||C.testRun?.metadata?.relatedIssue||C.testRun?.metadata?.customData||C.testRun?.links?.length)),{summaryColSpanClass:B,blockColSpanClass:I}=hs(()=>[r,T,E,N].filter(f=>f.value).length),{copy:j,copied:H}=at(),A=K("file-line"),d=K(!1),S=D(()=>C.testRun?.testCases?C.testRun.testCases.filter(f=>f.status==="failed"||f.status==="timedout").map(f=>({filePath:(f.filePath||f.location?.split(":")[0])??"",title:f.title,line:f.location&&parseInt(f.location.split(":")[1]??"",10)||null,projectName:f.browser?.projectName||null})):[]);function p(){return Ct(S.value,{mode:A.value})}async function c(){const f=p();f&&(d.value=!0,await j(f,{toast:"Retry command copied"}),setTimeout(()=>{d.value=!1},2e3))}const m=D(()=>d.value?"Copied!":wt(p()));function U(){const f=C.testRun;if(!f)return"";const z=f.status==="passed"?"✅":f.status==="failed"?"❌":f.status==="running"?"🔄":"⚠️",ue=f.label?` — ${f.label}`:"",g=f.project?.label??f.project?.name??"",P=f.totalTests??0,Y=f.passedTests??0,le=f.failedTests??0,Z=f.skippedTests??0,b=f.didNotRunTests??0,V=f.flakyTests??0,ne=ws(f.duration),se=V>0?` · ${V} flaky`:"",ye=b>0?` · ${b} didn't run`:"";return[`*Run #${f.id}*${ue}`,`Status: ${z} ${f.status} | Project: ${g}`,`Tests: ${P} total · ${Y} passed · ${le} failed · ${Z} skipped${ye}${se}`,`Duration: ${ne}`].join(`
|
|
2
|
-
`)}const v=K(""),M=K(!1),y=K(!1);let J=!1;const te=K(null);function ae(){J=!1,v.value=C.testRun?.label??"",M.value=!0,De(()=>te.value?.focus())}async function ee(){if(y.value)return;if(J){J=!1;return}const f=C.testRun;if(f){y.value=!0;try{await $fetch(`/api/test-runs/${f.id}`,{method:"PATCH",body:{label:v.value||null}}),M.value=!1,F("label-updated")}catch(z){const ue=z&&typeof z=="object"&&"data"in z?z.data?.message:"Failed to save label";R.add({title:"Error",description:ue||"Failed to save label",color:"error"})}finally{y.value=!1}}}function re(){J=!0,M.value=!1}function O(f){f.key==="Enter"?ee():f.key==="Escape"&&re()}return(f,z)=>{const ue=ds,g=ve,P=ke,Y=xs,le=Ee,Z=Pe,b=kt,V=Ue,ne=vt,se=Re,ye=pt,we=nt,ie=ms,_e=fs,$e=es,me=gs,Ce=ys,be=vs;return s(),_(be,{"storage-key":"test-run"},{folded:i(()=>[n("div",Us,[n("div",Ls,[o(ue,{status:t.testRun?.status??"",size:"sm"},null,8,["status"]),n("span",Es,[$(" Run #"+l(t.testRun?.id)+" ",1),e(M)?(s(),a(G,{key:0},[ut(n("input",{ref_key:"labelInputRef",ref:te,"onUpdate:modelValue":z[0]||(z[0]=Q=>Ie(v)?v.value=Q: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:O,onBlur:ee},null,544),[[ct,e(v)]]),e(y)?(s(),_(g,{key:0,name:"i-lucide-loader-circle",class:"size-3.5 text-zinc-400 animate-spin shrink-0"})):k("",!0)],64)):(s(),a(G,{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:ae},"— "+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:ae}," + label "))],64))]),t.testRun?.shardTotal&&t.testRun.shardTotal>1?(s(),_(P,{key:0,color:"neutral",variant:"soft",size:"sm",class:"shrink-0",title:`Shard ${t.testRun.shardsFinished??0}/${t.testRun.shardTotal}`},{default:i(()=>[o(g,{name:"i-lucide-layout-grid",class:"size-3 mr-1"}),$(" "+l(t.testRun.shardsFinished??0)+"/"+l(t.testRun.shardTotal),1)]),_:1},8,["title"])):k("",!0)]),n("div",Os,[n("span",Ks,[z[12]||(z[12]=$(" T: ",-1)),n("strong",Ws,l(t.displayProgress?.totalTests??t.testRun?.totalTests??0),1)]),n("span",Hs,[z[13]||(z[13]=$(" P: ",-1)),n("strong",null,l(t.displayProgress?.passedTests??t.testRun?.passedTests??0),1)]),n("span",Vs,[z[14]||(z[14]=$(" F: ",-1)),n("strong",null,l(t.displayProgress?.failedTests??t.testRun?.failedTests??0),1)]),n("span",Gs,[z[15]||(z[15]=$(" S: ",-1)),n("strong",null,l(t.displayProgress?.skippedTests??t.testRun?.skippedTests??0),1)]),n("span",Xs,[z[16]||(z[16]=$(" DNR: ",-1)),n("strong",null,l(t.testRun?.didNotRunTests??0),1)]),n("span",qs,[z[17]||(z[17]=$(" Fl: ",-1)),n("strong",null,l(t.testRun?.flakyTests??0),1)]),o(Y,{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"]),o(le,{ms:t.testRun?.duration,class:"text-xs text-zinc-400"},null,8,["ms"])])])]),default:i(()=>[n("div",Ys,[n("div",{class:q(e(B))},[o(we,{class:"shadow-xs h-full"},{default:i(()=>[n("div",Js,[n("div",Zs,[n("div",Qs,[o(ue,{status:t.testRun?.status??"",size:"md"},null,8,["status"]),n("div",en,[n("div",tn,[n("h2",sn,[$(" Run #"+l(t.testRun?.id)+" ",1),e(M)?(s(),a(G,{key:0},[ut(n("input",{ref_key:"labelInputRef",ref:te,"onUpdate:modelValue":z[1]||(z[1]=Q=>Ie(v)?v.value=Q: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:O,onBlur:ee},null,544),[[ct,e(v)]]),e(y)?(s(),_(g,{key:0,name:"i-lucide-loader-circle",class:"size-3.5 text-zinc-400 animate-spin shrink-0"})):k("",!0)],64)):(s(),a(G,{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:ae},"— "+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:ae}," + label "))],64)),o(Z,{topic:"run.summary"})]),t.testRun?.shardTotal&&t.testRun.shardTotal>1?(s(),_(P,{key:0,color:"neutral",variant:"soft",size:"sm",class:"shrink-0",title:`Shard ${t.testRun.shardsFinished??0}/${t.testRun.shardTotal}`},{default:i(()=>[o(g,{name:"i-lucide-layout-grid",class:"size-3 mr-1"}),$(" "+l(t.testRun.shardsFinished??0)+"/"+l(t.testRun.shardTotal),1)]),_:1},8,["title"])):k("",!0),t.testRun?.precedingMarker?(s(),_(ne,{key:1,text:`This run started after: ${t.testRun.precedingMarker.label}`},{default:i(()=>[o(V,{to:`/projects/${t.testRun.projectId}?tab=timeline`,class:"shrink-0 inline-flex items-center gap-1"},{default:i(()=>[z[18]||(z[18]=n("span",{class:"text-xs text-muted"},"After",-1)),o(b,{marker:t.testRun.precedingMarker,size:"xs"},null,8,["marker"])]),_:1},8,["to"])]),_:1},8,["text"])):k("",!0),n("span",nn,l(t.testRun?.project?.label??t.testRun?.project?.name)+" · Started "+l(("prettyDateFormat"in f?f.prettyDateFormat:e(bt))(t.testRun?.startTime)),1),o(ne,{text:e(H)?"Copied!":"Copy run summary"},{default:i(()=>[o(se,{size:"xs",variant:"ghost",color:"neutral",icon:e(H)?"i-lucide-check":"i-lucide-clipboard",class:"shrink-0 text-zinc-400 hover:text-zinc-600 dark:hover:text-zinc-300",onClick:z[2]||(z[2]=Q=>e(j)(U(),{toast:"Run summary copied"}))},null,8,["icon"])]),_:1},8,["text"]),e(S).length>0?(s(),_(ye,{key:2},{content:i(()=>[n("div",an,[z[20]||(z[20]=n("p",{class:"text-xs font-medium text-zinc-500 px-2 py-1"},"Mode",-1)),(s(),a(G,null,oe(["file-line","grep","file"],Q=>n("button",{key:Q,class:q(["w-full text-left px-2 py-1 text-sm rounded hover:bg-zinc-100 dark:hover:bg-zinc-800",e(A)===Q?"bg-primary/10 text-primary":""]),onClick:x=>A.value=Q},l(Q==="file-line"?"File:line":Q==="grep"?"Title (grep)":"File only"),11,on)),64))])]),default:i(()=>[o(se,{size:"xs",color:"warning",variant:"subtle",icon:e(d)?"i-lucide-check":"i-lucide-play",title:e(m),onClick:z[3]||(z[3]=Q=>c())},{default:i(()=>[...z[19]||(z[19]=[$(" Retry ",-1)])]),_:1},8,["icon","title"])]),_:1})):k("",!0)])])])]),n("div",ln,[n("button",{class:q(["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:z[4]||(z[4]=Q=>F("filter-status","all"))},[z[21]||(z[21]=n("p",{class:"text-xs font-medium text-zinc-500 uppercase tracking-wider"},"Total",-1)),n("p",rn,l(t.displayProgress?.totalTests??t.testRun?.totalTests??0),1)],2),n("div",un,[n("button",{class:q(["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:z[5]||(z[5]=Q=>F("filter-status","passed"))},[z[22]||(z[22]=n("p",{class:"text-xs font-medium text-emerald-700 dark:text-emerald-400 uppercase tracking-wider"}," Passed ",-1)),n("p",cn,l(t.displayProgress?.passedTests??t.testRun?.passedTests??0),1)],2),(t.testRun?.flakyTests??0)>0?(s(),a("button",{key:0,class:q(["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:z[6]||(z[6]=Q=>F("filter-status","flaky"))},[o(g,{name:"i-lucide-shuffle",class:"size-3"}),$(" "+l(t.testRun?.flakyTests??0),1)],2)):k("",!0)]),n("button",{class:q(["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:z[7]||(z[7]=Q=>F("filter-status","failed"))},[z[23]||(z[23]=n("p",{class:"text-xs font-medium text-rose-700 dark:text-rose-400 uppercase tracking-wider"},"Failed",-1)),n("p",dn,l(t.displayProgress?.failedTests??t.testRun?.failedTests??0),1)],2),n("button",{class:q(["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:z[8]||(z[8]=Q=>F("filter-status","skipped"))},[z[24]||(z[24]=n("p",{class:"text-xs font-medium text-zinc-500 uppercase tracking-wider"},"Skipped",-1)),n("p",mn,l(t.displayProgress?.skippedTests??t.testRun?.skippedTests??0),1)],2),n("button",{class:q(["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:z[9]||(z[9]=Q=>F("filter-status","didnotrun"))},[z[25]||(z[25]=n("p",{class:"text-xs font-medium text-amber-700 dark:text-amber-400 uppercase tracking-wider"}," Didn't run ",-1)),n("p",fn,l(t.testRun?.didNotRunTests??0),1)],2)]),n("div",null,[t.testRun?(s(),a("div",gn,[n("div",pn,[o(Y,{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",xn,[n("div",yn,[o(g,{name:"i-lucide-clock",class:"size-3.5 text-zinc-400"}),o(le,{ms:t.testRun?.duration,class:"font-medium"},null,8,["ms"])]),t.testRun?.avgTestDuration?(s(),a("div",hn,[o(g,{name:"i-lucide-gauge",class:"size-3.5 text-zinc-400"}),z[26]||(z[26]=n("span",{class:"text-zinc-500 hidden sm:inline"},"Avg",-1)),o(le,{ms:t.testRun.avgTestDuration,class:"font-medium"},null,8,["ms"])])):k("",!0),t.testRun?.p90TestDuration?(s(),a("div",vn,[o(g,{name:"i-lucide-arrow-up-right",class:"size-3.5 text-orange-500"}),z[27]||(z[27]=n("span",{class:"text-zinc-500 hidden sm:inline"},"P90",-1)),o(le,{ms:t.testRun.p90TestDuration,class:"font-medium text-orange-600 dark:text-orange-400","unit-class":"opacity-60"},null,8,["ms"])])):k("",!0),t.totalWastedTime&&t.totalWastedTime>0?(s(),a("div",kn,[o(g,{name:"i-lucide-clock",class:"size-3.5 text-amber-500"}),z[28]||(z[28]=n("span",{class:"text-zinc-500 hidden sm:inline"},"Wasted",-1)),o(le,{ms:t.totalWastedTime,class:"font-medium text-amber-600 dark:text-amber-400","unit-class":"opacity-60"},null,8,["ms"])])):k("",!0)])])):k("",!0)])])]),_:1})],2),e(r)?(s(),_(ie,{key:0,ci:t.testRun?.metadata?.ci,environment:t.testRun?.environment,"playwright-version":t.testRun?.playwrightVersion,"reporter-version":t.testRun?.reporterVersion,class:q(e(I))},null,8,["ci","environment","playwright-version","reporter-version","class"])):k("",!0),e(T)?(s(),_(_e,{key:1,scm:t.testRun.metadata.scm,class:q(e(I))},null,8,["scm","class"])):k("",!0),e(E)?(s(),_(me,{key:2,class:q(e(I)),title:"Storage",icon:"i-lucide-database",help:"run.reports",subtitle:e(w)?.totalFiles?`${e(w).totalFiles} files · ${("formatBytes"in f?f.formatBytes:e(Ze))(e(w).totalSize)}`:void 0},{default:i(()=>[t.finalizing?(s(),a("div",bn,[o(g,{name:"i-lucide-upload",class:"size-5 text-info shrink-0 animate-pulse"}),n("div",wn,[z[29]||(z[29]=n("div",{class:"flex items-center justify-between mb-1"},[n("span",{class:"text-sm font-medium"},"Finalizing test run"),n("span",{class:"text-xs text-zinc-500"},"Uploading reports & traces…")],-1)),o($e,{value:null,size:"sm",color:"info",class:"rounded-full animate-pulse"})])])):k("",!0),e(w)?.totalFiles?(s(),a("div",_n,[(s(!0),a(G,null,oe(t.allReports,Q=>(s(),a("div",{key:Q.label,class:"flex items-center justify-between gap-2 min-w-0"},[o(se,{href:("fileApiUrl"in f?f.fileApiUrl:e(bs))(Q.path,null,e(u).app?.baseURL),icon:("reportIcon"in f?f.reportIcon:e(ks))(Q.type),target:"_blank",size:"xs",variant:"outline",class:"min-w-0",ui:{label:"truncate"}},{default:i(()=>[$(l(Q.label),1)]),_:2},1032,["href","icon"]),n("span",$n,l(("formatBytes"in f?f.formatBytes:e(Ze))(Q.size)),1)]))),128)),e(w).testCaseFilesCount>0?(s(),a("div",Cn,[n("span",Tn,"Test files ("+l(e(w).testCaseFilesCount)+")",1),n("span",Rn,l(("formatBytes"in f?f.formatBytes:e(Ze))(e(w).testCaseFilesSize)),1)])):k("",!0)])):k("",!0)]),_:1},8,["class","subtitle"])):k("",!0),e(N)?(s(),_(me,{key:3,class:q(e(I)),title:"Other",icon:"i-lucide-tags",help:"run.metadata"},{default:i(()=>[n("div",zn,[t.testRun.metadata.tags&&t.testRun.metadata.tags.length>0?(s(),a("div",In,[n("div",Sn,[(s(!0),a(G,null,oe(t.testRun.metadata.tags,Q=>(s(),_(P,{key:Q,color:"neutral",variant:"soft",size:"sm"},{default:i(()=>[$(l(Q),1)]),_:2},1024))),128))])])):k("",!0),t.testRun.metadata.relatedIssue?(s(),a("p",Fn,[o(g,{name:"i-lucide-link",class:"w-3.5 h-3.5 text-zinc-400 shrink-0"}),n("span",null,l(t.testRun.metadata.relatedIssue),1)])):k("",!0),o(Ce,{"entity-type":"test_run","entity-id":t.testRun.id,links:t.testRun.links??null,onUpdated:z[10]||(z[10]=Q=>f.$emit("label-updated"))},null,8,["entity-id","links"]),t.testRun.metadata.customData?(s(),_(se,{key:2,size:"xs",variant:"ghost",color:"neutral",icon:t.showCustomData?"i-lucide-chevron-up":"i-lucide-chevron-down",onClick:z[11]||(z[11]=Q=>F("update:showCustomData",!t.showCustomData))},{default:i(()=>[...z[30]||(z[30]=[$(" Custom data ",-1)])]),_:1},8,["icon"])):k("",!0),t.showCustomData&&t.testRun.metadata.customData?(s(),a("div",Dn,[n("div",Pn,[n("pre",jn,l(JSON.stringify(t.testRun.metadata.customData,null,2)),1)])])):k("",!0)])]),_:1},8,["class"])):k("",!0)])]),_:1})}}}),Nn=Object.assign(Bn,{__name:"RunSummary"}),Mn={key:0,class:"inline-flex items-center gap-1 flex-wrap"},An=pe({__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 h=t;function C(T){return T==="fixme"||T==="slow"?"warning":T==="fail"?"error":T==="skip"?"neutral":T==="tag"?"primary":"info"}function F(T){switch(T){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 R(T){return T.type==="tag"?T.description??T.type:T.type}const u=D(()=>(h.annotations??[]).filter(T=>!_s(T.type))),w=D(()=>!!((h.tags?.length??0)>0||h.meta?.owner||h.meta?.priority||h.meta?.feature||h.meta?.link)),r=D(()=>h.mode==="parallel"||h.mode==="serial"||!!h.isNewRegression||!!h.isNewFlaky||u.value.length>0||w.value);return(T,E)=>{const N=ke,B=ve,I=zs;return e(r)?(s(),a("div",Mn,[t.mode==="parallel"?(s(),_(N,{key:0,color:"success",variant:"soft",size:"xs",class:"shrink-0"},{default:i(()=>[...E[0]||(E[0]=[$("parallel",-1)])]),_:1})):k("",!0),t.mode==="serial"?(s(),_(N,{key:1,color:"warning",variant:"soft",size:"xs",class:"shrink-0"},{default:i(()=>[...E[1]||(E[1]=[$("serial",-1)])]),_:1})):k("",!0),t.isNewRegression?(s(),_(N,{key:2,color:"error",variant:"solid",size:"xs",class:"uppercase tracking-wider shrink-0",title:"First run in which this test failed"},{default:i(()=>[...E[2]||(E[2]=[$(" NEW ",-1)])]),_:1})):k("",!0),t.isNewFlaky?(s(),_(N,{key:3,color:"info",variant:"solid",size:"xs",class:"uppercase tracking-wider shrink-0",title:"First run in which this test was flaky"},{default:i(()=>[...E[3]||(E[3]=[$(" FLAKY ",-1)])]),_:1})):k("",!0),(s(!0),a(G,null,oe(e(u),j=>(s(),_(N,{key:`${j.type}:${j.description??""}`,color:C(j.type),variant:"soft",size:"xs",title:j.type!=="tag"?j.description??void 0:void 0,class:"shrink-0 gap-1"},{default:i(()=>[F(j.type)?(s(),_(B,{key:0,name:F(j.type),class:"size-2.5 shrink-0"},null,8,["name"])):k("",!0),$(" "+l(R(j)),1)]),_:2},1032,["color","title"]))),128)),o(I,{tags:t.tags,meta:t.meta,"max-tags":t.maxTags},null,8,["tags","meta","max-tags"])])):k("",!0)}}}),Pt=Object.assign(An,{__name:"TestRowBadges"}),Un={class:"rounded-lg border border-default bg-default text-sm flex flex-col flex-1 min-h-0"},Ln={class:"flex items-center justify-end px-3 py-1.5 border-b border-default bg-elevated shrink-0"},En=["disabled","title"],On={class:"overflow-y-auto flex-1 min-h-0"},Kn=["onClick"],Wn={key:1,class:"font-medium truncate min-w-0 text-muted"},Hn={class:"flex items-center gap-1.5 sm:gap-2 shrink-0 tabular-nums"},Vn=["title"],Gn={class:"max-sm:sr-only"},Xn=["href","title","onClick"],qn={class:"truncate"},Yn={class:"flex items-center gap-1.5 sm:gap-2 shrink-0 ml-auto"},Jn={key:0,class:"text-xs text-info"},Zn={key:4,class:"inline-flex items-center gap-0.5 text-xs text-amber-600 dark:text-amber-400",title:"Wasted in fixed waits"},Qn={key:0,class:"text-center py-8 text-muted"},ea=pe({__name:"TestCasesTree",props:{testCases:{},suites:{},hasFilter:{type:Boolean},highlightedCaseId:{},projectKey:{},projectName:{}},setup(t){const h=t,C=D(()=>{const d=new Map;for(const S of h.suites)d.set(`${S.filePath}${S.suitePath.join("")}`,S);return d});function F(d){return d==="timedOut"||d==="timedout"?"failed":d}const R=["failed","passed","skipped","didnotrun","running"];function u(d){return R.filter(S=>d[S]>0).map(S=>({key:S,count:d[S],label:Fe(S)}))}function w(d){const S={passed:0,failed:0,skipped:0,didnotrun:0,running:0,total:0};for(const p of d){const c=F(p.status);c in S&&S[c]++,S.total++}return S}const r=K(new Set),T=D(()=>r.value.size===0);function E(d){return h.hasFilter?!0:!r.value.has(d)}function N(d){if(h.hasFilter)return;const S=new Set(r.value);S.has(d)?S.delete(d):S.add(d),r.value=S}function B(){const d=[],S=new Map;for(const p of h.testCases){const c=p.filePath??"unknown";S.has(c)||S.set(c,[]),S.get(c).push(p)}for(const[p,c]of S){d.push(`file:${p}`);const m=new Set;for(const U of c){const v=U.suitePath??[];for(let M=1;M<=v.length;M++)m.add(`group:${p}${v.slice(0,M).join("")}`)}for(const U of m)d.push(U)}return d}function I(){r.value=new Set(B())}function j(){r.value=new Set}function H(d,S,p,c,m){const U=S.filter(y=>(y.suitePath??[]).length===c.length),v=S.filter(y=>(y.suitePath??[]).length>c.length),M=new Map;for(const y of v){const J=(y.suitePath??[])[c.length];M.has(J)||M.set(J,[]),M.get(J).push(y)}for(const[y,J]of M){const te=[...c,y],ae=`group:${p}${te.join("")}`,ee=C.value.get(`${p}${te.join("")}`);d.push({kind:"group",depth:m,key:ae,label:y,stats:w(J),mode:ee?.mode??"default",annotations:ee?.annotations??[]}),E(ae)&&H(d,J,p,te,m+1)}for(const y of U)d.push({kind:"test",depth:m,key:`test:${y.id}`,test:y})}const A=D(()=>{const d=[],S=new Map;for(const p of h.testCases){const c=p.filePath??"unknown";S.has(c)||S.set(c,[]),S.get(c).push(p)}for(const[p,c]of[...S.entries()].sort(([m],[U])=>m.localeCompare(U))){const m=`file:${p}`;d.push({kind:"group",depth:0,key:m,label:p,stats:w(c)}),E(m)&&H(d,c,p,[],1)}return d});return(d,S)=>{const p=ve,c=Rt,m=Pt,U=zt,v=Ee,M=ke;return s(),a("div",Un,[n("div",Ln,[n("button",{class:q(["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":T.value?"Collapse all":"Expand all",onClick:S[0]||(S[0]=y=>T.value?I():j())},[o(p,{name:T.value?"i-lucide-fold-vertical":"i-lucide-unfold-vertical",class:"size-3.5"},null,8,["name"]),$(" "+l(T.value?"Collapse all":"Expand all"),1)],10,En)]),n("div",On,[(s(!0),a(G,null,oe(A.value,y=>(s(),a(G,{key:y.key},[y.kind==="group"?(s(),a("div",{key:0,class:q(["flex items-center gap-2 py-2 pr-4 border-b border-default last:border-b-0 select-none sticky",[y.depth===0?"bg-elevated":"bg-default",!t.hasFilter&&"cursor-pointer"]]),style:he({paddingLeft:`${y.depth*20+12}px`,top:`${y.depth*36}px`,zIndex:20-y.depth}),onClick:J=>N(y.key)},[o(p,{name:E(y.key)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5 text-muted shrink-0"},null,8,["name"]),o(p,{name:y.depth===0?"i-lucide-file-code-2":"i-lucide-folder-open",class:q(["size-4 shrink-0",y.depth===0?"text-blue-500":"text-amber-500"])},null,8,["name","class"]),y.depth===0?(s(),a("span",{key:0,class:"min-w-0",onClick:S[1]||(S[1]=Ne(()=>{},["stop"]))},[o(c,{"file-path":y.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",Wn,l(y.label),1)),y.depth>0?(s(),_(m,{key:2,mode:y.mode,annotations:y.annotations,class:"shrink-0"},null,8,["mode","annotations"])):k("",!0),S[2]||(S[2]=n("div",{class:"flex-1"},null,-1)),n("div",Hn,[(s(!0),a(G,null,oe(u(y.stats),J=>(s(),a("span",{key:J.key,class:q(["text-xs inline-flex items-center gap-0.5",[("getStatusTextClass"in d?d.getStatusTextClass:e(et))(J.key),J.key==="failed"?"font-medium":""]]),title:`${J.count} ${J.label}`},[o(p,{name:("getStatusIcon"in d?d.getStatusIcon:e(tt))(J.key),class:"size-3 shrink-0 sm:hidden"},null,8,["name"]),$(" "+l(J.count),1),n("span",Gn,l(J.label),1)],10,Vn))),128))])],14,Kn)):(s(),a("div",{key:1,class:q(["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===y.test.id?"animate-pulse bg-yellow-100 dark:bg-yellow-900/30":""]),style:he({paddingLeft:`${y.depth*20+12}px`})},[o(U,{browser:y.test.browser,size:"sm"},null,8,["browser"]),o(p,{name:("getStatusIcon"in d?d.getStatusIcon:e(tt))(y.test.status),class:q(["size-4 shrink-0",[("getStatusTextClass"in d?d.getStatusTextClass:e(et))(y.test.status),("isStatusInFlight"in d?d.isStatusInFlight:e(_t))(y.test.status)?"animate-spin":""]]),role:"img","aria-label":`Status: ${("formatStatusLabel"in d?d.formatStatusLabel:e(Fe))(y.test.status)}`,title:("formatStatusLabel"in d?d.formatStatusLabel:e(Fe))(y.test.status)},null,8,["name","class","aria-label","title"]),n("a",{href:`/test-run-cases/${y.test.id}`,class:"text-highlighted hover:text-primary hover:underline min-w-32 self-stretch flex items-center",title:y.test.title,onClick:Ne(J=>("navigateTo"in d?d.navigateTo:e(He))(`/test-run-cases/${y.test.id}`),["prevent"])},[n("span",qn,l(y.test.title),1)],8,Xn),o(m,{"is-new-regression":!!y.test.isNewRegression,"is-new-flaky":!!y.test.isNewFlaky,annotations:y.test.testAnnotations,tags:y.test.tags,meta:y.test.testMeta,"max-tags":3,class:"shrink-0"},null,8,["is-new-regression","is-new-flaky","annotations","tags","meta"]),n("div",Yn,[y.test.status==="running"?(s(),a("span",Jn,"In progress...")):y.test.duration?(s(),_(v,{key:1,ms:y.test.duration,class:"text-xs text-muted"},null,8,["ms"])):k("",!0),y.test.workerIndex!=null?(s(),_(M,{key:2,color:"neutral",variant:"soft",size:"xs",class:"font-mono",title:`Worker ${y.test.workerIndex}`},{default:i(()=>[$(" w"+l(y.test.workerIndex),1)]),_:2},1032,["title"])):k("",!0),(y.test.retries??0)>0?(s(),_(M,{key:3,color:"warning",variant:"soft",size:"xs"},{default:i(()=>[$(l(y.test.retries)+"x ",1)]),_:2},1024)):k("",!0),y.test.wastedTimeMs?(s(),a("span",Zn,[o(p,{name:"i-lucide-hourglass",class:"size-3 shrink-0"}),o(v,{ms:y.test.wastedTimeMs,"unit-class":"opacity-60","no-title":""},null,8,["ms"])])):k("",!0)])],6))],64))),128)),A.value.length===0?(s(),a("div",Qn,[o(p,{name:"i-lucide-search-x",class:"size-6 mx-auto mb-2 text-zinc-300 dark:text-zinc-600"}),S[3]||(S[3]=n("p",{class:"text-sm"},"No test cases match your filters.",-1))])):k("",!0)])])}}}),ta=Object.assign(ea,{__name:"TestCasesTree"}),sa={class:"flex flex-col min-h-0"},na={class:"flex items-center rounded-md border border-default overflow-hidden"},aa={key:0,class:"text-sm text-zinc-500 tabular-nums inline-flex items-center gap-1"},oa={key:1,class:"text-sm text-zinc-500 tabular-nums inline-flex items-center gap-1"},la={class:"flex flex-wrap items-center gap-1"},ia=["onClick"],ra={key:2,class:"flex items-center gap-1 md:hidden"},ua={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"},ca=["aria-rowcount"],da=["aria-sort","aria-label","title","onClick"],ma={key:1,class:"truncate"},fa={class:"flex items-start gap-2"},ga=["href","onClick"],pa={class:"pl-6 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-muted"},xa={key:0,class:"text-info"},ya={key:4,class:"inline-flex items-center gap-0.5 text-amber-600 dark:text-amber-400",title:"Wasted in fixed waits"},ha={class:"px-3 py-2 flex items-center min-w-0",role:"cell"},va={class:"px-3 py-2 min-w-0 space-y-0.5",role:"cell"},ka={class:"flex items-center gap-1.5 min-w-0"},ba=["href","title","onClick"],wa={class:"px-3 py-2 flex items-center",role:"cell"},_a={class:"px-3 py-2 flex items-center whitespace-nowrap",role:"cell"},$a={key:0,class:"text-info text-xs"},Ca={class:"px-3 py-2 flex items-center",role:"cell"},Ta={class:"px-3 py-2 flex items-center tabular-nums",role:"cell"},Ra={key:0,class:"px-3 py-2 flex items-center whitespace-nowrap",role:"cell"},za={key:1,class:"text-zinc-400"},Ia={class:"flex-1 min-h-0 flex items-center justify-center py-10 text-sm text-zinc-500"},Sa={key:1,class:"text-center py-10 text-zinc-500"},Fa={key:2,class:"text-center py-10 text-zinc-500"},Ke="natural",Da=pe({__name:"TestCasesList",props:ss({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:h}){const{treeView:C,setTreeView:F}=Is("test-cases"),R=t,u=Je(t,"search"),w=Je(t,"activeStatuses"),r=Je(t,"browserFilter"),T=K(!1),E=K(!1),N=[{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 B(g){w.value.indexOf(g)>=0?w.value=w.value.filter(Y=>Y!==g):w.value=[...w.value,g]}const I=D(()=>{const g=new Set;for(const Y of R.testCases){const le=Y.browser?.projectName;le&&g.add(le)}const P=[{label:"All browsers",value:"all"}];for(const Y of[...g].sort())P.push({label:Y,value:Y});return P});function j(g,P){return P==="failed"?g.status==="failed"||g.status==="timedOut"||g.status==="timedout":P==="flaky"?(g.retries??0)>0:g.status===P}const H=D(()=>{let g=R.testCases;if(R.failureClusterFilter!=null&&(g=g.filter(P=>P.failureClusterId===R.failureClusterFilter)),w.value.length>0&&(g=g.filter(P=>w.value.some(Y=>j(P,Y)))),r.value!=="all"&&(g=g.filter(P=>P.browser?.projectName===r.value)),u.value){const P=u.value.toLowerCase();g=g.filter(Y=>Y.title.toLowerCase().includes(P)||Y.location&&Y.location.toLowerCase().includes(P))}return T.value&&(g=g.filter(P=>P.isNewRegression)),E.value&&(g=g.filter(P=>P.isNewFlaky)),g}),A=K(null),d=K("asc");function S(g){A.value!==g?(A.value=g,d.value="asc"):d.value==="asc"?d.value="desc":A.value=null}function p(g){return A.value!==g?"i-lucide-chevrons-up-down":d.value==="asc"?"i-lucide-chevron-up":"i-lucide-chevron-down"}function c(g,P){switch(P){case"browser":return g.browser?.projectName??"";case"title":return g.title??"";case"status":return g.status??"";case"duration":return g.duration??0;case"workerIndex":return g.workerIndex??-1;case"retries":return g.retries??0;case"wastedTimeMs":return g.wastedTimeMs??0;default:return""}}const m=D(()=>{const g=H.value,P=A.value;if(!P)return g;const Y=d.value==="asc"?1:-1;return[...g].sort((le,Z)=>{const b=c(le,P),V=c(Z,P);return typeof b=="number"&&typeof V=="number"?(b-V)*Y:String(b).localeCompare(String(V))*Y})}),U=D(()=>R.testCases.some(g=>(g.wastedTimeMs??0)>0)),v=D(()=>{const g=[{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 U.value&&g.push({key:"wastedTimeMs",label:"Wasted",sortable:!0,width:"6rem",align:"left"}),g}),M=D(()=>[{label:"Run order",value:Ke},...v.value.map(g=>({label:g.label,value:g.key}))]),y=D({get:()=>A.value??Ke,set:g=>{A.value=g===Ke?null:g,g!==Ke&&(d.value="asc")}}),J=D(()=>v.value.map(g=>g.width).join(" ")),te=D(()=>U.value?"47.5rem":"41.5rem"),ae=D(()=>u.value!==""||w.value.length>0||r.value!=="all"||R.failureClusterFilter!=null),ee=K(null),re=K(!1),O=K(null);function f(g){return g.scrollHeight-g.scrollTop-g.clientHeight<50}function z(g){const P=g.target;P&&(re.value=!f(P))}ge(()=>R.isLive,g=>{g||(re.value=!1)}),ge(()=>m.value.length,()=>{!R.isLive||re.value||De(()=>ee.value?.scrollToBottom())});function ue(g){F(!1),O.value=g;const P=()=>{const Y=m.value.findIndex(le=>le.id===g);Y>=0&&ee.value?.scrollToItem(Y,{behavior:"smooth"})};De(()=>{ee.value?P():setTimeout(P,60),setTimeout(()=>{O.value=null},3e3)})}return h({scrollToCase:ue}),(g,P)=>{const Y=ve,le=Pe,Z=ts,b=Ts,V=Tt,ne=Re,se=Rs,ye=ta,we=zt,ie=Rt,_e=Pt,$e=Ee,me=ke,Ce=dt("DynamicScrollerItem"),be=dt("DynamicScroller"),Q=yt;return s(),a("div",sa,[o(se,{class:"mb-4 shrink-0"},{start:i(()=>[n("div",na,[n("button",{class:q(["px-2 py-1 text-xs transition-colors",e(C)?"text-muted hover:bg-elevated/60":"bg-primary text-white dark:text-white"]),title:"Flat list",onClick:P[0]||(P[0]=x=>e(F)(!1))},[o(Y,{name:"i-lucide-list",class:"size-3.5"})],2),n("button",{class:q(["px-2 py-1 text-xs transition-colors",e(C)?"bg-primary text-white dark:text-white":"text-muted hover:bg-elevated/60"]),title:"Tree view",onClick:P[1]||(P[1]=x=>e(F)(!0))},[o(Y,{name:"i-lucide-folder-tree",class:"size-3.5"})],2)]),t.isLive?(s(),a("span",aa,[$(l(t.testCases.length)+" completed ",1),o(le,{topic:"run.live"})])):(s(),a("span",oa,[$(l(m.value.length)+l(m.value.length!==t.testCases.length?` / ${t.testCases.length}`:"")+" cases ",1),o(le,{topic:"run.test-cases"})]))]),default:i(()=>[o(Z,{modelValue:u.value,"onUpdate:modelValue":P[2]||(P[2]=x=>u.value=x),placeholder:"Search test cases...",icon:"i-lucide-search",size:"sm",class:"min-w-48 max-sm:flex-1"},null,8,["modelValue"]),n("div",la,[(s(),a(G,null,oe(N,x=>n("button",{key:x.value,class:q(["inline-flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium transition-colors whitespace-nowrap",w.value.includes(x.value)?x.color==="green"?"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400":x.color==="red"?"bg-rose-100 text-rose-700 dark:bg-rose-900/30 dark:text-rose-400":x.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:ze=>B(x.value)},[n("span",{class:q(["size-2 rounded-full shrink-0",x.color==="green"?"bg-emerald-500":x.color==="red"?"bg-rose-500":x.color==="orange"?"bg-orange-500":"bg-zinc-400"])},null,2),$(" "+l(x.label),1)],10,ia)),64))]),o(b,{modelValue:r.value,"onUpdate:modelValue":P[3]||(P[3]=x=>r.value=x),items:I.value,size:"sm",class:"w-36"},null,8,["modelValue","items"]),t.isLive?k("",!0):(s(),_(V,{key:0,modelValue:T.value,"onUpdate:modelValue":P[4]||(P[4]=x=>T.value=x),label:"New regressions",size:"sm"},null,8,["modelValue"])),t.isLive?k("",!0):(s(),_(V,{key:1,modelValue:E.value,"onUpdate:modelValue":P[5]||(P[5]=x=>E.value=x),label:"New flaky",size:"sm"},null,8,["modelValue"])),e(C)?k("",!0):(s(),a("div",ra,[o(b,{modelValue:y.value,"onUpdate:modelValue":P[6]||(P[6]=x=>y.value=x),items:M.value,size:"sm",class:"w-32","aria-label":"Sort cases by"},null,8,["modelValue","items"]),o(ne,{size:"sm",variant:"outline",color:"neutral",disabled:A.value===null,icon:d.value==="asc"?"i-lucide-arrow-up-narrow-wide":"i-lucide-arrow-down-wide-narrow",title:d.value==="asc"?"Sorted ascending":"Sorted descending","aria-label":d.value==="asc"?"Sorted ascending":"Sorted descending",onClick:P[7]||(P[7]=x=>d.value=d.value==="asc"?"desc":"asc")},null,8,["disabled","icon","title","aria-label"])]))]),_:1}),e(C)&&t.testCases.length>0?(s(),_(ye,{key:0,"test-cases":m.value,suites:t.suites,"has-filter":ae.value,"highlighted-case-id":O.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(C)?k("",!0):(s(),a(G,{key:1},[m.value.length>0?(s(),a("div",ua,[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:he({"--grid-min-width":te.value})},[n("div",{class:"hidden md:grid shrink-0 bg-elevated/50 border-b border-default",role:"row",style:he({gridTemplateColumns:J.value})},[(s(!0),a(G,null,oe(v.value,x=>(s(),a(G,{key:x.key},[x.sortable?(s(),a("button",{key:0,type:"button",role:"columnheader","aria-sort":A.value===x.key?d.value==="asc"?"ascending":"descending":"none","aria-label":x.icon?x.label:void 0,title:x.icon?x.label:void 0,class:q(["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",x.align==="right"?"justify-end":""]),onClick:ze=>S(x.key)},[x.icon?(s(),_(Y,{key:0,name:x.icon,class:"shrink-0 size-4"},null,8,["name"])):(s(),a("span",ma,l(x.label),1)),o(Y,{name:p(x.key),class:q(["shrink-0 size-3.5",A.value===x.key?"":"opacity-40"])},null,8,["name","class"])],10,da)):(s(),a("div",{key:1,role:"columnheader",class:q(["px-3 py-2 text-sm font-semibold",x.align==="right"?"text-right":""])},l(x.label),3))],64))),128))],4),o(Q,null,{fallback:i(()=>[n("div",Ia,[o(Y,{name:"i-lucide-loader-circle",class:"size-4 mr-2 animate-spin"}),P[8]||(P[8]=$(" Loading test cases… ",-1))])]),default:i(()=>[o(be,{ref_key:"scrollerRef",ref:ee,items:m.value,"min-item-size":44,"key-field":"id",role:"rowgroup",class:"flex-1 min-h-0",onScrollPassive:z},{default:i(({item:x,index:ze,active:qe})=>[o(Ce,{item:x,active:qe,"size-dependencies":[x.title,x.location,x.isNewRegression,x.isNewFlaky,x.testAnnotations,x.tags],"data-index":ze},{default:i(()=>[n("div",{class:q(["md:hidden border-b border-default px-3 py-2.5 space-y-1.5 text-sm transition-colors",O.value===x.id?"animate-pulse bg-yellow-100 dark:bg-yellow-900/30":""]),role:"row"},[n("div",fa,[o(Y,{name:("getStatusIcon"in g?g.getStatusIcon:e(tt))(x.status),class:q(["size-4 shrink-0 mt-0.5",[("getStatusTextClass"in g?g.getStatusTextClass:e(et))(x.status),("isStatusInFlight"in g?g.isStatusInFlight:e(_t))(x.status)?"animate-spin":""]]),role:"img","aria-label":`Status: ${("formatStatusLabel"in g?g.formatStatusLabel:e(Fe))(x.status)}`,title:("formatStatusLabel"in g?g.formatStatusLabel:e(Fe))(x.status)},null,8,["name","class","aria-label","title"]),n("a",{href:`/test-run-cases/${x.id}`,class:"text-highlighted hover:text-primary hover:underline font-medium flex-1 min-w-0",onClick:Ne(Oe=>("navigateTo"in g?g.navigateTo:e(He))(`/test-run-cases/${x.id}`),["prevent"])},l(x.title),9,ga),o(we,{browser:x.browser,size:"sm",class:"mt-0.5"},null,8,["browser"])]),x.location?(s(),_(ie,{key:0,location:x.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"])):k("",!0),o(_e,{"is-new-regression":!!x.isNewRegression,"is-new-flaky":!!x.isNewFlaky,annotations:x.testAnnotations,tags:x.tags,meta:x.testMeta,"max-tags":3,class:"pl-6"},null,8,["is-new-regression","is-new-flaky","annotations","tags","meta"]),n("div",pa,[x.status==="running"?(s(),a("span",xa,"In progress...")):x.duration?(s(),_($e,{key:1,ms:x.duration},null,8,["ms"])):k("",!0),x.workerIndex!=null?(s(),_(me,{key:2,color:"neutral",variant:"soft",size:"xs",class:"font-mono",title:`Worker ${x.workerIndex}`},{default:i(()=>[$(" w"+l(x.workerIndex),1)]),_:2},1032,["title"])):k("",!0),(x.retries??0)>0?(s(),_(me,{key:3,color:"warning",variant:"soft",size:"xs"},{default:i(()=>[$(l(x.retries)+"x ",1)]),_:2},1024)):k("",!0),x.wastedTimeMs?(s(),a("span",ya,[o(Y,{name:"i-lucide-hourglass",class:"size-3 shrink-0"}),o($e,{ms:x.wastedTimeMs,"unit-class":"opacity-60","no-title":""},null,8,["ms"])])):k("",!0)])],2),n("div",{class:q(["hidden md:grid items-center border-b border-default text-sm transition-colors hover:bg-zinc-50 dark:hover:bg-zinc-900/50",O.value===x.id?"animate-pulse bg-yellow-100 dark:bg-yellow-900/30":""]),role:"row",style:he({gridTemplateColumns:J.value})},[n("div",ha,[o(we,{browser:x.browser},null,8,["browser"])]),n("div",va,[n("div",ka,[n("a",{href:`/test-run-cases/${x.id}`,class:"text-highlighted hover:text-primary hover:underline font-medium truncate",title:x.title,onClick:Ne(Oe=>("navigateTo"in g?g.navigateTo:e(He))(`/test-run-cases/${x.id}`),["prevent"])},l(x.title),9,ba),o(_e,{"is-new-regression":!!x.isNewRegression,"is-new-flaky":!!x.isNewFlaky,annotations:x.testAnnotations,tags:x.tags,meta:x.testMeta,"max-tags":3,class:"shrink-0"},null,8,["is-new-regression","is-new-flaky","annotations","tags","meta"])]),x.location?(s(),_(ie,{key:0,location:x.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"])):k("",!0)]),n("div",wa,[o(me,{color:("getStatusColor"in g?g.getStatusColor:e(st))(x.status==="timedOut"||x.status==="timedout"?"failed":x.status),variant:"subtle",class:"capitalize"},{default:i(()=>[$(l(("formatStatusLabel"in g?g.formatStatusLabel:e(Fe))(x.status)),1)]),_:2},1032,["color"])]),n("div",_a,[x.status==="running"?(s(),a("span",$a,"In progress...")):(s(),_($e,{key:1,ms:x.duration,fallback:""},null,8,["ms"]))]),n("div",Ca,[x.workerIndex!=null?(s(),_(me,{key:0,color:"neutral",variant:"soft",class:"font-mono text-xs"},{default:i(()=>[$(l(x.workerIndex),1)]),_:2},1024)):k("",!0)]),n("div",Ta,l(x.retries&&x.retries>0?x.retries:""),1),U.value?(s(),a("div",Ra,[x.wastedTimeMs?(s(),_($e,{key:0,ms:x.wastedTimeMs,class:"text-amber-600 dark:text-amber-400","unit-class":"opacity-60"},null,8,["ms"])):(s(),a("span",za,"—"))])):k("",!0)],6)]),_:2},1032,["item","active","size-dependencies","data-index"])]),_:1},8,["items"])]),_:1})],12,ca)])):t.testCases.length===0?(s(),a("div",Sa,[o(Y,{name:"i-lucide-beaker",class:"size-8 mx-auto mb-2 text-zinc-300 dark:text-zinc-600"}),P[9]||(P[9]=n("p",null,"No test cases recorded for this run.",-1))])):(s(),a("div",Fa,[o(Y,{name:"i-lucide-search-x",class:"size-8 mx-auto mb-2 text-zinc-300 dark:text-zinc-600"}),P[10]||(P[10]=n("p",null,"No test cases match your filters.",-1))]))],64))])}}}),Pa=Object.assign(Da,{__name:"TestCasesList"}),ja={key:2,class:"p-4"},Ba={key:3,class:"p-4"},Na={key:4,class:"p-4"},Ma={key:5,class:"space-y-6 p-4"},Aa={class:"flex items-center gap-1.5 text-sm text-muted"},Ua={class:"grid grid-cols-1 sm:grid-cols-3 gap-4"},La={class:"space-y-1"},Ea={class:"text-xl font-semibold"},Oa={key:0},Ka={key:1},Wa={class:"space-y-1"},Ha={key:1,class:"text-xl font-semibold text-muted"},Va={class:"space-y-1"},Ga={class:"space-y-0.5 text-sm"},Xa={key:0,class:"text-red-500"},qa={key:1,class:"text-green-600"},Ya={key:2,class:"text-purple-500"},Ja={key:3,class:"text-muted"},Za={class:"space-y-1"},Qa={class:"font-medium text-primary hover:underline truncate"},eo={class:"text-gray-400 text-xs ml-auto shrink-0"},to={class:"space-y-1"},so={class:"font-medium text-primary hover:underline truncate"},no={class:"space-y-1"},ao={class:"font-medium text-primary hover:underline truncate"},oo={class:"space-y-1"},lo={class:"font-medium text-primary hover:underline truncate"},io={class:"text-gray-400 text-xs ml-auto shrink-0"},ro={class:"space-y-1"},uo={class:"font-medium text-primary hover:underline truncate"},co={class:"grid grid-cols-2 gap-4"},mo={key:0},fo={class:"space-y-1"},go={class:"text-red-500 font-mono shrink-0"},po={class:"truncate text-primary hover:underline"},xo={key:1},yo={class:"space-y-1"},ho={class:"text-green-500 font-mono shrink-0"},vo={class:"truncate text-primary hover:underline"},ko={class:"space-y-1"},bo={class:"flex-1 truncate text-primary hover:underline"},wo={class:"text-gray-500 font-mono text-xs shrink-0"},_o={class:"w-24 h-2 rounded-full bg-gray-100 shrink-0"},$o={key:0,class:"flex items-center gap-1.5 text-xs text-amber-600 mb-3"},Co={class:"flex items-end gap-2 h-20"},To={class:"text-xs text-gray-500"},Ro={class:"text-xs text-gray-400"},zo={class:"space-y-1"},Io={class:"truncate"},So=pe({__name:"RunInsights",props:{testRunId:{},runStatus:{},refreshKey:{}},setup(t){const h=t,C=D(()=>{if(!u.value)return"";const B=u.value.passRateDelta;return B>0?"text-green-600":B<0?"text-red-600":"text-muted"}),F=D(()=>{if(!u.value)return"";const B=u.value.passRateDelta;return B>0?"i-lucide-trending-up":B<0?"i-lucide-trending-down":"i-lucide-minus"}),R=D(()=>u.value?.avgDurationDelta==null?"":u.value.avgDurationDelta>0?"text-red-600":"text-green-600"),u=K(null),w=K(!1),r=K(null),T=D(()=>h.runStatus==="running"||h.runStatus==="initialising"||h.runStatus==="finalizing");async function E(){if(!h.testRunId||T.value){u.value=null;return}w.value=!0,r.value=null;try{u.value=await $fetch(`/api/test-runs/${h.testRunId}/insights`)}catch(B){console.error("[RunInsights] failed to load",B),r.value=B?.data?.message||B?.message||"Failed to load insights"}finally{w.value=!1}}ge(()=>h.testRunId,E,{immediate:!0}),ge(()=>h.refreshKey,(B,I)=>{B!==I&&B!==void 0&&E()});function N(B){return B==null?"—":B<1e3?`${B}ms`:`${(B/1e3).toFixed(1)}s`}return(B,I)=>{const j=Re,H=Ss,A=It,d=St,S=ve,p=Pe,c=Fs,m=ke,U=Ue;return e(r)?(s(),_(H,{key:0,text:e(r),padded:""},{action:i(()=>[o(j,{size:"sm",onClick:E},{default:i(()=>[...I[0]||(I[0]=[$("Retry",-1)])]),_:1})]),_:1},8,["text"])):e(w)?(s(),_(A,{key:1,padded:""})):e(T)?(s(),a("div",ja,[o(d,{icon:"i-lucide-loader-circle",text:"Run in progress"},{default:i(()=>[...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(u)?e(u).hasBaseline?(s(),a("div",Ma,[n("div",Aa,[o(S,{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)),o(p,{topic:"run.insights"})]),o(c,{icon:"i-lucide-bar-chart-3","icon-class":"text-blue-500",title:"Run summary"},{default:i(()=>[n("div",Ua,[n("div",La,[I[4]||(I[4]=n("p",{class:"text-xs text-muted"},"Pass rate",-1)),n("p",Ea,l(e(u).passRate)+"%",1),n("div",{class:q(["flex items-center gap-1 text-xs",e(C)])},[o(S,{name:e(F),class:"size-3.5"},null,8,["name"]),e(u).passRateDelta!==0?(s(),a("span",Oa,l(e(u).passRateDelta>0?"+":"")+l(e(u).passRateDelta)+"pp vs baseline",1)):(s(),a("span",Ka,"Same as baseline"))],2)]),n("div",Wa,[I[5]||(I[5]=n("p",{class:"text-xs text-muted"},"Avg duration",-1)),e(u).avgDurationDelta!==null?(s(),a("p",{key:0,class:q(["text-xl font-semibold",e(R)])},l(e(u).avgDurationDelta>0?"+":"")+l(e(u).avgDurationDelta)+"% ",3)):(s(),a("p",Ha,"—")),I[6]||(I[6]=n("p",{class:"text-xs text-muted"},"vs baseline (passing tests)",-1))]),n("div",Va,[I[7]||(I[7]=n("p",{class:"text-xs text-muted"},"Changes",-1)),n("div",Ga,[e(u).newRegressions.length>0?(s(),a("p",Xa," +"+l(e(u).newRegressions.length)+" regressed ",1)):k("",!0),e(u).recovered.length>0?(s(),a("p",qa,"+"+l(e(u).recovered.length)+" fixed",1)):k("",!0),e(u).newFlaky.length>0?(s(),a("p",Ya,"+"+l(e(u).newFlaky.length)+" flaky",1)):k("",!0),!e(u).newRegressions.length&&!e(u).recovered.length&&!e(u).newFlaky.length?(s(),a("p",Ja," No status changes ")):k("",!0)])])])]),_:1}),e(u).newRegressions.length>0?(s(),_(c,{key:0,icon:"i-lucide-alert-circle","icon-class":"text-red-500",title:"New regressions",count:e(u).newRegressions.length},{default:i(()=>[n("div",Za,[(s(!0),a(G,null,oe(e(u).newRegressions,v=>(s(),_(U,{key:v.testRunsCaseId,to:`/test-run-cases/${v.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:i(()=>[o(m,{color:"error",variant:"solid",size:"xs"},{default:i(()=>[...I[8]||(I[8]=[$("NEW",-1)])]),_:1}),n("span",Qa,l(v.title),1),n("span",eo,l(N(v.duration)),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):k("",!0),e(u).recurrences.length>0?(s(),_(c,{key:1,icon:"i-lucide-refresh-cw","icon-class":"text-amber-500",title:"Recurring failures",count:e(u).recurrences.length},{default:i(()=>[n("div",to,[(s(!0),a(G,null,oe(e(u).recurrences,v=>(s(),_(U,{key:v.testRunsCaseId,to:`/test-run-cases/${v.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:i(()=>[o(m,{color:"warning",variant:"solid",size:"xs"},{default:i(()=>[...I[9]||(I[9]=[$("RECURRING",-1)])]),_:1}),n("span",so,l(v.title),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):k("",!0),e(u).recovered.length>0?(s(),_(c,{key:2,icon:"i-lucide-check-circle","icon-class":"text-green-500",title:"Fixed tests",count:e(u).recovered.length},{default:i(()=>[n("div",no,[(s(!0),a(G,null,oe(e(u).recovered,v=>(s(),_(U,{key:v.testRunsCaseId,to:`/test-run-cases/${v.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:i(()=>[o(m,{color:"success",variant:"solid",size:"xs"},{default:i(()=>[...I[10]||(I[10]=[$("FIXED",-1)])]),_:1}),n("span",ao,l(v.title),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):k("",!0),e(u).newFlaky.length>0?(s(),_(c,{key:3,icon:"i-lucide-flask","icon-class":"text-purple-500",title:"New flaky tests",count:e(u).newFlaky.length},{default:i(()=>[n("div",oo,[(s(!0),a(G,null,oe(e(u).newFlaky,v=>(s(),_(U,{key:v.testRunsCaseId,to:`/test-run-cases/${v.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:i(()=>[o(m,{color:"info",variant:"solid",size:"xs"},{default:i(()=>[...I[11]||(I[11]=[$("FLAKY",-1)])]),_:1}),n("span",lo,l(v.title),1),n("span",io,l(N(v.duration)),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):k("",!0),e(u).flakyOnRetry.length>0?(s(),_(c,{key:4,icon:"i-lucide-repeat","icon-class":"text-orange-500",title:"Passed on retry",count:e(u).flakyOnRetry.length,subtitle:"Tests that passed but needed one or more retries"},{default:i(()=>[n("div",ro,[(s(!0),a(G,null,oe(e(u).flakyOnRetry,v=>(s(),_(U,{key:v.testRunsCaseId,to:`/test-run-cases/${v.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:i(()=>[o(m,{color:"warning",variant:"subtle",size:"xs"},{default:i(()=>[$("×"+l(v.retries),1)]),_:2},1024),n("span",uo,l(v.title),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):k("",!0),e(u).mostRegressed.length>0||e(u).mostImproved.length>0?(s(),_(c,{key:5,icon:"i-lucide-trending-up","icon-class":"text-blue-500",title:"Performance changes"},{default:i(()=>[n("div",co,[e(u).mostRegressed.length>0?(s(),a("div",mo,[I[12]||(I[12]=n("p",{class:"text-xs font-medium text-red-500 mb-2"},"Most regressed",-1)),n("div",fo,[(s(!0),a(G,null,oe(e(u).mostRegressed,v=>(s(),_(U,{key:v.testRunsCaseId,to:`/test-run-cases/${v.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:i(()=>[n("span",go,"+"+l(v.pctChange)+"%",1),n("span",po,l(v.title),1)]),_:2},1032,["to"]))),128))])])):k("",!0),e(u).mostImproved.length>0?(s(),a("div",xo,[I[13]||(I[13]=n("p",{class:"text-xs font-medium text-green-500 mb-2"},"Most improved",-1)),n("div",yo,[(s(!0),a(G,null,oe(e(u).mostImproved,v=>(s(),_(U,{key:v.testRunsCaseId,to:`/test-run-cases/${v.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:i(()=>[n("span",ho,l(v.pctChange)+"%",1),n("span",vo,l(v.title),1)]),_:2},1032,["to"]))),128))])])):k("",!0)])]),_:1})):k("",!0),e(u).slowestTests.length>0?(s(),_(c,{key:6,icon:"i-lucide-clock","icon-class":"text-amber-500",title:"Slowest tests"},{default:i(()=>[n("div",ko,[(s(!0),a(G,null,oe(e(u).slowestTests,v=>(s(),_(U,{key:v.testRunsCaseId,to:`/test-run-cases/${v.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:i(()=>[n("div",bo,l(v.title),1),n("div",wo,l(N(v.duration)),1),n("div",_o,[n("div",{class:"h-full rounded-full bg-amber-400",style:he({width:Math.min(100,v.duration/(e(u).slowestTests[0]?.duration||1)*100)+"%"})},null,4)])]),_:2},1032,["to"]))),128))])]),_:1})):k("",!0),e(u).workerImbalance.length>1?(s(),_(c,{key:7,icon:"i-lucide-users","icon-class":"text-gray-500",title:"Worker distribution"},{default:i(()=>[e(u).workerImbalanceWarning?(s(),a("div",$o,[o(S,{name:"i-lucide-alert-triangle",class:"size-3.5 shrink-0"}),n("span",null,l(e(u).workerImbalanceWarning),1)])):k("",!0),n("div",Co,[(s(!0),a(G,null,oe(e(u).workerImbalance,v=>(s(),a("div",{key:v.workerIndex,class:"flex-1 flex flex-col items-center gap-1"},[n("span",To,l(v.count),1),n("div",{class:"w-full bg-blue-400 rounded-t",style:he({height:Math.max(4,v.count/Math.max(...e(u).workerImbalance.map(M=>M.count))*60)+"px"})},null,4),n("span",Ro,"W"+l(v.workerIndex),1)]))),128))])]),_:1})):k("",!0),e(u).clusterNew.length>0?(s(),_(c,{key:8,icon:"i-lucide-layers","icon-class":"text-purple-500",title:"New failure clusters",count:e(u).clusterNew.length},{default:i(()=>[n("div",zo,[(s(!0),a(G,null,oe(e(u).clusterNew,v=>(s(),_(U,{key:v.clusterId,to:`/failure-clusters/${v.clusterId}`,class:"flex items-center gap-2 text-sm text-primary hover:underline"},{default:i(()=>[n("span",Io,l(v.signature),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):k("",!0)])):(s(),a("div",Na,[o(d,{icon:"i-lucide-git-compare-arrows",text:"No baseline run found"},{default:i(()=>[...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",Ba,[o(d,{text:"No insights yet"})]))}}}),Fo=Object.assign(So,{__name:"RunInsights"}),Do=pe({__name:"ClusterDiagnosis",props:{clusterId:{}},setup(t){return(h,C)=>{const F=Ds;return s(),_(F,{"cluster-id":t.clusterId},null,8,["cluster-id"])}}}),Po=Object.assign(Do,{__name:"ClusterDiagnosis"}),jo={class:"pt-4 space-y-3"},Bo={key:0,class:"flex items-center justify-center py-8 text-gray-500 gap-2"},No={class:"flex items-center justify-between gap-3"},Mo={class:"text-sm text-gray-500 dark:text-gray-400 inline-flex items-center gap-1"},Ao={class:"min-w-0 space-y-0.5"},Uo=["title"],Lo={key:0,class:"text-xs text-gray-500 truncate block"},Eo={class:"font-mono"},Oo={key:1,class:"text-gray-400 text-xs"},Ko={key:1,class:"text-gray-400 text-xs"},Wo={class:"text-sm tabular-nums"},Ho={key:0,class:"flex flex-wrap gap-1"},Vo={key:1,class:"text-gray-400 text-xs"},Go={key:0,class:"flex items-center gap-1 text-xs text-gray-500"},Xo={key:2,class:"text-gray-400 text-xs"},qo={key:0,class:"text-xs font-medium text-warning-500"},Yo={key:1,class:"text-sm text-gray-500 whitespace-nowrap"},Jo={key:0,class:"ml-1 text-xs text-gray-400"},Zo={class:"flex justify-end gap-2"},Qo={key:2,class:"flex flex-col items-center justify-center py-8 text-gray-500 gap-2"},el=pe({__name:"FailureGroups",props:{refreshKey:{}},emits:["selectCluster"],async setup(t,{emit:h}){let C,F;const R=h,u=t,r=Le().params.id,{data:T,pending:E,refresh:N}=([C,F]=Me(()=>Ae(`/api/test-runs/${r}/failure-groups`,{lazy:!0,server:!1},"$qddF1IOQ64")),C=await C,F(),C);ge(()=>u.refreshKey,(c,m)=>{c!==m&&c!==void 0&&N()});const B=K(null),{copy:I,copied:j}=at(),H=D(()=>T.value?T.value.flatMap(c=>c.cases.filter(m=>!m.passedOnRetry).map(m=>({filePath:m.filePath,title:m.title,line:null,projectName:null}))):[]),A=D(()=>Ct(H.value));function d(){const c=A.value;c&&I(c,{toast:"Retry command copied"})}const S=[{accessorKey:"signature",header:de("Signature")},{accessorKey:"errorType",header:de("Type")},{accessorKey:"status",header:de("Status")},{accessorKey:"caseCount",header:de("Tests")},{accessorKey:"signals",header:"Signals"},{accessorKey:"diagnosis",header:"AI"},{accessorKey:"firstSeenRunId",header:de("Known since")},{id:"actions",header:"Actions"}],p=D(()=>T.value?.reduce((c,m)=>c+m.caseCount,0)??0);return(c,m)=>{const U=ve,v=Pe,M=Re,y=ke,J=Ue,te=ot,ae=Ft,ee=nt,re=Po,O=Dt;return s(),a(G,null,[n("div",jo,[e(E)?(s(),a("div",Bo,[o(U,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),m[2]||(m[2]=n("span",null,"Grouping failures...",-1))])):e(T)&&e(T).length?(s(),a(G,{key:1},[n("div",No,[n("p",Mo,[$(l(e(p))+" failing "+l(e(p)===1?"test":"tests")+" across "+l(e(T).length)+" "+l(e(T).length===1?"group":"groups")+" ",1),o(v,{topic:"cluster.concept"})]),e(H).length>0?(s(),_(M,{key:0,size:"xs",variant:"outline",color:"neutral",icon:e(j)?"i-lucide-check":"i-lucide-play",title:e(j)?"Copied!":("copyPreview"in c?c.copyPreview:e(wt))(e(A)),onClick:m[0]||(m[0]=f=>d())},{default:i(()=>[...m[3]||(m[3]=[$(" Copy retry command ",-1)])]),_:1},8,["icon","title"])):k("",!0)]),o(ee,{ui:{body:"p-0 sm:p-0"}},{default:i(()=>[o(ae,{"min-width":"46rem",bleed:!1},{default:i(()=>[o(te,{data:e(T),columns:S},{"actions-header":i(()=>[...m[4]||(m[4]=[n("div",{class:"text-right"},"Actions",-1)])]),"signature-cell":i(({row:f})=>[n("div",Ao,[n("span",{class:q(["text-sm block truncate",f.original.title?"":"font-mono"]),title:f.original.signature},l(f.original.title||f.original.signature),11,Uo),f.original.selector?(s(),a("span",Lo,[m[5]||(m[5]=$(" Locator: ",-1)),n("code",Eo,l(f.original.selector),1)])):k("",!0)])]),"errorType-cell":i(({row:f})=>[f.original.errorType?(s(),_(y,{key:0,color:("clusterErrorTypeColor"in c?c.clusterErrorTypeColor:e(Cs))(f.original.errorType),variant:"subtle",size:"sm"},{default:i(()=>[$(l(f.original.errorType),1)]),_:2},1032,["color"])):(s(),a("span",Oo,"—"))]),"status-cell":i(({row:f})=>[f.original.status?(s(),_(y,{key:0,color:("clusterStatusColor"in c?c.clusterStatusColor:e($s))(f.original.status),variant:"subtle",size:"sm"},{default:i(()=>[$(l(f.original.status),1)]),_:2},1032,["color"])):(s(),a("span",Ko,"—"))]),"caseCount-cell":i(({row:f})=>[n("span",Wo,l(f.original.caseCount),1)]),"signals-cell":i(({row:f})=>[f.original.isNew||f.original.flaky||f.original.workerCorrelated||f.original.locatorHealing?(s(),a("div",Ho,[f.original.isNew?(s(),_(y,{key:0,color:"warning",variant:"subtle",size:"sm"},{default:i(()=>[...m[6]||(m[6]=[$(" New ",-1)])]),_:1})):k("",!0),f.original.flaky?(s(),_(y,{key:1,color:"warning",variant:"outline",size:"sm"},{default:i(()=>[...m[7]||(m[7]=[$(" Flaky ",-1)])]),_:1})):k("",!0),f.original.workerCorrelated?(s(),_(y,{key:2,color:"info",variant:"outline",size:"sm",title:"All failures ran on the same worker"},{default:i(()=>[...m[8]||(m[8]=[$(" Same worker ",-1)])]),_:1})):k("",!0),f.original.locatorHealing?.healed?(s(),_(y,{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:i(()=>[...m[9]||(m[9]=[$(" Healed ",-1)])]),_:1})):f.original.locatorHealing?(s(),_(y,{key:4,color:"success",variant:"outline",size:"sm",icon:"i-lucide-bandage",title:`Locator fix available: ${f.original.locatorHealing.recommended} — open the cluster to apply it`},{default:i(()=>[...m[10]||(m[10]=[$(" Locator fix ",-1)])]),_:1},8,["title"])):k("",!0)])):(s(),a("span",Vo,"—"))]),"diagnosis-cell":i(({row:f})=>[f.original.diagnosis?.status==="running"?(s(),a("div",Go,[o(U,{name:"i-lucide-loader-2",class:"size-3 animate-spin"}),m[11]||(m[11]=$(" Running ",-1))])):f.original.diagnosis?.status==="completed"&&f.original.diagnosis.category?(s(),_(y,{key:1,color:"neutral",variant:"subtle",size:"sm",class:"gap-1"},{default:i(()=>[o(U,{name:"i-lucide-sparkles",class:"size-3"}),$(" "+l(f.original.diagnosis.category),1)]),_:2},1024)):(s(),a("span",Xo,"—"))]),"firstSeenRunId-cell":i(({row:f})=>[f.original.isNew?(s(),a("span",qo,"New in this run")):(s(),a("div",Yo,[o(J,{to:`/test-runs/${f.original.firstSeenRunId}`,class:"text-primary hover:underline"},{default:i(()=>[$(" run #"+l(f.original.firstSeenRunId),1)]),_:2},1032,["to"]),f.original.firstSeenAt?(s(),a("span",Jo," ("+l(("formatRelativeTime"in c?c.formatRelativeTime:e($t))(f.original.firstSeenAt))+") ",1)):k("",!0)]))]),"actions-cell":i(({row:f})=>[n("div",Zo,[o(M,{size:"sm",color:"primary",variant:"soft",onClick:z=>R("selectCluster",f.original.clusterId)},{default:i(()=>[...m[12]||(m[12]=[$(" Filter ",-1)])]),_:1},8,["onClick"]),o(M,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-sparkles",onClick:z=>B.value=f.original.clusterId},{default:i(()=>[...m[13]||(m[13]=[$(" Diagnose ",-1)])]),_:1},8,["onClick"]),o(M,{to:`/failure-clusters/${f.original.clusterId}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:i(()=>[...m[14]||(m[14]=[$(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data"])]),_:1})]),_:1})],64)):(s(),a("div",Qo,[o(U,{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))]))]),o(O,{open:e(B)!==null,title:"AI Diagnosis",ui:{content:"max-w-2xl"},"onUpdate:open":m[1]||(m[1]=f=>{f||(B.value=null)})},{body:i(()=>[e(B)!==null?(s(),_(re,{key:0,"cluster-id":e(B)},null,8,["cluster-id"])):k("",!0)]),_:1},8,["open"])],64)}}}),tl=Object.assign(el,{__name:"FailureGroups"}),sl={class:"pt-4"},nl={key:2,class:"space-y-4"},al={class:"flex flex-wrap items-center gap-2 text-sm"},ol={class:"text-gray-500 inline-flex items-center gap-1"},ll={key:0,class:"text-gray-400"},il={key:0,class:"flex flex-wrap items-center gap-2"},rl={class:"text-sm text-gray-500"},ul={key:1,class:"flex items-center gap-2"},cl={class:"text-sm text-gray-500"},dl={class:"space-y-3"},ml={class:"flex items-center gap-2 text-sm font-medium"},fl={class:"flex flex-wrap items-center gap-2 text-sm font-mono"},gl={key:0,class:"text-xs text-gray-400 font-sans"},pl={class:"flex flex-wrap items-center gap-2"},xl={class:"flex items-center gap-1.5 flex-1 min-w-0"},yl={class:"flex-1 text-xs bg-gray-100 dark:bg-gray-800 px-3 py-1.5 rounded font-mono truncate select-all"},hl={key:3,class:"text-sm text-gray-500 flex items-center gap-2"},vl={class:"px-4 py-3 text-sm font-medium flex items-center gap-2 border-b border-default"},kl={class:"overflow-x-auto"},bl={class:"w-full min-w-[36rem] text-sm"},wl={class:"px-4 py-2 text-gray-500"},_l={class:"px-4 py-2 font-mono text-xs"},$l={key:0,class:"text-green-700 dark:text-green-400"},Cl={key:1,class:"text-gray-400"},Tl={class:"px-4 py-2 font-mono text-xs"},Rl={key:0,class:"text-red-700 dark:text-red-400"},zl={key:1,class:"text-gray-400"},Il=pe({__name:"RegressionContext",props:{refreshKey:{}},async setup(t){let h,C;const R=Le().params.id,u=t,{data:w,pending:r,refresh:T}=([h,C]=Me(()=>Ae(`/api/test-runs/${R}/regression-context`,{lazy:!0,server:!1},"$AcrCJopY1M")),h=await h,C(),h);ge(()=>u.refreshKey,(I,j)=>{I!==j&&I!==void 0&&T()});const{copy:E,copied:N}=at();function B(){E(w.value?.commitRange?.gitCommand)}return(I,j)=>{const H=It,A=St,d=ve,S=Pe,p=Ue,c=ke,m=Re,U=nt;return s(),a("div",sl,[e(r)?(s(),_(H,{key:0,text:"Looking for last passing run…"})):e(w)?.hasGreen?(s(),a("div",nl,[n("div",al,[o(d,{name:"i-lucide-circle-check",class:"size-4 text-green-500 shrink-0"}),n("span",ol,[j[0]||(j[0]=$("Last passing run: ",-1)),o(S,{topic:"run.regression"})]),o(p,{to:`/test-runs/${e(w).lastGreenRunId}`,class:"font-medium text-primary hover:underline"},{default:i(()=>[$(" Run #"+l(e(w).lastGreenRunId),1)]),_:1},8,["to"]),e(w).lastGreenRunAt?(s(),a("span",ll," ("+l(("formatRelativeTime"in I?I.formatRelativeTime:e($t))(e(w).lastGreenRunAt))+") ",1)):k("",!0)]),(e(w).newFailures??0)>0?(s(),a("div",il,[o(c,{color:"error",variant:"soft",size:"lg"},{default:i(()=>[$(l(e(w).newFailures)+" new "+l(e(w).newFailures===1?"failure":"failures"),1)]),_:1}),n("span",rl,l(e(w).newFailures===1?"test":"tests")+" that "+l((e(w).newFailures===1,"passed"))+" in run #"+l(e(w).lastGreenRunId)+" but "+l(e(w).newFailures===1?"fails":"fail")+" here ",1)])):(s(),a("div",ul,[o(c,{color:"warning",variant:"soft",size:"lg"},{default:i(()=>[...j[1]||(j[1]=[$(" No new regressions ",-1)])]),_:1}),n("span",cl,"All failing tests were also failing before run #"+l(e(w).lastGreenRunId),1)])),e(w).commitRange?(s(),_(U,{key:2,ui:{body:"p-4 sm:p-4"}},{default:i(()=>[n("div",dl,[n("div",ml,[o(d,{name:"i-lucide-git-commit-horizontal",class:"size-4"}),j[2]||(j[2]=$(" Commits introduced since last passing run ",-1))]),n("div",fl,[o(c,{color:"success",variant:"soft",size:"sm"},{default:i(()=>[$(l(e(w).commitRange.fromShort),1)]),_:1}),o(d,{name:"i-lucide-arrow-right",class:"size-3 text-gray-400"}),o(c,{color:"error",variant:"soft",size:"sm"},{default:i(()=>[$(l(e(w).commitRange.toShort),1)]),_:1}),e(w).currentBranch||e(w).lastGreenBranch?(s(),a("span",gl," on "+l(e(w).currentBranch||e(w).lastGreenBranch),1)):k("",!0)]),n("div",pl,[e(w).commitRange.compareUrl?(s(),_(m,{key:0,to:e(w).commitRange.compareUrl,target:"_blank",external:"",icon:"i-lucide-external-link",size:"sm",variant:"soft",color:"primary"},{default:i(()=>[...j[3]||(j[3]=[$(" View commits ",-1)])]),_:1},8,["to"])):k("",!0),n("div",xl,[n("code",yl,l(e(w).commitRange.gitCommand),1),o(m,{icon:e(N)?"i-lucide-check":"i-lucide-clipboard",size:"xs",color:"neutral",variant:"ghost",title:e(N)?"Copied!":"Copy git command",onClick:B},null,8,["icon","title"])])])])]),_:1})):!e(w).currentCommit||!e(w).lastGreenCommit?(s(),a("div",hl,[o(d,{name:"i-lucide-git-branch",class:"size-4 shrink-0"}),j[4]||(j[4]=$(" No commit info available — enable ",-1)),j[5]||(j[5]=n("code",{class:"font-mono text-xs"},"collectScmInfo: true",-1)),j[6]||(j[6]=$(" in the reporter to see commit ranges ",-1))])):k("",!0),e(w).metadataDiff&&e(w).metadataDiff.length>0?(s(),_(U,{key:4,ui:{body:"p-0 sm:p-0"}},{default:i(()=>[n("div",vl,[o(d,{name:"i-lucide-sliders-horizontal",class:"size-4"}),j[7]||(j[7]=$(" What changed between runs ",-1))]),n("div",kl,[n("table",bl,[j[8]||(j[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(G,null,oe(e(w).metadataDiff,v=>(s(),a("tr",{key:v.key,class:"border-b last:border-b-0 border-default"},[n("td",wl,l(v.label),1),n("td",_l,[v.before?(s(),a("span",$l,l(v.before),1)):(s(),a("span",Cl,"—"))]),n("td",Tl,[v.after?(s(),a("span",Rl,l(v.after),1)):(s(),a("span",zl,"—"))])]))),128))])])])]),_:1})):k("",!0)])):(s(),_(A,{key:1,icon:"i-lucide-history",text:"No previous passing run found for this project"}))])}}}),Sl=Object.assign(Il,{__name:"RegressionContext"}),Fl={class:"flex items-center justify-between mb-2"},Dl={class:"text-xs text-gray-500 inline-flex items-center gap-1"},Pl={class:"flex items-center gap-1"},jl={class:"p-2 flex flex-col gap-2 min-w-56"},Bl=pe({__name:"TimelineHeader",props:{workerCount:{},shardTotal:{},testCount:{},hookCount:{},waitCount:{},spanTypes:{},live:{type:Boolean}},emits:["reset","toggleSpan"],setup(t){return(h,C)=>{const F=Pe,R=Re,u=Tt,w=pt;return s(),a("div",Fl,[n("span",Dl,[n("span",null,[$(l(t.workerCount)+" worker"+l(t.workerCount>1?"s":"")+" ",1),t.shardTotal&&t.shardTotal>1?(s(),a(G,{key:0},[$(" · "+l(t.shardTotal)+" shard"+l(t.shardTotal>1?"s":""),1)],64)):k("",!0),$(" · "+l(t.testCount)+" tests ",1),t.hookCount>0?(s(),a(G,{key:1},[$(" · "+l(t.hookCount)+" hooks ",1)],64)):k("",!0),t.waitCount>0?(s(),a(G,{key:2},[$(" · "+l(t.waitCount)+" waits ",1)],64)):k("",!0)]),o(F,{topic:"run.timeline"})]),n("div",Pl,[t.spanTypes.length>1?(s(),_(w,{key:0,content:{align:"end"}},{content:i(()=>[n("div",jl,[(s(!0),a(G,null,oe(t.spanTypes,r=>(s(),_(u,{key:r.key,"model-value":r.checked,label:r.label,"onUpdate:modelValue":T=>h.$emit("toggleSpan",r.key,T===!0)},null,8,["model-value","label","onUpdate:modelValue"]))),128))])]),default:i(()=>[o(R,{size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-list-filter","trailing-icon":"i-lucide-chevron-down",title:"Show or hide span types"},{default:i(()=>[...C[1]||(C[1]=[$(" Span types ",-1)])]),_:1})]),_:1})):k("",!0),t.live?k("",!0):(s(),_(R,{key:1,size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-rotate-ccw",onClick:C[0]||(C[0]=r=>h.$emit("reset"))},{default:i(()=>[...C[2]||(C[2]=[$(" Reset view ",-1)])]),_:1}))])])}}}),Nl=Object.assign(Bl,{__name:"TimelineHeader"}),Ve={barHeight:24,rowGap:8,labelWidth:80,sidePadding:16,axisHeight:28,get rowHeight(){return this.barHeight+this.rowGap}},Ml={passed:"#16a34a",failed:"#dc2626",timedOut:"#ea580c",running:"#2563eb",initialising:"#2563eb",skipped:"#9ca3af",cancelled:"#a1a1aa",interrupted:"#ea580c",flaky:"#ca8a04"},Se={fill:"#facc15",stroke:"#ca8a04",swatch:"#f59e0b"};function Xe(t){return Ml[t]||"#a1a1aa"}function jt(t){return Xe(t)+"66"}function Bt(t){return Xe(t)}function Ge(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 Al=["y","width","height"],Ul=["y1","x2","y2"],Ll=["x1","y1","x2","y2"],El=["x1","y1","x2","y2"],Ol=["x","y"],Kl=["y"],Wl=pe({__name:"TimelineGrid",props:{workerRows:{},shardGroups:{},tickMarks:{},contentWidth:{},shardTotal:{}},setup(t){const{barHeight:h,rowGap:C,axisHeight:F,rowHeight:R}=Ve;return(u,w)=>(s(),a("g",null,[(s(!0),a(G,null,oe(t.workerRows,(r,T)=>(s(),a("rect",{key:"bg-"+T,x:0,y:T*e(R)+e(F),width:t.contentWidth,height:e(R),class:q(T%2===1?"fill-black/[0.03] dark:fill-white/[0.03]":"fill-transparent")},null,10,Al))),128)),(s(!0),a(G,null,oe(t.shardGroups.slice(1),r=>(s(),a("line",{key:"shard-sep-"+r.rowRange[0],x1:0,y1:r.rowRange[0]*e(R)+e(F)-e(C)/2,x2:t.contentWidth,y2:r.rowRange[0]*e(R)+e(F)-e(C)/2,stroke:"currentColor","stroke-dasharray":"4,3",class:"stroke-gray-400 dark:stroke-gray-500"},null,8,Ul))),128)),n("line",{x1:e(Ve).labelWidth,y1:e(F),x2:t.contentWidth,y2:e(F),stroke:"currentColor",class:"stroke-gray-300 dark:stroke-gray-600"},null,8,Ll),(s(!0),a(G,null,oe(t.tickMarks,r=>(s(),a("g",{key:r.ms},[n("line",{x1:r.x,y1:e(F)-4,x2:r.x,y2:e(F),stroke:"currentColor",class:"stroke-gray-300 dark:stroke-gray-600"},null,8,El),n("text",{x:r.x,y:e(F)-8,"text-anchor":"middle",class:"fill-gray-400 text-[10px]"},l(r.label),9,Ol)]))),128)),(s(!0),a(G,null,oe(t.workerRows,(r,T)=>(s(),a("text",{key:"label-"+T,x:6,y:T*e(R)+e(F)+e(h)/2+4,class:"fill-gray-500 text-[11px] font-medium"},l(r.shardIndex!=null&&t.shardTotal&&t.shardTotal>1?`S${r.shardIndex} W${r.workerIndex}`:`Worker ${r.workerIndex}`),9,Kl))),128))]))}}),Hl=Object.assign(Wl,{__name:"TimelineGrid"}),Vl=["x","y","width","height","fill","stroke"],Gl=["x","y"],Xl=["x","y","width","height","fill","stroke"],ql=["x1","y1","x2","y2","stroke"],Yl=["x1","y1","x2","y2","stroke"],Jl=["x","y"],Zl=["cx","cy"],Ql=["cx","cy"],ei=["x","y","width","height","fill"],ti=["x","y"],si=pe({__name:"TimelineBar",props:{item:{},x:{},y:{},width:{}},emits:["select","hover","move","leave"],setup(t,{emit:h}){const C=t,F=h,{barHeight:R}=Ve,u=D(()=>["setup","hook","fixture"].includes(C.item.kind)),w=D(()=>C.item.testCaseId!=null),r=D(()=>w.value?"cursor-pointer":"cursor-default");function T(){C.item.testCaseId!=null&&F("select",C.item.testCaseId)}return(E,N)=>(s(),a("g",{class:"timeline-bar-group",onMouseenter:N[0]||(N[0]=B=>F("hover",t.item,B)),onMousemove:N[1]||(N[1]=B=>F("move",B)),onMouseleave:N[2]||(N[2]=B=>F("leave"))},[u.value?(s(),a(G,{key:0},[n("rect",{x:t.x,y:t.y,width:t.width,height:e(R),rx:3,ry:3,fill:e(jt)(t.item.status),stroke:e(Bt)(t.item.status),"stroke-width":"1","stroke-dasharray":"3,2",class:q(["timeline-bar-shape transition-opacity duration-100 opacity-80",r.value]),onClick:T},null,10,Vl),t.width>60?(s(),a("text",{key:0,x:t.x+4,y:t.y+e(R)/2+4,class:"fill-gray-600 dark:fill-gray-300 text-[9px] font-medium pointer-events-none"},l(t.item.title),9,Gl)):k("",!0)],64)):t.item.kind==="wait"?(s(),a(G,{key:1},[n("rect",{x:t.x,y:t.y-3,width:t.width,height:e(R)+6,rx:2,ry:2,fill:e(Se).fill,"fill-opacity":"0.28",stroke:e(Se).stroke,"stroke-width":"1.5",class:q(["timeline-bar-shape transition-opacity duration-100 opacity-90",r.value]),onClick:T},null,10,Xl),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(R)+3,stroke:e(Se).stroke,"stroke-width":"1","stroke-opacity":"0.25",class:"pointer-events-none"},null,8,ql)):k("",!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(R)+3,stroke:e(Se).stroke,"stroke-width":"1","stroke-opacity":"0.25",class:"pointer-events-none"},null,8,Yl)):k("",!0),t.width>50?(s(),a("text",{key:2,x:t.x+4,y:t.y+e(R)/2+4,class:"fill-yellow-800 dark:fill-yellow-200 text-[9px] font-bold pointer-events-none"}," wasted "+l(e(Ge)(t.item.duration)),9,Jl)):k("",!0)],64)):t.item.status==="running"?(s(),a(G,{key:2},[n("circle",{cx:t.x+6,cy:t.y+e(R)/2,r:"3",fill:"#2563eb",filter:"url(#glow)",class:"timeline-bar-shape transition-opacity duration-100 cursor-pointer opacity-90",onClick:T},null,8,Zl),n("circle",{cx:t.x+6,cy:t.y+e(R)/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:T},null,8,Ql)],64)):(s(),a(G,{key:3},[n("rect",{x:t.x,y:t.y,width:t.width,height:e(R),rx:3,ry:3,fill:e(Xe)(t.item.status),class:"timeline-bar-shape transition-opacity duration-100 cursor-pointer opacity-90",onClick:T},null,8,ei),t.width>40?(s(),a("text",{key:0,x:t.x+4,y:t.y+e(R)/2+4,class:"fill-white text-[10px] font-medium pointer-events-none"},l(e(Ge)(t.item.duration)),9,ti)):k("",!0)],64))],32))}}),ni=Object.assign(si,{__name:"TimelineBar"}),ai={class:"flex items-center gap-2 mb-1"},oi={class:"font-medium text-gray-900 dark:text-white max-w-64 truncate"},li={class:"flex items-center gap-3 text-gray-500"},ii={class:"capitalize"},ri={key:0,class:"italic truncate max-w-48"},ui=340,ci=pe({__name:"TimelineTooltip",props:{item:{},pos:{}},setup(t){const h=t,C=D(()=>{const R=h.item;return R?R.kind==="test"?{backgroundColor:Xe(R.status)}:R.kind==="wait"?{backgroundColor:Se.swatch+"66",borderColor:Se.swatch}:{backgroundColor:jt(R.status),borderColor:Bt(R.status)}:{}}),F=D(()=>{const{x:R,y:u}=h.pos;if(typeof window>"u")return{left:`${R+12}px`,top:`${u-10}px`};const w=R+12+ui>window.innerWidth,r=u+90>window.innerHeight;return{left:w?void 0:`${R+12}px`,right:w?`${window.innerWidth-R+12}px`:void 0,top:r?void 0:`${u-10}px`,bottom:r?`${window.innerHeight-u+10}px`:void 0}});return(R,u)=>(s(),_(ns,{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:he(F.value)},[n("div",ai,[n("span",{class:q(["inline-block size-2.5 rounded-full shrink-0",{"border border-dashed":t.item.kind!=="test"}]),style:he(C.value)},null,6),n("span",oi,[t.item.kind!=="test"?(s(),a("span",{key:0,class:q(["uppercase text-[10px] tracking-wider mr-1",t.item.kind==="wait"?"text-amber-500":"text-gray-500"])},l(t.item.kind),3)):k("",!0),$(" "+l(t.item.title),1)])]),n("div",li,[n("span",ii,l(t.item.status),1),n("span",null,l(e(Ge)(t.item.duration)),1),n("span",null,"Worker "+l(t.item.workerIndex),1),t.item.parentTitle?(s(),a("span",ri," for "+l(t.item.parentTitle),1)):k("",!0)])],4)):k("",!0)]))}}),di=Object.assign(ci,{__name:"TimelineTooltip"}),mi=["Wait for timeout*","*waitForTimeout*"];function fi(t){const h=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(`^${h}$`,"i")}const mt=new Map;function gi(t){let h=mt.get(t);return h||(h=fi(t),mt.set(t,h)),h}function pi(t,h){if(!h||h.length===0)return!1;const C=t.title??"",F=t.location??"";for(const R of h){const u=gi(R);if(u.test(C)||F&&u.test(F))return!0}return!1}function xi(t){const h=new Map;for(const C of t){const F=C.workerIndex;if(F==null||F<0)continue;const R=C.shardIndex??null,u=`${R??"null"}|${F}`;let w=h.get(u);w||(w={shardIndex:R,workerIndex:F,cases:[]},h.set(u,w)),w.cases.push(C)}return[...h.values()].sort((C,F)=>{const R=C.shardIndex??1/0,u=F.shardIndex??1/0;return R!==u?R-u:C.workerIndex-F.workerIndex})}function We(t){if(t==null)return null;if(typeof t=="number")return Number.isFinite(t)?t:null;if(t instanceof Date)return t.getTime();const h=new Date(t).getTime();return Number.isNaN(h)?null:h}function yi(t,h){return t.category==="wait"?pi(t,h)?"wait":null:t.category==="hook"||t.category==="fixture"?t.category:null}function hi(t){const h=D(()=>t.wastedPatterns&&t.wastedPatterns.length>0?t.wastedPatterns:mi),C=D(()=>xi(t.testCases)),F=D(()=>{const r=C.value,T=h.value;let E=1/0;for(const H of r)for(const A of H.cases){const d=We(A.startedAt);d!=null&&d>0&&(E=Math.min(E,d))}const N=Number.isFinite(E),B=H=>Math.max(0,(We(H)??E)-E),I=[],j=new Map;if(r.forEach((H,A)=>{const d=[],S=N?H.cases:[...H.cases].sort((c,m)=>(We(c.startedAt)??0)-(We(m.startedAt)??0));let p=0;for(const c of S){const m=c.duration??1e3,U=N?B(c.startedAt):p;d.push({key:`t${c.id}`,kind:"test",testCaseId:c.id,title:c.title,status:c.status,workerIndex:H.workerIndex,start:U,duration:m,rowIndex:A}),p=U+m,(c.stepEvents??[]).forEach((M,y)=>{const J=yi(M,T);if(!J)return;const te=M.duration||0,ae=N?B(M.startedAt):p;d.push({key:`s${c.id}:${y}`,kind:J,testCaseId:c.id,title:M.title,status:M.status||"passed",workerIndex:H.workerIndex,start:ae,duration:te,rowIndex:A,parentTitle:c.title}),p=ae+te})}d.sort((c,m)=>c.start-m.start),I.push(...d),j.has(H.workerIndex)||j.set(H.workerIndex,p)}),t.setupSteps&&t.setupSteps.length>0){const H=new Map;r.forEach((A,d)=>{H.has(A.workerIndex)||H.set(A.workerIndex,d)}),t.setupSteps.forEach((A,d)=>{const S=A.workerIndex;if(S==null||S<0)return;const p=H.get(S);if(p==null)return;const c=A.duration||0;let m;N?m=B(A.startedAt):(m=j.get(S)??0,j.set(S,m+c)),I.push({key:`setup${S}:${d}`,kind:"setup",testCaseId:null,title:`[Setup] ${A.title}`,status:A.status||"passed",workerIndex:S,start:m,duration:c,rowIndex:p,parentTitle:null})})}return I}),R=D(()=>C.value.map(r=>({shardIndex:r.shardIndex,workerIndex:r.workerIndex}))),u=D(()=>{const r=[];for(let T=0;T<R.value.length;T++){const E=R.value[T],N=r[r.length-1];!N||N.shardIndex!==E.shardIndex?r.push({shardIndex:E.shardIndex,rowRange:[T,T]}):N.rowRange[1]=T}return r}),w=D(()=>{let r=0;for(const T of F.value)r=Math.max(r,T.start+T.duration);return r||6e4});return{timelineData:F,workerRows:R,shardGroups:u,maxTime:w}}const ft=1.12,vi=10,ki=100,Qe=[10,20,50,100,200,500,1e3,2e3,5e3,1e4,15e3,3e4,6e4,12e4,3e5,6e5,9e5,18e5,36e5];function bi(t){const{containerRef:h,maxTime:C,rowCount:F,hasData:R,live:u}=t,{labelWidth:w,sidePadding:r,axisHeight:T,rowHeight:E}=Ve,N=K(1),B=K(0),I=K(!1),j=K(0),H=K(0),A=D(()=>.5*N.value),d=D(()=>C.value*A.value+w+r),S=D(()=>F.value*E+T);function p(b){return b.start*A.value+w}function c(b){return Math.max(b.duration*A.value,3)}function m(b){return b.rowIndex*E+T}function U(){const b=h.value?.clientWidth;if(!b||C.value<=0)return 1;const V=(b-w)/C.value;return Math.min(1,V/.5)}function v(){const b=U();b>0&&(N.value=b,B.value=0)}function M(b){if(!h.value)return b;const V=h.value.clientWidth;return d.value<=V?0:Math.max(V-d.value,Math.min(0,b))}function y(b,V){const ne=Math.max(U(),Math.min(vi,b)),se=ne/N.value;N.value=ne,B.value=M(V-(V-B.value)*se)}const J=D(()=>{const b=ki/A.value;let V=Qe.find(se=>se>=b)??Qe[Qe.length-1];for(;C.value/V>1e3;)V*=2;const ne=[];for(let se=0;se<=C.value;se+=V)ne.push({ms:se,x:se*A.value+w,label:Ge(se)});return ne});function te(b){if(u())return;const V=b.deltaY>0?1/ft:ft,ne=h.value?.getBoundingClientRect();y(N.value*V,ne?b.clientX-ne.left:0)}const ae=4,ee=new Map;let re=null,O=0,f=1,z=0;function ue(b,V){re=b,j.value=V,H.value=B.value}function g(b){if(!u()&&!(b.pointerType==="mouse"&&b.button!==0)){if(ee.set(b.pointerId,{x:b.clientX,y:b.clientY}),ee.size===1)ue(b.pointerId,b.clientX);else if(ee.size===2){re=null,I.value=!1;for(const ye of ee.keys())h.value?.setPointerCapture?.(ye);const[V,ne]=[...ee.values()];O=Math.hypot(V.x-ne.x,V.y-ne.y)||1,f=N.value;const se=h.value?.getBoundingClientRect();z=(V.x+ne.x)/2-(se?.left??0)}b.preventDefault()}}function P(b){if(!(u()||!ee.has(b.pointerId))){if(ee.set(b.pointerId,{x:b.clientX,y:b.clientY}),ee.size>=2){const[V,ne]=[...ee.values()],se=Math.hypot(V.x-ne.x,V.y-ne.y)||1;y(f*(se/O),z);return}I.value?B.value=M(H.value+(b.clientX-j.value)):re===b.pointerId&&Math.abs(b.clientX-j.value)>ae&&(h.value?.setPointerCapture?.(b.pointerId),I.value=!0,B.value=M(H.value+(b.clientX-j.value)))}}function Y(b){if(ee.delete(b.pointerId),re===b.pointerId&&(re=null),h.value?.releasePointerCapture?.(b.pointerId),ee.size===1){const[V]=[...ee.entries()];ue(V[0],V[1].x)}else ee.size===0&&(I.value=!1)}function le(){v()}let Z=null;return as(()=>{De(v),h.value&&(Z=new ResizeObserver(()=>v()),Z.observe(h.value))}),ht(()=>{Z?.disconnect()}),ge(()=>[u(),R.value,C.value,F.value],([b,V])=>{b&&V&&De(v)}),{panX:B,isPanning:I,pxPerMs:A,contentWidth:d,contentHeight:S,getBarX:p,getBarWidth:c,getBarTop:m,tickMarks:J,onWheel:te,onPointerDown:g,onPointerMove:P,onPointerUp:Y,resetView:le}}const wi={key:0,class:"relative select-none"},_i=["width","height"],$i={key:1,class:"text-center py-10 text-gray-500"},Ci=pe({__name:"WorkersTimeline",props:{testCases:{},setupSteps:{},shardTotal:{},live:{type:Boolean},wastedPatterns:{}},emits:["selectTestCase"],setup(t,{emit:h}){const C=t,F=h,{timelineData:R,workerRows:u,shardGroups:w,maxTime:r}=hi(C),T=K(null),E=D(()=>u.value.length),N=D(()=>R.value.length>0),{panX:B,isPanning:I,contentWidth:j,contentHeight:H,getBarX:A,getBarWidth:d,getBarTop:S,tickMarks:p,onWheel:c,onPointerDown:m,onPointerMove:U,onPointerUp:v,resetView:M}=bi({containerRef:T,maxTime:r,rowCount:E,hasData:N,live:()=>C.live}),y=D(()=>R.value.filter(Z=>Z.kind==="test").length),J=D(()=>R.value.filter(Z=>Z.kind!=="test"&&Z.kind!=="wait").length),te=D(()=>R.value.filter(Z=>Z.kind==="wait").length),ae=["test","setup","hook","fixture","wait"],ee={test:"Tests",setup:"Setup (beforeAll/afterAll)",hook:"Hooks",fixture:"Fixtures",wait:"Wasted waits"},re=K({}),O=D(()=>R.value.filter(Z=>!re.value[Z.kind])),f=D(()=>{const Z=new Set(R.value.map(b=>b.kind));return ae.filter(b=>Z.has(b)).map(b=>({key:b,label:ee[b],checked:!re.value[b]}))});function z(Z,b){re.value={...re.value,[Z]:!b}}const ue=K(null),g=K({x:0,y:0});ge(O,Z=>{ue.value&&(ue.value=Z.find(b=>b.key===ue.value.key)??null)});function P(Z,b){ue.value=Z,g.value={x:b.clientX,y:b.clientY}}function Y(Z){g.value={x:Z.clientX,y:Z.clientY}}function le(){ue.value=null}return(Z,b)=>{const V=Nl,ne=Hl,se=ni,ye=di,we=ve;return e(R).length>0?(s(),a("div",wi,[o(V,{"worker-count":e(u).length,"shard-total":t.shardTotal,"test-count":y.value,"hook-count":J.value,"wait-count":te.value,"span-types":f.value,live:t.live,onToggleSpan:z,onReset:e(M)},null,8,["worker-count","shard-total","test-count","hook-count","wait-count","span-types","live","onReset"]),n("div",{ref_key:"containerRef",ref:T,class:q(["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:he({height:e(H)+"px"}),onWheel:b[1]||(b[1]=Ne((...ie)=>e(c)&&e(c)(...ie),["prevent"])),onPointerdown:b[2]||(b[2]=(...ie)=>e(m)&&e(m)(...ie)),onPointermove:b[3]||(b[3]=(...ie)=>e(U)&&e(U)(...ie)),onPointerup:b[4]||(b[4]=(...ie)=>e(v)&&e(v)(...ie)),onPointercancel:b[5]||(b[5]=(...ie)=>e(v)&&e(v)(...ie)),onPointerleave:b[6]||(b[6]=(...ie)=>e(v)&&e(v)(...ie))},[(s(),a("svg",{class:"overflow-visible",style:he({transform:`translateX(${e(B)}px)`}),width:e(j),height:e(H)},[b[7]||(b[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)),o(ne,{"worker-rows":e(u),"shard-groups":e(w),"tick-marks":e(p),"content-width":e(j),"shard-total":t.shardTotal},null,8,["worker-rows","shard-groups","tick-marks","content-width","shard-total"]),(s(!0),a(G,null,oe(O.value,ie=>(s(),_(se,{key:ie.key,item:ie,x:e(A)(ie),y:e(S)(ie),width:e(d)(ie),onSelect:b[0]||(b[0]=_e=>F("selectTestCase",_e)),onHover:P,onMove:Y,onLeave:le},null,8,["item","x","y","width"]))),128))],12,_i))],38),o(ye,{item:ue.value,pos:g.value},null,8,["item","pos"])])):(s(),a("div",$i,[o(we,{name:"i-lucide-rows-3",class:"size-8 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),b[8]||(b[8]=n("p",null,"No worker data available for this run.",-1))]))}}}),Ti=Object.assign(Ci,{__name:"WorkersTimeline"}),Ri={key:0,class:"space-y-4"},zi={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Ii={class:"flex items-center gap-2 py-1.5"},Si={class:"font-medium"},Fi={key:0,class:"flex"},Di={key:1,class:"flex items-center justify-center py-6 text-gray-500 gap-2"},Pi={class:"flex flex-wrap gap-2 mt-1"},ji={class:"flex flex-wrap gap-4 text-sm"},Bi={key:3,class:"text-sm text-gray-500"},Ni={class:"flex flex-wrap gap-4 text-sm"},Mi={key:0,class:"text-gray-400"},Ai={key:0,class:"text-gray-400"},Ui={key:1,class:"text-gray-400"},Li={key:1,class:"text-gray-400"},Ei={key:0,class:"text-gray-400"},Oi={key:0,class:"text-gray-400"},Ki={key:4,class:"text-center py-8 text-gray-500"},Wi={key:5,class:"text-center py-8 text-gray-500"},Hi={key:1,class:"text-center py-10 text-gray-500"},Vi=pe({__name:"RunCompare",props:{testRun:{}},setup(t){const h=t,F=Le().params.id,R=K(null),u=K([]),w=D(()=>h.testRun?.status==="running"||h.testRun?.status==="finalizing");ge(()=>h.testRun?.projectId,async p=>{if(!(!p||w.value)){try{R.value=await $fetch(`/api/projects/${p}`)}catch(c){console.error("Failed to fetch project for RunCompare",c)}try{const c=await $fetch(`/api/projects/${p}/markers`);u.value=c.markers??[]}catch{}}},{immediate:!0});const r=D(()=>{if(!B.value||!h.testRun)return[];const p=new Date(B.value.startTime).getTime(),c=new Date(h.testRun.startTime).getTime(),m=Math.min(p,c),U=Math.max(p,c),v=new Set([B.value.environment,h.testRun.environment].filter(M=>M!=null));return u.value.filter(M=>{const y=new Date(M.occurredAt).getTime();return y<=m||y>=U?!1:M.environment==null||v.has(M.environment)})}),T=D(()=>R.value?.testRuns?R.value.testRuns.filter(p=>p.id!==Number(F)).slice(0,50).map(p=>({label:`Run #${p.id} — ${bt(p.startTime,{dateOnly:!0})} (${p.status})`,value:p.id})):[]),E=D(()=>{if(!R.value?.testRuns)return null;const p=[...R.value.testRuns].sort((m,U)=>new Date(U.startTime).getTime()-new Date(m.startTime).getTime()),c=p.findIndex(m=>m.id===Number(F));return c>=0&&c<p.length-1?p[c+1].id:null}),N=K(void 0),B=K(null),I=K(!1);ge(N,async p=>{if(!p?.value){B.value=null;return}I.value=!0;try{B.value=await $fetch(`/api/test-runs/${p.value}`)}catch{}finally{I.value=!1}});function j(){if(E.value){const p=T.value.find(c=>c.value===E.value);p&&(N.value=p)}}const H=D(()=>h.testRun??null),{comparisonData:A,comparisonSummary:d}=Ns(B,H),S=[{accessorKey:"title",header:de("Test case")},{accessorKey:"statusA",header:de("Status A")},{accessorKey:"statusB",header:de("Status B")},{accessorKey:"durationA",header:de("Duration A")},{accessorKey:"durationB",header:de("Duration B")},{accessorKey:"delta",header:de("Delta")},{accessorKey:"percentChange",header:de("Change")}];return(p,c)=>{const m=Ps,U=js,v=Re,M=ve,y=kt,J=Bs,te=ke,ae=Ee,ee=ot,re=Ft;return s(),a("div",null,[t.testRun&&!w.value?(s(),a("div",Ri,[n("div",zi,[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)),o(m,{modelValue:N.value,"onUpdate:modelValue":c[0]||(c[0]=O=>N.value=O),items:T.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",Ii,[o(U,{status:t.testRun.status},null,8,["status"]),n("span",Si,"#"+l(t.testRun.id),1)])])]),E.value?(s(),a("div",Fi,[o(v,{icon:"i-lucide-arrow-left-right",size:"sm",variant:"outline",label:"Compare with previous run",onClick:j})])):k("",!0),I.value?(s(),a("div",Di,[o(M,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),c[3]||(c[3]=n("span",null,"Loading baseline data...",-1))])):r.value.length>0?(s(),_(J,{key:2,color:"warning",variant:"subtle",icon:"i-lucide-milestone",title:`${r.value.length} timeline marker${r.value.length>1?"s":""} between these runs`},{description:i(()=>[n("div",Pi,[(s(!0),a(G,null,oe(r.value,O=>(s(),_(y,{key:O.id,marker:O,size:"sm"},null,8,["marker"]))),128))])]),_:1},8,["title"])):B.value&&e(A).length>0?(s(),a(G,{key:3},[n("div",ji,[c[4]||(c[4]=n("span",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mr-1"},"Status",-1)),e(d).newFailures>0?(s(),_(te,{key:0,color:"error",variant:"soft",size:"lg"},{default:i(()=>[$(l(e(d).newFailures)+" new failure"+l(e(d).newFailures>1?"s":""),1)]),_:1})):k("",!0),e(d).recovered>0?(s(),_(te,{key:1,color:"success",variant:"soft",size:"lg"},{default:i(()=>[$(l(e(d).recovered)+" recovered ",1)]),_:1})):k("",!0),e(d).stillFailing>0?(s(),_(te,{key:2,color:"warning",variant:"soft",size:"lg"},{default:i(()=>[$(l(e(d).stillFailing)+" still failing ",1)]),_:1})):k("",!0),e(d).newFailures===0&&e(d).recovered===0&&e(d).stillFailing===0?(s(),a("span",Bi,"No status changes")):k("",!0)]),n("div",Ni,[c[5]||(c[5]=n("span",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mr-1"},"Duration changes",-1)),e(d).regressed>0?(s(),_(te,{key:0,color:"error",variant:"soft",size:"lg"},{default:i(()=>[$(l(e(d).regressed)+" regressed ",1)]),_:1})):k("",!0),e(d).improved>0?(s(),_(te,{key:1,color:"success",variant:"soft",size:"lg"},{default:i(()=>[$(l(e(d).improved)+" improved ",1)]),_:1})):k("",!0),o(te,{color:"neutral",variant:"soft",size:"lg"},{default:i(()=>[$(l(e(d).unchanged)+" unchanged ",1)]),_:1})]),o(re,{"min-width":"48rem",bleed:!1},{default:i(()=>[o(ee,{data:e(A),columns:S,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":i(({row:O})=>[O.original.statusA?(s(),_(te,{key:1,color:("getStatusColor"in p?p.getStatusColor:e(st))(O.original.statusA),variant:"subtle",class:"capitalize"},{default:i(()=>[$(l(O.original.statusA),1)]),_:2},1032,["color"])):(s(),a("span",Mi,"—"))]),"statusB-cell":i(({row:O})=>[O.original.statusB?(s(),_(te,{key:1,color:("getStatusColor"in p?p.getStatusColor:e(st))(O.original.statusB),variant:"subtle",class:"capitalize"},{default:i(()=>[$(l(O.original.statusB),1)]),_:2},1032,["color"])):(s(),a("span",Ai,"—"))]),"durationA-cell":i(({row:O})=>[O.original.durationA!==null?(s(),_(ae,{key:0,ms:O.original.durationA},null,8,["ms"])):(s(),a("span",Ui,"—"))]),"durationB-cell":i(({row:O})=>[O.original.durationB!==null?(s(),_(ae,{key:0,ms:O.original.durationB},null,8,["ms"])):(s(),a("span",Li,"—"))]),"delta-cell":i(({row:O})=>[O.original.delta===null?(s(),a("span",Ei,"—")):(s(),a("span",{key:1,class:q(O.original.delta>0?"text-red-600":O.original.delta<0?"text-green-600":"text-gray-500")},[$(l(O.original.delta>0?"+":""),1),o(ae,{ms:O.original.delta,"unit-class":"opacity-60"},null,8,["ms"])],2))]),"percentChange-cell":i(({row:O})=>[O.original.percentChange===null?(s(),a("span",Oi,"—")):(s(),a("span",{key:1,class:q(O.original.percentChange>10?"text-red-600 font-medium":O.original.percentChange<-10?"text-green-600 font-medium":"text-gray-500")},l(O.original.percentChange>0?"+":"")+l(O.original.percentChange)+"% ",3))]),_:1},8,["data"])]),_:1})],64)):N.value&&!I.value?(s(),a("div",Ki,[o(M,{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",Wi,[o(M,{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))]))])):w.value?(s(),a("div",Hi,[o(M,{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))])):k("",!0)])}}}),Gi=Object.assign(Vi,{__name:"RunCompare"}),Xi={class:"flex flex-col overflow-hidden"},qi={key:0,class:"flex-1 flex items-center justify-center text-gray-500 gap-2"},Yi={class:"text-xs font-mono break-all"},Ji={key:0,class:"text-gray-400"},Zi={key:1,class:"text-red-600 font-medium"},Qi={key:2,class:"flex-1 flex items-center justify-center text-center text-gray-500"},er=pe({__name:"SlowEndpoints",props:{refreshKey:{}},emits:["endpointsCount"],async setup(t,{emit:h}){let C,F;const u=Le().params.id,w=t,r=h,{data:T,pending:E,refresh:N}=([C,F]=Me(()=>Ae(`/api/test-runs/${u}/network-requests`,{lazy:!0,server:!1},"$DE3r8oSbIq")),C=await C,F(),C);ge(T,I=>{r("endpointsCount",I?.length??0)}),ge(()=>w.refreshKey,(I,j)=>{I!==j&&I!==void 0&&N()});const B=[{accessorKey:"method",header:de("Method")},{accessorKey:"route",header:de("Route")},{accessorKey:"count",header:de("Calls")},{accessorKey:"avgDuration",header:de("Avg")},{accessorKey:"p90Duration",header:de("P90")},{accessorKey:"maxDuration",header:de("Max")},{accessorKey:"errorRate",header:de("Errors")}];return(I,j)=>{const H=ve,A=ke,d=Ee,S=ot;return s(),a("div",Xi,[e(E)?(s(),a("div",qi,[o(H,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),j[0]||(j[0]=n("span",null,"Loading network data...",-1))])):e(T)&&e(T).length>0?(s(),_(S,{key:1,sticky:"",data:e(T),columns:B,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":i(({row:p})=>[o(A,{color:p.original.method==="GET"?"info":p.original.method==="POST"?"success":p.original.method==="PUT"||p.original.method==="PATCH"?"warning":p.original.method==="DELETE"?"error":"neutral",variant:"soft",class:"font-mono text-xs"},{default:i(()=>[$(l(p.original.method),1)]),_:2},1032,["color"])]),"route-cell":i(({row:p})=>[n("code",Yi,l(p.original.route),1)]),"avgDuration-cell":i(({row:p})=>[n("span",{class:q(p.original.avgDuration>1e3?"text-red-600 font-medium":p.original.avgDuration>500?"text-orange-500 font-medium":"")},[o(d,{ms:p.original.avgDuration,"unit-class":"opacity-60"},null,8,["ms"])],2)]),"p90Duration-cell":i(({row:p})=>[n("span",{class:q(p.original.p90Duration>2e3?"text-red-600 font-medium":p.original.p90Duration>1e3?"text-orange-500":"")},[o(d,{ms:p.original.p90Duration,"unit-class":"opacity-60"},null,8,["ms"])],2)]),"errorRate-cell":i(({row:p})=>[p.original.errorRate===0?(s(),a("span",Ji,"0%")):(s(),a("span",Zi,l(p.original.errorRate)+"%",1))]),_:1},8,["data"])):(s(),a("div",Qi,[o(H,{name:"i-lucide-wifi-off",class:"size-8 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),j[1]||(j[1]=n("p",null,[$(" No network request data. Add the "),n("code",{class:"text-xs bg-gray-100 dark:bg-gray-800 px-1 rounded font-mono"},"@piwitests/reporter"),$(" fixtures to your test setup. ")],-1))]))])}}}),tr=Object.assign(er,{__name:"SlowEndpoints"}),sr={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"},nr={key:0,class:"flex items-center gap-2 mb-3 shrink-0"},ou=pe({__name:"[id]",async setup(t){let h,C;const F=Le(),R=os(),u=F.params.id,w=!!xt().public.demoMode,{data:r,refresh:T}=([h,C]=Me(()=>Ae(`/api/test-runs/${u}`,"$D01RBpMFGT")),h=await h,C(),h),E=r.value?.projectId,{data:N,refresh:B}=E?([h,C]=Me(()=>Ae(`/api/projects/${E}/latest-run`,{key:`latest-run-${E}`},"$e4OLHgXNMR")),h=await h,C(),h):{data:K(null),refresh:async()=>{}};Ms(B);const I=D(()=>N.value?.id??r.value?.project?.latestRunId??null),j=D(()=>N.value?.status??r.value?.project?.latestRunStatus??null),H=D(()=>j.value==="running"||j.value==="finalizing");ls(D(()=>({title:`Test run #${u}${r.value?.project?` — ${r.value.project.name}`:""} — Piwi Dashboard`})));const A=gt(),d=K(!1),S=K(!1),p=D(()=>r.value?.status==="running"||r.value?.status==="finalizing"),c=K(!1),m=K([]),U=new Map,v=K(null);let M=null;const y=K([]);ge([p,r],()=>{p.value&&m.value.length>0?y.value=[...m.value]:r.value?.testCases?y.value=r.value.testCases:y.value=[]},{immediate:!0});function J(L){for(const W of L){const ce=`${W.title}@@${W.location}@@${JSON.stringify(W.browser)}`;U.has(ce)||(U.set(ce,!0),m.value=[...m.value,W])}y.value=[...m.value]}let te=[],ae=null;function ee(){if(te.length===0)return;const L=te;te=[];for(const W of L){const ce=W.data;if(W.type==="init")v.value={totalTests:ce.totalTests,passedTests:ce.passedTests,failedTests:ce.failedTests,skippedTests:ce.skippedTests};else if(W.type==="test-begin"){const X=ce;if(X.stepCategory)continue;const Te=`${X.title}@@${X.location}@@${JSON.stringify(X.browser)}`;U.has(Te)||(U.set(Te,!0),m.value=[...m.value,{id:m.value.length+1,title:X.title,filePath:X.filePath,suitePath:X.suitePath??void 0,status:"running",location:X.location,workerIndex:X.workerIndex??null,startedAt:X.startedAt??Date.now(),browser:X.browser??null}],y.value=[...m.value])}else if(W.type==="test-completed"){const X=ce;if(X.stepCategory)continue;const Te=`${X.title}@@${X.location}@@${JSON.stringify(X.browser)}`;if(U.has(Te)){const je=m.value.findIndex(xe=>`${xe.title}@@${xe.location}@@${JSON.stringify(xe.browser)}`===Te);if(je>=0){const xe=m.value[je],Be=[...m.value];Be[je]={...xe,filePath:X.filePath??xe.filePath,suitePath:X.suitePath??xe.suitePath,status:X.status,duration:X.duration,error:X.error,stepEvents:X.stepEvents??xe.stepEvents,wastedTimeMs:X.wastedTimeMs??xe.wastedTimeMs,workerIndex:X.workerIndex??xe.workerIndex,startedAt:X.startedAt?X.startedAt:xe.startedAt,browser:X.browser??xe.browser},m.value=Be,y.value=[...Be]}}else U.set(Te,!0),m.value=[...m.value,{id:m.value.length+1,title:X.title,filePath:X.filePath,suitePath:X.suitePath??void 0,status:X.status,duration:X.duration,location:X.location,error:X.error,stepEvents:X.stepEvents??null,wastedTimeMs:X.wastedTimeMs??null,workerIndex:X.workerIndex??null,startedAt:X.startedAt??void 0,browser:X.browser??null}],y.value=[...m.value]}else W.type==="run-progress"?v.value=ce:W.type==="run-finalizing"?(c.value=!0,v.value=ce):W.type==="run-finished"&&(c.value=!1,g(),T(),be.value++,re())}}function re(L=0){w||L>=5||setTimeout(async()=>{await T(),re(L+1)},1500*(L+1))}function O(L){te.push(L),ae&&clearTimeout(ae),ae=setTimeout(ee,200)}let f=null;function z(){f||(r.value?.testCases?.length&&J(r.value.testCases),f=As(L=>{L.scope==="run"&&L.runId===Number(u)?O(L.event):L.scope==="global"&&L.event.runId===Number(u)&&L.event.type==="run-started"&&T()}))}function ue(){if(w){z();return}M||p.value&&(r.value?.testCases?.length&&J(r.value.testCases),M=new EventSource(`/api/test-runs/${u}/stream`),M.onmessage=L=>{try{O(JSON.parse(L.data))}catch{}},M.onerror=()=>{})}function g(){M&&(M.close(),M=null),f&&(f(),f=null)}const P=D(()=>p.value||w&&r.value?.status==="initialising");ge(P,L=>{L?ue():g()},{immediate:!0}),ht(()=>{g()});let Y=null;const le=K([]);ge(y,L=>{Y===null&&(Y=requestAnimationFrame(()=>{le.value=L,Y=null}))},{immediate:!0});const Z=D(()=>p.value&&v.value?v.value:r.value?{totalTests:r.value.totalTests,passedTests:r.value.passedTests,failedTests:r.value.failedTests,skippedTests:r.value.skippedTests}:null);async function b(){d.value=!1,S.value=!0;try{await $fetch(`/api/test-runs/${u}`,{method:"DELETE"}),A.add({title:"Test run deleted",color:"success"}),await He(`/projects/${r.value?.project?.id}`)}catch(L){const W=L&&typeof L=="object"&&"data"in L?L.data?.message:void 0;A.add({title:"Delete failed",description:W||"An error occurred",color:"error"})}finally{S.value=!1}}const V=K(!1),ne=K(""),se=K([]),ye=K("all"),we=D(()=>se.value.length===1?se.value[0]:"all");function ie(L){se.value=!L||L==="all"?[]:[L]}const _e=D(()=>r.value?.reports||[]),$e=D(()=>{const L=y.value;return L?L.reduce((W,ce)=>W+(ce.wastedTimeMs??0),0):0}),me=K("test-cases"),Ce=K(null),be=K(0),Q=K(0);function x(){Ce.value=null}const ze=D(()=>r.value&&r.value.failedTests>0),qe=D(()=>{if(!r.value?.testCases)return 0;const L=new Set;for(const W of r.value.testCases)W.failureClusterId!=null&&L.add(W.failureClusterId);return L.size}),Oe=D(()=>{const L=p.value?y.value:r.value?.testCases;if(!L||L.length===0)return 0;const W=new Set;for(const ce of L)ce.workerIndex!=null&&ce.workerIndex>=0&&W.add(ce.workerIndex);return W.size}),lt=D(()=>[{label:`Test cases (${y.value.length})`,icon:"i-lucide-beaker",value:"test-cases",slot:"test-cases"},{label:"Insights",icon:"i-lucide-sparkles",value:"insights",slot:"insights"},{label:ze.value?`Failure groups (${qe.value})`:"Failure groups",icon:"i-lucide-layers",value:"failure-groups",slot:"failure-groups",disabled:!ze.value},{label:"Regression",icon:"i-lucide-git-pull-request-arrow",value:"regression",slot:"regression",disabled:!ze.value},{label:`Timeline${Oe.value>0?` (${Oe.value})`:""}`,icon:"i-lucide-timeline",value:"workers",slot:"workers"},{label:"Compare",icon:"i-lucide-git-compare-arrows",value:"compare",slot:"compare"},{label:`Slow endpoints${Q.value>0?` (${Q.value})`:""}`,icon:"i-lucide-network",value:"endpoints",slot:"endpoints"}]),Nt={"test-cases":"overflow-hidden flex flex-col",endpoints:"overflow-hidden flex flex-col"},it=D(()=>lt.value.filter(L=>!L.disabled).map(L=>L.value));typeof F.query.tab=="string"&&it.value.includes(F.query.tab)&&(me.value=F.query.tab),ge(it,L=>{L.includes(me.value)||(me.value="test-cases")}),ge(me,L=>{F.query.tab!==L&&R.replace({query:{...F.query,tab:L}})});const rt=K(null);function Mt(L){me.value="test-cases",De(()=>{rt.value?.scrollToCase(L)})}function At(L){Ce.value=L,me.value="test-cases"}return(L,W)=>{const ce=Qt,X=Ue,Te=ve,je=vt,xe=is,Be=rs,Ut=cs,Lt=Nn,Et=ke,Ye=Re,Ot=Pa,Kt=Fo,Wt=tl,Ht=Sl,Vt=Ti,Gt=Gi,Xt=tr,qt=ps,Yt=us,Jt=Dt,Zt=yt;return s(),a(G,null,[o(Yt,{id:"test-run-detail"},{header:i(()=>[o(Ut,null,{leading:i(()=>[o(ce),o(xe,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},...e(r)?.project?.id?[{label:e(r).project.label||e(r).project.name||"Project",to:`/projects/${e(r).project.id}`,slot:"project"}]:[{label:"Project"}],{label:`Run #${e(u)}`+(e(r)?.label?` — ${e(r).label}`:"")}]},{project:i(({item:fe})=>[o(X,{to:fe?.to,class:"text-sm font-medium text-[var(--ui-text-muted)] hover:text-[var(--ui-text)] transition-colors"},{default:i(()=>[$(l(fe?.label),1)]),_:2},1032,["to"]),I.value&&I.value!==Number(e(u))?(s(),_(je,{key:0,text:H.value?"Go to running run":"Go to latest run"},{default:i(()=>[o(X,{to:`/test-runs/${I.value}`},{default:i(()=>[n("span",sr,[o(Te,{name:"i-lucide-circle-play",class:q(["w-3.5 h-3.5 text-blue-500",{"animate-pulse":H.value}])},null,8,["class"])])]),_:1},8,["to"])]),_:1},8,["text"])):k("",!0)]),_:1},8,["items"])]),right:i(()=>[o(Be,{actions:[{label:"Refresh",icon:"i-lucide-refresh-cw",onClick:()=>e(T)()},{label:"Delete",icon:"i-lucide-trash-2",color:"error",variant:"soft",loading:e(S),onClick:()=>d.value=!0}]},null,8,["actions"])]),_:1})]),body:i(()=>[o(qt,{modelValue:e(me),"onUpdate:modelValue":W[5]||(W[5]=fe=>Ie(me)?me.value=fe:null),"tab-items":lt.value,"tab-panel-class":Nt},{summary:i(()=>[e(r)?(s(),_(Lt,{key:0,"test-run":e(r),"display-progress":Z.value,"all-reports":_e.value,"show-custom-data":e(V),finalizing:e(c),"active-filter":we.value,"total-wasted-time":$e.value,"onUpdate:showCustomData":W[0]||(W[0]=fe=>V.value=fe),onFilterStatus:ie,onLabelUpdated:e(T)},null,8,["test-run","display-progress","all-reports","show-custom-data","finalizing","active-filter","total-wasted-time","onLabelUpdated"])):k("",!0)]),"tab-test-cases":i(()=>[e(Ce)!=null?(s(),a("div",nr,[o(Et,{color:"info",variant:"subtle",size:"sm"},{default:i(()=>[...W[8]||(W[8]=[$(" Filtered by failure group ",-1)])]),_:1}),o(Ye,{size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-x",label:"Clear filter",onClick:x})])):k("",!0),o(Ot,{ref_key:"testCasesListRef",ref:rt,search:e(ne),"onUpdate:search":W[1]||(W[1]=fe=>Ie(ne)?ne.value=fe:null),"active-statuses":e(se),"onUpdate:activeStatuses":W[2]||(W[2]=fe=>Ie(se)?se.value=fe:null),"browser-filter":e(ye),"onUpdate:browserFilter":W[3]||(W[3]=fe=>Ie(ye)?ye.value=fe:null),"test-cases":e(y),suites:e(r)?.suites??[],"is-live":p.value,"failure-cluster-filter":e(Ce),"project-key":e(r)?.projectId,"project-name":e(r)?.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":i(()=>[o(Kt,{"test-run-id":Number(e(u)),"run-status":e(r)?.status??"","refresh-key":e(be),class:"flex-1 min-h-0 p-4"},null,8,["test-run-id","run-status","refresh-key"])]),"tab-failure-groups":i(()=>[o(Wt,{"refresh-key":e(be),onSelectCluster:At},null,8,["refresh-key"])]),"tab-regression":i(()=>[o(Ht,{"refresh-key":e(be)},null,8,["refresh-key"])]),"tab-workers":i(()=>[o(Vt,{"test-cases":e(le),"setup-steps":e(r)?.setupSteps??null,"shard-total":e(r)?.shardTotal??null,live:p.value,"wasted-patterns":e(r)?.wastedWaitPatterns??null,onSelectTestCase:Mt},null,8,["test-cases","setup-steps","shard-total","live","wasted-patterns"])]),"tab-compare":i(()=>[o(Gt,{"test-run":e(r)},null,8,["test-run"])]),"tab-endpoints":i(()=>[o(Xt,{"refresh-key":e(be),class:"flex-1 min-h-0",onEndpointsCount:W[4]||(W[4]=fe=>Q.value=fe)},null,8,["refresh-key"])]),_:1},8,["modelValue","tab-items"])]),_:1}),o(Zt,null,{default:i(()=>[o(Jt,{open:e(d),title:"Delete test run","onUpdate:open":W[7]||(W[7]=fe=>d.value=fe)},{body:i(()=>[n("p",null,[W[9]||(W[9]=$(" Are you sure you want to delete ",-1)),n("strong",null,"Test Run #"+l(e(r)?.id),1),W[10]||(W[10]=$("? This will also remove all associated test results, reports, and traces. This action cannot be undone. ",-1))])]),footer:i(()=>[o(Ye,{color:"neutral",variant:"ghost",label:"Cancel",onClick:W[6]||(W[6]=fe=>d.value=!1)}),o(Ye,{color:"error",label:"Delete",icon:"i-lucide-trash-2",loading:e(S),onClick:b},null,8,["loading"])]),_:1},8,["open"])]),_:1})],64)}}});export{ou as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as w,o as t,c as s,i as c,j as l,q as b,k as u,p as $,g as y,f as k,v as a,m as v,t as o,s as j,ac as U,V as f,E as _,F as S,y as N,G as F,r as p,h as L}from"./NQikbhmK.js";import{B as C,A as P,k as E,j as M}from"./CDk0q2hV.js";import{_ as O}from"./BPQoBGg5.js";import{_ as T}from"./C7P1UCO2.js";import{_ as D}from"./eptP4pGv.js";import{_ as H}from"./DS636elg.js";import{_ as q}from"./cHAnlQbv.js";const A={class:"flex items-center gap-2.5"},G=w({__name:"StatusBlock",props:{status:{},size:{}},setup(e){return(n,r)=>{const i=$,d=j;return t(),s("div",A,[c("div",{class:b(["shrink-0 rounded-lg flex items-center justify-center",[e.size==="sm"?"size-7":"size-8",{"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-400":e.status==="passed","bg-rose-100 text-rose-700 dark:bg-rose-900/40 dark:text-rose-400":e.status==="failed"||e.status==="timedout","bg-zinc-100 text-zinc-600 dark:bg-zinc-800 dark:text-zinc-400":e.status==="cancelled"||e.status==="skipped","bg-amber-100 text-amber-700 dark:bg-amber-900/40 dark:text-amber-400":e.status==="didnotrun","bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-400":e.status==="running"||e.status==="initialising"||e.status==="finalizing"}]])},[l(i,{name:("getStatusIcon"in n?n.getStatusIcon:u(P))(e.status),class:b([e.size==="sm"?"size-3.5":"size-4.5",{"animate-spin":("isStatusInFlight"in n?n.isStatusInFlight:u(C))(e.status)}])},null,8,["name","class"])],2),l(d,{color:("getStatusColor"in n?n.getStatusColor:u(M))(e.status),variant:"subtle",class:"capitalize gap-1 items-center"},{default:y(()=>[("isStatusInFlight"in n?n.isStatusInFlight:u(C))(e.status)?(t(),k(i,{key:0,name:"i-lucide-loader-circle",class:"size-3 animate-spin shrink-0"})):a("",!0),v(" "+o(("formatStatusLabel"in n?n.formatStatusLabel:u(E))(e.status)),1)]),_:1},8,["color"])])}}}),Oe=Object.assign(G,{__name:"StatusBlock"}),J={class:"flex items-start justify-between gap-2"},K={class:"flex items-center gap-2 min-w-0"},Q={class:"min-w-0"},R={class:"text-sm font-medium inline-flex items-center gap-1"},W={key:0,class:"text-xs text-gray-400 mt-0.5"},X={key:0,class:"flex items-center gap-1 shrink-0"},Y=w({__name:"BlockCard",props:{title:{},icon:{},subtitle:{},iconClass:{default:"text-primary"},help:{}},setup(e){return(n,r)=>{const i=$,d=T,x=D;return t(),k(x,{class:"shadow-xs",ui:{header:"px-3 py-2.5 sm:px-3",body:"p-3 sm:p-3"}},U({header:y(()=>[c("div",J,[c("div",K,[e.icon?(t(),k(i,{key:0,name:e.icon,class:b(["w-4 h-4 shrink-0",e.iconClass])},null,8,["name","class"])):a("",!0),c("div",Q,[c("span",R,[v(o(e.title),1),e.help?(t(),k(d,{key:0,topic:e.help},null,8,["topic"])):a("",!0)]),e.subtitle||n.$slots.subtitle?(t(),s("p",W,[f(n.$slots,"subtitle",{},()=>[v(o(e.subtitle),1)])])):a("",!0)])]),n.$slots.actions?(t(),s("div",X,[f(n.$slots,"actions")])):a("",!0)])]),default:y(()=>[f(n.$slots,"default")]),_:2},[n.$slots.footer?{name:"footer",fn:y(()=>[f(n.$slots,"footer")]),key:"0"}:void 0]),1024)}}}),V=Object.assign(Y,{__name:"BlockCard"}),Z={class:"space-y-1.5 text-sm"},ee={key:0,class:"flex items-center gap-x-3 gap-y-1 flex-wrap"},te={key:0,class:"flex items-center gap-1.5"},se={class:"font-medium"},ae={key:1,class:"flex items-center gap-1.5"},ne={class:"text-xs font-mono bg-gray-100 dark:bg-gray-800 px-1 rounded"},ie={key:2,class:"flex items-center gap-1.5"},oe={class:"text-gray-600 dark:text-gray-400"},le={key:1,class:"text-gray-400 text-xs break-words"},ce=w({__name:"SourceInfoCard",props:{scm:{},class:{}},setup(e){return(n,r)=>{const i=$,d=V;return t(),k(d,{class:b(n.$props.class),title:"Source",icon:"i-lucide-git-branch"},{default:y(()=>[c("div",Z,[e.scm.branch||e.scm.commit||e.scm.author?(t(),s("div",ee,[e.scm.branch?(t(),s("span",te,[l(i,{name:"i-lucide-git-branch",class:"w-3.5 h-3.5 text-gray-400 shrink-0"}),c("span",se,o(e.scm.branch),1)])):a("",!0),e.scm.commit?(t(),s("span",ae,[l(i,{name:"i-lucide-git-commit-horizontal",class:"w-3.5 h-3.5 text-gray-400 shrink-0"}),c("code",ne,o(e.scm.commit.length>=8?e.scm.commit.substring(0,8):e.scm.commit),1)])):a("",!0),e.scm.author?(t(),s("span",ie,[l(i,{name:"i-lucide-user",class:"w-3.5 h-3.5 text-gray-400 shrink-0"}),c("span",oe,o(e.scm.author),1)])):a("",!0)])):a("",!0),e.scm.commitMessage?(t(),s("p",le,o(e.scm.commitMessage),1)):a("",!0)])]),_:1},8,["class"])}}}),Te=Object.assign(ce,{__name:"SourceInfoCard"}),re={class:"space-y-1.5 text-sm"},me={key:0,class:"flex items-center gap-x-2 gap-y-1 flex-wrap"},ue={key:0,class:"rounded-full border border-default px-2 py-0.5 text-xs bg-elevated/60"},de={key:1},ge={key:1,class:"flex items-center gap-1.5"},he=["href"],be={key:1},fe={key:2,class:"flex items-center gap-x-1.5 gap-y-1 flex-wrap"},ye={key:0},ke={key:1,class:"text-gray-300 dark:text-gray-600"},xe={key:2},ve={key:3,class:"flex items-center gap-x-1.5 gap-y-1 flex-wrap"},we={key:0},$e={key:1,class:"text-gray-300 dark:text-gray-600"},Se={key:2},Ce={key:4,class:"flex items-center gap-1.5"},Ve={key:0,class:"tabular-nums"},Ie={key:0,class:"text-gray-400"},ze=w({__name:"CiEnvCard",props:{ci:{},environment:{},playwrightVersion:{},reporterVersion:{},browser:{},class:{}},setup(e){return(n,r)=>{const i=$,d=O,x=V;return t(),k(x,{class:b(n.$props.class),title:"CI / Env",icon:"i-lucide-cloud",help:"run.ci-env"},{default:y(()=>[c("div",re,[e.environment||e.ci?.provider?(t(),s("div",me,[l(i,{name:"i-lucide-cloud",class:"w-3.5 h-3.5 text-gray-400 shrink-0"}),e.environment?(t(),s("span",ue,o(e.environment),1)):a("",!0),e.ci?.provider?(t(),s("span",de,o(e.ci.provider),1)):a("",!0)])):a("",!0),e.ci?.buildNumber||e.ci?.buildUrl?(t(),s("div",ge,[l(i,{name:"i-lucide-hash",class:"w-3.5 h-3.5 text-gray-400 shrink-0"}),e.ci?.buildUrl?(t(),s("a",{key:0,href:e.ci.buildUrl,target:"_blank",class:"text-primary hover:underline"},o(e.ci?.buildNumber?`Build #${e.ci.buildNumber}`:"View build"),9,he)):(t(),s("span",be,"Build #"+o(e.ci.buildNumber),1))])):a("",!0),e.ci?.workflow||e.ci?.jobName?(t(),s("div",fe,[l(i,{name:"i-lucide-workflow",class:"w-3.5 h-3.5 text-gray-400 shrink-0"}),e.ci?.workflow?(t(),s("span",ye,o(e.ci.workflow),1)):a("",!0),e.ci?.workflow&&e.ci?.jobName?(t(),s("span",ke,"·")):a("",!0),e.ci?.jobName?(t(),s("span",xe,o(e.ci.jobName),1)):a("",!0)])):a("",!0),e.playwrightVersion||e.reporterVersion?(t(),s("div",ve,[l(i,{name:"i-lucide-tag",class:"w-3.5 h-3.5 text-gray-400 shrink-0"}),e.playwrightVersion?(t(),s("span",we,"Playwright v"+o(e.playwrightVersion),1)):a("",!0),e.playwrightVersion&&e.reporterVersion?(t(),s("span",$e,"·")):a("",!0),e.reporterVersion?(t(),s("span",Se,"Piwi v"+o(e.reporterVersion),1)):a("",!0)])):a("",!0),e.browser?(t(),s("div",Ce,[l(d,{browser:{...e.browser,viewport:void 0},size:"sm"},null,8,["browser"]),e.browser.viewport?(t(),s("span",Ve,[v(o(e.browser.viewport.width)+"×"+o(e.browser.viewport.height)+" ",1),e.browser.deviceScaleFactor&&e.browser.deviceScaleFactor!==1?(t(),s("span",Ie,"@"+o(e.browser.deviceScaleFactor)+"x",1)):a("",!0)])):a("",!0)])):a("",!0)])]),_:1},8,["class"])}}}),De=Object.assign(ze,{__name:"CiEnvCard"}),Be={class:"flex flex-col h-full gap-4 p-1 max-lg:overflow-y-auto lg:overflow-hidden"},je={key:0,class:"lg:shrink-0"},Ue={class:"lg:shrink-0 max-lg:sticky max-lg:top-0 max-lg:z-10 max-lg:-mx-1 max-lg:bg-(--ui-bg-canvas) max-lg:px-1 max-lg:py-1.5"},_e=w({__name:"DetailPageLayout",props:F({tabItems:{},tabPanelClass:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const n=e,r=_(e,"modelValue"),i=p(!1),d=L(()=>n.tabItems.find(g=>g.value===r.value)?.icon);function x(g){return["min-h-0","lg:flex-1",n.tabPanelClass?.[g]??"overflow-y-auto","max-lg:!block","max-lg:!overflow-visible"]}return(g,h)=>{const I=$,z=H,B=q;return t(),s("div",Be,[g.$slots.summary?(t(),s("div",je,[c("div",{class:b(u(i)?"max-lg:hidden":"")},[f(g.$slots,"summary")],2),c("button",{type:"button",class:"lg:hidden mt-2 w-full flex items-center justify-center gap-1 rounded-md border border-default py-1.5 text-xs font-medium text-muted hover:bg-elevated/60 transition-colors",onClick:h[0]||(h[0]=m=>i.value=!u(i))},[l(I,{name:u(i)?"i-lucide-chevron-down":"i-lucide-chevron-up",class:"size-3.5"},null,8,["name"]),v(" "+o(u(i)?"Show summary":"Hide summary"),1)])])):a("",!0),c("div",Ue,[l(z,{modelValue:r.value,"onUpdate:modelValue":h[1]||(h[1]=m=>r.value=m),items:e.tabItems,icon:u(d),size:"md",class:"w-full sm:hidden"},null,8,["modelValue","items","icon"]),l(B,{modelValue:r.value,"onUpdate:modelValue":h[2]||(h[2]=m=>r.value=m),items:e.tabItems,size:"sm",class:"hidden sm:flex",ui:{list:"overflow-x-auto",trigger:"shrink-0"}},null,8,["modelValue","items"])]),(t(!0),s(S,null,N(e.tabItems,m=>(t(),s(S,{key:m.value},[r.value===m.value?(t(),s("div",{key:0,class:b(x(m.value))},[f(g.$slots,`tab-${m.slot??m.value}`)],2)):a("",!0)],64))),128))])}}}),He=Object.assign(_e,{__name:"DetailPageLayout"});export{Oe as _,Te as a,De as b,V as c,He as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as L,Y as He,az as st,Z as Le,B as ae,o as n,f as c,g as u,j as y,k as e,W as C,l as Ye,V as v,ba as nt,bb as Ee,K as Ce,bc as ut,r as G,h as w,at as dt,$ as Te,bd as pt,U as X,X as le,be as ct,bf as ft,bg as mt,bh as gt,bi as vt,ad as Fe,bj as bt,bk as Ze,C as qe,bl as yt,ag as ht,bm as _t,a0 as te,bn as xt,v as A,bo as Ct,aA as Ie,aC as qt,m as ee,H as Ae,S as It,bp as St,bq as zt,t as Z,a1 as me,br as wt,a2 as Bt,a3 as kt,E as Ot,a4 as Lt,a5 as At,a6 as Et,a7 as Tt,bs as Ft,aN as Vt,bt as $t,aY as Pt,b3 as Ne,aP as Be,b4 as Y,c as F,q as h,i as ce,aH as se,p as xe,aI as je,bu as Rt,F as Q,y as ke,_ as Dt,bv as Mt,I as Kt,G as Ge,bw as Ue,bx as fe,av as Nt,aZ as jt,a8 as Gt,by as Ut,bz as Wt,bA as Ht}from"./NQikbhmK.js";import{L as Yt,a as Zt,b as Xt,i as Jt,c as Qt,d as ea,e as ta,f as aa,g as la}from"./BeLWlVK0.js";const[D,ia]=Te("ComboboxRoot");var oa=L({__name:"ComboboxRoot",props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1},resetSearchTermOnBlur:{type:Boolean,required:!1,default:!0},resetSearchTermOnSelect:{type:Boolean,required:!1,default:!0},openOnFocus:{type:Boolean,required:!1,default:!1},openOnClick:{type:Boolean,required:!1,default:!1},ignoreFilter:{type:Boolean,required:!1},resetModelValueOnClear:{type:Boolean,required:!1,default:!1},modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},multiple:{type:Boolean,required:!1},dir:{type:String,required:!1},disabled:{type:Boolean,required:!1},highlightOnHover:{type:Boolean,required:!1,default:!0},by:{type:[String,Function],required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue","highlight","update:open"],setup(m,{expose:f,emit:o}){const s=m,a=o,{primitiveElement:l,currentElement:t}=Ee(),{multiple:p,disabled:b,ignoreFilter:E,resetSearchTermOnSelect:_,openOnFocus:V,openOnClick:T,dir:M,resetModelValueOnClear:B,highlightOnHover:q}=He(s),I=st(M),K=Le(s,"modelValue",a,{defaultValue:s.defaultValue??(p.value?[]:void 0),passive:s.modelValue===void 0,deep:!0}),N=Le(s,"open",a,{defaultValue:s.defaultOpen,passive:s.open===void 0});async function g(S){N.value=S,oe.value="",S?(await Ce(),l.value?.highlightSelected(),j.value=!0,U.value?.focus()):(j.value=!1,setTimeout(()=>{!S&&s.resetSearchTermOnBlur&&k.trigger()},1))}const k=ut(),j=G(!1),ie=G(!1),U=G(),ne=G(),ge=w(()=>l.value?.highlightedElement??void 0),ue=G(new Map),de=G(new Map),{contains:Se}=pt({sensitivity:"base"}),oe=G(""),ve=w(S=>{if(!oe.value||s.ignoreFilter||ie.value)return{count:ue.value.size,items:S?.items??new Map,groups:S?.groups??new Set(de.value.keys())};let $=0;const P=new Map,J=new Set;for(const[pe,H]of ue.value){const re=Se(H,oe.value);P.set(pe,re?1:0),re&&$++}for(const[pe,H]of de.value)for(const re of H)if(P.get(re)>0){J.add(pe);break}return{count:$,items:P,groups:J}}),W=dt();return ae(()=>{W?.exposed&&(W.exposed.highlightItem=l.value?.highlightItem,W.exposed.highlightFirstItem=l.value?.highlightFirstItem,W.exposed.highlightSelected=l.value?.highlightSelected)}),f({filtered:ve,highlightedElement:ge,highlightItem:l.value?.highlightItem,highlightFirstItem:l.value?.highlightFirstItem,highlightSelected:l.value?.highlightSelected}),ia({modelValue:K,multiple:p,disabled:b,open:N,onOpenChange:g,contentId:"",isUserInputted:j,isVirtual:ie,inputElement:U,highlightedElement:ge,onInputElementChange:S=>U.value=S,triggerElement:ne,onTriggerElementChange:S=>ne.value=S,parentElement:t,resetSearchTermOnSelect:_,onResetSearchTerm:k.on,allItems:ue,allGroups:de,filterSearch:oe,filterState:ve,ignoreFilter:E,openOnFocus:V,openOnClick:T,resetModelValueOnClear:B}),(S,$)=>(n(),c(e(nt),null,{default:u(()=>[y(e(Yt),C({ref_key:"primitiveElement",ref:l},S.$attrs,{modelValue:e(K),"onUpdate:modelValue":$[0]||($[0]=P=>Ye(K)?K.value=P:null),style:{pointerEvents:e(N)?"auto":void 0},as:S.as,"as-child":S.asChild,dir:e(I),multiple:e(p),name:S.name,required:S.required,disabled:e(b),"highlight-on-hover":e(q),by:s.by,onHighlight:$[1]||($[1]=P=>a("highlight",P))}),{default:u(()=>[v(S.$slots,"default",{open:e(N),modelValue:e(K)})]),_:3},16,["modelValue","style","as","as-child","dir","multiple","name","required","disabled","highlight-on-hover","by"])]),_:3}))}}),ra=oa,sa=L({__name:"ComboboxAnchor",props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(m){const{forwardRef:f}=X();return(o,s)=>(n(),c(e(ct),{"as-child":"",reference:o.reference},{default:u(()=>[y(e(le),C({ref:e(f),"as-child":o.asChild,as:o.as},o.$attrs),{default:u(()=>[v(o.$slots,"default")]),_:3},16,["as-child","as"])]),_:3},8,["reference"]))}}),na=sa;const[ua,da]=Te("ComboboxContent");var pa=L({__name:"ComboboxContentImpl",props:{position:{type:String,required:!1,default:"inline"},bodyLock:{type:Boolean,required:!1},hideWhenEmpty:{type:Boolean,required:!1},memoDependencies:{type:Array,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(m,{emit:f}){const o=m,s=f,{position:a}=He(o),l=D(),t=w(()=>l.ignoreFilter.value?l.allItems.value.size===0:l.filterState.value.count===0),{forwardRef:p,currentElement:b}=X();ft(o.bodyLock),mt(),gt(l.parentElement);const E=w(()=>o.position==="popper"?o:{}),_=vt(E.value),V={boxSizing:"border-box","--reka-combobox-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-combobox-content-available-width":"var(--reka-popper-available-width)","--reka-combobox-content-available-height":"var(--reka-popper-available-height)","--reka-combobox-trigger-width":"var(--reka-popper-anchor-width)","--reka-combobox-trigger-height":"var(--reka-popper-anchor-height)"};da({position:a});const T=G(!1);ae(()=>{l.inputElement.value&&(T.value=b.value.contains(l.inputElement.value),T.value&&l.inputElement.value.focus())}),Fe(()=>{const B=bt();T.value&&(!B||B===document.body)&&l.triggerElement.value?.focus()});function M(B){if(l.parentElement.value?.contains(B))return!0;const I=(B instanceof Element?B.closest("label"):null)?.control;return!!I&&!!l.parentElement.value?.contains(I)}return(B,q)=>(n(),c(e(Zt),{"as-child":""},{default:u(()=>[y(e(Ze),{"as-child":"",onMountAutoFocus:q[5]||(q[5]=qe(()=>{},["prevent"])),onUnmountAutoFocus:q[6]||(q[6]=qe(()=>{},["prevent"]))},{default:u(()=>[y(e(yt),{"as-child":"","disable-outside-pointer-events":B.disableOutsidePointerEvents,onDismiss:q[0]||(q[0]=I=>e(l).onOpenChange(!1)),onFocusOutside:q[1]||(q[1]=I=>{M(I.target)&&I.preventDefault(),s("focusOutside",I)}),onInteractOutside:q[2]||(q[2]=I=>s("interactOutside",I)),onEscapeKeyDown:q[3]||(q[3]=I=>s("escapeKeyDown",I)),onPointerDownOutside:q[4]||(q[4]=I=>{M(I.target)&&I.preventDefault(),s("pointerDownOutside",I)})},{default:u(()=>[(n(),c(ht(e(a)==="popper"?e(_t):e(le)),C({...B.$attrs,...e(_)},{id:e(l).contentId,ref:e(p),"memo-dependencies":e(a)==="popper"?[e(l).filterSearch.value,e(l).filterState.value]:void 0,"data-state":e(l).open.value?"open":"closed","data-empty":t.value?"":void 0,style:{display:o.hideWhenEmpty&&t.value?"none":"flex",flexDirection:"column",outline:"none",...e(a)==="popper"?V:{}}}),{default:u(()=>[v(B.$slots,"default")]),_:3},16,["id","memo-dependencies","data-state","data-empty","style"]))]),_:3},8,["disable-outside-pointer-events"])]),_:3})]),_:3}))}}),ca=pa,fa=L({__name:"ComboboxArrow",props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"svg"}},setup(m){const f=m,o=D(),s=ua();return X(),(a,l)=>e(o).open.value&&e(s).position.value==="popper"?(n(),c(e(xt),te(C({key:0},f)),{default:u(()=>[v(a.$slots,"default")]),_:3},16)):A("v-if",!0)}}),ma=fa,ga=L({__name:"ComboboxCancel",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(m){const f=m;X();const o=D();function s(){o.filterSearch.value="",o.inputElement.value&&(o.inputElement.value.value="",o.inputElement.value.focus()),o.resetModelValueOnClear?.value&&(o.modelValue.value=o.multiple.value?[]:null)}return(a,l)=>(n(),c(e(le),C({type:a.as==="button"?"button":void 0},f,{tabindex:"-1",onClick:s}),{default:u(()=>[v(a.$slots,"default")]),_:3},16,["type"]))}}),va=ga,ba=L({__name:"ComboboxContent",props:{forceMount:{type:Boolean,required:!1},position:{type:String,required:!1},bodyLock:{type:Boolean,required:!1},hideWhenEmpty:{type:Boolean,required:!1},memoDependencies:{type:Array,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(m,{emit:f}){const a=Ct(m,f),{forwardRef:l}=X(),t=D();return t.contentId||=Ie(void 0,"reka-combobox-content"),(p,b)=>(n(),c(e(qt),{present:p.forceMount||e(t).open.value},{default:u(()=>[y(ca,C({...e(a),...p.$attrs},{ref:e(l)}),{default:u(()=>[v(p.$slots,"default")]),_:3},16)]),_:3},8,["present"]))}}),ya=ba,ha=L({__name:"ComboboxEmpty",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(m){const f=m,o=D(),s=w(()=>o.ignoreFilter.value?o.allItems.value.size===0:o.filterState.value.count===0);return(a,l)=>s.value?(n(),c(e(le),te(C({key:0},f)),{default:u(()=>[v(a.$slots,"default",{},()=>[l[0]||(l[0]=ee("No options"))])]),_:3},16)):A("v-if",!0)}}),_a=ha;const[Xe,xa]=Te("ComboboxGroup");var Ca=L({__name:"ComboboxGroup",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(m){const f=m,o=Ie(void 0,"reka-combobox-group"),s=D(),a=w(()=>s.ignoreFilter.value?!0:s.filterSearch.value?s.filterState.value.groups.has(o):!0),l=xa({id:o,labelId:""});return ae(()=>{s.allGroups.value.has(o)||s.allGroups.value.set(o,new Set)}),Fe(()=>{s.allGroups.value.delete(o)}),(t,p)=>(n(),c(e(Xt),C({id:e(o),"aria-labelledby":e(l).labelId},f,{hidden:a.value?void 0:!0}),{default:u(()=>[v(t.$slots,"default")]),_:3},16,["id","aria-labelledby","hidden"]))}}),Oe=Ca,qa=L({__name:"ComboboxInput",props:{displayValue:{type:Function,required:!1},modelValue:{type:String,required:!1},autoFocus:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"input"}},emits:["update:modelValue"],setup(m,{emit:f}){const o=m,s=f,a=D(),l=Jt(),{primitiveElement:t,currentElement:p}=Ee(),b=Le(o,"modelValue",s,{passive:o.modelValue===void 0});ae(()=>{p.value&&a.onInputElementChange(p.value)});const{isComposing:E,handleCompositionStart:_,handleCompositionEnd:V}=St(g=>{const k=g.target;k&&M(k.value)});function T(g){E.value||(g.preventDefault(),a.open.value||a.onOpenChange(!0))}function M(g){a.open.value?a.filterSearch.value=g:(a.onOpenChange(!0),Ce(()=>{g&&(a.filterSearch.value=g,l.highlightFirstItem())}))}function B(g){E.value||M(g.target.value)}function q(){a.openOnFocus.value&&!a.open.value&&a.onOpenChange(!0)}function I(g){if(!a.open.value)return;const k=g.relatedTarget;if(!k)return;const j=a.parentElement.value?.contains(k),ie=document.getElementById(a.contentId)?.contains(k);!j&&!ie&&requestAnimationFrame(()=>{if(!a.open.value)return;const U=document.activeElement;!a.parentElement.value?.contains(U)&&!document.getElementById(a.contentId)?.contains(U)&&a.onOpenChange(!1)})}function K(){a.openOnClick.value&&!a.open.value&&a.onOpenChange(!0)}function N(){const g=a.modelValue.value;o.displayValue?b.value=o.displayValue(g):!a.multiple.value&&g&&!Array.isArray(g)&&typeof g!="object"?b.value=g.toString():b.value="",Ce(()=>{b.value=b.value})}return a.onResetSearchTerm(()=>{N()}),Ae(a.modelValue,async()=>{!a.isUserInputted.value&&a.resetSearchTermOnSelect.value&&N()},{immediate:!0,deep:!0}),Ae(a.filterState,(g,k)=>{!a.isVirtual.value&&k.count===0&&l.highlightFirstItem()}),(g,k)=>(n(),c(e(Qt),{ref_key:"primitiveElement",ref:t,modelValue:e(b),"onUpdate:modelValue":k[0]||(k[0]=j=>Ye(b)?b.value=j:null),as:g.as,"as-child":g.asChild,"auto-focus":g.autoFocus,disabled:g.disabled,"aria-expanded":e(a).open.value,"aria-controls":e(a).contentId,"aria-autocomplete":"list",role:"combobox",autocomplete:"off",onClick:K,onInput:B,onKeydown:It(T,["down","up"]),onFocus:q,onBlur:I,onCompositionstart:e(_),onCompositionend:e(V)},{default:u(()=>[v(g.$slots,"default")]),_:3},8,["modelValue","as","as-child","auto-focus","disabled","aria-expanded","aria-controls","onCompositionstart","onCompositionend"]))}}),Ia=qa,Sa=L({__name:"ComboboxItem",props:{textValue:{type:String,required:!1},value:{type:null,required:!0},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select"],setup(m,{emit:f}){const o=m,s=f,a=Ie(void 0,"reka-combobox-item"),l=D(),t=Xe(null),{primitiveElement:p,currentElement:b}=Ee();if(o.value==="")throw new Error("A <ComboboxItem /> must have a value prop that is not an empty string. This is because the Combobox value can be set to an empty string to clear the selection and show the placeholder.");const E=w(()=>{if(l.isVirtual.value||l.ignoreFilter.value||!l.filterSearch.value)return!0;{const _=l.filterState.value.items.get(a);return _===void 0?!0:_>0}});return ae(()=>{l.allItems.value.set(a,o.textValue||b.value.textContent||b.value.innerText);const _=t?.id;_&&(l.allGroups.value.has(_)?l.allGroups.value.get(_)?.add(a):l.allGroups.value.set(_,new Set([a])))}),Fe(()=>{l.allItems.value.delete(a)}),(_,V)=>E.value?zt([E.value,e(l).filterSearch.value,e(l).disabled.value,_.disabled,o.value,o.as,o.asChild,...Object.values(_.$attrs)],()=>(n(),c(e(ea),C({key:0},o,{id:e(a),ref_key:"primitiveElement",ref:p,disabled:e(l).disabled.value||_.disabled,onSelect:V[0]||(V[0]=T=>{s("select",T),!T.defaultPrevented&&(!e(l).multiple.value&&!_.disabled&&!e(l).disabled.value?(T.preventDefault(),e(l).onOpenChange(!1),e(l).modelValue.value=o.value):e(l).multiple.value&&e(l).inputElement.value?.focus())})}),{default:u(()=>[v(_.$slots,"default",{},()=>[ee(Z(_.value),1)])]),_:3},16,["id","disabled"])),V,1):A("v-if",!0)}}),We=Sa,za=L({__name:"ComboboxItemIndicator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(m){const f=m;return(o,s)=>(n(),c(e(ta),te(me(f)),{default:u(()=>[v(o.$slots,"default")]),_:3},16))}}),wa=za,Ba=L({__name:"ComboboxLabel",props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"div"}},setup(m){const f=m;X();const o=Xe({id:"",labelId:""});return o.labelId||=Ie(void 0,"reka-combobox-group-label"),(s,a)=>(n(),c(e(le),C(f,{id:e(o).labelId}),{default:u(()=>[v(s.$slots,"default")]),_:3},16,["id"]))}}),ka=Ba,Oa=L({__name:"ComboboxPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(m){const f=m;return(o,s)=>(n(),c(e(wt),te(me(f)),{default:u(()=>[v(o.$slots,"default")]),_:3},16))}}),La=Oa,Aa=L({__name:"ComboboxSeparator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(m){const f=m;return X(),(o,s)=>(n(),c(e(le),C(f,{"aria-hidden":"true"}),{default:u(()=>[v(o.$slots,"default")]),_:3},16))}}),Ea=Aa,Ta=L({__name:"ComboboxTrigger",props:{disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(m){const f=m,{forwardRef:o,currentElement:s}=X(),a=D(),l=w(()=>f.disabled||a.disabled.value||!1);return ae(()=>{s.value&&a.onTriggerElementChange(s.value)}),(t,p)=>(n(),c(e(le),C(f,{ref:e(o),type:t.as==="button"?"button":void 0,tabindex:"-1","aria-label":"Show popup","aria-haspopup":"listbox","aria-expanded":e(a).open.value,"aria-controls":e(a).contentId,"data-state":e(a).open.value?"open":"closed",disabled:l.value,"data-disabled":l.value?"":void 0,"aria-disabled":l.value??void 0,onClick:p[0]||(p[0]=b=>e(a).onOpenChange(!e(a).open.value))}),{default:u(()=>[v(t.$slots,"default")]),_:3},16,["type","aria-expanded","aria-controls","data-state","disabled","data-disabled","aria-disabled"]))}}),Fa=Ta,Va=L({__name:"ComboboxVirtualizer",props:{options:{type:Array,required:!0},overscan:{type:Number,required:!1},estimateSize:{type:[Number,Function],required:!1},textContent:{type:Function,required:!1}},setup(m){const f=m,o=D();return o.isVirtual.value=!0,(s,a)=>(n(),c(aa,te(me(f)),{default:u(l=>[v(s.$slots,"default",te(me(l)))]),_:3},16))}}),$a=Va;const Pa={slots:{base:["relative group rounded-md inline-flex items-center disabled:cursor-not-allowed disabled:opacity-75","transition-colors"],leading:"absolute inset-y-0 start-0 flex items-center",leadingIcon:"shrink-0 text-dimmed",leadingAvatar:"shrink-0",leadingAvatarSize:"",trailing:"absolute inset-y-0 end-0 flex items-center",trailingIcon:"shrink-0 text-dimmed",value:"truncate pointer-events-none",placeholder:"truncate text-dimmed",arrow:"fill-bg stroke-default",content:["max-h-[min(15rem,var(--reka-select-content-available-height,15rem))] w-(--reka-select-trigger-width) bg-default shadow-lg rounded-md ring ring-default overflow-hidden origin-(--reka-select-content-transform-origin) pointer-events-auto flex flex-col","max-h-[min(15rem,var(--reka-combobox-content-available-height,15rem))] origin-(--reka-combobox-content-transform-origin) w-(--reka-combobox-trigger-width)"],viewport:"relative scroll-py-1 overflow-y-auto flex-1",group:"p-1 isolate",empty:"text-center text-muted",label:"font-semibold text-highlighted",separator:"-mx-1 my-1 h-px bg-border",item:["group relative w-full flex items-start select-none outline-none before:absolute before:z-[-1] before:inset-px before:rounded-md data-disabled:cursor-not-allowed data-disabled:opacity-75 text-default data-highlighted:not-data-disabled:text-highlighted data-highlighted:not-data-disabled:before:bg-elevated/50","transition-colors before:transition-colors"],itemLeadingIcon:["shrink-0 text-dimmed group-data-highlighted:not-group-data-disabled:text-default","transition-colors"],itemLeadingAvatar:"shrink-0",itemLeadingAvatarSize:"",itemLeadingChip:"shrink-0",itemLeadingChipSize:"",itemTrailing:"ms-auto inline-flex gap-1.5 items-center",itemTrailingIcon:"shrink-0",itemWrapper:"flex-1 flex flex-col min-w-0",itemLabel:"truncate",itemDescription:"truncate text-muted",input:"border-b border-default",focusScope:"flex flex-col min-h-0",trailingClear:"p-0"},variants:{fieldGroup:{horizontal:"not-only:first:rounded-e-none not-only:last:rounded-s-none not-last:not-first:rounded-none focus-visible:z-[1]",vertical:"not-only:first:rounded-b-none not-only:last:rounded-t-none not-last:not-first:rounded-none focus-visible:z-[1]"},size:{xs:{base:"px-2 py-1 text-xs gap-1",leading:"ps-2",trailing:"pe-2",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4",label:"p-1 text-[10px]/3 gap-1",item:"p-1 text-xs gap-1",itemLeadingIcon:"size-4",itemLeadingAvatarSize:"3xs",itemLeadingChip:"size-4",itemLeadingChipSize:"sm",itemTrailingIcon:"size-4",empty:"p-2 text-xs"},sm:{base:"px-2.5 py-1.5 text-xs gap-1.5",leading:"ps-2.5",trailing:"pe-2.5",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4",label:"p-1.5 text-[10px]/3 gap-1.5",item:"p-1.5 text-xs gap-1.5",itemLeadingIcon:"size-4",itemLeadingAvatarSize:"3xs",itemLeadingChip:"size-4",itemLeadingChipSize:"sm",itemTrailingIcon:"size-4",empty:"p-2.5 text-xs"},md:{base:"px-2.5 py-1.5 text-sm gap-1.5",leading:"ps-2.5",trailing:"pe-2.5",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5",label:"p-1.5 text-xs gap-1.5",item:"p-1.5 text-sm gap-1.5",itemLeadingIcon:"size-5",itemLeadingAvatarSize:"2xs",itemLeadingChip:"size-5",itemLeadingChipSize:"md",itemTrailingIcon:"size-5",empty:"p-2.5 text-sm"},lg:{base:"px-3 py-2 text-sm gap-2",leading:"ps-3",trailing:"pe-3",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5",label:"p-2 text-xs gap-2",item:"p-2 text-sm gap-2",itemLeadingIcon:"size-5",itemLeadingAvatarSize:"2xs",itemLeadingChip:"size-5",itemLeadingChipSize:"md",itemTrailingIcon:"size-5",empty:"p-3 text-sm"},xl:{base:"px-3 py-2 text-base gap-2",leading:"ps-3",trailing:"pe-3",leadingIcon:"size-6",leadingAvatarSize:"xs",trailingIcon:"size-6",label:"p-2 text-sm gap-2",item:"p-2 text-base gap-2",itemLeadingIcon:"size-6",itemLeadingAvatarSize:"xs",itemLeadingChip:"size-6",itemLeadingChipSize:"lg",itemTrailingIcon:"size-6",empty:"p-3 text-base"}},variant:{outline:"text-highlighted bg-default ring ring-inset ring-accented hover:bg-elevated disabled:bg-default",soft:"text-highlighted bg-elevated/50 hover:bg-elevated focus:bg-elevated disabled:bg-elevated/50",subtle:"text-highlighted bg-elevated ring ring-inset ring-accented hover:bg-accented/75 disabled:bg-elevated",ghost:"text-highlighted bg-transparent hover:bg-elevated focus:bg-elevated disabled:bg-transparent dark:disabled:bg-transparent",none:"text-highlighted bg-transparent focus:outline-none"},color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},leading:{true:""},trailing:{true:""},loading:{true:""},highlight:{true:""},fixed:{false:""},type:{file:"file:me-1.5 file:font-medium file:text-muted file:outline-none"},position:{popper:{content:"data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in]"},"item-aligned":{content:""}},multiple:{true:""},virtualize:{true:{viewport:"p-1 isolate"},false:{viewport:"divide-y divide-default"}}},compoundVariants:[{color:"primary",variant:["outline","subtle"],class:"outline-primary/25 focus-visible:outline-3 focus-visible:ring-primary"},{color:"secondary",variant:["outline","subtle"],class:"outline-secondary/25 focus-visible:outline-3 focus-visible:ring-secondary"},{color:"success",variant:["outline","subtle"],class:"outline-success/25 focus-visible:outline-3 focus-visible:ring-success"},{color:"info",variant:["outline","subtle"],class:"outline-info/25 focus-visible:outline-3 focus-visible:ring-info"},{color:"warning",variant:["outline","subtle"],class:"outline-warning/25 focus-visible:outline-3 focus-visible:ring-warning"},{color:"error",variant:["outline","subtle"],class:"outline-error/25 focus-visible:outline-3 focus-visible:ring-error"},{color:"primary",variant:["soft","ghost"],class:"outline-primary/25 focus-visible:outline-3"},{color:"secondary",variant:["soft","ghost"],class:"outline-secondary/25 focus-visible:outline-3"},{color:"success",variant:["soft","ghost"],class:"outline-success/25 focus-visible:outline-3"},{color:"info",variant:["soft","ghost"],class:"outline-info/25 focus-visible:outline-3"},{color:"warning",variant:["soft","ghost"],class:"outline-warning/25 focus-visible:outline-3"},{color:"error",variant:["soft","ghost"],class:"outline-error/25 focus-visible:outline-3"},{color:"primary",highlight:!0,class:"ring ring-inset ring-primary"},{color:"secondary",highlight:!0,class:"ring ring-inset ring-secondary"},{color:"success",highlight:!0,class:"ring ring-inset ring-success"},{color:"info",highlight:!0,class:"ring ring-inset ring-info"},{color:"warning",highlight:!0,class:"ring ring-inset ring-warning"},{color:"error",highlight:!0,class:"ring ring-inset ring-error"},{color:"neutral",variant:["outline","subtle"],class:"outline-inverted/25 focus-visible:outline-3 focus-visible:ring-inverted"},{color:"neutral",variant:["soft","ghost"],class:"outline-inverted/25 focus-visible:outline-3"},{color:"neutral",highlight:!0,class:"ring ring-inset ring-inverted"},{leading:!0,size:"xs",class:"ps-7"},{leading:!0,size:"sm",class:"ps-8"},{leading:!0,size:"md",class:"ps-9"},{leading:!0,size:"lg",class:"ps-10"},{leading:!0,size:"xl",class:"ps-11"},{trailing:!0,size:"xs",class:"pe-7"},{trailing:!0,size:"sm",class:"pe-8"},{trailing:!0,size:"md",class:"pe-9"},{trailing:!0,size:"lg",class:"pe-10"},{trailing:!0,size:"xl",class:"pe-11"},{loading:!0,leading:!0,class:{leadingIcon:"animate-spin"}},{loading:!0,leading:!1,trailing:!0,class:{trailingIcon:"animate-spin"}},{fixed:!1,size:"xs",class:"md:text-xs"},{fixed:!1,size:"sm",class:"md:text-xs"},{fixed:!1,size:"md",class:"md:text-sm"},{fixed:!1,size:"lg",class:"md:text-sm"}],defaultVariants:{size:"md",color:"primary",variant:"outline",position:"popper"}},Ma=Object.assign({inheritAttrs:!1},{__name:"USelectMenu",props:Ge({id:{type:String,required:!1},placeholder:{type:String,required:!1},searchInput:{type:[Boolean,Object],required:!1,default:!0},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},required:{type:Boolean,required:!1},trailingIcon:{type:null,required:!1},selectedIcon:{type:null,required:!1},clear:{type:[Boolean,Object],required:!1},clearIcon:{type:null,required:!1},content:{type:Object,required:!1},arrow:{type:[Boolean,Object],required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},virtualize:{type:[Boolean,Object],required:!1,default:!1},valueKey:{type:null,required:!1},labelKey:{type:null,required:!1,default:"label"},descriptionKey:{type:null,required:!1,default:"description"},items:{type:null,required:!1},defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1},modelModifiers:{type:null,required:!1},multiple:{type:Boolean,required:!1},highlight:{type:Boolean,required:!1},createItem:{type:[Boolean,String,Object],required:!1},filterFields:{type:Array,required:!1},ignoreFilter:{type:Boolean,required:!1},autofocus:{type:Boolean,required:!1},autofocusDelay:{type:Number,required:!1,default:0},class:{type:null,required:!1},ui:{type:Object,required:!1},open:{type:Boolean,required:!1},defaultOpen:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},name:{type:String,required:!1},resetSearchTermOnBlur:{type:Boolean,required:!1,default:!0},resetSearchTermOnSelect:{type:Boolean,required:!1,default:!0},resetModelValueOnClear:{type:Boolean,required:!1,default:!0},highlightOnHover:{type:Boolean,required:!1},by:{type:[String,Function],required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:null,required:!1},trailing:{type:Boolean,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1}},{searchTerm:{type:String,default:""},searchTermModifiers:{}}),emits:Ge(["change","blur","focus","create","clear","highlight","update:modelValue","update:open"],["update:searchTerm"]),setup(m,{expose:f,emit:o}){const s=m,a=o,l=Bt(),t=kt("selectMenu",s),p=Ot(m,"searchTerm",{type:String,default:""}),{t:b}=Lt(),E=At(),{filterGroups:_}=Ht(),V=Et(Tt(t,"modelValue","defaultValue","open","defaultOpen","required","multiple","resetSearchTermOnBlur","resetSearchTermOnSelect","resetModelValueOnClear","highlightOnHover","by"),a),T=Ft(Y(()=>t.portal)),M=Y(()=>fe(t.content,{side:"bottom",sideOffset:8,collisionPadding:8,position:"popper"})),B=Y(()=>fe(t.arrow,{rounded:!0})),q=w(()=>typeof t.clear=="object"?t.clear:{}),I=Y(()=>t.virtualize?fe(typeof t.virtualize=="boolean"?{}:t.virtualize,{estimateSize:la(be.value,J.value||"md",t.descriptionKey,!!l["item-description"])}):!1),K=Y(()=>fe(t.searchInput,{placeholder:b("selectMenu.search"),variant:"none"})),{emitFormBlur:N,emitFormFocus:g,emitFormInput:k,emitFormChange:j,size:ie,color:U,id:ne,name:ge,highlight:ue,disabled:de,ariaAttrs:Se}=Vt(s),{orientation:oe,size:ve}=$t(s),{isLeading:W,isTrailing:S,leadingIconName:$,trailingIconName:P}=Pt(Y(()=>fe(t,{trailingIcon:E.ui.icons.chevronDown}))),J=w(()=>ve.value||ie.value),[pe,H]=Ne(),[re,Ve]=Ne({props:{item:{type:[Object,String,Number,Boolean],required:!0},index:{type:Number,required:!1}}}),d=w(()=>Gt({extend:Pa,...E.ui?.selectMenu||{}})({color:U.value??t.color,variant:t.variant,size:J?.value??t.size,loading:t.loading,highlight:ue.value??t.highlight,leading:W.value||!!t.avatar||!!l.leading,trailing:S.value||!!l.trailing,fieldGroup:oe.value,virtualize:!!t.virtualize,multiple:t.multiple}));function Je(r){if(t.multiple&&Array.isArray(r)){const x=r.map(i=>Ue($e.value,i,{labelKey:t.labelKey,valueKey:t.valueKey,by:t.by})).filter(i=>i!=null&&i!=="");return x.length>0?x.join(", "):void 0}return Ue($e.value,r,{labelKey:t.labelKey,valueKey:t.valueKey,by:t.by})}const ze=w(()=>t.items?.length?Wt(t.items)?t.items:[t.items]:[]),$e=w(()=>ze.value.flatMap(r=>r)),Pe=w(()=>{if(t.ignoreFilter||!p.value)return ze.value;const r=Array.isArray(t.filterFields)?t.filterFields:[t.labelKey];return _(ze.value,p.value,{fields:r,isStructural:x=>z(x)&&!!x.type&&["label","separator"].includes(x.type)})}),be=w(()=>Pe.value.flatMap(r=>r)),ye=w(()=>{if(!t.createItem||!p.value)return!1;const r=t.valueKey?{[t.valueKey]:p.value}:p.value;return typeof t.createItem=="object"&&t.createItem.when==="always"||t.createItem==="always"?!be.value.find(x=>Ut(x,r,t.by??t.valueKey)):!be.value.length}),he=w(()=>typeof t.createItem=="object"?t.createItem.position:"bottom"),we=Be("triggerRef");function Qe(){t.autofocus&&we.value?.$el?.focus({focusVisible:!0})}ae(()=>{setTimeout(()=>{Qe()},t.autofocusDelay)});function et(r){if(Nt(t.modelValue)===r)return;t.modelModifiers?.trim&&(typeof r=="string"||r===null||r===void 0)&&(r=r?.trim()??null),t.modelModifiers?.number&&(r=jt(r)),t.modelModifiers?.nullable&&(r??=null),t.modelModifiers?.optional&&!t.modelModifiers?.nullable&&r!==null&&(r??=void 0);const x=new Event("change",{target:{value:r}});a("change",x),j(),k(),t.resetSearchTermOnSelect&&(p.value="")}const Re=G(!1);function tt(r){Re.value=r;let x;if(r){const i=new FocusEvent("focus");a("focus",i),g(),clearTimeout(x)}else{const i=new FocusEvent("blur");a("blur",i),N(),t.resetSearchTermOnBlur&&(x=setTimeout(()=>{p.value=""},100))}}function at(r){r.preventDefault(),r.stopPropagation(),a("create",p.value)}function lt(r,x){if(z(x)){if(x.disabled){r.preventDefault();return}x.onSelect?.(r)}}function z(r){return typeof r=="object"&&r!==null}function it(r){return t.multiple&&Array.isArray(r)?r.length===0:r==null||r===""}function ot(){a("clear")}const De=Be("viewportRef"),Me=Be("comboboxRootRef");return Ae(()=>t.items,async()=>{!Re.value||!t.createItem||(await Ce(),Me.value?.highlightFirstItem?.())},{flush:"post"}),f({triggerRef:Y(()=>we.value?.$el),viewportRef:Y(()=>De.value)}),(r,x)=>(n(),F(Q,null,[y(e(pe),null,{default:u(()=>[y(e(We),{"data-slot":"item",class:h(d.value.item({class:e(t).ui?.item})),value:p.value,onSelect:at},{default:u(()=>[ce("span",{"data-slot":"itemLabel",class:h(d.value.itemLabel({class:e(t).ui?.itemLabel}))},[v(r.$slots,"create-item-label",{item:p.value},()=>[ee(Z(e(b)("selectMenu.create",{label:p.value})),1)])],2)]),_:3},8,["class","value"])]),_:3}),y(e(re),null,{default:u(({item:i,index:R})=>[z(i)&&i.type==="label"?(n(),c(e(ka),{key:0,"data-slot":"label",class:h(d.value.label({class:[e(t).ui?.label,i.ui?.label,i.class]}))},{default:u(()=>[ee(Z(e(se)(i,e(t).labelKey)),1)]),_:2},1032,["class"])):z(i)&&i.type==="separator"?(n(),c(e(Ea),{key:1,"data-slot":"separator",class:h(d.value.separator({class:[e(t).ui?.separator,i.ui?.separator,i.class]}))},null,8,["class"])):(n(),c(e(We),{key:2,"data-slot":"item",class:h(d.value.item({class:[e(t).ui?.item,z(i)&&i.ui?.item,z(i)&&i.class]})),disabled:z(i)&&i.disabled,value:e(t).valueKey&&z(i)?e(se)(i,e(t).valueKey):i,onSelect:O=>lt(O,i)},{default:u(()=>[v(r.$slots,"item",{item:i,index:R,ui:d.value},()=>[v(r.$slots,"item-leading",{item:i,index:R,ui:d.value},()=>[z(i)&&i.icon?(n(),c(xe,{key:0,name:i.icon,"data-slot":"itemLeadingIcon",class:h(d.value.itemLeadingIcon({class:[e(t).ui?.itemLeadingIcon,i.ui?.itemLeadingIcon]}))},null,8,["name","class"])):z(i)&&i.avatar?(n(),c(je,C({key:1,size:i.ui?.itemLeadingAvatarSize||e(t).ui?.itemLeadingAvatarSize||d.value.itemLeadingAvatarSize()},i.avatar,{"data-slot":"itemLeadingAvatar",class:d.value.itemLeadingAvatar({class:[e(t).ui?.itemLeadingAvatar,i.ui?.itemLeadingAvatar]})}),null,16,["size","class"])):z(i)&&i.chip?(n(),c(Rt,C({key:2,size:i.ui?.itemLeadingChipSize||e(t).ui?.itemLeadingChipSize||d.value.itemLeadingChipSize(),inset:"",standalone:""},i.chip,{"data-slot":"itemLeadingChip",class:d.value.itemLeadingChip({class:[e(t).ui?.itemLeadingChip,i.ui?.itemLeadingChip]})}),null,16,["size","class"])):A("",!0)]),ce("span",{"data-slot":"itemWrapper",class:h(d.value.itemWrapper({class:[e(t).ui?.itemWrapper,z(i)&&i.ui?.itemWrapper]}))},[ce("span",{"data-slot":"itemLabel",class:h(d.value.itemLabel({class:[e(t).ui?.itemLabel,z(i)&&i.ui?.itemLabel]}))},[v(r.$slots,"item-label",{item:i,index:R},()=>[ee(Z(z(i)?e(se)(i,e(t).labelKey):i),1)])],2),z(i)&&(e(se)(i,e(t).descriptionKey)||l["item-description"])?(n(),F("span",{key:0,"data-slot":"itemDescription",class:h(d.value.itemDescription({class:[e(t).ui?.itemDescription,z(i)&&i.ui?.itemDescription]}))},[v(r.$slots,"item-description",{item:i,index:R},()=>[ee(Z(e(se)(i,e(t).descriptionKey)),1)])],2)):A("",!0)],2),ce("span",{"data-slot":"itemTrailing",class:h(d.value.itemTrailing({class:[e(t).ui?.itemTrailing,z(i)&&i.ui?.itemTrailing]}))},[v(r.$slots,"item-trailing",{item:i,index:R,ui:d.value}),y(e(wa),{"as-child":""},{default:u(()=>[y(xe,{name:e(t).selectedIcon||e(E).ui.icons.check,"data-slot":"itemTrailingIcon",class:h(d.value.itemTrailingIcon({class:[e(t).ui?.itemTrailingIcon,z(i)&&i.ui?.itemTrailingIcon]}))},null,8,["name","class"])]),_:2},1024)],2)])]),_:2},1032,["class","disabled","value","onSelect"]))]),_:3}),y(e(ra),C({ref_key:"comboboxRootRef",ref:Me},e(V),{"ignore-filter":"","as-child":"",name:e(ge),disabled:e(de),"onUpdate:modelValue":et,"onUpdate:open":tt}),{default:u(({modelValue:i,open:R})=>[y(e(na),{"as-child":""},{default:u(()=>[y(e(Fa),C({id:e(ne),ref_key:"triggerRef",ref:we,"data-slot":"base",class:d.value.base({class:[e(t).ui?.base,e(t).class]}),tabindex:"0"},{...r.$attrs,...e(Se)}),{default:u(()=>[e(W)||e(t).avatar||l.leading?(n(),F("span",{key:0,"data-slot":"leading",class:h(d.value.leading({class:e(t).ui?.leading}))},[v(r.$slots,"leading",{modelValue:i,open:R,ui:d.value},()=>[e(W)&&e($)?(n(),c(xe,{key:0,name:e($),"data-slot":"leadingIcon",class:h(d.value.leadingIcon({class:e(t).ui?.leadingIcon}))},null,8,["name","class"])):e(t).avatar?(n(),c(je,C({key:1,size:e(t).ui?.itemLeadingAvatarSize||d.value.itemLeadingAvatarSize()},e(t).avatar,{"data-slot":"itemLeadingAvatar",class:d.value.itemLeadingAvatar({class:e(t).ui?.itemLeadingAvatar})}),null,16,["size","class"])):A("",!0)])],2)):A("",!0),v(r.$slots,"default",{modelValue:i,open:R,ui:d.value},()=>[(n(!0),F(Q,null,ke([Je(i)],O=>(n(),F(Q,{key:O},[O!=null?(n(),F("span",{key:0,"data-slot":"value",class:h(d.value.value({class:e(t).ui?.value}))},Z(O),3)):(n(),F("span",{key:1,"data-slot":"placeholder",class:h(d.value.placeholder({class:e(t).ui?.placeholder}))},Z(e(t).placeholder??" "),3))],64))),128))]),e(S)||l.trailing||e(t).clear?(n(),F("span",{key:1,"data-slot":"trailing",class:h(d.value.trailing({class:e(t).ui?.trailing}))},[v(r.$slots,"trailing",{modelValue:i,open:R,ui:d.value},()=>[e(t).clear&&!it(i)?(n(),c(e(va),{key:0,"as-child":""},{default:u(()=>[y(Dt,C({as:"span",icon:e(t).clearIcon||e(E).ui.icons.close,size:J.value,variant:"link",color:"neutral",tabindex:"-1"},q.value,{"data-slot":"trailingClear",class:d.value.trailingClear({class:e(t).ui?.trailingClear}),onClick:qe(ot,["stop"])}),null,16,["icon","size","class"])]),_:1})):e(P)?(n(),c(xe,{key:1,name:e(P),"data-slot":"trailingIcon",class:h(d.value.trailingIcon({class:e(t).ui?.trailingIcon}))},null,8,["name","class"])):A("",!0)])],2)):A("",!0)]),_:2},1040,["id","class"])]),_:2},1024),y(e(La),te(me(e(T))),{default:u(()=>[y(e(Mt),null,{default:u(()=>[y(e(ya),C({"data-slot":"content",class:d.value.content({class:e(t).ui?.content})},M.value),{default:u(()=>[y(e(Ze),{trapped:"","data-slot":"focusScope",class:h(d.value.focusScope({class:e(t).ui?.focusScope}))},{default:u(()=>[v(r.$slots,"content-top"),e(t).searchInput?(n(),c(e(Ia),{key:0,modelValue:p.value,"onUpdate:modelValue":x[1]||(x[1]=O=>p.value=O),"display-value":()=>p.value,"as-child":""},{default:u(()=>[y(Kt,C({autofocus:"",autocomplete:"off",size:J.value},K.value,{"model-modifiers":{trim:e(t).modelModifiers?.trim},"data-slot":"input",class:d.value.input({class:e(t).ui?.input}),onChange:x[0]||(x[0]=qe(()=>{},["stop"]))}),null,16,["size","model-modifiers","class"])]),_:1},8,["modelValue","display-value"])):A("",!0),y(e(_a),{"data-slot":"empty",class:h(d.value.empty({class:e(t).ui?.empty}))},{default:u(()=>[v(r.$slots,"empty",{searchTerm:p.value},()=>[ee(Z(p.value?e(b)("selectMenu.noMatch",{searchTerm:p.value}):e(b)("selectMenu.noData")),1)])]),_:3},8,["class"]),ce("div",{ref_key:"viewportRef",ref:De,role:"presentation","data-slot":"viewport",class:h(d.value.viewport({class:e(t).ui?.viewport}))},[e(t).virtualize?(n(),F(Q,{key:0},[ye.value&&he.value==="top"?(n(),c(e(H),{key:0})):A("",!0),y(e($a),C({options:be.value,"text-content":O=>z(O)?e(se)(O,e(t).labelKey):String(O)},I.value),{default:u(({option:O,virtualItem:_e})=>[y(e(Ve),{item:O,index:_e.index},null,8,["item","index"])]),_:1},16,["options","text-content"]),ye.value&&he.value==="bottom"?(n(),c(e(H),{key:1})):A("",!0)],64)):(n(),F(Q,{key:1},[ye.value&&he.value==="top"?(n(),c(e(Oe),{key:0,"data-slot":"group",class:h(d.value.group({class:e(t).ui?.group}))},{default:u(()=>[y(e(H))]),_:1},8,["class"])):A("",!0),(n(!0),F(Q,null,ke(Pe.value,(O,_e)=>(n(),c(e(Oe),{key:`group-${_e}`,"data-slot":"group",class:h(d.value.group({class:e(t).ui?.group}))},{default:u(()=>[(n(!0),F(Q,null,ke(O,(rt,Ke)=>(n(),c(e(Ve),{key:`group-${_e}-${Ke}`,item:rt,index:Ke},null,8,["item","index"]))),128))]),_:2},1032,["class"]))),128)),ye.value&&he.value==="bottom"?(n(),c(e(Oe),{key:1,"data-slot":"group",class:h(d.value.group({class:e(t).ui?.group}))},{default:u(()=>[y(e(H))]),_:1},8,["class"])):A("",!0)],64))],2),v(r.$slots,"content-bottom")]),_:3},8,["class"]),e(t).arrow?(n(),c(e(ma),C({key:0},B.value,{"data-slot":"arrow",class:d.value.arrow({class:e(t).ui?.arrow})}),null,16,["class"])):A("",!0)]),_:3},16,["class"])]),_:3})]),_:3},16)]),_:3},16,["name","disabled"])],64))}});export{Ma as _};
|