@piwitests/server 0.22.1 → 0.24.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 (528) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{By5qkOq8.js → -COcylA_.js} +1 -1
  3. package/.output/public/_nuxt/03FA4-rI.js +1 -0
  4. package/.output/public/_nuxt/{2VtBYkNh.js → 5a7jHE9s.js} +1 -1
  5. package/.output/public/_nuxt/6Z_ZwH8I.js +1 -0
  6. package/.output/public/_nuxt/7ZHq6PCI.js +1 -0
  7. package/.output/public/_nuxt/{cSeAgciy.js → 98sAB6Gu.js} +1 -1
  8. package/.output/public/_nuxt/{CoPntblj.js → B--J7VNt.js} +1 -1
  9. package/.output/public/_nuxt/{Dj-TetcW.js → B1LUinhp.js} +1 -1
  10. package/.output/public/_nuxt/{CCP6Tyle.js → B33YjaHr.js} +1 -1
  11. package/.output/public/_nuxt/B69RP95P.js +1 -0
  12. package/.output/public/_nuxt/{x8YSyy4c.js → B8H4XydJ.js} +1 -1
  13. package/.output/public/_nuxt/{DpalT0nH.js → B8Xm4_S_.js} +1 -1
  14. package/.output/public/_nuxt/{9N6hSApy.js → BBhrClA9.js} +1 -1
  15. package/.output/public/_nuxt/{BhH0TNTi.js → BCGljaM0.js} +1 -1
  16. package/.output/public/_nuxt/{BVN50jIb.js → BFxvHlO9.js} +1 -1
  17. package/.output/public/_nuxt/{DsX5CCb5.js → BKrWWV14.js} +1 -1
  18. package/.output/public/_nuxt/BN1zZw5b.js +9 -0
  19. package/.output/public/_nuxt/{iubpj2qv.js → BPXqL9vK.js} +1 -1
  20. package/.output/public/_nuxt/{CAZpjzvB.js → BUnwEAjq.js} +1 -1
  21. package/.output/public/_nuxt/{D6Mo5HeX.js → BVLqydCr.js} +1 -1
  22. package/.output/public/_nuxt/{9P8iHISX.js → BWMSVSNM.js} +1 -1
  23. package/.output/public/_nuxt/B_r0xHVS.js +1 -0
  24. package/.output/public/_nuxt/{DtSn2Q9-.js → BakMHV79.js} +1 -1
  25. package/.output/public/_nuxt/{_VzR8bwc.js → Bd8B-yeR.js} +1 -1
  26. package/.output/public/_nuxt/{BUMoU50-.js → BevElZaK.js} +1 -1
  27. package/.output/public/_nuxt/BfA6lfg4.js +1 -0
  28. package/.output/public/_nuxt/{DGyGmFem.js → Bg93Rnts.js} +1 -1
  29. package/.output/public/_nuxt/BgABj4Ty.js +4 -0
  30. package/.output/public/_nuxt/{CkKCKAYp.js → BkM2KXUo.js} +2 -2
  31. package/.output/public/_nuxt/{DQnsFoJn.js → BkxRbXIj.js} +1 -1
  32. package/.output/public/_nuxt/{CNcu4khZ.js → Bme1UkOl.js} +1 -1
  33. package/.output/public/_nuxt/{CobveFaj.js → BmzxRbcg.js} +1 -1
  34. package/.output/public/_nuxt/Bn0jaRxI.js +1 -0
  35. package/.output/public/_nuxt/{SBmMTKQb.js → BoNKdx5o.js} +1 -1
  36. package/.output/public/_nuxt/{BQzG26t0.js → Bp3FRuEm.js} +1 -1
  37. package/.output/public/_nuxt/{DOLeth7M.js → BrUBOQ0y.js} +1 -1
  38. package/.output/public/_nuxt/{nANaAHCd.js → BtSGUY-7.js} +1 -1
  39. package/.output/public/_nuxt/{BfS8BZTO.js → BtbpLWDs.js} +1 -1
  40. package/.output/public/_nuxt/{Cwwe5bRS.js → BvAfKk6C.js} +1 -1
  41. package/.output/public/_nuxt/{BqCiYSVY.js → BwEN1fJ1.js} +1 -1
  42. package/.output/public/_nuxt/{B0hK-xDF.js → C-XjxjG5.js} +1 -1
  43. package/.output/public/_nuxt/{kfFeu9tK.js → C3W_wyr9.js} +1 -1
  44. package/.output/public/_nuxt/{h49q_GXF.js → C5TrTuWv.js} +42 -42
  45. package/.output/public/_nuxt/{B2a-Phk3.js → C7D5Wl7T.js} +1 -1
  46. package/.output/public/_nuxt/{B09ddw9C.js → C7fq_rHE.js} +1 -1
  47. package/.output/public/_nuxt/{CWoSSKhQ.js → C8Paf_V1.js} +1 -1
  48. package/.output/public/_nuxt/{BQOWm9mQ.js → CD8ZzAFC.js} +1 -1
  49. package/.output/public/_nuxt/{DwyFnMoY.js → CDTeSrLO.js} +1 -1
  50. package/.output/public/_nuxt/{Cf52zHyB.js → CGHV0Y2d.js} +1 -1
  51. package/.output/public/_nuxt/{BtaTvcz6.js → CIpF9l75.js} +1 -1
  52. package/.output/public/_nuxt/{CkyMZI-0.js → CJ1rmnk4.js} +1 -1
  53. package/.output/public/_nuxt/{DOBSrxzY.js → CMuzkARi.js} +1 -1
  54. package/.output/public/_nuxt/{3xlGO1qT.js → COuZu9FO.js} +1 -1
  55. package/.output/public/_nuxt/{BZnfiR67.js → CX5Q0dZ8.js} +1 -1
  56. package/.output/public/_nuxt/{DBhdObsO.js → CX_G-FHC.js} +14 -14
  57. package/.output/public/_nuxt/{DDN2tt0a.js → Ce5_Tq63.js} +1 -1
  58. package/.output/public/_nuxt/{BlRWlfdD.js → Cf4MFOuf.js} +1 -1
  59. package/.output/public/_nuxt/{BYB8NVJZ.js → CgkXEZMo.js} +1 -1
  60. package/.output/public/_nuxt/{BFcdtAzg.js → CjBktNrC.js} +1 -1
  61. package/.output/public/_nuxt/{DXXnDejN.js → CjtjQV60.js} +1 -1
  62. package/.output/public/_nuxt/{x8w_1_rn.js → CpcrljrH.js} +1 -1
  63. package/.output/public/_nuxt/{C0v6l4pr.js → Cq33x7yV.js} +1 -1
  64. package/.output/public/_nuxt/{BDQCwxpX.js → CsV7pmcT.js} +1 -1
  65. package/.output/public/_nuxt/{C9p0YCAi.js → Cu2Q4iPh.js} +1 -1
  66. package/.output/public/_nuxt/CyLcEDg2.js +2 -0
  67. package/.output/public/_nuxt/{PdEEuEsg.js → D0Kop4bS.js} +1 -1
  68. package/.output/public/_nuxt/D1Y43xM1.js +2 -0
  69. package/.output/public/_nuxt/{DK7xciFW.js → D1vqYZsL.js} +1 -1
  70. package/.output/public/_nuxt/{BmJUhCIO.js → D2rZosKf.js} +1 -1
  71. package/.output/public/_nuxt/D7jpwkRG.js +5 -0
  72. package/.output/public/_nuxt/{CZ9ThISn.js → D8NAb7VE.js} +1 -1
  73. package/.output/public/_nuxt/{6-ivqM_I.js → D8vguZKg.js} +1 -1
  74. package/.output/public/_nuxt/{Hot1UcKY.js → DEvYVl9M.js} +1 -1
  75. package/.output/public/_nuxt/{CMhK1PvI.js → DF6Mes5z.js} +1 -1
  76. package/.output/public/_nuxt/{Sgis3xif.js → DGq4A2Pd.js} +1 -1
  77. package/.output/public/_nuxt/{BKJetfRH.js → DH5H1DJh.js} +1 -1
  78. package/.output/public/_nuxt/{Gik813Ek.js → DL8knjzi.js} +1 -1
  79. package/.output/public/_nuxt/{b_yFgp5S.js → DM3bDZC6.js} +1 -1
  80. package/.output/public/_nuxt/{DLNNAYfu.js → DMAiMrNr.js} +1 -1
  81. package/.output/public/_nuxt/{DLn-VPtK.js → DMWfVJCj.js} +1 -1
  82. package/.output/public/_nuxt/{BNAHBHbY.js → DMsm-RGQ.js} +1 -1
  83. package/.output/public/_nuxt/{CD3R-ggS.js → DMtrFQqi.js} +1 -1
  84. package/.output/public/_nuxt/{B9kt7ySS.js → DPZBpFOX.js} +1 -1
  85. package/.output/public/_nuxt/DVEGfqtt.js +2 -0
  86. package/.output/public/_nuxt/{D4UlSVir.js → D_y2VS8k.js} +1 -1
  87. package/.output/public/_nuxt/DaNC-xl1.js +1 -0
  88. package/.output/public/_nuxt/{DzM9oeLa.js → DbmGeOus.js} +1 -1
  89. package/.output/public/_nuxt/{DHUT-BKj.js → DcLbz6DV.js} +1 -1
  90. package/.output/public/_nuxt/{CWw9WGlv.js → DcR0Mmdl.js} +1 -1
  91. package/.output/public/_nuxt/{CDh_Qt7h.js → DhYznn-U.js} +1 -1
  92. package/.output/public/_nuxt/DhuRRlmK.js +1 -0
  93. package/.output/public/_nuxt/{CBZD8ym8.js → Drw8yQg6.js} +1 -1
  94. package/.output/public/_nuxt/{Bt4FLbe0.js → DuO5wfAC.js} +1 -1
  95. package/.output/public/_nuxt/{CRPt9SfB.js → DuOH5jcQ.js} +1 -1
  96. package/.output/public/_nuxt/{BH-ym1CI.js → DvEsAuE9.js} +1 -1
  97. package/.output/public/_nuxt/Dz6g_QJT.js +1 -0
  98. package/.output/public/_nuxt/{4yvOL9PC.js → DzZpIs4W.js} +1 -1
  99. package/.output/public/_nuxt/DzzNS-K1.js +1 -0
  100. package/.output/public/_nuxt/{COP3KBCA.js → Fsw2W4TA.js} +1 -1
  101. package/.output/public/_nuxt/{DWEkQ7bl.js → LwoTUb-r.js} +1 -1
  102. package/.output/public/_nuxt/{BjU3HZuS.js → OfPjZaky.js} +1 -1
  103. package/.output/public/_nuxt/{czXrP7NB.js → P5uOaRUZ.js} +1 -1
  104. package/.output/public/_nuxt/{BTvE9qca.js → Qo6oszaF.js} +1 -1
  105. package/.output/public/_nuxt/{Cd8r0xk5.js → T5UuMUxA.js} +1 -1
  106. package/.output/public/_nuxt/UY8pjaZA.js +1 -0
  107. package/.output/public/_nuxt/{B6s20NbT.js → V9p3z39z.js} +1 -1
  108. package/.output/public/_nuxt/{CJEp4i0N.js → VACXezo0.js} +1 -1
  109. package/.output/public/_nuxt/{CrOA9onF.js → YmCeJkZ2.js} +1 -1
  110. package/.output/public/_nuxt/builds/latest.json +1 -1
  111. package/.output/public/_nuxt/builds/meta/70224ee0-4d1f-45d2-b380-2ecb18064bf1.json +1 -0
  112. package/.output/public/_nuxt/entry.DzPSf_u5.css +1 -0
  113. package/.output/public/_nuxt/fXUwH_3d.js +1 -0
  114. package/.output/public/_nuxt/{t-juTK3X.js → opwuUqHG.js} +1 -1
  115. package/.output/public/_nuxt/{B_mN5eMV.js → opyDpgSw.js} +1 -1
  116. package/.output/public/_nuxt/{HwFFbACq.js → sVV8xB9f.js} +1 -1
  117. package/.output/public/_nuxt/{DSvBQHzW.js → xa5UHCot.js} +1 -1
  118. package/.output/server/chunks/_/collect.mjs +1 -1
  119. package/.output/server/chunks/_/markers.mjs +1 -1
  120. package/.output/server/chunks/_/quarantine.mjs +1 -1
  121. package/.output/server/chunks/_/users.mjs +1 -1
  122. package/.output/server/chunks/build/{Alert-DAb8nKVs.mjs → Alert-He-UxEt6.mjs} +2 -2
  123. package/.output/server/chunks/build/Alert-He-UxEt6.mjs.map +1 -0
  124. package/.output/server/chunks/build/{Breadcrumb-DJp5WvUM.mjs → Breadcrumb-DEP2dVCZ.mjs} +3 -3
  125. package/.output/server/chunks/build/Breadcrumb-DEP2dVCZ.mjs.map +1 -0
  126. package/.output/server/chunks/build/{BreadcrumbNav-BrQwfL8G.mjs → BreadcrumbNav-y6nMDYcR.mjs} +3 -3
  127. package/.output/server/chunks/build/BreadcrumbNav-y6nMDYcR.mjs.map +1 -0
  128. package/.output/server/chunks/build/{BrowserBadge-Djw_e_I9.mjs → BrowserBadge-DIASU8Gf.mjs} +6 -66
  129. package/.output/server/chunks/build/BrowserBadge-DIASU8Gf.mjs.map +1 -0
  130. package/.output/server/chunks/build/{ChartCard-B2gd_8HP.mjs → ChartCard-ZTsCvItQ.mjs} +2 -2
  131. package/.output/server/chunks/build/ChartCard-ZTsCvItQ.mjs.map +1 -0
  132. package/.output/server/chunks/build/{Checkbox-C1khEdTh.mjs → Checkbox-BisdHf8n.mjs} +7 -7
  133. package/.output/server/chunks/build/Checkbox-BisdHf8n.mjs.map +1 -0
  134. package/.output/server/chunks/build/{CodeBlock-CjnDrO3Y.mjs → CodeBlock-B8BNtZAe.mjs} +3 -3
  135. package/.output/server/chunks/build/CodeBlock-B8BNtZAe.mjs.map +1 -0
  136. package/.output/server/chunks/build/{DashboardNavbar-DYtmVlhy.mjs → DashboardNavbar-D7-3zBUU.mjs} +3 -3
  137. package/.output/server/chunks/build/DashboardNavbar-D7-3zBUU.mjs.map +1 -0
  138. package/.output/server/chunks/build/{DashboardSidebarToggle-BPNxODwj.mjs → DashboardSidebarToggle-C3HdHvlE.mjs} +3 -3
  139. package/.output/server/chunks/build/DashboardSidebarToggle-C3HdHvlE.mjs.map +1 -0
  140. package/.output/server/chunks/build/{DataLocationCard-2B-sVSMr.mjs → DataLocationCard-CC2-lHiP.mjs} +3 -3
  141. package/.output/server/chunks/build/DataLocationCard-CC2-lHiP.mjs.map +1 -0
  142. package/.output/server/chunks/build/{MetaStripGroup-BBByVvpR.mjs → DesktopRunLocallyButton-iNzrDsEs.mjs} +601 -623
  143. package/.output/server/chunks/build/DesktopRunLocallyButton-iNzrDsEs.mjs.map +1 -0
  144. package/.output/server/chunks/build/{DiagnosisPanel-D6QO30FQ.mjs → DiagnosisPanel-BVb2LgHu.mjs} +6 -6
  145. package/.output/server/chunks/build/DiagnosisPanel-BVb2LgHu.mjs.map +1 -0
  146. package/.output/server/chunks/build/{DiagnosisResult-ujB5Lt2A.mjs → DiagnosisResult-xVgZlfKK.mjs} +9 -9
  147. package/.output/server/chunks/build/DiagnosisResult-xVgZlfKK.mjs.map +1 -0
  148. package/.output/server/chunks/build/{EntityLinks-F8_kC-IH.mjs → EntityLinks-Dzn73fbq.mjs} +3 -3
  149. package/.output/server/chunks/build/EntityLinks-Dzn73fbq.mjs.map +1 -0
  150. package/.output/server/chunks/build/{EnvManagedBadge-D6e-10M9.mjs → EnvManagedBadge-C-agmABK.mjs} +3 -3
  151. package/.output/server/chunks/build/EnvManagedBadge-C-agmABK.mjs.map +1 -0
  152. package/.output/server/chunks/build/{FeatureUnavailable-BMw4euTk.mjs → FeatureUnavailable-DHFkwI7t.mjs} +2 -2
  153. package/.output/server/chunks/build/FeatureUnavailable-DHFkwI7t.mjs.map +1 -0
  154. package/.output/server/chunks/build/{FormField-QptK0rPg.mjs → FormField-GYHKiSI6.mjs} +2 -2
  155. package/.output/server/chunks/build/FormField-GYHKiSI6.mjs.map +1 -0
  156. package/.output/server/chunks/build/{GetStartedWizard-DxT8T14Y.mjs → GetStartedWizard-BpcGYsm2.mjs} +3 -3
  157. package/.output/server/chunks/build/GetStartedWizard-BpcGYsm2.mjs.map +1 -0
  158. package/.output/server/chunks/build/{HelpHint-C5Ru8BCc.mjs → HelpHint-plioHKA0.mjs} +29 -2
  159. package/.output/server/chunks/build/HelpHint-plioHKA0.mjs.map +1 -0
  160. package/.output/server/chunks/build/MetaStripGroup-A0a72vt5.mjs +193 -0
  161. package/.output/server/chunks/build/MetaStripGroup-A0a72vt5.mjs.map +1 -0
  162. package/.output/server/chunks/build/{Modal-BacZmQCX.mjs → Modal-hKLvVFNp.mjs} +2 -2
  163. package/.output/server/chunks/build/Modal-hKLvVFNp.mjs.map +1 -0
  164. package/.output/server/chunks/build/{NavigationMenu-sTiKSWDm.mjs → NavigationMenu-RfBOyS32.mjs} +5 -5
  165. package/.output/server/chunks/build/NavigationMenu-RfBOyS32.mjs.map +1 -0
  166. package/.output/server/chunks/build/{OpenInIdeLink-Crc8y0Yx.mjs → OpenInIdeLink-Jp6SzEtD.mjs} +5 -5
  167. package/.output/server/chunks/build/{OpenInIdeLink-Crc8y0Yx.mjs.map → OpenInIdeLink-Jp6SzEtD.mjs.map} +1 -1
  168. package/.output/server/chunks/build/{ProjectTestCasesTable-DwjqZ2i5.mjs → ProjectTestCasesTable-DxOTfhi4.mjs} +8 -8
  169. package/.output/server/chunks/build/{ProjectTestCasesTable-DwjqZ2i5.mjs.map → ProjectTestCasesTable-DxOTfhi4.mjs.map} +1 -1
  170. package/.output/server/chunks/build/{RovingFocusItem--OEHI2P3.mjs → RovingFocusItem-BOSx1Z9Z.mjs} +2 -2
  171. package/.output/server/chunks/build/RovingFocusItem-BOSx1Z9Z.mjs.map +1 -0
  172. package/.output/server/chunks/build/RunReports-nuLb-Nm3.mjs +1 -1
  173. package/.output/server/chunks/build/{SectionCard-C753B3Yo.mjs → SectionCard-DHAFvJxm.mjs} +2 -2
  174. package/.output/server/chunks/build/SectionCard-DHAFvJxm.mjs.map +1 -0
  175. package/.output/server/chunks/build/{Select-BAyYwPuo.mjs → Select-CEyw7HGK.mjs} +4 -4
  176. package/.output/server/chunks/build/Select-CEyw7HGK.mjs.map +1 -0
  177. package/.output/server/chunks/build/{SelectMenu-zE_AhMX8.mjs → SelectMenu-C02Hs2_F.mjs} +5 -5
  178. package/.output/server/chunks/build/{SelectMenu-zE_AhMX8.mjs.map → SelectMenu-C02Hs2_F.mjs.map} +1 -1
  179. package/.output/server/chunks/build/{Separator-BbgCfKKJ.mjs → Separator-lrN70ODV.mjs} +2 -2
  180. package/.output/server/chunks/build/Separator-lrN70ODV.mjs.map +1 -0
  181. package/.output/server/chunks/build/{SettingsField-D-VriK9X.mjs → SettingsField-tRmytcEJ.mjs} +5 -5
  182. package/.output/server/chunks/build/SettingsField-tRmytcEJ.mjs.map +1 -0
  183. package/.output/server/chunks/build/{Slideover-CNbGvbUF.mjs → Slideover-D6cRIqch.mjs} +3 -3
  184. package/.output/server/chunks/build/Slideover-D6cRIqch.mjs.map +1 -0
  185. package/.output/server/chunks/build/{Switch-DdkA3Fii.mjs → Switch-R2n82ncQ.mjs} +4 -4
  186. package/.output/server/chunks/build/Switch-R2n82ncQ.mjs.map +1 -0
  187. package/.output/server/chunks/build/{Table-CfDVAuUJ.mjs → Table-qZdnm9t2.mjs} +3 -3
  188. package/.output/server/chunks/build/Table-qZdnm9t2.mjs.map +1 -0
  189. package/.output/server/chunks/build/{Tabs-BCOhHEB9.mjs → Tabs-BDP7MWl4.mjs} +3 -3
  190. package/.output/server/chunks/build/Tabs-BDP7MWl4.mjs.map +1 -0
  191. package/.output/server/chunks/build/{TestStatusBar-wquHQqtp.mjs → TestStatusBar-CvsmKJ4D.mjs} +2 -2
  192. package/.output/server/chunks/build/TestStatusBar-CvsmKJ4D.mjs.map +1 -0
  193. package/.output/server/chunks/build/{Textarea-Ohs6QTXf.mjs → Textarea-DpmpM-lN.mjs} +2 -2
  194. package/.output/server/chunks/build/Textarea-DpmpM-lN.mjs.map +1 -0
  195. package/.output/server/chunks/build/{Tooltip-BRBnl4pE.mjs → Tooltip-BI3WQErw.mjs} +3 -3
  196. package/.output/server/chunks/build/Tooltip-BI3WQErw.mjs.map +1 -0
  197. package/.output/server/chunks/build/{VisuallyHiddenInput-BHvzNumK.mjs → VisuallyHiddenInput-D4E5aJCQ.mjs} +2 -2
  198. package/.output/server/chunks/build/VisuallyHiddenInput-D4E5aJCQ.mjs.map +1 -0
  199. package/.output/server/chunks/build/{_id_-BesWjK_d.mjs → _id_-26komi8G.mjs} +47 -37
  200. package/.output/server/chunks/build/{_id_-BesWjK_d.mjs.map → _id_-26komi8G.mjs.map} +1 -1
  201. package/.output/server/chunks/build/{_id_-CQ0lolEK.mjs → _id_-T965GKYC.mjs} +58 -15
  202. package/.output/server/chunks/build/_id_-T965GKYC.mjs.map +1 -0
  203. package/.output/server/chunks/build/{_id_-CGs0u8Fr.mjs → _id_-w7YCSiiy.mjs} +70 -41
  204. package/.output/server/chunks/build/{_id_-CGs0u8Fr.mjs.map → _id_-w7YCSiiy.mjs.map} +1 -1
  205. package/.output/server/chunks/build/{_id_-D1-06Fcl.mjs → _id_-wiULjAVc.mjs} +44 -40
  206. package/.output/server/chunks/build/{_id_-D1-06Fcl.mjs.map → _id_-wiULjAVc.mjs.map} +1 -1
  207. package/.output/server/chunks/build/{about-DdyOj-dj.mjs → about-B3V_OEiu.mjs} +5 -5
  208. package/.output/server/chunks/build/about-B3V_OEiu.mjs.map +1 -0
  209. package/.output/server/chunks/build/{account-7aVMKekZ.mjs → account-DpBdYE46.mjs} +6 -6
  210. package/.output/server/chunks/build/account-DpBdYE46.mjs.map +1 -0
  211. package/.output/server/chunks/build/{ai-zw3T9b5u.mjs → ai-DYhpzbqp.mjs} +16 -16
  212. package/.output/server/chunks/build/{ai-zw3T9b5u.mjs.map → ai-DYhpzbqp.mjs.map} +1 -1
  213. package/.output/server/chunks/build/{analytics-CeCzKwEX.mjs → analytics-CZJEU0an.mjs} +17 -17
  214. package/.output/server/chunks/build/{analytics-CeCzKwEX.mjs.map → analytics-CZJEU0an.mjs.map} +1 -1
  215. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  216. package/.output/server/chunks/build/{db.client-Bdqk_eYQ.mjs → db.client-DijpEH6i.mjs} +3 -1
  217. package/.output/server/chunks/build/db.client-DijpEH6i.mjs.map +1 -0
  218. package/.output/server/chunks/build/{default-CkyAx_Mu.mjs → default-CQa_bmAf.mjs} +505 -89
  219. package/.output/server/chunks/build/default-CQa_bmAf.mjs.map +1 -0
  220. package/.output/server/chunks/build/{docs-Dhj-wEks.mjs → docs-C8bndVXg.mjs} +11 -11
  221. package/.output/server/chunks/build/{docs-Dhj-wEks.mjs.map → docs-C8bndVXg.mjs.map} +1 -1
  222. package/.output/server/chunks/build/{edit-CVz_gdoe.mjs → edit-BdfF9er2.mjs} +12 -12
  223. package/.output/server/chunks/build/edit-BdfF9er2.mjs.map +1 -0
  224. package/.output/server/chunks/build/{fetch-Be-j7hF1.mjs → fetch-tkz5_OA-.mjs} +3 -3
  225. package/.output/server/chunks/build/fetch-tkz5_OA-.mjs.map +1 -0
  226. package/.output/server/chunks/build/{forgot-password-CwdjL7BO.mjs → forgot-password-swZRcvXE.mjs} +3 -3
  227. package/.output/server/chunks/build/forgot-password-swZRcvXE.mjs.map +1 -0
  228. package/.output/server/chunks/build/{import-DyQEw4V3.mjs → import-B27Sv7h5.mjs} +11 -11
  229. package/.output/server/chunks/build/import-B27Sv7h5.mjs.map +1 -0
  230. package/.output/server/chunks/build/{index-DcnICCZU.mjs → index-BdZmxLtC.mjs} +17 -17
  231. package/.output/server/chunks/build/{index-DcnICCZU.mjs.map → index-BdZmxLtC.mjs.map} +1 -1
  232. package/.output/server/chunks/build/{index-D7Bmj6bq.mjs → index-C7m32bRI.mjs} +9 -9
  233. package/.output/server/chunks/build/index-C7m32bRI.mjs.map +1 -0
  234. package/.output/server/chunks/build/{index-DghAFpNR.mjs → index-Dq6nk6OB.mjs} +385 -104
  235. package/.output/server/chunks/build/index-Dq6nk6OB.mjs.map +1 -0
  236. package/.output/server/chunks/build/{isValueEqualOrExist-D2qw9YEr.mjs → isValueEqualOrExist-D4lZ8uRY.mjs} +3 -3
  237. package/.output/server/chunks/build/isValueEqualOrExist-D4lZ8uRY.mjs.map +1 -0
  238. package/.output/server/chunks/build/{login-rXKF63j6.mjs → login-hxCF06JT.mjs} +5 -5
  239. package/.output/server/chunks/build/login-hxCF06JT.mjs.map +1 -0
  240. package/.output/server/chunks/build/{mcp-ByNvFy4o.mjs → mcp-BVW1llyW.mjs} +12 -12
  241. package/.output/server/chunks/build/mcp-BVW1llyW.mjs.map +1 -0
  242. package/.output/server/chunks/build/{notifications-CbLAZnKJ.mjs → notifications-Dn-evqXM.mjs} +11 -11
  243. package/.output/server/chunks/build/notifications-Dn-evqXM.mjs.map +1 -0
  244. package/.output/server/chunks/build/{performance-C93MEPaZ.mjs → performance-CV8qm94u.mjs} +10 -10
  245. package/.output/server/chunks/build/performance-CV8qm94u.mjs.map +1 -0
  246. package/.output/server/chunks/build/{pr-feedback-DKCB0bDE.mjs → pr-feedback-gKDz8LyA.mjs} +9 -9
  247. package/.output/server/chunks/build/pr-feedback-gKDz8LyA.mjs.map +1 -0
  248. package/.output/server/chunks/build/{reset-password-BBoHKMqD.mjs → reset-password-DtEISa1I.mjs} +3 -3
  249. package/.output/server/chunks/build/reset-password-DtEISa1I.mjs.map +1 -0
  250. package/.output/server/chunks/build/server.mjs +87 -33
  251. package/.output/server/chunks/build/{settings-DiG0JjzC.mjs → settings-BJDnuLpc.mjs} +8 -8
  252. package/.output/server/chunks/build/settings-BJDnuLpc.mjs.map +1 -0
  253. package/.output/server/chunks/build/settings-metadata-DnAK4Rzg.mjs +1 -1
  254. package/.output/server/chunks/build/{setup-0-1O6Hjz.mjs → setup-BO9tXa_G.mjs} +14 -14
  255. package/.output/server/chunks/build/{setup-0-1O6Hjz.mjs.map → setup-BO9tXa_G.mjs.map} +1 -1
  256. package/.output/server/chunks/build/{storage-3JiFJ843.mjs → storage-zN92cA9q.mjs} +11 -11
  257. package/.output/server/chunks/build/storage-zN92cA9q.mjs.map +1 -0
  258. package/.output/server/chunks/build/{tags-CqYcp7js.mjs → tags-CJFnoyQc.mjs} +5 -5
  259. package/.output/server/chunks/build/tags-CJFnoyQc.mjs.map +1 -0
  260. package/.output/server/chunks/build/{test-cases-y1HSgPX2.mjs → test-cases-0Q6rT73d.mjs} +18 -18
  261. package/.output/server/chunks/build/test-cases-0Q6rT73d.mjs.map +1 -0
  262. package/.output/server/chunks/build/{test-functions-D2ju95Ly.mjs → test-functions-DVRJgiWo.mjs} +9 -9
  263. package/.output/server/chunks/build/test-functions-DVRJgiWo.mjs.map +1 -0
  264. package/.output/server/chunks/build/{useCopyRich-CVFeYfkG.mjs → useCopyRich-BM9GTjJi.mjs} +75 -29
  265. package/.output/server/chunks/build/{useCopyRich-CVFeYfkG.mjs.map → useCopyRich-BM9GTjJi.mjs.map} +1 -1
  266. package/.output/server/chunks/build/useDesktopLocalRuns-k7Gw3Fv3.mjs +319 -0
  267. package/.output/server/chunks/build/useDesktopLocalRuns-k7Gw3Fv3.mjs.map +1 -0
  268. package/.output/server/chunks/build/useDesktopProjectLink-WwLte59P.mjs +67 -0
  269. package/.output/server/chunks/build/useDesktopProjectLink-WwLte59P.mjs.map +1 -0
  270. package/.output/server/chunks/build/{useFormControl-CZ9So7iX.mjs → useFormControl-8skMOTIf.mjs} +2 -2
  271. package/.output/server/chunks/build/useFormControl-8skMOTIf.mjs.map +1 -0
  272. package/.output/server/chunks/build/{useOpenInIde--6Me0WlL.mjs → useOpenInIde-D74FmDNg.mjs} +2 -2
  273. package/.output/server/chunks/build/useOpenInIde-D74FmDNg.mjs.map +1 -0
  274. package/.output/server/chunks/build/{users-IdmY9JZV.mjs → users-C9bjOBde.mjs} +6 -6
  275. package/.output/server/chunks/build/users-C9bjOBde.mjs.map +1 -0
  276. package/.output/server/chunks/nitro/nitro.mjs +982 -664
  277. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  278. package/.output/server/chunks/routes/__piwi/session.get.mjs +1 -1
  279. package/.output/server/chunks/routes/api/ai/step-resolution.post.mjs +88 -0
  280. package/.output/server/chunks/routes/api/ai/step-resolution.post.mjs.map +1 -0
  281. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +1 -1
  282. package/.output/server/chunks/routes/api/auth/change-password.post.mjs +1 -1
  283. package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs +1 -1
  284. package/.output/server/chunks/routes/api/auth/login.post.mjs +1 -1
  285. package/.output/server/chunks/routes/api/auth/logout.post.mjs +1 -1
  286. package/.output/server/chunks/routes/api/auth/me.get.mjs +1 -1
  287. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +1 -1
  288. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +1 -1
  289. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +1 -1
  290. package/.output/server/chunks/routes/api/auth/reset-password.post.mjs +1 -1
  291. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +1 -1
  292. package/.output/server/chunks/routes/api/auth/setup.get.mjs +1 -1
  293. package/.output/server/chunks/routes/api/auth/setup.post.mjs +1 -1
  294. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +1 -1
  295. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +1 -1
  296. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +1 -1
  297. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +1 -1
  298. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +1 -1
  299. package/.output/server/chunks/routes/api/desktop/import-local.post.mjs +1 -1
  300. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +1 -1
  301. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +1 -1
  302. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +1 -1
  303. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +1 -1
  304. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +1 -1
  305. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +1 -1
  306. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +1 -1
  307. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +1 -1
  308. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +1 -1
  309. package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs +1 -1
  310. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +1 -1
  311. package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs +1 -1
  312. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +1 -1
  313. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +1 -1
  314. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +1 -1
  315. package/.output/server/chunks/routes/api/files/_...path_.get.mjs +1 -1
  316. package/.output/server/chunks/routes/api/health.get.mjs +1 -1
  317. package/.output/server/chunks/routes/api/index.get.mjs +1 -1
  318. package/.output/server/chunks/routes/api/index.get2.mjs +1 -1
  319. package/.output/server/chunks/routes/api/index.get3.mjs +1 -1
  320. package/.output/server/chunks/routes/api/index.get4.mjs +1 -1
  321. package/.output/server/chunks/routes/api/index.get5.mjs +1 -1
  322. package/.output/server/chunks/routes/api/index.post.mjs +1 -1
  323. package/.output/server/chunks/routes/api/index.post2.mjs +1 -1
  324. package/.output/server/chunks/routes/api/index.post3.mjs +1 -1
  325. package/.output/server/chunks/routes/api/index.post4.mjs +1 -1
  326. package/.output/server/chunks/routes/api/index.post5.mjs +1 -1
  327. package/.output/server/chunks/routes/api/index.post6.mjs +1 -1
  328. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +1 -1
  329. package/.output/server/chunks/routes/api/links/_id_.delete.mjs +1 -1
  330. package/.output/server/chunks/routes/api/links/_id_.patch.mjs +1 -1
  331. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +1 -1
  332. package/.output/server/chunks/routes/api/markers/_id_.put.mjs +1 -1
  333. package/.output/server/chunks/routes/api/notifications/stream.get.mjs +1 -1
  334. package/.output/server/chunks/routes/api/projects/_id/ai-steps.get.mjs +63 -0
  335. package/.output/server/chunks/routes/api/projects/_id/ai-steps.get.mjs.map +1 -0
  336. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +1 -1
  337. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +1 -1
  338. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +1 -1
  339. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +1 -1
  340. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +1 -1
  341. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +1 -1
  342. package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs +1 -1
  343. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +1 -1
  344. package/.output/server/chunks/routes/api/projects/_id/members.put.mjs +1 -1
  345. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +1 -1
  346. package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs +1 -1
  347. package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs +1 -1
  348. package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs +1 -1
  349. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +1 -1
  350. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +1 -1
  351. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +1 -1
  352. package/.output/server/chunks/routes/api/projects/_id/test-functions/extract.post.mjs +1 -1
  353. package/.output/server/chunks/routes/api/projects/_id/test-functions/validate-proposal.post.mjs +1 -1
  354. package/.output/server/chunks/routes/api/projects/_id/test-functions.get.mjs +1 -1
  355. package/.output/server/chunks/routes/api/projects/_id/test-functions.post.mjs +1 -1
  356. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +1 -1
  357. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +1 -1
  358. package/.output/server/chunks/routes/api/projects/_id_.get.mjs +1 -1
  359. package/.output/server/chunks/routes/api/projects/_id_.put.mjs +1 -1
  360. package/.output/server/chunks/routes/api/projects/menu.get.mjs +1 -1
  361. package/.output/server/chunks/routes/api/projects/overview.get.mjs +1 -1
  362. package/.output/server/chunks/routes/api/projects.get.mjs +1 -1
  363. package/.output/server/chunks/routes/api/search.get.mjs +1 -1
  364. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +1 -1
  365. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +1 -1
  366. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +1 -1
  367. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +1 -1
  368. package/.output/server/chunks/routes/api/settings/ai.get.mjs +1 -1
  369. package/.output/server/chunks/routes/api/settings/ai.put.mjs +1 -1
  370. package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs +1 -1
  371. package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs +1 -1
  372. package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs +1 -1
  373. package/.output/server/chunks/routes/api/settings/smtp.get.mjs +1 -1
  374. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +1 -1
  375. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +1 -1
  376. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +1 -1
  377. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +1 -1
  378. package/.output/server/chunks/routes/api/setup-status.get.mjs +1 -1
  379. package/.output/server/chunks/routes/api/stream.get.mjs +1 -1
  380. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +1 -1
  381. package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +1 -1
  382. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +1 -1
  383. package/.output/server/chunks/routes/api/tags/_id_.put.mjs +1 -1
  384. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +1 -1
  385. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +1 -1
  386. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +1 -1
  387. package/.output/server/chunks/routes/api/test-functions/_id_.delete.mjs +1 -1
  388. package/.output/server/chunks/routes/api/test-functions/_id_.put.mjs +1 -1
  389. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +1 -1
  390. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +1 -1
  391. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +1 -1
  392. package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs +1 -1
  393. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +1 -1
  394. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +1 -1
  395. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +1 -1
  396. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +1 -1
  397. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +1 -1
  398. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs +1 -1
  399. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +1 -1
  400. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +1 -1
  401. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +1 -1
  402. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +1 -1
  403. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +1 -1
  404. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +1 -1
  405. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +1 -1
  406. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +1 -1
  407. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +1 -1
  408. package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs +1 -1
  409. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +1 -1
  410. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +1 -1
  411. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +1 -1
  412. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +1 -1
  413. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +1 -1
  414. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +1 -1
  415. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +1 -1
  416. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +1 -1
  417. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +1 -1
  418. package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs +1 -1
  419. package/.output/server/chunks/routes/api/test-runs/import.post.mjs +1 -1
  420. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +1 -1
  421. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +1 -1
  422. package/.output/server/chunks/routes/api/test-runs/start.post.mjs +1 -1
  423. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +3 -1
  424. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
  425. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +2 -1
  426. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
  427. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +2 -1
  428. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
  429. package/.output/server/chunks/routes/api/traces/check.post.mjs +1 -1
  430. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +1 -1
  431. package/.output/server/chunks/routes/api/users/_id/index.get.mjs +1 -1
  432. package/.output/server/chunks/routes/api/users/_id/index.post.mjs +1 -1
  433. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +1 -1
  434. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +1 -1
  435. package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +1 -1
  436. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -1
  437. package/.output/server/chunks/routes/api/users/_id_.patch.mjs +1 -1
  438. package/.output/server/chunks/routes/api/version.get.mjs +1 -1
  439. package/.output/server/chunks/routes/mcp.post.mjs +1 -1
  440. package/.output/server/chunks/routes/renderer.mjs +1 -1
  441. package/.output/server/database/migrations/0045_productive_stingray.sql +1 -0
  442. package/.output/server/database/migrations/meta/0045_snapshot.json +3779 -0
  443. package/.output/server/database/migrations/meta/_journal.json +7 -0
  444. package/.output/server/database/migrations-pg/0046_gorgeous_hercules.sql +1 -0
  445. package/.output/server/database/migrations-pg/meta/0046_snapshot.json +4486 -0
  446. package/.output/server/database/migrations-pg/meta/_journal.json +7 -0
  447. package/.output/server/index.mjs +1 -1
  448. package/.output/server/package.json +1 -1
  449. package/package.json +1 -1
  450. package/.output/public/_nuxt/B-6GGrhr.js +0 -1
  451. package/.output/public/_nuxt/B9FSuKdA.js +0 -1
  452. package/.output/public/_nuxt/BaDhDBCV.js +0 -1
  453. package/.output/public/_nuxt/Bb7Uckln.js +0 -5
  454. package/.output/public/_nuxt/Be4c943G.js +0 -2
  455. package/.output/public/_nuxt/BpUXqOVj.js +0 -2
  456. package/.output/public/_nuxt/BtSJxOdh.js +0 -1
  457. package/.output/public/_nuxt/CI_q0F1O.js +0 -9
  458. package/.output/public/_nuxt/CScusXhF.js +0 -1
  459. package/.output/public/_nuxt/Cot8fIp5.js +0 -2
  460. package/.output/public/_nuxt/D0ROfwV0.js +0 -1
  461. package/.output/public/_nuxt/D4oheDIm.js +0 -4
  462. package/.output/public/_nuxt/DS2ANCQh.js +0 -1
  463. package/.output/public/_nuxt/DslnXfcH.js +0 -1
  464. package/.output/public/_nuxt/builds/meta/28bca36d-5571-4157-b1b8-7f62c934eed6.json +0 -1
  465. package/.output/public/_nuxt/entry.BAvBQY-h.css +0 -1
  466. package/.output/public/_nuxt/hzsG6cAc.js +0 -1
  467. package/.output/public/_nuxt/jjOqY9Tv.js +0 -1
  468. package/.output/public/_nuxt/xbO0VmDX.js +0 -1
  469. package/.output/server/chunks/build/Alert-DAb8nKVs.mjs.map +0 -1
  470. package/.output/server/chunks/build/Breadcrumb-DJp5WvUM.mjs.map +0 -1
  471. package/.output/server/chunks/build/BreadcrumbNav-BrQwfL8G.mjs.map +0 -1
  472. package/.output/server/chunks/build/BrowserBadge-Djw_e_I9.mjs.map +0 -1
  473. package/.output/server/chunks/build/ChartCard-B2gd_8HP.mjs.map +0 -1
  474. package/.output/server/chunks/build/Checkbox-C1khEdTh.mjs.map +0 -1
  475. package/.output/server/chunks/build/CodeBlock-CjnDrO3Y.mjs.map +0 -1
  476. package/.output/server/chunks/build/DashboardNavbar-DYtmVlhy.mjs.map +0 -1
  477. package/.output/server/chunks/build/DashboardSidebarToggle-BPNxODwj.mjs.map +0 -1
  478. package/.output/server/chunks/build/DataLocationCard-2B-sVSMr.mjs.map +0 -1
  479. package/.output/server/chunks/build/DiagnosisPanel-D6QO30FQ.mjs.map +0 -1
  480. package/.output/server/chunks/build/DiagnosisResult-ujB5Lt2A.mjs.map +0 -1
  481. package/.output/server/chunks/build/EntityLinks-F8_kC-IH.mjs.map +0 -1
  482. package/.output/server/chunks/build/EnvManagedBadge-D6e-10M9.mjs.map +0 -1
  483. package/.output/server/chunks/build/FeatureUnavailable-BMw4euTk.mjs.map +0 -1
  484. package/.output/server/chunks/build/FormField-QptK0rPg.mjs.map +0 -1
  485. package/.output/server/chunks/build/GetStartedWizard-DxT8T14Y.mjs.map +0 -1
  486. package/.output/server/chunks/build/HelpHint-C5Ru8BCc.mjs.map +0 -1
  487. package/.output/server/chunks/build/MetaStripGroup-BBByVvpR.mjs.map +0 -1
  488. package/.output/server/chunks/build/Modal-BacZmQCX.mjs.map +0 -1
  489. package/.output/server/chunks/build/NavigationMenu-sTiKSWDm.mjs.map +0 -1
  490. package/.output/server/chunks/build/RovingFocusItem--OEHI2P3.mjs.map +0 -1
  491. package/.output/server/chunks/build/SectionCard-C753B3Yo.mjs.map +0 -1
  492. package/.output/server/chunks/build/Select-BAyYwPuo.mjs.map +0 -1
  493. package/.output/server/chunks/build/Separator-BbgCfKKJ.mjs.map +0 -1
  494. package/.output/server/chunks/build/SettingsField-D-VriK9X.mjs.map +0 -1
  495. package/.output/server/chunks/build/Slideover-CNbGvbUF.mjs.map +0 -1
  496. package/.output/server/chunks/build/Switch-DdkA3Fii.mjs.map +0 -1
  497. package/.output/server/chunks/build/Table-CfDVAuUJ.mjs.map +0 -1
  498. package/.output/server/chunks/build/Tabs-BCOhHEB9.mjs.map +0 -1
  499. package/.output/server/chunks/build/TestStatusBar-wquHQqtp.mjs.map +0 -1
  500. package/.output/server/chunks/build/Textarea-Ohs6QTXf.mjs.map +0 -1
  501. package/.output/server/chunks/build/Tooltip-BRBnl4pE.mjs.map +0 -1
  502. package/.output/server/chunks/build/VisuallyHiddenInput-BHvzNumK.mjs.map +0 -1
  503. package/.output/server/chunks/build/_id_-CQ0lolEK.mjs.map +0 -1
  504. package/.output/server/chunks/build/about-DdyOj-dj.mjs.map +0 -1
  505. package/.output/server/chunks/build/account-7aVMKekZ.mjs.map +0 -1
  506. package/.output/server/chunks/build/db.client-Bdqk_eYQ.mjs.map +0 -1
  507. package/.output/server/chunks/build/default-CkyAx_Mu.mjs.map +0 -1
  508. package/.output/server/chunks/build/edit-CVz_gdoe.mjs.map +0 -1
  509. package/.output/server/chunks/build/fetch-Be-j7hF1.mjs.map +0 -1
  510. package/.output/server/chunks/build/forgot-password-CwdjL7BO.mjs.map +0 -1
  511. package/.output/server/chunks/build/import-DyQEw4V3.mjs.map +0 -1
  512. package/.output/server/chunks/build/index-D7Bmj6bq.mjs.map +0 -1
  513. package/.output/server/chunks/build/index-DghAFpNR.mjs.map +0 -1
  514. package/.output/server/chunks/build/isValueEqualOrExist-D2qw9YEr.mjs.map +0 -1
  515. package/.output/server/chunks/build/login-rXKF63j6.mjs.map +0 -1
  516. package/.output/server/chunks/build/mcp-ByNvFy4o.mjs.map +0 -1
  517. package/.output/server/chunks/build/notifications-CbLAZnKJ.mjs.map +0 -1
  518. package/.output/server/chunks/build/performance-C93MEPaZ.mjs.map +0 -1
  519. package/.output/server/chunks/build/pr-feedback-DKCB0bDE.mjs.map +0 -1
  520. package/.output/server/chunks/build/reset-password-BBoHKMqD.mjs.map +0 -1
  521. package/.output/server/chunks/build/settings-DiG0JjzC.mjs.map +0 -1
  522. package/.output/server/chunks/build/storage-3JiFJ843.mjs.map +0 -1
  523. package/.output/server/chunks/build/tags-CqYcp7js.mjs.map +0 -1
  524. package/.output/server/chunks/build/test-cases-y1HSgPX2.mjs.map +0 -1
  525. package/.output/server/chunks/build/test-functions-D2ju95Ly.mjs.map +0 -1
  526. package/.output/server/chunks/build/useFormControl-CZ9So7iX.mjs.map +0 -1
  527. package/.output/server/chunks/build/useOpenInIde--6Me0WlL.mjs.map +0 -1
  528. package/.output/server/chunks/build/users-IdmY9JZV.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ import{d as W,o as a,f as m,x,k as e,g as u,V as M,p as v,v as s,h as n,m as y,K as L,l as D,j as C,c as _,t as p,i as E,F as N,y as U,r as k,_ as H}from"./C5TrTuWv.js";import{H as w}from"./BjaRappk.js";import{a as G}from"./T5UuMUxA.js";const B="https://piwitests.github.io";function X(t){return`${B}/${t.replace(/^\//,"")}`}const Y=W({__name:"DocLink",props:{to:{},noIcon:{type:Boolean}},setup(t){const r=t,h=n(()=>X(r.to));return(c,o)=>{const g=v,I=x;return a(),m(I,{to:e(h),target:"_blank",rel:"noopener noreferrer",class:"inline-flex items-center gap-1 text-primary hover:underline"},{default:u(()=>[M(c.$slots,"default",{},()=>[o[0]||(o[0]=y("Learn more",-1))]),t.noIcon?s("",!0):(a(),m(g,{key:0,name:"i-lucide-external-link",class:"w-3.5 h-3.5 shrink-0"}))]),_:3},8,["to"])}}}),V=Object.assign(Y,{__name:"DocLink"}),P={PIWI_SITE_URL:{description:"Public base URL of the instance (e.g. https://piwi.example.com). Used to build links in emails.",category:"general",type:"url",example:"https://piwi.example.com",notes:"When unset, links in emails point to http://localhost:3000 and OAuth callback URLs are inferred from the request host — set it when running behind a reverse proxy."},PIWI_SECRET_KEY:{description:"Master key for AES-256-GCM encryption of secrets stored in the database (AI API keys, webhook/SCM secrets). Strongly recommended in production.",category:"general",secret:!0,example:"a 64-char random hex string",notes:"Falls back to an insecure built-in development key (with a startup warning in production). Generate one with `node -e \"console.log(require('node:crypto').randomBytes(32).toString('hex'))\"`."},PIWI_BUILD_DIR:{description:"Overrides the Nuxt build output directory. Used by the test harness to isolate parallel builds.",category:"build",runtimeOnly:!0,type:"path"},PIWI_BUILD_SHA:{description:"Commit SHA baked into the build for provenance. Shown on Settings → About. Set as a build-time arg.",category:"build",runtimeOnly:!0},PIWI_DESKTOP_TOKEN:{description:"Per-install access token the desktop (Tauri) app injects to gate its local server. Set automatically by the desktop shell — not user-configurable. Absent on the server build.",category:"desktop",secret:!0,runtimeOnly:!0,since:"0.16.0"},PIWI_DATABASE_PATH:{description:"Path to the SQLite database file (used when PIWI_DATABASE_URL is not set).",category:"database",type:"path",default:".data/piwi.db",relevantWhen:{PIWI_DATABASE_URL:""}},PIWI_DATABASE_URL:{description:"PostgreSQL connection string. When set, PostgreSQL is used instead of SQLite and migrations run automatically on startup.",category:"database",secret:!0,example:"postgres://piwi:piwi@db:5432/piwi",docs:"deployment#docker-compose-with-postgresql"},PIWI_RETENTION_DAYS:{description:"Days of test-run history the nightly retention sweep keeps. Unset or 0 disables automatic run pruning (the default — pruning is opt-in).",category:"database",type:"number",min:0,docs:"storage#data-retention"},PIWI_RETENTION_NOTIFICATION_DAYS:{description:"Days to keep sent/failed notification outbox rows before the nightly sweep prunes them (default 30; 0 keeps them forever).",category:"database",type:"number",default:"30",min:0},PIWI_RETENTION_DIAGNOSIS_VERSIONS:{description:"AI-diagnosis history versions kept per diagnosis by the nightly sweep (default 20; 0 disables capping).",category:"database",type:"number",default:"20",min:0},PIWI_STORAGE_TYPE:{description:'Storage backend for test artifacts (HTML reports, traces, attachments): "local" or "s3".',category:"storage",type:"enum",enum:["local","s3"],default:"local",notes:"Only the exact value `s3` selects S3; any other value falls back to local storage."},PIWI_STORAGE_PATH:{description:'Directory for local file storage (when PIWI_STORAGE_TYPE is "local").',category:"storage",type:"path",default:".data/storage",relevantWhen:{PIWI_STORAGE_TYPE:"local"}},PIWI_S3_BUCKET:{description:'S3 bucket name for artifact storage (when PIWI_STORAGE_TYPE is "s3").',category:"storage",relevantWhen:{PIWI_STORAGE_TYPE:"s3"},requiredWhen:{PIWI_STORAGE_TYPE:"s3"},docs:"storage#s3-compatible-storage"},PIWI_S3_REGION:{description:'S3 bucket region (when PIWI_STORAGE_TYPE is "s3").',category:"storage",example:"us-east-1",relevantWhen:{PIWI_STORAGE_TYPE:"s3"},requiredWhen:{PIWI_STORAGE_TYPE:"s3"}},PIWI_S3_ACCESS_KEY_ID:{description:"S3 access key id with write access to the bucket.",category:"storage",secret:!0,relevantWhen:{PIWI_STORAGE_TYPE:"s3"},requiredWhen:{PIWI_STORAGE_TYPE:"s3"}},PIWI_S3_SECRET_ACCESS_KEY:{description:"S3 secret access key.",category:"storage",secret:!0,relevantWhen:{PIWI_STORAGE_TYPE:"s3"},requiredWhen:{PIWI_STORAGE_TYPE:"s3"}},PIWI_S3_ENDPOINT:{description:"Custom endpoint for S3-compatible services (MinIO, R2, Spaces).",category:"storage",type:"url",example:"https://minio.example.com",relevantWhen:{PIWI_STORAGE_TYPE:"s3"}},PIWI_S3_FORCE_PATH_STYLE:{description:"Use path-style addressing (required by some S3-compatible services).",category:"storage",type:"boolean",relevantWhen:{PIWI_STORAGE_TYPE:"s3"},notes:"Defaults to on when a custom endpoint is set, off otherwise; only the exact value `false` turns it off explicitly."},PIWI_AUTH_ENABLED:{description:'Set to "true" to enable role-based access control and API keys. Off by default.',category:"auth",type:"boolean",default:"false"},PIWI_AUTH_SECRET:{description:"Secret used to sign/encrypt session cookies. Required when PIWI_AUTH_ENABLED is true.",category:"auth",secret:!0,relevantWhen:{PIWI_AUTH_ENABLED:"true"},requiredWhen:{PIWI_AUTH_ENABLED:"true"},notes:"The server refuses to start when auth is enabled and this is unset."},PIWI_OAUTH_GOOGLE_CLIENT_ID:{description:"Google OAuth client id (optional single sign-on).",category:"oauth",relevantWhen:{PIWI_AUTH_ENABLED:"true"},requiredWhen:{PIWI_OAUTH_GOOGLE_CLIENT_SECRET:"*"},docs:"authentication#oauth-google-github"},PIWI_OAUTH_GOOGLE_CLIENT_SECRET:{description:"Google OAuth client secret.",category:"oauth",secret:!0,relevantWhen:{PIWI_AUTH_ENABLED:"true"},requiredWhen:{PIWI_OAUTH_GOOGLE_CLIENT_ID:"*"}},PIWI_OAUTH_GITHUB_CLIENT_ID:{description:"GitHub OAuth client id (optional single sign-on).",category:"oauth",relevantWhen:{PIWI_AUTH_ENABLED:"true"},requiredWhen:{PIWI_OAUTH_GITHUB_CLIENT_SECRET:"*"},docs:"authentication#oauth-google-github"},PIWI_OAUTH_GITHUB_CLIENT_SECRET:{description:"GitHub OAuth client secret.",category:"oauth",secret:!0,relevantWhen:{PIWI_AUTH_ENABLED:"true"},requiredWhen:{PIWI_OAUTH_GITHUB_CLIENT_ID:"*"}},PIWI_OAUTH_ALLOWED_DOMAINS:{description:"Comma-separated verified email domains allowed to sign in via OAuth (all providers).",category:"oauth",type:"list",example:"example.com,corp.example.com",relevantWhen:{PIWI_AUTH_ENABLED:"true"},notes:"Only verified emails in these domains are accepted. Empty means no domain restriction."},PIWI_OAUTH_GITHUB_ALLOWED_ORGS:{description:"Comma-separated GitHub org logins a user must belong to (requests read:org scope).",category:"oauth",type:"list",relevantWhen:{PIWI_OAUTH_GITHUB_CLIENT_ID:"*"}},PIWI_AI_PROVIDER:{description:'AI provider for failure diagnosis: "anthropic" or "openai" (OpenAI-compatible).',category:"ai",type:"enum",enum:["anthropic","openai"]},PIWI_AI_API_KEY:{description:"API key for the diagnosis provider. Takes precedence over the DB-stored key.",category:"ai",secret:!0,relevantWhen:{PIWI_AI_PROVIDER:"*"},requiredWhen:{PIWI_AI_PROVIDER:"anthropic"},notes:"Optional for OpenAI-compatible providers that need no key (e.g. a local model)."},PIWI_AI_MODEL:{description:"Diagnosis model name (default: claude-opus-4-8 for Anthropic).",category:"ai",example:"claude-opus-4-8",relevantWhen:{PIWI_AI_PROVIDER:"*"},requiredWhen:{PIWI_AI_PROVIDER:"openai"}},PIWI_AI_BASE_URL:{description:"Base URL for OpenAI-compatible providers (e.g. http://localhost:11434/v1).",category:"ai",type:"url",example:"http://localhost:11434/v1",relevantWhen:{PIWI_AI_PROVIDER:"*"},requiredWhen:{PIWI_AI_PROVIDER:"openai"}},PIWI_AI_AUTO_DIAGNOSE:{description:'Set to "true" to auto-diagnose new failure clusters when a run finishes.',category:"ai",type:"boolean",default:"false",relevantWhen:{PIWI_AI_PROVIDER:"*"}},PIWI_AI_AUTO_DIAGNOSE_MAX:{description:"Max clusters auto-diagnosed per finished run (budget cap; default 3).",category:"ai",type:"number",default:"3",min:1,relevantWhen:{PIWI_AI_AUTO_DIAGNOSE:"true"}},PIWI_AI_RESEARCH_PROVIDER:{description:"Provider for the optional research (pre-analysis) stage. Falls back to PIWI_AI_PROVIDER.",category:"ai",type:"enum",enum:["anthropic","openai"],relevantWhen:{PIWI_AI_RESEARCH_MODEL:"*"}},PIWI_AI_RESEARCH_MODEL:{description:"Cheaper/faster model for the research stage. Empty disables the two-stage pipeline.",category:"ai",relevantWhen:{PIWI_AI_PROVIDER:"*"}},PIWI_AI_RESEARCH_BASE_URL:{description:"Base URL for the research-stage provider. Falls back to PIWI_AI_BASE_URL.",category:"ai",type:"url",relevantWhen:{PIWI_AI_RESEARCH_MODEL:"*"}},PIWI_AI_RESEARCH_API_KEY:{description:"API key for the research-stage provider. Falls back to PIWI_AI_API_KEY.",category:"ai",secret:!0,relevantWhen:{PIWI_AI_RESEARCH_MODEL:"*"}},PIWI_AI_EMBEDDING_PROVIDER:{description:"Provider for embeddings (semantic failure clustering). Falls back to PIWI_AI_PROVIDER.",category:"ai",type:"enum",enum:["openai"],relevantWhen:{PIWI_AI_EMBEDDING_MODEL:"*"},notes:'Must resolve to an OpenAI-compatible provider — Anthropic has no embeddings API — so the fallback only helps when the main provider is "openai".'},PIWI_AI_EMBEDDING_MODEL:{description:"Embedding model name (e.g. text-embedding-3-small).",category:"ai",example:"text-embedding-3-small",relevantWhen:{PIWI_AI_PROVIDER:"*"},notes:"Empty disables semantic clustering (and the embedding fallbacks)."},PIWI_AI_EMBEDDING_BASE_URL:{description:"Base URL for the embedding provider. Falls back to PIWI_AI_BASE_URL.",category:"ai",type:"url",relevantWhen:{PIWI_AI_EMBEDDING_MODEL:"*"}},PIWI_AI_EMBEDDING_API_KEY:{description:"API key for the embedding provider. Falls back to PIWI_AI_API_KEY.",category:"ai",secret:!0,relevantWhen:{PIWI_AI_EMBEDDING_MODEL:"*"}},PIWI_AI_MAX_SAMPLE_ERROR_CHARS:{description:"Max characters of raw error text (per error block).",category:"ai-limits",type:"number",default:"10000",min:200,max:5e4},PIWI_AI_MAX_SCM_PATCH_BUDGET:{description:"Total characters of diff patches across changed files.",category:"ai-limits",type:"number",default:"15000",min:0,max:5e4},PIWI_AI_MAX_AFFECTED_TESTS:{description:"Max affected tests listed in the diagnosis context.",category:"ai-limits",type:"number",default:"30",min:1,max:200},PIWI_AI_MAX_STEPS:{description:"Max recent test steps included.",category:"ai-limits",type:"number",default:"50",min:1,max:200},PIWI_AI_MAX_CONSOLE_ENTRIES:{description:"Max console error/warning entries included.",category:"ai-limits",type:"number",default:"30",min:0,max:200},PIWI_AI_MAX_CONSOLE_ENTRY_CHARS:{description:"Max characters per console entry.",category:"ai-limits",type:"number",default:"1000",min:50,max:5e3},PIWI_AI_MAX_NETWORK_REQUESTS:{description:"Max failed network requests included.",category:"ai-limits",type:"number",default:"25",min:0,max:200},PIWI_AI_MAX_ARIA_SNAPSHOT_CHARS:{description:"Max characters of the page ARIA snapshot.",category:"ai-limits",type:"number",default:"12000",min:0,max:5e4},PIWI_AI_MAX_TEST_SOURCE_CHARS:{description:"Max characters of the test source snippet.",category:"ai-limits",type:"number",default:"8000",min:0,max:5e4},PIWI_AI_MAX_SOURCE_FILES:{description:"Max full source files fetched from SCM to ground patches (0 disables).",category:"ai-limits",type:"number",default:"4",min:0,max:20},PIWI_AI_MAX_SOURCE_FILE_CHARS:{description:"Max characters per fetched full source file.",category:"ai-limits",type:"number",default:"12000",min:0,max:5e4},PIWI_AI_MAX_SERVER_LOG_ENTRIES:{description:"Max backend server log entries (from X-Piwi-Logs header) included.",category:"ai-limits",type:"number",default:"50",min:0,max:200},PIWI_AI_MAX_SERVER_LOG_ENTRY_CHARS:{description:"Max characters per backend server log entry.",category:"ai-limits",type:"number",default:"1000",min:50,max:5e3},PIWI_AI_MAX_SERVER_TRACE_SPANS:{description:"Max backend server spans (from X-Piwi-Trace header) included in AI diagnosis (0 disables).",category:"ai-limits",type:"number",default:"40",min:0,max:500,since:"0.16.0"},PIWI_AI_MAX_STEP_INTENTS:{description:"Max AI-step intent mappings (natural-language prompt → compiled locator) included in a diagnosis (0 disables the section).",category:"ai-limits",type:"number",default:"20",min:0,max:100,since:"0.24.0"},PIWI_AI_STEP_MAX_SNAPSHOT_CHARS:{description:"Max characters of the page ARIA snapshot the reporter sends per AI-step authoring iteration.",category:"ai-steps",type:"number",default:"24000",min:0,max:1e5,since:"0.24.0"},PIWI_AI_STEP_MAX_OUTPUT_TOKENS:{description:"Max output tokens the model may return per AI-step authoring iteration. Reasoning models count hidden chain-of-thought against this, so raise it (up to 8192) when authoring with one.",category:"ai-steps",type:"number",default:"1024",min:256,max:8192,since:"0.24.0"},PIWI_AI_MAX_IMAGES:{description:"Max screenshots auto-included in the diagnosis context.",category:"ai-limits",type:"number",default:"5",min:0,max:20},PIWI_AI_MAX_PASSED_PEERS:{description:"Max peer tests in the same file listed when they passed.",category:"ai-limits",type:"number",default:"20",min:0,max:100},PIWI_AI_MAX_CONSOLE_WINDOW:{description:"Max console entries of any type in the window before failure.",category:"ai-limits",type:"number",default:"50",min:0,max:200},PIWI_AI_SLOW_REQUEST_MS:{description:"Network request duration (ms) threshold for flagging as slow.",category:"ai-limits",type:"number",default:"1500",min:100,max:3e4},PIWI_AI_MAX_TRACE_ACTIONS:{description:"Max actions extracted from trace ZIP for failing-action context (0 disables).",category:"ai-limits",type:"number",default:"10",min:0,max:50},PIWI_AI_TRACE_DOM_CHARS:{description:"Max characters for the trace-derived DOM/ARIA excerpt in failing-action context.",category:"ai-limits",type:"number",default:"6000",min:0,max:2e4},PIWI_AI_MAX_TRACE_STACK_FRAMES:{description:"Max call-stack frames (with source windows) from the trace call-stack section (0 disables).",category:"ai-limits",type:"number",default:"10",min:0,max:50},PIWI_AI_MAX_TRACE_NETWORK_REQUESTS:{description:"Max requests included from the trace network stream (0 disables).",category:"ai-limits",type:"number",default:"20",min:0,max:200},PIWI_AI_MAX_DOM_SNAPSHOT_CHARS:{description:"Max characters of the failure-time DOM snapshot rendered from the trace (0 disables).",category:"ai-limits",type:"number",default:"8000",min:0,max:5e4},PIWI_AI_IMAGE_MAX_EDGE:{description:"Screenshots are downscaled to at most this many pixels on the long edge before being sent.",category:"ai-limits",type:"number",default:"1920",min:512,max:8192},PIWI_INGEST_MAX_CONSOLE_ENTRIES:{description:"Max console entries stored per test execution.",category:"ingest",type:"number",default:"200",min:10,max:5e3},PIWI_IMPORT_MAX_BYTES:{description:"Max size of a single multipart upload (report upload or blob-report import), in bytes. Lower it to match a reverse proxy that rejects large bodies, so the import page rejects an oversized archive before uploading it.",category:"ingest",type:"number",default:String(500*1024*1024),min:1024*1024,max:5*1024*1024*1024,since:"0.19.0"},PIWI_EXPORT_MAX_INLINE_BYTES:{description:"Max size of a single evidence file embedded as a data: URI in an HTML export, in bytes. Larger files are left out of the single-file HTML (and listed as omitted); the ZIP export still carries them at full size.",category:"export",type:"number",default:String(8*1024*1024),min:64*1024,max:512*1024*1024,since:"0.19.0"},PIWI_EXPORT_MAX_BYTES:{description:"Max total size of one export, in bytes. Evidence is added largest-last until the budget is reached; the rest is listed as omitted. The archive is built in memory, so this also bounds what a single export costs the server.",category:"export",type:"number",default:String(500*1024*1024),min:1024*1024,max:4*1024*1024*1024,since:"0.19.0"},PIWI_EXPORT_MAX_CASES:{description:"Max member executions carrying full evidence in a failure-cluster export. Remaining affected tests are listed by name without their evidence.",category:"export",type:"number",default:"25",min:1,max:200,since:"0.19.0"},PIWI_INGEST_MAX_CONSOLE_ENTRY_CHARS:{description:"Max characters stored per console entry.",category:"ingest",type:"number",default:"2000",min:200,max:2e4},PIWI_INGEST_MAX_STEPS:{description:"Max test steps stored per execution.",category:"ingest",type:"number",default:"500",min:20,max:5e3},PIWI_INGEST_MAX_STEP_EVENTS:{description:"Max step events stored per execution.",category:"ingest",type:"number",default:"1000",min:20,max:1e4},PIWI_INGEST_MAX_ARIA_CHARS:{description:"Max characters of the ARIA snapshot stored per failing execution.",category:"ingest",type:"number",default:"100000",min:1e3,max:1e6},PIWI_INGEST_MAX_ERROR_CHARS:{description:"Max characters of error text stored per execution (head and tail are kept).",category:"ingest",type:"number",default:"20000",min:1e3,max:1e5},PIWI_INGEST_MAX_SAMPLE_ERROR_CHARS:{description:"Max characters of the sample error stored per failure cluster.",category:"ingest",type:"number",default:"50000",min:1e3,max:2e5},PIWI_INGEST_MAX_TEST_SOURCE_CHARS:{description:"Max characters of the test source snippet stored per failing execution.",category:"ingest",type:"number",default:"50000",min:1e3,max:2e5},PIWI_INGEST_MAX_SOURCE_FRAMES:{description:"Max source stack frames stored per failing execution.",category:"ingest",type:"number",default:"8",min:1,max:32},PIWI_INGEST_MAX_SOURCE_FRAME_CHARS:{description:"Max characters per stored source frame snippet.",category:"ingest",type:"number",default:"4000",min:500,max:2e4},PIWI_AUTO_MARKERS:{description:"Automatically create a timeline marker when a run’s environment, Playwright version, or reporter version changes from the previous run (default: enabled). Set to false to disable.",category:"markers",type:"boolean",default:"true",docs:"timeline-markers",notes:"Only the exact value `false` disables auto-markers."},PIWI_TEST_LOGS_DISABLED:{description:"Disable X-Piwi-Logs response header emission (default: auto-disabled in production, enabled in development).",category:"testing",type:"boolean",docs:"backend-logs",notes:"Unset: capture is on in development and off in production builds; `true` forces it off everywhere, `false` forces it on even in production."},PIWI_CLUSTER_SIMILARITY_THRESHOLD:{description:"Cosine similarity (0–1) above which two failure embeddings merge into one cluster.",category:"clustering",type:"number",default:"0.92",min:0,max:1,relevantWhen:{PIWI_AI_EMBEDDING_MODEL:"*"},notes:"Must be greater than 0 and at most 1; invalid values fall back to the default."},PIWI_CLUSTER_SUGGEST_THRESHOLD:{description:"Similarity at which a failure is suggested (not auto-merged) as related to a cluster.",category:"clustering",type:"number",default:"0.80",min:0,max:1,relevantWhen:{PIWI_AI_EMBEDDING_MODEL:"*"},notes:"Capped at the merge threshold."},PIWI_SMTP_HOST:{description:"SMTP server hostname for outbound email.",category:"smtp",example:"smtp.example.com"},PIWI_SMTP_PORT:{description:"SMTP port (default 587; 465 for implicit TLS).",category:"smtp",type:"number",default:"587",min:1,max:65535,relevantWhen:{PIWI_SMTP_HOST:"*"}},PIWI_SMTP_USER:{description:"SMTP username.",category:"smtp",relevantWhen:{PIWI_SMTP_HOST:"*"},requiredWhen:{PIWI_SMTP_HOST:"*"}},PIWI_SMTP_PASS:{description:"SMTP password. Never returned by the API.",category:"smtp",secret:!0,relevantWhen:{PIWI_SMTP_HOST:"*"},requiredWhen:{PIWI_SMTP_HOST:"*"}},PIWI_SMTP_FROM:{description:"From address for outbound email (e.g. noreply@example.com).",category:"smtp",example:"noreply@example.com",relevantWhen:{PIWI_SMTP_HOST:"*"},requiredWhen:{PIWI_SMTP_HOST:"*"}},PIWI_SMTP_FROM_NAME:{description:"Display name for the from address (optional).",category:"smtp",default:"Piwi Dashboard",relevantWhen:{PIWI_SMTP_HOST:"*"}},PIWI_SMTP_SECURE:{description:'Set to "true" for implicit TLS on port 465 (default false → STARTTLS/plain).',category:"smtp",type:"boolean",relevantWhen:{PIWI_SMTP_HOST:"*"},notes:"Defaults to on when the port is 465, off otherwise."},PIWI_WASTED_WAIT_PATTERNS:{description:"Glob patterns (comma or newline separated) defining which wait steps count as wasted time. Locks the UI when set.",category:"wasted-time",type:"list",default:"Wait for timeout*,*waitForTimeout*",notes:"Case-insensitive globs (`*` and `?`) matched against a wait step’s title or source location. Use `*` to count every wait."},PIWI_DEMO_MODE:{description:'Set to "true" to build the standalone client-side demo SPA (no server).',category:"demo",runtimeOnly:!0,type:"boolean"},PIWI_BASE_URL:{description:"Base URL the metadata test spec targets (defaults to http://localhost:3000).",category:"test",runtimeOnly:!0},PIWI_POSTGRES_TEST_URL:{description:"PostgreSQL connection string used by the Postgres test suite.",category:"test",runtimeOnly:!0,secret:!0},PIWI_S3_TEST_BUCKET:{description:"S3 bucket for the storage integration tests.",category:"test",runtimeOnly:!0},PIWI_S3_TEST_REGION:{description:"Region for the S3 storage integration tests.",category:"test",runtimeOnly:!0},PIWI_S3_TEST_ACCESS_KEY_ID:{description:"Access key id for the S3 storage integration tests.",category:"test",runtimeOnly:!0,secret:!0},PIWI_S3_TEST_SECRET_ACCESS_KEY:{description:"Secret access key for the S3 storage integration tests.",category:"test",runtimeOnly:!0,secret:!0},PIWI_S3_TEST_ENDPOINT:{description:"Custom endpoint for the S3 storage integration tests.",category:"test",runtimeOnly:!0},PIWI_MAILPIT_URL:{description:"Mailpit base URL; when set, the email/notification E2E tests run against it.",category:"test",runtimeOnly:!0},PIWI_MAILPIT_SMTP_PORT:{description:"SMTP port the email E2E tests send to (Mailpit).",category:"test",runtimeOnly:!0},PIWI_EMAIL_SERVER_URL:{description:"Base URL the email test spec targets.",category:"test",runtimeOnly:!0},PIWI_TEST_CLEANUP_ENABLED:{description:"Allow the E2E cleanup endpoint (`DELETE /api/tests/cleanup`) on a production build, which CI needs because it runs the suite against one. Never set it on a real deployment.",category:"test",runtimeOnly:!0,type:"boolean",since:"0.19.0"}};function T(t){return P[t]}function oe(t){return Object.keys(P).filter(r=>P[r].category===t)}const q={key:0,class:"font-medium mb-1"},F={class:"text-muted"},K={key:1,class:"mt-2 space-y-1"},$={class:"text-muted text-xs"},z={class:"flex flex-col gap-1.5"},Q=["title","onClick"],j={class:"block font-mono text-xs bg-elevated rounded px-1.5 py-0.5 select-all cursor-pointer group-hover:ring-1 ring-default"},Z={key:0,class:"block text-muted text-[11px] mt-0.5"},J={key:2,class:"mt-2 flex flex-col gap-1"},ee=W({__name:"HelpHint",props:{topic:{},title:{},text:{},doc:{},envVars:{},size:{}},setup(t){const r=t,{copy:h}=G(),c=n(()=>r.topic?w[r.topic]:null),o=n(()=>r.title??c.value?.title),g=n(()=>r.text??c.value?.text??""),I=n(()=>r.doc??c.value?.doc),d=n(()=>r.envVars??c.value?.envVars),A=k(!1),S=n(()=>o.value?`Help: ${o.value}`:"Help"),b=n(()=>({side:"bottom","aria-label":S.value}));return(te,l)=>{const R=H,f=V,O=L;return a(),m(O,{open:e(A),"onUpdate:open":l[0]||(l[0]=i=>D(A)?A.value=i:null),content:e(b),ui:{content:"max-w-xs p-3 text-sm"}},{content:u(()=>[e(o)?(a(),_("p",q,p(e(o)),1)):s("",!0),E("p",F,p(e(g)),1),e(d)?.length?(a(),_("div",K,[E("p",$,"Environment variable"+p(e(d).length>1?"s":"")+":",1),E("div",z,[(a(!0),_(N,null,U(e(d),i=>(a(),_("button",{key:i,type:"button",class:"group text-left",title:`Click to copy ${i}`,onClick:ae=>e(h)(i,{toast:`Copied ${i}`})},[E("code",j,p(i),1),e(T)(i).description?(a(),_("span",Z,p(e(T)(i).description),1)):s("",!0)],8,Q))),128))])])):s("",!0),e(I)||e(d)?.length?(a(),_("div",J,[e(I)?(a(),m(f,{key:0,to:e(I)},{default:u(()=>[...l[1]||(l[1]=[y("Learn more",-1)])]),_:1},8,["to"])):s("",!0),e(d)?.length?(a(),m(f,{key:1,to:"configuration"},{default:u(()=>[...l[2]||(l[2]=[y("Configuration reference",-1)])]),_:1})):s("",!0)])):s("",!0)]),default:u(()=>[C(R,{size:t.size??"xs",variant:"ghost",color:"neutral",icon:"i-lucide-circle-help","aria-label":e(S),title:"What is this?",class:"text-muted hover:text-default align-middle"},null,8,["size","aria-label"])]),_:1},8,["open","content"])}}}),se=Object.assign(ee,{__name:"HelpHint"});export{se as _,V as a,X as d,oe as e,T as g};
