@piwitests/server 0.20.0 → 0.21.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.
Files changed (688) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{CXEH9OPk.js → 9ti9eNH9.js} +1 -1
  3. package/.output/public/_nuxt/{oAClCn_h.js → B-zdP-D4.js} +1 -1
  4. package/.output/public/_nuxt/{DsesNydr.js → B1RmmOsM.js} +1 -1
  5. package/.output/public/_nuxt/{C0_yH0N7.js → B3Fsod9X.js} +1 -1
  6. package/.output/public/_nuxt/{Cnsmicv2.js → B3rirOqU.js} +34 -34
  7. package/.output/public/_nuxt/B3zmIJYb.js +1 -0
  8. package/.output/public/_nuxt/{DuwtTfO8.js → BAKUqW95.js} +2 -2
  9. package/.output/public/_nuxt/BG0KKQiT.js +7 -0
  10. package/.output/public/_nuxt/BGL_V7Y4.js +1 -0
  11. package/.output/public/_nuxt/{Dpd16JVI.js → BGusFAvZ.js} +1 -1
  12. package/.output/public/_nuxt/{l5WKbU4h.js → BNurUTla.js} +3 -3
  13. package/.output/public/_nuxt/BR5cR2Ot.js +1 -0
  14. package/.output/public/_nuxt/BTCh_0zN.js +1 -0
  15. package/.output/public/_nuxt/{C8e1EbJI.js → BTVqMsA3.js} +1 -1
  16. package/.output/public/_nuxt/{DabzhQB1.js → B_13C0GF.js} +1 -1
  17. package/.output/public/_nuxt/BeDIjhoR.js +44 -0
  18. package/.output/public/_nuxt/{D5tke0B5.js → BerCW7Ug.js} +1 -1
  19. package/.output/public/_nuxt/{BicAJ6U8.js → BfTNbVc_.js} +1 -1
  20. package/.output/public/_nuxt/BnbSEpXX.js +1 -0
  21. package/.output/public/_nuxt/Bo_dxehb.js +1 -0
  22. package/.output/public/_nuxt/{C2hkrSey.js → BpBHls4-.js} +1 -1
  23. package/.output/public/_nuxt/{Bm62iDV5.js → BpM6ZPIG.js} +1 -1
  24. package/.output/public/_nuxt/{GPNI1ffD.js → BqGumsDo.js} +2 -2
  25. package/.output/public/_nuxt/{A1pj0VnG.js → BrxtP_cN.js} +1 -1
  26. package/.output/public/_nuxt/{KyA_4Ks-.js → C2hNxjjz.js} +1 -1
  27. package/.output/public/_nuxt/C5PSqfKi.js +2 -0
  28. package/.output/public/_nuxt/C5vsaU4G.js +1 -0
  29. package/.output/public/_nuxt/C9sdHaXd.js +1 -0
  30. package/.output/public/_nuxt/{Und3xXFc.js → CAxgBYIt.js} +2 -2
  31. package/.output/public/_nuxt/{BmUfSNMV.js → CES2i5Pl.js} +1 -1
  32. package/.output/public/_nuxt/{CNyV9YpI.js → CFEdRqaj.js} +1 -1
  33. package/.output/public/_nuxt/{Dy-TJ0Mt.js → CFTZwazK.js} +1 -1
  34. package/.output/public/_nuxt/CIBS7ye6.js +1 -0
  35. package/.output/public/_nuxt/CIEceDOw.js +1 -0
  36. package/.output/public/_nuxt/{bLcjFslv.js → CJBhojV6.js} +1 -1
  37. package/.output/public/_nuxt/{b-GYfcrQ.js → CKYddHa6.js} +1 -1
  38. package/.output/public/_nuxt/{BKkF4pPD.js → CLVWiCds.js} +1 -1
  39. package/.output/public/_nuxt/{CwGWJbiy.js → CMYAryzi.js} +1 -1
  40. package/.output/public/_nuxt/{CjPfj7ya.js → COhdybDy.js} +1 -1
  41. package/.output/public/_nuxt/{B7FTvFWq.js → CRBXM2d6.js} +2 -2
  42. package/.output/public/_nuxt/CTD_pJ_v.js +1 -0
  43. package/.output/public/_nuxt/{Cus22Ud3.js → CTP8Pw0-.js} +2 -2
  44. package/.output/public/_nuxt/{CeW8v31b.js → CV8iF2kG.js} +1 -1
  45. package/.output/public/_nuxt/{H94BMf3L.js → CWKmbYlT.js} +1 -1
  46. package/.output/public/_nuxt/C_NfGMTd.js +9 -0
  47. package/.output/public/_nuxt/Cejoebel.js +6 -0
  48. package/.output/public/_nuxt/{FaFoMVKo.js → Chpah_7l.js} +1 -1
  49. package/.output/public/_nuxt/Ci9d8YVV.js +1 -0
  50. package/.output/public/_nuxt/{CIrFl3MW.js → CifRHVaR.js} +1 -1
  51. package/.output/public/_nuxt/{DrfE8IY0.js → Ckgsh9AT.js} +1 -1
  52. package/.output/public/_nuxt/{-f7BAm1H.js → Cpsq-kYE.js} +1 -1
  53. package/.output/public/_nuxt/Cqc-DSTF.js +1 -0
  54. package/.output/public/_nuxt/{CAAwCT7H.js → CsHulb12.js} +1 -1
  55. package/.output/public/_nuxt/Ctb2CqUf.js +5 -0
  56. package/.output/public/_nuxt/CtstIQSh.js +1 -0
  57. package/.output/public/_nuxt/{DJxlKFGb.js → CvMzDKvu.js} +1 -1
  58. package/.output/public/_nuxt/{CTU1mrhq.js → D2pBhsH8.js} +1 -1
  59. package/.output/public/_nuxt/{B3obW6cw.js → D8gX1Jde.js} +2 -2
  60. package/.output/public/_nuxt/D9knOn6D.js +1 -0
  61. package/.output/public/_nuxt/DAPTVdvA.js +1 -0
  62. package/.output/public/_nuxt/{Du2W7Jne.js → DCFbQvIN.js} +42 -42
  63. package/.output/public/_nuxt/DCoJlz_q.js +1 -0
  64. package/.output/public/_nuxt/DGnQ69wW.js +64 -0
  65. package/.output/public/_nuxt/{hNh4CIL0.js → DHzij16p.js} +1 -1
  66. package/.output/public/_nuxt/DJMCXRuW.js +5 -0
  67. package/.output/public/_nuxt/DJXcGkJP.js +2 -0
  68. package/.output/public/_nuxt/{DPCxhHri.js → DKFXZdWZ.js} +1 -1
  69. package/.output/public/_nuxt/{Bnxf8nbZ.js → DL24AjfW.js} +1 -1
  70. package/.output/public/_nuxt/DON74Yh6.js +1 -0
  71. package/.output/public/_nuxt/{5A6ITZXj.js → DQM62mxB.js} +1 -1
  72. package/.output/public/_nuxt/DSe8DxMl.js +1 -0
  73. package/.output/public/_nuxt/DWwiVTZX.js +24 -0
  74. package/.output/public/_nuxt/DX4tAP78.js +1 -0
  75. package/.output/public/_nuxt/{C1gTN4Q8.js → D_eDAIsT.js} +1 -1
  76. package/.output/public/_nuxt/Da8A92cF.js +1 -0
  77. package/.output/public/_nuxt/{CzAPFPpL.js → DdH3op4b.js} +1 -1
  78. package/.output/public/_nuxt/DepFDZO3.js +1 -0
  79. package/.output/public/_nuxt/{BzRRzmwm.js → DfSBKzrC.js} +1 -1
  80. package/.output/public/_nuxt/{BdfhYr-u.js → DfnKh3dZ.js} +1 -1
  81. package/.output/public/_nuxt/{Bow4tTR0.js → DhpTfeip.js} +1 -1
  82. package/.output/public/_nuxt/{CAvY22RE.js → Dk9nD32g.js} +1 -1
  83. package/.output/public/_nuxt/{BrQEE053.js → DkT2nCqn.js} +1 -1
  84. package/.output/public/_nuxt/DlW85lQq.js +4 -0
  85. package/.output/public/_nuxt/DnNio-ut.js +1 -0
  86. package/.output/public/_nuxt/{DdwHkKfV.js → DnQv_hst.js} +1 -1
  87. package/.output/public/_nuxt/{B99fbi73.js → DqEOMteW.js} +1 -1
  88. package/.output/public/_nuxt/{4gYNA-d4.js → Dsvu7YJT.js} +1 -1
  89. package/.output/public/_nuxt/DvhCDBrR.js +2 -0
  90. package/.output/public/_nuxt/DwQaVMZR.js +1 -0
  91. package/.output/public/_nuxt/E-_n_6vi.js +1 -0
  92. package/.output/public/_nuxt/{BT3wGCTI.js → Ebw5l7n8.js} +1 -1
  93. package/.output/public/_nuxt/{CA9B2HE5.js → IPePdbzl.js} +1 -1
  94. package/.output/public/_nuxt/{DJmoLeVt.js → LHoUGrfi.js} +1 -1
  95. package/.output/public/_nuxt/{L3kAWB2a.js → NERLHpOL.js} +1 -1
  96. package/.output/public/_nuxt/{CeG9pBAD.js → RAdNGxcF.js} +1 -1
  97. package/.output/public/_nuxt/Vxyo_mU9.js +1 -0
  98. package/.output/public/_nuxt/{pQqGiNch.js → YE1kAkU9.js} +1 -1
  99. package/.output/public/_nuxt/{CsLojMwR.js → YmT5WiN5.js} +1 -1
  100. package/.output/public/_nuxt/ZcAfCxWE.js +17 -0
  101. package/.output/public/_nuxt/{CxyAzHr3.js → _rglcvXN.js} +1 -1
  102. package/.output/public/_nuxt/bFU9Y1Vw.js +10 -0
  103. package/.output/public/_nuxt/bfecIH89.js +1 -0
  104. package/.output/public/_nuxt/builds/latest.json +1 -1
  105. package/.output/public/_nuxt/builds/meta/31ca2be4-a949-4df6-9818-773fc085557a.json +1 -0
  106. package/.output/public/_nuxt/entry.BAvBQY-h.css +1 -0
  107. package/.output/public/_nuxt/four-S1Y.js +1 -0
  108. package/.output/public/_nuxt/{CJFtzlQ4.js → gV2U_Gqd.js} +1 -1
  109. package/.output/public/_nuxt/{DeY2JkR2.js → lGC893pn.js} +1 -1
  110. package/.output/public/_nuxt/nOfj-ar8.js +1 -0
  111. package/.output/public/_nuxt/oKrbs1XK.js +1 -0
  112. package/.output/public/_nuxt/oSJFAC38.js +1 -0
  113. package/.output/public/_nuxt/rL4C0HV5.js +1 -0
  114. package/.output/public/_nuxt/{Dyeqn3aG.js → tQoyVPCE.js} +1 -1
  115. package/.output/public/_nuxt/{DfgOx_ou.js → uSPCvASp.js} +1 -1
  116. package/.output/public/_nuxt/{hC_z4G8p.js → wkz5-1SO.js} +1 -1
  117. package/.output/public/_nuxt/yYlVYKCz.js +34 -0
  118. package/.output/public/_nuxt/{AbmKWFQQ.js → zv8WdMx0.js} +1 -1
  119. package/.output/server/chunks/_/scope.mjs +43 -27
  120. package/.output/server/chunks/_/scope.mjs.map +1 -1
  121. package/.output/server/chunks/_/users.mjs +1 -1
  122. package/.output/server/chunks/build/{Breadcrumb-Ak2Lg3oM.mjs → Breadcrumb-3itRZ1uz.mjs} +2 -2
  123. package/.output/server/chunks/build/Breadcrumb-3itRZ1uz.mjs.map +1 -0
  124. package/.output/server/chunks/build/{BreadcrumbNav-DO7I_z-n.mjs → BreadcrumbNav-GnjBvXuT.mjs} +2 -2
  125. package/.output/server/chunks/build/BreadcrumbNav-GnjBvXuT.mjs.map +1 -0
  126. package/.output/server/chunks/build/{BrowserBadge-MFvBwxmD.mjs → BrowserBadge-DQqJS9CV.mjs} +2 -2
  127. package/.output/server/chunks/build/BrowserBadge-DQqJS9CV.mjs.map +1 -0
  128. package/.output/server/chunks/build/{ChartCard-Y1UKwMsf.mjs → ChartCard-D0rzMf-N.mjs} +2 -2
  129. package/.output/server/chunks/build/ChartCard-D0rzMf-N.mjs.map +1 -0
  130. package/.output/server/chunks/build/{Checkbox-4Q5d0fa0.mjs → Checkbox-DmRKG-0s.mjs} +3 -3
  131. package/.output/server/chunks/build/Checkbox-DmRKG-0s.mjs.map +1 -0
  132. package/.output/server/chunks/build/{CodeBlock-BgE-NSmE.mjs → CodeBlock-DGhKVFad.mjs} +4 -4
  133. package/.output/server/chunks/build/CodeBlock-DGhKVFad.mjs.map +1 -0
  134. package/.output/server/chunks/build/{DashboardNavbar-BHmMSPX7.mjs → DashboardNavbar-DCr10nxL.mjs} +2 -2
  135. package/.output/server/chunks/build/DashboardNavbar-DCr10nxL.mjs.map +1 -0
  136. package/.output/server/chunks/build/{DashboardSidebarToggle-DCTnHiIv.mjs → DashboardSidebarToggle-8EpBhX0R.mjs} +3 -3
  137. package/.output/server/chunks/build/DashboardSidebarToggle-8EpBhX0R.mjs.map +1 -0
  138. package/.output/server/chunks/build/{DataLocationCard-B_YHdzSz.mjs → DataLocationCard-rzS-pgCP.mjs} +5 -5
  139. package/.output/server/chunks/build/DataLocationCard-rzS-pgCP.mjs.map +1 -0
  140. package/.output/server/chunks/build/{DiagnosisPanel-CALyEmcJ.mjs → DiagnosisPanel-BWTpoCKy.mjs} +8 -7
  141. package/.output/server/chunks/build/DiagnosisPanel-BWTpoCKy.mjs.map +1 -0
  142. package/.output/server/chunks/build/{useAiStatus-CxjMmDDY.mjs → DiagnosisResult-Br3qBLXe.mjs} +10 -32
  143. package/.output/server/chunks/build/DiagnosisResult-Br3qBLXe.mjs.map +1 -0
  144. package/.output/server/chunks/build/{DurationValue-D20oGbnc.mjs → DurationValue-CWKfjIF2.mjs} +2 -2
  145. package/.output/server/chunks/build/DurationValue-CWKfjIF2.mjs.map +1 -0
  146. package/.output/server/chunks/build/{EntityLinks-BBHWssHH.mjs → EntityLinks-CF0xG3Y8.mjs} +6 -6
  147. package/.output/server/chunks/build/EntityLinks-CF0xG3Y8.mjs.map +1 -0
  148. package/.output/server/chunks/build/EnvManagedBadge-UwD2b9v2.mjs +1 -1
  149. package/.output/server/chunks/build/FeatureUnavailable-CwPms6X_.mjs +83 -0
  150. package/.output/server/chunks/build/FeatureUnavailable-CwPms6X_.mjs.map +1 -0
  151. package/.output/server/chunks/build/{FormField-B0HKsdMd.mjs → FormField-e7OnSKPM.mjs} +2 -2
  152. package/.output/server/chunks/build/FormField-e7OnSKPM.mjs.map +1 -0
  153. package/.output/server/chunks/build/GetStartedWizard-CB5v1Xzu.mjs +510 -0
  154. package/.output/server/chunks/build/GetStartedWizard-CB5v1Xzu.mjs.map +1 -0
  155. package/.output/server/chunks/build/{HelpHint-DrcIv-Oj.mjs → HelpHint-DjGrGFA7.mjs} +3 -3
  156. package/.output/server/chunks/build/HelpHint-DjGrGFA7.mjs.map +1 -0
  157. package/.output/server/chunks/build/{LoadingState-C3pBSuOO.mjs → LoadingState-B8v1nWJt.mjs} +3 -3
  158. package/.output/server/chunks/build/LoadingState-B8v1nWJt.mjs.map +1 -0
  159. package/.output/server/chunks/build/{CiEnvCard-DB5DvBh1.mjs → MetaStripGroup-dXXa_MzF.mjs} +242 -529
  160. package/.output/server/chunks/build/MetaStripGroup-dXXa_MzF.mjs.map +1 -0
  161. package/.output/server/chunks/build/{MiniRunBars-CZMugDrh.mjs → MiniRunBars-fgLMgRUp.mjs} +2 -2
  162. package/.output/server/chunks/build/MiniRunBars-fgLMgRUp.mjs.map +1 -0
  163. package/.output/server/chunks/build/{useSettingsNav-DnQKacz8.mjs → NavigationMenu-cqpt11Ce.mjs} +5 -28
  164. package/.output/server/chunks/build/NavigationMenu-cqpt11Ce.mjs.map +1 -0
  165. package/.output/server/chunks/build/{OpenInIdeLink-CQWKKChd.mjs → OpenInIdeLink-B9wvQkhy.mjs} +5 -5
  166. package/.output/server/chunks/build/{OpenInIdeLink-CQWKKChd.mjs.map → OpenInIdeLink-B9wvQkhy.mjs.map} +1 -1
  167. package/.output/server/chunks/build/{ProjectTestCasesTable-Bo61P5K1.mjs → ProjectTestCasesTable-BwHEtZTz.mjs} +15 -15
  168. package/.output/server/chunks/build/ProjectTestCasesTable-BwHEtZTz.mjs.map +1 -0
  169. package/.output/server/chunks/build/{RunReports-DFLv51TX.mjs → RunReports-BDRIWn3o.mjs} +2 -2
  170. package/.output/server/chunks/build/RunReports-BDRIWn3o.mjs.map +1 -0
  171. package/.output/server/chunks/build/{RunStatusBadge-FfGb6bkW.mjs → RunStatusBadge-CuTDknRJ.mjs} +2 -2
  172. package/.output/server/chunks/build/RunStatusBadge-CuTDknRJ.mjs.map +1 -0
  173. package/.output/server/chunks/build/{SectionCard-CN-v0FZ_.mjs → SectionCard-BW5Lynrr.mjs} +2 -2
  174. package/.output/server/chunks/build/SectionCard-BW5Lynrr.mjs.map +1 -0
  175. package/.output/server/chunks/build/{Select-5DK9frQ7.mjs → Select-CVctwpib.mjs} +3 -3
  176. package/.output/server/chunks/build/Select-CVctwpib.mjs.map +1 -0
  177. package/.output/server/chunks/build/{SelectMenu-D-2FSqBU.mjs → SelectMenu-XLVBEa11.mjs} +3 -3
  178. package/.output/server/chunks/build/{SelectMenu-D-2FSqBU.mjs.map → SelectMenu-XLVBEa11.mjs.map} +1 -1
  179. package/.output/server/chunks/build/{SettingsField-BZfx4ma1.mjs → SettingsField-DvtRvI6O.mjs} +3 -3
  180. package/.output/server/chunks/build/SettingsField-DvtRvI6O.mjs.map +1 -0
  181. package/.output/server/chunks/build/{StatTile-D61Vzo6e.mjs → StatTile-DpcVQFVI.mjs} +2 -26
  182. package/.output/server/chunks/build/StatTile-DpcVQFVI.mjs.map +1 -0
  183. package/.output/server/chunks/build/StatTileGrid-7zOFUQ6j.mjs +30 -0
  184. package/.output/server/chunks/build/StatTileGrid-7zOFUQ6j.mjs.map +1 -0
  185. package/.output/server/chunks/build/{Switch-B5Fp8ULt.mjs → Switch-8zWfwI5B.mjs} +2 -2
  186. package/.output/server/chunks/build/Switch-8zWfwI5B.mjs.map +1 -0
  187. package/.output/server/chunks/build/Table-BRk04Hd2.mjs +1 -1
  188. package/.output/server/chunks/build/{TestCaseHistoryChart-CSi64vVA.mjs → TestCaseHistoryChart-C6t5RrCG.mjs} +2 -2
  189. package/.output/server/chunks/build/TestCaseHistoryChart-C6t5RrCG.mjs.map +1 -0
  190. package/.output/server/chunks/build/{TestMetaBadges-D5_yUtIP.mjs → TestMetaBadges-BlyKmfeP.mjs} +1 -1
  191. package/.output/server/chunks/build/TestMetaBadges-BlyKmfeP.mjs.map +1 -0
  192. package/.output/server/chunks/build/{TestStatusBar-DX3EhlyP.mjs → TestStatusBar-DhbrM_rQ.mjs} +3 -3
  193. package/.output/server/chunks/build/TestStatusBar-DhbrM_rQ.mjs.map +1 -0
  194. package/.output/server/chunks/build/{Textarea-Dv2-lOvW.mjs → Textarea-vkMKVQTJ.mjs} +2 -2
  195. package/.output/server/chunks/build/Textarea-vkMKVQTJ.mjs.map +1 -0
  196. package/.output/server/chunks/build/Tooltip-Dv4htNP6.mjs +1 -1
  197. package/.output/server/chunks/build/{_id_-BdG37K7s.mjs → _id_-2PMH6rl8.mjs} +20 -19
  198. package/.output/server/chunks/build/_id_-2PMH6rl8.mjs.map +1 -0
  199. package/.output/server/chunks/build/{_id_-BdJs7BJZ.mjs → _id_-8cGIgeg6.mjs} +1903 -1113
  200. package/.output/server/chunks/build/_id_-8cGIgeg6.mjs.map +1 -0
  201. package/.output/server/chunks/build/{_id_-C_uSBiyU.mjs → _id_-CUZ5S6y5.mjs} +29 -29
  202. package/.output/server/chunks/build/_id_-CUZ5S6y5.mjs.map +1 -0
  203. package/.output/server/chunks/build/{_id_-BxA6IgWr.mjs → _id_-DMkgWSLZ.mjs} +885 -381
  204. package/.output/server/chunks/build/_id_-DMkgWSLZ.mjs.map +1 -0
  205. package/.output/server/chunks/build/{about-BE0UV-8-.mjs → about-D3WXTDro.mjs} +21 -453
  206. package/.output/server/chunks/build/about-D3WXTDro.mjs.map +1 -0
  207. package/.output/server/chunks/build/{account-DAfvaD-F.mjs → account-BslDNCoo.mjs} +6 -6
  208. package/.output/server/chunks/build/account-BslDNCoo.mjs.map +1 -0
  209. package/.output/server/chunks/build/{ai-Cn05ch0u.mjs → ai-C23R9l94.mjs} +14 -14
  210. package/.output/server/chunks/build/{ai-Cn05ch0u.mjs.map → ai-C23R9l94.mjs.map} +1 -1
  211. package/.output/server/chunks/build/{analytics-Bo_B_jko.mjs → analytics-DQHeToK0.mjs} +104 -77
  212. package/.output/server/chunks/build/analytics-DQHeToK0.mjs.map +1 -0
  213. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  214. package/.output/server/chunks/build/compare-RxHSOdsO.mjs +1 -0
  215. package/.output/server/chunks/build/{db.client-CQoVTYB9.mjs → db.client-D74DghqX.mjs} +38 -2
  216. package/.output/server/chunks/build/db.client-D74DghqX.mjs.map +1 -0
  217. package/.output/server/chunks/build/{default-CbNHaFsy.mjs → default-CeyePZ5I.mjs} +32 -19
  218. package/.output/server/chunks/build/{default-CbNHaFsy.mjs.map → default-CeyePZ5I.mjs.map} +1 -1
  219. package/.output/server/chunks/build/{docs-B_llWMxx.mjs → docs-f_bnC75q.mjs} +14 -14
  220. package/.output/server/chunks/build/{docs-B_llWMxx.mjs.map → docs-f_bnC75q.mjs.map} +1 -1
  221. package/.output/server/chunks/build/{edit-J0asTFg8.mjs → edit-BOC4zWuH.mjs} +11 -12
  222. package/.output/server/chunks/build/edit-BOC4zWuH.mjs.map +1 -0
  223. package/.output/server/chunks/build/{fetch-B4FwBOzu.mjs → fetch-BQg_fhX0.mjs} +32 -4
  224. package/.output/server/chunks/build/fetch-BQg_fhX0.mjs.map +1 -0
  225. package/.output/server/chunks/build/{forgot-password-CC__1OnV.mjs → forgot-password-CxuVbGWy.mjs} +4 -3
  226. package/.output/server/chunks/build/forgot-password-CxuVbGWy.mjs.map +1 -0
  227. package/.output/server/chunks/build/{import-CS9oylTN.mjs → import-CC27wEIu.mjs} +12 -12
  228. package/.output/server/chunks/build/import-CC27wEIu.mjs.map +1 -0
  229. package/.output/server/chunks/build/{index-e9skCi-V.mjs → index-B6PjfyTY.mjs} +39 -537
  230. package/.output/server/chunks/build/index-B6PjfyTY.mjs.map +1 -0
  231. package/.output/server/chunks/build/{index-CU2nZhAa.mjs → index-BOK1aJk9.mjs} +2 -1
  232. package/.output/server/chunks/build/index-BOK1aJk9.mjs.map +1 -0
  233. package/.output/server/chunks/build/{index-hGHlmyxj.mjs → index-BhS1DuCr.mjs} +117 -76
  234. package/.output/server/chunks/build/index-BhS1DuCr.mjs.map +1 -0
  235. package/.output/server/chunks/build/{index-DE45ycdZ.mjs → index-DUmjP3Gr.mjs} +12 -13
  236. package/.output/server/chunks/build/index-DUmjP3Gr.mjs.map +1 -0
  237. package/.output/server/chunks/build/index-jvF53f7_.mjs +91 -0
  238. package/.output/server/chunks/build/index-jvF53f7_.mjs.map +1 -0
  239. package/.output/server/chunks/build/isValueEqualOrExist-D2qw9YEr.mjs +1 -1
  240. package/.output/server/chunks/build/{login-Da4u1IlW.mjs → login-CdpOhiP8.mjs} +8 -7
  241. package/.output/server/chunks/build/login-CdpOhiP8.mjs.map +1 -0
  242. package/.output/server/chunks/build/{mcp-uhVCCwQM.mjs → mcp-WTeO5WRo.mjs} +193 -10
  243. package/.output/server/chunks/build/mcp-WTeO5WRo.mjs.map +1 -0
  244. package/.output/server/chunks/build/{notifications-fx_qnKGA.mjs → notifications-yY6ik-fi.mjs} +9 -9
  245. package/.output/server/chunks/build/notifications-yY6ik-fi.mjs.map +1 -0
  246. package/.output/server/chunks/build/{pr-feedback-X6-70iF0.mjs → pr-feedback-Hv2Ydh_6.mjs} +7 -7
  247. package/.output/server/chunks/build/pr-feedback-Hv2Ydh_6.mjs.map +1 -0
  248. package/.output/server/chunks/build/{reset-password-BmrUS4ZD.mjs → reset-password-CFtO8A6n.mjs} +4 -3
  249. package/.output/server/chunks/build/reset-password-CFtO8A6n.mjs.map +1 -0
  250. package/.output/server/chunks/build/server.mjs +51 -34
  251. package/.output/server/chunks/build/{settings-CCYe7rsc.mjs → settings-DIpvnY8_.mjs} +10 -8
  252. package/.output/server/chunks/build/settings-DIpvnY8_.mjs.map +1 -0
  253. package/.output/server/chunks/build/{settings-metadata-DrEqWcW-.mjs → settings-metadata-DRv9VveS.mjs} +32 -2
  254. package/.output/server/chunks/build/settings-metadata-DRv9VveS.mjs.map +1 -0
  255. package/.output/server/chunks/build/setup-Di0UMyWx.mjs +1116 -0
  256. package/.output/server/chunks/build/setup-Di0UMyWx.mjs.map +1 -0
  257. package/.output/server/chunks/build/{storage-CJEmviCD.mjs → storage-gAbY1KbQ.mjs} +10 -10
  258. package/.output/server/chunks/build/storage-gAbY1KbQ.mjs.map +1 -0
  259. package/.output/server/chunks/build/{tags-DauTe_F-.mjs → tags-DJ80wCqt.mjs} +6 -7
  260. package/.output/server/chunks/build/tags-DJ80wCqt.mjs.map +1 -0
  261. package/.output/server/chunks/build/{test-cases-thBbAykw.mjs → test-cases-YP83YlnL.mjs} +18 -18
  262. package/.output/server/chunks/build/test-cases-YP83YlnL.mjs.map +1 -0
  263. package/.output/server/chunks/build/test-functions-BwLTxGmM.mjs +550 -0
  264. package/.output/server/chunks/build/test-functions-BwLTxGmM.mjs.map +1 -0
  265. package/.output/server/chunks/build/{timeout-hygiene-CbnSaVbK.mjs → timeout-hygiene-RpXDjXTX.mjs} +6 -6
  266. package/.output/server/chunks/build/timeout-hygiene-RpXDjXTX.mjs.map +1 -0
  267. package/.output/server/chunks/build/useAiStatus-UR8x-feE.mjs +9 -0
  268. package/.output/server/chunks/build/useAiStatus-UR8x-feE.mjs.map +1 -0
  269. package/.output/server/chunks/build/{useCopyRich-RJKhWoyj.mjs → useCopyRich-Cd5Yj_Wy.mjs} +694 -242
  270. package/.output/server/chunks/build/useCopyRich-Cd5Yj_Wy.mjs.map +1 -0
  271. package/.output/server/chunks/build/{useDesktopDownload-BepjqxOt.mjs → useDesktopDownload-BmR6ouz2.mjs} +2 -2
  272. package/.output/server/chunks/build/useDesktopDownload-BmR6ouz2.mjs.map +1 -0
  273. package/.output/server/chunks/build/{useOpenInIde-BbTnPhFA.mjs → useOpenInIde-DolN3bZ5.mjs} +1 -1
  274. package/.output/server/chunks/build/useOpenInIde-DolN3bZ5.mjs.map +1 -0
  275. package/.output/server/chunks/build/useSettingsNav-DfnOFlR_.mjs +19 -0
  276. package/.output/server/chunks/build/useSettingsNav-DfnOFlR_.mjs.map +1 -0
  277. package/.output/server/chunks/build/{users-CTUqXyGh.mjs → users-I2K7HXS2.mjs} +6 -7
  278. package/.output/server/chunks/build/users-I2K7HXS2.mjs.map +1 -0
  279. package/.output/server/chunks/build/{wasted-time-BNTPIyrC.mjs → wasted-time-DyIk0olc.mjs} +9 -9
  280. package/.output/server/chunks/build/wasted-time-DyIk0olc.mjs.map +1 -0
  281. package/.output/server/chunks/nitro/nitro.mjs +1348 -675
  282. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  283. package/.output/server/chunks/routes/__piwi/session.get.mjs +2 -1
  284. package/.output/server/chunks/routes/__piwi/session.get.mjs.map +1 -1
  285. package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs +1 -0
  286. package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs.map +1 -1
  287. package/.output/server/chunks/routes/api/admin/stats.get.mjs +1 -0
  288. package/.output/server/chunks/routes/api/admin/stats.get.mjs.map +1 -1
  289. package/.output/server/chunks/routes/api/ai/status.get.mjs +1 -0
  290. package/.output/server/chunks/routes/api/ai/status.get.mjs.map +1 -1
  291. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +1 -0
  292. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs.map +1 -1
  293. package/.output/server/chunks/routes/api/auth/logout.post.mjs +1 -0
  294. package/.output/server/chunks/routes/api/auth/logout.post.mjs.map +1 -1
  295. package/.output/server/chunks/routes/api/auth/me.get.mjs +1 -0
  296. package/.output/server/chunks/routes/api/auth/me.get.mjs.map +1 -1
  297. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +1 -0
  298. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs.map +1 -1
  299. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +1 -0
  300. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs.map +1 -1
  301. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +1 -0
  302. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs.map +1 -1
  303. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +1 -0
  304. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs.map +1 -1
  305. package/.output/server/chunks/routes/api/auth/setup.get.mjs +1 -0
  306. package/.output/server/chunks/routes/api/auth/setup.get.mjs.map +1 -1
  307. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +1 -0
  308. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs.map +1 -1
  309. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +1 -0
  310. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs.map +1 -1
  311. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +1 -0
  312. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs.map +1 -1
  313. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +1 -0
  314. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs.map +1 -1
  315. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +1 -0
  316. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs.map +1 -1
  317. package/.output/server/chunks/routes/api/desktop/import-local.post.mjs +1 -0
  318. package/.output/server/chunks/routes/api/desktop/import-local.post.mjs.map +1 -1
  319. package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs +1 -0
  320. package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs.map +1 -1
  321. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +1 -0
  322. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs.map +1 -1
  323. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +1 -0
  324. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs.map +1 -1
  325. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +1 -0
  326. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs.map +1 -1
  327. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +1 -0
  328. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs.map +1 -1
  329. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +1 -0
  330. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs.map +1 -1
  331. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +1 -0
  332. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs.map +1 -1
  333. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +1 -0
  334. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs.map +1 -1
  335. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +1 -0
  336. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs.map +1 -1
  337. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +1 -0
  338. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs.map +1 -1
  339. package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs +1 -0
  340. package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs.map +1 -1
  341. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +1 -0
  342. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs.map +1 -1
  343. package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs +1 -0
  344. package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs.map +1 -1
  345. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +1 -0
  346. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs.map +1 -1
  347. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +1 -0
  348. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs.map +1 -1
  349. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +1 -0
  350. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs.map +1 -1
  351. package/.output/server/chunks/routes/api/files/_...path_.get.mjs +1 -0
  352. package/.output/server/chunks/routes/api/files/_...path_.get.mjs.map +1 -1
  353. package/.output/server/chunks/routes/api/health.get.mjs +1 -0
  354. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  355. package/.output/server/chunks/routes/api/index.get.mjs +1 -0
  356. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  357. package/.output/server/chunks/routes/api/index.get2.mjs +1 -0
  358. package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
  359. package/.output/server/chunks/routes/api/index.get3.mjs +1 -0
  360. package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
  361. package/.output/server/chunks/routes/api/index.get4.mjs +2 -1
  362. package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
  363. package/.output/server/chunks/routes/api/index.get5.mjs +1 -0
  364. package/.output/server/chunks/routes/api/index.get5.mjs.map +1 -1
  365. package/.output/server/chunks/routes/api/index.post3.mjs +1 -1
  366. package/.output/server/chunks/routes/api/index.post4.mjs +1 -1
  367. package/.output/server/chunks/routes/api/index.post5.mjs +1 -1
  368. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +1 -0
  369. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs.map +1 -1
  370. package/.output/server/chunks/routes/api/links/_id_.delete.mjs +1 -0
  371. package/.output/server/chunks/routes/api/links/_id_.delete.mjs.map +1 -1
  372. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +1 -0
  373. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs.map +1 -1
  374. package/.output/server/chunks/routes/api/notifications/stream.get.mjs +1 -0
  375. package/.output/server/chunks/routes/api/notifications/stream.get.mjs.map +1 -1
  376. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +1 -0
  377. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs.map +1 -1
  378. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +1 -0
  379. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs.map +1 -1
  380. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +1 -0
  381. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs.map +1 -1
  382. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +1 -0
  383. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs.map +1 -1
  384. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +1 -0
  385. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs.map +1 -1
  386. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +1 -0
  387. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs.map +1 -1
  388. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +1 -0
  389. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs.map +1 -1
  390. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +1 -0
  391. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs.map +1 -1
  392. package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs +1 -0
  393. package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs.map +1 -1
  394. package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs +1 -0
  395. package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs.map +1 -1
  396. package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs +1 -0
  397. package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs.map +1 -1
  398. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +1 -0
  399. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs.map +1 -1
  400. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +1 -0
  401. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs.map +1 -1
  402. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +1 -0
  403. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs.map +1 -1
  404. package/.output/server/chunks/routes/api/projects/_id/test-functions/extract.post.mjs +76 -0
  405. package/.output/server/chunks/routes/api/projects/_id/test-functions/extract.post.mjs.map +1 -0
  406. package/.output/server/chunks/routes/api/projects/_id/test-functions/validate-proposal.post.mjs +66 -0
  407. package/.output/server/chunks/routes/api/projects/_id/test-functions/validate-proposal.post.mjs.map +1 -0
  408. package/.output/server/chunks/routes/api/projects/_id/test-functions.get.mjs +53 -0
  409. package/.output/server/chunks/routes/api/projects/_id/test-functions.get.mjs.map +1 -0
  410. package/.output/server/chunks/routes/api/projects/_id/test-functions.post.mjs +67 -0
  411. package/.output/server/chunks/routes/api/projects/_id/test-functions.post.mjs.map +1 -0
  412. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +2 -1
  413. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs.map +1 -1
  414. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +1 -0
  415. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs.map +1 -1
  416. package/.output/server/chunks/routes/api/projects/_id_.get.mjs +1 -0
  417. package/.output/server/chunks/routes/api/projects/_id_.get.mjs.map +1 -1
  418. package/.output/server/chunks/routes/api/projects/menu.get.mjs +2 -1
  419. package/.output/server/chunks/routes/api/projects/menu.get.mjs.map +1 -1
  420. package/.output/server/chunks/routes/api/projects/overview.get.mjs +2 -1
  421. package/.output/server/chunks/routes/api/projects/overview.get.mjs.map +1 -1
  422. package/.output/server/chunks/routes/api/projects.get.mjs +1 -0
  423. package/.output/server/chunks/routes/api/projects.get.mjs.map +1 -1
  424. package/.output/server/chunks/routes/api/search.get.mjs +2 -1
  425. package/.output/server/chunks/routes/api/search.get.mjs.map +1 -1
  426. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +2 -1
  427. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs.map +1 -1
  428. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +2 -1
  429. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs.map +1 -1
  430. package/.output/server/chunks/routes/api/settings/ai/models.post.mjs +1 -0
  431. package/.output/server/chunks/routes/api/settings/ai/models.post.mjs.map +1 -1
  432. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +2 -1
  433. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs.map +1 -1
  434. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +1 -0
  435. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs.map +1 -1
  436. package/.output/server/chunks/routes/api/settings/ai.get.mjs +2 -1
  437. package/.output/server/chunks/routes/api/settings/ai.get.mjs.map +1 -1
  438. package/.output/server/chunks/routes/api/settings/ai.put.mjs +2 -1
  439. package/.output/server/chunks/routes/api/settings/ai.put.mjs.map +1 -1
  440. package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs +2 -1
  441. package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs.map +1 -1
  442. package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs +2 -1
  443. package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs.map +1 -1
  444. package/.output/server/chunks/routes/api/settings/smtp.get.mjs +2 -1
  445. package/.output/server/chunks/routes/api/settings/smtp.get.mjs.map +1 -1
  446. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +2 -1
  447. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs.map +1 -1
  448. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +2 -1
  449. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs.map +1 -1
  450. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +2 -1
  451. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs.map +1 -1
  452. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +2 -1
  453. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs.map +1 -1
  454. package/.output/server/chunks/routes/api/setup-status.get.mjs +99 -0
  455. package/.output/server/chunks/routes/api/setup-status.get.mjs.map +1 -0
  456. package/.output/server/chunks/routes/api/stream.get.mjs +1 -0
  457. package/.output/server/chunks/routes/api/stream.get.mjs.map +1 -1
  458. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +1 -0
  459. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs.map +1 -1
  460. package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +1 -1
  461. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +2 -1
  462. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs.map +1 -1
  463. package/.output/server/chunks/routes/api/tags/_id_.put.mjs +1 -1
  464. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +2 -1
  465. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs.map +1 -1
  466. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +2 -1
  467. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs.map +1 -1
  468. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +2 -1
  469. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs.map +1 -1
  470. package/.output/server/chunks/routes/api/test-functions/_id_.delete.mjs +60 -0
  471. package/.output/server/chunks/routes/api/test-functions/_id_.delete.mjs.map +1 -0
  472. package/.output/server/chunks/routes/api/test-functions/_id_.put.mjs +69 -0
  473. package/.output/server/chunks/routes/api/test-functions/_id_.put.mjs.map +1 -0
  474. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +2 -1
  475. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs.map +1 -1
  476. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +2 -1
  477. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs.map +1 -1
  478. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +2 -1
  479. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs.map +1 -1
  480. package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs +2 -1
  481. package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs.map +1 -1
  482. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +2 -1
  483. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs.map +1 -1
  484. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +2 -1
  485. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs.map +1 -1
  486. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +2 -1
  487. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs.map +1 -1
  488. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +2 -1
  489. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs.map +1 -1
  490. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +2 -1
  491. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs.map +1 -1
  492. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs +2 -1
  493. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs.map +1 -1
  494. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +2 -1
  495. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs.map +1 -1
  496. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +2 -1
  497. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs.map +1 -1
  498. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +2 -1
  499. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs.map +1 -1
  500. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +2 -1
  501. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs.map +1 -1
  502. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +2 -1
  503. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs.map +1 -1
  504. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +2 -1
  505. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs.map +1 -1
  506. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +2 -1
  507. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs.map +1 -1
  508. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +2 -1
  509. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs.map +1 -1
  510. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +2 -1
  511. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs.map +1 -1
  512. package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs +2 -1
  513. package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs.map +1 -1
  514. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +2 -1
  515. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs.map +1 -1
  516. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +2 -1
  517. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs.map +1 -1
  518. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +2 -1
  519. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs.map +1 -1
  520. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +2 -1
  521. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs.map +1 -1
  522. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +2 -1
  523. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs.map +1 -1
  524. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +2 -1
  525. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs.map +1 -1
  526. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +2 -1
  527. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs.map +1 -1
  528. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +2 -1
  529. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs.map +1 -1
  530. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +2 -1
  531. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs.map +1 -1
  532. package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs +2 -1
  533. package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs.map +1 -1
  534. package/.output/server/chunks/routes/api/test-runs/import.post.mjs +2 -1
  535. package/.output/server/chunks/routes/api/test-runs/import.post.mjs.map +1 -1
  536. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +2 -1
  537. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs.map +1 -1
  538. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +2 -1
  539. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs.map +1 -1
  540. package/.output/server/chunks/routes/api/test-runs/start.post.mjs +2 -1
  541. package/.output/server/chunks/routes/api/test-runs/start.post.mjs.map +1 -1
  542. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +2 -1
  543. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
  544. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +2 -1
  545. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
  546. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +1 -0
  547. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
  548. package/.output/server/chunks/routes/api/traces/check.post.mjs +2 -1
  549. package/.output/server/chunks/routes/api/traces/check.post.mjs.map +1 -1
  550. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +1 -0
  551. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs.map +1 -1
  552. package/.output/server/chunks/routes/api/users/_id/index.get.mjs +1 -0
  553. package/.output/server/chunks/routes/api/users/_id/index.get.mjs.map +1 -1
  554. package/.output/server/chunks/routes/api/users/_id/index.post.mjs +1 -1
  555. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +2 -1
  556. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs.map +1 -1
  557. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +2 -1
  558. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs.map +1 -1
  559. package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +1 -1
  560. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -0
  561. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  562. package/.output/server/chunks/routes/api/version.get.mjs +2 -1
  563. package/.output/server/chunks/routes/api/version.get.mjs.map +1 -1
  564. package/.output/server/chunks/routes/mcp.post.mjs +41 -11
  565. package/.output/server/chunks/routes/mcp.post.mjs.map +1 -1
  566. package/.output/server/chunks/routes/renderer.mjs +1 -1
  567. package/.output/server/chunks/tasks/sweep.mjs +1 -0
  568. package/.output/server/chunks/tasks/sweep.mjs.map +1 -1
  569. package/.output/server/chunks/tasks/sweep2.mjs +1 -0
  570. package/.output/server/chunks/tasks/sweep2.mjs.map +1 -1
  571. package/.output/server/database/migrations/0043_watery_dragon_lord.sql +22 -0
  572. package/.output/server/database/migrations/meta/0043_snapshot.json +3764 -0
  573. package/.output/server/database/migrations/meta/_journal.json +7 -0
  574. package/.output/server/database/migrations-pg/0044_dark_triathlon.sql +22 -0
  575. package/.output/server/database/migrations-pg/meta/0044_snapshot.json +4473 -0
  576. package/.output/server/database/migrations-pg/meta/_journal.json +7 -0
  577. package/.output/server/index.mjs +2 -1
  578. package/.output/server/index.mjs.map +1 -1
  579. package/.output/server/package.json +1 -1
  580. package/package.json +1 -1
  581. package/.output/public/_nuxt/8PUUncmO.js +0 -44
  582. package/.output/public/_nuxt/B8zkOmwo.js +0 -1
  583. package/.output/public/_nuxt/B96M2gdj.js +0 -1
  584. package/.output/public/_nuxt/B9OLmp0f.js +0 -1
  585. package/.output/public/_nuxt/BUa0V0Ly.js +0 -1
  586. package/.output/public/_nuxt/BUkim3TM.js +0 -1
  587. package/.output/public/_nuxt/BVc14Ncz.js +0 -4
  588. package/.output/public/_nuxt/BY0HxR3t.js +0 -17
  589. package/.output/public/_nuxt/B_xAMWQS.js +0 -2
  590. package/.output/public/_nuxt/BdQoBaOv.js +0 -1
  591. package/.output/public/_nuxt/BgRu_3tT.js +0 -1
  592. package/.output/public/_nuxt/BiO7RBWb.js +0 -6
  593. package/.output/public/_nuxt/CEfS4-oS.js +0 -64
  594. package/.output/public/_nuxt/CIoSMkpp.js +0 -1
  595. package/.output/public/_nuxt/CSJ-eOQM.js +0 -1
  596. package/.output/public/_nuxt/CahpB9Z2.js +0 -5
  597. package/.output/public/_nuxt/Cbh--1MW.js +0 -1
  598. package/.output/public/_nuxt/Cx6gc2VW.js +0 -1
  599. package/.output/public/_nuxt/D--H4jLI.js +0 -1
  600. package/.output/public/_nuxt/D1POo6S4.js +0 -10
  601. package/.output/public/_nuxt/D8nkF-OO.js +0 -3
  602. package/.output/public/_nuxt/DA25RkyK.js +0 -1
  603. package/.output/public/_nuxt/DIB-5fUJ.js +0 -1
  604. package/.output/public/_nuxt/DMec-OLo.js +0 -1
  605. package/.output/public/_nuxt/DSqHUrvO.js +0 -1
  606. package/.output/public/_nuxt/DmkUdSS4.js +0 -1
  607. package/.output/public/_nuxt/DoIREDVb.js +0 -1
  608. package/.output/public/_nuxt/DpZ1r1HA.js +0 -1
  609. package/.output/public/_nuxt/DqcKngf3.js +0 -1
  610. package/.output/public/_nuxt/DtHJgCS8.js +0 -1
  611. package/.output/public/_nuxt/Dtd4rC58.js +0 -9
  612. package/.output/public/_nuxt/Dy86h-7P.js +0 -1
  613. package/.output/public/_nuxt/HPNQD6v3.js +0 -1
  614. package/.output/public/_nuxt/HXadJrHu.js +0 -2
  615. package/.output/public/_nuxt/McL25vkx.js +0 -34
  616. package/.output/public/_nuxt/Nn93e_Mz.js +0 -1
  617. package/.output/public/_nuxt/UdR3DBPS.js +0 -1
  618. package/.output/public/_nuxt/_mj6CfPa.js +0 -1
  619. package/.output/public/_nuxt/builds/meta/e659b3e1-0e61-4971-940e-10063f9f4763.json +0 -1
  620. package/.output/public/_nuxt/entry.DmptwB51.css +0 -1
  621. package/.output/public/_nuxt/ryMzSDUj.js +0 -2
  622. package/.output/server/chunks/build/Breadcrumb-Ak2Lg3oM.mjs.map +0 -1
  623. package/.output/server/chunks/build/BreadcrumbNav-DO7I_z-n.mjs.map +0 -1
  624. package/.output/server/chunks/build/BrowserBadge-MFvBwxmD.mjs.map +0 -1
  625. package/.output/server/chunks/build/ChartCard-Y1UKwMsf.mjs.map +0 -1
  626. package/.output/server/chunks/build/Checkbox-4Q5d0fa0.mjs.map +0 -1
  627. package/.output/server/chunks/build/CiEnvCard-DB5DvBh1.mjs.map +0 -1
  628. package/.output/server/chunks/build/CodeBlock-BgE-NSmE.mjs.map +0 -1
  629. package/.output/server/chunks/build/DashboardNavbar-BHmMSPX7.mjs.map +0 -1
  630. package/.output/server/chunks/build/DashboardSidebarToggle-DCTnHiIv.mjs.map +0 -1
  631. package/.output/server/chunks/build/DataLocationCard-B_YHdzSz.mjs.map +0 -1
  632. package/.output/server/chunks/build/DiagnosisPanel-CALyEmcJ.mjs.map +0 -1
  633. package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs.map +0 -1
  634. package/.output/server/chunks/build/EntityLinks-BBHWssHH.mjs.map +0 -1
  635. package/.output/server/chunks/build/FormField-B0HKsdMd.mjs.map +0 -1
  636. package/.output/server/chunks/build/HelpHint-DrcIv-Oj.mjs.map +0 -1
  637. package/.output/server/chunks/build/LoadingState-C3pBSuOO.mjs.map +0 -1
  638. package/.output/server/chunks/build/MiniRunBars-CZMugDrh.mjs.map +0 -1
  639. package/.output/server/chunks/build/ProjectTestCasesTable-Bo61P5K1.mjs.map +0 -1
  640. package/.output/server/chunks/build/RunReports-DFLv51TX.mjs.map +0 -1
  641. package/.output/server/chunks/build/RunStatusBadge-FfGb6bkW.mjs.map +0 -1
  642. package/.output/server/chunks/build/SectionCard-CN-v0FZ_.mjs.map +0 -1
  643. package/.output/server/chunks/build/Select-5DK9frQ7.mjs.map +0 -1
  644. package/.output/server/chunks/build/SettingsField-BZfx4ma1.mjs.map +0 -1
  645. package/.output/server/chunks/build/StatTile-D61Vzo6e.mjs.map +0 -1
  646. package/.output/server/chunks/build/Switch-B5Fp8ULt.mjs.map +0 -1
  647. package/.output/server/chunks/build/TestCaseHistoryChart-CSi64vVA.mjs.map +0 -1
  648. package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs.map +0 -1
  649. package/.output/server/chunks/build/TestStatusBar-DX3EhlyP.mjs.map +0 -1
  650. package/.output/server/chunks/build/Textarea-Dv2-lOvW.mjs.map +0 -1
  651. package/.output/server/chunks/build/_id_-BdG37K7s.mjs.map +0 -1
  652. package/.output/server/chunks/build/_id_-BdJs7BJZ.mjs.map +0 -1
  653. package/.output/server/chunks/build/_id_-BxA6IgWr.mjs.map +0 -1
  654. package/.output/server/chunks/build/_id_-C_uSBiyU.mjs.map +0 -1
  655. package/.output/server/chunks/build/about-BE0UV-8-.mjs.map +0 -1
  656. package/.output/server/chunks/build/account-DAfvaD-F.mjs.map +0 -1
  657. package/.output/server/chunks/build/analytics-Bo_B_jko.mjs.map +0 -1
  658. package/.output/server/chunks/build/db.client-CQoVTYB9.mjs.map +0 -1
  659. package/.output/server/chunks/build/edit-J0asTFg8.mjs.map +0 -1
  660. package/.output/server/chunks/build/fetch-B4FwBOzu.mjs.map +0 -1
  661. package/.output/server/chunks/build/forgot-password-CC__1OnV.mjs.map +0 -1
  662. package/.output/server/chunks/build/import-CS9oylTN.mjs.map +0 -1
  663. package/.output/server/chunks/build/index-CU2nZhAa.mjs.map +0 -1
  664. package/.output/server/chunks/build/index-DE45ycdZ.mjs.map +0 -1
  665. package/.output/server/chunks/build/index-e9skCi-V.mjs.map +0 -1
  666. package/.output/server/chunks/build/index-hGHlmyxj.mjs.map +0 -1
  667. package/.output/server/chunks/build/index-tR6owKzj.mjs +0 -167
  668. package/.output/server/chunks/build/index-tR6owKzj.mjs.map +0 -1
  669. package/.output/server/chunks/build/login-Da4u1IlW.mjs.map +0 -1
  670. package/.output/server/chunks/build/mcp-uhVCCwQM.mjs.map +0 -1
  671. package/.output/server/chunks/build/notifications-fx_qnKGA.mjs.map +0 -1
  672. package/.output/server/chunks/build/pr-feedback-X6-70iF0.mjs.map +0 -1
  673. package/.output/server/chunks/build/reset-password-BmrUS4ZD.mjs.map +0 -1
  674. package/.output/server/chunks/build/settings-CCYe7rsc.mjs.map +0 -1
  675. package/.output/server/chunks/build/settings-metadata-DrEqWcW-.mjs.map +0 -1
  676. package/.output/server/chunks/build/storage-CJEmviCD.mjs.map +0 -1
  677. package/.output/server/chunks/build/tags-DauTe_F-.mjs.map +0 -1
  678. package/.output/server/chunks/build/test-cases-thBbAykw.mjs.map +0 -1
  679. package/.output/server/chunks/build/timeout-hygiene-CbnSaVbK.mjs.map +0 -1
  680. package/.output/server/chunks/build/useAiStatus-CxjMmDDY.mjs.map +0 -1
  681. package/.output/server/chunks/build/useCopy-CeKWgHyT.mjs +0 -33
  682. package/.output/server/chunks/build/useCopy-CeKWgHyT.mjs.map +0 -1
  683. package/.output/server/chunks/build/useCopyRich-RJKhWoyj.mjs.map +0 -1
  684. package/.output/server/chunks/build/useDesktopDownload-BepjqxOt.mjs.map +0 -1
  685. package/.output/server/chunks/build/useOpenInIde-BbTnPhFA.mjs.map +0 -1
  686. package/.output/server/chunks/build/useSettingsNav-DnQKacz8.mjs.map +0 -1
  687. package/.output/server/chunks/build/users-CTUqXyGh.mjs.map +0 -1
  688. package/.output/server/chunks/build/wasted-time-BNTPIyrC.mjs.map +0 -1
