@piwitests/server 0.26.0 → 0.26.1
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/{BdQ7kfxJ.js → 1QWBzxLM.js} +4 -4
- package/.output/public/_nuxt/{CY1UsEbI.js → 4hW9LHwA.js} +1 -1
- package/.output/public/_nuxt/96uxfdYT.js +1 -0
- package/.output/public/_nuxt/{HGYIpJtg.js → AbnDY6Zr.js} +1 -1
- package/.output/public/_nuxt/{CZ6WR7uw.js → B-1zt4pp.js} +1 -1
- package/.output/public/_nuxt/{Sx5-c-bZ.js → B1iYmAt_.js} +1 -1
- package/.output/public/_nuxt/{CbzgEkmW.js → B2bxEmbR.js} +1 -1
- package/.output/public/_nuxt/B3hAvaCe.js +4 -0
- package/.output/public/_nuxt/{CyWOerIG.js → B4lvHjBe.js} +1 -1
- package/.output/public/_nuxt/B5S7BkC3.js +1 -0
- package/.output/public/_nuxt/{Bb_1uAHn.js → B6j5Ornu.js} +1 -1
- package/.output/public/_nuxt/{CrsaY0R_.js → B82vqOZe.js} +1 -1
- package/.output/public/_nuxt/{CTFUlsXp.js → B9oXlGro.js} +1 -1
- package/.output/public/_nuxt/{CsJ9Ce4U.js → BABCH5kE.js} +1 -1
- package/.output/public/_nuxt/{Gn1Ns00e.js → BF5qB58w.js} +1 -1
- package/.output/public/_nuxt/{CsGsLxHg.js → BFLa9ZEP.js} +1 -1
- package/.output/public/_nuxt/BIlohx1E.js +1 -0
- package/.output/public/_nuxt/{B6djubIK.js → BM5C-Oec.js} +1 -1
- package/.output/public/_nuxt/{CrZhoZuI.js → BOA-I6S9.js} +1 -1
- package/.output/public/_nuxt/{Bp2zrrkV.js → BQUhoGCh.js} +1 -1
- package/.output/public/_nuxt/{DUC3QnqW.js → BQYLGX9o.js} +1 -1
- package/.output/public/_nuxt/{CUjzhXN1.js → BRMeEHXd.js} +1 -1
- package/.output/public/_nuxt/{Cf_a8ynB.js → BRtaKOKv.js} +2 -2
- package/.output/public/_nuxt/{B7uPoZ7T.js → BS91Og__.js} +1 -1
- package/.output/public/_nuxt/{DKgbchez.js → BTGAvMoT.js} +1 -1
- package/.output/public/_nuxt/{BIamiwb7.js → BaLX92Wz.js} +1 -1
- package/.output/public/_nuxt/{LWIyaZKe.js → Bc6Zr-Xn.js} +1 -1
- package/.output/public/_nuxt/{R7AVOWi_.js → BceMEnJt.js} +1 -1
- package/.output/public/_nuxt/{Q2oJNyXL.js → BeCAVtCK.js} +1 -1
- package/.output/public/_nuxt/{D_SD71Qf.js → Bf119e7x.js} +1 -1
- package/.output/public/_nuxt/BfRcdz11.js +9 -0
- package/.output/public/_nuxt/{CxwnFFD0.js → Bl0xzETD.js} +1 -1
- package/.output/public/_nuxt/{C_eXufkv.js → BnUQ3i5l.js} +1 -1
- package/.output/public/_nuxt/{rPG7kzfL.js → Bp1WeQ0_.js} +1 -1
- package/.output/public/_nuxt/{BL8cYWsR.js → Bp31ZRcA.js} +1 -1
- package/.output/public/_nuxt/{Drh1_ASq.js → BrxUH8qL.js} +1 -1
- package/.output/public/_nuxt/{D72Ce8Ff.js → BsdfEbVC.js} +1 -1
- package/.output/public/_nuxt/BtGI4ZbP.js +1 -0
- package/.output/public/_nuxt/{BV8EzO8q.js → BuMX-4RF.js} +1 -1
- package/.output/public/_nuxt/{DPPhFZOr.js → BuXJR5tn.js} +1 -1
- package/.output/public/_nuxt/{Bh2WA4IJ.js → Bx_lfKHl.js} +1 -1
- package/.output/public/_nuxt/{vcSKeWsW.js → C4UKyPQn.js} +1 -1
- package/.output/public/_nuxt/{IoE3eJ9F.js → C9XCTbtQ.js} +1 -1
- package/.output/public/_nuxt/{BilJoEne.js → CEPU6VkU.js} +1 -1
- package/.output/public/_nuxt/CHz7LJIX.js +1 -0
- package/.output/public/_nuxt/{BPhGDGAR.js → CMhd8IBr.js} +1 -1
- package/.output/public/_nuxt/{C5X_N4R7.js → CN1M6i4K.js} +33 -33
- package/.output/public/_nuxt/CQLkowA3.js +1 -0
- package/.output/public/_nuxt/{DTtizz85.js → CU_2YLhT.js} +1 -1
- package/.output/public/_nuxt/{CMVTTE_g.js → CXkXHtcx.js} +1 -1
- package/.output/public/_nuxt/{igDJCTgt.js → CZeKW-zP.js} +1 -1
- package/.output/public/_nuxt/{9oKY4Zb7.js → CapSEET7.js} +1 -1
- package/.output/public/_nuxt/{j2eGYaRa.js → CeExxGSu.js} +1 -1
- package/.output/public/_nuxt/{CEgRB8H9.js → CfwpqSe7.js} +1 -1
- package/.output/public/_nuxt/{CFKbXp6V.js → ChOtLYkd.js} +1 -1
- package/.output/public/_nuxt/ChuJzPWz.js +1 -0
- package/.output/public/_nuxt/{Bo73sAu8.js → CiCUZGFZ.js} +1 -1
- package/.output/public/_nuxt/{C6R4tyud.js → CkL_oDa8.js} +1 -1
- package/.output/public/_nuxt/{DtGJeysS.js → CkhOMiiO.js} +1 -1
- package/.output/public/_nuxt/ClmHMP65.js +2 -0
- package/.output/public/_nuxt/{BtcDY0Du.js → Cnm0d_7S.js} +1 -1
- package/.output/public/_nuxt/{CK2AMqz_.js → CtQMagSz.js} +1 -1
- package/.output/public/_nuxt/{B1KjIR-q.js → Ctnn3S3-.js} +1 -1
- package/.output/public/_nuxt/{DCeZxpxe.js → CywiLuOD.js} +4 -4
- package/.output/public/_nuxt/{oA84LLqO.js → CzRkZLB4.js} +1 -1
- package/.output/public/_nuxt/CzyCEdYP.js +1 -0
- package/.output/public/_nuxt/{D56yp7m9.js → D-F0Rhjj.js} +1 -1
- package/.output/public/_nuxt/D4mPjHHR.js +2 -0
- package/.output/public/_nuxt/{BsGvSoPC.js → D4v7lLm3.js} +1 -1
- package/.output/public/_nuxt/{CxRTKV-K.js → D6B0WKO0.js} +1 -1
- package/.output/public/_nuxt/{jv8U_Tup.js → DAg6jtav.js} +1 -1
- package/.output/public/_nuxt/DBXXb0w8.js +1 -0
- package/.output/public/_nuxt/{ChlP20A5.js → DHN2t5Vt.js} +1 -1
- package/.output/public/_nuxt/{B8tezsWe.js → DJKHXfNS.js} +1 -1
- package/.output/public/_nuxt/{CFg5qdS0.js → DMqAUHFN.js} +1 -1
- package/.output/public/_nuxt/{C9A3sPDo.js → DURme_kn.js} +1 -1
- package/.output/public/_nuxt/{C2hIM5f9.js → DVo_e_uj.js} +1 -1
- package/.output/public/_nuxt/{DKhqIou2.js → DXh8q5KY.js} +1 -1
- package/.output/public/_nuxt/{CZXeJs2k.js → DXz1Kb4-.js} +1 -1
- package/.output/public/_nuxt/{CPrVhXJk.js → DYdwHaco.js} +1 -1
- package/.output/public/_nuxt/{WZXZeGYt.js → D_ZAGxCQ.js} +1 -1
- package/.output/public/_nuxt/{D5SN7rPK.js → D_dhjJvR.js} +1 -1
- package/.output/public/_nuxt/{DR1jFptD.js → DamZHy5M.js} +1 -1
- package/.output/public/_nuxt/{xKX9IHe3.js → DbtjJCra.js} +1 -1
- package/.output/public/_nuxt/{r6zkA1SE.js → DcOlL-oi.js} +1 -1
- package/.output/public/_nuxt/{CxspCKpR.js → DeQ9sIia.js} +1 -1
- package/.output/public/_nuxt/{BkHJoHpc.js → DjX1bLZD.js} +1 -1
- package/.output/public/_nuxt/{Be0bwdsi.js → Dly7wCCl.js} +1 -1
- package/.output/public/_nuxt/DmeogbGY.js +1 -0
- package/.output/public/_nuxt/{CfV2N201.js → Dn_-RkxP.js} +1 -1
- package/.output/public/_nuxt/{dg6uXTyR.js → DoDo3VF2.js} +1 -1
- package/.output/public/_nuxt/{BMlKQMjM.js → DoVHTl-K.js} +1 -1
- package/.output/public/_nuxt/DpM8IgHL.js +1 -0
- package/.output/public/_nuxt/{B4NjylBn.js → Dpwj_1H5.js} +1 -1
- package/.output/public/_nuxt/{DzJa19LG.js → DvSHenmZ.js} +1 -1
- package/.output/public/_nuxt/DvYU87_a.js +1 -0
- package/.output/public/_nuxt/{G2J1dVVb.js → Dx41arC8.js} +1 -1
- package/.output/public/_nuxt/DxBrlj7b.js +1 -0
- package/.output/public/_nuxt/{r-HZNbp3.js → JNpNdV-o.js} +1 -1
- package/.output/public/_nuxt/Lz9MmwKY.js +1 -0
- package/.output/public/_nuxt/OMI0cmZ0.js +1 -0
- package/.output/public/_nuxt/{CUWrUpTl.js → UAmyrRCI.js} +1 -1
- package/.output/public/_nuxt/{EJllK0wm.js → VBTxfbqU.js} +1 -1
- package/.output/public/_nuxt/VbedPPFH.js +1 -0
- package/.output/public/_nuxt/{BY9A1aOT.js → _okd7MfH.js} +1 -1
- package/.output/public/_nuxt/{BOn5q0rT.js → bmAf49LT.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/0174ebd8-8fa5-4698-aa79-7a8dd2f6527f.json +1 -0
- package/.output/public/_nuxt/{D0XWJGhG.js → e-GZmCeP.js} +1 -1
- package/.output/public/_nuxt/entry.Dv52uAyn.css +1 -0
- package/.output/public/_nuxt/{DVIIj6Vv.js → f9TbT3AM.js} +1 -1
- package/.output/public/_nuxt/gdlHFfN6.js +1 -0
- package/.output/public/_nuxt/{BTG_PmM5.js → huBoAZeM.js} +1 -1
- package/.output/public/_nuxt/{DadksxQ9.js → mYw4b7uY.js} +1 -1
- package/.output/public/_nuxt/{B0eHOux4.js → mi7tdFxN.js} +1 -1
- package/.output/public/_nuxt/sFe4Zr5j.js +1 -0
- package/.output/public/_nuxt/{CLrLFf3s.js → uspGXbik.js} +1 -1
- package/.output/public/_nuxt/{DLN-CQXF.js → w7KxwWEv.js} +1 -1
- package/.output/public/_nuxt/{Bp55g9gr.js → wa4k1aDz.js} +1 -1
- package/.output/public/_nuxt/{C2yZcDch.js → xuB8n0QL.js} +1 -1
- package/.output/public/favicon.ico +0 -0
- package/.output/public/trace-viewer/assets/codeMirrorModule-LEHpjmcn.js +32 -0
- package/.output/public/trace-viewer/assets/defaultSettingsView-BNmKHKpQ.js +264 -0
- package/.output/public/trace-viewer/assets/urlMatch-BYQrIQwR.js +1 -0
- package/.output/public/trace-viewer/assets/xtermModule-CsJ4vdCR.js +9 -0
- package/.output/public/trace-viewer/codeMirrorModule.DYBRYzYX.css +1 -0
- package/.output/public/trace-viewer/codicon.DCmgc-ay.ttf +0 -0
- package/.output/public/trace-viewer/defaultSettingsView.CjdS-WJx.css +1 -0
- package/.output/public/trace-viewer/index.CzXZzn5A.css +1 -0
- package/.output/public/trace-viewer/index.DMMX1gXU.js +2 -0
- package/.output/public/trace-viewer/index.html +44 -0
- package/.output/public/trace-viewer/manifest.webmanifest +16 -0
- package/.output/public/trace-viewer/playwright-logo.svg +9 -0
- package/.output/public/trace-viewer/snapshot.html +10 -0
- package/.output/public/trace-viewer/snapshot.v8KI4P3m.js +2 -0
- package/.output/public/trace-viewer/sw.bundle.js +5 -0
- package/.output/public/trace-viewer/uiMode.BZQ54Kgt.css +1 -0
- package/.output/public/trace-viewer/uiMode.Ut8wwJNp.js +6 -0
- package/.output/public/trace-viewer/uiMode.html +18 -0
- package/.output/public/trace-viewer/xtermModule.DYP7pi_n.css +32 -0
- package/.output/server/chunks/_/users.mjs +1 -1
- package/.output/server/chunks/build/{BreadcrumbNav-DBnGj5Jq.mjs → BreadcrumbNav-Bg4QGX0k.mjs} +11 -4
- package/.output/server/chunks/build/BreadcrumbNav-Bg4QGX0k.mjs.map +1 -0
- package/.output/server/chunks/build/{BrowserBadge-vFb1ERG_.mjs → BrowserBadge-yMgLTBUu.mjs} +17 -9
- package/.output/server/chunks/build/BrowserBadge-yMgLTBUu.mjs.map +1 -0
- package/.output/server/chunks/build/{ChartMarkerLines-BXqUpUcs.mjs → ChartMarkerLines-D0cTRlxF.mjs} +3 -3
- package/.output/server/chunks/build/ChartMarkerLines-D0cTRlxF.mjs.map +1 -0
- package/.output/server/chunks/build/{ChartTooltip-DoF6Smyc.mjs → ChartTooltip-B2t6VYYH.mjs} +3 -3
- package/.output/server/chunks/build/ChartTooltip-B2t6VYYH.mjs.map +1 -0
- package/.output/server/chunks/build/Checkbox-ChSYhiUz.mjs +1 -1
- package/.output/server/chunks/build/ClientDate-U97Z1p6-.mjs +32 -0
- package/.output/server/chunks/build/ClientDate-U97Z1p6-.mjs.map +1 -0
- package/.output/server/chunks/build/{CodeBlock-CmvKHaq8.mjs → CodeBlock-DuWhmcI2.mjs} +3 -3
- package/.output/server/chunks/build/CodeBlock-DuWhmcI2.mjs.map +1 -0
- package/.output/server/chunks/build/DashboardSidebarToggle-a5KYecZ0.mjs +1 -1
- package/.output/server/chunks/build/DashboardToolbar-BZoGc0ri.mjs +72 -0
- package/.output/server/chunks/build/DashboardToolbar-BZoGc0ri.mjs.map +1 -0
- package/.output/server/chunks/build/{DataLocationCard-ChV02QJj.mjs → DataLocationCard-DCdhQBIY.mjs} +2 -2
- package/.output/server/chunks/build/DataLocationCard-DCdhQBIY.mjs.map +1 -0
- package/.output/server/chunks/build/{DesktopRunLocallyButton-BfmbZpiL.mjs → DesktopRunLocallyButton-ChHg3GqK.mjs} +5 -5
- package/.output/server/chunks/build/{DesktopRunLocallyButton-BfmbZpiL.mjs.map → DesktopRunLocallyButton-ChHg3GqK.mjs.map} +1 -1
- package/.output/server/chunks/build/{DiagnosisPanel-C_ndadzP.mjs → DiagnosisPanel-DE-r2UV8.mjs} +5 -5
- package/.output/server/chunks/build/DiagnosisPanel-DE-r2UV8.mjs.map +1 -0
- package/.output/server/chunks/build/{DiagnosisResult-GAjo6Lt3.mjs → DiagnosisResult-CrGK--xh.mjs} +16 -10
- package/.output/server/chunks/build/DiagnosisResult-CrGK--xh.mjs.map +1 -0
- package/.output/server/chunks/build/{DurationValue-CObiBDnH.mjs → DurationValue-Dn06XQk3.mjs} +2 -2
- package/.output/server/chunks/build/DurationValue-Dn06XQk3.mjs.map +1 -0
- package/.output/server/chunks/build/EntityLinks-BcpvMt_V.mjs +1 -1
- package/.output/server/chunks/build/EnvManagedBadge-_8GfjWjE.mjs +1 -1
- package/.output/server/chunks/build/{FeatureUnavailable-Buoyoqx1.mjs → FeatureUnavailable-IaBjVCqQ.mjs} +2 -2
- package/.output/server/chunks/build/FeatureUnavailable-IaBjVCqQ.mjs.map +1 -0
- package/.output/server/chunks/build/{GetStartedWizard-tL3U_qM1.mjs → GetStartedWizard-BiyxEXWP.mjs} +3 -3
- package/.output/server/chunks/build/GetStartedWizard-BiyxEXWP.mjs.map +1 -0
- package/.output/server/chunks/build/{HelpHint-C96TlqxY.mjs → HelpHint-CdBz6deq.mjs} +2 -2
- package/.output/server/chunks/build/HelpHint-CdBz6deq.mjs.map +1 -0
- package/.output/server/chunks/build/{MetaStripGroup-Cp2WCQf7.mjs → MetaStripGroup-CDyGlsNt.mjs} +94 -21
- package/.output/server/chunks/build/MetaStripGroup-CDyGlsNt.mjs.map +1 -0
- package/.output/server/chunks/build/{NavbarActions-VCHW0u67.mjs → NavbarActions-BTWxKCVI.mjs} +2 -2
- package/.output/server/chunks/build/NavbarActions-BTWxKCVI.mjs.map +1 -0
- package/.output/server/chunks/build/NavigationMenu-D4ZpdCm_.mjs +1 -1
- package/.output/server/chunks/build/OpenInIdeLink-Bnl-_som.mjs +1 -1
- package/.output/server/chunks/build/{ProjectTestCasesTable-saHYJoyQ.mjs → ProjectTestCasesTable-DJDAZ9NQ.mjs} +9 -9
- package/.output/server/chunks/build/ProjectTestCasesTable-DJDAZ9NQ.mjs.map +1 -0
- package/.output/server/chunks/build/{RunReports-CKYYRC59.mjs → RunReports-BSo2cCNx.mjs} +4 -4
- package/.output/server/chunks/build/RunReports-BSo2cCNx.mjs.map +1 -0
- package/.output/server/chunks/build/{RunStatusBadge-CWhmAmKb.mjs → RunStatusBadge-zfeSwcTx.mjs} +2 -2
- package/.output/server/chunks/build/RunStatusBadge-zfeSwcTx.mjs.map +1 -0
- package/.output/server/chunks/build/{SectionCard-BB1O3uXd.mjs → SectionCard-CKD1s0eF.mjs} +2 -2
- package/.output/server/chunks/build/SectionCard-CKD1s0eF.mjs.map +1 -0
- package/.output/server/chunks/build/Select-COU8NARj.mjs +1 -1
- package/.output/server/chunks/build/SelectMenu-BUwwc3Qt.mjs +1 -1
- package/.output/server/chunks/build/{SettingsField-CEasBHu3.mjs → SettingsField-CDnUtiCM.mjs} +3 -3
- package/.output/server/chunks/build/SettingsField-CDnUtiCM.mjs.map +1 -0
- package/.output/server/chunks/build/Table-BET-DOtX.mjs +1 -1
- package/.output/server/chunks/build/{TestCaseHistoryChart-BgI6P_zS.mjs → TestCaseHistoryChart-Do7WK-ZY.mjs} +16 -17
- package/.output/server/chunks/build/TestCaseHistoryChart-Do7WK-ZY.mjs.map +1 -0
- package/.output/server/chunks/build/{TestStatusBar-DR8jM5th.mjs → TestStatusBar-BipoEOzd.mjs} +15 -6
- package/.output/server/chunks/build/TestStatusBar-BipoEOzd.mjs.map +1 -0
- package/.output/server/chunks/build/Tooltip-CK0ucuXC.mjs +1 -1
- package/.output/server/chunks/build/{_id_-rQhFY0fN.mjs → _id_-BLPB189b.mjs} +16 -16
- package/.output/server/chunks/build/{_id_-rQhFY0fN.mjs.map → _id_-BLPB189b.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-kkexEH_q.mjs → _id_-BeGJOSxY.mjs} +16 -16
- package/.output/server/chunks/build/_id_-BeGJOSxY.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-B7Dw490u.mjs → _id_-CfLEW45H.mjs} +472 -304
- package/.output/server/chunks/build/_id_-CfLEW45H.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-DVPb1S93.mjs → _id_-DxHe32cW.mjs} +654 -453
- package/.output/server/chunks/build/_id_-DxHe32cW.mjs.map +1 -0
- package/.output/server/chunks/build/{about-C4AbyQ4q.mjs → about-FLAssVsA.mjs} +5 -5
- package/.output/server/chunks/build/about-FLAssVsA.mjs.map +1 -0
- package/.output/server/chunks/build/{account-B45bYZd1.mjs → account-Cvz6KkYu.mjs} +4 -4
- package/.output/server/chunks/build/account-Cvz6KkYu.mjs.map +1 -0
- package/.output/server/chunks/build/{ai-CgN9xXFf.mjs → ai-DR9Zry7B.mjs} +8 -8
- package/.output/server/chunks/build/{ai-CgN9xXFf.mjs.map → ai-DR9Zry7B.mjs.map} +1 -1
- package/.output/server/chunks/build/{analytics-BRkiUpwa.mjs → analytics-CCAQayhv.mjs} +9 -9
- package/.output/server/chunks/build/{analytics-BRkiUpwa.mjs.map → analytics-CCAQayhv.mjs.map} +1 -1
- package/.output/server/chunks/build/{auto-heal-BnTdKHQq.mjs → auto-heal-ngiiiVmq.mjs} +4 -4
- package/.output/server/chunks/build/auto-heal-ngiiiVmq.mjs.map +1 -0
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/{default-BGOdM_zA.mjs → default-wYpdMMvh.mjs} +15 -13
- package/.output/server/chunks/build/{default-BGOdM_zA.mjs.map → default-wYpdMMvh.mjs.map} +1 -1
- package/.output/server/chunks/build/{docs-D7R5eJ1Z.mjs → docs-BX9DoKOI.mjs} +4 -4
- package/.output/server/chunks/build/{docs-D7R5eJ1Z.mjs.map → docs-BX9DoKOI.mjs.map} +1 -1
- package/.output/server/chunks/build/{edit-BbL3k6c3.mjs → edit-DnyBC4uC.mjs} +7 -7
- package/.output/server/chunks/build/{edit-BbL3k6c3.mjs.map → edit-DnyBC4uC.mjs.map} +1 -1
- package/.output/server/chunks/build/fetch-DOcN2mHf.mjs +1 -1
- package/.output/server/chunks/build/{help-content-BK3jcgLw.mjs → help-content-3QLSe6Vd.mjs} +3 -3
- package/.output/server/chunks/build/help-content-3QLSe6Vd.mjs.map +1 -0
- package/.output/server/chunks/build/{import-ibAn_HB9.mjs → import-S-w3MXez.mjs} +8 -8
- package/.output/server/chunks/build/import-S-w3MXez.mjs.map +1 -0
- package/.output/server/chunks/build/{index-D5A0DW7Y.mjs → index-BFr7JW_2.mjs} +4 -4
- package/.output/server/chunks/build/index-BFr7JW_2.mjs.map +1 -0
- package/.output/server/chunks/build/{index-CqinXTVs.mjs → index-CdzYiYiu.mjs} +9 -9
- package/.output/server/chunks/build/{index-CqinXTVs.mjs.map → index-CdzYiYiu.mjs.map} +1 -1
- package/.output/server/chunks/build/{index-DreB_S-d.mjs → index-CgYJur1z.mjs} +31 -23
- package/.output/server/chunks/build/index-CgYJur1z.mjs.map +1 -0
- package/.output/server/chunks/build/{index-2GmuPNF-.mjs → index-CjnZ521K.mjs} +22 -4
- package/.output/server/chunks/build/index-CjnZ521K.mjs.map +1 -0
- package/.output/server/chunks/build/{index-KsRegEjT.mjs → index-xgA4P1ht.mjs} +3218 -4087
- package/.output/server/chunks/build/index-xgA4P1ht.mjs.map +1 -0
- package/.output/server/chunks/build/isValueEqualOrExist-D4lZ8uRY.mjs +1 -1
- package/.output/server/chunks/build/login-DueFS2RU.mjs +1 -1
- package/.output/server/chunks/build/{mcp-Dwj29-uG.mjs → mcp-DlZzubUF.mjs} +7 -7
- package/.output/server/chunks/build/mcp-DlZzubUF.mjs.map +1 -0
- package/.output/server/chunks/build/{notifications-CjAn5FJj.mjs → notifications-ByPVhyPX.mjs} +6 -6
- package/.output/server/chunks/build/notifications-ByPVhyPX.mjs.map +1 -0
- package/.output/server/chunks/build/{performance-DRzcu_c7.mjs → performance-Dc9FhaJr.mjs} +6 -6
- package/.output/server/chunks/build/performance-Dc9FhaJr.mjs.map +1 -0
- package/.output/server/chunks/build/{pr-feedback-DR60oGBf.mjs → pr-feedback-5kC_UmKG.mjs} +4 -4
- package/.output/server/chunks/build/pr-feedback-5kC_UmKG.mjs.map +1 -0
- package/.output/server/chunks/build/{selections-BjjolRZ9.mjs → selections-C6J9mI0s.mjs} +9 -9
- package/.output/server/chunks/build/selections-C6J9mI0s.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +33 -33
- package/.output/server/chunks/build/{settings-B3NWV9tu.mjs → settings-DcCAv0U4.mjs} +17 -81
- package/.output/server/chunks/build/settings-DcCAv0U4.mjs.map +1 -0
- package/.output/server/chunks/build/{settings-metadata-DwJk8uSt.mjs → settings-metadata-B684YiW4.mjs} +2 -2
- package/.output/server/chunks/build/settings-metadata-B684YiW4.mjs.map +1 -0
- package/.output/server/chunks/build/{setup-BlgFTixN.mjs → setup-Cf3Mzf-W.mjs} +8 -8
- package/.output/server/chunks/build/{setup-BlgFTixN.mjs.map → setup-Cf3Mzf-W.mjs.map} +1 -1
- package/.output/server/chunks/build/{storage-C1O-FC0U.mjs → storage-B4VySiv3.mjs} +7 -7
- package/.output/server/chunks/build/storage-B4VySiv3.mjs.map +1 -0
- package/.output/server/chunks/build/{tags-dsvYrnii.mjs → tags-BvWdsd1F.mjs} +25 -11
- package/.output/server/chunks/build/tags-BvWdsd1F.mjs.map +1 -0
- package/.output/server/chunks/build/{test-cases-CFiOuyK6.mjs → test-cases-LIIu7dMu.mjs} +11 -11
- package/.output/server/chunks/build/test-cases-LIIu7dMu.mjs.map +1 -0
- package/.output/server/chunks/build/{test-functions-CbmBi6az.mjs → test-functions-Dv8nezrM.mjs} +8 -8
- package/.output/server/chunks/build/test-functions-Dv8nezrM.mjs.map +1 -0
- package/.output/server/chunks/build/{useCopyRich-DPKZKHvZ.mjs → useCopyRich-DRRKIts2.mjs} +17 -14
- package/.output/server/chunks/build/{useCopyRich-DPKZKHvZ.mjs.map → useCopyRich-DRRKIts2.mjs.map} +1 -1
- package/.output/server/chunks/build/{useDesktopDownload-R_RWSgUV.mjs → useDesktopDownload-CK-5nATq.mjs} +2 -2
- package/.output/server/chunks/build/useDesktopDownload-CK-5nATq.mjs.map +1 -0
- package/.output/server/chunks/build/{useDesktopLocalRuns-BdELBy0Y.mjs → useDesktopLocalRuns-BHZic4MJ.mjs} +3 -3
- package/.output/server/chunks/build/useDesktopLocalRuns-BHZic4MJ.mjs.map +1 -0
- package/.output/server/chunks/build/{useDesktopProjectLink-IUN7SIP2.mjs → useDesktopProjectLink-CqBvnXwG.mjs} +2 -2
- package/.output/server/chunks/build/useDesktopProjectLink-CqBvnXwG.mjs.map +1 -0
- package/.output/server/chunks/build/useOpenInIde-DS4YXevu.mjs +1 -1
- package/.output/server/chunks/build/{useSettingsNav-Dg87E7kY.mjs → useSettingsNav-dyHz-2Bz.mjs} +2 -2
- package/.output/server/chunks/build/useSettingsNav-dyHz-2Bz.mjs.map +1 -0
- package/.output/server/chunks/build/{users-DgsoiXxQ.mjs → users-CluLB8DL.mjs} +31 -13
- package/.output/server/chunks/build/users-CluLB8DL.mjs.map +1 -0
- package/.output/server/chunks/nitro/nitro.mjs +839 -680
- package/.output/server/chunks/routes/__piwi/session.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +5 -2
- package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/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 +42 -26
- package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs +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/summary.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +1 -1
- package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +1 -1
- package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +1 -0
- package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/traces/check.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id/index.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +1 -1
- package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +1 -1
- package/.output/server/chunks/routes/mcp.post.mjs +1 -1
- package/.output/server/chunks/routes/renderer.mjs +1 -1
- package/.output/server/chunks/routes/share/_token_.get.mjs +1 -1
- package/.output/server/index.mjs +1 -1
- package/.output/server/package.json +1 -1
- package/package.json +1 -1
- package/.output/public/_nuxt/3HmftUHT.js +0 -1
- package/.output/public/_nuxt/B7zo6PK8.js +0 -1
- package/.output/public/_nuxt/BO4sfkbw.js +0 -1
- package/.output/public/_nuxt/BdyXNI2_.js +0 -1
- package/.output/public/_nuxt/Bg63qh8W.js +0 -1
- package/.output/public/_nuxt/BnhWd06P.js +0 -1
- package/.output/public/_nuxt/CHWW6xiX.js +0 -1
- package/.output/public/_nuxt/CIPvUOic.js +0 -2
- package/.output/public/_nuxt/CVcFbORW.js +0 -9
- package/.output/public/_nuxt/CZlz5y13.js +0 -1
- package/.output/public/_nuxt/CkV_UG8j.js +0 -1
- package/.output/public/_nuxt/D0TpBpCc.js +0 -1
- package/.output/public/_nuxt/D3LyIeiJ.js +0 -1
- package/.output/public/_nuxt/DcccidY5.js +0 -4
- package/.output/public/_nuxt/DqkCbAzo.js +0 -1
- package/.output/public/_nuxt/DwH4SIZE.js +0 -1
- package/.output/public/_nuxt/DwZS0oRm.js +0 -2
- package/.output/public/_nuxt/DxPZIuWy.js +0 -1
- package/.output/public/_nuxt/Dyb1FouX.js +0 -1
- package/.output/public/_nuxt/builds/meta/a5fb24cc-65e3-4e55-aa12-038fe2de4754.json +0 -1
- package/.output/public/_nuxt/entry.BFe0Ua9k.css +0 -1
- package/.output/public/_nuxt/i7znB42v.js +0 -1
- package/.output/server/chunks/build/BreadcrumbNav-DBnGj5Jq.mjs.map +0 -1
- package/.output/server/chunks/build/BrowserBadge-vFb1ERG_.mjs.map +0 -1
- package/.output/server/chunks/build/ChartMarkerLines-BXqUpUcs.mjs.map +0 -1
- package/.output/server/chunks/build/ChartTooltip-DoF6Smyc.mjs.map +0 -1
- package/.output/server/chunks/build/CodeBlock-CmvKHaq8.mjs.map +0 -1
- package/.output/server/chunks/build/DataLocationCard-ChV02QJj.mjs.map +0 -1
- package/.output/server/chunks/build/DiagnosisPanel-C_ndadzP.mjs.map +0 -1
- package/.output/server/chunks/build/DiagnosisResult-GAjo6Lt3.mjs.map +0 -1
- package/.output/server/chunks/build/DurationValue-CObiBDnH.mjs.map +0 -1
- package/.output/server/chunks/build/FeatureUnavailable-Buoyoqx1.mjs.map +0 -1
- package/.output/server/chunks/build/GetStartedWizard-tL3U_qM1.mjs.map +0 -1
- package/.output/server/chunks/build/HelpHint-C96TlqxY.mjs.map +0 -1
- package/.output/server/chunks/build/MetaStripGroup-Cp2WCQf7.mjs.map +0 -1
- package/.output/server/chunks/build/NavbarActions-VCHW0u67.mjs.map +0 -1
- package/.output/server/chunks/build/ProjectTestCasesTable-saHYJoyQ.mjs.map +0 -1
- package/.output/server/chunks/build/RunReports-CKYYRC59.mjs.map +0 -1
- package/.output/server/chunks/build/RunStatusBadge-CWhmAmKb.mjs.map +0 -1
- package/.output/server/chunks/build/SectionCard-BB1O3uXd.mjs.map +0 -1
- package/.output/server/chunks/build/SettingsField-CEasBHu3.mjs.map +0 -1
- package/.output/server/chunks/build/TestCaseHistoryChart-BgI6P_zS.mjs.map +0 -1
- package/.output/server/chunks/build/TestStatusBar-DR8jM5th.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-B7Dw490u.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-DVPb1S93.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-kkexEH_q.mjs.map +0 -1
- package/.output/server/chunks/build/about-C4AbyQ4q.mjs.map +0 -1
- package/.output/server/chunks/build/account-B45bYZd1.mjs.map +0 -1
- package/.output/server/chunks/build/auto-heal-BnTdKHQq.mjs.map +0 -1
- package/.output/server/chunks/build/help-content-BK3jcgLw.mjs.map +0 -1
- package/.output/server/chunks/build/import-ibAn_HB9.mjs.map +0 -1
- package/.output/server/chunks/build/index-2GmuPNF-.mjs.map +0 -1
- package/.output/server/chunks/build/index-D5A0DW7Y.mjs.map +0 -1
- package/.output/server/chunks/build/index-DreB_S-d.mjs.map +0 -1
- package/.output/server/chunks/build/index-KsRegEjT.mjs.map +0 -1
- package/.output/server/chunks/build/mcp-Dwj29-uG.mjs.map +0 -1
- package/.output/server/chunks/build/notifications-CjAn5FJj.mjs.map +0 -1
- package/.output/server/chunks/build/performance-DRzcu_c7.mjs.map +0 -1
- package/.output/server/chunks/build/pr-feedback-DR60oGBf.mjs.map +0 -1
- package/.output/server/chunks/build/selections-BjjolRZ9.mjs.map +0 -1
- package/.output/server/chunks/build/settings-B3NWV9tu.mjs.map +0 -1
- package/.output/server/chunks/build/settings-metadata-DwJk8uSt.mjs.map +0 -1
- package/.output/server/chunks/build/storage-C1O-FC0U.mjs.map +0 -1
- package/.output/server/chunks/build/tags-dsvYrnii.mjs.map +0 -1
- package/.output/server/chunks/build/test-cases-CFiOuyK6.mjs.map +0 -1
- package/.output/server/chunks/build/test-functions-CbmBi6az.mjs.map +0 -1
- package/.output/server/chunks/build/useDesktopDownload-R_RWSgUV.mjs.map +0 -1
- package/.output/server/chunks/build/useDesktopLocalRuns-BdELBy0Y.mjs.map +0 -1
- package/.output/server/chunks/build/useDesktopProjectLink-IUN7SIP2.mjs.map +0 -1
- package/.output/server/chunks/build/useSettingsNav-Dg87E7kY.mjs.map +0 -1
- package/.output/server/chunks/build/users-DgsoiXxQ.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as j}from"./
|
|
1
|
+
import{_ as j}from"./Bx_lfKHl.js";import{_ as F}from"./AbnDY6Zr.js";import{_ as T}from"./B-1zt4pp.js";import{aw as D,d as G,O as H,p as Y,u as J,q as K,C as q,c as B,g as r,b as t,e as c,f as o,h as a,k as f,B as Q,r as _,H as W,o as i,l as v,D as I,I as X,j as Z,_ as ee,J as M,v as te}from"./1QWBzxLM.js";import{_ as ae}from"./B4lvHjBe.js";import{_ as se}from"./Dpwj_1H5.js";import"./Bl0xzETD.js";const oe=D("/logo-wide.svg"),ne={class:"min-h-screen flex flex-col items-center justify-center bg-elevated/50 gap-6 px-4"},le={key:1,class:"space-y-2 mb-4"},re={class:"mt-4 text-center"},ie={class:"flex items-center gap-4 text-sm text-muted"},de={href:"https://github.com/piwitests/platform",target:"_blank",rel:"noopener",class:"flex items-center gap-1.5 hover:text-default transition-colors"},ve=G({__name:"login",setup(ue){const{login:A}=H(),C=Y(),N=J(),y=K(),P=Q(),u=M({username:"",password:""}),w=_(!1),p=_(""),h=_(null),s=M({username:"",password:"",confirmPassword:"",name:""}),m=_(!1),d=_("");q(async()=>{if(P.public.demoMode){h.value=!1;return}try{const n=await $fetch("/api/auth/setup");h.value=n.needsSetup}catch{h.value=!1}});async function z(){if(!s.username||!s.password){d.value="Please choose a username and password";return}if(s.username.length<3){d.value="Username must be at least 3 characters";return}if(s.password.length<8){d.value="Password must be at least 8 characters";return}if(s.password!==s.confirmPassword){d.value="Passwords do not match";return}m.value=!0,d.value="";try{await $fetch("/api/auth/setup",{method:"POST",body:{username:s.username,password:s.password,name:s.name||void 0}}),await A(s.username,s.password),y.add({title:"Admin account created",description:"You're signed in.",color:"success"}),C.push("/")}catch(n){const e=n&&typeof n=="object"&&"data"in n?n.data?.message:void 0;d.value=e||"Failed to create the admin account",y.add({title:"Setup failed",description:d.value,color:"error"})}finally{m.value=!1}}const x=te(()=>P.public.demoMode?[]:P.public.oauthProviders||[]);q(()=>{const n=N.query.error;if(n){const e={"access-denied":"Access was denied","invalid-state":"Authentication failed (invalid state)","missing-code":"Authentication failed (missing code)","oauth-failed":"OAuth authentication failed","account-exists":"This email is already linked to a different sign-in method. Sign in with that method instead.","domain-not-allowed":"Your email domain is not allowed to sign in here.","org-not-allowed":"You are not a member of an allowed organization.","link-requires-login":"Please sign in before connecting a provider.","auth-disabled":"Authentication is not enabled","invalid-provider":"Invalid OAuth provider"};p.value=e[n]||"Authentication failed"}});async function E(){if(!u.username||!u.password){p.value="Please enter username and password";return}w.value=!0,p.value="";try{await A(u.username,u.password),y.add({title:"Login successful",color:"success"}),C.push("/")}catch(n){const e=n&&typeof n=="object"&&"data"in n?n.data?.message:void 0;p.value=e||"Invalid username or password",y.add({title:"Login failed",description:p.value,color:"error"})}finally{w.value=!1}}function S(n){window.location.href=`/api/auth/oauth/${n}/login`}return(n,e)=>{const O=j,U=F,$=T,g=X,b=ae,k=Z,V=ee,R=se,L=W;return i(),B("div",ne,[e[18]||(e[18]=r("img",{src:oe,alt:"Piwi Dashboard",class:"h-16 rounded-xl"},null,-1)),t(h)===null?(i(),c(U,{key:0,class:"w-full max-w-md"},{default:o(()=>[a(O,{text:"Loading…"})]),_:1})):t(h)?(i(),c(U,{key:1,class:"w-full max-w-md"},{header:o(()=>[...e[8]||(e[8]=[r("h1",{class:"text-xl font-semibold"},"Create the first admin account",-1),r("p",{class:"text-sm text-muted mt-1"}," Authentication is enabled and no accounts exist yet. Create the administrator account to sign in. ",-1)])]),default:o(()=>[t(d)?(i(),c($,{key:0,color:"error",title:t(d),variant:"subtle",class:"mb-4"},null,8,["title"])):v("",!0),r("form",{class:"space-y-4",onSubmit:I(z,["prevent"])},[a(b,{label:"Username",name:"username",required:""},{default:o(()=>[a(g,{modelValue:t(s).username,"onUpdate:modelValue":e[0]||(e[0]=l=>t(s).username=l),type:"text",placeholder:"Choose a username",autocomplete:"username",disabled:t(m),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),a(b,{label:"Name",name:"name"},{default:o(()=>[a(g,{modelValue:t(s).name,"onUpdate:modelValue":e[1]||(e[1]=l=>t(s).name=l),type:"text",placeholder:"Administrator (optional)",autocomplete:"name",disabled:t(m),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),a(b,{label:"Password",name:"password",required:""},{default:o(()=>[a(g,{modelValue:t(s).password,"onUpdate:modelValue":e[2]||(e[2]=l=>t(s).password=l),type:"password",placeholder:"Choose a password (min. 8 characters)",autocomplete:"new-password",disabled:t(m),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),a(b,{label:"Confirm password",name:"confirmPassword",required:""},{default:o(()=>[a(g,{modelValue:t(s).confirmPassword,"onUpdate:modelValue":e[3]||(e[3]=l=>t(s).confirmPassword=l),type:"password",placeholder:"Re-enter the password",autocomplete:"new-password",disabled:t(m),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),a(k,{type:"submit",block:"",loading:t(m),disabled:t(m)},{default:o(()=>[...e[9]||(e[9]=[f(" Create admin account ",-1)])]),_:1},8,["loading","disabled"])],32)]),_:1})):(i(),c(U,{key:2,class:"w-full max-w-md"},{header:o(()=>[...e[10]||(e[10]=[r("h1",{class:"text-xl font-semibold"},"Sign in to your account",-1)])]),default:o(()=>[t(p)?(i(),c($,{key:0,color:"error",title:t(p),variant:"subtle",class:"mb-4"},null,8,["title"])):v("",!0),t(x).length>0?(i(),B("div",le,[t(x).includes("google")?(i(),c(k,{key:0,block:"",color:"neutral",variant:"outline",onClick:e[4]||(e[4]=l=>S("google"))},{leading:o(()=>[a(V,{name:"i-lucide-chrome",class:"size-5"})]),default:o(()=>[e[11]||(e[11]=f(" Sign in with Google ",-1))]),_:1})):v("",!0),t(x).includes("github")?(i(),c(k,{key:1,block:"",color:"neutral",variant:"outline",onClick:e[5]||(e[5]=l=>S("github"))},{leading:o(()=>[a(V,{name:"i-lucide-github",class:"size-5"})]),default:o(()=>[e[12]||(e[12]=f(" Sign in with GitHub ",-1))]),_:1})):v("",!0),t(x).length>0?(i(),c(R,{key:2,label:"or continue with password",class:"my-4"})):v("",!0)])):v("",!0),r("form",{class:"space-y-4",onSubmit:I(E,["prevent"])},[a(b,{label:"Username",name:"username",required:""},{default:o(()=>[a(g,{modelValue:t(u).username,"onUpdate:modelValue":e[6]||(e[6]=l=>t(u).username=l),type:"text",placeholder:"Enter your username",autocomplete:"username",disabled:t(w),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),a(b,{label:"Password",name:"password",required:""},{default:o(()=>[a(g,{modelValue:t(u).password,"onUpdate:modelValue":e[7]||(e[7]=l=>t(u).password=l),type:"password",placeholder:"Enter your password",autocomplete:"current-password",disabled:t(w),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),a(k,{type:"submit",block:"",loading:t(w),disabled:t(w)},{default:o(()=>[...e[13]||(e[13]=[f(" Login ",-1)])]),_:1},8,["loading","disabled"])],32),r("div",re,[a(L,{to:"/forgot-password",class:"text-sm text-muted hover:text-default"},{default:o(()=>[...e[14]||(e[14]=[f(" Forgot password? ",-1)])]),_:1})])]),_:1})),r("div",ie,[r("a",de,[a(V,{name:"i-lucide-github",class:"size-4"}),e[15]||(e[15]=f(" GitHub ",-1))]),e[17]||(e[17]=r("span",null,"·",-1)),a(L,{to:"/docs",class:"flex items-center gap-1.5 hover:text-default transition-colors"},{default:o(()=>[a(V,{name:"i-lucide-book-open",class:"size-4"}),e[16]||(e[16]=f(" API Docs ",-1))]),_:1})])])}}});export{ve as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as o}from"./CXkXHtcx.js";import{O as a,v as i,ab as n}from"./1QWBzxLM.js";import{u}from"./CzyCEdYP.js";function p(s){const{canSeeAdmin:t}=a(),e=u();return i(()=>o({canSeeAdmin:t.value,isDesktop:e,envManaged:s?n(s):void 0}))}export{p as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as s}from"./
|
|
1
|
+
import{_ as s}from"./Bx_lfKHl.js";import{u as r}from"./gdlHFfN6.js";import{d as i,w as _,e as p,n as m,o as c}from"./1QWBzxLM.js";import"./CXkXHtcx.js";import"./CHz7LJIX.js";import"./CzyCEdYP.js";const h=i({__name:"index",async setup(f){let t,e;const n=r().value.flat().find(o=>typeof o.to=="string")?.to;return n&&([t,e]=_(()=>m(n,{replace:!0})),await t,e()),(o,g)=>{const a=s;return c(),p(a,{text:"Opening settings…"})}}});export{h as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as S,X as L,ax as H,T as C,Y as N,ay as O,o as c,e as y,f as g,U as h,b as a,W as I,r as w,az as E,Z as j,C as U,ah as W,h as q,a1 as G,l as k,aA as X,v as _,a as Y,aB as Z,aC as J,V as T,aD as Q,aE as aa,R as ta,D as ea,a2 as ia,a3 as sa,a5 as oa,a6 as la,a7 as ra,i as x,c as B,F as $,z as M,aF as z,_ as na,aG as da,k as R,t as K,m as ua,a8 as ca}from"./BdQ7kfxJ.js";import{R as va}from"./WZXZeGYt.js";const[V,fa]=j("TabsRoot");var ga=S({__name:"TabsRoot",props:{defaultValue:{type:null,required:!1},orientation:{type:String,required:!1,default:"horizontal"},dir:{type:String,required:!1},activationMode:{type:String,required:!1,default:"automatic"},modelValue:{type:null,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:modelValue"],setup(d,{emit:r}){const u=d,i=r,{orientation:v,unmountOnHide:n,dir:t}=L(u),o=H(t);C();const s=N(u,"modelValue",i,{defaultValue:u.defaultValue,passive:u.modelValue===void 0}),l=w(),p=E(new Set);return fa({modelValue:s,changeModelValue:b=>{s.value=b},orientation:v,dir:o,unmountOnHide:n,activationMode:u.activationMode,baseId:O(void 0,"reka-tabs"),tabsList:l,contentIds:p,registerContent:b=>{p.value=new Set([...p.value,b])},unregisterContent:b=>{const f=new Set(p.value);f.delete(b),p.value=f}}),(b,f)=>(c(),y(a(I),{dir:a(o),"data-orientation":a(v),"as-child":b.asChild,as:b.as},{default:g(()=>[h(b.$slots,"default",{modelValue:a(s)})]),_:3},8,["dir","data-orientation","as-child","as"]))}}),pa=ga;function F(d,r){return`${d}-trigger-${r}`}function P(d,r){return`${d}-content-${r}`}var ba=S({__name:"TabsContent",props:{value:{type:[String,Number],required:!0},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(d){const r=d,{forwardRef:u}=C(),i=V(),v=_(()=>F(i.baseId,r.value)),n=_(()=>P(i.baseId,r.value)),t=_(()=>r.value===i.modelValue.value),o=w(t.value);return U(()=>{i.registerContent(r.value),requestAnimationFrame(()=>{o.value=!1})}),W(()=>{i.unregisterContent(r.value)}),(s,l)=>(c(),y(a(X),{present:s.forceMount||t.value,"force-mount":""},{default:g(({present:p})=>[q(a(I),{id:n.value,ref:a(u),"as-child":s.asChild,as:s.as,role:"tabpanel","data-state":t.value?"active":"inactive","data-orientation":a(i).orientation.value,"aria-labelledby":v.value,hidden:!p,tabindex:"0",style:G({animationDuration:o.value?"0s":void 0})},{default:g(()=>[!a(i).unmountOnHide.value||p?h(s.$slots,"default",{key:0}):k("v-if",!0)]),_:2},1032,["id","as-child","as","data-state","data-orientation","aria-labelledby","hidden","style"])]),_:3},8,["present"]))}}),ya=ba,ha=S({__name:"TabsIndicator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(d,{expose:r}){const u=d,i=V();r({updateIndicatorStyle:o}),C();const v=Q(),n=w({size:null,thickness:null,position:null}),t=w([]);Y(()=>[i.modelValue.value,i?.dir.value],()=>{o()},{immediate:!0,flush:"post"}),Z(()=>{t.value=Array.from(i.tabsList.value?.querySelectorAll('[role="tab"]')||[])}),J(_(()=>[i.tabsList.value,...t.value]),o);function o(){const s=i.tabsList.value?.querySelector('[role="tab"][data-state="active"]');s&&(i.orientation.value==="horizontal"?n.value={size:s.offsetWidth,thickness:s.offsetHeight,position:s.offsetLeft}:n.value={size:s.offsetHeight,thickness:s.offsetWidth,position:s.offsetTop})}return(s,l)=>a(v)&&typeof n.value.size=="number"?(c(),y(a(I),T({key:0},u,{style:{"--reka-tabs-indicator-size":`${n.value.size}px`,"--reka-tabs-indicator-thickness":`${n.value.thickness}px`,"--reka-tabs-indicator-position":`${n.value.position}px`}}),{default:g(()=>[h(s.$slots,"default")]),_:3},16,["style"])):k("v-if",!0)}}),ma=ha,_a=S({__name:"TabsList",props:{loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(d){const r=d,{loop:u}=L(r),{forwardRef:i,currentElement:v}=C(),n=V();return n.tabsList=v,(t,o)=>(c(),y(a(aa),{"as-child":"",orientation:a(n).orientation.value,dir:a(n).dir.value,loop:a(u)},{default:g(()=>[q(a(I),{ref:a(i),role:"tablist","as-child":t.asChild,as:t.as,"aria-orientation":a(n).orientation.value},{default:g(()=>[h(t.$slots,"default")]),_:3},8,["as-child","as","aria-orientation"])]),_:3},8,["orientation","dir","loop"]))}}),xa=_a,za=S({__name:"TabsTrigger",props:{value:{type:[String,Number],required:!0},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(d){const r=d,{forwardRef:u}=C(),i=V(),v=_(()=>F(i.baseId,r.value)),n=_(()=>i.contentIds.value.has(r.value)?P(i.baseId,r.value):void 0),t=_(()=>r.value===i.modelValue.value);return(o,s)=>(c(),y(a(va),{"as-child":"",focusable:!o.disabled,active:t.value},{default:g(()=>[q(a(I),{id:v.value,ref:a(u),role:"tab",type:o.as==="button"?"button":void 0,as:o.as,"as-child":o.asChild,"aria-selected":t.value?"true":"false","aria-controls":n.value,"data-state":t.value?"active":"inactive",disabled:o.disabled,"data-disabled":o.disabled?"":void 0,"data-orientation":a(i).orientation.value,onMousedown:s[0]||(s[0]=ea(l=>{!o.disabled&&l.ctrlKey===!1?a(i).changeModelValue(o.value):l.preventDefault()},["left"])),onKeydown:s[1]||(s[1]=ta(l=>a(i).changeModelValue(o.value),["enter","space"])),onFocus:s[2]||(s[2]=()=>{const l=a(i).activationMode!=="manual";!t.value&&!o.disabled&&l&&a(i).changeModelValue(o.value)})},{default:g(()=>[h(o.$slots,"default")]),_:3},8,["id","type","as","as-child","aria-selected","aria-controls","data-state","disabled","data-disabled","data-orientation"])]),_:3},8,["focusable","active"]))}}),ka=za;const wa={slots:{root:"flex items-center gap-2",list:"relative flex p-1 group",indicator:"absolute transition-[translate,width] duration-200",trigger:["group relative inline-flex items-center min-w-0 data-[state=inactive]:text-muted hover:data-[state=inactive]:not-disabled:text-default font-medium rounded-md disabled:cursor-not-allowed disabled:opacity-75","transition-colors"],leadingIcon:"shrink-0",leadingAvatar:"shrink-0",leadingAvatarSize:"",label:"truncate",trailingBadge:"shrink-0",trailingBadgeSize:"sm",content:"w-full rounded-md focus-visible:outline-3"},variants:{color:{primary:{content:"outline-primary/25"},secondary:{content:"outline-secondary/25"},success:{content:"outline-success/25"},info:{content:"outline-info/25"},warning:{content:"outline-warning/25"},error:{content:"outline-error/25"},neutral:{content:"outline-inverted/25"}},variant:{pill:{list:"bg-elevated rounded-lg",trigger:["grow","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:content-[''] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:absolute in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:inset-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:rounded-md in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:shadow-xs in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:-z-10 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:isolate"],indicator:"rounded-md shadow-xs"},link:{list:"border-default",indicator:"rounded-full",trigger:"in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:content-[''] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:absolute in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:rounded-full"}},orientation:{horizontal:{root:"flex-col",list:"w-full",indicator:"left-0 w-(--reka-tabs-indicator-size) translate-x-(--reka-tabs-indicator-position)",trigger:"justify-center"},vertical:{list:"flex-col",indicator:"top-0 h-(--reka-tabs-indicator-size) translate-y-(--reka-tabs-indicator-position)"}},size:{xs:{trigger:"px-2 py-1 text-xs gap-1",leadingIcon:"size-4",leadingAvatarSize:"3xs"},sm:{trigger:"px-2.5 py-1.5 text-xs gap-1.5",leadingIcon:"size-4",leadingAvatarSize:"3xs"},md:{trigger:"px-3 py-1.5 text-sm gap-1.5",leadingIcon:"size-5",leadingAvatarSize:"2xs"},lg:{trigger:"px-3 py-2 text-sm gap-2",leadingIcon:"size-5",leadingAvatarSize:"2xs"},xl:{trigger:"px-3 py-2 text-base gap-2",leadingIcon:"size-6",leadingAvatarSize:"xs"}}},compoundVariants:[{orientation:"horizontal",variant:"pill",class:{indicator:"inset-y-1"}},{orientation:"horizontal",variant:"link",class:{list:"border-b -mb-px",indicator:"-bottom-px h-px",trigger:"in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:inset-x-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:-bottom-[calc(var(--spacing)+1px)] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:h-px"}},{orientation:"vertical",variant:"pill",class:{indicator:"inset-x-1",list:"items-center",trigger:"w-full justify-center"}},{orientation:"vertical",variant:"link",class:{list:"border-s -ms-px",indicator:"-start-px w-px",trigger:"in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:inset-y-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:-start-[calc(var(--spacing)+1px)] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:w-px"}},{color:"primary",variant:"pill",class:{indicator:"bg-primary",trigger:["data-[state=active]:text-inverted outline-primary/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-primary"]}},{color:"secondary",variant:"pill",class:{indicator:"bg-secondary",trigger:["data-[state=active]:text-inverted outline-secondary/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-secondary"]}},{color:"success",variant:"pill",class:{indicator:"bg-success",trigger:["data-[state=active]:text-inverted outline-success/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-success"]}},{color:"info",variant:"pill",class:{indicator:"bg-info",trigger:["data-[state=active]:text-inverted outline-info/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-info"]}},{color:"warning",variant:"pill",class:{indicator:"bg-warning",trigger:["data-[state=active]:text-inverted outline-warning/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-warning"]}},{color:"error",variant:"pill",class:{indicator:"bg-error",trigger:["data-[state=active]:text-inverted outline-error/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-error"]}},{color:"neutral",variant:"pill",class:{indicator:"bg-inverted",trigger:["data-[state=active]:text-inverted outline-inverted/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-inverted"]}},{color:"primary",variant:"link",class:{indicator:"bg-primary",trigger:["data-[state=active]:text-primary outline-primary/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-primary"]}},{color:"secondary",variant:"link",class:{indicator:"bg-secondary",trigger:["data-[state=active]:text-secondary outline-secondary/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-secondary"]}},{color:"success",variant:"link",class:{indicator:"bg-success",trigger:["data-[state=active]:text-success outline-success/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-success"]}},{color:"info",variant:"link",class:{indicator:"bg-info",trigger:["data-[state=active]:text-info outline-info/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-info"]}},{color:"warning",variant:"link",class:{indicator:"bg-warning",trigger:["data-[state=active]:text-warning outline-warning/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-warning"]}},{color:"error",variant:"link",class:{indicator:"bg-error",trigger:["data-[state=active]:text-error outline-error/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-error"]}},{color:"neutral",variant:"link",class:{indicator:"bg-inverted",trigger:["data-[state=active]:text-highlighted outline-inverted/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-inverted"]}}],defaultVariants:{color:"primary",variant:"pill",size:"md"}},Ca={__name:"UTabs",props:{as:{type:null,required:!1},items:{type:Array,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},orientation:{type:null,required:!1,default:"horizontal"},content:{type:Boolean,required:!1,default:!0},valueKey:{type:null,required:!1,default:"value"},labelKey:{type:null,required:!1,default:"label"},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultValue:{type:[String,Number],required:!1,default:"0"},modelValue:{type:[String,Number],required:!1},activationMode:{type:String,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0}},emits:["update:modelValue"],setup(d,{expose:r,emit:u}){const i=d,v=u,n=ia(),t=sa("tabs",i),o=oa(),s=la(ra(t,"as","unmountOnHide"),v),l=_(()=>ca({extend:wa,...o.ui?.tabs||{}})({color:t.color,variant:t.variant,size:t.size,orientation:t.orientation})),p=w([]);function b(f,A){p.value[f]=A}return r({triggersRef:p}),(f,A)=>(c(),y(a(pa),T(a(s),{"model-value":a(t).modelValue,"default-value":a(t).defaultValue,orientation:a(t).orientation,"activation-mode":a(t).activationMode,"data-slot":"root",class:l.value.root({class:[a(t).ui?.root,a(t).class]})}),{default:g(()=>[q(a(xa),{"data-slot":"list",class:x(l.value.list({class:a(t).ui?.list}))},{default:g(()=>[q(a(ma),{"data-slot":"indicator",class:x(l.value.indicator({class:a(t).ui?.indicator}))},null,8,["class"]),h(f.$slots,"list-leading"),(c(!0),B($,null,M(a(t).items,(e,m)=>(c(),y(a(ka),{key:a(z)(e,a(t).valueKey)??m,ref_for:!0,ref:D=>b(m,D),value:a(z)(e,a(t).valueKey)??String(m),disabled:e.disabled,"data-slot":"trigger",class:x(l.value.trigger({class:[a(t).ui?.trigger,e.ui?.trigger]}))},{default:g(()=>[h(f.$slots,"leading",{item:e,index:m,ui:l.value},()=>[e.icon?(c(),y(na,{key:0,name:e.icon,"data-slot":"leadingIcon",class:x(l.value.leadingIcon({class:[a(t).ui?.leadingIcon,e.ui?.leadingIcon]}))},null,8,["name","class"])):e.avatar?(c(),y(da,T({key:1,size:e.ui?.leadingAvatarSize||a(t).ui?.leadingAvatarSize||l.value.leadingAvatarSize()},{ref_for:!0},e.avatar,{"data-slot":"leadingAvatar",class:l.value.leadingAvatar({class:[a(t).ui?.leadingAvatar,e.ui?.leadingAvatar]})}),null,16,["size","class"])):k("",!0)]),a(z)(e,a(t).labelKey)||n.default?(c(),B("span",{key:0,"data-slot":"label",class:x(l.value.label({class:[a(t).ui?.label,e.ui?.label]}))},[h(f.$slots,"default",{item:e,index:m},()=>[R(K(a(z)(e,a(t).labelKey)),1)])],2)):k("",!0),h(f.$slots,"trailing",{item:e,index:m,ui:l.value},()=>[e.badge||e.badge===0?(c(),y(ua,T({key:0,color:"neutral",variant:"outline",size:e.ui?.trailingBadgeSize||a(t).ui?.trailingBadgeSize||l.value.trailingBadgeSize()},{ref_for:!0},typeof e.badge=="string"||typeof e.badge=="number"?{label:e.badge}:e.badge,{"data-slot":"trailingBadge",class:l.value.trailingBadge({class:[a(t).ui?.trailingBadge,e.ui?.trailingBadge]})}),null,16,["size","class"])):k("",!0)])]),_:2},1032,["value","disabled","class"]))),128)),h(f.$slots,"list-trailing")]),_:3},8,["class"]),a(t).content?(c(!0),B($,{key:0},M(a(t).items,(e,m)=>(c(),y(a(ya),{key:a(z)(e,a(t).valueKey)??m,value:a(z)(e,a(t).valueKey)??String(m),"data-slot":"content",class:x(l.value.content({class:[a(t).ui?.content,e.ui?.content,e.class]}))},{default:g(()=>[h(f.$slots,e.slot||"content",{item:e,index:m,ui:l.value},()=>[R(K(e.content),1)])]),_:2},1032,["value","class"]))),128)):k("",!0)]),_:3},16,["model-value","default-value","orientation","activation-mode","class"]))}};export{Ca as _};
|
|
1
|
+
import{d as S,X as L,ax as H,T as C,Y as N,ay as O,o as c,e as y,f as g,U as h,b as a,W as I,r as w,az as E,Z as j,C as U,ah as W,h as q,a1 as G,l as k,aA as X,v as _,a as Y,aB as Z,aC as J,V as T,aD as Q,aE as aa,R as ta,D as ea,a2 as ia,a3 as sa,a5 as oa,a6 as la,a7 as ra,i as x,c as B,F as $,z as M,aF as z,_ as na,aG as da,k as R,t as K,m as ua,a8 as ca}from"./1QWBzxLM.js";import{R as va}from"./D_ZAGxCQ.js";const[V,fa]=j("TabsRoot");var ga=S({__name:"TabsRoot",props:{defaultValue:{type:null,required:!1},orientation:{type:String,required:!1,default:"horizontal"},dir:{type:String,required:!1},activationMode:{type:String,required:!1,default:"automatic"},modelValue:{type:null,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["update:modelValue"],setup(d,{emit:r}){const u=d,i=r,{orientation:v,unmountOnHide:n,dir:t}=L(u),o=H(t);C();const s=N(u,"modelValue",i,{defaultValue:u.defaultValue,passive:u.modelValue===void 0}),l=w(),p=E(new Set);return fa({modelValue:s,changeModelValue:b=>{s.value=b},orientation:v,dir:o,unmountOnHide:n,activationMode:u.activationMode,baseId:O(void 0,"reka-tabs"),tabsList:l,contentIds:p,registerContent:b=>{p.value=new Set([...p.value,b])},unregisterContent:b=>{const f=new Set(p.value);f.delete(b),p.value=f}}),(b,f)=>(c(),y(a(I),{dir:a(o),"data-orientation":a(v),"as-child":b.asChild,as:b.as},{default:g(()=>[h(b.$slots,"default",{modelValue:a(s)})]),_:3},8,["dir","data-orientation","as-child","as"]))}}),pa=ga;function F(d,r){return`${d}-trigger-${r}`}function P(d,r){return`${d}-content-${r}`}var ba=S({__name:"TabsContent",props:{value:{type:[String,Number],required:!0},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(d){const r=d,{forwardRef:u}=C(),i=V(),v=_(()=>F(i.baseId,r.value)),n=_(()=>P(i.baseId,r.value)),t=_(()=>r.value===i.modelValue.value),o=w(t.value);return U(()=>{i.registerContent(r.value),requestAnimationFrame(()=>{o.value=!1})}),W(()=>{i.unregisterContent(r.value)}),(s,l)=>(c(),y(a(X),{present:s.forceMount||t.value,"force-mount":""},{default:g(({present:p})=>[q(a(I),{id:n.value,ref:a(u),"as-child":s.asChild,as:s.as,role:"tabpanel","data-state":t.value?"active":"inactive","data-orientation":a(i).orientation.value,"aria-labelledby":v.value,hidden:!p,tabindex:"0",style:G({animationDuration:o.value?"0s":void 0})},{default:g(()=>[!a(i).unmountOnHide.value||p?h(s.$slots,"default",{key:0}):k("v-if",!0)]),_:2},1032,["id","as-child","as","data-state","data-orientation","aria-labelledby","hidden","style"])]),_:3},8,["present"]))}}),ya=ba,ha=S({__name:"TabsIndicator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(d,{expose:r}){const u=d,i=V();r({updateIndicatorStyle:o}),C();const v=Q(),n=w({size:null,thickness:null,position:null}),t=w([]);Y(()=>[i.modelValue.value,i?.dir.value],()=>{o()},{immediate:!0,flush:"post"}),Z(()=>{t.value=Array.from(i.tabsList.value?.querySelectorAll('[role="tab"]')||[])}),J(_(()=>[i.tabsList.value,...t.value]),o);function o(){const s=i.tabsList.value?.querySelector('[role="tab"][data-state="active"]');s&&(i.orientation.value==="horizontal"?n.value={size:s.offsetWidth,thickness:s.offsetHeight,position:s.offsetLeft}:n.value={size:s.offsetHeight,thickness:s.offsetWidth,position:s.offsetTop})}return(s,l)=>a(v)&&typeof n.value.size=="number"?(c(),y(a(I),T({key:0},u,{style:{"--reka-tabs-indicator-size":`${n.value.size}px`,"--reka-tabs-indicator-thickness":`${n.value.thickness}px`,"--reka-tabs-indicator-position":`${n.value.position}px`}}),{default:g(()=>[h(s.$slots,"default")]),_:3},16,["style"])):k("v-if",!0)}}),ma=ha,_a=S({__name:"TabsList",props:{loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(d){const r=d,{loop:u}=L(r),{forwardRef:i,currentElement:v}=C(),n=V();return n.tabsList=v,(t,o)=>(c(),y(a(aa),{"as-child":"",orientation:a(n).orientation.value,dir:a(n).dir.value,loop:a(u)},{default:g(()=>[q(a(I),{ref:a(i),role:"tablist","as-child":t.asChild,as:t.as,"aria-orientation":a(n).orientation.value},{default:g(()=>[h(t.$slots,"default")]),_:3},8,["as-child","as","aria-orientation"])]),_:3},8,["orientation","dir","loop"]))}}),xa=_a,za=S({__name:"TabsTrigger",props:{value:{type:[String,Number],required:!0},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(d){const r=d,{forwardRef:u}=C(),i=V(),v=_(()=>F(i.baseId,r.value)),n=_(()=>i.contentIds.value.has(r.value)?P(i.baseId,r.value):void 0),t=_(()=>r.value===i.modelValue.value);return(o,s)=>(c(),y(a(va),{"as-child":"",focusable:!o.disabled,active:t.value},{default:g(()=>[q(a(I),{id:v.value,ref:a(u),role:"tab",type:o.as==="button"?"button":void 0,as:o.as,"as-child":o.asChild,"aria-selected":t.value?"true":"false","aria-controls":n.value,"data-state":t.value?"active":"inactive",disabled:o.disabled,"data-disabled":o.disabled?"":void 0,"data-orientation":a(i).orientation.value,onMousedown:s[0]||(s[0]=ea(l=>{!o.disabled&&l.ctrlKey===!1?a(i).changeModelValue(o.value):l.preventDefault()},["left"])),onKeydown:s[1]||(s[1]=ta(l=>a(i).changeModelValue(o.value),["enter","space"])),onFocus:s[2]||(s[2]=()=>{const l=a(i).activationMode!=="manual";!t.value&&!o.disabled&&l&&a(i).changeModelValue(o.value)})},{default:g(()=>[h(o.$slots,"default")]),_:3},8,["id","type","as","as-child","aria-selected","aria-controls","data-state","disabled","data-disabled","data-orientation"])]),_:3},8,["focusable","active"]))}}),ka=za;const wa={slots:{root:"flex items-center gap-2",list:"relative flex p-1 group",indicator:"absolute transition-[translate,width] duration-200",trigger:["group relative inline-flex items-center min-w-0 data-[state=inactive]:text-muted hover:data-[state=inactive]:not-disabled:text-default font-medium rounded-md disabled:cursor-not-allowed disabled:opacity-75","transition-colors"],leadingIcon:"shrink-0",leadingAvatar:"shrink-0",leadingAvatarSize:"",label:"truncate",trailingBadge:"shrink-0",trailingBadgeSize:"sm",content:"w-full rounded-md focus-visible:outline-3"},variants:{color:{primary:{content:"outline-primary/25"},secondary:{content:"outline-secondary/25"},success:{content:"outline-success/25"},info:{content:"outline-info/25"},warning:{content:"outline-warning/25"},error:{content:"outline-error/25"},neutral:{content:"outline-inverted/25"}},variant:{pill:{list:"bg-elevated rounded-lg",trigger:["grow","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:content-[''] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:absolute in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:inset-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:rounded-md in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:shadow-xs in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:-z-10 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:isolate"],indicator:"rounded-md shadow-xs"},link:{list:"border-default",indicator:"rounded-full",trigger:"in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:content-[''] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:absolute in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:rounded-full"}},orientation:{horizontal:{root:"flex-col",list:"w-full",indicator:"left-0 w-(--reka-tabs-indicator-size) translate-x-(--reka-tabs-indicator-position)",trigger:"justify-center"},vertical:{list:"flex-col",indicator:"top-0 h-(--reka-tabs-indicator-size) translate-y-(--reka-tabs-indicator-position)"}},size:{xs:{trigger:"px-2 py-1 text-xs gap-1",leadingIcon:"size-4",leadingAvatarSize:"3xs"},sm:{trigger:"px-2.5 py-1.5 text-xs gap-1.5",leadingIcon:"size-4",leadingAvatarSize:"3xs"},md:{trigger:"px-3 py-1.5 text-sm gap-1.5",leadingIcon:"size-5",leadingAvatarSize:"2xs"},lg:{trigger:"px-3 py-2 text-sm gap-2",leadingIcon:"size-5",leadingAvatarSize:"2xs"},xl:{trigger:"px-3 py-2 text-base gap-2",leadingIcon:"size-6",leadingAvatarSize:"xs"}}},compoundVariants:[{orientation:"horizontal",variant:"pill",class:{indicator:"inset-y-1"}},{orientation:"horizontal",variant:"link",class:{list:"border-b -mb-px",indicator:"-bottom-px h-px",trigger:"in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:inset-x-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:-bottom-[calc(var(--spacing)+1px)] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:h-px"}},{orientation:"vertical",variant:"pill",class:{indicator:"inset-x-1",list:"items-center",trigger:"w-full justify-center"}},{orientation:"vertical",variant:"link",class:{list:"border-s -ms-px",indicator:"-start-px w-px",trigger:"in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:inset-y-0 in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:-start-[calc(var(--spacing)+1px)] in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:w-px"}},{color:"primary",variant:"pill",class:{indicator:"bg-primary",trigger:["data-[state=active]:text-inverted outline-primary/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-primary"]}},{color:"secondary",variant:"pill",class:{indicator:"bg-secondary",trigger:["data-[state=active]:text-inverted outline-secondary/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-secondary"]}},{color:"success",variant:"pill",class:{indicator:"bg-success",trigger:["data-[state=active]:text-inverted outline-success/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-success"]}},{color:"info",variant:"pill",class:{indicator:"bg-info",trigger:["data-[state=active]:text-inverted outline-info/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-info"]}},{color:"warning",variant:"pill",class:{indicator:"bg-warning",trigger:["data-[state=active]:text-inverted outline-warning/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-warning"]}},{color:"error",variant:"pill",class:{indicator:"bg-error",trigger:["data-[state=active]:text-inverted outline-error/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-error"]}},{color:"neutral",variant:"pill",class:{indicator:"bg-inverted",trigger:["data-[state=active]:text-inverted outline-inverted/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:before:bg-inverted"]}},{color:"primary",variant:"link",class:{indicator:"bg-primary",trigger:["data-[state=active]:text-primary outline-primary/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-primary"]}},{color:"secondary",variant:"link",class:{indicator:"bg-secondary",trigger:["data-[state=active]:text-secondary outline-secondary/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-secondary"]}},{color:"success",variant:"link",class:{indicator:"bg-success",trigger:["data-[state=active]:text-success outline-success/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-success"]}},{color:"info",variant:"link",class:{indicator:"bg-info",trigger:["data-[state=active]:text-info outline-info/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-info"]}},{color:"warning",variant:"link",class:{indicator:"bg-warning",trigger:["data-[state=active]:text-warning outline-warning/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-warning"]}},{color:"error",variant:"link",class:{indicator:"bg-error",trigger:["data-[state=active]:text-error outline-error/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-error"]}},{color:"neutral",variant:"link",class:{indicator:"bg-inverted",trigger:["data-[state=active]:text-highlighted outline-inverted/25 focus-visible:outline-3","in-[[data-slot=list]:not(:has([data-slot=indicator]))]:data-[state=active]:after:bg-inverted"]}}],defaultVariants:{color:"primary",variant:"pill",size:"md"}},Ca={__name:"UTabs",props:{as:{type:null,required:!1},items:{type:Array,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},orientation:{type:null,required:!1,default:"horizontal"},content:{type:Boolean,required:!1,default:!0},valueKey:{type:null,required:!1,default:"value"},labelKey:{type:null,required:!1,default:"label"},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultValue:{type:[String,Number],required:!1,default:"0"},modelValue:{type:[String,Number],required:!1},activationMode:{type:String,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0}},emits:["update:modelValue"],setup(d,{expose:r,emit:u}){const i=d,v=u,n=ia(),t=sa("tabs",i),o=oa(),s=la(ra(t,"as","unmountOnHide"),v),l=_(()=>ca({extend:wa,...o.ui?.tabs||{}})({color:t.color,variant:t.variant,size:t.size,orientation:t.orientation})),p=w([]);function b(f,A){p.value[f]=A}return r({triggersRef:p}),(f,A)=>(c(),y(a(pa),T(a(s),{"model-value":a(t).modelValue,"default-value":a(t).defaultValue,orientation:a(t).orientation,"activation-mode":a(t).activationMode,"data-slot":"root",class:l.value.root({class:[a(t).ui?.root,a(t).class]})}),{default:g(()=>[q(a(xa),{"data-slot":"list",class:x(l.value.list({class:a(t).ui?.list}))},{default:g(()=>[q(a(ma),{"data-slot":"indicator",class:x(l.value.indicator({class:a(t).ui?.indicator}))},null,8,["class"]),h(f.$slots,"list-leading"),(c(!0),B($,null,M(a(t).items,(e,m)=>(c(),y(a(ka),{key:a(z)(e,a(t).valueKey)??m,ref_for:!0,ref:D=>b(m,D),value:a(z)(e,a(t).valueKey)??String(m),disabled:e.disabled,"data-slot":"trigger",class:x(l.value.trigger({class:[a(t).ui?.trigger,e.ui?.trigger]}))},{default:g(()=>[h(f.$slots,"leading",{item:e,index:m,ui:l.value},()=>[e.icon?(c(),y(na,{key:0,name:e.icon,"data-slot":"leadingIcon",class:x(l.value.leadingIcon({class:[a(t).ui?.leadingIcon,e.ui?.leadingIcon]}))},null,8,["name","class"])):e.avatar?(c(),y(da,T({key:1,size:e.ui?.leadingAvatarSize||a(t).ui?.leadingAvatarSize||l.value.leadingAvatarSize()},{ref_for:!0},e.avatar,{"data-slot":"leadingAvatar",class:l.value.leadingAvatar({class:[a(t).ui?.leadingAvatar,e.ui?.leadingAvatar]})}),null,16,["size","class"])):k("",!0)]),a(z)(e,a(t).labelKey)||n.default?(c(),B("span",{key:0,"data-slot":"label",class:x(l.value.label({class:[a(t).ui?.label,e.ui?.label]}))},[h(f.$slots,"default",{item:e,index:m},()=>[R(K(a(z)(e,a(t).labelKey)),1)])],2)):k("",!0),h(f.$slots,"trailing",{item:e,index:m,ui:l.value},()=>[e.badge||e.badge===0?(c(),y(ua,T({key:0,color:"neutral",variant:"outline",size:e.ui?.trailingBadgeSize||a(t).ui?.trailingBadgeSize||l.value.trailingBadgeSize()},{ref_for:!0},typeof e.badge=="string"||typeof e.badge=="number"?{label:e.badge}:e.badge,{"data-slot":"trailingBadge",class:l.value.trailingBadge({class:[a(t).ui?.trailingBadge,e.ui?.trailingBadge]})}),null,16,["size","class"])):k("",!0)])]),_:2},1032,["value","disabled","class"]))),128)),h(f.$slots,"list-trailing")]),_:3},8,["class"]),a(t).content?(c(!0),B($,{key:0},M(a(t).items,(e,m)=>(c(),y(a(ya),{key:a(z)(e,a(t).valueKey)??m,value:a(z)(e,a(t).valueKey)??String(m),"data-slot":"content",class:x(l.value.content({class:[a(t).ui?.content,e.ui?.content,e.class]}))},{default:g(()=>[h(f.$slots,e.slot||"content",{item:e,index:m,ui:l.value},()=>[R(K(e.content),1)])]),_:2},1032,["value","class"]))),128)):k("",!0)]),_:3},16,["model-value","default-value","orientation","activation-mode","class"]))}};export{Ca as _};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as a,o as t,c as n,t as o,a1 as s,i as c,al as l}from"./
|
|
1
|
+
import{d as a,o as t,c as n,t as o,a1 as s,i as c,al as l}from"./1QWBzxLM.js";const r=a({__name:"TagBadge",props:{text:{},color:{},variant:{}},setup(e){return(i,m)=>(t(),n("span",{class:c(["tag-badge inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium whitespace-nowrap",e.variant==="outline"?"tag-badge--outline":""]),style:s({"--tag-color":e.color})},o(e.text),7))}}),p=Object.assign(l(r,[["__scopeId","data-v-58fcc931"]]),{__name:"TagBadge"});export{p as _};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as Hs}from"./BuMX-4RF.js";import{_ as Qs}from"./OMI0cmZ0.js";import{q as Ie,B as Ft,d as ce,O as Wt,w as he,a as fe,b as e,o as t,e as h,f as n,h as o,j as Te,c as r,g as s,k as d,t as c,l as x,F as H,z as Y,i as se,_ as Le,H as Oe,x as ee,P as zt,Q as Dt,v as B,r as U,G as Xs,m as we,n as Bt,E as Et,I as Zt,J as Gs,u as Js,p as Ys,s as Ws,D as Jt,R as Zs,S as en}from"./1QWBzxLM.js";import{_ as tn}from"./Dpwj_1H5.js";import{_ as Ze,a as sn}from"./B82vqOZe.js";import{_ as Ue}from"./e-GZmCeP.js";import{_ as es}from"./B4lvHjBe.js";import{u as nn}from"./CZeKW-zP.js";import{u as xe}from"./CU_2YLhT.js";import{_ as an}from"./ChuJzPWz.js";import{_ as on,a as ln}from"./BS91Og__.js";import{_ as ts}from"./mi7tdFxN.js";import{_ as Fe}from"./AbnDY6Zr.js";import{u as rn,a as cn,i as un}from"./Bp31ZRcA.js";import{_ as dn}from"./DMqAUHFN.js";import{_ as mn}from"./BIlohx1E.js";import{_ as pn}from"./CapSEET7.js";import{_ as ss}from"./BrxUH8qL.js";import{b as We,s as gn,R as ns,d as as,f as os,t as ls,u as rs,_ as is,a as cs,c as Ut,e as fn,l as Yt}from"./CkhOMiiO.js";import{_ as je}from"./Dn_-RkxP.js";import{_ as _n}from"./DvSHenmZ.js";import{_ as us}from"./BnUQ3i5l.js";import{_ as vn}from"./Lz9MmwKY.js";import{_ as ds}from"./DxBrlj7b.js";import{_ as yn}from"./DvYU87_a.js";import{_ as hn}from"./Bc6Zr-Xn.js";import{_ as xn}from"./D_dhjJvR.js";import{_ as Be}from"./uspGXbik.js";import{_ as Pt}from"./bmAf49LT.js";import{_ as Ve}from"./BuXJR5tn.js";import{a as Nt,d as bn,c as kn,g as $n,j as N,t as Cn,e as ms,k as ut,p as Tn}from"./D4mPjHHR.js";import{_ as ps}from"./BFLa9ZEP.js";import{_ as pt}from"./DYdwHaco.js";import{_ as et}from"./Bx_lfKHl.js";import{_ as jn}from"./UAmyrRCI.js";import{_ as Sn}from"./BM5C-Oec.js";import{_ as wn}from"./DVo_e_uj.js";import{_ as Rn}from"./DURme_kn.js";import{_ as An}from"./D-F0Rhjj.js";import{_ as zn}from"./BQUhoGCh.js";import{M as Dn,D as Mt,_ as Mn,g as It}from"./Dx41arC8.js";import{_ as In}from"./DoDo3VF2.js";import{_ as Lt}from"./CtQMagSz.js";import{u as Un}from"./DamZHy5M.js";import{u as Fn}from"./_okd7MfH.js";import"./CiCUZGFZ.js";import"./CHz7LJIX.js";import"./DpM8IgHL.js";import"./Bl0xzETD.js";import"./BTGAvMoT.js";import"./DBXXb0w8.js";import"./Bp1WeQ0_.js";import"./D-c8ZSws.js";import"./VBTxfbqU.js";import"./BOA-I6S9.js";import"./DcOlL-oi.js";import"./B-1zt4pp.js";import"./B6j5Ornu.js";import"./D_ZAGxCQ.js";const Bn=["run.finished","run.failed","run.failed.default_branch","cluster.new","flakiness.spike","perf.regression","diagnosis.completed","auto_heal.pr_opened"],dt=new Map,mt=new Map;function En(A,T){const j=[{event:"run.failed",scenario:{title:`Test run failed — ${A}`,description:"3 of 12 tests failed on main — checkout › applies discount code +2 more",icon:"i-lucide-circle-x",color:"error"}},{event:"run.failed.default_branch",scenario:{title:`Test run failed on main — ${A}`,description:"2 of 12 tests failed · main — auth › logs in with valid credentials +1 more",icon:"i-lucide-circle-x",color:"error"}},{event:"cluster.new",scenario:{title:`New failure cluster — ${A}`,description:"TimeoutError: locator.click: Timeout 30000ms exceeded",icon:"i-lucide-layers",color:"warning"}},{event:"flakiness.spike",scenario:{title:`Flakiness spike — ${A}`,description:"3 tests became flaky (8.3% rate)",icon:"i-lucide-shuffle",color:"warning"}},{event:"perf.regression",scenario:{title:`Performance regression — ${A}`,description:"p90 duration increased by 42% vs last week",icon:"i-lucide-trending-down",color:"warning"}},{event:"run.finished",scenario:{title:`Test run recovered — ${A}`,description:"All 12 tests passed on main",icon:"i-lucide-circle-check",color:"success"}},{event:"diagnosis.completed",scenario:{title:`Diagnosis complete — ${A}`,description:"Root cause: test bug — confidence: high",icon:"i-lucide-sparkles",color:"info"}}],k=j.filter(g=>T.length===0||T.includes(g.event)).map(g=>g.scenario);return k.length===0?[j[0].scenario,j[j.length-1].scenario]:k}function Pn(){if(!Ft().public.demoMode)return null;const T=Ie();function j(g,_,u){k(g);const z=En(_,u);mt.set(g,0);function L(){const D=(mt.get(g)??0)%z.length;mt.set(g,D+1);const b=z[D];T.add({title:b.title,description:b.description,icon:b.icon,color:b.color,duration:7e3});const R=25e3+Math.random()*1e4;dt.set(g,setTimeout(L,R))}dt.set(g,setTimeout(L,8e3))}function k(g){const _=dt.get(g);_!==void 0&&(clearTimeout(_),dt.delete(g)),mt.delete(g)}return{scheduleFor:j,cancelFor:k}}const Nn={key:0,class:"p-3 space-y-3"},Ln={key:0,class:"text-xs text-gray-500"},On={key:1,class:"text-xs text-gray-500"},Vn={key:2,class:"text-xs text-gray-500"},Kn={class:"space-y-1"},qn=["checked","onChange"],Hn={class:"flex items-center justify-between"},Qn={class:"font-medium text-sm inline-flex items-center gap-1"},Xn={key:0,class:"text-xs text-muted bg-primary/5 rounded px-2 py-1.5"},Gn={key:1,class:"text-xs text-muted text-center py-2"},Jn={key:2,class:"space-y-1.5"},Yn={key:0,class:"space-y-2 rounded border border-primary/30 bg-primary/5 px-2 py-2"},Wn={class:"space-y-1"},Zn=["value"],ea={class:"flex gap-1.5 justify-end"},ta={class:"flex-1 font-medium truncate"},sa={key:0,class:"text-primary"},na={key:3,class:"text-xs text-muted text-center py-1"},aa={key:4,class:"space-y-2 border-t border-default pt-2"},oa={class:"space-y-1"},la=["value"],ra={key:0,class:"flex items-center gap-1.5 text-xs cursor-pointer",title:"Deliver to this channel for everyone, not tied to your account"},ia={class:"flex gap-1.5 justify-end"},ca=ce({__name:"SubscribeBell",props:{projectId:{},projectLabel:{}},async setup(A){let T,j;const k=A,g=Ft(),_=g.public.demoMode,u=B(()=>g.public.authEnabled),{authState:z,canSeeAdmin:L}=Wt(),D=B(()=>z.value.authenticated),b=Ie(),R=U(!1),S=_?Pn():null,I=!u.value&&!_?nn():null,m=U("default"),f=B(()=>"Notification"in window);"Notification"in window&&(m.value=Notification.permission);const v=B(()=>I?.getProject(k.projectId).events??[]),y=B(()=>I?.isSubscribed(k.projectId)??!1);async function w(){!f.value||m.value!=="default"||(m.value=await Notification.requestPermission())}function M(V){return v.value.includes(V)}function P(V){I?.toggleEvent(k.projectId,V)}const O=_||!u.value||D.value,$=_?{server:!1}:{},{data:X,refresh:C}=([T,j]=he(()=>xe(`/api/subscriptions?projectId=${k.projectId}`,{immediate:O,...$},"$APDuK86tlj")),T=await T,j(),T),G=B(()=>X.value?.items??[]),J=B(()=>G.value.length>0),{data:q}=([T,j]=he(()=>xe("/api/channels",{immediate:O,...$},"$uK3f0xlELn")),T=await T,j(),T),p=B(()=>q.value?.items??[]),K=U(!1),ue=U(void 0),_e=U(["run.failed"]),be=U(!1),Ke=U(!1),tt=B(()=>p.value.find(V=>V.id===ue.value)),qe=B(()=>u.value&&L.value&&tt.value?.userId===null);function gt(V){return V.userId===null?L.value:!0}const ke=U(null),$e=U(void 0),W=U([]),He=U(!1);function ft(V){ke.value=V,$e.value=V.channel.id,W.value=[...V.events]}function Qe(){ke.value=null}async function _t(){if(!(!ke.value||!$e.value||W.value.length===0)){He.value=!0;try{await $fetch(`/api/subscriptions/${ke.value.id}`,{method:"PATCH",body:{channelId:$e.value,events:W.value}}),await C(),ke.value=null}catch(V){b.add({title:"Update failed",description:String(V?.message??V),color:"error"})}finally{He.value=!1}}}const ne=B(()=>p.value.map(V=>({label:V.type==="personal_email"?`${V.name} (${V.config.address})`:V.name,value:V.id}))),ve=Bn.map(V=>({label:V==="auto_heal.pr_opened"?"Auto-heal › PR opened":V.replace(/\./g," › "),value:V}));fe(R,V=>{V?(O&&C(),p.value.length>0&&!ue.value&&(ue.value=p.value[0].id)):(K.value=!1,ke.value=null)});async function Xe(){if(!(!ue.value||_e.value.length===0)){Ke.value=!0;try{await $fetch("/api/subscriptions",{method:"POST",body:{channelId:ue.value,projectId:k.projectId,events:_e.value,mode:"realtime",...qe.value&&be.value?{global:!0}:{}}}),await C(),K.value=!1,be.value=!1,b.add({title:"Subscribed",color:"success"}),_&&S?.scheduleFor(k.projectId,k.projectLabel||"this project",_e.value)}catch(V){b.add({title:"Subscribe failed",description:String(V?.message??V),color:"error"})}finally{Ke.value=!1}}}async function vt(V){try{await $fetch(`/api/subscriptions/${V}`,{method:"DELETE"}),await C(),b.add({title:"Unsubscribed",color:"success"}),_&&G.value.length===0&&S?.cancelFor(k.projectId)}catch(F){b.add({title:"Failed",description:String(F?.message??F),color:"error"})}}async function yt(V){const F=V.mutedUntil&&new Date(V.mutedUntil)>new Date;try{await $fetch(`/api/subscriptions/${V.id}`,{method:"PATCH",body:{mutedUntil:F?null:new Date(Date.now()+10080*60*1e3).toISOString()}}),await C()}catch(ae){b.add({title:"Failed",description:String(ae?.message??ae),color:"error"})}}function me(V){return V.mutedUntil&&new Date(V.mutedUntil)>new Date}function pe(V){return V==="personal_email"?"i-lucide-user-round":V==="email"?"i-lucide-mail":V==="slack"?"i-lucide-slack":"i-lucide-webhook"}const st=B(()=>_||u.value&&D.value||I!=null),Ee=B(()=>_||u.value?J.value:y.value||J.value);return(V,F)=>{const ae=Te,ht=tn,xt=Ze,nt=Le,Re=Oe,at=Ue,Ae=es,Ge=Xs;return e(st)?(t(),h(Ge,{key:0,open:e(R),"onUpdate:open":F[7]||(F[7]=Q=>ee(R)?R.value=Q:null),ui:{content:"w-72"}},{content:n(()=>[e(I)?(t(),r("div",Nn,[F[10]||(F[10]=s("div",{class:"flex items-center justify-between"},[s("span",{class:"font-medium text-sm"},"Browser notifications")],-1)),e(f)&&e(m)==="default"?(t(),r("p",Ln,[o(ae,{variant:"link",size:"xs",class:"p-0",onClick:w},{default:n(()=>[...F[8]||(F[8]=[d(" Allow notifications ",-1)])]),_:1}),F[9]||(F[9]=d(" "+c(" ")+"in your browser to get alerts for this project. ",-1))])):e(f)&&e(m)==="denied"?(t(),r("p",On," Notifications are blocked. Check your browser settings to allow them. ")):e(f)?x("",!0):(t(),r("p",Vn,"Notifications are not supported in this browser.")),e(f)&&e(m)==="granted"?(t(),r(H,{key:3},[o(ht),s("div",Kn,[(t(!0),r(H,null,Y(e(ve),Q=>(t(),r("label",{key:Q.value,class:"flex items-center gap-1.5 text-xs cursor-pointer"},[s("input",{type:"checkbox",checked:M(Q.value),class:"accent-primary size-3",onChange:de=>P(Q.value)},null,40,qn),d(" "+c(Q.label),1)]))),128))])],64)):x("",!0)])):x("",!0),e(O)?(t(),r("div",{key:1,class:se(["p-3 space-y-3",e(I)?"border-t border-default":""])},[s("div",Hn,[s("span",Qn,[d(c(e(I)?"Channel subscriptions":"Notifications")+" ",1),o(xt,{topic:"notifications.subscribe"})]),e(K)?x("",!0):(t(),h(ae,{key:0,size:"xs",icon:"i-lucide-plus",variant:"ghost",color:"neutral",disabled:e(p).length===0,onClick:F[0]||(F[0]=Q=>K.value=!0)},{default:n(()=>[...F[11]||(F[11]=[d(" Add ",-1)])]),_:1},8,["disabled"]))]),e(_)?(t(),r("div",Xn,[o(nt,{name:"i-lucide-sparkles",class:"size-3 inline-block mr-1 text-primary"}),F[12]||(F[12]=d(" Demo — notifications will appear as toasts in ~8 s. ",-1))])):e(p).length===0?(t(),r("div",Gn,[F[14]||(F[14]=d(" No channels configured.",-1)),F[15]||(F[15]=s("br",null,null,-1)),o(Re,{to:"/settings/notifications",class:"text-primary underline"},{default:n(()=>[...F[13]||(F[13]=[d("Add one in Settings",-1)])]),_:1})])):x("",!0),e(G).length>0?(t(),r("div",Jn,[(t(!0),r(H,null,Y(e(G),Q=>(t(),r(H,{key:Q.id},[e(ke)?.id===Q.id?(t(),r("div",Yn,[o(Ae,{label:"Channel",size:"xs"},{default:n(()=>[o(at,{modelValue:e($e),"onUpdate:modelValue":F[1]||(F[1]=de=>ee($e)?$e.value=de:null),items:e(ne),"value-key":"value",class:"w-full text-xs",size:"xs"},null,8,["modelValue","items"])]),_:1}),o(Ae,{label:"Events",size:"xs"},{default:n(()=>[s("div",Wn,[(t(!0),r(H,null,Y(e(ve),de=>(t(),r("label",{key:de.value,class:"flex items-center gap-1.5 text-xs cursor-pointer"},[zt(s("input",{type:"checkbox",value:de.value,"onUpdate:modelValue":F[2]||(F[2]=bt=>ee(W)?W.value=bt:null),class:"accent-primary size-3"},null,8,Zn),[[Dt,e(W)]]),d(" "+c(de.label),1)]))),128))])]),_:1}),s("div",ea,[o(ae,{size:"xs",color:"neutral",variant:"ghost",onClick:Qe},{default:n(()=>[...F[16]||(F[16]=[d("Cancel",-1)])]),_:1}),o(ae,{size:"xs",color:"primary",loading:e(He),disabled:!e($e)||e(W).length===0,onClick:_t},{default:n(()=>[...F[17]||(F[17]=[d(" Save ",-1)])]),_:1},8,["loading","disabled"])])])):(t(),r("div",{key:1,class:se(["flex items-center gap-2 rounded px-2 py-1.5 text-xs",me(Q)?"opacity-60":""])},[o(nt,{name:pe(Q.channel.type),class:"size-3.5 text-muted shrink-0"},null,8,["name"]),s("span",ta,[d(c(Q.channel.name)+" ",1),Q.userId===null&&e(u)?(t(),r("span",sa,"(global)")):x("",!0)]),gt(Q)?(t(),r(H,{key:0},[o(ae,{icon:"i-lucide-pencil",color:"neutral",variant:"ghost",size:"xs",title:"Edit subscription",onClick:de=>ft(Q)},null,8,["onClick"]),o(ae,{icon:me(Q)?"i-lucide-bell":"i-lucide-bell-off",color:"neutral",variant:"ghost",size:"xs",title:me(Q)?"Unmute":"Mute 7 days",onClick:de=>yt(Q)},null,8,["icon","title","onClick"]),o(ae,{icon:"i-lucide-x",color:"error",variant:"ghost",size:"xs",title:"Unsubscribe",onClick:de=>vt(Q.id)},null,8,["onClick"])],64)):x("",!0)],2))],64))),128))])):!e(K)&&e(p).length>0?(t(),r("div",na," Not subscribed to this project. ")):x("",!0),e(K)?(t(),r("div",aa,[o(Ae,{label:"Channel",size:"xs"},{default:n(()=>[o(at,{modelValue:e(ue),"onUpdate:modelValue":F[3]||(F[3]=Q=>ee(ue)?ue.value=Q:null),items:e(ne),"value-key":"value",class:"w-full text-xs",size:"xs"},null,8,["modelValue","items"])]),_:1}),o(Ae,{label:"Events",size:"xs"},{default:n(()=>[s("div",oa,[(t(!0),r(H,null,Y(e(ve),Q=>(t(),r("label",{key:Q.value,class:"flex items-center gap-1.5 text-xs cursor-pointer"},[zt(s("input",{type:"checkbox",value:Q.value,"onUpdate:modelValue":F[4]||(F[4]=de=>ee(_e)?_e.value=de:null),class:"accent-primary size-3"},null,8,la),[[Dt,e(_e)]]),d(" "+c(Q.label),1)]))),128))])]),_:1}),e(qe)?(t(),r("label",ra,[zt(s("input",{type:"checkbox","onUpdate:modelValue":F[5]||(F[5]=Q=>ee(be)?be.value=Q:null),class:"accent-primary size-3"},null,512),[[Dt,e(be)]]),F[18]||(F[18]=d(" Instance-wide (global) ",-1))])):x("",!0),s("div",ia,[o(ae,{size:"xs",color:"neutral",variant:"ghost",onClick:F[6]||(F[6]=Q=>K.value=!1)},{default:n(()=>[...F[19]||(F[19]=[d("Cancel",-1)])]),_:1}),o(ae,{size:"xs",color:"primary",loading:e(Ke),disabled:!e(ue)||e(_e).length===0,onClick:Xe},{default:n(()=>[...F[20]||(F[20]=[d(" Subscribe ",-1)])]),_:1},8,["loading","disabled"])])])):x("",!0)],2)):x("",!0)]),default:n(()=>[o(ae,{icon:e(Ee)?"i-lucide-bell-ring":"i-lucide-bell",size:"sm",color:e(Ee)?"primary":"neutral",variant:e(Ee)?"soft":"outline",title:"Notification subscriptions for this project"},null,8,["icon","color","variant"])]),_:1},8,["open"])):x("",!0)}}}),ua=Object.assign(ca,{__name:"SubscribeBell"}),da={class:"flex flex-wrap items-center justify-between gap-3"},ma={class:"flex items-center gap-2 min-w-0 text-sm"},pa={class:"text-xs break-all"},ga={key:1,class:"text-muted"},fa=ce({__name:"DesktopProjectLinkCard",props:{projectId:{}},setup(A){const T=A,{available:j,link:k}=rn(()=>T.projectId),g=U(null);fe(()=>k.value?.path,async u=>{g.value=u&&k.value?.exists?await cn(u):null},{immediate:!0});const _=B(()=>un(g.value));return(u,z)=>{const L=Le,D=we,b=Te,R=Fe;return e(j)?(t(),h(R,{key:0,class:"shrink-0",ui:{body:"p-3 sm:p-3"}},{default:n(()=>[s("div",da,[s("div",ma,[o(L,{name:e(k)?e(k).exists?"i-lucide-folder-check":"i-lucide-folder-x":"i-lucide-folder-symlink",class:se(["size-4 shrink-0",e(k)?e(k).exists?"text-success":"text-warning":"text-muted"])},null,8,["name","class"]),e(k)?(t(),r(H,{key:0},[s("code",pa,c(e(k).path),1),e(k).exists?e(_)?(t(),h(D,{key:1,color:"success",variant:"subtle",size:"sm"},{default:n(()=>[...z[1]||(z[1]=[d("ready",-1)])]),_:1})):e(g)?(t(),h(D,{key:2,color:"warning",variant:"subtle",size:"sm"},{default:n(()=>[...z[2]||(z[2]=[d("needs setup",-1)])]),_:1})):x("",!0):(t(),h(D,{key:0,color:"warning",variant:"subtle",size:"sm"},{default:n(()=>[...z[0]||(z[0]=[d("missing",-1)])]),_:1}))],64)):(t(),r("span",ga," No local folder linked — link this project’s checkout to run tests from here and open files in your IDE. "))]),o(b,{size:"xs",color:"neutral",variant:"soft",icon:e(k)?"i-lucide-settings-2":"i-lucide-folder-plus",to:`/projects/${A.projectId}/edit#local-folder`,title:e(k)?"Manage the linked folder in project settings":"Link a folder in project settings"},{default:n(()=>[d(c(e(k)?"Manage":"Link folder"),1)]),_:1},8,["icon","to","title"])])]),_:1})):x("",!0)}}}),_a=Object.assign(fa,{__name:"DesktopProjectLinkCard"}),va={class:"w-full"},ya=["x","y","width","height","fill"],ha=["x","y"],xa=["x","width","height","fill","onClick","onMouseenter"],ba={class:"font-semibold mb-1"},ka={class:"capitalize mb-1"},$a={class:"space-y-0.5"},Ca={class:"font-medium mt-1"},Ta=ce({__name:"TestRunsChart",props:{testRuns:{},height:{default:150},markers:{default:()=>[]}},emits:["marker-click"],setup(A,{emit:T}){const j=A,k=T,g=B(()=>!j.testRuns||j.testRuns.length===0?[]:[...j.testRuns].sort((v,y)=>new Date(v.startTime).getTime()-new Date(y.startTime).getTime()).slice(-30).map(v=>{const y=v.flakyTests||0,w=v.passedTests||0;return{id:v.id,date:new Date(v.startTime),passed:Math.max(0,w-y),failed:v.failedTests||0,skipped:v.skippedTests||0,flaky:y,total:v.totalTests||0,status:v.status}})),_=B(()=>Math.max(1,...g.value.map(f=>f.passed+f.failed+f.skipped+f.flaky))),u=B(()=>g.value.map(f=>f.date));function z(f,v,y){const w=We(g.value.length,f);return g.value.map((M,P)=>({d:M,slotX:P*w.slotWidth,slotWidth:w.slotWidth,barX:w.xOf(P),barWidth:w.barWidth,segments:gn(ns.map(O=>({color:O.color,value:M[O.key]})),v,y)}))}function L(f){const{centerOf:v}=We(g.value.length,f);return as(u.value,Math.max(2,Math.floor(f/80))).map(y=>({x:v(y),label:os(u.value[y])}))}function D(f,v){const{centerOf:y}=We(g.value.length,f),w=g.value.map((M,P)=>y(P));return ls(u.value,w,new Date(v).getTime())}const{data:b,pos:R,show:S,move:I,hide:m}=rs();return(f,v)=>{const y=ss,w=is,M=je,P=cs;return t(),r("div",va,[e(g).length>0?(t(),h(w,{key:0,height:A.height,"y-max":e(_)},{default:n(({plotWidth:O,plotHeight:$,yScale:X})=>[(t(!0),r(H,null,Y(z(O,$,X),C=>(t(),r(H,{key:C.d.id},[(t(!0),r(H,null,Y(C.segments,G=>(t(),r("rect",{key:G.color,x:C.barX,y:G.y,width:C.barWidth,height:G.height,fill:G.color},null,8,ya))),128))],64))),128)),(t(!0),r(H,null,Y(L(O),C=>(t(),r("text",{key:C.x,x:C.x,y:$+14,"text-anchor":"middle",class:"fill-gray-400 dark:fill-gray-500 text-[10px]"},c(C.label),9,ha))),128)),(t(!0),r(H,null,Y(z(O,$,X),C=>(t(),r("rect",{key:`hover-${C.d.id}`,x:C.slotX,y:0,width:C.slotWidth,height:$,fill:e(b)?.id===C.d.id?"rgb(148 163 184 / 0.15)":"transparent",class:"cursor-pointer",onClick:G=>("navigateTo"in f?f.navigateTo:e(Bt))(`/test-runs/${C.d.id}`),onMouseenter:G=>e(S)(G,C.d),onMousemove:v[0]||(v[0]=G=>e(I)(G)),onMouseleave:v[1]||(v[1]=G=>e(m)())},null,40,xa))),128)),o(y,{markers:A.markers,"x-of":C=>D(O,C),"plot-height":$,onMarkerClick:v[2]||(v[2]=C=>k("marker-click",C))},null,8,["markers","x-of","plot-height"])]),_:1},8,["height","y-max"])):(t(),h(M,{key:1,text:"No test run data available to display chart"})),e(b)?(t(),h(P,{key:2,pos:e(R)},{default:n(()=>[s("div",ba,c(e(b).date.toLocaleDateString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})),1),s("div",ka,"Status: "+c(e(b).status),1),s("div",$a,[s("div",null,[v[3]||(v[3]=s("span",{class:"text-red-500 dark:text-red-400"},"●",-1)),d(" Failed: "+c(e(b).failed),1)]),s("div",null,[v[4]||(v[4]=s("span",{class:"text-purple-500 dark:text-purple-400"},"●",-1)),d(" Flaky: "+c(e(b).flaky),1)]),s("div",null,[v[5]||(v[5]=s("span",{class:"text-orange-500 dark:text-orange-400"},"●",-1)),d(" Skipped: "+c(e(b).skipped),1)]),s("div",null,[v[6]||(v[6]=s("span",{class:"text-green-500 dark:text-green-400"},"●",-1)),d(" Passed: "+c(e(b).passed),1)]),s("div",Ca,"Total: "+c(e(b).total),1)]),v[7]||(v[7]=s("div",{class:"text-gray-400 dark:text-gray-500 text-xs mt-1"},"Click to view run details",-1))]),_:1},8,["pos"])):x("",!0)])}}}),ja=Object.assign(Ta,{__name:"TestRunsChart"}),Sa={class:"space-y-3"},wa={class:"min-w-0 space-y-1"},Ra={class:"flex items-center gap-2 flex-wrap text-sm"},Aa={key:0,class:"text-gray-500"},za=["title"],Da=["title"],Ma={key:0,class:"text-xs text-gray-500 italic"},Ia={class:"flex items-center gap-2 shrink-0"},Ua=ce({__name:"ClusterMergeSuggestions",props:{projectId:{}},emits:["merged"],setup(A,{emit:T}){const j=A,k=T,g=Ie(),_=U([]),u=U(null);async function z(){try{_.value=(await $fetch(`/api/projects/${j.projectId}/cluster-merge-suggestions`)).items}catch{_.value=[]}}fe(()=>j.projectId,z,{immediate:!0});async function L(b,R){u.value=b;try{await $fetch(`/api/cluster-merge-suggestions/${b}/${R}`,{method:"POST"}),g.add({title:R==="approve"?"Clusters merged":"Suggestion dismissed",color:"success"}),await z(),R==="approve"&&k("merged")}catch(S){g.add({title:"Action failed",description:String(S?.message??S),color:"error"})}finally{u.value=null}}const D=b=>b==null?"":`${Math.round(b*100)}% similar`;return(b,R)=>{const S=we,I=Te,m=Pt;return e(_).length?(t(),h(m,{key:0,icon:"i-lucide-git-merge",title:"Suggested merges",count:e(_).length,class:"mb-4"},{subtitle:n(()=>[...R[0]||(R[0]=[d(" Likely-duplicate clusters found by semantic analysis. Approving merges them into the older cluster. ",-1)])]),default:n(()=>[s("div",Sa,[(t(!0),r(H,null,Y(e(_),f=>(t(),r("div",{key:f.id,class:"rounded-lg border border-default p-3 flex items-start justify-between gap-4"},[s("div",wa,[s("div",Ra,[o(S,{color:f.method==="llm"?"primary":"neutral",variant:"subtle",size:"sm"},{default:n(()=>[d(c(f.method==="llm"?`AI · ${f.llmConfidence??""}`:"similarity"),1)]),_:2},1032,["color"]),D(f.score)?(t(),r("span",Aa,c(D(f.score)),1)):x("",!0)]),s("p",{class:"text-sm truncate",title:f.clusterA?.signature||""},[R[1]||(R[1]=s("span",{class:"text-gray-400"},"A:",-1)),d(" "+c(f.clusterA?.signature||`#${f.id}`),1)],8,za),s("p",{class:"text-sm truncate",title:f.clusterB?.signature||""},[R[2]||(R[2]=s("span",{class:"text-gray-400"},"B:",-1)),d(" "+c(f.clusterB?.signature||""),1)],8,Da),f.llmReason?(t(),r("p",Ma,c(f.llmReason),1)):x("",!0)]),s("div",Ia,[o(I,{size:"sm",color:"primary",icon:"i-lucide-git-merge",loading:e(u)===f.id,onClick:v=>L(f.id,"approve")},{default:n(()=>[...R[3]||(R[3]=[d(" Merge ",-1)])]),_:1},8,["loading","onClick"]),o(I,{size:"sm",color:"neutral",variant:"ghost",icon:"i-lucide-x",disabled:e(u)===f.id,onClick:v=>L(f.id,"reject")},{default:n(()=>[...R[4]||(R[4]=[d(" Dismiss ",-1)])]),_:1},8,["disabled","onClick"])])]))),128))])]),_:1},8,["count"])):x("",!0)}}}),Fa=Object.assign(Ua,{__name:"ClusterMergeSuggestions"}),Ba={class:"flex items-center justify-between"},Ea={class:"text-sm text-gray-500 inline-flex items-center gap-1"},Pa={class:"min-w-0 space-y-0.5"},Na={key:0,class:"text-xs text-gray-500 italic truncate"},La={key:1,class:"text-gray-400 text-xs"},Oa={class:"space-y-1"},Va={class:"text-sm tabular-nums"},Ka={class:"text-sm tabular-nums"},qa={key:1,class:"text-gray-400 text-xs"},Ha={class:"text-sm text-gray-500 whitespace-nowrap"},Qa={key:0,class:"ml-1 text-xs text-gray-400"},Xa={class:"flex justify-end"},Ga=ce({__name:"FailureClustersList",props:{projectId:{}},async setup(A){let T,j;const k=A,g=U(void 0),{data:_,pending:u}=([T,j]=he(()=>xe(()=>{const D=new URLSearchParams;g.value&&D.set("status",g.value);const b=D.toString();return`/api/projects/${k.projectId}/failure-clusters${b?`?${b}`:""}`},{lazy:!0,server:!1,watch:[g],transform:D=>D.items},"$fqv4nq7Mtw")),T=await T,j(),T),z=D=>$n(D.fixVerification),L=[{accessorKey:"signature",header:N("Signature")},{accessorKey:"errorType",header:N("Type")},{accessorKey:"status",header:N("Status")},{accessorKey:"affectedTests",header:N("Tests")},{accessorKey:"occurrences",header:N("Occurrences")},{accessorKey:"diagnosis",header:"AI"},{accessorKey:"lastSeenAt",header:N("Last seen")},{id:"actions",header:"Actions"}];return(D,b)=>{const R=Ze,S=Ue,I=Oe,m=we,f=Le,v=us,y=Te,w=Be,M=Ve,P=je,O=Fe;return t(),h(O,{"data-shot":"failure-clusters"},{header:n(()=>[s("div",Ba,[s("p",Ea,[b[1]||(b[1]=d(" Ongoing failure signatures grouped by normalized error. ",-1)),o(R,{topic:"cluster.concept"})]),o(S,{modelValue:e(g),"onUpdate:modelValue":b[0]||(b[0]=$=>ee(g)?g.value=$:null),items:[{label:"All",value:void 0},{label:"Open",value:"open"},{label:"Resolved",value:"resolved"},{label:"Ignored",value:"ignored"}],size:"xs",class:"w-32"},null,8,["modelValue"])])]),default:n(()=>[o(M,{"min-width":"48rem",bleed:!1},{default:n(()=>[o(w,{data:e(_)??[],columns:L,loading:e(u)},{"actions-header":n(()=>[...b[2]||(b[2]=[s("div",{class:"text-right"},"Actions",-1)])]),"signature-cell":n(({row:$})=>[s("div",Pa,[o(I,{to:`/failure-clusters/${$.original.id}`,class:se(["text-sm text-primary hover:underline truncate block",$.original.title?"":"font-mono"]),title:$.original.signature},{default:n(()=>[d(c($.original.title||$.original.signature),1)]),_:2},1032,["to","class","title"]),$.original.triageNote?(t(),r("p",Na,c($.original.triageNote),1)):x("",!0)])]),"errorType-cell":n(({row:$})=>[$.original.errorType?(t(),h(m,{key:0,color:("clusterErrorTypeColor"in D?D.clusterErrorTypeColor:e(kn))($.original.errorType),variant:"subtle",size:"sm"},{default:n(()=>[d(c($.original.errorType),1)]),_:2},1032,["color"])):(t(),r("span",La,"—"))]),"status-cell":n(({row:$})=>[s("div",Oa,[o(m,{color:("clusterStatusColor"in D?D.clusterStatusColor:e(bn))($.original.status),variant:"subtle",size:"sm"},{default:n(()=>[d(c($.original.status),1)]),_:2},1032,["color"]),z($.original)?(t(),h(v,{key:0,text:z($.original).hint},{default:n(()=>[o(m,{color:z($.original).color,variant:"subtle",size:"sm",class:"gap-1"},{default:n(()=>[o(f,{name:z($.original).icon,class:"size-3"},null,8,["name"]),d(" "+c(z($.original).label),1)]),_:2},1032,["color"])]),_:2},1032,["text"])):x("",!0)])]),"affectedTests-cell":n(({row:$})=>[s("span",Va,c($.original.affectedTests),1)]),"occurrences-cell":n(({row:$})=>[s("span",Ka,c($.original.occurrences),1)]),"diagnosis-cell":n(({row:$})=>[$.original.diagnosis?.status==="completed"&&$.original.diagnosis.category?(t(),h(m,{key:0,color:"neutral",variant:"subtle",size:"sm",class:"gap-1"},{default:n(()=>[o(f,{name:"i-lucide-sparkles",class:"size-3"}),d(" "+c($.original.diagnosis.category),1)]),_:2},1024)):(t(),r("span",qa,"—"))]),"lastSeenAt-cell":n(({row:$})=>[s("div",Ha,[o(I,{to:`/test-runs/${$.original.lastSeenRunId}`,class:"text-primary hover:underline"},{default:n(()=>[d(" run #"+c($.original.lastSeenRunId),1)]),_:2},1032,["to"]),$.original.lastSeenAt?(t(),r("span",Qa," ("+c(("formatRelativeTime"in D?D.formatRelativeTime:e(Nt))($.original.lastSeenAt))+") ",1)):x("",!0)])]),"actions-cell":n(({row:$})=>[s("div",Xa,[o(y,{to:`/failure-clusters/${$.original.id}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:n(()=>[...b[3]||(b[3]=[d(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data","loading"])]),_:1}),!e(u)&&e(_)&&e(_).length===0?(t(),h(P,{key:0,text:"No failure clusters recorded for this project.",padded:!1,class:"py-4"})):x("",!0)]),_:1})}}}),Ja=Object.assign(Ga,{__name:"FailureClustersList"}),Ya={class:"flex items-center justify-between"},Wa={class:"flex items-center gap-3"},Za={class:"text-sm text-gray-500 inline-flex items-center gap-1"},eo={class:"flex items-center gap-1.5"},to={class:"min-w-0 space-y-0.5"},so={class:"flex items-center gap-2"},no={class:"text-sm tabular-nums"},ao={class:"text-sm tabular-nums"},oo={key:1,class:"text-gray-400 text-xs"},lo={key:1,class:"text-gray-400 text-xs"},ro={key:1,class:"text-gray-400 text-xs"},io={key:0,class:"text-sm text-gray-500"},co={key:1,class:"text-gray-400 text-xs"},uo={class:"flex justify-end"},mo={key:0,class:"text-sm text-gray-500 py-4 text-center"},po=ce({__name:"FlakyTestsList",props:{projectId:{},environment:{},branch:{},projectName:{}},async setup(A){let T,j;const k=A,g=U(50),_=U([]),{data:u,pending:z}=([T,j]=he(()=>xe(()=>{const m=new URLSearchParams({runs:String(g.value)});return k.environment&&m.set("environment",k.environment),k.branch&&m.set("branch",k.branch),`/api/projects/${k.projectId}/flaky-tests?${m.toString()}`},{lazy:!0,server:!1,watch:[g,()=>k.environment,()=>k.branch],transform:m=>m.items},"$BbmtLKIPAB")),T=await T,j(),T),L=B(()=>_.value.length===0?u.value??[]:(u.value??[]).filter(m=>_.value.includes(m.rootCause??"")));function D(m){return m>=60?"error":m>=30?"warning":"neutral"}function b(m){switch(m){case"timing":return"amber";case"network":return"red";case"assertion":return"blue";case"environment":return"purple";default:return"gray"}}function R(m){_.value.indexOf(m)>=0?_.value=_.value.filter(v=>v!==m):_.value=[..._.value,m]}const S=[{label:"Timing",value:"timing"},{label:"Network",value:"network"},{label:"Assertion",value:"assertion"},{label:"Environment",value:"environment"},{label:"Other",value:"other"}],I=[{accessorKey:"title",header:N("Test")},{accessorKey:"impact",header:N("Impact")},{accessorKey:"score",header:N("Score")},{accessorKey:"failureRate",header:N("Failure rate")},{accessorKey:"retryPassRuns",header:N("Retry passes")},{accessorKey:"alternations",header:N("Flips")},{accessorKey:"rootCause",header:"Root cause"},{accessorKey:"lastFlakeAt",header:N("Last flake")},{id:"actions",header:"Actions"}];return(m,f)=>{const v=Ze,y=Le,w=we,M=Te,P=Ue,O=Oe,$=ps,X=pt,C=ts,G=Be,J=Ve,q=Fe;return t(),h(q,{"data-shot":"flaky-table"},{header:n(()=>[s("div",Ya,[s("div",Wa,[s("p",Za,[f[1]||(f[1]=d(" Tests that fail intermittently — detected by retry passes and status alternations ",-1)),o(v,{topic:"project.flaky-tests"})]),A.environment?(t(),h(w,{key:0,color:"neutral",variant:"subtle",size:"sm",class:"gap-1"},{default:n(()=>[o(y,{name:"i-lucide-layers",class:"size-3"}),d(" "+c(A.environment),1)]),_:1})):x("",!0),s("div",eo,[(t(),r(H,null,Y(S,p=>o(M,{key:p.value,size:"xs",variant:e(_).includes(p.value)?"solid":"outline",color:(e(_).includes(p.value),"neutral"),onClick:K=>R(p.value)},{default:n(()=>[d(c(p.label),1)]),_:2},1032,["variant","color","onClick"])),64))])]),o(P,{modelValue:e(g),"onUpdate:modelValue":f[0]||(f[0]=p=>ee(g)?g.value=p:null),items:[{label:"Last 20 runs",value:20},{label:"Last 50 runs",value:50},{label:"Last 100 runs",value:100}],size:"xs",class:"w-36"},null,8,["modelValue"])])]),default:n(()=>[o(J,{"min-width":"52rem",bleed:!1},{default:n(()=>[o(G,{data:e(L),columns:I,loading:e(z),sticky:"",class:"max-h-[32rem]"},{"actions-header":n(()=>[...f[2]||(f[2]=[s("div",{class:"text-right"},"Actions",-1)])]),"title-cell":n(({row:p})=>[s("div",to,[o(O,{to:`/test-run-cases/${p.original.latestRunsCaseId}`,class:"text-sm font-medium text-primary hover:underline truncate block",title:p.original.title},{default:n(()=>[d(c(p.original.title),1)]),_:2},1032,["to","title"]),o($,{tags:p.original.tags,meta:{owner:p.original.owner??void 0,priority:("toTestPriority"in m?m.toTestPriority:e(Cn))(p.original.priority)},"max-tags":3},null,8,["tags","meta"]),o(X,{"file-path":p.original.filePath,"project-key":A.projectId,"project-name":A.projectName,class:"text-xs text-gray-400"},null,8,["file-path","project-key","project-name"])])]),"impact-cell":n(({row:p})=>[s("div",so,[s("span",{class:se(["inline-block w-2 h-2 rounded-full shrink-0",{"bg-red-500":p.original.wastedCiMinutes>=30,"bg-amber-500":p.original.wastedCiMinutes>=5&&p.original.wastedCiMinutes<30,"bg-green-500":p.original.wastedCiMinutes>=0&&p.original.wastedCiMinutes<5}])},null,2),s("span",no,c(Math.round(p.original.wastedCiMinutes))+" min wasted",1)])]),"score-cell":n(({row:p})=>[o(w,{color:D(p.original.score),variant:"subtle",size:"sm"},{default:n(()=>[d(c(p.original.score),1)]),_:2},1032,["color"])]),"failureRate-cell":n(({row:p})=>[s("span",ao,c(Math.round(p.original.failureRate*100))+"%",1)]),"retryPassRuns-cell":n(({row:p})=>[p.original.retryPassRuns?(t(),h(w,{key:0,color:"warning",variant:"outline",size:"sm"},{default:n(()=>[d(c(p.original.retryPassRuns)+" run"+c(p.original.retryPassRuns===1?"":"s"),1)]),_:2},1024)):(t(),r("span",oo,"—"))]),"alternations-cell":n(({row:p})=>[p.original.alternations>=2?(t(),h(w,{key:0,color:"neutral",variant:"outline",size:"sm"},{default:n(()=>[d(c(p.original.alternations),1)]),_:2},1024)):(t(),r("span",lo,"—"))]),"rootCause-cell":n(({row:p})=>[p.original.rootCause?(t(),h(C,{key:0,text:p.original.rootCause,color:b(p.original.rootCause)},null,8,["text","color"])):(t(),r("span",ro,"—"))]),"lastFlakeAt-cell":n(({row:p})=>[p.original.lastFlakeAt?(t(),r("span",io,c(("formatRelativeTime"in m?m.formatRelativeTime:e(Nt))(p.original.lastFlakeAt)),1)):(t(),r("span",co,"—"))]),"actions-cell":n(({row:p})=>[s("div",uo,[o(M,{to:`/test-run-cases/${p.original.latestRunsCaseId}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:n(()=>[...f[3]||(f[3]=[d(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data","loading"])]),_:1}),!e(z)&&e(L).length===0?(t(),r("p",mo," No flaky tests detected in the last "+c(e(g))+" runs. ",1)):x("",!0)]),_:1})}}}),go=Object.assign(po,{__name:"FlakyTestsList"}),fo={class:"w-full"},_o=["d","stroke"],vo=["cx","cy","fill"],yo=["x","y"],ho=["x","width","height","fill","onClick","onMouseenter"],xo={class:"font-semibold mb-1"},bo={class:"capitalize mb-1"},ko={class:"space-y-0.5"},$o={class:"mt-1"},Co={key:0,class:"text-gray-400 dark:text-gray-500 text-xs"},To=ce({__name:"PerformanceTrendChart",props:{data:{},height:{default:260},markers:{default:()=>[]}},emits:["marker-click"],setup(A,{emit:T}){const j=A,k=T,g=B(()=>!j.data||j.data.length===0?[]:j.data.map(y=>({id:y.id,date:new Date(y.startTime),duration:y.duration?Math.round(y.duration/1e3):null,avgTestDuration:y.avgTestDuration?Math.round(y.avgTestDuration/1e3):null,p90TestDuration:y.p90TestDuration?Math.round(y.p90TestDuration/1e3):null,commit:y.commit?y.commit.substring(0,7):null,status:y.status,totalTests:y.totalTests}))),_=B(()=>Math.max(1,...g.value.flatMap(y=>Ut.map(w=>y[w.key]??0)))),u=B(()=>g.value.map(y=>y.date));function z(y){const{centerOf:w}=We(g.value.length,y);return g.value.map((M,P)=>w(P))}function L(y,w,M){const P=z(w);let O="",$=!1;return g.value.forEach((X,C)=>{const G=X[y];if(G==null){$=!1;return}O+=`${$?"L":"M"}${P[C]},${M(G)}`,$=!0}),O}function D(y,w,M){const P=z(w);return g.value.flatMap((O,$)=>{const X=O[y];return X==null?[]:[{id:O.id,x:P[$],y:M(X)}]})}function b(y){const{centerOf:w}=We(g.value.length,y);return as(u.value,Math.max(2,Math.floor(y/80))).map(M=>({x:w(M),label:os(u.value[M])}))}function R(y,w){return ls(u.value,z(y),new Date(w).getTime())}const{data:S,pos:I,show:m,move:f,hide:v}=rs();return(y,w)=>{const M=ss,P=is,O=je,$=cs;return t(),r("div",fo,[e(g).length>0?(t(),h(P,{key:0,height:A.height,"y-max":e(_),"y-format":X=>`${X}s`},{default:n(({plotWidth:X,plotHeight:C,yScale:G})=>[(t(!0),r(H,null,Y(e(Ut),J=>(t(),r(H,{key:J.key},[s("path",{d:L(J.key,X,G),fill:"none",stroke:J.color,"stroke-width":"2"},null,8,_o),(t(!0),r(H,null,Y(D(J.key,X,G),q=>(t(),r("circle",{key:q.id,cx:q.x,cy:q.y,r:"3",fill:J.color},null,8,vo))),128))],64))),128)),(t(!0),r(H,null,Y(b(X),J=>(t(),r("text",{key:J.x,x:J.x,y:C+14,"text-anchor":"middle",class:"fill-gray-400 dark:fill-gray-500 text-[10px]"},c(J.label),9,yo))),128)),(t(!0),r(H,null,Y(e(g),(J,q)=>(t(),r("rect",{key:`hover-${J.id}`,x:q*(X/e(g).length),y:0,width:X/e(g).length,height:C,fill:e(S)?.id===J.id?"rgb(148 163 184 / 0.15)":"transparent",class:"cursor-pointer",onClick:p=>("navigateTo"in y?y.navigateTo:e(Bt))(`/test-runs/${J.id}`),onMouseenter:p=>e(m)(p,J),onMousemove:w[0]||(w[0]=p=>e(f)(p)),onMouseleave:w[1]||(w[1]=p=>e(v)())},null,40,ho))),128)),o(M,{markers:A.markers,"x-of":J=>R(X,J),"plot-height":C,onMarkerClick:w[2]||(w[2]=J=>k("marker-click",J))},null,8,["markers","x-of","plot-height"])]),_:1},8,["height","y-max","y-format"])):(t(),h(O,{key:1,text:"No performance data available to display chart"})),e(S)?(t(),h($,{key:2,pos:e(I)},{default:n(()=>[s("div",xo,c(e(S).date.toLocaleDateString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})),1),s("div",bo,"Status: "+c(e(S).status),1),s("div",ko,[s("div",null,[w[3]||(w[3]=s("span",{class:"text-blue-500 dark:text-blue-400"},"●",-1)),d(" Total: "+c(e(S).duration??"-")+"s ",1)]),s("div",null,[w[4]||(w[4]=s("span",{class:"text-green-500 dark:text-green-400"},"●",-1)),d(" Avg: "+c(e(S).avgTestDuration??"-")+"s ",1)]),s("div",null,[w[5]||(w[5]=s("span",{class:"text-orange-500 dark:text-orange-400"},"●",-1)),d(" P90: "+c(e(S).p90TestDuration??"-")+"s ",1)]),s("div",$o,"Tests: "+c(e(S).totalTests),1),e(S).commit?(t(),r("div",Co," Commit: "+c(e(S).commit),1)):x("",!0)]),w[6]||(w[6]=s("div",{class:"text-gray-400 dark:text-gray-500 text-xs mt-1"},"Click to view run details",-1))]),_:1},8,["pos"])):x("",!0)])}}}),jo=Object.assign(To,{__name:"PerformanceTrendChart"}),So={class:"min-w-0"},wo={class:"mt-1"},Ro={class:"tabular-nums"},Ao={key:0,class:"ml-1 text-xs text-gray-500",title:"timeout ÷ p95"},zo={class:"tabular-nums text-gray-500"},Do={key:0,class:"text-sm"},Mo={key:1,class:"tabular-nums"},Io={class:"tabular-nums font-medium text-green-600 dark:text-green-400"},Uo={class:"tabular-nums text-gray-500"},Fo=ce({__name:"TimeoutOpportunitiesTable",props:{projectId:{},projectName:{}},async setup(A){let T,j;const k=A,{data:g,pending:_}=([T,j]=he(()=>xe(()=>`/api/projects/${k.projectId}/timeout-opportunities`,{lazy:!0,server:!1,transform:D=>D.items},"$zikJNhkkxJ")),T=await T,j(),T),u=B(()=>g.value??[]);function z(D){return D==null?"—":D<1e3?`${D}ms`:`${(D/1e3).toFixed(1)}s`}const L=[{accessorKey:"title",header:N("Test case")},{accessorKey:"kind",header:"Type"},{accessorKey:"timeout",header:N("Timeout")},{accessorKey:"p95",header:N("p95")},{accessorKey:"recommendedTimeout",header:"Recommendation"},{accessorKey:"estimatedSavingMs",header:N("Est. saving / failure")},{accessorKey:"runCount",header:N("Runs")}];return(D,b)=>{const R=et,S=je,I=Oe,m=pt,f=we,v=Be,y=Ve,w=Fe;return t(),h(w,null,{header:n(()=>[...b[0]||(b[0]=[s("h2",{class:"text-xl font-semibold"},"Timeout opportunities",-1),s("p",{class:"text-sm text-gray-600 mt-1"},[d(" Tests whose configured timeout far exceeds their real duration, or that still carry a stale "),s("code",{class:"text-xs"},"test.slow()"),d(" mark — tightening these makes failures surface sooner. ")],-1)])]),default:n(()=>[e(_)?(t(),h(R,{key:0})):e(u).length===0?(t(),h(S,{key:1,text:"No timeout opportunities",description:"No oversized timeouts or stale test.slow() marks were found for this project."})):(t(),h(y,{key:2,"min-width":"52rem",bleed:!1},{default:n(()=>[o(v,{data:e(u),columns:L,sticky:"",class:"max-h-[32rem]"},{"title-cell":n(({row:M})=>[s("div",So,[o(I,{to:`/test-cases/${M.original.testCaseId}`,class:"font-medium truncate block hover:text-primary hover:underline"},{default:n(()=>[d(c(M.original.title),1)]),_:2},1032,["to"]),s("div",wo,[o(m,{"file-path":M.original.filePath,"project-key":A.projectId,"project-name":A.projectName,class:"text-xs"},null,8,["file-path","project-key","project-name"])])])]),"kind-cell":n(({row:M})=>[o(f,{color:M.original.kind==="oversized-timeout"?"warning":"info",variant:"subtle",size:"sm"},{default:n(()=>[d(c(M.original.kind==="oversized-timeout"?"Oversized timeout":"Stale test.slow()"),1)]),_:2},1032,["color"])]),"timeout-cell":n(({row:M})=>[s("span",Ro,c(z(M.original.timeout)),1),M.original.headroomRatio!=null?(t(),r("span",Ao," ("+c(M.original.headroomRatio)+"×) ",1)):x("",!0)]),"p95-cell":n(({row:M})=>[s("span",zo,c(z(M.original.p95)),1)]),"recommendedTimeout-cell":n(({row:M})=>[M.original.kind==="stale-slow"?(t(),r("span",Do,[...b[1]||(b[1]=[d("Remove ",-1),s("code",{class:"text-xs"},"test.slow()",-1)])])):(t(),r("span",Mo,"Lower to ~"+c(z(M.original.recommendedTimeout)),1))]),"estimatedSavingMs-cell":n(({row:M})=>[s("span",Io,c(z(M.original.estimatedSavingMs)),1)]),"runCount-cell":n(({row:M})=>[s("span",Uo,c(M.original.runCount),1)]),_:1},8,["data"])]),_:1}))]),_:1})}}}),Bo=Object.assign(Fo,{__name:"TimeoutOpportunitiesTable"}),Eo={class:"flex items-center justify-between"},Po={class:"text-sm text-gray-500 inline-flex items-center gap-1"},No={class:"truncate font-mono text-xs"},Lo={class:"tabular-nums"},Oo={class:"tabular-nums text-gray-500"},Vo={class:"tabular-nums text-gray-500"},Ko=ce({__name:"SpecHealthTable",props:{projectId:{}},async setup(A){let T,j;const k=A,g=U(30),{data:_,pending:u}=([T,j]=he(()=>xe(()=>`/api/projects/${k.projectId}/spec-health?days=${g.value}`,{lazy:!0,server:!1,watch:[g]},"$SX5aqvhtuX")),T=await T,j(),T),z=B(()=>_.value?.specs??[]);function L(m){return m>=.9?"bg-green-500":m>=.7?"bg-amber-500":m>0?"bg-red-500":"bg-gray-300 dark:bg-gray-600"}function D(m){return m>=.9?"text-green-600 dark:text-green-400":m>=.7?"text-amber-600 dark:text-amber-400":m>0?"text-red-600 dark:text-red-400":"text-gray-500"}function b(m){return`${Math.round(m*100)}%`}function R(m){return m<1e3?`${m}ms`:`${(m/1e3).toFixed(1)}s`}const S=[{label:"Last 7 days",value:7},{label:"Last 30 days",value:30},{label:"Last 90 days",value:90}],I=[{accessorKey:"prefix",header:N("Spec prefix")},{accessorKey:"passRate",header:N("Pass rate")},{accessorKey:"flakyRate",header:N("Flaky")},{accessorKey:"failureCount",header:N("Failures")},{accessorKey:"testCount",header:N("Tests")},{accessorKey:"avgDuration",header:N("Avg time")}];return(m,f)=>{const v=Ze,y=Ue,w=et,M=je,P=Oe,O=Be,$=Ve,X=Fe;return t(),h(X,null,{header:n(()=>[s("div",Eo,[s("p",Po,[f[1]||(f[1]=d(" Spec-file health overview — pass rate, flaky rate, and failure count per spec prefix ",-1)),o(v,{topic:"project.spec-health"})]),o(y,{modelValue:e(g),"onUpdate:modelValue":f[0]||(f[0]=C=>ee(g)?g.value=C:null),items:S,size:"xs",class:"w-32"},null,8,["modelValue"])])]),default:n(()=>[e(u)?(t(),h(w,{key:0})):e(z).length===0?(t(),h(M,{key:1,text:"No data",description:"No spec health data available for the selected period."})):(t(),h($,{key:2,"min-width":"46rem",bleed:!1},{default:n(()=>[o(O,{data:e(z),columns:I,sticky:"",class:"max-h-[32rem]"},{"prefix-cell":n(({row:C})=>[o(P,{to:`/projects/${A.projectId}/test-cases?file=${encodeURIComponent(C.original.prefix)}`,class:"flex items-center gap-2 min-w-0 text-primary hover:underline",title:C.original.prefix},{default:n(()=>[s("span",{class:se(["inline-block size-3 rounded shrink-0",L(C.original.passRate)])},null,2),s("span",No,c(C.original.prefix),1)]),_:2},1032,["to","title"])]),"passRate-cell":n(({row:C})=>[s("span",{class:se(["font-medium tabular-nums",D(C.original.passRate)])},c(b(C.original.passRate)),3)]),"flakyRate-cell":n(({row:C})=>[s("span",Lo,c(Math.round(C.original.flakyRate*100))+"%",1)]),"failureCount-cell":n(({row:C})=>[s("span",{class:se(["tabular-nums",C.original.failureCount>0?"text-red-600 dark:text-red-400":""])},c(C.original.failureCount),3)]),"testCount-cell":n(({row:C})=>[s("span",Oo,c(C.original.testCount),1)]),"avgDuration-cell":n(({row:C})=>[s("span",Vo,c(R(C.original.avgDuration)),1)]),_:1},8,["data"])]),_:1}))]),_:1})}}}),qo=Object.assign(Ko,{__name:"SpecHealthTable"}),Ho={class:"flex items-center justify-between"},Qo={key:2},Xo={class:"grid grid-cols-3 gap-3 mb-4"},Go={class:"rounded-lg border border-gray-200 dark:border-gray-800 p-3"},Jo={class:"text-2xl font-semibold tabular-nums"},Yo={class:"rounded-lg border border-gray-200 dark:border-gray-800 p-3"},Wo={class:"text-2xl font-semibold tabular-nums"},Zo={class:"rounded-lg border border-gray-200 dark:border-gray-800 p-3"},el={class:"text-2xl font-semibold tabular-nums"},tl=["title"],sl={class:"tabular-nums"},nl={class:"tabular-nums text-gray-500"},al=["title"],ol=ce({__name:"AiStepCoverage",props:{projectId:{}},async setup(A){let T,j;const k=A,g=U(30),{data:_,pending:u}=([T,j]=he(()=>xe(()=>`/api/projects/${k.projectId}/ai-steps?days=${g.value}`,{lazy:!0,server:!1,watch:[g]},"$XNuZ38B1nb")),T=await T,j(),T),z=B(()=>_.value?.artifacts??[]),L=B(()=>_.value?.summary??{artifactCount:0,testCount:0,runCount:0,replayCount:0});function D(I){const m=I.split(/[\\/]/);return m[m.length-1]||I}function b(I){if(!I)return"—";const m=new Date(I).getTime();if(!Number.isFinite(m))return"—";const f=Math.max(0,Math.round((Date.now()-m)/1e3));if(f<60)return"just now";const v=Math.round(f/60);if(v<60)return`${v}m ago`;const y=Math.round(v/60);return y<24?`${y}h ago`:`${Math.round(y/24)}d ago`}const R=[{label:"Last 7 days",value:7},{label:"Last 30 days",value:30},{label:"Last 90 days",value:90}],S=[{accessorKey:"entry",header:N("Artifact")},{accessorKey:"testCount",header:N("Tests")},{accessorKey:"replayCount",header:N("Replays")},{accessorKey:"lastSeen",header:N("Last seen")}];return(I,m)=>{const f=Ue,v=et,y=je,w=Be,M=Ve,P=Fe;return t(),h(P,null,{header:n(()=>[s("div",Ho,[m[1]||(m[1]=s("p",{class:"text-sm text-gray-500"},[d(" AI-step liveness — which committed "),s("code",{class:"text-xs"},"piwiLocator"),d(" / "),s("code",{class:"text-xs"},"piwiRun"),d(" artifacts were replayed, and when they were last seen ")],-1)),o(f,{modelValue:e(g),"onUpdate:modelValue":m[0]||(m[0]=O=>ee(g)?g.value=O:null),items:R,size:"xs",class:"w-32"},null,8,["modelValue"])])]),default:n(()=>[e(u)?(t(),h(v,{key:0})):e(z).length===0?(t(),h(y,{key:1,text:"No AI steps",description:"No committed AI-step artifacts were replayed in the selected period. Author them with page.piwiLocator / page.piwiRun in resolve mode."})):(t(),r("div",Qo,[s("div",Xo,[s("div",Go,[s("div",Jo,c(e(L).artifactCount),1),m[2]||(m[2]=s("div",{class:"text-xs text-gray-500"},"Artifacts replayed",-1))]),s("div",Yo,[s("div",Wo,c(e(L).testCount),1),m[3]||(m[3]=s("div",{class:"text-xs text-gray-500"},"Tests using AI steps",-1))]),s("div",Zo,[s("div",el,c(e(L).replayCount),1),m[4]||(m[4]=s("div",{class:"text-xs text-gray-500"},"Total replays",-1))])]),o(M,{"min-width":"40rem",bleed:!1},{default:n(()=>[o(w,{data:e(z),columns:S,sticky:"",class:"max-h-[32rem]"},{"entry-cell":n(({row:O})=>[s("span",{class:"font-mono text-xs truncate block max-w-[28rem]",title:O.original.entry},c(D(O.original.entry)),9,tl)]),"testCount-cell":n(({row:O})=>[s("span",sl,c(O.original.testCount),1)]),"replayCount-cell":n(({row:O})=>[s("span",nl,c(O.original.replayCount),1)]),"lastSeen-cell":n(({row:O})=>[s("span",{class:"tabular-nums text-gray-500",title:O.original.lastSeen||""},c(b(O.original.lastSeen)),9,al)]),_:1},8,["data"])]),_:1})]))]),_:1})}}}),ll=Object.assign(ol,{__name:"AiStepCoverage"}),rl={class:"space-y-6"},il={class:"w-full text-sm"},cl={class:"px-3 py-2 min-w-0"},ul={class:"text-xs text-muted"},dl={class:"px-3 py-2 text-muted"},ml={class:"px-3 py-2 whitespace-nowrap"},pl={key:1,class:"text-xs text-muted"},gl={key:2,class:"text-xs"},fl={class:"px-3 py-2 whitespace-nowrap text-muted"},_l={class:"px-3 py-2 text-right"},vl={class:"w-full text-sm"},yl={class:"px-3 py-2 min-w-0"},hl={class:"text-xs text-muted"},xl={class:"px-3 py-2 text-right whitespace-nowrap"},bl=ce({__name:"QuarantineTable",props:{projectId:{},projectName:{}},async setup(A){let T,j;const k=A,g=Ie(),_=U(null),{data:u,status:z,error:L,refresh:D}=([T,j]=he(()=>xe(()=>`/api/projects/${k.projectId}/quarantine`,"$BSyDdCMaDx")),T=await T,j(),T);function b(I){const m=Math.round(I/36e5);return m<48?`${Math.max(1,m)}h`:`${Math.round(m/24)}d`}async function R(I,m){_.value=I;try{await $fetch(`/api/projects/${k.projectId}/quarantine`,{method:"POST",body:{testCaseId:I,reason:m,source:"proposed"}}),g.add({title:"Quarantined",color:"success"}),await D()}catch{g.add({title:"Could not quarantine that test",color:"error"})}finally{_.value=null}}async function S(I){_.value=I;try{await $fetch(`/api/projects/${k.projectId}/quarantine/${I}`,{method:"DELETE"}),g.add({title:"Released",color:"success"}),await D()}catch{g.add({title:"Could not release that test",color:"error"})}finally{_.value=null}}return(I,m)=>{const f=et,v=wn,y=Rn,w=An,M=je,P=Oe,O=ps,$=pt,X=we,C=Te,G=Ve,J=Pt;return t(),r("div",rl,[o(J,{title:"Quarantine",icon:"i-lucide-shield-alert",count:e(u)?.debt.active,help:"project.quarantine"},{subtitle:n(()=>[...m[0]||(m[0]=[d(" A quarantined test keeps running and keeps reporting — it is excluded from the CI gate's verdict and nothing else. That is what lets it earn its way back out. ",-1)])]),default:n(()=>[e(z)==="pending"?(t(),h(f,{key:0})):e(L)?(t(),h(v,{key:1,text:String(e(L))},null,8,["text"])):(t(),r(H,{key:2},[e(u)&&e(u).debt.active>0?(t(),h(w,{key:0,class:"mb-4"},{default:n(()=>[o(y,{label:"Quarantined",value:e(u).debt.active},null,8,["value"]),o(y,{label:"Ready to release",value:e(u).debt.readyToRelease,"value-class":e(u).debt.readyToRelease>0?"text-green-600 dark:text-green-400":"",hint:"earned their way out"},null,8,["value","value-class"]),o(y,{label:"Still failing",value:e(u).debt.stillFailing,hint:"no passing streak"},null,8,["value"]),o(y,{label:"Oldest",value:b(e(u).debt.oldestAgeMs),size:"sm"},null,8,["value"])]),_:1})):x("",!0),!e(u)||e(u).entries.length===0?(t(),h(M,{key:1,icon:"i-lucide-shield-check",text:"Nothing quarantined. Tests you quarantine appear here with their progress back out."})):(t(),h(G,{key:2},{default:n(()=>[s("table",il,[m[2]||(m[2]=s("thead",{class:"text-left text-xs text-muted"},[s("tr",null,[s("th",{class:"px-3 py-2"},"Test"),s("th",{class:"px-3 py-2"},"Reason"),s("th",{class:"px-3 py-2 whitespace-nowrap"},"Streak"),s("th",{class:"px-3 py-2 whitespace-nowrap"},"Age"),s("th",{class:"px-3 py-2 text-right"},"Actions")])],-1)),s("tbody",null,[(t(!0),r(H,null,Y(e(u).entries,q=>(t(),r("tr",{key:q.id,class:"border-t border-default"},[s("td",cl,[o(P,{to:`/test-cases/${q.testCaseId}`,class:"text-primary hover:underline font-medium"},{default:n(()=>[d(c(q.title),1)]),_:2},1032,["to"]),o(O,{tags:q.tags,meta:{owner:q.owner??void 0},"max-tags":3,class:"ml-1"},null,8,["tags","meta"]),s("div",ul,[o($,{"file-path":q.filePath,"project-key":A.projectId,"project-name":A.projectName},null,8,["file-path","project-key","project-name"])])]),s("td",dl,c(q.reason||"—"),1),s("td",ml,[q.releaseProposed?(t(),h(X,{key:0,color:"success",variant:"soft",size:"xs"},{default:n(()=>[d(c(q.consecutivePasses)+" green — ready ",1)]),_:2},1024)):q.runsSinceQuarantine===0?(t(),r("span",pl,"not run yet")):(t(),r("span",gl,c(q.consecutivePasses)+" / "+c(e(u).releaseAfterConsecutivePasses),1))]),s("td",fl,c(b(q.ageMs)),1),s("td",_l,[o(C,{size:"xs",color:q.releaseProposed?"primary":"neutral",variant:"soft",loading:e(_)===q.testCaseId,onClick:p=>S(q.testCaseId)},{default:n(()=>[...m[1]||(m[1]=[d(" Release ",-1)])]),_:1},8,["color","loading","onClick"])])]))),128))])])]),_:1}))],64))]),_:1},8,["count"]),e(u)&&e(u).candidates.length>0?(t(),h(J,{key:0,title:"Worth quarantining",icon:"i-lucide-lightbulb",count:e(u).candidates.length},{subtitle:n(()=>[...m[3]||(m[3]=[d(" Ranked by the CI minutes their flakiness wastes, not by how often they flake — a test that flakes constantly but finishes instantly costs nothing. ",-1)])]),default:n(()=>[o(G,null,{default:n(()=>[s("table",vl,[s("tbody",null,[(t(!0),r(H,null,Y(e(u).candidates,q=>(t(),r("tr",{key:q.testCaseId,class:"border-t border-default"},[s("td",yl,[o(P,{to:`/test-cases/${q.testCaseId}`,class:"text-primary hover:underline font-medium"},{default:n(()=>[d(c(q.title),1)]),_:2},1032,["to"]),s("div",hl,c(q.rationale),1)]),s("td",xl,[o(C,{size:"xs",color:"neutral",variant:"soft",loading:e(_)===q.testCaseId,onClick:p=>R(q.testCaseId,q.rationale)},{default:n(()=>[...m[4]||(m[4]=[d(" Quarantine ",-1)])]),_:1},8,["loading","onClick"])])]))),128))])])]),_:1})]),_:1},8,["count"])):x("",!0)])}}}),kl=Object.assign(bl,{__name:"QuarantineTable"}),$l={class:"space-y-4"},Cl={class:"grid grid-cols-1 sm:grid-cols-2 gap-4"},Tl={id:"marker-environments"},jl=["value"],Sl=ce({__name:"MarkerFormModal",props:{open:{type:Boolean},projectId:{},marker:{},environments:{}},emits:["update:open","saved"],setup(A,{emit:T}){const j=A,k=T,g=Ie(),_=Dn.map(R=>({label:R.label,value:R.id,icon:R.icon})),u=Gs({label:"",occurredAt:"",category:Mt,environment:"",description:""}),z=B(()=>!!j.marker),L=U(!1);function D(R){const S=new Date(R),I=m=>String(m).padStart(2,"0");return`${S.getFullYear()}-${I(S.getMonth()+1)}-${I(S.getDate())}T${I(S.getHours())}:${I(S.getMinutes())}`}fe(()=>j.open,R=>{R&&(j.marker?(u.label=j.marker.label,u.occurredAt=D(j.marker.occurredAt),u.category=j.marker.category||Mt,u.environment=j.marker.environment??"",u.description=j.marker.description??""):(u.label="",u.occurredAt=D(new Date),u.category=Mt,u.environment="",u.description=""))});async function b(){if(!u.label.trim()){g.add({title:"Label is required",color:"error"});return}if(!u.occurredAt){g.add({title:"Date is required",color:"error"});return}L.value=!0;const R={label:u.label.trim(),occurredAt:new Date(u.occurredAt).toISOString(),category:u.category,environment:u.environment.trim()||null,description:u.description.trim()||null};try{j.marker?(await $fetch(`/api/markers/${j.marker.id}`,{method:"PATCH",body:R}),g.add({title:"Marker updated",color:"success"})):(await $fetch(`/api/projects/${j.projectId}/markers`,{method:"POST",body:R}),g.add({title:"Marker created",color:"success"})),k("update:open",!1),k("saved")}catch(S){g.add({title:z.value?"Failed to update marker":"Failed to create marker",description:ms(S),color:"error"})}finally{L.value=!1}}return(R,S)=>{const I=Zt,m=es,f=Ue,v=In,y=Te,w=Lt,M=Et;return t(),h(M,null,{default:n(()=>[o(w,{open:A.open,title:e(z)?"Edit marker":"Add marker","onUpdate:open":S[6]||(S[6]=P=>k("update:open",P))},{body:n(()=>[s("div",$l,[o(m,{label:"Label",name:"label",required:""},{default:n(()=>[o(I,{modelValue:e(u).label,"onUpdate:modelValue":S[0]||(S[0]=P=>e(u).label=P),placeholder:"e.g. Migrated CI to new runners",class:"w-full"},null,8,["modelValue"])]),_:1}),s("div",Cl,[o(m,{label:"Date & time",name:"occurredAt",required:""},{default:n(()=>[o(I,{modelValue:e(u).occurredAt,"onUpdate:modelValue":S[1]||(S[1]=P=>e(u).occurredAt=P),type:"datetime-local",class:"w-full"},null,8,["modelValue"])]),_:1}),o(m,{label:"Category",name:"category"},{default:n(()=>[o(f,{modelValue:e(u).category,"onUpdate:modelValue":S[2]||(S[2]=P=>e(u).category=P),items:e(_),class:"w-full"},null,8,["modelValue","items"])]),_:1})]),o(m,{label:"Environment",name:"environment",help:"Optional. Leave empty to apply to all environments."},{default:n(()=>[o(I,{modelValue:e(u).environment,"onUpdate:modelValue":S[3]||(S[3]=P=>e(u).environment=P),list:"marker-environments",placeholder:"e.g. production",class:"w-full"},null,8,["modelValue"]),s("datalist",Tl,[(t(!0),r(H,null,Y(A.environments||[],P=>(t(),r("option",{key:P,value:P},null,8,jl))),128))])]),_:1}),o(m,{label:"Description",name:"description"},{default:n(()=>[o(v,{modelValue:e(u).description,"onUpdate:modelValue":S[4]||(S[4]=P=>e(u).description=P),rows:3,placeholder:"Optional details",class:"w-full"},null,8,["modelValue"])]),_:1})])]),footer:n(()=>[o(y,{color:"neutral",variant:"ghost",label:"Cancel",onClick:S[5]||(S[5]=P=>k("update:open",!1))}),o(y,{label:e(z)?"Save changes":"Add marker",icon:e(z)?"i-lucide-check":"i-lucide-plus",loading:e(L),onClick:b},null,8,["label","icon","loading"])]),_:1},8,["open","title"])]),_:1})}}}),wl=Object.assign(Sl,{__name:"MarkerFormModal"}),Rl={class:"md:hidden space-y-3"},Al={class:"flex items-start justify-between gap-2"},zl={key:0,class:"flex gap-1 shrink-0"},Dl={class:"text-sm text-muted"},Ml={key:0,class:"text-xs"},Il={key:1,class:"text-sm text-muted"},Ul={class:"whitespace-nowrap"},Fl={class:"text-xs text-muted"},Bl={class:"font-medium flex items-center gap-1"},El={key:0,class:"text-xs text-muted line-clamp-1"},Pl={key:1,class:"text-xs text-muted"},Nl={key:0,class:"flex gap-1 justify-end"},Ll=ce({__name:"ProjectTimeline",props:{projectId:{},markers:{},environments:{},canEdit:{type:Boolean},focusMarkerId:{}},emits:["changed","clear-focus"],setup(A,{emit:T}){const j=A,k=T,g=Ie(),_=B(()=>[...j.markers].sort((f,v)=>+new Date(v.occurredAt)-+new Date(f.occurredAt))),u=[{accessorKey:"occurredAt",header:"When"},{accessorKey:"category",header:"Category"},{accessorKey:"label",header:"Label"},{accessorKey:"environment",header:"Environment"},{accessorKey:"actions",header:""}],z=U(!1),L=U(null);function D(){L.value=null,z.value=!0}function b(f){L.value=f,z.value=!0}fe(()=>j.focusMarkerId,f=>{if(f==null)return;const v=j.markers.find(y=>y.id===f);v&&b(v),k("clear-focus")},{immediate:!0});const R=U(!1),S=U(null);function I(f){S.value=f,R.value=!0}async function m(){const f=S.value;if(R.value=!1,S.value=null,!!f)try{await $fetch(`/api/markers/${f.id}`,{method:"DELETE"}),g.add({title:"Marker deleted",color:"success"}),k("changed")}catch(v){g.add({title:"Failed to delete marker",description:ms(v),color:"error"})}}return(f,v)=>{const y=Te,w=je,M=Mn,P=ds,O=we,$=Et,X=Le,C=Be,G=wl,J=Lt,q=Pt;return t(),h(q,{title:"Timeline markers",count:A.markers.length,icon:"i-lucide-milestone",help:"project.timeline",subtitle:"Dated events overlaid on the analytics charts"},{actions:n(()=>[A.canEdit?(t(),h(y,{key:0,label:"Add marker",icon:"i-lucide-plus",size:"sm",onClick:D})):x("",!0)]),default:n(()=>[A.markers.length===0?(t(),h(w,{key:0,icon:"i-lucide-milestone",text:"No markers yet. Add a deploy, config change, or incident to see it on the charts."})):(t(),r(H,{key:1},[s("div",Rl,[(t(!0),r(H,null,Y(e(_),p=>(t(),r("div",{key:p.id,class:"rounded-lg border border-default p-3 space-y-2"},[s("div",Al,[o(M,{marker:p},null,8,["marker"]),A.canEdit?(t(),r("div",zl,[o(y,{icon:"i-lucide-pencil",color:"neutral",variant:"ghost",size:"xs",onClick:K=>b(p)},null,8,["onClick"]),o(y,{icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"xs",onClick:K=>I(p)},null,8,["onClick"])])):x("",!0)]),s("div",Dl,[o(P,{date:p.occurredAt},null,8,["date"])]),p.environment?(t(),r("div",Ml,[o(O,{color:"neutral",variant:"subtle",size:"xs"},{default:n(()=>[d(c(p.environment),1)]),_:2},1024)])):x("",!0),p.description?(t(),r("p",Il,c(p.description),1)):x("",!0)]))),128))]),o(C,{data:e(_),columns:u,class:"hidden md:block"},{"occurredAt-cell":n(({row:p})=>[s("div",Ul,[o(P,{date:p.original.occurredAt,class:"text-sm"},null,8,["date"]),s("div",Fl,[o($,null,{default:n(()=>[d(c(("formatRelativeTime"in f?f.formatRelativeTime:e(Nt))(p.original.occurredAt)),1)]),_:2},1024)])])]),"category-cell":n(({row:p})=>[o(O,{color:e(It)(p.original.category).color,variant:"subtle",size:"sm",class:"gap-1"},{default:n(()=>[o(X,{name:e(It)(p.original.category).icon,class:"size-3"},null,8,["name"]),d(" "+c(e(It)(p.original.category).label),1)]),_:2},1032,["color"])]),"label-cell":n(({row:p})=>[s("div",null,[s("div",Bl,[d(c(p.original.label)+" ",1),p.original.source==="auto"?(t(),h(X,{key:0,name:"i-lucide-sparkles",class:"size-3 text-muted",title:"Automatically detected"})):x("",!0)]),p.original.description?(t(),r("div",El,c(p.original.description),1)):x("",!0)])]),"environment-cell":n(({row:p})=>[p.original.environment?(t(),h(O,{key:0,color:"neutral",variant:"subtle",size:"xs"},{default:n(()=>[d(c(p.original.environment),1)]),_:2},1024)):(t(),r("span",Pl,"All"))]),"actions-cell":n(({row:p})=>[A.canEdit?(t(),r("div",Nl,[o(y,{icon:"i-lucide-pencil",color:"neutral",variant:"ghost",size:"sm",onClick:K=>b(p.original)},null,8,["onClick"]),o(y,{icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"sm",onClick:K=>I(p.original)},null,8,["onClick"])])):x("",!0)]),_:1},8,["data"])],64)),o(G,{open:e(z),"onUpdate:open":v[0]||(v[0]=p=>ee(z)?z.value=p:null),"project-id":A.projectId,marker:e(L),environments:A.environments,onSaved:v[1]||(v[1]=p=>k("changed"))},null,8,["open","project-id","marker","environments"]),o($,null,{default:n(()=>[o(J,{open:e(R),title:"Delete marker","onUpdate:open":v[3]||(v[3]=p=>R.value=p)},{body:n(()=>[s("p",null,[v[4]||(v[4]=d(" Delete marker ",-1)),e(S)?(t(),h(M,{key:0,marker:e(S),class:"inline-flex align-middle"},null,8,["marker"])):x("",!0),v[5]||(v[5]=d("? This can't be undone. ",-1))])]),footer:n(()=>[o(y,{color:"neutral",variant:"ghost",label:"Cancel",onClick:v[2]||(v[2]=p=>R.value=!1)}),o(y,{color:"error",label:"Delete",icon:"i-lucide-trash-2",onClick:m})]),_:1},8,["open"])]),_:1})]),_:1},8,["count"])}}}),Ol=Object.assign(Ll,{__name:"ProjectTimeline"}),Vl={class:"flex flex-col h-full overflow-y-auto gap-4"},Kl={key:0,class:"pb-0 space-y-4"},ql={key:0,class:"text-gray-600"},Hl={key:1,class:"flex flex-wrap gap-1 mt-2"},Ql={key:1},Xl={class:"flex flex-wrap items-center gap-3 mb-4"},Gl={class:"inline-flex items-center gap-1"},Jl=["onClick"],Yl=["title","onClick"],Wl={key:0,class:"flex items-center gap-3 px-3 py-2 mb-3 rounded-lg bg-primary-50 dark:bg-primary-900/20 border border-primary-200 dark:border-primary-800"},Zl={class:"text-sm text-primary-700 dark:text-primary-300"},er={key:1,class:"text-xs text-primary-500"},tr=["checked","onClick"],sr={class:"flex items-center gap-2"},nr=["href","onClick"],ar={key:0,class:"text-xs text-gray-500 dark:text-gray-400 truncate max-w-32"},or={class:"inline-flex items-center gap-1"},lr={key:0,class:"flex items-center gap-1"},rr={key:0,class:"flex items-center gap-1 flex-wrap"},ir=["title","onClick"],cr={key:1,class:"text-xs text-gray-500"},ur={class:"space-y-1"},dr={class:"flex justify-end gap-2"},mr={key:2,class:"text-center py-8 text-gray-500"},pr={class:"text-xs text-gray-400 max-w-sm"},gr={class:"bg-gray-100 dark:bg-gray-800 px-1 rounded"},fr={key:2},_r={key:3},vr={key:4},yr={class:"flex flex-wrap items-center gap-3"},hr={class:"text-xl font-semibold inline-flex items-center gap-1"},xr={class:"font-medium"},br={class:"mt-1"},kr={key:0,class:"text-red-600 font-medium"},$r={key:1,class:"text-green-600 font-medium"},Cr={key:2,class:"text-gray-500"},Tr={key:2,class:"text-center py-8 text-red-500"},jr={key:3,class:"text-center py-8 text-gray-500"},Sr={class:"flex items-center justify-between"},wr={class:"text-xl font-semibold inline-flex items-center gap-1"},Rr={class:"space-y-4"},Ar={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},zr={key:0,class:"text-center py-4 text-gray-500"},Dr={key:1,class:"space-y-4"},Mr={class:"flex gap-4 text-sm"},Ir={key:0,class:"text-gray-400"},Ur={key:0,class:"text-gray-400"},Fr={key:1,class:"text-gray-400"},Br={key:1,class:"text-gray-400"},Er={key:0,class:"text-gray-400"},Pr={key:0,class:"text-gray-400"},Nr={key:2,class:"text-center py-8 text-gray-500"},Lr={key:3,class:"text-center py-8 text-gray-500"},Or={key:5},Vr={key:6},Kr={class:"flex items-center justify-between"},qr={class:"text-sm text-gray-600 inline-flex items-center gap-1"},Hr={class:"space-y-4"},Qr={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Xr={key:0,class:"text-center py-8 text-gray-500"},Gr={key:1,class:"space-y-4"},Jr={class:"space-y-2"},Yr={class:"flex flex-wrap gap-4 text-sm"},Wr={key:3,class:"text-sm text-gray-500"},Zr={class:"flex flex-wrap gap-4 text-sm"},ei={key:0,class:"text-gray-400"},ti={key:0,class:"text-gray-400"},si={key:1,class:"text-gray-400"},ni={key:1,class:"text-gray-400"},ai={key:0,class:"text-gray-400"},oi={key:0,class:"text-gray-400"},li={key:2,class:"text-center py-8 text-gray-500"},ri={key:3,class:"text-center py-8 text-gray-500"},ii={key:7},ci={key:8},ui={key:9},di={key:10},mi={class:"flex items-center justify-between"},pi={class:"text-sm text-gray-600 inline-flex items-center gap-1"},gi={key:0,class:"space-y-2"},fi={class:"font-medium text-sm"},_i={class:"text-xs text-muted flex items-center gap-2"},vi={key:0,class:"italic"},yi={key:1,class:"text-xs text-muted italic"},hi={key:1,class:"text-center py-8 text-muted text-sm"},xi={key:11},bi={class:"space-y-4"},ki={class:"text-sm text-gray-600 dark:text-gray-400"},$i={class:"block text-sm font-medium mb-1"},Ci={class:"bg-gray-100 dark:bg-gray-800 px-1 rounded"},Ac=ce({__name:"index",async setup(A){let T,j;const k=Js(),g=Ys(),_=k.params.id,{data:u,refresh:z}=([T,j]=he(()=>xe(`/api/projects/${_}`,"$F60FKvNOBL")),T=await T,j(),T);Ws(B(()=>({title:`${u.value?.label||u.value?.name||"Project"} — Piwi Dashboard`})));const L=Ie(),D=U(null),b=U(null),{isAdmin:R,isReporter:S}=Wt(),I=Ft(),m=B(()=>!I.public.authEnabled||R.value),f=m,v=U(!1),y=U(""),w=U(!1),M=B(()=>y.value===u.value?.name);async function P(){if(M.value){w.value=!0;try{await $fetch(`/api/projects/${_}`,{method:"DELETE"}),L.add({title:"Project deleted",color:"success"}),await en(),await g.push("/")}catch(i){const a=i&&typeof i=="object"&&"data"in i?i.data?.message:void 0;L.add({title:"Delete failed",description:a||"An error occurred",color:"error"}),w.value=!1}}}Fn(z);async function O(i){b.value=null,D.value=i;try{await $fetch(`/api/test-runs/${i}`,{method:"DELETE"}),L.add({title:"Test run deleted",color:"success"}),await z()}catch(a){const E=a&&typeof a=="object"&&"data"in a?a.data?.message:void 0;L.add({title:"Delete failed",description:E||"An error occurred",color:"error"})}finally{D.value=null}}const $=U([]),X=U([]),C=U([]),G=B(()=>{const i=new Map($.value.map(E=>[E.id,E])),a=[];for(const E of X.value){if(E.role==="administrator")continue;const Z=i.get(E.id);a.push({id:E.id,username:E.username,name:E.name??null,role:E.role,global:Z?.global??!1,hasAccess:!!Z})}for(const E of $.value)E.role==="administrator"&&a.push({...E,hasAccess:!0});return a}),J=B(()=>{const i=$.value.filter(E=>E.role!=="administrator"&&!E.global).map(E=>E.id).sort(),a=[...C.value].sort();return JSON.stringify(i)!==JSON.stringify(a)});fe(()=>u.value?.id,async i=>{if(!(!i||!R.value))try{const[a,E]=await Promise.all([$fetch(`/api/projects/${_}/members`),$fetch("/api/users")]);$.value=a.items,X.value=E.items,C.value=a.items.filter(Z=>Z.role!=="administrator"&&!Z.global).map(Z=>Z.id)}catch{$.value=[],X.value=[],C.value=[]}},{immediate:!0});function q(i){const a=C.value.indexOf(i);a>=0?C.value.splice(a,1):C.value.push(i)}async function p(){try{await $fetch(`/api/projects/${_}/members`,{method:"PUT",body:{userIds:C.value}}),L.add({title:"Members updated",color:"success"});const i=await $fetch(`/api/projects/${_}/members`);$.value=i.items}catch(i){const a=i&&typeof i=="object"&&"data"in i?i.data?.message:void 0;L.add({title:"Update failed",description:a||"An error occurred",color:"error"})}}const K=U("test-runs"),ue=U(0),_e=["test-runs","failure-clusters","flaky-tests","performance","test-cases","compare","spec-health","ai-steps","quarantine","timeline","members"],be=k.query.tab;typeof be=="string"&&_e.includes(be)&&(K.value=be),fe(K,i=>{k.query.tab!==i&&_e.includes(i)&&g.replace({query:{...k.query,tab:i}})});const Ke=B(()=>u.value?.testRuns?.some(i=>i.failedTests>0)??!1),tt=B(()=>[{label:"Results",items:[{label:`Test runs (${F.value.length})`,icon:"i-lucide-play-circle",value:"test-runs",slot:"test-runs"},{label:`Test cases${kt.value!=null?` (${kt.value})`:""}`,icon:"i-lucide-list-checks",value:"test-cases",slot:"test-cases"},{label:"Compare",icon:"i-lucide-git-compare-arrows",value:"compare",slot:"compare"}]},{label:"Failures",items:[...Ke.value?[{label:"Failure clusters",icon:"i-lucide-layers",value:"failure-clusters",slot:"failure-clusters"}]:[],{label:"Flaky tests",icon:"i-lucide-shuffle",value:"flaky-tests",slot:"flaky-tests"},{label:"Quarantine",icon:"i-lucide-shield-alert",value:"quarantine",slot:"quarantine"}]},{label:"Health",items:[{label:"Spec health",icon:"i-lucide-table-2",value:"spec-health",slot:"spec-health"},{label:"AI steps",icon:"i-lucide-wand-sparkles",value:"ai-steps",slot:"ai-steps"},{label:"Performance",icon:"i-lucide-trending-up",value:"performance",slot:"performance"},{label:`Timeline${Re.value.length?` (${Re.value.length})`:""}`,icon:"i-lucide-milestone",value:"timeline",slot:"timeline"}]},...R.value?[{label:"Admin",items:[{label:"Members",icon:"i-lucide-users",value:"members",slot:"members"}]}]:[]]),qe=B(()=>tt.value.flatMap(i=>i.items)),gt=B(()=>qe.value.map(i=>({...i,active:K.value===i.value,"aria-current":K.value===i.value?"true":void 0,onSelect:()=>{K.value=i.value}}))),ke=B(()=>tt.value.map(i=>i.items).filter(i=>i.length>0)),$e=B(()=>qe.value.find(i=>i.value===K.value)?.icon),W=U([]),He=i=>W.value.includes(i);function ft(i){const a=W.value.indexOf(i);if(a>=0)W.value.splice(a,1);else{if(W.value.length>=2){L.add({title:"Maximum 2 runs",description:"Select at most 2 runs to compare. Deselect one first.",color:"warning"});return}W.value.push(i)}}const Qe=U(null);function _t(){W.value.length===2&&(Qe.value=[W.value[0],W.value[1]],K.value="compare")}const ne=U([]),ve=U(!0),Xe=B(()=>{const i=new Set;for(const a of u.value?.testRuns||[])a.environment&&i.add(a.environment);return[...i].sort()});function vt(i){const a=ne.value.indexOf(i);a===-1?ne.value.push(i):ne.value.splice(a,1)}function yt(i){return ne.value.includes(i)}function me(i){return i.branch??i.metadata?.scm?.branch??null}const pe=U([]),st=B(()=>{const i=new Set;for(const a of u.value?.testRuns||[]){const E=me(a);E&&i.add(E)}return[...i].sort()});function Ee(i){const a=pe.value.indexOf(i);a===-1?pe.value.push(i):pe.value.splice(a,1)}function V(i){return pe.value.includes(i)}const F=B(()=>{let i=u.value?.testRuns||[];return ve.value&&(i=i.filter(a=>a.isFullRun!==!1)),ne.value.length>0&&(i=i.filter(a=>a.environment&&ne.value.includes(a.environment))),pe.value.length>0&&(i=i.filter(a=>{const E=me(a);return E!==null&&pe.value.includes(E)})),i}),ae=B(()=>ne.value.length===1?ne.value[0]:void 0),ht=B(()=>pe.value.length===1?pe.value[0]:void 0),{data:xt,refresh:nt}=([T,j]=he(()=>xe(`/api/projects/${_}/markers`,{default:()=>({items:[]})},"$jubPXy8o3y")),T=await T,j(),T),Re=B(()=>xt.value?.items??[]),at=B(()=>!I.public.authEnabled||R.value||S.value),Ae=B(()=>ne.value.length===0?Re.value:Re.value.filter(i=>i.environment==null||ne.value.includes(i.environment))),Ge=U(null);function Q(i){Ge.value=i,K.value="timeline"}function de(i){if(i.isFullRun!==!1)return"Full run — the complete test suite ran";const a=[],E=i.filterDetails?.grep?.trim(),Z=i.filterDetails?.grepInvert?.trim(),ye=i.filterDetails?.files;return E&&E!==".*"&&a.push(`grep: ${E}`),Z&&a.push(`grep-invert: ${Z}`),ye?.length&&a.push(`files: ${ye.join(", ")}`),a.length?`Partial run — ${a.join(" · ")}`:"Partial run — only a filtered subset of tests ran (grep, file, or line filter)"}const bt=[{accessorKey:"select",header:""},{accessorKey:"id",header:N("Run")},{accessorKey:"status",header:N("Status")},{accessorKey:"isFullRun",header:"Scope"},{id:"browsers",accessorFn:i=>i.browsers,header:""},{accessorKey:"startTime",header:N("Started")},{accessorKey:"environment",header:N("Environment")},{accessorKey:"metadata",header:"Branch / Commit"},{accessorKey:"duration",header:N("Test status / Dur.")},{accessorKey:"reports",header:"Reports"},{id:"actions",header:"Actions"}],kt=U(null),ze=U(""),De=U(""),gs=B(()=>{const i={};return ze.value&&(i.from=ze.value),De.value&&(i.to=De.value),i}),$t=U(null),Ct=U(!1),Pe=U(null),Tt=U(!1),ot=U(!1),fs=B(()=>Ct.value&&$t.value===null);fe([K,gs,ve],async([i,a])=>{if(i!=="performance")return;Ct.value=!0,Pe.value||(ot.value=!0);const E=new URLSearchParams(a).toString(),Z=ve.value?`${E?"&":""}fullRunsOnly=true`:"",ye=E||Z?`?${E}${Z}`:"",Se=await $fetch(`/api/projects/${_}/performance${ye}`).catch(Je=>(console.warn("[PerformanceTab] Failed to fetch performance trend:",Je),null));if($t.value=Se?.items??null,Ct.value=!1,ot.value){Tt.value=!1;const Je=await $fetch(`/api/projects/${_}/slow-tests`).catch(wt=>(Tt.value=!0,console.warn("[PerformanceTab] Failed to fetch slow tests:",wt),null));Pe.value=Je?.items??null,ot.value=!1}},{immediate:!0});const _s=[{accessorKey:"title",header:N("Test case")},{accessorKey:"avgDuration",header:N("Avg duration")},{accessorKey:"maxDuration",header:N("Max")},{accessorKey:"minDuration",header:N("Min")},{accessorKey:"latestDuration",header:N("Latest")},{accessorKey:"trend",header:N("Trend")},{accessorKey:"runCount",header:N("Runs")}];function vs(i){const a=Tn(i.startTime,{dateOnly:!0}),E=i.metadata?.scm?.commit?` (${i.metadata.scm.commit.substring(0,7)})`:"";return`Run #${i.id} — ${a}${E}`}const ge=B(()=>u.value?.testRuns?[...u.value.testRuns].reverse().map(i=>({label:vs(i),value:i.id})):[]),oe=U(void 0),le=U(void 0),Ot=B(()=>k.query.runA?Number(k.query.runA):null),Vt=B(()=>k.query.runB?Number(k.query.runB):null);fe(ge,i=>{if(Ot.value){const a=i.find(E=>E.value===Ot.value);a&&(oe.value=a)}if(Vt.value){const a=i.find(E=>E.value===Vt.value);a&&(le.value=a)}},{immediate:!0}),fe(Qe,i=>{if(i){const a=ge.value.find(Z=>Z.value===i[0]),E=ge.value.find(Z=>Z.value===i[1]);a&&(oe.value=a),E&&(le.value=E),Qe.value=null}});function Kt(){ge.value.length>=2&&(oe.value=ge.value[1],le.value=ge.value[0])}const jt=U(null),St=U(null),lt=U(!1);async function ys(){const i=oe.value,a=le.value;if(!(!i?.value&&!a?.value)){lt.value=!0;try{const E=[];i?.value&&E.push(i.value),a?.value&&E.push(a.value);const Z=await Promise.all(E.map(Se=>$fetch(`/api/test-runs/${Se}/summary`))),ye=new Map;for(const Se of Z)ye.set(Se.id,Se);jt.value=i?.value?ye.get(i.value)??null:null,St.value=a?.value?ye.get(a.value)??null:null}catch{jt.value=null,St.value=null}finally{lt.value=!1}}}fe([oe,le],()=>{ys()});const{comparisonData:rt,comparisonSummary:te}=Un(jt,St),qt=[{accessorKey:"title",header:N("Test case")},{accessorKey:"statusA",header:N("Status A")},{accessorKey:"statusB",header:N("Status B")},{accessorKey:"durationA",header:N("Duration A")},{accessorKey:"durationB",header:N("Duration B")},{accessorKey:"delta",header:N("Delta")},{accessorKey:"percentChange",header:N("Change")}];return(i,a)=>{const E=Hs,Z=Qs,ye=ua,Se=an,Je=ln,wt=ts,hs=_a,xs=Ue,bs=dn,ks=mn,$s=pn,Ne=Ze,ie=Te,Cs=ja,Ht=fn,Ts=_n,Rt=Le,js=us,Ss=vn,ws=ds,re=we,Rs=yn,Me=hn,As=xn,it=Be,zs=sn,Ds=je,Ye=Fe,Ms=Fa,Is=Ja,Us=go,At=Zt,Qt=et,Fs=jo,Bs=pt,Es=Bo,ct=jn,Ps=Sn,Ns=qo,Ls=ll,Os=kl,Vs=zn,Ks=Ol,qs=on,Xt=Lt,Gt=Et;return t(),r(H,null,[o(qs,{id:"project-detail"},{header:n(()=>[o(Je,null,{leading:n(()=>[o(E),o(Z,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},{label:e(u)?.label||e(u)?.name||"Project"}]},null,8,["items"])]),right:n(()=>[o(Se,{size:"sm",actions:[...e(m)?[{label:"Delete",icon:"i-lucide-trash-2",color:"error",variant:"ghost",onClick:()=>{y.value="",v.value=!0}}]:[],...e(f)?[{label:"Import",icon:"i-lucide-import",variant:"outline",to:`/projects/${e(_)}/import`}]:[],{label:"Test functions",icon:"i-lucide-function-square",variant:"outline",to:`/projects/${e(_)}/test-functions`},{label:"Selections",icon:"i-lucide-list-filter",variant:"outline",to:`/projects/${e(_)}/selections`},{label:"Edit",icon:"i-lucide-pencil",variant:"outline",to:`/projects/${e(_)}/edit`},{label:"Refresh",icon:"i-lucide-refresh-cw",variant:"outline",onClick:()=>e(z)()}]},{leading:n(()=>[o(ye,{"project-id":parseInt(e(_)),"project-label":e(u)?.label||e(u)?.name},null,8,["project-id","project-label"])]),_:1},8,["actions"])]),_:1})]),body:n(()=>[s("div",Vl,[e(u)?.description||e(u)?.tags&&e(u).tags.length>0?(t(),r("div",Kl,[e(u)?.description?(t(),r("p",ql,c(e(u).description),1)):x("",!0),e(u)?.tags&&e(u).tags.length>0?(t(),r("div",Hl,[(t(!0),r(H,null,Y(e(u).tags,l=>(t(),h(wt,{key:l.id,text:l.text,color:l.color},null,8,["text","color"]))),128))])):x("",!0)])):x("",!0),o(hs,{"project-id":e(_)},null,8,["project-id"]),o(xs,{modelValue:e(K),"onUpdate:modelValue":a[0]||(a[0]=l=>ee(K)?K.value=l:null),items:e(ke),icon:e($e),size:"md","aria-label":"Select tab",class:"w-full mx-1 mb-1 sm:hidden"},null,8,["modelValue","items","icon"]),o(ks,{class:"hidden sm:block p-1"},{default:n(()=>[o(bs,{items:e(gt),highlight:"",class:"-mx-1 flex-1",ui:{list:"overflow-x-auto",root:"min-w-0"}},null,8,["items"])]),_:1}),e(K)==="test-runs"?(t(),r("div",Ql,[s("div",Xl,[s("div",Gl,[o($s,{modelValue:e(ve),"onUpdate:modelValue":a[1]||(a[1]=l=>ee(ve)?ve.value=l:null),label:"Full runs only",ui:{label:"text-sm"}},null,8,["modelValue"]),o(Ne,{topic:"project.run-scope"})]),e(Xe).length>0?(t(),r(H,{key:0},[a[21]||(a[21]=s("span",{class:"text-sm text-muted shrink-0"},"Environment:",-1)),(t(!0),r(H,null,Y(e(Xe),l=>(t(),r("button",{key:l,type:"button",class:se(["text-xs font-medium px-2 py-1 rounded border cursor-pointer focus:outline-none transition-colors",yt(l)?"bg-blue-100 text-blue-700 border-blue-300 dark:bg-blue-900/40 dark:text-blue-300 dark:border-blue-700":"bg-zinc-100 text-zinc-500 border-zinc-200 hover:bg-zinc-200 dark:bg-zinc-800 dark:text-zinc-400 dark:border-zinc-700 dark:hover:bg-zinc-700"]),onClick:Ce=>vt(l)},c(l),11,Jl))),128)),e(ne).length>0?(t(),h(ie,{key:0,size:"xs",variant:"ghost",color:"neutral",icon:"i-lucide-x",label:"Clear filter",onClick:a[2]||(a[2]=l=>ne.value=[])})):x("",!0)],64)):x("",!0),e(st).length>0?(t(),r(H,{key:1},[a[22]||(a[22]=s("span",{class:"text-sm text-muted shrink-0"},"Branch:",-1)),(t(!0),r(H,null,Y(e(st),l=>(t(),r("button",{key:l,type:"button",title:l,class:se(["text-xs font-medium px-2 py-1 rounded border cursor-pointer focus:outline-none transition-colors max-w-[12rem] truncate",V(l)?"bg-blue-100 text-blue-700 border-blue-300 dark:bg-blue-900/40 dark:text-blue-300 dark:border-blue-700":"bg-zinc-100 text-zinc-500 border-zinc-200 hover:bg-zinc-200 dark:bg-zinc-800 dark:text-zinc-400 dark:border-zinc-700 dark:hover:bg-zinc-700"]),onClick:Ce=>Ee(l)},c(l),11,Yl))),128)),e(pe).length>0?(t(),h(ie,{key:0,size:"xs",variant:"ghost",color:"neutral",icon:"i-lucide-x",label:"Clear filter",onClick:a[3]||(a[3]=l=>pe.value=[])})):x("",!0)],64)):x("",!0)]),e(F).length>0?(t(),h(Ht,{key:0,title:"Run trend",subtitle:"One bar per run, newest on the right",help:"project.runs-trend",legend:e(Yt)(e(ns)),"data-shot":"run-trend"},{default:n(()=>[o(Cs,{"test-runs":e(F),markers:e(Ae),onMarkerClick:Q},null,8,["test-runs","markers"])]),_:1},8,["legend"])):x("",!0),o(Ye,{class:"mt-4"},{default:n(()=>[e(W).length>0?(t(),r("div",Wl,[s("span",Zl,c(e(W).length)+" run"+c(e(W).length>1?"s":"")+" selected ",1),e(W).length===2?(t(),h(ie,{key:0,icon:"i-lucide-git-compare-arrows",size:"sm",color:"primary",label:"Compare selected runs",onClick:_t})):(t(),r("span",er," Select another run to compare ")),o(ie,{size:"xs",variant:"ghost",color:"neutral",icon:"i-lucide-x",label:"Clear",onClick:a[4]||(a[4]=l=>W.value=[])})])):x("",!0),e(F).length>0?(t(),h(it,{key:1,data:e(F),columns:bt,ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"select-cell":n(({row:l})=>[s("input",{type:"checkbox",checked:He(l.original.id),class:"cursor-pointer size-4 accent-primary",onClick:Jt(Ce=>ft(l.original.id),["stop"])},null,8,tr)]),"id-cell":n(({row:l})=>[s("div",sr,[s("a",{href:`/test-runs/${l.original.id}`,class:"text-primary hover:underline font-medium",onClick:Jt(Ce=>("navigateTo"in i?i.navigateTo:e(Bt))(`/test-runs/${l.original.id}`),["prevent"])}," Run #"+c(l.original.id),9,nr),l.original.label?(t(),r("span",ar,c(l.original.label),1)):x("",!0)])]),"status-cell":n(({row:l})=>[o(Ts,{status:l.original.status},null,8,["status"])]),"isFullRun-header":n(()=>[s("span",or,[a[23]||(a[23]=d("Scope ",-1)),o(Ne,{topic:"run.partial"})])]),"isFullRun-cell":n(({row:l})=>[o(js,{text:de(l.original)},{default:n(()=>[o(Rt,{name:l.original.isFullRun===!1?"i-lucide-list-filter":"i-lucide-list-checks",class:se(["size-4 shrink-0 cursor-help",l.original.isFullRun===!1?"text-amber-500":"text-green-500"])},null,8,["name","class"])]),_:2},1032,["text"])]),"browsers-cell":n(({row:l})=>[l.original.browsers?.length?(t(),r("div",lr,[(t(!0),r(H,null,Y(l.original.browsers,Ce=>(t(),h(Ss,{key:Ce,browser:{projectName:Ce},size:"sm"},null,8,["browser"]))),128))])):x("",!0)]),"startTime-cell":n(({row:l})=>[o(ws,{date:l.original.startTime,class:"text-xs text-gray-600"},null,8,["date"])]),"environment-cell":n(({row:l})=>[l.original.environment?(t(),h(re,{key:0,color:"info",variant:"subtle",size:"sm"},{default:n(()=>[d(c(l.original.environment),1)]),_:2},1024)):x("",!0)]),"metadata-cell":n(({row:l})=>[me(l.original)||l.original.metadata?.scm?.commit?(t(),r("div",rr,[me(l.original)?(t(),r("button",{key:0,type:"button",title:`Filter runs on ${me(l.original)}`,class:se(["text-xs font-medium px-1.5 py-0.5 rounded cursor-pointer transition-colors max-w-[12rem] truncate",V(me(l.original))?"bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300":"bg-gray-100 dark:bg-gray-800 hover:bg-gray-200 dark:hover:bg-gray-700"]),onClick:Ce=>Ee(me(l.original))},c(me(l.original)),11,ir)):x("",!0),l.original.metadata?.scm?.commit?(t(),r("code",cr,c(l.original.metadata.scm.commit.substring(0,7)),1)):x("",!0)])):x("",!0)]),"duration-cell":n(({row:l})=>[s("div",ur,[o(Rs,{passed:l.original.passedTests,failed:l.original.failedTests,skipped:l.original.skippedTests,flaky:l.original.flakyTests,"did-not-run":l.original.didNotRunTests??0,total:l.original.totalTests},null,8,["passed","failed","skipped","flaky","did-not-run","total"]),o(Me,{ms:l.original.duration,class:"text-xs text-gray-500"},null,8,["ms"])])]),"reports-cell":n(({row:l})=>[o(As,{reports:l.original.reports},null,8,["reports"])]),"actions-header":n(()=>[...a[24]||(a[24]=[s("div",{class:"text-right"},"Actions",-1)])]),"actions-cell":n(({row:l})=>[s("div",dr,[o(ie,{to:`/test-runs/${l.original.id}`,size:"sm",variant:"outline"},{default:n(()=>[...a[25]||(a[25]=[d(" View ",-1)])]),_:1},8,["to"]),o(ie,{size:"sm",color:"error",variant:"soft",icon:"i-lucide-trash-2",loading:e(D)===l.original.id,onClick:Ce=>b.value=l.original.id},{default:n(()=>[...a[26]||(a[26]=[d(" Delete ",-1)])]),_:1},8,["loading","onClick"])])]),_:1},8,["data"])):e(u)?.testRuns&&e(u).testRuns.length>0?(t(),r("div",mr," No test runs match the selected environment filter. ")):(t(),h(Ds,{key:3,icon:"i-lucide-rocket",text:"No test runs yet for this project."},{default:n(()=>[s("p",pr,[a[28]||(a[28]=d(" Point the reporter's ",-1)),a[29]||(a[29]=s("code",{class:"bg-gray-100 dark:bg-gray-800 px-1 rounded"},"projectName",-1)),a[30]||(a[30]=d(" at ",-1)),s("code",gr,c(e(u)?.name),1),a[31]||(a[31]=d(" to send results here — see the ",-1)),o(zs,{to:"reporter","no-icon":"",class:"text-primary hover:underline"},{default:n(()=>[...a[27]||(a[27]=[d("reporter docs",-1)])]),_:1}),a[32]||(a[32]=d(" for setup instructions. ",-1))])]),_:1}))]),_:1})])):x("",!0),e(K)==="failure-clusters"?(t(),r("div",fr,[e(K)==="failure-clusters"?(t(),r(H,{key:0},[(t(),h(Ms,{key:`sug-${e(ue)}`,"project-id":String(e(_)),onMerged:a[5]||(a[5]=l=>ue.value++)},null,8,["project-id"])),(t(),h(Is,{key:e(ue),"project-id":String(e(_))},null,8,["project-id"]))],64)):x("",!0)])):x("",!0),e(K)==="flaky-tests"?(t(),r("div",_r,[e(K)==="flaky-tests"?(t(),h(Us,{key:0,"project-id":String(e(_)),environment:e(ae),branch:e(ht),"project-name":e(u)?.name},null,8,["project-id","environment","branch","project-name"])):x("",!0)])):x("",!0),e(K)==="performance"?(t(),r("div",vr,[s("div",yr,[a[33]||(a[33]=s("span",{class:"text-sm text-muted shrink-0"},"Date range:",-1)),o(At,{modelValue:e(ze),"onUpdate:modelValue":a[6]||(a[6]=l=>ee(ze)?ze.value=l:null),type:"date",size:"sm",placeholder:"From",class:"w-40"},null,8,["modelValue"]),a[34]||(a[34]=s("span",{class:"text-sm text-muted"},"to",-1)),o(At,{modelValue:e(De),"onUpdate:modelValue":a[7]||(a[7]=l=>ee(De)?De.value=l:null),type:"date",size:"sm",placeholder:"To",class:"w-40"},null,8,["modelValue"]),e(ze)||e(De)?(t(),h(ie,{key:0,size:"xs",variant:"ghost",color:"neutral",icon:"i-lucide-x",label:"Clear",onClick:a[8]||(a[8]=l=>{ze.value="",De.value=""})})):x("",!0)]),o(Ht,{title:"Performance trend",subtitle:"Duration metrics per run, newest on the right",help:"project.performance",legend:e(Yt)(e(Ut)),"data-shot":"performance-trend"},{default:n(()=>[e(fs)?(t(),h(Qt,{key:0,text:"Loading chart…"})):(t(),h(Fs,{key:1,data:e($t)||[],markers:e(Ae),onMarkerClick:Q},null,8,["data","markers"]))]),_:1},8,["legend"]),o(Ye,{"data-shot":"slowest-tests"},{header:n(()=>[s("h2",hr,[a[35]||(a[35]=d(" Slowest tests ",-1)),o(Ne,{topic:"project.slowest-tests"})]),a[36]||(a[36]=s("p",{class:"text-sm text-gray-600 mt-1"},"Top 20 slowest test cases across recent runs",-1))]),default:n(()=>[e(ot)&&e(Pe)===null?(t(),h(Qt,{key:0,text:"Loading…"})):e(Pe)&&e(Pe).length>0?(t(),h(it,{key:1,data:e(Pe),columns:_s,ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"title-cell":n(({row:l})=>[s("div",null,[s("div",xr,c(l.original.title),1),s("div",br,[o(Bs,{"file-path":l.original.filePath,"project-key":e(_),"project-name":e(u)?.name,class:"text-xs"},null,8,["file-path","project-key","project-name"])])])]),"trend-cell":n(({row:l})=>[l.original.trend==="slower"?(t(),r("span",kr,"▲ Slower")):l.original.trend==="faster"?(t(),r("span",$r,"▼ Faster")):(t(),r("span",Cr,"— Stable"))]),_:1},8,["data"])):e(Tt)?(t(),r("div",Tr," Couldn't load the slowest tests — try refreshing. ")):(t(),r("div",jr,"No slow test data available yet."))]),_:1}),o(Es,{"project-id":String(e(_)),"project-name":e(u)?.name},null,8,["project-id","project-name"]),o(Ye,null,{header:n(()=>[s("div",Sr,[s("div",null,[s("h2",wr,[a[37]||(a[37]=d(" Run comparison ",-1)),o(Ne,{topic:"project.run-compare"})]),a[38]||(a[38]=s("p",{class:"text-sm text-gray-600 mt-1"},"Compare duration changes between two runs",-1))]),e(ge).length>=2?(t(),h(ie,{key:0,icon:"i-lucide-git-compare-arrows",size:"sm",variant:"outline",label:"Compare latest vs previous",onClick:Kt})):x("",!0)])]),default:n(()=>[s("div",Rr,[s("div",Ar,[s("div",null,[a[39]||(a[39]=s("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Run A (baseline)",-1)),o(ct,{modelValue:e(oe),"onUpdate:modelValue":a[9]||(a[9]=l=>ee(oe)?oe.value=l:null),items:e(ge),placeholder:"Select run A..."},null,8,["modelValue","items"])]),s("div",null,[a[40]||(a[40]=s("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Run B (comparison)",-1)),o(ct,{modelValue:e(le),"onUpdate:modelValue":a[10]||(a[10]=l=>ee(le)?le.value=l:null),items:e(ge),placeholder:"Select run B..."},null,8,["modelValue","items"])])]),e(lt)?(t(),r("div",zr,[o(Rt,{name:"i-lucide-loader-2",class:"animate-spin mr-2"}),a[41]||(a[41]=d(" Loading run data… ",-1))])):e(oe)&&e(le)&&e(rt).length>0?(t(),r("div",Dr,[s("div",Mr,[o(re,{color:"success",variant:"soft",size:"lg"},{default:n(()=>[d(c(e(te).improved)+" improved",1)]),_:1}),o(re,{color:"error",variant:"soft",size:"lg"},{default:n(()=>[d(c(e(te).regressed)+" regressed",1)]),_:1}),o(re,{color:"neutral",variant:"soft",size:"lg"},{default:n(()=>[d(c(e(te).unchanged)+" unchanged",1)]),_:1})]),o(it,{data:e(rt),columns:qt,ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"statusA-cell":n(({row:l})=>[l.original.statusA?(t(),h(re,{key:1,color:("getStatusColor"in i?i.getStatusColor:e(ut))(l.original.statusA),variant:"subtle",class:"capitalize"},{default:n(()=>[d(c(l.original.statusA),1)]),_:2},1032,["color"])):(t(),r("span",Ir,"—"))]),"statusB-cell":n(({row:l})=>[l.original.statusB?(t(),h(re,{key:1,color:("getStatusColor"in i?i.getStatusColor:e(ut))(l.original.statusB),variant:"subtle",class:"capitalize"},{default:n(()=>[d(c(l.original.statusB),1)]),_:2},1032,["color"])):(t(),r("span",Ur,"—"))]),"durationA-cell":n(({row:l})=>[l.original.durationA!==null?(t(),h(Me,{key:0,ms:l.original.durationA},null,8,["ms"])):(t(),r("span",Fr,"—"))]),"durationB-cell":n(({row:l})=>[l.original.durationB!==null?(t(),h(Me,{key:0,ms:l.original.durationB},null,8,["ms"])):(t(),r("span",Br,"—"))]),"delta-cell":n(({row:l})=>[l.original.delta===null?(t(),r("span",Er,"—")):(t(),r("span",{key:1,class:se(l.original.delta>0?"text-red-600":l.original.delta<0?"text-green-600":"text-gray-500")},[d(c(l.original.delta>0?"+":""),1),o(Me,{ms:l.original.delta,"unit-class":"opacity-60"},null,8,["ms"])],2))]),"percentChange-cell":n(({row:l})=>[l.original.percentChange===null?(t(),r("span",Pr,"—")):(t(),r("span",{key:1,class:se(l.original.percentChange>10?"text-red-600 font-medium":l.original.percentChange<-10?"text-green-600 font-medium":"text-gray-500")},c(l.original.percentChange>0?"+":"")+c(l.original.percentChange)+"% ",3))]),_:1},8,["data"])])):!e(oe)||!e(le)?(t(),r("div",Nr," Select two runs to compare their performance. ")):(t(),r("div",Lr," No overlapping test cases found between the selected runs. "))])]),_:1})])):x("",!0),e(K)==="test-cases"?(t(),r("div",Or,[o(Ps,{"project-id":e(_),"project-name":e(u)?.name,"sync-query":"",onTotal:a[11]||(a[11]=l=>kt.value=l)},null,8,["project-id","project-name"])])):x("",!0),e(K)==="compare"?(t(),r("div",Vr,[o(Ye,null,{header:n(()=>[s("div",Kr,[s("p",qr,[a[42]||(a[42]=d(" Compare two test runs side-by-side — status changes and duration deltas ",-1)),o(Ne,{topic:"project.compare"})]),e(ge).length>=2?(t(),h(ie,{key:0,icon:"i-lucide-git-compare-arrows",size:"sm",variant:"outline",label:"Latest vs previous",onClick:Kt})):x("",!0)])]),default:n(()=>[s("div",Hr,[s("div",Qr,[s("div",null,[a[43]||(a[43]=s("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Run A (baseline)",-1)),o(ct,{modelValue:e(oe),"onUpdate:modelValue":a[12]||(a[12]=l=>ee(oe)?oe.value=l:null),items:e(ge),placeholder:"Select run A..."},null,8,["modelValue","items"])]),s("div",null,[a[44]||(a[44]=s("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Run B (comparison)",-1)),o(ct,{modelValue:e(le),"onUpdate:modelValue":a[13]||(a[13]=l=>ee(le)?le.value=l:null),items:e(ge),placeholder:"Select run B..."},null,8,["modelValue","items"])])]),e(lt)?(t(),r("div",Xr,[o(Rt,{name:"i-lucide-loader-2",class:"animate-spin mr-2"}),a[45]||(a[45]=d(" Loading run data… ",-1))])):e(oe)&&e(le)&&e(rt).length>0?(t(),r("div",Gr,[s("div",Jr,[s("div",Yr,[a[46]||(a[46]=s("span",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mr-1"},"Status changes",-1)),e(te).newFailures>0?(t(),h(re,{key:0,color:"error",variant:"soft",size:"lg"},{default:n(()=>[d(c(e(te).newFailures)+" new failure"+c(e(te).newFailures>1?"s":""),1)]),_:1})):x("",!0),e(te).recovered>0?(t(),h(re,{key:1,color:"success",variant:"soft",size:"lg"},{default:n(()=>[d(c(e(te).recovered)+" recovered ",1)]),_:1})):x("",!0),e(te).stillFailing>0?(t(),h(re,{key:2,color:"warning",variant:"soft",size:"lg"},{default:n(()=>[d(c(e(te).stillFailing)+" still failing ",1)]),_:1})):x("",!0),e(te).newFailures===0&&e(te).recovered===0&&e(te).stillFailing===0?(t(),r("span",Wr,"No status changes")):x("",!0)]),s("div",Zr,[a[47]||(a[47]=s("span",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mr-1"},"Duration changes",-1)),e(te).regressed>0?(t(),h(re,{key:0,color:"error",variant:"soft",size:"lg"},{default:n(()=>[d(c(e(te).regressed)+" regressed ",1)]),_:1})):x("",!0),e(te).improved>0?(t(),h(re,{key:1,color:"success",variant:"soft",size:"lg"},{default:n(()=>[d(c(e(te).improved)+" improved ",1)]),_:1})):x("",!0),o(re,{color:"neutral",variant:"soft",size:"lg"},{default:n(()=>[d(c(e(te).unchanged)+" unchanged ",1)]),_:1})])]),o(it,{data:e(rt),columns:qt,ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"statusA-cell":n(({row:l})=>[l.original.statusA?(t(),h(re,{key:1,color:("getStatusColor"in i?i.getStatusColor:e(ut))(l.original.statusA),variant:"subtle",class:"capitalize"},{default:n(()=>[d(c(l.original.statusA),1)]),_:2},1032,["color"])):(t(),r("span",ei,"—"))]),"statusB-cell":n(({row:l})=>[l.original.statusB?(t(),h(re,{key:1,color:("getStatusColor"in i?i.getStatusColor:e(ut))(l.original.statusB),variant:"subtle",class:"capitalize"},{default:n(()=>[d(c(l.original.statusB),1)]),_:2},1032,["color"])):(t(),r("span",ti,"—"))]),"durationA-cell":n(({row:l})=>[l.original.durationA!==null?(t(),h(Me,{key:0,ms:l.original.durationA},null,8,["ms"])):(t(),r("span",si,"—"))]),"durationB-cell":n(({row:l})=>[l.original.durationB!==null?(t(),h(Me,{key:0,ms:l.original.durationB},null,8,["ms"])):(t(),r("span",ni,"—"))]),"delta-cell":n(({row:l})=>[l.original.delta===null?(t(),r("span",ai,"—")):(t(),r("span",{key:1,class:se(l.original.delta>0?"text-red-600":l.original.delta<0?"text-green-600":"text-gray-500")},[d(c(l.original.delta>0?"+":""),1),o(Me,{ms:l.original.delta,"unit-class":"opacity-60"},null,8,["ms"])],2))]),"percentChange-cell":n(({row:l})=>[l.original.percentChange===null?(t(),r("span",oi,"—")):(t(),r("span",{key:1,class:se(l.original.percentChange>10?"text-red-600 font-medium":l.original.percentChange<-10?"text-green-600 font-medium":"text-gray-500")},c(l.original.percentChange>0?"+":"")+c(l.original.percentChange)+"% ",3))]),_:1},8,["data"])])):!e(oe)||!e(le)?(t(),r("div",li," Select two runs to compare test results. ")):(t(),r("div",ri," No overlapping test cases found between the selected runs. "))])]),_:1})])):x("",!0),e(K)==="spec-health"?(t(),r("div",ii,[o(Ns,{"project-id":String(e(_))},null,8,["project-id"])])):x("",!0),e(K)==="ai-steps"?(t(),r("div",ci,[o(Ls,{"project-id":String(e(_))},null,8,["project-id"])])):x("",!0),e(K)==="quarantine"?(t(),r("div",ui,[o(Os,{"project-id":String(e(_)),"project-name":e(u)?.name},null,8,["project-id","project-name"])])):x("",!0),e(K)==="members"?(t(),r("div",di,[o(Ye,null,{header:n(()=>[s("div",mi,[s("p",pi,[a[48]||(a[48]=d(" Users with access to this project ",-1)),o(Ne,{topic:"project.members"})]),o(ie,{label:"Save changes",icon:"i-lucide-check",size:"sm",disabled:!e(J),onClick:p},null,8,["disabled"])])]),default:n(()=>[e(G).length>0?(t(),r("div",gi,[(t(!0),r(H,null,Y(e(G),l=>(t(),r("div",{key:l.id,class:"flex items-center justify-between rounded-lg border border-default px-4 py-3"},[s("div",null,[s("div",fi,c(l.name||l.username),1),s("div",_i,[s("span",null,"@"+c(l.username),1),o(re,{color:l.role==="administrator"?"primary":l.role==="reporter"?"info":"neutral",variant:"subtle",size:"xs"},{default:n(()=>[d(c(l.role),1)]),_:2},1032,["color"]),l.global?(t(),r("span",vi,"Global access")):x("",!0)])]),l.role!=="administrator"?(t(),h(Vs,{key:0,"model-value":e(C).includes(l.id),disabled:l.global,title:l.global?"Has global access — remove global assignment first":"",onChange:Ce=>q(l.id)},null,8,["model-value","disabled","title","onChange"])):(t(),r("span",yi,"Admin"))]))),128))])):(t(),r("div",hi,"Loading members…"))]),_:1})])):x("",!0),e(K)==="timeline"?(t(),r("div",xi,[o(Ks,{"project-id":Number(e(_)),markers:e(Re),environments:e(Xe),"can-edit":e(at),"focus-marker-id":e(Ge),onChanged:e(nt),onClearFocus:a[14]||(a[14]=l=>Ge.value=null)},null,8,["project-id","markers","environments","can-edit","focus-marker-id","onChanged"])])):x("",!0)])]),_:1}),o(Gt,null,{default:n(()=>[o(Xt,{open:e(v),title:"Delete project","onUpdate:open":a[17]||(a[17]=l=>{l||(v.value=!1)})},{body:n(()=>[s("div",bi,[s("p",ki,[a[49]||(a[49]=d(" This will permanently delete ",-1)),s("strong",null,c(e(u)?.label||e(u)?.name),1),a[50]||(a[50]=d(" and all its test runs, reports, traces, and failure clusters. This action cannot be undone. ",-1))]),s("div",null,[s("label",$i,[a[51]||(a[51]=d(" Type the project key ",-1)),s("code",Ci,c(e(u)?.name),1),a[52]||(a[52]=d(" to confirm: ",-1))]),o(At,{modelValue:e(y),"onUpdate:modelValue":a[15]||(a[15]=l=>ee(y)?y.value=l:null),placeholder:e(u)?.name,autofocus:"",onKeydown:Zs(P,["enter"])},null,8,["modelValue","placeholder"])])])]),footer:n(()=>[o(ie,{color:"neutral",variant:"ghost",label:"Cancel",onClick:a[16]||(a[16]=l=>v.value=!1)}),o(ie,{color:"error",label:"Delete project",icon:"i-lucide-trash-2",disabled:!e(M),loading:e(w),onClick:P},null,8,["disabled","loading"])]),_:1},8,["open"])]),_:1}),o(Gt,null,{default:n(()=>[o(Xt,{open:e(b)!==null,title:"Delete test run","onUpdate:open":a[20]||(a[20]=l=>{l||(b.value=null)})},{body:n(()=>[s("p",null,[a[53]||(a[53]=d(" Are you sure you want to delete ",-1)),s("strong",null,"Run #"+c(e(b)),1),a[54]||(a[54]=d("? This will also remove all associated test results, reports, and traces. This action cannot be undone. ",-1))])]),footer:n(()=>[o(ie,{color:"neutral",variant:"ghost",label:"Cancel",onClick:a[18]||(a[18]=l=>b.value=null)}),o(ie,{color:"error",label:"Delete",icon:"i-lucide-trash-2",loading:e(D)===e(b),onClick:a[19]||(a[19]=l=>O(e(b)))},null,8,["loading"])]),_:1},8,["open"])]),_:1})],64)}}});export{Ac as default};
|