@piwitests/server 0.18.1 → 0.19.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/{BaDv5D7A.js → -09h6CA9.js} +1 -1
- package/.output/public/_nuxt/279D2RYp.js +1 -0
- package/.output/public/_nuxt/81InBX9v.js +1 -0
- package/.output/public/_nuxt/{CRpbGS75.js → Ar3IelOY.js} +1 -1
- package/.output/public/_nuxt/B33iXw77.js +1 -0
- package/.output/public/_nuxt/B3B9Ii2A.js +1 -0
- package/.output/public/_nuxt/B3HO8kuh.js +1 -0
- package/.output/public/_nuxt/B44A4LSJ.js +1 -0
- package/.output/public/_nuxt/{CPZ5wygb.js → B7NBP1C-.js} +1 -1
- package/.output/public/_nuxt/{Db_-yjYg.js → B9WhzpKO.js} +1 -1
- package/.output/public/_nuxt/{DoYgYLOd.js → BCMuIgP5.js} +1 -1
- package/.output/public/_nuxt/BDicZ1gQ.js +1 -0
- package/.output/public/_nuxt/BJ0XQElc.js +1 -0
- package/.output/public/_nuxt/{D4SFgXAf.js → BMvCSA6h.js} +1 -1
- package/.output/public/_nuxt/BPQoBGg5.js +1 -0
- package/.output/public/_nuxt/BPRffDuo.js +1 -0
- package/.output/public/_nuxt/BSIxhGsh.js +1 -0
- package/.output/public/_nuxt/BVaxh6Nl.js +4 -0
- package/.output/public/_nuxt/{BReNbog6.js → BX9ZXe98.js} +1 -1
- package/.output/public/_nuxt/{rm7OkgDG.js → BYDaY0Z7.js} +1 -1
- package/.output/public/_nuxt/{WAaPPk0g.js → Bc8mOoz9.js} +2 -2
- package/.output/public/_nuxt/BccXfBfI.js +1 -0
- package/.output/public/_nuxt/{Dbg8z684.js → BeLWlVK0.js} +1 -1
- package/.output/public/_nuxt/{CP0vUzbd.js → BfTuX0wq.js} +1 -1
- package/.output/public/_nuxt/BjaRappk.js +1 -0
- package/.output/public/_nuxt/{D3MWm6JP.js → Bn0YQDyy.js} +1 -1
- package/.output/public/_nuxt/Bp5ELvx9.js +1 -0
- package/.output/public/_nuxt/BpUaY9nH.js +2 -0
- package/.output/public/_nuxt/BqV0l12c.js +1 -0
- package/.output/public/_nuxt/{D8YZvjas.js → Bti38m-M.js} +1 -1
- package/.output/public/_nuxt/{DVgMaBxD.js → Bu2aaVIY.js} +3 -3
- package/.output/public/_nuxt/{CUDeMcEK.js → BuMC3WjZ.js} +1 -1
- package/.output/public/_nuxt/{Bi3i470l.js → BxCKKeYs.js} +1 -1
- package/.output/public/_nuxt/{BTYiG93l.js → C-elpgyr.js} +1 -1
- package/.output/public/_nuxt/C2_3mdPC.js +1 -0
- package/.output/public/_nuxt/{BoC6qaRF.js → C5iG7O4O.js} +4 -4
- package/.output/public/_nuxt/C7P1UCO2.js +1 -0
- package/.output/public/_nuxt/{BuuvTH9e.js → C95YAaJq.js} +1 -1
- package/.output/public/_nuxt/{DOr_4nln.js → C9_jrmk9.js} +2 -2
- package/.output/public/_nuxt/CDk0q2hV.js +2 -0
- package/.output/public/_nuxt/{DIA_NAIv.js → CGNkHojN.js} +3 -3
- package/.output/public/_nuxt/CHEFCN8Q.js +1 -0
- package/.output/public/_nuxt/CHNwfU1y.js +1 -0
- package/.output/public/_nuxt/CK_2LZBS.js +1 -0
- package/.output/public/_nuxt/CNFYDQmj.js +1 -0
- package/.output/public/_nuxt/{BfoG8R5a.js → CTxDO9fB.js} +1 -1
- package/.output/public/_nuxt/{B1CB30tg.js → CU5S9GCh.js} +1 -1
- package/.output/public/_nuxt/{BKaU95es.js → CUtJobDm.js} +1 -1
- package/.output/public/_nuxt/CV9-fTmY.js +1 -0
- package/.output/public/_nuxt/{BAkJhSAW.js → CYsTqbBS.js} +1 -1
- package/.output/public/_nuxt/{AjuKBlzz.js → CZfMdzfk.js} +1 -1
- package/.output/public/_nuxt/{lowCGL2S.js → Cdff9XNh.js} +1 -1
- package/.output/public/_nuxt/{quV6tp4n.js → ClOqkAcc.js} +1 -1
- package/.output/public/_nuxt/{Doul3p1_.js → CpjgB2aY.js} +1 -1
- package/.output/public/_nuxt/CrwJAwhk.js +1 -0
- package/.output/public/_nuxt/CtQBsNUb.js +1 -0
- package/.output/public/_nuxt/CuSVQEkS.js +3 -0
- package/.output/public/_nuxt/{wQZj69OY.js → CylWPruw.js} +1 -1
- package/.output/public/_nuxt/CzGyac8q.js +1 -0
- package/.output/public/_nuxt/D-c8ZSws.js +1 -0
- package/.output/public/_nuxt/{B6IHiVa1.js → D0HNloZ9.js} +1 -1
- package/.output/public/_nuxt/{ClIKZ4qY.js → D55D4EYo.js} +1 -1
- package/.output/public/_nuxt/{Bi9DO8jm.js → DDDpCFpF.js} +1 -1
- package/.output/public/_nuxt/{va1mwSm9.js → DEFEpYzn.js} +1 -1
- package/.output/public/_nuxt/DGfAxLHV.js +1 -0
- package/.output/public/_nuxt/DHDtnj7p.js +1 -0
- package/.output/public/_nuxt/DLSrtpsA.js +1 -0
- package/.output/public/_nuxt/DP8hfJ9h.js +1 -0
- package/.output/public/_nuxt/DS636elg.js +1 -0
- package/.output/public/_nuxt/{D51_cB9D.js → DT53RWbC.js} +1 -1
- package/.output/public/_nuxt/DVDXJYq2.js +2 -0
- package/.output/public/_nuxt/DW0xl3I6.js +17 -0
- package/.output/public/_nuxt/{BEB2Mv6B.js → DX-MDGb3.js} +1 -1
- package/.output/public/_nuxt/DcmZRa_F.js +1 -0
- package/.output/public/_nuxt/DgE2YE3R.js +1 -0
- package/.output/public/_nuxt/Dgf5N4Ng.js +1 -0
- package/.output/public/_nuxt/DiOLdHBC.js +1 -0
- package/.output/public/_nuxt/DiZyJYez.js +1 -0
- package/.output/public/_nuxt/Dk9fwOCm.js +34 -0
- package/.output/public/_nuxt/{DRE6Aqqp.js → Dnpkl-1q.js} +1 -1
- package/.output/public/_nuxt/DoUy4UHi.js +44 -0
- package/.output/public/_nuxt/{empGC_x-.js → DprVVyUQ.js} +1 -1
- package/.output/public/_nuxt/{BVDBIVAQ.js → DslPMqfa.js} +1 -1
- package/.output/public/_nuxt/{Vnfkr1pJ.js → FUXhyidq.js} +1 -1
- package/.output/public/_nuxt/HXerICAi.js +79 -0
- package/.output/public/_nuxt/{Do6zIWQf.js → IvQlbZk6.js} +1 -1
- package/.output/public/_nuxt/{n-QWmQgc.js → Jo8kRmHz.js} +1 -1
- package/.output/public/_nuxt/{BsDB_eCd.js → KnfsST6Y.js} +1 -1
- package/.output/public/_nuxt/NQikbhmK.js +253 -0
- package/.output/public/_nuxt/OSduWzyz.js +1 -0
- package/.output/public/_nuxt/SfMRXW25.js +5 -0
- package/.output/public/_nuxt/{mlAADjK3.js → SlIRLREZ.js} +2 -2
- package/.output/public/_nuxt/TagBadge.By1E6r4y.css +1 -0
- package/.output/public/_nuxt/WsxFTEFq.js +10 -0
- package/.output/public/_nuxt/YVN7WG7q.js +1 -0
- package/.output/public/_nuxt/{CRcjGmf7.js → ZFiQCMUB.js} +1 -1
- package/.output/public/_nuxt/aQgs_c6e.js +9 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/ab473028-4b37-4884-b243-b8f6e5046e5e.json +1 -0
- package/.output/public/_nuxt/{Dwp3GkV-.js → cHAnlQbv.js} +1 -1
- package/.output/public/_nuxt/dYCKgE-3.js +5 -0
- package/.output/public/_nuxt/{DnThe2U0.js → eaVkJRSa.js} +1 -1
- package/.output/public/_nuxt/entry.CPhW41mh.css +1 -0
- package/.output/public/_nuxt/{DoFSKAvY.js → eptP4pGv.js} +1 -1
- package/.output/public/_nuxt/fVcG504p.js +1 -0
- package/.output/public/_nuxt/g26aVPxc.js +1 -0
- package/.output/public/_nuxt/{wGpfdK6o.js → ndShiWE8.js} +1 -1
- package/.output/public/_nuxt/nv9-6vBK.js +1 -0
- package/.output/public/_nuxt/rWNTSFD6.js +3 -0
- package/.output/public/_nuxt/tvgqrYDd.js +1 -0
- package/.output/public/_nuxt/{DCMFuzDI.js → y17lMTFy.js} +1 -1
- package/.output/public/_nuxt/{DM_YaJgJ.js → ybDYeNxd.js} +1 -1
- package/.output/public/_nuxt/{B_aSGB8S.js → zQyPuvV1.js} +1 -1
- package/.output/public/demo/seed.version.json +2 -2
- package/.output/server/chunks/_/ai-prompt-preview.mjs +38 -0
- package/.output/server/chunks/_/ai-prompt-preview.mjs.map +1 -0
- package/.output/server/chunks/_/collect.mjs +122 -0
- package/.output/server/chunks/_/collect.mjs.map +1 -0
- package/.output/server/chunks/_/import-runs.mjs +351 -0
- package/.output/server/chunks/_/import-runs.mjs.map +1 -0
- package/.output/server/chunks/_/markers.mjs +1 -1
- package/.output/server/chunks/_/quarantine.mjs +112 -0
- package/.output/server/chunks/_/quarantine.mjs.map +1 -0
- package/.output/server/chunks/_/users.mjs +1 -1
- package/.output/server/chunks/build/{Alert-Bp1Wz_sq.mjs → Alert-C4xq8lao.mjs} +2 -2
- package/.output/server/chunks/build/Alert-C4xq8lao.mjs.map +1 -0
- package/.output/server/chunks/build/{Breadcrumb-C9ZPTLym.mjs → Breadcrumb-Ak2Lg3oM.mjs} +3 -3
- package/.output/server/chunks/build/Breadcrumb-Ak2Lg3oM.mjs.map +1 -0
- package/.output/server/chunks/build/{BreadcrumbNav-C3y42Vun.mjs → BreadcrumbNav-DO7I_z-n.mjs} +3 -3
- package/.output/server/chunks/build/BreadcrumbNav-DO7I_z-n.mjs.map +1 -0
- package/.output/server/chunks/build/{BrowserBadge-DNCp9pF-.mjs → BrowserBadge-D33lqUcj.mjs} +5 -5
- package/.output/server/chunks/build/BrowserBadge-D33lqUcj.mjs.map +1 -0
- package/.output/server/chunks/build/{ChartCard-Fr557IbV.mjs → ChartCard-Y1UKwMsf.mjs} +2 -2
- package/.output/server/chunks/build/ChartCard-Y1UKwMsf.mjs.map +1 -0
- package/.output/server/chunks/build/{Checkbox-cVOSIY93.mjs → Checkbox-DvUBGagc.mjs} +8 -8
- package/.output/server/chunks/build/Checkbox-DvUBGagc.mjs.map +1 -0
- package/.output/server/chunks/build/{CiEnvCard-DXPOhdSG.mjs → CiEnvCard-CrjOM17n.mjs} +25 -34
- package/.output/server/chunks/build/CiEnvCard-CrjOM17n.mjs.map +1 -0
- package/.output/server/chunks/build/{CodeBlock-BGwNmJ8J.mjs → CodeBlock-BgE-NSmE.mjs} +7 -22
- package/.output/server/chunks/build/CodeBlock-BgE-NSmE.mjs.map +1 -0
- package/.output/server/chunks/build/{DashboardNavbar-Bdp-OwTN.mjs → DashboardNavbar-BHmMSPX7.mjs} +3 -3
- package/.output/server/chunks/build/DashboardNavbar-BHmMSPX7.mjs.map +1 -0
- package/.output/server/chunks/build/{DashboardSidebarToggle-Ji6ADuqF.mjs → DashboardSidebarToggle-DCTnHiIv.mjs} +3 -3
- package/.output/server/chunks/build/DashboardSidebarToggle-DCTnHiIv.mjs.map +1 -0
- package/.output/server/chunks/build/{DataLocationCard-D6xSOrme.mjs → DataLocationCard-B_YHdzSz.mjs} +3 -3
- package/.output/server/chunks/build/DataLocationCard-B_YHdzSz.mjs.map +1 -0
- package/.output/server/chunks/build/{DiagnosisPanel-DV1xwGu4.mjs → DiagnosisPanel-B646dK4p.mjs} +17 -528
- package/.output/server/chunks/build/DiagnosisPanel-B646dK4p.mjs.map +1 -0
- package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs +43 -0
- package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs.map +1 -0
- package/.output/server/chunks/build/{EmptyState-DV3oT_xz.mjs → EmptyState-Dtlab7S9.mjs} +3 -3
- package/.output/server/chunks/build/EmptyState-Dtlab7S9.mjs.map +1 -0
- package/.output/server/chunks/build/{EntityLinks-DeOP13Kr.mjs → EntityLinks-D3fp57pR.mjs} +6 -6
- package/.output/server/chunks/build/EntityLinks-D3fp57pR.mjs.map +1 -0
- package/.output/server/chunks/build/{EnvManagedBadge-Qpn58Nmr.mjs → EnvManagedBadge-Bg3FSiU1.mjs} +3 -3
- package/.output/server/chunks/build/EnvManagedBadge-Bg3FSiU1.mjs.map +1 -0
- package/.output/server/chunks/build/{FormField-B-GSn_VR.mjs → FormField-B0HKsdMd.mjs} +3 -3
- package/.output/server/chunks/build/FormField-B0HKsdMd.mjs.map +1 -0
- package/.output/server/chunks/build/{HelpHint-YEMWtKu1.mjs → HelpHint-DrcIv-Oj.mjs} +53 -6
- package/.output/server/chunks/build/HelpHint-DrcIv-Oj.mjs.map +1 -0
- package/.output/server/chunks/build/{Label-DBvbHd3A.mjs → Label-DYDR1Oeh.mjs} +2 -2
- package/.output/server/chunks/build/Label-DYDR1Oeh.mjs.map +1 -0
- package/.output/server/chunks/build/{MiniRunBars-C3HG-EYm.mjs → MiniRunBars-CZMugDrh.mjs} +2 -2
- package/.output/server/chunks/build/MiniRunBars-CZMugDrh.mjs.map +1 -0
- package/.output/server/chunks/build/{Modal-CfA78Hm1.mjs → Modal-Ck2XLt8d.mjs} +2 -2
- package/.output/server/chunks/build/Modal-Ck2XLt8d.mjs.map +1 -0
- package/.output/server/chunks/build/{OpenInIdeLink-B92wosXu.mjs → OpenInIdeLink-C4MXA8ya.mjs} +6 -6
- package/.output/server/chunks/build/{OpenInIdeLink-B92wosXu.mjs.map → OpenInIdeLink-C4MXA8ya.mjs.map} +1 -1
- package/.output/server/chunks/build/{ProjectTestCasesTable-9Ia825h8.mjs → ProjectTestCasesTable-CxfQ5wtN.mjs} +120 -45
- package/.output/server/chunks/build/ProjectTestCasesTable-CxfQ5wtN.mjs.map +1 -0
- package/.output/server/chunks/build/{RovingFocusItem-CxhHdNGo.mjs → RovingFocusItem-BJSzTBjy.mjs} +2 -2
- package/.output/server/chunks/build/RovingFocusItem-BJSzTBjy.mjs.map +1 -0
- package/.output/server/chunks/build/{RunReports-BpJqLHY9.mjs → RunReports-DFLv51TX.mjs} +8 -6
- package/.output/server/chunks/build/RunReports-DFLv51TX.mjs.map +1 -0
- package/.output/server/chunks/build/{RunStatusBadge-BhmJ_RKM.mjs → RunStatusBadge-FfGb6bkW.mjs} +3 -2
- package/.output/server/chunks/build/RunStatusBadge-FfGb6bkW.mjs.map +1 -0
- package/.output/server/chunks/build/{SectionCard-COd9TuDq.mjs → SectionCard-CN-v0FZ_.mjs} +2 -2
- package/.output/server/chunks/build/SectionCard-CN-v0FZ_.mjs.map +1 -0
- package/.output/server/chunks/build/{Select-ppPz926C.mjs → Select-CUqj50wi.mjs} +4 -4
- package/.output/server/chunks/build/Select-CUqj50wi.mjs.map +1 -0
- package/.output/server/chunks/build/{SelectMenu-799c_Ils.mjs → SelectMenu-Db7osY7J.mjs} +4 -4
- package/.output/server/chunks/build/{SelectMenu-799c_Ils.mjs.map → SelectMenu-Db7osY7J.mjs.map} +1 -1
- package/.output/server/chunks/build/{Separator-CxZdx8kw.mjs → Separator-CR4WcEKD.mjs} +2 -2
- package/.output/server/chunks/build/Separator-CR4WcEKD.mjs.map +1 -0
- package/.output/server/chunks/build/{SettingsField-DDD4oqys.mjs → SettingsField-D6iEYbEc.mjs} +6 -6
- package/.output/server/chunks/build/SettingsField-D6iEYbEc.mjs.map +1 -0
- package/.output/server/chunks/build/{Slideover-B95Rj237.mjs → Slideover-DgCa80mf.mjs} +3 -3
- package/.output/server/chunks/build/Slideover-DgCa80mf.mjs.map +1 -0
- package/.output/server/chunks/build/{Switch-xQQ3_ME1.mjs → Switch-CgUioOYB.mjs} +5 -5
- package/.output/server/chunks/build/Switch-CgUioOYB.mjs.map +1 -0
- package/.output/server/chunks/build/{Table-CPhhVzDv.mjs → Table-BRk04Hd2.mjs} +3 -3
- package/.output/server/chunks/build/Table-BRk04Hd2.mjs.map +1 -0
- package/.output/server/chunks/build/{Tabs-BV9XqjoO.mjs → Tabs-Bbsg9wag.mjs} +3 -3
- package/.output/server/chunks/build/Tabs-Bbsg9wag.mjs.map +1 -0
- package/.output/server/chunks/build/TagBadge-DwzoFCBb.mjs +31 -0
- package/.output/server/chunks/build/TagBadge-DwzoFCBb.mjs.map +1 -0
- package/.output/server/chunks/build/TagBadge-styles.jhuZ4NjP.mjs +8 -0
- package/.output/server/chunks/build/TagBadge-styles.jhuZ4NjP.mjs.map +1 -0
- package/.output/server/chunks/build/{TestCaseHistoryChart-DMb-xSJa.mjs → TestCaseHistoryChart-nMLPhdvD.mjs} +6 -6
- package/.output/server/chunks/build/TestCaseHistoryChart-nMLPhdvD.mjs.map +1 -0
- package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs +200 -0
- package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs.map +1 -0
- package/.output/server/chunks/build/{TestStatusBar-CEzt76wk.mjs → TestStatusBar-j6h2Jp6A.mjs} +15 -15
- package/.output/server/chunks/build/TestStatusBar-j6h2Jp6A.mjs.map +1 -0
- package/.output/server/chunks/build/{Textarea-DrrqQUVG.mjs → Textarea-Dv2-lOvW.mjs} +2 -2
- package/.output/server/chunks/build/Textarea-Dv2-lOvW.mjs.map +1 -0
- package/.output/server/chunks/build/{Tooltip-7vwuDPrZ.mjs → Tooltip-BOazooWP.mjs} +3 -3
- package/.output/server/chunks/build/Tooltip-BOazooWP.mjs.map +1 -0
- package/.output/server/chunks/build/{VisuallyHiddenInput-C9eJVpPW.mjs → VisuallyHiddenInput-D6kBJxVd.mjs} +2 -2
- package/.output/server/chunks/build/VisuallyHiddenInput-D6kBJxVd.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-B2yirIuA.mjs → _id_-B78ky13D.mjs} +798 -358
- package/.output/server/chunks/build/_id_-B78ky13D.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-bWcP2xFl.mjs → _id_-BHh65pfg.mjs} +690 -443
- package/.output/server/chunks/build/_id_-BHh65pfg.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-B4V5fop6.mjs → _id_-Rzkqx55x.mjs} +297 -60
- package/.output/server/chunks/build/{_id_-B4V5fop6.mjs.map → _id_-Rzkqx55x.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-CE0Gso6i.mjs → _id_-z5N6HPyC.mjs} +89 -40
- package/.output/server/chunks/build/_id_-z5N6HPyC.mjs.map +1 -0
- package/.output/server/chunks/build/{about-CoJjvUwM.mjs → about-CvSP73Ug.mjs} +100 -52
- package/.output/server/chunks/build/about-CvSP73Ug.mjs.map +1 -0
- package/.output/server/chunks/build/{account-Cn-eZqXM.mjs → account-DAfvaD-F.mjs} +21 -9
- package/.output/server/chunks/build/account-DAfvaD-F.mjs.map +1 -0
- package/.output/server/chunks/build/{ai-7jdaPOmj.mjs → ai-B4VJ9K1K.mjs} +45 -23
- package/.output/server/chunks/build/{ai-7jdaPOmj.mjs.map → ai-B4VJ9K1K.mjs.map} +1 -1
- package/.output/server/chunks/build/{analytics-B276WPeU.mjs → analytics-CJPC6t4L.mjs} +65 -39
- package/.output/server/chunks/build/{analytics-B276WPeU.mjs.map → analytics-CJPC6t4L.mjs.map} +1 -1
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/compare-RxHSOdsO.mjs +12 -0
- package/.output/server/chunks/build/{db.client-aHcD0wyX.mjs → db.client-CQoVTYB9.mjs} +83 -5
- package/.output/server/chunks/build/db.client-CQoVTYB9.mjs.map +1 -0
- package/.output/server/chunks/build/{default-BSzdkM_L.mjs → default-zvbFgDJG.mjs} +36 -24
- package/.output/server/chunks/build/default-zvbFgDJG.mjs.map +1 -0
- package/.output/server/chunks/build/{docs-BN_x1OW3.mjs → docs-DyuVEgtB.mjs} +30 -49
- package/.output/server/chunks/build/{docs-BN_x1OW3.mjs.map → docs-DyuVEgtB.mjs.map} +1 -1
- package/.output/server/chunks/build/{edit-C9Z7oZeu.mjs → edit-CFR5g2Qf.mjs} +30 -18
- package/.output/server/chunks/build/edit-CFR5g2Qf.mjs.map +1 -0
- package/.output/server/chunks/build/{fetch-8kznMtBM.mjs → fetch-B4FwBOzu.mjs} +3 -3
- package/.output/server/chunks/build/fetch-B4FwBOzu.mjs.map +1 -0
- package/.output/server/chunks/build/{forgot-password-BqPF4Rxs.mjs → forgot-password-CC__1OnV.mjs} +17 -5
- package/.output/server/chunks/build/forgot-password-CC__1OnV.mjs.map +1 -0
- package/.output/server/chunks/build/{help-content-DmFnuhNu.mjs → help-content-C876a9WD.mjs} +37 -8
- package/.output/server/chunks/build/help-content-C876a9WD.mjs.map +1 -0
- package/.output/server/chunks/build/import-CZo3djDi.mjs +1021 -0
- package/.output/server/chunks/build/import-CZo3djDi.mjs.map +1 -0
- package/.output/server/chunks/build/{index-CULN3-en.mjs → index-CU2nZhAa.mjs} +113 -42
- package/.output/server/chunks/build/index-CU2nZhAa.mjs.map +1 -0
- package/.output/server/chunks/build/{index-DVUtBexc.mjs → index-D7fe97l3.mjs} +1305 -281
- package/.output/server/chunks/build/index-D7fe97l3.mjs.map +1 -0
- package/.output/server/chunks/build/{index-BR9hw6qk.mjs → index-Stqw0dEI.mjs} +50 -30
- package/.output/server/chunks/build/index-Stqw0dEI.mjs.map +1 -0
- package/.output/server/chunks/build/{index-BK9PTRpd.mjs → index-gCw_y4ZJ.mjs} +87 -70
- package/.output/server/chunks/build/{index-BK9PTRpd.mjs.map → index-gCw_y4ZJ.mjs.map} +1 -1
- package/.output/server/chunks/build/{index-Ba-Fifra.mjs → index-tR6owKzj.mjs} +18 -6
- package/.output/server/chunks/build/index-tR6owKzj.mjs.map +1 -0
- package/.output/server/chunks/build/{isValueEqualOrExist-DBZjbD_3.mjs → isValueEqualOrExist-D2qw9YEr.mjs} +3 -3
- package/.output/server/chunks/build/isValueEqualOrExist-D2qw9YEr.mjs.map +1 -0
- package/.output/server/chunks/build/{login-D2XZDuek.mjs → login-Da4u1IlW.mjs} +19 -7
- package/.output/server/chunks/build/login-Da4u1IlW.mjs.map +1 -0
- package/.output/server/chunks/build/{mcp-_o6cMS6m.mjs → mcp-B3IUvRgD.mjs} +27 -21
- package/.output/server/chunks/build/mcp-B3IUvRgD.mjs.map +1 -0
- package/.output/server/chunks/build/{notifications-Dzm9c0u_.mjs → notifications-abDv0id8.mjs} +27 -21
- package/.output/server/chunks/build/notifications-abDv0id8.mjs.map +1 -0
- package/.output/server/chunks/build/pr-feedback-DjZID6q-.mjs +368 -0
- package/.output/server/chunks/build/pr-feedback-DjZID6q-.mjs.map +1 -0
- package/.output/server/chunks/build/{reset-password-gpFzIEDj.mjs → reset-password-BmrUS4ZD.mjs} +17 -5
- package/.output/server/chunks/build/reset-password-BmrUS4ZD.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +238 -36
- package/.output/server/chunks/build/{settings-pNyPBXVa.mjs → settings-Du7YqF8i.mjs} +23 -10
- package/.output/server/chunks/build/settings-Du7YqF8i.mjs.map +1 -0
- package/.output/server/chunks/build/{settings-metadata-B0wo5R-W.mjs → settings-metadata-DrEqWcW-.mjs} +11 -2
- package/.output/server/chunks/build/settings-metadata-DrEqWcW-.mjs.map +1 -0
- package/.output/server/chunks/build/{storage-XelzuyPy.mjs → storage-B4vzxd8G.mjs} +41 -31
- package/.output/server/chunks/build/storage-B4vzxd8G.mjs.map +1 -0
- package/.output/server/chunks/build/styles.mjs +1 -0
- package/.output/server/chunks/build/{tags-DrCQ7QSw.mjs → tags-DauTe_F-.mjs} +22 -10
- package/.output/server/chunks/build/tags-DauTe_F-.mjs.map +1 -0
- package/.output/server/chunks/build/{test-cases-pmOxi-AN.mjs → test-cases-DUvaO1He.mjs} +38 -24
- package/.output/server/chunks/build/test-cases-DUvaO1He.mjs.map +1 -0
- package/.output/server/chunks/build/{timeout-hygiene-CNs71Iah.mjs → timeout-hygiene-CbnSaVbK.mjs} +20 -8
- package/.output/server/chunks/build/timeout-hygiene-CbnSaVbK.mjs.map +1 -0
- package/.output/server/chunks/build/{useAiStatus-ZO987RY7.mjs → useAiStatus-CWvIo32Q.mjs} +89 -89
- package/.output/server/chunks/build/useAiStatus-CWvIo32Q.mjs.map +1 -0
- package/.output/server/chunks/build/{useCopy-BQQKcwlq.mjs → useCopy-CeKWgHyT.mjs} +2 -2
- package/.output/server/chunks/build/useCopy-CeKWgHyT.mjs.map +1 -0
- package/.output/server/chunks/build/{PageStateCard-Bwee6JTk.mjs → useCopyRich-BemRsKgv.mjs} +418 -39
- package/.output/server/chunks/build/useCopyRich-BemRsKgv.mjs.map +1 -0
- package/.output/server/chunks/build/useDesktopDownload-D49JRQSw.mjs +46 -0
- package/.output/server/chunks/build/useDesktopDownload-D49JRQSw.mjs.map +1 -0
- package/.output/server/chunks/build/{useFormControl-BLpq1s4O.mjs → useFormControl-CZ9So7iX.mjs} +2 -2
- package/.output/server/chunks/build/useFormControl-CZ9So7iX.mjs.map +1 -0
- package/.output/server/chunks/build/{useOpenInIde-kMZ7Jw5c.mjs → useOpenInIde-4GFf-kdi.mjs} +2 -2
- package/.output/server/chunks/build/useOpenInIde-4GFf-kdi.mjs.map +1 -0
- package/.output/server/chunks/build/{useSettingsNav-NjI2seBy.mjs → useSettingsNav-C3O866KC.mjs} +6 -6
- package/.output/server/chunks/build/useSettingsNav-C3O866KC.mjs.map +1 -0
- package/.output/server/chunks/build/{useTreeViewCookie-DVYpxW-p.mjs → useTreeViewCookie-CQjQdTkH.mjs} +2 -2
- package/.output/server/chunks/build/useTreeViewCookie-CQjQdTkH.mjs.map +1 -0
- package/.output/server/chunks/build/{users-NmAUZs3i.mjs → users-CTUqXyGh.mjs} +22 -10
- package/.output/server/chunks/build/users-CTUqXyGh.mjs.map +1 -0
- package/.output/server/chunks/build/{virtualizer-ZaqK4guJ.mjs → virtualizer-Cd1hhlxC.mjs} +5 -5
- package/.output/server/chunks/build/virtualizer-Cd1hhlxC.mjs.map +1 -0
- package/.output/server/chunks/build/{wasted-time-CguAF9zc.mjs → wasted-time-lYkx5YO4.mjs} +26 -14
- package/.output/server/chunks/build/wasted-time-lYkx5YO4.mjs.map +1 -0
- package/.output/server/chunks/nitro/nitro.mjs +4914 -1102
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/__piwi/session.get.mjs +13 -1
- package/.output/server/chunks/routes/__piwi/session.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs +12 -0
- package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/admin/stats.get.mjs +12 -0
- package/.output/server/chunks/routes/api/admin/stats.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/ai/status.get.mjs +12 -0
- package/.output/server/chunks/routes/api/ai/status.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +12 -0
- package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/change-password.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/change-password.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/login.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/login.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/logout.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/logout.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/me.get.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/me.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/reset-password.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/reset-password.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/setup.get.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/setup.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/setup.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/setup.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/verify-email.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +12 -0
- package/.output/server/chunks/routes/api/channels/_id/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +12 -0
- package/.output/server/chunks/routes/api/channels/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +12 -0
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +12 -0
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs +12 -0
- package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +12 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +12 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +12 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +12 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +24 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +13 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +13 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +13 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +13 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs +64 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +13 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs +56 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +13 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +12 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +13 -1
- package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/files/_...path_.get.mjs +13 -32
- package/.output/server/chunks/routes/api/files/_...path_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +13 -1
- package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +12 -0
- package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get2.mjs +13 -1
- package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get3.mjs +13 -1
- package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get4.mjs +13 -1
- package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get5.mjs +12 -0
- package/.output/server/chunks/routes/api/index.get5.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post.mjs +12 -0
- package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post2.mjs +13 -1
- package/.output/server/chunks/routes/api/index.post2.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post3.mjs +13 -1
- package/.output/server/chunks/routes/api/index.post3.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post4.mjs +13 -1
- package/.output/server/chunks/routes/api/index.post4.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post5.mjs +13 -1
- package/.output/server/chunks/routes/api/index.post5.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post6.mjs +12 -0
- package/.output/server/chunks/routes/api/index.post6.mjs.map +1 -1
- package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +13 -1
- package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/links/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/links/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/links/_id_.patch.mjs +13 -1
- package/.output/server/chunks/routes/api/links/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/markers/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/markers/_id_.put.mjs +13 -1
- package/.output/server/chunks/routes/api/markers/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/notifications/stream.get.mjs +13 -1
- package/.output/server/chunks/routes/api/notifications/stream.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +22 -2
- package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/members.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/members.put.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/members.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs +58 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs.map +1 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs +57 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs +72 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.put.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/menu.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/menu.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/overview.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/overview.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/search.get.mjs +13 -1
- package/.output/server/chunks/routes/api/search.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/models.post.mjs +12 -0
- package/.output/server/chunks/routes/api/settings/ai/models.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/ai/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai.get.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/ai.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai.put.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/ai.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs +57 -0
- package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs +63 -0
- package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs.map +1 -0
- package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs +12 -0
- package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/smtp.get.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/smtp.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/stream.get.mjs +13 -1
- package/.output/server/chunks/routes/api/stream.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +13 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/tags/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tags/_id_.put.mjs +13 -1
- package/.output/server/chunks/routes/api/tags/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +25 -3
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs +60 -0
- package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +13 -1
- 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 +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +15 -1
- package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs +196 -0
- package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs +78 -0
- package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/test-runs/import.post.mjs +201 -0
- package/.output/server/chunks/routes/api/test-runs/import.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/recent.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/setup.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/start.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/start.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +32 -15
- package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +21 -6
- package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +154 -3
- package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/traces/check.post.mjs +13 -1
- package/.output/server/chunks/routes/api/traces/check.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +12 -0
- package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/index.get.mjs +12 -0
- package/.output/server/chunks/routes/api/users/_id/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/index.post.mjs +13 -1
- package/.output/server/chunks/routes/api/users/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +13 -1
- package/.output/server/chunks/routes/api/users/_id/invite.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +13 -1
- package/.output/server/chunks/routes/api/users/_id/projects.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +13 -1
- package/.output/server/chunks/routes/api/users/_id/projects.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs +12 -0
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.patch.mjs +12 -0
- package/.output/server/chunks/routes/api/users/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/version.get.mjs +13 -1
- package/.output/server/chunks/routes/api/version.get.mjs.map +1 -1
- package/.output/server/chunks/routes/mcp.post.mjs +13 -1
- package/.output/server/chunks/routes/mcp.post.mjs.map +1 -1
- package/.output/server/chunks/routes/renderer.mjs +1 -1
- package/.output/server/chunks/tasks/sweep.mjs +12 -0
- package/.output/server/chunks/tasks/sweep.mjs.map +1 -1
- package/.output/server/chunks/tasks/sweep2.mjs +12 -0
- package/.output/server/chunks/tasks/sweep2.mjs.map +1 -1
- package/.output/server/database/migrations/0039_remarkable_jean_grey.sql +2 -0
- package/.output/server/database/migrations/0040_organic_phalanx.sql +8 -0
- package/.output/server/database/migrations/0041_tense_gravity.sql +5 -0
- package/.output/server/database/migrations/0042_burly_hemingway.sql +19 -0
- package/.output/server/database/migrations/meta/0039_snapshot.json +3403 -0
- package/.output/server/database/migrations/meta/0040_snapshot.json +3457 -0
- package/.output/server/database/migrations/meta/0041_snapshot.json +3492 -0
- package/.output/server/database/migrations/meta/0042_snapshot.json +3618 -0
- package/.output/server/database/migrations/meta/_journal.json +28 -0
- package/.output/server/database/migrations-pg/0040_lazy_layla_miller.sql +2 -0
- package/.output/server/database/migrations-pg/0041_light_screwball.sql +8 -0
- package/.output/server/database/migrations-pg/0042_serious_layla_miller.sql +5 -0
- package/.output/server/database/migrations-pg/0043_wonderful_mordo.sql +19 -0
- package/.output/server/database/migrations-pg/meta/0040_snapshot.json +4060 -0
- package/.output/server/database/migrations-pg/meta/0041_snapshot.json +4123 -0
- package/.output/server/database/migrations-pg/meta/0042_snapshot.json +4153 -0
- package/.output/server/database/migrations-pg/meta/0043_snapshot.json +4308 -0
- package/.output/server/database/migrations-pg/meta/_journal.json +28 -0
- package/.output/server/index.mjs +13 -1
- package/.output/server/index.mjs.map +1 -1
- package/.output/server/node_modules/fflate/esm/index.mjs +2710 -0
- package/.output/server/node_modules/fflate/package.json +128 -0
- package/.output/server/node_modules/highlight.js/es/languages/yaml.js +213 -0
- package/.output/server/node_modules/marked/lib/marked.esm.js +72 -0
- package/.output/server/node_modules/marked/package.json +103 -0
- package/.output/server/package.json +3 -1
- package/package.json +2 -2
- package/.output/public/_nuxt/36cXPVrY.js +0 -26
- package/.output/public/_nuxt/87SGk1nu.js +0 -1
- package/.output/public/_nuxt/B6rt3IcG.js +0 -1
- package/.output/public/_nuxt/BAaSmp8J.js +0 -1
- package/.output/public/_nuxt/BBnX5xw4.js +0 -2
- package/.output/public/_nuxt/BCArQk0c.js +0 -1
- package/.output/public/_nuxt/BFjmLXYo.js +0 -8
- package/.output/public/_nuxt/BJltXwHg.js +0 -1
- package/.output/public/_nuxt/BUMZHDRC.js +0 -2
- package/.output/public/_nuxt/BdHdHyop.js +0 -34
- package/.output/public/_nuxt/BiX7c2qU.js +0 -1
- package/.output/public/_nuxt/C11lmBd4.js +0 -4
- package/.output/public/_nuxt/C4AfzZER.js +0 -47
- package/.output/public/_nuxt/C7ZVzS0K.js +0 -1
- package/.output/public/_nuxt/C8cz5feG.js +0 -1
- package/.output/public/_nuxt/C9EpbPNU.js +0 -1
- package/.output/public/_nuxt/C9ahP7km.js +0 -1
- package/.output/public/_nuxt/CBEM3L1q.js +0 -4
- package/.output/public/_nuxt/CCsl9MOZ.js +0 -1
- package/.output/public/_nuxt/CCw3Tx4S.js +0 -1
- package/.output/public/_nuxt/CGq9qR-0.js +0 -1
- package/.output/public/_nuxt/CLdGRzLL.js +0 -1
- package/.output/public/_nuxt/CTgM5Fke.js +0 -2
- package/.output/public/_nuxt/CU3W9YrI.js +0 -1
- package/.output/public/_nuxt/CYIR2GbL.js +0 -1
- package/.output/public/_nuxt/Ccit_CX1.js +0 -1
- package/.output/public/_nuxt/CiPH-swI.js +0 -1
- package/.output/public/_nuxt/ClVRQpP_.js +0 -1
- package/.output/public/_nuxt/CmbjAoQu.js +0 -1
- package/.output/public/_nuxt/Cx65B3c3.js +0 -1
- package/.output/public/_nuxt/D1ttGJfs.js +0 -5
- package/.output/public/_nuxt/D3SYPlEB.js +0 -114
- package/.output/public/_nuxt/DB3ljns7.js +0 -1
- package/.output/public/_nuxt/DC51KKt4.js +0 -1
- package/.output/public/_nuxt/DaewB_zT.js +0 -1
- package/.output/public/_nuxt/DcfRfTaA.js +0 -34
- package/.output/public/_nuxt/Dm1_3W9g.js +0 -1
- package/.output/public/_nuxt/DraETso1.js +0 -1
- package/.output/public/_nuxt/Dy4TloG3.js +0 -1
- package/.output/public/_nuxt/EltzgiyS.js +0 -1
- package/.output/public/_nuxt/HTQtMbWb.js +0 -1
- package/.output/public/_nuxt/KYucVFu7.js +0 -1
- package/.output/public/_nuxt/TBDx0s9p.js +0 -3
- package/.output/public/_nuxt/Tt5LX5Y-.js +0 -1
- package/.output/public/_nuxt/builds/meta/2f517ae9-c342-457e-b4c5-6301728179f5.json +0 -1
- package/.output/public/_nuxt/entry.ChQMshd4.css +0 -1
- package/.output/public/_nuxt/l0QnzFNM.js +0 -1
- package/.output/public/_nuxt/oFIS9u6t.js +0 -3
- package/.output/public/_nuxt/oWY3I9uX.js +0 -1
- package/.output/public/_nuxt/q0DPzLKN.js +0 -2
- package/.output/public/_nuxt/r3SBLxtE.js +0 -1
- package/.output/public/_nuxt/riEUDnED.js +0 -1
- package/.output/public/_nuxt/uaqMzXqE.js +0 -5
- package/.output/public/_nuxt/wgcgHmRR.js +0 -1
- package/.output/public/sw.js +0 -1
- package/.output/public/workbox-2fbc6a65.js +0 -1
- package/.output/server/chunks/build/Alert-Bp1Wz_sq.mjs.map +0 -1
- package/.output/server/chunks/build/Breadcrumb-C9ZPTLym.mjs.map +0 -1
- package/.output/server/chunks/build/BreadcrumbNav-C3y42Vun.mjs.map +0 -1
- package/.output/server/chunks/build/BrowserBadge-DNCp9pF-.mjs.map +0 -1
- package/.output/server/chunks/build/ChartCard-Fr557IbV.mjs.map +0 -1
- package/.output/server/chunks/build/Checkbox-cVOSIY93.mjs.map +0 -1
- package/.output/server/chunks/build/CiEnvCard-DXPOhdSG.mjs.map +0 -1
- package/.output/server/chunks/build/CodeBlock-BGwNmJ8J.mjs.map +0 -1
- package/.output/server/chunks/build/DashboardNavbar-Bdp-OwTN.mjs.map +0 -1
- package/.output/server/chunks/build/DashboardSidebarToggle-Ji6ADuqF.mjs.map +0 -1
- package/.output/server/chunks/build/DataLocationCard-D6xSOrme.mjs.map +0 -1
- package/.output/server/chunks/build/DiagnosisPanel-DV1xwGu4.mjs.map +0 -1
- package/.output/server/chunks/build/EmptyState-DV3oT_xz.mjs.map +0 -1
- package/.output/server/chunks/build/EntityLinks-DeOP13Kr.mjs.map +0 -1
- package/.output/server/chunks/build/EnvManagedBadge-Qpn58Nmr.mjs.map +0 -1
- package/.output/server/chunks/build/FormField-B-GSn_VR.mjs.map +0 -1
- package/.output/server/chunks/build/HelpHint-YEMWtKu1.mjs.map +0 -1
- package/.output/server/chunks/build/Label-DBvbHd3A.mjs.map +0 -1
- package/.output/server/chunks/build/MiniRunBars-C3HG-EYm.mjs.map +0 -1
- package/.output/server/chunks/build/Modal-CfA78Hm1.mjs.map +0 -1
- package/.output/server/chunks/build/PageStateCard-Bwee6JTk.mjs.map +0 -1
- package/.output/server/chunks/build/ProjectTestCasesTable-9Ia825h8.mjs.map +0 -1
- package/.output/server/chunks/build/RovingFocusItem-CxhHdNGo.mjs.map +0 -1
- package/.output/server/chunks/build/RunReports-BpJqLHY9.mjs.map +0 -1
- package/.output/server/chunks/build/RunStatusBadge-BhmJ_RKM.mjs.map +0 -1
- package/.output/server/chunks/build/SectionCard-COd9TuDq.mjs.map +0 -1
- package/.output/server/chunks/build/Select-ppPz926C.mjs.map +0 -1
- package/.output/server/chunks/build/Separator-CxZdx8kw.mjs.map +0 -1
- package/.output/server/chunks/build/SettingsField-DDD4oqys.mjs.map +0 -1
- package/.output/server/chunks/build/Slideover-B95Rj237.mjs.map +0 -1
- package/.output/server/chunks/build/Switch-xQQ3_ME1.mjs.map +0 -1
- package/.output/server/chunks/build/Table-CPhhVzDv.mjs.map +0 -1
- package/.output/server/chunks/build/Tabs-BV9XqjoO.mjs.map +0 -1
- package/.output/server/chunks/build/TagBadge-BDcvvGxw.mjs +0 -47
- package/.output/server/chunks/build/TagBadge-BDcvvGxw.mjs.map +0 -1
- package/.output/server/chunks/build/TestCaseHistoryChart-DMb-xSJa.mjs.map +0 -1
- package/.output/server/chunks/build/TestStatusBar-CEzt76wk.mjs.map +0 -1
- package/.output/server/chunks/build/Textarea-DrrqQUVG.mjs.map +0 -1
- package/.output/server/chunks/build/Tooltip-7vwuDPrZ.mjs.map +0 -1
- package/.output/server/chunks/build/VisuallyHiddenInput-C9eJVpPW.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-B2yirIuA.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-CE0Gso6i.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-bWcP2xFl.mjs.map +0 -1
- package/.output/server/chunks/build/about-CoJjvUwM.mjs.map +0 -1
- package/.output/server/chunks/build/account-Cn-eZqXM.mjs.map +0 -1
- package/.output/server/chunks/build/db.client-aHcD0wyX.mjs.map +0 -1
- package/.output/server/chunks/build/default-BSzdkM_L.mjs.map +0 -1
- package/.output/server/chunks/build/edit-C9Z7oZeu.mjs.map +0 -1
- package/.output/server/chunks/build/fetch-8kznMtBM.mjs.map +0 -1
- package/.output/server/chunks/build/forgot-password-BqPF4Rxs.mjs.map +0 -1
- package/.output/server/chunks/build/help-content-DmFnuhNu.mjs.map +0 -1
- package/.output/server/chunks/build/index-BR9hw6qk.mjs.map +0 -1
- package/.output/server/chunks/build/index-Ba-Fifra.mjs.map +0 -1
- package/.output/server/chunks/build/index-CULN3-en.mjs.map +0 -1
- package/.output/server/chunks/build/index-DVUtBexc.mjs.map +0 -1
- package/.output/server/chunks/build/isValueEqualOrExist-DBZjbD_3.mjs.map +0 -1
- package/.output/server/chunks/build/login-D2XZDuek.mjs.map +0 -1
- package/.output/server/chunks/build/mcp-_o6cMS6m.mjs.map +0 -1
- package/.output/server/chunks/build/notifications-Dzm9c0u_.mjs.map +0 -1
- package/.output/server/chunks/build/reset-password-gpFzIEDj.mjs.map +0 -1
- package/.output/server/chunks/build/settings-metadata-B0wo5R-W.mjs.map +0 -1
- package/.output/server/chunks/build/settings-pNyPBXVa.mjs.map +0 -1
- package/.output/server/chunks/build/storage-XelzuyPy.mjs.map +0 -1
- package/.output/server/chunks/build/tags-DrCQ7QSw.mjs.map +0 -1
- package/.output/server/chunks/build/test-cases-pmOxi-AN.mjs.map +0 -1
- package/.output/server/chunks/build/timeout-hygiene-CNs71Iah.mjs.map +0 -1
- package/.output/server/chunks/build/useAiStatus-ZO987RY7.mjs.map +0 -1
- package/.output/server/chunks/build/useCopy-BQQKcwlq.mjs.map +0 -1
- package/.output/server/chunks/build/useFormControl-BLpq1s4O.mjs.map +0 -1
- package/.output/server/chunks/build/useOpenInIde-kMZ7Jw5c.mjs.map +0 -1
- package/.output/server/chunks/build/useSettingsNav-NjI2seBy.mjs.map +0 -1
- package/.output/server/chunks/build/useTreeViewCookie-DVYpxW-p.mjs.map +0 -1
- package/.output/server/chunks/build/users-NmAUZs3i.mjs.map +0 -1
- package/.output/server/chunks/build/virtualizer-ZaqK4guJ.mjs.map +0 -1
- package/.output/server/chunks/build/wasted-time-CguAF9zc.mjs.map +0 -1
- /package/.output/public/_nuxt/{PageStateCard.BrM5HWjY.css → useCopyRich.BrM5HWjY.css} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as ut,a as dt}from"./279D2RYp.js";import{_ as mt,a as pt}from"./C7P1UCO2.js";import{_ as _t}from"./BuMC3WjZ.js";import{_ as ft,a as gt}from"./CHEFCN8Q.js";import{d as yt,e as xt,b as bt,c as l,j as o,g as s,F as R,R as vt,o as a,i as c,I as ht,m as d,y as P,f as m,_ as kt,v as _,t as y,k as i,D as jt,h as N,r as x,L as Rt}from"./NQikbhmK.js";import{_ as $t}from"./DcmZRa_F.js";import{_ as Ct}from"./CV9-fTmY.js";import{_ as Tt}from"./tvgqrYDd.js";import{_ as Pt}from"./BSIxhGsh.js";import{_ as Nt}from"./BccXfBfI.js";import{_ as Ut}from"./C9_jrmk9.js";import{_ as Dt}from"./DiOLdHBC.js";import{_ as Ft}from"./Cdff9XNh.js";import{_ as St}from"./DLSrtpsA.js";import{_ as Bt}from"./CK_2LZBS.js";import{o as Kt,s as U,_ as Lt}from"./C5iG7O4O.js";import{_ as Vt}from"./B3HO8kuh.js";import{p as wt,i as b}from"./CDk0q2hV.js";import{u as w}from"./CpjgB2aY.js";import"./YVN7WG7q.js";import"./BjaRappk.js";import"./Bn0YQDyy.js";import"./DP8hfJ9h.js";import"./D-c8ZSws.js";import"./FUXhyidq.js";import"./B9WhzpKO.js";import"./CYsTqbBS.js";import"./eaVkJRSa.js";import"./DiZyJYez.js";import"./BeLWlVK0.js";import"./g26aVPxc.js";import"./BYDaY0Z7.js";const zt={class:"flex flex-wrap items-center gap-3 mb-4"},Ht={key:0,class:"flex flex-wrap items-center gap-2"},It={class:"text-sm text-muted shrink-0 inline-flex items-center gap-1"},At=["onClick"],Ot={class:"flex flex-col gap-1"},qt={class:"flex items-center gap-2"},Mt={key:0,class:"flex flex-wrap gap-1"},Et={key:0,class:"text-xs text-gray-600 italic"},Gt={key:1},Qt={key:0,class:"text-xs text-gray-600"},Xt={key:1,class:"text-xs text-gray-600 italic"},Jt={key:0,class:"flex items-center gap-1 flex-wrap"},Wt={key:0,class:"text-xs font-medium bg-gray-100 dark:bg-gray-800 px-1.5 py-0.5 rounded"},Yt={key:1,class:"text-xs text-gray-500"},Zt={key:1,class:"text-xs text-gray-600 italic"},te={key:1,class:"text-xs text-gray-600 italic"},ee={key:1,class:"text-xs text-gray-600 italic"},ae={class:"flex justify-end gap-2"},se={key:1,class:"space-y-2","aria-busy":"true"},oe={key:2,class:"text-center py-12 text-gray-500"},ne={class:"text-xs text-gray-400 max-w-sm"},le={class:"flex w-full justify-end gap-2"},He=yt({__name:"index",setup(re){xt({title:"Projects — Piwi Dashboard"});const{data:v,refresh:D,status:z}=w("/api/projects",{key:"projects",lazy:!0,default:()=>[]},"$AIGg5yw_0K"),{data:H,refresh:I}=w("/api/tags",{lazy:!0},"$qcllBXh9C_"),F=bt(),$=N(()=>H.value?.tags||[]),A=N(()=>z.value==="pending"&&!v.value?.length),h=x(""),u=x([]),S=N(()=>{let n=v.value||[];if(h.value.trim()){const e=h.value.trim().toLowerCase();n=n.filter(p=>(p.label||p.name).toLowerCase().includes(e)||p.name.toLowerCase().includes(e))}return u.value.length>0&&(n=n.filter(e=>u.value.some(p=>(e.tags||[]).some(T=>T.id===p)))),n});function O(n){const e=u.value.indexOf(n);e===-1?u.value.push(n):u.value.splice(e,1)}function q(n){return u.value.includes(n)}const f=x(!1),M=Kt({name:U().min(1,"Project name is required").max(100),label:U().optional(),description:U().optional()}),r=Rt({name:"",label:"",description:""}),k=x([]),C=x(!1);async function E(){if(r.name?.trim())try{C.value=!0,await $fetch("/api/projects",{method:"POST",body:{name:r.name.trim(),label:r.label?.trim()||null,description:r.description?.trim()||null,tagIds:k.value.map(n=>n.id)}}),F.add({title:"Project created",description:`Project "${r.name}" has been created`,color:"success"}),f.value=!1,r.name="",r.label="",r.description="",k.value=[],await D()}catch(n){const e=n&&typeof n=="object"&&"data"in n?n.data?.message:void 0;F.add({title:"Failed to create project",description:e||"An error occurred",color:"error"})}finally{C.value=!1}}const G=[{header:"Project",columns:[{accessorKey:"name",header:b("Name")},{accessorKey:"totalRuns",header:b("Runs")}]},{accessorKey:"latestRunData",header:"Latest run",columns:[{accessorKey:"latestRun",header:b("Date")},{accessorKey:"branch",header:"Branch"},{accessorKey:"duration",header:b("Duration")},{accessorKey:"status",header:b("Status")},{accessorKey:"testRatio",header:"Test status"},{accessorKey:"report",header:"Reports"}]},{accessorKey:"actions",header:"Project actions"}];return(n,e)=>{const p=ut,T=dt,B=mt,Q=_t,X=gt,J=ht,K=$t,g=kt,L=jt,W=Ct,Y=Tt,Z=Pt,tt=Nt,et=Ut,at=Dt,V=Ft,st=pt,ot=St,nt=ft,lt=Bt,rt=Lt,it=Vt,ct=vt;return a(),l(R,null,[o(nt,{id:"projects"},{header:s(()=>[o(X,null,{leading:s(()=>[o(p),o(T,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects"}]})]),right:s(()=>[o(Q,{actions:[{label:"New project",icon:"i-lucide-plus",onClick:()=>f.value=!0},{label:"Refresh",icon:"i-lucide-refresh-cw",variant:"outline",onClick:()=>i(D)()}]},{leading:s(()=>[o(B,{topic:"projects.table",size:"sm"})]),_:1},8,["actions"])]),_:1})]),body:s(()=>[c("div",zt,[o(J,{modelValue:h.value,"onUpdate:modelValue":e[0]||(e[0]=t=>h.value=t),icon:"i-lucide-search",placeholder:"Search projects by name...",class:"min-w-48 flex-1",ui:{base:"w-full"}},null,8,["modelValue"]),$.value.length>0?(a(),l("div",Ht,[c("span",It,[e[10]||(e[10]=d(" Filter by tag (any match): ",-1)),o(B,{topic:"projects.tag-filter"})]),(a(!0),l(R,null,P($.value,t=>(a(),l("button",{key:t.id,type:"button",class:"cursor-pointer focus:outline-none",onClick:j=>O(t.id)},[o(K,{text:t.text,color:t.color,variant:q(t.id)?"solid":"outline"},null,8,["text","color","variant"])],8,At))),128)),u.value.length>0?(a(),m(g,{key:0,size:"xs",variant:"ghost",color:"neutral",icon:"i-lucide-x",label:"Clear filters",onClick:e[1]||(e[1]=t=>u.value=[])})):_("",!0)])):_("",!0)]),S.value.length>0?(a(),m(at,{key:0,"min-width":"60rem",bleed:!1},{default:s(()=>[o(et,{data:S.value,columns:G,ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"name-cell":s(({row:t})=>[c("div",Ot,[c("div",qt,[o(L,{to:`/projects/${t.original.id}`,class:"text-primary hover:underline font-medium"},{default:s(()=>[d(y(t.original.label||t.original.name),1)]),_:2},1032,["to"])]),t.original.tags?.length?(a(),l("div",Mt,[(a(!0),l(R,null,P(t.original.tags,j=>(a(),m(K,{key:j.id,text:j.text,color:j.color},null,8,["text","color"]))),128))])):_("",!0)])]),"totalRuns-cell":s(({row:t})=>[t.original.totalRuns===0?(a(),l("span",Et,"No data")):(a(),l("span",Gt,y(t.original.totalRuns)+" runs",1))]),"latestRun-cell":s(({row:t})=>[t.original.latestRun?(a(),l("span",Qt,y(("prettyDateFormat"in n?n.prettyDateFormat:i(wt))(t.original.latestRun.startTime)),1)):(a(),l("span",Xt,"No data"))]),"branch-cell":s(({row:t})=>[t.original.latestRun?.metadata?.scm?(a(),l("div",Jt,[t.original.latestRun.metadata.scm.branch?(a(),l("span",Wt,y(t.original.latestRun.metadata.scm.branch),1)):_("",!0),t.original.latestRun.metadata.scm.commit?(a(),l("code",Yt,y(t.original.latestRun.metadata.scm.commit.substring(0,7)),1)):_("",!0)])):_("",!0)]),"duration-cell":s(({row:t})=>[t.original.latestRun?.duration!=null?(a(),m(W,{key:0,ms:t.original.latestRun.duration,class:"text-sm text-gray-600"},null,8,["ms"])):(a(),l("span",Zt,"No data"))]),"status-cell":s(({row:t})=>[t.original.latestRun?(a(),m(Y,{key:0,status:t.original.latestRun.status},null,8,["status"])):(a(),l("span",te,"No data"))]),"testRatio-cell":s(({row:t})=>[t.original.latestRun?(a(),m(Z,{key:0,passed:t.original.latestRun.passedTests,failed:t.original.latestRun.failedTests,skipped:t.original.latestRun.skippedTests,flaky:t.original.latestRun.flakyTests,"did-not-run":t.original.latestRun.didNotRunTests??0,total:t.original.latestRun.totalTests},null,8,["passed","failed","skipped","flaky","did-not-run","total"])):(a(),l("span",ee,"No data"))]),"report-cell":s(({row:t})=>[t.original.latestRun?(a(),m(tt,{key:0,reports:t.original.latestRun.reports},null,8,["reports"])):_("",!0)]),"actions-header":s(()=>[...e[11]||(e[11]=[c("div",{class:"text-right"},"Project actions",-1)])]),"actions-cell":s(({row:t})=>[c("div",ae,[o(g,{to:`/projects/${t.original.id}`,size:"sm",variant:"outline"},{default:s(()=>[...e[12]||(e[12]=[d("View details",-1)])]),_:1},8,["to"]),o(g,{to:`/projects/${t.original.id}/edit`,size:"sm",variant:"ghost",icon:"i-lucide-pencil"},null,8,["to"])])]),_:1},8,["data"])]),_:1})):A.value?(a(),l("div",se,[e[13]||(e[13]=c("span",{class:"sr-only",role:"status"},"Loading projects…",-1)),o(V,{class:"h-10 w-full rounded-lg"}),(a(),l(R,null,P(6,t=>o(V,{key:t,class:"h-14 w-full rounded-lg"})),64))])):i(v)&&i(v).length>0?(a(),l("div",oe,[...e[14]||(e[14]=[c("p",{class:"text-lg mb-2"},"No projects match your search",-1),c("p",{class:"text-sm"},"Try adjusting your search or filters",-1)])])):(a(),m(ot,{key:3,icon:"i-lucide-rocket",text:"No projects yet"},{default:s(()=>[c("p",ne,[e[17]||(e[17]=d(" Projects are created automatically once the reporter submits its first run — see the ",-1)),o(L,{to:"/",class:"text-primary hover:underline"},{default:s(()=>[...e[15]||(e[15]=[d("home page",-1)])]),_:1}),e[18]||(e[18]=d(" for a copy-paste setup snippet, or the ",-1)),o(st,{to:"reporter","no-icon":"",class:"text-primary hover:underline"},{default:s(()=>[...e[16]||(e[16]=[d("reporter docs",-1)])]),_:1}),e[19]||(e[19]=d(". ",-1))]),o(g,{icon:"i-lucide-plus",label:"New project",variant:"ghost",size:"sm",class:"mt-2",onClick:e[2]||(e[2]=t=>f.value=!0)})]),_:1}))]),_:1}),o(ct,null,{default:s(()=>[o(it,{open:f.value,title:"Create new project","onUpdate:open":e[9]||(e[9]=t=>f.value=t)},{body:s(()=>[o(rt,{schema:i(M),state:i(r)},{default:s(()=>[o(lt,{mode:"create",name:i(r).name,"onUpdate:name":e[3]||(e[3]=t=>i(r).name=t),label:i(r).label,"onUpdate:label":e[4]||(e[4]=t=>i(r).label=t),description:i(r).description,"onUpdate:description":e[5]||(e[5]=t=>i(r).description=t),tags:k.value,"onUpdate:tags":e[6]||(e[6]=t=>k.value=t),"all-tags":$.value,onTagCreated:e[7]||(e[7]=t=>i(I)())},null,8,["name","label","description","tags","all-tags"])]),_:1},8,["schema","state"])]),footer:s(()=>[c("div",le,[o(g,{color:"neutral",variant:"ghost",label:"Cancel",onClick:e[8]||(e[8]=t=>f.value=!1)}),o(g,{label:"Create project",icon:"i-lucide-plus",loading:C.value,onClick:E},null,8,["loading"])])]),_:1},8,["open"])]),_:1})],64)}}});export{He as default};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{_ as me,a as de}from"./279D2RYp.js";import{_ as pe,a as fe}from"./CHEFCN8Q.js";import{_ as he}from"./BxCKKeYs.js";import{d as H,o as n,c as a,F as B,y as T,i,t as c,k as s,v as g,m as R,f as U,h as x,aw as _e,L as se,r as N,j as $,_ as Y,I as oe,l as Z,s as ee,g as P,q as Q,A as ae,p as xe,e as ye}from"./NQikbhmK.js";import{_ as ge}from"./ybDYeNxd.js";import{_ as be}from"./D0HNloZ9.js";import{_ as ve}from"./DS636elg.js";import{_ as ke}from"./eaVkJRSa.js";import{_ as $e}from"./rWNTSFD6.js";import{g as we}from"./CDk0q2hV.js";import{_ as Ae}from"./DLSrtpsA.js";import{u as je}from"./Bn0YQDyy.js";import{u as re}from"./CtQBsNUb.js";import{u as Ue}from"./CpjgB2aY.js";import"./YVN7WG7q.js";import"./g26aVPxc.js";import"./CHNwfU1y.js";const Ce=["get","post","put","patch","delete","head","options","trace"];function Se(e){switch(e.toLowerCase()){case"get":return"success";case"post":return"info";case"put":case"patch":return"warning";case"delete":return"error";default:return"neutral"}}function Oe(e,t){return`op-${e}-${t}`.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")}function qe(e){const t=new Map;for(const[r,o]of Object.entries(e?.paths??{})){if(!o)continue;const u=o.parameters??[];for(const p of Ce){const v=o[p];if(!v)continue;const f=v.tags?.[0]??"Other",y={path:r,method:p,operation:v,parameters:[...u,...v.parameters??[]],tag:f,anchor:Oe(p,r)},A=t.get(f);A?A.push(y):t.set(f,[y])}}return[...t.entries()].map(([r,o])=>({tag:r,operations:o})).sort((r,o)=>r.tag.localeCompare(o.tag))}function ie(e,t){return Array.isArray(e.security)?e.security.length>0:Array.isArray(t?.security)&&t.security.length>0}function Be(e){return Array.isArray(e.security)&&e.security.length===0}function D(e,t){if(!e?.$ref)return e;const r=/^#\/components\/schemas\/(.+)$/.exec(e.$ref);return r?.[1]?t?.components?.schemas?.[r[1]]??e:e}const Re=["administrator","reporter","user"];function ne(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Te(e){const t=e["x-required-roles"];if(!t||t.length===0)return null;const r=Re.every(o=>t.includes(o));return{roles:t,label:r?"Any signed-in user":t.map(ne).join(" or "),shortLabel:r?"Any user":t.map(o=>o==="administrator"?"Admin":ne(o)).join(" / "),elevated:!r&&!t.includes("user")}}function te(e){if(!e)return"any";if(e.$ref)return e.$ref.split("/").pop()??"object";const t=Array.isArray(e.type)?e.type.join(" | "):e.type;if(t==="array"){const r=e.items;return`array<${r?te(r):"any"}>`}return!t&&e.properties||!t&&(e.oneOf||e.anyOf||e.allOf)?"object":t??"any"}const Pe={class:"space-y-2"},Ve={class:"flex flex-wrap items-baseline gap-x-2 gap-y-0.5"},Le={class:"font-mono text-primary"},ze={class:"text-xs text-muted font-mono"},Ie={key:0,class:"text-xs text-dimmed font-mono"},Ne={key:1,class:"text-xs font-medium text-error"},De={key:0,class:"text-muted mt-0.5"},Ee={key:1,class:"text-xs text-dimmed mt-0.5"},Je={class:"font-mono"},Me=H({__name:"ApiSchema",props:{schema:{},spec:{default:null},depth:{default:0}},setup(e){const t=e,r=x(()=>D(t.schema,t.spec)??t.schema),o=x(()=>{const f=r.value.type==="array"?D(r.value.items,t.spec):r.value,y=f?.properties;if(!y)return[];const A=new Set(f?.required??[]);return Object.entries(y).map(([h,j])=>({name:h,required:A.has(h),schema:D(j,t.spec)??j}))}),u=x(()=>(t.depth??0)<6);function p(f){const y=f.type==="array"?D(f.items,t.spec):f;return!!(y?.properties&&Object.keys(y.properties).length>0)}function v(f){return(f.enum??[]).map(y=>JSON.stringify(y)).join(", ")}return(f,y)=>{const A=le;return n(),a("div",Pe,[(n(!0),a(B,null,T(s(o),h=>(n(),a("div",{key:h.name,class:"text-sm"},[i("div",Ve,[i("code",Le,c(h.name),1),i("span",ze,c(("schemaTypeLabel"in f?f.schemaTypeLabel:s(te))(h.schema)),1),h.schema.format?(n(),a("span",Ie,"("+c(h.schema.format)+")",1)):g("",!0),h.required?(n(),a("span",Ne,"required")):g("",!0)]),h.schema.description?(n(),a("p",De,c(h.schema.description),1)):g("",!0),h.schema.enum?.length?(n(),a("p",Ee,[y[0]||(y[0]=R(" Allowed values: ",-1)),i("span",Je,c(v(h.schema)),1)])):g("",!0),s(u)&&p(h.schema)?(n(),U(A,{key:2,schema:h.schema,spec:e.spec,depth:(e.depth??0)+1,class:"mt-1.5 border-l border-default pl-3"},null,8,["schema","spec","depth"])):g("",!0)]))),128))])}}}),le=Object.assign(Me,{__name:"ApiSchema"});function He(){return{token:_e("piwi-api-token","")}}function We(e,t){return e.replace(/\{([^}]+)\}/g,(r,o)=>{const u=t[o];return u?encodeURIComponent(u):r})}function Fe(e){const t=new URLSearchParams;for(const[o,u]of Object.entries(e))u!==void 0&&u!==""&&t.append(o,u);const r=t.toString();return r?`?${r}`:""}function K(e,t,r=0){const o=D(e,t);if(!o||r>6)return null;if(o.example!==void 0)return o.example;if(o.default!==void 0)return o.default;if(o.enum?.length)return o.enum[0];const u=Array.isArray(o.type)?o.type.find(p=>p!=="null"):o.type;if(u==="object"||!u&&o.properties){const p={};for(const[v,f]of Object.entries(o.properties??{}))p[v]=K(f,t,r+1);return p}if(u==="array")return[K(o.items,t,r+1)];switch(u){case"string":return o.format==="date-time"?"2024-01-01T00:00:00Z":o.format==="date"?"2024-01-01":o.format==="uuid"?"00000000-0000-0000-0000-000000000000":"string";case"integer":case"number":return 0;case"boolean":return!1;default:return null}}function Qe(e,t){const r=e.requestBody?.content?.["application/json"]?.schema;return r?JSON.stringify(K(r,t),null,2):null}function Ge(e){return!!e.requestBody?.content?.["application/json"]}function X(e){return`'${e.replace(/'/g,"'\\''")}'`}function Xe({method:e,url:t,headers:r,body:o}){const u=["curl"];e.toUpperCase()!=="GET"&&u.push("-X",e.toUpperCase());for(const[p,v]of Object.entries(r))u.push("-H",X(`${p}: ${v}`));return o&&u.push("-d",X(o)),u.push(X(t)),u.join(" ")}function Ze({method:e,url:t,headers:r,body:o}){const u=[` method: ${JSON.stringify(e.toUpperCase())},`];return Object.keys(r).length&&u.push(` headers: ${JSON.stringify(r)},`),o&&u.push(` body: ${JSON.stringify(o)},`),`const res = await fetch(${JSON.stringify(t)}, {
|
|
2
|
+
${u.join(`
|
|
3
|
+
`)}
|
|
4
|
+
});
|
|
5
|
+
const data = await res.json();`}const Ke={class:"rounded-lg border border-default bg-default/50 p-3 space-y-3"},Ye={class:"flex items-center justify-between gap-2"},et={key:0,class:"space-y-1"},tt={key:1,class:"space-y-1.5"},st=["title"],nt={key:2,class:"space-y-1.5"},ot=["title"],at={key:3,class:"space-y-1"},rt={key:4,class:"text-xs text-dimmed"},it={key:5,class:"space-y-1.5"},lt={class:"flex items-center gap-2 text-xs"},ct={class:"text-dimmed"},ut={class:"max-h-80 overflow-auto"},mt={key:6,class:"text-xs text-error"},dt={class:"space-y-1.5"},pt={class:"flex gap-1"},ft=H({__name:"ApiTryIt",props:{item:{},spec:{}},setup(e){const t=e,r=ae(),o=r.public.demoMode,u=(r.app?.baseURL??"/").replace(/\/$/,""),{token:p}=He(),v=x(()=>ie(t.item.operation,t.spec)),f=x(()=>t.item.parameters.filter(O=>O.in==="path")),y=x(()=>t.item.parameters.filter(O=>O.in==="query")),A=se(Object.fromEntries(f.value.map(O=>[O.name,""]))),h=se(Object.fromEntries(y.value.map(O=>[O.name,""]))),j=x(()=>Ge(t.item.operation)),C=x(()=>!!t.item.operation.requestBody?.content?.["multipart/form-data"]&&!j.value),w=N(Qe(t.item.operation,t.spec)??""),l=x(()=>j.value&&w.value.trim()?w.value:void 0),d=x(()=>u+We(t.item.path,A)+Fe(h)),S=x(()=>{const O={};return l.value&&(O["Content-Type"]="application/json"),v.value&&p.value&&(O.Authorization=`Bearer ${p.value}`),O}),q=x(()=>window.location.origin+d.value),L=x(()=>Xe({method:t.item.method,url:q.value,headers:S.value,body:l.value})),I=x(()=>Ze({method:t.item.method,url:q.value,headers:S.value,body:l.value})),_=N("curl"),m=N(!1),V=N(null),z=N(null);async function ce(){m.value=!0,V.value=null,z.value=null;const O=performance.now();try{const b={...S.value};o&&(b["x-demo-user-id"]=localStorage.getItem("piwi-demo-user-id")||"1");const E=await fetch(d.value,{method:t.item.method.toUpperCase(),headers:b,body:l.value,credentials:"same-origin"}),J=Math.round(performance.now()-O),W=await E.text();let F=W;try{F=JSON.stringify(JSON.parse(W),null,2)}catch{}z.value={status:E.status,statusText:E.statusText,ok:E.ok,timeMs:J,body:F}}catch(b){V.value=we(b)}finally{m.value=!1}}return(O,b)=>{const E=Y,J=oe,W=ve,F=ke,ue=ee,G=$e;return n(),a("div",Ke,[i("div",Ye,[b[4]||(b[4]=i("h4",{class:"text-xs font-semibold uppercase tracking-wide text-dimmed"},"Try it out",-1)),$(E,{size:"xs",color:"primary",icon:"i-lucide-play",loading:s(m),label:"Send",onClick:ce},null,8,["loading"])]),s(v)?(n(),a("div",et,[b[5]||(b[5]=i("label",{class:"text-xs text-dimmed"},"Authorization — Bearer token",-1)),$(J,{modelValue:s(p),"onUpdate:modelValue":b[0]||(b[0]=k=>Z(p)?p.value=k:null),type:"password",placeholder:"pd_…",size:"sm",class:"w-full",ui:{base:"font-mono"}},null,8,["modelValue"])])):g("",!0),s(f).length?(n(),a("div",tt,[b[6]||(b[6]=i("label",{class:"text-xs text-dimmed"},"Path parameters",-1)),(n(!0),a(B,null,T(s(f),k=>(n(),a("div",{key:k.name,class:"flex items-center gap-2"},[i("code",{class:"text-xs font-mono text-primary w-28 shrink-0 truncate",title:k.name},c(k.name),9,st),$(J,{modelValue:s(A)[k.name],"onUpdate:modelValue":M=>s(A)[k.name]=M,placeholder:k.name,size:"sm",class:"flex-1",ui:{base:"font-mono"}},null,8,["modelValue","onUpdate:modelValue","placeholder"])]))),128))])):g("",!0),s(y).length?(n(),a("div",nt,[b[7]||(b[7]=i("label",{class:"text-xs text-dimmed"},"Query parameters",-1)),(n(!0),a(B,null,T(s(y),k=>(n(),a("div",{key:k.name,class:"flex items-center gap-2"},[i("code",{class:"text-xs font-mono text-primary w-28 shrink-0 truncate",title:k.name},c(k.name),9,ot),k.schema?.enum?.length?(n(),U(W,{key:0,modelValue:s(h)[k.name],"onUpdate:modelValue":M=>s(h)[k.name]=M,items:["",...k.schema.enum.map(String)],size:"sm",class:"flex-1"},null,8,["modelValue","onUpdate:modelValue","items"])):(n(),U(J,{key:1,modelValue:s(h)[k.name],"onUpdate:modelValue":M=>s(h)[k.name]=M,placeholder:k.name,size:"sm",class:"flex-1",ui:{base:"font-mono"}},null,8,["modelValue","onUpdate:modelValue","placeholder"]))]))),128))])):g("",!0),s(j)?(n(),a("div",at,[b[8]||(b[8]=i("label",{class:"text-xs text-dimmed"},"Request body — application/json",-1)),$(F,{modelValue:s(w),"onUpdate:modelValue":b[1]||(b[1]=k=>Z(w)?w.value=k:null),rows:6,class:"w-full",ui:{base:"font-mono text-xs"}},null,8,["modelValue"])])):s(C)?(n(),a("p",rt,[...b[9]||(b[9]=[R(" This endpoint expects ",-1),i("code",{class:"font-mono"},"multipart/form-data",-1),R(" (file upload) — use the cURL sample below as a starting point. ",-1)])])):g("",!0),s(z)?(n(),a("div",it,[i("div",lt,[$(ue,{color:s(z).ok?"success":"error",variant:"subtle",class:"font-mono"},{default:P(()=>[R(c(s(z).status)+" "+c(s(z).statusText),1)]),_:1},8,["color"]),i("span",ct,c(s(z).timeMs)+" ms",1)]),i("div",ut,[$(G,{code:s(z).body,lang:"json"},null,8,["code"])])])):s(V)?(n(),a("p",mt,"Request failed: "+c(s(V)),1)):g("",!0),i("div",dt,[i("div",pt,[i("button",{type:"button",class:Q(["text-xs px-2 py-0.5 rounded-md transition-colors",s(_)==="curl"?"bg-elevated text-highlighted":"text-muted hover:text-highlighted"]),onClick:b[2]||(b[2]=k=>_.value="curl")}," cURL ",2),i("button",{type:"button",class:Q(["text-xs px-2 py-0.5 rounded-md transition-colors",s(_)==="fetch"?"bg-elevated text-highlighted":"text-muted hover:text-highlighted"]),onClick:b[3]||(b[3]=k=>_.value="fetch")}," JavaScript ",2)]),s(_)==="curl"?(n(),U(G,{key:0,code:s(L),lang:"bash"},null,8,["code"])):(n(),U(G,{key:1,code:s(I),lang:"javascript"},null,8,["code"]))])])}}}),ht=Object.assign(ft,{__name:"ApiTryIt"}),_t=["id"],xt=["aria-expanded"],yt={class:"font-mono text-sm text-highlighted break-all"},gt={class:"text-sm text-muted truncate hidden sm:inline flex-1"},bt={key:0,class:"px-3 pb-3 pt-1 space-y-4 border-t border-default"},vt={key:0,class:"text-sm font-medium text-highlighted sm:hidden"},kt={key:1,class:"text-sm text-muted"},$t={key:2,class:"flex items-center gap-1.5 text-xs"},wt={class:"text-muted font-medium"},At={key:0,class:"space-y-1.5"},jt={class:"text-xs font-semibold uppercase tracking-wide text-dimmed"},Ut={class:"space-y-2"},Ct={class:"flex flex-wrap items-baseline gap-x-2 gap-y-0.5"},St={class:"font-mono text-primary"},Ot={class:"text-xs text-muted font-mono"},qt={key:0,class:"text-xs font-medium text-error"},Bt={key:0,class:"text-muted mt-0.5"},Rt={key:1,class:"text-xs text-dimmed mt-0.5"},Tt={class:"font-mono"},Pt={key:3,class:"space-y-1.5"},Vt={class:"text-xs text-dimmed font-mono"},Lt={key:4,class:"space-y-1.5"},zt={class:"flex items-baseline gap-2"},It={class:"text-muted"},Nt={class:"text-xs text-dimmed font-mono"},Dt=H({__name:"ApiOperation",props:{item:{},spec:{}},setup(e){const t=e,r=N(!1),o=x(()=>ie(t.item.operation,t.spec)),u=x(()=>Be(t.item.operation)),p=x(()=>Te(t.item.operation)),v=x(()=>u.value?"Public — no authentication required":p.value?p.value.label:o.value?"Requires authentication":null),f=x(()=>t.item.parameters.filter(l=>l.in==="path")),y=x(()=>t.item.parameters.filter(l=>l.in==="query")),A=x(()=>t.item.parameters.filter(l=>l.in==="header")),h=x(()=>Object.entries(t.item.operation.requestBody?.content??{}).map(([l,d])=>({contentType:l,schema:D(d.schema,t.spec)}))),j=x(()=>Object.entries(t.item.operation.responses??{}).map(([l,d])=>({status:l,description:d.description,entries:Object.entries(d.content??{}).map(([S,q])=>({contentType:S,schema:D(q.schema,t.spec)}))}))),C=x(()=>t.item.path.split(/(\{[^}]+\})/g).map(l=>({text:l,isParam:l.startsWith("{")})));function w(l){return l.startsWith("2")?"text-success":l.startsWith("3")?"text-info":l.startsWith("4")?"text-warning":l.startsWith("5")?"text-error":"text-muted"}return(l,d)=>{const S=ee,q=xe,L=le,I=ht;return n(),a("div",{id:e.item.anchor,class:"border border-default rounded-lg bg-elevated/20 scroll-mt-20"},[i("button",{type:"button",class:"w-full flex items-center gap-3 px-3 py-2.5 text-left cursor-pointer","aria-expanded":s(r),onClick:d[0]||(d[0]=_=>r.value=!s(r))},[$(S,{color:("methodBadgeColor"in l?l.methodBadgeColor:s(Se))(e.item.method),variant:"subtle",class:"font-mono uppercase shrink-0 w-16 justify-center"},{default:P(()=>[R(c(e.item.method),1)]),_:1},8,["color"]),i("code",yt,[(n(!0),a(B,null,T(s(C),(_,m)=>(n(),a("span",{key:m,class:Q(_.isParam?"text-warning":"")},c(_.text),3))),128))]),i("span",gt,c(e.item.operation.summary),1),s(p)?.elevated?(n(),U(S,{key:0,color:"warning",variant:"subtle",size:"sm",icon:"i-lucide-shield",class:"shrink-0 ml-auto sm:ml-0",title:`Requires role: ${s(p).label}`},{default:P(()=>[R(c(s(p).shortLabel),1)]),_:1},8,["title"])):s(u)?(n(),U(S,{key:1,color:"neutral",variant:"subtle",size:"sm",class:"shrink-0 ml-auto sm:ml-0"},{default:P(()=>[...d[1]||(d[1]=[R(" Public ",-1)])]),_:1})):s(o)?(n(),U(q,{key:2,name:"i-lucide-lock",class:"size-3.5 text-dimmed shrink-0 ml-auto sm:ml-0",title:"Requires authentication"})):g("",!0),$(q,{name:s(r)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-4 text-dimmed shrink-0"},null,8,["name"])],8,xt),s(r)?(n(),a("div",bt,[e.item.operation.summary?(n(),a("p",vt,c(e.item.operation.summary),1)):g("",!0),e.item.operation.description?(n(),a("p",kt,c(e.item.operation.description),1)):g("",!0),s(v)?(n(),a("div",$t,[$(q,{name:s(p)?.elevated?"i-lucide-shield":"i-lucide-users",class:"size-3.5 text-dimmed shrink-0"},null,8,["name"]),d[2]||(d[2]=i("span",{class:"text-dimmed"},"Access",-1)),i("span",wt,c(s(v)),1)])):g("",!0),(n(!0),a(B,null,T([{label:"Path parameters",params:s(f)},{label:"Query parameters",params:s(y)},{label:"Header parameters",params:s(A)}],_=>(n(),a(B,{key:_.label},[_.params.length?(n(),a("div",At,[i("h4",jt,c(_.label),1),i("div",Ut,[(n(!0),a(B,null,T(_.params,m=>(n(),a("div",{key:m.name,class:"text-sm"},[i("div",Ct,[i("code",St,c(m.name),1),i("span",Ot,c(("schemaTypeLabel"in l?l.schemaTypeLabel:s(te))(m.schema)),1),m.required?(n(),a("span",qt,"required")):g("",!0)]),m.description?(n(),a("p",Bt,c(m.description),1)):g("",!0),m.schema?.enum?.length?(n(),a("p",Rt,[d[3]||(d[3]=R(" Allowed values: ",-1)),i("span",Tt,c(m.schema.enum.map(V=>JSON.stringify(V)).join(", ")),1)])):g("",!0)]))),128))])])):g("",!0)],64))),128)),s(h).length?(n(),a("div",Pt,[d[4]||(d[4]=i("h4",{class:"text-xs font-semibold uppercase tracking-wide text-dimmed"},"Request body",-1)),(n(!0),a(B,null,T(s(h),_=>(n(),a("div",{key:_.contentType,class:"space-y-1.5"},[i("code",Vt,c(_.contentType),1),_.schema?(n(),U(L,{key:0,schema:_.schema,spec:e.spec},null,8,["schema","spec"])):g("",!0)]))),128))])):g("",!0),s(j).length?(n(),a("div",Lt,[d[5]||(d[5]=i("h4",{class:"text-xs font-semibold uppercase tracking-wide text-dimmed"},"Responses",-1)),(n(!0),a(B,null,T(s(j),_=>(n(),a("div",{key:_.status,class:"text-sm"},[i("div",zt,[i("code",{class:Q(["font-mono font-semibold",w(_.status)])},c(_.status),3),i("span",It,c(_.description),1)]),(n(!0),a(B,null,T(_.entries,m=>(n(),a("div",{key:m.contentType,class:"mt-1 pl-3 border-l border-default"},[i("code",Nt,c(m.contentType),1),m.schema?(n(),U(L,{key:0,schema:m.schema,spec:e.spec,class:"mt-1"},null,8,["schema","spec"])):g("",!0)]))),128))]))),128))])):g("",!0),$(I,{item:e.item,spec:e.spec},null,8,["item","spec"])])):g("",!0)],8,_t)}}}),Et=Object.assign(Dt,{__name:"ApiOperation"}),Jt={class:"max-w-4xl mx-auto px-4 sm:px-6 py-6 space-y-6"},Mt={class:"space-y-3"},Ht={class:"flex flex-wrap items-center gap-2"},Wt={class:"text-xl font-semibold text-highlighted"},Ft={key:0,class:"text-sm text-muted"},Qt={key:1,class:"flex items-center gap-2 text-sm"},Gt={class:"flex flex-wrap items-center gap-2"},Xt={class:"text-xs text-dimmed"},Zt={key:0,class:"flex flex-wrap gap-1.5"},Kt=["href"],Yt={class:"text-dimmed"},es={key:1,class:"space-y-8"},ts=["id"],ss={class:"text-sm font-semibold uppercase tracking-wide text-dimmed"},ns={class:"text-dimmed/60"},os=H({__name:"ApiReference",props:{spec:{},specUrl:{}},setup(e){const t=e,{copy:r,copied:o}=je(),{isDesktop:u,download:p}=re(),v=N("");function f(w){u&&(w.preventDefault(),p(t.specUrl,"piwi-openapi.json"))}const y=x(()=>qe(t.spec)),A=x(()=>y.value.reduce((w,l)=>w+l.operations.length,0)),h=x(()=>{const w=v.value.trim().toLowerCase();return w?y.value.map(l=>({tag:l.tag,operations:l.operations.filter(d=>`${d.method} ${d.path} ${d.operation.summary??""} ${d.operation.description??""} ${d.tag}`.toLowerCase().includes(w))})).filter(l=>l.operations.length>0):y.value}),j=x(()=>t.spec.servers?.[0]?.url??"");function C(w){return`tag-${w.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")}`}return(w,l)=>{const d=ee,S=Y,q=be,L=oe,I=Et,_=Ae;return n(),a("div",Jt,[i("header",Mt,[i("div",Ht,[i("h1",Wt,c(e.spec.info?.title??"API Reference"),1),e.spec.info?.version?(n(),U(d,{key:0,color:"neutral",variant:"subtle",class:"font-mono"},{default:P(()=>[R(" v"+c(e.spec.info.version),1)]),_:1})):g("",!0)]),e.spec.info?.description?(n(),a("p",Ft,c(e.spec.info.description),1)):g("",!0),s(j)?(n(),a("div",Qt,[l[2]||(l[2]=i("span",{class:"text-dimmed"},"Base URL",-1)),$(S,{label:s(j),color:"neutral",variant:"subtle",size:"xs",icon:s(o)?"i-lucide-check":"i-lucide-copy",class:"font-mono",onClick:l[0]||(l[0]=m=>s(r)(s(j),{toast:!0}))},null,8,["label","icon"])])):g("",!0),i("div",Gt,[$(S,{to:e.specUrl,target:"_blank",external:"",color:"neutral",variant:"outline",size:"xs",icon:"i-lucide-file-json",label:"Raw OpenAPI spec",onClick:f},null,8,["to"]),i("span",Xt,c(s(A))+" endpoints",1)]),$(q,{color:"info",variant:"subtle",icon:"i-lucide-terminal",title:"Windows users",description:"curl examples below use Unix syntax — run them in Git Bash / WSL, or use PowerShell's Invoke-RestMethod instead."})]),$(L,{modelValue:s(v),"onUpdate:modelValue":l[1]||(l[1]=m=>Z(v)?v.value=m:null),icon:"i-lucide-search",placeholder:"Filter endpoints by path, method, or description…",size:"md",class:"w-full",ui:{root:"sticky top-0 z-10"}},null,8,["modelValue"]),!s(v)&&s(y).length>1?(n(),a("div",Zt,[(n(!0),a(B,null,T(s(y),m=>(n(),a("a",{key:m.tag,href:`#${C(m.tag)}`,class:"text-xs px-2 py-1 rounded-md bg-elevated text-muted hover:text-highlighted hover:bg-accented transition-colors"},[R(c(m.tag)+" ",1),i("span",Yt,c(m.operations.length),1)],8,Kt))),128))])):g("",!0),s(h).length?(n(),a("div",es,[(n(!0),a(B,null,T(s(h),m=>(n(),a("section",{key:m.tag,id:C(m.tag),class:"space-y-2 scroll-mt-4"},[i("h2",ss,[R(c(m.tag)+" ",1),i("span",ns,"("+c(m.operations.length)+")",1)]),(n(!0),a(B,null,T(m.operations,V=>(n(),U(I,{key:V.anchor,item:V,spec:e.spec},null,8,["item","spec"]))),128))],8,ts))),128))])):(n(),U(_,{key:2,icon:"i-lucide-search-x",text:"No endpoints match your filter."}))])}}}),as=Object.assign(os,{__name:"ApiReference"}),rs={key:1,class:"p-6"},is={class:"flex flex-wrap justify-center gap-2 mt-1"},As=H({__name:"docs",setup(e){const r=ae().public.demoMode,o=r?"/demo/_openapi.json":"/_openapi.json",{isDesktop:u,download:p}=re();function v(j){u&&(j.preventDefault(),p(o,"piwi-openapi.json"))}ye({title:"API Reference — Piwi Dashboard"});const{data:f,status:y,error:A,refresh:h}=Ue(o,{key:"openapi-spec",lazy:!0,server:!r},"$jVU__ibpQM");return(j,C)=>{const w=me,l=de,d=fe,S=he,q=Y,L=ge,I=as,_=pe;return n(),U(_,{id:"docs"},{header:P(()=>[$(d,null,{leading:P(()=>[$(w),$(l,{items:[{label:"API Reference",icon:"i-lucide-book-open"}]})]),_:1})]),body:P(()=>[s(y)==="pending"||!s(f)&&!s(A)?(n(),U(S,{key:0,text:"Loading API reference…"})):s(A)||!s(f)?(n(),a("div",rs,[$(L,{text:"Couldn't load the API reference UI."},{action:P(()=>[C[3]||(C[3]=i("p",{class:"text-sm text-muted max-w-sm"},"The raw OpenAPI spec is still available directly.",-1)),i("div",is,[$(q,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:C[0]||(C[0]=()=>s(h)())},{default:P(()=>[...C[1]||(C[1]=[R(" Retry ",-1)])]),_:1}),$(q,{to:s(o),target:"_blank",external:"",size:"sm",variant:"outline",icon:"i-lucide-file-json",onClick:v},{default:P(()=>[...C[2]||(C[2]=[R(" Raw OpenAPI spec ",-1)])]),_:1},8,["to"])])]),_:1})])):(n(),U(I,{key:2,spec:s(f),"spec-url":s(o)},null,8,["spec","spec-url"]))]),_:1})}}});export{As as default};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{_ as ie}from"./
|
|
1
|
+
import{_ as ie}from"./CZfMdzfk.js";import{d as re,b as de,w as D,c as r,j as a,ac as ce,k as s,g as d,F as y,f as v,h as N,r as k,o as n,i,I as ue,l as me,_ as pe,m as c,p as fe,t as p,v as _,y as R,s as _e,q as ge,L as ye,A as ve}from"./NQikbhmK.js";import{_ as he}from"./rWNTSFD6.js";import{_ as ke}from"./C7P1UCO2.js";import{_ as xe}from"./DprVVyUQ.js";import{_ as be}from"./B9WhzpKO.js";import{_ as Se}from"./DS636elg.js";import{_ as we}from"./DP8hfJ9h.js";import{_ as Te}from"./D0HNloZ9.js";import{u as W}from"./CpjgB2aY.js";import"./CDk0q2hV.js";import"./Bn0YQDyy.js";import"./BjaRappk.js";import"./eptP4pGv.js";import"./CYsTqbBS.js";import"./g26aVPxc.js";const Pe={class:"space-y-6"},Ue={class:"space-y-3"},Ce={key:0,class:"flex items-center gap-2 text-sm text-success-600 dark:text-success-400"},Ie={key:1,class:"flex items-center gap-2 text-sm text-warning-600 dark:text-warning-400"},Me={key:2,class:"grid grid-cols-2 gap-2 text-sm"},$e={class:"font-mono"},Ve={class:"font-mono"},Ee={key:3,class:"text-sm text-muted space-y-1"},ze={class:"flex items-center gap-2 w-full"},Ae={key:0,class:"mb-4 p-4 rounded-lg border border-primary/30 bg-primary/5 space-y-3"},De={class:"grid grid-cols-2 gap-3"},Ne={class:"flex justify-end gap-2"},Re={key:1,class:"text-sm text-muted py-4 text-center"},We={class:"space-y-2"},Oe={class:"flex-1 min-w-0"},Fe={class:"font-medium text-sm flex items-center gap-1.5"},Le={class:"text-xs text-muted"},Be={key:3,class:"ml-1 text-primary text-xs"},je={class:"flex items-center gap-1"},He={key:0,class:"text-sm text-muted py-4 text-center"},qe={class:"space-y-2"},Je={class:"flex-1 min-w-0 space-y-0.5"},Qe={class:"font-medium text-sm"},Xe={class:"text-xs text-muted flex flex-wrap gap-x-3"},Ke={key:0},Ye={key:1},Ge={key:2,class:"text-warning-500"},Ze={class:"flex flex-wrap gap-1 mt-1"},et={class:"flex items-center gap-1"},vt=re({__name:"notifications",async setup(tt){let f,x;const u=de(),j=ve(),I=N(()=>j.public.authEnabled),H=["PIWI_SMTP_HOST","PIWI_SMTP_PORT","PIWI_SMTP_USER","PIWI_SMTP_PASS","PIWI_SMTP_FROM","PIWI_SMTP_FROM_NAME","PIWI_SMTP_SECURE"],{data:m}=([f,x]=D(()=>W("/api/settings/smtp","$gVOXSKoU4Q")),f=await f,x(),f),h=k(""),M=k(!1);async function q(){if(h.value){M.value=!0;try{const o=await $fetch("/api/settings/smtp/test",{method:"POST",body:{to:h.value}});o.success?u.add({title:"Test email sent",description:`Check ${h.value}`,color:"success"}):u.add({title:"Send failed",description:o.error||"Unknown error",color:"error"})}catch(o){u.add({title:"Send failed",description:String(o?.message??o),color:"error"})}finally{M.value=!1}}}const{data:J,refresh:O}=I.value?([f,x]=D(()=>W("/api/channels","$fv1jJkJo5B")),f=await f,x(),f):{data:k(null),refresh:()=>{}},$=N(()=>J.value?.channels??[]),b=k(!1),l=ye({name:"",type:"email",address:"",webhookUrl:"",url:"",secret:"",global:!1}),V=k(!1),E=k(null),Q=[{label:"Email",value:"email"},{label:"Slack webhook",value:"slack"},{label:"Webhook",value:"webhook"}];async function X(){V.value=!0;try{const o={};l.type==="email"?o.address=l.address:l.type==="slack"?o.webhookUrl=l.webhookUrl:l.type==="webhook"&&(o.url=l.url,l.secret&&(o.secret=l.secret)),await $fetch("/api/channels",{method:"POST",body:{name:l.name,type:l.type,config:o,global:l.global}}),b.value=!1,Object.assign(l,{name:"",type:"email",address:"",webhookUrl:"",url:"",secret:"",global:!1}),await O(),u.add({title:"Channel created",color:"success"})}catch(o){u.add({title:"Failed to create channel",description:String(o?.message??o),color:"error"})}finally{V.value=!1}}async function K(o){try{await $fetch(`/api/channels/${o}`,{method:"DELETE"}),await O(),u.add({title:"Channel deleted",color:"success"})}catch(e){u.add({title:"Failed to delete channel",description:String(e?.message??e),color:"error"})}}async function Y(o){E.value=o;try{const e=await $fetch(`/api/channels/${o}/test`,{method:"POST"});e.success?u.add({title:"Test notification sent",color:"success"}):u.add({title:"Test failed",description:e.error,color:"error"})}catch(e){u.add({title:"Test failed",description:String(e?.message??e),color:"error"})}finally{E.value=null}}const{data:G,refresh:F}=I.value?([f,x]=D(()=>W("/api/subscriptions","$WhEQp2PfoM")),f=await f,x(),f):{data:k(null),refresh:()=>{}},z=N(()=>G.value?.subscriptions??[]);async function Z(o){try{await $fetch(`/api/subscriptions/${o}`,{method:"DELETE"}),await F(),u.add({title:"Subscription removed",color:"success"})}catch(e){u.add({title:"Failed to remove subscription",description:String(e?.message??e),color:"error"})}}async function ee(o){const e=o.mutedUntil&&new Date(o.mutedUntil)>new Date;try{await $fetch(`/api/subscriptions/${o.id}`,{method:"PATCH",body:{mutedUntil:e?null:new Date(Date.now()+10080*60*1e3).toISOString()}}),await F(),u.add({title:e?"Unmuted":"Muted for 7 days",color:"success"})}catch(U){u.add({title:"Failed to update subscription",description:String(U?.message??U),color:"error"})}}function P(o){return o.mutedUntil&&new Date(o.mutedUntil)>new Date}function L(o){return o==="personal_email"?"i-lucide-user-round":o==="email"?"i-lucide-mail":o==="slack"?"i-lucide-slack":"i-lucide-webhook"}function te(o){return o.replace(/\./g," › ")}return(o,e)=>{const U=ie,C=fe,se=he,oe=ke,S=ue,g=pe,A=xe,w=be,ne=Se,B=_e,le=we,ae=Te;return n(),r("div",Pe,[a(A,{icon:"i-lucide-mail",title:"SMTP email delivery",help:"settings.smtp"},ce({subtitle:d(()=>[e[9]||(e[9]=c(" Configure SMTP via environment variables. The connection cannot be changed here. ",-1))]),actions:d(()=>[s(m)?.configured?(n(),v(U,{key:0,"env-vars":H,size:"md"})):_("",!0)]),default:d(()=>[i("div",Ue,[s(m)?.configured?(n(),r("div",Ce,[a(C,{name:"i-lucide-circle-check-big",class:"size-4"}),e[10]||(e[10]=c(" Configured ",-1))])):(n(),r("div",Ie,[a(C,{name:"i-lucide-circle-alert",class:"size-4"}),e[11]||(e[11]=c(" Not configured ",-1))])),s(m)?.configured?(n(),r("div",Me,[e[12]||(e[12]=i("div",{class:"text-muted"},"Host",-1)),i("div",$e,p(s(m)?.host)+":"+p(s(m)?.port),1),e[13]||(e[13]=i("div",{class:"text-muted"},"From",-1)),i("div",null,p(s(m)?.fromName?`${s(m).fromName} <${s(m).from}>`:s(m)?.from),1),e[14]||(e[14]=i("div",{class:"text-muted"},"User",-1)),i("div",Ve,p(s(m)?.user),1),e[15]||(e[15]=i("div",{class:"text-muted"},"TLS",-1)),i("div",null,p(s(m)?.secure?"Yes (port 465)":"STARTTLS / plain"),1)])):_("",!0),s(m)?.configured?_("",!0):(n(),r("div",Ee,[e[16]||(e[16]=i("p",null,"Set these environment variables to enable email notifications:",-1)),a(se,{code:`PIWI_SMTP_HOST=smtp.example.com
|
|
2
2
|
PIWI_SMTP_PORT=465
|
|
3
3
|
PIWI_SMTP_USER=user@example.com
|
|
4
4
|
PIWI_SMTP_PASS=secret
|
|
5
5
|
PIWI_SMTP_FROM=noreply@example.com
|
|
6
|
-
PIWI_SMTP_FROM_NAME=Piwi Dashboard`,lang:"bash"})]))])]),_:2},[s(m)?.configured?{name:"footer",fn:d(()=>[i("div",
|
|
6
|
+
PIWI_SMTP_FROM_NAME=Piwi Dashboard`,lang:"bash"})]))])]),_:2},[s(m)?.configured?{name:"footer",fn:d(()=>[i("div",ze,[a(oe,{topic:"notifications.test-email"}),a(S,{modelValue:s(h),"onUpdate:modelValue":e[0]||(e[0]=t=>me(h)?h.value=t:null),type:"email",placeholder:"Send test to email address…",class:"flex-1"},null,8,["modelValue"]),a(g,{color:"neutral",variant:"soft",icon:"i-lucide-send",loading:s(M),disabled:!s(h),onClick:q},{default:d(()=>[...e[17]||(e[17]=[c(" Send test ",-1)])]),_:1},8,["loading","disabled"])])]),key:"0"}:void 0]),1024),s(I)?(n(),r(y,{key:0},[a(A,{icon:"i-lucide-radio",title:"Notification channels",count:s($).length,help:"notifications.channels"},{actions:d(()=>[a(g,{size:"sm",icon:"i-lucide-plus",onClick:e[1]||(e[1]=t=>b.value=!s(b))},{default:d(()=>[...e[18]||(e[18]=[c(" Add channel ",-1)])]),_:1})]),default:d(()=>[s(b)?(n(),r("div",Ae,[e[21]||(e[21]=i("h4",{class:"font-medium text-sm"},"New channel",-1)),i("div",De,[a(w,{label:"Name"},{default:d(()=>[a(S,{modelValue:s(l).name,"onUpdate:modelValue":e[2]||(e[2]=t=>s(l).name=t),placeholder:"e.g. My email",class:"w-full"},null,8,["modelValue"])]),_:1}),a(w,{label:"Type"},{default:d(()=>[a(ne,{modelValue:s(l).type,"onUpdate:modelValue":e[3]||(e[3]=t=>s(l).type=t),items:Q,class:"w-full"},null,8,["modelValue"])]),_:1})]),s(l).type==="email"?(n(),v(w,{key:0,label:"Email address"},{default:d(()=>[a(S,{modelValue:s(l).address,"onUpdate:modelValue":e[4]||(e[4]=t=>s(l).address=t),type:"email",placeholder:"you@example.com",class:"w-full"},null,8,["modelValue"])]),_:1})):s(l).type==="slack"?(n(),v(w,{key:1,label:"Slack webhook URL"},{default:d(()=>[a(S,{modelValue:s(l).webhookUrl,"onUpdate:modelValue":e[5]||(e[5]=t=>s(l).webhookUrl=t),placeholder:"https://hooks.slack.com/…",class:"w-full"},null,8,["modelValue"])]),_:1})):s(l).type==="webhook"?(n(),r(y,{key:2},[a(w,{label:"Endpoint URL"},{default:d(()=>[a(S,{modelValue:s(l).url,"onUpdate:modelValue":e[6]||(e[6]=t=>s(l).url=t),placeholder:"https://your-server.com/webhook",class:"w-full"},null,8,["modelValue"])]),_:1}),a(w,{label:"Secret (optional)",description:"Used to sign requests with X-Piwi-Signature header"},{default:d(()=>[a(S,{modelValue:s(l).secret,"onUpdate:modelValue":e[7]||(e[7]=t=>s(l).secret=t),type:"password",placeholder:"Shared secret",class:"w-full"},null,8,["modelValue"])]),_:1})],64)):_("",!0),i("div",Ne,[a(g,{color:"neutral",variant:"ghost",size:"sm",onClick:e[8]||(e[8]=t=>b.value=!1)},{default:d(()=>[...e[19]||(e[19]=[c("Cancel",-1)])]),_:1}),a(g,{color:"primary",size:"sm",loading:s(V),disabled:!s(l).name,onClick:X},{default:d(()=>[...e[20]||(e[20]=[c(" Save channel ",-1)])]),_:1},8,["loading","disabled"])])])):_("",!0),s($).length===0&&!s(b)?(n(),r("div",Re," No channels yet. Add one to start receiving notifications. ")):_("",!0),i("div",We,[(n(!0),r(y,null,R(s($),t=>(n(),r("div",{key:t.id,class:"flex items-center gap-3 rounded-lg border border-default px-4 py-3"},[a(C,{name:L(t.type),class:"size-5 text-muted shrink-0"},null,8,["name"]),i("div",Oe,[i("div",Fe,[c(p(t.name)+" ",1),t.type==="personal_email"?(n(),v(B,{key:0,size:"xs",variant:"soft",color:"neutral"},{default:d(()=>[...e[22]||(e[22]=[c("auto",-1)])]),_:1})):_("",!0)]),i("div",Le,[t.type==="personal_email"||t.type==="email"?(n(),r(y,{key:0},[c(p(t.config.address),1)],64)):t.type==="slack"?(n(),r(y,{key:1},[c("Slack webhook")],64)):(n(),r(y,{key:2},[c(p(t.config.url),1)],64)),t.userId===null?(n(),r("span",Be,"(global)")):_("",!0)])]),i("div",je,[a(g,{icon:"i-lucide-send",color:"neutral",variant:"ghost",size:"sm",title:"Send test notification",loading:s(E)===t.id,onClick:T=>Y(t.id)},null,8,["loading","onClick"]),t.type==="personal_email"?(n(),v(le,{key:0,text:"Remove your email in Account settings to disconnect"},{default:d(()=>[a(g,{icon:"i-lucide-trash-2",color:"neutral",variant:"ghost",size:"sm",disabled:""})]),_:1})):(n(),v(g,{key:1,icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"sm",title:"Delete channel",onClick:T=>K(t.id)},null,8,["onClick"]))])]))),128))])]),_:1},8,["count"]),a(A,{icon:"i-lucide-bell",title:"My subscriptions",count:s(z).length,help:"notifications.subscriptions"},{default:d(()=>[s(z).length===0?(n(),r("div",He,[...e[23]||(e[23]=[c(" No subscriptions yet. Use the ",-1),i("strong",null,"Subscribe",-1),c(" bell on a project page to get started. ",-1)])])):_("",!0),i("div",qe,[(n(!0),r(y,null,R(s(z),t=>(n(),r("div",{key:t.id,class:ge(["flex items-center gap-3 rounded-lg border border-default px-4 py-3",P(t)?"opacity-60":""])},[a(C,{name:L(t.channel.type),class:"size-5 text-muted shrink-0"},null,8,["name"]),i("div",Je,[i("div",Qe,p(t.channel.name),1),i("div",Xe,[t.projectId?(n(),r("span",Ke,"Project #"+p(t.projectId),1)):(n(),r("span",Ye,"All projects")),i("span",null,p(t.mode),1),P(t)?(n(),r("span",Ge,"Muted until "+p(new Date(t.mutedUntil).toLocaleDateString()),1)):_("",!0)]),i("div",Ze,[(n(!0),r(y,null,R(t.events??[],T=>(n(),v(B,{key:T,size:"xs",variant:"soft",color:"neutral"},{default:d(()=>[c(p(te(T)),1)]),_:2},1024))),128))])]),i("div",et,[a(g,{icon:P(t)?"i-lucide-bell":"i-lucide-bell-off",color:"neutral",variant:"ghost",size:"sm",title:P(t)?"Unmute":"Mute for 7 days",onClick:T=>ee(t)},null,8,["icon","title","onClick"]),a(g,{icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"sm",title:"Remove subscription",onClick:T=>Z(t.id)},null,8,["onClick"])])],2))),128))])]),_:1},8,["count"])],64)):(n(),v(ae,{key:1,color:"info",icon:"i-lucide-info",title:"Authentication required",description:"Channels and subscriptions require authentication (PIWI_AUTH_ENABLED=true)."}))])}}});export{vt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.tag-badge[data-v-58fcc931]{background-color:color-mix(in srgb,var(--tag-color) 20%,transparent);border:1px solid color-mix(in srgb,var(--tag-color) 60%,transparent);color:color-mix(in oklab,var(--tag-color) 80%,#000)}.dark{color:color-mix(in oklab,var(--tag-color) 65%,#fff)}.tag-badge--outline[data-v-58fcc931]{background-color:transparent}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{_ as Q,a as Y}from"./Ar3IelOY.js";import{_ as B}from"./DprVVyUQ.js";import{_ as H}from"./DT53RWbC.js";import{_ as V}from"./rWNTSFD6.js";import{_ as J}from"./B44A4LSJ.js";import{d as D,f as k,g as _,o as m,i as t,j as n,m as l,t as I,k as e,h as S,_ as M,b as X,B as Z,c as $,p as N,r as w,ax as L,w as P,F as tt,v as b,A as et,x as ot}from"./NQikbhmK.js";import{u as E}from"./Bn0YQDyy.js";import{_ as nt}from"./Jo8kRmHz.js";import{a as st}from"./C7P1UCO2.js";import{f as at}from"./CDk0q2hV.js";import{u as it}from"./CHNwfU1y.js";import{u as j}from"./CpjgB2aY.js";import"./eptP4pGv.js";import"./CYsTqbBS.js";import"./g26aVPxc.js";import"./CNFYDQmj.js";import"./BYDaY0Z7.js";import"./BjaRappk.js";const lt={class:"space-y-4 text-sm"},rt={class:"space-y-1"},ct={class:"space-y-3"},ut={class:"space-y-1"},dt={class:"flex items-start gap-2"},pt={class:"text-xs break-all flex-1"},mt={class:"space-y-1"},_t=`reporter: [
|
|
2
|
+
['@piwitests/reporter', { projectName: 'my-project' }],
|
|
3
|
+
],`,ft=D({__name:"DesktopReporterCard",props:{url:{},token:{}},setup(f){const s=f,{copy:u}=E(),r=S(()=>`reporter: [
|
|
4
|
+
['@piwitests/reporter', {
|
|
5
|
+
serverUrl: '${s.url}',
|
|
6
|
+
projectName: 'my-project',
|
|
7
|
+
apiKey: '${s.token}',
|
|
8
|
+
}],
|
|
9
|
+
],`);return(d,a)=>{const o=V,p=J,y=M,v=B;return m(),k(v,{icon:"i-lucide-upload",title:"Send results to this app"},{subtitle:_(()=>[...a[1]||(a[1]=[l(" While this app is running, the Playwright reporter finds it on its own — no URL and no token in your config. ",-1)])]),default:_(()=>[t("div",lt,[t("div",rt,[a[2]||(a[2]=t("div",{class:"text-muted"},"playwright.config.ts",-1)),n(o,{code:_t,lang:"typescript"}),a[3]||(a[3]=t("p",{class:"text-muted text-xs"},[l(" The app publishes its address and token to "),t("code",null,"~/.piwi/desktop.json"),l(" while it runs. The reporter reads that file only when your config and environment set no "),t("code",null,"serverUrl"),l(" and no "),t("code",null,"apiKey"),l(", so a project already pointed at another dashboard is never redirected here. ")],-1))]),n(p),t("div",ct,[a[6]||(a[6]=t("p",{class:"text-muted"},[l(" Configure it by hand when discovery cannot apply — tests running as another user, in a container, or with a config that already sets "),t("code",null,"serverUrl"),l(". The token is a local secret: prefer the "),t("code",null,"PIWI_API_KEY"),l(" env var over committing it. ")],-1)),t("div",ut,[a[4]||(a[4]=t("div",{class:"text-muted"},"Access token",-1)),t("div",dt,[t("code",pt,I(f.token),1),n(y,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy access token",onClick:a[0]||(a[0]=c=>e(u)(f.token,{toast:!0}))})])]),t("div",mt,[a[5]||(a[5]=t("div",{class:"text-muted"},"playwright.config.ts",-1)),n(o,{code:e(r),lang:"typescript"},null,8,["code"])])])])]),_:1})}}}),vt=Object.assign(ft,{__name:"DesktopReporterCard"}),kt={class:"space-y-3 text-sm"},yt={class:"space-y-1"},gt={class:"flex items-start gap-2"},xt={class:"text-xs break-all flex-1"},ht={class:"space-y-1"},bt={class:"flex items-start gap-2"},Ct={class:"text-xs break-all flex-1"},wt={class:"space-y-1"},$t=D({__name:"DesktopMcpCard",props:{url:{},token:{}},setup(f){const s=f,{copy:u}=E(),r=S(()=>`${s.url}/mcp`),d=S(()=>`claude mcp add --transport http piwi ${r.value} \\
|
|
10
|
+
--header "Authorization: Bearer ${s.token}"`);return(a,o)=>{const p=M,y=V,v=B;return m(),k(v,{icon:"i-lucide-plug",title:"Connect an AI assistant (MCP)"},{subtitle:_(()=>[...o[2]||(o[2]=[l(" This app exposes a local MCP endpoint. Point your client at the URL below and authenticate with the access token — it is the Bearer token, even though sign-in is off. ",-1)])]),default:_(()=>[t("div",kt,[t("div",yt,[o[3]||(o[3]=t("div",{class:"text-muted"},"MCP URL",-1)),t("div",gt,[t("code",xt,I(e(r)),1),n(p,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy MCP URL",onClick:o[0]||(o[0]=c=>e(u)(e(r),{toast:!0}))})])]),t("div",ht,[o[4]||(o[4]=t("div",{class:"text-muted"},"Access token",-1)),t("div",bt,[t("code",Ct,I(f.token),1),n(p,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy access token",onClick:o[1]||(o[1]=c=>e(u)(f.token,{toast:!0}))})])]),t("div",wt,[o[5]||(o[5]=t("div",{class:"text-muted"},"Claude Code",-1)),n(y,{code:e(d),lang:"sh"},null,8,["code"])])])]),_:1})}}}),St=Object.assign($t,{__name:"DesktopMcpCard"}),Bt={key:0,class:"flex items-center gap-2 text-sm text-muted"},Dt={key:1,class:"space-y-4"},Rt={class:"flex items-start justify-between gap-4"},Ut={class:"flex items-start justify-between gap-4"},Lt={key:2,class:"space-y-1 text-sm text-muted"},Pt=D({__name:"DesktopServiceCard",setup(f){const s=X(),u=w(!0),r=w(!1),d=w(!1),a=w(!1),o=w(!1);async function p(){const c=L();if(!c){r.value=!1,u.value=!1;return}try{const i=await c.invoke("desktop_get_service_settings");a.value=!!i.run_in_background,o.value=!!i.start_on_login,r.value=!0}catch{r.value=!1}finally{u.value=!1}}Z(p);async function y(c){const i=L();if(i){d.value=!0;try{await i.invoke("desktop_set_run_in_background",{enabled:c}),a.value=c}catch{s.add({title:'Could not update "Run in background"',color:"error"})}finally{d.value=!1}}}async function v(c){const i=L();if(i){d.value=!0;try{await i.invoke("desktop_set_start_on_login",{enabled:c}),o.value=c}catch{s.add({title:'Could not update "Start on login"',color:"error"})}finally{d.value=!1}}}return(c,i)=>{const R=N,C=nt,U=B;return m(),k(U,{icon:"i-lucide-monitor-cog",title:"Desktop app"},{subtitle:_(()=>[...i[0]||(i[0]=[l(" Keep Piwi running in the background and start it automatically when you log in. ",-1)])]),default:_(()=>[e(u)?(m(),$("div",Bt,[n(R,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),i[1]||(i[1]=l(" Checking… ",-1))])):e(r)?(m(),$("div",Dt,[t("div",Rt,[i[2]||(i[2]=t("div",{class:"space-y-0.5"},[t("p",{class:"text-sm font-medium"},"Run in background"),t("p",{class:"text-xs text-muted"},"Closing the window keeps the server running in the tray instead of quitting.")],-1)),n(C,{"model-value":e(a),disabled:e(d),"onUpdate:modelValue":y},null,8,["model-value","disabled"])]),t("div",Ut,[i[3]||(i[3]=t("div",{class:"space-y-0.5"},[t("p",{class:"text-sm font-medium"},"Start on login"),t("p",{class:"text-xs text-muted"}," Launch Piwi automatically (hidden in the tray) when you sign in to your computer. ")],-1)),n(C,{"model-value":e(o),disabled:e(d),"onUpdate:modelValue":v},null,8,["model-value","disabled"])])])):(m(),$("div",Lt,[...i[4]||(i[4]=[t("p",null,"Manage these from the Piwi tray icon:",-1),t("p",{class:"text-xs"},[l(" Right-click the Piwi icon in your system tray for "),t("strong",null,"Run in background"),l(" and "),t("strong",null,"Start on login"),l(". On Windows the icon may be hidden under the “show hidden icons” arrow (▲) next to the clock — drag it onto the taskbar to keep it in view. ")],-1)])]))]),_:1})}}}),jt=Object.assign(Pt,{__name:"DesktopServiceCard"}),It={class:"space-y-6"},Tt={class:"flex flex-wrap items-center gap-x-6 gap-y-3 text-sm"},te=D({__name:"about",async setup(f){let s,u;const r=et(),d=it(),{data:a}=([s,u]=P(()=>j("/api/version","$mIoGdvWYhF")),s=await s,u(),s),{data:o}=([s,u]=P(()=>j("/api/admin/stats",{immediate:d,default:()=>null},"$IuuLVEbWlE")),s=await s,u(),s),{data:p}=([s,u]=P(()=>j("/api/desktop/reporter-config",{immediate:d,default:()=>null},"$A4rSe7BAN_")),s=await s,u(),s),y=r.public.appVersion,v=r.public.buildSha,c=r.public.buildTime,i=r.public.nodeVersion,R=r.public.authEnabled,C=S(()=>v?v.slice(0,7):null),U=S(()=>{const g=a.value?.dbBackend;return g==="postgresql"?"PostgreSQL":g==="sqlite"?"SQLite":g??null});return(g,x)=>{const h=Y,O=Q,T=B,z=H,W=vt,F=St,K=jt,q=st,A=ot,G=N;return m(),$("div",It,[n(T,{icon:"i-lucide-info",title:"Application"},{default:_(()=>[n(O,null,{default:_(()=>[n(h,{label:"Version",value:`v${e(y)}`},null,8,["value"]),e(C)?(m(),k(h,{key:0,label:"Build",value:e(C),hint:e(v)},null,8,["value","hint"])):b("",!0),e(c)?(m(),k(h,{key:1,label:"Built",value:("formatRelativeTime"in g?g.formatRelativeTime:e(at))(e(c)),hint:e(c)},null,8,["value","hint"])):b("",!0),n(h,{label:"Node.js",value:e(i)},null,8,["value"]),n(h,{label:"Database",value:e(U)},null,8,["value"]),n(h,{label:"Authentication",value:e(R)?"Enabled":"Disabled"},null,8,["value"])]),_:1})]),_:1}),e(d)?(m(),$(tt,{key:0},[e(o)?(m(),k(z,{key:0,database:e(o).databaseLocation,storage:e(o).storageLocation},null,8,["database","storage"])):b("",!0),e(p)?(m(),k(W,{key:1,url:e(p).url,token:e(p).token},null,8,["url","token"])):b("",!0),e(p)?(m(),k(F,{key:2,url:e(p).url,token:e(p).token},null,8,["url","token"])):b("",!0),n(K)],64)):b("",!0),n(T,{icon:"i-lucide-book-open",title:"Resources"},{default:_(()=>[t("div",Tt,[n(q,{to:""},{default:_(()=>[...x[0]||(x[0]=[l("Documentation",-1)])]),_:1}),n(A,{to:"/docs",class:"inline-flex items-center gap-1 text-primary hover:underline"},{default:_(()=>[...x[1]||(x[1]=[l(" API reference ",-1)])]),_:1}),n(A,{to:"https://github.com/piwitests/platform",target:"_blank",rel:"noopener noreferrer",class:"inline-flex items-center gap-1 text-primary hover:underline"},{default:_(()=>[x[2]||(x[2]=l(" GitHub ",-1)),n(G,{name:"i-lucide-external-link",class:"w-3.5 h-3.5 shrink-0"})]),_:1})])]),_:1})])}}});export{te as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as C,H as I,c4 as N,am as D,c5 as J,K as G,aM as K,$ as Y,a3 as U,a6 as Q,b0 as Z,a4 as V,a5 as H,o as W,f as F,W as ee,k as p,_ as te,h as k,a8 as X,c6 as oe,l as R,g as ne,V as ie,q as ae,X as re}from"./NQikbhmK.js";const se=3456e4;function le(e,a,t){const n=e.indexOf(";",a);return n===-1?t:n}function ue(e,a,t){const n=e.indexOf("=",a);return n<t?n:-1}function M(e,a,t){if(a===t)return"";let n=a,i=t;do{const l=e.charCodeAt(n);if(l!==32&&l!==9)break}while(++n<i);for(;i>n;){const l=e.charCodeAt(i-1);if(l!==32&&l!==9)break;i--}return e.slice(n,i)}const ce=(()=>{const e=function(){};return e.prototype=Object.create(null),e})();function de(e,a){const t=new ce,n=e.length;if(n<2)return t;const i=a?.decode||fe,l=a?.allowMultiple||!1;let o=0;do{const c=ue(e,o,n);if(c===-1)break;const u=le(e,o,n);if(c>u){o=e.lastIndexOf(";",c-1)+1;continue}const r=M(e,o,c);if(a?.filter&&!a.filter(r)){o=u+1;continue}const f=i(M(e,c+1,u));if(l){const d=t[r];d===void 0?t[r]=f:Array.isArray(d)?d.push(f):t[r]=[d,f]}else t[r]===void 0&&(t[r]=f);o=u+1}while(o<n);return t}function fe(e){if(!e.includes("%"))return e;try{return decodeURIComponent(e)}catch{return e}}const pe=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,ve=/^[\u0021-\u003A\u003C-\u007E]*$/,he=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,me=/^[\u0020-\u003A\u003C-\u007E]*$/,ge=Object.prototype.toString;function $(e,a,t){const n=typeof e=="object"&&e!==null,i=n?a:t,l=i?.stringify||JSON.stringify,o=n?e:{...t,name:e,value:a==null?"":typeof a=="string"?a:l(a)},c=i?.encode||encodeURIComponent;if(!pe.test(o.name))throw new TypeError(`argument name is invalid: ${o.name}`);const u=o.value?c(o.value):"";if(!ve.test(u))throw new TypeError(`argument val is invalid: ${o.value}`);if(!o.secure){if(o.partitioned)throw new TypeError("Partitioned cookies must have the Secure attribute");if(o.sameSite&&String(o.sameSite).toLowerCase()==="none")throw new TypeError("SameSite=None cookies must have the Secure attribute");if(o.name.length>9&&o.name.charCodeAt(0)===95&&o.name.charCodeAt(1)===95){const f=o.name.toLowerCase();if(f.startsWith("__secure-")||f.startsWith("__host-"))throw new TypeError(`${o.name} cookies must have the Secure attribute`)}}if(o.name.length>7&&o.name.charCodeAt(0)===95&&o.name.charCodeAt(1)===95&&o.name.toLowerCase().startsWith("__host-")){if(o.path!=="/")throw new TypeError("__Host- cookies must have Path=/");if(o.domain)throw new TypeError("__Host- cookies must not have a Domain attribute")}let r=o.name+"="+u;if(o.maxAge!==void 0){if(!Number.isInteger(o.maxAge))throw new TypeError(`option maxAge is invalid: ${o.maxAge}`);r+="; Max-Age="+Math.max(0,Math.min(o.maxAge,se))}if(o.domain){if(!he.test(o.domain))throw new TypeError(`option domain is invalid: ${o.domain}`);r+="; Domain="+o.domain}if(o.path){if(!me.test(o.path))throw new TypeError(`option path is invalid: ${o.path}`);r+="; Path="+o.path}if(o.expires){if(!be(o.expires)||!Number.isFinite(o.expires.valueOf()))throw new TypeError(`option expires is invalid: ${o.expires}`);r+="; Expires="+o.expires.toUTCString()}if(o.httpOnly&&(r+="; HttpOnly"),o.secure&&(r+="; Secure"),o.partitioned&&(r+="; Partitioned"),o.priority)switch(typeof o.priority=="string"?o.priority.toLowerCase():void 0){case"low":r+="; Priority=Low";break;case"medium":r+="; Priority=Medium";break;case"high":r+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${o.priority}`)}if(o.sameSite)switch(typeof o.sameSite=="string"?o.sameSite.toLowerCase():o.sameSite){case!0:case"strict":r+="; SameSite=Strict";break;case"lax":r+="; SameSite=Lax";break;case"none":r+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${o.sameSite}`)}return r}function be(e){return ge.call(e)==="[object Date]"}function g(e){if(typeof e!="object")return e;var a,t,n=Object.prototype.toString.call(e);if(n==="[object Object]"){if(e.constructor!==Object&&typeof e.constructor=="function"){t=new e.constructor;for(a in e)e.hasOwnProperty(a)&&t[a]!==e[a]&&(t[a]=g(e[a]))}else{t={};for(a in e)a==="__proto__"?Object.defineProperty(t,a,{value:g(e[a]),configurable:!0,enumerable:!0,writable:!0}):t[a]=g(e[a])}return t}if(n==="[object Array]"){for(a=e.length,t=Array(a);a--;)t[a]=g(e[a]);return t}return n==="[object Set]"?(t=new Set,e.forEach(function(i){t.add(g(i))}),t):n==="[object Map]"?(t=new Map,e.forEach(function(i,l){t.set(g(l),g(i))}),t):n==="[object Date]"?new Date(+e):n==="[object RegExp]"?(t=new RegExp(e.source,e.flags),t.lastIndex=e.lastIndex,t):n==="[object DataView]"?new e.constructor(g(e.buffer)):n==="[object ArrayBuffer]"?e.slice(0):n.slice(-6)==="Array]"?new e.constructor(e):e}function ye(e){if(e!=="undefined")try{const a=JSON.parse(e);return typeof a=="number"&&String(a)!==e?e:a}catch{return e}}const Se={path:"/",watch:!0,decode:e=>e&&ye(decodeURIComponent(e)),encode:e=>{if(typeof e!="string"||e==="undefined")return encodeURIComponent(JSON.stringify(e));try{if(typeof JSON.parse(e)!="string")return encodeURIComponent(JSON.stringify(e))}catch{}return encodeURIComponent(e)},refresh:!1},j=globalThis.cookieStore;function we(e,a){const t={...Se,...a};t.filter??=r=>r===e;const n=B(t)||{};let i;t.maxAge!==void 0?i=t.maxAge*1e3:t.expires&&(i=t.expires.getTime()-Date.now());const l=i!==void 0&&i<=0,o=l||n[e]===void 0||n[e]===null,c=g(l?void 0:n[e]??t.default?.()),u=i&&!l?Oe(c,i,t.watch&&t.watch!=="shallow"):C(c);{let r=null;try{!j&&typeof BroadcastChannel<"u"&&(r=new BroadcastChannel(`nuxt:cookies:${e}`))}catch{}const f=(h=!1)=>{if(!h&&(t.readonly||K(u.value,n[e])))return;const b=u.value===null||u.value===void 0?void 0:t.encode(u.value);Ee(e,b,t),n[e]=g(u.value),r?.postMessage({value:t.encode(u.value)})},d=h=>{const b=h.refresh?B(t)?.[e]:t.decode(h.value);y=!0,u.value=b,n[e]=g(b),G(()=>{y=!1})};let y=!1;const S=!!N();if(S&&D(()=>{y=!0,f(),r?.close()}),j){const h=b=>{const A=b.changed.find(E=>E.name===e),L=b.deleted.find(E=>E.name===e);A&&d({value:A.value}),L&&d({value:null})};j.addEventListener("change",h),S&&D(()=>j.removeEventListener("change",h))}else r&&(r.onmessage=({data:h})=>d(h));t.watch&&I(u,()=>{y||f(t.refresh)},{deep:t.watch!=="shallow"}),o&&f(o)}return u}function B(e={}){return de(document.cookie,e)}const Ce=e=>e;function ze(e){const{encode:a,decode:t,...n}=e;return{...n,encode:Ce}}function ke(e,a,t={}){const n=ze(t);return a===void 0?$(e,"",{...n,maxAge:-1}):$(e,a,n)}function Ee(e,a,t={}){document.cookie=ke(e,a,t)}const P=2147483647;function Oe(e,a,t){let n,i,l=0;const o=t?C(e):{value:e};return N()&&D(()=>{i?.(),clearTimeout(n)}),J((c,u)=>{t&&(i=I(o,u));function r(){const d=a-l,y=d<P?d:P;n=setTimeout(()=>{if(l+=y,l<a)return r();o.value=void 0,u()},y)}function f(){l=0,clearTimeout(n),r()}return{get(){return c(),o.value},set(d){f(),o.value=d,u()}}})}const[qe,xe]=Y("DashboardGroup"),Te={base:"lg:hidden",variants:{side:{left:"",right:""}}},Re=Object.assign({inheritAttrs:!1},{__name:"UDashboardSidebarToggle",props:{color:{type:null,required:!1,default:"neutral"},variant:{type:null,required:!1,default:"ghost"},side:{type:String,required:!1,default:"left"},ui:{type:Object,required:!1},label:{type:String,required:!1},activeColor:{type:null,required:!1},activeVariant:{type:null,required:!1},size:{type:null,required:!1},square:{type:Boolean,required:!1},block:{type:Boolean,required:!1},loadingAuto:{type:Boolean,required:!1},onClick:{type:[Function,Array],required:!1},class:{type:null,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},trailingIcon:{type:null,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1},as:{type:null,required:!1},type:{type:null,required:!1},disabled:{type:Boolean,required:!1},exactActiveClass:{type:String,required:!1},viewTransition:{type:Boolean,required:!1}},setup(e){const t=U("dashboardSidebarToggle",e),n=Q(Z(t,"icon","side","class")),{t:i}=V(),l=H(),{sidebarOpen:o,toggleSidebar:c}=qe({sidebarOpen:C(!1),toggleSidebar:()=>{}}),u=k(()=>X({extend:Te,...l.ui?.dashboardSidebarToggle||{}}));return(r,f)=>(W(),F(te,ee({...p(n),icon:p(t).icon||(p(o)?p(l).ui.icons.close:p(l).ui.icons.menu),"aria-label":p(o)?p(i)("dashboardSidebarToggle.close"):p(i)("dashboardSidebarToggle.open"),...r.$attrs},{class:u.value({class:[p(t).ui?.base,p(t).class],side:p(t).side}),onClick:p(c)}),null,16,["class","onClick"]))}});function je(e,a={},{collapsed:t=C(!1)}={}){const n=C(null),i=k(()=>({side:"left",minSize:0,maxSize:100,defaultSize:0,storage:"cookie",persistent:!0,collapsible:!1,collapsedSize:0,resizable:!0,unit:"%",...R(a)?a.value:a})),{dir:l}=V(),o={size:i.value.defaultSize,collapsed:p(t)??!1},c=i.value.persistent&&(i.value.resizable||i.value.collapsible)?i.value.storage==="cookie"?we(e,{...i.value.storageOptions,default:()=>o}):oe(e,o,void 0,i.value.storageOptions):C(o),u=s=>{c.value?Object.assign(c.value,s):c.value={...o,...s}},r=k({get:()=>c.value?.collapsed??o.collapsed,set:s=>{i.value.collapsible&&(R(t)&&(t.value=s),u({collapsed:s}))}}),f=C(i.value.defaultSize),d=k({get:()=>c.value?.size??i.value.defaultSize,set:s=>{u({size:s})}}),y=k(()=>r.value?i.value.collapsedSize:d.value),S=C(!1),h=()=>i.value.unit==="rem"?Number.parseFloat(getComputedStyle(document.documentElement).fontSize):1,b=(s,v,O,q)=>{if(!n.value||!i.value.resizable)return;const T=n.value.parentElement?.offsetWidth||1,z=l.value==="rtl";let m;z?m=i.value.side==="left"?v-s:s-v:m=i.value.side==="left"?s-v:v-s;const w=O+m;let _;if(i.value.unit==="rem"?_=w/q:i.value.unit==="px"?_=w:_=w/T*100,i.value.collapsible&&_<i.value.collapsedSize+4){x(!0);return}else r.value&&x(!1);d.value=Math.min(i.value.maxSize,Math.max(i.value.minSize,_))},A=s=>{if(!n.value||!i.value.resizable)return;s.preventDefault(),s.stopPropagation();const v=n.value.getBoundingClientRect().width;if(!v)return;const O=s.clientX,q=v,T=h();S.value=!0;const z=w=>{b(w.clientX,O,q,T)},m=()=>{S.value=!1,document.removeEventListener("mousemove",z),document.removeEventListener("mouseup",m)};document.addEventListener("mousemove",z),document.addEventListener("mouseup",m)},L=s=>{if(!n.value||!i.value.resizable||!s.touches[0])return;s.preventDefault(),s.stopPropagation();const v=n.value.getBoundingClientRect().width;if(!v)return;const O=s.touches[0].clientX,q=v,T=h();S.value=!0;const z=w=>{w.touches[0]&&b(w.touches[0].clientX,O,q,T)},m=()=>{S.value=!1,document.removeEventListener("touchmove",z),document.removeEventListener("touchend",m),document.removeEventListener("touchcancel",m)};document.addEventListener("touchmove",z,{passive:!1}),document.addEventListener("touchend",m),document.addEventListener("touchcancel",m)},E=s=>{!n.value||!i.value.resizable||(s.preventDefault(),s.stopPropagation(),r.value&&x(!1),d.value=i.value.defaultSize)},x=s=>{if(!i.value.collapsible)return;const v=s??!r.value;v&&!r.value?f.value=d.value:!v&&r.value&&(d.value=f.value),r.value=v};return R(t)&&c.value?.collapsed&&(t.value=c.value.collapsed),R(t)&&I(t,s=>{i.value.collapsible&&c.value?.collapsed!==s&&(r.value=s)}),{el:n,size:y,isDragging:S,isCollapsed:r,onMouseDown:A,onTouchStart:L,onDoubleClick:E,collapse:x}}const _e={base:"hidden lg:block touch-none select-none cursor-ew-resize relative before:absolute before:inset-y-0 before:-left-1.5 before:-right-1.5 before:z-1"},Le={__name:"UDashboardResizeHandle",props:{as:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const t=U("dashboardResizeHandle",e),n=H(),i=k(()=>X({extend:_e,...n.ui?.dashboardResizeHandle||{}}));return(l,o)=>(W(),F(p(re),{as:p(t).as,role:"separator",class:ae(i.value({class:[p(t).ui?.base,p(t).class]}))},{default:ne(()=>[ie(l.$slots,"default")]),_:3},8,["as","class"]))}};export{Re as _,qe as a,je as b,Le as c,xe as p,we as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as m}from"./
|
|
1
|
+
import{_ as m}from"./Dnpkl-1q.js";import{d,o as t,c as r,Q as l,i as n,j as s,t as a,s as x,g as k,m as u,v as o}from"./NQikbhmK.js";const g={class:"p-2 text-sm text-gray-900 dark:text-gray-100 space-y-1"},_={class:"text-xs text-muted"},y={key:0,class:"text-xs"},h={key:1,class:"text-xs text-muted"},p=d({__name:"ChartMarkerTooltip",props:{marker:{},pos:{}},setup(e){return(v,f)=>{const c=m,i=x;return e.marker?(t(),r("div",{key:0,class:"fixed z-50 pointer-events-none bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 max-w-[260px]",style:l({left:`${e.pos.x}px`,top:`${e.pos.y}px`})},[n("div",g,[s(c,{marker:e.marker},null,8,["marker"]),n("div",_,a(new Date(e.marker.occurredAt).toLocaleDateString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})),1),e.marker.environment?(t(),r("div",y,[s(i,{color:"neutral",variant:"subtle",size:"xs"},{default:k(()=>[u(a(e.marker.environment),1)]),_:1})])):o("",!0),e.marker.description?(t(),r("p",h,a(e.marker.description),1)):o("",!0)])],4)):o("",!0)}}}),B=Object.assign(p,{__name:"ChartMarkerTooltip"});export{B as _};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{_ as Jt}from"./279D2RYp.js";import{_ as qt}from"./BqV0l12c.js";import{d as re,o as t,f as k,g as d,i as n,q,k as e,j as i,t as c,c as o,F as B,y as te,s as fe,m as g,v as l,R as yt,p as ce,h as C,D as Pe,_ as Ie,b as Qt,B as xt,l as pe,r as A,ab as we,H as he,ac as Zt,A as Oe,Q as $e,u as Xt,a as Yt,w as gt,e as es,ad as ts,M as ss}from"./NQikbhmK.js";import{d as ns,e as as,h as He,a as os,b as rs,c as is,_ as ls,n as cs,o as us,p as ds,u as ms,f as gs,i as ps,j as fs,k as ys,l as xs,m as hs}from"./dYCKgE-3.js";import{_ as vs}from"./BuMC3WjZ.js";import{_ as _s,a as ks}from"./CHEFCN8Q.js";import{_ as bs,a as ws,b as $s,c as Cs,d as Ts}from"./Dgf5N4Ng.js";import{_ as Re}from"./CV9-fTmY.js";import{_ as Ss}from"./BPQoBGg5.js";import{_ as Is}from"./nv9-6vBK.js";import{_ as ht,a as Ke}from"./C7P1UCO2.js";import{_ as Rs}from"./eptP4pGv.js";import{_ as Ls}from"./y17lMTFy.js";import{u as zs,_ as Ms,d as Ds,e as Ns,f as js,g as As,h as Ps,j as Us,a as vt,i as Te,b as Ae,c as Bs}from"./HXerICAi.js";import{f as Se,m as Fs,c as Vs,g as Es,n as _t,o as We,q as Ge,a as Os,j as Hs,r as pt}from"./CDk0q2hV.js";import{_ as kt}from"./DP8hfJ9h.js";import{_ as ye}from"./DprVVyUQ.js";import{_ as Ks}from"./eaVkJRSa.js";import{_ as Je}from"./cHAnlQbv.js";import{_ as qe}from"./BxCKKeYs.js";import{_ as bt}from"./DLSrtpsA.js";import{f as be}from"./D-c8ZSws.js";import{_ as Ws}from"./rWNTSFD6.js";import{_ as Gs}from"./DGfAxLHV.js";import{_ as Js}from"./BPRffDuo.js";import{_ as qs}from"./C9_jrmk9.js";import{_ as Qs}from"./DiOLdHBC.js";import{_ as Zs,a as Xs}from"./Ar3IelOY.js";import{_ as Ys}from"./D55D4EYo.js";import{b as en}from"./CylWPruw.js";import{u as ft}from"./CpjgB2aY.js";import{u as tn}from"./Bn0YQDyy.js";import"./YVN7WG7q.js";import"./B44A4LSJ.js";import"./CtQBsNUb.js";import"./CHNwfU1y.js";import"./D0HNloZ9.js";import"./B3HO8kuh.js";import"./DS636elg.js";import"./g26aVPxc.js";import"./BjaRappk.js";import"./IvQlbZk6.js";import"./FUXhyidq.js";import"./ZFiQCMUB.js";import"./Dnpkl-1q.js";import"./D7W_4Sqc.js";import"./DX-MDGb3.js";const sn={class:"text-sm font-semibold truncate min-w-0"},nn={class:"flex items-center gap-3 ml-auto max-sm:hidden"},an={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},on={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},rn={class:"text-gray-700 dark:text-gray-300"},ln={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},cn={class:"text-gray-700 dark:text-gray-300"},un={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},dn={class:"text-gray-700 dark:text-gray-300"},mn={key:0,class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},gn={class:"text-gray-700 dark:text-gray-300"},pn={class:"grid grid-cols-1 lg:grid-cols-12 gap-4"},fn={class:"space-y-3"},yn={class:"flex items-start gap-3"},xn={class:"min-w-0 flex-1"},hn={class:"flex items-center gap-2 flex-wrap"},vn={class:"text-base font-bold truncate"},_n={class:"text-xs text-gray-500 mt-0.5"},kn={key:0},bn=["title"],wn={key:1,class:"ml-2"},$n={class:"grid grid-cols-2 sm:grid-cols-4 gap-2"},Cn={class:"rounded-lg bg-gray-50 dark:bg-gray-900 p-3"},Tn={class:"text-xl font-bold mt-0.5"},Sn={class:"rounded-lg bg-gray-50 dark:bg-gray-900 p-3"},In={class:"text-xl font-bold mt-0.5"},Rn={class:"rounded-lg bg-gray-50 dark:bg-gray-900 p-3"},Ln={class:"text-xl font-bold mt-0.5"},zn={class:"rounded-lg bg-gray-50 dark:bg-gray-900 p-3"},Mn={class:"text-xl font-bold mt-0.5"},Dn={key:0,class:"flex items-center gap-2 text-sm"},Nn={class:"text-gray-700 dark:text-gray-300 truncate"},jn={key:0,class:"text-gray-500 shrink-0"},An={key:1,class:"flex items-center gap-1.5 text-sm"},Pn=re({__name:"TestCaseSummary",props:{testCase:{},scmInfo:{},ciInfo:{},browser:{},environment:{},stepsCount:{},historicalTiming:{},stableLinks:{}},emits:["refresh"],setup(s){const _=s,x=C(()=>{const u=_.testCase;if(!u)return[];const r=[];return u.isNewRegression&&r.push({label:"New regression",color:"error",title:"Passed in the baseline run, failing here"}),u.isNewFlaky&&r.push({label:"New flaky",color:"warning",title:"Newly started passing only on retry"}),u.status==="passed"&&(u.retries??0)>0&&r.push({label:"Passed on retry",color:"warning",title:"This test failed then passed on a retry"}),r}),b=C(()=>(_.testCase?.testAnnotations??[]).filter(u=>!Fs(u.type))),w=C(()=>_.testCase?.startedAt??null),{summaryColSpanClass:p,blockColSpanClass:a}=zs(()=>{let u=0;return _.scmInfo&&u++,(_.ciInfo||_.environment||_.browser)&&u++,u++,u});return(u,r)=>{const P=bs,z=Re,$=Ss,h=fe,F=Is,M=yt,m=ce,I=ht,E=Rs,U=ws,R=$s,W=Ls,G=Cs,N=Ms;return t(),k(N,{"storage-key":"test-case"},{folded:d(()=>[i(P,{status:s.testCase?.status??"",size:"sm"},null,8,["status"]),n("span",sn,c(s.testCase?.title),1),n("div",nn,[n("span",an,[r[0]||(r[0]=g(" Dur: ",-1)),i(z,{ms:s.testCase?.duration,class:"font-bold text-gray-700 dark:text-gray-300"},null,8,["ms"])]),n("span",on,[r[1]||(r[1]=g(" Retries: ",-1)),n("strong",rn,c(s.testCase?.retries??0),1)]),n("span",ln,[r[2]||(r[2]=g(" Steps: ",-1)),n("strong",cn,c(s.stepsCount),1)]),n("span",un,[r[3]||(r[3]=g(" Worker: ",-1)),n("strong",dn,c(s.testCase?.workerIndex??"—"),1)]),s.testCase?.shardIndex!=null?(t(),o("span",mn,[r[4]||(r[4]=g(" Shard: ",-1)),n("strong",gn,c(s.testCase.shardIndex),1)])):l("",!0)]),s.browser?(t(),k($,{key:0,browser:s.browser,size:"sm",class:"shrink-0 max-sm:hidden"},null,8,["browser"])):l("",!0)]),default:d(()=>[n("div",pn,[n("div",{class:q(e(p))},[i(E,{class:"shadow-xs h-full"},{default:d(()=>[n("div",fn,[n("div",yn,[i(P,{status:s.testCase?.status??"",size:"md"},null,8,["status"]),n("div",xn,[n("div",hn,[n("h2",vn,c(s.testCase?.title),1),(t(!0),o(B,null,te(e(x),Z=>(t(),k(h,{key:Z.label,color:Z.color,variant:"subtle",size:"xs",title:Z.title},{default:d(()=>[g(c(Z.label),1)]),_:2},1032,["color","title"]))),128)),(t(!0),o(B,null,te(e(b),(Z,Q)=>(t(),k(h,{key:`ann-${Q}`,color:"neutral",variant:"soft",size:"xs",class:"font-mono",title:Z.description||Z.type},{default:d(()=>[g(" @"+c(Z.type),1)]),_:2},1032,["title"]))),128)),i(F,{tags:s.testCase?.tags,meta:s.testCase?.testMeta},null,8,["tags","meta"])]),n("p",_n,[s.testCase?.location?(t(),o("span",kn,c(s.testCase.location),1)):l("",!0),i(M,null,{default:d(()=>[e(w)?(t(),o("span",{key:0,class:"ml-2 text-gray-400",title:new Date(e(w)).toLocaleString()}," started "+c(("formatRelativeTime"in u?u.formatRelativeTime:e(Se))(e(w))),9,bn)):l("",!0)]),_:1}),s.historicalTiming?(t(),o("span",wn,[r[5]||(r[5]=g(" Avg ",-1)),i(z,{ms:s.historicalTiming.avg},null,8,["ms"]),r[6]||(r[6]=g(" · ",-1)),n("span",{class:q(s.historicalTiming.diff>0?"text-red-600":"text-green-600")},c(s.historicalTiming.diff>0?"+":"")+c(s.historicalTiming.pct)+"% ",3)])):l("",!0)])])]),n("div",$n,[n("div",Cn,[r[7]||(r[7]=n("p",{class:"text-xs font-medium text-gray-500 uppercase tracking-wider"},"Duration",-1)),n("p",Tn,[i(z,{ms:s.testCase?.duration},null,8,["ms"])])]),n("div",Sn,[r[8]||(r[8]=n("p",{class:"text-xs font-medium text-gray-500 uppercase tracking-wider"},"Retries",-1)),n("p",In,c(s.testCase?.retries??0),1)]),n("div",Rn,[r[9]||(r[9]=n("p",{class:"text-xs font-medium text-gray-500 uppercase tracking-wider"},"Steps",-1)),n("p",Ln,c(s.stepsCount),1)]),n("div",zn,[r[10]||(r[10]=n("p",{class:"text-xs font-medium text-gray-500 uppercase tracking-wider"},"Worker",-1)),n("p",Mn,c(s.testCase?.workerIndex??"—"),1)])]),s.testCase?.slowestStep?(t(),o("div",Dn,[i(m,{name:"i-lucide-zap",class:"size-4 text-amber-500 shrink-0"}),r[13]||(r[13]=n("span",{class:"font-medium text-amber-700 dark:text-amber-300"},"Slowest step:",-1)),n("span",Nn,c(s.testCase.slowestStep),1),s.testCase.slowestStepDuration?(t(),o("span",jn,[r[11]||(r[11]=g("(",-1)),i(z,{ms:s.testCase.slowestStepDuration},null,8,["ms"]),r[12]||(r[12]=g(")",-1))])):l("",!0)])):l("",!0),(s.testCase?.wastedTimeMs??0)>0?(t(),o("div",An,[i(m,{name:"i-lucide-hourglass",class:"size-4 text-amber-500 shrink-0"}),r[14]||(r[14]=n("span",{class:"font-medium text-amber-700 dark:text-amber-300"},"Wasted in fixed waits:",-1)),i(z,{ms:s.testCase?.wastedTimeMs,class:"text-gray-700 dark:text-gray-300"},null,8,["ms"]),i(I,{topic:"case.wasted-time"})])):l("",!0)])]),_:1})],2),s.scmInfo?(t(),k(U,{key:0,scm:s.scmInfo,class:q(e(a))},null,8,["scm","class"])):l("",!0),s.ciInfo||s.environment||s.browser?(t(),k(R,{key:1,ci:s.ciInfo,environment:s.environment,browser:s.browser,class:q(e(a))},null,8,["ci","environment","browser","class"])):l("",!0),i(G,{class:q(e(a)),title:"Links",icon:"i-lucide-link"},{default:d(()=>[s.testCase?.id?(t(),k(W,{key:0,"entity-type":"test_case","entity-id":s.testCase.id,links:s.stableLinks??null},null,8,["entity-id","links"])):l("",!0)]),_:1},8,["class"])])]),_:1})}}}),Un=Object.assign(Pn,{__name:"TestCaseSummary"}),Bn={class:"space-y-3"},Fn={key:0,class:"flex flex-wrap gap-1.5"},Vn={key:0,class:"text-sm text-gray-600 dark:text-gray-400"},En={class:"text-gray-800 dark:text-gray-200"},On={key:1},Hn={class:"flex items-center gap-1 flex-wrap"},Kn=re({__name:"TestCaseVerdictCard",props:{testCase:{},history:{},currentId:{}},setup(s){const _=s,x=u=>u==="failed"||u==="timedOut"||u==="timedout",b=C(()=>{const u=_.testCase;if(!u)return[];const r=[];return u.isNewRegression&&r.push({label:"New regression",color:"error",icon:"i-lucide-git-pull-request-arrow",title:"Passed in the baseline run, failing here — likely fallout from the latest change"}),u.isNewFlaky&&r.push({label:"New flaky",color:"warning",icon:"i-lucide-shuffle",title:"Newly started passing only on retry — intermittent failure"}),u.status==="timedOut"&&r.push({label:"Timed out",color:"warning",icon:"i-lucide-timer-off",title:"The test exceeded its timeout"}),(u.retries??0)>0&&r.push({label:u.status==="passed"?`Passed on retry ${u.retries}`:`Retried ${u.retries}×`,color:u.status==="passed"?"warning":"neutral",icon:"i-lucide-refresh-cw",title:`This execution retried ${u.retries} time${u.retries===1?"":"s"}`}),r}),w=C(()=>_.history.slice(0,24).slice().reverse()),p=C(()=>{const u=_.history;if(!u.length)return null;const r=Math.max(0,u.findIndex($=>$.id===_.currentId));let P=0;for(let $=r;$<u.length&&x(u[$].status);$++)P++;let z=null;for(let $=r+1;$<u.length;$++)if(u[$].status==="passed"){z=u[$];break}return{streak:P,lastPass:z,total:u.length,anchorFailing:x(u[r]?.status)}}),a=u=>({"bg-red-500 hover:bg-red-600":x(u),"bg-green-500 hover:bg-green-600":u==="passed","bg-yellow-500 hover:bg-yellow-600":u==="skipped","bg-gray-400 hover:bg-gray-500":!x(u)&&!["passed","skipped"].includes(u)});return(u,r)=>{const P=ce,z=fe,$=Pe,h=kt,F=yt,M=ye;return t(),k(M,{icon:"i-lucide-clipboard-check","icon-class":"text-amber-500",title:"Verdict",help:"case.verdict"},{default:d(()=>[n("div",Bn,[e(b).length?(t(),o("div",Fn,[(t(!0),o(B,null,te(e(b),m=>(t(),k(z,{key:m.label,color:m.color,variant:"subtle",size:"sm",title:m.title,class:"inline-flex items-center gap-1"},{default:d(()=>[i(P,{name:m.icon,class:"size-3 shrink-0"},null,8,["name"]),g(" "+c(m.label),1)]),_:2},1032,["color","title"]))),128))])):l("",!0),i(F,null,{default:d(()=>[e(p)?(t(),o("p",Vn,[e(p).streak>=1?(t(),o(B,{key:0},[r[1]||(r[1]=g(" Failing for ",-1)),n("strong",En,c(e(p).streak),1),g(" consecutive run"+c(e(p).streak===1?"":"s")+". ",1),e(p).lastPass?(t(),o(B,{key:0},[r[0]||(r[0]=g(" Last passed in ",-1)),i($,{to:`/test-run-cases/${e(p).lastPass.id}`,class:"text-primary hover:underline"},{default:d(()=>[g(" run #"+c(e(p).lastPass.runId),1)]),_:1},8,["to"]),g(" ("+c(("formatRelativeTime"in u?u.formatRelativeTime:e(Se))(e(p).lastPass.startTime))+"). ",1)],64)):e(p).total>1?(t(),o(B,{key:1},[g(" No passing run in the last "+c(e(p).total)+" recorded. ",1)],64)):(t(),o(B,{key:2},[g(" First recorded run of this test. ")],64))],64)):s.testCase?.status==="passed"?(t(),o(B,{key:1},[g(" This execution passed. ")],64)):l("",!0)])):l("",!0),e(w).length>1?(t(),o("div",On,[r[2]||(r[2]=n("p",{class:"text-xs text-gray-400 mb-1"},"Recent runs (oldest → newest)",-1)),n("div",Hn,[(t(!0),o(B,null,te(e(w),m=>(t(),k(h,{key:m.id,text:`Run #${m.runId}: ${m.status}`},{default:d(()=>[i($,{to:`/test-run-cases/${m.id}`,class:q(["size-3.5 rounded-sm inline-block transition-colors",[a(m.status),m.id===s.currentId?"ring-2 ring-offset-1 ring-primary":""]])},null,8,["to","class"])]),_:2},1032,["text"]))),128))])])):l("",!0)]),_:1})])]),_:1})}}}),Wn=Object.assign(Kn,{__name:"TestCaseVerdictCard"}),Gn={class:"space-y-3"},Jn={class:"space-y-1.5"},qn={class:"flex items-center gap-2 flex-wrap"},Qn={class:"text-xs text-gray-500"},Zn=["title"],Xn={class:"text-xs text-gray-500 dark:text-gray-400"},Yn={key:0,class:"rounded-lg border border-default bg-elevated/40 p-2.5 space-y-1"},ea={class:"flex items-center gap-1.5 flex-wrap"},ta={class:"text-xs text-gray-600 dark:text-gray-400 line-clamp-3"},sa=["title"],na=re({__name:"FailureClusterCard",props:{cluster:{}},setup(s){const _=s,x=C(()=>Math.max(0,_.cluster.sameRunCaseCount-1)),b=C(()=>{const p=_.cluster.diagnosis;return p&&p.status==="completed"&&p.summary?p:null}),w=p=>p==="high"?"success":p==="medium"?"warning":"neutral";return(p,a)=>{const u=fe,r=Pe,P=ce,z=Ie,$=ye;return t(),k($,{icon:"i-lucide-layers","icon-class":"text-primary",title:"Failure cluster",help:"cluster.concept"},{actions:d(()=>[s.cluster.isNew?(t(),k(u,{key:0,color:"warning",variant:"subtle",size:"sm"},{default:d(()=>[...a[0]||(a[0]=[g("New",-1)])]),_:1})):l("",!0),s.cluster.status&&s.cluster.status!=="open"?(t(),k(u,{key:1,color:s.cluster.status==="resolved"?"success":"neutral",variant:"subtle",size:"sm",class:"capitalize"},{default:d(()=>[g(c(s.cluster.status),1)]),_:1},8,["color"])):l("",!0)]),default:d(()=>[n("div",Gn,[n("div",Jn,[n("div",qn,[s.cluster.errorType?(t(),k(u,{key:0,color:e(Vs)(s.cluster.errorType),variant:"soft",size:"sm"},{default:d(()=>[g(c(s.cluster.errorType),1)]),_:1},8,["color"])):l("",!0),n("span",Qn,c(s.cluster.occurrences??0)+" occurrence"+c((s.cluster.occurrences??0)===1?"":"s"),1)]),n("p",{class:"font-mono text-xs text-gray-600 dark:text-gray-400 break-all line-clamp-2",title:s.cluster.signature},c(s.cluster.signature),9,Zn)]),n("p",Xn,[e(x)>0?(t(),o(B,{key:0},[g(" Matches "+c(e(x))+" other failing "+c(e(x)===1?"test":"tests")+" in this run. ",1)],64)):l("",!0),s.cluster.isNew?(t(),o(B,{key:2},[g("Opened a new cluster in this run.")],64)):(t(),o(B,{key:1},[a[1]||(a[1]=g(" Known failure — first seen in ",-1)),i(r,{to:`/test-runs/${s.cluster.firstSeenRunId}`,class:"text-primary hover:underline"},{default:d(()=>[g(" run #"+c(s.cluster.firstSeenRunId),1)]),_:1},8,["to"]),s.cluster.firstSeenAt?(t(),o(B,{key:0},[g(" ("+c(("formatRelativeTime"in p?p.formatRelativeTime:e(Se))(s.cluster.firstSeenAt))+")",1)],64)):l("",!0),a[2]||(a[2]=g(". ",-1))],64))]),e(b)?(t(),o("div",Yn,[n("div",ea,[i(P,{name:"i-lucide-sparkles",class:"size-3.5 text-primary shrink-0"}),a[3]||(a[3]=n("span",{class:"text-xs font-medium"},"AI verdict",-1)),e(b).category?(t(),k(u,{key:0,color:"neutral",variant:"soft",size:"xs"},{default:d(()=>[g(c(e(b).category),1)]),_:1})):l("",!0),e(b).confidence?(t(),k(u,{key:1,color:w(e(b).confidence),variant:"soft",size:"xs"},{default:d(()=>[g(c(e(b).confidence)+" confidence ",1)]),_:1},8,["color"])):l("",!0)]),n("p",ta,c(e(b).summary),1)])):l("",!0),s.cluster.triageNote?(t(),o("p",{key:1,class:"text-xs italic text-gray-500 dark:text-gray-400",title:s.cluster.triageNote}," “"+c(s.cluster.triageNote)+"” ",9,sa)):l("",!0),i(z,{to:`/failure-clusters/${s.cluster.id}`,size:"sm",color:"primary",variant:"solid",block:"","trailing-icon":"i-lucide-arrow-right"},{default:d(()=>[...a[4]||(a[4]=[g(" Open cluster investigation ",-1)])]),_:1},8,["to"])])]),_:1})}}}),aa=Object.assign(na,{__name:"FailureClusterCard"}),oa={class:"space-y-3"},ra={class:"text-xs text-gray-400 inline-flex items-center gap-1"},ia={key:0,class:"text-primary"},la={key:0,class:"flex items-center justify-between gap-2 rounded-lg border border-default bg-elevated/40 p-2.5"},ca={class:"inline-flex items-center gap-2 text-sm text-gray-500"},ua={key:1,class:"flex items-center gap-2"},da={key:2,class:"rounded-lg border border-dashed border-default p-4 text-center text-gray-400"},ma={class:"text-sm inline-flex items-center gap-1 justify-center"},ga={class:"pt-1 text-center"},pa=re({__name:"TestCaseAiCard",props:{testRunsCaseId:{}},setup(s){const _=s,{aiStatus:x}=Ds(),b=Qt(),w=A(null),p=A(!1),a=A(null),u=A([]),r=A(0),P=A(0),z=A(null),$=A(!1),h=A(!1),F=A(null),M=A(!1),m=A("");async function I(){$.value=!0;try{const y=await $fetch(`/api/test-run-cases/${_.testRunsCaseId}/diagnosis-context`,{query:{format:"json"}});a.value=y.text,u.value=y.sections,r.value=y.tokenEstimate,P.value=y.imageTokenEstimate??0,z.value=y.coverage}catch{a.value=null,u.value=[],r.value=0,z.value=null}finally{$.value=!1}}async function E(){try{const y=await $fetch(`/api/test-run-cases/${_.testRunsCaseId}/diagnosis`);w.value=y.diagnosis}catch{}}xt(()=>{E(),I()});const U=C(()=>{const y=w.value?.details;if(!y)return[];const j=[];if(Array.isArray(y.evidence)&&j.push(...y.evidence),Array.isArray(y.hypotheses))for(const ne of y.hypotheses)Array.isArray(ne?.evidence)&&j.push(...ne.evidence);return Us(j)});function R(y){F.value=y,h.value=!0}function W(y){m.value=m.value?`${m.value}
|
|
2
|
+
|
|
3
|
+
${y}`:y,M.value=!0}async function G(y=!1){p.value=!0;try{const j=y?`/api/test-run-cases/${_.testRunsCaseId}/diagnose?force=true`:`/api/test-run-cases/${_.testRunsCaseId}/diagnose`,ne=m.value.trim()?{additionalContext:m.value.trim()}:void 0;w.value=await $fetch(j,{method:"POST",body:ne})}catch(j){const ne=j?.statusCode;ne===409?(b.add({title:"Diagnosis already running",color:"warning"}),E()):ne===503?b.add({title:"AI diagnosis is not configured",color:"warning"}):b.add({title:"Diagnosis failed",description:Es(j),color:"error"})}finally{p.value=!1}}function N(y){return y.status==="running"&&Date.now()-new Date(y.updatedAt).getTime()>300*1e3}const Z=C(()=>w.value&&(w.value.status==="completed"||w.value.status==="failed")),Q=C(()=>!w.value||w.value.status==="failed"||w.value.status==="running"&&N(w.value)),de=C(()=>w.value?.status==="running"&&!N(w.value)&&!p.value);return(y,j)=>{const ne=Ps,v=ce,S=Ns,H=Ks,J=Ie,X=js,se=ht,O=As,Y=Pe,ee=ye;return t(),k(ee,{icon:"i-lucide-sparkles","icon-class":"text-primary",title:"AI diagnosis",help:"case.ai"},{actions:d(()=>[i(ne,{"context-endpoint":`/api/test-run-cases/${s.testRunsCaseId}/diagnosis-context`},null,8,["context-endpoint"])]),default:d(()=>[n("div",oa,[n("p",ra,[i(v,{name:"i-lucide-triangle-alert",class:"size-3 shrink-0"}),j[6]||(j[6]=g(" AI-generated — verify before applying. ",-1))]),e(x)?.configured?(t(),k(S,{key:0,sections:e(u),"not-applicable":e(z)?.notApplicable,"token-estimate":e(r),loading:e($),onViewSection:R,onOpen:j[0]||(j[0]=ae=>h.value=!0)},null,8,["sections","not-applicable","token-estimate","loading"])):l("",!0),e(x)?.configured?(t(),o(B,{key:1},[n("div",null,[n("button",{class:"flex items-center gap-1.5 text-xs font-medium text-gray-500 hover:text-gray-700 dark:hover:text-gray-300",onClick:j[1]||(j[1]=ae=>M.value=!e(M))},[i(v,{name:e(M)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5"},null,8,["name"]),j[7]||(j[7]=g(" Additional context ",-1)),e(m).trim()?(t(),o("span",ia,"(1)")):l("",!0)]),e(M)?(t(),k(H,{key:0,modelValue:e(m),"onUpdate:modelValue":j[2]||(j[2]=ae=>pe(m)?m.value=ae:null),placeholder:"e.g. We deployed a new auth middleware yesterday…",rows:3,class:"w-full text-sm mt-1"},null,8,["modelValue"])):l("",!0)]),e(de)?(t(),o("div",la,[n("span",ca,[i(v,{name:"i-lucide-loader-circle",class:"size-4 animate-spin text-primary shrink-0"}),j[8]||(j[8]=g(" Diagnosis in progress… ",-1))]),i(J,{size:"xs",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",loading:e(p),onClick:E},{default:d(()=>[...j[9]||(j[9]=[g(" Refresh ",-1)])]),_:1},8,["loading"])])):(t(),o("div",ua,[e(Q)?(t(),k(J,{key:0,icon:"i-lucide-sparkles",size:"sm",color:"primary",variant:"solid",loading:e(p),onClick:j[3]||(j[3]=ae=>G(e(w)?.status==="running"))},{default:d(()=>[g(c(e(w)?.status==="running"?"Restart diagnosis":"Diagnose with AI"),1)]),_:1},8,["loading"])):e(w)?.status==="completed"?(t(),k(J,{key:1,icon:"i-lucide-refresh-cw",size:"xs",color:"primary",variant:"soft",loading:e(p),onClick:j[4]||(j[4]=ae=>G(!0))},{default:d(()=>[...j[10]||(j[10]=[g(" Re-diagnose ",-1)])]),_:1},8,["loading"])):l("",!0)])),e(Z)?(t(),k(X,{key:2,diagnosis:e(w),onViewSection:R,onPrefillContext:W},null,8,["diagnosis"])):l("",!0)],64)):(t(),o("div",da,[n("p",ma,[j[11]||(j[11]=g(" AI diagnosis is not configured ",-1)),i(se,{topic:"cluster.ai-setup"})]),j[13]||(j[13]=n("p",{class:"text-xs mt-2 max-w-xs mx-auto"},[g(" Use "),n("strong",null,"Export → AI context"),g(" in the header to grab the full evidence bundle for your own AI tool, or configure a provider. ")],-1)),i(J,{to:"/settings/ai",size:"xs",color:"neutral",variant:"outline",class:"mt-3"},{default:d(()=>[...j[12]||(j[12]=[g(" Configure in Settings ",-1)])]),_:1})])),i(O,{open:e(h),sections:e(u),"token-estimate":e(r),"image-token-estimate":e(P),loading:e($),"focus-section":e(F),"cited-sections":e(U),"not-applicable-sections":e(z)?.notApplicable,"onUpdate:open":j[5]||(j[5]=ae=>{h.value=ae,ae||(F.value=null)}),onRefresh:I},null,8,["open","sections","token-estimate","image-token-estimate","loading","focus-section","cited-sections","not-applicable-sections"]),n("div",ga,[i(Y,{to:"/mcp",class:"inline-flex items-center gap-1 text-xs text-gray-400 hover:text-primary transition-colors"},{default:d(()=>[i(v,{name:"i-lucide-bot",class:"size-3"}),j[14]||(j[14]=g(" Query this failure from your AI agent via MCP ",-1))]),_:1})])])]),_:1})}}}),fa=Object.assign(pa,{__name:"TestCaseAiCard"});function wt(s,_,x){const b=A(null),w=A(!1),p=A(!1);async function a(){const u=s();if(!(!u||!we(_)||w.value)){p.value=!0,w.value=!0;try{b.value=await $fetch(u)}catch{b.value=null}finally{w.value=!1}}}return xt(()=>{he(()=>we(_),u=>{u&&(x||p.value)&&!b.value&&a()},{immediate:!0})}),{data:b,pending:w,load:a}}function ya(s,_,x,b={}){return wt(()=>{const w=we(s),p=we(_);return w&&p?`/api/test-runs/${w}/cases/${p}/trace-stacks`:null},x,b.auto??!0)}function xa(s,_,x,b={}){return wt(()=>{const w=we(s),p=we(_);return w&&p?`/api/test-runs/${w}/cases/${p}/trace-network`:null},x,b.auto??!1)}const ha={class:"max-h-[32rem] overflow-y-auto"},va={key:0,class:"mb-2 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},_a={key:0,class:"mt-3 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},ka=re({__name:"TestSourceCard",props:{frames:{},testSource:{},runId:{},testRunsCaseId:{},hasTrace:{type:Boolean},projectKey:{},projectName:{},storageKey:{}},setup(s,{expose:_}){const x=s,{data:b,pending:w}=ya(()=>x.runId,()=>x.testRunsCaseId,()=>x.hasTrace,{auto:!0}),p=C(()=>b.value?.status==="ok"?b.value.frames??[]:[]),a=C(()=>p.value.length>0),u=C(()=>x.frames?.length??0),r=C(()=>u.value>0||!!x.testSource),P=A(null),z=C({get:()=>P.value??(a.value?"trace":"captured"),set:M=>{P.value=M}}),$=C(()=>[{label:`Full stack (${p.value.length})`,value:"trace"},{label:`Captured (${u.value||1})`,value:"captured"}]),h=C(()=>z.value==="trace"&&a.value?p.value.length:u.value||null),F=A(null);return _({reveal:()=>F.value?.reveal()}),(M,m)=>{const I=Je,E=ce,U=ns,R=as,W=vt,G=qe,N=Ke,Z=He;return t(),k(Z,{ref_key:"card",ref:F,"storage-key":s.storageKey,icon:"i-lucide-code",count:e(h),title:"Test source",help:"case.test-source"},Zt({folded:d(()=>[e(z)==="trace"&&e(a)?(t(),o(B,{key:0},[g(" Full call stack from the trace"+c(e(b)?.hasSources===!1?" (recorded without sources)":""),1)],64)):e(u)>1?(t(),o(B,{key:1},[g(" The failing line and "+c(e(u)-1)+" caller"+c(e(u)-1===1?"":"s"),1)],64)):(t(),o(B,{key:2},[g("Source around the failing assertion")],64))]),default:d(()=>[n("div",ha,[e(z)==="trace"&&e(a)?(t(),o(B,{key:0},[e(b)?.hasSources===!1?(t(),o("p",va,[i(E,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),m[1]||(m[1]=g(" Trace recorded without sources — frame list only. ",-1))])):l("",!0),i(U,{frames:e(p),"project-key":s.projectKey,"project-name":s.projectName},null,8,["frames","project-key","project-name"])],64)):(t(),o(B,{key:1},[s.frames?.length?(t(),k(R,{key:0,frames:s.frames,"project-key":s.projectKey,"project-name":s.projectName},null,8,["frames","project-key","project-name"])):s.testSource?(t(),k(W,{key:1,text:"```typescript\n"+s.testSource+"\n```"},null,8,["text"])):s.hasTrace&&e(w)?(t(),k(G,{key:2,text:"Loading call stack from trace…"})):l("",!0)],64))]),s.hasTrace?l("",!0):(t(),o("p",_a,[i(E,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),n("span",null,[m[3]||(m[3]=g(" Want to go deeper? Record traces (",-1)),m[4]||(m[4]=n("code",null,"trace: 'retain-on-failure'",-1)),m[5]||(m[5]=g(") to see the full call stack with source here. ",-1)),i(N,{to:"ui-overview#trace-powered-deep-views","no-icon":"",class:"underline"},{default:d(()=>[...m[2]||(m[2]=[g("Learn more",-1)])]),_:1})])]))]),_:2},[e(a)&&e(r)?{name:"actions",fn:d(()=>[i(I,{modelValue:e(z),"onUpdate:modelValue":m[0]||(m[0]=Q=>pe(z)?z.value=Q:null),items:e($),size:"xs",variant:"link",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"])]),key:"0"}:void 0]),1032,["storage-key","count"])}}}),ba=Object.assign(ka,{__name:"TestSourceCard"}),wa={class:"space-y-3"},$a={class:"divide-y divide-default"},Ca={class:"flex items-center gap-2 min-w-0"},Ta={class:"text-sm truncate"},Sa={key:0,class:"text-xs text-gray-400 shrink-0"},Ia=re({__name:"TestCaseEvidenceCard",props:{attachments:{},traces:{},storageKey:{}},setup(s,{expose:_}){const x=s,b=Oe(),w=C(()=>x.attachments.filter(h=>Te(h.path,h.contentType)).length),p=C(()=>x.attachments.filter(h=>Ae(h.path,h.contentType)).length),a=C(()=>x.attachments.filter(h=>!Te(h.path,h.contentType)&&!Ae(h.path,h.contentType))),u=C(()=>w.value+p.value+x.traces.length+a.value.length),r=C(()=>{const h=[];return w.value&&h.push(`${w.value} screenshot${w.value===1?"":"s"}`),p.value&&h.push(`${p.value} video${p.value===1?"":"s"}`),x.traces.length&&h.push(`${x.traces.length} trace${x.traces.length===1?"":"s"}`),a.value.length&&h.push(`${a.value.length} file${a.value.length===1?"":"s"}`),h.join(" · ")||"No evidence captured"});function P(h,F){return _t(h,F,b.app?.baseURL)}function z(h){return h.split("/").pop()||h}const $=A(null);return _({reveal:()=>$.value?.reveal?.()}),(h,F)=>{const M=os,m=rs,I=is,E=ce,U=Ie,R=ls,W=bt,G=He;return t(),k(G,{ref_key:"card",ref:$,"storage-key":s.storageKey,icon:"i-lucide-camera",title:"Failure evidence",count:e(u),help:"case.evidence"},{folded:d(()=>[g(c(e(r)),1)]),default:d(()=>[n("div",wa,[i(M,{attachments:s.attachments},null,8,["attachments"]),i(m,{attachments:s.attachments},null,8,["attachments"]),i(I,{traces:s.traces},null,8,["traces"]),e(a).length?(t(),k(R,{key:0,icon:"i-lucide-paperclip",label:"Attachments",count:e(a).length,collapsible:!1},{default:d(()=>[n("div",$a,[(t(!0),o(B,null,te(e(a),N=>(t(),o("div",{key:N.id,class:"flex items-center justify-between gap-2 px-3 py-2"},[n("div",Ca,[i(E,{name:"i-lucide-file",class:"size-4 text-gray-400 shrink-0"}),n("span",Ta,c(z(N.path)),1),N.size?(t(),o("span",Sa,c(("formatBytes"in h?h.formatBytes:e(be))(N.size)),1)):l("",!0)]),i(U,{to:P(N.path,N.contentType),target:"_blank",icon:"i-lucide-external-link",size:"xs",color:"neutral",variant:"soft",label:"Open"},null,8,["to"])]))),128))])]),_:1},8,["count"])):l("",!0),e(u)===0?(t(),k(W,{key:1,icon:"i-lucide-camera-off",text:"No screenshots, video or traces captured"})):l("",!0)])]),_:1},8,["storage-key","count"])}}}),Ra=Object.assign(Ia,{__name:"TestCaseEvidenceCard"}),La={class:"space-y-1 max-h-80 overflow-y-auto"},za={class:"min-w-0 flex-1"},Ma={class:"flex items-center gap-2"},Da={class:"truncate"},Na={key:0,class:"text-xs text-gray-400 mt-0.5 ml-0"},ja=re({__name:"TestCaseConsoleCard",props:{entries:{}},setup(s){function _(b){switch(b){case"error":return"error";case"warning":return"warning";case"assert":return"error";default:return"neutral"}}function x(b){switch(b){case"error":return"i-lucide-octagon-x";case"warning":return"i-lucide-alert-triangle";case"assert":return"i-lucide-octagon-x";default:return"i-lucide-message-square"}}return(b,w)=>{const p=ce,a=fe,u=ye;return s.entries.length>0?(t(),k(u,{key:0,icon:"i-lucide-terminal",title:"Console output",count:s.entries.length,help:"case.console"},{default:d(()=>[n("div",La,[(t(!0),o(B,null,te(s.entries,(r,P)=>(t(),o("div",{key:P,class:"flex items-start gap-2 py-1.5 px-2 rounded hover:bg-gray-50 dark:hover:bg-gray-800 text-sm"},[i(p,{name:x(r.type),class:q([r.type==="error"||r.type==="assert"?"text-red-500":r.type==="warning"?"text-amber-500":"text-gray-400","size-4 mt-0.5 shrink-0"])},null,8,["name","class"]),n("div",za,[n("div",Ma,[i(a,{color:_(r.type),variant:"soft",size:"xs",class:"shrink-0"},{default:d(()=>[g(c(r.type),1)]),_:2},1032,["color"]),n("span",Da,c(r.text),1)]),r.location?(t(),o("div",Na,c(r.location),1)):l("",!0)])]))),128))])]),_:1},8,["count"])):l("",!0)}}}),Aa=Object.assign(ja,{__name:"TestCaseConsoleCard"}),Pa={key:0,class:"space-y-4 text-sm"},Ua={class:"space-y-1.5"},Ba={class:"flex items-center gap-2"},Fa={key:0,class:"text-xs text-gray-500"},Va={class:"block text-xs break-all text-gray-700 dark:text-gray-300"},Ea={key:0,class:"text-xs text-red-600 dark:text-red-400 font-mono"},Oa={class:"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-gray-400"},Ha={key:0,class:"font-mono"},Ka={key:1,class:"font-mono"},Wa={key:2},Ga={key:3,title:"Bytes on the wire"},Ja={key:0},qa={class:"flex h-2 rounded overflow-hidden bg-gray-100 dark:bg-gray-800"},Qa=["title"],Za={class:"flex flex-wrap gap-x-3 gap-y-1 mt-1.5 text-xs text-gray-500"},Xa={class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5 capitalize"},Ya={key:0,class:"rounded border border-default divide-y divide-default max-h-48 overflow-y-auto"},eo={class:"text-gray-500 dark:text-gray-400 shrink-0"},to={class:"break-all text-gray-700 dark:text-gray-300"},so={key:1,class:"text-xs text-gray-400"},no={key:1},ao={key:0,class:"rounded border border-default p-2"},oo=["src","alt"],ro={key:1,class:"max-h-96 overflow-y-auto"},io={key:0,class:"mt-1 text-xs text-gray-400"},lo={key:2,class:"text-xs text-gray-400"},co={key:2,class:"text-xs text-gray-400"},uo=re({__name:"TraceNetworkDrawer",props:{open:{type:Boolean},entry:{},runId:{},testRunsCaseId:{}},emits:["update:open"],setup(s,{emit:_}){const x=s,b=_,w=[{key:"dns",label:"DNS",color:"bg-sky-400"},{key:"connect",label:"Connect",color:"bg-violet-400"},{key:"ssl",label:"TLS",color:"bg-rose-400"},{key:"send",label:"Send",color:"bg-amber-400"},{key:"wait",label:"Wait",color:"bg-blue-400"},{key:"receive",label:"Receive",color:"bg-emerald-400"}],p=C(()=>{const $=x.entry?.timings;return $?w.map(h=>({...h,value:$[h.key]??-1})).filter(h=>typeof h.value=="number"&&h.value>=0):[]}),a=C(()=>p.value.reduce(($,h)=>$+h.value,0)),u=C(()=>{const $=x.entry?.requestPostData??"";return $.startsWith("{")||$.startsWith("[")}),r=A(null),P=A(!1),z=new Map;return he(()=>[x.open,x.entry?.bodySha1],async([$,h])=>{if(r.value=null,!$||!h||!x.runId)return;const F=z.get(h);if(F){r.value=F;return}P.value=!0;try{const M=await $fetch(`/api/test-runs/${x.runId}/cases/${x.testRunsCaseId}/trace-network-body`,{query:{sha1:h}});z.set(h,M),r.value=M}catch{r.value={status:"not-found"}}finally{P.value=!1}},{immediate:!0}),($,h)=>{const F=fe,M=Re,m=Ws,I=qe,E=Gs;return t(),k(E,{open:s.open,title:"Request detail",ui:{content:"max-w-xl"},"onUpdate:open":h[0]||(h[0]=U=>b("update:open",U))},{body:d(()=>[s.entry?(t(),o("div",Pa,[n("div",Ua,[n("div",Ba,[i(F,{color:("httpMethodColor"in $?$.httpMethodColor:e(We))(s.entry.method),variant:"soft",size:"sm",class:"font-mono shrink-0"},{default:d(()=>[g(c(s.entry.method),1)]),_:1},8,["color"]),i(F,{color:("httpStatusColor"in $?$.httpStatusColor:e(Ge))(s.entry.status),variant:"soft",size:"sm",class:"font-mono shrink-0 tabular-nums"},{default:d(()=>[g(c(s.entry.status>0?s.entry.status:"—"),1)]),_:1},8,["color"]),s.entry.statusText?(t(),o("span",Fa,c(s.entry.statusText),1)):l("",!0)]),n("code",Va,c(s.entry.url),1),s.entry.failureText?(t(),o("p",Ea,c(s.entry.failureText),1)):l("",!0),n("div",Oa,[s.entry.resourceType?(t(),o("span",Ha,c(s.entry.resourceType),1)):l("",!0),s.entry.mimeType?(t(),o("span",Ka,c(s.entry.mimeType),1)):l("",!0),s.entry.responseBodySize!=null?(t(),o("span",Wa,c(("formatBytes"in $?$.formatBytes:e(be))(s.entry.responseBodySize)),1)):l("",!0),s.entry.transferSize!=null?(t(),o("span",Ga,c(("formatBytes"in $?$.formatBytes:e(be))(s.entry.transferSize))+" transferred",1)):l("",!0),i(M,{ms:s.entry.duration},null,8,["ms"]),s.entry.duringFailure?(t(),k(F,{key:4,color:"error",variant:"subtle",size:"xs"},{default:d(()=>[...h[1]||(h[1]=[g("During failing action",-1)])]),_:1})):l("",!0)])]),e(p).length>0&&e(a)>0?(t(),o("div",Ja,[h[2]||(h[2]=n("p",{class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5"},"Timing",-1)),n("div",qa,[(t(!0),o(B,null,te(e(p),U=>(t(),o("div",{key:U.key,class:q(U.color),style:$e({width:`${Math.max(.5,U.value/e(a)*100)}%`}),title:`${U.label}: ${("formatDuration"in $?$.formatDuration:e(Os))(U.value)}`},null,14,Qa))),128))]),n("div",Za,[(t(!0),o(B,null,te(e(p),U=>(t(),o("span",{key:U.key,class:"inline-flex items-center gap-1"},[n("span",{class:q(["size-2 rounded-full",U.color])},null,2),g(" "+c(U.label)+" ",1),i(M,{ms:U.value,"no-title":""},null,8,["ms"])]))),128))])])):l("",!0),(t(),o(B,null,te(["request","response"],U=>n("div",{key:U},[n("p",Xa,c(U)+" headers",1),(U==="request"?s.entry.requestHeaders:s.entry.responseHeaders).length>0?(t(),o("div",Ya,[(t(!0),o(B,null,te(U==="request"?s.entry.requestHeaders:s.entry.responseHeaders,R=>(t(),o("div",{key:`${U}-${R.name}`,class:"px-2 py-1 text-xs font-mono flex gap-2"},[n("span",eo,c(R.name)+":",1),n("span",to,c(R.value),1)]))),128))])):(t(),o("p",so,"None recorded."))])),64)),s.entry.requestPostData?(t(),o("div",no,[h[3]||(h[3]=n("p",{class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5"},"Request body",-1)),i(m,{code:s.entry.requestPostData,lang:e(u)?"json":"text"},null,8,["code","lang"])])):l("",!0),n("div",null,[h[4]||(h[4]=n("p",{class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5"},"Response body",-1)),e(P)?(t(),k(I,{key:0,text:"Loading body…",padded:!1})):e(r)?(t(),o(B,{key:1},[e(r).status==="ok"&&e(r).kind==="image"?(t(),o("div",ao,[n("img",{src:e(r).dataUri,alt:s.entry.url,class:"max-w-full max-h-96"},null,8,oo)])):e(r).status==="ok"?(t(),o("div",ro,[i(m,{code:e(r).content??"",lang:e(r).kind==="json"?"json":"text"},null,8,["code","lang"]),e(r).truncated?(t(),o("p",io,"Preview truncated.")):l("",!0)])):(t(),o("p",lo,c(e(r).status==="too-large"?`Body too large to preview (${("formatBytes"in $?$.formatBytes:e(be))(e(r).size??0)}) — open the trace viewer to inspect it.`:e(r).status==="unsupported"?`No preview for ${e(r).mimeType||"this content type"} — open the trace viewer to inspect it.`:"Body not stored in the trace."),1))],64)):s.entry.bodySha1?l("",!0):(t(),o("p",co,"No body captured for this request."))])])):l("",!0)]),_:1},8,["open"])}}}),mo=Object.assign(uo,{__name:"TraceNetworkDrawer"}),go={class:"flex items-center justify-between gap-2 mb-2"},po={key:0,class:"hidden sm:flex items-center gap-1.5 text-xs text-gray-400"},fo={class:"space-y-1 max-h-[28rem] overflow-y-auto"},yo=["title","onClick"],xo={class:"flex items-center gap-2 text-sm min-w-0"},ho={class:"truncate text-xs flex-1 min-w-0"},vo={key:0,class:"shrink-0 text-xs text-gray-400 font-mono hidden md:inline"},_o={key:1,class:"shrink-0 text-xs text-gray-400 tabular-nums hidden sm:inline"},ko={class:"relative h-1.5 mt-1 rounded bg-gray-100 dark:bg-gray-800 overflow-hidden"},bo={key:0,class:"mt-2 text-xs text-gray-400 dark:text-gray-500"},wo=re({__name:"TraceNetworkList",props:{data:{},runId:{},testRunsCaseId:{}},setup(s){const _=s,x=A("all"),b=C(()=>_.data.requests??[]),w=C(()=>({total:b.value.length,failed:b.value.filter(I=>I.failed).length,duringFailure:b.value.filter(I=>I.duringFailure).length})),p=C(()=>[{label:`All (${w.value.total})`,value:"all"},{label:`Failed (${w.value.failed})`,value:"failed",disabled:w.value.failed===0},{label:`During failure (${w.value.duringFailure})`,value:"duringFailure",disabled:w.value.duringFailure===0}]),a=C(()=>x.value==="failed"?b.value.filter(I=>I.failed):x.value==="duringFailure"?b.value.filter(I=>I.duringFailure):b.value);function u(I){try{return new URL(I).pathname||I}catch{return I}}const r=C(()=>Math.max(1,_.data.timelineDuration??1));function P(I){const E=Math.max(0,Math.min(100,I.start/r.value*100)),U=Math.min(100-E,Math.max(1.5,I.duration/r.value*100));return{left:`${E}%`,width:`${U}%`}}const z=C(()=>{const I=_.data.failingWindow;if(!I||I.end<=I.start)return null;const E=Math.max(0,Math.min(100,I.start/r.value*100)),U=Math.max(.5,Math.min(100-E,(I.end-I.start)/r.value*100));return{left:`${E}%`,width:`${U}%`}});function $(I){return I.failed?"bg-red-500":I.duration>1e3?"bg-orange-400":"bg-gray-400 dark:bg-gray-500"}function h(I){return I.failed?"border-l-2 border-l-red-400 dark:border-l-red-600":I.duringFailure?"border-l-2 border-l-amber-400 dark:border-l-amber-600":"border-l-2 border-l-transparent"}const F=A(null),M=A(!1);function m(I){F.value=I,M.value=!0}return(I,E)=>{const U=Je,R=fe,W=Re,G=mo;return t(),o("div",null,[n("div",go,[i(U,{modelValue:e(x),"onUpdate:modelValue":E[0]||(E[0]=N=>pe(x)?x.value=N:null),items:e(p),size:"xs",variant:"link",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"]),s.data.failingWindow?(t(),o("span",po,[...E[2]||(E[2]=[n("span",{class:"inline-block w-3 h-2 rounded-sm bg-red-500/10 border border-red-300 dark:border-red-800"},null,-1),g(" failing action ",-1)])])):l("",!0)]),n("div",fo,[(t(!0),o(B,null,te(e(a),N=>(t(),o("button",{key:N.index,type:"button",class:q([h(N),"w-full rounded bg-gray-50/60 dark:bg-gray-800/40 py-1.5 px-2 text-left cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800"]),title:N.url,onClick:Z=>m(N)},[n("div",xo,[i(R,{color:("httpMethodColor"in I?I.httpMethodColor:e(We))(N.method),variant:"soft",size:"xs",class:"font-mono shrink-0"},{default:d(()=>[g(c(N.method),1)]),_:2},1032,["color"]),i(R,{color:("httpStatusColor"in I?I.httpStatusColor:e(Ge))(N.status),variant:"soft",size:"xs",class:"font-mono shrink-0 tabular-nums",title:N.failureText||N.statusText},{default:d(()=>[g(c(N.status>0?N.status:"—"),1)]),_:2},1032,["color","title"]),n("code",ho,c(u(N.url)),1),N.resourceType?(t(),o("span",vo,c(N.resourceType),1)):l("",!0),N.responseBodySize!=null?(t(),o("span",_o,c(("formatBytes"in I?I.formatBytes:e(be))(N.responseBodySize)),1)):l("",!0),n("span",{class:q(["ml-1 shrink-0 text-xs tabular-nums",N.duration>1e3?"text-red-600 font-medium":N.duration>500?"text-orange-500":"text-gray-500"])},[i(W,{ms:N.duration,"unit-class":"opacity-60"},null,8,["ms"])],2)]),n("div",ko,[e(z)?(t(),o("div",{key:0,class:"absolute inset-y-0 bg-red-500/10 border-x border-red-300/60 dark:border-red-800/60",style:$e(e(z))},null,4)):l("",!0),n("div",{class:q(["absolute inset-y-0 rounded-full",$(N)]),style:$e(P(N))},null,6)])],10,yo))),128))]),s.data.truncated?(t(),o("p",bo," Showing the first "+c(e(b).length)+" of "+c(s.data.totalBeforeCap)+" requests recorded in the trace. ",1)):l("",!0),i(G,{open:e(M),"onUpdate:open":E[1]||(E[1]=N=>pe(M)?M.value=N:null),entry:e(F),"run-id":s.runId,"test-runs-case-id":s.testRunsCaseId},null,8,["open","entry","run-id","test-runs-case-id"])])}}}),$o=Object.assign(wo,{__name:"TraceNetworkList"}),Co={class:"flex flex-wrap items-center gap-x-3 gap-y-1"},To={key:0,class:"flex items-center gap-2 text-xs"},So={key:0,class:"flex items-center gap-1 text-red-600 dark:text-red-400"},Io={key:1,class:"flex items-center gap-1 text-amber-600 dark:text-amber-400"},Ro={key:2,class:"text-xs text-gray-400 py-2"},Lo={key:1,class:"space-y-1 max-h-[28rem] overflow-y-auto"},zo=["disabled","onClick"],Mo={key:1,class:"size-3.5 shrink-0"},Do=["title"],No=["title"],jo=["title"],Ao=["title"],Po=["title"],Uo=["title"],Bo={key:0,class:"px-2 pt-1.5 pb-2 pl-7 space-y-1"},Fo={class:"flex items-center gap-1.5 text-[11px] uppercase tracking-wide text-gray-400"},Vo=["title"],Eo={key:0,class:"shrink-0 text-[10px] uppercase text-gray-400 font-mono hidden sm:inline"},Oo={class:"relative flex-1 h-3 rounded bg-gray-100 dark:bg-gray-800 min-w-0"},Ho={key:1,class:"px-2 pb-2 pl-7 space-y-1.5"},Ko={class:"flex items-start gap-2"},Wo={key:0,class:"text-gray-400 shrink-0 font-mono"},Go={class:"font-mono break-all text-gray-700 dark:text-gray-300 flex-1 min-w-0"},Jo=["title"],qo={key:0,class:"mt-1.5"},Qo=["onClick"],Zo={key:0,class:"mt-1 whitespace-pre-wrap break-all font-mono text-[11px] leading-relaxed text-gray-500 dark:text-gray-400 max-h-48 overflow-y-auto"},Xo={key:2,class:"mt-3 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},Yo={key:3,class:"mt-3 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},er=re({__name:"TestCaseNetworkRequests",props:{requests:{},runId:{},testRunsCaseId:{},hasTrace:{type:Boolean}},setup(s,{expose:_}){const x=s,b=A("all"),{data:w,pending:p,load:a}=xa(()=>x.runId,()=>x.testRunsCaseId,()=>!!x.hasTrace),u=A(null),r=C({get:()=>u.value??(x.requests.length===0&&x.hasTrace?"trace":"captured"),set:v=>{u.value=v}});he(()=>r.value==="trace",v=>{v&&a()},{immediate:!0});const P=C(()=>w.value?.status==="ok"?w.value.requests?.length??0:null),z=C(()=>[{label:`Captured (${x.requests.length})`,value:"captured",disabled:x.requests.length===0},{label:P.value!=null?`Full trace (${P.value})`:"Full trace",value:"trace"}]);function $(){x.hasTrace&&(u.value="trace")}_({showTraceMode:$});const h=A(new Set);function F(v){const S=new Set(h.value);S.has(v)?S.delete(v):S.add(v),h.value=S}const M=A(new Set);function m(v){const S=new Set(M.value);S.has(v)?S.delete(v):S.add(v),M.value=S}function I(v){if(v.length===0)return[];const S=Math.min(...v.map(O=>O.startMs)),H=Math.max(...v.map(O=>O.startMs+O.durMs)),J=Math.max(1,H-S),X=new Map(v.map(O=>[O.id,O])),se=O=>{let Y=0,ee=O;const ae=new Set;for(;ee?.parentId&&X.has(ee.parentId)&&!ae.has(ee.id)&&(ae.add(ee.id),ee=X.get(ee.parentId),Y++,!(Y>8)););return Y};return[...v].sort((O,Y)=>O.startMs-Y.startMs||Y.durMs-O.durMs).map(O=>({...O,offsetPct:(O.startMs-S)/J*100,widthPct:Math.max(1.5,O.durMs/J*100),depth:se(O)}))}function E(v){return v.status==="error"?"bg-red-400 dark:bg-red-500":v.kind==="db"?"bg-violet-400 dark:bg-violet-500":v.kind==="client"?"bg-sky-400 dark:bg-sky-500":v.kind==="internal"?"bg-gray-400 dark:bg-gray-500":"bg-emerald-400 dark:bg-emerald-500"}function U(v){const S=v.toLowerCase();return S==="critical"||S==="fatal"?3:S==="error"?2:S==="warning"||S==="warn"?1:0}function R(v){const S=U(v);if(S>=2)return"error";if(S===1)return"warning";const H=v.toLowerCase();return H==="info"||H==="information"?"info":"neutral"}function W(v){try{return new URL(v).pathname||v}catch{return v}}function G(v){return(v.split("/")[1]??v).replace(/^vnd\.[^+]*\+?/,"").replace(/^x-/,"")||v}function N(v){return v?new Date(v).toLocaleString():""}const Z=C(()=>x.requests.map((v,S)=>{const H=Array.isArray(v.serverLogs)?v.serverLogs:[],J=Array.isArray(v.serverTraces)?v.serverTraces:[];let X=0,se=0;for(const Y of H){const ee=U(Y.level);ee>=2?X++:ee===1&&se++}const O=J.find(Y=>!Y.parentId)??J[0];return{...v,_index:S,logs:[...H].sort((Y,ee)=>Y.timestamp-ee.timestamp),spans:J,serverMs:O?O.durMs:null,errorLogCount:X,warnLogCount:se,failed:v.status>=400,hasDetail:H.length>0||J.length>0,path:W(v.url)}})),Q=C(()=>{let v=0,S=0,H=0,J=0,X=0;for(const se of Z.value)se.failed&&v++,se.logs.length>0&&S++,se.spans.length>0&&H++,J+=se.errorLogCount,X+=se.warnLogCount;return{total:Z.value.length,failed:v,withLogs:S,withSpans:H,errorLogs:J,warnLogs:X}}),de=C(()=>{let v=Z.value;return b.value==="failed"?v=v.filter(S=>S.failed):b.value==="logs"&&(v=v.filter(S=>S.logs.length>0)),[...v].sort((S,H)=>{const J=X=>(X.errorLogCount>0?3:0)+(X.failed?2:0)+(X.logs.length>0?1:0);return J(H)-J(S)||S._index-H._index})}),y=C(()=>[{label:`All (${Q.value.total})`,value:"all"},{label:`Failed (${Q.value.failed})`,value:"failed",disabled:Q.value.failed===0},{label:`With logs (${Q.value.withLogs})`,value:"logs",disabled:Q.value.withLogs===0}]),j=C(()=>Q.value.withLogs>0);function ne(v){return v.errorLogCount>0||v.status>=500?"border-l-2 border-l-red-400 dark:border-l-red-600":v.failed||v.warnLogCount>0?"border-l-2 border-l-amber-400 dark:border-l-amber-600":"border-l-2 border-l-transparent"}return(v,S)=>{const H=ce,J=Je,X=qe,se=$o,O=fe,Y=Re,ee=Ke,ae=ye;return t(),k(ae,{icon:"i-lucide-network",title:"Network & backend logs",count:e(r)==="trace"?e(P):e(Q).total,help:"case.network"},{actions:d(()=>[n("div",Co,[e(r)==="captured"?(t(),o(B,{key:0},[e(Q).errorLogs>0||e(Q).warnLogs>0?(t(),o("div",To,[e(Q).errorLogs>0?(t(),o("span",So,[i(H,{name:"i-lucide-octagon-alert",class:"size-3.5"}),g(c(e(Q).errorLogs),1)])):l("",!0),e(Q).warnLogs>0?(t(),o("span",Io,[i(H,{name:"i-lucide-triangle-alert",class:"size-3.5"}),g(c(e(Q).warnLogs),1)])):l("",!0)])):l("",!0),i(J,{modelValue:e(b),"onUpdate:modelValue":S[0]||(S[0]=D=>pe(b)?b.value=D:null),items:e(y),size:"xs",variant:"link",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"])],64)):l("",!0),s.hasTrace?(t(),k(J,{key:1,modelValue:e(r),"onUpdate:modelValue":S[1]||(S[1]=D=>pe(r)?r.value=D:null),items:e(z),size:"xs",variant:"pill",ui:{list:"gap-1 p-0.5",trigger:"px-2"}},null,8,["modelValue","items"])):l("",!0)])]),default:d(()=>[e(r)==="trace"?(t(),o(B,{key:0},[e(p)||!e(w)?(t(),k(X,{key:0,text:"Parsing trace network stream…"})):e(w).status==="ok"?(t(),k(se,{key:1,data:e(w),"run-id":s.runId??null,"test-runs-case-id":s.testRunsCaseId??0},null,8,["data","run-id","test-runs-case-id"])):(t(),o("p",Ro,"No network activity recorded in this trace."))],64)):(t(),o("div",Lo,[(t(!0),o(B,null,te(e(de),D=>(t(),o("div",{key:D._index,class:q([ne(D),"rounded bg-gray-50/60 dark:bg-gray-800/40"])},[n("button",{type:"button",class:q(["w-full flex items-center gap-2 py-1.5 px-2 text-sm text-left",D.hasDetail?"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800":"cursor-default"]),disabled:!D.hasDetail,onClick:K=>D.hasDetail&&F(D._index)},[D.hasDetail?(t(),k(H,{key:0,name:e(h).has(D._index)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5 shrink-0 text-gray-400"},null,8,["name"])):(t(),o("span",Mo)),i(O,{color:("httpMethodColor"in v?v.httpMethodColor:e(We))(D.method),variant:"soft",size:"xs",class:"font-mono shrink-0"},{default:d(()=>[g(c(D.method),1)]),_:2},1032,["color"]),i(O,{color:("httpStatusColor"in v?v.httpStatusColor:e(Ge))(D.status),variant:"soft",size:"xs",class:"font-mono shrink-0 tabular-nums"},{default:d(()=>[g(c(D.status||"—"),1)]),_:2},1032,["color"]),n("code",{class:"truncate text-xs flex-1 min-w-0",title:D.url},c(D.path),9,Do),D.contentType?(t(),o("span",{key:2,class:"shrink-0 text-xs text-gray-400 font-mono hidden md:inline",title:`Response content type: ${D.contentType}`},c(G(D.contentType)),9,No)):l("",!0),D.errorLogCount>0?(t(),o("span",{key:3,class:"shrink-0 inline-flex items-center gap-1 text-xs text-red-600 dark:text-red-400",title:`${D.errorLogCount} backend error log(s)`},[i(H,{name:"i-lucide-octagon-alert",class:"size-3.5"}),g(c(D.errorLogCount),1)],8,jo)):l("",!0),D.warnLogCount>0?(t(),o("span",{key:4,class:"shrink-0 inline-flex items-center gap-1 text-xs text-amber-600 dark:text-amber-400",title:`${D.warnLogCount} backend warning log(s)`},[i(H,{name:"i-lucide-triangle-alert",class:"size-3.5"}),g(c(D.warnLogCount),1)],8,Ao)):l("",!0),D.serverMs!=null?(t(),o("span",{key:5,class:"shrink-0 inline-flex items-center gap-1 text-xs text-emerald-600 dark:text-emerald-400 tabular-nums",title:`Server-side processing time (${D.spans.length} span${D.spans.length===1?"":"s"})`},[i(H,{name:"i-lucide-server",class:"size-3.5"}),i(Y,{ms:D.serverMs,"no-title":""},null,8,["ms"])],8,Po)):l("",!0),D.startTime?(t(),o("span",{key:6,class:"shrink-0 text-xs text-gray-400 hidden sm:inline",title:N(D.startTime)},c(("formatRelativeTime"in v?v.formatRelativeTime:e(Se))(D.startTime)),9,Uo)):l("",!0),n("span",{class:q(["ml-1 shrink-0 text-xs tabular-nums",(D.duration??0)>1e3?"text-red-600 font-medium":(D.duration??0)>500?"text-orange-500":"text-gray-500"])},[i(Y,{ms:D.duration,"unit-class":"opacity-60"},null,8,["ms"])],2)],10,zo),D.spans.length>0&&e(h).has(D._index)?(t(),o("div",Bo,[n("div",Fo,[i(H,{name:"i-lucide-waypoints",class:"size-3.5"}),S[2]||(S[2]=g("Server trace ",-1))]),(t(!0),o(B,null,te(I(D.spans),K=>(t(),o("div",{key:K.id,class:"flex items-center gap-2 text-xs",title:K.status==="error"?`${K.name} (error)`:K.name},[n("div",{class:"w-40 sm:w-56 shrink-0 flex items-center gap-1 min-w-0",style:$e({paddingLeft:`${K.depth*12}px`})},[K.kind?(t(),o("span",Eo,c(K.kind),1)):l("",!0),n("span",{class:q(["truncate font-mono",K.status==="error"?"text-red-600 dark:text-red-400":"text-gray-600 dark:text-gray-300"])},c(K.name),3)],4),n("div",Oo,[n("div",{class:q(["absolute top-0 h-3 rounded",E(K)]),style:$e({left:`${K.offsetPct}%`,width:`${K.widthPct}%`})},null,6)]),i(Y,{ms:K.durMs,class:"w-12 shrink-0 text-right text-gray-500"},null,8,["ms"])],8,Vo))),128))])):l("",!0),D.logs.length>0&&e(h).has(D._index)?(t(),o("div",Ho,[(t(!0),o(B,null,te(D.logs,(K,ve)=>(t(),o("div",{key:ve,class:"rounded border border-default bg-white dark:bg-gray-900/60 p-2 text-xs"},[n("div",Ko,[i(O,{color:R(K.level),variant:"soft",size:"xs",class:"shrink-0 capitalize"},{default:d(()=>[g(c(K.level),1)]),_:2},1032,["color"]),K.category?(t(),o("span",Wo,"["+c(K.category)+"]",1)):l("",!0),n("span",Go,c(K.message),1),K.timestamp?(t(),o("span",{key:1,class:"shrink-0 text-gray-400 tabular-nums",title:N(K.timestamp)},c(("formatRelativeTime"in v?v.formatRelativeTime:e(Se))(K.timestamp)),9,Jo)):l("",!0)]),K.stack?(t(),o("div",qo,[n("button",{type:"button",class:"inline-flex items-center gap-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-200",onClick:Qe=>m(`${D._index}:${ve}`)},[i(H,{name:e(M).has(`${D._index}:${ve}`)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3"},null,8,["name"]),S[3]||(S[3]=g(" Stack trace ",-1))],8,Qo),e(M).has(`${D._index}:${ve}`)?(t(),o("pre",Zo,c(K.stack),1)):l("",!0)])):l("",!0)]))),128))])):l("",!0)],2))),128))])),e(r)==="captured"&&!e(j)?(t(),o("p",Xo,[i(H,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),S[5]||(S[5]=g(" No backend server logs captured — install ",-1)),i(ee,{to:"backend-logs","no-icon":"",class:"underline"},{default:d(()=>[...S[4]||(S[4]=[g("a Piwi backend integration",-1)])]),_:1}),S[6]||(S[6]=g(" to see server-side warnings and errors under each request. ",-1))])):l("",!0),s.hasTrace?l("",!0):(t(),o("p",Yo,[i(H,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),n("span",null,[S[8]||(S[8]=g(" Want to go deeper? Record traces (",-1)),S[9]||(S[9]=n("code",null,"trace: 'retain-on-failure'",-1)),S[10]||(S[10]=g(") to see every request with headers, timing and bodies here. ",-1)),i(ee,{to:"ui-overview#trace-powered-deep-views","no-icon":"",class:"underline"},{default:d(()=>[...S[7]||(S[7]=[g("Learn more",-1)])]),_:1})])]))]),_:1},8,["count"])}}}),tr=Object.assign(er,{__name:"TestCaseNetworkRequests"}),sr={class:"space-y-2"},nr=re({__name:"TestCaseTracesCard",props:{traces:{}},setup(s){return(_,x)=>{const b=cs,w=ye;return s.traces.length>0?(t(),k(w,{key:0,icon:"i-lucide-bug-play",title:"Traces",count:s.traces.length,help:"case.traces"},{default:d(()=>[n("div",sr,[(t(!0),o(B,null,te(s.traces,p=>(t(),k(b,{key:p.id,trace:p,class:"py-2 px-3 rounded-lg border"},null,8,["trace"]))),128))])]),_:1},8,["count"])):l("",!0)}}}),ar=Object.assign(nr,{__name:"TestCaseTracesCard"}),or={class:"space-y-3"},rr={class:"flex items-center justify-between px-3 py-2 bg-gray-50 dark:bg-gray-800/50 border-b"},ir={class:"flex items-center gap-2 min-w-0"},lr={class:"text-sm font-medium truncate"},cr={key:0,class:"text-xs text-gray-400 shrink-0"},ur={class:"text-xs text-gray-400"},dr={class:"flex items-center gap-1 shrink-0"},mr=["href"],gr={key:0,class:"bg-gray-100 dark:bg-gray-900"},pr=["src","alt","onClick"],fr={key:1,class:"bg-black"},yr={key:2,class:"bg-gray-50 dark:bg-gray-900"},xr={key:0,class:"flex items-center justify-center py-8"},hr={key:1,class:"p-4 text-red-500 text-sm"},vr={key:2,class:"p-4 overflow-auto max-h-96"},_r={class:"text-sm whitespace-pre-wrap font-sans leading-relaxed"},kr=re({__name:"TestCaseAttachmentsCard",props:{attachments:{}},setup(s){const _=s,x=Oe(),b=A(null),w=C(()=>_.attachments.filter(R=>Te(R.path,R.contentType)).map(R=>({src:z(R.path,R.contentType),name:R.name||$(R.path)})));function p(R){b.value=R}const a=new Set([".md",".mdx",".markdown"]),u=new Set(["text/markdown","text/x-markdown"]);function r(R){return R.toLowerCase().split(".").pop()||""}function P(R,W){return!!(a.has(r(R))||W&&u.has(W.toLowerCase()))}function z(R,W){return _t(R,W,x.app?.baseURL)}function $(R){return R.split("/").pop()||R}function h(R){return R==null?"":be(R)}const F=A({}),M=A({}),m=A({}),I=A(new Set);async function E(R){if(F.value[R.id]===void 0&&!m.value[R.id]){m.value[R.id]=!0,M.value[R.id]=null;try{const W=await $fetch(z(R.path,R.contentType),{responseType:"text"});F.value[R.id]=W}catch{M.value[R.id]="Failed to load preview"}finally{m.value[R.id]=!1}}}function U(R,W){const G=new Set(I.value);G.has(R)?G.delete(R):(G.add(R),E(W)),I.value=G}return(R,W)=>{const G=ce,N=Ie,Z=us,Q=ds,de=ye;return s.attachments.length>0?(t(),k(de,{key:0,icon:"i-lucide-paperclip",title:"Attachments",count:s.attachments.length},{default:d(()=>[n("div",or,[(t(!0),o(B,null,te(s.attachments,y=>(t(),o("div",{key:y.id,class:"rounded-lg border overflow-hidden"},[n("div",rr,[n("div",ir,[i(G,{name:e(Te)(y.path,y.contentType)?"i-lucide-image":e(Ae)(y.path,y.contentType)?"i-lucide-video":P(y.path,y.contentType)?"i-lucide-file-text":"i-lucide-file",class:"size-4 text-gray-400 shrink-0"},null,8,["name"]),n("span",lr,c($(y.path)),1),y.name&&y.name!==$(y.path)?(t(),o("span",cr,c(y.name),1)):l("",!0),n("span",ur,c(h(y.size)),1)]),n("div",dr,[P(y.path,y.contentType)?(t(),k(N,{key:0,size:"xs",color:"neutral",variant:"soft",onClick:j=>U(y.id,y)},{default:d(()=>[g(c(e(I).has(y.id)?"Hide preview":"Preview"),1)]),_:2},1032,["onClick"])):l("",!0),n("a",{href:z(y.path,y.contentType),target:"_blank",class:"text-primary hover:underline text-xs shrink-0"},"Open",8,mr)])]),e(Te)(y.path,y.contentType)?(t(),o("div",gr,[n("img",{src:z(y.path,y.contentType),alt:y.name||"Screenshot",class:"max-w-full max-h-96 object-contain mx-auto cursor-pointer hover:opacity-90 transition-opacity",loading:"lazy",onClick:j=>p(e(w).findIndex(ne=>ne.src===z(y.path,y.contentType)))},null,8,pr)])):e(Ae)(y.path,y.contentType)?(t(),o("div",fr,[i(Z,{src:z(y.path,y.contentType)},null,8,["src"])])):P(y.path,y.contentType)&&e(I).has(y.id)?(t(),o("div",yr,[e(m)[y.id]?(t(),o("div",xr,[i(G,{name:"i-lucide-loader-circle",class:"size-5 animate-spin text-gray-400"})])):e(M)[y.id]?(t(),o("div",hr,c(e(M)[y.id]),1)):e(F)[y.id]?(t(),o("div",vr,[n("pre",_r,c(e(F)[y.id]),1)])):l("",!0)])):l("",!0)]))),128))]),i(Q,{modelValue:e(b),"onUpdate:modelValue":W[0]||(W[0]=y=>pe(b)?b.value=y:null),images:e(w)},null,8,["modelValue","images"])]),_:1},8,["count"])):l("",!0)}}}),br=Object.assign(kr,{__name:"TestCaseAttachmentsCard"});function wr(s){return Array.isArray(s)?s.some(_=>_&&typeof _.type=="string"&&_.type.toLowerCase()==="slow"):!1}function $r(s){const _=[];if(!s)return _;const x=s.steps||[],w=x.filter(a=>a.category==="navigation").filter(a=>a.duration>3e3);if(w.length>0){const a=w.sort((u,r)=>r.duration-u.duration)[0];_.push({type:"warning",message:"Slow navigation detected",details:`"${a.title}" took ${(a.duration/1e3).toFixed(1)}s. The tested page may have performance issues (slow server response, heavy JS bundles, etc.).`})}x.length>20&&_.push({type:"info",message:"Many sequential actions",details:`This test has ${x.length} steps. Consider splitting it into smaller, focused tests for better isolation and faster feedback.`}),s.status==="passed"&&(s.retries||0)>0&&_.push({type:"warning",message:"Flaky test — passed after retries",details:`This test needed ${s.retries} ${s.retries===1?"retry":"retries"} to pass. Consider reviewing locator strategies, adding explicit waits, or checking for race conditions.`});const p=x.filter(a=>a.category==="assertion"&&a.duration>2e3);if(p.length>0){const a=p.sort((u,r)=>r.duration-u.duration)[0];_.push({type:"info",message:"Slow assertions detected",details:`"${a.title}" took ${(a.duration/1e3).toFixed(1)}s. The UI may be slow to render or the assertion timeout may need tuning.`})}return wr(s.testAnnotations)&&typeof s.duration=="number"&&s.duration<1e4&&_.push({type:"info",message:"test.slow() may be unnecessary",details:`This run finished in ${(s.duration/1e3).toFixed(1)}s, yet the test is marked test.slow(), which triples its timeout budget. If it is consistently this fast, removing test.slow() lets a failure surface sooner.`}),typeof s.timeout=="number"&&s.timeout>0&&typeof s.duration=="number"&&s.duration>0&&s.timeout>=4*s.duration&&s.timeout-s.duration>=3e4&&_.push({type:"info",message:"Oversized timeout",details:`The timeout is ${(s.timeout/1e3).toFixed(0)}s but this run took ${(s.duration/1e3).toFixed(1)}s. A large timeout means a hang or failure waits far longer than necessary — consider lowering it toward the test's real duration.`}),_}function Cr(s,_){const x=s.search(/\n at /);if(x===-1)return _!==void 0&&s.length>_?s.slice(0,_)+`
|
|
4
|
+
[truncated]`:s;const b=s.slice(0,x),p=s.slice(x).split(`
|
|
5
|
+
`),a=[];let u=0;const r=()=>{u>0&&(a.push(`… (${u} internal frame${u>1?"s":""})`),u=0)};for(const z of p){const $=z.trimStart();$.startsWith("at ")?z.includes("node_modules")||$.startsWith("at node:")?u++:(r(),a.push(z)):($===""||r(),a.push(z))}r();let P=b+`
|
|
6
|
+
`+a.join(`
|
|
7
|
+
`);return _!==void 0&&P.length>_&&(P=P.slice(0,_)+`
|
|
8
|
+
[truncated]`),P}const Tr={class:"space-y-4"},Sr=["innerHTML"],Ir={class:"grid grid-cols-1 xl:grid-cols-[3fr_2fr] gap-4"},Rr={class:"space-y-4 xl:order-2"},Lr={class:"space-y-4 xl:order-1 min-w-0"},zr={class:"max-h-96 overflow-y-auto"},Mr={class:"space-y-3"},Dr={key:0},Nr={class:"flex flex-wrap items-center gap-x-3 gap-y-1.5 text-xs mb-3"},jr={class:"font-medium text-gray-600 dark:text-gray-300"},Ar={class:"tabular-nums text-gray-500 dark:text-gray-400"},Pr={class:"text-xs tabular-nums text-gray-400 dark:text-gray-500"},Ur={key:0,class:"inline-flex items-center justify-center size-5 rounded-full bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 text-xs leading-none",title:"Step failed"},Br={key:1,class:"inline-flex items-center justify-center size-5 rounded-full bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400 text-xs leading-none",title:"Step passed"},Fr={class:"flex items-center gap-2"},Vr={key:0,class:"text-xs text-red-500 mt-1 whitespace-pre-wrap break-words font-mono"},Er={class:"min-w-[6rem]"},Or={class:"flex items-center justify-between gap-2"},Hr={key:0,class:"text-xs tabular-nums text-gray-400 dark:text-gray-500"},Kr={class:"relative mt-1 h-1.5 w-full overflow-hidden rounded-full bg-gray-100 dark:bg-gray-800"},Wr={class:"space-y-4 pt-4"},Gr={key:3,class:"flex flex-col items-center justify-center py-12 text-gray-400"},Jr={class:"space-y-4 pt-1"},qr={key:0,class:"space-y-2"},Qr={class:"flex items-start gap-2"},Zr={class:"space-y-4"},Xr={key:3,class:"text-xs text-gray-400 pt-1"},Yr={class:"bg-gray-100 dark:bg-gray-800 px-1 rounded"},ei={class:"text-xs text-gray-400"},ti={class:"space-y-4 pt-4"},si={key:0,class:"space-y-4"},ni={class:"flex items-center justify-end"},ai={class:"text-xs whitespace-nowrap"},oi={class:"text-gray-500"},ri={class:"text-gray-400 ml-1"},ii={key:1,class:"text-gray-400"},li=["title"],sl=re({__name:"[id]",async setup(s){let _,x;const b=Xt(),w=Yt(),p=b.params.id,{data:a,refresh:u}=([_,x]=gt(()=>ft(`/api/test-run-cases/${p}`,"$cViH4nbiGI")),_=await _,x(),_),r=A([]);he(()=>a.value?.testCaseId,async f=>{if(f)try{r.value=await $fetch(`/api/test-cases/${f}/history`)}catch{r.value=[]}else r.value=[]},{immediate:!0});const{data:P,refresh:z}=([_,x]=gt(()=>ft(`/api/test-run-cases/${p}/traces`,"$GsSNbTq_Ec")),_=await _,x(),_),$=C(()=>(P.value?.length??0)>0);es(C(()=>({title:`${a.value?.title||`Test run case #${p}`} — Piwi Dashboard`})));const h=C(()=>!!a.value?.error),F=C(()=>a.value?$r(a.value):[]),M=C(()=>a.value?.steps?a.value.steps:[]),m=C(()=>a.value?.webVitals??null),I=C(()=>a.value?.networkRequests??[]),E=C(()=>{if(!r.value||r.value.length<2||!a.value?.duration)return null;const f=r.value.filter(le=>le.duration!==null&&le.id!==a.value?.id);if(f.length===0)return null;const T=f.reduce((le,ge)=>le+(ge.duration||0),0)/f.length,V=a.value.duration,oe=V-T,me=T>0?Math.round(oe/T*100):0;return{avg:Math.round(T),current:V,diff:Math.round(oe),pct:me}}),U=C(()=>a.value?.testRun?.metadata),R=C(()=>{const f=U.value;return f?.scm?f.scm:null}),W=C(()=>{const f=U.value;return f?.ci?f.ci:null}),G=C(()=>a.value?.failureCluster??null),N=C(()=>{const f=[];return h.value&&f.push({label:"Diagnosis",icon:"i-lucide-stethoscope",value:"diagnosis",slot:"diagnosis"}),f.push({label:`Steps (${M.value.length})`,icon:"i-lucide-list-checks",value:"steps",slot:"steps"}),h.value||f.push({label:"Artifacts",icon:"i-lucide-paperclip",value:"artifacts",slot:"artifacts"}),f.push({label:"Performance",icon:"i-lucide-gauge",value:"performance",slot:"performance"}),f.push({label:`History${r.value?.length?` (${r.value.length})`:""}`,icon:"i-lucide-trending-up",value:"history",slot:"history"}),f}),Z=C(()=>N.value.map(f=>f.value));function Q(){return h.value?"diagnosis":"steps"}function de(f){let T=typeof f=="string"?f:"";return T==="error"&&(T="diagnosis"),T==="traces"&&(T=h.value?"diagnosis":"artifacts"),Z.value.includes(T)?T:Q()}const y=A(de(b.query.tab));he(Z,f=>{f.includes(y.value)||(y.value=de(b.query.tab))}),he(y,f=>{b.query.tab!==f&&w.replace({query:{...b.query,tab:f}})},{immediate:!0});const j=[{accessorKey:"startTime",header:"Date"},{accessorKey:"status",header:"Status"},{accessorKey:"duration",header:"Duration"},{accessorKey:"retries",header:"Retries"},{accessorKey:"runId",header:"Run"},{accessorKey:"error",header:"Error"}],ne={navigation:"info",assertion:"success",action:"warning",input:"warning",api:"info",wait:"neutral",hook:"neutral",fixture:"neutral"},v=[{id:"index",header:"#",meta:{class:{th:"w-12",td:"w-12"}}},{id:"status",header:"",meta:{class:{th:"w-10",td:"w-10"}}},{accessorKey:"category",header:"Category",meta:{class:{th:"w-28",td:"w-28"}}},{accessorKey:"title",header:"Step"},{accessorKey:"duration",header:"Duration",meta:{class:{th:"w-44",td:"w-44"}}}],S=C(()=>{const f=new Map;for(const T of M.value){const V=f.get(T.category)??{count:0,duration:0};V.count+=1,V.duration+=T.duration||0,f.set(T.category,V)}return Array.from(f,([T,V])=>({category:T,...V})).sort((T,V)=>V.duration-T.duration)}),H=C(()=>{let f=-1,T=-1;return M.value.forEach((V,oe)=>{(V.duration||0)>T&&(T=V.duration||0,f=oe)}),f}),J=C(()=>M.value.reduce((f,T)=>Math.max(f,T.duration||0),0)),X=C(()=>M.value.length>0&&M.value.every(f=>typeof f.startTime=="number")),se=C(()=>a.value?.startedAt??(X.value?Math.min(...M.value.map(f=>f.startTime)):0)),O=C(()=>{const f=a.value?.duration??0;if(f>0)return f;if(X.value){const T=Math.max(...M.value.map(V=>V.startTime+(V.duration||0)));return Math.max(1,T-se.value)}return 0});function Y(f){if(X.value&&O.value>0){const V=Math.max(0,Math.min(100,(f.startTime-se.value)/O.value*100)),oe=Math.min(100-V,Math.max(1.5,(f.duration||0)/O.value*100));return{left:`${V}%`,width:`${oe}%`}}return{left:"0%",width:`${J.value>0?Math.max(2,(f.duration||0)/J.value*100):0}%`}}function ee(f){const T=a.value?.duration??0;if(T<=0)return"";const V=f/T*100;return V>0&&V<1?"<1%":`${Math.round(V)}%`}function ae(f){return f>2e3?"text-red-600 font-medium":f>500?"text-orange-500":"text-gray-500"}function D(f){return f>2e3?"bg-red-500":f>500?"bg-orange-400":"bg-gray-400 dark:bg-gray-500"}const K=C(()=>a.value?.testRun?.environment),ve=C(()=>en([{filePath:a.value?.filePath??"",title:a.value?.title??"",line:a.value?.line??null,projectName:a.value?.browser?.projectName??null}])),{copy:Qe,copied:Ze}=tn(),$t=C(()=>[{label:Ze.value?"Copied":"Retry command",icon:Ze.value?"i-lucide-check":"i-lucide-play",onClick:()=>Qe(ve.value,{toast:"Retry command copied"})},{label:"Refresh",icon:"i-lucide-refresh-cw",onClick:()=>u()}]),Ct=!!Oe().public.demoMode;let xe=null;const Xe=C(()=>{const f=a.value?.testRun?.status;return f==="running"||f==="finalizing"});function Tt(){if(Ct||xe)return;const f=a.value?.testRun?.id;f&&(xe=new EventSource(`/api/test-runs/${f}/stream`),xe.onmessage=T=>{try{const V=JSON.parse(T.data);V.type==="case-files"&&V.data?.testRunsCaseId===Number(p)?(u(),z()):V.type==="run-finished"&&(u(),z(),Ue())}catch{}},xe.onerror=()=>{})}function Ue(){xe&&(xe.close(),xe=null)}he(Xe,f=>{f?Tt():Ue()},{immediate:!0}),ts(Ue);const{copyRich:St,copied:Ye}=ms();function It(){const f=a.value;if(!f?.error)return;const T=window.location.origin,V=f.title??"Unknown test",oe=f.location??"",me=f.error.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,""),le=Ce=>Ce.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),ge=G.value?`${T}/failure-clusters/${G.value.id}`:null,De=`${T}/test-run-cases/${p}?tab=diagnosis`,ke=a.value?.testCaseId?`${T}/test-cases/${a.value.testCaseId}`:null,Fe=[`❌ Test failed: ${V}`,oe?`Location: ${oe}`:null,"","Error:",me,"",ge?`Failure cluster: ${ge}`:null,`Execution: ${De}`,ke?`History: ${ke}`:null].filter(Ce=>Ce!==null).join(`
|
|
9
|
+
`),Ne=[`<p><strong>❌ Test failed: ${le(V)}</strong>${oe?`<br><code>${le(oe)}</code>`:""}</p>`,`<p><strong>Error:</strong></p><pre>${pt(f.error)}</pre>`,`<p>🔗 ${ge?`<a href="${ge}">View failure cluster</a> · `:""}<a href="${De}">Execution details</a>${ke?` · <a href="${ke}">Test history</a>`:""}</p>`].join("");St(Fe,Ne,{toast:"Failure copied"})}const Be=A(null),et=A(null),Le=A(null),ze=A(null),tt=A(null),Me=A(null),st=A(null),nt=A(null),at=A(null),ot=A(null);function _e(f){f?.scrollIntoView({behavior:"smooth",block:"start"})}const rt={sampleError:()=>_e(Be.value),executionError:()=>_e(Be.value),testSource:()=>ze.value?.reveal(),sourceFiles:()=>ze.value?.reveal(),environmentDiff:()=>st.value?.reveal(),visualDiff:()=>nt.value?.reveal(),domSnapshot:()=>at.value?.reveal(),ariaSnapshot:()=>ot.value?.reveal(),screenshots:()=>Me.value?.reveal(),tracePointers:()=>Me.value?.reveal(),artifacts:()=>Me.value?.reveal(),console:()=>_e(et.value),networkRequests:()=>_e(Le.value),serverTraces:()=>_e(Le.value),traceCallStack:()=>ze.value?.reveal(),traceNetwork:()=>{tt.value?.showTraceMode(),_e(Le.value)},steps:()=>{y.value="steps"},failingSteps:()=>{y.value="steps"}};return ss(Bs,{canLocate:f=>f in rt,open:f=>rt[f]?.()}),(f,T)=>{const V=Jt,oe=qt,me=ce,le=Pe,ge=hs,De=vs,ke=ks,Fe=Un,Ne=Ie,Ce=kt,it=ye,Rt=Wn,Lt=aa,zt=fa,Mt=ba,Dt=Ra,Nt=ps,jt=fs,At=ys,lt=Aa,ct=tr,ut=gs,Pt=vt,Ut=He,Bt=xs,je=fe,ie=Re,Ft=Js,dt=qs,mt=Qs,Ve=bt,Vt=ar,Et=br,ue=Xs,Ee=Zs,Ot=Ke,Ht=Ys,Kt=Ts,Wt=_s;return t(),k(Wt,{id:"test-run-case-detail"},{header:d(()=>[i(ke,null,{leading:d(()=>[i(V),i(oe,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},...e(a)?.testRun?.project?.id?[{label:e(a).testRun.project.name||"Project",to:`/projects/${e(a).testRun.project.id}`}]:[{label:"Project"}],...e(a)?.testRun?.id?[{label:`Run #${e(a).testRun.id}`+(e(a).testRun.label?` — ${e(a).testRun.label}`:""),to:`/test-runs/${e(a).testRun.id}`}]:[{label:"Test run"}],{label:e(a)?.title||`Test run case #${e(p)}`}]},null,8,["items"])]),right:d(()=>[e(a)?.testCaseId?(t(),k(le,{key:0,to:`/test-cases/${e(a).testCaseId}`,class:"text-xs text-gray-500 hover:text-primary mr-2 flex items-center gap-1",title:"View test case evolution and history"},{default:d(()=>[i(me,{name:"i-lucide-trending-up",class:"size-3.5"}),T[2]||(T[2]=n("span",{class:"hidden sm:inline"},"Evolution",-1))]),_:1},8,["to"])):l("",!0),e(a)?(t(),k(ge,{key:1,endpoint:`/api/test-run-cases/${e(a).id}/export`,"base-name":`piwi-execution-${e(a).id}`,class:"mr-2"},null,8,["endpoint","base-name"])):l("",!0),i(De,{actions:e($t)},null,8,["actions"])]),_:1})]),body:d(()=>[i(Kt,{modelValue:e(y),"onUpdate:modelValue":T[1]||(T[1]=L=>pe(y)?y.value=L:null),"tab-items":e(N)},{summary:d(()=>[i(Fe,{"test-case":e(a)??null,"scm-info":e(R),"ci-info":e(W),browser:e(a)?.browser??null,environment:e(K),"steps-count":e(M).length,"historical-timing":e(E),"stable-links":e(a)?.stableLinks??null,onRefresh:T[0]||(T[0]=L=>e(u)())},null,8,["test-case","scm-info","ci-info","browser","environment","steps-count","historical-timing","stable-links"])]),"tab-diagnosis":d(()=>[n("div",Tr,[n("div",{ref_key:"errorEl",ref:Be,class:"scroll-mt-4"},[e(a)?.error?(t(),k(it,{key:0,icon:"i-lucide-circle-x","icon-class":"text-red-500",title:"Error"},{actions:d(()=>[i(Ce,{text:e(Ye)?"Copied!":"Copy failure"},{default:d(()=>[i(Ne,{size:"xs",variant:"ghost",color:"neutral",icon:e(Ye)?"i-lucide-check":"i-lucide-clipboard",onClick:It},null,8,["icon"])]),_:1},8,["text"])]),default:d(()=>[n("div",{class:"text-xs font-mono whitespace-pre-wrap break-words max-h-96 overflow-y-auto rounded bg-red-50 dark:bg-red-950/20 p-3",innerHTML:e(pt)(e(Cr)(e(a).error))},null,8,Sr)]),_:1})):l("",!0)],512),n("div",Ir,[n("div",Rr,[i(Rt,{"test-case":e(a)??null,history:e(r),"current-id":Number(e(p))},null,8,["test-case","history","current-id"]),e(G)?(t(),k(Lt,{key:0,cluster:e(G)},null,8,["cluster"])):l("",!0),i(zt,{"test-runs-case-id":Number(e(p))},null,8,["test-runs-case-id"])]),n("div",Lr,[e(a)?.testSourceFrames?.length||e(a)?.testSource||e($)?(t(),k(Mt,{key:0,ref_key:"testSourceCard",ref:ze,"storage-key":"case-test-source",frames:e(a)?.testSourceFrames??null,"test-source":e(a)?.testSource??null,"run-id":e(a)?.testRun?.id??null,"test-runs-case-id":Number(e(p)),"has-trace":e($),"project-key":e(a)?.testRun?.project?.id,"project-name":e(a)?.testRun?.project?.name},null,8,["frames","test-source","run-id","test-runs-case-id","has-trace","project-key","project-name"])):l("",!0),i(Dt,{ref_key:"evidenceCard",ref:Me,"storage-key":"case-evidence",attachments:e(a)?.attachments??[],traces:e(P)??[]},null,8,["attachments","traces"]),e(a)?.testRun?.id?(t(),k(Nt,{key:1,"storage-key":"case-locators","run-id":e(a).testRun.id,"test-runs-case-id":Number(e(p))},null,8,["run-id","test-runs-case-id"])):l("",!0),e(a)?.testRun?.id?(t(),k(jt,{key:2,ref_key:"envDiffCard",ref:st,"storage-key":"case-env-diff","run-id":e(a).testRun.id,"test-runs-case-id":Number(e(p))},null,8,["run-id","test-runs-case-id"])):l("",!0),e(a)?.testRun?.id?(t(),k(At,{key:3,ref_key:"visualDiffCard",ref:nt,"storage-key":"case-visual-diff","run-id":e(a).testRun.id,"test-runs-case-id":Number(e(p))},null,8,["run-id","test-runs-case-id"])):l("",!0),e(a)?.consoleLogs?.length?(t(),o("div",{key:4,ref_key:"consoleEl",ref:et,class:"scroll-mt-4"},[i(lt,{entries:e(a)?.consoleLogs??[]},null,8,["entries"])],512)):l("",!0),e(I).length>0||e($)?(t(),o("div",{key:5,ref_key:"networkEl",ref:Le,class:"scroll-mt-4"},[i(ct,{ref_key:"networkCard",ref:tt,requests:e(I),"run-id":e(a)?.testRun?.id??null,"test-runs-case-id":Number(e(p)),"has-trace":e($)},null,8,["requests","run-id","test-runs-case-id","has-trace"])],512)):l("",!0),e(a)?.pageState?(t(),k(ut,{key:6,"storage-key":"case-page-state","page-state":e(a).pageState},null,8,["page-state"])):l("",!0),e(a)?.ariaSnapshot?(t(),k(Ut,{key:7,ref_key:"ariaCard",ref:ot,"storage-key":"case-aria",icon:"i-lucide-scan-text",title:"ARIA snapshot",help:"case.aria"},{folded:d(()=>[...T[3]||(T[3]=[g("Accessibility tree captured at the moment of failure",-1)])]),default:d(()=>[n("div",zr,[i(Pt,{text:"```yaml\n"+e(a).ariaSnapshot+"\n```"},null,8,["text"])])]),_:1},512)):l("",!0),e(a)?.testRun?.id?(t(),k(Bt,{key:8,ref_key:"domSnapshotCard",ref:at,"storage-key":"case-dom-snapshot","run-id":e(a).testRun.id,"test-runs-case-id":Number(e(p))},null,8,["run-id","test-runs-case-id"])):l("",!0)])])])]),"tab-steps":d(()=>[n("div",Mr,[e(M).length>0?(t(),o("div",Dr,[n("div",Nr,[n("span",jr,c(e(M).length)+" steps",1),T[4]||(T[4]=n("span",{class:"text-gray-300 dark:text-gray-600"},"·",-1)),(t(!0),o(B,null,te(e(S),L=>(t(),o("span",{key:L.category,class:"inline-flex items-center gap-1"},[i(je,{color:ne[L.category]||"neutral",variant:"soft",size:"xs"},{default:d(()=>[g(c(L.category),1)]),_:2},1032,["color"]),n("span",Ar,[g("×"+c(L.count)+" · ",1),i(ie,{ms:L.duration},null,8,["ms"])])]))),128))]),i(mt,{"min-width":"40rem",bleed:!1},{default:d(()=>[i(dt,{data:e(M),columns:v,ui:{base:"table-fixed w-full border-separate border-spacing-0 min-w-[40rem]",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 align-top"}},{"index-cell":d(({row:L})=>[n("span",Pr,c(L.index+1),1)]),"status-cell":d(({row:L})=>[L.original.failed?(t(),o("span",Ur,"✗")):(t(),o("span",Br,"✓"))]),"category-cell":d(({row:L})=>[i(je,{color:ne[L.original.category]||"neutral",variant:"soft",size:"xs"},{default:d(()=>[g(c(L.original.category),1)]),_:2},1032,["color"])]),"title-cell":d(({row:L})=>[n("div",Fr,[n("span",{class:q(L.original.failed?"text-red-600 dark:text-red-400 font-medium":"")},c(L.original.title),3),L.index===e(H)?(t(),k(je,{key:0,color:"warning",variant:"subtle",size:"xs",class:"shrink-0",title:"Slowest step in this test"},{default:d(()=>[...T[5]||(T[5]=[g(" slowest ",-1)])]),_:1})):l("",!0)]),L.original.failed&&L.original.error?.message?(t(),o("p",Vr,c(L.original.error.message),1)):l("",!0),L.original.location?(t(),k(Ft,{key:1,location:L.original.location,"project-key":e(a)?.testRun?.project?.id,"project-name":e(a)?.testRun?.project?.name,class:"text-xs text-gray-400 dark:text-gray-500 mt-0.5"},null,8,["location","project-key","project-name"])):l("",!0)]),"duration-cell":d(({row:L})=>[n("div",Er,[n("div",Or,[i(ie,{ms:L.original.duration,class:q(`text-sm ${ae(L.original.duration)}`),"unit-class":"opacity-60"},null,8,["ms","class"]),ee(L.original.duration)?(t(),o("span",Hr,c(ee(L.original.duration)),1)):l("",!0)]),n("div",Kr,[n("div",{class:q(["absolute inset-y-0 rounded-full",D(L.original.duration)]),style:$e(Y(L.original))},null,6)])])]),_:1},8,["data"])]),_:1})])):(t(),k(Ve,{key:1,icon:"i-lucide-list-checks",text:"No steps recorded for this execution"}))])]),"tab-artifacts":d(()=>[n("div",Wr,[i(Vt,{traces:e(P)||[]},null,8,["traces"]),i(Et,{attachments:e(a)?.attachments??[]},null,8,["attachments"]),e(a)?.pageState?(t(),k(ut,{key:0,"storage-key":"case-page-state","page-state":e(a).pageState},null,8,["page-state"])):l("",!0),e(a)?.consoleLogs?.length?(t(),k(lt,{key:1,entries:e(a)?.consoleLogs??[]},null,8,["entries"])):l("",!0),e(I).length>0||e($)?(t(),k(ct,{key:2,requests:e(I),"run-id":e(a)?.testRun?.id??null,"test-runs-case-id":Number(e(p)),"has-trace":e($)},null,8,["requests","run-id","test-runs-case-id","has-trace"])):l("",!0),!e(P)?.length&&!e(a)?.attachments?.length&&!e(a)?.consoleLogs?.length&&!e(I).length?(t(),o("div",Gr,[e(Xe)?(t(),o(B,{key:0},[i(me,{name:"i-lucide-loader-circle",class:"size-8 mb-2 animate-spin"}),T[6]||(T[6]=n("p",{class:"text-sm"}," Run in progress — traces and attachments appear here as soon as they are uploaded. ",-1))],64)):(t(),o(B,{key:1},[i(me,{name:"i-lucide-inbox",class:"size-8 mb-2"}),T[7]||(T[7]=n("p",{class:"text-sm"},"No traces, console logs, or network requests captured for this test case.",-1))],64))])):l("",!0)])]),"tab-performance":d(()=>[n("div",Jr,[e(F).length>0?(t(),o("div",qr,[(t(!0),o(B,null,te(e(F),(L,Gt)=>(t(),o("div",{key:Gt,class:q(["p-3 rounded-lg border",L.type==="warning"?"bg-amber-50 dark:bg-amber-900/20 border-amber-200 dark:border-amber-800":"bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800"])},[n("div",Qr,[i(me,{name:L.type==="warning"?"i-lucide-alert-triangle":"i-lucide-lightbulb",class:q([L.type==="warning"?"text-amber-600":"text-blue-600","size-4 mt-0.5 shrink-0"])},null,8,["name","class"]),n("div",null,[n("p",{class:q(L.type==="warning"?"text-amber-800 dark:text-amber-200 font-medium":"text-blue-800 dark:text-blue-200 font-medium")},c(L.message),3),n("p",{class:q([L.type==="warning"?"text-amber-700 dark:text-amber-300":"text-blue-700 dark:text-blue-300","mt-1"])},c(L.details),3)])])],2))),128))])):l("",!0),e(m)?(t(),k(it,{key:1,icon:"i-lucide-gauge",title:"Browser performance (Web Vitals)",help:"case.web-vitals"},{default:d(()=>[n("div",Zr,[e(m).navigation?(t(),k(Ee,{key:0,"min-tile-width":"10rem"},{default:d(()=>[i(ue,{label:"TTFB",hint:"Time to first byte","value-class":e(m).navigation.ttfb>600?"text-red-600":e(m).navigation.ttfb>200?"text-orange-500":"text-green-600"},{default:d(()=>[i(ie,{ms:e(m).navigation.ttfb},null,8,["ms"])]),_:1},8,["value-class"]),i(ue,{label:"DOM Interactive",hint:"DOM interactive","value-class":e(m).navigation.domInteractive>3e3?"text-red-600":e(m).navigation.domInteractive>1500?"text-orange-500":"text-green-600"},{default:d(()=>[i(ie,{ms:e(m).navigation.domInteractive},null,8,["ms"])]),_:1},8,["value-class"]),i(ue,{label:"DOMContentLoaded",hint:"DOMContentLoaded","value-class":e(m).navigation.domContentLoaded>3e3?"text-red-600":e(m).navigation.domContentLoaded>1500?"text-orange-500":"text-green-600"},{default:d(()=>[i(ie,{ms:e(m).navigation.domContentLoaded},null,8,["ms"])]),_:1},8,["value-class"]),i(ue,{label:"Load Complete",hint:"Page fully loaded","value-class":e(m).navigation.loadComplete>5e3?"text-red-600":e(m).navigation.loadComplete>3e3?"text-orange-500":"text-green-600"},{default:d(()=>[i(ie,{ms:e(m).navigation.loadComplete},null,8,["ms"])]),_:1},8,["value-class"])]),_:1})):l("",!0),e(m).paint&&(e(m).paint.firstPaint||e(m).paint.firstContentfulPaint)?(t(),k(Ee,{key:1,"min-tile-width":"10rem",class:"pt-2 border-t"},{default:d(()=>[e(m).paint.firstPaint!==void 0?(t(),k(ue,{key:0,label:"First Paint (FP)"},{default:d(()=>[i(ie,{ms:e(m).paint.firstPaint},null,8,["ms"])]),_:1})):l("",!0),e(m).paint.firstContentfulPaint!==void 0?(t(),k(ue,{key:1,label:"First Contentful Paint (FCP)","value-class":e(m).paint.firstContentfulPaint>3e3?"text-red-600":e(m).paint.firstContentfulPaint>1800?"text-orange-500":"text-green-600"},{default:d(()=>[i(ie,{ms:e(m).paint.firstContentfulPaint},null,8,["ms"])]),_:1},8,["value-class"])):l("",!0)]),_:1})):l("",!0),e(m).vitals?(t(),k(Ee,{key:2,"min-tile-width":"10rem",class:"pt-2 border-t"},{default:d(()=>[i(ue,{label:"Largest Contentful Paint (LCP)","value-class":e(m).vitals.lcp==null?"text-gray-400":e(m).vitals.lcp>4e3?"text-red-600":e(m).vitals.lcp>2500?"text-orange-500":"text-green-600"},{default:d(()=>[i(ie,{ms:e(m).vitals.lcp,fallback:"n/a"},null,8,["ms"])]),_:1},8,["value-class"]),i(ue,{label:"Cumulative Layout Shift (CLS)",value:e(m).vitals.cls!=null?String(e(m).vitals.cls):"n/a","value-class":e(m).vitals.cls==null?"text-gray-400":e(m).vitals.cls>.25?"text-red-600":e(m).vitals.cls>.1?"text-orange-500":"text-green-600"},null,8,["value","value-class"]),i(ue,{label:"Interaction to Next Paint (INP)","value-class":e(m).vitals.inp==null?"text-gray-400":e(m).vitals.inp>500?"text-red-600":e(m).vitals.inp>200?"text-orange-500":"text-green-600"},{default:d(()=>[i(ie,{ms:e(m).vitals.inp,fallback:"n/a"},null,8,["ms"])]),_:1},8,["value-class"])]),_:1})):l("",!0),e(m).navigation?.url?(t(),o("div",Xr,[T[8]||(T[8]=g(" Page: ",-1)),n("code",Yr,c(e(m).navigation.url),1)])):l("",!0)])]),_:1})):l("",!0),e(F).length===0&&!e(m)?(t(),k(Ve,{key:2,icon:"i-lucide-gauge",text:"No performance hints or Web Vitals were captured for this execution."},{default:d(()=>[n("p",ei,[T[10]||(T[10]=g(" Web Vitals and timing come from the ",-1)),i(Ot,{to:"capture-fixtures"},{default:d(()=>[...T[9]||(T[9]=[g("capture fixtures",-1)])]),_:1}),T[11]||(T[11]=g(". ",-1))])]),_:1})):l("",!0)])]),"tab-history":d(()=>[n("div",ti,[e(r)&&e(r).length>0?(t(),o("div",si,[n("div",ni,[e(a)?.testCaseId?(t(),k(Ne,{key:0,to:`/test-cases/${e(a).testCaseId}`,size:"xs",variant:"outline",color:"neutral","trailing-icon":"i-lucide-arrow-right"},{default:d(()=>[...T[12]||(T[12]=[g(" View full test history ",-1)])]),_:1},8,["to"])):l("",!0)]),i(Ht,{data:e(r),height:200},null,8,["data"]),i(mt,{"min-width":"44rem",bleed:!1},{default:d(()=>[i(dt,{data:e(r),columns:j,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",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"startTime-cell":d(({row:L})=>[n("span",ai,[n("span",oi,c(new Date(L.original.startTime).toLocaleDateString("en-US",{month:"short",day:"numeric"})),1),n("span",ri,c(new Date(L.original.startTime).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})),1)])]),"status-cell":d(({row:L})=>[i(je,{color:("getStatusColor"in f?f.getStatusColor:e(Hs))(L.original.status),variant:"subtle",class:"capitalize"},{default:d(()=>[g(c(L.original.status),1)]),_:2},1032,["color"])]),"duration-cell":d(({row:L})=>[L.original.duration!==null?(t(),k(ie,{key:0,ms:L.original.duration},null,8,["ms"])):(t(),o("span",ii,"—"))]),"runId-cell":d(({row:L})=>[i(le,{to:`/test-runs/${L.original.runId}`,class:"text-primary hover:underline"},{default:d(()=>[g(" #"+c(L.original.runId),1)]),_:2},1032,["to"])]),"error-cell":d(({row:L})=>[L.original.error?(t(),o("span",{key:0,class:"text-red-600 text-xs truncate max-w-xs block",title:L.original.error},c(L.original.error.length>80?`${L.original.error.substring(0,80)}…`:L.original.error),9,li)):l("",!0)]),_:1},8,["data"])]),_:1})])):(t(),k(Ve,{key:1,icon:"i-lucide-trending-up",text:"No prior executions of this test yet."},{default:d(()=>[...T[13]||(T[13]=[n("p",{class:"text-xs text-gray-400"}," This is the first recorded run. Once it runs again, its status and duration trend appear here. ",-1)])]),_:1}))])]),_:1},8,["modelValue","tab-items"])]),_:1})}}});export{sl as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"
|
|
1
|
+
{"id":"ab473028-4b37-4884-b243-b8f6e5046e5e","timestamp":1785080338123}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"ab473028-4b37-4884-b243-b8f6e5046e5e","timestamp":1785080338123,"prerendered":[]}
|