@piwitests/server 0.18.1 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{BaDv5D7A.js → -09h6CA9.js} +1 -1
- package/.output/public/_nuxt/279D2RYp.js +1 -0
- package/.output/public/_nuxt/81InBX9v.js +1 -0
- package/.output/public/_nuxt/{CRpbGS75.js → Ar3IelOY.js} +1 -1
- package/.output/public/_nuxt/B33iXw77.js +1 -0
- package/.output/public/_nuxt/B3B9Ii2A.js +1 -0
- package/.output/public/_nuxt/B3HO8kuh.js +1 -0
- package/.output/public/_nuxt/B44A4LSJ.js +1 -0
- package/.output/public/_nuxt/{CPZ5wygb.js → B7NBP1C-.js} +1 -1
- package/.output/public/_nuxt/{Db_-yjYg.js → B9WhzpKO.js} +1 -1
- package/.output/public/_nuxt/{DoYgYLOd.js → BCMuIgP5.js} +1 -1
- package/.output/public/_nuxt/BDicZ1gQ.js +1 -0
- package/.output/public/_nuxt/BJ0XQElc.js +1 -0
- package/.output/public/_nuxt/{D4SFgXAf.js → BMvCSA6h.js} +1 -1
- package/.output/public/_nuxt/BPQoBGg5.js +1 -0
- package/.output/public/_nuxt/BPRffDuo.js +1 -0
- package/.output/public/_nuxt/BSIxhGsh.js +1 -0
- package/.output/public/_nuxt/BVaxh6Nl.js +4 -0
- package/.output/public/_nuxt/{BReNbog6.js → BX9ZXe98.js} +1 -1
- package/.output/public/_nuxt/{rm7OkgDG.js → BYDaY0Z7.js} +1 -1
- package/.output/public/_nuxt/{WAaPPk0g.js → Bc8mOoz9.js} +2 -2
- package/.output/public/_nuxt/BccXfBfI.js +1 -0
- package/.output/public/_nuxt/{Dbg8z684.js → BeLWlVK0.js} +1 -1
- package/.output/public/_nuxt/{CP0vUzbd.js → BfTuX0wq.js} +1 -1
- package/.output/public/_nuxt/BjaRappk.js +1 -0
- package/.output/public/_nuxt/{D3MWm6JP.js → Bn0YQDyy.js} +1 -1
- package/.output/public/_nuxt/Bp5ELvx9.js +1 -0
- package/.output/public/_nuxt/BpUaY9nH.js +2 -0
- package/.output/public/_nuxt/BqV0l12c.js +1 -0
- package/.output/public/_nuxt/{D8YZvjas.js → Bti38m-M.js} +1 -1
- package/.output/public/_nuxt/{DVgMaBxD.js → Bu2aaVIY.js} +3 -3
- package/.output/public/_nuxt/{CUDeMcEK.js → BuMC3WjZ.js} +1 -1
- package/.output/public/_nuxt/{Bi3i470l.js → BxCKKeYs.js} +1 -1
- package/.output/public/_nuxt/{BTYiG93l.js → C-elpgyr.js} +1 -1
- package/.output/public/_nuxt/C2_3mdPC.js +1 -0
- package/.output/public/_nuxt/{BoC6qaRF.js → C5iG7O4O.js} +4 -4
- package/.output/public/_nuxt/C7P1UCO2.js +1 -0
- package/.output/public/_nuxt/{BuuvTH9e.js → C95YAaJq.js} +1 -1
- package/.output/public/_nuxt/{DOr_4nln.js → C9_jrmk9.js} +2 -2
- package/.output/public/_nuxt/CDk0q2hV.js +2 -0
- package/.output/public/_nuxt/{DIA_NAIv.js → CGNkHojN.js} +3 -3
- package/.output/public/_nuxt/CHEFCN8Q.js +1 -0
- package/.output/public/_nuxt/CHNwfU1y.js +1 -0
- package/.output/public/_nuxt/CK_2LZBS.js +1 -0
- package/.output/public/_nuxt/CNFYDQmj.js +1 -0
- package/.output/public/_nuxt/{BfoG8R5a.js → CTxDO9fB.js} +1 -1
- package/.output/public/_nuxt/{B1CB30tg.js → CU5S9GCh.js} +1 -1
- package/.output/public/_nuxt/{BKaU95es.js → CUtJobDm.js} +1 -1
- package/.output/public/_nuxt/CV9-fTmY.js +1 -0
- package/.output/public/_nuxt/{BAkJhSAW.js → CYsTqbBS.js} +1 -1
- package/.output/public/_nuxt/{AjuKBlzz.js → CZfMdzfk.js} +1 -1
- package/.output/public/_nuxt/{lowCGL2S.js → Cdff9XNh.js} +1 -1
- package/.output/public/_nuxt/{quV6tp4n.js → ClOqkAcc.js} +1 -1
- package/.output/public/_nuxt/{Doul3p1_.js → CpjgB2aY.js} +1 -1
- package/.output/public/_nuxt/CrwJAwhk.js +1 -0
- package/.output/public/_nuxt/CtQBsNUb.js +1 -0
- package/.output/public/_nuxt/CuSVQEkS.js +3 -0
- package/.output/public/_nuxt/{wQZj69OY.js → CylWPruw.js} +1 -1
- package/.output/public/_nuxt/CzGyac8q.js +1 -0
- package/.output/public/_nuxt/D-c8ZSws.js +1 -0
- package/.output/public/_nuxt/{B6IHiVa1.js → D0HNloZ9.js} +1 -1
- package/.output/public/_nuxt/{ClIKZ4qY.js → D55D4EYo.js} +1 -1
- package/.output/public/_nuxt/{Bi9DO8jm.js → DDDpCFpF.js} +1 -1
- package/.output/public/_nuxt/{va1mwSm9.js → DEFEpYzn.js} +1 -1
- package/.output/public/_nuxt/DGfAxLHV.js +1 -0
- package/.output/public/_nuxt/DHDtnj7p.js +1 -0
- package/.output/public/_nuxt/DLSrtpsA.js +1 -0
- package/.output/public/_nuxt/DP8hfJ9h.js +1 -0
- package/.output/public/_nuxt/DS636elg.js +1 -0
- package/.output/public/_nuxt/{D51_cB9D.js → DT53RWbC.js} +1 -1
- package/.output/public/_nuxt/DVDXJYq2.js +2 -0
- package/.output/public/_nuxt/DW0xl3I6.js +17 -0
- package/.output/public/_nuxt/{BEB2Mv6B.js → DX-MDGb3.js} +1 -1
- package/.output/public/_nuxt/DcmZRa_F.js +1 -0
- package/.output/public/_nuxt/DgE2YE3R.js +1 -0
- package/.output/public/_nuxt/Dgf5N4Ng.js +1 -0
- package/.output/public/_nuxt/DiOLdHBC.js +1 -0
- package/.output/public/_nuxt/DiZyJYez.js +1 -0
- package/.output/public/_nuxt/Dk9fwOCm.js +34 -0
- package/.output/public/_nuxt/{DRE6Aqqp.js → Dnpkl-1q.js} +1 -1
- package/.output/public/_nuxt/DoUy4UHi.js +44 -0
- package/.output/public/_nuxt/{empGC_x-.js → DprVVyUQ.js} +1 -1
- package/.output/public/_nuxt/{BVDBIVAQ.js → DslPMqfa.js} +1 -1
- package/.output/public/_nuxt/{Vnfkr1pJ.js → FUXhyidq.js} +1 -1
- package/.output/public/_nuxt/HXerICAi.js +79 -0
- package/.output/public/_nuxt/{Do6zIWQf.js → IvQlbZk6.js} +1 -1
- package/.output/public/_nuxt/{n-QWmQgc.js → Jo8kRmHz.js} +1 -1
- package/.output/public/_nuxt/{BsDB_eCd.js → KnfsST6Y.js} +1 -1
- package/.output/public/_nuxt/NQikbhmK.js +253 -0
- package/.output/public/_nuxt/OSduWzyz.js +1 -0
- package/.output/public/_nuxt/SfMRXW25.js +5 -0
- package/.output/public/_nuxt/{mlAADjK3.js → SlIRLREZ.js} +2 -2
- package/.output/public/_nuxt/TagBadge.By1E6r4y.css +1 -0
- package/.output/public/_nuxt/WsxFTEFq.js +10 -0
- package/.output/public/_nuxt/YVN7WG7q.js +1 -0
- package/.output/public/_nuxt/{CRcjGmf7.js → ZFiQCMUB.js} +1 -1
- package/.output/public/_nuxt/aQgs_c6e.js +9 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/ab473028-4b37-4884-b243-b8f6e5046e5e.json +1 -0
- package/.output/public/_nuxt/{Dwp3GkV-.js → cHAnlQbv.js} +1 -1
- package/.output/public/_nuxt/dYCKgE-3.js +5 -0
- package/.output/public/_nuxt/{DnThe2U0.js → eaVkJRSa.js} +1 -1
- package/.output/public/_nuxt/entry.CPhW41mh.css +1 -0
- package/.output/public/_nuxt/{DoFSKAvY.js → eptP4pGv.js} +1 -1
- package/.output/public/_nuxt/fVcG504p.js +1 -0
- package/.output/public/_nuxt/g26aVPxc.js +1 -0
- package/.output/public/_nuxt/{wGpfdK6o.js → ndShiWE8.js} +1 -1
- package/.output/public/_nuxt/nv9-6vBK.js +1 -0
- package/.output/public/_nuxt/rWNTSFD6.js +3 -0
- package/.output/public/_nuxt/tvgqrYDd.js +1 -0
- package/.output/public/_nuxt/{DCMFuzDI.js → y17lMTFy.js} +1 -1
- package/.output/public/_nuxt/{DM_YaJgJ.js → ybDYeNxd.js} +1 -1
- package/.output/public/_nuxt/{B_aSGB8S.js → zQyPuvV1.js} +1 -1
- package/.output/public/demo/seed.version.json +2 -2
- package/.output/server/chunks/_/ai-prompt-preview.mjs +38 -0
- package/.output/server/chunks/_/ai-prompt-preview.mjs.map +1 -0
- package/.output/server/chunks/_/collect.mjs +122 -0
- package/.output/server/chunks/_/collect.mjs.map +1 -0
- package/.output/server/chunks/_/import-runs.mjs +351 -0
- package/.output/server/chunks/_/import-runs.mjs.map +1 -0
- package/.output/server/chunks/_/markers.mjs +1 -1
- package/.output/server/chunks/_/quarantine.mjs +112 -0
- package/.output/server/chunks/_/quarantine.mjs.map +1 -0
- package/.output/server/chunks/_/users.mjs +1 -1
- package/.output/server/chunks/build/{Alert-Bp1Wz_sq.mjs → Alert-C4xq8lao.mjs} +2 -2
- package/.output/server/chunks/build/Alert-C4xq8lao.mjs.map +1 -0
- package/.output/server/chunks/build/{Breadcrumb-C9ZPTLym.mjs → Breadcrumb-Ak2Lg3oM.mjs} +3 -3
- package/.output/server/chunks/build/Breadcrumb-Ak2Lg3oM.mjs.map +1 -0
- package/.output/server/chunks/build/{BreadcrumbNav-C3y42Vun.mjs → BreadcrumbNav-DO7I_z-n.mjs} +3 -3
- package/.output/server/chunks/build/BreadcrumbNav-DO7I_z-n.mjs.map +1 -0
- package/.output/server/chunks/build/{BrowserBadge-DNCp9pF-.mjs → BrowserBadge-D33lqUcj.mjs} +5 -5
- package/.output/server/chunks/build/BrowserBadge-D33lqUcj.mjs.map +1 -0
- package/.output/server/chunks/build/{ChartCard-Fr557IbV.mjs → ChartCard-Y1UKwMsf.mjs} +2 -2
- package/.output/server/chunks/build/ChartCard-Y1UKwMsf.mjs.map +1 -0
- package/.output/server/chunks/build/{Checkbox-cVOSIY93.mjs → Checkbox-DvUBGagc.mjs} +8 -8
- package/.output/server/chunks/build/Checkbox-DvUBGagc.mjs.map +1 -0
- package/.output/server/chunks/build/{CiEnvCard-DXPOhdSG.mjs → CiEnvCard-CrjOM17n.mjs} +25 -34
- package/.output/server/chunks/build/CiEnvCard-CrjOM17n.mjs.map +1 -0
- package/.output/server/chunks/build/{CodeBlock-BGwNmJ8J.mjs → CodeBlock-BgE-NSmE.mjs} +7 -22
- package/.output/server/chunks/build/CodeBlock-BgE-NSmE.mjs.map +1 -0
- package/.output/server/chunks/build/{DashboardNavbar-Bdp-OwTN.mjs → DashboardNavbar-BHmMSPX7.mjs} +3 -3
- package/.output/server/chunks/build/DashboardNavbar-BHmMSPX7.mjs.map +1 -0
- package/.output/server/chunks/build/{DashboardSidebarToggle-Ji6ADuqF.mjs → DashboardSidebarToggle-DCTnHiIv.mjs} +3 -3
- package/.output/server/chunks/build/DashboardSidebarToggle-DCTnHiIv.mjs.map +1 -0
- package/.output/server/chunks/build/{DataLocationCard-D6xSOrme.mjs → DataLocationCard-B_YHdzSz.mjs} +3 -3
- package/.output/server/chunks/build/DataLocationCard-B_YHdzSz.mjs.map +1 -0
- package/.output/server/chunks/build/{DiagnosisPanel-DV1xwGu4.mjs → DiagnosisPanel-B646dK4p.mjs} +17 -528
- package/.output/server/chunks/build/DiagnosisPanel-B646dK4p.mjs.map +1 -0
- package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs +43 -0
- package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs.map +1 -0
- package/.output/server/chunks/build/{EmptyState-DV3oT_xz.mjs → EmptyState-Dtlab7S9.mjs} +3 -3
- package/.output/server/chunks/build/EmptyState-Dtlab7S9.mjs.map +1 -0
- package/.output/server/chunks/build/{EntityLinks-DeOP13Kr.mjs → EntityLinks-D3fp57pR.mjs} +6 -6
- package/.output/server/chunks/build/EntityLinks-D3fp57pR.mjs.map +1 -0
- package/.output/server/chunks/build/{EnvManagedBadge-Qpn58Nmr.mjs → EnvManagedBadge-Bg3FSiU1.mjs} +3 -3
- package/.output/server/chunks/build/EnvManagedBadge-Bg3FSiU1.mjs.map +1 -0
- package/.output/server/chunks/build/{FormField-B-GSn_VR.mjs → FormField-B0HKsdMd.mjs} +3 -3
- package/.output/server/chunks/build/FormField-B0HKsdMd.mjs.map +1 -0
- package/.output/server/chunks/build/{HelpHint-YEMWtKu1.mjs → HelpHint-DrcIv-Oj.mjs} +53 -6
- package/.output/server/chunks/build/HelpHint-DrcIv-Oj.mjs.map +1 -0
- package/.output/server/chunks/build/{Label-DBvbHd3A.mjs → Label-DYDR1Oeh.mjs} +2 -2
- package/.output/server/chunks/build/Label-DYDR1Oeh.mjs.map +1 -0
- package/.output/server/chunks/build/{MiniRunBars-C3HG-EYm.mjs → MiniRunBars-CZMugDrh.mjs} +2 -2
- package/.output/server/chunks/build/MiniRunBars-CZMugDrh.mjs.map +1 -0
- package/.output/server/chunks/build/{Modal-CfA78Hm1.mjs → Modal-Ck2XLt8d.mjs} +2 -2
- package/.output/server/chunks/build/Modal-Ck2XLt8d.mjs.map +1 -0
- package/.output/server/chunks/build/{OpenInIdeLink-B92wosXu.mjs → OpenInIdeLink-C4MXA8ya.mjs} +6 -6
- package/.output/server/chunks/build/{OpenInIdeLink-B92wosXu.mjs.map → OpenInIdeLink-C4MXA8ya.mjs.map} +1 -1
- package/.output/server/chunks/build/{ProjectTestCasesTable-9Ia825h8.mjs → ProjectTestCasesTable-CxfQ5wtN.mjs} +120 -45
- package/.output/server/chunks/build/ProjectTestCasesTable-CxfQ5wtN.mjs.map +1 -0
- package/.output/server/chunks/build/{RovingFocusItem-CxhHdNGo.mjs → RovingFocusItem-BJSzTBjy.mjs} +2 -2
- package/.output/server/chunks/build/RovingFocusItem-BJSzTBjy.mjs.map +1 -0
- package/.output/server/chunks/build/{RunReports-BpJqLHY9.mjs → RunReports-DFLv51TX.mjs} +8 -6
- package/.output/server/chunks/build/RunReports-DFLv51TX.mjs.map +1 -0
- package/.output/server/chunks/build/{RunStatusBadge-BhmJ_RKM.mjs → RunStatusBadge-FfGb6bkW.mjs} +3 -2
- package/.output/server/chunks/build/RunStatusBadge-FfGb6bkW.mjs.map +1 -0
- package/.output/server/chunks/build/{SectionCard-COd9TuDq.mjs → SectionCard-CN-v0FZ_.mjs} +2 -2
- package/.output/server/chunks/build/SectionCard-CN-v0FZ_.mjs.map +1 -0
- package/.output/server/chunks/build/{Select-ppPz926C.mjs → Select-CUqj50wi.mjs} +4 -4
- package/.output/server/chunks/build/Select-CUqj50wi.mjs.map +1 -0
- package/.output/server/chunks/build/{SelectMenu-799c_Ils.mjs → SelectMenu-Db7osY7J.mjs} +4 -4
- package/.output/server/chunks/build/{SelectMenu-799c_Ils.mjs.map → SelectMenu-Db7osY7J.mjs.map} +1 -1
- package/.output/server/chunks/build/{Separator-CxZdx8kw.mjs → Separator-CR4WcEKD.mjs} +2 -2
- package/.output/server/chunks/build/Separator-CR4WcEKD.mjs.map +1 -0
- package/.output/server/chunks/build/{SettingsField-DDD4oqys.mjs → SettingsField-D6iEYbEc.mjs} +6 -6
- package/.output/server/chunks/build/SettingsField-D6iEYbEc.mjs.map +1 -0
- package/.output/server/chunks/build/{Slideover-B95Rj237.mjs → Slideover-DgCa80mf.mjs} +3 -3
- package/.output/server/chunks/build/Slideover-DgCa80mf.mjs.map +1 -0
- package/.output/server/chunks/build/{Switch-xQQ3_ME1.mjs → Switch-CgUioOYB.mjs} +5 -5
- package/.output/server/chunks/build/Switch-CgUioOYB.mjs.map +1 -0
- package/.output/server/chunks/build/{Table-CPhhVzDv.mjs → Table-BRk04Hd2.mjs} +3 -3
- package/.output/server/chunks/build/Table-BRk04Hd2.mjs.map +1 -0
- package/.output/server/chunks/build/{Tabs-BV9XqjoO.mjs → Tabs-Bbsg9wag.mjs} +3 -3
- package/.output/server/chunks/build/Tabs-Bbsg9wag.mjs.map +1 -0
- package/.output/server/chunks/build/TagBadge-DwzoFCBb.mjs +31 -0
- package/.output/server/chunks/build/TagBadge-DwzoFCBb.mjs.map +1 -0
- package/.output/server/chunks/build/TagBadge-styles.jhuZ4NjP.mjs +8 -0
- package/.output/server/chunks/build/TagBadge-styles.jhuZ4NjP.mjs.map +1 -0
- package/.output/server/chunks/build/{TestCaseHistoryChart-DMb-xSJa.mjs → TestCaseHistoryChart-nMLPhdvD.mjs} +6 -6
- package/.output/server/chunks/build/TestCaseHistoryChart-nMLPhdvD.mjs.map +1 -0
- package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs +200 -0
- package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs.map +1 -0
- package/.output/server/chunks/build/{TestStatusBar-CEzt76wk.mjs → TestStatusBar-j6h2Jp6A.mjs} +15 -15
- package/.output/server/chunks/build/TestStatusBar-j6h2Jp6A.mjs.map +1 -0
- package/.output/server/chunks/build/{Textarea-DrrqQUVG.mjs → Textarea-Dv2-lOvW.mjs} +2 -2
- package/.output/server/chunks/build/Textarea-Dv2-lOvW.mjs.map +1 -0
- package/.output/server/chunks/build/{Tooltip-7vwuDPrZ.mjs → Tooltip-BOazooWP.mjs} +3 -3
- package/.output/server/chunks/build/Tooltip-BOazooWP.mjs.map +1 -0
- package/.output/server/chunks/build/{VisuallyHiddenInput-C9eJVpPW.mjs → VisuallyHiddenInput-D6kBJxVd.mjs} +2 -2
- package/.output/server/chunks/build/VisuallyHiddenInput-D6kBJxVd.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-B2yirIuA.mjs → _id_-B78ky13D.mjs} +798 -358
- package/.output/server/chunks/build/_id_-B78ky13D.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-bWcP2xFl.mjs → _id_-BHh65pfg.mjs} +690 -443
- package/.output/server/chunks/build/_id_-BHh65pfg.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-B4V5fop6.mjs → _id_-Rzkqx55x.mjs} +297 -60
- package/.output/server/chunks/build/{_id_-B4V5fop6.mjs.map → _id_-Rzkqx55x.mjs.map} +1 -1
- package/.output/server/chunks/build/{_id_-CE0Gso6i.mjs → _id_-z5N6HPyC.mjs} +89 -40
- package/.output/server/chunks/build/_id_-z5N6HPyC.mjs.map +1 -0
- package/.output/server/chunks/build/{about-CoJjvUwM.mjs → about-CvSP73Ug.mjs} +100 -52
- package/.output/server/chunks/build/about-CvSP73Ug.mjs.map +1 -0
- package/.output/server/chunks/build/{account-Cn-eZqXM.mjs → account-DAfvaD-F.mjs} +21 -9
- package/.output/server/chunks/build/account-DAfvaD-F.mjs.map +1 -0
- package/.output/server/chunks/build/{ai-7jdaPOmj.mjs → ai-B4VJ9K1K.mjs} +45 -23
- package/.output/server/chunks/build/{ai-7jdaPOmj.mjs.map → ai-B4VJ9K1K.mjs.map} +1 -1
- package/.output/server/chunks/build/{analytics-B276WPeU.mjs → analytics-CJPC6t4L.mjs} +65 -39
- package/.output/server/chunks/build/{analytics-B276WPeU.mjs.map → analytics-CJPC6t4L.mjs.map} +1 -1
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/compare-RxHSOdsO.mjs +12 -0
- package/.output/server/chunks/build/{db.client-aHcD0wyX.mjs → db.client-CQoVTYB9.mjs} +83 -5
- package/.output/server/chunks/build/db.client-CQoVTYB9.mjs.map +1 -0
- package/.output/server/chunks/build/{default-BSzdkM_L.mjs → default-zvbFgDJG.mjs} +36 -24
- package/.output/server/chunks/build/default-zvbFgDJG.mjs.map +1 -0
- package/.output/server/chunks/build/{docs-BN_x1OW3.mjs → docs-DyuVEgtB.mjs} +30 -49
- package/.output/server/chunks/build/{docs-BN_x1OW3.mjs.map → docs-DyuVEgtB.mjs.map} +1 -1
- package/.output/server/chunks/build/{edit-C9Z7oZeu.mjs → edit-CFR5g2Qf.mjs} +30 -18
- package/.output/server/chunks/build/edit-CFR5g2Qf.mjs.map +1 -0
- package/.output/server/chunks/build/{fetch-8kznMtBM.mjs → fetch-B4FwBOzu.mjs} +3 -3
- package/.output/server/chunks/build/fetch-B4FwBOzu.mjs.map +1 -0
- package/.output/server/chunks/build/{forgot-password-BqPF4Rxs.mjs → forgot-password-CC__1OnV.mjs} +17 -5
- package/.output/server/chunks/build/forgot-password-CC__1OnV.mjs.map +1 -0
- package/.output/server/chunks/build/{help-content-DmFnuhNu.mjs → help-content-C876a9WD.mjs} +37 -8
- package/.output/server/chunks/build/help-content-C876a9WD.mjs.map +1 -0
- package/.output/server/chunks/build/import-CZo3djDi.mjs +1021 -0
- package/.output/server/chunks/build/import-CZo3djDi.mjs.map +1 -0
- package/.output/server/chunks/build/{index-CULN3-en.mjs → index-CU2nZhAa.mjs} +113 -42
- package/.output/server/chunks/build/index-CU2nZhAa.mjs.map +1 -0
- package/.output/server/chunks/build/{index-DVUtBexc.mjs → index-D7fe97l3.mjs} +1305 -281
- package/.output/server/chunks/build/index-D7fe97l3.mjs.map +1 -0
- package/.output/server/chunks/build/{index-BR9hw6qk.mjs → index-Stqw0dEI.mjs} +50 -30
- package/.output/server/chunks/build/index-Stqw0dEI.mjs.map +1 -0
- package/.output/server/chunks/build/{index-BK9PTRpd.mjs → index-gCw_y4ZJ.mjs} +87 -70
- package/.output/server/chunks/build/{index-BK9PTRpd.mjs.map → index-gCw_y4ZJ.mjs.map} +1 -1
- package/.output/server/chunks/build/{index-Ba-Fifra.mjs → index-tR6owKzj.mjs} +18 -6
- package/.output/server/chunks/build/index-tR6owKzj.mjs.map +1 -0
- package/.output/server/chunks/build/{isValueEqualOrExist-DBZjbD_3.mjs → isValueEqualOrExist-D2qw9YEr.mjs} +3 -3
- package/.output/server/chunks/build/isValueEqualOrExist-D2qw9YEr.mjs.map +1 -0
- package/.output/server/chunks/build/{login-D2XZDuek.mjs → login-Da4u1IlW.mjs} +19 -7
- package/.output/server/chunks/build/login-Da4u1IlW.mjs.map +1 -0
- package/.output/server/chunks/build/{mcp-_o6cMS6m.mjs → mcp-B3IUvRgD.mjs} +27 -21
- package/.output/server/chunks/build/mcp-B3IUvRgD.mjs.map +1 -0
- package/.output/server/chunks/build/{notifications-Dzm9c0u_.mjs → notifications-abDv0id8.mjs} +27 -21
- package/.output/server/chunks/build/notifications-abDv0id8.mjs.map +1 -0
- package/.output/server/chunks/build/pr-feedback-DjZID6q-.mjs +368 -0
- package/.output/server/chunks/build/pr-feedback-DjZID6q-.mjs.map +1 -0
- package/.output/server/chunks/build/{reset-password-gpFzIEDj.mjs → reset-password-BmrUS4ZD.mjs} +17 -5
- package/.output/server/chunks/build/reset-password-BmrUS4ZD.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +238 -36
- package/.output/server/chunks/build/{settings-pNyPBXVa.mjs → settings-Du7YqF8i.mjs} +23 -10
- package/.output/server/chunks/build/settings-Du7YqF8i.mjs.map +1 -0
- package/.output/server/chunks/build/{settings-metadata-B0wo5R-W.mjs → settings-metadata-DrEqWcW-.mjs} +11 -2
- package/.output/server/chunks/build/settings-metadata-DrEqWcW-.mjs.map +1 -0
- package/.output/server/chunks/build/{storage-XelzuyPy.mjs → storage-B4vzxd8G.mjs} +41 -31
- package/.output/server/chunks/build/storage-B4vzxd8G.mjs.map +1 -0
- package/.output/server/chunks/build/styles.mjs +1 -0
- package/.output/server/chunks/build/{tags-DrCQ7QSw.mjs → tags-DauTe_F-.mjs} +22 -10
- package/.output/server/chunks/build/tags-DauTe_F-.mjs.map +1 -0
- package/.output/server/chunks/build/{test-cases-pmOxi-AN.mjs → test-cases-DUvaO1He.mjs} +38 -24
- package/.output/server/chunks/build/test-cases-DUvaO1He.mjs.map +1 -0
- package/.output/server/chunks/build/{timeout-hygiene-CNs71Iah.mjs → timeout-hygiene-CbnSaVbK.mjs} +20 -8
- package/.output/server/chunks/build/timeout-hygiene-CbnSaVbK.mjs.map +1 -0
- package/.output/server/chunks/build/{useAiStatus-ZO987RY7.mjs → useAiStatus-CWvIo32Q.mjs} +89 -89
- package/.output/server/chunks/build/useAiStatus-CWvIo32Q.mjs.map +1 -0
- package/.output/server/chunks/build/{useCopy-BQQKcwlq.mjs → useCopy-CeKWgHyT.mjs} +2 -2
- package/.output/server/chunks/build/useCopy-CeKWgHyT.mjs.map +1 -0
- package/.output/server/chunks/build/{PageStateCard-Bwee6JTk.mjs → useCopyRich-BemRsKgv.mjs} +418 -39
- package/.output/server/chunks/build/useCopyRich-BemRsKgv.mjs.map +1 -0
- package/.output/server/chunks/build/useDesktopDownload-D49JRQSw.mjs +46 -0
- package/.output/server/chunks/build/useDesktopDownload-D49JRQSw.mjs.map +1 -0
- package/.output/server/chunks/build/{useFormControl-BLpq1s4O.mjs → useFormControl-CZ9So7iX.mjs} +2 -2
- package/.output/server/chunks/build/useFormControl-CZ9So7iX.mjs.map +1 -0
- package/.output/server/chunks/build/{useOpenInIde-kMZ7Jw5c.mjs → useOpenInIde-4GFf-kdi.mjs} +2 -2
- package/.output/server/chunks/build/useOpenInIde-4GFf-kdi.mjs.map +1 -0
- package/.output/server/chunks/build/{useSettingsNav-NjI2seBy.mjs → useSettingsNav-C3O866KC.mjs} +6 -6
- package/.output/server/chunks/build/useSettingsNav-C3O866KC.mjs.map +1 -0
- package/.output/server/chunks/build/{useTreeViewCookie-DVYpxW-p.mjs → useTreeViewCookie-CQjQdTkH.mjs} +2 -2
- package/.output/server/chunks/build/useTreeViewCookie-CQjQdTkH.mjs.map +1 -0
- package/.output/server/chunks/build/{users-NmAUZs3i.mjs → users-CTUqXyGh.mjs} +22 -10
- package/.output/server/chunks/build/users-CTUqXyGh.mjs.map +1 -0
- package/.output/server/chunks/build/{virtualizer-ZaqK4guJ.mjs → virtualizer-Cd1hhlxC.mjs} +5 -5
- package/.output/server/chunks/build/virtualizer-Cd1hhlxC.mjs.map +1 -0
- package/.output/server/chunks/build/{wasted-time-CguAF9zc.mjs → wasted-time-lYkx5YO4.mjs} +26 -14
- package/.output/server/chunks/build/wasted-time-lYkx5YO4.mjs.map +1 -0
- package/.output/server/chunks/nitro/nitro.mjs +4914 -1102
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/__piwi/session.get.mjs +13 -1
- package/.output/server/chunks/routes/__piwi/session.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs +12 -0
- package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/admin/stats.get.mjs +12 -0
- package/.output/server/chunks/routes/api/admin/stats.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/ai/status.get.mjs +12 -0
- package/.output/server/chunks/routes/api/ai/status.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +12 -0
- package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/change-password.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/change-password.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/login.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/login.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/logout.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/logout.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/me.get.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/me.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/reset-password.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/reset-password.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/setup.get.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/setup.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/setup.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/setup.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/verify-email.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +12 -0
- package/.output/server/chunks/routes/api/channels/_id/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +12 -0
- package/.output/server/chunks/routes/api/channels/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +12 -0
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +12 -0
- package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs +12 -0
- package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +12 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +12 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +12 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +12 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +24 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +13 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +13 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +13 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +13 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs +64 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +13 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs +56 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +13 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +12 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +13 -1
- package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/files/_...path_.get.mjs +13 -32
- package/.output/server/chunks/routes/api/files/_...path_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +13 -1
- package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +12 -0
- package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get2.mjs +13 -1
- package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get3.mjs +13 -1
- package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get4.mjs +13 -1
- package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get5.mjs +12 -0
- package/.output/server/chunks/routes/api/index.get5.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post.mjs +12 -0
- package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post2.mjs +13 -1
- package/.output/server/chunks/routes/api/index.post2.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post3.mjs +13 -1
- package/.output/server/chunks/routes/api/index.post3.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post4.mjs +13 -1
- package/.output/server/chunks/routes/api/index.post4.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post5.mjs +13 -1
- package/.output/server/chunks/routes/api/index.post5.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post6.mjs +12 -0
- package/.output/server/chunks/routes/api/index.post6.mjs.map +1 -1
- package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +13 -1
- package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/links/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/links/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/links/_id_.patch.mjs +13 -1
- package/.output/server/chunks/routes/api/links/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/markers/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/markers/_id_.put.mjs +13 -1
- package/.output/server/chunks/routes/api/markers/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/notifications/stream.get.mjs +13 -1
- package/.output/server/chunks/routes/api/notifications/stream.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +22 -2
- package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/members.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/members.put.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/members.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs +58 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs.map +1 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs +57 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs +72 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.put.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/menu.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/menu.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/overview.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/overview.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/search.get.mjs +13 -1
- package/.output/server/chunks/routes/api/search.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/models.post.mjs +12 -0
- package/.output/server/chunks/routes/api/settings/ai/models.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/ai/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai.get.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/ai.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai.put.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/ai.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs +57 -0
- package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs +63 -0
- package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs.map +1 -0
- package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs +12 -0
- package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/smtp.get.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/smtp.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +13 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/stream.get.mjs +13 -1
- package/.output/server/chunks/routes/api/stream.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +13 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/tags/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tags/_id_.put.mjs +13 -1
- package/.output/server/chunks/routes/api/tags/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +25 -3
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs +60 -0
- package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +15 -1
- package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs +196 -0
- package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs +78 -0
- package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/test-runs/import.post.mjs +201 -0
- package/.output/server/chunks/routes/api/test-runs/import.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/recent.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/setup.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/start.post.mjs +13 -1
- package/.output/server/chunks/routes/api/test-runs/start.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +32 -15
- package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +21 -6
- package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +154 -3
- package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/traces/check.post.mjs +13 -1
- package/.output/server/chunks/routes/api/traces/check.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +12 -0
- package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/index.get.mjs +12 -0
- package/.output/server/chunks/routes/api/users/_id/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/index.post.mjs +13 -1
- package/.output/server/chunks/routes/api/users/_id/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +13 -1
- package/.output/server/chunks/routes/api/users/_id/invite.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +13 -1
- package/.output/server/chunks/routes/api/users/_id/projects.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +13 -1
- package/.output/server/chunks/routes/api/users/_id/projects.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs +12 -0
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.patch.mjs +12 -0
- package/.output/server/chunks/routes/api/users/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/version.get.mjs +13 -1
- package/.output/server/chunks/routes/api/version.get.mjs.map +1 -1
- package/.output/server/chunks/routes/mcp.post.mjs +13 -1
- package/.output/server/chunks/routes/mcp.post.mjs.map +1 -1
- package/.output/server/chunks/routes/renderer.mjs +1 -1
- package/.output/server/chunks/tasks/sweep.mjs +12 -0
- package/.output/server/chunks/tasks/sweep.mjs.map +1 -1
- package/.output/server/chunks/tasks/sweep2.mjs +12 -0
- package/.output/server/chunks/tasks/sweep2.mjs.map +1 -1
- package/.output/server/database/migrations/0039_remarkable_jean_grey.sql +2 -0
- package/.output/server/database/migrations/0040_organic_phalanx.sql +8 -0
- package/.output/server/database/migrations/0041_tense_gravity.sql +5 -0
- package/.output/server/database/migrations/0042_burly_hemingway.sql +19 -0
- package/.output/server/database/migrations/meta/0039_snapshot.json +3403 -0
- package/.output/server/database/migrations/meta/0040_snapshot.json +3457 -0
- package/.output/server/database/migrations/meta/0041_snapshot.json +3492 -0
- package/.output/server/database/migrations/meta/0042_snapshot.json +3618 -0
- package/.output/server/database/migrations/meta/_journal.json +28 -0
- package/.output/server/database/migrations-pg/0040_lazy_layla_miller.sql +2 -0
- package/.output/server/database/migrations-pg/0041_light_screwball.sql +8 -0
- package/.output/server/database/migrations-pg/0042_serious_layla_miller.sql +5 -0
- package/.output/server/database/migrations-pg/0043_wonderful_mordo.sql +19 -0
- package/.output/server/database/migrations-pg/meta/0040_snapshot.json +4060 -0
- package/.output/server/database/migrations-pg/meta/0041_snapshot.json +4123 -0
- package/.output/server/database/migrations-pg/meta/0042_snapshot.json +4153 -0
- package/.output/server/database/migrations-pg/meta/0043_snapshot.json +4308 -0
- package/.output/server/database/migrations-pg/meta/_journal.json +28 -0
- package/.output/server/index.mjs +13 -1
- package/.output/server/index.mjs.map +1 -1
- package/.output/server/node_modules/fflate/esm/index.mjs +2710 -0
- package/.output/server/node_modules/fflate/package.json +128 -0
- package/.output/server/node_modules/highlight.js/es/languages/yaml.js +213 -0
- package/.output/server/node_modules/marked/lib/marked.esm.js +72 -0
- package/.output/server/node_modules/marked/package.json +103 -0
- package/.output/server/package.json +3 -1
- package/package.json +2 -2
- package/.output/public/_nuxt/36cXPVrY.js +0 -26
- package/.output/public/_nuxt/87SGk1nu.js +0 -1
- package/.output/public/_nuxt/B6rt3IcG.js +0 -1
- package/.output/public/_nuxt/BAaSmp8J.js +0 -1
- package/.output/public/_nuxt/BBnX5xw4.js +0 -2
- package/.output/public/_nuxt/BCArQk0c.js +0 -1
- package/.output/public/_nuxt/BFjmLXYo.js +0 -8
- package/.output/public/_nuxt/BJltXwHg.js +0 -1
- package/.output/public/_nuxt/BUMZHDRC.js +0 -2
- package/.output/public/_nuxt/BdHdHyop.js +0 -34
- package/.output/public/_nuxt/BiX7c2qU.js +0 -1
- package/.output/public/_nuxt/C11lmBd4.js +0 -4
- package/.output/public/_nuxt/C4AfzZER.js +0 -47
- package/.output/public/_nuxt/C7ZVzS0K.js +0 -1
- package/.output/public/_nuxt/C8cz5feG.js +0 -1
- package/.output/public/_nuxt/C9EpbPNU.js +0 -1
- package/.output/public/_nuxt/C9ahP7km.js +0 -1
- package/.output/public/_nuxt/CBEM3L1q.js +0 -4
- package/.output/public/_nuxt/CCsl9MOZ.js +0 -1
- package/.output/public/_nuxt/CCw3Tx4S.js +0 -1
- package/.output/public/_nuxt/CGq9qR-0.js +0 -1
- package/.output/public/_nuxt/CLdGRzLL.js +0 -1
- package/.output/public/_nuxt/CTgM5Fke.js +0 -2
- package/.output/public/_nuxt/CU3W9YrI.js +0 -1
- package/.output/public/_nuxt/CYIR2GbL.js +0 -1
- package/.output/public/_nuxt/Ccit_CX1.js +0 -1
- package/.output/public/_nuxt/CiPH-swI.js +0 -1
- package/.output/public/_nuxt/ClVRQpP_.js +0 -1
- package/.output/public/_nuxt/CmbjAoQu.js +0 -1
- package/.output/public/_nuxt/Cx65B3c3.js +0 -1
- package/.output/public/_nuxt/D1ttGJfs.js +0 -5
- package/.output/public/_nuxt/D3SYPlEB.js +0 -114
- package/.output/public/_nuxt/DB3ljns7.js +0 -1
- package/.output/public/_nuxt/DC51KKt4.js +0 -1
- package/.output/public/_nuxt/DaewB_zT.js +0 -1
- package/.output/public/_nuxt/DcfRfTaA.js +0 -34
- package/.output/public/_nuxt/Dm1_3W9g.js +0 -1
- package/.output/public/_nuxt/DraETso1.js +0 -1
- package/.output/public/_nuxt/Dy4TloG3.js +0 -1
- package/.output/public/_nuxt/EltzgiyS.js +0 -1
- package/.output/public/_nuxt/HTQtMbWb.js +0 -1
- package/.output/public/_nuxt/KYucVFu7.js +0 -1
- package/.output/public/_nuxt/TBDx0s9p.js +0 -3
- package/.output/public/_nuxt/Tt5LX5Y-.js +0 -1
- package/.output/public/_nuxt/builds/meta/2f517ae9-c342-457e-b4c5-6301728179f5.json +0 -1
- package/.output/public/_nuxt/entry.ChQMshd4.css +0 -1
- package/.output/public/_nuxt/l0QnzFNM.js +0 -1
- package/.output/public/_nuxt/oFIS9u6t.js +0 -3
- package/.output/public/_nuxt/oWY3I9uX.js +0 -1
- package/.output/public/_nuxt/q0DPzLKN.js +0 -2
- package/.output/public/_nuxt/r3SBLxtE.js +0 -1
- package/.output/public/_nuxt/riEUDnED.js +0 -1
- package/.output/public/_nuxt/uaqMzXqE.js +0 -5
- package/.output/public/_nuxt/wgcgHmRR.js +0 -1
- package/.output/public/sw.js +0 -1
- package/.output/public/workbox-2fbc6a65.js +0 -1
- package/.output/server/chunks/build/Alert-Bp1Wz_sq.mjs.map +0 -1
- package/.output/server/chunks/build/Breadcrumb-C9ZPTLym.mjs.map +0 -1
- package/.output/server/chunks/build/BreadcrumbNav-C3y42Vun.mjs.map +0 -1
- package/.output/server/chunks/build/BrowserBadge-DNCp9pF-.mjs.map +0 -1
- package/.output/server/chunks/build/ChartCard-Fr557IbV.mjs.map +0 -1
- package/.output/server/chunks/build/Checkbox-cVOSIY93.mjs.map +0 -1
- package/.output/server/chunks/build/CiEnvCard-DXPOhdSG.mjs.map +0 -1
- package/.output/server/chunks/build/CodeBlock-BGwNmJ8J.mjs.map +0 -1
- package/.output/server/chunks/build/DashboardNavbar-Bdp-OwTN.mjs.map +0 -1
- package/.output/server/chunks/build/DashboardSidebarToggle-Ji6ADuqF.mjs.map +0 -1
- package/.output/server/chunks/build/DataLocationCard-D6xSOrme.mjs.map +0 -1
- package/.output/server/chunks/build/DiagnosisPanel-DV1xwGu4.mjs.map +0 -1
- package/.output/server/chunks/build/EmptyState-DV3oT_xz.mjs.map +0 -1
- package/.output/server/chunks/build/EntityLinks-DeOP13Kr.mjs.map +0 -1
- package/.output/server/chunks/build/EnvManagedBadge-Qpn58Nmr.mjs.map +0 -1
- package/.output/server/chunks/build/FormField-B-GSn_VR.mjs.map +0 -1
- package/.output/server/chunks/build/HelpHint-YEMWtKu1.mjs.map +0 -1
- package/.output/server/chunks/build/Label-DBvbHd3A.mjs.map +0 -1
- package/.output/server/chunks/build/MiniRunBars-C3HG-EYm.mjs.map +0 -1
- package/.output/server/chunks/build/Modal-CfA78Hm1.mjs.map +0 -1
- package/.output/server/chunks/build/PageStateCard-Bwee6JTk.mjs.map +0 -1
- package/.output/server/chunks/build/ProjectTestCasesTable-9Ia825h8.mjs.map +0 -1
- package/.output/server/chunks/build/RovingFocusItem-CxhHdNGo.mjs.map +0 -1
- package/.output/server/chunks/build/RunReports-BpJqLHY9.mjs.map +0 -1
- package/.output/server/chunks/build/RunStatusBadge-BhmJ_RKM.mjs.map +0 -1
- package/.output/server/chunks/build/SectionCard-COd9TuDq.mjs.map +0 -1
- package/.output/server/chunks/build/Select-ppPz926C.mjs.map +0 -1
- package/.output/server/chunks/build/Separator-CxZdx8kw.mjs.map +0 -1
- package/.output/server/chunks/build/SettingsField-DDD4oqys.mjs.map +0 -1
- package/.output/server/chunks/build/Slideover-B95Rj237.mjs.map +0 -1
- package/.output/server/chunks/build/Switch-xQQ3_ME1.mjs.map +0 -1
- package/.output/server/chunks/build/Table-CPhhVzDv.mjs.map +0 -1
- package/.output/server/chunks/build/Tabs-BV9XqjoO.mjs.map +0 -1
- package/.output/server/chunks/build/TagBadge-BDcvvGxw.mjs +0 -47
- package/.output/server/chunks/build/TagBadge-BDcvvGxw.mjs.map +0 -1
- package/.output/server/chunks/build/TestCaseHistoryChart-DMb-xSJa.mjs.map +0 -1
- package/.output/server/chunks/build/TestStatusBar-CEzt76wk.mjs.map +0 -1
- package/.output/server/chunks/build/Textarea-DrrqQUVG.mjs.map +0 -1
- package/.output/server/chunks/build/Tooltip-7vwuDPrZ.mjs.map +0 -1
- package/.output/server/chunks/build/VisuallyHiddenInput-C9eJVpPW.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-B2yirIuA.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-CE0Gso6i.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-bWcP2xFl.mjs.map +0 -1
- package/.output/server/chunks/build/about-CoJjvUwM.mjs.map +0 -1
- package/.output/server/chunks/build/account-Cn-eZqXM.mjs.map +0 -1
- package/.output/server/chunks/build/db.client-aHcD0wyX.mjs.map +0 -1
- package/.output/server/chunks/build/default-BSzdkM_L.mjs.map +0 -1
- package/.output/server/chunks/build/edit-C9Z7oZeu.mjs.map +0 -1
- package/.output/server/chunks/build/fetch-8kznMtBM.mjs.map +0 -1
- package/.output/server/chunks/build/forgot-password-BqPF4Rxs.mjs.map +0 -1
- package/.output/server/chunks/build/help-content-DmFnuhNu.mjs.map +0 -1
- package/.output/server/chunks/build/index-BR9hw6qk.mjs.map +0 -1
- package/.output/server/chunks/build/index-Ba-Fifra.mjs.map +0 -1
- package/.output/server/chunks/build/index-CULN3-en.mjs.map +0 -1
- package/.output/server/chunks/build/index-DVUtBexc.mjs.map +0 -1
- package/.output/server/chunks/build/isValueEqualOrExist-DBZjbD_3.mjs.map +0 -1
- package/.output/server/chunks/build/login-D2XZDuek.mjs.map +0 -1
- package/.output/server/chunks/build/mcp-_o6cMS6m.mjs.map +0 -1
- package/.output/server/chunks/build/notifications-Dzm9c0u_.mjs.map +0 -1
- package/.output/server/chunks/build/reset-password-gpFzIEDj.mjs.map +0 -1
- package/.output/server/chunks/build/settings-metadata-B0wo5R-W.mjs.map +0 -1
- package/.output/server/chunks/build/settings-pNyPBXVa.mjs.map +0 -1
- package/.output/server/chunks/build/storage-XelzuyPy.mjs.map +0 -1
- package/.output/server/chunks/build/tags-DrCQ7QSw.mjs.map +0 -1
- package/.output/server/chunks/build/test-cases-pmOxi-AN.mjs.map +0 -1
- package/.output/server/chunks/build/timeout-hygiene-CNs71Iah.mjs.map +0 -1
- package/.output/server/chunks/build/useAiStatus-ZO987RY7.mjs.map +0 -1
- package/.output/server/chunks/build/useCopy-BQQKcwlq.mjs.map +0 -1
- package/.output/server/chunks/build/useFormControl-BLpq1s4O.mjs.map +0 -1
- package/.output/server/chunks/build/useOpenInIde-kMZ7Jw5c.mjs.map +0 -1
- package/.output/server/chunks/build/useSettingsNav-NjI2seBy.mjs.map +0 -1
- package/.output/server/chunks/build/useTreeViewCookie-DVYpxW-p.mjs.map +0 -1
- package/.output/server/chunks/build/users-NmAUZs3i.mjs.map +0 -1
- package/.output/server/chunks/build/virtualizer-ZaqK4guJ.mjs.map +0 -1
- package/.output/server/chunks/build/wasted-time-CguAF9zc.mjs.map +0 -1
- /package/.output/public/_nuxt/{PageStateCard.BrM5HWjY.css → useCopyRich.BrM5HWjY.css} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as O,X as Q,W as ee,T as f,k as e,r as R,Y as te,S as B,o as r,f as i,g as u,U as D,V as F,az as V,C as Z,bj as z,j as k,bl as oe,bZ as ae,bk as se,b_ as x,bh as le,B as N,h as I,M as j,ac as L,aB as W,bf as re,H as ne,q as g,Z as X,$ as Y,br as ue,a0 as ie,a1 as de,a2 as pe,a3 as fe,a4 as ce,a5 as ve,bs as ye,b4 as U,b3 as me,bG as _e,bH as ge,m as A,t as M,c as E,p as h,_ as be,bv as De,F as Oe,a6 as Ce,bI as qe}from"./D3SYPlEB.js";const[w,Be]=te("DialogRoot");var we=O({inheritAttrs:!1,__name:"DialogRoot",props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1,default:!1},modal:{type:Boolean,required:!1,default:!0},unmountOnHide:{type:Boolean,required:!1,default:!0}},emits:["update:open"],setup(d,{emit:n}){const a=d,o=Q(a,"open",n,{defaultValue:a.defaultOpen,passive:a.open===void 0}),t=R(),y=R(),{modal:p,unmountOnHide:c}=ee(a);return Be({open:o,modal:p,unmountOnHide:c,openModal:()=>{o.value=!0},onOpenChange:l=>{o.value=l},onOpenToggle:()=>{o.value=!o.value},contentId:"",titleId:"",descriptionId:"",triggerElement:t,contentElement:y}),(l,m)=>f(l.$slots,"default",{open:e(o),close:()=>o.value=!1})}}),he=we,ke=O({__name:"DialogClose",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(d){const n=d;B();const a=w();return(s,o)=>(r(),i(e(F),D(n,{type:s.as==="button"?"button":void 0,onClick:o[0]||(o[0]=t=>e(a).onOpenChange(!1))}),{default:u(()=>[f(s.$slots,"default")]),_:3},16,["type"]))}}),$e=ke,Pe=O({__name:"DialogContentImpl",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(d,{emit:n}){const a=d,s=n,o=w(),{forwardRef:t,currentElement:y}=B();return o.titleId||=V(void 0,"reka-dialog-title"),o.descriptionId||=V(void 0,"reka-dialog-description"),Z(()=>{o.contentElement=y,z()!==document.body&&(o.triggerElement.value=z())}),(p,c)=>(r(),i(e(se),{"as-child":"",loop:"",trapped:a.trapFocus,present:a.present,onMountAutoFocus:c[5]||(c[5]=l=>s("openAutoFocus",l)),onUnmountAutoFocus:c[6]||(c[6]=l=>s("closeAutoFocus",l))},{default:u(()=>[k(e(oe),D({id:e(o).contentId,ref:e(t),as:p.as,"as-child":p.asChild,present:a.present,"disable-outside-pointer-events":p.disableOutsidePointerEvents,role:"dialog","aria-describedby":e(o).descriptionId,"aria-labelledby":e(o).titleId,"data-state":e(ae)(e(o).open.value)},p.$attrs,{onDismiss:c[0]||(c[0]=l=>e(o).onOpenChange(!1)),onEscapeKeyDown:c[1]||(c[1]=l=>s("escapeKeyDown",l)),onFocusOutside:c[2]||(c[2]=l=>s("focusOutside",l)),onInteractOutside:c[3]||(c[3]=l=>s("interactOutside",l)),onPointerDownOutside:c[4]||(c[4]=l=>s("pointerDownOutside",l))}),{default:u(()=>[f(p.$slots,"default")]),_:3},16,["id","as","as-child","present","disable-outside-pointer-events","aria-describedby","aria-labelledby","data-state"])]),_:3},8,["trapped","present"]))}}),J=Pe,Ee=O({__name:"DialogContentModal",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!0}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(d,{emit:n}){const a=d,s=n,o=w(),t=x(s),{forwardRef:y,currentElement:p}=B(),c=I(()=>a.present?p.value:void 0);le(c);const l=I(()=>{const{present:m,...v}=a;return v});return N(()=>a.present,(m,v)=>{!m&&v&&o.triggerElement.value?.focus()}),(m,v)=>(r(),i(J,D({...l.value,...e(t)},{ref:e(y),present:m.present,"trap-focus":e(o).open.value,"disable-outside-pointer-events":a.disableOutsidePointerEvents,onCloseAutoFocus:v[0]||(v[0]=C=>{C.defaultPrevented||(C.preventDefault(),e(o).triggerElement.value?.focus())}),onPointerDownOutside:v[1]||(v[1]=C=>{const $=C.detail.originalEvent,b=$.button===0&&$.ctrlKey===!0;($.button===2||b)&&C.preventDefault()}),onFocusOutside:v[2]||(v[2]=C=>{C.preventDefault()})}),{default:u(()=>[f(m.$slots,"default")]),_:3},16,["present","trap-focus","disable-outside-pointer-events"]))}}),Ie=Ee,Fe=O({__name:"DialogContentNonModal",props:{forceMount:{type:Boolean,required:!1},trapFocus:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!0}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(d,{emit:n}){const a=d,o=x(n);B();const t=w(),y=R(!1),p=R(!1),c=I(()=>{const{present:l,...m}=a;return m});return N(()=>a.present,(l,m)=>{!l&&m&&(y.value||t.triggerElement.value?.focus(),y.value=!1,p.value=!1)}),(l,m)=>(r(),i(J,D({...c.value,...e(o)},{present:l.present,"trap-focus":!1,"disable-outside-pointer-events":!1,onCloseAutoFocus:m[0]||(m[0]=v=>{v.defaultPrevented||(y.value||e(t).triggerElement.value?.focus(),v.preventDefault()),y.value=!1,p.value=!1}),onInteractOutside:m[1]||(m[1]=v=>{v.defaultPrevented||(y.value=!0,v.detail.originalEvent.type==="pointerdown"&&(p.value=!0));const C=v.target;e(t).triggerElement.value?.contains(C)&&v.preventDefault(),v.detail.originalEvent.type==="focusin"&&p.value&&v.preventDefault()})}),{default:u(()=>[f(l.$slots,"default")]),_:3},16,["present"]))}}),Ae=Fe,Me=O({__name:"DialogContent",props:{forceMount:{type:Boolean,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1,default:void 0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(d,{emit:n}){const a=d,s=n,o=w(),t=x(s),{forwardRef:y}=B();return(p,c)=>(r(),i(e(W),{present:p.forceMount||e(o).open.value,"force-mount":p.forceMount||!e(o).unmountOnHide.value},{default:u(({present:l})=>[e(o).modal.value?j((r(),i(Ie,D({key:0,ref:e(y),present:e(o).unmountOnHide.value||l},{...a,...e(t),...p.$attrs}),{default:u(()=>[f(p.$slots,"default")]),_:2},1040,["present"])),[[L,e(o).unmountOnHide.value||l]]):j((r(),i(Ae,D({key:1,ref:e(y),present:e(o).unmountOnHide.value||l},{...a,...e(t),...p.$attrs}),{default:u(()=>[f(p.$slots,"default")]),_:2},1040,["present"])),[[L,e(o).unmountOnHide.value||l]])]),_:3},8,["present","force-mount"]))}}),Re=Me,He=O({__name:"DialogDescription",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"p"}},setup(d){const n=d;B();const a=w();return(s,o)=>(r(),i(e(F),D(n,{id:e(a).descriptionId}),{default:u(()=>[f(s.$slots,"default")]),_:3},16,["id"]))}}),S=He,Te=O({__name:"DialogOverlayImpl",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1},present:{type:Boolean,required:!1,default:!0}},setup(d){const n=d,a=w(),s=re(n.present);return N(()=>n.present,o=>s.value=o),B(),(o,t)=>(r(),i(e(F),{as:o.as,"as-child":o.asChild,"data-state":e(a).open.value?"open":"closed",style:{"pointer-events":"auto"},onPointerdown:t[0]||(t[0]=ne(()=>{},["left","self","prevent"]))},{default:u(()=>[f(o.$slots,"default")]),_:3},8,["as","as-child","data-state"]))}}),Se=Te,Ke=O({__name:"DialogOverlay",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(d){const n=w(),{forwardRef:a}=B();return(s,o)=>e(n)?.modal.value?(r(),i(e(W),{key:0,present:s.forceMount||e(n).open.value,"force-mount":s.forceMount||!e(n).unmountOnHide.value},{default:u(({present:t})=>[j(k(Se,D(s.$attrs,{ref:e(a),as:s.as,"as-child":s.asChild,present:e(n).unmountOnHide.value||t}),{default:u(()=>[f(s.$slots,"default")]),_:2},1040,["as","as-child","present"]),[[L,e(n).unmountOnHide.value||t]])]),_:3},8,["present","force-mount"])):g("v-if",!0)}}),G=Ke,Ve=O({__name:"DialogPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(d){const n=d;return(a,s)=>(r(),i(e(ue),X(Y(n)),{default:u(()=>[f(a.$slots,"default")]),_:3},16))}}),je=Ve,Le=O({__name:"DialogTitle",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"h2"}},setup(d){const n=d,a=w();return B(),(s,o)=>(r(),i(e(F),D(n,{id:e(a).titleId}),{default:u(()=>[f(s.$slots,"default")]),_:3},16,["id"]))}}),K=Le,xe=O({__name:"DialogTrigger",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(d){const n=d,a=w(),{forwardRef:s,currentElement:o}=B();return a.contentId||=V(void 0,"reka-dialog-content"),Z(()=>{a.triggerElement.value=o.value}),(t,y)=>(r(),i(e(F),D(n,{ref:e(s),type:t.as==="button"?"button":void 0,"aria-haspopup":"dialog","aria-expanded":e(a).open.value||!1,"aria-controls":e(a).open.value?e(a).contentId:void 0,"data-state":e(a).open.value?"open":"closed",onClick:e(a).onOpenToggle}),{default:u(()=>[f(t.$slots,"default")]),_:3},16,["type","aria-expanded","aria-controls","data-state","onClick"]))}}),Ne=xe;const ze={slots:{overlay:"fixed inset-0",content:"bg-default divide-y divide-default flex flex-col focus:outline-none",header:"flex items-center gap-1.5 p-4 sm:px-6 min-h-(--ui-header-height)",wrapper:"",body:"flex-1 p-4 sm:p-6",footer:"flex items-center gap-1.5 p-4 sm:px-6",title:"text-highlighted font-semibold",description:"mt-1 text-muted text-sm",close:"absolute top-4 end-4"},variants:{transition:{true:{overlay:"data-[state=open]:animate-[fade-in_200ms_ease-out] data-[state=closed]:animate-[fade-out_200ms_ease-in]",content:"data-[state=open]:animate-[scale-in_200ms_ease-out] data-[state=closed]:animate-[scale-out_200ms_ease-in]"}},fullscreen:{true:{content:"inset-0"},false:{content:"w-[calc(100vw-2rem)] max-w-lg rounded-lg shadow-lg ring ring-default"}},overlay:{true:{overlay:"bg-elevated/75"}},scrollable:{true:{overlay:"overflow-y-auto",content:"relative"},false:{content:"fixed",body:"overflow-y-auto"}}},compoundVariants:[{scrollable:!0,fullscreen:!1,class:{overlay:"grid place-items-center p-4 sm:py-8"}},{scrollable:!1,fullscreen:!1,class:{content:"top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 max-h-[calc(100dvh-2rem)] sm:max-h-[calc(100dvh-4rem)] overflow-hidden"}}]},Ge={__name:"UModal",props:{title:{type:String,required:!1},description:{type:String,required:!1},content:{type:Object,required:!1},overlay:{type:Boolean,required:!1,default:!0},scrollable:{type:Boolean,required:!1},transition:{type:Boolean,required:!1,default:!0},fullscreen:{type:Boolean,required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},close:{type:[Boolean,Object],required:!1,default:!0},closeIcon:{type:null,required:!1},dismissible:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1},open:{type:Boolean,required:!1},defaultOpen:{type:Boolean,required:!1},modal:{type:Boolean,required:!1,default:!0},unmountOnHide:{type:Boolean,required:!1}},emits:["leave","after:leave","enter","after:enter","close:prevent","update:open"],setup(d,{emit:n}){const a=d,s=n,o=ie(),t=de("modal",a),{t:y}=pe(),p=fe(),c=ce(ve(t,"open","defaultOpen","modal","unmountOnHide"),s),l=ye(U(()=>t.portal)),m=U(()=>t.content),v=I(()=>t.dismissible?{pointerDownOutside:_=>qe(_,{scrollable:t.scrollable})}:["interactOutside","escapeKeyDown"].reduce((q,H)=>(q[H]=P=>{P.preventDefault(),s("close:prevent")},q),{})),[C,$]=me(),b=I(()=>Ce({extend:ze,...p.ui?.modal||{}})({transition:t.transition,fullscreen:t.fullscreen,overlay:t.overlay,scrollable:t.scrollable}));return(_,q)=>(r(),i(e(he),X(Y(e(c))),{default:u(({open:H,close:P})=>[k(e(C),null,{default:u(()=>[k(e(Re),D({"data-slot":"content",class:b.value.content({class:[!o.default&&e(t).class,e(t).ui?.content]})},m.value,{onEnter:q[0]||(q[0]=T=>s("enter")),onAfterEnter:q[1]||(q[1]=T=>s("after:enter")),onLeave:q[2]||(q[2]=T=>s("leave")),onAfterLeave:q[3]||(q[3]=T=>s("after:leave"))},_e(v.value)),{default:u(()=>[!e(t).title&&!o.title||!e(t).description&&!o.description||o.content?(r(),i(e(ge),{key:0},{default:u(()=>[!e(t).title&&!o.title?(r(),i(e(K),{key:0})):o.content?(r(),i(e(K),{key:1},{default:u(()=>[f(_.$slots,"title",{},()=>[A(M(e(t).title),1)])]),_:3})):g("",!0),!e(t).description&&!o.description?(r(),i(e(S),{key:2})):o.content?(r(),i(e(S),{key:3},{default:u(()=>[f(_.$slots,"description",{},()=>[A(M(e(t).description),1)])]),_:3})):g("",!0)]),_:3})):g("",!0),f(_.$slots,"content",{close:P},()=>[o.header||e(t).title||o.title||e(t).description||o.description||e(t).close||o.close?(r(),E("div",{key:0,"data-slot":"header",class:h(b.value.header({class:e(t).ui?.header}))},[f(_.$slots,"header",{close:P},()=>[e(t).title||o.title||e(t).description||o.description?(r(),E("div",{key:0,"data-slot":"wrapper",class:h(b.value.wrapper({class:e(t).ui?.wrapper}))},[e(t).title||o.title?(r(),i(e(K),{key:0,"data-slot":"title",class:h(b.value.title({class:e(t).ui?.title}))},{default:u(()=>[f(_.$slots,"title",{},()=>[A(M(e(t).title),1)])]),_:3},8,["class"])):g("",!0),e(t).description||o.description?(r(),i(e(S),{key:1,"data-slot":"description",class:h(b.value.description({class:e(t).ui?.description}))},{default:u(()=>[f(_.$slots,"description",{},()=>[A(M(e(t).description),1)])]),_:3},8,["class"])):g("",!0)],2)):g("",!0),f(_.$slots,"actions"),e(t).close||o.close?(r(),i(e($e),{key:1,"as-child":""},{default:u(()=>[f(_.$slots,"close",{ui:b.value},()=>[e(t).close?(r(),i(be,D({key:0,icon:e(t).closeIcon||e(p).ui.icons.close,color:"neutral",variant:"ghost","aria-label":e(y)("modal.close")},typeof e(t).close=="object"?e(t).close:{},{"data-slot":"close",class:b.value.close({class:e(t).ui?.close})}),null,16,["icon","aria-label","class"])):g("",!0)])]),_:2},1024)):g("",!0)])],2)):g("",!0),o.body?(r(),E("div",{key:1,"data-slot":"body",class:h(b.value.body({class:e(t).ui?.body}))},[f(_.$slots,"body",{close:P})],2)):g("",!0),o.footer?(r(),E("div",{key:2,"data-slot":"footer",class:h(b.value.footer({class:e(t).ui?.footer}))},[f(_.$slots,"footer",{close:P})],2)):g("",!0)])]),_:2},1040,["class"])]),_:2},1024),o.default?(r(),i(e(Ne),{key:0,"as-child":"",class:h(e(t).class)},{default:u(()=>[f(_.$slots,"default",{open:H})]),_:2},1032,["class"])):g("",!0),k(e(je),D(e(l),{"force-mount":e(l).disabled&&e(t).unmountOnHide===!1||void 0}),{default:u(()=>[k(e(De),null,{default:u(()=>[e(t).scrollable?(r(),i(e(G),{key:0,"data-slot":"overlay",class:h(b.value.overlay({class:e(t).ui?.overlay}))},{default:u(()=>[k(e($))]),_:1},8,["class"])):(r(),E(Oe,{key:1},[e(t).overlay?(r(),i(e(G),{key:0,"data-slot":"overlay",class:h(b.value.overlay({class:e(t).ui?.overlay}))},null,8,["class"])):g("",!0),k(e($))],64))]),_:1})]),_:1},16,["force-mount"])]),_:3},16))}};export{G as D,Ge as _,Re as a,he as b,Ne as c,je as d,K as e,S as f,$e as g};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{ap as ot,d as lt,o as tn,c as sn,i as an,k as de,t as ut,q as gt,j as dt,r as ft,h as ht,_ as Et}from"./D3SYPlEB.js";import{d as pt}from"./BUMZHDRC.js";import{u as bt}from"./D3MWm6JP.js";var $e,rn;function _t(){if(rn)return $e;rn=1;function a(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach(n=>{const s=e[n],d=typeof s;(d==="object"||d==="function")&&!Object.isFrozen(s)&&a(s)}),e}class f{constructor(n){n.data===void 0&&(n.data={}),this.data=n.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function b(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function u(e,...n){const s=Object.create(null);for(const d in e)s[d]=e[d];return n.forEach(function(d){for(const O in d)s[O]=d[O]}),s}const w="</span>",F=e=>!!e.scope,y=(e,{prefix:n})=>{if(e.startsWith("language:"))return e.replace("language:","language-");if(e.includes(".")){const s=e.split(".");return[`${n}${s.shift()}`,...s.map((d,O)=>`${d}${"_".repeat(O+1)}`)].join(" ")}return`${n}${e}`};class T{constructor(n,s){this.buffer="",this.classPrefix=s.classPrefix,n.walk(this)}addText(n){this.buffer+=b(n)}openNode(n){if(!F(n))return;const s=y(n.scope,{prefix:this.classPrefix});this.span(s)}closeNode(n){F(n)&&(this.buffer+=w)}value(){return this.buffer}span(n){this.buffer+=`<span class="${n}">`}}const P=(e={})=>{const n={children:[]};return Object.assign(n,e),n};class C{constructor(){this.rootNode=P(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(n){this.top.children.push(n)}openNode(n){const s=P({scope:n});this.add(s),this.stack.push(s)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(n){return this.constructor._walk(n,this.rootNode)}static _walk(n,s){return typeof s=="string"?n.addText(s):s.children&&(n.openNode(s),s.children.forEach(d=>this._walk(n,d)),n.closeNode(s)),n}static _collapse(n){typeof n!="string"&&n.children&&(n.children.every(s=>typeof s=="string")?n.children=[n.children.join("")]:n.children.forEach(s=>{C._collapse(s)}))}}class Z extends C{constructor(n){super(),this.options=n}addText(n){n!==""&&this.add(n)}startScope(n){this.openNode(n)}endScope(){this.closeNode()}__addSublanguage(n,s){const d=n.root;s&&(d.scope=`language:${s}`),this.add(d)}toHTML(){return new T(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function L(e){return e?typeof e=="string"?e:e.source:null}function R(e){return m("(?=",e,")")}function K(e){return m("(?:",e,")*")}function W(e){return m("(?:",e,")?")}function m(...e){return e.map(s=>L(s)).join("")}function X(e){const n=e[e.length-1];return typeof n=="object"&&n.constructor===Object?(e.splice(e.length-1,1),n):{}}function Q(...e){return"("+(X(e).capture?"":"?:")+e.map(d=>L(d)).join("|")+")"}function D(e){return new RegExp(e.toString()+"|").exec("").length-1}function Y(e,n){const s=e&&e.exec(n);return s&&s.index===0}const ee=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function $(e,{joinWith:n}){let s=0;return e.map(d=>{s+=1;const O=s;let M=L(d),c="";for(;M.length>0;){const r=ee.exec(M);if(!r){c+=M;break}c+=M.substring(0,r.index),M=M.substring(r.index+r[0].length),r[0][0]==="\\"&&r[1]?c+="\\"+String(Number(r[1])+O):(c+=r[0],r[0]==="("&&s++)}return c}).map(d=>`(${d})`).join(n)}const H=/\b\B/,fe="[a-zA-Z]\\w*",ne="[a-zA-Z_]\\w*",he="\\b\\d+(\\.\\d+)?",Ee="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",pe="\\b(0b[01]+)",Ne="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",Se=(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=m(n,/.*\b/,e.binary,/\b.*/)),u({scope:"meta",begin:n,end:/$/,relevance:0,"on:begin":(s,d)=>{s.index!==0&&d.ignoreMatch()}},e)},te={begin:"\\\\[\\s\\S]",relevance:0},Ae={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[te]},oe={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[te]},ye={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},_=function(e,n,s={}){const d=u({scope:"comment",begin:e,end:n,contains:[]},s);d.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const O=Q("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return d.contains.push({begin:m(/[ ]+/,"(",O,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),d},U=_("//","$"),G=_("/\\*","\\*/"),j=_("#","$"),se={scope:"number",begin:he,relevance:0},le={scope:"number",begin:Ee,relevance:0},Nn={scope:"number",begin:pe,relevance:0},Sn={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[te,{begin:/\[/,end:/\]/,relevance:0,contains:[te]}]},An={scope:"title",begin:fe,relevance:0},yn={scope:"title",begin:ne,relevance:0},Tn={begin:"\\.\\s*"+ne,relevance:0};var me=Object.freeze({__proto__:null,APOS_STRING_MODE:Ae,BACKSLASH_ESCAPE:te,BINARY_NUMBER_MODE:Nn,BINARY_NUMBER_RE:pe,COMMENT:_,C_BLOCK_COMMENT_MODE:G,C_LINE_COMMENT_MODE:U,C_NUMBER_MODE:le,C_NUMBER_RE:Ee,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(n,s)=>{s.data._beginMatch=n[1]},"on:end":(n,s)=>{s.data._beginMatch!==n[1]&&s.ignoreMatch()}})},HASH_COMMENT_MODE:j,IDENT_RE:fe,MATCH_NOTHING_RE:H,METHOD_GUARD:Tn,NUMBER_MODE:se,NUMBER_RE:he,PHRASAL_WORDS_MODE:ye,QUOTE_STRING_MODE:oe,REGEXP_MODE:Sn,RE_STARTERS_RE:Ne,SHEBANG:Se,TITLE_MODE:An,UNDERSCORE_IDENT_RE:ne,UNDERSCORE_TITLE_MODE:yn});function mn(e,n){e.input[e.index-1]==="."&&n.ignoreMatch()}function Rn(e,n){e.className!==void 0&&(e.scope=e.className,delete e.className)}function On(e,n){n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=mn,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,e.relevance===void 0&&(e.relevance=0))}function Mn(e,n){Array.isArray(e.illegal)&&(e.illegal=Q(...e.illegal))}function wn(e,n){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function xn(e,n){e.relevance===void 0&&(e.relevance=1)}const In=(e,n)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");const s=Object.assign({},e);Object.keys(e).forEach(d=>{delete e[d]}),e.keywords=s.keywords,e.begin=m(s.beforeMatch,R(s.begin)),e.starts={relevance:0,contains:[Object.assign(s,{endsParent:!0})]},e.relevance=0,delete s.beforeMatch},Cn=["of","and","for","in","not","or","if","then","parent","list","value"],vn="keyword";function He(e,n,s=vn){const d=Object.create(null);return typeof e=="string"?O(s,e.split(" ")):Array.isArray(e)?O(s,e):Object.keys(e).forEach(function(M){Object.assign(d,He(e[M],n,M))}),d;function O(M,c){n&&(c=c.map(r=>r.toLowerCase())),c.forEach(function(r){const g=r.split("|");d[g[0]]=[M,kn(g[0],g[1])]})}}function kn(e,n){return n?Number(n):Ln(e)?0:1}function Ln(e){return Cn.includes(e.toLowerCase())}const Ge={},ue=e=>{console.error(e)},ze=(e,...n)=>{console.log(`WARN: ${e}`,...n)},be=(e,n)=>{Ge[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),Ge[`${e}/${n}`]=!0)},Re=new Error;function Fe(e,n,{key:s}){let d=0;const O=e[s],M={},c={};for(let r=1;r<=n.length;r++)c[r+d]=O[r],M[r+d]=!0,d+=D(n[r-1]);e[s]=c,e[s]._emit=M,e[s]._multi=!0}function Bn(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw ue("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),Re;if(typeof e.beginScope!="object"||e.beginScope===null)throw ue("beginScope must be object"),Re;Fe(e,e.begin,{key:"beginScope"}),e.begin=$(e.begin,{joinWith:""})}}function Dn(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw ue("skip, excludeEnd, returnEnd not compatible with endScope: {}"),Re;if(typeof e.endScope!="object"||e.endScope===null)throw ue("endScope must be object"),Re;Fe(e,e.end,{key:"endScope"}),e.end=$(e.end,{joinWith:""})}}function Un(e){e.scope&&typeof e.scope=="object"&&e.scope!==null&&(e.beginScope=e.scope,delete e.scope)}function Pn(e){Un(e),typeof e.beginScope=="string"&&(e.beginScope={_wrap:e.beginScope}),typeof e.endScope=="string"&&(e.endScope={_wrap:e.endScope}),Bn(e),Dn(e)}function $n(e){function n(c,r){return new RegExp(L(c),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(r?"g":""))}class s{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(r,g){g.position=this.position++,this.matchIndexes[this.matchAt]=g,this.regexes.push([g,r]),this.matchAt+=D(r)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const r=this.regexes.map(g=>g[1]);this.matcherRe=n($(r,{joinWith:"|"}),!0),this.lastIndex=0}exec(r){this.matcherRe.lastIndex=this.lastIndex;const g=this.matcherRe.exec(r);if(!g)return null;const v=g.findIndex((Te,ke)=>ke>0&&Te!==void 0),x=this.matchIndexes[v];return g.splice(0,v),Object.assign(g,x)}}class d{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(r){if(this.multiRegexes[r])return this.multiRegexes[r];const g=new s;return this.rules.slice(r).forEach(([v,x])=>g.addRule(v,x)),g.compile(),this.multiRegexes[r]=g,g}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(r,g){this.rules.push([r,g]),g.type==="begin"&&this.count++}exec(r){const g=this.getMatcher(this.regexIndex);g.lastIndex=this.lastIndex;let v=g.exec(r);if(this.resumingScanAtSamePosition()&&!(v&&v.index===this.lastIndex)){const x=this.getMatcher(0);x.lastIndex=this.lastIndex+1,v=x.exec(r)}return v&&(this.regexIndex+=v.position+1,this.regexIndex===this.count&&this.considerAll()),v}}function O(c){const r=new d;return c.contains.forEach(g=>r.addRule(g.begin,{rule:g,type:"begin"})),c.terminatorEnd&&r.addRule(c.terminatorEnd,{type:"end"}),c.illegal&&r.addRule(c.illegal,{type:"illegal"}),r}function M(c,r){const g=c;if(c.isCompiled)return g;[Rn,wn,Pn,In].forEach(x=>x(c,r)),e.compilerExtensions.forEach(x=>x(c,r)),c.__beforeBegin=null,[On,Mn,xn].forEach(x=>x(c,r)),c.isCompiled=!0;let v=null;return typeof c.keywords=="object"&&c.keywords.$pattern&&(c.keywords=Object.assign({},c.keywords),v=c.keywords.$pattern,delete c.keywords.$pattern),v=v||/\w+/,c.keywords&&(c.keywords=He(c.keywords,e.case_insensitive)),g.keywordPatternRe=n(v,!0),r&&(c.begin||(c.begin=/\B|\b/),g.beginRe=n(g.begin),!c.end&&!c.endsWithParent&&(c.end=/\B|\b/),c.end&&(g.endRe=n(g.end)),g.terminatorEnd=L(g.end)||"",c.endsWithParent&&r.terminatorEnd&&(g.terminatorEnd+=(c.end?"|":"")+r.terminatorEnd)),c.illegal&&(g.illegalRe=n(c.illegal)),c.contains||(c.contains=[]),c.contains=[].concat(...c.contains.map(function(x){return Hn(x==="self"?c:x)})),c.contains.forEach(function(x){M(x,g)}),c.starts&&M(c.starts,r),g.matcher=O(g),g}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=u(e.classNameAliases||{}),M(e)}function Ze(e){return e?e.endsWithParent||Ze(e.starts):!1}function Hn(e){return e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map(function(n){return u(e,{variants:null},n)})),e.cachedVariants?e.cachedVariants:Ze(e)?u(e,{starts:e.starts?u(e.starts):null}):Object.isFrozen(e)?u(e):e}var Gn="11.11.1";class zn extends Error{constructor(n,s){super(n),this.name="HTMLInjectionError",this.html=s}}const ve=b,Ke=u,We=Symbol("nomatch"),Fn=7,Xe=function(e){const n=Object.create(null),s=Object.create(null),d=[];let O=!0;const M="Could not find the language '{}', did you forget to load/include a language module?",c={disableAutodetect:!0,name:"Plain text",contains:[]};let r={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:Z};function g(t){return r.noHighlightRe.test(t)}function v(t){let l=t.className+" ";l+=t.parentNode?t.parentNode.className:"";const p=r.languageDetectRe.exec(l);if(p){const S=re(p[1]);return S||(ze(M.replace("{}",p[1])),ze("Falling back to no-highlight mode for this block.",t)),S?p[1]:"no-highlight"}return l.split(/\s+/).find(S=>g(S)||re(S))}function x(t,l,p){let S="",I="";typeof l=="object"?(S=t,p=l.ignoreIllegals,I=l.language):(be("10.7.0","highlight(lang, code, ...args) has been deprecated."),be("10.7.0",`Please use highlight(code, options) instead.
|
|
2
|
-
https://github.com/highlightjs/highlight.js/issues/2277`),I=t,S=l),p===void 0&&(p=!0);const J={code:S,language:I};Me("before:highlight",J);const ce=J.result?J.result:Te(J.language,J.code,p);return ce.code=J.code,Me("after:highlight",ce),ce}function Te(t,l,p,S){const I=Object.create(null);function J(i,o){return i.keywords[o]}function ce(){if(!h.keywords){k.addText(A);return}let i=0;h.keywordPatternRe.lastIndex=0;let o=h.keywordPatternRe.exec(A),E="";for(;o;){E+=A.substring(i,o.index);const N=q.case_insensitive?o[0].toLowerCase():o[0],B=J(h,N);if(B){const[ie,rt]=B;if(k.addText(E),E="",I[N]=(I[N]||0)+1,I[N]<=Fn&&(Ie+=rt),ie.startsWith("_"))E+=o[0];else{const ct=q.classNameAliases[ie]||ie;V(o[0],ct)}}else E+=o[0];i=h.keywordPatternRe.lastIndex,o=h.keywordPatternRe.exec(A)}E+=A.substring(i),k.addText(E)}function we(){if(A==="")return;let i=null;if(typeof h.subLanguage=="string"){if(!n[h.subLanguage]){k.addText(A);return}i=Te(h.subLanguage,A,!0,nn[h.subLanguage]),nn[h.subLanguage]=i._top}else i=Le(A,h.subLanguage.length?h.subLanguage:null);h.relevance>0&&(Ie+=i.relevance),k.__addSublanguage(i._emitter,i.language)}function z(){h.subLanguage!=null?we():ce(),A=""}function V(i,o){i!==""&&(k.startScope(o),k.addText(i),k.endScope())}function Ve(i,o){let E=1;const N=o.length-1;for(;E<=N;){if(!i._emit[E]){E++;continue}const B=q.classNameAliases[i[E]]||i[E],ie=o[E];B?V(ie,B):(A=ie,ce(),A=""),E++}}function qe(i,o){return i.scope&&typeof i.scope=="string"&&k.openNode(q.classNameAliases[i.scope]||i.scope),i.beginScope&&(i.beginScope._wrap?(V(A,q.classNameAliases[i.beginScope._wrap]||i.beginScope._wrap),A=""):i.beginScope._multi&&(Ve(i.beginScope,o),A="")),h=Object.create(i,{parent:{value:h}}),h}function Qe(i,o,E){let N=Y(i.endRe,E);if(N){if(i["on:end"]){const B=new f(i);i["on:end"](o,B),B.isMatchIgnored&&(N=!1)}if(N){for(;i.endsParent&&i.parent;)i=i.parent;return i}}if(i.endsWithParent)return Qe(i.parent,o,E)}function nt(i){return h.matcher.regexIndex===0?(A+=i[0],1):(Pe=!0,0)}function tt(i){const o=i[0],E=i.rule,N=new f(E),B=[E.__beforeBegin,E["on:begin"]];for(const ie of B)if(ie&&(ie(i,N),N.isMatchIgnored))return nt(o);return E.skip?A+=o:(E.excludeBegin&&(A+=o),z(),!E.returnBegin&&!E.excludeBegin&&(A=o)),qe(E,i),E.returnBegin?0:o.length}function st(i){const o=i[0],E=l.substring(i.index),N=Qe(h,i,E);if(!N)return We;const B=h;h.endScope&&h.endScope._wrap?(z(),V(o,h.endScope._wrap)):h.endScope&&h.endScope._multi?(z(),Ve(h.endScope,i)):B.skip?A+=o:(B.returnEnd||B.excludeEnd||(A+=o),z(),B.excludeEnd&&(A=o));do h.scope&&k.closeNode(),!h.skip&&!h.subLanguage&&(Ie+=h.relevance),h=h.parent;while(h!==N.parent);return N.starts&&qe(N.starts,i),B.returnEnd?0:o.length}function it(){const i=[];for(let o=h;o!==q;o=o.parent)o.scope&&i.unshift(o.scope);i.forEach(o=>k.openNode(o))}let xe={};function en(i,o){const E=o&&o[0];if(A+=i,E==null)return z(),0;if(xe.type==="begin"&&o.type==="end"&&xe.index===o.index&&E===""){if(A+=l.slice(o.index,o.index+1),!O){const N=new Error(`0 width match regex (${t})`);throw N.languageName=t,N.badRule=xe.rule,N}return 1}if(xe=o,o.type==="begin")return tt(o);if(o.type==="illegal"&&!p){const N=new Error('Illegal lexeme "'+E+'" for mode "'+(h.scope||"<unnamed>")+'"');throw N.mode=h,N}else if(o.type==="end"){const N=st(o);if(N!==We)return N}if(o.type==="illegal"&&E==="")return A+=`
|
|
3
|
-
`,1;if(Ue>1e5&&Ue>o.index*3)throw new Error("potential infinite loop, way more iterations than matches");return A+=E,E.length}const q=re(t);if(!q)throw ue(M.replace("{}",t)),new Error('Unknown language: "'+t+'"');const at=$n(q);let De="",h=S||at;const nn={},k=new r.__emitter(r);it();let A="",Ie=0,ge=0,Ue=0,Pe=!1;try{if(q.__emitTokens)q.__emitTokens(l,k);else{for(h.matcher.considerAll();;){Ue++,Pe?Pe=!1:h.matcher.considerAll(),h.matcher.lastIndex=ge;const i=h.matcher.exec(l);if(!i)break;const o=l.substring(ge,i.index),E=en(o,i);ge=i.index+E}en(l.substring(ge))}return k.finalize(),De=k.toHTML(),{language:t,value:De,relevance:Ie,illegal:!1,_emitter:k,_top:h}}catch(i){if(i.message&&i.message.includes("Illegal"))return{language:t,value:ve(l),illegal:!0,relevance:0,_illegalBy:{message:i.message,index:ge,context:l.slice(ge-100,ge+100),mode:i.mode,resultSoFar:De},_emitter:k};if(O)return{language:t,value:ve(l),illegal:!1,relevance:0,errorRaised:i,_emitter:k,_top:h};throw i}}function ke(t){const l={value:ve(t),illegal:!1,relevance:0,_top:c,_emitter:new r.__emitter(r)};return l._emitter.addText(t),l}function Le(t,l){l=l||r.languages||Object.keys(n);const p=ke(t),S=l.filter(re).filter(Je).map(z=>Te(z,t,!1));S.unshift(p);const I=S.sort((z,V)=>{if(z.relevance!==V.relevance)return V.relevance-z.relevance;if(z.language&&V.language){if(re(z.language).supersetOf===V.language)return 1;if(re(V.language).supersetOf===z.language)return-1}return 0}),[J,ce]=I,we=J;return we.secondBest=ce,we}function Zn(t,l,p){const S=l&&s[l]||p;t.classList.add("hljs"),t.classList.add(`language-${S}`)}function Be(t){let l=null;const p=v(t);if(g(p))return;if(Me("before:highlightElement",{el:t,language:p}),t.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",t);return}if(t.children.length>0&&(r.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(t)),r.throwUnescapedHTML))throw new zn("One of your code blocks includes unescaped HTML.",t.innerHTML);l=t;const S=l.textContent,I=p?x(S,{language:p,ignoreIllegals:!0}):Le(S);t.innerHTML=I.value,t.dataset.highlighted="yes",Zn(t,p,I.language),t.result={language:I.language,re:I.relevance,relevance:I.relevance},I.secondBest&&(t.secondBest={language:I.secondBest.language,relevance:I.secondBest.relevance}),Me("after:highlightElement",{el:t,result:I,text:S})}function Kn(t){r=Ke(r,t)}const Wn=()=>{Oe(),be("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function Xn(){Oe(),be("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let Ye=!1;function Oe(){function t(){Oe()}if(document.readyState==="loading"){Ye||window.addEventListener("DOMContentLoaded",t,!1),Ye=!0;return}document.querySelectorAll(r.cssSelector).forEach(Be)}function Yn(t,l){let p=null;try{p=l(e)}catch(S){if(ue("Language definition for '{}' could not be registered.".replace("{}",t)),O)ue(S);else throw S;p=c}p.name||(p.name=t),n[t]=p,p.rawDefinition=l.bind(null,e),p.aliases&&je(p.aliases,{languageName:t})}function jn(t){delete n[t];for(const l of Object.keys(s))s[l]===t&&delete s[l]}function Jn(){return Object.keys(n)}function re(t){return t=(t||"").toLowerCase(),n[t]||n[s[t]]}function je(t,{languageName:l}){typeof t=="string"&&(t=[t]),t.forEach(p=>{s[p.toLowerCase()]=l})}function Je(t){const l=re(t);return l&&!l.disableAutodetect}function Vn(t){t["before:highlightBlock"]&&!t["before:highlightElement"]&&(t["before:highlightElement"]=l=>{t["before:highlightBlock"](Object.assign({block:l.el},l))}),t["after:highlightBlock"]&&!t["after:highlightElement"]&&(t["after:highlightElement"]=l=>{t["after:highlightBlock"](Object.assign({block:l.el},l))})}function qn(t){Vn(t),d.push(t)}function Qn(t){const l=d.indexOf(t);l!==-1&&d.splice(l,1)}function Me(t,l){const p=t;d.forEach(function(S){S[p]&&S[p](l)})}function et(t){return be("10.7.0","highlightBlock will be removed entirely in v12.0"),be("10.7.0","Please use highlightElement now."),Be(t)}Object.assign(e,{highlight:x,highlightAuto:Le,highlightAll:Oe,highlightElement:Be,highlightBlock:et,configure:Kn,initHighlighting:Wn,initHighlightingOnLoad:Xn,registerLanguage:Yn,unregisterLanguage:jn,listLanguages:Jn,getLanguage:re,registerAliases:je,autoDetection:Je,inherit:Ke,addPlugin:qn,removePlugin:Qn}),e.debugMode=function(){O=!1},e.safeMode=function(){O=!0},e.versionString=Gn,e.regex={concat:m,lookahead:R,either:Q,optional:W,anyNumberOfTimes:K};for(const t in me)typeof me[t]=="object"&&a(me[t]);return Object.assign(e,me),e},_e=Xe({});return _e.newInstance=()=>Xe({}),$e=_e,_e.HighlightJS=_e,_e.default=_e,$e}var Nt=_t();const ae=ot(Nt),Ce="[A-Za-z$_][0-9A-Za-z$_]*",ln=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],un=["true","false","null","undefined","NaN","Infinity"],gn=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],dn=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],fn=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],hn=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],En=[].concat(fn,gn,dn);function St(a){const f=a.regex,b=(_,{after:U})=>{const G="</"+_[0].slice(1);return _.input.indexOf(G,U)!==-1},u=Ce,w={begin:"<>",end:"</>"},F=/<[A-Za-z0-9\\._:-]+\s*\/>/,y={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(_,U)=>{const G=_[0].length+_.index,j=_.input[G];if(j==="<"||j===","){U.ignoreMatch();return}j===">"&&(b(_,{after:G})||U.ignoreMatch());let se;const le=_.input.substring(G);if(se=le.match(/^\s*=/)){U.ignoreMatch();return}if((se=le.match(/^\s+extends\s+/))&&se.index===0){U.ignoreMatch();return}}},T={$pattern:Ce,keyword:ln,literal:un,built_in:En,"variable.language":hn},P="[0-9](_?[0-9])*",C=`\\.(${P})`,Z="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",L={className:"number",variants:[{begin:`(\\b(${Z})((${C})|\\.)?|(${C}))[eE][+-]?(${P})\\b`},{begin:`\\b(${Z})\\b((${C})\\b|\\.)?|(${C})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},R={className:"subst",begin:"\\$\\{",end:"\\}",keywords:T,contains:[]},K={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[a.BACKSLASH_ESCAPE,R],subLanguage:"xml"}},W={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[a.BACKSLASH_ESCAPE,R],subLanguage:"css"}},m={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[a.BACKSLASH_ESCAPE,R],subLanguage:"graphql"}},X={className:"string",begin:"`",end:"`",contains:[a.BACKSLASH_ESCAPE,R]},D={className:"comment",variants:[a.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:u+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),a.C_BLOCK_COMMENT_MODE,a.C_LINE_COMMENT_MODE]},Y=[a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,K,W,m,X,{match:/\$\d+/},L];R.contains=Y.concat({begin:/\{/,end:/\}/,keywords:T,contains:["self"].concat(Y)});const ee=[].concat(D,R.contains),$=ee.concat([{begin:/(\s*)\(/,end:/\)/,keywords:T,contains:["self"].concat(ee)}]),H={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:T,contains:$},fe={variants:[{match:[/class/,/\s+/,u,/\s+/,/extends/,/\s+/,f.concat(u,"(",f.concat(/\./,u),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,u],scope:{1:"keyword",3:"title.class"}}]},ne={relevance:0,match:f.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...gn,...dn]}},he={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},Ee={variants:[{match:[/function/,/\s+/,u,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[H],illegal:/%/},pe={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function Ne(_){return f.concat("(?!",_.join("|"),")")}const Se={match:f.concat(/\b/,Ne([...fn,"super","import"].map(_=>`${_}\\s*\\(`)),u,f.lookahead(/\s*\(/)),className:"title.function",relevance:0},te={begin:f.concat(/\./,f.lookahead(f.concat(u,/(?![0-9A-Za-z$_(])/))),end:u,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Ae={match:[/get|set/,/\s+/,u,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},H]},oe="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+a.UNDERSCORE_IDENT_RE+")\\s*=>",ye={match:[/const|var|let/,/\s+/,u,/\s*/,/=\s*/,/(async\s*)?/,f.lookahead(oe)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[H]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:T,exports:{PARAMS_CONTAINS:$,CLASS_REFERENCE:ne},illegal:/#(?![$_A-z])/,contains:[a.SHEBANG({label:"shebang",binary:"node",relevance:5}),he,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,K,W,m,X,D,{match:/\$\d+/},L,ne,{scope:"attr",match:u+f.lookahead(":"),relevance:0},ye,{begin:"("+a.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[D,a.REGEXP_MODE,{className:"function",begin:oe,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:a.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:T,contains:$}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:w.begin,end:w.end},{match:F},{begin:y.begin,"on:begin":y.isTrulyOpeningTag,end:y.end}],subLanguage:"xml",contains:[{begin:y.begin,end:y.end,skip:!0,contains:["self"]}]}]},Ee,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+a.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[H,a.inherit(a.TITLE_MODE,{begin:u,className:"title.function"})]},{match:/\.\.\./,relevance:0},te,{match:"\\$"+u,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[H]},Se,pe,fe,Ae,{match:/\$[(.]/}]}}function At(a){const f=a.regex,b=St(a),u=Ce,w=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],F={begin:[/namespace/,/\s+/,a.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},y={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:w},contains:[b.exports.CLASS_REFERENCE]},T={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},P=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],C={$pattern:Ce,keyword:ln.concat(P),literal:un,built_in:En.concat(w),"variable.language":hn},Z={className:"meta",begin:"@"+u},L=(m,X,Q)=>{const D=m.contains.findIndex(Y=>Y.label===X);if(D===-1)throw new Error("can not find mode to replace");m.contains.splice(D,1,Q)};Object.assign(b.keywords,C),b.exports.PARAMS_CONTAINS.push(Z);const R=b.contains.find(m=>m.scope==="attr"),K=Object.assign({},R,{match:f.concat(u,f.lookahead(/\s*\?:/))});b.exports.PARAMS_CONTAINS.push([b.exports.CLASS_REFERENCE,R,K]),b.contains=b.contains.concat([Z,F,y,K]),L(b,"shebang",a.SHEBANG()),L(b,"use_strict",T);const W=b.contains.find(m=>m.label==="func.def");return W.relevance=0,Object.assign(b,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),b}const cn="[A-Za-z$_][0-9A-Za-z$_]*",yt=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],Tt=["true","false","null","undefined","NaN","Infinity"],pn=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],bn=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],_n=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],mt=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],Rt=[].concat(_n,pn,bn);function Ot(a){const f=a.regex,b=(_,{after:U})=>{const G="</"+_[0].slice(1);return _.input.indexOf(G,U)!==-1},u=cn,w={begin:"<>",end:"</>"},F=/<[A-Za-z0-9\\._:-]+\s*\/>/,y={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(_,U)=>{const G=_[0].length+_.index,j=_.input[G];if(j==="<"||j===","){U.ignoreMatch();return}j===">"&&(b(_,{after:G})||U.ignoreMatch());let se;const le=_.input.substring(G);if(se=le.match(/^\s*=/)){U.ignoreMatch();return}if((se=le.match(/^\s+extends\s+/))&&se.index===0){U.ignoreMatch();return}}},T={$pattern:cn,keyword:yt,literal:Tt,built_in:Rt,"variable.language":mt},P="[0-9](_?[0-9])*",C=`\\.(${P})`,Z="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",L={className:"number",variants:[{begin:`(\\b(${Z})((${C})|\\.)?|(${C}))[eE][+-]?(${P})\\b`},{begin:`\\b(${Z})\\b((${C})\\b|\\.)?|(${C})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},R={className:"subst",begin:"\\$\\{",end:"\\}",keywords:T,contains:[]},K={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[a.BACKSLASH_ESCAPE,R],subLanguage:"xml"}},W={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[a.BACKSLASH_ESCAPE,R],subLanguage:"css"}},m={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[a.BACKSLASH_ESCAPE,R],subLanguage:"graphql"}},X={className:"string",begin:"`",end:"`",contains:[a.BACKSLASH_ESCAPE,R]},D={className:"comment",variants:[a.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:u+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),a.C_BLOCK_COMMENT_MODE,a.C_LINE_COMMENT_MODE]},Y=[a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,K,W,m,X,{match:/\$\d+/},L];R.contains=Y.concat({begin:/\{/,end:/\}/,keywords:T,contains:["self"].concat(Y)});const ee=[].concat(D,R.contains),$=ee.concat([{begin:/(\s*)\(/,end:/\)/,keywords:T,contains:["self"].concat(ee)}]),H={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:T,contains:$},fe={variants:[{match:[/class/,/\s+/,u,/\s+/,/extends/,/\s+/,f.concat(u,"(",f.concat(/\./,u),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,u],scope:{1:"keyword",3:"title.class"}}]},ne={relevance:0,match:f.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...pn,...bn]}},he={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},Ee={variants:[{match:[/function/,/\s+/,u,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[H],illegal:/%/},pe={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function Ne(_){return f.concat("(?!",_.join("|"),")")}const Se={match:f.concat(/\b/,Ne([..._n,"super","import"].map(_=>`${_}\\s*\\(`)),u,f.lookahead(/\s*\(/)),className:"title.function",relevance:0},te={begin:f.concat(/\./,f.lookahead(f.concat(u,/(?![0-9A-Za-z$_(])/))),end:u,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Ae={match:[/get|set/,/\s+/,u,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},H]},oe="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+a.UNDERSCORE_IDENT_RE+")\\s*=>",ye={match:[/const|var|let/,/\s+/,u,/\s*/,/=\s*/,/(async\s*)?/,f.lookahead(oe)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[H]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:T,exports:{PARAMS_CONTAINS:$,CLASS_REFERENCE:ne},illegal:/#(?![$_A-z])/,contains:[a.SHEBANG({label:"shebang",binary:"node",relevance:5}),he,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,K,W,m,X,D,{match:/\$\d+/},L,ne,{scope:"attr",match:u+f.lookahead(":"),relevance:0},ye,{begin:"("+a.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[D,a.REGEXP_MODE,{className:"function",begin:oe,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:a.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:T,contains:$}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:w.begin,end:w.end},{match:F},{begin:y.begin,"on:begin":y.isTrulyOpeningTag,end:y.end}],subLanguage:"xml",contains:[{begin:y.begin,end:y.end,skip:!0,contains:["self"]}]}]},Ee,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+a.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[H,a.inherit(a.TITLE_MODE,{begin:u,className:"title.function"})]},{match:/\.\.\./,relevance:0},te,{match:"\\$"+u,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[H]},Se,pe,fe,Ae,{match:/\$[(.]/}]}}function on(a){const f=a.regex,b={},u={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[b]}]};Object.assign(b,{className:"variable",variants:[{begin:f.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},u]});const w={className:"subst",begin:/\$\(/,end:/\)/,contains:[a.BACKSLASH_ESCAPE]},F=a.inherit(a.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),y={begin:/<<-?\s*(?=\w+)/,starts:{contains:[a.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},T={className:"string",begin:/"/,end:/"/,contains:[a.BACKSLASH_ESCAPE,b,w]};w.contains.push(T);const P={match:/\\"/},C={className:"string",begin:/'/,end:/'/},Z={match:/\\'/},L={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},a.NUMBER_MODE,b]},R=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],K=a.SHEBANG({binary:`(${R.join("|")})`,relevance:10}),W={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[a.inherit(a.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},m=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],X=["true","false"],Q={match:/(\/[a-z._-]+)+/},D=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],Y=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias"],ee=["autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp"],$=["chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"];return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:m,literal:X,built_in:[...D,...Y,"set","shopt",...ee,...$]},contains:[K,a.SHEBANG(),W,L,F,y,Q,T,P,C,Z,b]}}function Mt(a){const f={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},b={match:/[{}[\],:]/,className:"punctuation",relevance:0},u=["true","false","null"],w={scope:"literal",beginKeywords:u.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{literal:u},contains:[f,b,a.QUOTE_STRING_MODE,w,a.C_NUMBER_MODE,a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}function wt(a){const f=a.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:f.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:f.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}const xt={class:"relative"},It={class:"bg-gray-50 dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-lg px-4 pt-8 pb-3 text-sm font-mono overflow-x-auto leading-relaxed"},Ct=["innerHTML"],vt={key:0,class:"absolute top-2 left-3 text-[10px] font-medium uppercase tracking-wide text-gray-400 dark:text-gray-500 select-none pointer-events-none"},kt=lt({__name:"CodeBlock",props:{code:{},lang:{}},setup(a){ae.registerLanguage("typescript",At),ae.registerLanguage("javascript",Ot),ae.registerLanguage("bash",on),ae.registerLanguage("sh",on),ae.registerLanguage("json",Mt),ae.registerLanguage("diff",wt);const f=a,{copy:b,copied:u}=bt(),w=ft(""),F=ht(()=>{if(f.lang&&ae.getLanguage(f.lang))return w.value=f.lang,ae.highlight(f.code,{language:f.lang}).value;const y=ae.highlightAuto(f.code);return w.value=y.language??"",y.value});return(y,T)=>{const P=Et;return tn(),sn("div",xt,[an("pre",It,[an("code",{class:"hljs !bg-transparent",innerHTML:de(F)},null,8,Ct)]),de(w)?(tn(),sn("span",vt,ut(de(w)),1)):gt("",!0),dt(P,{size:"xs",color:"neutral",variant:"ghost",icon:de(u)?"i-lucide-check":"i-lucide-clipboard",title:de(u)?"Copied!":("copyPreview"in y?y.copyPreview:de(pt))(a.code),class:"absolute top-1.5 right-1.5 opacity-40 hover:opacity-100 transition-opacity",onClick:T[0]||(T[0]=C=>de(b)(a.code,{toast:!0}))},null,8,["icon","title"])])}}}),Pt=Object.assign(kt,{__name:"CodeBlock"});export{ae as H,Pt as _,Mt as a,on as b,wt as d,Ot as j,At as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as ct,a as ut}from"./BAaSmp8J.js";import{_ as dt,a as mt}from"./C8cz5feG.js";import{_ as pt}from"./CUDeMcEK.js";import{_ as _t,a as ft}from"./87SGk1nu.js";import{d as gt,e as yt,b as xt,c as l,j as o,g as s,F as R,P as bt,o as a,i as c,D as vt,m as d,y as P,f as p,_ as ht,q as _,t as y,k as i,x as kt,h as N,r as x,I as jt}from"./D3SYPlEB.js";import{_ as Rt}from"./ClVRQpP_.js";import{_ as $t}from"./HTQtMbWb.js";import{_ as Ct}from"./C9EpbPNU.js";import{_ as Tt}from"./CLdGRzLL.js";import{_ as Pt}from"./DOr_4nln.js";import{_ as Nt}from"./C7ZVzS0K.js";import{_ as Dt}from"./lowCGL2S.js";import{_ as Ut}from"./KYucVFu7.js";import{_ as Ft}from"./DC51KKt4.js";import{o as St,s as D,_ as Bt}from"./BoC6qaRF.js";import{_ as Kt}from"./l0QnzFNM.js";import{h as Lt,p as wt,g as b}from"./BUMZHDRC.js";import{u as V}from"./Doul3p1_.js";import"./B6rt3IcG.js";import"./r3SBLxtE.js";import"./D3MWm6JP.js";import"./CCw3Tx4S.js";import"./Vnfkr1pJ.js";import"./Db_-yjYg.js";import"./BAkJhSAW.js";import"./DnThe2U0.js";import"./DaewB_zT.js";import"./Dbg8z684.js";import"./Cx65B3c3.js";import"./rm7OkgDG.js";const Vt={class:"flex flex-wrap items-center gap-3 mb-4"},zt={key:0,class:"flex flex-wrap items-center gap-2"},Ht={class:"text-sm text-muted shrink-0 inline-flex items-center gap-1"},It=["onClick"],qt={class:"flex flex-col gap-1"},At={class:"flex items-center gap-2"},Ot={key:0,class:"flex flex-wrap gap-1"},Mt={key:0,class:"text-xs text-gray-600 italic"},Et={key:1},Gt={key:0,class:"text-xs text-gray-600"},Qt={key:1,class:"text-xs text-gray-600 italic"},Xt={key:0,class:"flex items-center gap-1 flex-wrap"},Jt={key:0,class:"text-xs font-medium bg-gray-100 dark:bg-gray-800 px-1.5 py-0.5 rounded"},Wt={key:1,class:"text-xs text-gray-500"},Yt={key:0,class:"text-sm text-gray-600"},Zt={key:1,class:"text-xs text-gray-600 italic"},te={key:1,class:"text-xs text-gray-600 italic"},ee={key:1,class:"text-xs text-gray-600 italic"},ae={class:"flex justify-end gap-2"},se={key:1,class:"space-y-2","aria-busy":"true"},oe={key:2,class:"text-center py-12 text-gray-500"},ne={class:"text-xs text-gray-400 max-w-sm"},le={class:"flex w-full justify-end gap-2"},Ve=gt({__name:"index",setup(re){yt({title:"Projects — Piwi Dashboard"});const{data:v,refresh:U,status:z}=V("/api/projects",{key:"projects",lazy:!0,default:()=>[]},"$AIGg5yw_0K"),{data:H,refresh:I}=V("/api/tags",{lazy:!0},"$qcllBXh9C_"),F=xt(),$=N(()=>H.value?.tags||[]),q=N(()=>z.value==="pending"&&!v.value?.length),h=x(""),u=x([]),S=N(()=>{let n=v.value||[];if(h.value.trim()){const e=h.value.trim().toLowerCase();n=n.filter(m=>(m.label||m.name).toLowerCase().includes(e)||m.name.toLowerCase().includes(e))}return u.value.length>0&&(n=n.filter(e=>u.value.some(m=>(e.tags||[]).some(T=>T.id===m)))),n});function A(n){const e=u.value.indexOf(n);e===-1?u.value.push(n):u.value.splice(e,1)}function O(n){return u.value.includes(n)}const f=x(!1),M=St({name:D().min(1,"Project name is required").max(100),label:D().optional(),description:D().optional()}),r=jt({name:"",label:"",description:""}),k=x([]),C=x(!1);async function E(){if(r.name?.trim())try{C.value=!0,await $fetch("/api/projects",{method:"POST",body:{name:r.name.trim(),label:r.label?.trim()||null,description:r.description?.trim()||null,tagIds:k.value.map(n=>n.id)}}),F.add({title:"Project created",description:`Project "${r.name}" has been created`,color:"success"}),f.value=!1,r.name="",r.label="",r.description="",k.value=[],await U()}catch(n){const e=n&&typeof n=="object"&&"data"in n?n.data?.message:void 0;F.add({title:"Failed to create project",description:e||"An error occurred",color:"error"})}finally{C.value=!1}}const G=[{header:"Project",columns:[{accessorKey:"name",header:b("Name")},{accessorKey:"totalRuns",header:b("Runs")}]},{accessorKey:"latestRunData",header:"Latest run",columns:[{accessorKey:"latestRun",header:b("Date")},{accessorKey:"branch",header:"Branch"},{accessorKey:"duration",header:b("Duration")},{accessorKey:"status",header:b("Status")},{accessorKey:"testRatio",header:"Test status"},{accessorKey:"report",header:"Reports"}]},{accessorKey:"actions",header:"Project actions"}];return(n,e)=>{const m=ct,T=ut,B=dt,Q=pt,X=ft,J=vt,K=Rt,g=ht,L=kt,W=$t,Y=Ct,Z=Tt,tt=Pt,et=Nt,w=Dt,at=mt,st=Ut,ot=_t,nt=Ft,lt=Bt,rt=Kt,it=bt;return a(),l(R,null,[o(ot,{id:"projects"},{header:s(()=>[o(X,null,{leading:s(()=>[o(m),o(T,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects"}]})]),right:s(()=>[o(Q,{actions:[{label:"New project",icon:"i-lucide-plus",onClick:()=>f.value=!0},{label:"Refresh",icon:"i-lucide-refresh-cw",variant:"outline",onClick:()=>i(U)()}]},{leading:s(()=>[o(B,{topic:"projects.table",size:"sm"})]),_:1},8,["actions"])]),_:1})]),body:s(()=>[c("div",Vt,[o(J,{modelValue:h.value,"onUpdate:modelValue":e[0]||(e[0]=t=>h.value=t),icon:"i-lucide-search",placeholder:"Search projects by name...",class:"min-w-48 flex-1",ui:{base:"w-full"}},null,8,["modelValue"]),$.value.length>0?(a(),l("div",zt,[c("span",Ht,[e[10]||(e[10]=d(" Filter by tag (any match): ",-1)),o(B,{topic:"projects.tag-filter"})]),(a(!0),l(R,null,P($.value,t=>(a(),l("button",{key:t.id,type:"button",class:"cursor-pointer focus:outline-none",onClick:j=>A(t.id)},[o(K,{text:t.text,color:t.color,variant:O(t.id)?"solid":"outline"},null,8,["text","color","variant"])],8,It))),128)),u.value.length>0?(a(),p(g,{key:0,size:"xs",variant:"ghost",color:"neutral",icon:"i-lucide-x",label:"Clear filters",onClick:e[1]||(e[1]=t=>u.value=[])})):_("",!0)])):_("",!0)]),S.value.length>0?(a(),p(et,{key:0,"min-width":"60rem",bleed:!1},{default:s(()=>[o(tt,{data:S.value,columns:G,ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"name-cell":s(({row:t})=>[c("div",qt,[c("div",At,[o(L,{to:`/projects/${t.original.id}`,class:"text-primary hover:underline font-medium"},{default:s(()=>[d(y(t.original.label||t.original.name),1)]),_:2},1032,["to"])]),t.original.tags?.length?(a(),l("div",Ot,[(a(!0),l(R,null,P(t.original.tags,j=>(a(),p(K,{key:j.id,text:j.text,color:j.color},null,8,["text","color"]))),128))])):_("",!0)])]),"totalRuns-cell":s(({row:t})=>[t.original.totalRuns===0?(a(),l("span",Mt,"No data")):(a(),l("span",Et,y(t.original.totalRuns)+" runs",1))]),"latestRun-cell":s(({row:t})=>[t.original.latestRun?(a(),l("span",Gt,y(("prettyDateFormat"in n?n.prettyDateFormat:i(wt))(t.original.latestRun.startTime)),1)):(a(),l("span",Qt,"No data"))]),"branch-cell":s(({row:t})=>[t.original.latestRun?.metadata?.scm?(a(),l("div",Xt,[t.original.latestRun.metadata.scm.branch?(a(),l("span",Jt,y(t.original.latestRun.metadata.scm.branch),1)):_("",!0),t.original.latestRun.metadata.scm.commit?(a(),l("code",Wt,y(t.original.latestRun.metadata.scm.commit.substring(0,7)),1)):_("",!0)])):_("",!0)]),"duration-cell":s(({row:t})=>[t.original.latestRun?.duration!=null?(a(),l("span",Yt,y(("formatDuration"in n?n.formatDuration:i(Lt))(t.original.latestRun.duration)),1)):(a(),l("span",Zt,"No data"))]),"status-cell":s(({row:t})=>[t.original.latestRun?(a(),p(W,{key:0,status:t.original.latestRun.status},null,8,["status"])):(a(),l("span",te,"No data"))]),"testRatio-cell":s(({row:t})=>[t.original.latestRun?(a(),p(Y,{key:0,passed:t.original.latestRun.passedTests,failed:t.original.latestRun.failedTests,skipped:t.original.latestRun.skippedTests,flaky:t.original.latestRun.flakyTests,"did-not-run":t.original.latestRun.didNotRunTests??0,total:t.original.latestRun.totalTests},null,8,["passed","failed","skipped","flaky","did-not-run","total"])):(a(),l("span",ee,"No data"))]),"report-cell":s(({row:t})=>[t.original.latestRun?(a(),p(Z,{key:0,reports:t.original.latestRun.reports},null,8,["reports"])):_("",!0)]),"actions-header":s(()=>[...e[11]||(e[11]=[c("div",{class:"text-right"},"Project actions",-1)])]),"actions-cell":s(({row:t})=>[c("div",ae,[o(g,{to:`/projects/${t.original.id}`,size:"sm",variant:"outline"},{default:s(()=>[...e[12]||(e[12]=[d("View details",-1)])]),_:1},8,["to"]),o(g,{to:`/projects/${t.original.id}/edit`,size:"sm",variant:"ghost",icon:"i-lucide-pencil"},null,8,["to"])])]),_:1},8,["data"])]),_:1})):q.value?(a(),l("div",se,[e[13]||(e[13]=c("span",{class:"sr-only",role:"status"},"Loading projects…",-1)),o(w,{class:"h-10 w-full rounded-lg"}),(a(),l(R,null,P(6,t=>o(w,{key:t,class:"h-14 w-full rounded-lg"})),64))])):i(v)&&i(v).length>0?(a(),l("div",oe,[...e[14]||(e[14]=[c("p",{class:"text-lg mb-2"},"No projects match your search",-1),c("p",{class:"text-sm"},"Try adjusting your search or filters",-1)])])):(a(),p(st,{key:3,icon:"i-lucide-rocket",text:"No projects yet"},{default:s(()=>[c("p",ne,[e[17]||(e[17]=d(" Projects are created automatically once the reporter submits its first run — see the ",-1)),o(L,{to:"/",class:"text-primary hover:underline"},{default:s(()=>[...e[15]||(e[15]=[d("home page",-1)])]),_:1}),e[18]||(e[18]=d(" for a copy-paste setup snippet, or the ",-1)),o(at,{to:"reporter","no-icon":"",class:"text-primary hover:underline"},{default:s(()=>[...e[16]||(e[16]=[d("reporter docs",-1)])]),_:1}),e[19]||(e[19]=d(". ",-1))]),o(g,{icon:"i-lucide-plus",label:"New project",variant:"ghost",size:"sm",class:"mt-2",onClick:e[2]||(e[2]=t=>f.value=!0)})]),_:1}))]),_:1}),o(it,null,{default:s(()=>[o(rt,{open:f.value,title:"Create new project","onUpdate:open":e[9]||(e[9]=t=>f.value=t)},{body:s(()=>[o(lt,{schema:i(M),state:i(r)},{default:s(()=>[o(nt,{mode:"create",name:i(r).name,"onUpdate:name":e[3]||(e[3]=t=>i(r).name=t),label:i(r).label,"onUpdate:label":e[4]||(e[4]=t=>i(r).label=t),description:i(r).description,"onUpdate:description":e[5]||(e[5]=t=>i(r).description=t),tags:k.value,"onUpdate:tags":e[6]||(e[6]=t=>k.value=t),"all-tags":$.value,onTagCreated:e[7]||(e[7]=t=>i(I)())},null,8,["name","label","description","tags","all-tags"])]),_:1},8,["schema","state"])]),footer:s(()=>[c("div",le,[o(g,{color:"neutral",variant:"ghost",label:"Cancel",onClick:e[8]||(e[8]=t=>f.value=!1)}),o(g,{label:"Create project",icon:"i-lucide-plus",loading:C.value,onClick:E},null,8,["loading"])])]),_:1},8,["open"])]),_:1})],64)}}});export{Ve as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{_ as Vt}from"./BAaSmp8J.js";import{d as fe,b as ut,o as s,f as R,g as r,i as n,p as J,k as e,j as u,m as _,t as o,c as a,F as V,M as at,l as Re,ai as ot,v as ke,q as k,s as be,x as Ne,_ as _e,E as dt,y as oe,aj as Gt,h as M,r as O,G as Ie,O as he,H as Ue,n as Xe,z as He,B as me,ak as rt,D as Xt,P as ct,A as qt,u as Ae,w as je,af as Yt,C as Jt,ab as mt,a as Zt,K as Qt,e as es}from"./D3SYPlEB.js";import{_ as ft}from"./CCw3Tx4S.js";import{_ as ts}from"./Ccit_CX1.js";import{_ as ss}from"./CUDeMcEK.js";import{_ as ns,a as as}from"./87SGk1nu.js";import{_ as os,b as rs,a as ls,c as is,d as us}from"./BCArQk0c.js";import{_ as ds}from"./C9EpbPNU.js";import{_ as Se}from"./C8cz5feG.js";import{_ as gt}from"./DRE6Aqqp.js";import{_ as qe}from"./DoFSKAvY.js";import{_ as cs}from"./DCMFuzDI.js";import{u as ms,_ as fs}from"./36cXPVrY.js";import{p as pt,h as xe,k as Ve,x as gs,w as ps,d as yt,j as xt,i as Le,f as ht,a as ys,c as xs,g as ie}from"./BUMZHDRC.js";import{b as vt}from"./wQZj69OY.js";import{u as Ye}from"./D3MWm6JP.js";import{_ as hs}from"./CCsl9MOZ.js";import{_ as kt}from"./D4SFgXAf.js";import{_ as vs}from"./D8YZvjas.js";import{_ as bt}from"./Tt5LX5Y-.js";import{_ as ks}from"./CU3W9YrI.js";import{u as bs}from"./BTYiG93l.js";import{_ as _s}from"./DM_YaJgJ.js";import{_ as _t}from"./Bi3i470l.js";import{_ as wt}from"./KYucVFu7.js";import{_ as ws}from"./empGC_x-.js";import{_ as Je}from"./DOr_4nln.js";import{_ as $t}from"./C7ZVzS0K.js";import{_ as $s}from"./BdHdHyop.js";import{_ as Ct}from"./l0QnzFNM.js";import{u as Me}from"./Doul3p1_.js";import{_ as Cs}from"./DaewB_zT.js";import{_ as Rs}from"./HTQtMbWb.js";import{_ as Ts}from"./B6IHiVa1.js";import{u as Is}from"./quV6tp4n.js";import{u as Ss,s as zs}from"./DoYgYLOd.js";import"./B6rt3IcG.js";import"./Dwp3GkV-.js";import"./Do6zIWQf.js";import"./r3SBLxtE.js";import"./D7W_4Sqc.js";import"./oFIS9u6t.js";import"./DnThe2U0.js";import"./Cx65B3c3.js";import"./va1mwSm9.js";import"./wgcgHmRR.js";import"./rm7OkgDG.js";import"./BAkJhSAW.js";import"./DB3ljns7.js";import"./Vnfkr1pJ.js";import"./BuuvTH9e.js";import"./Dbg8z684.js";const Ds={class:"flex items-center gap-3 flex-1 min-w-0 justify-between"},Fs={class:"flex items-center gap-3 min-w-0"},Ps={class:"text-sm font-semibold truncate flex items-center gap-1"},js={class:"flex items-center gap-3 shrink-0 max-sm:hidden"},Ms={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Ns={class:"text-gray-700 dark:text-gray-300"},As={class:"text-xs text-green-600 dark:text-green-400 tabular-nums whitespace-nowrap"},Bs={class:"text-xs text-red-600 dark:text-red-400 tabular-nums whitespace-nowrap"},Us={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Ls={class:"text-xs text-amber-600 dark:text-amber-400 tabular-nums whitespace-nowrap",title:"Tests that never ran (maxFailures cutoff or a serial-group failure)"},Es={class:"text-xs text-orange-600 dark:text-orange-400 tabular-nums whitespace-nowrap"},Os={class:"text-xs text-gray-400 tabular-nums whitespace-nowrap"},Ws={class:"grid grid-cols-1 lg:grid-cols-12 gap-4"},Ks={class:"space-y-3"},Hs={class:"flex items-start gap-3"},Vs={class:"flex items-center gap-2.5 min-w-0 flex-1"},Gs={class:"min-w-0 flex-1"},Xs={class:"flex items-center gap-2"},qs={class:"text-base font-bold shrink-0 flex items-center gap-1"},Ys={class:"text-xs text-gray-500 ml-auto whitespace-nowrap"},Js={class:"p-2 space-y-1 min-w-32"},Zs=["onClick"],Qs={class:"grid grid-cols-3 sm:grid-cols-5 gap-2"},en={class:"text-xl font-bold mt-0.5"},tn={class:"relative"},sn={class:"text-xl font-bold mt-0.5 text-green-600 dark:text-green-400"},nn={class:"text-xl font-bold mt-0.5 text-red-600 dark:text-red-400"},an={class:"text-xl font-bold mt-0.5 text-gray-600 dark:text-gray-400"},on={class:"text-xl font-bold mt-0.5 text-amber-600 dark:text-amber-400"},rn={key:0,class:"flex items-center gap-3"},ln={class:"flex-1 max-w-md"},un={class:"flex items-center gap-3 text-xs shrink-0"},dn={class:"flex items-center gap-1"},cn={class:"font-medium tabular-nums"},mn={key:0,class:"flex items-center gap-1"},fn={class:"font-medium tabular-nums"},gn={key:1,class:"flex items-center gap-1"},pn={class:"font-medium tabular-nums text-orange-600 dark:text-orange-400"},yn={key:2,class:"flex items-center gap-1"},xn={class:"font-medium tabular-nums text-amber-600 dark:text-amber-400"},hn={key:0,class:"flex items-center gap-3"},vn={class:"flex-1 min-w-0"},kn={key:1,class:"space-y-1.5 text-sm"},bn={class:"text-xs tabular-nums text-gray-400 dark:text-gray-500 shrink-0"},_n={key:0,class:"flex items-center justify-between gap-2 min-w-0"},wn={class:"truncate"},$n={class:"text-xs tabular-nums text-gray-400 dark:text-gray-500 shrink-0"},Cn={class:"space-y-3 text-sm"},Rn={key:0},Tn={class:"flex flex-wrap gap-1.5"},In={key:1,class:"flex items-center gap-1"},Sn={key:3},zn={class:"bg-gray-50 dark:bg-gray-900 p-2.5 rounded text-xs font-mono overflow-x-auto max-h-48 overflow-y-auto"},Dn={class:"m-0"},Fn=fe({__name:"RunSummary",props:{testRun:{},displayProgress:{},allReports:{},showCustomData:{type:Boolean},finalizing:{type:Boolean},activeFilter:{},totalWastedTime:{}},emits:["update:showCustomData","filter-status","label-updated"],setup(t,{emit:b}){const w=t,F=b,$=ut(),l=M(()=>w.testRun?.storageStats),C=M(()=>!!(w.testRun?.metadata?.ci||w.testRun?.environment||w.testRun?.playwrightVersion||w.testRun?.reporterVersion)),m=M(()=>!!w.testRun?.metadata?.scm),D=M(()=>!!(l.value?.totalFiles||w.finalizing)),K=M(()=>!!(w.testRun?.metadata?.tags?.length||w.testRun?.metadata?.projectDescription||w.testRun?.metadata?.relatedIssue||w.testRun?.metadata?.customData||w.testRun?.links?.length)),{summaryColSpanClass:E,blockColSpanClass:N}=ms(()=>[C,m,D,K].filter(z=>z.value).length),{copy:I,copied:A}=Ye(),H=O("file-line"),U=O(!1),j=M(()=>w.testRun?.testCases?w.testRun.testCases.filter(z=>z.status==="failed"||z.status==="timedout").map(z=>({filePath:(z.filePath||z.location?.split(":")[0])??"",title:z.title,line:z.location&&parseInt(z.location.split(":")[1]??"",10)||null,projectName:z.browser?.projectName||null})):[]);function g(){return vt(j.value,{mode:H.value})}async function f(){const z=g();z&&(U.value=!0,await I(z,{toast:"Retry command copied"}),setTimeout(()=>{U.value=!1},2e3))}const d=M(()=>U.value?"Copied!":yt(g()));function c(){const z=w.testRun;if(!z)return"";const i=z.status==="passed"?"✅":z.status==="failed"?"❌":z.status==="running"?"🔄":"⚠️",ue=z.label?` — ${z.label}`:"",h=z.project?.label??z.project?.name??"",T=z.totalTests??0,G=z.passedTests??0,te=z.failedTests??0,de=z.skippedTests??0,Y=z.didNotRunTests??0,v=z.flakyTests??0,q=xe(z.duration),ae=v>0?` · ${v} flaky`:"",se=Y>0?` · ${Y} didn't run`:"";return[`*Run #${z.id}*${ue}`,`Status: ${i} ${z.status} | Project: ${h}`,`Tests: ${T} total · ${G} passed · ${te} failed · ${de} skipped${se}${ae}`,`Duration: ${q}`].join(`
|
|
2
|
-
`)}const S=O(""),y=O(!1),x=O(!1);let P=!1;const Q=O(null);function Z(){P=!1,S.value=w.testRun?.label??"",y.value=!0,Ie(()=>Q.value?.focus())}async function ne(){if(x.value)return;if(P){P=!1;return}const z=w.testRun;if(z){x.value=!0;try{await $fetch(`/api/test-runs/${z.id}`,{method:"PATCH",body:{label:S.value||null}}),y.value=!1,F("label-updated")}catch(i){const ue=i&&typeof i=="object"&&"data"in i?i.data?.message:"Failed to save label";$.add({title:"Error",description:ue||"Failed to save label",color:"error"})}finally{x.value=!1}}}function ee(){P=!0,y.value=!1}function B(z){z.key==="Enter"?ne():z.key==="Escape"&&ee()}return(z,i)=>{const ue=os,h=ke,T=be,G=ds,te=Se,de=gt,Y=Ne,v=ft,q=_e,ae=dt,se=qe,ge=rs,Ce=ls,re=Gt,we=is,ze=cs,ye=fs;return s(),R(ye,{"storage-key":"test-run"},{folded:r(()=>[n("div",Ds,[n("div",Fs,[u(ue,{status:t.testRun?.status??"",size:"sm"},null,8,["status"]),n("span",Ps,[_(" Run #"+o(t.testRun?.id)+" ",1),e(y)?(s(),a(V,{key:0},[at(n("input",{ref_key:"labelInputRef",ref:Q,"onUpdate:modelValue":i[0]||(i[0]=p=>Re(S)?S.value=p:null),type:"text",placeholder:"Add a label...",class:"inline-block w-40 text-sm font-normal border-b border-dashed border-gray-400 bg-transparent outline-none focus:border-primary px-0.5 py-0",onKeydown:B,onBlur:ne},null,544),[[ot,e(S)]]),e(x)?(s(),R(h,{key:0,name:"i-lucide-loader-circle",class:"size-3.5 text-gray-400 animate-spin shrink-0"})):k("",!0)],64)):(s(),a(V,{key:1},[t.testRun?.label?(s(),a("span",{key:0,class:"font-normal text-gray-500 ml-1.5 cursor-pointer hover:text-gray-700 dark:hover:text-gray-300 border-b border-dashed border-transparent hover:border-gray-400",onClick:Z},"— "+o(t.testRun.label),1)):(s(),a("button",{key:1,class:"text-xs text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 border-b border-dashed border-transparent hover:border-gray-400 ml-1",title:"Add a label",onClick:Z}," + label "))],64))]),t.testRun?.shardTotal&&t.testRun.shardTotal>1?(s(),R(T,{key:0,color:"neutral",variant:"soft",size:"sm",class:"shrink-0",title:`Shard ${t.testRun.shardsFinished??0}/${t.testRun.shardTotal}`},{default:r(()=>[u(h,{name:"i-lucide-layout-grid",class:"size-3 mr-1"}),_(" "+o(t.testRun.shardsFinished??0)+"/"+o(t.testRun.shardTotal),1)]),_:1},8,["title"])):k("",!0)]),n("div",js,[n("span",Ms,[i[12]||(i[12]=_(" T: ",-1)),n("strong",Ns,o(t.displayProgress?.totalTests??t.testRun?.totalTests??0),1)]),n("span",As,[i[13]||(i[13]=_(" P: ",-1)),n("strong",null,o(t.displayProgress?.passedTests??t.testRun?.passedTests??0),1)]),n("span",Bs,[i[14]||(i[14]=_(" F: ",-1)),n("strong",null,o(t.displayProgress?.failedTests??t.testRun?.failedTests??0),1)]),n("span",Us,[i[15]||(i[15]=_(" S: ",-1)),n("strong",null,o(t.displayProgress?.skippedTests??t.testRun?.skippedTests??0),1)]),n("span",Ls,[i[16]||(i[16]=_(" DNR: ",-1)),n("strong",null,o(t.testRun?.didNotRunTests??0),1)]),n("span",Es,[i[17]||(i[17]=_(" Fl: ",-1)),n("strong",null,o(t.testRun?.flakyTests??0),1)]),u(G,{passed:t.displayProgress?.passedTests??t.testRun?.passedTests??0,failed:t.displayProgress?.failedTests??t.testRun?.failedTests??0,skipped:t.displayProgress?.skippedTests??t.testRun?.skippedTests??0,flaky:t.testRun?.flakyTests??0,"did-not-run":t.testRun?.didNotRunTests??0,total:t.displayProgress?.totalTests??t.testRun?.totalTests??0},null,8,["passed","failed","skipped","flaky","did-not-run","total"]),n("span",Os,o(("formatDuration"in z?z.formatDuration:e(xe))(t.testRun?.duration)),1)])])]),default:r(()=>[n("div",Ws,[n("div",{class:J(e(E))},[u(se,{class:"shadow-xs h-full"},{default:r(()=>[n("div",Ks,[n("div",Hs,[n("div",Vs,[u(ue,{status:t.testRun?.status??"",size:"md"},null,8,["status"]),n("div",Gs,[n("div",Xs,[n("h2",qs,[_(" Run #"+o(t.testRun?.id)+" ",1),e(y)?(s(),a(V,{key:0},[at(n("input",{ref_key:"labelInputRef",ref:Q,"onUpdate:modelValue":i[1]||(i[1]=p=>Re(S)?S.value=p:null),type:"text",placeholder:"Add a label...",class:"inline-block w-48 text-sm font-normal border-b border-dashed border-gray-400 bg-transparent outline-none focus:border-primary px-0.5 py-0",onKeydown:B,onBlur:ne},null,544),[[ot,e(S)]]),e(x)?(s(),R(h,{key:0,name:"i-lucide-loader-circle",class:"size-3.5 text-gray-400 animate-spin shrink-0"})):k("",!0)],64)):(s(),a(V,{key:1},[t.testRun?.label?(s(),a("span",{key:0,class:"font-normal text-gray-500 ml-1.5 cursor-pointer hover:text-gray-700 dark:hover:text-gray-300 border-b border-dashed border-transparent hover:border-gray-400",onClick:Z},"— "+o(t.testRun.label),1)):(s(),a("button",{key:1,class:"text-xs text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 border-b border-dashed border-transparent hover:border-gray-400 ml-1.5",title:"Add a label",onClick:Z}," + label "))],64)),u(te,{topic:"run.summary"})]),t.testRun?.shardTotal&&t.testRun.shardTotal>1?(s(),R(T,{key:0,color:"neutral",variant:"soft",size:"sm",class:"shrink-0",title:`Shard ${t.testRun.shardsFinished??0}/${t.testRun.shardTotal}`},{default:r(()=>[u(h,{name:"i-lucide-layout-grid",class:"size-3 mr-1"}),_(" "+o(t.testRun.shardsFinished??0)+"/"+o(t.testRun.shardTotal),1)]),_:1},8,["title"])):k("",!0),t.testRun?.precedingMarker?(s(),R(v,{key:1,text:`This run started after: ${t.testRun.precedingMarker.label}`},{default:r(()=>[u(Y,{to:`/projects/${t.testRun.projectId}?tab=timeline`,class:"shrink-0 inline-flex items-center gap-1"},{default:r(()=>[i[18]||(i[18]=n("span",{class:"text-xs text-muted"},"After",-1)),u(de,{marker:t.testRun.precedingMarker,size:"xs"},null,8,["marker"])]),_:1},8,["to"])]),_:1},8,["text"])):k("",!0),n("span",Ys,o(t.testRun?.project?.label??t.testRun?.project?.name)+" · Started "+o(("prettyDateFormat"in z?z.prettyDateFormat:e(pt))(t.testRun?.startTime)),1),u(v,{text:e(A)?"Copied!":"Copy run summary"},{default:r(()=>[u(q,{size:"xs",variant:"ghost",color:"neutral",icon:e(A)?"i-lucide-check":"i-lucide-clipboard",class:"shrink-0 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300",onClick:i[2]||(i[2]=p=>e(I)(c(),{toast:"Run summary copied"}))},null,8,["icon"])]),_:1},8,["text"]),e(j).length>0?(s(),R(ae,{key:2},{content:r(()=>[n("div",Js,[i[20]||(i[20]=n("p",{class:"text-xs font-medium text-gray-500 px-2 py-1"},"Mode",-1)),(s(),a(V,null,oe(["file-line","grep","file"],p=>n("button",{key:p,class:J(["w-full text-left px-2 py-1 text-sm rounded hover:bg-gray-100 dark:hover:bg-gray-800",e(H)===p?"bg-primary/10 text-primary":""]),onClick:ve=>H.value=p},o(p==="file-line"?"File:line":p==="grep"?"Title (grep)":"File only"),11,Zs)),64))])]),default:r(()=>[u(q,{size:"xs",color:"warning",variant:"subtle",icon:e(U)?"i-lucide-check":"i-lucide-play",title:e(d),onClick:i[3]||(i[3]=p=>f())},{default:r(()=>[...i[19]||(i[19]=[_(" Retry ",-1)])]),_:1},8,["icon","title"])]),_:1})):k("",!0)])])])]),n("div",Qs,[n("button",{class:J(["rounded-lg p-3 text-left w-full transition-colors cursor-pointer",t.activeFilter==="all"?"bg-gray-200 dark:bg-gray-700 ring-2 ring-gray-400 dark:ring-gray-500":"bg-gray-50 dark:bg-gray-900 hover:bg-gray-100 dark:hover:bg-gray-800"]),onClick:i[4]||(i[4]=p=>F("filter-status","all"))},[i[21]||(i[21]=n("p",{class:"text-xs font-medium text-gray-500 uppercase tracking-wider"},"Total",-1)),n("p",en,o(t.displayProgress?.totalTests??t.testRun?.totalTests??0),1)],2),n("div",tn,[n("button",{class:J(["rounded-lg p-3 text-left w-full h-full transition-colors cursor-pointer",t.activeFilter==="passed"?"bg-green-100 dark:bg-green-900/30 ring-2 ring-green-400 dark:ring-green-600":"bg-green-50 dark:bg-green-900/20 hover:bg-green-100 dark:hover:bg-green-900/30"]),onClick:i[5]||(i[5]=p=>F("filter-status","passed"))},[i[22]||(i[22]=n("p",{class:"text-xs font-medium text-green-700 dark:text-green-400 uppercase tracking-wider"},"Passed",-1)),n("p",sn,o(t.displayProgress?.passedTests??t.testRun?.passedTests??0),1)],2),(t.testRun?.flakyTests??0)>0?(s(),a("button",{key:0,class:J(["absolute top-1.5 right-1.5 inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-xs font-semibold leading-none tabular-nums transition-colors cursor-pointer",t.activeFilter==="flaky"?"bg-orange-200 dark:bg-orange-800/60 text-orange-800 dark:text-orange-200 ring-2 ring-orange-400 dark:ring-orange-600":"bg-orange-100 dark:bg-orange-900/40 text-orange-700 dark:text-orange-300 hover:bg-orange-200 dark:hover:bg-orange-800/60"]),title:"Flaky — passed only after a retry (a subset of passed). Click to filter.",onClick:i[6]||(i[6]=p=>F("filter-status","flaky"))},[u(h,{name:"i-lucide-shuffle",class:"size-3"}),_(" "+o(t.testRun?.flakyTests??0),1)],2)):k("",!0)]),n("button",{class:J(["rounded-lg p-3 text-left w-full transition-colors cursor-pointer",t.activeFilter==="failed"?"bg-red-100 dark:bg-red-900/30 ring-2 ring-red-400 dark:ring-red-600":"bg-red-50 dark:bg-red-900/20 hover:bg-red-100 dark:hover:bg-red-900/30"]),onClick:i[7]||(i[7]=p=>F("filter-status","failed"))},[i[23]||(i[23]=n("p",{class:"text-xs font-medium text-red-700 dark:text-red-400 uppercase tracking-wider"},"Failed",-1)),n("p",nn,o(t.displayProgress?.failedTests??t.testRun?.failedTests??0),1)],2),n("button",{class:J(["rounded-lg p-3 text-left w-full transition-colors cursor-pointer",t.activeFilter==="skipped"?"bg-gray-200 dark:bg-gray-700 ring-2 ring-gray-400 dark:ring-gray-500":"bg-gray-50 dark:bg-gray-900 hover:bg-gray-100 dark:hover:bg-gray-800"]),onClick:i[8]||(i[8]=p=>F("filter-status","skipped"))},[i[24]||(i[24]=n("p",{class:"text-xs font-medium text-gray-500 uppercase tracking-wider"},"Skipped",-1)),n("p",an,o(t.displayProgress?.skippedTests??t.testRun?.skippedTests??0),1)],2),n("button",{class:J(["rounded-lg p-3 text-left w-full transition-colors cursor-pointer",t.activeFilter==="didnotrun"?"bg-amber-100 dark:bg-amber-900/30 ring-2 ring-amber-400 dark:ring-amber-600":"bg-amber-50 dark:bg-amber-900/20 hover:bg-amber-100 dark:hover:bg-amber-900/30"]),title:"Tests that never ran (maxFailures cutoff or a serial-group failure)",onClick:i[9]||(i[9]=p=>F("filter-status","didnotrun"))},[i[25]||(i[25]=n("p",{class:"text-xs font-medium text-amber-700 dark:text-amber-400 uppercase tracking-wider"}," Didn't run ",-1)),n("p",on,o(t.testRun?.didNotRunTests??0),1)],2)]),n("div",null,[t.testRun?(s(),a("div",rn,[n("div",ln,[u(G,{passed:t.displayProgress?.passedTests??t.testRun?.passedTests??0,failed:t.displayProgress?.failedTests??t.testRun?.failedTests??0,skipped:t.displayProgress?.skippedTests??t.testRun?.skippedTests??0,flaky:t.testRun?.flakyTests??0,"did-not-run":t.testRun?.didNotRunTests??0,total:t.displayProgress?.totalTests??t.testRun?.totalTests??0},null,8,["passed","failed","skipped","flaky","did-not-run","total"])]),n("div",un,[n("div",dn,[u(h,{name:"i-lucide-clock",class:"size-3.5 text-gray-400"}),n("span",cn,o(("formatDuration"in z?z.formatDuration:e(xe))(t.testRun?.duration)),1)]),t.testRun?.avgTestDuration?(s(),a("div",mn,[u(h,{name:"i-lucide-gauge",class:"size-3.5 text-gray-400"}),i[26]||(i[26]=n("span",{class:"text-gray-500 hidden sm:inline"},"Avg",-1)),n("span",fn,o(("formatDuration"in z?z.formatDuration:e(xe))(t.testRun.avgTestDuration)),1)])):k("",!0),t.testRun?.p90TestDuration?(s(),a("div",gn,[u(h,{name:"i-lucide-arrow-up-right",class:"size-3.5 text-orange-500"}),i[27]||(i[27]=n("span",{class:"text-gray-500 hidden sm:inline"},"P90",-1)),n("span",pn,o(("formatDuration"in z?z.formatDuration:e(xe))(t.testRun.p90TestDuration)),1)])):k("",!0),t.totalWastedTime&&t.totalWastedTime>0?(s(),a("div",yn,[u(h,{name:"i-lucide-clock",class:"size-3.5 text-amber-500"}),i[28]||(i[28]=n("span",{class:"text-gray-500 hidden sm:inline"},"Wasted",-1)),n("span",xn,o(("formatDuration"in z?z.formatDuration:e(xe))(t.totalWastedTime)),1)])):k("",!0)])])):k("",!0)])])]),_:1})],2),e(C)?(s(),R(ge,{key:0,ci:t.testRun?.metadata?.ci,environment:t.testRun?.environment,"playwright-version":t.testRun?.playwrightVersion,"reporter-version":t.testRun?.reporterVersion,class:J(e(N))},null,8,["ci","environment","playwright-version","reporter-version","class"])):k("",!0),e(m)?(s(),R(Ce,{key:1,scm:t.testRun.metadata.scm,class:J(e(N))},null,8,["scm","class"])):k("",!0),e(D)?(s(),R(we,{key:2,class:J(e(N)),title:"Storage",icon:"i-lucide-database",help:"run.reports",subtitle:e(l)?.totalFiles?`${e(l).totalFiles} files · ${("formatBytes"in z?z.formatBytes:e(Ve))(e(l).totalSize)}`:void 0},{default:r(()=>[t.finalizing?(s(),a("div",hn,[u(h,{name:"i-lucide-upload",class:"size-5 text-info shrink-0 animate-pulse"}),n("div",vn,[i[29]||(i[29]=n("div",{class:"flex items-center justify-between mb-1"},[n("span",{class:"text-sm font-medium"},"Finalizing test run"),n("span",{class:"text-xs text-gray-500"},"Uploading reports & traces…")],-1)),u(re,{value:null,size:"sm",color:"info",class:"rounded-full animate-pulse"})])])):k("",!0),e(l)?.totalFiles?(s(),a("div",kn,[(s(!0),a(V,null,oe(t.allReports,p=>(s(),a("div",{key:p.label,class:"flex items-center justify-between gap-2 min-w-0"},[u(q,{href:`/api/files/${("getFileApiPath"in z?z.getFileApiPath:e(ps))(p.path)}`,icon:("reportIcon"in z?z.reportIcon:e(gs))(p.type),target:"_blank",size:"xs",variant:"outline",class:"min-w-0",ui:{label:"truncate"}},{default:r(()=>[_(o(p.label),1)]),_:2},1032,["href","icon"]),n("span",bn,o(("formatBytes"in z?z.formatBytes:e(Ve))(p.size)),1)]))),128)),e(l).testCaseFilesCount>0?(s(),a("div",_n,[n("span",wn,"Test files ("+o(e(l).testCaseFilesCount)+")",1),n("span",$n,o(("formatBytes"in z?z.formatBytes:e(Ve))(e(l).testCaseFilesSize)),1)])):k("",!0)])):k("",!0)]),_:1},8,["class","subtitle"])):k("",!0),e(K)?(s(),R(we,{key:3,class:J(e(N)),title:"Other",icon:"i-lucide-tags",help:"run.metadata"},{default:r(()=>[n("div",Cn,[t.testRun.metadata.tags&&t.testRun.metadata.tags.length>0?(s(),a("div",Rn,[n("div",Tn,[(s(!0),a(V,null,oe(t.testRun.metadata.tags,p=>(s(),R(T,{key:p,color:"neutral",variant:"soft",size:"sm"},{default:r(()=>[_(o(p),1)]),_:2},1024))),128))])])):k("",!0),t.testRun.metadata.relatedIssue?(s(),a("p",In,[u(h,{name:"i-lucide-link",class:"w-3.5 h-3.5 text-gray-400 shrink-0"}),n("span",null,o(t.testRun.metadata.relatedIssue),1)])):k("",!0),u(ze,{"entity-type":"test_run","entity-id":t.testRun.id,links:t.testRun.links??null,onUpdated:i[10]||(i[10]=p=>z.$emit("label-updated"))},null,8,["entity-id","links"]),t.testRun.metadata.customData?(s(),R(q,{key:2,size:"xs",variant:"ghost",color:"neutral",icon:t.showCustomData?"i-lucide-chevron-up":"i-lucide-chevron-down",onClick:i[11]||(i[11]=p=>F("update:showCustomData",!t.showCustomData))},{default:r(()=>[...i[30]||(i[30]=[_(" Custom data ",-1)])]),_:1},8,["icon"])):k("",!0),t.showCustomData&&t.testRun.metadata.customData?(s(),a("div",Sn,[n("div",zn,[n("pre",Dn,o(JSON.stringify(t.testRun.metadata.customData,null,2)),1)])])):k("",!0)])]),_:1},8,["class"])):k("",!0)])]),_:1})}}}),Pn=Object.assign(Fn,{__name:"RunSummary"}),jn={class:"rounded-lg border border-default text-sm flex flex-col flex-1 min-h-0"},Mn={class:"flex items-center justify-end px-3 py-1.5 border-b border-default bg-elevated shrink-0"},Nn=["disabled","title"],An={class:"overflow-y-auto flex-1 min-h-0"},Bn=["onClick"],Un={key:1,class:"font-medium truncate min-w-0 text-muted"},Ln={key:2,class:"flex items-center gap-1 shrink-0"},En={class:"flex items-center gap-2 shrink-0 tabular-nums"},On={key:0,class:"text-xs text-red-600 dark:text-red-400 font-medium"},Wn={key:1,class:"text-xs text-green-600 dark:text-green-400"},Kn={key:2,class:"text-xs text-muted"},Hn={key:3,class:"text-xs text-amber-600 dark:text-amber-400"},Vn={key:4,class:"text-xs text-info"},Gn=["href","onClick"],Xn={class:"flex items-center gap-2 shrink-0"},qn={key:0,class:"text-xs text-info"},Yn={key:1,class:"text-xs text-muted tabular-nums"},Jn={key:0,class:"text-center py-8 text-muted"},Zn=fe({__name:"TestCasesTree",props:{testCases:{},suites:{},hasFilter:{type:Boolean},highlightedCaseId:{},projectKey:{},projectName:{}},setup(t){const b=t,w=M(()=>{const g=new Map;for(const f of b.suites)g.set(`${f.filePath}${f.suitePath.join("")}`,f);return g});function F(g){return g==="timedOut"||g==="timedout"?"failed":g}function $(g){return g==="fixme"||g==="slow"?"warning":g==="fail"?"error":g==="skip"?"neutral":g==="tag"?"primary":"info"}function l(g){switch(g){case"fixme":return"i-lucide-wrench";case"skip":return"i-lucide-skip-forward";case"slow":return"i-lucide-timer";case"fail":return"i-lucide-x-circle";case"tag":return"i-lucide-tag";default:return null}}function C(g){return g.type==="tag"?g.description??g.type:g.type}function m(g){const f={passed:0,failed:0,skipped:0,didnotrun:0,running:0,total:0};for(const d of g){const c=F(d.status);c in f&&f[c]++,f.total++}return f}const D=O(new Set),K=M(()=>D.value.size===0);function E(g){return b.hasFilter?!0:!D.value.has(g)}function N(g){if(b.hasFilter)return;const f=new Set(D.value);f.has(g)?f.delete(g):f.add(g),D.value=f}function I(){const g=[],f=new Map;for(const d of b.testCases){const c=d.filePath??"unknown";f.has(c)||f.set(c,[]),f.get(c).push(d)}for(const[d,c]of f){g.push(`file:${d}`);const S=new Set;for(const y of c){const x=y.suitePath??[];for(let P=1;P<=x.length;P++)S.add(`group:${d}${x.slice(0,P).join("")}`)}for(const y of S)g.push(y)}return g}function A(){D.value=new Set(I())}function H(){D.value=new Set}function U(g,f,d,c,S){const y=f.filter(Q=>(Q.suitePath??[]).length===c.length),x=f.filter(Q=>(Q.suitePath??[]).length>c.length),P=new Map;for(const Q of x){const Z=(Q.suitePath??[])[c.length];P.has(Z)||P.set(Z,[]),P.get(Z).push(Q)}for(const[Q,Z]of P){const ne=[...c,Q],ee=`group:${d}${ne.join("")}`,B=w.value.get(`${d}${ne.join("")}`);g.push({kind:"group",depth:S,key:ee,label:Q,stats:m(Z),mode:B?.mode??"default",annotations:B?.annotations??[]}),E(ee)&&U(g,Z,d,ne,S+1)}for(const Q of y)g.push({kind:"test",depth:S,key:`test:${Q.id}`,test:Q})}const j=M(()=>{const g=[],f=new Map;for(const d of b.testCases){const c=d.filePath??"unknown";f.has(c)||f.set(c,[]),f.get(c).push(d)}for(const[d,c]of[...f.entries()].sort(([S],[y])=>S.localeCompare(y))){const S=`file:${d}`;g.push({kind:"group",depth:0,key:S,label:d,stats:m(c)}),E(S)&&U(g,c,d,[],1)}return g});return(g,f)=>{const d=ke,c=bt,S=be,y=_e;return s(),a("div",jn,[n("div",Mn,[n("button",{class:J(["flex items-center gap-1 text-xs transition-colors",t.hasFilter?"text-muted cursor-not-allowed opacity-50":"text-muted hover:text-default"]),disabled:t.hasFilter,title:t.hasFilter?"Clear filters to collapse/expand":K.value?"Collapse all":"Expand all",onClick:f[0]||(f[0]=x=>K.value?A():H())},[u(d,{name:K.value?"i-lucide-fold-vertical":"i-lucide-unfold-vertical",class:"size-3.5"},null,8,["name"]),_(" "+o(K.value?"Collapse all":"Expand all"),1)],10,Nn)]),n("div",An,[(s(!0),a(V,null,oe(j.value,x=>(s(),a(V,{key:x.key},[x.kind==="group"?(s(),a("div",{key:0,class:J(["flex items-center gap-2 py-2 pr-4 border-b border-default last:border-b-0 select-none sticky",[x.depth===0?"bg-elevated":"bg-default",!t.hasFilter&&"cursor-pointer"]]),style:he({paddingLeft:`${x.depth*20+12}px`,top:`${x.depth*36}px`,zIndex:20-x.depth}),onClick:P=>N(x.key)},[u(d,{name:E(x.key)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5 text-muted shrink-0"},null,8,["name"]),u(d,{name:x.depth===0?"i-lucide-file-code-2":"i-lucide-folder-open",class:J(["size-4 shrink-0",x.depth===0?"text-blue-500":"text-amber-500"])},null,8,["name","class"]),x.depth===0?(s(),a("span",{key:0,class:"min-w-0",onClick:f[1]||(f[1]=Ue(()=>{},["stop"]))},[u(c,{"file-path":x.label,"project-key":t.projectKey,"project-name":t.projectName,class:"font-medium text-default"},null,8,["file-path","project-key","project-name"])])):(s(),a("span",Un,o(x.label),1)),x.depth>0?(s(),a("div",Ln,[x.mode==="parallel"?(s(),R(S,{key:0,color:"success",variant:"soft",size:"xs"},{default:r(()=>[...f[2]||(f[2]=[_("parallel",-1)])]),_:1})):k("",!0),x.mode==="serial"?(s(),R(S,{key:1,color:"warning",variant:"soft",size:"xs"},{default:r(()=>[...f[3]||(f[3]=[_("serial",-1)])]),_:1})):k("",!0),(s(!0),a(V,null,oe(x.annotations,P=>(s(),R(S,{key:`${P.type}:${P.description??""}`,color:$(P.type),variant:"soft",size:"xs",title:P.type!=="tag"?P.description??void 0:void 0,class:"gap-1"},{default:r(()=>[l(P.type)?(s(),R(d,{key:0,name:l(P.type),class:"size-2.5 shrink-0"},null,8,["name"])):k("",!0),_(" "+o(C(P)),1)]),_:2},1032,["color","title"]))),128))])):k("",!0),f[4]||(f[4]=n("div",{class:"flex-1"},null,-1)),n("div",En,[x.stats.failed>0?(s(),a("span",On,o(x.stats.failed)+" failed ",1)):k("",!0),x.stats.passed>0?(s(),a("span",Wn,o(x.stats.passed)+" passed ",1)):k("",!0),x.stats.skipped>0?(s(),a("span",Kn,o(x.stats.skipped)+" skipped",1)):k("",!0),x.stats.didnotrun>0?(s(),a("span",Hn,o(x.stats.didnotrun)+" didn't run ",1)):k("",!0),x.stats.running>0?(s(),a("span",Vn,o(x.stats.running)+" running",1)):k("",!0)])],14,Bn)):(s(),a("div",{key:1,class:J(["flex items-center gap-2 pr-3 py-1.5 border-b border-default last:border-b-0 hover:bg-gray-50 dark:hover:bg-gray-900/40 transition-colors",t.highlightedCaseId===x.test.id?"animate-pulse bg-yellow-100 dark:bg-yellow-900/30":""]),style:he({paddingLeft:`${x.depth*20+12}px`})},[u(d,{name:"i-lucide-flask-conical",class:"size-3.5 text-muted shrink-0"}),u(S,{color:("getStatusColor"in g?g.getStatusColor:e(Le))(x.test.status==="timedOut"||x.test.status==="timedout"?"failed":x.test.status),size:"xs",class:"capitalize shrink-0"},{default:r(()=>[_(o(("formatStatusLabel"in g?g.formatStatusLabel:e(xt))(x.test.status)),1)]),_:2},1032,["color"]),(s(!0),a(V,null,oe(x.test.testAnnotations??[],P=>(s(),R(S,{key:`${P.type}:${P.description??""}`,color:$(P.type),variant:"soft",size:"xs",title:P.type!=="tag"?P.description??void 0:void 0,class:"shrink-0 gap-1"},{default:r(()=>[l(P.type)?(s(),R(d,{key:0,name:l(P.type),class:"size-2.5 shrink-0"},null,8,["name"])):k("",!0),_(" "+o(C(P)),1)]),_:2},1032,["color","title"]))),128)),n("a",{href:`/test-run-cases/${x.test.id}`,class:"text-primary hover:underline truncate flex-1 min-w-0",onClick:Ue(P=>("navigateTo"in g?g.navigateTo:e(Xe))(`/test-run-cases/${x.test.id}`),["prevent"])},o(x.test.title),9,Gn),n("div",Xn,[x.test.status==="running"?(s(),a("span",qn,"In progress...")):x.test.duration?(s(),a("span",Yn,o(("formatDuration"in g?g.formatDuration:e(xe))(x.test.duration)),1)):k("",!0),x.test.workerIndex!=null?(s(),R(S,{key:2,color:"neutral",variant:"soft",size:"xs",class:"font-mono",title:`Worker ${x.test.workerIndex}`},{default:r(()=>[_(" w"+o(x.test.workerIndex),1)]),_:2},1032,["title"])):k("",!0),(x.test.retries??0)>0?(s(),R(S,{key:3,color:"warning",variant:"soft",size:"xs"},{default:r(()=>[_(o(x.test.retries)+"x ",1)]),_:2},1024)):k("",!0),u(y,{to:`/test-run-cases/${x.test.id}`,size:"xs",variant:"outline"},{default:r(()=>[...f[5]||(f[5]=[_(" View ",-1)])]),_:1},8,["to"])])],6))],64))),128)),j.value.length===0?(s(),a("div",Jn,[u(d,{name:"i-lucide-search-x",class:"size-6 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),f[6]||(f[6]=n("p",{class:"text-sm"},"No test cases match your filters.",-1))])):k("",!0)])])}}}),Qn=Object.assign(Zn,{__name:"TestCasesTree"}),ea={class:"flex flex-col min-h-0"},ta={class:"flex items-center rounded-md border border-default overflow-hidden"},sa={key:0,class:"text-sm text-gray-500 tabular-nums inline-flex items-center gap-1"},na={key:1,class:"text-sm text-gray-500 tabular-nums inline-flex items-center gap-1"},aa={class:"flex flex-wrap items-center gap-1"},oa=["onClick"],ra={key:0,class:"flex-1 min-h-0 max-lg:h-[70dvh] overflow-x-auto overflow-y-hidden rounded-lg border border-default"},la=["aria-rowcount"],ia=["aria-sort","aria-label","title","onClick"],ua={key:1,class:"truncate"},da={class:"px-3 py-2 flex items-center min-w-0",role:"cell"},ca={class:"px-3 py-2 min-w-0 space-y-0.5",role:"cell"},ma={class:"flex items-center gap-1.5 min-w-0"},fa=["href","title","onClick"],ga={class:"px-3 py-2 flex items-center",role:"cell"},pa={class:"px-3 py-2 flex items-center whitespace-nowrap",role:"cell"},ya={key:0,class:"text-info text-xs"},xa={key:1},ha={class:"px-3 py-2 flex items-center",role:"cell"},va={class:"px-3 py-2 flex items-center tabular-nums",role:"cell"},ka={key:0,class:"px-3 py-2 flex items-center whitespace-nowrap",role:"cell"},ba={key:0,class:"text-amber-600 dark:text-amber-400"},_a={key:1,class:"text-gray-400"},wa={class:"px-3 py-2 flex items-center justify-end",role:"cell"},$a={class:"flex-1 min-h-0 flex items-center justify-center py-10 text-sm text-gray-500"},Ca={key:1,class:"text-center py-10 text-gray-500"},Ra={key:2,class:"text-center py-10 text-gray-500"},Ta=fe({__name:"TestCasesList",props:qt({testCases:{},suites:{},isLive:{type:Boolean},failureClusterFilter:{},projectKey:{},projectName:{}},{search:{default:""},searchModifiers:{},activeStatuses:{default:()=>[]},activeStatusesModifiers:{},browserFilter:{default:"all"},browserFilterModifiers:{}}),emits:["update:search","update:activeStatuses","update:browserFilter"],setup(t,{expose:b}){const{treeView:w,setTreeView:F}=bs("test-cases"),$=t,l=He(t,"search"),C=He(t,"activeStatuses"),m=He(t,"browserFilter"),D=O(!1),K=O(!1),E=[{label:"Passed",value:"passed",color:"green"},{label:"Failed",value:"failed",color:"red"},{label:"Skipped",value:"skipped",color:"gray"},{label:"Didn't run",value:"didnotrun",color:"amber"},{label:"Flaky",value:"flaky",color:"orange"}];function N(h){C.value.indexOf(h)>=0?C.value=C.value.filter(G=>G!==h):C.value=[...C.value,h]}const I=M(()=>{const h=new Set;for(const G of $.testCases){const te=G.browser?.projectName;te&&h.add(te)}const T=[{label:"All browsers",value:"all"}];for(const G of[...h].sort())T.push({label:G,value:G});return T});function A(h,T){return T==="failed"?h.status==="failed"||h.status==="timedOut"||h.status==="timedout":T==="flaky"?(h.retries??0)>0:h.status===T}const H=M(()=>{let h=$.testCases;if($.failureClusterFilter!=null&&(h=h.filter(T=>T.failureClusterId===$.failureClusterFilter)),C.value.length>0&&(h=h.filter(T=>C.value.some(G=>A(T,G)))),m.value!=="all"&&(h=h.filter(T=>T.browser?.projectName===m.value)),l.value){const T=l.value.toLowerCase();h=h.filter(G=>G.title.toLowerCase().includes(T)||G.location&&G.location.toLowerCase().includes(T))}return D.value&&(h=h.filter(T=>T.isNewRegression)),K.value&&(h=h.filter(T=>T.isNewFlaky)),h}),U=O(null),j=O("asc");function g(h){U.value!==h?(U.value=h,j.value="asc"):j.value==="asc"?j.value="desc":U.value=null}function f(h){return U.value!==h?"i-lucide-chevrons-up-down":j.value==="asc"?"i-lucide-chevron-up":"i-lucide-chevron-down"}function d(h,T){switch(T){case"browser":return h.browser?.projectName??"";case"title":return h.title??"";case"status":return h.status??"";case"duration":return h.duration??0;case"workerIndex":return h.workerIndex??-1;case"retries":return h.retries??0;case"wastedTimeMs":return h.wastedTimeMs??0;default:return""}}function c(h){if(h==null)return"";const T=Math.round(Math.abs(h));if(T===0)return"0s";const G=h<0?"−":"";if(T<1e3)return`${G}${T}ms`;const te=T/1e3;if(te<60)return`${G}${Number.isInteger(te)?te:te.toFixed(1)}s`;const de=Math.floor(te/60),Y=Math.round(te%60);return Y?`${G}${de}m ${Y}s`:`${G}${de}m`}const S=M(()=>{const h=H.value,T=U.value;if(!T)return h;const G=j.value==="asc"?1:-1;return[...h].sort((te,de)=>{const Y=d(te,T),v=d(de,T);return typeof Y=="number"&&typeof v=="number"?(Y-v)*G:String(Y).localeCompare(String(v))*G})}),y=M(()=>$.testCases.some(h=>(h.wastedTimeMs??0)>0)),x=M(()=>{const h=[{key:"browser",label:"Browser",sortable:!0,width:"3.25rem",align:"left",icon:"i-lucide-monitor"},{key:"title",label:"Test case",sortable:!0,width:"minmax(12rem, 3fr)",align:"left"},{key:"status",label:"Status",sortable:!0,width:"6rem",align:"left"},{key:"duration",label:"Duration",sortable:!0,width:"7rem",align:"left"},{key:"workerIndex",label:"Worker",sortable:!0,width:"6rem",align:"left"},{key:"retries",label:"Retries",sortable:!0,width:"6.5rem",align:"left"}];return y.value&&h.push({key:"wastedTimeMs",label:"Wasted",sortable:!0,width:"6rem",align:"left"}),h.push({key:"actions",label:"Actions",sortable:!1,width:"7.5rem",align:"right"}),h}),P=M(()=>x.value.map(h=>h.width).join(" ")),Q=M(()=>y.value?"55rem":"49rem"),Z=M(()=>l.value!==""||C.value.length>0||m.value!=="all"||$.failureClusterFilter!=null),ne=O(null),ee=O(!1),B=O(null);function z(h){return h.scrollHeight-h.scrollTop-h.clientHeight<50}function i(h){const T=h.target;T&&(ee.value=!z(T))}me(()=>$.isLive,h=>{h||(ee.value=!1)}),me(()=>S.value.length,()=>{!$.isLive||ee.value||Ie(()=>ne.value?.scrollToBottom())});function ue(h){F(!1),B.value=h;const T=()=>{const G=S.value.findIndex(te=>te.id===h);G>=0&&ne.value?.scrollToItem(G,{behavior:"smooth"})};Ie(()=>{ne.value?T():setTimeout(T,60),setTimeout(()=>{B.value=null},3e3)})}return b({scrollToCase:ue}),(h,T)=>{const G=ke,te=Se,de=Xt,Y=hs,v=kt,q=vs,ae=Qn,se=ks,ge=be,Ce=bt,re=_e,we=rt("DynamicScrollerItem"),ze=rt("DynamicScroller"),ye=ct;return s(),a("div",ea,[u(q,{class:"mb-4 shrink-0"},{start:r(()=>[n("div",ta,[n("button",{class:J(["px-2 py-1 text-xs transition-colors",e(w)?"text-muted hover:bg-elevated/60":"bg-primary text-white dark:text-white"]),title:"Flat list",onClick:T[0]||(T[0]=p=>e(F)(!1))},[u(G,{name:"i-lucide-list",class:"size-3.5"})],2),n("button",{class:J(["px-2 py-1 text-xs transition-colors",e(w)?"bg-primary text-white dark:text-white":"text-muted hover:bg-elevated/60"]),title:"Tree view",onClick:T[1]||(T[1]=p=>e(F)(!0))},[u(G,{name:"i-lucide-folder-tree",class:"size-3.5"})],2)]),t.isLive?(s(),a("span",sa,[_(o(t.testCases.length)+" completed ",1),u(te,{topic:"run.live"})])):(s(),a("span",na,[_(o(S.value.length)+o(S.value.length!==t.testCases.length?` / ${t.testCases.length}`:"")+" cases ",1),u(te,{topic:"run.test-cases"})]))]),default:r(()=>[u(de,{modelValue:l.value,"onUpdate:modelValue":T[2]||(T[2]=p=>l.value=p),placeholder:"Search test cases...",icon:"i-lucide-search",size:"sm",class:"min-w-48 max-sm:flex-1"},null,8,["modelValue"]),n("div",aa,[(s(),a(V,null,oe(E,p=>n("button",{key:p.value,class:J(["inline-flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium transition-colors whitespace-nowrap",C.value.includes(p.value)?p.color==="green"?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":p.color==="red"?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":p.color==="orange"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-gray-200 text-gray-700 dark:bg-gray-700 dark:text-gray-300":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700"]),onClick:ve=>N(p.value)},[n("span",{class:J(["size-2 rounded-full shrink-0",p.color==="green"?"bg-green-500":p.color==="red"?"bg-red-500":p.color==="orange"?"bg-orange-500":"bg-gray-400"])},null,2),_(" "+o(p.label),1)],10,oa)),64))]),u(Y,{modelValue:m.value,"onUpdate:modelValue":T[3]||(T[3]=p=>m.value=p),items:I.value,size:"sm",class:"w-36"},null,8,["modelValue","items"]),t.isLive?k("",!0):(s(),R(v,{key:0,modelValue:D.value,"onUpdate:modelValue":T[4]||(T[4]=p=>D.value=p),label:"New regressions",size:"sm"},null,8,["modelValue"])),t.isLive?k("",!0):(s(),R(v,{key:1,modelValue:K.value,"onUpdate:modelValue":T[5]||(T[5]=p=>K.value=p),label:"New flaky",size:"sm"},null,8,["modelValue"]))]),_:1}),e(w)&&t.testCases.length>0?(s(),R(ae,{key:0,"test-cases":S.value,suites:t.suites,"has-filter":Z.value,"highlighted-case-id":B.value,"project-key":t.projectKey,"project-name":t.projectName,class:"flex-1 min-h-0"},null,8,["test-cases","suites","has-filter","highlighted-case-id","project-key","project-name"])):e(w)?k("",!0):(s(),a(V,{key:1},[S.value.length>0?(s(),a("div",ra,[n("div",{class:"flex flex-col h-full",role:"table","aria-label":"Test cases","aria-rowcount":S.value.length+1,style:he({minWidth:Q.value})},[n("div",{class:"grid shrink-0 bg-elevated/50 border-b border-default",role:"row",style:he({gridTemplateColumns:P.value})},[(s(!0),a(V,null,oe(x.value,p=>(s(),a(V,{key:p.key},[p.sortable?(s(),a("button",{key:0,type:"button",role:"columnheader","aria-sort":U.value===p.key?j.value==="asc"?"ascending":"descending":"none","aria-label":p.icon?p.label:void 0,title:p.icon?p.label:void 0,class:J(["flex items-center gap-1 min-w-0 px-3 py-2 text-sm font-semibold select-none cursor-pointer hover:text-highlighted transition-colors",p.align==="right"?"justify-end":""]),onClick:ve=>g(p.key)},[p.icon?(s(),R(G,{key:0,name:p.icon,class:"shrink-0 size-4"},null,8,["name"])):(s(),a("span",ua,o(p.label),1)),u(G,{name:f(p.key),class:J(["shrink-0 size-3.5",U.value===p.key?"":"opacity-40"])},null,8,["name","class"])],10,ia)):(s(),a("div",{key:1,role:"columnheader",class:J(["px-3 py-2 text-sm font-semibold",p.align==="right"?"text-right":""])},o(p.label),3))],64))),128))],4),u(ye,null,{fallback:r(()=>[n("div",$a,[u(G,{name:"i-lucide-loader-circle",class:"size-4 mr-2 animate-spin"}),T[9]||(T[9]=_(" Loading test cases… ",-1))])]),default:r(()=>[u(ze,{ref_key:"scrollerRef",ref:ne,items:S.value,"min-item-size":44,"key-field":"id",role:"rowgroup",class:"flex-1 min-h-0",onScrollPassive:i},{default:r(({item:p,index:ve,active:De})=>[u(we,{item:p,active:De,"size-dependencies":[p.title,p.location,p.isNewRegression,p.isNewFlaky],"data-index":ve},{default:r(()=>[n("div",{class:J(["grid items-center border-b border-default text-sm transition-colors hover:bg-gray-50 dark:hover:bg-gray-900/50",B.value===p.id?"animate-pulse bg-yellow-100 dark:bg-yellow-900/30":""]),role:"row",style:he({gridTemplateColumns:P.value})},[n("div",da,[u(se,{browser:p.browser},null,8,["browser"])]),n("div",ca,[n("div",ma,[p.isNewRegression?(s(),R(ge,{key:0,color:"error",variant:"solid",size:"xs",class:"uppercase tracking-wider"},{default:r(()=>[...T[6]||(T[6]=[_(" NEW ",-1)])]),_:1})):k("",!0),p.isNewFlaky?(s(),R(ge,{key:1,color:"info",variant:"solid",size:"xs",class:"uppercase tracking-wider"},{default:r(()=>[...T[7]||(T[7]=[_(" FLAKY ",-1)])]),_:1})):k("",!0),n("a",{href:`/test-run-cases/${p.id}`,class:"text-primary hover:underline font-medium truncate",title:p.title,onClick:Ue(Ze=>("navigateTo"in h?h.navigateTo:e(Xe))(`/test-run-cases/${p.id}`),["prevent"])},o(p.title),9,fa)]),p.location?(s(),R(Ce,{key:0,location:p.location,"project-key":t.projectKey,"project-name":t.projectName,class:"text-xs text-gray-400 dark:text-gray-500"},null,8,["location","project-key","project-name"])):k("",!0)]),n("div",ga,[u(ge,{color:("getStatusColor"in h?h.getStatusColor:e(Le))(p.status==="timedOut"||p.status==="timedout"?"failed":p.status),class:"capitalize"},{default:r(()=>[_(o(("formatStatusLabel"in h?h.formatStatusLabel:e(xt))(p.status)),1)]),_:2},1032,["color"])]),n("div",pa,[p.status==="running"?(s(),a("span",ya,"In progress...")):(s(),a("span",xa,o(c(p.duration)),1))]),n("div",ha,[p.workerIndex!=null?(s(),R(ge,{key:0,color:"neutral",variant:"soft",class:"font-mono text-xs"},{default:r(()=>[_(o(p.workerIndex),1)]),_:2},1024)):k("",!0)]),n("div",va,o(p.retries&&p.retries>0?p.retries:""),1),y.value?(s(),a("div",ka,[p.wastedTimeMs?(s(),a("span",ba,o(c(p.wastedTimeMs)),1)):(s(),a("span",_a,"—"))])):k("",!0),n("div",wa,[u(re,{to:`/test-run-cases/${p.id}`,size:"sm",variant:"outline"},{default:r(()=>[...T[8]||(T[8]=[_(" View details ",-1)])]),_:1},8,["to"])])],6)]),_:2},1032,["item","active","size-dependencies","data-index"])]),_:1},8,["items"])]),_:1})],12,la)])):t.testCases.length===0?(s(),a("div",Ca,[u(G,{name:"i-lucide-beaker",class:"size-8 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),T[10]||(T[10]=n("p",null,"No test cases recorded for this run.",-1))])):(s(),a("div",Ra,[u(G,{name:"i-lucide-search-x",class:"size-8 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),T[11]||(T[11]=n("p",null,"No test cases match your filters.",-1))]))],64))])}}}),Ia=Object.assign(Ta,{__name:"TestCasesList"}),Sa={key:2,class:"p-4"},za={key:3,class:"p-4"},Da={key:4,class:"p-4"},Fa={key:5,class:"space-y-6 p-4"},Pa={class:"flex items-center gap-1.5 text-sm text-muted"},ja={class:"grid grid-cols-1 sm:grid-cols-3 gap-4"},Ma={class:"space-y-1"},Na={class:"text-xl font-semibold"},Aa={key:0},Ba={key:1},Ua={class:"space-y-1"},La={key:1,class:"text-xl font-semibold text-muted"},Ea={class:"space-y-1"},Oa={class:"space-y-0.5 text-sm"},Wa={key:0,class:"text-red-500"},Ka={key:1,class:"text-green-600"},Ha={key:2,class:"text-purple-500"},Va={key:3,class:"text-muted"},Ga={class:"space-y-1"},Xa={class:"font-medium text-primary hover:underline truncate"},qa={class:"text-gray-400 text-xs ml-auto shrink-0"},Ya={class:"space-y-1"},Ja={class:"font-medium text-primary hover:underline truncate"},Za={class:"space-y-1"},Qa={class:"font-medium text-primary hover:underline truncate"},eo={class:"space-y-1"},to={class:"font-medium text-primary hover:underline truncate"},so={class:"text-gray-400 text-xs ml-auto shrink-0"},no={class:"space-y-1"},ao={class:"font-medium text-primary hover:underline truncate"},oo={class:"grid grid-cols-2 gap-4"},ro={key:0},lo={class:"space-y-1"},io={class:"text-red-500 font-mono shrink-0"},uo={class:"truncate text-primary hover:underline"},co={key:1},mo={class:"space-y-1"},fo={class:"text-green-500 font-mono shrink-0"},go={class:"truncate text-primary hover:underline"},po={class:"space-y-1"},yo={class:"flex-1 truncate text-primary hover:underline"},xo={class:"text-gray-500 font-mono text-xs shrink-0"},ho={class:"w-24 h-2 rounded-full bg-gray-100 shrink-0"},vo={key:0,class:"flex items-center gap-1.5 text-xs text-amber-600 mb-3"},ko={class:"flex items-end gap-2 h-20"},bo={class:"text-xs text-gray-500"},_o={class:"text-xs text-gray-400"},wo={class:"space-y-1"},$o={class:"truncate"},Co=fe({__name:"RunInsights",props:{testRunId:{},runStatus:{},refreshKey:{}},setup(t){const b=t,w=M(()=>{if(!l.value)return"";const N=l.value.passRateDelta;return N>0?"text-green-600":N<0?"text-red-600":"text-muted"}),F=M(()=>{if(!l.value)return"";const N=l.value.passRateDelta;return N>0?"i-lucide-trending-up":N<0?"i-lucide-trending-down":"i-lucide-minus"}),$=M(()=>l.value?.avgDurationDelta==null?"":l.value.avgDurationDelta>0?"text-red-600":"text-green-600"),l=O(null),C=O(!1),m=O(null),D=M(()=>b.runStatus==="running"||b.runStatus==="initialising"||b.runStatus==="finalizing");async function K(){if(!b.testRunId||D.value){l.value=null;return}C.value=!0,m.value=null;try{l.value=await $fetch(`/api/test-runs/${b.testRunId}/insights`)}catch(N){console.error("[RunInsights] failed to load",N),m.value=N?.data?.message||N?.message||"Failed to load insights"}finally{C.value=!1}}me(()=>b.testRunId,K,{immediate:!0}),me(()=>b.refreshKey,(N,I)=>{N!==I&&N!==void 0&&K()});function E(N){return N==null?"—":N<1e3?`${N}ms`:`${(N/1e3).toFixed(1)}s`}return(N,I)=>{const A=_e,H=_s,U=_t,j=wt,g=ke,f=Se,d=ws,c=be,S=Ne;return e(m)?(s(),R(H,{key:0,text:e(m),padded:""},{action:r(()=>[u(A,{size:"sm",onClick:K},{default:r(()=>[...I[0]||(I[0]=[_("Retry",-1)])]),_:1})]),_:1},8,["text"])):e(C)?(s(),R(U,{key:1,padded:""})):e(D)?(s(),a("div",Sa,[u(j,{icon:"i-lucide-loader-circle",text:"Run in progress"},{default:r(()=>[...I[1]||(I[1]=[n("p",{class:"text-sm text-muted max-w-sm text-center"}," Insights are computed once the run finishes. Switch back here when the run completes. ",-1)])]),_:1})])):e(l)?e(l).hasBaseline?(s(),a("div",Fa,[n("div",Pa,[u(g,{name:"i-lucide-sparkles",class:"size-4 shrink-0 text-primary/70"}),I[3]||(I[3]=n("span",null,"Automatic highlights from this run",-1)),u(f,{topic:"run.insights"})]),u(d,{icon:"i-lucide-bar-chart-3","icon-class":"text-blue-500",title:"Run summary"},{default:r(()=>[n("div",ja,[n("div",Ma,[I[4]||(I[4]=n("p",{class:"text-xs text-muted"},"Pass rate",-1)),n("p",Na,o(e(l).passRate)+"%",1),n("div",{class:J(["flex items-center gap-1 text-xs",e(w)])},[u(g,{name:e(F),class:"size-3.5"},null,8,["name"]),e(l).passRateDelta!==0?(s(),a("span",Aa,o(e(l).passRateDelta>0?"+":"")+o(e(l).passRateDelta)+"pp vs baseline",1)):(s(),a("span",Ba,"Same as baseline"))],2)]),n("div",Ua,[I[5]||(I[5]=n("p",{class:"text-xs text-muted"},"Avg duration",-1)),e(l).avgDurationDelta!==null?(s(),a("p",{key:0,class:J(["text-xl font-semibold",e($)])},o(e(l).avgDurationDelta>0?"+":"")+o(e(l).avgDurationDelta)+"% ",3)):(s(),a("p",La,"—")),I[6]||(I[6]=n("p",{class:"text-xs text-muted"},"vs baseline (passing tests)",-1))]),n("div",Ea,[I[7]||(I[7]=n("p",{class:"text-xs text-muted"},"Changes",-1)),n("div",Oa,[e(l).newRegressions.length>0?(s(),a("p",Wa," +"+o(e(l).newRegressions.length)+" regressed ",1)):k("",!0),e(l).recovered.length>0?(s(),a("p",Ka,"+"+o(e(l).recovered.length)+" fixed",1)):k("",!0),e(l).newFlaky.length>0?(s(),a("p",Ha,"+"+o(e(l).newFlaky.length)+" flaky",1)):k("",!0),!e(l).newRegressions.length&&!e(l).recovered.length&&!e(l).newFlaky.length?(s(),a("p",Va," No status changes ")):k("",!0)])])])]),_:1}),e(l).newRegressions.length>0?(s(),R(d,{key:0,icon:"i-lucide-alert-circle","icon-class":"text-red-500",title:"New regressions",count:e(l).newRegressions.length},{default:r(()=>[n("div",Ga,[(s(!0),a(V,null,oe(e(l).newRegressions,y=>(s(),R(S,{key:y.testRunsCaseId,to:`/test-run-cases/${y.testRunsCaseId}`,class:"flex items-center gap-2 text-sm hover:bg-red-50 dark:hover:bg-red-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[u(c,{color:"error",variant:"solid",size:"xs"},{default:r(()=>[...I[8]||(I[8]=[_("NEW",-1)])]),_:1}),n("span",Xa,o(y.title),1),n("span",qa,o(E(y.duration)),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):k("",!0),e(l).recurrences.length>0?(s(),R(d,{key:1,icon:"i-lucide-refresh-cw","icon-class":"text-amber-500",title:"Recurring failures",count:e(l).recurrences.length},{default:r(()=>[n("div",Ya,[(s(!0),a(V,null,oe(e(l).recurrences,y=>(s(),R(S,{key:y.testRunsCaseId,to:`/test-run-cases/${y.testRunsCaseId}`,class:"flex items-center gap-2 text-sm hover:bg-amber-50 dark:hover:bg-amber-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[u(c,{color:"warning",variant:"solid",size:"xs"},{default:r(()=>[...I[9]||(I[9]=[_("RECURRING",-1)])]),_:1}),n("span",Ja,o(y.title),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):k("",!0),e(l).recovered.length>0?(s(),R(d,{key:2,icon:"i-lucide-check-circle","icon-class":"text-green-500",title:"Fixed tests",count:e(l).recovered.length},{default:r(()=>[n("div",Za,[(s(!0),a(V,null,oe(e(l).recovered,y=>(s(),R(S,{key:y.testRunsCaseId,to:`/test-run-cases/${y.testRunsCaseId}`,class:"flex items-center gap-2 text-sm hover:bg-green-50 dark:hover:bg-green-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[u(c,{color:"success",variant:"solid",size:"xs"},{default:r(()=>[...I[10]||(I[10]=[_("FIXED",-1)])]),_:1}),n("span",Qa,o(y.title),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):k("",!0),e(l).newFlaky.length>0?(s(),R(d,{key:3,icon:"i-lucide-flask","icon-class":"text-purple-500",title:"New flaky tests",count:e(l).newFlaky.length},{default:r(()=>[n("div",eo,[(s(!0),a(V,null,oe(e(l).newFlaky,y=>(s(),R(S,{key:y.testRunsCaseId,to:`/test-run-cases/${y.testRunsCaseId}?tab=history`,class:"flex items-center gap-2 text-sm hover:bg-purple-50 dark:hover:bg-purple-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[u(c,{color:"info",variant:"solid",size:"xs"},{default:r(()=>[...I[11]||(I[11]=[_("FLAKY",-1)])]),_:1}),n("span",to,o(y.title),1),n("span",so,o(E(y.duration)),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):k("",!0),e(l).flakyOnRetry.length>0?(s(),R(d,{key:4,icon:"i-lucide-repeat","icon-class":"text-orange-500",title:"Passed on retry",count:e(l).flakyOnRetry.length,subtitle:"Tests that passed but needed one or more retries"},{default:r(()=>[n("div",no,[(s(!0),a(V,null,oe(e(l).flakyOnRetry,y=>(s(),R(S,{key:y.testRunsCaseId,to:`/test-run-cases/${y.testRunsCaseId}?tab=history`,class:"flex items-center gap-2 text-sm hover:bg-orange-50 dark:hover:bg-orange-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[u(c,{color:"warning",variant:"subtle",size:"xs"},{default:r(()=>[_("×"+o(y.retries),1)]),_:2},1024),n("span",ao,o(y.title),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):k("",!0),e(l).mostRegressed.length>0||e(l).mostImproved.length>0?(s(),R(d,{key:5,icon:"i-lucide-trending-up","icon-class":"text-blue-500",title:"Performance changes"},{default:r(()=>[n("div",oo,[e(l).mostRegressed.length>0?(s(),a("div",ro,[I[12]||(I[12]=n("p",{class:"text-xs font-medium text-red-500 mb-2"},"Most regressed",-1)),n("div",lo,[(s(!0),a(V,null,oe(e(l).mostRegressed,y=>(s(),R(S,{key:y.testRunsCaseId,to:`/test-run-cases/${y.testRunsCaseId}?tab=performance`,class:"flex items-center gap-2 text-sm hover:bg-red-50 dark:hover:bg-red-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[n("span",io,"+"+o(y.pctChange)+"%",1),n("span",uo,o(y.title),1)]),_:2},1032,["to"]))),128))])])):k("",!0),e(l).mostImproved.length>0?(s(),a("div",co,[I[13]||(I[13]=n("p",{class:"text-xs font-medium text-green-500 mb-2"},"Most improved",-1)),n("div",mo,[(s(!0),a(V,null,oe(e(l).mostImproved,y=>(s(),R(S,{key:y.testRunsCaseId,to:`/test-run-cases/${y.testRunsCaseId}?tab=performance`,class:"flex items-center gap-2 text-sm hover:bg-green-50 dark:hover:bg-green-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[n("span",fo,o(y.pctChange)+"%",1),n("span",go,o(y.title),1)]),_:2},1032,["to"]))),128))])])):k("",!0)])]),_:1})):k("",!0),e(l).slowestTests.length>0?(s(),R(d,{key:6,icon:"i-lucide-clock","icon-class":"text-amber-500",title:"Slowest tests"},{default:r(()=>[n("div",po,[(s(!0),a(V,null,oe(e(l).slowestTests,y=>(s(),R(S,{key:y.testRunsCaseId,to:`/test-run-cases/${y.testRunsCaseId}?tab=performance`,class:"flex items-center gap-2 text-sm hover:bg-amber-50 dark:hover:bg-amber-900/10 rounded px-1 -mx-1 transition-colors"},{default:r(()=>[n("div",yo,o(y.title),1),n("div",xo,o(E(y.duration)),1),n("div",ho,[n("div",{class:"h-full rounded-full bg-amber-400",style:he({width:Math.min(100,y.duration/(e(l).slowestTests[0]?.duration||1)*100)+"%"})},null,4)])]),_:2},1032,["to"]))),128))])]),_:1})):k("",!0),e(l).workerImbalance.length>1?(s(),R(d,{key:7,icon:"i-lucide-users","icon-class":"text-gray-500",title:"Worker distribution"},{default:r(()=>[e(l).workerImbalanceWarning?(s(),a("div",vo,[u(g,{name:"i-lucide-alert-triangle",class:"size-3.5 shrink-0"}),n("span",null,o(e(l).workerImbalanceWarning),1)])):k("",!0),n("div",ko,[(s(!0),a(V,null,oe(e(l).workerImbalance,y=>(s(),a("div",{key:y.workerIndex,class:"flex-1 flex flex-col items-center gap-1"},[n("span",bo,o(y.count),1),n("div",{class:"w-full bg-blue-400 rounded-t",style:he({height:Math.max(4,y.count/Math.max(...e(l).workerImbalance.map(x=>x.count))*60)+"px"})},null,4),n("span",_o,"W"+o(y.workerIndex),1)]))),128))])]),_:1})):k("",!0),e(l).clusterNew.length>0?(s(),R(d,{key:8,icon:"i-lucide-layers","icon-class":"text-purple-500",title:"New failure clusters",count:e(l).clusterNew.length},{default:r(()=>[n("div",wo,[(s(!0),a(V,null,oe(e(l).clusterNew,y=>(s(),R(S,{key:y.clusterId,to:`/failure-clusters/${y.clusterId}`,class:"flex items-center gap-2 text-sm text-primary hover:underline"},{default:r(()=>[n("span",$o,o(y.signature),1)]),_:2},1032,["to"]))),128))])]),_:1},8,["count"])):k("",!0)])):(s(),a("div",Da,[u(j,{icon:"i-lucide-git-compare-arrows",text:"No baseline run found"},{default:r(()=>[...I[2]||(I[2]=[n("p",{class:"text-sm text-muted max-w-sm text-center"}," Insights compare this run against the most recent passing run in the same project. No previous passing run exists yet — once you have at least two completed runs, comparisons will appear here automatically. ",-1)])]),_:1})])):(s(),a("div",za,[u(j,{text:"No insights yet"})]))}}}),Ro=Object.assign(Co,{__name:"RunInsights"}),To=fe({__name:"ClusterDiagnosis",props:{clusterId:{}},setup(t){return(b,w)=>{const F=$s;return s(),R(F,{"cluster-id":t.clusterId},null,8,["cluster-id"])}}}),Io=Object.assign(To,{__name:"ClusterDiagnosis"}),So={class:"pt-4 space-y-3"},zo={key:0,class:"flex items-center justify-center py-8 text-gray-500 gap-2"},Do={class:"flex items-center justify-between gap-3"},Fo={class:"text-sm text-gray-500 dark:text-gray-400 inline-flex items-center gap-1"},Po={class:"min-w-0 space-y-0.5"},jo=["title"],Mo={key:0,class:"text-xs text-gray-500 truncate block"},No={class:"font-mono"},Ao={key:1,class:"text-gray-400 text-xs"},Bo={key:1,class:"text-gray-400 text-xs"},Uo={class:"text-sm tabular-nums"},Lo={key:0,class:"flex flex-wrap gap-1"},Eo={key:1,class:"text-gray-400 text-xs"},Oo={key:0,class:"flex items-center gap-1 text-xs text-gray-500"},Wo={key:2,class:"text-gray-400 text-xs"},Ko={key:0,class:"text-xs font-medium text-warning-500"},Ho={key:1,class:"text-sm text-gray-500 whitespace-nowrap"},Vo={key:0,class:"ml-1 text-xs text-gray-400"},Go={class:"flex justify-end gap-2"},Xo={key:2,class:"flex flex-col items-center justify-center py-8 text-gray-500 gap-2"},qo=fe({__name:"FailureGroups",props:{refreshKey:{}},emits:["selectCluster"],async setup(t,{emit:b}){let w,F;const $=b,l=t,m=Ae().params.id,{data:D,pending:K,refresh:E}=([w,F]=je(()=>Me(`/api/test-runs/${m}/failure-groups`,{lazy:!0,server:!1},"$qddF1IOQ64")),w=await w,F(),w);me(()=>l.refreshKey,(d,c)=>{d!==c&&d!==void 0&&E()});const N=O(null),{copy:I,copied:A}=Ye(),H=M(()=>D.value?D.value.flatMap(d=>d.cases.filter(c=>!c.passedOnRetry).map(c=>({filePath:c.filePath,title:c.title,line:null,projectName:null}))):[]),U=M(()=>vt(H.value));function j(){const d=U.value;d&&I(d,{toast:"Retry command copied"})}const g=[{accessorKey:"signature",header:ie("Signature")},{accessorKey:"errorType",header:ie("Type")},{accessorKey:"status",header:ie("Status")},{accessorKey:"caseCount",header:ie("Tests")},{accessorKey:"signals",header:"Signals"},{accessorKey:"diagnosis",header:"AI"},{accessorKey:"firstSeenRunId",header:ie("Known since")},{id:"actions",header:"Actions"}],f=M(()=>D.value?.reduce((d,c)=>d+c.caseCount,0)??0);return(d,c)=>{const S=ke,y=Se,x=_e,P=be,Q=Ne,Z=Je,ne=$t,ee=qe,B=Io,z=Ct;return s(),a(V,null,[n("div",So,[e(K)?(s(),a("div",zo,[u(S,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),c[2]||(c[2]=n("span",null,"Grouping failures...",-1))])):e(D)&&e(D).length?(s(),a(V,{key:1},[n("div",Do,[n("p",Fo,[_(o(e(f))+" failing "+o(e(f)===1?"test":"tests")+" across "+o(e(D).length)+" "+o(e(D).length===1?"group":"groups")+" ",1),u(y,{topic:"cluster.concept"})]),e(H).length>0?(s(),R(x,{key:0,size:"xs",variant:"outline",color:"neutral",icon:e(A)?"i-lucide-check":"i-lucide-play",title:e(A)?"Copied!":("copyPreview"in d?d.copyPreview:e(yt))(e(U)),onClick:c[0]||(c[0]=i=>j())},{default:r(()=>[...c[3]||(c[3]=[_(" Copy retry command ",-1)])]),_:1},8,["icon","title"])):k("",!0)]),u(ee,{ui:{body:"p-0 sm:p-0"}},{default:r(()=>[u(ne,{"min-width":"46rem",bleed:!1},{default:r(()=>[u(Z,{data:e(D),columns:g},{"actions-header":r(()=>[...c[4]||(c[4]=[n("div",{class:"text-right"},"Actions",-1)])]),"signature-cell":r(({row:i})=>[n("div",Po,[n("span",{class:J(["text-sm block truncate",i.original.title?"":"font-mono"]),title:i.original.signature},o(i.original.title||i.original.signature),11,jo),i.original.selector?(s(),a("span",Mo,[c[5]||(c[5]=_(" Locator: ",-1)),n("code",No,o(i.original.selector),1)])):k("",!0)])]),"errorType-cell":r(({row:i})=>[i.original.errorType?(s(),R(P,{key:0,color:("clusterErrorTypeColor"in d?d.clusterErrorTypeColor:e(xs))(i.original.errorType),variant:"subtle",size:"sm"},{default:r(()=>[_(o(i.original.errorType),1)]),_:2},1032,["color"])):(s(),a("span",Ao,"—"))]),"status-cell":r(({row:i})=>[i.original.status?(s(),R(P,{key:0,color:("clusterStatusColor"in d?d.clusterStatusColor:e(ys))(i.original.status),variant:"subtle",size:"sm"},{default:r(()=>[_(o(i.original.status),1)]),_:2},1032,["color"])):(s(),a("span",Bo,"—"))]),"caseCount-cell":r(({row:i})=>[n("span",Uo,o(i.original.caseCount),1)]),"signals-cell":r(({row:i})=>[i.original.isNew||i.original.flaky||i.original.workerCorrelated||i.original.locatorHealing?(s(),a("div",Lo,[i.original.isNew?(s(),R(P,{key:0,color:"warning",variant:"subtle",size:"sm"},{default:r(()=>[...c[6]||(c[6]=[_(" New ",-1)])]),_:1})):k("",!0),i.original.flaky?(s(),R(P,{key:1,color:"warning",variant:"outline",size:"sm"},{default:r(()=>[...c[7]||(c[7]=[_(" Flaky ",-1)])]),_:1})):k("",!0),i.original.workerCorrelated?(s(),R(P,{key:2,color:"info",variant:"outline",size:"sm",title:"All failures ran on the same worker"},{default:r(()=>[...c[8]||(c[8]=[_(" Same worker ",-1)])]),_:1})):k("",!0),i.original.locatorHealing?.healed?(s(),R(P,{key:3,color:"success",variant:"subtle",size:"sm",icon:"i-lucide-circle-check",title:"The recommended locator already passes at this call site in a later run"},{default:r(()=>[...c[9]||(c[9]=[_(" Healed ",-1)])]),_:1})):i.original.locatorHealing?(s(),R(P,{key:4,color:"success",variant:"outline",size:"sm",icon:"i-lucide-bandage",title:`Locator fix available: ${i.original.locatorHealing.recommended} — open the cluster to apply it`},{default:r(()=>[...c[10]||(c[10]=[_(" Locator fix ",-1)])]),_:1},8,["title"])):k("",!0)])):(s(),a("span",Eo,"—"))]),"diagnosis-cell":r(({row:i})=>[i.original.diagnosis?.status==="running"?(s(),a("div",Oo,[u(S,{name:"i-lucide-loader-2",class:"size-3 animate-spin"}),c[11]||(c[11]=_(" Running ",-1))])):i.original.diagnosis?.status==="completed"&&i.original.diagnosis.category?(s(),R(P,{key:1,color:"neutral",variant:"subtle",size:"sm",class:"gap-1"},{default:r(()=>[u(S,{name:"i-lucide-sparkles",class:"size-3"}),_(" "+o(i.original.diagnosis.category),1)]),_:2},1024)):(s(),a("span",Wo,"—"))]),"firstSeenRunId-cell":r(({row:i})=>[i.original.isNew?(s(),a("span",Ko,"New in this run")):(s(),a("div",Ho,[u(Q,{to:`/test-runs/${i.original.firstSeenRunId}`,class:"text-primary hover:underline"},{default:r(()=>[_(" run #"+o(i.original.firstSeenRunId),1)]),_:2},1032,["to"]),i.original.firstSeenAt?(s(),a("span",Vo," ("+o(("formatRelativeTime"in d?d.formatRelativeTime:e(ht))(i.original.firstSeenAt))+") ",1)):k("",!0)]))]),"actions-cell":r(({row:i})=>[n("div",Go,[u(x,{size:"sm",color:"primary",variant:"soft",onClick:ue=>$("selectCluster",i.original.clusterId)},{default:r(()=>[...c[12]||(c[12]=[_(" Filter ",-1)])]),_:1},8,["onClick"]),u(x,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-sparkles",onClick:ue=>N.value=i.original.clusterId},{default:r(()=>[...c[13]||(c[13]=[_(" Diagnose ",-1)])]),_:1},8,["onClick"]),u(x,{to:`/failure-clusters/${i.original.clusterId}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:r(()=>[...c[14]||(c[14]=[_(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data"])]),_:1})]),_:1})],64)):(s(),a("div",Xo,[u(S,{name:"i-lucide-party-popper",class:"size-6"}),c[15]||(c[15]=n("span",null,"No failure groups — failed tests without error details are not grouped",-1))]))]),u(z,{open:e(N)!==null,title:"AI Diagnosis",ui:{content:"max-w-2xl"},"onUpdate:open":c[1]||(c[1]=i=>{i||(N.value=null)})},{body:r(()=>[e(N)!==null?(s(),R(B,{key:0,"cluster-id":e(N)},null,8,["cluster-id"])):k("",!0)]),_:1},8,["open"])],64)}}}),Yo=Object.assign(qo,{__name:"FailureGroups"}),Jo={class:"pt-4"},Zo={key:2,class:"space-y-4"},Qo={class:"flex flex-wrap items-center gap-2 text-sm"},er={class:"text-gray-500 inline-flex items-center gap-1"},tr={key:0,class:"text-gray-400"},sr={key:0,class:"flex flex-wrap items-center gap-2"},nr={class:"text-sm text-gray-500"},ar={key:1,class:"flex items-center gap-2"},or={class:"text-sm text-gray-500"},rr={class:"space-y-3"},lr={class:"flex items-center gap-2 text-sm font-medium"},ir={class:"flex flex-wrap items-center gap-2 text-sm font-mono"},ur={key:0,class:"text-xs text-gray-400 font-sans"},dr={class:"flex flex-wrap items-center gap-2"},cr={class:"flex items-center gap-1.5 flex-1 min-w-0"},mr={class:"flex-1 text-xs bg-gray-100 dark:bg-gray-800 px-3 py-1.5 rounded font-mono truncate select-all"},fr={key:3,class:"text-sm text-gray-500 flex items-center gap-2"},gr={class:"px-4 py-3 text-sm font-medium flex items-center gap-2 border-b border-default"},pr={class:"overflow-x-auto"},yr={class:"w-full min-w-[36rem] text-sm"},xr={class:"px-4 py-2 text-gray-500"},hr={class:"px-4 py-2 font-mono text-xs"},vr={key:0,class:"text-green-700 dark:text-green-400"},kr={key:1,class:"text-gray-400"},br={class:"px-4 py-2 font-mono text-xs"},_r={key:0,class:"text-red-700 dark:text-red-400"},wr={key:1,class:"text-gray-400"},$r=fe({__name:"RegressionContext",props:{refreshKey:{}},async setup(t){let b,w;const $=Ae().params.id,l=t,{data:C,pending:m,refresh:D}=([b,w]=je(()=>Me(`/api/test-runs/${$}/regression-context`,{lazy:!0,server:!1},"$AcrCJopY1M")),b=await b,w(),b);me(()=>l.refreshKey,(I,A)=>{I!==A&&I!==void 0&&D()});const{copy:K,copied:E}=Ye();function N(){K(C.value?.commitRange?.gitCommand)}return(I,A)=>{const H=_t,U=wt,j=ke,g=Se,f=Ne,d=be,c=_e,S=qe;return s(),a("div",Jo,[e(m)?(s(),R(H,{key:0,text:"Looking for last passing run…"})):e(C)?.hasGreen?(s(),a("div",Zo,[n("div",Qo,[u(j,{name:"i-lucide-circle-check",class:"size-4 text-green-500 shrink-0"}),n("span",er,[A[0]||(A[0]=_("Last passing run: ",-1)),u(g,{topic:"run.regression"})]),u(f,{to:`/test-runs/${e(C).lastGreenRunId}`,class:"font-medium text-primary hover:underline"},{default:r(()=>[_(" Run #"+o(e(C).lastGreenRunId),1)]),_:1},8,["to"]),e(C).lastGreenRunAt?(s(),a("span",tr," ("+o(("formatRelativeTime"in I?I.formatRelativeTime:e(ht))(e(C).lastGreenRunAt))+") ",1)):k("",!0)]),(e(C).newFailures??0)>0?(s(),a("div",sr,[u(d,{color:"error",variant:"soft",size:"lg"},{default:r(()=>[_(o(e(C).newFailures)+" new "+o(e(C).newFailures===1?"failure":"failures"),1)]),_:1}),n("span",nr,o(e(C).newFailures===1?"test":"tests")+" that "+o((e(C).newFailures===1,"passed"))+" in run #"+o(e(C).lastGreenRunId)+" but "+o(e(C).newFailures===1?"fails":"fail")+" here ",1)])):(s(),a("div",ar,[u(d,{color:"warning",variant:"soft",size:"lg"},{default:r(()=>[...A[1]||(A[1]=[_(" No new regressions ",-1)])]),_:1}),n("span",or,"All failing tests were also failing before run #"+o(e(C).lastGreenRunId),1)])),e(C).commitRange?(s(),R(S,{key:2,ui:{body:"p-4 sm:p-4"}},{default:r(()=>[n("div",rr,[n("div",lr,[u(j,{name:"i-lucide-git-commit-horizontal",class:"size-4"}),A[2]||(A[2]=_(" Commits introduced since last passing run ",-1))]),n("div",ir,[u(d,{color:"success",variant:"soft",size:"sm"},{default:r(()=>[_(o(e(C).commitRange.fromShort),1)]),_:1}),u(j,{name:"i-lucide-arrow-right",class:"size-3 text-gray-400"}),u(d,{color:"error",variant:"soft",size:"sm"},{default:r(()=>[_(o(e(C).commitRange.toShort),1)]),_:1}),e(C).currentBranch||e(C).lastGreenBranch?(s(),a("span",ur," on "+o(e(C).currentBranch||e(C).lastGreenBranch),1)):k("",!0)]),n("div",dr,[e(C).commitRange.compareUrl?(s(),R(c,{key:0,to:e(C).commitRange.compareUrl,target:"_blank",external:"",icon:"i-lucide-external-link",size:"sm",variant:"soft",color:"primary"},{default:r(()=>[...A[3]||(A[3]=[_(" View commits ",-1)])]),_:1},8,["to"])):k("",!0),n("div",cr,[n("code",mr,o(e(C).commitRange.gitCommand),1),u(c,{icon:e(E)?"i-lucide-check":"i-lucide-clipboard",size:"xs",color:"neutral",variant:"ghost",title:e(E)?"Copied!":"Copy git command",onClick:N},null,8,["icon","title"])])])])]),_:1})):!e(C).currentCommit||!e(C).lastGreenCommit?(s(),a("div",fr,[u(j,{name:"i-lucide-git-branch",class:"size-4 shrink-0"}),A[4]||(A[4]=_(" No commit info available — enable ",-1)),A[5]||(A[5]=n("code",{class:"font-mono text-xs"},"collectScmInfo: true",-1)),A[6]||(A[6]=_(" in the reporter to see commit ranges ",-1))])):k("",!0),e(C).metadataDiff&&e(C).metadataDiff.length>0?(s(),R(S,{key:4,ui:{body:"p-0 sm:p-0"}},{default:r(()=>[n("div",gr,[u(j,{name:"i-lucide-sliders-horizontal",class:"size-4"}),A[7]||(A[7]=_(" What changed between runs ",-1))]),n("div",pr,[n("table",yr,[A[8]||(A[8]=n("thead",null,[n("tr",{class:"text-xs text-gray-500 uppercase tracking-wider border-b border-default"},[n("th",{class:"text-left px-4 py-2 font-medium w-32"},"Field"),n("th",{class:"text-left px-4 py-2 font-medium"},"Last passing"),n("th",{class:"text-left px-4 py-2 font-medium"},"This run")])],-1)),n("tbody",null,[(s(!0),a(V,null,oe(e(C).metadataDiff,y=>(s(),a("tr",{key:y.key,class:"border-b last:border-b-0 border-default"},[n("td",xr,o(y.label),1),n("td",hr,[y.before?(s(),a("span",vr,o(y.before),1)):(s(),a("span",kr,"—"))]),n("td",br,[y.after?(s(),a("span",_r,o(y.after),1)):(s(),a("span",wr,"—"))])]))),128))])])])]),_:1})):k("",!0)])):(s(),R(U,{key:1,icon:"i-lucide-history",text:"No previous passing run found for this project"}))])}}}),Cr=Object.assign($r,{__name:"RegressionContext"}),Rr={class:"flex items-center justify-between mb-2"},Tr={class:"text-xs text-gray-500 inline-flex items-center gap-1"},Ir={class:"flex items-center gap-1"},Sr={class:"p-2 flex flex-col gap-2 min-w-56"},zr=fe({__name:"TimelineHeader",props:{workerCount:{},shardTotal:{},testCount:{},hookCount:{},waitCount:{},spanTypes:{},live:{type:Boolean}},emits:["reset","toggleSpan"],setup(t){return(b,w)=>{const F=Se,$=_e,l=kt,C=dt;return s(),a("div",Rr,[n("span",Tr,[n("span",null,[_(o(t.workerCount)+" worker"+o(t.workerCount>1?"s":"")+" ",1),t.shardTotal&&t.shardTotal>1?(s(),a(V,{key:0},[_(" · "+o(t.shardTotal)+" shard"+o(t.shardTotal>1?"s":""),1)],64)):k("",!0),_(" · "+o(t.testCount)+" tests ",1),t.hookCount>0?(s(),a(V,{key:1},[_(" · "+o(t.hookCount)+" hooks ",1)],64)):k("",!0),t.waitCount>0?(s(),a(V,{key:2},[_(" · "+o(t.waitCount)+" waits ",1)],64)):k("",!0)]),u(F,{topic:"run.timeline"})]),n("div",Ir,[t.spanTypes.length>1?(s(),R(C,{key:0,content:{align:"end"}},{content:r(()=>[n("div",Sr,[(s(!0),a(V,null,oe(t.spanTypes,m=>(s(),R(l,{key:m.key,"model-value":m.checked,label:m.label,"onUpdate:modelValue":D=>b.$emit("toggleSpan",m.key,D===!0)},null,8,["model-value","label","onUpdate:modelValue"]))),128))])]),default:r(()=>[u($,{size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-list-filter","trailing-icon":"i-lucide-chevron-down",title:"Show or hide span types"},{default:r(()=>[...w[1]||(w[1]=[_(" Span types ",-1)])]),_:1})]),_:1})):k("",!0),t.live?k("",!0):(s(),R($,{key:1,size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-rotate-ccw",onClick:w[0]||(w[0]=m=>b.$emit("reset"))},{default:r(()=>[...w[2]||(w[2]=[_(" Reset view ",-1)])]),_:1}))])])}}}),Dr=Object.assign(zr,{__name:"TimelineHeader"}),Ee={barHeight:24,rowGap:8,labelWidth:80,sidePadding:16,axisHeight:28,get rowHeight(){return this.barHeight+this.rowGap}},Fr={passed:"#16a34a",failed:"#dc2626",timedOut:"#ea580c",running:"#2563eb",initialising:"#2563eb",skipped:"#9ca3af",cancelled:"#a1a1aa",interrupted:"#ea580c",flaky:"#ca8a04"},Te={fill:"#facc15",stroke:"#ca8a04",swatch:"#f59e0b"};function We(t){return Fr[t]||"#a1a1aa"}function Rt(t){return We(t)+"66"}function Tt(t){return We(t)}function Oe(t){return t<1e3?`${t}ms`:t<6e4?`${(t/1e3).toFixed(1)}s`:`${Math.floor(t/6e4)}m ${Math.floor(t%6e4/1e3)}s`}const Pr=["y","width","height"],jr=["y1","x2","y2"],Mr=["x1","y1","x2","y2"],Nr=["x1","y1","x2","y2"],Ar=["x","y"],Br=["y"],Ur=fe({__name:"TimelineGrid",props:{workerRows:{},shardGroups:{},tickMarks:{},contentWidth:{},shardTotal:{}},setup(t){const{barHeight:b,rowGap:w,axisHeight:F,rowHeight:$}=Ee;return(l,C)=>(s(),a("g",null,[(s(!0),a(V,null,oe(t.workerRows,(m,D)=>(s(),a("rect",{key:"bg-"+D,x:0,y:D*e($)+e(F),width:t.contentWidth,height:e($),class:J(D%2===1?"fill-black/[0.03] dark:fill-white/[0.03]":"fill-transparent")},null,10,Pr))),128)),(s(!0),a(V,null,oe(t.shardGroups.slice(1),m=>(s(),a("line",{key:"shard-sep-"+m.rowRange[0],x1:0,y1:m.rowRange[0]*e($)+e(F)-e(w)/2,x2:t.contentWidth,y2:m.rowRange[0]*e($)+e(F)-e(w)/2,stroke:"currentColor","stroke-dasharray":"4,3",class:"stroke-gray-400 dark:stroke-gray-500"},null,8,jr))),128)),n("line",{x1:e(Ee).labelWidth,y1:e(F),x2:t.contentWidth,y2:e(F),stroke:"currentColor",class:"stroke-gray-300 dark:stroke-gray-600"},null,8,Mr),(s(!0),a(V,null,oe(t.tickMarks,m=>(s(),a("g",{key:m.ms},[n("line",{x1:m.x,y1:e(F)-4,x2:m.x,y2:e(F),stroke:"currentColor",class:"stroke-gray-300 dark:stroke-gray-600"},null,8,Nr),n("text",{x:m.x,y:e(F)-8,"text-anchor":"middle",class:"fill-gray-400 text-[10px]"},o(m.label),9,Ar)]))),128)),(s(!0),a(V,null,oe(t.workerRows,(m,D)=>(s(),a("text",{key:"label-"+D,x:6,y:D*e($)+e(F)+e(b)/2+4,class:"fill-gray-500 text-[11px] font-medium"},o(m.shardIndex!=null&&t.shardTotal&&t.shardTotal>1?`S${m.shardIndex} W${m.workerIndex}`:`Worker ${m.workerIndex}`),9,Br))),128))]))}}),Lr=Object.assign(Ur,{__name:"TimelineGrid"}),Er=["x","y","width","height","fill","stroke"],Or=["x","y"],Wr=["x","y","width","height","fill","stroke"],Kr=["x1","y1","x2","y2","stroke"],Hr=["x1","y1","x2","y2","stroke"],Vr=["x","y"],Gr=["cx","cy"],Xr=["cx","cy"],qr=["x","y","width","height","fill"],Yr=["x","y"],Jr=fe({__name:"TimelineBar",props:{item:{},x:{},y:{},width:{}},emits:["select","hover","move","leave"],setup(t,{emit:b}){const w=t,F=b,{barHeight:$}=Ee,l=M(()=>["setup","hook","fixture"].includes(w.item.kind)),C=M(()=>w.item.testCaseId!=null),m=M(()=>C.value?"cursor-pointer":"cursor-default");function D(){w.item.testCaseId!=null&&F("select",w.item.testCaseId)}return(K,E)=>(s(),a("g",{class:"timeline-bar-group",onMouseenter:E[0]||(E[0]=N=>F("hover",t.item,N)),onMousemove:E[1]||(E[1]=N=>F("move",N)),onMouseleave:E[2]||(E[2]=N=>F("leave"))},[l.value?(s(),a(V,{key:0},[n("rect",{x:t.x,y:t.y,width:t.width,height:e($),rx:3,ry:3,fill:e(Rt)(t.item.status),stroke:e(Tt)(t.item.status),"stroke-width":"1","stroke-dasharray":"3,2",class:J(["timeline-bar-shape transition-opacity duration-100 opacity-80",m.value]),onClick:D},null,10,Er),t.width>60?(s(),a("text",{key:0,x:t.x+4,y:t.y+e($)/2+4,class:"fill-gray-600 dark:fill-gray-300 text-[9px] font-medium pointer-events-none"},o(t.item.title),9,Or)):k("",!0)],64)):t.item.kind==="wait"?(s(),a(V,{key:1},[n("rect",{x:t.x,y:t.y-3,width:t.width,height:e($)+6,rx:2,ry:2,fill:e(Te).fill,"fill-opacity":"0.28",stroke:e(Te).stroke,"stroke-width":"1.5",class:J(["timeline-bar-shape transition-opacity duration-100 opacity-90",m.value]),onClick:D},null,10,Wr),t.width>4?(s(),a("line",{key:0,x1:t.x+1,y1:t.y-3,x2:t.x+t.width-1,y2:t.y+e($)+3,stroke:e(Te).stroke,"stroke-width":"1","stroke-opacity":"0.25",class:"pointer-events-none"},null,8,Kr)):k("",!0),t.width>4?(s(),a("line",{key:1,x1:t.x+t.width-1,y1:t.y-3,x2:t.x+1,y2:t.y+e($)+3,stroke:e(Te).stroke,"stroke-width":"1","stroke-opacity":"0.25",class:"pointer-events-none"},null,8,Hr)):k("",!0),t.width>50?(s(),a("text",{key:2,x:t.x+4,y:t.y+e($)/2+4,class:"fill-yellow-800 dark:fill-yellow-200 text-[9px] font-bold pointer-events-none"}," wasted "+o(e(Oe)(t.item.duration)),9,Vr)):k("",!0)],64)):t.item.status==="running"?(s(),a(V,{key:2},[n("circle",{cx:t.x+6,cy:t.y+e($)/2,r:"3",fill:"#2563eb",filter:"url(#glow)",class:"timeline-bar-shape transition-opacity duration-100 cursor-pointer opacity-90",onClick:D},null,8,Gr),n("circle",{cx:t.x+6,cy:t.y+e($)/2,r:"5",fill:"none",stroke:"#2563eb","stroke-width":"1.5","stroke-opacity":"0.4",filter:"url(#glow)",class:"timeline-bar-shape transition-opacity duration-100 cursor-pointer opacity-90",onClick:D},null,8,Xr)],64)):(s(),a(V,{key:3},[n("rect",{x:t.x,y:t.y,width:t.width,height:e($),rx:3,ry:3,fill:e(We)(t.item.status),class:"timeline-bar-shape transition-opacity duration-100 cursor-pointer opacity-90",onClick:D},null,8,qr),t.width>40?(s(),a("text",{key:0,x:t.x+4,y:t.y+e($)/2+4,class:"fill-white text-[10px] font-medium pointer-events-none"},o(e(Oe)(t.item.duration)),9,Yr)):k("",!0)],64))],32))}}),Zr=Object.assign(Jr,{__name:"TimelineBar"}),Qr={class:"flex items-center gap-2 mb-1"},el={class:"font-medium text-gray-900 dark:text-white max-w-64 truncate"},tl={class:"flex items-center gap-3 text-gray-500"},sl={class:"capitalize"},nl={key:0,class:"italic truncate max-w-48"},al=340,ol=fe({__name:"TimelineTooltip",props:{item:{},pos:{}},setup(t){const b=t,w=M(()=>{const $=b.item;return $?$.kind==="test"?{backgroundColor:We($.status)}:$.kind==="wait"?{backgroundColor:Te.swatch+"66",borderColor:Te.swatch}:{backgroundColor:Rt($.status),borderColor:Tt($.status)}:{}}),F=M(()=>{const{x:$,y:l}=b.pos;if(typeof window>"u")return{left:`${$+12}px`,top:`${l-10}px`};const C=$+12+al>window.innerWidth,m=l+90>window.innerHeight;return{left:C?void 0:`${$+12}px`,right:C?`${window.innerWidth-$+12}px`:void 0,top:m?void 0:`${l-10}px`,bottom:m?`${window.innerHeight-l+10}px`:void 0}});return($,l)=>(s(),R(Yt,{to:"body"},[t.item?(s(),a("div",{key:0,class:"fixed z-[9999] pointer-events-none rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 px-3 py-2 text-xs shadow-lg",style:he(F.value)},[n("div",Qr,[n("span",{class:J(["inline-block size-2.5 rounded-full shrink-0",{"border border-dashed":t.item.kind!=="test"}]),style:he(w.value)},null,6),n("span",el,[t.item.kind!=="test"?(s(),a("span",{key:0,class:J(["uppercase text-[10px] tracking-wider mr-1",t.item.kind==="wait"?"text-amber-500":"text-gray-500"])},o(t.item.kind),3)):k("",!0),_(" "+o(t.item.title),1)])]),n("div",tl,[n("span",sl,o(t.item.status),1),n("span",null,o(e(Oe)(t.item.duration)),1),n("span",null,"Worker "+o(t.item.workerIndex),1),t.item.parentTitle?(s(),a("span",nl," for "+o(t.item.parentTitle),1)):k("",!0)])],4)):k("",!0)]))}}),rl=Object.assign(ol,{__name:"TimelineTooltip"}),ll=["Wait for timeout*","*waitForTimeout*"];function il(t){const b=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(`^${b}$`,"i")}const lt=new Map;function ul(t){let b=lt.get(t);return b||(b=il(t),lt.set(t,b)),b}function dl(t,b){if(!b||b.length===0)return!1;const w=t.title??"",F=t.location??"";for(const $ of b){const l=ul($);if(l.test(w)||F&&l.test(F))return!0}return!1}function cl(t){const b=new Map;for(const w of t){const F=w.workerIndex;if(F==null||F<0)continue;const $=w.shardIndex??null,l=`${$??"null"}|${F}`;let C=b.get(l);C||(C={shardIndex:$,workerIndex:F,cases:[]},b.set(l,C)),C.cases.push(w)}return[...b.values()].sort((w,F)=>{const $=w.shardIndex??1/0,l=F.shardIndex??1/0;return $!==l?$-l:w.workerIndex-F.workerIndex})}function Be(t){if(t==null)return null;if(typeof t=="number")return Number.isFinite(t)?t:null;if(t instanceof Date)return t.getTime();const b=new Date(t).getTime();return Number.isNaN(b)?null:b}function ml(t,b){return t.category==="wait"?dl(t,b)?"wait":null:t.category==="hook"||t.category==="fixture"?t.category:null}function fl(t){const b=M(()=>t.wastedPatterns&&t.wastedPatterns.length>0?t.wastedPatterns:ll),w=M(()=>cl(t.testCases)),F=M(()=>{const m=w.value,D=b.value;let K=1/0;for(const H of m)for(const U of H.cases){const j=Be(U.startedAt);j!=null&&j>0&&(K=Math.min(K,j))}const E=Number.isFinite(K),N=H=>Math.max(0,(Be(H)??K)-K),I=[],A=new Map;if(m.forEach((H,U)=>{const j=[],g=E?H.cases:[...H.cases].sort((d,c)=>(Be(d.startedAt)??0)-(Be(c.startedAt)??0));let f=0;for(const d of g){const c=d.duration??1e3,S=E?N(d.startedAt):f;j.push({key:`t${d.id}`,kind:"test",testCaseId:d.id,title:d.title,status:d.status,workerIndex:H.workerIndex,start:S,duration:c,rowIndex:U}),f=S+c,(d.stepEvents??[]).forEach((x,P)=>{const Q=ml(x,D);if(!Q)return;const Z=x.duration||0,ne=E?N(x.startedAt):f;j.push({key:`s${d.id}:${P}`,kind:Q,testCaseId:d.id,title:x.title,status:x.status||"passed",workerIndex:H.workerIndex,start:ne,duration:Z,rowIndex:U,parentTitle:d.title}),f=ne+Z})}j.sort((d,c)=>d.start-c.start),I.push(...j),A.has(H.workerIndex)||A.set(H.workerIndex,f)}),t.setupSteps&&t.setupSteps.length>0){const H=new Map;m.forEach((U,j)=>{H.has(U.workerIndex)||H.set(U.workerIndex,j)}),t.setupSteps.forEach((U,j)=>{const g=U.workerIndex;if(g==null||g<0)return;const f=H.get(g);if(f==null)return;const d=U.duration||0;let c;E?c=N(U.startedAt):(c=A.get(g)??0,A.set(g,c+d)),I.push({key:`setup${g}:${j}`,kind:"setup",testCaseId:null,title:`[Setup] ${U.title}`,status:U.status||"passed",workerIndex:g,start:c,duration:d,rowIndex:f,parentTitle:null})})}return I}),$=M(()=>w.value.map(m=>({shardIndex:m.shardIndex,workerIndex:m.workerIndex}))),l=M(()=>{const m=[];for(let D=0;D<$.value.length;D++){const K=$.value[D],E=m[m.length-1];!E||E.shardIndex!==K.shardIndex?m.push({shardIndex:K.shardIndex,rowRange:[D,D]}):E.rowRange[1]=D}return m}),C=M(()=>{let m=0;for(const D of F.value)m=Math.max(m,D.start+D.duration);return m||6e4});return{timelineData:F,workerRows:$,shardGroups:l,maxTime:C}}const it=1.12,gl=10,pl=100,Ge=[10,20,50,100,200,500,1e3,2e3,5e3,1e4,15e3,3e4,6e4,12e4,3e5,6e5,9e5,18e5,36e5];function yl(t){const{containerRef:b,maxTime:w,rowCount:F,hasData:$,live:l}=t,{labelWidth:C,sidePadding:m,axisHeight:D,rowHeight:K}=Ee,E=O(1),N=O(0),I=O(!1),A=O(0),H=O(0),U=M(()=>.5*E.value),j=M(()=>w.value*U.value+C+m),g=M(()=>F.value*K+D);function f(v){return v.start*U.value+C}function d(v){return Math.max(v.duration*U.value,3)}function c(v){return v.rowIndex*K+D}function S(){const v=b.value?.clientWidth;if(!v||w.value<=0)return 1;const q=(v-C)/w.value;return Math.min(1,q/.5)}function y(){const v=S();v>0&&(E.value=v,N.value=0)}function x(v){if(!b.value)return v;const q=b.value.clientWidth;return j.value<=q?0:Math.max(q-j.value,Math.min(0,v))}function P(v,q){const ae=Math.max(S(),Math.min(gl,v)),se=ae/E.value;E.value=ae,N.value=x(q-(q-N.value)*se)}const Q=M(()=>{const v=pl/U.value;let q=Ge.find(se=>se>=v)??Ge[Ge.length-1];for(;w.value/q>1e3;)q*=2;const ae=[];for(let se=0;se<=w.value;se+=q)ae.push({ms:se,x:se*U.value+C,label:Oe(se)});return ae});function Z(v){if(l())return;const q=v.deltaY>0?1/it:it,ae=b.value?.getBoundingClientRect();P(E.value*q,ae?v.clientX-ae.left:0)}const ne=4,ee=new Map;let B=null,z=0,i=1,ue=0;function h(v,q){B=v,A.value=q,H.value=N.value}function T(v){if(!l()&&!(v.pointerType==="mouse"&&v.button!==0)){if(ee.set(v.pointerId,{x:v.clientX,y:v.clientY}),ee.size===1)h(v.pointerId,v.clientX);else if(ee.size===2){B=null,I.value=!1;for(const ge of ee.keys())b.value?.setPointerCapture?.(ge);const[q,ae]=[...ee.values()];z=Math.hypot(q.x-ae.x,q.y-ae.y)||1,i=E.value;const se=b.value?.getBoundingClientRect();ue=(q.x+ae.x)/2-(se?.left??0)}v.preventDefault()}}function G(v){if(!(l()||!ee.has(v.pointerId))){if(ee.set(v.pointerId,{x:v.clientX,y:v.clientY}),ee.size>=2){const[q,ae]=[...ee.values()],se=Math.hypot(q.x-ae.x,q.y-ae.y)||1;P(i*(se/z),ue);return}I.value?N.value=x(H.value+(v.clientX-A.value)):B===v.pointerId&&Math.abs(v.clientX-A.value)>ne&&(b.value?.setPointerCapture?.(v.pointerId),I.value=!0,N.value=x(H.value+(v.clientX-A.value)))}}function te(v){if(ee.delete(v.pointerId),B===v.pointerId&&(B=null),b.value?.releasePointerCapture?.(v.pointerId),ee.size===1){const[q]=[...ee.entries()];h(q[0],q[1].x)}else ee.size===0&&(I.value=!1)}function de(){y()}let Y=null;return Jt(()=>{Ie(y),b.value&&(Y=new ResizeObserver(()=>y()),Y.observe(b.value))}),mt(()=>{Y?.disconnect()}),me(()=>[l(),$.value,w.value,F.value],([v,q])=>{v&&q&&Ie(y)}),{panX:N,isPanning:I,pxPerMs:U,contentWidth:j,contentHeight:g,getBarX:f,getBarWidth:d,getBarTop:c,tickMarks:Q,onWheel:Z,onPointerDown:T,onPointerMove:G,onPointerUp:te,resetView:de}}const xl={key:0,class:"relative select-none"},hl=["width","height"],vl={key:1,class:"text-center py-10 text-gray-500"},kl=fe({__name:"WorkersTimeline",props:{testCases:{},setupSteps:{},shardTotal:{},live:{type:Boolean},wastedPatterns:{}},emits:["selectTestCase"],setup(t,{emit:b}){const w=t,F=b,{timelineData:$,workerRows:l,shardGroups:C,maxTime:m}=fl(w),D=O(null),K=M(()=>l.value.length),E=M(()=>$.value.length>0),{panX:N,isPanning:I,contentWidth:A,contentHeight:H,getBarX:U,getBarWidth:j,getBarTop:g,tickMarks:f,onWheel:d,onPointerDown:c,onPointerMove:S,onPointerUp:y,resetView:x}=yl({containerRef:D,maxTime:m,rowCount:K,hasData:E,live:()=>w.live}),P=M(()=>$.value.filter(Y=>Y.kind==="test").length),Q=M(()=>$.value.filter(Y=>Y.kind!=="test"&&Y.kind!=="wait").length),Z=M(()=>$.value.filter(Y=>Y.kind==="wait").length),ne=["test","setup","hook","fixture","wait"],ee={test:"Tests",setup:"Setup (beforeAll/afterAll)",hook:"Hooks",fixture:"Fixtures",wait:"Wasted waits"},B=O({}),z=M(()=>$.value.filter(Y=>!B.value[Y.kind])),i=M(()=>{const Y=new Set($.value.map(v=>v.kind));return ne.filter(v=>Y.has(v)).map(v=>({key:v,label:ee[v],checked:!B.value[v]}))});function ue(Y,v){B.value={...B.value,[Y]:!v}}const h=O(null),T=O({x:0,y:0});me(z,Y=>{h.value&&(h.value=Y.find(v=>v.key===h.value.key)??null)});function G(Y,v){h.value=Y,T.value={x:v.clientX,y:v.clientY}}function te(Y){T.value={x:Y.clientX,y:Y.clientY}}function de(){h.value=null}return(Y,v)=>{const q=Dr,ae=Lr,se=Zr,ge=rl,Ce=ke;return e($).length>0?(s(),a("div",xl,[u(q,{"worker-count":e(l).length,"shard-total":t.shardTotal,"test-count":P.value,"hook-count":Q.value,"wait-count":Z.value,"span-types":i.value,live:t.live,onToggleSpan:ue,onReset:e(x)},null,8,["worker-count","shard-total","test-count","hook-count","wait-count","span-types","live","onReset"]),n("div",{ref_key:"containerRef",ref:D,class:J(["relative overflow-hidden rounded-lg border border-gray-200 dark:border-gray-700 touch-pan-y",{"cursor-grab":!e(I),"cursor-grabbing":e(I)}]),style:he({height:e(H)+"px"}),onWheel:v[1]||(v[1]=Ue((...re)=>e(d)&&e(d)(...re),["prevent"])),onPointerdown:v[2]||(v[2]=(...re)=>e(c)&&e(c)(...re)),onPointermove:v[3]||(v[3]=(...re)=>e(S)&&e(S)(...re)),onPointerup:v[4]||(v[4]=(...re)=>e(y)&&e(y)(...re)),onPointercancel:v[5]||(v[5]=(...re)=>e(y)&&e(y)(...re)),onPointerleave:v[6]||(v[6]=(...re)=>e(y)&&e(y)(...re))},[(s(),a("svg",{class:"overflow-visible",style:he({transform:`translateX(${e(N)}px)`}),width:e(A),height:e(H)},[v[7]||(v[7]=n("defs",null,[n("filter",{id:"glow"},[n("feGaussianBlur",{stdDeviation:"2.5",result:"blur"}),n("feMerge",null,[n("feMergeNode",{in:"blur"}),n("feMergeNode",{in:"SourceGraphic"})])])],-1)),u(ae,{"worker-rows":e(l),"shard-groups":e(C),"tick-marks":e(f),"content-width":e(A),"shard-total":t.shardTotal},null,8,["worker-rows","shard-groups","tick-marks","content-width","shard-total"]),(s(!0),a(V,null,oe(z.value,re=>(s(),R(se,{key:re.key,item:re,x:e(U)(re),y:e(g)(re),width:e(j)(re),onSelect:v[0]||(v[0]=we=>F("selectTestCase",we)),onHover:G,onMove:te,onLeave:de},null,8,["item","x","y","width"]))),128))],12,hl))],38),u(ge,{item:h.value,pos:T.value},null,8,["item","pos"])])):(s(),a("div",vl,[u(Ce,{name:"i-lucide-rows-3",class:"size-8 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),v[8]||(v[8]=n("p",null,"No worker data available for this run.",-1))]))}}}),bl=Object.assign(kl,{__name:"WorkersTimeline"}),_l={key:0,class:"space-y-4"},wl={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},$l={class:"flex items-center gap-2 py-1.5"},Cl={class:"font-medium"},Rl={key:0,class:"flex"},Tl={key:1,class:"flex items-center justify-center py-6 text-gray-500 gap-2"},Il={class:"flex flex-wrap gap-2 mt-1"},Sl={class:"flex flex-wrap gap-4 text-sm"},zl={key:3,class:"text-sm text-gray-500"},Dl={class:"flex flex-wrap gap-4 text-sm"},Fl={key:0,class:"text-gray-400"},Pl={key:0,class:"text-gray-400"},jl={key:0},Ml={key:1,class:"text-gray-400"},Nl={key:0},Al={key:1,class:"text-gray-400"},Bl={key:0,class:"text-gray-400"},Ul={key:0,class:"text-gray-400"},Ll={key:4,class:"text-center py-8 text-gray-500"},El={key:5,class:"text-center py-8 text-gray-500"},Ol={key:1,class:"text-center py-10 text-gray-500"},Wl=fe({__name:"RunCompare",props:{testRun:{}},setup(t){const b=t,F=Ae().params.id,$=O(null),l=O([]),C=M(()=>b.testRun?.status==="running"||b.testRun?.status==="finalizing");me(()=>b.testRun?.projectId,async f=>{if(!(!f||C.value)){try{$.value=await $fetch(`/api/projects/${f}`)}catch(d){console.error("Failed to fetch project for RunCompare",d)}try{const d=await $fetch(`/api/projects/${f}/markers`);l.value=d.markers??[]}catch{}}},{immediate:!0});const m=M(()=>{if(!N.value||!b.testRun)return[];const f=new Date(N.value.startTime).getTime(),d=new Date(b.testRun.startTime).getTime(),c=Math.min(f,d),S=Math.max(f,d),y=new Set([N.value.environment,b.testRun.environment].filter(x=>x!=null));return l.value.filter(x=>{const P=new Date(x.occurredAt).getTime();return P<=c||P>=S?!1:x.environment==null||y.has(x.environment)})}),D=M(()=>$.value?.testRuns?$.value.testRuns.filter(f=>f.id!==Number(F)).slice(0,50).map(f=>({label:`Run #${f.id} — ${pt(f.startTime,{dateOnly:!0})} (${f.status})`,value:f.id})):[]),K=M(()=>{if(!$.value?.testRuns)return null;const f=[...$.value.testRuns].sort((c,S)=>new Date(S.startTime).getTime()-new Date(c.startTime).getTime()),d=f.findIndex(c=>c.id===Number(F));return d>=0&&d<f.length-1?f[d+1].id:null}),E=O(void 0),N=O(null),I=O(!1);me(E,async f=>{if(!f?.value){N.value=null;return}I.value=!0;try{N.value=await $fetch(`/api/test-runs/${f.value}`)}catch{}finally{I.value=!1}});function A(){if(K.value){const f=D.value.find(d=>d.value===K.value);f&&(E.value=f)}}const H=M(()=>b.testRun??null),{comparisonData:U,comparisonSummary:j}=Is(N,H),g=[{accessorKey:"title",header:ie("Test case")},{accessorKey:"statusA",header:ie("Status A")},{accessorKey:"statusB",header:ie("Status B")},{accessorKey:"durationA",header:ie("Duration A")},{accessorKey:"durationB",header:ie("Duration B")},{accessorKey:"delta",header:ie("Delta")},{accessorKey:"percentChange",header:ie("Change")}];return(f,d)=>{const c=Cs,S=Rs,y=_e,x=ke,P=gt,Q=Ts,Z=be,ne=Je,ee=$t;return s(),a("div",null,[t.testRun&&!C.value?(s(),a("div",_l,[n("div",wl,[n("div",null,[d[1]||(d[1]=n("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Run A (baseline)",-1)),u(c,{modelValue:E.value,"onUpdate:modelValue":d[0]||(d[0]=B=>E.value=B),items:D.value,placeholder:"Select a baseline run..."},null,8,["modelValue","items"])]),n("div",null,[d[2]||(d[2]=n("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},"Run B (this run)",-1)),n("div",$l,[u(S,{status:t.testRun.status},null,8,["status"]),n("span",Cl,"#"+o(t.testRun.id),1)])])]),K.value?(s(),a("div",Rl,[u(y,{icon:"i-lucide-arrow-left-right",size:"sm",variant:"outline",label:"Compare with previous run",onClick:A})])):k("",!0),I.value?(s(),a("div",Tl,[u(x,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),d[3]||(d[3]=n("span",null,"Loading baseline data...",-1))])):m.value.length>0?(s(),R(Q,{key:2,color:"warning",variant:"subtle",icon:"i-lucide-milestone",title:`${m.value.length} timeline marker${m.value.length>1?"s":""} between these runs`},{description:r(()=>[n("div",Il,[(s(!0),a(V,null,oe(m.value,B=>(s(),R(P,{key:B.id,marker:B,size:"sm"},null,8,["marker"]))),128))])]),_:1},8,["title"])):N.value&&e(U).length>0?(s(),a(V,{key:3},[n("div",Sl,[d[4]||(d[4]=n("span",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mr-1"},"Status",-1)),e(j).newFailures>0?(s(),R(Z,{key:0,color:"error",variant:"soft",size:"lg"},{default:r(()=>[_(o(e(j).newFailures)+" new failure"+o(e(j).newFailures>1?"s":""),1)]),_:1})):k("",!0),e(j).recovered>0?(s(),R(Z,{key:1,color:"success",variant:"soft",size:"lg"},{default:r(()=>[_(o(e(j).recovered)+" recovered ",1)]),_:1})):k("",!0),e(j).stillFailing>0?(s(),R(Z,{key:2,color:"warning",variant:"soft",size:"lg"},{default:r(()=>[_(o(e(j).stillFailing)+" still failing ",1)]),_:1})):k("",!0),e(j).newFailures===0&&e(j).recovered===0&&e(j).stillFailing===0?(s(),a("span",zl,"No status changes")):k("",!0)]),n("div",Dl,[d[5]||(d[5]=n("span",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mr-1"},"Duration changes",-1)),e(j).regressed>0?(s(),R(Z,{key:0,color:"error",variant:"soft",size:"lg"},{default:r(()=>[_(o(e(j).regressed)+" regressed ",1)]),_:1})):k("",!0),e(j).improved>0?(s(),R(Z,{key:1,color:"success",variant:"soft",size:"lg"},{default:r(()=>[_(o(e(j).improved)+" improved ",1)]),_:1})):k("",!0),u(Z,{color:"neutral",variant:"soft",size:"lg"},{default:r(()=>[_(o(e(j).unchanged)+" unchanged ",1)]),_:1})]),u(ee,{"min-width":"48rem",bleed:!1},{default:r(()=>[u(ne,{data:e(U),columns:g,ui:{base:"table-fixed border-separate border-spacing-0 min-w-[48rem]",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"statusA-cell":r(({row:B})=>[B.original.statusA?(s(),R(Z,{key:1,color:("getStatusColor"in f?f.getStatusColor:e(Le))(B.original.statusA),class:"capitalize"},{default:r(()=>[_(o(B.original.statusA),1)]),_:2},1032,["color"])):(s(),a("span",Fl,"—"))]),"statusB-cell":r(({row:B})=>[B.original.statusB?(s(),R(Z,{key:1,color:("getStatusColor"in f?f.getStatusColor:e(Le))(B.original.statusB),class:"capitalize"},{default:r(()=>[_(o(B.original.statusB),1)]),_:2},1032,["color"])):(s(),a("span",Pl,"—"))]),"durationA-cell":r(({row:B})=>[B.original.durationA!==null?(s(),a("span",jl,o(("formatDuration"in f?f.formatDuration:e(xe))(B.original.durationA)),1)):(s(),a("span",Ml,"—"))]),"durationB-cell":r(({row:B})=>[B.original.durationB!==null?(s(),a("span",Nl,o(("formatDuration"in f?f.formatDuration:e(xe))(B.original.durationB)),1)):(s(),a("span",Al,"—"))]),"delta-cell":r(({row:B})=>[B.original.delta===null?(s(),a("span",Bl,"—")):(s(),a("span",{key:1,class:J(B.original.delta>0?"text-red-600":B.original.delta<0?"text-green-600":"text-gray-500")},o(B.original.delta>0?"+":"")+o(("formatDuration"in f?f.formatDuration:e(xe))(B.original.delta)),3))]),"percentChange-cell":r(({row:B})=>[B.original.percentChange===null?(s(),a("span",Ul,"—")):(s(),a("span",{key:1,class:J(B.original.percentChange>10?"text-red-600 font-medium":B.original.percentChange<-10?"text-green-600 font-medium":"text-gray-500")},o(B.original.percentChange>0?"+":"")+o(B.original.percentChange)+"% ",3))]),_:1},8,["data"])]),_:1})],64)):E.value&&!I.value?(s(),a("div",Ll,[u(x,{name:"i-lucide-git-compare-arrows",class:"size-8 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),d[6]||(d[6]=n("p",null,"No comparison data available.",-1))])):(s(),a("div",El,[u(x,{name:"i-lucide-arrow-left-right",class:"size-8 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),d[7]||(d[7]=n("p",null,"Select a baseline run to compare.",-1))]))])):C.value?(s(),a("div",Ol,[u(x,{name:"i-lucide-git-compare-arrows",class:"size-8 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),d[8]||(d[8]=n("p",null,"Comparison is available after the run finishes.",-1))])):k("",!0)])}}}),Kl=Object.assign(Wl,{__name:"RunCompare"}),Hl={class:"flex flex-col overflow-hidden"},Vl={key:0,class:"flex-1 flex items-center justify-center text-gray-500 gap-2"},Gl={class:"text-xs font-mono break-all"},Xl={key:0,class:"text-gray-400"},ql={key:1,class:"text-red-600 font-medium"},Yl={key:2,class:"flex-1 flex items-center justify-center text-center text-gray-500"},Jl=fe({__name:"SlowEndpoints",props:{refreshKey:{}},emits:["endpointsCount"],async setup(t,{emit:b}){let w,F;const l=Ae().params.id,C=t,m=b,{data:D,pending:K,refresh:E}=([w,F]=je(()=>Me(`/api/test-runs/${l}/network-requests`,{lazy:!0,server:!1},"$DE3r8oSbIq")),w=await w,F(),w);me(D,I=>{m("endpointsCount",I?.length??0)}),me(()=>C.refreshKey,(I,A)=>{I!==A&&I!==void 0&&E()});const N=[{accessorKey:"method",header:ie("Method")},{accessorKey:"route",header:ie("Route")},{accessorKey:"count",header:ie("Calls")},{accessorKey:"avgDuration",header:ie("Avg")},{accessorKey:"p90Duration",header:ie("P90")},{accessorKey:"maxDuration",header:ie("Max")},{accessorKey:"errorRate",header:ie("Errors")}];return(I,A)=>{const H=ke,U=be,j=Je;return s(),a("div",Hl,[e(K)?(s(),a("div",Vl,[u(H,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),A[0]||(A[0]=n("span",null,"Loading network data...",-1))])):e(D)&&e(D).length>0?(s(),R(j,{key:1,sticky:"",data:e(D),columns:N,class:"flex-1 min-h-0",ui:{base:"table-fixed border-separate border-spacing-0 min-w-[44rem]",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0 [&>tr]:hover:bg-gray-50 dark:[&>tr]:hover:bg-gray-900/50",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"method-cell":r(({row:g})=>[u(U,{color:g.original.method==="GET"?"info":g.original.method==="POST"?"success":g.original.method==="PUT"||g.original.method==="PATCH"?"warning":g.original.method==="DELETE"?"error":"neutral",variant:"soft",class:"font-mono text-xs"},{default:r(()=>[_(o(g.original.method),1)]),_:2},1032,["color"])]),"route-cell":r(({row:g})=>[n("code",Gl,o(g.original.route),1)]),"avgDuration-cell":r(({row:g})=>[n("span",{class:J(g.original.avgDuration>1e3?"text-red-600 font-medium":g.original.avgDuration>500?"text-orange-500 font-medium":"")},o(("formatDuration"in I?I.formatDuration:e(xe))(g.original.avgDuration)),3)]),"p90Duration-cell":r(({row:g})=>[n("span",{class:J(g.original.p90Duration>2e3?"text-red-600 font-medium":g.original.p90Duration>1e3?"text-orange-500":"")},o(("formatDuration"in I?I.formatDuration:e(xe))(g.original.p90Duration)),3)]),"errorRate-cell":r(({row:g})=>[g.original.errorRate===0?(s(),a("span",Xl,"0%")):(s(),a("span",ql,o(g.original.errorRate)+"%",1))]),_:1},8,["data"])):(s(),a("div",Yl,[u(H,{name:"i-lucide-wifi-off",class:"size-8 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),A[1]||(A[1]=n("p",null,[_(" No network request data. Add the "),n("code",{class:"text-xs bg-gray-100 dark:bg-gray-800 px-1 rounded font-mono"},"@piwitests/reporter"),_(" fixtures to your test setup. ")],-1))]))])}}}),Zl=Object.assign(Jl,{__name:"SlowEndpoints"}),Ql={class:"inline-flex items-center justify-center w-5 h-5 rounded-full bg-blue-500/10 hover:bg-blue-500/20 transition-colors ml-1"},ei={key:0,class:"flex items-center gap-2 mb-3 shrink-0"},Qi=fe({__name:"[id]",async setup(t){let b,w;const F=Ae(),$=Zt(),l=F.params.id,C=!!Qt().public.demoMode,{data:m,refresh:D}=([b,w]=je(()=>Me(`/api/test-runs/${l}`,"$D01RBpMFGT")),b=await b,w(),b),K=m.value?.projectId,{data:E,refresh:N}=K?([b,w]=je(()=>Me(`/api/projects/${K}/latest-run`,{key:`latest-run-${K}`},"$e4OLHgXNMR")),b=await b,w(),b):{data:O(null),refresh:async()=>{}};Ss(N);const I=M(()=>E.value?.id??m.value?.project?.latestRunId??null),A=M(()=>E.value?.status??m.value?.project?.latestRunStatus??null),H=M(()=>A.value==="running"||A.value==="finalizing");es(M(()=>({title:`Test run #${l}${m.value?.project?` — ${m.value.project.name}`:""} — Piwi Dashboard`})));const U=ut(),j=O(!1),g=O(!1),f=M(()=>m.value?.status==="running"||m.value?.status==="finalizing"),d=O(!1),c=O([]),S=new Map,y=O(null);let x=null;const P=O([]);me([f,m],()=>{f.value&&c.value.length>0?P.value=[...c.value]:m.value?.testCases?P.value=m.value.testCases:P.value=[]},{immediate:!0});function Q(L){for(const W of L){const le=`${W.title}@@${W.location}@@${JSON.stringify(W.browser)}`;S.has(le)||(S.set(le,!0),c.value=[...c.value,W])}P.value=[...c.value]}let Z=[],ne=null;function ee(){if(Z.length===0)return;const L=Z;Z=[];for(const W of L){const le=W.data;if(W.type==="init")y.value={totalTests:le.totalTests,passedTests:le.passedTests,failedTests:le.failedTests,skippedTests:le.skippedTests};else if(W.type==="test-begin"){const X=le;if(X.stepCategory)continue;const $e=`${X.title}@@${X.location}@@${JSON.stringify(X.browser)}`;S.has($e)||(S.set($e,!0),c.value=[...c.value,{id:c.value.length+1,title:X.title,filePath:X.filePath,suitePath:X.suitePath??void 0,status:"running",location:X.location,workerIndex:X.workerIndex??null,startedAt:X.startedAt??Date.now(),browser:X.browser??null}],P.value=[...c.value])}else if(W.type==="test-completed"){const X=le;if(X.stepCategory)continue;const $e=`${X.title}@@${X.location}@@${JSON.stringify(X.browser)}`;if(S.has($e)){const Fe=c.value.findIndex(pe=>`${pe.title}@@${pe.location}@@${JSON.stringify(pe.browser)}`===$e);if(Fe>=0){const pe=c.value[Fe],Pe=[...c.value];Pe[Fe]={...pe,filePath:X.filePath??pe.filePath,suitePath:X.suitePath??pe.suitePath,status:X.status,duration:X.duration,error:X.error,stepEvents:X.stepEvents??pe.stepEvents,wastedTimeMs:X.wastedTimeMs??pe.wastedTimeMs,workerIndex:X.workerIndex??pe.workerIndex,startedAt:X.startedAt?X.startedAt:pe.startedAt,browser:X.browser??pe.browser},c.value=Pe,P.value=[...Pe]}}else S.set($e,!0),c.value=[...c.value,{id:c.value.length+1,title:X.title,filePath:X.filePath,suitePath:X.suitePath??void 0,status:X.status,duration:X.duration,location:X.location,error:X.error,stepEvents:X.stepEvents??null,wastedTimeMs:X.wastedTimeMs??null,workerIndex:X.workerIndex??null,startedAt:X.startedAt??void 0,browser:X.browser??null}],P.value=[...c.value]}else W.type==="run-progress"?y.value=le:W.type==="run-finalizing"?(d.value=!0,y.value=le):W.type==="run-finished"&&(d.value=!1,T(),D(),ve.value++,B())}}function B(L=0){C||L>=5||setTimeout(async()=>{await D(),B(L+1)},1500*(L+1))}function z(L){Z.push(L),ne&&clearTimeout(ne),ne=setTimeout(ee,200)}let i=null;function ue(){i||(m.value?.testCases?.length&&Q(m.value.testCases),i=zs(L=>{L.scope==="run"&&L.runId===Number(l)?z(L.event):L.scope==="global"&&L.event.runId===Number(l)&&L.event.type==="run-started"&&D()}))}function h(){if(C){ue();return}x||f.value&&(m.value?.testCases?.length&&Q(m.value.testCases),x=new EventSource(`/api/test-runs/${l}/stream`),x.onmessage=L=>{try{z(JSON.parse(L.data))}catch{}},x.onerror=()=>{})}function T(){x&&(x.close(),x=null),i&&(i(),i=null)}const G=M(()=>f.value||C&&m.value?.status==="initialising");me(G,L=>{L?h():T()},{immediate:!0}),mt(()=>{T()});let te=null;const de=O([]);me(P,L=>{te===null&&(te=requestAnimationFrame(()=>{de.value=L,te=null}))},{immediate:!0});const Y=M(()=>f.value&&y.value?y.value:m.value?{totalTests:m.value.totalTests,passedTests:m.value.passedTests,failedTests:m.value.failedTests,skippedTests:m.value.skippedTests}:null);async function v(){j.value=!1,g.value=!0;try{await $fetch(`/api/test-runs/${l}`,{method:"DELETE"}),U.add({title:"Test run deleted",color:"success"}),await Xe(`/projects/${m.value?.project?.id}`)}catch(L){const W=L&&typeof L=="object"&&"data"in L?L.data?.message:void 0;U.add({title:"Delete failed",description:W||"An error occurred",color:"error"})}finally{g.value=!1}}const q=O(!1),ae=O(""),se=O([]),ge=O("all"),Ce=M(()=>se.value.length===1?se.value[0]:"all");function re(L){se.value=!L||L==="all"?[]:[L]}const we=M(()=>m.value?.reports||[]),ze=M(()=>{const L=P.value;return L?L.reduce((W,le)=>W+(le.wastedTimeMs??0),0):0}),ye=O("test-cases"),p=O(null),ve=O(0),De=O(0);function Ze(){p.value=null}const Qe=M(()=>m.value&&m.value.failedTests>0),It=M(()=>{if(!m.value?.testCases)return 0;const L=new Set;for(const W of m.value.testCases)W.failureClusterId!=null&&L.add(W.failureClusterId);return L.size}),et=M(()=>{const L=f.value?P.value:m.value?.testCases;if(!L||L.length===0)return 0;const W=new Set;for(const le of L)le.workerIndex!=null&&le.workerIndex>=0&&W.add(le.workerIndex);return W.size}),tt=M(()=>[{label:`Test cases (${P.value.length})`,icon:"i-lucide-beaker",value:"test-cases",slot:"test-cases"},{label:"Insights",icon:"i-lucide-sparkles",value:"insights",slot:"insights"},...Qe.value?[{label:`Failure groups (${It.value})`,icon:"i-lucide-layers",value:"failure-groups",slot:"failure-groups"}]:[],...Qe.value?[{label:"Regression",icon:"i-lucide-git-pull-request-arrow",value:"regression",slot:"regression"}]:[],{label:`Timeline${et.value>0?` (${et.value})`:""}`,icon:"i-lucide-timeline",value:"workers",slot:"workers"},{label:"Compare",icon:"i-lucide-git-compare-arrows",value:"compare",slot:"compare"},{label:`Slow endpoints${De.value>0?` (${De.value})`:""}`,icon:"i-lucide-network",value:"endpoints",slot:"endpoints"}]),St={"test-cases":"overflow-hidden flex flex-col",endpoints:"overflow-hidden flex flex-col"},st=M(()=>tt.value.map(L=>L.value));typeof F.query.tab=="string"&&st.value.includes(F.query.tab)&&(ye.value=F.query.tab),me(st,L=>{L.includes(ye.value)||(ye.value="test-cases")}),me(ye,L=>{F.query.tab!==L&&$.replace({query:{...F.query,tab:L}})});const nt=O(null);function zt(L){ye.value="test-cases",Ie(()=>{nt.value?.scrollToCase(L)})}function Dt(L){p.value=L,ye.value="test-cases"}return(L,W)=>{const le=Vt,X=Ne,$e=ke,Fe=ft,pe=ts,Pe=ss,Ft=as,Pt=Pn,jt=be,Ke=_e,Mt=Ia,Nt=Ro,At=Yo,Bt=Cr,Ut=bl,Lt=Kl,Et=Zl,Ot=us,Wt=ns,Kt=Ct,Ht=ct;return s(),a(V,null,[u(Wt,{id:"test-run-detail"},{header:r(()=>[u(Ft,null,{leading:r(()=>[u(le),u(pe,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},...e(m)?.project?.id?[{label:e(m).project.label||e(m).project.name||"Project",to:`/projects/${e(m).project.id}`,slot:"project"}]:[{label:"Project"}],{label:`Run #${e(l)}`+(e(m)?.label?` — ${e(m).label}`:"")}]},{project:r(({item:ce})=>[u(X,{to:ce?.to,class:"text-sm font-medium text-[var(--ui-text-muted)] hover:text-[var(--ui-text)] transition-colors"},{default:r(()=>[_(o(ce?.label),1)]),_:2},1032,["to"]),I.value&&I.value!==Number(e(l))?(s(),R(Fe,{key:0,text:H.value?"Go to running run":"Go to latest run"},{default:r(()=>[u(X,{to:`/test-runs/${I.value}`},{default:r(()=>[n("span",Ql,[u($e,{name:"i-lucide-circle-play",class:J(["w-3.5 h-3.5 text-blue-500",{"animate-pulse":H.value}])},null,8,["class"])])]),_:1},8,["to"])]),_:1},8,["text"])):k("",!0)]),_:1},8,["items"])]),right:r(()=>[u(Pe,{actions:[{label:"Refresh",icon:"i-lucide-refresh-cw",onClick:()=>e(D)()},{label:"Delete",icon:"i-lucide-trash-2",color:"error",variant:"soft",loading:e(g),onClick:()=>j.value=!0}]},null,8,["actions"])]),_:1})]),body:r(()=>[u(Ot,{modelValue:e(ye),"onUpdate:modelValue":W[5]||(W[5]=ce=>Re(ye)?ye.value=ce:null),"tab-items":tt.value,"tab-panel-class":St},{summary:r(()=>[e(m)?(s(),R(Pt,{key:0,"test-run":e(m),"display-progress":Y.value,"all-reports":we.value,"show-custom-data":e(q),finalizing:e(d),"active-filter":Ce.value,"total-wasted-time":ze.value,"onUpdate:showCustomData":W[0]||(W[0]=ce=>q.value=ce),onFilterStatus:re,onLabelUpdated:e(D)},null,8,["test-run","display-progress","all-reports","show-custom-data","finalizing","active-filter","total-wasted-time","onLabelUpdated"])):k("",!0)]),"tab-test-cases":r(()=>[e(p)!=null?(s(),a("div",ei,[u(jt,{color:"info",variant:"subtle",size:"sm"},{default:r(()=>[...W[8]||(W[8]=[_(" Filtered by failure group ",-1)])]),_:1}),u(Ke,{size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-x",label:"Clear filter",onClick:Ze})])):k("",!0),u(Mt,{ref_key:"testCasesListRef",ref:nt,search:e(ae),"onUpdate:search":W[1]||(W[1]=ce=>Re(ae)?ae.value=ce:null),"active-statuses":e(se),"onUpdate:activeStatuses":W[2]||(W[2]=ce=>Re(se)?se.value=ce:null),"browser-filter":e(ge),"onUpdate:browserFilter":W[3]||(W[3]=ce=>Re(ge)?ge.value=ce:null),"test-cases":e(P),suites:e(m)?.suites??[],"is-live":f.value,"failure-cluster-filter":e(p),"project-key":e(m)?.projectId,"project-name":e(m)?.project?.name,class:"flex-1 min-h-0"},null,8,["search","active-statuses","browser-filter","test-cases","suites","is-live","failure-cluster-filter","project-key","project-name"])]),"tab-insights":r(()=>[u(Nt,{"test-run-id":Number(e(l)),"run-status":e(m)?.status??"","refresh-key":e(ve),class:"flex-1 min-h-0 p-4"},null,8,["test-run-id","run-status","refresh-key"])]),"tab-failure-groups":r(()=>[u(At,{"refresh-key":e(ve),onSelectCluster:Dt},null,8,["refresh-key"])]),"tab-regression":r(()=>[u(Bt,{"refresh-key":e(ve)},null,8,["refresh-key"])]),"tab-workers":r(()=>[u(Ut,{"test-cases":e(de),"setup-steps":e(m)?.setupSteps??null,"shard-total":e(m)?.shardTotal??null,live:f.value,"wasted-patterns":e(m)?.wastedWaitPatterns??null,onSelectTestCase:zt},null,8,["test-cases","setup-steps","shard-total","live","wasted-patterns"])]),"tab-compare":r(()=>[u(Lt,{"test-run":e(m)},null,8,["test-run"])]),"tab-endpoints":r(()=>[u(Et,{"refresh-key":e(ve),class:"flex-1 min-h-0",onEndpointsCount:W[4]||(W[4]=ce=>De.value=ce)},null,8,["refresh-key"])]),_:1},8,["modelValue","tab-items"])]),_:1}),u(Ht,null,{default:r(()=>[u(Kt,{open:e(j),title:"Delete test run","onUpdate:open":W[7]||(W[7]=ce=>j.value=ce)},{body:r(()=>[n("p",null,[W[9]||(W[9]=_(" Are you sure you want to delete ",-1)),n("strong",null,"Test Run #"+o(e(m)?.id),1),W[10]||(W[10]=_("? This will also remove all associated test results, reports, and traces. This action cannot be undone. ",-1))])]),footer:r(()=>[u(Ke,{color:"neutral",variant:"ghost",label:"Cancel",onClick:W[6]||(W[6]=ce=>j.value=!1)}),u(Ke,{color:"error",label:"Delete",icon:"i-lucide-trash-2",loading:e(g),onClick:v},null,8,["loading"])]),_:1},8,["open"])]),_:1})],64)}}});export{Qi as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const t={"home.flaky":{title:"Flaky tests",text:"Tests that pass and fail without code changes. This counts how many were detected across your projects recently.",doc:"flaky-tests#flaky-test-detection"},"home.trend-bars":{title:"Run history bars",text:"One bar per full run (up to 20), oldest left → newest right. Green = pass, red = fail, amber = passed with flaky tests, gray = skipped/unknown. Click a bar to open that run.",doc:"ui-overview#home-page"},"home.tendency":{title:"Tendency",text:"Derived from the last 5 full runs. Failing = latest run failed; flaky = pass/fail mixed or flaky tests seen in the window; passing = all recent runs green.",doc:"ui-overview#home-page"},"home.project-health":{title:"Project health",text:"Every project at a glance — run history bars and a tendency badge so you can immediately see which project needs attention. Only full runs count.",doc:"ui-overview#home-page"},"home.get-started":{title:"Get started",text:"Wire the Piwi reporter into your Playwright config to start sending results here. The wizard generates the snippet for you.",doc:"getting-started#using-the-piwi-dashboard-reporter"},"analytics.insights":{title:"Insights",text:"Auto-generated findings over the selected period — pass-rate drops, failing streaks, stale clusters, wasted CI time. Ranked by severity; click one to jump to the source."},"analytics.portfolio":{title:"Portfolio health",text:"Every project over the selected period: pass rate with its change vs the previous period, flaky volume, open failure clusters, and the latest run. Worst health sorts first."},"analytics.heatmap":{title:"Pass rate heatmap",text:"Each cell is the aggregate pass rate of one project over one time bucket — green is healthy, red is broken, gray means no runs. Longer periods use wider buckets."},"analytics.ci-time":{title:"CI time",text:"Total minutes your test runs consumed, over time, with the change vs the previous equal-length period. Steady growth here is a capacity conversation."},"analytics.wasted-time":{title:"Wasted CI time",text:"Minutes that produced no signal: time inside wait steps plus time executing attempts that ended failed or timed out. The strongest argument for fixing slow waits and flaky tests."},"analytics.flaky-leaderboard":{title:"Flakiest tests",text:"The worst flaky tests across all projects, using the same scoring as each project’s Flaky tests tab, sorted by wasted-CI impact.",doc:"flaky-tests#flaky-test-detection"},"analytics.cluster-landscape":{title:"Failure clusters",text:"Open failure clusters across all projects — the biggest and oldest unresolved root causes. Clusters outlive run retention, so this works on long horizons.",doc:"failure-clustering"},"analytics.regression-velocity":{title:"Regression velocity",text:"How much new breakage each period introduces: tests that passed in a baseline and now fail (regressions), plus tests that turned flaky. Rising bars mean quality debt is accumulating.",doc:"flaky-tests#regression-signals"},"analytics.browser-matrix":{title:"Browser matrix",text:"Pass rate per project × browser, so a suite that is green on one browser but failing on another (a browser-specific bug) stands out immediately."},"analytics.slow-endpoints":{title:"Slow endpoints",text:"Backend calls captured during tests, aggregated across all projects by route: p50/p90 latency, error rate, and how many projects hit each one — a shared endpoint regressing shows up here first.",doc:"capture-fixtures"},"projects.tag-filter":{text:"Filter projects by tag. Selecting several tags uses OR logic — a project matching any of them is shown."},"projects.table":{title:"Projects",text:"Every project that has reported results, with its latest run, pass rate and activity. Click a row to drill in.",doc:"ui-overview#projects-page"},"project.run-scope":{title:"Full vs partial runs",text:"A partial run executed only a subset of the suite (a shard, a retry, or a filtered selection). Trends use full runs so partial results don’t skew the numbers.",doc:"ui-overview#test-run-detail"},"project.runs-trend":{title:"Run trend",text:"Pass/fail counts per run over time. Hover a point for the exact run; sudden drops mark where things broke.",doc:"ui-overview#project-detail"},"project.flaky-tests":{title:"Flaky tests",text:"Tests that fail intermittently across runs. Impact estimates wasted CI time; the score (0–100) rates severity and root cause explains why.",doc:"flaky-tests#flaky-test-detection"},"project.performance":{title:"Performance",text:"Duration trends for the suite — average and P90 (the slowest 10% threshold). Use it to catch tests getting steadily slower.",doc:"flaky-tests#performance"},"project.timeline":{title:"Timeline markers",text:"Dated events — deploys, config changes, infra migrations, incidents — overlaid as vertical lines on the trend charts, so you can tell whether a change moved your results or performance. Markers can be scoped to an environment; some are detected automatically when tooling versions change between runs.",doc:"timeline-markers",envVars:["PIWI_AUTO_MARKERS"]},"project.slowest-tests":{title:"Slowest tests",text:"The tests taking the most time, ranked. Optimizing the top entries shortens your overall run the fastest.",doc:"ui-overview#performance-page"},"project.run-compare":{title:"Run comparison",text:"Diff two runs to see which tests changed status or duration between them — handy for confirming a fix or spotting a regression.",doc:"ui-overview#test-run-detail"},"project.test-cases":{title:"Test cases",text:'Every distinct test in the project with its executed-only pass rate, result breakdown and average duration across runs. Search by title or file, filter by status, and switch to a per-spec tree. Cases not run within the selected age window are hidden by default (last 30 days) — pick "All time" to see obsolete ones. Click a test to see its full history.',doc:"ui-overview#project-detail"},"project.compare":{title:"Compare runs",text:"Pick two runs to see a side-by-side summary and a per-test status diff between them.",doc:"ui-overview#test-run-detail"},"project.spec-health":{title:"Spec health",text:"A heatmap grouped by spec file: pass rate, flaky rate and average time per spec, so you can find the riskiest files at a glance.",doc:"flaky-tests#spec-health-heatmap"},"project.members":{title:"Project access",text:"Who can see this project. Admins always have access; reporters and users see only the projects assigned to them.",doc:"authentication#user-management"},"project.ai-instructions":{title:"AI diagnosis instructions",text:"Extra guidance handed to the AI when diagnosing this project’s failures — e.g. domain terms, known-flaky areas, or where to look first.",doc:"ai-diagnosis#custom-instructions"},"project.scm-token":{title:"Repository access token",text:"A read-only Git host token lets diagnosis pull the actual commit diffs behind a failure for SCM-grounded analysis. Stored encrypted.",doc:"ai-diagnosis#scm-grounded-context"},"run.summary":{title:"Run summary",text:"Headline outcome of this run — overall status, test counts and total duration.",doc:"ui-overview#test-run-detail"},"run.partial":{title:"Partial run",text:"This run covered only part of the suite (a shard, retry or filtered selection), so its totals aren’t a full picture.",doc:"ui-overview#test-run-detail"},"run.live":{title:"Live run",text:"This run is still streaming results in real time. Results and counts update as each test finishes.",doc:"reporter#live-streaming"},"run.ci-env":{title:"CI & environment",text:"Where this run executed — CI provider, pipeline and machine details — collected automatically by the reporter.",doc:"reporter#automatic-metadata-collection"},"run.reports":{title:"Storage & reports",text:"HTML reports, traces and attachments uploaded with this run. A run can carry several reports (e.g. per shard).",doc:"reporter#multiple-reports"},"run.metadata":{title:"Tags, links & custom data",text:"Extra context attached to the run: tags for grouping, links to external issues, and any custom key/value data your reporter sent."},"run.test-cases":{title:"Test cases",text:"Per-test results for this run. Filter by status, or by the NEW (new regression) and FLAKY signal badges.",doc:"ui-overview#test-run-detail"},"run.insights":{title:"Run insights",text:"Automatic highlights for this run — newly failing, flaky and slow tests — surfaced so you don’t have to hunt for them.",doc:"flaky-tests#run-insights"},"run.regression":{title:"Regression signals",text:"Tests that newly started failing in this run versus the project baseline — the most likely fallout from the latest change.",doc:"flaky-tests#regression-signals"},"run.timeline":{title:"Workers timeline",text:"When each test ran on each parallel worker. Gaps and long bars reveal poor parallelization or a single slow test stalling a shard.",doc:"ui-overview#test-run-detail"},"case.diagnosis-tab":{title:"Diagnosis",text:"Everything you need to understand and fix this failure in one place — the error, a verdict on what kind of failure it is, the captured evidence, and an AI diagnosis.",doc:"ui-overview#test-case-detail"},"case.verdict":{title:"Failure verdict",text:"An at-a-glance read on this failure: whether it newly regressed or is flaky, how many times it retried, and how long the test has been failing.",doc:"flaky-tests#regression-signals"},"case.evidence":{title:"Failure evidence",text:"What was captured at the moment of failure — screenshots, video and traces — grouped so you can see exactly what the browser saw.",doc:"ui-overview#trace-viewer"},"case.test-source":{title:"Test source",text:"The source around the failing line and the callers above it — captured from the failure’s call stack — so you can read where it broke, and the code that led there, without opening your editor. When the execution has a trace, this deepens into the complete call stack with the real source of every frame, read from the trace’s embedded files.",doc:"ui-overview#trace-powered-deep-views"},"case.artifacts":{title:"Artifacts",text:"Traces, attachments, console output and network requests captured for this execution — the raw material behind the result.",doc:"ui-overview#trace-viewer"},"case.steps":{title:"Steps",text:"Each step Playwright ran, with its duration. A failed step is highlighted with its error, and slow steps are color-coded.",doc:"ui-overview#test-case-detail"},"case.wasted-time":{title:"Wasted time",text:"Time spent in fixed waits (waitForTimeout and matching patterns) that could usually be replaced with a web-first assertion.",doc:"flaky-tests#performance"},"case.ai":{title:"AI diagnosis for this execution",text:"Diagnose just this failing execution, or copy the full evidence context to paste into your own AI assistant.",doc:"ai-diagnosis#diagnosing-one-execution"},"case.web-vitals":{title:"Web Vitals",text:"Core Web Vitals (LCP, CLS, etc.) captured during the test, measuring real loading and responsiveness of the page under test.",doc:"capture-fixtures"},"case.traces":{title:"Traces",text:`Playwright trace files for this execution. "View trace" opens them in the dashboard's own trace viewer — the trace stays on your server, it is never sent to a third party.`,doc:"ui-overview#trace-viewer"},"case.console":{title:"Console output",text:"Browser console messages logged while this test ran — often the first clue for a JavaScript error behind a failure.",doc:"capture-fixtures"},"case.network":{title:"Network requests",text:"HTTP requests the page made during the test, with timing and status — useful for spotting failed or slow calls. When the execution has a trace, the Full trace view shows every request (all resource types) with headers, timing phases, a waterfall and capped body previews; sensitive header values are masked.",doc:"ui-overview#trace-powered-deep-views"},"case.backend-logs":{title:"Backend server logs",text:"Server-side warnings and errors captured during the test, correlated with this execution via a Piwi backend integration.",doc:"backend-logs"},"case.aria":{title:"ARIA snapshot",text:"A snapshot of the accessibility tree at the moment of failure — what assistive tech saw, and useful grounding for AI diagnosis.",doc:"ai-diagnosis#what-a-diagnosis-contains"},"case.flaky-count":{title:"Flaky runs",text:"How many of this test’s recent executions flipped between pass and fail without a code change.",doc:"flaky-tests#flaky-test-detection"},"case.history-chart":{title:"Duration trend",text:"This test’s duration across recent runs. Rising times or spikes hint at a slowdown or instability.",doc:"flaky-tests#flaky-test-detection"},"case.sparkline":{title:"Status history",text:"Pass/fail outcome of this test over its recent runs, oldest to newest — a quick read on its stability.",doc:"flaky-tests#flaky-test-detection"},"cluster.concept":{title:"Failure clusters",text:"Failures with the same error fingerprint are grouped into one cluster, so a single root cause shows up once instead of N times.",doc:"ai-diagnosis#failure-clustering"},"cluster.new-vs-known":{title:"New vs known failure",text:"Whether this failure matches an existing cluster (a known issue) or opened a new one — a fresh signature worth a closer look.",doc:"ai-diagnosis#failure-clustering"},"cluster.triage":{text:"Track a cluster’s state: set its status, add triage notes, or extract a subset of failures into a separate cluster."},"cluster.evidence":{title:"Test evidence",text:"The concrete artifacts behind this cluster — screenshots, signals and traces from affected tests — gathered for review and AI diagnosis.",doc:"ai-diagnosis#what-a-diagnosis-contains"},"cluster.scm":{title:"What changed",text:"Recent commits and diffs around when this failure started, so you can connect the break to the change that caused it.",doc:"ai-diagnosis#scm-grounded-context"},"cluster.baseline":{title:"Baseline commit",text:"The last known-good commit. Diffs are computed from here forward to scope the search for the offending change.",doc:"ai-diagnosis#scm-grounded-context"},"cluster.commit-browser":{title:"Commit browser",text:"Browse the repository’s recent commits and inspect each diff to pick a baseline or find the suspect change.",doc:"ai-diagnosis#scm-grounded-context"},"cluster.diagnosis":{title:"AI diagnosis",text:"Runs the configured AI model over the failure plus its evidence and code changes to propose a root cause and fix.",doc:"ai-diagnosis#enabling-ai-diagnosis"},"cluster.context-input":{title:"Additional context",text:"Extra notes, files or screenshots you add to steer the diagnosis — anything the model can’t infer from the captured evidence.",doc:"ai-diagnosis#custom-instructions"},"cluster.context-preview":{title:"Context preview",text:"Exactly what will be sent to the AI, including how much was trimmed to fit the token budget. Review it before spending tokens.",doc:"ai-diagnosis#context-limits-and-token-cost"},"cluster.result":{title:"Diagnosis result",text:"The AI’s proposed root cause, fix and confidence. Treat it as a lead to verify, not proof — confirm against the evidence before acting.",doc:"ai-diagnosis#what-a-diagnosis-contains"},"cluster.ai-setup":{title:"AI not configured",text:"Diagnosis needs an AI provider and API key. Configure one in Settings → AI to enable automatic and on-demand analysis.",doc:"ai-diagnosis#enabling-ai-diagnosis"},"cluster.confidence":{title:"Confidence score",text:"How sure the model is of the top hypothesis (0–100). It is lowered when key evidence is missing or truncated, so treat a low score as “gather more before acting”.",doc:"ai-diagnosis#what-a-diagnosis-contains"},"cluster.hypotheses":{title:"Other hypotheses",text:"Alternative root causes the model weighed, ranked by likelihood. Useful when the evidence is ambiguous and the top pick is not conclusive.",doc:"ai-diagnosis#what-a-diagnosis-contains"},"cluster.coverage":{title:"Data coverage",text:"Which evidence sections were present, truncated or absent for this diagnosis — the same map the model sees. Absent or trimmed evidence lowers confidence; the quote icon marks sections the diagnosis cited.",doc:"ai-diagnosis#context-limits-and-token-cost"},"notifications.subscribe":{title:"Project notifications",text:"Get notified about this project’s runs through your channels. Choose which events trigger an alert.",doc:"notifications#subscriptions"},"settings.general":{title:"General settings",text:"Central place for account, users, AI diagnosis, notifications, storage and tags. Settings that can be overridden by environment variables show a lock badge naming the variable."},"settings.storage-stats":{title:"Storage statistics",text:"How much disk your reports, traces and attachments use, broken down so you can see what to clean up.",doc:"storage#storage-architecture"},"settings.cleanup":{title:"Cleanup old runs",text:"Delete runs (and their reports, traces and attachments) older than a chosen age to reclaim storage. This cannot be undone.",doc:"storage#storage-management"},"account.email":{title:"Email & verification",text:"Your account email is used for password resets and notifications. Verifying it confirms you own the address.",doc:"authentication#user-management"},"settings.smtp":{title:"SMTP status",text:"Outbound email (resets, invites, notifications) is configured through environment variables and shown here read-only.",doc:"notifications#smtp-configuration",envVars:["PIWI_SMTP_HOST","PIWI_SMTP_PORT","PIWI_SMTP_USER","PIWI_SMTP_PASS","PIWI_SMTP_FROM","PIWI_SMTP_FROM_NAME","PIWI_SMTP_SECURE"]},"notifications.channels":{title:"Channels",text:"Destinations an alert can go to — email, Slack or webhook. Create a channel, then subscribe events to it.",doc:"notifications#channels"},"notifications.subscriptions":{title:"Subscriptions",text:"Which events (run failed, new cluster, etc.) notify which channel, optionally scoped to one project and filtered.",doc:"notifications#subscriptions"},"settings.ai-provider":{title:"AI provider",text:"Configure the model providers behind the three AI roles — diagnosis, research and embedding. Each role has its own provider config, or reuses another role’s provider and credentials. Keys are stored encrypted and never returned by the API.",doc:"ai-diagnosis#enabling-ai-diagnosis",envVars:["PIWI_AI_PROVIDER","PIWI_AI_MODEL","PIWI_AI_API_KEY","PIWI_AI_BASE_URL"]},"settings.ai-instructions":{title:"Global analysis instructions",text:"Guidance applied to every diagnosis across all projects — house style, terminology, or things to always check. Per-project instructions add to this.",doc:"ai-diagnosis#custom-instructions"},"settings.ai-research":{title:"Research model",text:"An optional cheaper/faster model that pre-analyzes the failure (on a lean view) before the main model writes the final diagnosis. It can use its own provider, and the costly SCM diff is only fetched when it flags a likely regression. It also handles cluster naming and merge adjudication, so configuring a cheap research model routes those utility calls away from the expensive diagnosis model.",doc:"ai-diagnosis#enabling-ai-diagnosis",envVars:["PIWI_AI_RESEARCH_PROVIDER","PIWI_AI_RESEARCH_MODEL","PIWI_AI_RESEARCH_BASE_URL","PIWI_AI_RESEARCH_API_KEY"]},"settings.ai-limits":{title:"Diagnosis context limits",text:"Caps on how much evidence (and how many tokens) go into each diagnosis. Higher limits give the model more to work with but cost more. Each field can be pinned individually by its env var.",doc:"ai-diagnosis#context-limits-and-token-cost",envVars:["PIWI_AI_MAX_SAMPLE_ERROR_CHARS","PIWI_AI_MAX_SCM_PATCH_BUDGET","PIWI_AI_MAX_AFFECTED_TESTS","PIWI_AI_MAX_STEPS","PIWI_AI_MAX_CONSOLE_ENTRIES","PIWI_AI_MAX_CONSOLE_ENTRY_CHARS","PIWI_AI_MAX_NETWORK_REQUESTS","PIWI_AI_MAX_ARIA_SNAPSHOT_CHARS","PIWI_AI_MAX_TEST_SOURCE_CHARS","PIWI_AI_MAX_SERVER_LOG_ENTRIES","PIWI_AI_MAX_SERVER_LOG_ENTRY_CHARS","PIWI_AI_MAX_IMAGES","PIWI_AI_MAX_PASSED_PEERS","PIWI_AI_MAX_CONSOLE_WINDOW","PIWI_AI_SLOW_REQUEST_MS","PIWI_AI_MAX_TRACE_STACK_FRAMES","PIWI_AI_MAX_TRACE_NETWORK_REQUESTS"]},"settings.users":{title:"Users & roles",text:"Manage accounts and their role. Administrators control everything; reporters submit results; users have read-only access.",doc:"authentication#roles"},"settings.api-keys":{title:"API keys",text:"Tokens (prefixed pd_) that let the reporter or scripts authenticate without a password. Shown once at creation; revoke anytime.",doc:"authentication#api-keys"},"settings.tags":{text:"Reusable labels you can attach to projects for grouping and filtering across the dashboard."},"settings.wasted-time":{title:"Wasted-time patterns",text:"Define which wait steps count as wasted time. A wait is wasted when any pattern matches its step title or source location. Patterns are case-insensitive and support * and ? wildcards. Changes apply to existing runs immediately.",doc:"flaky-tests#performance",envVars:["PIWI_WASTED_WAIT_PATTERNS"]},"settings.timeout-hygiene":{title:"Timeout hygiene",text:"Thresholds for flagging oversized per-test timeouts and stale test.slow() marks. Opportunities are recomputed at read time, so changes apply to existing runs immediately.",doc:"flaky-tests#performance"},"settings.auto-diagnose":{title:"Auto-diagnose",text:"When a run finishes, up to 3 new failure clusters are diagnosed automatically — each diagnosis is one research call (when a research model is configured) plus one diagnosis call — and new clusters get human-readable titles in one batched call. Requires the diagnosis model to be configured.",doc:"ai-diagnosis#enabling-ai-diagnosis",envVars:["PIWI_AI_AUTO_DIAGNOSE"]},"settings.embedding-model":{title:"Embedding model",text:"Embeds failures so semantically-similar errors group together (used by failure clustering). Can reuse another role’s provider or configure its own.",doc:"ai-diagnosis#enabling-ai-diagnosis",envVars:["PIWI_AI_EMBEDDING_PROVIDER","PIWI_AI_EMBEDDING_MODEL","PIWI_AI_EMBEDDING_BASE_URL","PIWI_AI_EMBEDDING_API_KEY"]},"settings.privacy":{title:"Privacy notice",text:"What data is sent to the configured LLM provider when diagnosing a failure, and how secrets are stored. API keys are encrypted at rest; env vars keep them out of the DB entirely.",doc:"ai-diagnosis#what-a-diagnosis-contains"},"settings.storage-backend":{title:"Storage backend",text:"Where test artifacts (HTML reports, traces, attachments) are stored — local disk or S3. Configured entirely through environment variables; shown here read-only.",doc:"storage#storage-architecture",envVars:["PIWI_STORAGE_TYPE","PIWI_STORAGE_PATH","PIWI_S3_BUCKET","PIWI_S3_REGION","PIWI_S3_ACCESS_KEY_ID","PIWI_S3_SECRET_ACCESS_KEY","PIWI_S3_ENDPOINT","PIWI_S3_FORCE_PATH_STYLE"]},"settings.auth-toggle":{title:"Authentication",text:"Role-based access control and API keys. Off by default — when disabled, every endpoint behaves as a single virtual administrator.",doc:"authentication",envVars:["PIWI_AUTH_ENABLED","PIWI_AUTH_SECRET"]},"account.display-name":{title:"Display name",text:"A friendly name shown alongside your account. Optional, and visible only within the dashboard."},"account.connected-accounts":{title:"Connected accounts",text:"Sign in with an OAuth provider (Google or GitHub). Providers are configured by an operator through environment variables; one provider can be linked per account.",doc:"authentication#oauth-sign-in",envVars:["PIWI_OAUTH_GOOGLE_CLIENT_ID","PIWI_OAUTH_GOOGLE_CLIENT_SECRET","PIWI_OAUTH_GITHUB_CLIENT_ID","PIWI_OAUTH_GITHUB_CLIENT_SECRET","PIWI_OAUTH_ALLOWED_DOMAINS","PIWI_OAUTH_GITHUB_ALLOWED_ORGS"]},"account.password":{title:"Password",text:"Change the password you sign in with. OAuth-only accounts manage their password through their provider.",doc:"authentication#user-management"},"notifications.test-email":{title:"Send test email",text:"Send a test message through the configured SMTP server to verify delivery. Uses the environment-configured SMTP connection.",doc:"notifications#smtp-configuration"},"mcp.tools":{title:"What it provides",text:"The tools this MCP server exposes to AI agents, letting them query your projects, runs and failures directly.",doc:"mcp#what-it-provides"},"mcp.auth":{title:"Authentication",text:"How an MCP client authenticates to this server — uses the same API keys as the rest of the dashboard.",doc:"mcp#authentication"},"mcp.client-setup":{title:"Client setup",text:"Copy-paste configuration to connect Claude Code, Cursor, VS Code and other MCP clients to this server.",doc:"mcp#client-setup"},"shared.entity-links":{title:"Entity links",text:"Links to external systems (Jira, GitHub, etc.) attached to this item. The provider is detected automatically from the URL."},"ide.open":{title:"Open in IDE",text:"Click a source path to open it in your local editor. Set your local workspace folder (so VS Code gets an absolute path) or a JetBrains project name, then pick a method. Auto probes the JetBrains local server first (the only one it can confirm) before falling back to a vscode:// or jetbrains:// launch. These preferences live in this browser only.",doc:"ide-integration"},"locator-healing":{title:"Alternative locators",text:'When a locator breaks after a UI change, Piwi suggests pre-captured alternatives from the last passing run — or from another test in the project that uses the same locator. Each alternative is ranked by stability score — prefer data-testid (100) over CSS classes (10–40). The recommended fix shows the exact one-line edit for the failing test, with a "Copy fix prompt" for an AI coding agent. A "Your pick" badge marks a replacement you confirmed on the failing page: "Pick from snapshot" opens the failure-time DOM and lets you click the intended element, and "Pick from trace" opens the failure trace in the trace viewer, whose Pick locator tool works on the recorded page snapshots.',doc:"reporter#locator-healing"},"environment-diff":{title:"Environment diff",text:"Compares this execution’s environment (Playwright version, browser config, locale, viewport, CI provider, …) against the same test’s last passing run on the same browser. Only changed keys are shown — an empty diff rules out environment drift as the cause."},"visual-diff":{title:"Visual diff",text:"Pixel-compares the failing screenshot against the same test’s last passing screenshot (same browser). Red pixels in the overlay mark what changed. When the two screenshots have different dimensions the ratio is flagged as unreliable."},"dom-snapshot":{title:"DOM snapshot",text:"The page’s HTML around the failing action, rendered from the uploaded Playwright trace — nothing extra is captured. Input values, inline handlers and script bodies are removed; token-shaped strings are masked."},"page-state":{title:"App state at test end",text:"URL, history state, storage key names + value lengths, and cookie names + flags captured when the test ended. Values are never captured. Disable with the reporter’s capturePageState option.",doc:"capture-fixtures"}};function s(e){return t[e].envVars??[]}export{t as H,s as h};
|