@@ -1 +0,0 @@
1
- import{d as r,o as s,c as l,i,V as n,m as o,t as a,q as c,v as d,Q as u}from"./Du2W7Jne.js";const _={class:"rounded-lg bg-gray-50 dark:bg-gray-900 p-3 min-w-0"},g={class:"text-xs font-medium text-gray-500 uppercase tracking-wider inline-flex items-center gap-1 max-w-full"},f={key:0,class:"text-xs text-gray-400 mt-1"},x=r({__name:"StatTile",props:{label:{},value:{},hint:{},size:{default:"lg"},valueClass:{default:""}},setup(e){return(t,m)=>(s(),l("div",_,[i("p",g,[n(t.$slots,"label",{},()=>[o(a(e.label),1)])]),i("p",{class:c(["mt-0.5 break-words",[e.size==="lg"?"text-xl font-bold":"text-sm font-semibold",e.valueClass]])},[n(t.$slots,"default",{},()=>[o(a(e.value??"—"),1)])],2),e.hint?(s(),l("p",f,a(e.hint),1)):d("",!0)]))}}),h=Object.assign(x,{__name:"StatTile"}),p=r({__name:"StatTileGrid",props:{minTileWidth:{default:"8.5rem"}},setup(e){return(t,m)=>(s(),l("div",{class:"grid gap-3",style:u({gridTemplateColumns:`repeat(auto-fit, minmax(min(${e.minTileWidth}, 100%), 1fr))`})},[n(t.$slots,"default")],4))}}),y=Object.assign(p,{__name:"StatTileGrid"});export{y as _,h as a};
@@ -1 +0,0 @@
1
- import{_ as R}from"./CXEH9OPk.js";import{_ as V}from"./DabzhQB1.js";import{_ as O,a as q}from"./5A6ITZXj.js";import{_ as z}from"./DPCxhHri.js";import{d as A,u as L,a as G,b as J,w as T,e as K,r as g,f as M,g as i,h as f,o as Q,i as l,j as r,k as s,l as W,_ as X,m as b,t as Y}from"./Du2W7Jne.js";import{o as Z,s as u,_ as tt}from"./CEfS4-oS.js";import{_ as st}from"./-f7BAm1H.js";import{u as h}from"./B8zkOmwo.js";import"./KyA_4Ks-.js";import"./AbmKWFQQ.js";import"./L3kAWB2a.js";import"./DsesNydr.js";import"./Bm62iDV5.js";import"./BjaRappk.js";import"./DSqHUrvO.js";import"./oAClCn_h.js";import"./CeG9pBAD.js";import"./UdR3DBPS.js";import"./DmkUdSS4.js";import"./B99fbi73.js";import"./DuwtTfO8.js";const ot={class:"p-4 space-y-4"},et={class:"text-sm text-gray-600 mt-1"},at={class:"font-medium"},nt={class:"flex justify-end gap-2 pt-2"},Pt=A({__name:"edit",async setup(it){let n,d;const $=L(),v=G(),j=J(),c=$.params.id,{data:e}=([n,d]=T(()=>h(`/api/projects/${c}`,"$HHkdnHL3hB")),n=await n,d(),n),{data:y,refresh:x}=([n,d]=T(()=>h("/api/tags","$DPtjOd0zOq")),n=await n,d(),n);K(f(()=>({title:`Edit ${e.value?.label||e.value?.name||"Project"} — Piwi Dashboard`})));const I=f(()=>y.value?.tags||[]),U=f(()=>!!e.value?.hasScmToken),o=g({label:e.value?.label||"",description:e.value?.description||"",diagnosisInstructions:e.value?.diagnosisInstructions||"",scmToken:""}),p=g(e.value?.tags||[]),P=Z({label:u().optional(),description:u().optional(),diagnosisInstructions:u().optional(),scmToken:u().optional()}),_=g(!1);async function C(){try{_.value=!0,await $fetch(`/api/projects/${c}`,{method:"PUT",body:{label:o.value.label||null,description:o.value.description||null,diagnosisInstructions:o.value.diagnosisInstructions||null,scmToken:o.value.scmToken||null,tagIds:p.value.map(m=>m.id)}}),j.add({title:"Project updated",description:"Project settings have been saved successfully",color:"success"}),await v.push(`/projects/${c}`)}catch(m){console.error("Error updating project:",m),j.add({title:"Error",description:"Failed to update project",color:"error"})}finally{_.value=!1}}function w(){v.push(`/projects/${c}`)}return(m,t)=>{const B=R,D=V,N=q,E=z,k=X,F=tt,H=st,S=O;return Q(),M(S,{id:"project-edit"},{header:i(()=>[r(N,null,{leading:i(()=>[r(B),r(D,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},{label:s(e)?.label||s(e)?.name||"Project",to:`/projects/${s(c)}`},{label:"Edit"}]},null,8,["items"])]),_:1})]),body:i(()=>[l("div",ot,[r(H,null,{header:i(()=>[t[7]||(t[7]=l("h2",null,"Edit project settings",-1)),l("p",et,[t[6]||(t[6]=b(" Project Name: ",-1)),l("span",at,Y(s(e)?.name),1)]),t[8]||(t[8]=l("p",{class:"text-xs text-gray-500 mt-1"}," Note: The project name is used to match test results from the reporter and cannot be changed. ",-1))]),default:i(()=>[r(F,{schema:s(P),state:s(o),class:"space-y-5",onSubmit:C},{default:i(()=>[r(E,{mode:"edit","has-token":s(U),label:s(o).label,"onUpdate:label":t[0]||(t[0]=a=>s(o).label=a),description:s(o).description,"onUpdate:description":t[1]||(t[1]=a=>s(o).description=a),diagnosisInstructions:s(o).diagnosisInstructions,"onUpdate:diagnosisInstructions":t[2]||(t[2]=a=>s(o).diagnosisInstructions=a),scmToken:s(o).scmToken,"onUpdate:scmToken":t[3]||(t[3]=a=>s(o).scmToken=a),tags:s(p),"onUpdate:tags":t[4]||(t[4]=a=>W(p)?p.value=a:null),"all-tags":s(I),onTagCreated:t[5]||(t[5]=a=>s(x)())},null,8,["has-token","label","description","diagnosisInstructions","scmToken","tags","all-tags"]),l("div",nt,[r(k,{variant:"ghost",color:"neutral",onClick:w},{default:i(()=>[...t[9]||(t[9]=[b(" Cancel ",-1)])]),_:1}),r(k,{type:"submit",icon:"i-lucide-check",loading:s(_)},{default:i(()=>[...t[10]||(t[10]=[b(" Save changes ",-1)])]),_:1},8,["loading"])])]),_:1},8,["schema","state"])]),_:1})])]),_:1})}}});export{Pt as default};
@@ -1 +0,0 @@
1
- import{_ as f}from"./BT3wGCTI.js";import{d as y,o as s,f as b,g as d,c as o,F as r,y as u,k as p,Q as h,q as m,i as n,t as l,h as x}from"./Du2W7Jne.js";const w={key:0,class:"flex h-2.5 w-full min-w-30 overflow-hidden rounded-full bg-zinc-200 dark:bg-zinc-700"},g={key:1,class:"text-xs text-zinc-400 dark:text-zinc-500 italic"},v={class:"min-w-52 space-y-1.5 rounded-md bg-zinc-900 px-3 py-2 text-sm shadow-lg"},z={class:"font-semibold text-white"},B={class:"text-white"},C={class:"ml-4 tabular-nums font-medium text-white"},F={class:"ml-auto tabular-nums text-zinc-300 text-xs"},N=y({__name:"TestStatusBar",props:{passed:{},failed:{},skipped:{},flaky:{},total:{},didNotRun:{}},setup(i){const t=i,c=x(()=>t.total?[{key:"passed",label:"Passed",count:t.passed-t.flaky,color:"bg-emerald-500"},{key:"failed",label:"Failed",count:t.failed,color:"bg-rose-500"},{key:"flaky",label:"Flaky",count:t.flaky,color:"bg-purple-500"},{key:"skipped",label:"Skipped",count:t.skipped,color:"bg-zinc-400"},{key:"didNotRun",label:"Didn't run",count:t.didNotRun??0,color:"bg-amber-300 dark:bg-amber-700"}].filter(a=>a.count>0).map(a=>({...a,widthPct:a.count/t.total*100,displayPct:(a.count/t.total*100).toFixed(1)})):[]);return(k,a)=>{const _=f;return s(),b(_,{ui:{content:"overflow-visible !p-0"}},{content:d(()=>[n("div",v,[n("div",z,l(i.total)+" tests total",1),(s(!0),o(r,null,u(p(c),e=>(s(),o("div",{key:e.key,class:"flex items-center gap-2 whitespace-nowrap"},[n("span",{class:m([e.color,"inline-block h-2.5 w-2.5 shrink-0 rounded-sm"])},null,2),n("span",B,l(e.label),1),n("span",C,l(e.count),1),n("span",F,l(e.displayPct)+"%",1)]))),128))])]),default:d(()=>[i.total>0?(s(),o("div",w,[(s(!0),o(r,null,u(p(c),e=>(s(),o("div",{key:e.key,class:m([e.color,"h-full transition-all"]),style:h({width:e.widthPct+"%"})},null,6))),128))])):(s(),o("div",g,"No tests"))]),_:1})}}}),R=Object.assign(N,{__name:"TestStatusBar"});export{R as _};
@@ -1 +0,0 @@
1
- import{_ as oe}from"./Bm62iDV5.js";import{_ as se}from"./BrQEE053.js";import{d as ne,b as le,u as ie,a as re,w as de,H as ce,B as ue,c,k as t,f as p,g as o,F as I,j as s,ac as me,v as w,o as l,i as d,m as r,I as pe,l as E,_ as fe,p as ye,t as R,y as ge,s as ve,h as $,r as u,A as we}from"./Du2W7Jne.js";import{_ as _e}from"./AbmKWFQQ.js";import{_ as ke}from"./C0_yH0N7.js";import{u as he}from"./B8zkOmwo.js";import"./BjaRappk.js";import"./DSqHUrvO.js";import"./L3kAWB2a.js";import"./-f7BAm1H.js";const xe={class:"space-y-6"},be={class:"inline-flex items-center gap-1.5"},Pe={class:"flex justify-end"},Ce={class:"space-y-3"},Ve={key:0,class:"flex items-center gap-2 text-sm text-success-600 dark:text-success-400"},Ee={key:1,class:"flex items-center gap-2 text-sm text-warning-600 dark:text-warning-400"},$e={key:2,class:"text-xs text-gray-400"},Se={class:"flex justify-end"},Ae={class:"space-y-3"},Ue={class:"flex items-center gap-2 text-sm"},Be={key:1,class:"text-xs text-gray-400",title:"Set a password first to keep a way to sign in"},Fe={key:2,class:"text-xs text-gray-400"},Ne={class:"space-y-4"},Te={class:"flex justify-end"},qe={class:"text-sm text-gray-500"},We=ne({__name:"account",async setup(ze){let S,D;const i=le(),y=ie(),L=re(),U=we(),{data:m,refresh:A}=([S,D]=de(()=>he("/api/auth/me","$lZCnZ7VEtB")),S=await S,D(),S),g=$(()=>m.value?.user?.oauthProvider??null),O=$(()=>!!m.value?.user?.hasPassword),_=$(()=>!!g.value&&!O.value),B={google:{label:"Google",icon:"i-lucide-chrome"},github:{label:"GitHub",icon:"i-lucide-github"}},j=$(()=>U.public.demoMode?[]:(U.public.oauthProviders||[]).filter(a=>B[a])),k=u(""),F=u(!1),h=u(""),N=u(!1),T=u(!1),x=u(""),f=u(""),b=u(""),q=u(!1),z=u("");ce(()=>m.value?.user,a=>{a&&(k.value=a.name||"",h.value=a.email||"")},{immediate:!0});const M={"already-linked":"That provider account is already linked to another user.","link-requires-login":"Please sign in before connecting a provider.","domain-not-allowed":"That account’s email domain is not allowed.","org-not-allowed":"You are not a member of an allowed organization.","invalid-state":"Connecting failed (invalid state). Please try again.","access-denied":"Authorization was cancelled.","oauth-failed":"Connecting the provider failed."};ue(()=>{y.query.verified&&i.add({title:"Email verified",color:"success"}),y.query.linked&&(i.add({title:"Account connected",color:"success"}),A());const a=y.query.error;a&&i.add({title:"Could not connect account",description:M[a]||"Please try again.",color:"error"}),(y.query.linked||y.query.error||y.query.verified)&&L.replace({query:{}})});async function Y(){F.value=!0;try{await $fetch(`/api/users/${m.value?.user?.id}`,{method:"PATCH",body:{name:k.value||null}}),await A(),i.add({title:"Display name updated",color:"success"})}catch(a){i.add({title:"Failed to update display name",description:String(a?.message??a),color:"error"})}finally{F.value=!1}}async function G(){N.value=!0;try{await $fetch(`/api/users/${m.value?.user?.id}`,{method:"PATCH",body:{email:h.value||null}}),await A(),i.add({title:"Email updated",color:"success"})}catch(a){i.add({title:"Failed to update email",description:String(a?.message??a),color:"error"})}finally{N.value=!1}}async function W(){T.value=!0;try{await $fetch("/api/auth/send-verify-email",{method:"POST"}),i.add({title:"Verification email sent",description:"Check your inbox.",color:"success"})}catch(a){i.add({title:"Failed to send verification",description:String(a?.message??a),color:"error"})}finally{T.value=!1}}async function Z(){if(f.value.length<8){i.add({title:"Password too short",description:"At least 8 characters required",color:"error"});return}if(f.value!==b.value){i.add({title:"Passwords do not match",color:"error"});return}q.value=!0;try{await $fetch("/api/auth/change-password",{method:"POST",body:{currentPassword:x.value,newPassword:f.value}}),x.value="",f.value="",b.value="",i.add({title:"Password changed",color:"success"})}catch(a){i.add({title:"Failed to change password",description:String(a?.message??a),color:"error"})}finally{q.value=!1}}function K(a){window.location.href=`/api/auth/oauth/${a}/login?link=1`}async function J(a){z.value=a;try{await $fetch(`/api/auth/oauth/${a}/unlink`,{method:"POST"}),await A(),i.add({title:"Account disconnected",color:"success"})}catch(e){i.add({title:"Failed to disconnect",description:String(e?.data?.message??e?.message??e),color:"error"})}finally{z.value=""}}const Q=$(()=>U.public.authEnabled);return(a,e)=>{const X=oe,ee=se,P=pe,C=_e,v=fe,V=ke,H=ye,te=ve;return l(),c("div",xe,[t(Q)?t(m)?.user?(l(),c(I,{key:1},[s(V,{icon:"i-lucide-user",title:"Display name",help:"account.display-name"},{footer:o(()=>[d("div",Pe,[s(v,{color:"primary",loading:t(F),icon:"i-lucide-save",onClick:Y},{default:o(()=>[...e[8]||(e[8]=[r(" Save name ",-1)])]),_:1},8,["loading"])])]),default:o(()=>[s(C,{label:"Display name",name:"name"},{default:o(()=>[s(P,{modelValue:t(k),"onUpdate:modelValue":e[0]||(e[0]=n=>E(k)?k.value=n:null),placeholder:"Your display name (optional)",class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),s(V,{icon:"i-lucide-mail",title:"Email address",help:"account.email"},me({default:o(()=>[d("div",Ce,[t(m).user.emailVerified?(l(),c("div",Ve,[s(H,{name:"i-lucide-circle-check-big",class:"size-4"}),e[9]||(e[9]=r(" Verified ",-1))])):t(m).user.email?(l(),c("div",Ee,[s(H,{name:"i-lucide-circle-alert",class:"size-4"}),e[11]||(e[11]=r(" Not verified ",-1)),t(_)?w("",!0):(l(),p(v,{key:0,size:"xs",variant:"soft",color:"warning",loading:t(T),onClick:W},{default:o(()=>[...e[10]||(e[10]=[r(" Send verification email ",-1)])]),_:1},8,["loading"]))])):w("",!0),s(C,{label:"Email",name:"email"},{default:o(()=>[s(P,{modelValue:t(h),"onUpdate:modelValue":e[1]||(e[1]=n=>E(h)?h.value=n:null),type:"email",placeholder:"you@example.com",disabled:t(_),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),t(_)?(l(),c("p",$e,[e[12]||(e[12]=r(" Email is managed by ",-1)),d("strong",null,R(t(g)),1),e[13]||(e[13]=r(". ",-1))])):w("",!0)])]),_:2},[t(_)?void 0:{name:"footer",fn:o(()=>[d("div",Se,[s(v,{color:"primary",loading:t(N),icon:"i-lucide-save",onClick:G},{default:o(()=>[...e[14]||(e[14]=[r(" Save email ",-1)])]),_:1},8,["loading"])])]),key:"0"}]),1024),t(j).length>0?(l(),p(V,{key:0,icon:"i-lucide-link",title:"Connected accounts",help:"account.connected-accounts"},{default:o(()=>[d("div",Ae,[(l(!0),c(I,null,ge(t(j),n=>(l(),c("div",{key:n,class:"flex items-center justify-between gap-3 rounded-md border border-default px-3 py-2"},[d("div",Ue,[s(H,{name:B[n].icon,class:"size-5"},null,8,["name"]),d("span",null,R(B[n].label),1),t(g)===n?(l(),p(te,{key:0,color:"success",variant:"subtle",size:"sm"},{default:o(()=>[...e[15]||(e[15]=[r("Connected",-1)])]),_:1})):w("",!0)]),t(g)===n?(l(),c(I,{key:0},[t(O)?(l(),p(v,{key:0,size:"xs",color:"error",variant:"soft",icon:"i-lucide-unlink",loading:t(z)===n,onClick:ae=>J(n)},{default:o(()=>[...e[16]||(e[16]=[r(" Disconnect ",-1)])]),_:1},8,["loading","onClick"])):(l(),c("span",Be," Set a password to disconnect "))],64)):t(g)?(l(),c("span",Fe,"Another provider is connected")):(l(),p(v,{key:1,size:"xs",variant:"outline",color:"neutral",icon:"i-lucide-plus",onClick:ae=>K(n)},{default:o(()=>[...e[17]||(e[17]=[r(" Connect ",-1)])]),_:1},8,["onClick"]))]))),128)),e[18]||(e[18]=d("p",{class:"text-xs text-gray-400"},"One provider can be connected per account.",-1))])]),_:1})):w("",!0),t(_)?(l(),p(V,{key:2,icon:"i-lucide-lock",title:"Password"},{default:o(()=>[d("p",qe,[e[20]||(e[20]=r(" Your account is managed by ",-1)),d("strong",null,R(t(g)),1),e[21]||(e[21]=r(". Password management is handled by that provider. ",-1))])]),_:1})):(l(),p(V,{key:1,icon:"i-lucide-lock",title:"Change password",help:"account.password"},{footer:o(()=>[d("div",Te,[s(v,{color:"primary",loading:t(q),icon:"i-lucide-key-round",onClick:Z},{default:o(()=>[...e[19]||(e[19]=[r(" Change password ",-1)])]),_:1},8,["loading"])])]),default:o(()=>[d("div",Ne,[s(C,{label:"Current password",name:"currentPassword"},{default:o(()=>[s(P,{modelValue:t(x),"onUpdate:modelValue":e[2]||(e[2]=n=>E(x)?x.value=n:null),type:"password",placeholder:"Current password",autocomplete:"current-password",class:"w-full"},null,8,["modelValue"])]),_:1}),s(C,{label:"New password",name:"newPassword",description:"Minimum 8 characters"},{default:o(()=>[s(P,{modelValue:t(f),"onUpdate:modelValue":e[3]||(e[3]=n=>E(f)?f.value=n:null),type:"password",placeholder:"New password",autocomplete:"new-password",class:"w-full"},null,8,["modelValue"])]),_:1}),s(C,{label:"Confirm new password",name:"confirmPassword"},{default:o(()=>[s(P,{modelValue:t(b),"onUpdate:modelValue":e[4]||(e[4]=n=>E(b)?b.value=n:null),type:"password",placeholder:"Repeat new password",autocomplete:"new-password",class:"w-full"},null,8,["modelValue"])]),_:1})])]),_:1}))],64)):w("",!0):(l(),p(ee,{key:0,color:"warning",icon:"i-lucide-lock-open",title:"Authentication disabled",description:"Enable PIWI_AUTH_ENABLED=true to manage your account."},{description:o(()=>[d("span",be,[e[5]||(e[5]=r(" Enable ",-1)),e[6]||(e[6]=d("code",{class:"font-mono text-xs"},"PIWI_AUTH_ENABLED=true",-1)),e[7]||(e[7]=r(" to manage your account. ",-1)),s(X,{topic:"settings.auth-toggle"})])]),_:1}))])}}});export{We as default};
@@ -1,9 +0,0 @@
1
- import{_ as Qt}from"./CXEH9OPk.js";import{_ as Zt}from"./DabzhQB1.js";import{d as re,o as t,f as k,g as d,i as n,q,k as e,j as i,t as c,c as o,F as B,y as te,s as fe,m as p,v as l,R as yt,p as ce,h as C,D as Ae,_ as Ie,b as Xt,B as xt,l as ge,r as A,ab as $e,H as ve,ac as Yt,A as Oe,Q as Ce,u as es,a as ts,w as pt,e as ss,ad as ns,M as as}from"./Du2W7Jne.js";import{d as os,e as rs,h as He,a as is,b as ls,c as cs,_ as us,n as ds,o as ms,p as ps,u as gs,f as fs,i as ys,j as xs,k as hs,l as vs,m as _s}from"./CahpB9Z2.js";import{_ as ks,a as bs,b as ws,c as $s,d as Cs,e as Ts}from"./ryMzSDUj.js";import{_ as Ss}from"./CjPfj7ya.js";import{_ as Is,a as Rs}from"./5A6ITZXj.js";import{_ as Re}from"./BzRRzmwm.js";import{_ as Ls}from"./b-GYfcrQ.js";import{_ as zs}from"./CA9B2HE5.js";import{_ as ht,a as Ke}from"./Bm62iDV5.js";import{_ as Ms}from"./-f7BAm1H.js";import{_ as js}from"./hC_z4G8p.js";import{u as Ds,_ as Ns,d as As,e as Ps,f as Us,g as Bs,h as Fs,j as Vs,a as vt,i as Te,b as Ne,c as Es}from"./Cnsmicv2.js";import{f as Se,m as Os,c as Hs,g as Ks,n as _t,o as We,q as Ge,a as Ws,j as Gs,r as gt}from"./DuwtTfO8.js";import{_ as kt}from"./BT3wGCTI.js";import{_ as ye}from"./C0_yH0N7.js";import{_ as Js}from"./DsesNydr.js";import{_ as Je}from"./CxyAzHr3.js";import{_ as qe}from"./CzAPFPpL.js";import{_ as bt}from"./C1gTN4Q8.js";import{f as we}from"./D-c8ZSws.js";import{_ as qs}from"./B3obW6cw.js";import{_ as Qs}from"./DJxlKFGb.js";import{_ as Zs}from"./DJmoLeVt.js";import{_ as Xs}from"./Cus22Ud3.js";import{_ as Ys}from"./CJFtzlQ4.js";import{_ as en,a as tn}from"./DoIREDVb.js";import{_ as sn}from"./CeW8v31b.js";import{b as nn}from"./BicAJ6U8.js";import{u as ft}from"./B8zkOmwo.js";import{u as an}from"./DSqHUrvO.js";import"./KyA_4Ks-.js";import"./Dy-TJ0Mt.js";import"./BgRu_3tT.js";import"./_mj6CfPa.js";import"./BrQEE053.js";import"./BUkim3TM.js";import"./A1pj0VnG.js";import"./UdR3DBPS.js";import"./AbmKWFQQ.js";import"./L3kAWB2a.js";import"./Dpd16JVI.js";import"./Nn93e_Mz.js";import"./DmkUdSS4.js";import"./BjaRappk.js";import"./pQqGiNch.js";import"./B99fbi73.js";import"./C8e1EbJI.js";import"./FaFoMVKo.js";import"./D7W_4Sqc.js";import"./CwGWJbiy.js";const on={class:"text-sm font-semibold truncate min-w-0"},rn={class:"flex items-center gap-3 ml-auto max-sm:hidden"},ln={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},cn={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},un={class:"text-gray-700 dark:text-gray-300"},dn={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},mn={class:"text-gray-700 dark:text-gray-300"},pn={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},gn={class:"text-gray-700 dark:text-gray-300"},fn={key:0,class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},yn={class:"text-gray-700 dark:text-gray-300"},xn={class:"grid grid-cols-1 lg:grid-cols-12 gap-4"},hn={class:"space-y-3"},vn={class:"flex items-start gap-3"},_n={class:"min-w-0 flex-1"},kn={class:"flex items-center gap-2 flex-wrap"},bn={class:"text-base font-bold truncate"},wn={class:"text-xs text-gray-500 mt-0.5"},$n={key:0},Cn=["title"],Tn={key:1,class:"ml-2"},Sn={class:"grid grid-cols-2 sm:grid-cols-4 gap-2"},In={class:"rounded-lg bg-gray-50 dark:bg-gray-900 p-3"},Rn={class:"text-xl font-bold mt-0.5"},Ln={class:"rounded-lg bg-gray-50 dark:bg-gray-900 p-3"},zn={class:"text-xl font-bold mt-0.5"},Mn={class:"rounded-lg bg-gray-50 dark:bg-gray-900 p-3"},jn={class:"text-xl font-bold mt-0.5"},Dn={class:"rounded-lg bg-gray-50 dark:bg-gray-900 p-3"},Nn={class:"text-xl font-bold mt-0.5"},An={key:0,class:"flex items-center gap-2 text-sm"},Pn={class:"text-gray-700 dark:text-gray-300 truncate"},Un={key:0,class:"text-gray-500 shrink-0"},Bn={key:1,class:"flex items-center gap-1.5 text-sm"},Fn=re({__name:"TestCaseSummary",props:{testCase:{},scmInfo:{},ciInfo:{},browser:{},environment:{},stepsCount:{},historicalTiming:{},stableLinks:{}},emits:["refresh"],setup(s){const _=s,x=C(()=>{const u=_.testCase;if(!u)return[];const r=[];return u.isNewRegression&&r.push({label:"New regression",color:"error",title:"Passed in the baseline run, failing here"}),u.isNewFlaky&&r.push({label:"New flaky",color:"warning",title:"Newly started passing only on retry"}),u.status==="passed"&&(u.retries??0)>0&&r.push({label:"Passed on retry",color:"warning",title:"This test failed then passed on a retry"}),r}),b=C(()=>(_.testCase?.testAnnotations??[]).filter(u=>!Os(u.type))),w=C(()=>_.testCase?.startedAt??null),{summaryColSpanClass:g,blockColSpanClass:a}=Ds(()=>{let u=0;return _.scmInfo&&u++,(_.ciInfo||_.environment||_.browser)&&u++,u++,u});return(u,r)=>{const P=ks,z=Re,$=Ls,h=fe,F=zs,M=yt,m=ce,I=ht,E=Ms,U=bs,R=ws,W=js,G=$s,D=Ns;return t(),k(D,{"storage-key":"test-case"},{folded:d(()=>[i(P,{status:s.testCase?.status??"",size:"sm"},null,8,["status"]),n("span",on,c(s.testCase?.title),1),n("div",rn,[n("span",ln,[r[0]||(r[0]=p(" Dur: ",-1)),i(z,{ms:s.testCase?.duration,class:"font-bold text-gray-700 dark:text-gray-300"},null,8,["ms"])]),n("span",cn,[r[1]||(r[1]=p(" Retries: ",-1)),n("strong",un,c(s.testCase?.retries??0),1)]),n("span",dn,[r[2]||(r[2]=p(" Steps: ",-1)),n("strong",mn,c(s.stepsCount),1)]),n("span",pn,[r[3]||(r[3]=p(" Worker: ",-1)),n("strong",gn,c(s.testCase?.workerIndex??"—"),1)]),s.testCase?.shardIndex!=null?(t(),o("span",fn,[r[4]||(r[4]=p(" Shard: ",-1)),n("strong",yn,c(s.testCase.shardIndex),1)])):l("",!0)]),s.browser?(t(),k($,{key:0,browser:s.browser,size:"sm",class:"shrink-0 max-sm:hidden"},null,8,["browser"])):l("",!0)]),default:d(()=>[n("div",xn,[n("div",{class:q(e(g))},[i(E,{class:"shadow-xs h-full"},{default:d(()=>[n("div",hn,[n("div",vn,[i(P,{status:s.testCase?.status??"",size:"md"},null,8,["status"]),n("div",_n,[n("div",kn,[n("h2",bn,c(s.testCase?.title),1),(t(!0),o(B,null,te(e(x),Z=>(t(),k(h,{key:Z.label,color:Z.color,variant:"subtle",size:"xs",title:Z.title},{default:d(()=>[p(c(Z.label),1)]),_:2},1032,["color","title"]))),128)),(t(!0),o(B,null,te(e(b),(Z,Q)=>(t(),k(h,{key:`ann-${Q}`,color:"neutral",variant:"soft",size:"xs",class:"font-mono",title:Z.description||Z.type},{default:d(()=>[p(" @"+c(Z.type),1)]),_:2},1032,["title"]))),128)),i(F,{tags:s.testCase?.tags,meta:s.testCase?.testMeta},null,8,["tags","meta"])]),n("p",wn,[s.testCase?.location?(t(),o("span",$n,c(s.testCase.location),1)):l("",!0),i(M,null,{default:d(()=>[e(w)?(t(),o("span",{key:0,class:"ml-2 text-gray-400",title:new Date(e(w)).toLocaleString()}," started "+c(("formatRelativeTime"in u?u.formatRelativeTime:e(Se))(e(w))),9,Cn)):l("",!0)]),_:1}),s.historicalTiming?(t(),o("span",Tn,[r[5]||(r[5]=p(" Avg ",-1)),i(z,{ms:s.historicalTiming.avg},null,8,["ms"]),r[6]||(r[6]=p(" · ",-1)),n("span",{class:q(s.historicalTiming.diff>0?"text-red-600":"text-green-600")},c(s.historicalTiming.diff>0?"+":"")+c(s.historicalTiming.pct)+"% ",3)])):l("",!0)])])]),n("div",Sn,[n("div",In,[r[7]||(r[7]=n("p",{class:"text-xs font-medium text-gray-500 uppercase tracking-wider"},"Duration",-1)),n("p",Rn,[i(z,{ms:s.testCase?.duration},null,8,["ms"])])]),n("div",Ln,[r[8]||(r[8]=n("p",{class:"text-xs font-medium text-gray-500 uppercase tracking-wider"},"Retries",-1)),n("p",zn,c(s.testCase?.retries??0),1)]),n("div",Mn,[r[9]||(r[9]=n("p",{class:"text-xs font-medium text-gray-500 uppercase tracking-wider"},"Steps",-1)),n("p",jn,c(s.stepsCount),1)]),n("div",Dn,[r[10]||(r[10]=n("p",{class:"text-xs font-medium text-gray-500 uppercase tracking-wider"},"Worker",-1)),n("p",Nn,c(s.testCase?.workerIndex??"—"),1)])]),s.testCase?.slowestStep?(t(),o("div",An,[i(m,{name:"i-lucide-zap",class:"size-4 text-amber-500 shrink-0"}),r[13]||(r[13]=n("span",{class:"font-medium text-amber-700 dark:text-amber-300"},"Slowest step:",-1)),n("span",Pn,c(s.testCase.slowestStep),1),s.testCase.slowestStepDuration?(t(),o("span",Un,[r[11]||(r[11]=p("(",-1)),i(z,{ms:s.testCase.slowestStepDuration},null,8,["ms"]),r[12]||(r[12]=p(")",-1))])):l("",!0)])):l("",!0),(s.testCase?.wastedTimeMs??0)>0?(t(),o("div",Bn,[i(m,{name:"i-lucide-hourglass",class:"size-4 text-amber-500 shrink-0"}),r[14]||(r[14]=n("span",{class:"font-medium text-amber-700 dark:text-amber-300"},"Wasted in fixed waits:",-1)),i(z,{ms:s.testCase?.wastedTimeMs,class:"text-gray-700 dark:text-gray-300"},null,8,["ms"]),i(I,{topic:"case.wasted-time"})])):l("",!0)])]),_:1})],2),s.scmInfo?(t(),k(U,{key:0,scm:s.scmInfo,class:q(e(a))},null,8,["scm","class"])):l("",!0),s.ciInfo||s.environment||s.browser?(t(),k(R,{key:1,ci:s.ciInfo,environment:s.environment,browser:s.browser,class:q(e(a))},null,8,["ci","environment","browser","class"])):l("",!0),i(G,{class:q(e(a)),title:"Links",icon:"i-lucide-link"},{default:d(()=>[s.testCase?.id?(t(),k(W,{key:0,"entity-type":"test_case","entity-id":s.testCase.id,links:s.stableLinks??null},null,8,["entity-id","links"])):l("",!0)]),_:1},8,["class"])])]),_:1})}}}),Vn=Object.assign(Fn,{__name:"TestCaseSummary"}),En={class:"space-y-3"},On={key:0,class:"flex flex-wrap gap-1.5"},Hn={key:0,class:"text-sm text-gray-600 dark:text-gray-400"},Kn={class:"text-gray-800 dark:text-gray-200"},Wn={key:1},Gn={class:"flex items-center gap-1 flex-wrap"},Jn=re({__name:"TestCaseVerdictCard",props:{testCase:{},history:{},currentId:{}},setup(s){const _=s,x=u=>u==="failed"||u==="timedOut"||u==="timedout",b=C(()=>{const u=_.testCase;if(!u)return[];const r=[];return u.isNewRegression&&r.push({label:"New regression",color:"error",icon:"i-lucide-git-pull-request-arrow",title:"Passed in the baseline run, failing here — likely fallout from the latest change"}),u.isNewFlaky&&r.push({label:"New flaky",color:"warning",icon:"i-lucide-shuffle",title:"Newly started passing only on retry — intermittent failure"}),u.status==="timedOut"&&r.push({label:"Timed out",color:"warning",icon:"i-lucide-timer-off",title:"The test exceeded its timeout"}),(u.retries??0)>0&&r.push({label:u.status==="passed"?`Passed on retry ${u.retries}`:`Retried ${u.retries}×`,color:u.status==="passed"?"warning":"neutral",icon:"i-lucide-refresh-cw",title:`This execution retried ${u.retries} time${u.retries===1?"":"s"}`}),r}),w=C(()=>_.history.slice(0,24).slice().reverse()),g=C(()=>{const u=_.history;if(!u.length)return null;const r=Math.max(0,u.findIndex($=>$.id===_.currentId));let P=0;for(let $=r;$<u.length&&x(u[$].status);$++)P++;let z=null;for(let $=r+1;$<u.length;$++)if(u[$].status==="passed"){z=u[$];break}return{streak:P,lastPass:z,total:u.length,anchorFailing:x(u[r]?.status)}}),a=u=>({"bg-red-500 hover:bg-red-600":x(u),"bg-green-500 hover:bg-green-600":u==="passed","bg-yellow-500 hover:bg-yellow-600":u==="skipped","bg-gray-400 hover:bg-gray-500":!x(u)&&!["passed","skipped"].includes(u)});return(u,r)=>{const P=ce,z=fe,$=Ae,h=kt,F=yt,M=ye;return t(),k(M,{icon:"i-lucide-clipboard-check","icon-class":"text-amber-500",title:"Verdict",help:"case.verdict"},{default:d(()=>[n("div",En,[e(b).length?(t(),o("div",On,[(t(!0),o(B,null,te(e(b),m=>(t(),k(z,{key:m.label,color:m.color,variant:"subtle",size:"sm",title:m.title,class:"inline-flex items-center gap-1"},{default:d(()=>[i(P,{name:m.icon,class:"size-3 shrink-0"},null,8,["name"]),p(" "+c(m.label),1)]),_:2},1032,["color","title"]))),128))])):l("",!0),i(F,null,{default:d(()=>[e(g)?(t(),o("p",Hn,[e(g).streak>=1?(t(),o(B,{key:0},[r[1]||(r[1]=p(" Failing for ",-1)),n("strong",Kn,c(e(g).streak),1),p(" consecutive run"+c(e(g).streak===1?"":"s")+". ",1),e(g).lastPass?(t(),o(B,{key:0},[r[0]||(r[0]=p(" Last passed in ",-1)),i($,{to:`/test-run-cases/${e(g).lastPass.id}`,class:"text-primary hover:underline"},{default:d(()=>[p(" run #"+c(e(g).lastPass.runId),1)]),_:1},8,["to"]),p(" ("+c(("formatRelativeTime"in u?u.formatRelativeTime:e(Se))(e(g).lastPass.startTime))+"). ",1)],64)):e(g).total>1?(t(),o(B,{key:1},[p(" No passing run in the last "+c(e(g).total)+" recorded. ",1)],64)):(t(),o(B,{key:2},[p(" First recorded run of this test. ")],64))],64)):s.testCase?.status==="passed"?(t(),o(B,{key:1},[p(" This execution passed. ")],64)):l("",!0)])):l("",!0),e(w).length>1?(t(),o("div",Wn,[r[2]||(r[2]=n("p",{class:"text-xs text-gray-400 mb-1"},"Recent runs (oldest → newest)",-1)),n("div",Gn,[(t(!0),o(B,null,te(e(w),m=>(t(),k(h,{key:m.id,text:`Run #${m.runId}: ${m.status}`},{default:d(()=>[i($,{to:`/test-run-cases/${m.id}`,class:q(["size-3.5 rounded-sm inline-block transition-colors",[a(m.status),m.id===s.currentId?"ring-2 ring-offset-1 ring-primary":""]])},null,8,["to","class"])]),_:2},1032,["text"]))),128))])])):l("",!0)]),_:1})])]),_:1})}}}),qn=Object.assign(Jn,{__name:"TestCaseVerdictCard"}),Qn={class:"space-y-3"},Zn={class:"space-y-1.5"},Xn={class:"flex items-center gap-2 flex-wrap"},Yn={class:"text-xs text-gray-500"},ea=["title"],ta={class:"text-xs text-gray-500 dark:text-gray-400"},sa={key:0,class:"rounded-lg border border-default bg-elevated/40 p-2.5 space-y-1"},na={class:"flex items-center gap-1.5 flex-wrap"},aa={class:"text-xs text-gray-600 dark:text-gray-400 line-clamp-3"},oa=["title"],ra=re({__name:"FailureClusterCard",props:{cluster:{}},setup(s){const _=s,x=C(()=>Math.max(0,_.cluster.sameRunCaseCount-1)),b=C(()=>{const g=_.cluster.diagnosis;return g&&g.status==="completed"&&g.summary?g:null}),w=g=>g==="high"?"success":g==="medium"?"warning":"neutral";return(g,a)=>{const u=fe,r=Ae,P=ce,z=Ie,$=ye;return t(),k($,{icon:"i-lucide-layers","icon-class":"text-primary",title:"Failure cluster",help:"cluster.concept"},{actions:d(()=>[s.cluster.isNew?(t(),k(u,{key:0,color:"warning",variant:"subtle",size:"sm"},{default:d(()=>[...a[0]||(a[0]=[p("New",-1)])]),_:1})):l("",!0),s.cluster.status&&s.cluster.status!=="open"?(t(),k(u,{key:1,color:s.cluster.status==="resolved"?"success":"neutral",variant:"subtle",size:"sm",class:"capitalize"},{default:d(()=>[p(c(s.cluster.status),1)]),_:1},8,["color"])):l("",!0)]),default:d(()=>[n("div",Qn,[n("div",Zn,[n("div",Xn,[s.cluster.errorType?(t(),k(u,{key:0,color:e(Hs)(s.cluster.errorType),variant:"soft",size:"sm"},{default:d(()=>[p(c(s.cluster.errorType),1)]),_:1},8,["color"])):l("",!0),n("span",Yn,c(s.cluster.occurrences??0)+" occurrence"+c((s.cluster.occurrences??0)===1?"":"s"),1)]),n("p",{class:"font-mono text-xs text-gray-600 dark:text-gray-400 break-all line-clamp-2",title:s.cluster.signature},c(s.cluster.signature),9,ea)]),n("p",ta,[e(x)>0?(t(),o(B,{key:0},[p(" Matches "+c(e(x))+" other failing "+c(e(x)===1?"test":"tests")+" in this run. ",1)],64)):l("",!0),s.cluster.isNew?(t(),o(B,{key:2},[p("Opened a new cluster in this run.")],64)):(t(),o(B,{key:1},[a[1]||(a[1]=p(" Known failure — first seen in ",-1)),i(r,{to:`/test-runs/${s.cluster.firstSeenRunId}`,class:"text-primary hover:underline"},{default:d(()=>[p(" run #"+c(s.cluster.firstSeenRunId),1)]),_:1},8,["to"]),s.cluster.firstSeenAt?(t(),o(B,{key:0},[p(" ("+c(("formatRelativeTime"in g?g.formatRelativeTime:e(Se))(s.cluster.firstSeenAt))+")",1)],64)):l("",!0),a[2]||(a[2]=p(". ",-1))],64))]),e(b)?(t(),o("div",sa,[n("div",na,[i(P,{name:"i-lucide-sparkles",class:"size-3.5 text-primary shrink-0"}),a[3]||(a[3]=n("span",{class:"text-xs font-medium"},"AI verdict",-1)),e(b).category?(t(),k(u,{key:0,color:"neutral",variant:"soft",size:"xs"},{default:d(()=>[p(c(e(b).category),1)]),_:1})):l("",!0),e(b).confidence?(t(),k(u,{key:1,color:w(e(b).confidence),variant:"soft",size:"xs"},{default:d(()=>[p(c(e(b).confidence)+" confidence ",1)]),_:1},8,["color"])):l("",!0)]),n("p",aa,c(e(b).summary),1)])):l("",!0),s.cluster.triageNote?(t(),o("p",{key:1,class:"text-xs italic text-gray-500 dark:text-gray-400",title:s.cluster.triageNote}," “"+c(s.cluster.triageNote)+"” ",9,oa)):l("",!0),i(z,{to:`/failure-clusters/${s.cluster.id}`,size:"sm",color:"primary",variant:"solid",block:"","trailing-icon":"i-lucide-arrow-right"},{default:d(()=>[...a[4]||(a[4]=[p(" Open cluster investigation ",-1)])]),_:1},8,["to"])])]),_:1})}}}),ia=Object.assign(ra,{__name:"FailureClusterCard"}),la={class:"space-y-3"},ca={class:"text-xs text-gray-400 inline-flex items-center gap-1"},ua={key:0,class:"text-primary"},da={key:0,class:"flex items-center justify-between gap-2 rounded-lg border border-default bg-elevated/40 p-2.5"},ma={class:"inline-flex items-center gap-2 text-sm text-gray-500"},pa={key:1,class:"flex items-center gap-2"},ga={key:2,class:"rounded-lg border border-dashed border-default p-4 text-center text-gray-400"},fa={class:"text-sm inline-flex items-center gap-1 justify-center"},ya={class:"pt-1 text-center"},xa=re({__name:"TestCaseAiCard",props:{testRunsCaseId:{}},setup(s){const _=s,{aiStatus:x}=As(),b=Xt(),w=A(null),g=A(!1),a=A(null),u=A([]),r=A(0),P=A(0),z=A(null),$=A(!1),h=A(!1),F=A(null),M=A(!1),m=A("");async function I(){$.value=!0;try{const y=await $fetch(`/api/test-run-cases/${_.testRunsCaseId}/diagnosis-context`,{query:{format:"json"}});a.value=y.text,u.value=y.sections,r.value=y.tokenEstimate,P.value=y.imageTokenEstimate??0,z.value=y.coverage}catch{a.value=null,u.value=[],r.value=0,z.value=null}finally{$.value=!1}}async function E(){try{const y=await $fetch(`/api/test-run-cases/${_.testRunsCaseId}/diagnosis`);w.value=y.diagnosis}catch{}}xt(()=>{E(),I()});const U=C(()=>{const y=w.value?.details;if(!y)return[];const N=[];if(Array.isArray(y.evidence)&&N.push(...y.evidence),Array.isArray(y.hypotheses))for(const ne of y.hypotheses)Array.isArray(ne?.evidence)&&N.push(...ne.evidence);return Vs(N)});function R(y){F.value=y,h.value=!0}function W(y){m.value=m.value?`${m.value}
2
-
3
- ${y}`:y,M.value=!0}async function G(y=!1){g.value=!0;try{const N=y?`/api/test-run-cases/${_.testRunsCaseId}/diagnose?force=true`:`/api/test-run-cases/${_.testRunsCaseId}/diagnose`,ne=m.value.trim()?{additionalContext:m.value.trim()}:void 0;w.value=await $fetch(N,{method:"POST",body:ne})}catch(N){const ne=N?.statusCode;ne===409?(b.add({title:"Diagnosis already running",color:"warning"}),E()):ne===503?b.add({title:"AI diagnosis is not configured",color:"warning"}):b.add({title:"Diagnosis failed",description:Ks(N),color:"error"})}finally{g.value=!1}}function D(y){return y.status==="running"&&Date.now()-new Date(y.updatedAt).getTime()>300*1e3}const Z=C(()=>w.value&&(w.value.status==="completed"||w.value.status==="failed")),Q=C(()=>!w.value||w.value.status==="failed"||w.value.status==="running"&&D(w.value)),de=C(()=>w.value?.status==="running"&&!D(w.value)&&!g.value);return(y,N)=>{const ne=Fs,v=ce,S=Ps,H=Js,J=Ie,X=Us,se=ht,O=Bs,Y=Ae,ee=ye;return t(),k(ee,{icon:"i-lucide-sparkles","icon-class":"text-primary",title:"AI diagnosis",help:"case.ai"},{actions:d(()=>[i(ne,{"context-endpoint":`/api/test-run-cases/${s.testRunsCaseId}/diagnosis-context`},null,8,["context-endpoint"])]),default:d(()=>[n("div",la,[n("p",ca,[i(v,{name:"i-lucide-triangle-alert",class:"size-3 shrink-0"}),N[6]||(N[6]=p(" AI-generated — verify before applying. ",-1))]),e(x)?.configured?(t(),k(S,{key:0,sections:e(u),"not-applicable":e(z)?.notApplicable,"token-estimate":e(r),loading:e($),onViewSection:R,onOpen:N[0]||(N[0]=ae=>h.value=!0)},null,8,["sections","not-applicable","token-estimate","loading"])):l("",!0),e(x)?.configured?(t(),o(B,{key:1},[n("div",null,[n("button",{class:"flex items-center gap-1.5 text-xs font-medium text-gray-500 hover:text-gray-700 dark:hover:text-gray-300",onClick:N[1]||(N[1]=ae=>M.value=!e(M))},[i(v,{name:e(M)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5"},null,8,["name"]),N[7]||(N[7]=p(" Additional context ",-1)),e(m).trim()?(t(),o("span",ua,"(1)")):l("",!0)]),e(M)?(t(),k(H,{key:0,modelValue:e(m),"onUpdate:modelValue":N[2]||(N[2]=ae=>ge(m)?m.value=ae:null),placeholder:"e.g. We deployed a new auth middleware yesterday…",rows:3,class:"w-full text-sm mt-1"},null,8,["modelValue"])):l("",!0)]),e(de)?(t(),o("div",da,[n("span",ma,[i(v,{name:"i-lucide-loader-circle",class:"size-4 animate-spin text-primary shrink-0"}),N[8]||(N[8]=p(" Diagnosis in progress… ",-1))]),i(J,{size:"xs",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",loading:e(g),onClick:E},{default:d(()=>[...N[9]||(N[9]=[p(" Refresh ",-1)])]),_:1},8,["loading"])])):(t(),o("div",pa,[e(Q)?(t(),k(J,{key:0,icon:"i-lucide-sparkles",size:"sm",color:"primary",variant:"solid",loading:e(g),onClick:N[3]||(N[3]=ae=>G(e(w)?.status==="running"))},{default:d(()=>[p(c(e(w)?.status==="running"?"Restart diagnosis":"Diagnose with AI"),1)]),_:1},8,["loading"])):e(w)?.status==="completed"?(t(),k(J,{key:1,icon:"i-lucide-refresh-cw",size:"xs",color:"primary",variant:"soft",loading:e(g),onClick:N[4]||(N[4]=ae=>G(!0))},{default:d(()=>[...N[10]||(N[10]=[p(" Re-diagnose ",-1)])]),_:1},8,["loading"])):l("",!0)])),e(Z)?(t(),k(X,{key:2,diagnosis:e(w),onViewSection:R,onPrefillContext:W},null,8,["diagnosis"])):l("",!0)],64)):(t(),o("div",ga,[n("p",fa,[N[11]||(N[11]=p(" AI diagnosis is not configured ",-1)),i(se,{topic:"cluster.ai-setup"})]),N[13]||(N[13]=n("p",{class:"text-xs mt-2 max-w-xs mx-auto"},[p(" Use "),n("strong",null,"Export → AI context"),p(" in the header to grab the full evidence bundle for your own AI tool, or configure a provider. ")],-1)),i(J,{to:"/settings/ai",size:"xs",color:"neutral",variant:"outline",class:"mt-3"},{default:d(()=>[...N[12]||(N[12]=[p(" Configure in Settings ",-1)])]),_:1})])),i(O,{open:e(h),sections:e(u),"token-estimate":e(r),"image-token-estimate":e(P),loading:e($),"focus-section":e(F),"cited-sections":e(U),"not-applicable-sections":e(z)?.notApplicable,"onUpdate:open":N[5]||(N[5]=ae=>{h.value=ae,ae||(F.value=null)}),onRefresh:I},null,8,["open","sections","token-estimate","image-token-estimate","loading","focus-section","cited-sections","not-applicable-sections"]),n("div",ya,[i(Y,{to:"/mcp",class:"inline-flex items-center gap-1 text-xs text-gray-400 hover:text-primary transition-colors"},{default:d(()=>[i(v,{name:"i-lucide-bot",class:"size-3"}),N[14]||(N[14]=p(" Query this failure from your AI agent via MCP ",-1))]),_:1})])])]),_:1})}}}),ha=Object.assign(xa,{__name:"TestCaseAiCard"});function wt(s,_,x){const b=A(null),w=A(!1),g=A(!1);async function a(){const u=s();if(!(!u||!$e(_)||w.value)){g.value=!0,w.value=!0;try{b.value=await $fetch(u)}catch{b.value=null}finally{w.value=!1}}}return xt(()=>{ve(()=>$e(_),u=>{u&&(x||g.value)&&!b.value&&a()},{immediate:!0})}),{data:b,pending:w,load:a}}function va(s,_,x,b={}){return wt(()=>{const w=$e(s),g=$e(_);return w&&g?`/api/test-runs/${w}/cases/${g}/trace-stacks`:null},x,b.auto??!0)}function _a(s,_,x,b={}){return wt(()=>{const w=$e(s),g=$e(_);return w&&g?`/api/test-runs/${w}/cases/${g}/trace-network`:null},x,b.auto??!1)}const ka={class:"max-h-[32rem] overflow-y-auto"},ba={key:0,class:"mb-2 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},wa={key:0,class:"mt-3 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},$a=re({__name:"TestSourceCard",props:{frames:{},testSource:{},runId:{},testRunsCaseId:{},hasTrace:{type:Boolean},projectKey:{},projectName:{},storageKey:{}},setup(s,{expose:_}){const x=s,{data:b,pending:w}=va(()=>x.runId,()=>x.testRunsCaseId,()=>x.hasTrace,{auto:!0}),g=C(()=>b.value?.status==="ok"?b.value.frames??[]:[]),a=C(()=>g.value.length>0),u=C(()=>x.frames?.length??0),r=C(()=>u.value>0||!!x.testSource),P=A(null),z=C({get:()=>P.value??(a.value?"trace":"captured"),set:M=>{P.value=M}}),$=C(()=>[{label:`Full stack (${g.value.length})`,value:"trace"},{label:`Captured (${u.value||1})`,value:"captured"}]),h=C(()=>z.value==="trace"&&a.value?g.value.length:u.value||null),F=A(null);return _({reveal:()=>F.value?.reveal()}),(M,m)=>{const I=Je,E=ce,U=os,R=rs,W=vt,G=qe,D=Ke,Z=He;return t(),k(Z,{ref_key:"card",ref:F,"storage-key":s.storageKey,icon:"i-lucide-code",count:e(h),title:"Test source",help:"case.test-source"},Yt({folded:d(()=>[e(z)==="trace"&&e(a)?(t(),o(B,{key:0},[p(" Full call stack from the trace"+c(e(b)?.hasSources===!1?" (recorded without sources)":""),1)],64)):e(u)>1?(t(),o(B,{key:1},[p(" The failing line and "+c(e(u)-1)+" caller"+c(e(u)-1===1?"":"s"),1)],64)):(t(),o(B,{key:2},[p("Source around the failing assertion")],64))]),default:d(()=>[n("div",ka,[e(z)==="trace"&&e(a)?(t(),o(B,{key:0},[e(b)?.hasSources===!1?(t(),o("p",ba,[i(E,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),m[1]||(m[1]=p(" Trace recorded without sources — frame list only. ",-1))])):l("",!0),i(U,{frames:e(g),"project-key":s.projectKey,"project-name":s.projectName},null,8,["frames","project-key","project-name"])],64)):(t(),o(B,{key:1},[s.frames?.length?(t(),k(R,{key:0,frames:s.frames,"project-key":s.projectKey,"project-name":s.projectName},null,8,["frames","project-key","project-name"])):s.testSource?(t(),k(W,{key:1,text:"```typescript\n"+s.testSource+"\n```"},null,8,["text"])):s.hasTrace&&e(w)?(t(),k(G,{key:2,text:"Loading call stack from trace…"})):l("",!0)],64))]),s.hasTrace?l("",!0):(t(),o("p",wa,[i(E,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),n("span",null,[m[3]||(m[3]=p(" Want to go deeper? Record traces (",-1)),m[4]||(m[4]=n("code",null,"trace: 'retain-on-failure'",-1)),m[5]||(m[5]=p(") to see the full call stack with source here. ",-1)),i(D,{to:"ui-overview#trace-powered-deep-views","no-icon":"",class:"underline"},{default:d(()=>[...m[2]||(m[2]=[p("Learn more",-1)])]),_:1})])]))]),_:2},[e(a)&&e(r)?{name:"actions",fn:d(()=>[i(I,{modelValue:e(z),"onUpdate:modelValue":m[0]||(m[0]=Q=>ge(z)?z.value=Q:null),items:e($),size:"xs",variant:"link",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"])]),key:"0"}:void 0]),1032,["storage-key","count"])}}}),Ca=Object.assign($a,{__name:"TestSourceCard"}),Ta={class:"space-y-3"},Sa={class:"divide-y divide-default"},Ia={class:"flex items-center gap-2 min-w-0"},Ra={class:"text-sm truncate"},La={key:0,class:"text-xs text-gray-400 shrink-0"},za=re({__name:"TestCaseEvidenceCard",props:{attachments:{},traces:{},storageKey:{}},setup(s,{expose:_}){const x=s,b=Oe(),w=C(()=>x.attachments.filter(h=>Te(h.path,h.contentType)).length),g=C(()=>x.attachments.filter(h=>Ne(h.path,h.contentType)).length),a=C(()=>x.attachments.filter(h=>!Te(h.path,h.contentType)&&!Ne(h.path,h.contentType))),u=C(()=>w.value+g.value+x.traces.length+a.value.length),r=C(()=>{const h=[];return w.value&&h.push(`${w.value} screenshot${w.value===1?"":"s"}`),g.value&&h.push(`${g.value} video${g.value===1?"":"s"}`),x.traces.length&&h.push(`${x.traces.length} trace${x.traces.length===1?"":"s"}`),a.value.length&&h.push(`${a.value.length} file${a.value.length===1?"":"s"}`),h.join(" · ")||"No evidence captured"});function P(h,F){return _t(h,F,b.app?.baseURL)}function z(h){return h.split("/").pop()||h}const $=A(null);return _({reveal:()=>$.value?.reveal?.()}),(h,F)=>{const M=is,m=ls,I=cs,E=ce,U=Ie,R=us,W=bt,G=He;return t(),k(G,{ref_key:"card",ref:$,"storage-key":s.storageKey,icon:"i-lucide-camera",title:"Failure evidence",count:e(u),help:"case.evidence"},{folded:d(()=>[p(c(e(r)),1)]),default:d(()=>[n("div",Ta,[i(M,{attachments:s.attachments},null,8,["attachments"]),i(m,{attachments:s.attachments},null,8,["attachments"]),i(I,{traces:s.traces},null,8,["traces"]),e(a).length?(t(),k(R,{key:0,icon:"i-lucide-paperclip",label:"Attachments",count:e(a).length,collapsible:!1},{default:d(()=>[n("div",Sa,[(t(!0),o(B,null,te(e(a),D=>(t(),o("div",{key:D.id,class:"flex items-center justify-between gap-2 px-3 py-2"},[n("div",Ia,[i(E,{name:"i-lucide-file",class:"size-4 text-gray-400 shrink-0"}),n("span",Ra,c(z(D.path)),1),D.size?(t(),o("span",La,c(("formatBytes"in h?h.formatBytes:e(we))(D.size)),1)):l("",!0)]),i(U,{to:P(D.path,D.contentType),target:"_blank",icon:"i-lucide-external-link",size:"xs",color:"neutral",variant:"soft",label:"Open"},null,8,["to"])]))),128))])]),_:1},8,["count"])):l("",!0),e(u)===0?(t(),k(W,{key:1,icon:"i-lucide-camera-off",text:"No screenshots, video or traces captured"})):l("",!0)])]),_:1},8,["storage-key","count"])}}}),Ma=Object.assign(za,{__name:"TestCaseEvidenceCard"}),ja={class:"space-y-1 max-h-80 overflow-y-auto"},Da={class:"min-w-0 flex-1"},Na={class:"flex items-center gap-2"},Aa={class:"truncate"},Pa={key:0,class:"text-xs text-gray-400 mt-0.5 ml-0"},Ua=re({__name:"TestCaseConsoleCard",props:{entries:{}},setup(s){function _(b){switch(b){case"error":return"error";case"warning":return"warning";case"assert":return"error";default:return"neutral"}}function x(b){switch(b){case"error":return"i-lucide-octagon-x";case"warning":return"i-lucide-alert-triangle";case"assert":return"i-lucide-octagon-x";default:return"i-lucide-message-square"}}return(b,w)=>{const g=ce,a=fe,u=ye;return s.entries.length>0?(t(),k(u,{key:0,icon:"i-lucide-terminal",title:"Console output",count:s.entries.length,help:"case.console"},{default:d(()=>[n("div",ja,[(t(!0),o(B,null,te(s.entries,(r,P)=>(t(),o("div",{key:P,class:"flex items-start gap-2 py-1.5 px-2 rounded hover:bg-gray-50 dark:hover:bg-gray-800 text-sm"},[i(g,{name:x(r.type),class:q([r.type==="error"||r.type==="assert"?"text-red-500":r.type==="warning"?"text-amber-500":"text-gray-400","size-4 mt-0.5 shrink-0"])},null,8,["name","class"]),n("div",Da,[n("div",Na,[i(a,{color:_(r.type),variant:"soft",size:"xs",class:"shrink-0"},{default:d(()=>[p(c(r.type),1)]),_:2},1032,["color"]),n("span",Aa,c(r.text),1)]),r.location?(t(),o("div",Pa,c(r.location),1)):l("",!0)])]))),128))])]),_:1},8,["count"])):l("",!0)}}}),Ba=Object.assign(Ua,{__name:"TestCaseConsoleCard"}),Fa={key:0,class:"space-y-4 text-sm"},Va={class:"space-y-1.5"},Ea={class:"flex items-center gap-2"},Oa={key:0,class:"text-xs text-gray-500"},Ha={class:"block text-xs break-all text-gray-700 dark:text-gray-300"},Ka={key:0,class:"text-xs text-red-600 dark:text-red-400 font-mono"},Wa={class:"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-gray-400"},Ga={key:0,class:"font-mono"},Ja={key:1,class:"font-mono"},qa={key:2},Qa={key:3,title:"Bytes on the wire"},Za={key:0},Xa={class:"flex h-2 rounded overflow-hidden bg-gray-100 dark:bg-gray-800"},Ya=["title"],eo={class:"flex flex-wrap gap-x-3 gap-y-1 mt-1.5 text-xs text-gray-500"},to={class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5 capitalize"},so={key:0,class:"rounded border border-default divide-y divide-default max-h-48 overflow-y-auto"},no={class:"text-gray-500 dark:text-gray-400 shrink-0"},ao={class:"break-all text-gray-700 dark:text-gray-300"},oo={key:1,class:"text-xs text-gray-400"},ro={key:1},io={key:0,class:"rounded border border-default p-2"},lo=["src","alt"],co={key:1,class:"max-h-96 overflow-y-auto"},uo={key:0,class:"mt-1 text-xs text-gray-400"},mo={key:2,class:"text-xs text-gray-400"},po={key:2,class:"text-xs text-gray-400"},go=re({__name:"TraceNetworkDrawer",props:{open:{type:Boolean},entry:{},runId:{},testRunsCaseId:{}},emits:["update:open"],setup(s,{emit:_}){const x=s,b=_,w=[{key:"dns",label:"DNS",color:"bg-sky-400"},{key:"connect",label:"Connect",color:"bg-violet-400"},{key:"ssl",label:"TLS",color:"bg-rose-400"},{key:"send",label:"Send",color:"bg-amber-400"},{key:"wait",label:"Wait",color:"bg-blue-400"},{key:"receive",label:"Receive",color:"bg-emerald-400"}],g=C(()=>{const $=x.entry?.timings;return $?w.map(h=>({...h,value:$[h.key]??-1})).filter(h=>typeof h.value=="number"&&h.value>=0):[]}),a=C(()=>g.value.reduce(($,h)=>$+h.value,0)),u=C(()=>{const $=x.entry?.requestPostData??"";return $.startsWith("{")||$.startsWith("[")}),r=A(null),P=A(!1),z=new Map;return ve(()=>[x.open,x.entry?.bodySha1],async([$,h])=>{if(r.value=null,!$||!h||!x.runId)return;const F=z.get(h);if(F){r.value=F;return}P.value=!0;try{const M=await $fetch(`/api/test-runs/${x.runId}/cases/${x.testRunsCaseId}/trace-network-body`,{query:{sha1:h}});z.set(h,M),r.value=M}catch{r.value={status:"not-found"}}finally{P.value=!1}},{immediate:!0}),($,h)=>{const F=fe,M=Re,m=qs,I=qe,E=Qs;return t(),k(E,{open:s.open,title:"Request detail",ui:{content:"max-w-xl"},"onUpdate:open":h[0]||(h[0]=U=>b("update:open",U))},{body:d(()=>[s.entry?(t(),o("div",Fa,[n("div",Va,[n("div",Ea,[i(F,{color:("httpMethodColor"in $?$.httpMethodColor:e(We))(s.entry.method),variant:"soft",size:"sm",class:"font-mono shrink-0"},{default:d(()=>[p(c(s.entry.method),1)]),_:1},8,["color"]),i(F,{color:("httpStatusColor"in $?$.httpStatusColor:e(Ge))(s.entry.status),variant:"soft",size:"sm",class:"font-mono shrink-0 tabular-nums"},{default:d(()=>[p(c(s.entry.status>0?s.entry.status:"—"),1)]),_:1},8,["color"]),s.entry.statusText?(t(),o("span",Oa,c(s.entry.statusText),1)):l("",!0)]),n("code",Ha,c(s.entry.url),1),s.entry.failureText?(t(),o("p",Ka,c(s.entry.failureText),1)):l("",!0),n("div",Wa,[s.entry.resourceType?(t(),o("span",Ga,c(s.entry.resourceType),1)):l("",!0),s.entry.mimeType?(t(),o("span",Ja,c(s.entry.mimeType),1)):l("",!0),s.entry.responseBodySize!=null?(t(),o("span",qa,c(("formatBytes"in $?$.formatBytes:e(we))(s.entry.responseBodySize)),1)):l("",!0),s.entry.transferSize!=null?(t(),o("span",Qa,c(("formatBytes"in $?$.formatBytes:e(we))(s.entry.transferSize))+" transferred",1)):l("",!0),i(M,{ms:s.entry.duration},null,8,["ms"]),s.entry.duringFailure?(t(),k(F,{key:4,color:"error",variant:"subtle",size:"xs"},{default:d(()=>[...h[1]||(h[1]=[p("During failing action",-1)])]),_:1})):l("",!0)])]),e(g).length>0&&e(a)>0?(t(),o("div",Za,[h[2]||(h[2]=n("p",{class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5"},"Timing",-1)),n("div",Xa,[(t(!0),o(B,null,te(e(g),U=>(t(),o("div",{key:U.key,class:q(U.color),style:Ce({width:`${Math.max(.5,U.value/e(a)*100)}%`}),title:`${U.label}: ${("formatDuration"in $?$.formatDuration:e(Ws))(U.value)}`},null,14,Ya))),128))]),n("div",eo,[(t(!0),o(B,null,te(e(g),U=>(t(),o("span",{key:U.key,class:"inline-flex items-center gap-1"},[n("span",{class:q(["size-2 rounded-full",U.color])},null,2),p(" "+c(U.label)+" ",1),i(M,{ms:U.value,"no-title":""},null,8,["ms"])]))),128))])])):l("",!0),(t(),o(B,null,te(["request","response"],U=>n("div",{key:U},[n("p",to,c(U)+" headers",1),(U==="request"?s.entry.requestHeaders:s.entry.responseHeaders).length>0?(t(),o("div",so,[(t(!0),o(B,null,te(U==="request"?s.entry.requestHeaders:s.entry.responseHeaders,R=>(t(),o("div",{key:`${U}-${R.name}`,class:"px-2 py-1 text-xs font-mono flex gap-2"},[n("span",no,c(R.name)+":",1),n("span",ao,c(R.value),1)]))),128))])):(t(),o("p",oo,"None recorded."))])),64)),s.entry.requestPostData?(t(),o("div",ro,[h[3]||(h[3]=n("p",{class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5"},"Request body",-1)),i(m,{code:s.entry.requestPostData,lang:e(u)?"json":"text"},null,8,["code","lang"])])):l("",!0),n("div",null,[h[4]||(h[4]=n("p",{class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5"},"Response body",-1)),e(P)?(t(),k(I,{key:0,text:"Loading body…",padded:!1})):e(r)?(t(),o(B,{key:1},[e(r).status==="ok"&&e(r).kind==="image"?(t(),o("div",io,[n("img",{src:e(r).dataUri,alt:s.entry.url,class:"max-w-full max-h-96"},null,8,lo)])):e(r).status==="ok"?(t(),o("div",co,[i(m,{code:e(r).content??"",lang:e(r).kind==="json"?"json":"text"},null,8,["code","lang"]),e(r).truncated?(t(),o("p",uo,"Preview truncated.")):l("",!0)])):(t(),o("p",mo,c(e(r).status==="too-large"?`Body too large to preview (${("formatBytes"in $?$.formatBytes:e(we))(e(r).size??0)}) — open the trace viewer to inspect it.`:e(r).status==="unsupported"?`No preview for ${e(r).mimeType||"this content type"} — open the trace viewer to inspect it.`:"Body not stored in the trace."),1))],64)):s.entry.bodySha1?l("",!0):(t(),o("p",po,"No body captured for this request."))])])):l("",!0)]),_:1},8,["open"])}}}),fo=Object.assign(go,{__name:"TraceNetworkDrawer"}),yo={class:"flex items-center justify-between gap-2 mb-2"},xo={key:0,class:"hidden sm:flex items-center gap-1.5 text-xs text-gray-400"},ho={class:"space-y-1 max-h-[28rem] overflow-y-auto"},vo=["title","onClick"],_o={class:"flex items-center gap-2 text-sm min-w-0"},ko={class:"truncate text-xs flex-1 min-w-0"},bo={key:0,class:"shrink-0 text-xs text-gray-400 font-mono hidden md:inline"},wo={key:1,class:"shrink-0 text-xs text-gray-400 tabular-nums hidden sm:inline"},$o={class:"relative h-1.5 mt-1 rounded bg-gray-100 dark:bg-gray-800 overflow-hidden"},Co={key:0,class:"mt-2 text-xs text-gray-400 dark:text-gray-500"},To=re({__name:"TraceNetworkList",props:{data:{},runId:{},testRunsCaseId:{}},setup(s){const _=s,x=A("all"),b=C(()=>_.data.requests??[]),w=C(()=>({total:b.value.length,failed:b.value.filter(I=>I.failed).length,duringFailure:b.value.filter(I=>I.duringFailure).length})),g=C(()=>[{label:`All (${w.value.total})`,value:"all"},{label:`Failed (${w.value.failed})`,value:"failed",disabled:w.value.failed===0},{label:`During failure (${w.value.duringFailure})`,value:"duringFailure",disabled:w.value.duringFailure===0}]),a=C(()=>x.value==="failed"?b.value.filter(I=>I.failed):x.value==="duringFailure"?b.value.filter(I=>I.duringFailure):b.value);function u(I){try{return new URL(I).pathname||I}catch{return I}}const r=C(()=>Math.max(1,_.data.timelineDuration??1));function P(I){const E=Math.max(0,Math.min(100,I.start/r.value*100)),U=Math.min(100-E,Math.max(1.5,I.duration/r.value*100));return{left:`${E}%`,width:`${U}%`}}const z=C(()=>{const I=_.data.failingWindow;if(!I||I.end<=I.start)return null;const E=Math.max(0,Math.min(100,I.start/r.value*100)),U=Math.max(.5,Math.min(100-E,(I.end-I.start)/r.value*100));return{left:`${E}%`,width:`${U}%`}});function $(I){return I.failed?"bg-red-500":I.duration>1e3?"bg-orange-400":"bg-gray-400 dark:bg-gray-500"}function h(I){return I.failed?"border-l-2 border-l-red-400 dark:border-l-red-600":I.duringFailure?"border-l-2 border-l-amber-400 dark:border-l-amber-600":"border-l-2 border-l-transparent"}const F=A(null),M=A(!1);function m(I){F.value=I,M.value=!0}return(I,E)=>{const U=Je,R=fe,W=Re,G=fo;return t(),o("div",null,[n("div",yo,[i(U,{modelValue:e(x),"onUpdate:modelValue":E[0]||(E[0]=D=>ge(x)?x.value=D:null),items:e(g),size:"xs",variant:"link",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"]),s.data.failingWindow?(t(),o("span",xo,[...E[2]||(E[2]=[n("span",{class:"inline-block w-3 h-2 rounded-sm bg-red-500/10 border border-red-300 dark:border-red-800"},null,-1),p(" failing action ",-1)])])):l("",!0)]),n("div",ho,[(t(!0),o(B,null,te(e(a),D=>(t(),o("button",{key:D.index,type:"button",class:q([h(D),"w-full rounded bg-gray-50/60 dark:bg-gray-800/40 py-1.5 px-2 text-left cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800"]),title:D.url,onClick:Z=>m(D)},[n("div",_o,[i(R,{color:("httpMethodColor"in I?I.httpMethodColor:e(We))(D.method),variant:"soft",size:"xs",class:"font-mono shrink-0"},{default:d(()=>[p(c(D.method),1)]),_:2},1032,["color"]),i(R,{color:("httpStatusColor"in I?I.httpStatusColor:e(Ge))(D.status),variant:"soft",size:"xs",class:"font-mono shrink-0 tabular-nums",title:D.failureText||D.statusText},{default:d(()=>[p(c(D.status>0?D.status:"—"),1)]),_:2},1032,["color","title"]),n("code",ko,c(u(D.url)),1),D.resourceType?(t(),o("span",bo,c(D.resourceType),1)):l("",!0),D.responseBodySize!=null?(t(),o("span",wo,c(("formatBytes"in I?I.formatBytes:e(we))(D.responseBodySize)),1)):l("",!0),n("span",{class:q(["ml-1 shrink-0 text-xs tabular-nums",D.duration>1e3?"text-red-600 font-medium":D.duration>500?"text-orange-500":"text-gray-500"])},[i(W,{ms:D.duration,"unit-class":"opacity-60"},null,8,["ms"])],2)]),n("div",$o,[e(z)?(t(),o("div",{key:0,class:"absolute inset-y-0 bg-red-500/10 border-x border-red-300/60 dark:border-red-800/60",style:Ce(e(z))},null,4)):l("",!0),n("div",{class:q(["absolute inset-y-0 rounded-full",$(D)]),style:Ce(P(D))},null,6)])],10,vo))),128))]),s.data.truncated?(t(),o("p",Co," Showing the first "+c(e(b).length)+" of "+c(s.data.totalBeforeCap)+" requests recorded in the trace. ",1)):l("",!0),i(G,{open:e(M),"onUpdate:open":E[1]||(E[1]=D=>ge(M)?M.value=D:null),entry:e(F),"run-id":s.runId,"test-runs-case-id":s.testRunsCaseId},null,8,["open","entry","run-id","test-runs-case-id"])])}}}),So=Object.assign(To,{__name:"TraceNetworkList"}),Io={class:"flex flex-wrap items-center gap-x-3 gap-y-1"},Ro={key:0,class:"flex items-center gap-2 text-xs"},Lo={key:0,class:"flex items-center gap-1 text-red-600 dark:text-red-400"},zo={key:1,class:"flex items-center gap-1 text-amber-600 dark:text-amber-400"},Mo={key:2,class:"text-xs text-gray-400 py-2"},jo={key:1,class:"space-y-1 max-h-[28rem] overflow-y-auto"},Do=["disabled","onClick"],No={key:1,class:"size-3.5 shrink-0"},Ao=["title"],Po=["title"],Uo=["title"],Bo=["title"],Fo=["title"],Vo=["title"],Eo={key:0,class:"px-2 pt-1.5 pb-2 pl-7 space-y-1"},Oo={class:"flex items-center gap-1.5 text-[11px] uppercase tracking-wide text-gray-400"},Ho=["title"],Ko={key:0,class:"shrink-0 text-[10px] uppercase text-gray-400 font-mono hidden sm:inline"},Wo={class:"relative flex-1 h-3 rounded bg-gray-100 dark:bg-gray-800 min-w-0"},Go={key:1,class:"px-2 pb-2 pl-7 space-y-1.5"},Jo={class:"flex items-start gap-2"},qo={key:0,class:"text-gray-400 shrink-0 font-mono"},Qo={class:"font-mono break-all text-gray-700 dark:text-gray-300 flex-1 min-w-0"},Zo=["title"],Xo={key:0,class:"mt-1.5"},Yo=["onClick"],er={key:0,class:"mt-1 whitespace-pre-wrap break-all font-mono text-[11px] leading-relaxed text-gray-500 dark:text-gray-400 max-h-48 overflow-y-auto"},tr={key:2,class:"mt-3 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},sr={key:3,class:"mt-3 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},nr=re({__name:"TestCaseNetworkRequests",props:{requests:{},runId:{},testRunsCaseId:{},hasTrace:{type:Boolean}},setup(s,{expose:_}){const x=s,b=A("all"),{data:w,pending:g,load:a}=_a(()=>x.runId,()=>x.testRunsCaseId,()=>!!x.hasTrace),u=A(null),r=C({get:()=>u.value??(x.requests.length===0&&x.hasTrace?"trace":"captured"),set:v=>{u.value=v}});ve(()=>r.value==="trace",v=>{v&&a()},{immediate:!0});const P=C(()=>w.value?.status==="ok"?w.value.requests?.length??0:null),z=C(()=>[{label:`Captured (${x.requests.length})`,value:"captured",disabled:x.requests.length===0},{label:P.value!=null?`Full trace (${P.value})`:"Full trace",value:"trace"}]);function $(){x.hasTrace&&(u.value="trace")}_({showTraceMode:$});const h=A(new Set);function F(v){const S=new Set(h.value);S.has(v)?S.delete(v):S.add(v),h.value=S}const M=A(new Set);function m(v){const S=new Set(M.value);S.has(v)?S.delete(v):S.add(v),M.value=S}function I(v){if(v.length===0)return[];const S=Math.min(...v.map(O=>O.startMs)),H=Math.max(...v.map(O=>O.startMs+O.durMs)),J=Math.max(1,H-S),X=new Map(v.map(O=>[O.id,O])),se=O=>{let Y=0,ee=O;const ae=new Set;for(;ee?.parentId&&X.has(ee.parentId)&&!ae.has(ee.id)&&(ae.add(ee.id),ee=X.get(ee.parentId),Y++,!(Y>8)););return Y};return[...v].sort((O,Y)=>O.startMs-Y.startMs||Y.durMs-O.durMs).map(O=>({...O,offsetPct:(O.startMs-S)/J*100,widthPct:Math.max(1.5,O.durMs/J*100),depth:se(O)}))}function E(v){return v.status==="error"?"bg-red-400 dark:bg-red-500":v.kind==="db"?"bg-violet-400 dark:bg-violet-500":v.kind==="client"?"bg-sky-400 dark:bg-sky-500":v.kind==="internal"?"bg-gray-400 dark:bg-gray-500":"bg-emerald-400 dark:bg-emerald-500"}function U(v){const S=v.toLowerCase();return S==="critical"||S==="fatal"?3:S==="error"?2:S==="warning"||S==="warn"?1:0}function R(v){const S=U(v);if(S>=2)return"error";if(S===1)return"warning";const H=v.toLowerCase();return H==="info"||H==="information"?"info":"neutral"}function W(v){try{return new URL(v).pathname||v}catch{return v}}function G(v){return(v.split("/")[1]??v).replace(/^vnd\.[^+]*\+?/,"").replace(/^x-/,"")||v}function D(v){return v?new Date(v).toLocaleString():""}const Z=C(()=>x.requests.map((v,S)=>{const H=Array.isArray(v.serverLogs)?v.serverLogs:[],J=Array.isArray(v.serverTraces)?v.serverTraces:[];let X=0,se=0;for(const Y of H){const ee=U(Y.level);ee>=2?X++:ee===1&&se++}const O=J.find(Y=>!Y.parentId)??J[0];return{...v,_index:S,logs:[...H].sort((Y,ee)=>Y.timestamp-ee.timestamp),spans:J,serverMs:O?O.durMs:null,errorLogCount:X,warnLogCount:se,failed:v.status>=400,hasDetail:H.length>0||J.length>0,path:W(v.url)}})),Q=C(()=>{let v=0,S=0,H=0,J=0,X=0;for(const se of Z.value)se.failed&&v++,se.logs.length>0&&S++,se.spans.length>0&&H++,J+=se.errorLogCount,X+=se.warnLogCount;return{total:Z.value.length,failed:v,withLogs:S,withSpans:H,errorLogs:J,warnLogs:X}}),de=C(()=>{let v=Z.value;return b.value==="failed"?v=v.filter(S=>S.failed):b.value==="logs"&&(v=v.filter(S=>S.logs.length>0)),[...v].sort((S,H)=>{const J=X=>(X.errorLogCount>0?3:0)+(X.failed?2:0)+(X.logs.length>0?1:0);return J(H)-J(S)||S._index-H._index})}),y=C(()=>[{label:`All (${Q.value.total})`,value:"all"},{label:`Failed (${Q.value.failed})`,value:"failed",disabled:Q.value.failed===0},{label:`With logs (${Q.value.withLogs})`,value:"logs",disabled:Q.value.withLogs===0}]),N=C(()=>Q.value.withLogs>0);function ne(v){return v.errorLogCount>0||v.status>=500?"border-l-2 border-l-red-400 dark:border-l-red-600":v.failed||v.warnLogCount>0?"border-l-2 border-l-amber-400 dark:border-l-amber-600":"border-l-2 border-l-transparent"}return(v,S)=>{const H=ce,J=Je,X=qe,se=So,O=fe,Y=Re,ee=Ke,ae=ye;return t(),k(ae,{icon:"i-lucide-network",title:"Network & backend logs",count:e(r)==="trace"?e(P):e(Q).total,help:"case.network"},{actions:d(()=>[n("div",Io,[e(r)==="captured"?(t(),o(B,{key:0},[e(Q).errorLogs>0||e(Q).warnLogs>0?(t(),o("div",Ro,[e(Q).errorLogs>0?(t(),o("span",Lo,[i(H,{name:"i-lucide-octagon-alert",class:"size-3.5"}),p(c(e(Q).errorLogs),1)])):l("",!0),e(Q).warnLogs>0?(t(),o("span",zo,[i(H,{name:"i-lucide-triangle-alert",class:"size-3.5"}),p(c(e(Q).warnLogs),1)])):l("",!0)])):l("",!0),i(J,{modelValue:e(b),"onUpdate:modelValue":S[0]||(S[0]=j=>ge(b)?b.value=j:null),items:e(y),size:"xs",variant:"link",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"])],64)):l("",!0),s.hasTrace?(t(),k(J,{key:1,modelValue:e(r),"onUpdate:modelValue":S[1]||(S[1]=j=>ge(r)?r.value=j:null),items:e(z),size:"xs",variant:"pill",ui:{list:"gap-1 p-0.5",trigger:"px-2"}},null,8,["modelValue","items"])):l("",!0)])]),default:d(()=>[e(r)==="trace"?(t(),o(B,{key:0},[e(g)||!e(w)?(t(),k(X,{key:0,text:"Parsing trace network stream…"})):e(w).status==="ok"?(t(),k(se,{key:1,data:e(w),"run-id":s.runId??null,"test-runs-case-id":s.testRunsCaseId??0},null,8,["data","run-id","test-runs-case-id"])):(t(),o("p",Mo,"No network activity recorded in this trace."))],64)):(t(),o("div",jo,[(t(!0),o(B,null,te(e(de),j=>(t(),o("div",{key:j._index,class:q([ne(j),"rounded bg-gray-50/60 dark:bg-gray-800/40"])},[n("button",{type:"button",class:q(["w-full flex items-center gap-2 py-1.5 px-2 text-sm text-left",j.hasDetail?"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800":"cursor-default"]),disabled:!j.hasDetail,onClick:K=>j.hasDetail&&F(j._index)},[j.hasDetail?(t(),k(H,{key:0,name:e(h).has(j._index)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5 shrink-0 text-gray-400"},null,8,["name"])):(t(),o("span",No)),i(O,{color:("httpMethodColor"in v?v.httpMethodColor:e(We))(j.method),variant:"soft",size:"xs",class:"font-mono shrink-0"},{default:d(()=>[p(c(j.method),1)]),_:2},1032,["color"]),i(O,{color:("httpStatusColor"in v?v.httpStatusColor:e(Ge))(j.status),variant:"soft",size:"xs",class:"font-mono shrink-0 tabular-nums"},{default:d(()=>[p(c(j.status||"—"),1)]),_:2},1032,["color"]),n("code",{class:"truncate text-xs flex-1 min-w-0",title:j.url},c(j.path),9,Ao),j.contentType?(t(),o("span",{key:2,class:"shrink-0 text-xs text-gray-400 font-mono hidden md:inline",title:`Response content type: ${j.contentType}`},c(G(j.contentType)),9,Po)):l("",!0),j.errorLogCount>0?(t(),o("span",{key:3,class:"shrink-0 inline-flex items-center gap-1 text-xs text-red-600 dark:text-red-400",title:`${j.errorLogCount} backend error log(s)`},[i(H,{name:"i-lucide-octagon-alert",class:"size-3.5"}),p(c(j.errorLogCount),1)],8,Uo)):l("",!0),j.warnLogCount>0?(t(),o("span",{key:4,class:"shrink-0 inline-flex items-center gap-1 text-xs text-amber-600 dark:text-amber-400",title:`${j.warnLogCount} backend warning log(s)`},[i(H,{name:"i-lucide-triangle-alert",class:"size-3.5"}),p(c(j.warnLogCount),1)],8,Bo)):l("",!0),j.serverMs!=null?(t(),o("span",{key:5,class:"shrink-0 inline-flex items-center gap-1 text-xs text-emerald-600 dark:text-emerald-400 tabular-nums",title:`Server-side processing time (${j.spans.length} span${j.spans.length===1?"":"s"})`},[i(H,{name:"i-lucide-server",class:"size-3.5"}),i(Y,{ms:j.serverMs,"no-title":""},null,8,["ms"])],8,Fo)):l("",!0),j.startTime?(t(),o("span",{key:6,class:"shrink-0 text-xs text-gray-400 hidden sm:inline",title:D(j.startTime)},c(("formatRelativeTime"in v?v.formatRelativeTime:e(Se))(j.startTime)),9,Vo)):l("",!0),n("span",{class:q(["ml-1 shrink-0 text-xs tabular-nums",(j.duration??0)>1e3?"text-red-600 font-medium":(j.duration??0)>500?"text-orange-500":"text-gray-500"])},[i(Y,{ms:j.duration,"unit-class":"opacity-60"},null,8,["ms"])],2)],10,Do),j.spans.length>0&&e(h).has(j._index)?(t(),o("div",Eo,[n("div",Oo,[i(H,{name:"i-lucide-waypoints",class:"size-3.5"}),S[2]||(S[2]=p("Server trace ",-1))]),(t(!0),o(B,null,te(I(j.spans),K=>(t(),o("div",{key:K.id,class:"flex items-center gap-2 text-xs",title:K.status==="error"?`${K.name} (error)`:K.name},[n("div",{class:"w-40 sm:w-56 shrink-0 flex items-center gap-1 min-w-0",style:Ce({paddingLeft:`${K.depth*12}px`})},[K.kind?(t(),o("span",Ko,c(K.kind),1)):l("",!0),n("span",{class:q(["truncate font-mono",K.status==="error"?"text-red-600 dark:text-red-400":"text-gray-600 dark:text-gray-300"])},c(K.name),3)],4),n("div",Wo,[n("div",{class:q(["absolute top-0 h-3 rounded",E(K)]),style:Ce({left:`${K.offsetPct}%`,width:`${K.widthPct}%`})},null,6)]),i(Y,{ms:K.durMs,class:"w-12 shrink-0 text-right text-gray-500"},null,8,["ms"])],8,Ho))),128))])):l("",!0),j.logs.length>0&&e(h).has(j._index)?(t(),o("div",Go,[(t(!0),o(B,null,te(j.logs,(K,xe)=>(t(),o("div",{key:xe,class:"rounded border border-default bg-white dark:bg-gray-900/60 p-2 text-xs"},[n("div",Jo,[i(O,{color:R(K.level),variant:"soft",size:"xs",class:"shrink-0 capitalize"},{default:d(()=>[p(c(K.level),1)]),_:2},1032,["color"]),K.category?(t(),o("span",qo,"["+c(K.category)+"]",1)):l("",!0),n("span",Qo,c(K.message),1),K.timestamp?(t(),o("span",{key:1,class:"shrink-0 text-gray-400 tabular-nums",title:D(K.timestamp)},c(("formatRelativeTime"in v?v.formatRelativeTime:e(Se))(K.timestamp)),9,Zo)):l("",!0)]),K.stack?(t(),o("div",Xo,[n("button",{type:"button",class:"inline-flex items-center gap-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-200",onClick:Qe=>m(`${j._index}:${xe}`)},[i(H,{name:e(M).has(`${j._index}:${xe}`)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3"},null,8,["name"]),S[3]||(S[3]=p(" Stack trace ",-1))],8,Yo),e(M).has(`${j._index}:${xe}`)?(t(),o("pre",er,c(K.stack),1)):l("",!0)])):l("",!0)]))),128))])):l("",!0)],2))),128))])),e(r)==="captured"&&!e(N)?(t(),o("p",tr,[i(H,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),S[5]||(S[5]=p(" No backend server logs captured — install ",-1)),i(ee,{to:"backend-logs","no-icon":"",class:"underline"},{default:d(()=>[...S[4]||(S[4]=[p("a Piwi backend integration",-1)])]),_:1}),S[6]||(S[6]=p(" to see server-side warnings and errors under each request. ",-1))])):l("",!0),s.hasTrace?l("",!0):(t(),o("p",sr,[i(H,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),n("span",null,[S[8]||(S[8]=p(" Want to go deeper? Record traces (",-1)),S[9]||(S[9]=n("code",null,"trace: 'retain-on-failure'",-1)),S[10]||(S[10]=p(") to see every request with headers, timing and bodies here. ",-1)),i(ee,{to:"ui-overview#trace-powered-deep-views","no-icon":"",class:"underline"},{default:d(()=>[...S[7]||(S[7]=[p("Learn more",-1)])]),_:1})])]))]),_:1},8,["count"])}}}),ar=Object.assign(nr,{__name:"TestCaseNetworkRequests"}),or={class:"space-y-2"},rr=re({__name:"TestCaseTracesCard",props:{traces:{}},setup(s){return(_,x)=>{const b=ds,w=ye;return s.traces.length>0?(t(),k(w,{key:0,icon:"i-lucide-bug-play",title:"Traces",count:s.traces.length,help:"case.traces"},{default:d(()=>[n("div",or,[(t(!0),o(B,null,te(s.traces,g=>(t(),k(b,{key:g.id,trace:g,class:"py-2 px-3 rounded-lg border"},null,8,["trace"]))),128))])]),_:1},8,["count"])):l("",!0)}}}),ir=Object.assign(rr,{__name:"TestCaseTracesCard"}),lr={class:"space-y-3"},cr={class:"flex items-center justify-between px-3 py-2 bg-gray-50 dark:bg-gray-800/50 border-b"},ur={class:"flex items-center gap-2 min-w-0"},dr={class:"text-sm font-medium truncate"},mr={key:0,class:"text-xs text-gray-400 shrink-0"},pr={class:"text-xs text-gray-400"},gr={class:"flex items-center gap-1 shrink-0"},fr=["href"],yr={key:0,class:"bg-gray-100 dark:bg-gray-900"},xr=["src","alt","onClick"],hr={key:1,class:"bg-black"},vr={key:2,class:"bg-gray-50 dark:bg-gray-900"},_r={key:0,class:"flex items-center justify-center py-8"},kr={key:1,class:"p-4 text-red-500 text-sm"},br={key:2,class:"p-4 overflow-auto max-h-96"},wr={class:"text-sm whitespace-pre-wrap font-sans leading-relaxed"},$r=re({__name:"TestCaseAttachmentsCard",props:{attachments:{}},setup(s){const _=s,x=Oe(),b=A(null),w=C(()=>_.attachments.filter(R=>Te(R.path,R.contentType)).map(R=>({src:z(R.path,R.contentType),name:R.name||$(R.path)})));function g(R){b.value=R}const a=new Set([".md",".mdx",".markdown"]),u=new Set(["text/markdown","text/x-markdown"]);function r(R){return R.toLowerCase().split(".").pop()||""}function P(R,W){return!!(a.has(r(R))||W&&u.has(W.toLowerCase()))}function z(R,W){return _t(R,W,x.app?.baseURL)}function $(R){return R.split("/").pop()||R}function h(R){return R==null?"":we(R)}const F=A({}),M=A({}),m=A({}),I=A(new Set);async function E(R){if(F.value[R.id]===void 0&&!m.value[R.id]){m.value[R.id]=!0,M.value[R.id]=null;try{const W=await $fetch(z(R.path,R.contentType),{responseType:"text"});F.value[R.id]=W}catch{M.value[R.id]="Failed to load preview"}finally{m.value[R.id]=!1}}}function U(R,W){const G=new Set(I.value);G.has(R)?G.delete(R):(G.add(R),E(W)),I.value=G}return(R,W)=>{const G=ce,D=Ie,Z=ms,Q=ps,de=ye;return s.attachments.length>0?(t(),k(de,{key:0,icon:"i-lucide-paperclip",title:"Attachments",count:s.attachments.length},{default:d(()=>[n("div",lr,[(t(!0),o(B,null,te(s.attachments,y=>(t(),o("div",{key:y.id,class:"rounded-lg border overflow-hidden"},[n("div",cr,[n("div",ur,[i(G,{name:e(Te)(y.path,y.contentType)?"i-lucide-image":e(Ne)(y.path,y.contentType)?"i-lucide-video":P(y.path,y.contentType)?"i-lucide-file-text":"i-lucide-file",class:"size-4 text-gray-400 shrink-0"},null,8,["name"]),n("span",dr,c($(y.path)),1),y.name&&y.name!==$(y.path)?(t(),o("span",mr,c(y.name),1)):l("",!0),n("span",pr,c(h(y.size)),1)]),n("div",gr,[P(y.path,y.contentType)?(t(),k(D,{key:0,size:"xs",color:"neutral",variant:"soft",onClick:N=>U(y.id,y)},{default:d(()=>[p(c(e(I).has(y.id)?"Hide preview":"Preview"),1)]),_:2},1032,["onClick"])):l("",!0),n("a",{href:z(y.path,y.contentType),target:"_blank",class:"text-primary hover:underline text-xs shrink-0"},"Open",8,fr)])]),e(Te)(y.path,y.contentType)?(t(),o("div",yr,[n("img",{src:z(y.path,y.contentType),alt:y.name||"Screenshot",class:"max-w-full max-h-96 object-contain mx-auto cursor-pointer hover:opacity-90 transition-opacity",loading:"lazy",onClick:N=>g(e(w).findIndex(ne=>ne.src===z(y.path,y.contentType)))},null,8,xr)])):e(Ne)(y.path,y.contentType)?(t(),o("div",hr,[i(Z,{src:z(y.path,y.contentType)},null,8,["src"])])):P(y.path,y.contentType)&&e(I).has(y.id)?(t(),o("div",vr,[e(m)[y.id]?(t(),o("div",_r,[i(G,{name:"i-lucide-loader-circle",class:"size-5 animate-spin text-gray-400"})])):e(M)[y.id]?(t(),o("div",kr,c(e(M)[y.id]),1)):e(F)[y.id]?(t(),o("div",br,[n("pre",wr,c(e(F)[y.id]),1)])):l("",!0)])):l("",!0)]))),128))]),i(Q,{modelValue:e(b),"onUpdate:modelValue":W[0]||(W[0]=y=>ge(b)?b.value=y:null),images:e(w)},null,8,["modelValue","images"])]),_:1},8,["count"])):l("",!0)}}}),Cr=Object.assign($r,{__name:"TestCaseAttachmentsCard"});function Tr(s){return Array.isArray(s)?s.some(_=>_&&typeof _.type=="string"&&_.type.toLowerCase()==="slow"):!1}function Sr(s){const _=[];if(!s)return _;const x=s.steps||[],w=x.filter(a=>a.category==="navigation").filter(a=>a.duration>3e3);if(w.length>0){const a=w.sort((u,r)=>r.duration-u.duration)[0];_.push({type:"warning",message:"Slow navigation detected",details:`"${a.title}" took ${(a.duration/1e3).toFixed(1)}s. The tested page may have performance issues (slow server response, heavy JS bundles, etc.).`})}x.length>20&&_.push({type:"info",message:"Many sequential actions",details:`This test has ${x.length} steps. Consider splitting it into smaller, focused tests for better isolation and faster feedback.`}),s.status==="passed"&&(s.retries||0)>0&&_.push({type:"warning",message:"Flaky test — passed after retries",details:`This test needed ${s.retries} ${s.retries===1?"retry":"retries"} to pass. Consider reviewing locator strategies, adding explicit waits, or checking for race conditions.`});const g=x.filter(a=>a.category==="assertion"&&a.duration>2e3);if(g.length>0){const a=g.sort((u,r)=>r.duration-u.duration)[0];_.push({type:"info",message:"Slow assertions detected",details:`"${a.title}" took ${(a.duration/1e3).toFixed(1)}s. The UI may be slow to render or the assertion timeout may need tuning.`})}return Tr(s.testAnnotations)&&typeof s.duration=="number"&&s.duration<1e4&&_.push({type:"info",message:"test.slow() may be unnecessary",details:`This run finished in ${(s.duration/1e3).toFixed(1)}s, yet the test is marked test.slow(), which triples its timeout budget. If it is consistently this fast, removing test.slow() lets a failure surface sooner.`}),typeof s.timeout=="number"&&s.timeout>0&&typeof s.duration=="number"&&s.duration>0&&s.timeout>=4*s.duration&&s.timeout-s.duration>=3e4&&_.push({type:"info",message:"Oversized timeout",details:`The timeout is ${(s.timeout/1e3).toFixed(0)}s but this run took ${(s.duration/1e3).toFixed(1)}s. A large timeout means a hang or failure waits far longer than necessary — consider lowering it toward the test's real duration.`}),_}function Ir(s,_){const x=s.search(/\n at /);if(x===-1)return _!==void 0&&s.length>_?s.slice(0,_)+`
4
- [truncated]`:s;const b=s.slice(0,x),g=s.slice(x).split(`
5
- `),a=[];let u=0;const r=()=>{u>0&&(a.push(`… (${u} internal frame${u>1?"s":""})`),u=0)};for(const z of g){const $=z.trimStart();$.startsWith("at ")?z.includes("node_modules")||$.startsWith("at node:")?u++:(r(),a.push(z)):($===""||r(),a.push(z))}r();let P=b+`
6
- `+a.join(`
7
- `);return _!==void 0&&P.length>_&&(P=P.slice(0,_)+`
8
- [truncated]`),P}const Rr={class:"space-y-4"},Lr=["innerHTML"],zr={class:"grid grid-cols-1 xl:grid-cols-[3fr_2fr] gap-4"},Mr={class:"space-y-4 xl:order-2"},jr={class:"space-y-4 xl:order-1 min-w-0"},Dr={class:"max-h-96 overflow-y-auto"},Nr={class:"space-y-3"},Ar={key:0},Pr={class:"flex flex-wrap items-center gap-x-3 gap-y-1.5 text-xs mb-3"},Ur={class:"font-medium text-gray-600 dark:text-gray-300"},Br={class:"tabular-nums text-gray-500 dark:text-gray-400"},Fr={class:"text-xs tabular-nums text-gray-400 dark:text-gray-500"},Vr={key:0,class:"inline-flex items-center justify-center size-5 rounded-full bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400 text-xs leading-none",title:"Step failed"},Er={key:1,class:"inline-flex items-center justify-center size-5 rounded-full bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400 text-xs leading-none",title:"Step passed"},Or={class:"flex items-center gap-2"},Hr={key:0,class:"text-xs text-red-500 mt-1 whitespace-pre-wrap break-words font-mono"},Kr={class:"min-w-[6rem]"},Wr={class:"flex items-center justify-between gap-2"},Gr={key:0,class:"text-xs tabular-nums text-gray-400 dark:text-gray-500"},Jr={class:"relative mt-1 h-1.5 w-full overflow-hidden rounded-full bg-gray-100 dark:bg-gray-800"},qr={class:"space-y-4 pt-4"},Qr={key:3,class:"flex flex-col items-center justify-center py-12 text-gray-400"},Zr={class:"space-y-4 pt-1"},Xr={key:0,class:"space-y-2"},Yr={class:"flex items-start gap-2"},ei={class:"space-y-4"},ti={key:3,class:"text-xs text-gray-400 pt-1"},si={class:"bg-gray-100 dark:bg-gray-800 px-1 rounded"},ni={class:"text-xs text-gray-400"},ai={class:"space-y-4 pt-4"},oi={key:0,class:"space-y-4"},ri={class:"flex items-center justify-end"},ii={class:"text-xs whitespace-nowrap"},li={class:"text-gray-500"},ci={class:"text-gray-400 ml-1"},ui={key:1,class:"text-gray-400"},di=["title"],ul=re({__name:"[id]",async setup(s){let _,x;const b=es(),w=ts(),g=b.params.id,{data:a,refresh:u}=([_,x]=pt(()=>ft(`/api/test-run-cases/${g}`,"$cViH4nbiGI")),_=await _,x(),_),r=A([]);ve(()=>a.value?.testCaseId,async f=>{if(f)try{r.value=await $fetch(`/api/test-cases/${f}/history`)}catch{r.value=[]}else r.value=[]},{immediate:!0});const{data:P,refresh:z}=([_,x]=pt(()=>ft(`/api/test-run-cases/${g}/traces`,"$GsSNbTq_Ec")),_=await _,x(),_),$=C(()=>(P.value?.length??0)>0);ss(C(()=>({title:`${a.value?.title||`Test run case #${g}`} — Piwi Dashboard`})));const h=C(()=>!!a.value?.error),F=C(()=>a.value?Sr(a.value):[]),M=C(()=>a.value?.steps?a.value.steps:[]),m=C(()=>a.value?.webVitals??null),I=C(()=>a.value?.networkRequests??[]),E=C(()=>{if(!r.value||r.value.length<2||!a.value?.duration)return null;const f=r.value.filter(le=>le.duration!==null&&le.id!==a.value?.id);if(f.length===0)return null;const T=f.reduce((le,pe)=>le+(pe.duration||0),0)/f.length,V=a.value.duration,oe=V-T,me=T>0?Math.round(oe/T*100):0;return{avg:Math.round(T),current:V,diff:Math.round(oe),pct:me}}),U=C(()=>a.value?.testRun?.metadata),R=C(()=>{const f=U.value;return f?.scm?f.scm:null}),W=C(()=>{const f=U.value;return f?.ci?f.ci:null}),G=C(()=>a.value?.failureCluster??null),D=C(()=>{const f=[];return h.value&&f.push({label:"Diagnosis",icon:"i-lucide-stethoscope",value:"diagnosis",slot:"diagnosis"}),f.push({label:`Steps (${M.value.length})`,icon:"i-lucide-list-checks",value:"steps",slot:"steps"}),h.value||f.push({label:"Artifacts",icon:"i-lucide-paperclip",value:"artifacts",slot:"artifacts"}),f.push({label:"Performance",icon:"i-lucide-gauge",value:"performance",slot:"performance"}),f.push({label:`History${r.value?.length?` (${r.value.length})`:""}`,icon:"i-lucide-trending-up",value:"history",slot:"history"}),f}),Z=C(()=>D.value.map(f=>f.value));function Q(){return h.value?"diagnosis":"steps"}function de(f){let T=typeof f=="string"?f:"";return T==="error"&&(T="diagnosis"),T==="traces"&&(T=h.value?"diagnosis":"artifacts"),Z.value.includes(T)?T:Q()}const y=A(de(b.query.tab));ve(Z,f=>{f.includes(y.value)||(y.value=de(b.query.tab))}),ve(y,f=>{b.query.tab!==f&&w.replace({query:{...b.query,tab:f}})},{immediate:!0});const N=[{accessorKey:"startTime",header:"Date"},{accessorKey:"status",header:"Status"},{accessorKey:"duration",header:"Duration"},{accessorKey:"retries",header:"Retries"},{accessorKey:"runId",header:"Run"},{accessorKey:"error",header:"Error"}],ne={navigation:"info",assertion:"success",action:"warning",input:"warning",api:"info",wait:"neutral",hook:"neutral",fixture:"neutral"},v=[{id:"index",header:"#",meta:{class:{th:"w-12",td:"w-12"}}},{id:"status",header:"",meta:{class:{th:"w-10",td:"w-10"}}},{accessorKey:"category",header:"Category",meta:{class:{th:"w-28",td:"w-28"}}},{accessorKey:"title",header:"Step"},{accessorKey:"duration",header:"Duration",meta:{class:{th:"w-44",td:"w-44"}}}],S=C(()=>{const f=new Map;for(const T of M.value){const V=f.get(T.category)??{count:0,duration:0};V.count+=1,V.duration+=T.duration||0,f.set(T.category,V)}return Array.from(f,([T,V])=>({category:T,...V})).sort((T,V)=>V.duration-T.duration)}),H=C(()=>{let f=-1,T=-1;return M.value.forEach((V,oe)=>{(V.duration||0)>T&&(T=V.duration||0,f=oe)}),f}),J=C(()=>M.value.reduce((f,T)=>Math.max(f,T.duration||0),0)),X=C(()=>M.value.length>0&&M.value.every(f=>typeof f.startTime=="number")),se=C(()=>a.value?.startedAt??(X.value?Math.min(...M.value.map(f=>f.startTime)):0)),O=C(()=>{const f=a.value?.duration??0;if(f>0)return f;if(X.value){const T=Math.max(...M.value.map(V=>V.startTime+(V.duration||0)));return Math.max(1,T-se.value)}return 0});function Y(f){if(X.value&&O.value>0){const V=Math.max(0,Math.min(100,(f.startTime-se.value)/O.value*100)),oe=Math.min(100-V,Math.max(1.5,(f.duration||0)/O.value*100));return{left:`${V}%`,width:`${oe}%`}}return{left:"0%",width:`${J.value>0?Math.max(2,(f.duration||0)/J.value*100):0}%`}}function ee(f){const T=a.value?.duration??0;if(T<=0)return"";const V=f/T*100;return V>0&&V<1?"<1%":`${Math.round(V)}%`}function ae(f){return f>2e3?"text-red-600 font-medium":f>500?"text-orange-500":"text-gray-500"}function j(f){return f>2e3?"bg-red-500":f>500?"bg-orange-400":"bg-gray-400 dark:bg-gray-500"}const K=C(()=>a.value?.testRun?.environment),xe=C(()=>[{filePath:a.value?.filePath??"",title:a.value?.title??"",line:a.value?.line??null,projectName:a.value?.browser?.projectName??null}]),Qe=C(()=>nn(xe.value)),{copy:$t,copied:Ze}=an(),Ct=C(()=>[{label:Ze.value?"Copied":"Retry command",icon:Ze.value?"i-lucide-check":"i-lucide-play",onClick:()=>$t(Qe.value,{toast:"Retry command copied"})},{label:"Refresh",icon:"i-lucide-refresh-cw",onClick:()=>u()}]),Tt=!!Oe().public.demoMode;let he=null;const Xe=C(()=>{const f=a.value?.testRun?.status;return f==="running"||f==="finalizing"});function St(){if(Tt||he)return;const f=a.value?.testRun?.id;f&&(he=new EventSource(`/api/test-runs/${f}/stream`),he.onmessage=T=>{try{const V=JSON.parse(T.data);V.type==="case-files"&&V.data?.testRunsCaseId===Number(g)?(u(),z()):V.type==="run-finished"&&(u(),z(),Pe())}catch{}},he.onerror=()=>{})}function Pe(){he&&(he.close(),he=null)}ve(Xe,f=>{f?St():Pe()},{immediate:!0}),ns(Pe);const{copyRich:It,copied:Ye}=gs();function Rt(){const f=a.value;if(!f?.error)return;const T=window.location.origin,V=f.title??"Unknown test",oe=f.location??"",me=f.error.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,""),le=be=>be.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),pe=G.value?`${T}/failure-clusters/${G.value.id}`:null,je=`${T}/test-run-cases/${g}?tab=diagnosis`,ke=a.value?.testCaseId?`${T}/test-cases/${a.value.testCaseId}`:null,Be=[`❌ Test failed: ${V}`,oe?`Location: ${oe}`:null,"","Error:",me,"",pe?`Failure cluster: ${pe}`:null,`Execution: ${je}`,ke?`History: ${ke}`:null].filter(be=>be!==null).join(`
9
- `),Fe=[`<p><strong>❌ Test failed: ${le(V)}</strong>${oe?`<br><code>${le(oe)}</code>`:""}</p>`,`<p><strong>Error:</strong></p><pre>${gt(f.error)}</pre>`,`<p>🔗 ${pe?`<a href="${pe}">View failure cluster</a> · `:""}<a href="${je}">Execution details</a>${ke?` · <a href="${ke}">Test history</a>`:""}</p>`].join("");It(Be,Fe,{toast:"Failure copied"})}const Ue=A(null),et=A(null),Le=A(null),ze=A(null),tt=A(null),Me=A(null),st=A(null),nt=A(null),at=A(null),ot=A(null);function _e(f){f?.scrollIntoView({behavior:"smooth",block:"start"})}const rt={sampleError:()=>_e(Ue.value),executionError:()=>_e(Ue.value),testSource:()=>ze.value?.reveal(),sourceFiles:()=>ze.value?.reveal(),environmentDiff:()=>st.value?.reveal(),visualDiff:()=>nt.value?.reveal(),domSnapshot:()=>at.value?.reveal(),ariaSnapshot:()=>ot.value?.reveal(),screenshots:()=>Me.value?.reveal(),tracePointers:()=>Me.value?.reveal(),artifacts:()=>Me.value?.reveal(),console:()=>_e(et.value),networkRequests:()=>_e(Le.value),serverTraces:()=>_e(Le.value),traceCallStack:()=>ze.value?.reveal(),traceNetwork:()=>{tt.value?.showTraceMode(),_e(Le.value)},steps:()=>{y.value="steps"},failingSteps:()=>{y.value="steps"}};return as(Es,{canLocate:f=>f in rt,open:f=>rt[f]?.()}),(f,T)=>{const V=Qt,oe=Zt,me=ce,le=Ae,pe=_s,je=Ts,ke=Ss,Be=Rs,Fe=Vn,be=Ie,Lt=kt,it=ye,zt=qn,Mt=ia,jt=ha,Dt=Ca,Nt=Ma,At=ys,Pt=xs,Ut=hs,lt=Ba,ct=ar,ut=fs,Bt=vt,Ft=He,Vt=vs,De=fe,ie=Re,Et=Zs,dt=Xs,mt=Ys,Ve=bt,Ot=ir,Ht=Cr,ue=tn,Ee=en,Kt=Ke,Wt=sn,Gt=Cs,Jt=Is;return t(),k(Jt,{id:"test-run-case-detail"},{header:d(()=>[i(Be,null,{leading:d(()=>[i(V),i(oe,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},...e(a)?.testRun?.project?.id?[{label:e(a).testRun.project.name||"Project",to:`/projects/${e(a).testRun.project.id}`}]:[{label:"Project"}],...e(a)?.testRun?.id?[{label:`Run #${e(a).testRun.id}`+(e(a).testRun.label?` — ${e(a).testRun.label}`:""),to:`/test-runs/${e(a).testRun.id}`}]:[{label:"Test run"}],{label:e(a)?.title||`Test run case #${e(g)}`}]},null,8,["items"])]),right:d(()=>[e(a)?.testCaseId?(t(),k(le,{key:0,to:`/test-cases/${e(a).testCaseId}`,class:"text-xs text-gray-500 hover:text-primary mr-2 flex items-center gap-1",title:"View test case evolution and history"},{default:d(()=>[i(me,{name:"i-lucide-trending-up",class:"size-3.5"}),T[2]||(T[2]=n("span",{class:"hidden sm:inline"},"Evolution",-1))]),_:1},8,["to"])):l("",!0),e(a)?(t(),k(pe,{key:1,endpoint:`/api/test-run-cases/${e(a).id}/export`,"base-name":`piwi-execution-${e(a).id}`,class:"mr-2"},null,8,["endpoint","base-name"])):l("",!0),i(je,{"project-id":e(a)?.testRun?.project?.id,"project-label":e(a)?.testRun?.project?.label??e(a)?.testRun?.project?.name,cases:e(xe),class:"mr-2"},null,8,["project-id","project-label","cases"]),i(ke,{actions:e(Ct)},null,8,["actions"])]),_:1})]),body:d(()=>[i(Gt,{modelValue:e(y),"onUpdate:modelValue":T[1]||(T[1]=L=>ge(y)?y.value=L:null),"tab-items":e(D)},{summary:d(()=>[i(Fe,{"test-case":e(a)??null,"scm-info":e(R),"ci-info":e(W),browser:e(a)?.browser??null,environment:e(K),"steps-count":e(M).length,"historical-timing":e(E),"stable-links":e(a)?.stableLinks??null,onRefresh:T[0]||(T[0]=L=>e(u)())},null,8,["test-case","scm-info","ci-info","browser","environment","steps-count","historical-timing","stable-links"])]),"tab-diagnosis":d(()=>[n("div",Rr,[n("div",{ref_key:"errorEl",ref:Ue,class:"scroll-mt-4"},[e(a)?.error?(t(),k(it,{key:0,icon:"i-lucide-circle-x","icon-class":"text-red-500",title:"Error"},{actions:d(()=>[i(Lt,{text:e(Ye)?"Copied!":"Copy failure"},{default:d(()=>[i(be,{size:"xs",variant:"ghost",color:"neutral",icon:e(Ye)?"i-lucide-check":"i-lucide-clipboard",onClick:Rt},null,8,["icon"])]),_:1},8,["text"])]),default:d(()=>[n("div",{class:"text-xs font-mono whitespace-pre-wrap break-words max-h-96 overflow-y-auto rounded bg-red-50 dark:bg-red-950/20 p-3",innerHTML:e(gt)(e(Ir)(e(a).error))},null,8,Lr)]),_:1})):l("",!0)],512),n("div",zr,[n("div",Mr,[i(zt,{"test-case":e(a)??null,history:e(r),"current-id":Number(e(g))},null,8,["test-case","history","current-id"]),e(G)?(t(),k(Mt,{key:0,cluster:e(G)},null,8,["cluster"])):l("",!0),i(jt,{"test-runs-case-id":Number(e(g))},null,8,["test-runs-case-id"])]),n("div",jr,[e(a)?.testSourceFrames?.length||e(a)?.testSource||e($)?(t(),k(Dt,{key:0,ref_key:"testSourceCard",ref:ze,"storage-key":"case-test-source",frames:e(a)?.testSourceFrames??null,"test-source":e(a)?.testSource??null,"run-id":e(a)?.testRun?.id??null,"test-runs-case-id":Number(e(g)),"has-trace":e($),"project-key":e(a)?.testRun?.project?.id,"project-name":e(a)?.testRun?.project?.name},null,8,["frames","test-source","run-id","test-runs-case-id","has-trace","project-key","project-name"])):l("",!0),i(Nt,{ref_key:"evidenceCard",ref:Me,"storage-key":"case-evidence",attachments:e(a)?.attachments??[],traces:e(P)??[]},null,8,["attachments","traces"]),e(a)?.testRun?.id?(t(),k(At,{key:1,"storage-key":"case-locators","run-id":e(a).testRun.id,"test-runs-case-id":Number(e(g))},null,8,["run-id","test-runs-case-id"])):l("",!0),e(a)?.testRun?.id?(t(),k(Pt,{key:2,ref_key:"envDiffCard",ref:st,"storage-key":"case-env-diff","run-id":e(a).testRun.id,"test-runs-case-id":Number(e(g))},null,8,["run-id","test-runs-case-id"])):l("",!0),e(a)?.testRun?.id?(t(),k(Ut,{key:3,ref_key:"visualDiffCard",ref:nt,"storage-key":"case-visual-diff","run-id":e(a).testRun.id,"test-runs-case-id":Number(e(g))},null,8,["run-id","test-runs-case-id"])):l("",!0),e(a)?.consoleLogs?.length?(t(),o("div",{key:4,ref_key:"consoleEl",ref:et,class:"scroll-mt-4"},[i(lt,{entries:e(a)?.consoleLogs??[]},null,8,["entries"])],512)):l("",!0),e(I).length>0||e($)?(t(),o("div",{key:5,ref_key:"networkEl",ref:Le,class:"scroll-mt-4"},[i(ct,{ref_key:"networkCard",ref:tt,requests:e(I),"run-id":e(a)?.testRun?.id??null,"test-runs-case-id":Number(e(g)),"has-trace":e($)},null,8,["requests","run-id","test-runs-case-id","has-trace"])],512)):l("",!0),e(a)?.pageState?(t(),k(ut,{key:6,"storage-key":"case-page-state","page-state":e(a).pageState},null,8,["page-state"])):l("",!0),e(a)?.ariaSnapshot?(t(),k(Ft,{key:7,ref_key:"ariaCard",ref:ot,"storage-key":"case-aria",icon:"i-lucide-scan-text",title:"ARIA snapshot",help:"case.aria"},{folded:d(()=>[...T[3]||(T[3]=[p("Accessibility tree captured at the moment of failure",-1)])]),default:d(()=>[n("div",Dr,[i(Bt,{text:"```yaml\n"+e(a).ariaSnapshot+"\n```"},null,8,["text"])])]),_:1},512)):l("",!0),e(a)?.testRun?.id?(t(),k(Vt,{key:8,ref_key:"domSnapshotCard",ref:at,"storage-key":"case-dom-snapshot","run-id":e(a).testRun.id,"test-runs-case-id":Number(e(g))},null,8,["run-id","test-runs-case-id"])):l("",!0)])])])]),"tab-steps":d(()=>[n("div",Nr,[e(M).length>0?(t(),o("div",Ar,[n("div",Pr,[n("span",Ur,c(e(M).length)+" steps",1),T[4]||(T[4]=n("span",{class:"text-gray-300 dark:text-gray-600"},"·",-1)),(t(!0),o(B,null,te(e(S),L=>(t(),o("span",{key:L.category,class:"inline-flex items-center gap-1"},[i(De,{color:ne[L.category]||"neutral",variant:"soft",size:"xs"},{default:d(()=>[p(c(L.category),1)]),_:2},1032,["color"]),n("span",Br,[p("×"+c(L.count)+" · ",1),i(ie,{ms:L.duration},null,8,["ms"])])]))),128))]),i(mt,{"min-width":"40rem",bleed:!1},{default:d(()=>[i(dt,{data:e(M),columns:v,ui:{base:"table-fixed w-full border-separate border-spacing-0 min-w-[40rem]",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default align-top"}},{"index-cell":d(({row:L})=>[n("span",Fr,c(L.index+1),1)]),"status-cell":d(({row:L})=>[L.original.failed?(t(),o("span",Vr,"✗")):(t(),o("span",Er,"✓"))]),"category-cell":d(({row:L})=>[i(De,{color:ne[L.original.category]||"neutral",variant:"soft",size:"xs"},{default:d(()=>[p(c(L.original.category),1)]),_:2},1032,["color"])]),"title-cell":d(({row:L})=>[n("div",Or,[n("span",{class:q(L.original.failed?"text-red-600 dark:text-red-400 font-medium":"")},c(L.original.title),3),L.index===e(H)?(t(),k(De,{key:0,color:"warning",variant:"subtle",size:"xs",class:"shrink-0",title:"Slowest step in this test"},{default:d(()=>[...T[5]||(T[5]=[p(" slowest ",-1)])]),_:1})):l("",!0)]),L.original.failed&&L.original.error?.message?(t(),o("p",Hr,c(L.original.error.message),1)):l("",!0),L.original.location?(t(),k(Et,{key:1,location:L.original.location,"project-key":e(a)?.testRun?.project?.id,"project-name":e(a)?.testRun?.project?.name,class:"text-xs text-gray-400 dark:text-gray-500 mt-0.5"},null,8,["location","project-key","project-name"])):l("",!0)]),"duration-cell":d(({row:L})=>[n("div",Kr,[n("div",Wr,[i(ie,{ms:L.original.duration,class:q(`text-sm ${ae(L.original.duration)}`),"unit-class":"opacity-60"},null,8,["ms","class"]),ee(L.original.duration)?(t(),o("span",Gr,c(ee(L.original.duration)),1)):l("",!0)]),n("div",Jr,[n("div",{class:q(["absolute inset-y-0 rounded-full",j(L.original.duration)]),style:Ce(Y(L.original))},null,6)])])]),_:1},8,["data"])]),_:1})])):(t(),k(Ve,{key:1,icon:"i-lucide-list-checks",text:"No steps recorded for this execution"}))])]),"tab-artifacts":d(()=>[n("div",qr,[i(Ot,{traces:e(P)||[]},null,8,["traces"]),i(Ht,{attachments:e(a)?.attachments??[]},null,8,["attachments"]),e(a)?.pageState?(t(),k(ut,{key:0,"storage-key":"case-page-state","page-state":e(a).pageState},null,8,["page-state"])):l("",!0),e(a)?.consoleLogs?.length?(t(),k(lt,{key:1,entries:e(a)?.consoleLogs??[]},null,8,["entries"])):l("",!0),e(I).length>0||e($)?(t(),k(ct,{key:2,requests:e(I),"run-id":e(a)?.testRun?.id??null,"test-runs-case-id":Number(e(g)),"has-trace":e($)},null,8,["requests","run-id","test-runs-case-id","has-trace"])):l("",!0),!e(P)?.length&&!e(a)?.attachments?.length&&!e(a)?.consoleLogs?.length&&!e(I).length?(t(),o("div",Qr,[e(Xe)?(t(),o(B,{key:0},[i(me,{name:"i-lucide-loader-circle",class:"size-8 mb-2 animate-spin"}),T[6]||(T[6]=n("p",{class:"text-sm"}," Run in progress — traces and attachments appear here as soon as they are uploaded. ",-1))],64)):(t(),o(B,{key:1},[i(me,{name:"i-lucide-inbox",class:"size-8 mb-2"}),T[7]||(T[7]=n("p",{class:"text-sm"},"No traces, console logs, or network requests captured for this test case.",-1))],64))])):l("",!0)])]),"tab-performance":d(()=>[n("div",Zr,[e(F).length>0?(t(),o("div",Xr,[(t(!0),o(B,null,te(e(F),(L,qt)=>(t(),o("div",{key:qt,class:q(["p-3 rounded-lg border",L.type==="warning"?"bg-amber-50 dark:bg-amber-900/20 border-amber-200 dark:border-amber-800":"bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800"])},[n("div",Yr,[i(me,{name:L.type==="warning"?"i-lucide-alert-triangle":"i-lucide-lightbulb",class:q([L.type==="warning"?"text-amber-600":"text-blue-600","size-4 mt-0.5 shrink-0"])},null,8,["name","class"]),n("div",null,[n("p",{class:q(L.type==="warning"?"text-amber-800 dark:text-amber-200 font-medium":"text-blue-800 dark:text-blue-200 font-medium")},c(L.message),3),n("p",{class:q([L.type==="warning"?"text-amber-700 dark:text-amber-300":"text-blue-700 dark:text-blue-300","mt-1"])},c(L.details),3)])])],2))),128))])):l("",!0),e(m)?(t(),k(it,{key:1,icon:"i-lucide-gauge",title:"Browser performance (Web Vitals)",help:"case.web-vitals"},{default:d(()=>[n("div",ei,[e(m).navigation?(t(),k(Ee,{key:0,"min-tile-width":"10rem"},{default:d(()=>[i(ue,{label:"TTFB",hint:"Time to first byte","value-class":e(m).navigation.ttfb>600?"text-red-600":e(m).navigation.ttfb>200?"text-orange-500":"text-green-600"},{default:d(()=>[i(ie,{ms:e(m).navigation.ttfb},null,8,["ms"])]),_:1},8,["value-class"]),i(ue,{label:"DOM Interactive",hint:"DOM interactive","value-class":e(m).navigation.domInteractive>3e3?"text-red-600":e(m).navigation.domInteractive>1500?"text-orange-500":"text-green-600"},{default:d(()=>[i(ie,{ms:e(m).navigation.domInteractive},null,8,["ms"])]),_:1},8,["value-class"]),i(ue,{label:"DOMContentLoaded",hint:"DOMContentLoaded","value-class":e(m).navigation.domContentLoaded>3e3?"text-red-600":e(m).navigation.domContentLoaded>1500?"text-orange-500":"text-green-600"},{default:d(()=>[i(ie,{ms:e(m).navigation.domContentLoaded},null,8,["ms"])]),_:1},8,["value-class"]),i(ue,{label:"Load Complete",hint:"Page fully loaded","value-class":e(m).navigation.loadComplete>5e3?"text-red-600":e(m).navigation.loadComplete>3e3?"text-orange-500":"text-green-600"},{default:d(()=>[i(ie,{ms:e(m).navigation.loadComplete},null,8,["ms"])]),_:1},8,["value-class"])]),_:1})):l("",!0),e(m).paint&&(e(m).paint.firstPaint||e(m).paint.firstContentfulPaint)?(t(),k(Ee,{key:1,"min-tile-width":"10rem",class:"pt-2 border-t"},{default:d(()=>[e(m).paint.firstPaint!==void 0?(t(),k(ue,{key:0,label:"First Paint (FP)"},{default:d(()=>[i(ie,{ms:e(m).paint.firstPaint},null,8,["ms"])]),_:1})):l("",!0),e(m).paint.firstContentfulPaint!==void 0?(t(),k(ue,{key:1,label:"First Contentful Paint (FCP)","value-class":e(m).paint.firstContentfulPaint>3e3?"text-red-600":e(m).paint.firstContentfulPaint>1800?"text-orange-500":"text-green-600"},{default:d(()=>[i(ie,{ms:e(m).paint.firstContentfulPaint},null,8,["ms"])]),_:1},8,["value-class"])):l("",!0)]),_:1})):l("",!0),e(m).vitals?(t(),k(Ee,{key:2,"min-tile-width":"10rem",class:"pt-2 border-t"},{default:d(()=>[i(ue,{label:"Largest Contentful Paint (LCP)","value-class":e(m).vitals.lcp==null?"text-gray-400":e(m).vitals.lcp>4e3?"text-red-600":e(m).vitals.lcp>2500?"text-orange-500":"text-green-600"},{default:d(()=>[i(ie,{ms:e(m).vitals.lcp,fallback:"n/a"},null,8,["ms"])]),_:1},8,["value-class"]),i(ue,{label:"Cumulative Layout Shift (CLS)",value:e(m).vitals.cls!=null?String(e(m).vitals.cls):"n/a","value-class":e(m).vitals.cls==null?"text-gray-400":e(m).vitals.cls>.25?"text-red-600":e(m).vitals.cls>.1?"text-orange-500":"text-green-600"},null,8,["value","value-class"]),i(ue,{label:"Interaction to Next Paint (INP)","value-class":e(m).vitals.inp==null?"text-gray-400":e(m).vitals.inp>500?"text-red-600":e(m).vitals.inp>200?"text-orange-500":"text-green-600"},{default:d(()=>[i(ie,{ms:e(m).vitals.inp,fallback:"n/a"},null,8,["ms"])]),_:1},8,["value-class"])]),_:1})):l("",!0),e(m).navigation?.url?(t(),o("div",ti,[T[8]||(T[8]=p(" Page: ",-1)),n("code",si,c(e(m).navigation.url),1)])):l("",!0)])]),_:1})):l("",!0),e(F).length===0&&!e(m)?(t(),k(Ve,{key:2,icon:"i-lucide-gauge",text:"No performance hints or Web Vitals were captured for this execution."},{default:d(()=>[n("p",ni,[T[10]||(T[10]=p(" Web Vitals and timing come from the ",-1)),i(Kt,{to:"capture-fixtures"},{default:d(()=>[...T[9]||(T[9]=[p("capture fixtures",-1)])]),_:1}),T[11]||(T[11]=p(". ",-1))])]),_:1})):l("",!0)])]),"tab-history":d(()=>[n("div",ai,[e(r)&&e(r).length>0?(t(),o("div",oi,[n("div",ri,[e(a)?.testCaseId?(t(),k(be,{key:0,to:`/test-cases/${e(a).testCaseId}`,size:"xs",variant:"outline",color:"neutral","trailing-icon":"i-lucide-arrow-right"},{default:d(()=>[...T[12]||(T[12]=[p(" View full test history ",-1)])]),_:1},8,["to"])):l("",!0)]),i(Wt,{data:e(r),height:200},null,8,["data"]),i(mt,{"min-width":"44rem",bleed:!1},{default:d(()=>[i(dt,{data:e(r),columns:N,ui:{base:"table-fixed border-separate border-spacing-0 min-w-[44rem]",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"startTime-cell":d(({row:L})=>[n("span",ii,[n("span",li,c(new Date(L.original.startTime).toLocaleDateString("en-US",{month:"short",day:"numeric"})),1),n("span",ci,c(new Date(L.original.startTime).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})),1)])]),"status-cell":d(({row:L})=>[i(De,{color:("getStatusColor"in f?f.getStatusColor:e(Gs))(L.original.status),variant:"subtle",class:"capitalize"},{default:d(()=>[p(c(L.original.status),1)]),_:2},1032,["color"])]),"duration-cell":d(({row:L})=>[L.original.duration!==null?(t(),k(ie,{key:0,ms:L.original.duration},null,8,["ms"])):(t(),o("span",ui,"—"))]),"runId-cell":d(({row:L})=>[i(le,{to:`/test-runs/${L.original.runId}`,class:"text-primary hover:underline"},{default:d(()=>[p(" #"+c(L.original.runId),1)]),_:2},1032,["to"])]),"error-cell":d(({row:L})=>[L.original.error?(t(),o("span",{key:0,class:"text-red-600 text-xs truncate max-w-xs block",title:L.original.error},c(L.original.error.length>80?`${L.original.error.substring(0,80)}…`:L.original.error),9,di)):l("",!0)]),_:1},8,["data"])]),_:1})])):(t(),k(Ve,{key:1,icon:"i-lucide-trending-up",text:"No prior executions of this test yet."},{default:d(()=>[...T[13]||(T[13]=[n("p",{class:"text-xs text-gray-400"}," This is the first recorded run. Once it runs again, its status and duration trend appear here. ",-1)])]),_:1}))])]),_:1},8,["modelValue","tab-items"])]),_:1})}}});export{ul as default};
@@ -1 +0,0 @@
1
- import{d as ee,w as te,b as oe,N as ae,c as w,i as n,k as t,f as u,g as s,j as a,F as le,R as se,o as d,_ as ne,v as m,t as j,Q as re,p as ie,I as ce,O as S,ak as q,m as M,h as N,r as v,L as B,A as de}from"./Du2W7Jne.js";import{_ as ue}from"./oAClCn_h.js";import{_ as me}from"./Cus22Ud3.js";import{_ as pe}from"./C0_yH0N7.js";import{_ as ge}from"./AbmKWFQQ.js";import{o as fe,s as P,_ as xe}from"./CEfS4-oS.js";import{_ as _e}from"./BUkim3TM.js";import{p as ve}from"./DuwtTfO8.js";import{u as be}from"./B8zkOmwo.js";import"./B99fbi73.js";import"./Bm62iDV5.js";import"./BjaRappk.js";import"./DSqHUrvO.js";import"./-f7BAm1H.js";import"./L3kAWB2a.js";const ye={class:"space-y-6"},Te={class:"flex items-center gap-2"},ke={class:"text-sm font-mono text-muted"},Ce={class:"text-sm text-muted"},he={class:"flex gap-1 justify-end"},$e={class:"text-center py-12"},Ae={class:"flex justify-center mb-4"},Ue={class:"flex items-center gap-3"},Ve={key:0,class:"mt-2"},we={class:"flex items-center gap-3"},De={key:0,class:"mt-2"},b="#6366f1",Ge=ee({__name:"tags",async setup(Fe){let y,D;const{data:z,refresh:A}=([y,D]=te(()=>be("/api/tags","$WIWNTsOq96")),y=await y,D(),y),p=oe(),{authState:I}=ae(),K=de(),U=N(()=>z.value?.tags||[]),T=N(()=>K.public.authEnabled?I.value.user?.role==="administrator":!0),L=[{accessorKey:"text",header:"Tag"},{accessorKey:"color",header:"Color"},{accessorKey:"createdAt",header:"Created"},{accessorKey:"actions",header:""}],g=v(!1),F=fe({text:P().min(1,"Tag text is required").max(50,"Tag text must be at most 50 characters"),color:P().min(1,"Color is required")}),r=B({text:"",color:b}),x=v(!1),k=v(null),i=B({text:"",color:b});function R(l){k.value=l,i.text=l.text,i.color=l.color,x.value=!0}async function W(){try{await $fetch("/api/tags",{method:"POST",body:r}),p.add({title:"Tag created",description:`Tag "${r.text}" has been created successfully`,color:"success"}),g.value=!1,r.text="",r.color=b,await A()}catch(l){const e=l&&typeof l=="object"&&"data"in l?l.data?.message:void 0;p.add({title:"Failed to create tag",description:e||"An error occurred",color:"error"})}}async function G(){if(k.value)try{await $fetch(`/api/tags/${k.value.id}`,{method:"PUT",body:{text:i.text,color:i.color}}),p.add({title:"Tag updated",description:"Tag has been updated successfully",color:"success"}),x.value=!1,k.value=null,await A()}catch(l){const e=l&&typeof l=="object"&&"data"in l?l.data?.message:void 0;p.add({title:"Failed to update tag",description:e||"An error occurred",color:"error"})}}const _=v(!1),f=v(null);function Q(l){f.value=l,_.value=!0}async function H(){const l=f.value;if(l){_.value=!1,f.value=null;try{await $fetch(`/api/tags/${l.id}`,{method:"DELETE"}),p.add({title:"Tag deleted",description:`Tag "${l.text}" has been deleted`,color:"success"}),await A()}catch(e){const c=e&&typeof e=="object"&&"data"in e?e.data?.message:void 0;p.add({title:"Failed to delete tag",description:c||"An error occurred",color:"error"})}}}return(l,e)=>{const c=ne,C=ue,J=me,E=pe,X=ie,h=ce,$=ge,O=xe,V=_e,Y=se;return d(),w(le,null,[n("div",ye,[t(U).length>0?(d(),u(E,{key:0,title:"Tags",count:t(U).length,help:"settings.tags"},{actions:s(()=>[t(T)?(d(),u(c,{key:0,label:"Add tag",icon:"i-lucide-tag",size:"sm",onClick:e[0]||(e[0]=o=>g.value=!0)})):m("",!0)]),default:s(()=>[a(J,{data:t(U),columns:L},{"text-cell":s(({row:o})=>[a(C,{text:o.original.text,color:o.original.color},null,8,["text","color"])]),"color-cell":s(({row:o})=>[n("div",Te,[n("span",{class:"inline-block w-4 h-4 rounded-full border border-black/10",style:re({backgroundColor:o.original.color})},null,4),n("span",ke,j(o.original.color),1)])]),"createdAt-cell":s(({row:o})=>[n("span",Ce,j(("prettyDateFormat"in l?l.prettyDateFormat:t(ve))(o.original.createdAt,{dateOnly:!0})),1)]),"actions-cell":s(({row:o})=>[n("div",he,[t(T)?(d(),u(c,{key:0,icon:"i-lucide-pencil",color:"neutral",variant:"ghost",size:"sm",onClick:Z=>R(o.original)},null,8,["onClick"])):m("",!0),t(T)?(d(),u(c,{key:1,icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"sm",onClick:Z=>Q(o.original)},null,8,["onClick"])):m("",!0)])]),_:1},8,["data"])]),_:1},8,["count"])):(d(),u(E,{key:1,title:"Tags",count:0,help:"settings.tags"},{default:s(()=>[n("div",$e,[n("div",Ae,[a(X,{name:"i-lucide-tags",class:"text-4xl text-muted"})]),e[14]||(e[14]=n("h3",{class:"text-lg font-semibold mb-2"},"No tags yet",-1)),e[15]||(e[15]=n("p",{class:"text-muted mb-4"},"Create tags to categorize and filter your projects",-1)),t(T)?(d(),u(c,{key:0,label:"Add tag",icon:"i-lucide-tag",onClick:e[1]||(e[1]=o=>g.value=!0)})):m("",!0)])]),_:1}))]),a(Y,null,{default:s(()=>[a(V,{open:t(g),title:"Add new tag","onUpdate:open":e[6]||(e[6]=o=>g.value=o)},{body:s(()=>[a(O,{schema:t(F),state:t(r)},{default:s(()=>[a($,{label:"Tag text",name:"text",required:"",class:"mb-4"},{default:s(()=>[a(h,{modelValue:t(r).text,"onUpdate:modelValue":e[2]||(e[2]=o=>t(r).text=o),placeholder:"Enter tag name"},null,8,["modelValue"])]),_:1}),a($,{label:"Color",name:"color",required:"",class:"mb-4"},{default:s(()=>[n("div",Ue,[S(n("input",{"onUpdate:modelValue":e[3]||(e[3]=o=>t(r).color=o),type:"color",class:"w-10 h-10 rounded cursor-pointer border border-default","aria-label":"Pick tag color"},null,512),[[q,t(r).color]]),a(h,{modelValue:t(r).color,"onUpdate:modelValue":e[4]||(e[4]=o=>t(r).color=o),class:"flex-1 font-mono",placeholder:"#6366f1"},null,8,["modelValue"])])]),_:1}),t(r).text?(d(),w("div",Ve,[e[16]||(e[16]=n("span",{class:"text-sm text-muted mr-2"},"Preview:",-1)),a(C,{text:t(r).text,color:t(r).color||b},null,8,["text","color"])])):m("",!0)]),_:1},8,["schema","state"])]),footer:s(()=>[a(c,{type:"button",color:"neutral",variant:"ghost",label:"Cancel",onClick:e[5]||(e[5]=o=>g.value=!1)}),a(c,{type:"submit",label:"Create tag",icon:"i-lucide-tag",onClick:W})]),_:1},8,["open"]),a(V,{open:t(x),title:"Edit tag","onUpdate:open":e[11]||(e[11]=o=>x.value=o)},{body:s(()=>[a(O,{schema:t(F),state:t(i)},{default:s(()=>[a($,{label:"Tag text",name:"text",required:"",class:"mb-4"},{default:s(()=>[a(h,{modelValue:t(i).text,"onUpdate:modelValue":e[7]||(e[7]=o=>t(i).text=o),placeholder:"Enter tag name"},null,8,["modelValue"])]),_:1}),a($,{label:"Color",name:"color",required:"",class:"mb-4"},{default:s(()=>[n("div",we,[S(n("input",{"onUpdate:modelValue":e[8]||(e[8]=o=>t(i).color=o),type:"color",class:"w-10 h-10 rounded cursor-pointer border border-default","aria-label":"Pick tag color"},null,512),[[q,t(i).color]]),a(h,{modelValue:t(i).color,"onUpdate:modelValue":e[9]||(e[9]=o=>t(i).color=o),class:"flex-1 font-mono",placeholder:"#6366f1"},null,8,["modelValue"])])]),_:1}),t(i).text?(d(),w("div",De,[e[17]||(e[17]=n("span",{class:"text-sm text-muted mr-2"},"Preview:",-1)),a(C,{text:t(i).text,color:t(i).color||b},null,8,["text","color"])])):m("",!0)]),_:1},8,["schema","state"])]),footer:s(()=>[a(c,{type:"button",color:"neutral",variant:"ghost",label:"Cancel",onClick:e[10]||(e[10]=o=>x.value=!1)}),a(c,{type:"submit",label:"Save changes",icon:"i-lucide-check",onClick:G})]),_:1},8,["open"]),a(V,{open:t(_),title:"Delete tag","onUpdate:open":e[13]||(e[13]=o=>_.value=o)},{body:s(()=>[n("p",null,[e[18]||(e[18]=M(" Are you sure you want to delete tag ",-1)),t(f)?(d(),u(C,{key:0,text:t(f).text,color:t(f).color,class:"inline-flex"},null,8,["text","color"])):m("",!0),e[19]||(e[19]=M("? It will be removed from all projects. ",-1))])]),footer:s(()=>[a(c,{color:"neutral",variant:"ghost",label:"Cancel",onClick:e[12]||(e[12]=o=>_.value=!1)}),a(c,{color:"error",label:"Delete",icon:"i-lucide-trash-2",onClick:H})]),_:1},8,["open"])]),_:1})],64)}}});export{Ge as default};