@piwitests/server 0.15.0 → 0.17.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/{DCCMLWel.js → -9tk1FrT.js} +1 -1
- package/.output/public/_nuxt/26ll_vBr.js +1 -0
- package/.output/public/_nuxt/{BpepjHwc.js → 3QTorEhJ.js} +1 -1
- package/.output/public/_nuxt/{DKTDub7I.js → 3QTvYrZp.js} +1 -1
- package/.output/public/_nuxt/{CHSkT2s0.js → 73aPL7Ir.js} +1 -1
- package/.output/public/_nuxt/8jZmK2De.js +4 -0
- package/.output/public/_nuxt/8xyZSRSO.js +1 -0
- package/.output/public/_nuxt/{V1BQiRoh.js → 99tAfVF5.js} +1 -1
- package/.output/public/_nuxt/{BY0AkhJh.js → B1CUXGbl.js} +1 -1
- package/.output/public/_nuxt/B6hPf4UR.js +1 -0
- package/.output/public/_nuxt/{F07TcX0U.js → B6w76fJT.js} +1 -1
- package/.output/public/_nuxt/{B32-7cBF.js → BDcIWTTq.js} +1 -1
- package/.output/public/_nuxt/{OG2n3p77.js → BE8ykmwr.js} +1 -1
- package/.output/public/_nuxt/{rvaZFYoE.js → BEsJE07U.js} +1 -1
- package/.output/public/_nuxt/{DQpa8F03.js → BGZQONfm.js} +1 -1
- package/.output/public/_nuxt/{DZoSxwj6.js → BRdhP5lm.js} +1 -1
- package/.output/public/_nuxt/{n7Htv9PJ.js → BU6xjw05.js} +1 -1
- package/.output/public/_nuxt/{DvdOsTLb.js → BWFY2RuU.js} +1 -1
- package/.output/public/_nuxt/{60-Zii7v.js → B_QIrc7l.js} +1 -1
- package/.output/public/_nuxt/{CrFCPOnY.js → Ba4_ydKG.js} +1 -1
- package/.output/public/_nuxt/{BfshMo9k.js → BcLXUmKT.js} +2 -2
- package/.output/public/_nuxt/{CD-xwM9N.js → BciovqwK.js} +1 -1
- package/.output/public/_nuxt/{i38YGG9S.js → BgDEjrcz.js} +1 -1
- package/.output/public/_nuxt/{rWwWS3Kj.js → BoRJdCd4.js} +1 -1
- package/.output/public/_nuxt/{O1A-LRgV.js → Bpha13F_.js} +1 -1
- package/.output/public/_nuxt/{2PU-adwy.js → Bq0PQfQY.js} +1 -1
- package/.output/public/_nuxt/{B8fs6GU9.js → BrT_Sys2.js} +31 -31
- package/.output/public/_nuxt/{ETOCcsVw.js → Bua_L6p4.js} +1 -1
- package/.output/public/_nuxt/{nUsJV5qo.js → BwKwWgQe.js} +1 -1
- package/.output/public/_nuxt/{4fB15L_7.js → BxRsAYRS.js} +1 -1
- package/.output/public/_nuxt/{DVdOm5Bg.js → ByoIgYX_.js} +1 -1
- package/.output/public/_nuxt/{Bq2ZPvIH.js → C7nwFokE.js} +1 -1
- package/.output/public/_nuxt/CEuVRSr0.js +3 -0
- package/.output/public/_nuxt/{CokbKVE6.js → CHHqhAsw.js} +1 -1
- package/.output/public/_nuxt/{BBJ9Pu3M.js → CHIbdzqp.js} +1 -1
- package/.output/public/_nuxt/{C9jjVEQU.js → CMB-NkFa.js} +1 -1
- package/.output/public/_nuxt/{CU-OXXdh.js → CNULGfLp.js} +1 -1
- package/.output/public/_nuxt/{Surk4Lw-.js → COVRAesU.js} +1 -1
- package/.output/public/_nuxt/{h-e-Ca3f.js → CSAmL8XJ.js} +1 -1
- package/.output/public/_nuxt/{CHgsEM4U.js → CWmQcueG.js} +1 -1
- package/.output/public/_nuxt/{BgR7oL4p.js → CYuWAvXE.js} +1 -1
- package/.output/public/_nuxt/CbuWynGG.js +1 -0
- package/.output/public/_nuxt/{CIOQo6gB.js → Ce3tBrN7.js} +1 -1
- package/.output/public/_nuxt/{DNP5tTJo.js → Cf4h8qty.js} +1 -1
- package/.output/public/_nuxt/{B9Q_4Mjt.js → Cl96oI21.js} +1 -1
- package/.output/public/_nuxt/{PPFO8UVt.js → ClJkng9p.js} +1 -1
- package/.output/public/_nuxt/{B32ySRXg.js → CoKEjZX7.js} +1 -1
- package/.output/public/_nuxt/CvtYJHkY.js +1 -0
- package/.output/public/_nuxt/{BCK4f6Y3.js → CxLN5Tmq.js} +1 -1
- package/.output/public/_nuxt/{ChWPXucC.js → Cz2HhsB6.js} +1 -1
- package/.output/public/_nuxt/{B_80i5Ge.js → D0-HTQTD.js} +1 -1
- package/.output/public/_nuxt/{CHMpVLqo.js → D13ybpY3.js} +1 -1
- package/.output/public/_nuxt/{CvCF77E-.js → D7P0ML0H.js} +2 -2
- package/.output/public/_nuxt/{BW1UOxWn.js → D811X8KM.js} +1 -1
- package/.output/public/_nuxt/DATh_1DQ.js +1 -0
- package/.output/public/_nuxt/{BEKwVcvQ.js → DAeYmPfX.js} +1 -1
- package/.output/public/_nuxt/DCffDvxl.js +1 -0
- package/.output/public/_nuxt/DDPptydi.js +2 -0
- package/.output/public/_nuxt/{DkFbpSsi.js → DFM2jv9I.js} +1 -1
- package/.output/public/_nuxt/{D4nLD93c.js → DJHNEqb7.js} +1 -1
- package/.output/public/_nuxt/{DaKVSp-6.js → DPSOtRoz.js} +1 -1
- package/.output/public/_nuxt/{DYDGGqZ3.js → DRTxhZBV.js} +1 -1
- package/.output/public/_nuxt/{Cgr8IKY4.js → DS9yGVFL.js} +1 -1
- package/.output/public/_nuxt/{Cfk2_UCm.js → DT5rhzhJ.js} +1 -1
- package/.output/public/_nuxt/{DFw8I2FL.js → DTH2lteW.js} +1 -1
- package/.output/public/_nuxt/DUe6xuKQ.js +1 -0
- package/.output/public/_nuxt/D_A6axXa.js +1 -0
- package/.output/public/_nuxt/D_TbJDHY.js +1 -0
- package/.output/public/_nuxt/{B59-l1Cv.js → Df3QtbpW.js} +1 -1
- package/.output/public/_nuxt/{BkhdAGx0.js → DjRhouSr.js} +1 -1
- package/.output/public/_nuxt/Dn6cGVYB.js +1 -0
- package/.output/public/_nuxt/{0KrkW531.js → DpJrGwCr.js} +2 -2
- package/.output/public/_nuxt/DqsMiUoW.js +2 -0
- package/.output/public/_nuxt/{C7RarFGi.js → Ds2Y3oms.js} +1 -1
- package/.output/public/_nuxt/Ds4Lb1vi.js +7 -0
- package/.output/public/_nuxt/{DWzdeQ3Z.js → DtXREpk_.js} +1 -1
- package/.output/public/_nuxt/{Dejf0f7D.js → DvC5Adg1.js} +3 -3
- package/.output/public/_nuxt/{o5WQ5Z7k.js → DvXvJzFP.js} +1 -1
- package/.output/public/_nuxt/{DAeYEeCC.js → Dvc1aWpA.js} +1 -1
- package/.output/public/_nuxt/{DzbOHjZH.js → DwZiG9xH.js} +1 -1
- package/.output/public/_nuxt/Dx1oCMgy.js +47 -0
- package/.output/public/_nuxt/{BGsuOpiq.js → DxQq_L07.js} +1 -1
- package/.output/public/_nuxt/{CqA3gM8h.js → Dym66h3p.js} +1 -1
- package/.output/public/_nuxt/{CNzoIhwN.js → Dz3Wbekz.js} +1 -1
- package/.output/public/_nuxt/HCK35QD8.js +1 -0
- package/.output/public/_nuxt/{Cpquifvd.js → L6HlmmEa.js} +1 -1
- package/.output/public/_nuxt/{BMQIO38j.js → PxPbRVF-.js} +1 -1
- package/.output/public/_nuxt/{DiUGa0CT.js → QFMx1VKs.js} +1 -1
- package/.output/public/_nuxt/{DHVmXA9K.js → Sgf5OLhm.js} +1 -1
- package/.output/public/_nuxt/US3YSX4T.js +1 -0
- package/.output/public/_nuxt/{DZLrAp2i.js → Wfk1m0ni.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/05a2dd95-d1c1-4e3a-8625-ac6bfea83837.json +1 -0
- package/.output/public/_nuxt/{too3WhRB.js → cBj9fai9.js} +1 -1
- package/.output/public/_nuxt/{DxXZN6ed.js → csqspBeX.js} +1 -1
- package/.output/public/_nuxt/entry.BaIGwMjT.css +1 -0
- package/.output/public/_nuxt/{__m3KqHO.js → jlBi8Byu.js} +1 -1
- package/.output/public/_nuxt/{Dv2B_nw_.js → lCkcEykv.js} +1 -1
- package/.output/public/_nuxt/qYFZH4Z8.js +34 -0
- package/.output/public/_nuxt/{3SnTawZW.js → r3SBLxtE.js} +1 -1
- package/.output/public/_nuxt/{DI_-kFec.js → r9WApUfF.js} +1 -1
- package/.output/public/_nuxt/{BC_Wu-fv.js → rw7Hdll3.js} +1 -1
- package/.output/public/_nuxt/{IdQR_Djw.js → sMFaPAAR.js} +1 -1
- package/.output/public/_nuxt/{CKZn0TUX.js → vzXhOO8R.js} +1 -1
- package/.output/public/_nuxt/{CFn3w5jn.js → yZ4LuI9d.js} +1 -1
- package/.output/public/_nuxt/{BtJkQ3to.js → z7PmsnBG.js} +1 -1
- package/.output/public/_nuxt/{lRMjXqiA.js → za5M7BGh.js} +1 -1
- package/.output/public/demo/seed.version.json +2 -2
- package/.output/public/sw.js +1 -1
- package/.output/server/chunks/_/markers.mjs +1 -1
- package/.output/server/chunks/_/users.mjs +1 -1
- package/.output/server/chunks/build/{BrowserBadge-BTA4QU_J.mjs → BrowserBadge-DNCp9pF-.mjs} +3 -3
- package/.output/server/chunks/build/BrowserBadge-DNCp9pF-.mjs.map +1 -0
- package/.output/server/chunks/build/{ChartCard-BqAhMip2.mjs → ChartCard-Fr557IbV.mjs} +2 -2
- package/.output/server/chunks/build/ChartCard-Fr557IbV.mjs.map +1 -0
- package/.output/server/chunks/build/{Checkbox-_1nGm_DR.mjs → Checkbox-cVOSIY93.mjs} +6 -6
- package/.output/server/chunks/build/Checkbox-cVOSIY93.mjs.map +1 -0
- package/.output/server/chunks/build/{CiEnvCard-DAufYuJw.mjs → CiEnvCard-DXPOhdSG.mjs} +5 -5
- package/.output/server/chunks/build/CiEnvCard-DXPOhdSG.mjs.map +1 -0
- package/.output/server/chunks/build/{CodeBlock-BVKHuYjU.mjs → CodeBlock-BGwNmJ8J.mjs} +2 -2
- package/.output/server/chunks/build/CodeBlock-BGwNmJ8J.mjs.map +1 -0
- package/.output/server/chunks/build/{DashboardNavbar-BR6j4VLd.mjs → DashboardNavbar-Bdp-OwTN.mjs} +2 -2
- package/.output/server/chunks/build/DashboardNavbar-Bdp-OwTN.mjs.map +1 -0
- package/.output/server/chunks/build/DashboardSidebarToggle-Ji6ADuqF.mjs +1 -1
- package/.output/server/chunks/build/DataLocationCard-D6xSOrme.mjs +102 -0
- package/.output/server/chunks/build/DataLocationCard-D6xSOrme.mjs.map +1 -0
- package/.output/server/chunks/build/DesktopMcpCard-B4JuUTKj.mjs +122 -0
- package/.output/server/chunks/build/DesktopMcpCard-B4JuUTKj.mjs.map +1 -0
- package/.output/server/chunks/build/{DiagnosisPanel-BnrdXDvd.mjs → DiagnosisPanel-DV1xwGu4.mjs} +6 -6
- package/.output/server/chunks/build/DiagnosisPanel-DV1xwGu4.mjs.map +1 -0
- package/.output/server/chunks/build/EntityLinks-DeOP13Kr.mjs +1 -1
- package/.output/server/chunks/build/{EnvManagedBadge-DdnEtjIl.mjs → EnvManagedBadge-Qpn58Nmr.mjs} +5 -5
- package/.output/server/chunks/build/EnvManagedBadge-Qpn58Nmr.mjs.map +1 -0
- package/.output/server/chunks/build/{HelpHint-D_GJzMpW.mjs → HelpHint-YEMWtKu1.mjs} +18 -2
- package/.output/server/chunks/build/HelpHint-YEMWtKu1.mjs.map +1 -0
- package/.output/server/chunks/build/{Modal-COIjm3js.mjs → Modal-CfA78Hm1.mjs} +2 -2
- package/.output/server/chunks/build/Modal-CfA78Hm1.mjs.map +1 -0
- package/.output/server/chunks/build/{OpenInIdeLink-D97W6On1.mjs → OpenInIdeLink-B92wosXu.mjs} +3 -3
- package/.output/server/chunks/build/{OpenInIdeLink-D97W6On1.mjs.map → OpenInIdeLink-B92wosXu.mjs.map} +1 -1
- package/.output/server/chunks/build/{PageStateCard-C1HFN4Nv.mjs → PageStateCard-Bwee6JTk.mjs} +10 -10
- package/.output/server/chunks/build/{PageStateCard-C1HFN4Nv.mjs.map → PageStateCard-Bwee6JTk.mjs.map} +1 -1
- package/.output/server/chunks/build/{ProjectTestCasesTable-XFBPQGIX.mjs → ProjectTestCasesTable-9Ia825h8.mjs} +9 -9
- package/.output/server/chunks/build/ProjectTestCasesTable-9Ia825h8.mjs.map +1 -0
- package/.output/server/chunks/build/{RunReports-ChNkmuWa.mjs → RunReports-BpJqLHY9.mjs} +2 -2
- package/.output/server/chunks/build/RunReports-BpJqLHY9.mjs.map +1 -0
- package/.output/server/chunks/build/{RunStatusBadge-CXpuCUGQ.mjs → RunStatusBadge-BhmJ_RKM.mjs} +2 -2
- package/.output/server/chunks/build/RunStatusBadge-BhmJ_RKM.mjs.map +1 -0
- package/.output/server/chunks/build/{SectionCard-zs9FDzps.mjs → SectionCard-COd9TuDq.mjs} +2 -2
- package/.output/server/chunks/build/SectionCard-COd9TuDq.mjs.map +1 -0
- package/.output/server/chunks/build/{Select-r3S5nkSY.mjs → Select-ppPz926C.mjs} +5 -4
- package/.output/server/chunks/build/Select-ppPz926C.mjs.map +1 -0
- package/.output/server/chunks/build/{SelectMenu-Dk6f8i9o.mjs → SelectMenu-799c_Ils.mjs} +4 -4
- package/.output/server/chunks/build/{SelectMenu-Dk6f8i9o.mjs.map → SelectMenu-799c_Ils.mjs.map} +1 -1
- package/.output/server/chunks/build/{Separator-pqpPG0up.mjs → Separator-CxZdx8kw.mjs} +2 -2
- package/.output/server/chunks/build/Separator-CxZdx8kw.mjs.map +1 -0
- package/.output/server/chunks/build/{SettingsField-Wdpzlt13.mjs → SettingsField-DDD4oqys.mjs} +5 -5
- package/.output/server/chunks/build/SettingsField-DDD4oqys.mjs.map +1 -0
- package/.output/server/chunks/build/{Slideover-02XjJjn0.mjs → Slideover-B95Rj237.mjs} +3 -3
- package/.output/server/chunks/build/Slideover-B95Rj237.mjs.map +1 -0
- package/.output/server/chunks/build/{Switch-gx_JXgCo.mjs → Switch-xQQ3_ME1.mjs} +3 -3
- package/.output/server/chunks/build/Switch-xQQ3_ME1.mjs.map +1 -0
- package/.output/server/chunks/build/{Table-C64RrBp3.mjs → Table-CPhhVzDv.mjs} +3 -3
- package/.output/server/chunks/build/Table-CPhhVzDv.mjs.map +1 -0
- package/.output/server/chunks/build/{TestStatusBar--u4VX_Xf.mjs → TestStatusBar-CEzt76wk.mjs} +2 -2
- package/.output/server/chunks/build/TestStatusBar-CEzt76wk.mjs.map +1 -0
- package/.output/server/chunks/build/{Tooltip-ui_BVvqr.mjs → Tooltip-7vwuDPrZ.mjs} +3 -3
- package/.output/server/chunks/build/Tooltip-7vwuDPrZ.mjs.map +1 -0
- package/.output/server/chunks/build/{VisuallyHiddenInput-mMsqmkjz.mjs → VisuallyHiddenInput-C9eJVpPW.mjs} +2 -2
- package/.output/server/chunks/build/VisuallyHiddenInput-C9eJVpPW.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-R6KGfZOC.mjs → _id_-B2yirIuA.mjs} +259 -85
- package/.output/server/chunks/build/_id_-B2yirIuA.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-CFVnSs8B.mjs → _id_-B4V5fop6.mjs} +21 -19
- package/.output/server/chunks/build/{_id_-CFVnSs8B.mjs.map → _id_-B4V5fop6.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-pkxJKe17.mjs → _id_-CE0Gso6i.mjs} +11 -11
- package/.output/server/chunks/build/_id_-CE0Gso6i.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-DXJQABO8.mjs → _id_-bWcP2xFl.mjs} +27 -26
- package/.output/server/chunks/build/{_id_-DXJQABO8.mjs.map → _id_-bWcP2xFl.mjs.map} +1 -1
- package/.output/server/chunks/build/about-TuEZ9n1Q.mjs +625 -0
- package/.output/server/chunks/build/about-TuEZ9n1Q.mjs.map +1 -0
- package/.output/server/chunks/build/{account-AbLuwiZP.mjs → account-Cn-eZqXM.mjs} +4 -4
- package/.output/server/chunks/build/account-Cn-eZqXM.mjs.map +1 -0
- package/.output/server/chunks/build/{ai-DR_slopS.mjs → ai-7jdaPOmj.mjs} +19 -18
- package/.output/server/chunks/build/ai-7jdaPOmj.mjs.map +1 -0
- package/.output/server/chunks/build/{analytics-BbT2-Tr-.mjs → analytics-B276WPeU.mjs} +237 -65
- package/.output/server/chunks/build/analytics-B276WPeU.mjs.map +1 -0
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/{db.client-DlA_u5y9.mjs → db.client-aHcD0wyX.mjs} +47 -22
- package/.output/server/chunks/build/db.client-aHcD0wyX.mjs.map +1 -0
- package/.output/server/chunks/build/{default-D6diRCW0.mjs → default-BSzdkM_L.mjs} +20 -17
- package/.output/server/chunks/build/default-BSzdkM_L.mjs.map +1 -0
- package/.output/server/chunks/build/{docs-DbYoZafk.mjs → docs-EXhN3sqC.mjs} +7 -6
- package/.output/server/chunks/build/{docs-DbYoZafk.mjs.map → docs-EXhN3sqC.mjs.map} +1 -1
- package/.output/server/chunks/build/{edit-CNV4xdYj.mjs → edit-C9Z7oZeu.mjs} +10 -9
- package/.output/server/chunks/build/edit-C9Z7oZeu.mjs.map +1 -0
- package/.output/server/chunks/build/fetch-8kznMtBM.mjs +1 -1
- package/.output/server/chunks/build/handleAndDispatchCustomEvent-Bk_AVSSo.mjs +13 -0
- package/.output/server/chunks/build/handleAndDispatchCustomEvent-Bk_AVSSo.mjs.map +1 -0
- package/.output/server/chunks/build/{help-content-BMumoQQF.mjs → help-content-DmFnuhNu.mjs} +6 -1
- package/.output/server/chunks/build/help-content-DmFnuhNu.mjs.map +1 -0
- package/.output/server/chunks/build/{index-C3Ou18qD.mjs → index-BK9PTRpd.mjs} +34 -18
- package/.output/server/chunks/build/{index-C3Ou18qD.mjs.map → index-BK9PTRpd.mjs.map} +1 -1
- package/.output/server/chunks/build/{index-Dw526KXV.mjs → index-BR9hw6qk.mjs} +10 -10
- package/.output/server/chunks/build/index-BR9hw6qk.mjs.map +1 -0
- package/.output/server/chunks/build/{index-dwYB76GO.mjs → index-Ba-Fifra.mjs} +4 -4
- package/.output/server/chunks/build/index-Ba-Fifra.mjs.map +1 -0
- package/.output/server/chunks/build/{index-DmHBPf7T.mjs → index-CULN3-en.mjs} +11 -2
- package/.output/server/chunks/build/index-CULN3-en.mjs.map +1 -0
- package/.output/server/chunks/build/{index-rSHkKNna.mjs → index-DVUtBexc.mjs} +507 -85
- package/.output/server/chunks/build/index-DVUtBexc.mjs.map +1 -0
- package/.output/server/chunks/build/{isValueEqualOrExist-DTJ5ejZs.mjs → isValueEqualOrExist-DBZjbD_3.mjs} +3 -3
- package/.output/server/chunks/build/isValueEqualOrExist-DBZjbD_3.mjs.map +1 -0
- package/.output/server/chunks/build/{login-Da5C8jP2.mjs → login-D2XZDuek.mjs} +3 -3
- package/.output/server/chunks/build/login-D2XZDuek.mjs.map +1 -0
- package/.output/server/chunks/build/{mcp-DM1t-9L_.mjs → mcp-CQ-21rwc.mjs} +138 -31
- package/.output/server/chunks/build/mcp-CQ-21rwc.mjs.map +1 -0
- package/.output/server/chunks/build/{notifications-BTPF0xA7.mjs → notifications-Dzm9c0u_.mjs} +13 -12
- package/.output/server/chunks/build/notifications-Dzm9c0u_.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +37 -28
- package/.output/server/chunks/build/{settings-metadata-CksLgMun.mjs → settings-metadata-B0wo5R-W.mjs} +14 -3
- package/.output/server/chunks/build/settings-metadata-B0wo5R-W.mjs.map +1 -0
- package/.output/server/chunks/build/{settings-Bmw_JdBS.mjs → settings-pNyPBXVa.mjs} +9 -7
- package/.output/server/chunks/build/settings-pNyPBXVa.mjs.map +1 -0
- package/.output/server/chunks/build/{storage-BqR4acgi.mjs → storage-XelzuyPy.mjs} +23 -12
- package/.output/server/chunks/build/storage-XelzuyPy.mjs.map +1 -0
- package/.output/server/chunks/build/{tags-miPAzIr3.mjs → tags-DrCQ7QSw.mjs} +6 -6
- package/.output/server/chunks/build/tags-DrCQ7QSw.mjs.map +1 -0
- package/.output/server/chunks/build/{test-cases-D-LqhLpk.mjs → test-cases-pmOxi-AN.mjs} +16 -15
- package/.output/server/chunks/build/test-cases-pmOxi-AN.mjs.map +1 -0
- package/.output/server/chunks/build/timeout-hygiene-CNs71Iah.mjs +318 -0
- package/.output/server/chunks/build/timeout-hygiene-CNs71Iah.mjs.map +1 -0
- package/.output/server/chunks/build/{useAiStatus-FwqbA4gz.mjs → useAiStatus-ZO987RY7.mjs} +8 -7
- package/.output/server/chunks/build/useAiStatus-ZO987RY7.mjs.map +1 -0
- package/.output/server/chunks/build/useFormControl-BLpq1s4O.mjs +9 -0
- package/.output/server/chunks/build/useFormControl-BLpq1s4O.mjs.map +1 -0
- package/.output/server/chunks/build/useIsDesktop-BS13spVj.mjs +9 -0
- package/.output/server/chunks/build/useIsDesktop-BS13spVj.mjs.map +1 -0
- package/.output/server/chunks/build/{useSettingsNav-v_dFuTw9.mjs → useSettingsNav-NjI2seBy.mjs} +9 -7
- package/.output/server/chunks/build/useSettingsNav-NjI2seBy.mjs.map +1 -0
- package/.output/server/chunks/build/{users-D-GDKZmZ.mjs → users-NmAUZs3i.mjs} +6 -6
- package/.output/server/chunks/build/users-NmAUZs3i.mjs.map +1 -0
- package/.output/server/chunks/build/{virtualizer-BcC1XuFf.mjs → virtualizer-ZaqK4guJ.mjs} +6 -5
- package/.output/server/chunks/build/virtualizer-ZaqK4guJ.mjs.map +1 -0
- package/.output/server/chunks/build/{wasted-time-CFmeT_e2.mjs → wasted-time-CguAF9zc.mjs} +8 -8
- package/.output/server/chunks/build/wasted-time-CguAF9zc.mjs.map +1 -0
- package/.output/server/chunks/nitro/nitro.mjs +1009 -722
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/__piwi/session.get.mjs +51 -0
- package/.output/server/chunks/routes/__piwi/session.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/admin/stats.get.mjs +5 -1
- package/.output/server/chunks/routes/api/admin/stats.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +75 -6
- package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/change-password.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/login.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/logout.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/me.get.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/reset-password.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/setup.get.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/setup.post.mjs +1 -1
- package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +1 -1
- package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +1 -1
- package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +1 -1
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +1 -1
- package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs +45 -0
- package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/files/_...path_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/index.get2.mjs +1 -1
- package/.output/server/chunks/routes/api/index.get3.mjs +1 -1
- package/.output/server/chunks/routes/api/index.get4.mjs +1 -1
- package/.output/server/chunks/routes/api/index.get5.mjs +1 -1
- package/.output/server/chunks/routes/api/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/index.post2.mjs +1 -1
- package/.output/server/chunks/routes/api/index.post3.mjs +1 -1
- package/.output/server/chunks/routes/api/index.post4.mjs +1 -1
- package/.output/server/chunks/routes/api/index.post5.mjs +1 -1
- package/.output/server/chunks/routes/api/index.post6.mjs +1 -1
- package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +1 -1
- package/.output/server/chunks/routes/api/links/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/links/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/markers/_id_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/notifications/stream.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/members.put.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +50 -0
- package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/menu.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects/overview.get.mjs +1 -1
- package/.output/server/chunks/routes/api/projects.get.mjs +1 -1
- package/.output/server/chunks/routes/api/search.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/ai.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/ai.put.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/smtp.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +40 -0
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +46 -0
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs.map +1 -0
- package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +1 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +1 -1
- package/.output/server/chunks/routes/api/stream.get.mjs +1 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/tags/_id_.put.mjs +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/start.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +3 -1
- package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +2 -1
- package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/traces/check.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id/index.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id_.patch.mjs +1 -1
- package/.output/server/chunks/routes/api/version.get.mjs +1 -1
- package/.output/server/chunks/routes/mcp.post.mjs +1 -1
- package/.output/server/chunks/routes/renderer.mjs +1 -1
- package/.output/server/database/migrations/0037_tired_hellion.sql +1 -0
- package/.output/server/database/migrations/0038_glamorous_ulik.sql +1 -0
- package/.output/server/database/migrations/meta/0037_snapshot.json +3384 -0
- package/.output/server/database/migrations/meta/0038_snapshot.json +3391 -0
- package/.output/server/database/migrations/meta/_journal.json +14 -0
- package/.output/server/database/migrations-pg/0038_tranquil_moira_mactaggert.sql +1 -0
- package/.output/server/database/migrations-pg/0039_fat_starjammers.sql +1 -0
- package/.output/server/database/migrations-pg/meta/0038_snapshot.json +4027 -0
- package/.output/server/database/migrations-pg/meta/0039_snapshot.json +4033 -0
- package/.output/server/database/migrations-pg/meta/_journal.json +14 -0
- package/.output/server/index.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/package.json +1 -1
- package/.output/public/_nuxt/2kfkdDTz.js +0 -1
- package/.output/public/_nuxt/BXEDsEwG.js +0 -1
- package/.output/public/_nuxt/BbgBGuMG.js +0 -1
- package/.output/public/_nuxt/CBrCcDzR.js +0 -1
- package/.output/public/_nuxt/CFXonrwQ.js +0 -3
- package/.output/public/_nuxt/CJGJI2Of.js +0 -34
- package/.output/public/_nuxt/Ce4EdfL_.js +0 -4
- package/.output/public/_nuxt/Cf3RuiXF.js +0 -46
- package/.output/public/_nuxt/CkpB9oBr.js +0 -1
- package/.output/public/_nuxt/D1tZEdSi.js +0 -1
- package/.output/public/_nuxt/DK9uMTYX.js +0 -1
- package/.output/public/_nuxt/DgZlpN9l.js +0 -1
- package/.output/public/_nuxt/DjCfCT_5.js +0 -1
- package/.output/public/_nuxt/YDWXnWou.js +0 -1
- package/.output/public/_nuxt/builds/meta/f549de31-8db6-4504-b526-482778a55eba.json +0 -1
- package/.output/public/_nuxt/entry.BxXHl1Vy.css +0 -1
- package/.output/public/_nuxt/evCxpgbd.js +0 -2
- package/.output/public/_nuxt/wCQds5_f.js +0 -1
- package/.output/server/chunks/build/BrowserBadge-BTA4QU_J.mjs.map +0 -1
- package/.output/server/chunks/build/ChartCard-BqAhMip2.mjs.map +0 -1
- package/.output/server/chunks/build/Checkbox-_1nGm_DR.mjs.map +0 -1
- package/.output/server/chunks/build/CiEnvCard-DAufYuJw.mjs.map +0 -1
- package/.output/server/chunks/build/CodeBlock-BVKHuYjU.mjs.map +0 -1
- package/.output/server/chunks/build/DashboardNavbar-BR6j4VLd.mjs.map +0 -1
- package/.output/server/chunks/build/DiagnosisPanel-BnrdXDvd.mjs.map +0 -1
- package/.output/server/chunks/build/EnvManagedBadge-DdnEtjIl.mjs.map +0 -1
- package/.output/server/chunks/build/HelpHint-D_GJzMpW.mjs.map +0 -1
- package/.output/server/chunks/build/Modal-COIjm3js.mjs.map +0 -1
- package/.output/server/chunks/build/ProjectTestCasesTable-XFBPQGIX.mjs.map +0 -1
- package/.output/server/chunks/build/RunReports-ChNkmuWa.mjs.map +0 -1
- package/.output/server/chunks/build/RunStatusBadge-CXpuCUGQ.mjs.map +0 -1
- package/.output/server/chunks/build/SectionCard-zs9FDzps.mjs.map +0 -1
- package/.output/server/chunks/build/Select-r3S5nkSY.mjs.map +0 -1
- package/.output/server/chunks/build/Separator-pqpPG0up.mjs.map +0 -1
- package/.output/server/chunks/build/SettingsField-Wdpzlt13.mjs.map +0 -1
- package/.output/server/chunks/build/Slideover-02XjJjn0.mjs.map +0 -1
- package/.output/server/chunks/build/Switch-gx_JXgCo.mjs.map +0 -1
- package/.output/server/chunks/build/Table-C64RrBp3.mjs.map +0 -1
- package/.output/server/chunks/build/TestStatusBar--u4VX_Xf.mjs.map +0 -1
- package/.output/server/chunks/build/Tooltip-ui_BVvqr.mjs.map +0 -1
- package/.output/server/chunks/build/VisuallyHiddenInput-mMsqmkjz.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-R6KGfZOC.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-pkxJKe17.mjs.map +0 -1
- package/.output/server/chunks/build/about-CmtGYbC6.mjs +0 -313
- package/.output/server/chunks/build/about-CmtGYbC6.mjs.map +0 -1
- package/.output/server/chunks/build/account-AbLuwiZP.mjs.map +0 -1
- package/.output/server/chunks/build/ai-DR_slopS.mjs.map +0 -1
- package/.output/server/chunks/build/analytics-BbT2-Tr-.mjs.map +0 -1
- package/.output/server/chunks/build/db.client-DlA_u5y9.mjs.map +0 -1
- package/.output/server/chunks/build/default-D6diRCW0.mjs.map +0 -1
- package/.output/server/chunks/build/edit-CNV4xdYj.mjs.map +0 -1
- package/.output/server/chunks/build/help-content-BMumoQQF.mjs.map +0 -1
- package/.output/server/chunks/build/index-DmHBPf7T.mjs.map +0 -1
- package/.output/server/chunks/build/index-Dw526KXV.mjs.map +0 -1
- package/.output/server/chunks/build/index-dwYB76GO.mjs.map +0 -1
- package/.output/server/chunks/build/index-rSHkKNna.mjs.map +0 -1
- package/.output/server/chunks/build/isValueEqualOrExist-DTJ5ejZs.mjs.map +0 -1
- package/.output/server/chunks/build/login-Da5C8jP2.mjs.map +0 -1
- package/.output/server/chunks/build/mcp-DM1t-9L_.mjs.map +0 -1
- package/.output/server/chunks/build/notifications-BTPF0xA7.mjs.map +0 -1
- package/.output/server/chunks/build/settings-Bmw_JdBS.mjs.map +0 -1
- package/.output/server/chunks/build/settings-metadata-CksLgMun.mjs.map +0 -1
- package/.output/server/chunks/build/storage-BqR4acgi.mjs.map +0 -1
- package/.output/server/chunks/build/tags-miPAzIr3.mjs.map +0 -1
- package/.output/server/chunks/build/test-cases-D-LqhLpk.mjs.map +0 -1
- package/.output/server/chunks/build/useAiStatus-FwqbA4gz.mjs.map +0 -1
- package/.output/server/chunks/build/useFormControl-DFTjniPG.mjs +0 -19
- package/.output/server/chunks/build/useFormControl-DFTjniPG.mjs.map +0 -1
- package/.output/server/chunks/build/useSettingsNav-v_dFuTw9.mjs.map +0 -1
- package/.output/server/chunks/build/users-D-GDKZmZ.mjs.map +0 -1
- package/.output/server/chunks/build/virtualizer-BcC1XuFf.mjs.map +0 -1
- package/.output/server/chunks/build/wasted-time-CFmeT_e2.mjs.map +0 -1
package/.output/nitro.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as W}from"./
|
|
1
|
+
import{_ as W}from"./BDcIWTTq.js";import{_ as X}from"./B1CUXGbl.js";import{_ as Y}from"./BwKwWgQe.js";import{_ as Z,a as tt}from"./CMB-NkFa.js";import{_ as et}from"./Bq0PQfQY.js";import{d as st,u as at,w as C,B as ot,e as nt,f as m,g as a,h as D,o as r,i,t as l,k as t,q as d,c as u,j as o,s as rt,m as _,x as it,_ as lt,F as T,y as w,p as ct,v as ut,r as dt,n as _t}from"./BrT_Sys2.js";import{_ as mt,a as pt}from"./DS9yGVFL.js";import{_ as ft}from"./B6hPf4UR.js";import{_ as gt}from"./DRTxhZBV.js";import{_ as ht}from"./CHHqhAsw.js";import{_ as yt}from"./DTH2lteW.js";import{_ as xt}from"./DJHNEqb7.js";import{_ as vt}from"./Wfk1m0ni.js";import{_ as kt}from"./CHIbdzqp.js";import{_ as bt}from"./3QTorEhJ.js";import{h as S,f as $t,i as Rt}from"./D7P0ML0H.js";import{u as I}from"./Dvc1aWpA.js";import"./z7PmsnBG.js";import"./BE8ykmwr.js";import"./za5M7BGh.js";import"./DtXREpk_.js";import"./r3SBLxtE.js";import"./Bua_L6p4.js";import"./BGZQONfm.js";import"./D7W_4Sqc.js";import"./D811X8KM.js";import"./BxRsAYRS.js";import"./CoKEjZX7.js";const jt={class:"flex flex-col gap-4 p-4"},Ct={class:"flex items-start gap-4 flex-wrap"},Dt={class:"flex-1 min-w-0"},Tt={class:"text-xl font-bold truncate"},wt={key:1,class:"flex items-center gap-2 mt-2"},St={key:0,class:"grid grid-cols-1 lg:grid-cols-2 gap-4"},It={class:"flex items-center gap-1 flex-wrap max-h-[200px] overflow-y-auto py-1"},zt={key:0,class:"text-sm text-gray-400"},Lt={key:1,class:"text-center py-6 text-gray-400"},Nt={class:"text-xs whitespace-nowrap"},Ut={class:"text-gray-500"},Pt={class:"text-gray-400 ml-1"},Et={key:0},Bt={key:1,class:"text-gray-400"},Ft=["title"],At={class:"flex justify-end"},Kt={class:"space-y-2"},Vt={class:"flex items-center gap-2 min-w-0"},Ht={class:"text-sm truncate"},Mt={key:0,class:"text-xs text-gray-400 shrink-0"},be=st({__name:"[id]",async setup(Ot){let p,y;const h=at().params.id,{data:s,refresh:z}=([p,y]=C(()=>I(`/api/test-cases/${h}`,"$lGxJwg8IQ6")),p=await p,y(),p),{data:f}=([p,y]=C(()=>I(`/api/test-cases/${h}/history`,"$6RWgXFRP_s")),p=await p,y(),p),R=dt([]);ot(()=>s.value?.project?.id,async n=>{if(n)try{R.value=(await $fetch(`/api/projects/${n}/markers`)).markers??[]}catch{}},{immediate:!0});function L(){const n=s.value?.project?.id;n&&_t(`/projects/${n}?tab=timeline`)}nt(D(()=>({title:`${s.value?.title||`Test case #${h}`} — Piwi Dashboard`})));const x=D(()=>{const n=s.value;return!n||!n.totalRuns?null:Math.round((n.passedRuns+n.skippedRuns)/n.totalRuns*100)}),N=n=>n==="open"?"error":n==="resolved"?"success":"neutral",U=[{accessorKey:"startTime",header:"Date"},{accessorKey:"status",header:"Status"},{accessorKey:"duration",header:"Duration"},{accessorKey:"retries",header:"Retries"},{accessorKey:"runId",header:"Run"},{accessorKey:"error",header:"Error"},{id:"actions",header:"Actions"}];return(n,c)=>{const P=W,E=X,B=Y,F=tt,A=et,v=rt,k=lt,b=it,g=pt,K=ft,V=mt,H=gt,j=ht,M=yt,O=ut,G=xt,q=vt,$=kt,J=bt,Q=Z;return r(),m(Q,{id:"test-case-evolution"},{header:a(()=>[o(F,null,{leading:a(()=>[o(P),o(E,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},...t(s)?.project?.id?[{label:t(s).project.name||"Project",to:`/projects/${t(s).project.id}`}]:[{label:"Project"}],{label:t(s)?.title||`Test case #${t(h)}`}]},null,8,["items"])]),right:a(()=>[o(B,{actions:[{label:"Refresh",icon:"i-lucide-refresh-cw",onClick:()=>t(z)()}]},null,8,["actions"])]),_:1})]),body:a(()=>[i("div",jt,[i("div",Ct,[i("div",Dt,[i("h1",Tt,l(t(s)?.title),1),t(s)?.filePath?(r(),m(A,{key:0,"file-path":t(s).filePath,"project-key":t(s)?.project?.id,"project-name":t(s)?.project?.name,class:"text-sm text-gray-500 mt-0.5"},null,8,["file-path","project-key","project-name"])):d("",!0),t(s)?.project?(r(),u("div",wt,[o(v,{color:"neutral",variant:"soft",size:"xs",class:"font-mono"},{default:a(()=>[_(l(t(s).project.name),1)]),_:1}),t(s)?.flakyRuns>0?(r(),m(v,{key:0,color:"warning",variant:"soft",size:"xs"},{default:a(()=>[_(l(t(s).flakyRuns)+" flaky run"+l(t(s).flakyRuns===1?"":"s"),1)]),_:1})):d("",!0)])):d("",!0)]),t(s)?.lastExecutionId?(r(),m(b,{key:0,to:`/test-run-cases/${t(s).lastExecutionId}`,class:"shrink-0"},{default:a(()=>[o(k,{size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:a(()=>[...c[0]||(c[0]=[_(" Latest execution ",-1)])]),_:1})]),_:1},8,["to"])):d("",!0)]),o(V,null,{default:a(()=>[o(g,{label:"Total runs",value:t(s)?.totalRuns??0},null,8,["value"]),o(g,{label:"Pass rate",value:t(x)!==null?`${t(x)}%`:"—","value-class":(t(x)??0)>=80?"text-green-600":(t(x)??0)>=50?"text-yellow-600":"text-red-600"},null,8,["value","value-class"]),o(g,{label:"Failed",value:t(s)?.failedRuns??0,"value-class":"text-red-600"},null,8,["value"]),o(g,{label:"Avg duration",value:t(s)?.avgDuration!=null?("formatDuration"in n?n.formatDuration:t(S))(t(s).avgDuration):"—"},null,8,["value"]),o(g,{label:"Flaky",value:t(s)?.flakyRuns??0,"value-class":(t(s)?.flakyRuns??0)>0?"text-purple-600":""},{label:a(()=>[c[1]||(c[1]=_(" Flaky ",-1)),o(K,{topic:"case.flaky-count"})]),_:1},8,["value","value-class"]),o(g,{label:"Last run",size:"sm",value:t(s)?.lastRunAt?("formatRelativeTime"in n?n.formatRelativeTime:t($t))(t(s).lastRunAt):"—"},null,8,["value"])]),_:1}),t(f)&&t(f).length>1?(r(),u("div",St,[o(j,{title:"Duration trend",icon:"i-lucide-trending-up",help:"case.history-chart"},{default:a(()=>[o(H,{data:t(f),height:200,markers:t(R),onMarkerClick:L},null,8,["data","markers"])]),_:1}),o(j,{title:"Status history",icon:"i-lucide-check-circle",help:"case.sparkline"},{default:a(()=>[i("div",It,[(r(!0),u(T,null,w(t(f),(e,qt)=>(r(),m(M,{key:e.id,text:`Run #${e.runId}: ${e.status} — ${new Date(e.startTime).toLocaleDateString("en-US",{month:"short",day:"numeric"})}`},{default:a(()=>[o(b,{to:`/test-run-cases/${e.id}`,class:ct([{"bg-red-500 hover:bg-red-600":e.status==="failed"||e.status==="timedOut","bg-green-500 hover:bg-green-600":e.status==="passed","bg-yellow-500 hover:bg-yellow-600":e.status==="skipped","bg-gray-400 hover:bg-gray-500":!["passed","failed","skipped","timedOut"].includes(e.status)},"size-3.5 rounded-sm inline-block transition-colors"]),title:`Run #${e.runId}: ${e.status}`},null,8,["to","class","title"])]),_:2},1032,["text"]))),128)),t(f).length===0?(r(),u("span",zt,"No history yet")):d("",!0)])]),_:1})])):t(f)&&t(f).length<=1?(r(),u("div",Lt,[o(O,{name:"i-lucide-trending-up",class:"size-6 mx-auto mb-1"}),c[2]||(c[2]=i("p",{class:"text-sm"},"Need at least 2 runs to show trends.",-1))])):d("",!0),o($,{icon:"i-lucide-list-checks",title:`Recent executions (${t(s)?.recentExecutions?.length??0})`},{default:a(()=>[t(s)?.recentExecutions?.length?(r(),m(G,{key:0,data:t(s).recentExecutions,columns:U,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"}},{"startTime-cell":a(({row:e})=>[i("span",Nt,[i("span",Ut,l(new Date(e.original.startTime).toLocaleDateString("en-US",{month:"short",day:"numeric"})),1),i("span",Pt,l(new Date(e.original.startTime).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})),1)])]),"status-cell":a(({row:e})=>[o(v,{color:("getStatusColor"in n?n.getStatusColor:t(Rt))(e.original.status),class:"capitalize"},{default:a(()=>[_(l(e.original.status),1)]),_:2},1032,["color"])]),"duration-cell":a(({row:e})=>[e.original.duration!==null?(r(),u("span",Et,l(("formatDuration"in n?n.formatDuration:t(S))(e.original.duration)),1)):(r(),u("span",Bt,"—"))]),"retries-cell":a(({row:e})=>[_(l(e.original.retries&&e.original.retries>0?e.original.retries:""),1)]),"runId-cell":a(({row:e})=>[o(b,{to:`/test-runs/${e.original.runId}`,class:"text-primary hover:underline"},{default:a(()=>[_(l(e.original.runLabel?`${e.original.runLabel} (#${e.original.runId})`:`#${e.original.runId}`),1)]),_:2},1032,["to"])]),"error-cell":a(({row:e})=>[e.original.error?(r(),u("span",{key:0,class:"text-red-600 text-xs truncate max-w-xs block",title:e.original.error},l(e.original.error.length>80?`${e.original.error.substring(0,80)}…`:e.original.error),9,Ft)):d("",!0)]),"actions-header":a(()=>[...c[3]||(c[3]=[i("div",{class:"text-right"},"Actions",-1)])]),"actions-cell":a(({row:e})=>[i("div",At,[o(k,{to:`/test-run-cases/${e.original.id}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:a(()=>[...c[4]||(c[4]=[_(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data"])):(r(),m(q,{key:1,icon:"i-lucide-inbox",text:"No executions yet"}))]),_:1},8,["title"]),t(s)?.failureClusters?.length?(r(),m($,{key:2,icon:"i-lucide-bug",title:`Failure clusters (${t(s).failureClusters.length})`,help:"cluster.concept"},{default:a(()=>[i("div",Kt,[(r(!0),u(T,null,w(t(s).failureClusters,e=>(r(),u("div",{key:e.id,class:"flex items-center justify-between py-2 px-2 rounded hover:bg-gray-50 dark:hover:bg-gray-800"},[i("div",Vt,[o(v,{color:N(e.status),variant:"soft",size:"xs",class:"capitalize"},{default:a(()=>[_(l(e.status),1)]),_:2},1032,["color"]),i("span",Ht,l(e.signature),1),e.occurrences>1?(r(),u("span",Mt,l(e.occurrences)+" occurrences ",1)):d("",!0)]),o(k,{to:`/failure-clusters/${e.id}`,size:"xs",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:a(()=>[...c[5]||(c[5]=[_(" View ",-1)])]),_:1},8,["to"])]))),128))])]),_:1},8,["title"])):d("",!0),t(s)?.links?.length?(r(),m($,{key:3,icon:"i-lucide-link",title:"Links",help:"shared.entity-links"},{default:a(()=>[o(J,{"entity-type":"test_case","entity-id":Number(t(h)),links:t(s).links??null},null,8,["entity-id","links"])]),_:1})):d("",!0)])]),_:1})}}});export{be as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h as e,a9 as r,bU as t}from"./BrT_Sys2.js";function a(o){return e(()=>r(o)?!!t(o)?.closest("form"):!0)}export{a as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as T,o as r,c as x,j as p,k as a,v as U,t as E,q as b,i as k,f as _,g as y,m as L,_ as j,h as w,s as N,r as h,B as O,F as D,y as S,H as Z,D as R,l as C,E as H}from"./
|
|
1
|
+
import{d as T,o as r,c as x,j as p,k as a,v as U,t as E,q as b,i as k,f as _,g as y,m as L,_ as j,h as w,s as N,r as h,B as O,F as D,y as S,H as Z,D as R,l as C,E as H}from"./BrT_Sys2.js";import{u as M}from"./DtXREpk_.js";const G=[{provider:"jira",tests:[/^https:\/\/([^./]+)\.atlassian\.net\/browse\//i,/^https:\/\/[^/]+\/jira\/software\/c\/projects\//i,/^https:\/\/[^/]+\/.+\/browse\//i],keyExtract:/\/([A-Z][A-Z0-9_]+-\d+)(?:\?|$|#)/i},{provider:"github-issue",tests:[/^https:\/\/github\.com\/[^/]+\/[^/]+\/issues\//i],keyExtract:/\/issues\/(\d+)/},{provider:"github-pr",tests:[/^https:\/\/github\.com\/[^/]+\/[^/]+\/pull\//i],keyExtract:/\/pull\/(\d+)/},{provider:"gitlab-issue",tests:[/^https:\/\/(gitlab\.[^/]+|[^/]+\.gitlab\.io)\/[^/]+\/[^/]+\/-\/issues\//i],keyExtract:/\/issues\/(\d+)/},{provider:"gitlab-mr",tests:[/^https:\/\/(gitlab\.[^/]+|[^/]+\.gitlab\.io)\/[^/]+\/[^/]+\/-\/merge_requests\//i],keyExtract:/\/merge_requests\/(\d+)/},{provider:"bitbucket",tests:[/^https:\/\/bitbucket\.org\/[^/]+\/[^/]+\/pull-requests\//i],keyExtract:/\/pull-requests\/(\d+)/},{provider:"confluence",tests:[/^https:\/\/([^./]+)\.atlassian\.net\/wiki\//i]},{provider:"slack",tests:[/^https:\/\/[^/]+\.slack\.com\//i]},{provider:"linear",tests:[/^https:\/\/linear\.app\//i],keyExtract:/\/([A-Za-z]+-\d+)(?:\/|\?|$|#)/},{provider:"notion",tests:[/^https:\/\/(www\.)?notion\.so\//i]}];function J(t){for(const c of G)if(c.tests.some(e=>e.test(t)))return c.provider;return"generic"}function B(t){return{jira:"i-simple-icons-jira","github-issue":"i-simple-icons-github","github-pr":"i-simple-icons-github","gitlab-issue":"i-simple-icons-gitlab","gitlab-mr":"i-simple-icons-gitlab",bitbucket:"i-simple-icons-bitbucket",confluence:"i-simple-icons-confluence",slack:"i-simple-icons-slack",linear:"i-simple-icons-linear",notion:"i-simple-icons-notion",generic:"i-lucide-link"}[t]}const K={class:"inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full text-xs font-medium bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300 group hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors"},Q={key:0,class:"font-mono text-primary font-medium"},W=["title"],X=T({__name:"LinkChip",props:{link:{},removable:{type:Boolean}},emits:["remove"],setup(t,{emit:c}){const e=t,v=c,g=w(()=>e.link.title||e.link.key||e.link.url.replace(/^https?:\/\//,"").slice(0,50)),o=w(()=>B(e.link.provider));return(s,l)=>{const d=U,f=N,m=j;return r(),x("span",K,[p(d,{name:a(o),class:"w-3.5 h-3.5 shrink-0"},null,8,["name"]),t.link.key?(r(),x("span",Q,E(t.link.key),1)):b("",!0),k("span",{class:"max-w-48 truncate",title:t.link.title||t.link.url},E(a(g)),9,W),t.link.statusText?(r(),_(f,{key:1,color:t.link.statusColor||"neutral",variant:"subtle",size:"xs"},{default:y(()=>[L(E(t.link.statusText),1)]),_:1},8,["color"])):b("",!0),p(m,{to:t.link.url,target:"_blank",size:"xs",variant:"ghost",color:"neutral",icon:"i-lucide-external-link",class:"opacity-0 group-hover:opacity-100 transition-opacity -my-1"},null,8,["to"]),t.removable?(r(),_(m,{key:2,size:"xs",variant:"ghost",color:"error",icon:"i-lucide-x",class:"opacity-0 group-hover:opacity-100 transition-opacity -my-1",onClick:l[0]||(l[0]=I=>v("remove",t.link.id))})):b("",!0)])}}}),Y=Object.assign(X,{__name:"LinkChip"}),tt={class:"flex flex-wrap items-center gap-1.5"},et={class:"relative"},it={class:"flex justify-end gap-2"},st=T({__name:"EntityLinks",props:{entityType:{},entityId:{},links:{}},emits:["updated"],setup(t,{emit:c}){const e=t,v=c,{copy:g}=M(),o=h(e.links??[]),s=h(""),l=h(!1),d=h(!1),f=w(()=>{try{return s.value?J(s.value):null}catch{return null}}),m=w(()=>f.value?B(f.value):null);async function I(){const n=await $fetch("/api/links",{params:{entityType:e.entityType,entityId:e.entityId}});o.value=n.links}async function z(){if(!(!s.value||d.value)){d.value=!0;try{const n=await $fetch("/api/links",{method:"POST",body:{entityType:e.entityType,entityId:e.entityId,url:s.value}});o.value.push(n.link),s.value="",l.value=!1,v("updated")}catch(n){g(n?.data?.message||"Failed to add link",{toast:!0})}finally{d.value=!1}}}async function V(n){try{await $fetch(`/api/links/${n}`,{method:"DELETE"}),o.value=o.value.filter(i=>i.id!==n),v("updated")}catch{g("Failed to remove link",{toast:!0})}}return O(()=>[e.entityType,e.entityId],()=>{e.links?o.value=e.links:I()},{immediate:!0}),(n,i)=>{const A=Y,$=j,P=R,q=U,F=H;return r(),x("div",tt,[(r(!0),x(D,null,S(a(o),u=>(r(),_(A,{key:u.id,link:u,removable:"",onRemove:V},null,8,["link"]))),128)),p(F,{open:a(l),"onUpdate:open":i[2]||(i[2]=u=>C(l)?l.value=u:null)},{content:y(()=>[k("form",{class:"p-3 space-y-3 min-w-72",onSubmit:Z(z,["prevent"])},[i[5]||(i[5]=k("p",{class:"text-sm font-medium"},"Add link",-1)),k("div",et,[p(P,{modelValue:a(s),"onUpdate:modelValue":i[0]||(i[0]=u=>C(s)?s.value=u:null),placeholder:"https://...",size:"sm",class:"w-full",autofocus:""},null,8,["modelValue"]),a(m)?(r(),_(q,{key:0,name:a(m),class:"absolute right-2.5 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400"},null,8,["name"])):b("",!0)]),k("div",it,[p($,{size:"xs",variant:"ghost",color:"neutral",onClick:i[1]||(i[1]=u=>l.value=!1)},{default:y(()=>[...i[3]||(i[3]=[L(" Cancel ",-1)])]),_:1}),p($,{size:"xs",color:"primary",type:"submit",loading:a(d),disabled:!a(s).trim()},{default:y(()=>[...i[4]||(i[4]=[L(" Add ",-1)])]),_:1},8,["loading","disabled"])])],32)]),default:y(()=>[p($,{size:"xs",variant:"ghost",color:"neutral",icon:"i-lucide-plus",class:"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300",title:"Add link"})]),_:1},8,["open"])])}}}),ot=Object.assign(st,{__name:"EntityLinks"});export{ot as _};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as a,o as s,c as n,j as o,v as c,i,t as r,p as d}from"./
|
|
1
|
+
import{d as a,o as s,c as n,j as o,v as c,i,t as r,p as d}from"./BrT_Sys2.js";const l={class:"text-sm"},p=a({__name:"LoadingState",props:{text:{default:"Loading…"},padded:{type:Boolean,default:!0}},setup(e){return(_,m)=>{const t=c;return s(),n("div",{role:"status","aria-live":"polite","aria-busy":"true",class:d(["flex items-center justify-center gap-2 text-gray-400",e.padded&&"py-8"])},[o(t,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),i("span",l,r(e.text),1)],2)}}}),f=Object.assign(p,{__name:"LoadingState"});export{f as _};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a1 as r,a3 as n,o as p,f as i,g as u,T as c,p as d,k as e,V as f,h as m,a6 as _}from"./
|
|
1
|
+
import{a1 as r,a3 as n,o as p,f as i,g as u,T as c,p as d,k as e,V as f,h as m,a6 as _}from"./BrT_Sys2.js";const b={base:"animate-pulse rounded-md bg-elevated"},C={__name:"USkeleton",props:{as:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(a){const s=r("skeleton",a),t=n(),l=m(()=>_({extend:b,...t.ui?.skeleton||{}}));return(o,g)=>(p(),i(e(f),{as:e(s).as,"aria-busy":"true","aria-label":"loading","aria-live":"polite",role:"alert",class:d(l.value({class:[e(s).ui?.base,e(s).class]}))},{default:u(()=>[c(o.$slots,"default")]),_:3},8,["as","class"]))}};export{C as _};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{_ as Gt}from"./BDcIWTTq.js";import{_ as Jt}from"./B1CUXGbl.js";import{d as se,o as t,f as w,g,i as n,p as W,k as e,j as d,t as r,c as o,F as B,y as ee,s as ge,m as y,q as l,P as gt,v as re,h as $,x as Ae,_ as De,b as qt,C as pt,l as fe,r as j,a9 as $e,B as ve,aa as Qt,K as Ee,O as Ce,u as Zt,a as Xt,w as dt,e as Yt,ab as es,J as ts}from"./BrT_Sys2.js";import{_ as ss}from"./BwKwWgQe.js";import{_ as ns,a as as}from"./CMB-NkFa.js";import{_ as os,a as rs,b as is,c as ls,d as us}from"./L6HlmmEa.js";import{_ as cs}from"./D_A6axXa.js";import{_ as yt,a as Oe}from"./B6hPf4UR.js";import{_ as ds}from"./CoKEjZX7.js";import{_ as ms}from"./3QTorEhJ.js";import{u as fs,_ as gs,e as ps,f as ys,g as hs,h as vs,j as xs,a as ht,i as Te,b as je,c as _s,k as ks,d as bs}from"./BcLXUmKT.js";import{f as Se,h as q,c as ws,e as $s,k as we,l as vt,m as He,n as Ke,o as Cs,i as Ts,r as mt}from"./D7P0ML0H.js";import{_ as xt}from"./DTH2lteW.js";import{_ as pe}from"./CHIbdzqp.js";import{_ as Ss}from"./Dz3Wbekz.js";import{u as _t}from"./DtXREpk_.js";import{_ as We}from"./CxLN5Tmq.js";import{d as Ds,e as Is,h as Ge,a as Rs,b as Ls,c as zs,_ as Ms,m as Ns,n as js,o as As,f as Ps,i as Us,j as Bs,k as Fs,l as Vs}from"./Cz2HhsB6.js";import{_ as Je}from"./3QTvYrZp.js";import{_ as kt}from"./Wfk1m0ni.js";import{_ as Es}from"./DpJrGwCr.js";import{_ as Os}from"./99tAfVF5.js";import{_ as Hs}from"./Bq0PQfQY.js";import{_ as Ks}from"./DJHNEqb7.js";import{_ as Ws}from"./CYuWAvXE.js";import{_ as Gs,a as Js}from"./DS9yGVFL.js";import{_ as qs}from"./DRTxhZBV.js";import{b as Qs}from"./za5M7BGh.js";import{u as ft}from"./Dvc1aWpA.js";import"./z7PmsnBG.js";import"./sMFaPAAR.js";import"./26ll_vBr.js";import"./r3SBLxtE.js";import"./BciovqwK.js";import"./BU6xjw05.js";import"./D0-HTQTD.js";import"./BE8ykmwr.js";import"./BxRsAYRS.js";import"./Bua_L6p4.js";import"./BGZQONfm.js";import"./D7W_4Sqc.js";import"./D811X8KM.js";const Zs={class:"text-sm font-semibold truncate min-w-0"},Xs={class:"flex items-center gap-3 ml-auto max-sm:hidden"},Ys={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},en={class:"text-gray-700 dark:text-gray-300"},tn={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},sn={class:"text-gray-700 dark:text-gray-300"},nn={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},an={class:"text-gray-700 dark:text-gray-300"},on={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},rn={class:"text-gray-700 dark:text-gray-300"},ln={key:0,class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},un={class:"text-gray-700 dark:text-gray-300"},cn={class:"grid grid-cols-1 lg:grid-cols-12 gap-4"},dn={class:"space-y-3"},mn={class:"flex items-start gap-3"},fn={class:"min-w-0 flex-1"},gn={class:"flex items-center gap-2 flex-wrap"},pn={class:"text-base font-bold truncate"},yn={class:"text-xs text-gray-500 mt-0.5"},hn={key:0},vn=["title"],xn={key:1,class:"ml-2"},_n={class:"grid grid-cols-2 sm:grid-cols-4 gap-2"},kn={class:"rounded-lg bg-gray-50 dark:bg-gray-900 p-3"},bn={class:"text-xl font-bold mt-0.5"},wn={class:"rounded-lg bg-gray-50 dark:bg-gray-900 p-3"},$n={class:"text-xl font-bold mt-0.5"},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"},Dn={class:"text-xl font-bold mt-0.5"},In={key:0,class:"flex items-center gap-2 text-sm"},Rn={class:"text-gray-700 dark:text-gray-300 truncate"},Ln={key:0,class:"text-gray-500 shrink-0"},zn={key:1,class:"flex items-center gap-1.5 text-sm"},Mn={class:"text-gray-700 dark:text-gray-300"},Nn=se({__name:"TestCaseSummary",props:{testCase:{},scmInfo:{},ciInfo:{},browser:{},environment:{},stepsCount:{},historicalTiming:{},stableLinks:{}},emits:["refresh"],setup(s){const _=s,v=$(()=>{const u=_.testCase;if(!u)return[];const i=[];return u.isNewRegression&&i.push({label:"New regression",color:"error",title:"Passed in the baseline run, failing here"}),u.isNewFlaky&&i.push({label:"New flaky",color:"warning",title:"Newly started passing only on retry"}),u.status==="passed"&&(u.retries??0)>0&&i.push({label:"Passed on retry",color:"warning",title:"This test failed then passed on a retry"}),i}),k=$(()=>_.testCase?.testAnnotations??[]),I=$(()=>_.testCase?.startedAt??null),{summaryColSpanClass:h,blockColSpanClass:a}=fs(()=>{let u=0;return _.scmInfo&&u++,(_.ciInfo||_.environment||_.browser)&&u++,u++,u});return(u,i)=>{const P=os,U=cs,b=ge,x=gt,F=re,N=yt,p=ds,C=rs,R=is,H=ms,L=ls,K=gs;return t(),w(K,{"storage-key":"test-case"},{folded:g(()=>[d(P,{status:s.testCase?.status??"",size:"sm"},null,8,["status"]),n("span",Zs,r(s.testCase?.title),1),n("div",Xs,[n("span",Ys,[i[0]||(i[0]=y(" Dur: ",-1)),n("strong",en,r(("formatDuration"in u?u.formatDuration:e(q))(s.testCase?.duration)),1)]),n("span",tn,[i[1]||(i[1]=y(" Retries: ",-1)),n("strong",sn,r(s.testCase?.retries??0),1)]),n("span",nn,[i[2]||(i[2]=y(" Steps: ",-1)),n("strong",an,r(s.stepsCount),1)]),n("span",on,[i[3]||(i[3]=y(" Worker: ",-1)),n("strong",rn,r(s.testCase?.workerIndex??"—"),1)]),s.testCase?.shardIndex!=null?(t(),o("span",ln,[i[4]||(i[4]=y(" Shard: ",-1)),n("strong",un,r(s.testCase.shardIndex),1)])):l("",!0)]),s.browser?(t(),w(U,{key:0,browser:s.browser,size:"sm",class:"shrink-0 max-sm:hidden"},null,8,["browser"])):l("",!0)]),default:g(()=>[n("div",cn,[n("div",{class:W(e(h))},[d(p,{class:"shadow-xs h-full"},{default:g(()=>[n("div",dn,[n("div",mn,[d(P,{status:s.testCase?.status??"",size:"md"},null,8,["status"]),n("div",fn,[n("div",gn,[n("h2",pn,r(s.testCase?.title),1),(t(!0),o(B,null,ee(e(v),D=>(t(),w(b,{key:D.label,color:D.color,variant:"subtle",size:"xs",title:D.title},{default:g(()=>[y(r(D.label),1)]),_:2},1032,["color","title"]))),128)),(t(!0),o(B,null,ee(e(k),(D,Q)=>(t(),w(b,{key:`ann-${Q}`,color:"neutral",variant:"soft",size:"xs",class:"font-mono",title:D.description||D.type},{default:g(()=>[y(" @"+r(D.type),1)]),_:2},1032,["title"]))),128))]),n("p",yn,[s.testCase?.location?(t(),o("span",hn,r(s.testCase.location),1)):l("",!0),d(x,null,{default:g(()=>[e(I)?(t(),o("span",{key:0,class:"ml-2 text-gray-400",title:new Date(e(I)).toLocaleString()}," started "+r(("formatRelativeTime"in u?u.formatRelativeTime:e(Se))(e(I))),9,vn)):l("",!0)]),_:1}),s.historicalTiming?(t(),o("span",xn,[y(" Avg "+r(("formatDuration"in u?u.formatDuration:e(q))(s.historicalTiming.avg))+" · ",1),n("span",{class:W(s.historicalTiming.diff>0?"text-red-600":"text-green-600")},r(s.historicalTiming.diff>0?"+":"")+r(s.historicalTiming.pct)+"% ",3)])):l("",!0)])])]),n("div",_n,[n("div",kn,[i[5]||(i[5]=n("p",{class:"text-xs font-medium text-gray-500 uppercase tracking-wider"},"Duration",-1)),n("p",bn,r(("formatDuration"in u?u.formatDuration:e(q))(s.testCase?.duration)),1)]),n("div",wn,[i[6]||(i[6]=n("p",{class:"text-xs font-medium text-gray-500 uppercase tracking-wider"},"Retries",-1)),n("p",$n,r(s.testCase?.retries??0),1)]),n("div",Cn,[i[7]||(i[7]=n("p",{class:"text-xs font-medium text-gray-500 uppercase tracking-wider"},"Steps",-1)),n("p",Tn,r(s.stepsCount),1)]),n("div",Sn,[i[8]||(i[8]=n("p",{class:"text-xs font-medium text-gray-500 uppercase tracking-wider"},"Worker",-1)),n("p",Dn,r(s.testCase?.workerIndex??"—"),1)])]),s.testCase?.slowestStep?(t(),o("div",In,[d(F,{name:"i-lucide-zap",class:"size-4 text-amber-500 shrink-0"}),i[9]||(i[9]=n("span",{class:"font-medium text-amber-700 dark:text-amber-300"},"Slowest step:",-1)),n("span",Rn,r(s.testCase.slowestStep),1),s.testCase.slowestStepDuration?(t(),o("span",Ln,"("+r(("formatDuration"in u?u.formatDuration:e(q))(s.testCase.slowestStepDuration))+")",1)):l("",!0)])):l("",!0),(s.testCase?.wastedTimeMs??0)>0?(t(),o("div",zn,[d(F,{name:"i-lucide-hourglass",class:"size-4 text-amber-500 shrink-0"}),i[10]||(i[10]=n("span",{class:"font-medium text-amber-700 dark:text-amber-300"},"Wasted in fixed waits:",-1)),n("span",Mn,r(("formatDuration"in u?u.formatDuration:e(q))(s.testCase?.wastedTimeMs)),1),d(N,{topic:"case.wasted-time"})])):l("",!0)])]),_:1})],2),s.scmInfo?(t(),w(C,{key:0,scm:s.scmInfo,class:W(e(a))},null,8,["scm","class"])):l("",!0),s.ciInfo||s.environment||s.browser?(t(),w(R,{key:1,ci:s.ciInfo,environment:s.environment,browser:s.browser,class:W(e(a))},null,8,["ci","environment","browser","class"])):l("",!0),d(L,{class:W(e(a)),title:"Links",icon:"i-lucide-link"},{default:g(()=>[s.testCase?.id?(t(),w(H,{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})}}}),jn=Object.assign(Nn,{__name:"TestCaseSummary"}),An={class:"space-y-3"},Pn={key:0,class:"flex flex-wrap gap-1.5"},Un={key:0,class:"text-sm text-gray-600 dark:text-gray-400"},Bn={class:"text-gray-800 dark:text-gray-200"},Fn={key:1},Vn={class:"flex items-center gap-1 flex-wrap"},En=se({__name:"TestCaseVerdictCard",props:{testCase:{},history:{},currentId:{}},setup(s){const _=s,v=u=>u==="failed"||u==="timedOut"||u==="timedout",k=$(()=>{const u=_.testCase;if(!u)return[];const i=[];return u.isNewRegression&&i.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&&i.push({label:"New flaky",color:"warning",icon:"i-lucide-shuffle",title:"Newly started passing only on retry — intermittent failure"}),u.status==="timedOut"&&i.push({label:"Timed out",color:"warning",icon:"i-lucide-timer-off",title:"The test exceeded its timeout"}),(u.retries??0)>0&&i.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"}`}),i}),I=$(()=>_.history.slice(0,24).slice().reverse()),h=$(()=>{const u=_.history;if(!u.length)return null;const i=Math.max(0,u.findIndex(b=>b.id===_.currentId));let P=0;for(let b=i;b<u.length&&v(u[b].status);b++)P++;let U=null;for(let b=i+1;b<u.length;b++)if(u[b].status==="passed"){U=u[b];break}return{streak:P,lastPass:U,total:u.length,anchorFailing:v(u[i]?.status)}}),a=u=>({"bg-red-500 hover:bg-red-600":v(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":!v(u)&&!["passed","skipped"].includes(u)});return(u,i)=>{const P=re,U=ge,b=Ae,x=xt,F=gt,N=pe;return t(),w(N,{icon:"i-lucide-clipboard-check","icon-class":"text-amber-500",title:"Verdict",help:"case.verdict"},{default:g(()=>[n("div",An,[e(k).length?(t(),o("div",Pn,[(t(!0),o(B,null,ee(e(k),p=>(t(),w(U,{key:p.label,color:p.color,variant:"subtle",size:"sm",title:p.title,class:"inline-flex items-center gap-1"},{default:g(()=>[d(P,{name:p.icon,class:"size-3 shrink-0"},null,8,["name"]),y(" "+r(p.label),1)]),_:2},1032,["color","title"]))),128))])):l("",!0),d(F,null,{default:g(()=>[e(h)?(t(),o("p",Un,[e(h).streak>=1?(t(),o(B,{key:0},[i[1]||(i[1]=y(" Failing for ",-1)),n("strong",Bn,r(e(h).streak),1),y(" consecutive run"+r(e(h).streak===1?"":"s")+". ",1),e(h).lastPass?(t(),o(B,{key:0},[i[0]||(i[0]=y(" Last passed in ",-1)),d(b,{to:`/test-run-cases/${e(h).lastPass.id}`,class:"text-primary hover:underline"},{default:g(()=>[y(" run #"+r(e(h).lastPass.runId),1)]),_:1},8,["to"]),y(" ("+r(("formatRelativeTime"in u?u.formatRelativeTime:e(Se))(e(h).lastPass.startTime))+"). ",1)],64)):e(h).total>1?(t(),o(B,{key:1},[y(" No passing run in the last "+r(e(h).total)+" recorded. ",1)],64)):(t(),o(B,{key:2},[y(" First recorded run of this test. ")],64))],64)):s.testCase?.status==="passed"?(t(),o(B,{key:1},[y(" This execution passed. ")],64)):l("",!0)])):l("",!0),e(I).length>1?(t(),o("div",Fn,[i[2]||(i[2]=n("p",{class:"text-xs text-gray-400 mb-1"},"Recent runs (oldest → newest)",-1)),n("div",Vn,[(t(!0),o(B,null,ee(e(I),p=>(t(),w(x,{key:p.id,text:`Run #${p.runId}: ${p.status}`},{default:g(()=>[d(b,{to:`/test-run-cases/${p.id}`,class:W(["size-3.5 rounded-sm inline-block transition-colors",[a(p.status),p.id===s.currentId?"ring-2 ring-offset-1 ring-primary":""]])},null,8,["to","class"])]),_:2},1032,["text"]))),128))])])):l("",!0)]),_:1})])]),_:1})}}}),On=Object.assign(En,{__name:"TestCaseVerdictCard"}),Hn={class:"space-y-3"},Kn={class:"space-y-1.5"},Wn={class:"flex items-center gap-2 flex-wrap"},Gn={class:"text-xs text-gray-500"},Jn=["title"],qn={class:"text-xs text-gray-500 dark:text-gray-400"},Qn={key:0,class:"rounded-lg border border-default bg-elevated/40 p-2.5 space-y-1"},Zn={class:"flex items-center gap-1.5 flex-wrap"},Xn={class:"text-xs text-gray-600 dark:text-gray-400 line-clamp-3"},Yn=["title"],ea=se({__name:"FailureClusterCard",props:{cluster:{}},setup(s){const _=s,v=$(()=>Math.max(0,_.cluster.sameRunCaseCount-1)),k=$(()=>{const h=_.cluster.diagnosis;return h&&h.status==="completed"&&h.summary?h:null}),I=h=>h==="high"?"success":h==="medium"?"warning":"neutral";return(h,a)=>{const u=ge,i=Ae,P=re,U=De,b=pe;return t(),w(b,{icon:"i-lucide-layers","icon-class":"text-primary",title:"Failure cluster",help:"cluster.concept"},{actions:g(()=>[s.cluster.isNew?(t(),w(u,{key:0,color:"warning",variant:"subtle",size:"sm"},{default:g(()=>[...a[0]||(a[0]=[y("New",-1)])]),_:1})):l("",!0),s.cluster.status&&s.cluster.status!=="open"?(t(),w(u,{key:1,color:s.cluster.status==="resolved"?"success":"neutral",variant:"subtle",size:"sm",class:"capitalize"},{default:g(()=>[y(r(s.cluster.status),1)]),_:1},8,["color"])):l("",!0)]),default:g(()=>[n("div",Hn,[n("div",Kn,[n("div",Wn,[s.cluster.errorType?(t(),w(u,{key:0,color:e(ws)(s.cluster.errorType),variant:"soft",size:"sm"},{default:g(()=>[y(r(s.cluster.errorType),1)]),_:1},8,["color"])):l("",!0),n("span",Gn,r(s.cluster.occurrences??0)+" occurrence"+r((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},r(s.cluster.signature),9,Jn)]),n("p",qn,[e(v)>0?(t(),o(B,{key:0},[y(" Matches "+r(e(v))+" other failing "+r(e(v)===1?"test":"tests")+" in this run. ",1)],64)):l("",!0),s.cluster.isNew?(t(),o(B,{key:2},[y("Opened a new cluster in this run.")],64)):(t(),o(B,{key:1},[a[1]||(a[1]=y(" Known failure — first seen in ",-1)),d(i,{to:`/test-runs/${s.cluster.firstSeenRunId}`,class:"text-primary hover:underline"},{default:g(()=>[y(" run #"+r(s.cluster.firstSeenRunId),1)]),_:1},8,["to"]),s.cluster.firstSeenAt?(t(),o(B,{key:0},[y(" ("+r(("formatRelativeTime"in h?h.formatRelativeTime:e(Se))(s.cluster.firstSeenAt))+")",1)],64)):l("",!0),a[2]||(a[2]=y(". ",-1))],64))]),e(k)?(t(),o("div",Qn,[n("div",Zn,[d(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(k).category?(t(),w(u,{key:0,color:"neutral",variant:"soft",size:"xs"},{default:g(()=>[y(r(e(k).category),1)]),_:1})):l("",!0),e(k).confidence?(t(),w(u,{key:1,color:I(e(k).confidence),variant:"soft",size:"xs"},{default:g(()=>[y(r(e(k).confidence)+" confidence ",1)]),_:1},8,["color"])):l("",!0)]),n("p",Xn,r(e(k).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}," “"+r(s.cluster.triageNote)+"” ",9,Yn)):l("",!0),d(U,{to:`/failure-clusters/${s.cluster.id}`,size:"sm",color:"primary",variant:"solid",block:"","trailing-icon":"i-lucide-arrow-right"},{default:g(()=>[...a[4]||(a[4]=[y(" Open cluster investigation ",-1)])]),_:1},8,["to"])])]),_:1})}}}),ta=Object.assign(ea,{__name:"FailureClusterCard"}),sa={class:"space-y-3"},na={class:"text-xs text-gray-400 inline-flex items-center gap-1"},aa={key:0,class:"text-primary"},oa={key:0,class:"flex items-center justify-between gap-2 rounded-lg border border-default bg-elevated/40 p-2.5"},ra={class:"inline-flex items-center gap-2 text-sm text-gray-500"},ia={key:1,class:"flex items-center gap-2"},la={key:2,class:"rounded-lg border border-dashed border-default p-4 text-center text-gray-400"},ua={class:"text-sm inline-flex items-center gap-1 justify-center"},ca={class:"pt-1 text-center"},da=se({__name:"TestCaseAiCard",props:{testRunsCaseId:{}},setup(s){const _=s,{aiStatus:v}=ps(),k=qt(),{copy:I,copied:h}=_t(),a=j(null),u=j(!1),i=j(null),P=j([]),U=j(0),b=j(0),x=j(null),F=j(!1),N=j(!1),p=j(null),C=j(!1),R=j("");async function H(){F.value=!0;try{const m=await $fetch(`/api/test-run-cases/${_.testRunsCaseId}/diagnosis-context`,{query:{format:"json"}});i.value=m.text,P.value=m.sections,U.value=m.tokenEstimate,b.value=m.imageTokenEstimate??0,x.value=m.coverage}catch{i.value=null,P.value=[],U.value=0,x.value=null}finally{F.value=!1}}async function L(){try{const m=await $fetch(`/api/test-run-cases/${_.testRunsCaseId}/diagnosis`);a.value=m.diagnosis}catch{}}pt(()=>{L(),H()});const K=$(()=>{const m=a.value?.details;if(!m)return[];const f=[];if(Array.isArray(m.evidence)&&f.push(...m.evidence),Array.isArray(m.hypotheses))for(const A of m.hypotheses)Array.isArray(A?.evidence)&&f.push(...A.evidence);return xs(f)});function D(m){p.value=m,N.value=!0}function Q(m){R.value=R.value?`${R.value}
|
|
2
|
+
|
|
3
|
+
${m}`:m,C.value=!0}function ae(){i.value&&I(i.value,{toast:"AI context copied"})}async function J(m=!1){u.value=!0;try{const f=m?`/api/test-run-cases/${_.testRunsCaseId}/diagnose?force=true`:`/api/test-run-cases/${_.testRunsCaseId}/diagnose`,A=R.value.trim()?{additionalContext:R.value.trim()}:void 0;a.value=await $fetch(f,{method:"POST",body:A})}catch(f){const A=f?.statusCode;A===409?(k.add({title:"Diagnosis already running",color:"warning"}),L()):A===503?k.add({title:"AI diagnosis is not configured",color:"warning"}):k.add({title:"Diagnosis failed",description:$s(f),color:"error"})}finally{u.value=!1}}function ie(m){return m.status==="running"&&Date.now()-new Date(m.updatedAt).getTime()>300*1e3}const z=$(()=>a.value&&(a.value.status==="completed"||a.value.status==="failed")),ye=$(()=>!a.value||a.value.status==="failed"||a.value.status==="running"&&ie(a.value)),ue=$(()=>a.value?.status==="running"&&!ie(a.value)&&!u.value);return(m,f)=>{const A=De,G=re,Z=ys,te=Ss,O=hs,Y=yt,X=vs,ce=Ae,M=pe;return t(),w(M,{icon:"i-lucide-sparkles","icon-class":"text-primary",title:"AI diagnosis",help:"case.ai"},{actions:g(()=>[d(A,{size:"xs",color:"neutral",variant:"outline",icon:e(h)?"i-lucide-check":"i-lucide-clipboard",loading:e(F),disabled:!e(i),title:"Copy the full evidence context to paste into your own AI assistant",onClick:ae},{default:g(()=>[y(r(e(h)?"Copied":"Copy AI context"),1)]),_:1},8,["icon","loading","disabled"])]),default:g(()=>[n("div",sa,[n("p",na,[d(G,{name:"i-lucide-triangle-alert",class:"size-3 shrink-0"}),f[6]||(f[6]=y(" AI-generated — verify before applying. ",-1))]),e(v)?.configured?(t(),w(Z,{key:0,sections:e(P),"not-applicable":e(x)?.notApplicable,"token-estimate":e(U),loading:e(F),onViewSection:D,onOpen:f[0]||(f[0]=V=>N.value=!0)},null,8,["sections","not-applicable","token-estimate","loading"])):l("",!0),e(v)?.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:f[1]||(f[1]=V=>C.value=!e(C))},[d(G,{name:e(C)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5"},null,8,["name"]),f[7]||(f[7]=y(" Additional context ",-1)),e(R).trim()?(t(),o("span",aa,"(1)")):l("",!0)]),e(C)?(t(),w(te,{key:0,modelValue:e(R),"onUpdate:modelValue":f[2]||(f[2]=V=>fe(R)?R.value=V: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(ue)?(t(),o("div",oa,[n("span",ra,[d(G,{name:"i-lucide-loader-circle",class:"size-4 animate-spin text-primary shrink-0"}),f[8]||(f[8]=y(" Diagnosis in progress… ",-1))]),d(A,{size:"xs",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",loading:e(u),onClick:L},{default:g(()=>[...f[9]||(f[9]=[y(" Refresh ",-1)])]),_:1},8,["loading"])])):(t(),o("div",ia,[e(ye)?(t(),w(A,{key:0,icon:"i-lucide-sparkles",size:"sm",color:"primary",variant:"solid",loading:e(u),onClick:f[3]||(f[3]=V=>J(e(a)?.status==="running"))},{default:g(()=>[y(r(e(a)?.status==="running"?"Restart diagnosis":"Diagnose with AI"),1)]),_:1},8,["loading"])):e(a)?.status==="completed"?(t(),w(A,{key:1,icon:"i-lucide-refresh-cw",size:"xs",color:"primary",variant:"soft",loading:e(u),onClick:f[4]||(f[4]=V=>J(!0))},{default:g(()=>[...f[10]||(f[10]=[y(" Re-diagnose ",-1)])]),_:1},8,["loading"])):l("",!0)])),e(z)?(t(),w(O,{key:2,diagnosis:e(a),onViewSection:D,onPrefillContext:Q},null,8,["diagnosis"])):l("",!0)],64)):(t(),o("div",la,[n("p",ua,[f[11]||(f[11]=y(" AI diagnosis is not configured ",-1)),d(Y,{topic:"cluster.ai-setup"})]),f[13]||(f[13]=n("p",{class:"text-xs mt-2 max-w-xs mx-auto"},[y(" Use "),n("strong",null,"Copy AI context"),y(" above to grab the full evidence bundle for your own AI tool, or configure a provider. ")],-1)),d(A,{to:"/settings/ai",size:"xs",color:"neutral",variant:"outline",class:"mt-3"},{default:g(()=>[...f[12]||(f[12]=[y(" Configure in Settings ",-1)])]),_:1})])),d(X,{open:e(N),sections:e(P),"token-estimate":e(U),"image-token-estimate":e(b),loading:e(F),"focus-section":e(p),"cited-sections":e(K),"not-applicable-sections":e(x)?.notApplicable,"onUpdate:open":f[5]||(f[5]=V=>{N.value=V,V||(p.value=null)}),onRefresh:H},null,8,["open","sections","token-estimate","image-token-estimate","loading","focus-section","cited-sections","not-applicable-sections"]),n("div",ca,[d(ce,{to:"/mcp",class:"inline-flex items-center gap-1 text-xs text-gray-400 hover:text-primary transition-colors"},{default:g(()=>[d(G,{name:"i-lucide-bot",class:"size-3"}),f[14]||(f[14]=y(" Query this failure from your AI agent via MCP ",-1))]),_:1})])])]),_:1})}}}),ma=Object.assign(da,{__name:"TestCaseAiCard"});function bt(s,_,v){const k=j(null),I=j(!1),h=j(!1);async function a(){const u=s();if(!(!u||!$e(_)||I.value)){h.value=!0,I.value=!0;try{k.value=await $fetch(u)}catch{k.value=null}finally{I.value=!1}}}return pt(()=>{ve(()=>$e(_),u=>{u&&(v||h.value)&&!k.value&&a()},{immediate:!0})}),{data:k,pending:I,load:a}}function fa(s,_,v,k={}){return bt(()=>{const I=$e(s),h=$e(_);return I&&h?`/api/test-runs/${I}/cases/${h}/trace-stacks`:null},v,k.auto??!0)}function ga(s,_,v,k={}){return bt(()=>{const I=$e(s),h=$e(_);return I&&h?`/api/test-runs/${I}/cases/${h}/trace-network`:null},v,k.auto??!1)}const pa={class:"max-h-[32rem] overflow-y-auto"},ya={key:0,class:"mb-2 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},ha={key:0,class:"mt-3 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},va=se({__name:"TestSourceCard",props:{frames:{},testSource:{},runId:{},testRunsCaseId:{},hasTrace:{type:Boolean},projectKey:{},projectName:{},storageKey:{}},setup(s,{expose:_}){const v=s,{data:k,pending:I}=fa(()=>v.runId,()=>v.testRunsCaseId,()=>v.hasTrace,{auto:!0}),h=$(()=>k.value?.status==="ok"?k.value.frames??[]:[]),a=$(()=>h.value.length>0),u=$(()=>v.frames?.length??0),i=$(()=>u.value>0||!!v.testSource),P=j(null),U=$({get:()=>P.value??(a.value?"trace":"captured"),set:N=>{P.value=N}}),b=$(()=>[{label:`Full stack (${h.value.length})`,value:"trace"},{label:`Captured (${u.value||1})`,value:"captured"}]),x=$(()=>U.value==="trace"&&a.value?h.value.length:u.value||null),F=j(null);return _({reveal:()=>F.value?.reveal()}),(N,p)=>{const C=We,R=re,H=Ds,L=Is,K=ht,D=Je,Q=Oe,ae=Ge;return t(),w(ae,{ref_key:"card",ref:F,"storage-key":s.storageKey,icon:"i-lucide-code",count:e(x),title:"Test source",help:"case.test-source"},Qt({folded:g(()=>[e(U)==="trace"&&e(a)?(t(),o(B,{key:0},[y(" Full call stack from the trace"+r(e(k)?.hasSources===!1?" (recorded without sources)":""),1)],64)):e(u)>1?(t(),o(B,{key:1},[y(" The failing line and "+r(e(u)-1)+" caller"+r(e(u)-1===1?"":"s"),1)],64)):(t(),o(B,{key:2},[y("Source around the failing assertion")],64))]),default:g(()=>[n("div",pa,[e(U)==="trace"&&e(a)?(t(),o(B,{key:0},[e(k)?.hasSources===!1?(t(),o("p",ya,[d(R,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),p[1]||(p[1]=y(" Trace recorded without sources — frame list only. ",-1))])):l("",!0),d(H,{frames:e(h),"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(),w(L,{key:0,frames:s.frames,"project-key":s.projectKey,"project-name":s.projectName},null,8,["frames","project-key","project-name"])):s.testSource?(t(),w(K,{key:1,text:"```typescript\n"+s.testSource+"\n```"},null,8,["text"])):s.hasTrace&&e(I)?(t(),w(D,{key:2,text:"Loading call stack from trace…"})):l("",!0)],64))]),s.hasTrace?l("",!0):(t(),o("p",ha,[d(R,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),n("span",null,[p[3]||(p[3]=y(" Want to go deeper? Record traces (",-1)),p[4]||(p[4]=n("code",null,"trace: 'retain-on-failure'",-1)),p[5]||(p[5]=y(") to see the full call stack with source here. ",-1)),d(Q,{to:"ui-overview#trace-powered-deep-views","no-icon":"",class:"underline"},{default:g(()=>[...p[2]||(p[2]=[y("Learn more",-1)])]),_:1})])]))]),_:2},[e(a)&&e(i)?{name:"actions",fn:g(()=>[d(C,{modelValue:e(U),"onUpdate:modelValue":p[0]||(p[0]=J=>fe(U)?U.value=J:null),items:e(b),size:"xs",variant:"link",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"])]),key:"0"}:void 0]),1032,["storage-key","count"])}}}),xa=Object.assign(va,{__name:"TestSourceCard"}),_a={class:"space-y-3"},ka={class:"divide-y divide-default"},ba={class:"flex items-center gap-2 min-w-0"},wa={class:"text-sm truncate"},$a={key:0,class:"text-xs text-gray-400 shrink-0"},Ca=se({__name:"TestCaseEvidenceCard",props:{attachments:{},traces:{},storageKey:{}},setup(s,{expose:_}){const v=s,k=Ee(),I=$(()=>v.attachments.filter(x=>Te(x.path,x.contentType)).length),h=$(()=>v.attachments.filter(x=>je(x.path,x.contentType)).length),a=$(()=>v.attachments.filter(x=>!Te(x.path,x.contentType)&&!je(x.path,x.contentType))),u=$(()=>I.value+h.value+v.traces.length+a.value.length),i=$(()=>{const x=[];return I.value&&x.push(`${I.value} screenshot${I.value===1?"":"s"}`),h.value&&x.push(`${h.value} video${h.value===1?"":"s"}`),v.traces.length&&x.push(`${v.traces.length} trace${v.traces.length===1?"":"s"}`),a.value.length&&x.push(`${a.value.length} file${a.value.length===1?"":"s"}`),x.join(" · ")||"No evidence captured"});function P(x,F){return vt(x,F,k.app?.baseURL)}function U(x){return x.split("/").pop()||x}const b=j(null);return _({reveal:()=>b.value?.reveal?.()}),(x,F)=>{const N=Rs,p=Ls,C=zs,R=re,H=De,L=Ms,K=kt,D=Ge;return t(),w(D,{ref_key:"card",ref:b,"storage-key":s.storageKey,icon:"i-lucide-camera",title:"Failure evidence",count:e(u),help:"case.evidence"},{folded:g(()=>[y(r(e(i)),1)]),default:g(()=>[n("div",_a,[d(N,{attachments:s.attachments},null,8,["attachments"]),d(p,{attachments:s.attachments},null,8,["attachments"]),d(C,{traces:s.traces},null,8,["traces"]),e(a).length?(t(),w(L,{key:0,icon:"i-lucide-paperclip",label:"Attachments",count:e(a).length,collapsible:!1},{default:g(()=>[n("div",ka,[(t(!0),o(B,null,ee(e(a),Q=>(t(),o("div",{key:Q.id,class:"flex items-center justify-between gap-2 px-3 py-2"},[n("div",ba,[d(R,{name:"i-lucide-file",class:"size-4 text-gray-400 shrink-0"}),n("span",wa,r(U(Q.path)),1),Q.size?(t(),o("span",$a,r(("formatBytes"in x?x.formatBytes:e(we))(Q.size)),1)):l("",!0)]),d(H,{to:P(Q.path,Q.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(),w(K,{key:1,icon:"i-lucide-camera-off",text:"No screenshots, video or traces captured"})):l("",!0)])]),_:1},8,["storage-key","count"])}}}),Ta=Object.assign(Ca,{__name:"TestCaseEvidenceCard"}),Sa={class:"space-y-1 max-h-80 overflow-y-auto"},Da={class:"min-w-0 flex-1"},Ia={class:"flex items-center gap-2"},Ra={class:"truncate"},La={key:0,class:"text-xs text-gray-400 mt-0.5 ml-0"},za=se({__name:"TestCaseConsoleCard",props:{entries:{}},setup(s){function _(k){switch(k){case"error":return"error";case"warning":return"warning";case"assert":return"error";default:return"neutral"}}function v(k){switch(k){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(k,I)=>{const h=re,a=ge,u=pe;return s.entries.length>0?(t(),w(u,{key:0,icon:"i-lucide-terminal",title:"Console output",count:s.entries.length,help:"case.console"},{default:g(()=>[n("div",Sa,[(t(!0),o(B,null,ee(s.entries,(i,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"},[d(h,{name:v(i.type),class:W([i.type==="error"||i.type==="assert"?"text-red-500":i.type==="warning"?"text-amber-500":"text-gray-400","size-4 mt-0.5 shrink-0"])},null,8,["name","class"]),n("div",Da,[n("div",Ia,[d(a,{color:_(i.type),variant:"soft",size:"xs",class:"shrink-0"},{default:g(()=>[y(r(i.type),1)]),_:2},1032,["color"]),n("span",Ra,r(i.text),1)]),i.location?(t(),o("div",La,r(i.location),1)):l("",!0)])]))),128))])]),_:1},8,["count"])):l("",!0)}}}),Ma=Object.assign(za,{__name:"TestCaseConsoleCard"}),Na={key:0,class:"space-y-4 text-sm"},ja={class:"space-y-1.5"},Aa={class:"flex items-center gap-2"},Pa={key:0,class:"text-xs text-gray-500"},Ua={class:"block text-xs break-all text-gray-700 dark:text-gray-300"},Ba={key:0,class:"text-xs text-red-600 dark:text-red-400 font-mono"},Fa={class:"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-gray-400"},Va={key:0,class:"font-mono"},Ea={key:1,class:"font-mono"},Oa={key:2},Ha={key:3,title:"Bytes on the wire"},Ka={class:"tabular-nums"},Wa={key:0},Ga={class:"flex h-2 rounded overflow-hidden bg-gray-100 dark:bg-gray-800"},Ja=["title"],qa={class:"flex flex-wrap gap-x-3 gap-y-1 mt-1.5 text-xs text-gray-500"},Qa={class:"tabular-nums"},Za={class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5 capitalize"},Xa={key:0,class:"rounded border border-default divide-y divide-default max-h-48 overflow-y-auto"},Ya={class:"text-gray-500 dark:text-gray-400 shrink-0"},eo={class:"break-all text-gray-700 dark:text-gray-300"},to={key:1,class:"text-xs text-gray-400"},so={key:1},no={key:0,class:"rounded border border-default p-2"},ao=["src","alt"],oo={key:1,class:"max-h-96 overflow-y-auto"},ro={key:0,class:"mt-1 text-xs text-gray-400"},io={key:2,class:"text-xs text-gray-400"},lo={key:2,class:"text-xs text-gray-400"},uo=se({__name:"TraceNetworkDrawer",props:{open:{type:Boolean},entry:{},runId:{},testRunsCaseId:{}},emits:["update:open"],setup(s,{emit:_}){const v=s,k=_,I=[{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"}],h=$(()=>{const b=v.entry?.timings;return b?I.map(x=>({...x,value:b[x.key]??-1})).filter(x=>typeof x.value=="number"&&x.value>=0):[]}),a=$(()=>h.value.reduce((b,x)=>b+x.value,0)),u=$(()=>{const b=v.entry?.requestPostData??"";return b.startsWith("{")||b.startsWith("[")}),i=j(null),P=j(!1),U=new Map;return ve(()=>[v.open,v.entry?.bodySha1],async([b,x])=>{if(i.value=null,!b||!x||!v.runId)return;const F=U.get(x);if(F){i.value=F;return}P.value=!0;try{const N=await $fetch(`/api/test-runs/${v.runId}/cases/${v.testRunsCaseId}/trace-network-body`,{query:{sha1:x}});U.set(x,N),i.value=N}catch{i.value={status:"not-found"}}finally{P.value=!1}},{immediate:!0}),(b,x)=>{const F=ge,N=Es,p=Je,C=Os;return t(),w(C,{open:s.open,title:"Request detail",ui:{content:"max-w-xl"},"onUpdate:open":x[0]||(x[0]=R=>k("update:open",R))},{body:g(()=>[s.entry?(t(),o("div",Na,[n("div",ja,[n("div",Aa,[d(F,{color:("httpMethodColor"in b?b.httpMethodColor:e(He))(s.entry.method),variant:"soft",size:"sm",class:"font-mono shrink-0"},{default:g(()=>[y(r(s.entry.method),1)]),_:1},8,["color"]),d(F,{color:("httpStatusColor"in b?b.httpStatusColor:e(Ke))(s.entry.status),variant:"soft",size:"sm",class:"font-mono shrink-0 tabular-nums"},{default:g(()=>[y(r(s.entry.status>0?s.entry.status:"—"),1)]),_:1},8,["color"]),s.entry.statusText?(t(),o("span",Pa,r(s.entry.statusText),1)):l("",!0)]),n("code",Ua,r(s.entry.url),1),s.entry.failureText?(t(),o("p",Ba,r(s.entry.failureText),1)):l("",!0),n("div",Fa,[s.entry.resourceType?(t(),o("span",Va,r(s.entry.resourceType),1)):l("",!0),s.entry.mimeType?(t(),o("span",Ea,r(s.entry.mimeType),1)):l("",!0),s.entry.responseBodySize!=null?(t(),o("span",Oa,r(("formatBytes"in b?b.formatBytes:e(we))(s.entry.responseBodySize)),1)):l("",!0),s.entry.transferSize!=null?(t(),o("span",Ha,r(("formatBytes"in b?b.formatBytes:e(we))(s.entry.transferSize))+" transferred",1)):l("",!0),n("span",Ka,r(("formatDuration"in b?b.formatDuration:e(q))(s.entry.duration)),1),s.entry.duringFailure?(t(),w(F,{key:4,color:"error",variant:"subtle",size:"xs"},{default:g(()=>[...x[1]||(x[1]=[y("During failing action",-1)])]),_:1})):l("",!0)])]),e(h).length>0&&e(a)>0?(t(),o("div",Wa,[x[2]||(x[2]=n("p",{class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5"},"Timing",-1)),n("div",Ga,[(t(!0),o(B,null,ee(e(h),R=>(t(),o("div",{key:R.key,class:W(R.color),style:Ce({width:`${Math.max(.5,R.value/e(a)*100)}%`}),title:`${R.label}: ${("formatDuration"in b?b.formatDuration:e(q))(R.value)}`},null,14,Ja))),128))]),n("div",qa,[(t(!0),o(B,null,ee(e(h),R=>(t(),o("span",{key:R.key,class:"inline-flex items-center gap-1"},[n("span",{class:W(["size-2 rounded-full",R.color])},null,2),y(" "+r(R.label)+" ",1),n("span",Qa,r(("formatDuration"in b?b.formatDuration:e(q))(R.value)),1)]))),128))])])):l("",!0),(t(),o(B,null,ee(["request","response"],R=>n("div",{key:R},[n("p",Za,r(R)+" headers",1),(R==="request"?s.entry.requestHeaders:s.entry.responseHeaders).length>0?(t(),o("div",Xa,[(t(!0),o(B,null,ee(R==="request"?s.entry.requestHeaders:s.entry.responseHeaders,H=>(t(),o("div",{key:`${R}-${H.name}`,class:"px-2 py-1 text-xs font-mono flex gap-2"},[n("span",Ya,r(H.name)+":",1),n("span",eo,r(H.value),1)]))),128))])):(t(),o("p",to,"None recorded."))])),64)),s.entry.requestPostData?(t(),o("div",so,[x[3]||(x[3]=n("p",{class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5"},"Request body",-1)),d(N,{code:s.entry.requestPostData,lang:e(u)?"json":"text"},null,8,["code","lang"])])):l("",!0),n("div",null,[x[4]||(x[4]=n("p",{class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5"},"Response body",-1)),e(P)?(t(),w(p,{key:0,text:"Loading body…",padded:!1})):e(i)?(t(),o(B,{key:1},[e(i).status==="ok"&&e(i).kind==="image"?(t(),o("div",no,[n("img",{src:e(i).dataUri,alt:s.entry.url,class:"max-w-full max-h-96"},null,8,ao)])):e(i).status==="ok"?(t(),o("div",oo,[d(N,{code:e(i).content??"",lang:e(i).kind==="json"?"json":"text"},null,8,["code","lang"]),e(i).truncated?(t(),o("p",ro,"Preview truncated.")):l("",!0)])):(t(),o("p",io,r(e(i).status==="too-large"?`Body too large to preview (${("formatBytes"in b?b.formatBytes:e(we))(e(i).size??0)}) — open the trace viewer to inspect it.`:e(i).status==="unsupported"?`No preview for ${e(i).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",lo,"No body captured for this request."))])])):l("",!0)]),_:1},8,["open"])}}}),co=Object.assign(uo,{__name:"TraceNetworkDrawer"}),mo={class:"flex items-center justify-between gap-2 mb-2"},fo={key:0,class:"hidden sm:flex items-center gap-1.5 text-xs text-gray-400"},go={class:"space-y-1 max-h-[28rem] overflow-y-auto"},po=["title","onClick"],yo={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"},xo={key:1,class:"shrink-0 text-xs text-gray-400 tabular-nums hidden sm:inline"},_o={class:"relative h-1.5 mt-1 rounded bg-gray-100 dark:bg-gray-800 overflow-hidden"},ko={key:0,class:"mt-2 text-xs text-gray-400 dark:text-gray-500"},bo=se({__name:"TraceNetworkList",props:{data:{},runId:{},testRunsCaseId:{}},setup(s){const _=s,v=j("all"),k=$(()=>_.data.requests??[]),I=$(()=>({total:k.value.length,failed:k.value.filter(C=>C.failed).length,duringFailure:k.value.filter(C=>C.duringFailure).length})),h=$(()=>[{label:`All (${I.value.total})`,value:"all"},{label:`Failed (${I.value.failed})`,value:"failed",disabled:I.value.failed===0},{label:`During failure (${I.value.duringFailure})`,value:"duringFailure",disabled:I.value.duringFailure===0}]),a=$(()=>v.value==="failed"?k.value.filter(C=>C.failed):v.value==="duringFailure"?k.value.filter(C=>C.duringFailure):k.value);function u(C){try{return new URL(C).pathname||C}catch{return C}}const i=$(()=>Math.max(1,_.data.timelineDuration??1));function P(C){const R=Math.max(0,Math.min(100,C.start/i.value*100)),H=Math.min(100-R,Math.max(1.5,C.duration/i.value*100));return{left:`${R}%`,width:`${H}%`}}const U=$(()=>{const C=_.data.failingWindow;if(!C||C.end<=C.start)return null;const R=Math.max(0,Math.min(100,C.start/i.value*100)),H=Math.max(.5,Math.min(100-R,(C.end-C.start)/i.value*100));return{left:`${R}%`,width:`${H}%`}});function b(C){return C.failed?"bg-red-500":C.duration>1e3?"bg-orange-400":"bg-gray-400 dark:bg-gray-500"}function x(C){return C.failed?"border-l-2 border-l-red-400 dark:border-l-red-600":C.duringFailure?"border-l-2 border-l-amber-400 dark:border-l-amber-600":"border-l-2 border-l-transparent"}const F=j(null),N=j(!1);function p(C){F.value=C,N.value=!0}return(C,R)=>{const H=We,L=ge,K=co;return t(),o("div",null,[n("div",mo,[d(H,{modelValue:e(v),"onUpdate:modelValue":R[0]||(R[0]=D=>fe(v)?v.value=D:null),items:e(h),size:"xs",variant:"link",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"]),s.data.failingWindow?(t(),o("span",fo,[...R[2]||(R[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),y(" failing action ",-1)])])):l("",!0)]),n("div",go,[(t(!0),o(B,null,ee(e(a),D=>(t(),o("button",{key:D.index,type:"button",class:W([x(D),"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:D.url,onClick:Q=>p(D)},[n("div",yo,[d(L,{color:("httpMethodColor"in C?C.httpMethodColor:e(He))(D.method),variant:"soft",size:"xs",class:"font-mono shrink-0"},{default:g(()=>[y(r(D.method),1)]),_:2},1032,["color"]),d(L,{color:("httpStatusColor"in C?C.httpStatusColor:e(Ke))(D.status),variant:"soft",size:"xs",class:"font-mono shrink-0 tabular-nums",title:D.failureText||D.statusText},{default:g(()=>[y(r(D.status>0?D.status:"—"),1)]),_:2},1032,["color","title"]),n("code",ho,r(u(D.url)),1),D.resourceType?(t(),o("span",vo,r(D.resourceType),1)):l("",!0),D.responseBodySize!=null?(t(),o("span",xo,r(("formatBytes"in C?C.formatBytes:e(we))(D.responseBodySize)),1)):l("",!0),n("span",{class:W(["ml-1 shrink-0 text-xs tabular-nums",D.duration>1e3?"text-red-600 font-medium":D.duration>500?"text-orange-500":"text-gray-500"])},r(("formatDuration"in C?C.formatDuration:e(q))(D.duration)),3)]),n("div",_o,[e(U)?(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:Ce(e(U))},null,4)):l("",!0),n("div",{class:W(["absolute inset-y-0 rounded-full",b(D)]),style:Ce(P(D))},null,6)])],10,po))),128))]),s.data.truncated?(t(),o("p",ko," Showing the first "+r(e(k).length)+" of "+r(s.data.totalBeforeCap)+" requests recorded in the trace. ",1)):l("",!0),d(K,{open:e(N),"onUpdate:open":R[1]||(R[1]=D=>fe(N)?N.value=D:null),entry:e(F),"run-id":s.runId,"test-runs-case-id":s.testRunsCaseId},null,8,["open","entry","run-id","test-runs-case-id"])])}}}),wo=Object.assign(bo,{__name:"TraceNetworkList"}),$o={class:"tabular-nums"},Co=se({__name:"DurationValue",props:{ms:{default:null},fallback:{default:"—"},unitClass:{default:"text-gray-400/70 dark:text-gray-500/70"}},setup(s){const _=s,v=$(()=>Cs(_.ms));return(k,I)=>(t(),o("span",$o,[e(v)?(t(),o(B,{key:0},[y(r(e(v).value),1),n("span",{class:W(s.unitClass)},r(e(v).unit),3)],64)):(t(),o(B,{key:1},[y(r(s.fallback),1)],64))]))}}),To=Object.assign(Co,{__name:"DurationValue"}),So={class:"flex flex-wrap items-center gap-x-3 gap-y-1"},Do={key:0,class:"flex items-center gap-2 text-xs"},Io={key:0,class:"flex items-center gap-1 text-red-600 dark:text-red-400"},Ro={key:1,class:"flex items-center gap-1 text-amber-600 dark:text-amber-400"},Lo={key:2,class:"text-xs text-gray-400 py-2"},zo={key:1,class:"space-y-1 max-h-[28rem] overflow-y-auto"},Mo=["disabled","onClick"],No={key:1,class:"size-3.5 shrink-0"},jo=["title"],Ao=["title"],Po=["title"],Uo=["title"],Bo=["title"],Fo=["title"],Vo={key:0,class:"px-2 pt-1.5 pb-2 pl-7 space-y-1"},Eo={class:"flex items-center gap-1.5 text-[11px] uppercase tracking-wide text-gray-400"},Oo=["title"],Ho={key:0,class:"shrink-0 text-[10px] uppercase text-gray-400 font-mono hidden sm:inline"},Ko={class:"relative flex-1 h-3 rounded bg-gray-100 dark:bg-gray-800 min-w-0"},Wo={key:1,class:"px-2 pb-2 pl-7 space-y-1.5"},Go={class:"flex items-start gap-2"},Jo={key:0,class:"text-gray-400 shrink-0 font-mono"},qo={class:"font-mono break-all text-gray-700 dark:text-gray-300 flex-1 min-w-0"},Qo=["title"],Zo={key:0,class:"mt-1.5"},Xo=["onClick"],Yo={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"},er={key:2,class:"mt-3 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},tr={key:3,class:"mt-3 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},sr=se({__name:"TestCaseNetworkRequests",props:{requests:{},runId:{},testRunsCaseId:{},hasTrace:{type:Boolean}},setup(s,{expose:_}){const v=s,k=j("all"),{data:I,pending:h,load:a}=ga(()=>v.runId,()=>v.testRunsCaseId,()=>!!v.hasTrace),u=j(null),i=$({get:()=>u.value??(v.requests.length===0&&v.hasTrace?"trace":"captured"),set:m=>{u.value=m}});ve(()=>i.value==="trace",m=>{m&&a()},{immediate:!0});const P=$(()=>I.value?.status==="ok"?I.value.requests?.length??0:null),U=$(()=>[{label:`Captured (${v.requests.length})`,value:"captured",disabled:v.requests.length===0},{label:P.value!=null?`Full trace (${P.value})`:"Full trace",value:"trace"}]);function b(){v.hasTrace&&(u.value="trace")}_({showTraceMode:b});const x=j(new Set);function F(m){const f=new Set(x.value);f.has(m)?f.delete(m):f.add(m),x.value=f}const N=j(new Set);function p(m){const f=new Set(N.value);f.has(m)?f.delete(m):f.add(m),N.value=f}function C(m){if(m.length===0)return[];const f=Math.min(...m.map(O=>O.startMs)),A=Math.max(...m.map(O=>O.startMs+O.durMs)),G=Math.max(1,A-f),Z=new Map(m.map(O=>[O.id,O])),te=O=>{let Y=0,X=O;const ce=new Set;for(;X?.parentId&&Z.has(X.parentId)&&!ce.has(X.id)&&(ce.add(X.id),X=Z.get(X.parentId),Y++,!(Y>8)););return Y};return[...m].sort((O,Y)=>O.startMs-Y.startMs||Y.durMs-O.durMs).map(O=>({...O,offsetPct:(O.startMs-f)/G*100,widthPct:Math.max(1.5,O.durMs/G*100),depth:te(O)}))}function R(m){return m.status==="error"?"bg-red-400 dark:bg-red-500":m.kind==="db"?"bg-violet-400 dark:bg-violet-500":m.kind==="client"?"bg-sky-400 dark:bg-sky-500":m.kind==="internal"?"bg-gray-400 dark:bg-gray-500":"bg-emerald-400 dark:bg-emerald-500"}function H(m){const f=m.toLowerCase();return f==="critical"||f==="fatal"?3:f==="error"?2:f==="warning"||f==="warn"?1:0}function L(m){const f=H(m);if(f>=2)return"error";if(f===1)return"warning";const A=m.toLowerCase();return A==="info"||A==="information"?"info":"neutral"}function K(m){try{return new URL(m).pathname||m}catch{return m}}function D(m){return(m.split("/")[1]??m).replace(/^vnd\.[^+]*\+?/,"").replace(/^x-/,"")||m}function Q(m){return m?new Date(m).toLocaleString():""}const ae=$(()=>v.requests.map((m,f)=>{const A=Array.isArray(m.serverLogs)?m.serverLogs:[],G=Array.isArray(m.serverTraces)?m.serverTraces:[];let Z=0,te=0;for(const Y of A){const X=H(Y.level);X>=2?Z++:X===1&&te++}const O=G.find(Y=>!Y.parentId)??G[0];return{...m,_index:f,logs:[...A].sort((Y,X)=>Y.timestamp-X.timestamp),spans:G,serverMs:O?O.durMs:null,errorLogCount:Z,warnLogCount:te,failed:m.status>=400,hasDetail:A.length>0||G.length>0,path:K(m.url)}})),J=$(()=>{let m=0,f=0,A=0,G=0,Z=0;for(const te of ae.value)te.failed&&m++,te.logs.length>0&&f++,te.spans.length>0&&A++,G+=te.errorLogCount,Z+=te.warnLogCount;return{total:ae.value.length,failed:m,withLogs:f,withSpans:A,errorLogs:G,warnLogs:Z}}),ie=$(()=>{let m=ae.value;return k.value==="failed"?m=m.filter(f=>f.failed):k.value==="logs"&&(m=m.filter(f=>f.logs.length>0)),[...m].sort((f,A)=>{const G=Z=>(Z.errorLogCount>0?3:0)+(Z.failed?2:0)+(Z.logs.length>0?1:0);return G(A)-G(f)||f._index-A._index})}),z=$(()=>[{label:`All (${J.value.total})`,value:"all"},{label:`Failed (${J.value.failed})`,value:"failed",disabled:J.value.failed===0},{label:`With logs (${J.value.withLogs})`,value:"logs",disabled:J.value.withLogs===0}]),ye=$(()=>J.value.withLogs>0);function ue(m){return m.errorLogCount>0||m.status>=500?"border-l-2 border-l-red-400 dark:border-l-red-600":m.failed||m.warnLogCount>0?"border-l-2 border-l-amber-400 dark:border-l-amber-600":"border-l-2 border-l-transparent"}return(m,f)=>{const A=re,G=We,Z=Je,te=wo,O=ge,Y=To,X=Oe,ce=pe;return t(),w(ce,{icon:"i-lucide-network",title:"Network & backend logs",count:e(i)==="trace"?e(P):e(J).total,help:"case.network"},{actions:g(()=>[n("div",So,[e(i)==="captured"?(t(),o(B,{key:0},[e(J).errorLogs>0||e(J).warnLogs>0?(t(),o("div",Do,[e(J).errorLogs>0?(t(),o("span",Io,[d(A,{name:"i-lucide-octagon-alert",class:"size-3.5"}),y(r(e(J).errorLogs),1)])):l("",!0),e(J).warnLogs>0?(t(),o("span",Ro,[d(A,{name:"i-lucide-triangle-alert",class:"size-3.5"}),y(r(e(J).warnLogs),1)])):l("",!0)])):l("",!0),d(G,{modelValue:e(k),"onUpdate:modelValue":f[0]||(f[0]=M=>fe(k)?k.value=M:null),items:e(z),size:"xs",variant:"link",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"])],64)):l("",!0),s.hasTrace?(t(),w(G,{key:1,modelValue:e(i),"onUpdate:modelValue":f[1]||(f[1]=M=>fe(i)?i.value=M:null),items:e(U),size:"xs",variant:"pill",ui:{list:"gap-1 p-0.5",trigger:"px-2"}},null,8,["modelValue","items"])):l("",!0)])]),default:g(()=>[e(i)==="trace"?(t(),o(B,{key:0},[e(h)||!e(I)?(t(),w(Z,{key:0,text:"Parsing trace network stream…"})):e(I).status==="ok"?(t(),w(te,{key:1,data:e(I),"run-id":s.runId??null,"test-runs-case-id":s.testRunsCaseId??0},null,8,["data","run-id","test-runs-case-id"])):(t(),o("p",Lo,"No network activity recorded in this trace."))],64)):(t(),o("div",zo,[(t(!0),o(B,null,ee(e(ie),M=>(t(),o("div",{key:M._index,class:W([ue(M),"rounded bg-gray-50/60 dark:bg-gray-800/40"])},[n("button",{type:"button",class:W(["w-full flex items-center gap-2 py-1.5 px-2 text-sm text-left",M.hasDetail?"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800":"cursor-default"]),disabled:!M.hasDetail,onClick:V=>M.hasDetail&&F(M._index)},[M.hasDetail?(t(),w(A,{key:0,name:e(x).has(M._index)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5 shrink-0 text-gray-400"},null,8,["name"])):(t(),o("span",No)),d(O,{color:("httpMethodColor"in m?m.httpMethodColor:e(He))(M.method),variant:"soft",size:"xs",class:"font-mono shrink-0"},{default:g(()=>[y(r(M.method),1)]),_:2},1032,["color"]),d(O,{color:("httpStatusColor"in m?m.httpStatusColor:e(Ke))(M.status),variant:"soft",size:"xs",class:"font-mono shrink-0 tabular-nums"},{default:g(()=>[y(r(M.status||"—"),1)]),_:2},1032,["color"]),n("code",{class:"truncate text-xs flex-1 min-w-0",title:M.url},r(M.path),9,jo),M.contentType?(t(),o("span",{key:2,class:"shrink-0 text-xs text-gray-400 font-mono hidden md:inline",title:`Response content type: ${M.contentType}`},r(D(M.contentType)),9,Ao)):l("",!0),M.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:`${M.errorLogCount} backend error log(s)`},[d(A,{name:"i-lucide-octagon-alert",class:"size-3.5"}),y(r(M.errorLogCount),1)],8,Po)):l("",!0),M.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:`${M.warnLogCount} backend warning log(s)`},[d(A,{name:"i-lucide-triangle-alert",class:"size-3.5"}),y(r(M.warnLogCount),1)],8,Uo)):l("",!0),M.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 (${M.spans.length} span${M.spans.length===1?"":"s"})`},[d(A,{name:"i-lucide-server",class:"size-3.5"}),y(r(("formatDuration"in m?m.formatDuration:e(q))(M.serverMs)),1)],8,Bo)):l("",!0),M.startTime?(t(),o("span",{key:6,class:"shrink-0 text-xs text-gray-400 hidden sm:inline",title:Q(M.startTime)},r(("formatRelativeTime"in m?m.formatRelativeTime:e(Se))(M.startTime)),9,Fo)):l("",!0),n("span",{class:W(["ml-1 shrink-0 text-xs tabular-nums",(M.duration??0)>1e3?"text-red-600 font-medium":(M.duration??0)>500?"text-orange-500":"text-gray-500"])},r(("formatDuration"in m?m.formatDuration:e(q))(M.duration)),3)],10,Mo),M.spans.length>0&&e(x).has(M._index)?(t(),o("div",Vo,[n("div",Eo,[d(A,{name:"i-lucide-waypoints",class:"size-3.5"}),f[2]||(f[2]=y("Server trace ",-1))]),(t(!0),o(B,null,ee(C(M.spans),V=>(t(),o("div",{key:V.id,class:"flex items-center gap-2 text-xs",title:V.status==="error"?`${V.name} (error)`:V.name},[n("div",{class:"w-40 sm:w-56 shrink-0 flex items-center gap-1 min-w-0",style:Ce({paddingLeft:`${V.depth*12}px`})},[V.kind?(t(),o("span",Ho,r(V.kind),1)):l("",!0),n("span",{class:W(["truncate font-mono",V.status==="error"?"text-red-600 dark:text-red-400":"text-gray-600 dark:text-gray-300"])},r(V.name),3)],4),n("div",Ko,[n("div",{class:W(["absolute top-0 h-3 rounded",R(V)]),style:Ce({left:`${V.offsetPct}%`,width:`${V.widthPct}%`})},null,6)]),d(Y,{ms:V.durMs,class:"w-12 shrink-0 text-right text-gray-500"},null,8,["ms"])],8,Oo))),128))])):l("",!0),M.logs.length>0&&e(x).has(M._index)?(t(),o("div",Wo,[(t(!0),o(B,null,ee(M.logs,(V,xe)=>(t(),o("div",{key:xe,class:"rounded border border-default bg-white dark:bg-gray-900/60 p-2 text-xs"},[n("div",Go,[d(O,{color:L(V.level),variant:"soft",size:"xs",class:"shrink-0 capitalize"},{default:g(()=>[y(r(V.level),1)]),_:2},1032,["color"]),V.category?(t(),o("span",Jo,"["+r(V.category)+"]",1)):l("",!0),n("span",qo,r(V.message),1),V.timestamp?(t(),o("span",{key:1,class:"shrink-0 text-gray-400 tabular-nums",title:Q(V.timestamp)},r(("formatRelativeTime"in m?m.formatRelativeTime:e(Se))(V.timestamp)),9,Qo)):l("",!0)]),V.stack?(t(),o("div",Zo,[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=>p(`${M._index}:${xe}`)},[d(A,{name:e(N).has(`${M._index}:${xe}`)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3"},null,8,["name"]),f[3]||(f[3]=y(" Stack trace ",-1))],8,Xo),e(N).has(`${M._index}:${xe}`)?(t(),o("pre",Yo,r(V.stack),1)):l("",!0)])):l("",!0)]))),128))])):l("",!0)],2))),128))])),e(i)==="captured"&&!e(ye)?(t(),o("p",er,[d(A,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),f[5]||(f[5]=y(" No backend server logs captured — install ",-1)),d(X,{to:"backend-logs","no-icon":"",class:"underline"},{default:g(()=>[...f[4]||(f[4]=[y("a Piwi backend integration",-1)])]),_:1}),f[6]||(f[6]=y(" to see server-side warnings and errors under each request. ",-1))])):l("",!0),s.hasTrace?l("",!0):(t(),o("p",tr,[d(A,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),n("span",null,[f[8]||(f[8]=y(" Want to go deeper? Record traces (",-1)),f[9]||(f[9]=n("code",null,"trace: 'retain-on-failure'",-1)),f[10]||(f[10]=y(") to see every request with headers, timing and bodies here. ",-1)),d(X,{to:"ui-overview#trace-powered-deep-views","no-icon":"",class:"underline"},{default:g(()=>[...f[7]||(f[7]=[y("Learn more",-1)])]),_:1})])]))]),_:1},8,["count"])}}}),nr=Object.assign(sr,{__name:"TestCaseNetworkRequests"}),ar={class:"space-y-2"},or=se({__name:"TestCaseTracesCard",props:{traces:{}},setup(s){return(_,v)=>{const k=Ns,I=pe;return s.traces.length>0?(t(),w(I,{key:0,icon:"i-lucide-bug-play",title:"Traces",count:s.traces.length,help:"case.traces"},{default:g(()=>[n("div",ar,[(t(!0),o(B,null,ee(s.traces,h=>(t(),w(k,{key:h.id,trace:h,class:"py-2 px-3 rounded-lg border"},null,8,["trace"]))),128))])]),_:1},8,["count"])):l("",!0)}}}),rr=Object.assign(or,{__name:"TestCaseTracesCard"}),ir={class:"space-y-3"},lr={class:"flex items-center justify-between px-3 py-2 bg-gray-50 dark:bg-gray-800/50 border-b"},ur={class:"flex items-center gap-2 min-w-0"},cr={class:"text-sm font-medium truncate"},dr={key:0,class:"text-xs text-gray-400 shrink-0"},mr={class:"text-xs text-gray-400"},fr={class:"flex items-center gap-1 shrink-0"},gr=["href"],pr={key:0,class:"bg-gray-100 dark:bg-gray-900"},yr=["src","alt","onClick"],hr={key:1,class:"bg-black"},vr={key:2,class:"bg-gray-50 dark:bg-gray-900"},xr={key:0,class:"flex items-center justify-center py-8"},_r={key:1,class:"p-4 text-red-500 text-sm"},kr={key:2,class:"p-4 overflow-auto max-h-96"},br={class:"text-sm whitespace-pre-wrap font-sans leading-relaxed"},wr=se({__name:"TestCaseAttachmentsCard",props:{attachments:{}},setup(s){const _=s,v=Ee(),k=j(null),I=$(()=>_.attachments.filter(L=>Te(L.path,L.contentType)).map(L=>({src:U(L.path,L.contentType),name:L.name||b(L.path)})));function h(L){k.value=L}const a=new Set([".md",".mdx",".markdown"]),u=new Set(["text/markdown","text/x-markdown"]);function i(L){return L.toLowerCase().split(".").pop()||""}function P(L,K){return!!(a.has(i(L))||K&&u.has(K.toLowerCase()))}function U(L,K){return vt(L,K,v.app?.baseURL)}function b(L){return L.split("/").pop()||L}function x(L){return L==null?"":we(L)}const F=j({}),N=j({}),p=j({}),C=j(new Set);async function R(L){if(F.value[L.id]===void 0&&!p.value[L.id]){p.value[L.id]=!0,N.value[L.id]=null;try{const K=await $fetch(U(L.path,L.contentType),{responseType:"text"});F.value[L.id]=K}catch{N.value[L.id]="Failed to load preview"}finally{p.value[L.id]=!1}}}function H(L,K){const D=new Set(C.value);D.has(L)?D.delete(L):(D.add(L),R(K)),C.value=D}return(L,K)=>{const D=re,Q=De,ae=js,J=As,ie=pe;return s.attachments.length>0?(t(),w(ie,{key:0,icon:"i-lucide-paperclip",title:"Attachments",count:s.attachments.length},{default:g(()=>[n("div",ir,[(t(!0),o(B,null,ee(s.attachments,z=>(t(),o("div",{key:z.id,class:"rounded-lg border overflow-hidden"},[n("div",lr,[n("div",ur,[d(D,{name:e(Te)(z.path,z.contentType)?"i-lucide-image":e(je)(z.path,z.contentType)?"i-lucide-video":P(z.path,z.contentType)?"i-lucide-file-text":"i-lucide-file",class:"size-4 text-gray-400 shrink-0"},null,8,["name"]),n("span",cr,r(b(z.path)),1),z.name&&z.name!==b(z.path)?(t(),o("span",dr,r(z.name),1)):l("",!0),n("span",mr,r(x(z.size)),1)]),n("div",fr,[P(z.path,z.contentType)?(t(),w(Q,{key:0,size:"xs",color:"neutral",variant:"soft",onClick:ye=>H(z.id,z)},{default:g(()=>[y(r(e(C).has(z.id)?"Hide preview":"Preview"),1)]),_:2},1032,["onClick"])):l("",!0),n("a",{href:U(z.path,z.contentType),target:"_blank",class:"text-primary hover:underline text-xs shrink-0"},"Open",8,gr)])]),e(Te)(z.path,z.contentType)?(t(),o("div",pr,[n("img",{src:U(z.path,z.contentType),alt:z.name||"Screenshot",class:"max-w-full max-h-96 object-contain mx-auto cursor-pointer hover:opacity-90 transition-opacity",loading:"lazy",onClick:ye=>h(e(I).findIndex(ue=>ue.src===U(z.path,z.contentType)))},null,8,yr)])):e(je)(z.path,z.contentType)?(t(),o("div",hr,[d(ae,{src:U(z.path,z.contentType)},null,8,["src"])])):P(z.path,z.contentType)&&e(C).has(z.id)?(t(),o("div",vr,[e(p)[z.id]?(t(),o("div",xr,[d(D,{name:"i-lucide-loader-circle",class:"size-5 animate-spin text-gray-400"})])):e(N)[z.id]?(t(),o("div",_r,r(e(N)[z.id]),1)):e(F)[z.id]?(t(),o("div",kr,[n("pre",br,r(e(F)[z.id]),1)])):l("",!0)])):l("",!0)]))),128))]),d(J,{modelValue:e(k),"onUpdate:modelValue":K[0]||(K[0]=z=>fe(k)?k.value=z:null),images:e(I)},null,8,["modelValue","images"])]),_:1},8,["count"])):l("",!0)}}}),$r=Object.assign(wr,{__name:"TestCaseAttachmentsCard"});function Cr(s){return Array.isArray(s)?s.some(_=>_&&typeof _.type=="string"&&_.type.toLowerCase()==="slow"):!1}function Tr(s){const _=[];if(!s)return _;const v=s.steps||[],I=v.filter(a=>a.category==="navigation").filter(a=>a.duration>3e3);if(I.length>0){const a=I.sort((u,i)=>i.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.).`})}v.length>20&&_.push({type:"info",message:"Many sequential actions",details:`This test has ${v.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 h=v.filter(a=>a.category==="assertion"&&a.duration>2e3);if(h.length>0){const a=h.sort((u,i)=>i.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 Cr(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.`}),_}const Sr={class:"space-y-4"},Dr=["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"},Nr={key:0},jr={class:"flex flex-wrap items-center gap-x-3 gap-y-1.5 text-xs mb-3"},Ar={class:"font-medium text-gray-600 dark:text-gray-300"},Pr={class:"tabular-nums text-gray-500 dark:text-gray-400"},Ur={class:"text-xs tabular-nums text-gray-400 dark:text-gray-500"},Br={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"},Fr={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"},Vr={class:"flex items-center gap-2"},Er={key:0,class:"text-xs text-red-500 mt-1 whitespace-pre-wrap break-words font-mono"},Or={class:"min-w-[6rem]"},Hr={class:"flex items-center justify-between gap-2"},Kr={key:0,class:"text-xs tabular-nums text-gray-400 dark:text-gray-500"},Wr={class:"relative mt-1 h-1.5 w-full overflow-hidden rounded-full bg-gray-100 dark:bg-gray-800"},Gr={class:"space-y-4 pt-4"},Jr={key:3,class:"flex flex-col items-center justify-center py-12 text-gray-400"},qr={class:"space-y-4 pt-1"},Qr={key:0,class:"space-y-2"},Zr={class:"flex items-start gap-2"},Xr={class:"space-y-4"},Yr={key:3,class:"text-xs text-gray-400 pt-1"},ei={class:"bg-gray-100 dark:bg-gray-800 px-1 rounded"},ti={class:"text-xs text-gray-400"},si={class:"space-y-4 pt-4"},ni={key:0,class:"space-y-4"},ai={class:"flex items-center justify-end"},oi={class:"text-xs whitespace-nowrap"},ri={class:"text-gray-500"},ii={class:"text-gray-400 ml-1"},li={key:0},ui={key:1,class:"text-gray-400"},ci=["title"],Yi=se({__name:"[id]",async setup(s){let _,v;const k=Zt(),I=Xt(),h=k.params.id,{data:a,refresh:u}=([_,v]=dt(()=>ft(`/api/test-run-cases/${h}`,"$cViH4nbiGI")),_=await _,v(),_),i=j([]);ve(()=>a.value?.testCaseId,async c=>{if(c)try{i.value=await $fetch(`/api/test-cases/${c}/history`)}catch{i.value=[]}else i.value=[]},{immediate:!0});const{data:P,refresh:U}=([_,v]=dt(()=>ft(`/api/test-run-cases/${h}/traces`,"$GsSNbTq_Ec")),_=await _,v(),_),b=$(()=>(P.value?.length??0)>0);Yt($(()=>({title:`${a.value?.title||`Test run case #${h}`} — Piwi Dashboard`})));const x=$(()=>!!a.value?.error),F=$(()=>a.value?Tr(a.value):[]),N=$(()=>a.value?.steps?a.value.steps:[]),p=$(()=>a.value?.webVitals??null),C=$(()=>a.value?.networkRequests??[]),R=$(()=>{if(!i.value||i.value.length<2||!a.value?.duration)return null;const c=i.value.filter(oe=>oe.duration!==null&&oe.id!==a.value?.id);if(c.length===0)return null;const T=c.reduce((oe,me)=>oe+(me.duration||0),0)/c.length,E=a.value.duration,ne=E-T,de=T>0?Math.round(ne/T*100):0;return{avg:Math.round(T),current:E,diff:Math.round(ne),pct:de}}),H=$(()=>a.value?.testRun?.metadata),L=$(()=>{const c=H.value;return c?.scm?c.scm:null}),K=$(()=>{const c=H.value;return c?.ci?c.ci:null}),D=$(()=>a.value?.failureCluster??null),Q=$(()=>{const c=[];return x.value&&c.push({label:"Diagnosis",icon:"i-lucide-stethoscope",value:"diagnosis",slot:"diagnosis"}),c.push({label:`Steps (${N.value.length})`,icon:"i-lucide-list-checks",value:"steps",slot:"steps"}),x.value||c.push({label:"Artifacts",icon:"i-lucide-paperclip",value:"artifacts",slot:"artifacts"}),c.push({label:"Performance",icon:"i-lucide-gauge",value:"performance",slot:"performance"}),c.push({label:`History${i.value?.length?` (${i.value.length})`:""}`,icon:"i-lucide-trending-up",value:"history",slot:"history"}),c}),ae=$(()=>Q.value.map(c=>c.value));function J(){return x.value?"diagnosis":"steps"}function ie(c){let T=typeof c=="string"?c:"";return T==="error"&&(T="diagnosis"),T==="traces"&&(T=x.value?"diagnosis":"artifacts"),ae.value.includes(T)?T:J()}const z=j(ie(k.query.tab));ve(ae,c=>{c.includes(z.value)||(z.value=ie(k.query.tab))}),ve(z,c=>{k.query.tab!==c&&I.replace({query:{...k.query,tab:c}})},{immediate:!0});const ye=[{accessorKey:"startTime",header:"Date"},{accessorKey:"status",header:"Status"},{accessorKey:"duration",header:"Duration"},{accessorKey:"retries",header:"Retries"},{accessorKey:"runId",header:"Run"},{accessorKey:"error",header:"Error"}],ue={navigation:"info",assertion:"success",action:"warning",input:"warning",api:"info",wait:"neutral",hook:"neutral",fixture:"neutral"},m=[{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"}}}],f=$(()=>{const c=new Map;for(const T of N.value){const E=c.get(T.category)??{count:0,duration:0};E.count+=1,E.duration+=T.duration||0,c.set(T.category,E)}return Array.from(c,([T,E])=>({category:T,...E})).sort((T,E)=>E.duration-T.duration)}),A=$(()=>{let c=-1,T=-1;return N.value.forEach((E,ne)=>{(E.duration||0)>T&&(T=E.duration||0,c=ne)}),c}),G=$(()=>N.value.reduce((c,T)=>Math.max(c,T.duration||0),0)),Z=$(()=>N.value.length>0&&N.value.every(c=>typeof c.startTime=="number")),te=$(()=>a.value?.startedAt??(Z.value?Math.min(...N.value.map(c=>c.startTime)):0)),O=$(()=>{const c=a.value?.duration??0;if(c>0)return c;if(Z.value){const T=Math.max(...N.value.map(E=>E.startTime+(E.duration||0)));return Math.max(1,T-te.value)}return 0});function Y(c){if(Z.value&&O.value>0){const E=Math.max(0,Math.min(100,(c.startTime-te.value)/O.value*100)),ne=Math.min(100-E,Math.max(1.5,(c.duration||0)/O.value*100));return{left:`${E}%`,width:`${ne}%`}}return{left:"0%",width:`${G.value>0?Math.max(2,(c.duration||0)/G.value*100):0}%`}}function X(c){const T=a.value?.duration??0;if(T<=0)return"";const E=c/T*100;return E>0&&E<1?"<1%":`${Math.round(E)}%`}function ce(c){return c>2e3?"text-red-600 font-medium":c>500?"text-orange-500":"text-gray-500"}function M(c){return c>2e3?"bg-red-500":c>500?"bg-orange-400":"bg-gray-400 dark:bg-gray-500"}const V=$(()=>a.value?.testRun?.environment),xe=$(()=>Qs([{filePath:a.value?.filePath??"",title:a.value?.title??"",line:a.value?.line??null,projectName:a.value?.browser?.projectName??null}])),{copy:qe,copied:Qe}=_t(),wt=$(()=>[{label:Qe.value?"Copied":"Retry command",icon:Qe.value?"i-lucide-check":"i-lucide-play",onClick:()=>qe(xe.value,{toast:"Retry command copied"})},{label:"Refresh",icon:"i-lucide-refresh-cw",onClick:()=>u()}]),$t=!!Ee().public.demoMode;let he=null;const Ze=$(()=>{const c=a.value?.testRun?.status;return c==="running"||c==="finalizing"});function Ct(){if($t||he)return;const c=a.value?.testRun?.id;c&&(he=new EventSource(`/api/test-runs/${c}/stream`),he.onmessage=T=>{try{const E=JSON.parse(T.data);E.type==="case-files"&&E.data?.testRunsCaseId===Number(h)?(u(),U()):E.type==="run-finished"&&(u(),U(),Pe())}catch{}},he.onerror=()=>{})}function Pe(){he&&(he.close(),he=null)}ve(Ze,c=>{c?Ct():Pe()},{immediate:!0}),es(Pe);const{copyRich:Tt,copied:Xe}=_s();function St(){const c=a.value;if(!c?.error)return;const T=window.location.origin,E=c.title??"Unknown test",ne=c.location??"",de=c.error.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,""),oe=be=>be.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),me=D.value?`${T}/failure-clusters/${D.value.id}`:null,ze=`${T}/test-run-cases/${h}?tab=diagnosis`,ke=a.value?.testCaseId?`${T}/test-cases/${a.value.testCaseId}`:null,Me=[`❌ Test failed: ${E}`,ne?`Location: ${ne}`:null,"","Error:",de,"",me?`Failure cluster: ${me}`:null,`Execution: ${ze}`,ke?`History: ${ke}`:null].filter(be=>be!==null).join(`
|
|
4
|
+
`),Be=[`<p><strong>❌ Test failed: ${oe(E)}</strong>${ne?`<br><code>${oe(ne)}</code>`:""}</p>`,`<p><strong>Error:</strong></p><pre>${mt(c.error)}</pre>`,`<p>🔗 ${me?`<a href="${me}">View failure cluster</a> · `:""}<a href="${ze}">Execution details</a>${ke?` · <a href="${ke}">Test history</a>`:""}</p>`].join("");Tt(Me,Be,{toast:"Failure copied"})}const Ue=j(null),Ye=j(null),Ie=j(null),Re=j(null),et=j(null),Le=j(null),tt=j(null),st=j(null),nt=j(null),at=j(null);function _e(c){c?.scrollIntoView({behavior:"smooth",block:"start"})}const ot={sampleError:()=>_e(Ue.value),executionError:()=>_e(Ue.value),testSource:()=>Re.value?.reveal(),sourceFiles:()=>Re.value?.reveal(),environmentDiff:()=>tt.value?.reveal(),visualDiff:()=>st.value?.reveal(),domSnapshot:()=>nt.value?.reveal(),ariaSnapshot:()=>at.value?.reveal(),screenshots:()=>Le.value?.reveal(),tracePointers:()=>Le.value?.reveal(),artifacts:()=>Le.value?.reveal(),console:()=>_e(Ye.value),networkRequests:()=>_e(Ie.value),serverTraces:()=>_e(Ie.value),traceCallStack:()=>Re.value?.reveal(),traceNetwork:()=>{et.value?.showTraceMode(),_e(Ie.value)},steps:()=>{z.value="steps"},failingSteps:()=>{z.value="steps"}};return ts(bs,{canLocate:c=>c in ot,open:c=>ot[c]?.()}),(c,T)=>{const E=Gt,ne=Jt,de=re,oe=Ae,me=ss,ze=as,ke=jn,Me=De,Be=xt,be=pe,Dt=On,It=ta,Rt=ma,Lt=xa,zt=Ta,Mt=Us,Nt=Bs,jt=Fs,rt=Ma,it=nr,lt=Ps,At=ht,Pt=Ge,Ut=Vs,Ne=ge,Bt=Hs,ut=Ks,ct=Ws,Fe=kt,Ft=rr,Vt=$r,le=Js,Ve=Gs,Et=Oe,Ot=qs,Ht=us,Kt=ns;return t(),w(Kt,{id:"test-run-case-detail"},{header:g(()=>[d(ze,null,{leading:g(()=>[d(E),d(ne,{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(h)}`}]},null,8,["items"])]),right:g(()=>[e(a)?.testCaseId?(t(),w(oe,{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:g(()=>[d(de,{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),d(me,{actions:e(wt)},null,8,["actions"])]),_:1})]),body:g(()=>[d(Ht,{modelValue:e(z),"onUpdate:modelValue":T[1]||(T[1]=S=>fe(z)?z.value=S:null),"tab-items":e(Q)},{summary:g(()=>[d(ke,{"test-case":e(a)??null,"scm-info":e(L),"ci-info":e(K),browser:e(a)?.browser??null,environment:e(V),"steps-count":e(N).length,"historical-timing":e(R),"stable-links":e(a)?.stableLinks??null,onRefresh:T[0]||(T[0]=S=>e(u)())},null,8,["test-case","scm-info","ci-info","browser","environment","steps-count","historical-timing","stable-links"])]),"tab-diagnosis":g(()=>[n("div",Sr,[n("div",{ref_key:"errorEl",ref:Ue,class:"scroll-mt-4"},[e(a)?.error?(t(),w(be,{key:0,icon:"i-lucide-circle-x","icon-class":"text-red-500",title:"Error"},{actions:g(()=>[d(Be,{text:e(Xe)?"Copied!":"Copy failure"},{default:g(()=>[d(Me,{size:"xs",variant:"ghost",color:"neutral",icon:e(Xe)?"i-lucide-check":"i-lucide-clipboard",onClick:St},null,8,["icon"])]),_:1},8,["text"])]),default:g(()=>[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(mt)(e(ks)(e(a).error))},null,8,Dr)]),_:1})):l("",!0)],512),n("div",Ir,[n("div",Rr,[d(Dt,{"test-case":e(a)??null,history:e(i),"current-id":Number(e(h))},null,8,["test-case","history","current-id"]),e(D)?(t(),w(It,{key:0,cluster:e(D)},null,8,["cluster"])):l("",!0),d(Rt,{"test-runs-case-id":Number(e(h))},null,8,["test-runs-case-id"])]),n("div",Lr,[e(a)?.testSourceFrames?.length||e(a)?.testSource||e(b)?(t(),w(Lt,{key:0,ref_key:"testSourceCard",ref:Re,"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(h)),"has-trace":e(b),"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),d(zt,{ref_key:"evidenceCard",ref:Le,"storage-key":"case-evidence",attachments:e(a)?.attachments??[],traces:e(P)??[]},null,8,["attachments","traces"]),e(a)?.testRun?.id?(t(),w(Mt,{key:1,"storage-key":"case-locators","run-id":e(a).testRun.id,"test-runs-case-id":Number(e(h))},null,8,["run-id","test-runs-case-id"])):l("",!0),e(a)?.testRun?.id?(t(),w(Nt,{key:2,ref_key:"envDiffCard",ref:tt,"storage-key":"case-env-diff","run-id":e(a).testRun.id,"test-runs-case-id":Number(e(h))},null,8,["run-id","test-runs-case-id"])):l("",!0),e(a)?.testRun?.id?(t(),w(jt,{key:3,ref_key:"visualDiffCard",ref:st,"storage-key":"case-visual-diff","run-id":e(a).testRun.id,"test-runs-case-id":Number(e(h))},null,8,["run-id","test-runs-case-id"])):l("",!0),e(a)?.consoleLogs?.length?(t(),o("div",{key:4,ref_key:"consoleEl",ref:Ye,class:"scroll-mt-4"},[d(rt,{entries:e(a)?.consoleLogs??[]},null,8,["entries"])],512)):l("",!0),e(C).length>0||e(b)?(t(),o("div",{key:5,ref_key:"networkEl",ref:Ie,class:"scroll-mt-4"},[d(it,{ref_key:"networkCard",ref:et,requests:e(C),"run-id":e(a)?.testRun?.id??null,"test-runs-case-id":Number(e(h)),"has-trace":e(b)},null,8,["requests","run-id","test-runs-case-id","has-trace"])],512)):l("",!0),e(a)?.pageState?(t(),w(lt,{key:6,"storage-key":"case-page-state","page-state":e(a).pageState},null,8,["page-state"])):l("",!0),e(a)?.ariaSnapshot?(t(),w(Pt,{key:7,ref_key:"ariaCard",ref:at,"storage-key":"case-aria",icon:"i-lucide-scan-text",title:"ARIA snapshot",help:"case.aria"},{folded:g(()=>[...T[3]||(T[3]=[y("Accessibility tree captured at the moment of failure",-1)])]),default:g(()=>[n("div",zr,[d(At,{text:"```yaml\n"+e(a).ariaSnapshot+"\n```"},null,8,["text"])])]),_:1},512)):l("",!0),e(a)?.testRun?.id?(t(),w(Ut,{key:8,ref_key:"domSnapshotCard",ref:nt,"storage-key":"case-dom-snapshot","run-id":e(a).testRun.id,"test-runs-case-id":Number(e(h))},null,8,["run-id","test-runs-case-id"])):l("",!0)])])])]),"tab-steps":g(()=>[n("div",Mr,[e(N).length>0?(t(),o("div",Nr,[n("div",jr,[n("span",Ar,r(e(N).length)+" steps",1),T[4]||(T[4]=n("span",{class:"text-gray-300 dark:text-gray-600"},"·",-1)),(t(!0),o(B,null,ee(e(f),S=>(t(),o("span",{key:S.category,class:"inline-flex items-center gap-1"},[d(Ne,{color:ue[S.category]||"neutral",variant:"soft",size:"xs"},{default:g(()=>[y(r(S.category),1)]),_:2},1032,["color"]),n("span",Pr,"×"+r(S.count)+" · "+r(("formatDuration"in c?c.formatDuration:e(q))(S.duration)),1)]))),128))]),d(ct,{"min-width":"40rem",bleed:!1},{default:g(()=>[d(ut,{data:e(N),columns:m,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":g(({row:S})=>[n("span",Ur,r(S.index+1),1)]),"status-cell":g(({row:S})=>[S.original.failed?(t(),o("span",Br,"✗")):(t(),o("span",Fr,"✓"))]),"category-cell":g(({row:S})=>[d(Ne,{color:ue[S.original.category]||"neutral",variant:"soft",size:"xs"},{default:g(()=>[y(r(S.original.category),1)]),_:2},1032,["color"])]),"title-cell":g(({row:S})=>[n("div",Vr,[n("span",{class:W(S.original.failed?"text-red-600 dark:text-red-400 font-medium":"")},r(S.original.title),3),S.index===e(A)?(t(),w(Ne,{key:0,color:"warning",variant:"subtle",size:"xs",class:"shrink-0",title:"Slowest step in this test"},{default:g(()=>[...T[5]||(T[5]=[y(" slowest ",-1)])]),_:1})):l("",!0)]),S.original.failed&&S.original.error?.message?(t(),o("p",Er,r(S.original.error.message),1)):l("",!0),S.original.location?(t(),w(Bt,{key:1,location:S.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":g(({row:S})=>[n("div",Or,[n("div",Hr,[n("span",{class:W(`text-sm tabular-nums ${ce(S.original.duration)}`)},r(("formatDuration"in c?c.formatDuration:e(q))(S.original.duration)),3),X(S.original.duration)?(t(),o("span",Kr,r(X(S.original.duration)),1)):l("",!0)]),n("div",Wr,[n("div",{class:W(["absolute inset-y-0 rounded-full",M(S.original.duration)]),style:Ce(Y(S.original))},null,6)])])]),_:1},8,["data"])]),_:1})])):(t(),w(Fe,{key:1,icon:"i-lucide-list-checks",text:"No steps recorded for this execution"}))])]),"tab-artifacts":g(()=>[n("div",Gr,[d(Ft,{traces:e(P)||[]},null,8,["traces"]),d(Vt,{attachments:e(a)?.attachments??[]},null,8,["attachments"]),e(a)?.pageState?(t(),w(lt,{key:0,"storage-key":"case-page-state","page-state":e(a).pageState},null,8,["page-state"])):l("",!0),e(a)?.consoleLogs?.length?(t(),w(rt,{key:1,entries:e(a)?.consoleLogs??[]},null,8,["entries"])):l("",!0),e(C).length>0||e(b)?(t(),w(it,{key:2,requests:e(C),"run-id":e(a)?.testRun?.id??null,"test-runs-case-id":Number(e(h)),"has-trace":e(b)},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(C).length?(t(),o("div",Jr,[e(Ze)?(t(),o(B,{key:0},[d(de,{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},[d(de,{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":g(()=>[n("div",qr,[e(F).length>0?(t(),o("div",Qr,[(t(!0),o(B,null,ee(e(F),(S,Wt)=>(t(),o("div",{key:Wt,class:W(["p-3 rounded-lg border",S.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",Zr,[d(de,{name:S.type==="warning"?"i-lucide-alert-triangle":"i-lucide-lightbulb",class:W([S.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:W(S.type==="warning"?"text-amber-800 dark:text-amber-200 font-medium":"text-blue-800 dark:text-blue-200 font-medium")},r(S.message),3),n("p",{class:W([S.type==="warning"?"text-amber-700 dark:text-amber-300":"text-blue-700 dark:text-blue-300","mt-1"])},r(S.details),3)])])],2))),128))])):l("",!0),e(p)?(t(),w(be,{key:1,icon:"i-lucide-gauge",title:"Browser performance (Web Vitals)",help:"case.web-vitals"},{default:g(()=>[n("div",Xr,[e(p).navigation?(t(),w(Ve,{key:0,"min-tile-width":"10rem"},{default:g(()=>[d(le,{label:"TTFB",value:("formatDuration"in c?c.formatDuration:e(q))(e(p).navigation.ttfb),hint:"Time to first byte","value-class":e(p).navigation.ttfb>600?"text-red-600":e(p).navigation.ttfb>200?"text-orange-500":"text-green-600"},null,8,["value","value-class"]),d(le,{label:"DOM Interactive",value:("formatDuration"in c?c.formatDuration:e(q))(e(p).navigation.domInteractive),hint:"DOM interactive","value-class":e(p).navigation.domInteractive>3e3?"text-red-600":e(p).navigation.domInteractive>1500?"text-orange-500":"text-green-600"},null,8,["value","value-class"]),d(le,{label:"DOMContentLoaded",value:("formatDuration"in c?c.formatDuration:e(q))(e(p).navigation.domContentLoaded),hint:"DOMContentLoaded","value-class":e(p).navigation.domContentLoaded>3e3?"text-red-600":e(p).navigation.domContentLoaded>1500?"text-orange-500":"text-green-600"},null,8,["value","value-class"]),d(le,{label:"Load Complete",value:("formatDuration"in c?c.formatDuration:e(q))(e(p).navigation.loadComplete),hint:"Page fully loaded","value-class":e(p).navigation.loadComplete>5e3?"text-red-600":e(p).navigation.loadComplete>3e3?"text-orange-500":"text-green-600"},null,8,["value","value-class"])]),_:1})):l("",!0),e(p).paint&&(e(p).paint.firstPaint||e(p).paint.firstContentfulPaint)?(t(),w(Ve,{key:1,"min-tile-width":"10rem",class:"pt-2 border-t"},{default:g(()=>[e(p).paint.firstPaint!==void 0?(t(),w(le,{key:0,label:"First Paint (FP)",value:("formatDuration"in c?c.formatDuration:e(q))(e(p).paint.firstPaint)},null,8,["value"])):l("",!0),e(p).paint.firstContentfulPaint!==void 0?(t(),w(le,{key:1,label:"First Contentful Paint (FCP)",value:("formatDuration"in c?c.formatDuration:e(q))(e(p).paint.firstContentfulPaint),"value-class":e(p).paint.firstContentfulPaint>3e3?"text-red-600":e(p).paint.firstContentfulPaint>1800?"text-orange-500":"text-green-600"},null,8,["value","value-class"])):l("",!0)]),_:1})):l("",!0),e(p).vitals?(t(),w(Ve,{key:2,"min-tile-width":"10rem",class:"pt-2 border-t"},{default:g(()=>[d(le,{label:"Largest Contentful Paint (LCP)",value:e(p).vitals.lcp!=null?("formatDuration"in c?c.formatDuration:e(q))(e(p).vitals.lcp):"n/a","value-class":e(p).vitals.lcp==null?"text-gray-400":e(p).vitals.lcp>4e3?"text-red-600":e(p).vitals.lcp>2500?"text-orange-500":"text-green-600"},null,8,["value","value-class"]),d(le,{label:"Cumulative Layout Shift (CLS)",value:e(p).vitals.cls!=null?String(e(p).vitals.cls):"n/a","value-class":e(p).vitals.cls==null?"text-gray-400":e(p).vitals.cls>.25?"text-red-600":e(p).vitals.cls>.1?"text-orange-500":"text-green-600"},null,8,["value","value-class"]),d(le,{label:"Interaction to Next Paint (INP)",value:e(p).vitals.inp!=null?("formatDuration"in c?c.formatDuration:e(q))(e(p).vitals.inp):"n/a","value-class":e(p).vitals.inp==null?"text-gray-400":e(p).vitals.inp>500?"text-red-600":e(p).vitals.inp>200?"text-orange-500":"text-green-600"},null,8,["value","value-class"])]),_:1})):l("",!0),e(p).navigation?.url?(t(),o("div",Yr,[T[8]||(T[8]=y(" Page: ",-1)),n("code",ei,r(e(p).navigation.url),1)])):l("",!0)])]),_:1})):l("",!0),e(F).length===0&&!e(p)?(t(),w(Fe,{key:2,icon:"i-lucide-gauge",text:"No performance hints or Web Vitals were captured for this execution."},{default:g(()=>[n("p",ti,[T[10]||(T[10]=y(" Web Vitals and timing come from the ",-1)),d(Et,{to:"capture-fixtures"},{default:g(()=>[...T[9]||(T[9]=[y("capture fixtures",-1)])]),_:1}),T[11]||(T[11]=y(". ",-1))])]),_:1})):l("",!0)])]),"tab-history":g(()=>[n("div",si,[e(i)&&e(i).length>0?(t(),o("div",ni,[n("div",ai,[e(a)?.testCaseId?(t(),w(Me,{key:0,to:`/test-cases/${e(a).testCaseId}`,size:"xs",variant:"outline",color:"neutral","trailing-icon":"i-lucide-arrow-right"},{default:g(()=>[...T[12]||(T[12]=[y(" View full test history ",-1)])]),_:1},8,["to"])):l("",!0)]),d(Ot,{data:e(i),height:200},null,8,["data"]),d(ct,{"min-width":"44rem",bleed:!1},{default:g(()=>[d(ut,{data:e(i),columns:ye,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":g(({row:S})=>[n("span",oi,[n("span",ri,r(new Date(S.original.startTime).toLocaleDateString("en-US",{month:"short",day:"numeric"})),1),n("span",ii,r(new Date(S.original.startTime).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})),1)])]),"status-cell":g(({row:S})=>[d(Ne,{color:("getStatusColor"in c?c.getStatusColor:e(Ts))(S.original.status),class:"capitalize"},{default:g(()=>[y(r(S.original.status),1)]),_:2},1032,["color"])]),"duration-cell":g(({row:S})=>[S.original.duration!==null?(t(),o("span",li,r(("formatDuration"in c?c.formatDuration:e(q))(S.original.duration)),1)):(t(),o("span",ui,"—"))]),"runId-cell":g(({row:S})=>[d(oe,{to:`/test-runs/${S.original.runId}`,class:"text-primary hover:underline"},{default:g(()=>[y(" #"+r(S.original.runId),1)]),_:2},1032,["to"])]),"error-cell":g(({row:S})=>[S.original.error?(t(),o("span",{key:0,class:"text-red-600 text-xs truncate max-w-xs block",title:S.original.error},r(S.original.error.length>80?`${S.original.error.substring(0,80)}…`:S.original.error),9,ci)):l("",!0)]),_:1},8,["data"])]),_:1})])):(t(),w(Fe,{key:1,icon:"i-lucide-trending-up",text:"No prior executions of this test yet."},{default:g(()=>[...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{Yi as default};
|