@piwitests/server 0.20.0 → 0.21.0

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