@@ -1 +1 @@
1
- import{d as a,o as s,c as t,V as o,v as n,i as r}from"./h49q_GXF.js";const l={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},c={key:0,class:"flex flex-wrap items-center gap-2 min-w-0"},i={class:"flex flex-wrap items-center gap-2 min-w-0"},m=a({__name:"FilterToolbar",setup(_){return(e,p)=>(s(),t("div",l,[e.$slots.start?(s(),t("div",c,[o(e.$slots,"start")])):n("",!0),r("div",i,[o(e.$slots,"default")])]))}}),f=Object.assign(m,{__name:"FilterToolbar"});export{f as _};
1
+ import{d as a,o as s,c as t,V as o,v as n,i as r}from"./C5TrTuWv.js";const l={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},c={key:0,class:"flex flex-wrap items-center gap-2 min-w-0"},i={class:"flex flex-wrap items-center gap-2 min-w-0"},m=a({__name:"FilterToolbar",setup(_){return(e,p)=>(s(),t("div",l,[e.$slots.start?(s(),t("div",c,[o(e.$slots,"start")])):n("",!0),r("div",i,[o(e.$slots,"default")])]))}}),f=Object.assign(m,{__name:"FilterToolbar"});export{f as _};
@@ -1 +1 @@
1
- import{_ as f}from"./C9p0YCAi.js";import{_ as b}from"./BTvE9qca.js";import{_ as h}from"./CBZD8ym8.js";import{_ as j,a as v}from"./B_mN5eMV.js";import{_ as x}from"./_VzR8bwc.js";import{d as $,u as w,w as y,e as C,f as P,g as a,h as k,o as B,i as N,j as e,k as o,r as g}from"./h49q_GXF.js";import{u as D}from"./Cd8r0xk5.js";import"./BhH0TNTi.js";import"./DDN2tt0a.js";import"./xbO0VmDX.js";import"./x8YSyy4c.js";import"./DHUT-BKj.js";import"./CWw9WGlv.js";import"./BVN50jIb.js";import"./9N6hSApy.js";import"./CJEp4i0N.js";import"./CRPt9SfB.js";import"./DWEkQ7bl.js";import"./CD3R-ggS.js";import"./DOBSrxzY.js";import"./PdEEuEsg.js";import"./DOLeth7M.js";import"./BZnfiR67.js";import"./DGyGmFem.js";import"./B6s20NbT.js";import"./DLNNAYfu.js";import"./BtSJxOdh.js";import"./BjaRappk.js";import"./CWoSSKhQ.js";import"./4yvOL9PC.js";const R={class:"p-4"},_o=$({__name:"test-cases",async setup(T){let r,n;const i=w(),s=String(i.params.id),{data:t}=([r,n]=y(()=>D(`/api/projects/${s}`,"$GBv2haQFFX")),r=await r,n(),r),c=g(null);return C(k(()=>({title:`${t.value?.label||t.value?.name||"Project"} — Test cases — Piwi Dashboard`}))),(F,U)=>{const m=f,p=b,_=h,l=v,u=x,d=j;return B(),P(d,{id:"project-test-cases"},{header:a(()=>[e(l,null,{leading:a(()=>[e(m),e(p,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},{label:o(t)?.label||o(t)?.name||"Project",to:`/projects/${o(s)}`},{label:"Test cases"}]},null,8,["items"])]),right:a(()=>[e(_,{actions:[{label:"Refresh",icon:"i-lucide-refresh-cw",onClick:()=>o(c)?.refresh()}]},null,8,["actions"])]),_:1})]),body:a(()=>[N("div",R,[e(u,{ref_key:"tableRef",ref:c,"project-id":o(s),"project-name":o(t)?.name,"sync-query":""},null,8,["project-id","project-name"])])]),_:1})}}});export{_o as default};
1
+ import{_ as f}from"./Cu2Q4iPh.js";import{_ as b}from"./Qo6oszaF.js";import{_ as h}from"./Drw8yQg6.js";import{_ as j,a as v}from"./opyDpgSw.js";import{_ as x}from"./Bd8B-yeR.js";import{d as $,u as w,w as y,e as C,f as P,g as a,h as k,o as B,i as N,j as e,k as o,r as g}from"./C5TrTuWv.js";import{u as D}from"./T5UuMUxA.js";import"./BCGljaM0.js";import"./Ce5_Tq63.js";import"./DaNC-xl1.js";import"./B8H4XydJ.js";import"./DcLbz6DV.js";import"./DcR0Mmdl.js";import"./BFxvHlO9.js";import"./BBhrClA9.js";import"./VACXezo0.js";import"./DuOH5jcQ.js";import"./LwoTUb-r.js";import"./DMtrFQqi.js";import"./CMuzkARi.js";import"./D0Kop4bS.js";import"./BrUBOQ0y.js";import"./CX5Q0dZ8.js";import"./Bg93Rnts.js";import"./V9p3z39z.js";import"./DMAiMrNr.js";import"./B69RP95P.js";import"./BjaRappk.js";import"./C8Paf_V1.js";import"./DzZpIs4W.js";const R={class:"p-4"},_o=$({__name:"test-cases",async setup(T){let r,n;const i=w(),s=String(i.params.id),{data:t}=([r,n]=y(()=>D(`/api/projects/${s}`,"$GBv2haQFFX")),r=await r,n(),r),c=g(null);return C(k(()=>({title:`${t.value?.label||t.value?.name||"Project"} — Test cases — Piwi Dashboard`}))),(F,U)=>{const m=f,p=b,_=h,l=v,u=x,d=j;return B(),P(d,{id:"project-test-cases"},{header:a(()=>[e(l,null,{leading:a(()=>[e(m),e(p,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},{label:o(t)?.label||o(t)?.name||"Project",to:`/projects/${o(s)}`},{label:"Test cases"}]},null,8,["items"])]),right:a(()=>[e(_,{actions:[{label:"Refresh",icon:"i-lucide-refresh-cw",onClick:()=>o(c)?.refresh()}]},null,8,["actions"])]),_:1})]),body:a(()=>[N("div",R,[e(u,{ref_key:"tableRef",ref:c,"project-id":o(s),"project-name":o(t)?.name,"sync-query":""},null,8,["project-id","project-name"])])]),_:1})}}});export{_o as default};
@@ -1 +1 @@
1
- import{a2 as $,a3 as S,a4 as C,a5 as V,o as a,f as l,g as B,V as c,k as r,aJ as j,W as d,p as A,q as s,v as o,i as N,c as u,m,t as x,F as b,y as h,_ as p,X as O,h as P,a8 as F}from"./h49q_GXF.js";const I={slots:{root:"relative overflow-hidden w-full rounded-lg p-4 flex gap-2.5",wrapper:"min-w-0 flex-1 flex flex-col",title:"text-sm font-medium",description:"text-sm opacity-90",icon:"shrink-0 size-5",avatar:"shrink-0",avatarSize:"2xl",actions:"flex flex-wrap gap-1.5 shrink-0",close:"p-0"},variants:{color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},variant:{solid:"",outline:"",soft:"",subtle:""},orientation:{horizontal:{root:"items-center",actions:"items-center"},vertical:{root:"items-start",actions:"items-start mt-2.5"}},title:{true:{description:"mt-1"}}},compoundVariants:[{color:"primary",variant:"solid",class:{root:"bg-primary text-inverted"}},{color:"secondary",variant:"solid",class:{root:"bg-secondary text-inverted"}},{color:"success",variant:"solid",class:{root:"bg-success text-inverted"}},{color:"info",variant:"solid",class:{root:"bg-info text-inverted"}},{color:"warning",variant:"solid",class:{root:"bg-warning text-inverted"}},{color:"error",variant:"solid",class:{root:"bg-error text-inverted"}},{color:"primary",variant:"outline",class:{root:"text-primary ring ring-inset ring-primary/25"}},{color:"secondary",variant:"outline",class:{root:"text-secondary ring ring-inset ring-secondary/25"}},{color:"success",variant:"outline",class:{root:"text-success ring ring-inset ring-success/25"}},{color:"info",variant:"outline",class:{root:"text-info ring ring-inset ring-info/25"}},{color:"warning",variant:"outline",class:{root:"text-warning ring ring-inset ring-warning/25"}},{color:"error",variant:"outline",class:{root:"text-error ring ring-inset ring-error/25"}},{color:"primary",variant:"soft",class:{root:"bg-primary/10 text-primary"}},{color:"secondary",variant:"soft",class:{root:"bg-secondary/10 text-secondary"}},{color:"success",variant:"soft",class:{root:"bg-success/10 text-success"}},{color:"info",variant:"soft",class:{root:"bg-info/10 text-info"}},{color:"warning",variant:"soft",class:{root:"bg-warning/10 text-warning"}},{color:"error",variant:"soft",class:{root:"bg-error/10 text-error"}},{color:"primary",variant:"subtle",class:{root:"bg-primary/10 text-primary ring ring-inset ring-primary/25"}},{color:"secondary",variant:"subtle",class:{root:"bg-secondary/10 text-secondary ring ring-inset ring-secondary/25"}},{color:"success",variant:"subtle",class:{root:"bg-success/10 text-success ring ring-inset ring-success/25"}},{color:"info",variant:"subtle",class:{root:"bg-info/10 text-info ring ring-inset ring-info/25"}},{color:"warning",variant:"subtle",class:{root:"bg-warning/10 text-warning ring ring-inset ring-warning/25"}},{color:"error",variant:"subtle",class:{root:"bg-error/10 text-error ring ring-inset ring-error/25"}},{color:"neutral",variant:"solid",class:{root:"text-inverted bg-inverted"}},{color:"neutral",variant:"outline",class:{root:"text-highlighted bg-default ring ring-inset ring-default"}},{color:"neutral",variant:"soft",class:{root:"text-highlighted bg-elevated/50"}},{color:"neutral",variant:"subtle",class:{root:"text-highlighted bg-elevated/50 ring ring-inset ring-accented"}}],defaultVariants:{color:"primary",variant:"solid"}},D={__name:"UAlert",props:{as:{type:null,required:!1},title:{type:String,required:!1},description:{type:String,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},orientation:{type:null,required:!1,default:"vertical"},actions:{type:Array,required:!1},close:{type:[Boolean,Object],required:!1},closeIcon:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},emits:["update:open"],setup(w,{emit:k}){const q=w,z=k,i=$(),t=S("alert",q),{t:_}=C(),f=V(),e=P(()=>F({extend:I,...f.ui?.alert||{}})({color:t.color,variant:t.variant,orientation:t.orientation,title:!!t.title||!!i.title}));return(n,y)=>(a(),l(r(O),{as:r(t).as,"data-orientation":r(t).orientation,"data-slot":"root",class:s(e.value.root({class:[r(t).ui?.root,r(t).class]}))},{default:B(()=>[c(n.$slots,"leading",{ui:e.value},()=>[r(t).avatar?(a(),l(j,d({key:0,size:r(t).ui?.avatarSize||e.value.avatarSize()},r(t).avatar,{"data-slot":"avatar",class:e.value.avatar({class:r(t).ui?.avatar})}),null,16,["size","class"])):r(t).icon?(a(),l(A,{key:1,name:r(t).icon,"data-slot":"icon",class:s(e.value.icon({class:r(t).ui?.icon}))},null,8,["name","class"])):o("",!0)]),N("div",{"data-slot":"wrapper",class:s(e.value.wrapper({class:r(t).ui?.wrapper}))},[r(t).title||i.title?(a(),u("div",{key:0,"data-slot":"title",class:s(e.value.title({class:r(t).ui?.title}))},[c(n.$slots,"title",{},()=>[m(x(r(t).title),1)])],2)):o("",!0),r(t).description||i.description?(a(),u("div",{key:1,"data-slot":"description",class:s(e.value.description({class:r(t).ui?.description}))},[c(n.$slots,"description",{},()=>[m(x(r(t).description),1)])],2)):o("",!0),r(t).orientation==="vertical"&&(r(t).actions?.length||i.actions)?(a(),u("div",{key:2,"data-slot":"actions",class:s(e.value.actions({class:r(t).ui?.actions}))},[c(n.$slots,"actions",{},()=>[(a(!0),u(b,null,h(r(t).actions,(g,v)=>(a(),l(p,d({key:v,size:"xs"},{ref_for:!0},g),null,16))),128))])],2)):o("",!0)],2),r(t).orientation==="horizontal"&&(r(t).actions?.length||i.actions)||r(t).close?(a(),u("div",{key:0,"data-slot":"actions",class:s(e.value.actions({class:r(t).ui?.actions,orientation:"horizontal"}))},[r(t).orientation==="horizontal"&&(r(t).actions?.length||i.actions)?c(n.$slots,"actions",{key:0},()=>[(a(!0),u(b,null,h(r(t).actions,(g,v)=>(a(),l(p,d({key:v,size:"xs"},{ref_for:!0},g),null,16))),128))]):o("",!0),c(n.$slots,"close",{ui:e.value},()=>[r(t).close?(a(),l(p,d({key:0,icon:r(t).closeIcon||r(f).ui.icons.close,color:"neutral",variant:"link","aria-label":r(_)("alert.close")},typeof r(t).close=="object"?r(t).close:{},{"data-slot":"close",class:e.value.close({class:r(t).ui?.close}),onClick:y[0]||(y[0]=g=>z("update:open",!1))}),null,16,["icon","aria-label","class"])):o("",!0)])],2)):o("",!0)]),_:3},8,["as","data-orientation","class"]))}};export{D as _};
1
+ import{a2 as $,a3 as S,a4 as C,a5 as V,o as a,f as l,g as B,V as c,k as r,aK as j,W as d,p as A,q as s,v as o,i as N,c as u,m,t as x,F as b,y as h,_ as p,X as O,h as P,a8 as F}from"./C5TrTuWv.js";const I={slots:{root:"relative overflow-hidden w-full rounded-lg p-4 flex gap-2.5",wrapper:"min-w-0 flex-1 flex flex-col",title:"text-sm font-medium",description:"text-sm opacity-90",icon:"shrink-0 size-5",avatar:"shrink-0",avatarSize:"2xl",actions:"flex flex-wrap gap-1.5 shrink-0",close:"p-0"},variants:{color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},variant:{solid:"",outline:"",soft:"",subtle:""},orientation:{horizontal:{root:"items-center",actions:"items-center"},vertical:{root:"items-start",actions:"items-start mt-2.5"}},title:{true:{description:"mt-1"}}},compoundVariants:[{color:"primary",variant:"solid",class:{root:"bg-primary text-inverted"}},{color:"secondary",variant:"solid",class:{root:"bg-secondary text-inverted"}},{color:"success",variant:"solid",class:{root:"bg-success text-inverted"}},{color:"info",variant:"solid",class:{root:"bg-info text-inverted"}},{color:"warning",variant:"solid",class:{root:"bg-warning text-inverted"}},{color:"error",variant:"solid",class:{root:"bg-error text-inverted"}},{color:"primary",variant:"outline",class:{root:"text-primary ring ring-inset ring-primary/25"}},{color:"secondary",variant:"outline",class:{root:"text-secondary ring ring-inset ring-secondary/25"}},{color:"success",variant:"outline",class:{root:"text-success ring ring-inset ring-success/25"}},{color:"info",variant:"outline",class:{root:"text-info ring ring-inset ring-info/25"}},{color:"warning",variant:"outline",class:{root:"text-warning ring ring-inset ring-warning/25"}},{color:"error",variant:"outline",class:{root:"text-error ring ring-inset ring-error/25"}},{color:"primary",variant:"soft",class:{root:"bg-primary/10 text-primary"}},{color:"secondary",variant:"soft",class:{root:"bg-secondary/10 text-secondary"}},{color:"success",variant:"soft",class:{root:"bg-success/10 text-success"}},{color:"info",variant:"soft",class:{root:"bg-info/10 text-info"}},{color:"warning",variant:"soft",class:{root:"bg-warning/10 text-warning"}},{color:"error",variant:"soft",class:{root:"bg-error/10 text-error"}},{color:"primary",variant:"subtle",class:{root:"bg-primary/10 text-primary ring ring-inset ring-primary/25"}},{color:"secondary",variant:"subtle",class:{root:"bg-secondary/10 text-secondary ring ring-inset ring-secondary/25"}},{color:"success",variant:"subtle",class:{root:"bg-success/10 text-success ring ring-inset ring-success/25"}},{color:"info",variant:"subtle",class:{root:"bg-info/10 text-info ring ring-inset ring-info/25"}},{color:"warning",variant:"subtle",class:{root:"bg-warning/10 text-warning ring ring-inset ring-warning/25"}},{color:"error",variant:"subtle",class:{root:"bg-error/10 text-error ring ring-inset ring-error/25"}},{color:"neutral",variant:"solid",class:{root:"text-inverted bg-inverted"}},{color:"neutral",variant:"outline",class:{root:"text-highlighted bg-default ring ring-inset ring-default"}},{color:"neutral",variant:"soft",class:{root:"text-highlighted bg-elevated/50"}},{color:"neutral",variant:"subtle",class:{root:"text-highlighted bg-elevated/50 ring ring-inset ring-accented"}}],defaultVariants:{color:"primary",variant:"solid"}},D={__name:"UAlert",props:{as:{type:null,required:!1},title:{type:String,required:!1},description:{type:String,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},color:{type:null,required:!1},variant:{type:null,required:!1},orientation:{type:null,required:!1,default:"vertical"},actions:{type:Array,required:!1},close:{type:[Boolean,Object],required:!1},closeIcon:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},emits:["update:open"],setup(w,{emit:k}){const q=w,z=k,i=$(),t=S("alert",q),{t:_}=C(),f=V(),e=P(()=>F({extend:I,...f.ui?.alert||{}})({color:t.color,variant:t.variant,orientation:t.orientation,title:!!t.title||!!i.title}));return(n,y)=>(a(),l(r(O),{as:r(t).as,"data-orientation":r(t).orientation,"data-slot":"root",class:s(e.value.root({class:[r(t).ui?.root,r(t).class]}))},{default:B(()=>[c(n.$slots,"leading",{ui:e.value},()=>[r(t).avatar?(a(),l(j,d({key:0,size:r(t).ui?.avatarSize||e.value.avatarSize()},r(t).avatar,{"data-slot":"avatar",class:e.value.avatar({class:r(t).ui?.avatar})}),null,16,["size","class"])):r(t).icon?(a(),l(A,{key:1,name:r(t).icon,"data-slot":"icon",class:s(e.value.icon({class:r(t).ui?.icon}))},null,8,["name","class"])):o("",!0)]),N("div",{"data-slot":"wrapper",class:s(e.value.wrapper({class:r(t).ui?.wrapper}))},[r(t).title||i.title?(a(),u("div",{key:0,"data-slot":"title",class:s(e.value.title({class:r(t).ui?.title}))},[c(n.$slots,"title",{},()=>[m(x(r(t).title),1)])],2)):o("",!0),r(t).description||i.description?(a(),u("div",{key:1,"data-slot":"description",class:s(e.value.description({class:r(t).ui?.description}))},[c(n.$slots,"description",{},()=>[m(x(r(t).description),1)])],2)):o("",!0),r(t).orientation==="vertical"&&(r(t).actions?.length||i.actions)?(a(),u("div",{key:2,"data-slot":"actions",class:s(e.value.actions({class:r(t).ui?.actions}))},[c(n.$slots,"actions",{},()=>[(a(!0),u(b,null,h(r(t).actions,(g,v)=>(a(),l(p,d({key:v,size:"xs"},{ref_for:!0},g),null,16))),128))])],2)):o("",!0)],2),r(t).orientation==="horizontal"&&(r(t).actions?.length||i.actions)||r(t).close?(a(),u("div",{key:0,"data-slot":"actions",class:s(e.value.actions({class:r(t).ui?.actions,orientation:"horizontal"}))},[r(t).orientation==="horizontal"&&(r(t).actions?.length||i.actions)?c(n.$slots,"actions",{key:0},()=>[(a(!0),u(b,null,h(r(t).actions,(g,v)=>(a(),l(p,d({key:v,size:"xs"},{ref_for:!0},g),null,16))),128))]):o("",!0),c(n.$slots,"close",{ui:e.value},()=>[r(t).close?(a(),l(p,d({key:0,icon:r(t).closeIcon||r(f).ui.icons.close,color:"neutral",variant:"link","aria-label":r(_)("alert.close")},typeof r(t).close=="object"?r(t).close:{},{"data-slot":"close",class:e.value.close({class:r(t).ui?.close}),onClick:y[0]||(y[0]=g=>z("update:open",!1))}),null,16,["icon","aria-label","class"])):o("",!0)])],2)):o("",!0)]),_:3},8,["as","data-orientation","class"]))}};export{D as _};
@@ -1 +1 @@
1
- import{r as C,J as I,bi as N,am as D,bj as X,L as G,aR as K,$ as Y,a3 as U,a6 as Q,b9 as Z,a4 as V,a5 as H,o as W,f as F,W as ee,k as p,_ as te,h as z,a8 as J,bk as oe,l as R,g as ne,V as ie,q as ae,X as re}from"./h49q_GXF.js";const se=3456e4;function le(e,a,t){const n=e.indexOf(";",a);return n===-1?t:n}function ue(e,a,t){const n=e.indexOf("=",a);return n<t?n:-1}function M(e,a,t){if(a===t)return"";let n=a,i=t;do{const l=e.charCodeAt(n);if(l!==32&&l!==9)break}while(++n<i);for(;i>n;){const l=e.charCodeAt(i-1);if(l!==32&&l!==9)break;i--}return e.slice(n,i)}const ce=(()=>{const e=function(){};return e.prototype=Object.create(null),e})();function de(e,a){const t=new ce,n=e.length;if(n<2)return t;const i=a?.decode||fe,l=a?.allowMultiple||!1;let o=0;do{const c=ue(e,o,n);if(c===-1)break;const u=le(e,o,n);if(c>u){o=e.lastIndexOf(";",c-1)+1;continue}const r=M(e,o,c);if(a?.filter&&!a.filter(r)){o=u+1;continue}const f=i(M(e,c+1,u));if(l){const d=t[r];d===void 0?t[r]=f:Array.isArray(d)?d.push(f):t[r]=[d,f]}else t[r]===void 0&&(t[r]=f);o=u+1}while(o<n);return t}function fe(e){if(!e.includes("%"))return e;try{return decodeURIComponent(e)}catch{return e}}const pe=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,ve=/^[\u0021-\u003A\u003C-\u007E]*$/,he=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,me=/^[\u0020-\u003A\u003C-\u007E]*$/,ge=Object.prototype.toString;function $(e,a,t){const n=typeof e=="object"&&e!==null,i=n?a:t,l=i?.stringify||JSON.stringify,o=n?e:{...t,name:e,value:a==null?"":typeof a=="string"?a:l(a)},c=i?.encode||encodeURIComponent;if(!pe.test(o.name))throw new TypeError(`argument name is invalid: ${o.name}`);const u=o.value?c(o.value):"";if(!ve.test(u))throw new TypeError(`argument val is invalid: ${o.value}`);if(!o.secure){if(o.partitioned)throw new TypeError("Partitioned cookies must have the Secure attribute");if(o.sameSite&&String(o.sameSite).toLowerCase()==="none")throw new TypeError("SameSite=None cookies must have the Secure attribute");if(o.name.length>9&&o.name.charCodeAt(0)===95&&o.name.charCodeAt(1)===95){const f=o.name.toLowerCase();if(f.startsWith("__secure-")||f.startsWith("__host-"))throw new TypeError(`${o.name} cookies must have the Secure attribute`)}}if(o.name.length>7&&o.name.charCodeAt(0)===95&&o.name.charCodeAt(1)===95&&o.name.toLowerCase().startsWith("__host-")){if(o.path!=="/")throw new TypeError("__Host- cookies must have Path=/");if(o.domain)throw new TypeError("__Host- cookies must not have a Domain attribute")}let r=o.name+"="+u;if(o.maxAge!==void 0){if(!Number.isInteger(o.maxAge))throw new TypeError(`option maxAge is invalid: ${o.maxAge}`);r+="; Max-Age="+Math.max(0,Math.min(o.maxAge,se))}if(o.domain){if(!he.test(o.domain))throw new TypeError(`option domain is invalid: ${o.domain}`);r+="; Domain="+o.domain}if(o.path){if(!me.test(o.path))throw new TypeError(`option path is invalid: ${o.path}`);r+="; Path="+o.path}if(o.expires){if(!be(o.expires)||!Number.isFinite(o.expires.valueOf()))throw new TypeError(`option expires is invalid: ${o.expires}`);r+="; Expires="+o.expires.toUTCString()}if(o.httpOnly&&(r+="; HttpOnly"),o.secure&&(r+="; Secure"),o.partitioned&&(r+="; Partitioned"),o.priority)switch(typeof o.priority=="string"?o.priority.toLowerCase():void 0){case"low":r+="; Priority=Low";break;case"medium":r+="; Priority=Medium";break;case"high":r+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${o.priority}`)}if(o.sameSite)switch(typeof o.sameSite=="string"?o.sameSite.toLowerCase():o.sameSite){case!0:case"strict":r+="; SameSite=Strict";break;case"lax":r+="; SameSite=Lax";break;case"none":r+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${o.sameSite}`)}return r}function be(e){return ge.call(e)==="[object Date]"}function g(e){if(typeof e!="object")return e;var a,t,n=Object.prototype.toString.call(e);if(n==="[object Object]"){if(e.constructor!==Object&&typeof e.constructor=="function"){t=new e.constructor;for(a in e)e.hasOwnProperty(a)&&t[a]!==e[a]&&(t[a]=g(e[a]))}else{t={};for(a in e)a==="__proto__"?Object.defineProperty(t,a,{value:g(e[a]),configurable:!0,enumerable:!0,writable:!0}):t[a]=g(e[a])}return t}if(n==="[object Array]"){for(a=e.length,t=Array(a);a--;)t[a]=g(e[a]);return t}return n==="[object Set]"?(t=new Set,e.forEach(function(i){t.add(g(i))}),t):n==="[object Map]"?(t=new Map,e.forEach(function(i,l){t.set(g(l),g(i))}),t):n==="[object Date]"?new Date(+e):n==="[object RegExp]"?(t=new RegExp(e.source,e.flags),t.lastIndex=e.lastIndex,t):n==="[object DataView]"?new e.constructor(g(e.buffer)):n==="[object ArrayBuffer]"?e.slice(0):n.slice(-6)==="Array]"?new e.constructor(e):e}function ye(e){if(e!=="undefined")try{const a=JSON.parse(e);return typeof a=="number"&&String(a)!==e?e:a}catch{return e}}const Se={path:"/",watch:!0,decode:e=>e&&ye(decodeURIComponent(e)),encode:e=>{if(typeof e!="string"||e==="undefined")return encodeURIComponent(JSON.stringify(e));try{if(typeof JSON.parse(e)!="string")return encodeURIComponent(JSON.stringify(e))}catch{}return encodeURIComponent(e)},refresh:!1},j=globalThis.cookieStore;function we(e,a){const t={...Se,...a};t.filter??=r=>r===e;const n=B(t)||{};let i;t.maxAge!==void 0?i=t.maxAge*1e3:t.expires&&(i=t.expires.getTime()-Date.now());const l=i!==void 0&&i<=0,o=l||n[e]===void 0||n[e]===null,c=g(l?void 0:n[e]??t.default?.()),u=i&&!l?Oe(c,i,t.watch&&t.watch!=="shallow"):C(c);{let r=null;try{!j&&typeof BroadcastChannel<"u"&&(r=new BroadcastChannel(`nuxt:cookies:${e}`))}catch{}const f=(h=!1)=>{if(!h&&(t.readonly||K(u.value,n[e])))return;const b=u.value===null||u.value===void 0?void 0:t.encode(u.value);Ee(e,b,t),n[e]=g(u.value),r?.postMessage({value:t.encode(u.value)})},d=h=>{const b=h.refresh?B(t)?.[e]:t.decode(h.value);y=!0,u.value=b,n[e]=g(b),G(()=>{y=!1})};let y=!1;const S=!!N();if(S&&D(()=>{y=!0,f(),r?.close()}),j){const h=b=>{const A=b.changed.find(E=>E.name===e),L=b.deleted.find(E=>E.name===e);A&&d({value:A.value}),L&&d({value:null})};j.addEventListener("change",h),S&&D(()=>j.removeEventListener("change",h))}else r&&(r.onmessage=({data:h})=>d(h));t.watch&&I(u,()=>{y||f(t.refresh)},{deep:t.watch!=="shallow"}),o&&f(o)}return u}function B(e={}){return de(document.cookie,e)}const Ce=e=>e;function ke(e){const{encode:a,decode:t,...n}=e;return{...n,encode:Ce}}function ze(e,a,t={}){const n=ke(t);return a===void 0?$(e,"",{...n,maxAge:-1}):$(e,a,n)}function Ee(e,a,t={}){document.cookie=ze(e,a,t)}const P=2147483647;function Oe(e,a,t){let n,i,l=0;const o=t?C(e):{value:e};return N()&&D(()=>{i?.(),clearTimeout(n)}),X((c,u)=>{t&&(i=I(o,u));function r(){const d=a-l,y=d<P?d:P;n=setTimeout(()=>{if(l+=y,l<a)return r();o.value=void 0,u()},y)}function f(){l=0,clearTimeout(n),r()}return{get(){return c(),o.value},set(d){f(),o.value=d,u()}}})}const[qe,xe]=Y("DashboardGroup"),Te={base:"lg:hidden",variants:{side:{left:"",right:""}}},Re=Object.assign({inheritAttrs:!1},{__name:"UDashboardSidebarToggle",props:{color:{type:null,required:!1,default:"neutral"},variant:{type:null,required:!1,default:"ghost"},side:{type:String,required:!1,default:"left"},ui:{type:Object,required:!1},label:{type:String,required:!1},activeColor:{type:null,required:!1},activeVariant:{type:null,required:!1},size:{type:null,required:!1},square:{type:Boolean,required:!1},block:{type:Boolean,required:!1},loadingAuto:{type:Boolean,required:!1},onClick:{type:[Function,Array],required:!1},class:{type:null,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:null,required:!1},trailing:{type:Boolean,required:!1},trailingIcon:{type:null,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1},as:{type:null,required:!1},type:{type:null,required:!1},disabled:{type:Boolean,required:!1},exactActiveClass:{type:String,required:!1},viewTransition:{type:Boolean,required:!1}},setup(e){const t=U("dashboardSidebarToggle",e),n=Q(Z(t,"icon","side","class")),{t:i}=V(),l=H(),{sidebarOpen:o,toggleSidebar:c}=qe({sidebarOpen:C(!1),toggleSidebar:()=>{}}),u=z(()=>J({extend:Te,...l.ui?.dashboardSidebarToggle||{}}));return(r,f)=>(W(),F(te,ee({...p(n),icon:p(t).icon||(p(o)?p(l).ui.icons.close:p(l).ui.icons.menu),"aria-label":p(o)?p(i)("dashboardSidebarToggle.close"):p(i)("dashboardSidebarToggle.open"),...r.$attrs},{class:u.value({class:[p(t).ui?.base,p(t).class],side:p(t).side}),onClick:p(c)}),null,16,["class","onClick"]))}});function je(e,a={},{collapsed:t=C(!1)}={}){const n=C(null),i=z(()=>({side:"left",minSize:0,maxSize:100,defaultSize:0,storage:"cookie",persistent:!0,collapsible:!1,collapsedSize:0,resizable:!0,unit:"%",...R(a)?a.value:a})),{dir:l}=V(),o={size:i.value.defaultSize,collapsed:p(t)??!1},c=i.value.persistent&&(i.value.resizable||i.value.collapsible)?i.value.storage==="cookie"?we(e,{...i.value.storageOptions,default:()=>o}):oe(e,o,void 0,i.value.storageOptions):C(o),u=s=>{c.value?Object.assign(c.value,s):c.value={...o,...s}},r=z({get:()=>c.value?.collapsed??o.collapsed,set:s=>{i.value.collapsible&&(R(t)&&(t.value=s),u({collapsed:s}))}}),f=C(i.value.defaultSize),d=z({get:()=>c.value?.size??i.value.defaultSize,set:s=>{u({size:s})}}),y=z(()=>r.value?i.value.collapsedSize:d.value),S=C(!1),h=()=>i.value.unit==="rem"?Number.parseFloat(getComputedStyle(document.documentElement).fontSize):1,b=(s,v,O,q)=>{if(!n.value||!i.value.resizable)return;const T=n.value.parentElement?.offsetWidth||1,k=l.value==="rtl";let m;k?m=i.value.side==="left"?v-s:s-v:m=i.value.side==="left"?s-v:v-s;const w=O+m;let _;if(i.value.unit==="rem"?_=w/q:i.value.unit==="px"?_=w:_=w/T*100,i.value.collapsible&&_<i.value.collapsedSize+4){x(!0);return}else r.value&&x(!1);d.value=Math.min(i.value.maxSize,Math.max(i.value.minSize,_))},A=s=>{if(!n.value||!i.value.resizable)return;s.preventDefault(),s.stopPropagation();const v=n.value.getBoundingClientRect().width;if(!v)return;const O=s.clientX,q=v,T=h();S.value=!0;const k=w=>{b(w.clientX,O,q,T)},m=()=>{S.value=!1,document.removeEventListener("mousemove",k),document.removeEventListener("mouseup",m)};document.addEventListener("mousemove",k),document.addEventListener("mouseup",m)},L=s=>{if(!n.value||!i.value.resizable||!s.touches[0])return;s.preventDefault(),s.stopPropagation();const v=n.value.getBoundingClientRect().width;if(!v)return;const O=s.touches[0].clientX,q=v,T=h();S.value=!0;const k=w=>{w.touches[0]&&b(w.touches[0].clientX,O,q,T)},m=()=>{S.value=!1,document.removeEventListener("touchmove",k),document.removeEventListener("touchend",m),document.removeEventListener("touchcancel",m)};document.addEventListener("touchmove",k,{passive:!1}),document.addEventListener("touchend",m),document.addEventListener("touchcancel",m)},E=s=>{!n.value||!i.value.resizable||(s.preventDefault(),s.stopPropagation(),r.value&&x(!1),d.value=i.value.defaultSize)},x=s=>{if(!i.value.collapsible)return;const v=s??!r.value;v&&!r.value?f.value=d.value:!v&&r.value&&(d.value=f.value),r.value=v};return R(t)&&c.value?.collapsed&&(t.value=c.value.collapsed),R(t)&&I(t,s=>{i.value.collapsible&&c.value?.collapsed!==s&&(r.value=s)}),{el:n,size:y,isDragging:S,isCollapsed:r,onMouseDown:A,onTouchStart:L,onDoubleClick:E,collapse:x}}const _e={base:"hidden lg:block touch-none select-none cursor-ew-resize relative before:absolute before:inset-y-0 before:-left-1.5 before:-right-1.5 before:z-1"},Le={__name:"UDashboardResizeHandle",props:{as:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const t=U("dashboardResizeHandle",e),n=H(),i=z(()=>J({extend:_e,...n.ui?.dashboardResizeHandle||{}}));return(l,o)=>(W(),F(p(re),{as:p(t).as,role:"separator",class:ae(i.value({class:[p(t).ui?.base,p(t).class]}))},{default:ne(()=>[ie(l.$slots,"default")]),_:3},8,["as","class"]))}};export{Re as _,qe as a,je as b,Le as c,xe as p,we as u};
1
+ import{r as C,J as I,bk as N,an as D,bl as X,L as G,aT as K,$ as Y,a3 as U,a6 as Q,bb as Z,a4 as V,a5 as H,o as W,f as F,W as ee,k as p,_ as te,h as z,a8 as J,bm as oe,l as R,g as ne,V as ie,q as ae,X as re}from"./C5TrTuWv.js";const se=3456e4;function le(e,a,t){const n=e.indexOf(";",a);return n===-1?t:n}function ue(e,a,t){const n=e.indexOf("=",a);return n<t?n:-1}function M(e,a,t){if(a===t)return"";let n=a,i=t;do{const l=e.charCodeAt(n);if(l!==32&&l!==9)break}while(++n<i);for(;i>n;){const l=e.charCodeAt(i-1);if(l!==32&&l!==9)break;i--}return e.slice(n,i)}const ce=(()=>{const e=function(){};return e.prototype=Object.create(null),e})();function de(e,a){const t=new ce,n=e.length;if(n<2)return t;const i=a?.decode||fe,l=a?.allowMultiple||!1;let o=0;do{const c=ue(e,o,n);if(c===-1)break;const u=le(e,o,n);if(c>u){o=e.lastIndexOf(";",c-1)+1;continue}const r=M(e,o,c);if(a?.filter&&!a.filter(r)){o=u+1;continue}const f=i(M(e,c+1,u));if(l){const d=t[r];d===void 0?t[r]=f:Array.isArray(d)?d.push(f):t[r]=[d,f]}else t[r]===void 0&&(t[r]=f);o=u+1}while(o<n);return t}function fe(e){if(!e.includes("%"))return e;try{return decodeURIComponent(e)}catch{return e}}const pe=/^[\u0021-\u003A\u003C\u003E-\u007E]+$/,ve=/^[\u0021-\u003A\u003C-\u007E]*$/,he=/^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i,me=/^[\u0020-\u003A\u003C-\u007E]*$/,ge=Object.prototype.toString;function $(e,a,t){const n=typeof e=="object"&&e!==null,i=n?a:t,l=i?.stringify||JSON.stringify,o=n?e:{...t,name:e,value:a==null?"":typeof a=="string"?a:l(a)},c=i?.encode||encodeURIComponent;if(!pe.test(o.name))throw new TypeError(`argument name is invalid: ${o.name}`);const u=o.value?c(o.value):"";if(!ve.test(u))throw new TypeError(`argument val is invalid: ${o.value}`);if(!o.secure){if(o.partitioned)throw new TypeError("Partitioned cookies must have the Secure attribute");if(o.sameSite&&String(o.sameSite).toLowerCase()==="none")throw new TypeError("SameSite=None cookies must have the Secure attribute");if(o.name.length>9&&o.name.charCodeAt(0)===95&&o.name.charCodeAt(1)===95){const f=o.name.toLowerCase();if(f.startsWith("__secure-")||f.startsWith("__host-"))throw new TypeError(`${o.name} cookies must have the Secure attribute`)}}if(o.name.length>7&&o.name.charCodeAt(0)===95&&o.name.charCodeAt(1)===95&&o.name.toLowerCase().startsWith("__host-")){if(o.path!=="/")throw new TypeError("__Host- cookies must have Path=/");if(o.domain)throw new TypeError("__Host- cookies must not have a Domain attribute")}let r=o.name+"="+u;if(o.maxAge!==void 0){if(!Number.isInteger(o.maxAge))throw new TypeError(`option maxAge is invalid: ${o.maxAge}`);r+="; Max-Age="+Math.max(0,Math.min(o.maxAge,se))}if(o.domain){if(!he.test(o.domain))throw new TypeError(`option domain is invalid: ${o.domain}`);r+="; Domain="+o.domain}if(o.path){if(!me.test(o.path))throw new TypeError(`option path is invalid: ${o.path}`);r+="; Path="+o.path}if(o.expires){if(!be(o.expires)||!Number.isFinite(o.expires.valueOf()))throw new TypeError(`option expires is invalid: ${o.expires}`);r+="; Expires="+o.expires.toUTCString()}if(o.httpOnly&&(r+="; HttpOnly"),o.secure&&(r+="; Secure"),o.partitioned&&(r+="; Partitioned"),o.priority)switch(typeof o.priority=="string"?o.priority.toLowerCase():void 0){case"low":r+="; Priority=Low";break;case"medium":r+="; Priority=Medium";break;case"high":r+="; Priority=High";break;default:throw new TypeError(`option priority is invalid: ${o.priority}`)}if(o.sameSite)switch(typeof o.sameSite=="string"?o.sameSite.toLowerCase():o.sameSite){case!0:case"strict":r+="; SameSite=Strict";break;case"lax":r+="; SameSite=Lax";break;case"none":r+="; SameSite=None";break;default:throw new TypeError(`option sameSite is invalid: ${o.sameSite}`)}return r}function be(e){return ge.call(e)==="[object Date]"}function g(e){if(typeof e!="object")return e;var a,t,n=Object.prototype.toString.call(e);if(n==="[object Object]"){if(e.constructor!==Object&&typeof e.constructor=="function"){t=new e.constructor;for(a in e)e.hasOwnProperty(a)&&t[a]!==e[a]&&(t[a]=g(e[a]))}else{t={};for(a in e)a==="__proto__"?Object.defineProperty(t,a,{value:g(e[a]),configurable:!0,enumerable:!0,writable:!0}):t[a]=g(e[a])}return t}if(n==="[object Array]"){for(a=e.length,t=Array(a);a--;)t[a]=g(e[a]);return t}return n==="[object Set]"?(t=new Set,e.forEach(function(i){t.add(g(i))}),t):n==="[object Map]"?(t=new Map,e.forEach(function(i,l){t.set(g(l),g(i))}),t):n==="[object Date]"?new Date(+e):n==="[object RegExp]"?(t=new RegExp(e.source,e.flags),t.lastIndex=e.lastIndex,t):n==="[object DataView]"?new e.constructor(g(e.buffer)):n==="[object ArrayBuffer]"?e.slice(0):n.slice(-6)==="Array]"?new e.constructor(e):e}function ye(e){if(e!=="undefined")try{const a=JSON.parse(e);return typeof a=="number"&&String(a)!==e?e:a}catch{return e}}const Se={path:"/",watch:!0,decode:e=>e&&ye(decodeURIComponent(e)),encode:e=>{if(typeof e!="string"||e==="undefined")return encodeURIComponent(JSON.stringify(e));try{if(typeof JSON.parse(e)!="string")return encodeURIComponent(JSON.stringify(e))}catch{}return encodeURIComponent(e)},refresh:!1},j=globalThis.cookieStore;function we(e,a){const t={...Se,...a};t.filter??=r=>r===e;const n=B(t)||{};let i;t.maxAge!==void 0?i=t.maxAge*1e3:t.expires&&(i=t.expires.getTime()-Date.now());const l=i!==void 0&&i<=0,o=l||n[e]===void 0||n[e]===null,c=g(l?void 0:n[e]??t.default?.()),u=i&&!l?Oe(c,i,t.watch&&t.watch!=="shallow"):C(c);{let r=null;try{!j&&typeof BroadcastChannel<"u"&&(r=new BroadcastChannel(`nuxt:cookies:${e}`))}catch{}const f=(h=!1)=>{if(!h&&(t.readonly||K(u.value,n[e])))return;const b=u.value===null||u.value===void 0?void 0:t.encode(u.value);Ee(e,b,t),n[e]=g(u.value),r?.postMessage({value:t.encode(u.value)})},d=h=>{const b=h.refresh?B(t)?.[e]:t.decode(h.value);y=!0,u.value=b,n[e]=g(b),G(()=>{y=!1})};let y=!1;const S=!!N();if(S&&D(()=>{y=!0,f(),r?.close()}),j){const h=b=>{const A=b.changed.find(E=>E.name===e),L=b.deleted.find(E=>E.name===e);A&&d({value:A.value}),L&&d({value:null})};j.addEventListener("change",h),S&&D(()=>j.removeEventListener("change",h))}else r&&(r.onmessage=({data:h})=>d(h));t.watch&&I(u,()=>{y||f(t.refresh)},{deep:t.watch!=="shallow"}),o&&f(o)}return u}function B(e={}){return de(document.cookie,e)}const Ce=e=>e;function ke(e){const{encode:a,decode:t,...n}=e;return{...n,encode:Ce}}function ze(e,a,t={}){const n=ke(t);return a===void 0?$(e,"",{...n,maxAge:-1}):$(e,a,n)}function Ee(e,a,t={}){document.cookie=ze(e,a,t)}const P=2147483647;function Oe(e,a,t){let n,i,l=0;const o=t?C(e):{value:e};return N()&&D(()=>{i?.(),clearTimeout(n)}),X((c,u)=>{t&&(i=I(o,u));function r(){const d=a-l,y=d<P?d:P;n=setTimeout(()=>{if(l+=y,l<a)return r();o.value=void 0,u()},y)}function f(){l=0,clearTimeout(n),r()}return{get(){return c(),o.value},set(d){f(),o.value=d,u()}}})}const[Te,xe]=Y("DashboardGroup"),qe={base:"lg:hidden",variants:{side:{left:"",right:""}}},Re=Object.assign({inheritAttrs:!1},{__name:"UDashboardSidebarToggle",props:{color:{type:null,required:!1,default:"neutral"},variant:{type:null,required:!1,default:"ghost"},side:{type:String,required:!1,default:"left"},ui:{type:Object,required:!1},label:{type:String,required:!1},activeColor:{type:null,required:!1},activeVariant:{type:null,required:!1},size:{type:null,required:!1},square:{type:Boolean,required:!1},block:{type:Boolean,required:!1},loadingAuto:{type:Boolean,required:!1},onClick:{type:[Function,Array],required:!1},class:{type:null,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:null,required:!1},trailing:{type:Boolean,required:!1},trailingIcon:{type:null,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1},as:{type:null,required:!1},type:{type:null,required:!1},disabled:{type:Boolean,required:!1},exactActiveClass:{type:String,required:!1},viewTransition:{type:Boolean,required:!1}},setup(e){const t=U("dashboardSidebarToggle",e),n=Q(Z(t,"icon","side","class")),{t:i}=V(),l=H(),{sidebarOpen:o,toggleSidebar:c}=Te({sidebarOpen:C(!1),toggleSidebar:()=>{}}),u=z(()=>J({extend:qe,...l.ui?.dashboardSidebarToggle||{}}));return(r,f)=>(W(),F(te,ee({...p(n),icon:p(t).icon||(p(o)?p(l).ui.icons.close:p(l).ui.icons.menu),"aria-label":p(o)?p(i)("dashboardSidebarToggle.close"):p(i)("dashboardSidebarToggle.open"),...r.$attrs},{class:u.value({class:[p(t).ui?.base,p(t).class],side:p(t).side}),onClick:p(c)}),null,16,["class","onClick"]))}});function je(e,a={},{collapsed:t=C(!1)}={}){const n=C(null),i=z(()=>({side:"left",minSize:0,maxSize:100,defaultSize:0,storage:"cookie",persistent:!0,collapsible:!1,collapsedSize:0,resizable:!0,unit:"%",...R(a)?a.value:a})),{dir:l}=V(),o={size:i.value.defaultSize,collapsed:p(t)??!1},c=i.value.persistent&&(i.value.resizable||i.value.collapsible)?i.value.storage==="cookie"?we(e,{...i.value.storageOptions,default:()=>o}):oe(e,o,void 0,i.value.storageOptions):C(o),u=s=>{c.value?Object.assign(c.value,s):c.value={...o,...s}},r=z({get:()=>c.value?.collapsed??o.collapsed,set:s=>{i.value.collapsible&&(R(t)&&(t.value=s),u({collapsed:s}))}}),f=C(i.value.defaultSize),d=z({get:()=>c.value?.size??i.value.defaultSize,set:s=>{u({size:s})}}),y=z(()=>r.value?i.value.collapsedSize:d.value),S=C(!1),h=()=>i.value.unit==="rem"?Number.parseFloat(getComputedStyle(document.documentElement).fontSize):1,b=(s,v,O,T)=>{if(!n.value||!i.value.resizable)return;const q=n.value.parentElement?.offsetWidth||1,k=l.value==="rtl";let m;k?m=i.value.side==="left"?v-s:s-v:m=i.value.side==="left"?s-v:v-s;const w=O+m;let _;if(i.value.unit==="rem"?_=w/T:i.value.unit==="px"?_=w:_=w/q*100,i.value.collapsible&&_<i.value.collapsedSize+4){x(!0);return}else r.value&&x(!1);d.value=Math.min(i.value.maxSize,Math.max(i.value.minSize,_))},A=s=>{if(!n.value||!i.value.resizable)return;s.preventDefault(),s.stopPropagation();const v=n.value.getBoundingClientRect().width;if(!v)return;const O=s.clientX,T=v,q=h();S.value=!0;const k=w=>{b(w.clientX,O,T,q)},m=()=>{S.value=!1,document.removeEventListener("mousemove",k),document.removeEventListener("mouseup",m)};document.addEventListener("mousemove",k),document.addEventListener("mouseup",m)},L=s=>{if(!n.value||!i.value.resizable||!s.touches[0])return;s.preventDefault(),s.stopPropagation();const v=n.value.getBoundingClientRect().width;if(!v)return;const O=s.touches[0].clientX,T=v,q=h();S.value=!0;const k=w=>{w.touches[0]&&b(w.touches[0].clientX,O,T,q)},m=()=>{S.value=!1,document.removeEventListener("touchmove",k),document.removeEventListener("touchend",m),document.removeEventListener("touchcancel",m)};document.addEventListener("touchmove",k,{passive:!1}),document.addEventListener("touchend",m),document.addEventListener("touchcancel",m)},E=s=>{!n.value||!i.value.resizable||(s.preventDefault(),s.stopPropagation(),r.value&&x(!1),d.value=i.value.defaultSize)},x=s=>{if(!i.value.collapsible)return;const v=s??!r.value;v&&!r.value?f.value=d.value:!v&&r.value&&(d.value=f.value),r.value=v};return R(t)&&c.value?.collapsed&&(t.value=c.value.collapsed),R(t)&&I(t,s=>{i.value.collapsible&&c.value?.collapsed!==s&&(r.value=s)}),{el:n,size:y,isDragging:S,isCollapsed:r,onMouseDown:A,onTouchStart:L,onDoubleClick:E,collapse:x}}const _e={base:"hidden lg:block touch-none select-none cursor-ew-resize relative before:absolute before:inset-y-0 before:-left-1.5 before:-right-1.5 before:z-1"},Le={__name:"UDashboardResizeHandle",props:{as:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(e){const t=U("dashboardResizeHandle",e),n=H(),i=z(()=>J({extend:_e,...n.ui?.dashboardResizeHandle||{}}));return(l,o)=>(W(),F(p(re),{as:p(t).as,role:"separator",class:ae(i.value({class:[p(t).ui?.base,p(t).class]}))},{default:ne(()=>[ie(l.$slots,"default")]),_:3},8,["as","class"]))}};export{Re as _,Te as a,je as b,Le as c,xe as p,we as u};
@@ -1 +1 @@
1
- import{d as s,o as t,c as o,f as c,v as l,i as m,t as r,V as i,q as d,p}from"./h49q_GXF.js";const _={class:"text-sm"},f=s({__name:"EmptyState",props:{text:{},icon:{},padded:{type:Boolean,default:!0}},setup(e){return(a,u)=>{const n=p;return t(),o("div",{class:d(["flex flex-col items-center justify-center gap-2 text-center text-gray-500",e.padded&&"py-8"])},[e.icon?(t(),c(n,{key:0,name:e.icon,class:"size-6 opacity-60"},null,8,["name"])):l("",!0),m("p",_,r(e.text),1),i(a.$slots,"default")],2)}}}),y=Object.assign(f,{__name:"EmptyState"});export{y as _};
1
+ import{d as s,o as t,c as o,f as c,v as l,i as m,t as r,V as i,q as d,p}from"./C5TrTuWv.js";const _={class:"text-sm"},f=s({__name:"EmptyState",props:{text:{},icon:{},padded:{type:Boolean,default:!0}},setup(e){return(a,u)=>{const n=p;return t(),o("div",{class:d(["flex flex-col items-center justify-center gap-2 text-center text-gray-500",e.padded&&"py-8"])},[e.icon?(t(),c(n,{key:0,name:e.icon,class:"size-6 opacity-60"},null,8,["name"])):l("",!0),m("p",_,r(e.text),1),i(a.$slots,"default")],2)}}}),y=Object.assign(f,{__name:"EmptyState"});export{y as _};
@@ -1 +1 @@
1
- import{d as o,u as s,w as c,n as u,o as p,c as i}from"./h49q_GXF.js";const d=o({__name:"compare",async setup(_){let t,n;const e=s(),a=e.params.id;{const r=new URLSearchParams;r.set("tab","compare"),e.query.runA&&r.set("runA",String(e.query.runA)),e.query.runB&&r.set("runB",String(e.query.runB)),[t,n]=c(()=>u(`/projects/${a}?${r.toString()}`,{replace:!0})),await t,n()}return(r,m)=>(p(),i("div"))}});export{d as default};
1
+ import{d as o,u as s,w as c,n as u,o as p,c as i}from"./C5TrTuWv.js";const d=o({__name:"compare",async setup(_){let t,n;const e=s(),a=e.params.id;{const r=new URLSearchParams;r.set("tab","compare"),e.query.runA&&r.set("runA",String(e.query.runA)),e.query.runB&&r.set("runB",String(e.query.runB)),[t,n]=c(()=>u(`/projects/${a}?${r.toString()}`,{replace:!0})),await t,n()}return(r,m)=>(p(),i("div"))}});export{d as default};
@@ -0,0 +1,9 @@
1
+ import{_ as es}from"./Cu2Q4iPh.js";import{_ as ts}from"./Qo6oszaF.js";import{d as re,o as s,f as v,g as u,i as o,j as r,t as c,c as a,F as U,y as te,k as e,s as pe,m as f,v as i,D as pt,q as Z,p as ce,h as C,G as Pe,_ as Ie,b as ss,B as yt,l as ge,r as A,ab as $e,J as xe,ac as ns,A as Oe,R as Ce,u as as,a as os,w as mt,e as rs,ad as is,N as ls}from"./C5TrTuWv.js";import{d as cs,e as us,h as He,a as ds,b as ms,c as fs,_ as gs,n as ps,o as ys,p as hs,u as xs,f as vs,i as _s,j as ks,k as bs,l as ws,m as $s}from"./D7jpwkRG.js";import{_ as Cs}from"./CyLcEDg2.js";import{_ as Ts}from"./Drw8yQg6.js";import{_ as Ss,a as Is}from"./opyDpgSw.js";import{_ as Rs,a as js,b as Ls,c as zs}from"./Dz6g_QJT.js";import{_ as Re}from"./LwoTUb-r.js";import{_ as Ms}from"./98sAB6Gu.js";import{_ as Ns}from"./CMuzkARi.js";import{_ as ht}from"./D0Kop4bS.js";import{_ as xt}from"./CJ1rmnk4.js";import{_ as vt}from"./BakMHV79.js";import{_ as _t,a as kt}from"./B69RP95P.js";import{_ as Ds}from"./BWMSVSNM.js";import{_ as Ps}from"./C8Paf_V1.js";import{_ as As,d as Us,e as Bs,f as Fs,g as Vs,h as Es,a as bt,i as Te,b as De,c as Os}from"./CX_G-FHC.js";import{f as Se,m as Hs,c as Ks,e as Ws,n as wt,o as Ke,q as We,a as Gs,j as Js,r as ft}from"./DMtrFQqi.js";import{_ as $t}from"./DuOH5jcQ.js";import{_ as ye}from"./DMAiMrNr.js";import{_ as qs}from"./BfA6lfg4.js";import{u as Qs}from"./CGHV0Y2d.js";import{_ as Ge}from"./DhYznn-U.js";import{_ as Je}from"./DcLbz6DV.js";import{_ as Ct}from"./CD8ZzAFC.js";import{f as we}from"./D-c8ZSws.js";import{_ as Zs}from"./B1LUinhp.js";import{_ as Xs}from"./Bp3FRuEm.js";import{_ as Ys}from"./Bg93Rnts.js";import{_ as en}from"./DbmGeOus.js";import{_ as tn}from"./BFxvHlO9.js";import{_ as sn}from"./DM3bDZC6.js";import{b as nn}from"./CX5Q0dZ8.js";import{a as an,u as gt}from"./T5UuMUxA.js";import"./BCGljaM0.js";import"./BrUBOQ0y.js";import"./CsV7pmcT.js";import"./fXUwH_3d.js";import"./BBhrClA9.js";import"./6Z_ZwH8I.js";import"./Ce5_Tq63.js";import"./DaNC-xl1.js";import"./DH5H1DJh.js";import"./D_y2VS8k.js";import"./C-XjxjG5.js";import"./03FA4-rI.js";import"./DMsm-RGQ.js";import"./Bn0jaRxI.js";import"./BjaRappk.js";import"./DEvYVl9M.js";import"./V9p3z39z.js";import"./DGq4A2Pd.js";import"./BvAfKk6C.js";import"./D7W_4Sqc.js";import"./P5uOaRUZ.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"},fn={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},gn={class:"text-gray-700 dark:text-gray-300"},pn={key:0,class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},yn={class:"text-gray-700 dark:text-gray-300"},hn={class:"@container"},xn={class:"space-y-3"},vn={class:"flex items-start gap-2.5 pr-8"},_n={class:"min-w-0 flex-1"},kn={class:"flex items-center gap-2 flex-wrap"},bn={class:"text-base font-bold truncate max-w-full"},wn={class:"text-xs text-gray-500 mt-0.5 flex items-center gap-x-2 gap-y-0.5 flex-wrap"},$n=["title"],Cn={key:1},Tn={key:0,class:"flex items-center gap-2 text-sm"},Sn={class:"text-gray-700 dark:text-gray-300 truncate"},In={key:0,class:"text-gray-500 shrink-0"},Rn={key:1,class:"flex items-center gap-1.5 text-sm"},jn={key:0,class:"font-medium"},Ln=["title"],zn={key:2,class:"text-muted"},Mn=["title"],Nn={key:0,class:"rounded-full border border-default px-2 py-0.5 text-xs bg-elevated/60"},Dn={key:1},Pn=["href"],An={key:1},Un={class:"text-muted"},Bn={key:0,class:"tabular-nums text-muted"},Fn={key:0,class:"text-dimmed"},Vn=re({__name:"TestCaseSummary",props:{testCase:{},scmInfo:{},ciInfo:{},browser:{},environment:{},stepsCount:{},historicalTiming:{},stableLinks:{},projectKey:{},projectName:{}},emits:["refresh"],setup(t){const _=t,h=C(()=>{const n=_.testCase;if(!n)return[];const l=[];return n.isNewRegression&&l.push({label:"New regression",color:"error",title:"Passed in the baseline run, failing here"}),n.isNewFlaky&&l.push({label:"New flaky",color:"warning",title:"Newly started passing only on retry"}),n.status==="passed"&&(n.retries??0)>0&&l.push({label:"Passed on retry",color:"warning",title:"This test failed then passed on a retry"}),l}),w=C(()=>(_.testCase?.testAnnotations??[]).filter(n=>!Hs(n.type))),$=C(()=>_.testCase?.startedAt??null),g=C(()=>!!(_.ciInfo||_.environment));return(n,l)=>{const d=Rs,P=Re,D=Ms,b=pe,x=Ns,V=ht,M=pt,m=xt,j=vt,F=ce,B=_t,S=Ls,G=Ds,q=js,z=Ps,ne=As;return s(),v(ne,{"storage-key":"test-case"},{folded:u(()=>[r(d,{status:t.testCase?.status??"",size:"sm"},null,8,["status"]),o("span",on,c(t.testCase?.title),1),o("div",rn,[o("span",ln,[l[1]||(l[1]=f(" Dur: ",-1)),r(P,{ms:t.testCase?.duration,class:"font-bold text-gray-700 dark:text-gray-300"},null,8,["ms"])]),o("span",cn,[l[2]||(l[2]=f(" Retries: ",-1)),o("strong",un,c(t.testCase?.retries??0),1)]),o("span",dn,[l[3]||(l[3]=f(" Steps: ",-1)),o("strong",mn,c(t.stepsCount),1)]),o("span",fn,[l[4]||(l[4]=f(" Worker: ",-1)),o("strong",gn,c(t.testCase?.workerIndex??"—"),1)]),t.testCase?.shardIndex!=null?(s(),a("span",pn,[l[5]||(l[5]=f(" Shard: ",-1)),o("strong",yn,c(t.testCase.shardIndex),1)])):i("",!0)]),t.browser?(s(),v(D,{key:0,browser:t.browser,size:"sm",class:"shrink-0 max-sm:hidden"},null,8,["browser"])):i("",!0)]),default:u(()=>[o("div",hn,[r(z,{class:"shadow-xs",ui:{footer:"px-4 py-2.5 sm:px-4 bg-muted/30"}},{footer:u(()=>[r(q,null,{default:u(()=>[t.scmInfo?(s(),v(S,{key:0,label:"Source",icon:"i-lucide-git-branch"},{default:u(()=>[t.scmInfo.branch?(s(),a("span",jn,c(t.scmInfo.branch),1)):i("",!0),t.scmInfo.commit?(s(),a("code",{key:1,class:"text-xs font-mono bg-zinc-100 dark:bg-zinc-800 px-1 py-0.5 rounded",title:t.scmInfo.commit},c(t.scmInfo.commit.length>=8?t.scmInfo.commit.substring(0,8):t.scmInfo.commit),9,Ln)):i("",!0),t.scmInfo.author?(s(),a("span",zn,c(t.scmInfo.author),1)):i("",!0),t.scmInfo.commitMessage?(s(),a("span",{key:3,class:"text-xs text-dimmed truncate max-w-[40ch]",title:t.scmInfo.commitMessage},c(t.scmInfo.commitMessage),9,Mn)):i("",!0)]),_:1})):i("",!0),e(g)?(s(),v(S,{key:1,label:"CI & environment",icon:"i-lucide-cloud",help:"run.ci-env"},{default:u(()=>[t.environment?(s(),a("span",Nn,c(t.environment),1)):i("",!0),t.ciInfo?.provider?(s(),a("span",Dn,c(t.ciInfo.provider),1)):i("",!0),t.ciInfo?.buildNumber||t.ciInfo?.buildUrl?(s(),a(U,{key:2},[l[12]||(l[12]=o("span",{class:"text-dimmed"},"·",-1)),t.ciInfo?.buildUrl?(s(),a("a",{key:0,href:t.ciInfo.buildUrl,target:"_blank",class:"text-primary hover:underline"},c(t.ciInfo?.buildNumber?`Build #${t.ciInfo.buildNumber}`:"View build"),9,Pn)):(s(),a("span",An,"Build #"+c(t.ciInfo.buildNumber),1))],64)):i("",!0),t.ciInfo?.workflow||t.ciInfo?.jobName?(s(),a(U,{key:3},[l[13]||(l[13]=o("span",{class:"text-dimmed"},"·",-1)),o("span",Un,[t.ciInfo?.workflow?(s(),a(U,{key:0},[f(c(t.ciInfo.workflow),1)],64)):i("",!0),t.ciInfo?.workflow&&t.ciInfo?.jobName?(s(),a(U,{key:1},[f(" · ")],64)):i("",!0),t.ciInfo?.jobName?(s(),a(U,{key:2},[f(c(t.ciInfo.jobName),1)],64)):i("",!0)])],64)):i("",!0)]),_:1})):i("",!0),t.browser?(s(),v(S,{key:2,label:"Browser"},{default:u(()=>[r(D,{browser:{...t.browser,viewport:void 0},size:"sm"},null,8,["browser"]),t.browser.viewport?(s(),a("span",Bn,[f(c(t.browser.viewport.width)+"×"+c(t.browser.viewport.height)+" ",1),t.browser.deviceScaleFactor&&t.browser.deviceScaleFactor!==1?(s(),a("span",Fn,"@"+c(t.browser.deviceScaleFactor)+"x",1)):i("",!0)])):i("",!0)]),_:1})):i("",!0),r(S,{label:"Links",icon:"i-lucide-link"},{default:u(()=>[t.testCase?.id?(s(),v(G,{key:0,"entity-type":"test_case","entity-id":t.testCase.id,links:t.stableLinks??null,onUpdated:l[0]||(l[0]=E=>n.$emit("refresh"))},null,8,["entity-id","links"])):i("",!0)]),_:1})]),_:1})]),default:u(()=>[o("div",xn,[o("div",vn,[r(d,{status:t.testCase?.status??"",class:"mt-0.5"},null,8,["status"]),o("div",_n,[o("div",kn,[o("h2",bn,c(t.testCase?.title),1),(s(!0),a(U,null,te(e(h),E=>(s(),v(b,{key:E.label,color:E.color,variant:"subtle",size:"xs",title:E.title},{default:u(()=>[f(c(E.label),1)]),_:2},1032,["color","title"]))),128)),(s(!0),a(U,null,te(e(w),(E,ue)=>(s(),v(b,{key:`ann-${ue}`,color:"neutral",variant:"soft",size:"xs",class:"font-mono",title:E.description||E.type},{default:u(()=>[f(" @"+c(E.type),1)]),_:2},1032,["title"]))),128)),r(x,{tags:t.testCase?.tags,meta:t.testCase?.testMeta},null,8,["tags","meta"])]),o("p",wn,[t.testCase?.location?(s(),v(V,{key:0,location:t.testCase.location,"project-key":t.projectKey,"project-name":t.projectName},null,8,["location","project-key","project-name"])):i("",!0),r(M,null,{default:u(()=>[e($)?(s(),a("span",{key:0,class:"text-gray-400",title:new Date(e($)).toLocaleString()}," started "+c(("formatRelativeTime"in n?n.formatRelativeTime:e(Se))(e($))),9,$n)):i("",!0)]),_:1}),t.historicalTiming?(s(),a("span",Cn,[l[6]||(l[6]=f(" Avg ",-1)),r(P,{ms:t.historicalTiming.avg},null,8,["ms"]),l[7]||(l[7]=f(" · ",-1)),o("span",{class:Z(t.historicalTiming.diff>0?"text-red-600":"text-green-600")},c(t.historicalTiming.diff>0?"+":"")+c(t.historicalTiming.pct)+"% ",3)])):i("",!0)])])]),r(j,null,{default:u(()=>[r(m,{label:"Duration"},{default:u(()=>[r(P,{ms:t.testCase?.duration},null,8,["ms"])]),_:1}),r(m,{label:"Retries",value:t.testCase?.retries??0},null,8,["value"]),r(m,{label:"Steps",value:t.stepsCount},null,8,["value"]),r(m,{label:"Worker",value:t.testCase?.workerIndex??"—"},null,8,["value"])]),_:1}),t.testCase?.slowestStep?(s(),a("div",Tn,[r(F,{name:"i-lucide-zap",class:"size-4 text-amber-500 shrink-0"}),l[10]||(l[10]=o("span",{class:"font-medium text-amber-700 dark:text-amber-300"},"Slowest step:",-1)),o("span",Sn,c(t.testCase.slowestStep),1),t.testCase.slowestStepDuration?(s(),a("span",In,[l[8]||(l[8]=f("(",-1)),r(P,{ms:t.testCase.slowestStepDuration},null,8,["ms"]),l[9]||(l[9]=f(")",-1))])):i("",!0)])):i("",!0),(t.testCase?.wastedTimeMs??0)>0?(s(),a("div",Rn,[r(F,{name:"i-lucide-hourglass",class:"size-4 text-amber-500 shrink-0"}),l[11]||(l[11]=o("span",{class:"font-medium text-amber-700 dark:text-amber-300"},"Wasted in fixed waits:",-1)),r(P,{ms:t.testCase?.wastedTimeMs,class:"text-gray-700 dark:text-gray-300"},null,8,["ms"]),r(B,{topic:"case.wasted-time"})])):i("",!0)])]),_:1})])]),_:1})}}}),En=Object.assign(Vn,{__name:"TestCaseSummary"}),On={class:"space-y-3"},Hn={key:0,class:"flex flex-wrap gap-1.5"},Kn={key:0,class:"text-sm text-gray-600 dark:text-gray-400"},Wn={class:"text-gray-800 dark:text-gray-200"},Gn={key:1},Jn={class:"flex items-center gap-1 flex-wrap"},qn=re({__name:"TestCaseVerdictCard",props:{testCase:{},history:{},currentId:{}},setup(t){const _=t,h=l=>l==="failed"||l==="timedOut"||l==="timedout",w=C(()=>{const l=_.testCase;if(!l)return[];const d=[];return l.isNewRegression&&d.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"}),l.isNewFlaky&&d.push({label:"New flaky",color:"warning",icon:"i-lucide-shuffle",title:"Newly started passing only on retry — intermittent failure"}),l.status==="timedOut"&&d.push({label:"Timed out",color:"warning",icon:"i-lucide-timer-off",title:"The test exceeded its timeout"}),(l.retries??0)>0&&d.push({label:l.status==="passed"?`Passed on retry ${l.retries}`:`Retried ${l.retries}×`,color:l.status==="passed"?"warning":"neutral",icon:"i-lucide-refresh-cw",title:`This execution retried ${l.retries} time${l.retries===1?"":"s"}`}),d}),$=C(()=>_.history.slice(0,24).slice().reverse()),g=C(()=>{const l=_.history;if(!l.length)return null;const d=Math.max(0,l.findIndex(b=>b.id===_.currentId));let P=0;for(let b=d;b<l.length&&h(l[b].status);b++)P++;let D=null;for(let b=d+1;b<l.length;b++)if(l[b].status==="passed"){D=l[b];break}return{streak:P,lastPass:D,total:l.length,anchorFailing:h(l[d]?.status)}}),n=l=>({"bg-red-500 hover:bg-red-600":h(l),"bg-green-500 hover:bg-green-600":l==="passed","bg-yellow-500 hover:bg-yellow-600":l==="skipped","bg-gray-400 hover:bg-gray-500":!h(l)&&!["passed","skipped"].includes(l)});return(l,d)=>{const P=ce,D=pe,b=Pe,x=$t,V=pt,M=ye;return s(),v(M,{icon:"i-lucide-clipboard-check","icon-class":"text-amber-500",title:"Verdict",help:"case.verdict"},{default:u(()=>[o("div",On,[e(w).length?(s(),a("div",Hn,[(s(!0),a(U,null,te(e(w),m=>(s(),v(D,{key:m.label,color:m.color,variant:"subtle",size:"sm",title:m.title,class:"inline-flex items-center gap-1"},{default:u(()=>[r(P,{name:m.icon,class:"size-3 shrink-0"},null,8,["name"]),f(" "+c(m.label),1)]),_:2},1032,["color","title"]))),128))])):i("",!0),r(V,null,{default:u(()=>[e(g)?(s(),a("p",Kn,[e(g).streak>=1?(s(),a(U,{key:0},[d[1]||(d[1]=f(" Failing for ",-1)),o("strong",Wn,c(e(g).streak),1),f(" consecutive run"+c(e(g).streak===1?"":"s")+". ",1),e(g).lastPass?(s(),a(U,{key:0},[d[0]||(d[0]=f(" Last passed in ",-1)),r(b,{to:`/test-run-cases/${e(g).lastPass.id}`,class:"text-primary hover:underline"},{default:u(()=>[f(" run #"+c(e(g).lastPass.runId),1)]),_:1},8,["to"]),f(" ("+c(("formatRelativeTime"in l?l.formatRelativeTime:e(Se))(e(g).lastPass.startTime))+"). ",1)],64)):e(g).total>1?(s(),a(U,{key:1},[f(" No passing run in the last "+c(e(g).total)+" recorded. ",1)],64)):(s(),a(U,{key:2},[f(" First recorded run of this test. ")],64))],64)):t.testCase?.status==="passed"?(s(),a(U,{key:1},[f(" This execution passed. ")],64)):i("",!0)])):i("",!0),e($).length>1?(s(),a("div",Gn,[d[2]||(d[2]=o("p",{class:"text-xs text-gray-400 mb-1"},"Recent runs (oldest → newest)",-1)),o("div",Jn,[(s(!0),a(U,null,te(e($),m=>(s(),v(x,{key:m.id,text:`Run #${m.runId}: ${m.status}`},{default:u(()=>[r(b,{to:`/test-run-cases/${m.id}`,class:Z(["size-3.5 rounded-sm inline-block transition-colors",[n(m.status),m.id===t.currentId?"ring-2 ring-offset-1 ring-primary":""]])},null,8,["to","class"])]),_:2},1032,["text"]))),128))])])):i("",!0)]),_:1})])]),_:1})}}}),Qn=Object.assign(qn,{__name:"TestCaseVerdictCard"}),Zn={class:"space-y-3"},Xn={class:"space-y-1.5"},Yn={class:"flex items-center gap-2 flex-wrap"},ea={class:"text-xs text-gray-500"},ta=["title"],sa={class:"text-xs text-gray-500 dark:text-gray-400"},na={key:0,class:"rounded-lg border border-default bg-elevated/40 p-2.5 space-y-1"},aa={class:"flex items-center gap-1.5 flex-wrap"},oa={class:"text-xs text-gray-600 dark:text-gray-400 line-clamp-3"},ra=["title"],ia=re({__name:"FailureClusterCard",props:{cluster:{}},setup(t){const _=t,h=C(()=>Math.max(0,_.cluster.sameRunCaseCount-1)),w=C(()=>{const g=_.cluster.diagnosis;return g&&g.status==="completed"&&g.summary?g:null}),$=g=>g==="high"?"success":g==="medium"?"warning":"neutral";return(g,n)=>{const l=pe,d=Pe,P=ce,D=Ie,b=ye;return s(),v(b,{icon:"i-lucide-layers","icon-class":"text-primary",title:"Failure cluster",help:"cluster.concept"},{actions:u(()=>[t.cluster.isNew?(s(),v(l,{key:0,color:"warning",variant:"subtle",size:"sm"},{default:u(()=>[...n[0]||(n[0]=[f("New",-1)])]),_:1})):i("",!0),t.cluster.status&&t.cluster.status!=="open"?(s(),v(l,{key:1,color:t.cluster.status==="resolved"?"success":"neutral",variant:"subtle",size:"sm",class:"capitalize"},{default:u(()=>[f(c(t.cluster.status),1)]),_:1},8,["color"])):i("",!0)]),default:u(()=>[o("div",Zn,[o("div",Xn,[o("div",Yn,[t.cluster.errorType?(s(),v(l,{key:0,color:e(Ks)(t.cluster.errorType),variant:"soft",size:"sm"},{default:u(()=>[f(c(t.cluster.errorType),1)]),_:1},8,["color"])):i("",!0),o("span",ea,c(t.cluster.occurrences??0)+" occurrence"+c((t.cluster.occurrences??0)===1?"":"s"),1)]),o("p",{class:"font-mono text-xs text-gray-600 dark:text-gray-400 break-all line-clamp-2",title:t.cluster.signature},c(t.cluster.signature),9,ta)]),o("p",sa,[e(h)>0?(s(),a(U,{key:0},[f(" Matches "+c(e(h))+" other failing "+c(e(h)===1?"test":"tests")+" in this run. ",1)],64)):i("",!0),t.cluster.isNew?(s(),a(U,{key:2},[f("Opened a new cluster in this run.")],64)):(s(),a(U,{key:1},[n[1]||(n[1]=f(" Known failure — first seen in ",-1)),r(d,{to:`/test-runs/${t.cluster.firstSeenRunId}`,class:"text-primary hover:underline"},{default:u(()=>[f(" run #"+c(t.cluster.firstSeenRunId),1)]),_:1},8,["to"]),t.cluster.firstSeenAt?(s(),a(U,{key:0},[f(" ("+c(("formatRelativeTime"in g?g.formatRelativeTime:e(Se))(t.cluster.firstSeenAt))+")",1)],64)):i("",!0),n[2]||(n[2]=f(". ",-1))],64))]),e(w)?(s(),a("div",na,[o("div",aa,[r(P,{name:"i-lucide-sparkles",class:"size-3.5 text-primary shrink-0"}),n[3]||(n[3]=o("span",{class:"text-xs font-medium"},"AI verdict",-1)),e(w).category?(s(),v(l,{key:0,color:"neutral",variant:"soft",size:"xs"},{default:u(()=>[f(c(e(w).category),1)]),_:1})):i("",!0),e(w).confidence?(s(),v(l,{key:1,color:$(e(w).confidence),variant:"soft",size:"xs"},{default:u(()=>[f(c(e(w).confidence)+" confidence ",1)]),_:1},8,["color"])):i("",!0)]),o("p",oa,c(e(w).summary),1)])):i("",!0),t.cluster.triageNote?(s(),a("p",{key:1,class:"text-xs italic text-gray-500 dark:text-gray-400",title:t.cluster.triageNote}," “"+c(t.cluster.triageNote)+"” ",9,ra)):i("",!0),r(D,{to:`/failure-clusters/${t.cluster.id}`,size:"sm",color:"primary",variant:"solid",block:"","trailing-icon":"i-lucide-arrow-right"},{default:u(()=>[...n[4]||(n[4]=[f(" Open cluster investigation ",-1)])]),_:1},8,["to"])])]),_:1})}}}),la=Object.assign(ia,{__name:"FailureClusterCard"}),ca={class:"space-y-3"},ua={class:"text-xs text-gray-400 inline-flex items-center gap-1"},da={key:0,class:"text-primary"},ma={key:0,class:"flex items-center justify-between gap-2 rounded-lg border border-default bg-elevated/40 p-2.5"},fa={class:"inline-flex items-center gap-2 text-sm text-gray-500"},ga={key:1,class:"flex items-center gap-2"},pa={key:2,class:"rounded-lg border border-dashed border-default p-4 text-center text-gray-400"},ya={class:"text-sm inline-flex items-center gap-1 justify-center"},ha={class:"pt-1 text-center"},xa=re({__name:"TestCaseAiCard",props:{testRunsCaseId:{}},setup(t){const _=t,{aiStatus:h}=Qs(),w=ss(),$=A(null),g=A(!1),n=A(null),l=A([]),d=A(0),P=A(0),D=A(null),b=A(!1),x=A(!1),V=A(null),M=A(!1),m=A("");async function j(){b.value=!0;try{const k=await $fetch(`/api/test-run-cases/${_.testRunsCaseId}/diagnosis-context`,{query:{format:"json"}});n.value=k.text,l.value=k.sections,d.value=k.tokenEstimate,P.value=k.imageTokenEstimate??0,D.value=k.coverage}catch{n.value=null,l.value=[],d.value=0,D.value=null}finally{b.value=!1}}async function F(){try{const k=await $fetch(`/api/test-run-cases/${_.testRunsCaseId}/diagnosis`);$.value=k.diagnosis}catch{}}yt(()=>{F(),j()});const B=C(()=>{const k=$.value?.details;if(!k)return[];const L=[];if(Array.isArray(k.evidence)&&L.push(...k.evidence),Array.isArray(k.hypotheses))for(const ae of k.hypotheses)Array.isArray(ae?.evidence)&&L.push(...ae.evidence);return Es(L)});function S(k){V.value=k,x.value=!0}function G(k){m.value=m.value?`${m.value}
2
+
3
+ ${k}`:k,M.value=!0}async function q(k=!1){g.value=!0;try{const L=k?`/api/test-run-cases/${_.testRunsCaseId}/diagnose?force=true`:`/api/test-run-cases/${_.testRunsCaseId}/diagnose`,ae=m.value.trim()?{additionalContext:m.value.trim()}:void 0;$.value=await $fetch(L,{method:"POST",body:ae})}catch(L){const ae=L?.statusCode;ae===409?(w.add({title:"Diagnosis already running",color:"warning"}),F()):ae===503?w.add({title:"AI diagnosis is not configured",color:"warning"}):w.add({title:"Diagnosis failed",description:Ws(L),color:"error"})}finally{g.value=!1}}function z(k){return k.status==="running"&&Date.now()-new Date(k.updatedAt).getTime()>300*1e3}const ne=C(()=>$.value&&($.value.status==="completed"||$.value.status==="failed")),E=C(()=>!$.value||$.value.status==="failed"||$.value.status==="running"&&z($.value)),ue=C(()=>$.value?.status==="running"&&!z($.value)&&!g.value);return(k,L)=>{const ae=Vs,y=ce,T=Us,H=qs,J=Ie,X=Bs,Y=_t,K=Fs,Q=Pe,ee=ye;return s(),v(ee,{icon:"i-lucide-sparkles","icon-class":"text-primary",title:"AI diagnosis",help:"case.ai"},{actions:u(()=>[r(ae,{"context-endpoint":`/api/test-run-cases/${t.testRunsCaseId}/diagnosis-context`},null,8,["context-endpoint"])]),default:u(()=>[o("div",ca,[o("p",ua,[r(y,{name:"i-lucide-triangle-alert",class:"size-3 shrink-0"}),L[6]||(L[6]=f(" AI-generated — verify before applying. ",-1))]),e(h)?.configured?(s(),v(T,{key:0,sections:e(l),"not-applicable":e(D)?.notApplicable,"token-estimate":e(d),loading:e(b),onViewSection:S,onOpen:L[0]||(L[0]=se=>x.value=!0)},null,8,["sections","not-applicable","token-estimate","loading"])):i("",!0),e(h)?.configured?(s(),a(U,{key:1},[o("div",null,[o("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:L[1]||(L[1]=se=>M.value=!e(M))},[r(y,{name:e(M)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5"},null,8,["name"]),L[7]||(L[7]=f(" Additional context ",-1)),e(m).trim()?(s(),a("span",da,"(1)")):i("",!0)]),e(M)?(s(),v(H,{key:0,modelValue:e(m),"onUpdate:modelValue":L[2]||(L[2]=se=>ge(m)?m.value=se:null),placeholder:"e.g. We deployed a new auth middleware yesterday…",rows:3,class:"w-full text-sm mt-1"},null,8,["modelValue"])):i("",!0)]),e(ue)?(s(),a("div",ma,[o("span",fa,[r(y,{name:"i-lucide-loader-circle",class:"size-4 animate-spin text-primary shrink-0"}),L[8]||(L[8]=f(" Diagnosis in progress… ",-1))]),r(J,{size:"xs",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",loading:e(g),onClick:F},{default:u(()=>[...L[9]||(L[9]=[f(" Refresh ",-1)])]),_:1},8,["loading"])])):(s(),a("div",ga,[e(E)?(s(),v(J,{key:0,icon:"i-lucide-sparkles",size:"sm",color:"primary",variant:"solid",loading:e(g),onClick:L[3]||(L[3]=se=>q(e($)?.status==="running"))},{default:u(()=>[f(c(e($)?.status==="running"?"Restart diagnosis":"Diagnose with AI"),1)]),_:1},8,["loading"])):e($)?.status==="completed"?(s(),v(J,{key:1,icon:"i-lucide-refresh-cw",size:"xs",color:"primary",variant:"soft",loading:e(g),onClick:L[4]||(L[4]=se=>q(!0))},{default:u(()=>[...L[10]||(L[10]=[f(" Re-diagnose ",-1)])]),_:1},8,["loading"])):i("",!0)])),e(ne)?(s(),v(X,{key:2,diagnosis:e($),onViewSection:S,onPrefillContext:G},null,8,["diagnosis"])):i("",!0)],64)):(s(),a("div",pa,[o("p",ya,[L[11]||(L[11]=f(" AI diagnosis is not configured ",-1)),r(Y,{topic:"cluster.ai-setup"})]),L[13]||(L[13]=o("p",{class:"text-xs mt-2 max-w-xs mx-auto"},[f(" Use "),o("strong",null,"Export → AI context"),f(" in the header to grab the full evidence bundle for your own AI tool, or configure a provider. ")],-1)),r(J,{to:"/settings/ai",size:"xs",color:"neutral",variant:"outline",class:"mt-3"},{default:u(()=>[...L[12]||(L[12]=[f(" Configure in Settings ",-1)])]),_:1})])),r(K,{open:e(x),sections:e(l),"token-estimate":e(d),"image-token-estimate":e(P),loading:e(b),"focus-section":e(V),"cited-sections":e(B),"not-applicable-sections":e(D)?.notApplicable,"onUpdate:open":L[5]||(L[5]=se=>{x.value=se,se||(V.value=null)}),onRefresh:j},null,8,["open","sections","token-estimate","image-token-estimate","loading","focus-section","cited-sections","not-applicable-sections"]),o("div",ha,[r(Q,{to:"/mcp",class:"inline-flex items-center gap-1 text-xs text-gray-400 hover:text-primary transition-colors"},{default:u(()=>[r(y,{name:"i-lucide-bot",class:"size-3"}),L[14]||(L[14]=f(" Query this failure from your AI agent via MCP ",-1))]),_:1})])])]),_:1})}}}),va=Object.assign(xa,{__name:"TestCaseAiCard"});function Tt(t,_,h){const w=A(null),$=A(!1),g=A(!1);async function n(){const l=t();if(!(!l||!$e(_)||$.value)){g.value=!0,$.value=!0;try{w.value=await $fetch(l)}catch{w.value=null}finally{$.value=!1}}}return yt(()=>{xe(()=>$e(_),l=>{l&&(h||g.value)&&!w.value&&n()},{immediate:!0})}),{data:w,pending:$,load:n}}function _a(t,_,h,w={}){return Tt(()=>{const $=$e(t),g=$e(_);return $&&g?`/api/test-runs/${$}/cases/${g}/trace-stacks`:null},h,w.auto??!0)}function ka(t,_,h,w={}){return Tt(()=>{const $=$e(t),g=$e(_);return $&&g?`/api/test-runs/${$}/cases/${g}/trace-network`:null},h,w.auto??!1)}const ba={class:"max-h-[32rem] overflow-y-auto"},wa={key:0,class:"mb-2 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},$a={key:0,class:"mt-3 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},Ca=re({__name:"TestSourceCard",props:{frames:{},testSource:{},runId:{},testRunsCaseId:{},hasTrace:{type:Boolean},projectKey:{},projectName:{},storageKey:{}},setup(t,{expose:_}){const h=t,{data:w,pending:$}=_a(()=>h.runId,()=>h.testRunsCaseId,()=>h.hasTrace,{auto:!0}),g=C(()=>w.value?.status==="ok"?w.value.frames??[]:[]),n=C(()=>g.value.length>0),l=C(()=>h.frames?.length??0),d=C(()=>l.value>0||!!h.testSource),P=A(null),D=C({get:()=>P.value??(n.value?"trace":"captured"),set:M=>{P.value=M}}),b=C(()=>[{label:`Full stack (${g.value.length})`,value:"trace"},{label:`Captured (${l.value||1})`,value:"captured"}]),x=C(()=>D.value==="trace"&&n.value?g.value.length:l.value||null),V=A(null);return _({reveal:()=>V.value?.reveal()}),(M,m)=>{const j=Ge,F=ce,B=cs,S=us,G=bt,q=Je,z=kt,ne=He;return s(),v(ne,{ref_key:"card",ref:V,"storage-key":t.storageKey,icon:"i-lucide-code",count:e(x),title:"Test source",help:"case.test-source"},ns({folded:u(()=>[e(D)==="trace"&&e(n)?(s(),a(U,{key:0},[f(" Full call stack from the trace"+c(e(w)?.hasSources===!1?" (recorded without sources)":""),1)],64)):e(l)>1?(s(),a(U,{key:1},[f(" The failing line and "+c(e(l)-1)+" caller"+c(e(l)-1===1?"":"s"),1)],64)):(s(),a(U,{key:2},[f("Source around the failing assertion")],64))]),default:u(()=>[o("div",ba,[e(D)==="trace"&&e(n)?(s(),a(U,{key:0},[e(w)?.hasSources===!1?(s(),a("p",wa,[r(F,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),m[1]||(m[1]=f(" Trace recorded without sources — frame list only. ",-1))])):i("",!0),r(B,{frames:e(g),"project-key":t.projectKey,"project-name":t.projectName},null,8,["frames","project-key","project-name"])],64)):(s(),a(U,{key:1},[t.frames?.length?(s(),v(S,{key:0,frames:t.frames,"project-key":t.projectKey,"project-name":t.projectName},null,8,["frames","project-key","project-name"])):t.testSource?(s(),v(G,{key:1,text:"```typescript\n"+t.testSource+"\n```"},null,8,["text"])):t.hasTrace&&e($)?(s(),v(q,{key:2,text:"Loading call stack from trace…"})):i("",!0)],64))]),t.hasTrace?i("",!0):(s(),a("p",$a,[r(F,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),o("span",null,[m[3]||(m[3]=f(" Want to go deeper? Record traces (",-1)),m[4]||(m[4]=o("code",null,"trace: 'retain-on-failure'",-1)),m[5]||(m[5]=f(") to see the full call stack with source here. ",-1)),r(z,{to:"ui-overview#trace-powered-deep-views","no-icon":"",class:"underline"},{default:u(()=>[...m[2]||(m[2]=[f("Learn more",-1)])]),_:1})])]))]),_:2},[e(n)&&e(d)?{name:"actions",fn:u(()=>[r(j,{modelValue:e(D),"onUpdate:modelValue":m[0]||(m[0]=E=>ge(D)?D.value=E:null),items:e(b),size:"xs",variant:"link",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"])]),key:"0"}:void 0]),1032,["storage-key","count"])}}}),Ta=Object.assign(Ca,{__name:"TestSourceCard"}),Sa={class:"space-y-3"},Ia={class:"divide-y divide-default"},Ra={class:"flex items-center gap-2 min-w-0"},ja={class:"text-sm truncate"},La={key:0,class:"text-xs text-gray-400 shrink-0"},za=re({__name:"TestCaseEvidenceCard",props:{attachments:{},traces:{},storageKey:{}},setup(t,{expose:_}){const h=t,w=Oe(),$=C(()=>h.attachments.filter(x=>Te(x.path,x.contentType)).length),g=C(()=>h.attachments.filter(x=>De(x.path,x.contentType)).length),n=C(()=>h.attachments.filter(x=>!Te(x.path,x.contentType)&&!De(x.path,x.contentType))),l=C(()=>$.value+g.value+h.traces.length+n.value.length),d=C(()=>{const x=[];return $.value&&x.push(`${$.value} screenshot${$.value===1?"":"s"}`),g.value&&x.push(`${g.value} video${g.value===1?"":"s"}`),h.traces.length&&x.push(`${h.traces.length} trace${h.traces.length===1?"":"s"}`),n.value.length&&x.push(`${n.value.length} file${n.value.length===1?"":"s"}`),x.join(" · ")||"No evidence captured"});function P(x,V){return wt(x,V,w.app?.baseURL)}function D(x){return x.split("/").pop()||x}const b=A(null);return _({reveal:()=>b.value?.reveal?.()}),(x,V)=>{const M=ds,m=ms,j=fs,F=ce,B=Ie,S=gs,G=Ct,q=He;return s(),v(q,{ref_key:"card",ref:b,"storage-key":t.storageKey,icon:"i-lucide-camera",title:"Failure evidence",count:e(l),help:"case.evidence"},{folded:u(()=>[f(c(e(d)),1)]),default:u(()=>[o("div",Sa,[r(M,{attachments:t.attachments},null,8,["attachments"]),r(m,{attachments:t.attachments},null,8,["attachments"]),r(j,{traces:t.traces},null,8,["traces"]),e(n).length?(s(),v(S,{key:0,icon:"i-lucide-paperclip",label:"Attachments",count:e(n).length,collapsible:!1},{default:u(()=>[o("div",Ia,[(s(!0),a(U,null,te(e(n),z=>(s(),a("div",{key:z.id,class:"flex items-center justify-between gap-2 px-3 py-2"},[o("div",Ra,[r(F,{name:"i-lucide-file",class:"size-4 text-gray-400 shrink-0"}),o("span",ja,c(D(z.path)),1),z.size?(s(),a("span",La,c(("formatBytes"in x?x.formatBytes:e(we))(z.size)),1)):i("",!0)]),r(B,{to:P(z.path,z.contentType),target:"_blank",icon:"i-lucide-external-link",size:"xs",color:"neutral",variant:"soft",label:"Open"},null,8,["to"])]))),128))])]),_:1},8,["count"])):i("",!0),e(l)===0?(s(),v(G,{key:1,icon:"i-lucide-camera-off",title:"No screenshots, video or traces captured",text:"Evidence comes from Playwright's own capture settings — set trace, screenshot and video in your config (trace: 'retain-on-failure' is the usual starting point).",doc:"reporter"})):i("",!0)])]),_:1},8,["storage-key","count"])}}}),Ma=Object.assign(za,{__name:"TestCaseEvidenceCard"}),Na={class:"space-y-1 max-h-80 overflow-y-auto"},Da={class:"min-w-0 flex-1"},Pa={class:"flex items-center gap-2"},Aa={class:"truncate"},Ua={key:0,class:"text-xs text-gray-400 mt-0.5 ml-0"},Ba=re({__name:"TestCaseConsoleCard",props:{entries:{}},setup(t){function _(w){switch(w){case"error":return"error";case"warning":return"warning";case"assert":return"error";default:return"neutral"}}function h(w){switch(w){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(w,$)=>{const g=ce,n=pe,l=ye;return t.entries.length>0?(s(),v(l,{key:0,icon:"i-lucide-terminal",title:"Console output",count:t.entries.length,help:"case.console"},{default:u(()=>[o("div",Na,[(s(!0),a(U,null,te(t.entries,(d,P)=>(s(),a("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"},[r(g,{name:h(d.type),class:Z([d.type==="error"||d.type==="assert"?"text-red-500":d.type==="warning"?"text-amber-500":"text-gray-400","size-4 mt-0.5 shrink-0"])},null,8,["name","class"]),o("div",Da,[o("div",Pa,[r(n,{color:_(d.type),variant:"soft",size:"xs",class:"shrink-0"},{default:u(()=>[f(c(d.type),1)]),_:2},1032,["color"]),o("span",Aa,c(d.text),1)]),d.location?(s(),a("div",Ua,c(d.location),1)):i("",!0)])]))),128))])]),_:1},8,["count"])):i("",!0)}}}),Fa=Object.assign(Ba,{__name:"TestCaseConsoleCard"}),Va={key:0,class:"space-y-4 text-sm"},Ea={class:"space-y-1.5"},Oa={class:"flex items-center gap-2"},Ha={key:0,class:"text-xs text-gray-500"},Ka={class:"block text-xs break-all text-gray-700 dark:text-gray-300"},Wa={key:0,class:"text-xs text-red-600 dark:text-red-400 font-mono"},Ga={class:"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-gray-400"},Ja={key:0,class:"font-mono"},qa={key:1,class:"font-mono"},Qa={key:2},Za={key:3,title:"Bytes on the wire"},Xa={key:0},Ya={class:"flex h-2 rounded overflow-hidden bg-gray-100 dark:bg-gray-800"},eo=["title"],to={class:"flex flex-wrap gap-x-3 gap-y-1 mt-1.5 text-xs text-gray-500"},so={class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5 capitalize"},no={key:0,class:"rounded border border-default divide-y divide-default max-h-48 overflow-y-auto"},ao={class:"text-gray-500 dark:text-gray-400 shrink-0"},oo={class:"break-all text-gray-700 dark:text-gray-300"},ro={key:1,class:"text-xs text-gray-400"},io={key:1},lo={key:0,class:"rounded border border-default p-2"},co=["src","alt"],uo={key:1,class:"max-h-96 overflow-y-auto"},mo={key:0,class:"mt-1 text-xs text-gray-400"},fo={key:2,class:"text-xs text-gray-400"},go={key:2,class:"text-xs text-gray-400"},po=re({__name:"TraceNetworkDrawer",props:{open:{type:Boolean},entry:{},runId:{},testRunsCaseId:{}},emits:["update:open"],setup(t,{emit:_}){const h=t,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 b=h.entry?.timings;return b?$.map(x=>({...x,value:b[x.key]??-1})).filter(x=>typeof x.value=="number"&&x.value>=0):[]}),n=C(()=>g.value.reduce((b,x)=>b+x.value,0)),l=C(()=>{const b=h.entry?.requestPostData??"";return b.startsWith("{")||b.startsWith("[")}),d=A(null),P=A(!1),D=new Map;return xe(()=>[h.open,h.entry?.bodySha1],async([b,x])=>{if(d.value=null,!b||!x||!h.runId)return;const V=D.get(x);if(V){d.value=V;return}P.value=!0;try{const M=await $fetch(`/api/test-runs/${h.runId}/cases/${h.testRunsCaseId}/trace-network-body`,{query:{sha1:x}});D.set(x,M),d.value=M}catch{d.value={status:"not-found"}}finally{P.value=!1}},{immediate:!0}),(b,x)=>{const V=pe,M=Re,m=Zs,j=Je,F=Xs;return s(),v(F,{open:t.open,title:"Request detail",ui:{content:"max-w-xl"},"onUpdate:open":x[0]||(x[0]=B=>w("update:open",B))},{body:u(()=>[t.entry?(s(),a("div",Va,[o("div",Ea,[o("div",Oa,[r(V,{color:("httpMethodColor"in b?b.httpMethodColor:e(Ke))(t.entry.method),variant:"soft",size:"sm",class:"font-mono shrink-0"},{default:u(()=>[f(c(t.entry.method),1)]),_:1},8,["color"]),r(V,{color:("httpStatusColor"in b?b.httpStatusColor:e(We))(t.entry.status),variant:"soft",size:"sm",class:"font-mono shrink-0 tabular-nums"},{default:u(()=>[f(c(t.entry.status>0?t.entry.status:"—"),1)]),_:1},8,["color"]),t.entry.statusText?(s(),a("span",Ha,c(t.entry.statusText),1)):i("",!0)]),o("code",Ka,c(t.entry.url),1),t.entry.failureText?(s(),a("p",Wa,c(t.entry.failureText),1)):i("",!0),o("div",Ga,[t.entry.resourceType?(s(),a("span",Ja,c(t.entry.resourceType),1)):i("",!0),t.entry.mimeType?(s(),a("span",qa,c(t.entry.mimeType),1)):i("",!0),t.entry.responseBodySize!=null?(s(),a("span",Qa,c(("formatBytes"in b?b.formatBytes:e(we))(t.entry.responseBodySize)),1)):i("",!0),t.entry.transferSize!=null?(s(),a("span",Za,c(("formatBytes"in b?b.formatBytes:e(we))(t.entry.transferSize))+" transferred",1)):i("",!0),r(M,{ms:t.entry.duration},null,8,["ms"]),t.entry.duringFailure?(s(),v(V,{key:4,color:"error",variant:"subtle",size:"xs"},{default:u(()=>[...x[1]||(x[1]=[f("During failing action",-1)])]),_:1})):i("",!0)])]),e(g).length>0&&e(n)>0?(s(),a("div",Xa,[x[2]||(x[2]=o("p",{class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5"},"Timing",-1)),o("div",Ya,[(s(!0),a(U,null,te(e(g),B=>(s(),a("div",{key:B.key,class:Z(B.color),style:Ce({width:`${Math.max(.5,B.value/e(n)*100)}%`}),title:`${B.label}: ${("formatDuration"in b?b.formatDuration:e(Gs))(B.value)}`},null,14,eo))),128))]),o("div",to,[(s(!0),a(U,null,te(e(g),B=>(s(),a("span",{key:B.key,class:"inline-flex items-center gap-1"},[o("span",{class:Z(["size-2 rounded-full",B.color])},null,2),f(" "+c(B.label)+" ",1),r(M,{ms:B.value,"no-title":""},null,8,["ms"])]))),128))])])):i("",!0),(s(),a(U,null,te(["request","response"],B=>o("div",{key:B},[o("p",so,c(B)+" headers",1),(B==="request"?t.entry.requestHeaders:t.entry.responseHeaders).length>0?(s(),a("div",no,[(s(!0),a(U,null,te(B==="request"?t.entry.requestHeaders:t.entry.responseHeaders,S=>(s(),a("div",{key:`${B}-${S.name}`,class:"px-2 py-1 text-xs font-mono flex gap-2"},[o("span",ao,c(S.name)+":",1),o("span",oo,c(S.value),1)]))),128))])):(s(),a("p",ro,"None recorded."))])),64)),t.entry.requestPostData?(s(),a("div",io,[x[3]||(x[3]=o("p",{class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5"},"Request body",-1)),r(m,{code:t.entry.requestPostData,lang:e(l)?"json":"text"},null,8,["code","lang"])])):i("",!0),o("div",null,[x[4]||(x[4]=o("p",{class:"text-xs font-medium text-gray-500 dark:text-gray-400 mb-1.5"},"Response body",-1)),e(P)?(s(),v(j,{key:0,text:"Loading body…",padded:!1})):e(d)?(s(),a(U,{key:1},[e(d).status==="ok"&&e(d).kind==="image"?(s(),a("div",lo,[o("img",{src:e(d).dataUri,alt:t.entry.url,class:"max-w-full max-h-96"},null,8,co)])):e(d).status==="ok"?(s(),a("div",uo,[r(m,{code:e(d).content??"",lang:e(d).kind==="json"?"json":"text"},null,8,["code","lang"]),e(d).truncated?(s(),a("p",mo,"Preview truncated.")):i("",!0)])):(s(),a("p",fo,c(e(d).status==="too-large"?`Body too large to preview (${("formatBytes"in b?b.formatBytes:e(we))(e(d).size??0)}) — open the trace viewer to inspect it.`:e(d).status==="unsupported"?`No preview for ${e(d).mimeType||"this content type"} — open the trace viewer to inspect it.`:"Body not stored in the trace."),1))],64)):t.entry.bodySha1?i("",!0):(s(),a("p",go,"No body captured for this request."))])])):i("",!0)]),_:1},8,["open"])}}}),yo=Object.assign(po,{__name:"TraceNetworkDrawer"}),ho={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"},vo={class:"space-y-1 max-h-[28rem] overflow-y-auto"},_o=["title","onClick"],ko={class:"flex items-center gap-2 text-sm min-w-0"},bo={class:"truncate text-xs flex-1 min-w-0"},wo={key:0,class:"shrink-0 text-xs text-gray-400 font-mono hidden md:inline"},$o={key:1,class:"shrink-0 text-xs text-gray-400 tabular-nums hidden sm:inline"},Co={class:"relative h-1.5 mt-1 rounded bg-gray-100 dark:bg-gray-800 overflow-hidden"},To={key:0,class:"mt-2 text-xs text-gray-400 dark:text-gray-500"},So=re({__name:"TraceNetworkList",props:{data:{},runId:{},testRunsCaseId:{}},setup(t){const _=t,h=A("all"),w=C(()=>_.data.requests??[]),$=C(()=>({total:w.value.length,failed:w.value.filter(j=>j.failed).length,duringFailure:w.value.filter(j=>j.duringFailure).length})),g=C(()=>[{label:`All (${$.value.total})`,value:"all"},{label:`Failed (${$.value.failed})`,value:"failed",disabled:$.value.failed===0},{label:`During failure (${$.value.duringFailure})`,value:"duringFailure",disabled:$.value.duringFailure===0}]),n=C(()=>h.value==="failed"?w.value.filter(j=>j.failed):h.value==="duringFailure"?w.value.filter(j=>j.duringFailure):w.value);function l(j){try{return new URL(j).pathname||j}catch{return j}}const d=C(()=>Math.max(1,_.data.timelineDuration??1));function P(j){const F=Math.max(0,Math.min(100,j.start/d.value*100)),B=Math.min(100-F,Math.max(1.5,j.duration/d.value*100));return{left:`${F}%`,width:`${B}%`}}const D=C(()=>{const j=_.data.failingWindow;if(!j||j.end<=j.start)return null;const F=Math.max(0,Math.min(100,j.start/d.value*100)),B=Math.max(.5,Math.min(100-F,(j.end-j.start)/d.value*100));return{left:`${F}%`,width:`${B}%`}});function b(j){return j.failed?"bg-red-500":j.duration>1e3?"bg-orange-400":"bg-gray-400 dark:bg-gray-500"}function x(j){return j.failed?"border-l-2 border-l-red-400 dark:border-l-red-600":j.duringFailure?"border-l-2 border-l-amber-400 dark:border-l-amber-600":"border-l-2 border-l-transparent"}const V=A(null),M=A(!1);function m(j){V.value=j,M.value=!0}return(j,F)=>{const B=Ge,S=pe,G=Re,q=yo;return s(),a("div",null,[o("div",ho,[r(B,{modelValue:e(h),"onUpdate:modelValue":F[0]||(F[0]=z=>ge(h)?h.value=z:null),items:e(g),size:"xs",variant:"link",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"]),t.data.failingWindow?(s(),a("span",xo,[...F[2]||(F[2]=[o("span",{class:"inline-block w-3 h-2 rounded-sm bg-red-500/10 border border-red-300 dark:border-red-800"},null,-1),f(" failing action ",-1)])])):i("",!0)]),o("div",vo,[(s(!0),a(U,null,te(e(n),z=>(s(),a("button",{key:z.index,type:"button",class:Z([x(z),"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:z.url,onClick:ne=>m(z)},[o("div",ko,[r(S,{color:("httpMethodColor"in j?j.httpMethodColor:e(Ke))(z.method),variant:"soft",size:"xs",class:"font-mono shrink-0"},{default:u(()=>[f(c(z.method),1)]),_:2},1032,["color"]),r(S,{color:("httpStatusColor"in j?j.httpStatusColor:e(We))(z.status),variant:"soft",size:"xs",class:"font-mono shrink-0 tabular-nums",title:z.failureText||z.statusText},{default:u(()=>[f(c(z.status>0?z.status:"—"),1)]),_:2},1032,["color","title"]),o("code",bo,c(l(z.url)),1),z.resourceType?(s(),a("span",wo,c(z.resourceType),1)):i("",!0),z.responseBodySize!=null?(s(),a("span",$o,c(("formatBytes"in j?j.formatBytes:e(we))(z.responseBodySize)),1)):i("",!0),o("span",{class:Z(["ml-1 shrink-0 text-xs tabular-nums",z.duration>1e3?"text-red-600 font-medium":z.duration>500?"text-orange-500":"text-gray-500"])},[r(G,{ms:z.duration,"unit-class":"opacity-60"},null,8,["ms"])],2)]),o("div",Co,[e(D)?(s(),a("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(D))},null,4)):i("",!0),o("div",{class:Z(["absolute inset-y-0 rounded-full",b(z)]),style:Ce(P(z))},null,6)])],10,_o))),128))]),t.data.truncated?(s(),a("p",To," Showing the first "+c(e(w).length)+" of "+c(t.data.totalBeforeCap)+" requests recorded in the trace. ",1)):i("",!0),r(q,{open:e(M),"onUpdate:open":F[1]||(F[1]=z=>ge(M)?M.value=z:null),entry:e(V),"run-id":t.runId,"test-runs-case-id":t.testRunsCaseId},null,8,["open","entry","run-id","test-runs-case-id"])])}}}),Io=Object.assign(So,{__name:"TraceNetworkList"}),Ro={class:"flex flex-wrap items-center gap-x-3 gap-y-1"},jo={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"},No={key:1,class:"space-y-1 max-h-[28rem] overflow-y-auto"},Do=["disabled","onClick"],Po={key:1,class:"size-3.5 shrink-0"},Ao=["title"],Uo=["title"],Bo=["title"],Fo=["title"],Vo=["title"],Eo=["title"],Oo={key:0,class:"px-2 pt-1.5 pb-2 pl-7 space-y-1"},Ho={class:"flex items-center gap-1.5 text-[11px] uppercase tracking-wide text-gray-400"},Ko=["title"],Wo={key:0,class:"shrink-0 text-[10px] uppercase text-gray-400 font-mono hidden sm:inline"},Go={class:"relative flex-1 h-3 rounded bg-gray-100 dark:bg-gray-800 min-w-0"},Jo={key:1,class:"px-2 pb-2 pl-7 space-y-1.5"},qo={class:"flex items-start gap-2"},Qo={key:0,class:"text-gray-400 shrink-0 font-mono"},Zo={class:"font-mono break-all text-gray-700 dark:text-gray-300 flex-1 min-w-0"},Xo=["title"],Yo={key:0,class:"mt-1.5"},er=["onClick"],tr={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"},sr={key:2,class:"mt-3 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},nr={key:3,class:"mt-3 flex items-center gap-1.5 text-xs text-gray-400 dark:text-gray-500"},ar=re({__name:"TestCaseNetworkRequests",props:{requests:{},runId:{},testRunsCaseId:{},hasTrace:{type:Boolean}},setup(t,{expose:_}){const h=t,w=A("all"),{data:$,pending:g,load:n}=ka(()=>h.runId,()=>h.testRunsCaseId,()=>!!h.hasTrace),l=A(null),d=C({get:()=>l.value??(h.requests.length===0&&h.hasTrace?"trace":"captured"),set:y=>{l.value=y}});xe(()=>d.value==="trace",y=>{y&&n()},{immediate:!0});const P=C(()=>$.value?.status==="ok"?$.value.requests?.length??0:null),D=C(()=>[{label:`Captured (${h.requests.length})`,value:"captured",disabled:h.requests.length===0},{label:P.value!=null?`Full trace (${P.value})`:"Full trace",value:"trace"}]);function b(){h.hasTrace&&(l.value="trace")}_({showTraceMode:b});const x=A(new Set);function V(y){const T=new Set(x.value);T.has(y)?T.delete(y):T.add(y),x.value=T}const M=A(new Set);function m(y){const T=new Set(M.value);T.has(y)?T.delete(y):T.add(y),M.value=T}function j(y){if(y.length===0)return[];const T=Math.min(...y.map(K=>K.startMs)),H=Math.max(...y.map(K=>K.startMs+K.durMs)),J=Math.max(1,H-T),X=new Map(y.map(K=>[K.id,K])),Y=K=>{let Q=0,ee=K;const se=new Set;for(;ee?.parentId&&X.has(ee.parentId)&&!se.has(ee.id)&&(se.add(ee.id),ee=X.get(ee.parentId),Q++,!(Q>8)););return Q};return[...y].sort((K,Q)=>K.startMs-Q.startMs||Q.durMs-K.durMs).map(K=>({...K,offsetPct:(K.startMs-T)/J*100,widthPct:Math.max(1.5,K.durMs/J*100),depth:Y(K)}))}function F(y){return y.status==="error"?"bg-red-400 dark:bg-red-500":y.kind==="db"?"bg-violet-400 dark:bg-violet-500":y.kind==="client"?"bg-sky-400 dark:bg-sky-500":y.kind==="internal"?"bg-gray-400 dark:bg-gray-500":"bg-emerald-400 dark:bg-emerald-500"}function B(y){const T=y.toLowerCase();return T==="critical"||T==="fatal"?3:T==="error"?2:T==="warning"||T==="warn"?1:0}function S(y){const T=B(y);if(T>=2)return"error";if(T===1)return"warning";const H=y.toLowerCase();return H==="info"||H==="information"?"info":"neutral"}function G(y){try{return new URL(y).pathname||y}catch{return y}}function q(y){return(y.split("/")[1]??y).replace(/^vnd\.[^+]*\+?/,"").replace(/^x-/,"")||y}function z(y){return y?new Date(y).toLocaleString():""}const ne=C(()=>h.requests.map((y,T)=>{const H=Array.isArray(y.serverLogs)?y.serverLogs:[],J=Array.isArray(y.serverTraces)?y.serverTraces:[];let X=0,Y=0;for(const Q of H){const ee=B(Q.level);ee>=2?X++:ee===1&&Y++}const K=J.find(Q=>!Q.parentId)??J[0];return{...y,_index:T,logs:[...H].sort((Q,ee)=>Q.timestamp-ee.timestamp),spans:J,serverMs:K?K.durMs:null,errorLogCount:X,warnLogCount:Y,failed:y.status>=400,hasDetail:H.length>0||J.length>0,path:G(y.url)}})),E=C(()=>{let y=0,T=0,H=0,J=0,X=0;for(const Y of ne.value)Y.failed&&y++,Y.logs.length>0&&T++,Y.spans.length>0&&H++,J+=Y.errorLogCount,X+=Y.warnLogCount;return{total:ne.value.length,failed:y,withLogs:T,withSpans:H,errorLogs:J,warnLogs:X}}),ue=C(()=>{let y=ne.value;return w.value==="failed"?y=y.filter(T=>T.failed):w.value==="logs"&&(y=y.filter(T=>T.logs.length>0)),[...y].sort((T,H)=>{const J=X=>(X.errorLogCount>0?3:0)+(X.failed?2:0)+(X.logs.length>0?1:0);return J(H)-J(T)||T._index-H._index})}),k=C(()=>[{label:`All (${E.value.total})`,value:"all"},{label:`Failed (${E.value.failed})`,value:"failed",disabled:E.value.failed===0},{label:`With logs (${E.value.withLogs})`,value:"logs",disabled:E.value.withLogs===0}]),L=C(()=>E.value.withLogs>0);function ae(y){return y.errorLogCount>0||y.status>=500?"border-l-2 border-l-red-400 dark:border-l-red-600":y.failed||y.warnLogCount>0?"border-l-2 border-l-amber-400 dark:border-l-amber-600":"border-l-2 border-l-transparent"}return(y,T)=>{const H=ce,J=Ge,X=Je,Y=Io,K=pe,Q=Re,ee=kt,se=ye;return s(),v(se,{icon:"i-lucide-network",title:"Network & backend logs",count:e(d)==="trace"?e(P):e(E).total,help:"case.network"},{actions:u(()=>[o("div",Ro,[e(d)==="captured"?(s(),a(U,{key:0},[e(E).errorLogs>0||e(E).warnLogs>0?(s(),a("div",jo,[e(E).errorLogs>0?(s(),a("span",Lo,[r(H,{name:"i-lucide-octagon-alert",class:"size-3.5"}),f(c(e(E).errorLogs),1)])):i("",!0),e(E).warnLogs>0?(s(),a("span",zo,[r(H,{name:"i-lucide-triangle-alert",class:"size-3.5"}),f(c(e(E).warnLogs),1)])):i("",!0)])):i("",!0),r(J,{modelValue:e(w),"onUpdate:modelValue":T[0]||(T[0]=N=>ge(w)?w.value=N:null),items:e(k),size:"xs",variant:"link",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"])],64)):i("",!0),t.hasTrace?(s(),v(J,{key:1,modelValue:e(d),"onUpdate:modelValue":T[1]||(T[1]=N=>ge(d)?d.value=N:null),items:e(D),size:"xs",variant:"pill",ui:{list:"gap-1 p-0.5",trigger:"px-2"}},null,8,["modelValue","items"])):i("",!0)])]),default:u(()=>[e(d)==="trace"?(s(),a(U,{key:0},[e(g)||!e($)?(s(),v(X,{key:0,text:"Parsing trace network stream…"})):e($).status==="ok"?(s(),v(Y,{key:1,data:e($),"run-id":t.runId??null,"test-runs-case-id":t.testRunsCaseId??0},null,8,["data","run-id","test-runs-case-id"])):(s(),a("p",Mo,"No network activity recorded in this trace."))],64)):(s(),a("div",No,[(s(!0),a(U,null,te(e(ue),N=>(s(),a("div",{key:N._index,class:Z([ae(N),"rounded bg-gray-50/60 dark:bg-gray-800/40"])},[o("button",{type:"button",class:Z(["w-full flex items-center gap-2 py-1.5 px-2 text-sm text-left",N.hasDetail?"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800":"cursor-default"]),disabled:!N.hasDetail,onClick:W=>N.hasDetail&&V(N._index)},[N.hasDetail?(s(),v(H,{key:0,name:e(x).has(N._index)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5 shrink-0 text-gray-400"},null,8,["name"])):(s(),a("span",Po)),r(K,{color:("httpMethodColor"in y?y.httpMethodColor:e(Ke))(N.method),variant:"soft",size:"xs",class:"font-mono shrink-0"},{default:u(()=>[f(c(N.method),1)]),_:2},1032,["color"]),r(K,{color:("httpStatusColor"in y?y.httpStatusColor:e(We))(N.status),variant:"soft",size:"xs",class:"font-mono shrink-0 tabular-nums"},{default:u(()=>[f(c(N.status||"—"),1)]),_:2},1032,["color"]),o("code",{class:"truncate text-xs flex-1 min-w-0",title:N.url},c(N.path),9,Ao),N.contentType?(s(),a("span",{key:2,class:"shrink-0 text-xs text-gray-400 font-mono hidden md:inline",title:`Response content type: ${N.contentType}`},c(q(N.contentType)),9,Uo)):i("",!0),N.errorLogCount>0?(s(),a("span",{key:3,class:"shrink-0 inline-flex items-center gap-1 text-xs text-red-600 dark:text-red-400",title:`${N.errorLogCount} backend error log(s)`},[r(H,{name:"i-lucide-octagon-alert",class:"size-3.5"}),f(c(N.errorLogCount),1)],8,Bo)):i("",!0),N.warnLogCount>0?(s(),a("span",{key:4,class:"shrink-0 inline-flex items-center gap-1 text-xs text-amber-600 dark:text-amber-400",title:`${N.warnLogCount} backend warning log(s)`},[r(H,{name:"i-lucide-triangle-alert",class:"size-3.5"}),f(c(N.warnLogCount),1)],8,Fo)):i("",!0),N.serverMs!=null?(s(),a("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 (${N.spans.length} span${N.spans.length===1?"":"s"})`},[r(H,{name:"i-lucide-server",class:"size-3.5"}),r(Q,{ms:N.serverMs,"no-title":""},null,8,["ms"])],8,Vo)):i("",!0),N.startTime?(s(),a("span",{key:6,class:"shrink-0 text-xs text-gray-400 hidden sm:inline",title:z(N.startTime)},c(("formatRelativeTime"in y?y.formatRelativeTime:e(Se))(N.startTime)),9,Eo)):i("",!0),o("span",{class:Z(["ml-1 shrink-0 text-xs tabular-nums",(N.duration??0)>1e3?"text-red-600 font-medium":(N.duration??0)>500?"text-orange-500":"text-gray-500"])},[r(Q,{ms:N.duration,"unit-class":"opacity-60"},null,8,["ms"])],2)],10,Do),N.spans.length>0&&e(x).has(N._index)?(s(),a("div",Oo,[o("div",Ho,[r(H,{name:"i-lucide-waypoints",class:"size-3.5"}),T[2]||(T[2]=f("Server trace ",-1))]),(s(!0),a(U,null,te(j(N.spans),W=>(s(),a("div",{key:W.id,class:"flex items-center gap-2 text-xs",title:W.status==="error"?`${W.name} (error)`:W.name},[o("div",{class:"w-40 sm:w-56 shrink-0 flex items-center gap-1 min-w-0",style:Ce({paddingLeft:`${W.depth*12}px`})},[W.kind?(s(),a("span",Wo,c(W.kind),1)):i("",!0),o("span",{class:Z(["truncate font-mono",W.status==="error"?"text-red-600 dark:text-red-400":"text-gray-600 dark:text-gray-300"])},c(W.name),3)],4),o("div",Go,[o("div",{class:Z(["absolute top-0 h-3 rounded",F(W)]),style:Ce({left:`${W.offsetPct}%`,width:`${W.widthPct}%`})},null,6)]),r(Q,{ms:W.durMs,class:"w-12 shrink-0 text-right text-gray-500"},null,8,["ms"])],8,Ko))),128))])):i("",!0),N.logs.length>0&&e(x).has(N._index)?(s(),a("div",Jo,[(s(!0),a(U,null,te(N.logs,(W,ve)=>(s(),a("div",{key:ve,class:"rounded border border-default bg-white dark:bg-gray-900/60 p-2 text-xs"},[o("div",qo,[r(K,{color:S(W.level),variant:"soft",size:"xs",class:"shrink-0 capitalize"},{default:u(()=>[f(c(W.level),1)]),_:2},1032,["color"]),W.category?(s(),a("span",Qo,"["+c(W.category)+"]",1)):i("",!0),o("span",Zo,c(W.message),1),W.timestamp?(s(),a("span",{key:1,class:"shrink-0 text-gray-400 tabular-nums",title:z(W.timestamp)},c(("formatRelativeTime"in y?y.formatRelativeTime:e(Se))(W.timestamp)),9,Xo)):i("",!0)]),W.stack?(s(),a("div",Yo,[o("button",{type:"button",class:"inline-flex items-center gap-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-200",onClick:Ae=>m(`${N._index}:${ve}`)},[r(H,{name:e(M).has(`${N._index}:${ve}`)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3"},null,8,["name"]),T[3]||(T[3]=f(" Stack trace ",-1))],8,er),e(M).has(`${N._index}:${ve}`)?(s(),a("pre",tr,c(W.stack),1)):i("",!0)])):i("",!0)]))),128))])):i("",!0)],2))),128))])),e(d)==="captured"&&!e(L)?(s(),a("p",sr,[r(H,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),T[5]||(T[5]=f(" No backend server logs captured — install ",-1)),r(ee,{to:"backend-logs","no-icon":"",class:"underline"},{default:u(()=>[...T[4]||(T[4]=[f("a Piwi backend integration",-1)])]),_:1}),T[6]||(T[6]=f(" to see server-side warnings and errors under each request. ",-1))])):i("",!0),t.hasTrace?i("",!0):(s(),a("p",nr,[r(H,{name:"i-lucide-info",class:"size-3.5 shrink-0"}),o("span",null,[T[8]||(T[8]=f(" Want to go deeper? Record traces (",-1)),T[9]||(T[9]=o("code",null,"trace: 'retain-on-failure'",-1)),T[10]||(T[10]=f(") to see every request with headers, timing and bodies here. ",-1)),r(ee,{to:"ui-overview#trace-powered-deep-views","no-icon":"",class:"underline"},{default:u(()=>[...T[7]||(T[7]=[f("Learn more",-1)])]),_:1})])]))]),_:1},8,["count"])}}}),or=Object.assign(ar,{__name:"TestCaseNetworkRequests"}),rr={class:"space-y-2"},ir=re({__name:"TestCaseTracesCard",props:{traces:{}},setup(t){return(_,h)=>{const w=ps,$=ye;return t.traces.length>0?(s(),v($,{key:0,icon:"i-lucide-bug-play",title:"Traces",count:t.traces.length,help:"case.traces"},{default:u(()=>[o("div",rr,[(s(!0),a(U,null,te(t.traces,g=>(s(),v(w,{key:g.id,trace:g,class:"py-2 px-3 rounded-lg border"},null,8,["trace"]))),128))])]),_:1},8,["count"])):i("",!0)}}}),lr=Object.assign(ir,{__name:"TestCaseTracesCard"}),cr={class:"space-y-3"},ur={class:"flex items-center justify-between px-3 py-2 bg-gray-50 dark:bg-gray-800/50 border-b"},dr={class:"flex items-center gap-2 min-w-0"},mr={class:"text-sm font-medium truncate"},fr={key:0,class:"text-xs text-gray-400 shrink-0"},gr={class:"text-xs text-gray-400"},pr={class:"flex items-center gap-1 shrink-0"},yr=["href"],hr={key:0,class:"bg-gray-100 dark:bg-gray-900"},xr=["src","alt","onClick"],vr={key:1,class:"bg-black"},_r={key:2,class:"bg-gray-50 dark:bg-gray-900"},kr={key:0,class:"flex items-center justify-center py-8"},br={key:1,class:"p-4 text-red-500 text-sm"},wr={key:2,class:"p-4 overflow-auto max-h-96"},$r={class:"text-sm whitespace-pre-wrap font-sans leading-relaxed"},Cr=re({__name:"TestCaseAttachmentsCard",props:{attachments:{}},setup(t){const _=t,h=Oe(),w=A(null),$=C(()=>_.attachments.filter(S=>Te(S.path,S.contentType)).map(S=>({src:D(S.path,S.contentType),name:S.name||b(S.path)})));function g(S){w.value=S}const n=new Set([".md",".mdx",".markdown"]),l=new Set(["text/markdown","text/x-markdown"]);function d(S){return S.toLowerCase().split(".").pop()||""}function P(S,G){return!!(n.has(d(S))||G&&l.has(G.toLowerCase()))}function D(S,G){return wt(S,G,h.app?.baseURL)}function b(S){return S.split("/").pop()||S}function x(S){return S==null?"":we(S)}const V=A({}),M=A({}),m=A({}),j=A(new Set);async function F(S){if(V.value[S.id]===void 0&&!m.value[S.id]){m.value[S.id]=!0,M.value[S.id]=null;try{const G=await $fetch(D(S.path,S.contentType),{responseType:"text"});V.value[S.id]=G}catch{M.value[S.id]="Failed to load preview"}finally{m.value[S.id]=!1}}}function B(S,G){const q=new Set(j.value);q.has(S)?q.delete(S):(q.add(S),F(G)),j.value=q}return(S,G)=>{const q=ce,z=Ie,ne=ys,E=hs,ue=ye;return t.attachments.length>0?(s(),v(ue,{key:0,icon:"i-lucide-paperclip",title:"Attachments",count:t.attachments.length},{default:u(()=>[o("div",cr,[(s(!0),a(U,null,te(t.attachments,k=>(s(),a("div",{key:k.id,class:"rounded-lg border overflow-hidden"},[o("div",ur,[o("div",dr,[r(q,{name:e(Te)(k.path,k.contentType)?"i-lucide-image":e(De)(k.path,k.contentType)?"i-lucide-video":P(k.path,k.contentType)?"i-lucide-file-text":"i-lucide-file",class:"size-4 text-gray-400 shrink-0"},null,8,["name"]),o("span",mr,c(b(k.path)),1),k.name&&k.name!==b(k.path)?(s(),a("span",fr,c(k.name),1)):i("",!0),o("span",gr,c(x(k.size)),1)]),o("div",pr,[P(k.path,k.contentType)?(s(),v(z,{key:0,size:"xs",color:"neutral",variant:"soft",onClick:L=>B(k.id,k)},{default:u(()=>[f(c(e(j).has(k.id)?"Hide preview":"Preview"),1)]),_:2},1032,["onClick"])):i("",!0),o("a",{href:D(k.path,k.contentType),target:"_blank",class:"text-primary hover:underline text-xs shrink-0"},"Open",8,yr)])]),e(Te)(k.path,k.contentType)?(s(),a("div",hr,[o("img",{src:D(k.path,k.contentType),alt:k.name||"Screenshot",class:"max-w-full max-h-96 object-contain mx-auto cursor-pointer hover:opacity-90 transition-opacity",loading:"lazy",onClick:L=>g(e($).findIndex(ae=>ae.src===D(k.path,k.contentType)))},null,8,xr)])):e(De)(k.path,k.contentType)?(s(),a("div",vr,[r(ne,{src:D(k.path,k.contentType)},null,8,["src"])])):P(k.path,k.contentType)&&e(j).has(k.id)?(s(),a("div",_r,[e(m)[k.id]?(s(),a("div",kr,[r(q,{name:"i-lucide-loader-circle",class:"size-5 animate-spin text-gray-400"})])):e(M)[k.id]?(s(),a("div",br,c(e(M)[k.id]),1)):e(V)[k.id]?(s(),a("div",wr,[o("pre",$r,c(e(V)[k.id]),1)])):i("",!0)])):i("",!0)]))),128))]),r(E,{modelValue:e(w),"onUpdate:modelValue":G[0]||(G[0]=k=>ge(w)?w.value=k:null),images:e($)},null,8,["modelValue","images"])]),_:1},8,["count"])):i("",!0)}}}),Tr=Object.assign(Cr,{__name:"TestCaseAttachmentsCard"});function Sr(t){return Array.isArray(t)?t.some(_=>_&&typeof _.type=="string"&&_.type.toLowerCase()==="slow"):!1}function Ir(t){const _=[];if(!t)return _;const h=t.steps||[],$=h.filter(n=>n.category==="navigation").filter(n=>n.duration>3e3);if($.length>0){const n=$.sort((l,d)=>d.duration-l.duration)[0];_.push({type:"warning",message:"Slow navigation detected",details:`"${n.title}" took ${(n.duration/1e3).toFixed(1)}s. The tested page may have performance issues (slow server response, heavy JS bundles, etc.).`})}h.length>20&&_.push({type:"info",message:"Many sequential actions",details:`This test has ${h.length} steps. Consider splitting it into smaller, focused tests for better isolation and faster feedback.`}),t.status==="passed"&&(t.retries||0)>0&&_.push({type:"warning",message:"Flaky test — passed after retries",details:`This test needed ${t.retries} ${t.retries===1?"retry":"retries"} to pass. Consider reviewing locator strategies, adding explicit waits, or checking for race conditions.`});const g=h.filter(n=>n.category==="assertion"&&n.duration>2e3);if(g.length>0){const n=g.sort((l,d)=>d.duration-l.duration)[0];_.push({type:"info",message:"Slow assertions detected",details:`"${n.title}" took ${(n.duration/1e3).toFixed(1)}s. The UI may be slow to render or the assertion timeout may need tuning.`})}return Sr(t.testAnnotations)&&typeof t.duration=="number"&&t.duration<1e4&&_.push({type:"info",message:"test.slow() may be unnecessary",details:`This run finished in ${(t.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 t.timeout=="number"&&t.timeout>0&&typeof t.duration=="number"&&t.duration>0&&t.timeout>=4*t.duration&&t.timeout-t.duration>=3e4&&_.push({type:"info",message:"Oversized timeout",details:`The timeout is ${(t.timeout/1e3).toFixed(0)}s but this run took ${(t.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 Rr(t,_){const h=t.search(/\n at /);if(h===-1)return _!==void 0&&t.length>_?t.slice(0,_)+`
4
+ [truncated]`:t;const w=t.slice(0,h),g=t.slice(h).split(`
5
+ `),n=[];let l=0;const d=()=>{l>0&&(n.push(`… (${l} internal frame${l>1?"s":""})`),l=0)};for(const D of g){const b=D.trimStart();b.startsWith("at ")?D.includes("node_modules")||b.startsWith("at node:")?l++:(d(),n.push(D)):(b===""||d(),n.push(D))}d();let P=w+`
6
+ `+n.join(`
7
+ `);return _!==void 0&&P.length>_&&(P=P.slice(0,_)+`
8
+ [truncated]`),P}const jr={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"},Nr={class:"space-y-4 xl:order-1 min-w-0"},Dr={class:"max-h-96 overflow-y-auto"},Pr={class:"space-y-3"},Ar={key:0},Ur={class:"flex flex-wrap items-center gap-x-3 gap-y-1.5 text-xs mb-3"},Br={class:"font-medium text-gray-600 dark:text-gray-300"},Fr={class:"tabular-nums text-gray-500 dark:text-gray-400"},Vr={class:"text-xs tabular-nums text-gray-400 dark:text-gray-500"},Er={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"},Or={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"},Hr={class:"flex items-center gap-2"},Kr={key:0,class:"text-xs text-red-500 mt-1 whitespace-pre-wrap break-words font-mono"},Wr={class:"min-w-[6rem]"},Gr={class:"flex items-center justify-between gap-2"},Jr={key:0,class:"text-xs tabular-nums text-gray-400 dark:text-gray-500"},qr={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"},Zr={key:3,class:"flex flex-col items-center justify-center py-12 text-gray-400"},Xr={class:"space-y-4 pt-1"},Yr={key:0,class:"space-y-2"},ei={class:"flex items-start gap-2"},ti={class:"space-y-4"},si={key:3,class:"text-xs text-gray-400 pt-1"},ni={class:"bg-gray-100 dark:bg-gray-800 px-1 rounded"},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"],gl=re({__name:"[id]",async setup(t){let _,h;const w=as(),$=os(),g=w.params.id,{data:n,refresh:l}=([_,h]=mt(()=>gt(`/api/test-run-cases/${g}`,"$rX1OuZQOSq")),_=await _,h(),_),d=A([]);xe(()=>n.value?.testCaseId,async p=>{if(p)try{d.value=await $fetch(`/api/test-cases/${p}/history`)}catch{d.value=[]}else d.value=[]},{immediate:!0});const{data:P,refresh:D}=([_,h]=mt(()=>gt(`/api/test-run-cases/${g}/traces`,"$bq3dlhiM5e")),_=await _,h(),_),b=C(()=>(P.value?.length??0)>0);rs(C(()=>({title:n.value?.title?`${n.value.title} — execution — Piwi Dashboard`:`Execution #${g} — Piwi Dashboard`})));const x=C(()=>!!n.value?.error),V=C(()=>n.value?Ir(n.value):[]),M=C(()=>n.value?.steps?n.value.steps:[]),m=C(()=>n.value?.webVitals??null),j=C(()=>n.value?.aiUsage?.intents??null),F=C(()=>n.value?.networkRequests??[]),B=C(()=>{if(!d.value||d.value.length<2||!n.value?.duration)return null;const p=d.value.filter(le=>le.duration!==null&&le.id!==n.value?.id);if(p.length===0)return null;const I=p.reduce((le,fe)=>le+(fe.duration||0),0)/p.length,O=n.value.duration,oe=O-I,me=I>0?Math.round(oe/I*100):0;return{avg:Math.round(I),current:O,diff:Math.round(oe),pct:me}}),S=C(()=>n.value?.testRun?.metadata),G=C(()=>{const p=S.value;return p?.scm?p.scm:null}),q=C(()=>{const p=S.value;return p?.ci?p.ci:null}),z=C(()=>n.value?.failureCluster??null),ne=C(()=>{const p=[];return x.value&&p.push({label:"Diagnosis",icon:"i-lucide-stethoscope",value:"diagnosis",slot:"diagnosis"}),p.push({label:`Steps (${M.value.length})`,icon:"i-lucide-list-checks",value:"steps",slot:"steps"}),x.value||p.push({label:"Artifacts",icon:"i-lucide-paperclip",value:"artifacts",slot:"artifacts"}),p.push({label:"Performance",icon:"i-lucide-gauge",value:"performance",slot:"performance"}),p.push({label:`History${d.value?.length?` (${d.value.length})`:""}`,icon:"i-lucide-trending-up",value:"history",slot:"history"}),p}),E=C(()=>ne.value.map(p=>p.value));function ue(){return x.value?"diagnosis":"steps"}function k(p){let I=typeof p=="string"?p:"";return I==="error"&&(I="diagnosis"),I==="traces"&&(I=x.value?"diagnosis":"artifacts"),E.value.includes(I)?I:ue()}const L=A(k(w.query.tab));xe(E,p=>{p.includes(L.value)||(L.value=k(w.query.tab))}),xe(L,p=>{w.query.tab!==p&&$.replace({query:{...w.query,tab:p}})},{immediate:!0});const ae=[{accessorKey:"startTime",header:"Date"},{accessorKey:"status",header:"Status"},{accessorKey:"duration",header:"Duration"},{accessorKey:"retries",header:"Retries"},{accessorKey:"runId",header:"Run"},{accessorKey:"error",header:"Error"}],y={navigation:"info",assertion:"success",action:"warning",input:"warning",api:"info",wait:"neutral",hook:"neutral",fixture:"neutral"},T=[{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"}}}],H=C(()=>{const p=new Map;for(const I of M.value){const O=p.get(I.category)??{count:0,duration:0};O.count+=1,O.duration+=I.duration||0,p.set(I.category,O)}return Array.from(p,([I,O])=>({category:I,...O})).sort((I,O)=>O.duration-I.duration)}),J=C(()=>{let p=-1,I=-1;return M.value.forEach((O,oe)=>{(O.duration||0)>I&&(I=O.duration||0,p=oe)}),p}),X=C(()=>M.value.reduce((p,I)=>Math.max(p,I.duration||0),0)),Y=C(()=>M.value.length>0&&M.value.every(p=>typeof p.startTime=="number")),K=C(()=>n.value?.startedAt??(Y.value?Math.min(...M.value.map(p=>p.startTime)):0)),Q=C(()=>{const p=n.value?.duration??0;if(p>0)return p;if(Y.value){const I=Math.max(...M.value.map(O=>O.startTime+(O.duration||0)));return Math.max(1,I-K.value)}return 0});function ee(p){if(Y.value&&Q.value>0){const O=Math.max(0,Math.min(100,(p.startTime-K.value)/Q.value*100)),oe=Math.min(100-O,Math.max(1.5,(p.duration||0)/Q.value*100));return{left:`${O}%`,width:`${oe}%`}}return{left:"0%",width:`${X.value>0?Math.max(2,(p.duration||0)/X.value*100):0}%`}}function se(p){const I=n.value?.duration??0;if(I<=0)return"";const O=p/I*100;return O>0&&O<1?"<1%":`${Math.round(O)}%`}function N(p){return p>2e3?"text-red-600 font-medium":p>500?"text-orange-500":"text-gray-500"}function W(p){return p>2e3?"bg-red-500":p>500?"bg-orange-400":"bg-gray-400 dark:bg-gray-500"}const ve=C(()=>n.value?.testRun?.environment),Ae=C(()=>[{filePath:n.value?.filePath??"",title:n.value?.title??"",line:n.value?.line??null,projectName:n.value?.browser?.projectName??null}]),St=C(()=>nn(Ae.value)),{copy:It,copied:qe}=an(),Rt=C(()=>[{label:qe.value?"Copied":"Retry command",icon:qe.value?"i-lucide-check":"i-lucide-play",onClick:()=>It(St.value,{toast:"Retry command copied"})},{label:"Refresh",icon:"i-lucide-refresh-cw",onClick:()=>l()}]),jt=!!Oe().public.demoMode;let he=null;const Qe=C(()=>{const p=n.value?.testRun?.status;return p==="running"||p==="finalizing"});function Lt(){if(jt||he)return;const p=n.value?.testRun?.id;p&&(he=new EventSource(`/api/test-runs/${p}/stream`),he.onmessage=I=>{try{const O=JSON.parse(I.data);O.type==="case-files"&&O.data?.testRunsCaseId===Number(g)?(l(),D()):O.type==="run-finished"&&(l(),D(),Ue())}catch{}},he.onerror=()=>{})}function Ue(){he&&(he.close(),he=null)}xe(Qe,p=>{p?Lt():Ue()},{immediate:!0}),is(Ue);const{copyRich:zt,copied:Ze}=xs();function Mt(){const p=n.value;if(!p?.error)return;const I=window.location.origin,O=p.title??"Unknown test",oe=p.location??"",me=p.error.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,""),le=be=>be.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),fe=z.value?`${I}/failure-clusters/${z.value.id}`:null,Me=`${I}/test-run-cases/${g}?tab=diagnosis`,ke=n.value?.testCaseId?`${I}/test-cases/${n.value.testCaseId}`:null,Fe=[`❌ Test failed: ${O}`,oe?`Location: ${oe}`:null,"","Error:",me,"",fe?`Failure cluster: ${fe}`:null,`Execution: ${Me}`,ke?`History: ${ke}`:null].filter(be=>be!==null).join(`
9
+ `),Ve=[`<p><strong>❌ Test failed: ${le(O)}</strong>${oe?`<br><code>${le(oe)}</code>`:""}</p>`,`<p><strong>Error:</strong></p><pre>${ft(p.error)}</pre>`,`<p>🔗 ${fe?`<a href="${fe}">View failure cluster</a> · `:""}<a href="${Me}">Execution details</a>${ke?` · <a href="${ke}">Test history</a>`:""}</p>`].join("");zt(Fe,Ve,{toast:"Failure copied"})}const Be=A(null),Xe=A(null),je=A(null),Le=A(null),Ye=A(null),ze=A(null),et=A(null),tt=A(null),st=A(null),nt=A(null);function _e(p){p?.scrollIntoView({behavior:"smooth",block:"start"})}const at={sampleError:()=>_e(Be.value),executionError:()=>_e(Be.value),testSource:()=>Le.value?.reveal(),sourceFiles:()=>Le.value?.reveal(),environmentDiff:()=>et.value?.reveal(),visualDiff:()=>tt.value?.reveal(),domSnapshot:()=>st.value?.reveal(),ariaSnapshot:()=>nt.value?.reveal(),screenshots:()=>ze.value?.reveal(),tracePointers:()=>ze.value?.reveal(),artifacts:()=>ze.value?.reveal(),console:()=>_e(Xe.value),networkRequests:()=>_e(je.value),serverTraces:()=>_e(je.value),traceCallStack:()=>Le.value?.reveal(),traceNetwork:()=>{Ye.value?.showTraceMode(),_e(je.value)},steps:()=>{L.value="steps"},failingSteps:()=>{L.value="steps"}};return ls(Os,{canLocate:p=>p in at,open:p=>at[p]?.()}),(p,I)=>{const O=es,oe=ts,me=ce,le=Pe,fe=$s,Me=Cs,ke=Ts,Fe=Is,Ve=En,be=Ie,Nt=$t,ot=ye,Dt=Qn,Pt=la,At=va,Ut=Ta,Bt=Ma,Ft=_s,Vt=ks,Et=bs,rt=Fa,it=or,lt=vs,Ot=bt,Ht=He,Kt=ws,Ne=pe,ie=Re,Wt=ht,ct=Ys,ut=en,dt=tn,Gt=lr,Jt=Tr,de=xt,Ee=vt,qt=Ct,Qt=sn,Zt=zs,Xt=Ss;return s(),v(Xt,{id:"test-run-case-detail"},{header:u(()=>[r(Fe,null,{leading:u(()=>[r(O),r(oe,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},...e(n)?.testRun?.project?.id?[{label:e(n).testRun.project.name||"Project",to:`/projects/${e(n).testRun.project.id}`}]:[{label:"Project"}],...e(n)?.testRun?.id?[{label:`Run #${e(n).testRun.id}`+(e(n).testRun.label?` — ${e(n).testRun.label}`:""),to:`/test-runs/${e(n).testRun.id}`}]:[{label:"Test run"}],{label:e(n)?.title||`Execution #${e(g)}`}]},null,8,["items"])]),right:u(()=>[e(n)?.testCaseId?(s(),v(le,{key:0,to:`/test-cases/${e(n).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:u(()=>[r(me,{name:"i-lucide-trending-up",class:"size-3.5"}),I[2]||(I[2]=o("span",{class:"hidden sm:inline"},"Evolution",-1))]),_:1},8,["to"])):i("",!0),e(n)?(s(),v(fe,{key:1,endpoint:`/api/test-run-cases/${e(n).id}/export`,"base-name":`piwi-execution-${e(n).id}`,class:"mr-2"},null,8,["endpoint","base-name"])):i("",!0),r(Me,{"project-id":e(n)?.testRun?.project?.id,"project-label":e(n)?.testRun?.project?.label??e(n)?.testRun?.project?.name,cases:e(Ae),class:"mr-2"},null,8,["project-id","project-label","cases"]),r(ke,{actions:e(Rt)},null,8,["actions"])]),_:1})]),body:u(()=>[r(Zt,{modelValue:e(L),"onUpdate:modelValue":I[1]||(I[1]=R=>ge(L)?L.value=R:null),"tab-items":e(ne)},{summary:u(()=>[r(Ve,{"test-case":e(n)??null,"scm-info":e(G),"ci-info":e(q),browser:e(n)?.browser??null,environment:e(ve),"steps-count":e(M).length,"historical-timing":e(B),"stable-links":e(n)?.stableLinks??null,"project-key":e(n)?.testRun?.project?.id,"project-name":e(n)?.testRun?.project?.name,onRefresh:I[0]||(I[0]=R=>e(l)())},null,8,["test-case","scm-info","ci-info","browser","environment","steps-count","historical-timing","stable-links","project-key","project-name"])]),"tab-diagnosis":u(()=>[o("div",jr,[o("div",{ref_key:"errorEl",ref:Be,class:"scroll-mt-4"},[e(n)?.error?(s(),v(ot,{key:0,icon:"i-lucide-circle-x","icon-class":"text-red-500",title:"Error"},{actions:u(()=>[r(Nt,{text:e(Ze)?"Copied!":"Copy failure"},{default:u(()=>[r(be,{size:"xs",variant:"ghost",color:"neutral",icon:e(Ze)?"i-lucide-check":"i-lucide-clipboard",onClick:Mt},null,8,["icon"])]),_:1},8,["text"])]),default:u(()=>[o("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(ft)(e(Rr)(e(n).error))},null,8,Lr)]),_:1})):i("",!0)],512),o("div",zr,[o("div",Mr,[r(Dt,{"test-case":e(n)??null,history:e(d),"current-id":Number(e(g))},null,8,["test-case","history","current-id"]),e(z)?(s(),v(Pt,{key:0,cluster:e(z)},null,8,["cluster"])):i("",!0),r(At,{"test-runs-case-id":Number(e(g))},null,8,["test-runs-case-id"])]),o("div",Nr,[e(n)?.testSourceFrames?.length||e(n)?.testSource||e(b)?(s(),v(Ut,{key:0,ref_key:"testSourceCard",ref:Le,"storage-key":"case-test-source",frames:e(n)?.testSourceFrames??null,"test-source":e(n)?.testSource??null,"run-id":e(n)?.testRun?.id??null,"test-runs-case-id":Number(e(g)),"has-trace":e(b),"project-key":e(n)?.testRun?.project?.id,"project-name":e(n)?.testRun?.project?.name},null,8,["frames","test-source","run-id","test-runs-case-id","has-trace","project-key","project-name"])):i("",!0),r(Bt,{ref_key:"evidenceCard",ref:ze,"storage-key":"case-evidence",attachments:e(n)?.attachments??[],traces:e(P)??[]},null,8,["attachments","traces"]),e(n)?.testRun?.id?(s(),v(Ft,{key:1,"storage-key":"case-locators","run-id":e(n).testRun.id,"test-runs-case-id":Number(e(g)),"ai-intents":e(j)},null,8,["run-id","test-runs-case-id","ai-intents"])):i("",!0),e(n)?.testRun?.id?(s(),v(Vt,{key:2,ref_key:"envDiffCard",ref:et,"storage-key":"case-env-diff","run-id":e(n).testRun.id,"test-runs-case-id":Number(e(g))},null,8,["run-id","test-runs-case-id"])):i("",!0),e(n)?.testRun?.id?(s(),v(Et,{key:3,ref_key:"visualDiffCard",ref:tt,"storage-key":"case-visual-diff","run-id":e(n).testRun.id,"test-runs-case-id":Number(e(g))},null,8,["run-id","test-runs-case-id"])):i("",!0),e(n)?.consoleLogs?.length?(s(),a("div",{key:4,ref_key:"consoleEl",ref:Xe,class:"scroll-mt-4"},[r(rt,{entries:e(n)?.consoleLogs??[]},null,8,["entries"])],512)):i("",!0),e(F).length>0||e(b)?(s(),a("div",{key:5,ref_key:"networkEl",ref:je,class:"scroll-mt-4"},[r(it,{ref_key:"networkCard",ref:Ye,requests:e(F),"run-id":e(n)?.testRun?.id??null,"test-runs-case-id":Number(e(g)),"has-trace":e(b)},null,8,["requests","run-id","test-runs-case-id","has-trace"])],512)):i("",!0),e(n)?.pageState?(s(),v(lt,{key:6,"storage-key":"case-page-state","page-state":e(n).pageState},null,8,["page-state"])):i("",!0),e(n)?.ariaSnapshot?(s(),v(Ht,{key:7,ref_key:"ariaCard",ref:nt,"storage-key":"case-aria",icon:"i-lucide-scan-text",title:"ARIA snapshot",help:"case.aria"},{folded:u(()=>[...I[3]||(I[3]=[f("Accessibility tree captured at the moment of failure",-1)])]),default:u(()=>[o("div",Dr,[r(Ot,{text:"```yaml\n"+e(n).ariaSnapshot+"\n```"},null,8,["text"])])]),_:1},512)):i("",!0),e(n)?.testRun?.id?(s(),v(Kt,{key:8,ref_key:"domSnapshotCard",ref:st,"storage-key":"case-dom-snapshot","run-id":e(n).testRun.id,"test-runs-case-id":Number(e(g))},null,8,["run-id","test-runs-case-id"])):i("",!0)])])])]),"tab-steps":u(()=>[o("div",Pr,[e(M).length>0?(s(),a("div",Ar,[o("div",Ur,[o("span",Br,c(e(M).length)+" steps",1),I[4]||(I[4]=o("span",{class:"text-gray-300 dark:text-gray-600"},"·",-1)),(s(!0),a(U,null,te(e(H),R=>(s(),a("span",{key:R.category,class:"inline-flex items-center gap-1"},[r(Ne,{color:y[R.category]||"neutral",variant:"soft",size:"xs"},{default:u(()=>[f(c(R.category),1)]),_:2},1032,["color"]),o("span",Fr,[f("×"+c(R.count)+" · ",1),r(ie,{ms:R.duration},null,8,["ms"])])]))),128))]),r(ut,{"min-width":"40rem",bleed:!1},{default:u(()=>[r(ct,{data:e(M),columns:T,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":u(({row:R})=>[o("span",Vr,c(R.index+1),1)]),"status-cell":u(({row:R})=>[R.original.failed?(s(),a("span",Er,"✗")):(s(),a("span",Or,"✓"))]),"category-cell":u(({row:R})=>[r(Ne,{color:y[R.original.category]||"neutral",variant:"soft",size:"xs"},{default:u(()=>[f(c(R.original.category),1)]),_:2},1032,["color"])]),"title-cell":u(({row:R})=>[o("div",Hr,[o("span",{class:Z(R.original.failed?"text-red-600 dark:text-red-400 font-medium":"")},c(R.original.title),3),R.index===e(J)?(s(),v(Ne,{key:0,color:"warning",variant:"subtle",size:"xs",class:"shrink-0",title:"Slowest step in this test"},{default:u(()=>[...I[5]||(I[5]=[f(" slowest ",-1)])]),_:1})):i("",!0)]),R.original.failed&&R.original.error?.message?(s(),a("p",Kr,c(R.original.error.message),1)):i("",!0),R.original.location?(s(),v(Wt,{key:1,location:R.original.location,"project-key":e(n)?.testRun?.project?.id,"project-name":e(n)?.testRun?.project?.name,class:"text-xs text-gray-400 dark:text-gray-500 mt-0.5"},null,8,["location","project-key","project-name"])):i("",!0)]),"duration-cell":u(({row:R})=>[o("div",Wr,[o("div",Gr,[r(ie,{ms:R.original.duration,class:Z(`text-sm ${N(R.original.duration)}`),"unit-class":"opacity-60"},null,8,["ms","class"]),se(R.original.duration)?(s(),a("span",Jr,c(se(R.original.duration)),1)):i("",!0)]),o("div",qr,[o("div",{class:Z(["absolute inset-y-0 rounded-full",W(R.original.duration)]),style:Ce(ee(R.original))},null,6)])])]),_:1},8,["data"])]),_:1})])):(s(),v(dt,{key:1,icon:"i-lucide-list-checks",text:"No steps recorded for this execution"}))])]),"tab-artifacts":u(()=>[o("div",Qr,[r(Gt,{traces:e(P)||[]},null,8,["traces"]),r(Jt,{attachments:e(n)?.attachments??[]},null,8,["attachments"]),e(n)?.pageState?(s(),v(lt,{key:0,"storage-key":"case-page-state","page-state":e(n).pageState},null,8,["page-state"])):i("",!0),e(n)?.consoleLogs?.length?(s(),v(rt,{key:1,entries:e(n)?.consoleLogs??[]},null,8,["entries"])):i("",!0),e(F).length>0||e(b)?(s(),v(it,{key:2,requests:e(F),"run-id":e(n)?.testRun?.id??null,"test-runs-case-id":Number(e(g)),"has-trace":e(b)},null,8,["requests","run-id","test-runs-case-id","has-trace"])):i("",!0),!e(P)?.length&&!e(n)?.attachments?.length&&!e(n)?.consoleLogs?.length&&!e(F).length?(s(),a("div",Zr,[e(Qe)?(s(),a(U,{key:0},[r(me,{name:"i-lucide-loader-circle",class:"size-8 mb-2 animate-spin"}),I[6]||(I[6]=o("p",{class:"text-sm"}," Run in progress — traces and attachments appear here as soon as they are uploaded. ",-1))],64)):(s(),a(U,{key:1},[r(me,{name:"i-lucide-inbox",class:"size-8 mb-2"}),I[7]||(I[7]=o("p",{class:"text-sm"},"No traces, console logs, or network requests captured for this test case.",-1))],64))])):i("",!0)])]),"tab-performance":u(()=>[o("div",Xr,[e(V).length>0?(s(),a("div",Yr,[(s(!0),a(U,null,te(e(V),(R,Yt)=>(s(),a("div",{key:Yt,class:Z(["p-3 rounded-lg border",R.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"])},[o("div",ei,[r(me,{name:R.type==="warning"?"i-lucide-alert-triangle":"i-lucide-lightbulb",class:Z([R.type==="warning"?"text-amber-600":"text-blue-600","size-4 mt-0.5 shrink-0"])},null,8,["name","class"]),o("div",null,[o("p",{class:Z(R.type==="warning"?"text-amber-800 dark:text-amber-200 font-medium":"text-blue-800 dark:text-blue-200 font-medium")},c(R.message),3),o("p",{class:Z([R.type==="warning"?"text-amber-700 dark:text-amber-300":"text-blue-700 dark:text-blue-300","mt-1"])},c(R.details),3)])])],2))),128))])):i("",!0),e(m)?(s(),v(ot,{key:1,icon:"i-lucide-gauge",title:"Browser performance (Web Vitals)",help:"case.web-vitals"},{default:u(()=>[o("div",ti,[e(m).navigation?(s(),v(Ee,{key:0,"min-tile-width":"10rem"},{default:u(()=>[r(de,{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:u(()=>[r(ie,{ms:e(m).navigation.ttfb},null,8,["ms"])]),_:1},8,["value-class"]),r(de,{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:u(()=>[r(ie,{ms:e(m).navigation.domInteractive},null,8,["ms"])]),_:1},8,["value-class"]),r(de,{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:u(()=>[r(ie,{ms:e(m).navigation.domContentLoaded},null,8,["ms"])]),_:1},8,["value-class"]),r(de,{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:u(()=>[r(ie,{ms:e(m).navigation.loadComplete},null,8,["ms"])]),_:1},8,["value-class"])]),_:1})):i("",!0),e(m).paint&&(e(m).paint.firstPaint||e(m).paint.firstContentfulPaint)?(s(),v(Ee,{key:1,"min-tile-width":"10rem",class:"pt-2 border-t"},{default:u(()=>[e(m).paint.firstPaint!==void 0?(s(),v(de,{key:0,label:"First Paint (FP)"},{default:u(()=>[r(ie,{ms:e(m).paint.firstPaint},null,8,["ms"])]),_:1})):i("",!0),e(m).paint.firstContentfulPaint!==void 0?(s(),v(de,{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:u(()=>[r(ie,{ms:e(m).paint.firstContentfulPaint},null,8,["ms"])]),_:1},8,["value-class"])):i("",!0)]),_:1})):i("",!0),e(m).vitals?(s(),v(Ee,{key:2,"min-tile-width":"10rem",class:"pt-2 border-t"},{default:u(()=>[r(de,{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:u(()=>[r(ie,{ms:e(m).vitals.lcp,fallback:"n/a"},null,8,["ms"])]),_:1},8,["value-class"]),r(de,{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"]),r(de,{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:u(()=>[r(ie,{ms:e(m).vitals.inp,fallback:"n/a"},null,8,["ms"])]),_:1},8,["value-class"])]),_:1})):i("",!0),e(m).navigation?.url?(s(),a("div",si,[I[8]||(I[8]=f(" Page: ",-1)),o("code",ni,c(e(m).navigation.url),1)])):i("",!0)])]),_:1})):i("",!0),e(V).length===0&&!e(m)?(s(),v(qt,{key:2,icon:"i-lucide-gauge",title:"No performance hints or Web Vitals for this execution",text:"Web Vitals and step timing come from the Piwi capture fixtures — extend your Playwright test with piwiFixtures to collect them.",doc:"capture-fixtures"})):i("",!0)])]),"tab-history":u(()=>[o("div",ai,[e(d)&&e(d).length>0?(s(),a("div",oi,[o("div",ri,[e(n)?.testCaseId?(s(),v(be,{key:0,to:`/test-cases/${e(n).testCaseId}`,size:"xs",variant:"outline",color:"neutral","trailing-icon":"i-lucide-arrow-right"},{default:u(()=>[...I[9]||(I[9]=[f(" View full test history ",-1)])]),_:1},8,["to"])):i("",!0)]),r(Qt,{data:e(d),height:200},null,8,["data"]),r(ut,{"min-width":"44rem",bleed:!1},{default:u(()=>[r(ct,{data:e(d),columns:ae,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":u(({row:R})=>[o("span",ii,[o("span",li,c(new Date(R.original.startTime).toLocaleDateString("en-US",{month:"short",day:"numeric"})),1),o("span",ci,c(new Date(R.original.startTime).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})),1)])]),"status-cell":u(({row:R})=>[r(Ne,{color:("getStatusColor"in p?p.getStatusColor:e(Js))(R.original.status),variant:"subtle",class:"capitalize"},{default:u(()=>[f(c(R.original.status),1)]),_:2},1032,["color"])]),"duration-cell":u(({row:R})=>[R.original.duration!==null?(s(),v(ie,{key:0,ms:R.original.duration},null,8,["ms"])):(s(),a("span",ui,"—"))]),"runId-cell":u(({row:R})=>[r(le,{to:`/test-runs/${R.original.runId}`,class:"text-primary hover:underline"},{default:u(()=>[f(" #"+c(R.original.runId),1)]),_:2},1032,["to"])]),"error-cell":u(({row:R})=>[R.original.error?(s(),a("span",{key:0,class:"text-red-600 text-xs truncate max-w-xs block",title:R.original.error},c(R.original.error.length>80?`${R.original.error.substring(0,80)}…`:R.original.error),9,di)):i("",!0)]),_:1},8,["data"])]),_:1})])):(s(),v(dt,{key:1,icon:"i-lucide-trending-up",text:"No prior executions of this test yet."},{default:u(()=>[...I[10]||(I[10]=[o("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{gl as default};