@piwitests/server 0.15.0 → 0.16.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 (457) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{DzbOHjZH.js → -KQO1A4C.js} +1 -1
  3. package/.output/public/_nuxt/{BEKwVcvQ.js → 1AB111xL.js} +1 -1
  4. package/.output/public/_nuxt/{CokbKVE6.js → 2xvsvjLO.js} +1 -1
  5. package/.output/public/_nuxt/{CNzoIhwN.js → ABGJk0pu.js} +1 -1
  6. package/.output/public/_nuxt/{Cgr8IKY4.js → B2lYFco4.js} +1 -1
  7. package/.output/public/_nuxt/B33X4zrC.js +1 -0
  8. package/.output/public/_nuxt/{V1BQiRoh.js → B3NbDoBP.js} +1 -1
  9. package/.output/public/_nuxt/{ChWPXucC.js → B3sNtVnf.js} +1 -1
  10. package/.output/public/_nuxt/{too3WhRB.js → B43OGXzV.js} +1 -1
  11. package/.output/public/_nuxt/{Cf3RuiXF.js → B6Jp7fpa.js} +4 -4
  12. package/.output/public/_nuxt/{B32ySRXg.js → B7yG1G_l.js} +1 -1
  13. package/.output/public/_nuxt/{BgR7oL4p.js → BBdfPriC.js} +1 -1
  14. package/.output/public/_nuxt/{DNP5tTJo.js → BGYbnqA7.js} +1 -1
  15. package/.output/public/_nuxt/{DAeYEeCC.js → BIf1R_fu.js} +1 -1
  16. package/.output/public/_nuxt/{nUsJV5qo.js → BIksQZfR.js} +1 -1
  17. package/.output/public/_nuxt/{B8fs6GU9.js → BPKwYP2Q.js} +31 -31
  18. package/.output/public/_nuxt/{DjCfCT_5.js → BP_SWi7S.js} +1 -1
  19. package/.output/public/_nuxt/{CrFCPOnY.js → BQrSEuzu.js} +1 -1
  20. package/.output/public/_nuxt/{BpepjHwc.js → BR9H8k-L.js} +1 -1
  21. package/.output/public/_nuxt/{Dejf0f7D.js → BRKa6EQR.js} +3 -3
  22. package/.output/public/_nuxt/{BMQIO38j.js → BS0gKVuF.js} +1 -1
  23. package/.output/public/_nuxt/{BW1UOxWn.js → BV83yObd.js} +1 -1
  24. package/.output/public/_nuxt/{o5WQ5Z7k.js → BVW5qIDP.js} +1 -1
  25. package/.output/public/_nuxt/{rvaZFYoE.js → BY4oA2IH.js} +1 -1
  26. package/.output/public/_nuxt/{DZoSxwj6.js → BZekCf_x.js} +1 -1
  27. package/.output/public/_nuxt/{lRMjXqiA.js → Bb64FEFL.js} +1 -1
  28. package/.output/public/_nuxt/{2PU-adwy.js → BdFEUAlx.js} +1 -1
  29. package/.output/public/_nuxt/{CBrCcDzR.js → Bf62wdzp.js} +1 -1
  30. package/.output/public/_nuxt/{DYDGGqZ3.js → BkDfdHFm.js} +1 -1
  31. package/.output/public/_nuxt/{CqA3gM8h.js → BoRFLTAO.js} +1 -1
  32. package/.output/public/_nuxt/{DxXZN6ed.js → BpIsBP5g.js} +1 -1
  33. package/.output/public/_nuxt/{DkFbpSsi.js → BpNqHxg2.js} +1 -1
  34. package/.output/public/_nuxt/{DFw8I2FL.js → BpceIssd.js} +1 -1
  35. package/.output/public/_nuxt/{n7Htv9PJ.js → Br2K9yi_.js} +1 -1
  36. package/.output/public/_nuxt/{D4nLD93c.js → BuZOa2M3.js} +1 -1
  37. package/.output/public/_nuxt/{B32-7cBF.js → Bvfmwzgw.js} +1 -1
  38. package/.output/public/_nuxt/{h-e-Ca3f.js → Bzl2H_vl.js} +1 -1
  39. package/.output/public/_nuxt/{IdQR_Djw.js → C1K3r_fc.js} +1 -1
  40. package/.output/public/_nuxt/C219JuBV.js +1 -0
  41. package/.output/public/_nuxt/{B_80i5Ge.js → C38aZbFJ.js} +1 -1
  42. package/.output/public/_nuxt/{DHVmXA9K.js → C3r_Sv1p.js} +1 -1
  43. package/.output/public/_nuxt/{O1A-LRgV.js → C8RBRg7I.js} +1 -1
  44. package/.output/public/_nuxt/{60-Zii7v.js → CCRRqXez.js} +1 -1
  45. package/.output/public/_nuxt/{__m3KqHO.js → CJFqA_QW.js} +1 -1
  46. package/.output/public/_nuxt/{Surk4Lw-.js → CKB_doYB.js} +1 -1
  47. package/.output/public/_nuxt/{DaKVSp-6.js → CMYQpoOI.js} +1 -1
  48. package/.output/public/_nuxt/CQeMb57w.js +1 -0
  49. package/.output/public/_nuxt/{Bq2ZPvIH.js → CSYJwpXG.js} +1 -1
  50. package/.output/public/_nuxt/{ETOCcsVw.js → CTdvGdc2.js} +1 -1
  51. package/.output/public/_nuxt/CX1dcT4v.js +1 -0
  52. package/.output/public/_nuxt/{evCxpgbd.js → CdME81ij.js} +2 -2
  53. package/.output/public/_nuxt/{DKTDub7I.js → CgoAUz76.js} +1 -1
  54. package/.output/public/_nuxt/{0KrkW531.js → CoHGrO41.js} +1 -1
  55. package/.output/public/_nuxt/{BGsuOpiq.js → CpO-ABDW.js} +1 -1
  56. package/.output/public/_nuxt/CuYYdFBL.js +1 -0
  57. package/.output/public/_nuxt/{CHMpVLqo.js → D2jhe9JK.js} +1 -1
  58. package/.output/public/_nuxt/{C7RarFGi.js → D33On6AX.js} +1 -1
  59. package/.output/public/_nuxt/{Dv2B_nw_.js → D4VpoHDP.js} +1 -1
  60. package/.output/public/_nuxt/{CKZn0TUX.js → DAWn6Z7h.js} +1 -1
  61. package/.output/public/_nuxt/{rWwWS3Kj.js → DCpmQ47_.js} +1 -1
  62. package/.output/public/_nuxt/{B59-l1Cv.js → DIkLLyR6.js} +1 -1
  63. package/.output/public/_nuxt/{CFn3w5jn.js → DJS3Bf50.js} +1 -1
  64. package/.output/public/_nuxt/{F07TcX0U.js → DL20rwkA.js} +1 -1
  65. package/.output/public/_nuxt/DOuoR2Pk.js +34 -0
  66. package/.output/public/_nuxt/{BC_Wu-fv.js → DRtTLQri.js} +1 -1
  67. package/.output/public/_nuxt/{DiUGa0CT.js → DbeHHTk-.js} +1 -1
  68. package/.output/public/_nuxt/DcCNnjKl.js +1 -0
  69. package/.output/public/_nuxt/{PPFO8UVt.js → DdbrJwT-.js} +1 -1
  70. package/.output/public/_nuxt/{Cfk2_UCm.js → DfcAIbcX.js} +1 -1
  71. package/.output/public/_nuxt/{OG2n3p77.js → DgYM3eyi.js} +1 -1
  72. package/.output/public/_nuxt/{BBJ9Pu3M.js → DhA17dqR.js} +1 -1
  73. package/.output/public/_nuxt/{DvdOsTLb.js → DjZKuUMz.js} +1 -1
  74. package/.output/public/_nuxt/{DCCMLWel.js → DqnyWaSQ.js} +1 -1
  75. package/.output/public/_nuxt/Dsk4Ic18.js +7 -0
  76. package/.output/public/_nuxt/{BCK4f6Y3.js → DszOHBMG.js} +1 -1
  77. package/.output/public/_nuxt/{Cpquifvd.js → DuBBqqbF.js} +1 -1
  78. package/.output/public/_nuxt/{DWzdeQ3Z.js → DuMv-ugy.js} +1 -1
  79. package/.output/public/_nuxt/{BfshMo9k.js → Dz55UR7w.js} +2 -2
  80. package/.output/public/_nuxt/{BkhdAGx0.js → Dzz9_Z0u.js} +1 -1
  81. package/.output/public/_nuxt/{DgZlpN9l.js → HoKG9cc2.js} +1 -1
  82. package/.output/public/_nuxt/{C9jjVEQU.js → IFqRT_xJ.js} +1 -1
  83. package/.output/public/_nuxt/{i38YGG9S.js → JCFZINev.js} +1 -1
  84. package/.output/public/_nuxt/{B9Q_4Mjt.js → Kc7La4sL.js} +1 -1
  85. package/.output/public/_nuxt/N3pCB6-m.js +4 -0
  86. package/.output/public/_nuxt/{CFXonrwQ.js → WctJXszi.js} +1 -1
  87. package/.output/public/_nuxt/{CHgsEM4U.js → bAfTAihV.js} +1 -1
  88. package/.output/public/_nuxt/builds/latest.json +1 -1
  89. package/.output/public/_nuxt/builds/meta/5182c9fb-56a6-4df2-9685-4020a08ce7a5.json +1 -0
  90. package/.output/public/_nuxt/{4fB15L_7.js → d5ZB3uxF.js} +1 -1
  91. package/.output/public/_nuxt/{CIOQo6gB.js → e1zUTrBb.js} +1 -1
  92. package/.output/public/_nuxt/entry.BsmKRJzR.css +1 -0
  93. package/.output/public/_nuxt/{BtJkQ3to.js → iwD5atI2.js} +1 -1
  94. package/.output/public/_nuxt/jIF87ALb.js +1 -0
  95. package/.output/public/_nuxt/{CvCF77E-.js → k-z_VVTK.js} +2 -2
  96. package/.output/public/_nuxt/{CHSkT2s0.js → l0gdGdar.js} +1 -1
  97. package/.output/public/_nuxt/{DVdOm5Bg.js → mGJLLqyN.js} +1 -1
  98. package/.output/public/_nuxt/{CU-OXXdh.js → mfzslNx_.js} +1 -1
  99. package/.output/public/_nuxt/{CD-xwM9N.js → nCjfWTGm.js} +1 -1
  100. package/.output/public/_nuxt/{DQpa8F03.js → oNq5pd3r.js} +1 -1
  101. package/.output/public/_nuxt/qzAP_nm7.js +1 -0
  102. package/.output/public/_nuxt/{3SnTawZW.js → r3SBLxtE.js} +1 -1
  103. package/.output/public/_nuxt/{DI_-kFec.js → uKeO2H7F.js} +1 -1
  104. package/.output/public/_nuxt/{DZLrAp2i.js → xUrLy-Zn.js} +1 -1
  105. package/.output/public/_nuxt/{BY0AkhJh.js → ze9-Ill2.js} +1 -1
  106. package/.output/public/demo/seed.version.json +2 -2
  107. package/.output/public/sw.js +1 -1
  108. package/.output/server/chunks/_/markers.mjs +1 -1
  109. package/.output/server/chunks/_/users.mjs +1 -1
  110. package/.output/server/chunks/build/{BrowserBadge-BTA4QU_J.mjs → BrowserBadge-DNCp9pF-.mjs} +3 -3
  111. package/.output/server/chunks/build/BrowserBadge-DNCp9pF-.mjs.map +1 -0
  112. package/.output/server/chunks/build/{ChartCard-BqAhMip2.mjs → ChartCard-Fr557IbV.mjs} +2 -2
  113. package/.output/server/chunks/build/ChartCard-Fr557IbV.mjs.map +1 -0
  114. package/.output/server/chunks/build/{Checkbox-_1nGm_DR.mjs → Checkbox-7ZiMz60w.mjs} +5 -5
  115. package/.output/server/chunks/build/Checkbox-7ZiMz60w.mjs.map +1 -0
  116. package/.output/server/chunks/build/{CiEnvCard-DAufYuJw.mjs → CiEnvCard-DNxBVvx4.mjs} +5 -5
  117. package/.output/server/chunks/build/CiEnvCard-DNxBVvx4.mjs.map +1 -0
  118. package/.output/server/chunks/build/{CodeBlock-BVKHuYjU.mjs → CodeBlock-BGwNmJ8J.mjs} +2 -2
  119. package/.output/server/chunks/build/CodeBlock-BGwNmJ8J.mjs.map +1 -0
  120. package/.output/server/chunks/build/{DashboardNavbar-BR6j4VLd.mjs → DashboardNavbar-Bdp-OwTN.mjs} +2 -2
  121. package/.output/server/chunks/build/DashboardNavbar-Bdp-OwTN.mjs.map +1 -0
  122. package/.output/server/chunks/build/DashboardSidebarToggle-Ji6ADuqF.mjs +1 -1
  123. package/.output/server/chunks/build/{DiagnosisPanel-BnrdXDvd.mjs → DiagnosisPanel-DV1xwGu4.mjs} +6 -6
  124. package/.output/server/chunks/build/DiagnosisPanel-DV1xwGu4.mjs.map +1 -0
  125. package/.output/server/chunks/build/EntityLinks-DeOP13Kr.mjs +1 -1
  126. package/.output/server/chunks/build/{EnvManagedBadge-DdnEtjIl.mjs → EnvManagedBadge-Qpn58Nmr.mjs} +5 -5
  127. package/.output/server/chunks/build/EnvManagedBadge-Qpn58Nmr.mjs.map +1 -0
  128. package/.output/server/chunks/build/{HelpHint-D_GJzMpW.mjs → HelpHint-YEMWtKu1.mjs} +18 -2
  129. package/.output/server/chunks/build/HelpHint-YEMWtKu1.mjs.map +1 -0
  130. package/.output/server/chunks/build/{Modal-COIjm3js.mjs → Modal-CfA78Hm1.mjs} +2 -2
  131. package/.output/server/chunks/build/Modal-CfA78Hm1.mjs.map +1 -0
  132. package/.output/server/chunks/build/{OpenInIdeLink-D97W6On1.mjs → OpenInIdeLink-B92wosXu.mjs} +3 -3
  133. package/.output/server/chunks/build/{OpenInIdeLink-D97W6On1.mjs.map → OpenInIdeLink-B92wosXu.mjs.map} +1 -1
  134. package/.output/server/chunks/build/{PageStateCard-C1HFN4Nv.mjs → PageStateCard-Bwee6JTk.mjs} +10 -10
  135. package/.output/server/chunks/build/{PageStateCard-C1HFN4Nv.mjs.map → PageStateCard-Bwee6JTk.mjs.map} +1 -1
  136. package/.output/server/chunks/build/{ProjectTestCasesTable-XFBPQGIX.mjs → ProjectTestCasesTable-9418EI8J.mjs} +9 -9
  137. package/.output/server/chunks/build/ProjectTestCasesTable-9418EI8J.mjs.map +1 -0
  138. package/.output/server/chunks/build/{RunReports-ChNkmuWa.mjs → RunReports-BpJqLHY9.mjs} +2 -2
  139. package/.output/server/chunks/build/RunReports-BpJqLHY9.mjs.map +1 -0
  140. package/.output/server/chunks/build/{RunStatusBadge-CXpuCUGQ.mjs → RunStatusBadge-BhmJ_RKM.mjs} +2 -2
  141. package/.output/server/chunks/build/RunStatusBadge-BhmJ_RKM.mjs.map +1 -0
  142. package/.output/server/chunks/build/{SectionCard-zs9FDzps.mjs → SectionCard-COd9TuDq.mjs} +2 -2
  143. package/.output/server/chunks/build/SectionCard-COd9TuDq.mjs.map +1 -0
  144. package/.output/server/chunks/build/{Select-r3S5nkSY.mjs → Select-COwTIQlV.mjs} +3 -3
  145. package/.output/server/chunks/build/Select-COwTIQlV.mjs.map +1 -0
  146. package/.output/server/chunks/build/{SelectMenu-Dk6f8i9o.mjs → SelectMenu-BkyAHFCM.mjs} +4 -4
  147. package/.output/server/chunks/build/{SelectMenu-Dk6f8i9o.mjs.map → SelectMenu-BkyAHFCM.mjs.map} +1 -1
  148. package/.output/server/chunks/build/{Separator-pqpPG0up.mjs → Separator-CxZdx8kw.mjs} +2 -2
  149. package/.output/server/chunks/build/Separator-CxZdx8kw.mjs.map +1 -0
  150. package/.output/server/chunks/build/{SettingsField-Wdpzlt13.mjs → SettingsField-DDD4oqys.mjs} +5 -5
  151. package/.output/server/chunks/build/SettingsField-DDD4oqys.mjs.map +1 -0
  152. package/.output/server/chunks/build/{Slideover-02XjJjn0.mjs → Slideover-B95Rj237.mjs} +3 -3
  153. package/.output/server/chunks/build/Slideover-B95Rj237.mjs.map +1 -0
  154. package/.output/server/chunks/build/{Switch-gx_JXgCo.mjs → Switch-htSKgC38.mjs} +2 -2
  155. package/.output/server/chunks/build/Switch-htSKgC38.mjs.map +1 -0
  156. package/.output/server/chunks/build/{Table-C64RrBp3.mjs → Table-CPhhVzDv.mjs} +3 -3
  157. package/.output/server/chunks/build/Table-CPhhVzDv.mjs.map +1 -0
  158. package/.output/server/chunks/build/{TestStatusBar--u4VX_Xf.mjs → TestStatusBar-CEzt76wk.mjs} +2 -2
  159. package/.output/server/chunks/build/TestStatusBar-CEzt76wk.mjs.map +1 -0
  160. package/.output/server/chunks/build/{Tooltip-ui_BVvqr.mjs → Tooltip-7vwuDPrZ.mjs} +3 -3
  161. package/.output/server/chunks/build/Tooltip-7vwuDPrZ.mjs.map +1 -0
  162. package/.output/server/chunks/build/{VisuallyHiddenInput-mMsqmkjz.mjs → VisuallyHiddenInput-C9eJVpPW.mjs} +2 -2
  163. package/.output/server/chunks/build/VisuallyHiddenInput-C9eJVpPW.mjs.map +1 -0
  164. package/.output/server/chunks/build/{_id_-CFVnSs8B.mjs → _id_-BDqvTM9D.mjs} +19 -18
  165. package/.output/server/chunks/build/{_id_-CFVnSs8B.mjs.map → _id_-BDqvTM9D.mjs.map} +1 -1
  166. package/.output/server/chunks/build/{_id_-pkxJKe17.mjs → _id_-CE0Gso6i.mjs} +11 -11
  167. package/.output/server/chunks/build/_id_-CE0Gso6i.mjs.map +1 -0
  168. package/.output/server/chunks/build/{_id_-R6KGfZOC.mjs → _id_-CnwAyvvS.mjs} +257 -84
  169. package/.output/server/chunks/build/_id_-CnwAyvvS.mjs.map +1 -0
  170. package/.output/server/chunks/build/{_id_-DXJQABO8.mjs → _id_-Dy67M9Dj.mjs} +25 -25
  171. package/.output/server/chunks/build/{_id_-DXJQABO8.mjs.map → _id_-Dy67M9Dj.mjs.map} +1 -1
  172. package/.output/server/chunks/build/{about-CmtGYbC6.mjs → about-FB9PYAHK.mjs} +5 -5
  173. package/.output/server/chunks/build/about-FB9PYAHK.mjs.map +1 -0
  174. package/.output/server/chunks/build/{account-AbLuwiZP.mjs → account-Cn-eZqXM.mjs} +4 -4
  175. package/.output/server/chunks/build/account-Cn-eZqXM.mjs.map +1 -0
  176. package/.output/server/chunks/build/{ai-DR_slopS.mjs → ai-V3YOh3yx.mjs} +17 -17
  177. package/.output/server/chunks/build/ai-V3YOh3yx.mjs.map +1 -0
  178. package/.output/server/chunks/build/{analytics-BbT2-Tr-.mjs → analytics-BBlAEmj5.mjs} +235 -64
  179. package/.output/server/chunks/build/analytics-BBlAEmj5.mjs.map +1 -0
  180. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  181. package/.output/server/chunks/build/{db.client-DlA_u5y9.mjs → db.client-aHcD0wyX.mjs} +47 -22
  182. package/.output/server/chunks/build/db.client-aHcD0wyX.mjs.map +1 -0
  183. package/.output/server/chunks/build/{default-D6diRCW0.mjs → default-BfMirIgG.mjs} +17 -16
  184. package/.output/server/chunks/build/default-BfMirIgG.mjs.map +1 -0
  185. package/.output/server/chunks/build/{docs-DbYoZafk.mjs → docs-DtNcJCyb.mjs} +5 -5
  186. package/.output/server/chunks/build/{docs-DbYoZafk.mjs.map → docs-DtNcJCyb.mjs.map} +1 -1
  187. package/.output/server/chunks/build/{edit-CNV4xdYj.mjs → edit-Dsf11mL5.mjs} +8 -8
  188. package/.output/server/chunks/build/edit-Dsf11mL5.mjs.map +1 -0
  189. package/.output/server/chunks/build/fetch-8kznMtBM.mjs +1 -1
  190. package/.output/server/chunks/build/{help-content-BMumoQQF.mjs → help-content-DmFnuhNu.mjs} +6 -1
  191. package/.output/server/chunks/build/help-content-DmFnuhNu.mjs.map +1 -0
  192. package/.output/server/chunks/build/{index-Dw526KXV.mjs → index-BR9hw6qk.mjs} +10 -10
  193. package/.output/server/chunks/build/index-BR9hw6qk.mjs.map +1 -0
  194. package/.output/server/chunks/build/{index-dwYB76GO.mjs → index-Ba-Fifra.mjs} +4 -4
  195. package/.output/server/chunks/build/index-Ba-Fifra.mjs.map +1 -0
  196. package/.output/server/chunks/build/{index-rSHkKNna.mjs → index-BgpEKTSq.mjs} +505 -84
  197. package/.output/server/chunks/build/index-BgpEKTSq.mjs.map +1 -0
  198. package/.output/server/chunks/build/{index-DmHBPf7T.mjs → index-CULN3-en.mjs} +11 -2
  199. package/.output/server/chunks/build/index-CULN3-en.mjs.map +1 -0
  200. package/.output/server/chunks/build/{index-C3Ou18qD.mjs → index-DzEgjHlB.mjs} +14 -14
  201. package/.output/server/chunks/build/{index-C3Ou18qD.mjs.map → index-DzEgjHlB.mjs.map} +1 -1
  202. package/.output/server/chunks/build/{isValueEqualOrExist-DTJ5ejZs.mjs → isValueEqualOrExist-DBZjbD_3.mjs} +3 -3
  203. package/.output/server/chunks/build/isValueEqualOrExist-DBZjbD_3.mjs.map +1 -0
  204. package/.output/server/chunks/build/{login-Da5C8jP2.mjs → login-D2XZDuek.mjs} +3 -3
  205. package/.output/server/chunks/build/login-D2XZDuek.mjs.map +1 -0
  206. package/.output/server/chunks/build/{mcp-DM1t-9L_.mjs → mcp-CXwa3xU3.mjs} +8 -8
  207. package/.output/server/chunks/build/mcp-CXwa3xU3.mjs.map +1 -0
  208. package/.output/server/chunks/build/{notifications-BTPF0xA7.mjs → notifications-hJj8tbAT.mjs} +11 -11
  209. package/.output/server/chunks/build/notifications-hJj8tbAT.mjs.map +1 -0
  210. package/.output/server/chunks/build/server.mjs +37 -28
  211. package/.output/server/chunks/build/{settings-Bmw_JdBS.mjs → settings-Ci_7EXYQ.mjs} +8 -7
  212. package/.output/server/chunks/build/settings-Ci_7EXYQ.mjs.map +1 -0
  213. package/.output/server/chunks/build/{settings-metadata-CksLgMun.mjs → settings-metadata-Cp0dx0vm.mjs} +12 -3
  214. package/.output/server/chunks/build/settings-metadata-Cp0dx0vm.mjs.map +1 -0
  215. package/.output/server/chunks/build/{storage-BqR4acgi.mjs → storage-CM-Pd-9E.mjs} +191 -14
  216. package/.output/server/chunks/build/storage-CM-Pd-9E.mjs.map +1 -0
  217. package/.output/server/chunks/build/{tags-miPAzIr3.mjs → tags-DrCQ7QSw.mjs} +6 -6
  218. package/.output/server/chunks/build/tags-DrCQ7QSw.mjs.map +1 -0
  219. package/.output/server/chunks/build/{test-cases-D-LqhLpk.mjs → test-cases-DkGQB027.mjs} +14 -14
  220. package/.output/server/chunks/build/test-cases-DkGQB027.mjs.map +1 -0
  221. package/.output/server/chunks/build/timeout-hygiene-CNs71Iah.mjs +318 -0
  222. package/.output/server/chunks/build/timeout-hygiene-CNs71Iah.mjs.map +1 -0
  223. package/.output/server/chunks/build/{useAiStatus-FwqbA4gz.mjs → useAiStatus-ZO987RY7.mjs} +8 -7
  224. package/.output/server/chunks/build/useAiStatus-ZO987RY7.mjs.map +1 -0
  225. package/.output/server/chunks/build/{useSettingsNav-v_dFuTw9.mjs → useSettingsNav-D2knPCqF.mjs} +6 -6
  226. package/.output/server/chunks/build/useSettingsNav-D2knPCqF.mjs.map +1 -0
  227. package/.output/server/chunks/build/{users-D-GDKZmZ.mjs → users-NmAUZs3i.mjs} +6 -6
  228. package/.output/server/chunks/build/users-NmAUZs3i.mjs.map +1 -0
  229. package/.output/server/chunks/build/{virtualizer-BcC1XuFf.mjs → virtualizer-0-UBy7xl.mjs} +4 -4
  230. package/.output/server/chunks/build/virtualizer-0-UBy7xl.mjs.map +1 -0
  231. package/.output/server/chunks/build/{wasted-time-CFmeT_e2.mjs → wasted-time-L4kBV5Nh.mjs} +8 -8
  232. package/.output/server/chunks/build/wasted-time-L4kBV5Nh.mjs.map +1 -0
  233. package/.output/server/chunks/nitro/nitro.mjs +949 -684
  234. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  235. package/.output/server/chunks/routes/__piwi/session.get.mjs +51 -0
  236. package/.output/server/chunks/routes/__piwi/session.get.mjs.map +1 -0
  237. package/.output/server/chunks/routes/api/admin/stats.get.mjs +5 -1
  238. package/.output/server/chunks/routes/api/admin/stats.get.mjs.map +1 -1
  239. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +75 -6
  240. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs.map +1 -1
  241. package/.output/server/chunks/routes/api/auth/change-password.post.mjs +1 -1
  242. package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs +1 -1
  243. package/.output/server/chunks/routes/api/auth/login.post.mjs +1 -1
  244. package/.output/server/chunks/routes/api/auth/logout.post.mjs +1 -1
  245. package/.output/server/chunks/routes/api/auth/me.get.mjs +1 -1
  246. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +1 -1
  247. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +1 -1
  248. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +1 -1
  249. package/.output/server/chunks/routes/api/auth/reset-password.post.mjs +1 -1
  250. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +1 -1
  251. package/.output/server/chunks/routes/api/auth/setup.get.mjs +1 -1
  252. package/.output/server/chunks/routes/api/auth/setup.post.mjs +1 -1
  253. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +1 -1
  254. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +1 -1
  255. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +1 -1
  256. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +1 -1
  257. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +1 -1
  258. package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs +45 -0
  259. package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs.map +1 -0
  260. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +1 -1
  261. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +1 -1
  262. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +1 -1
  263. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +1 -1
  264. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +1 -1
  265. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +1 -1
  266. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +1 -1
  267. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +1 -1
  268. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +1 -1
  269. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +1 -1
  270. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +1 -1
  271. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +1 -1
  272. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +1 -1
  273. package/.output/server/chunks/routes/api/files/_...path_.get.mjs +1 -1
  274. package/.output/server/chunks/routes/api/health.get.mjs +1 -1
  275. package/.output/server/chunks/routes/api/index.get.mjs +1 -1
  276. package/.output/server/chunks/routes/api/index.get2.mjs +1 -1
  277. package/.output/server/chunks/routes/api/index.get3.mjs +1 -1
  278. package/.output/server/chunks/routes/api/index.get4.mjs +1 -1
  279. package/.output/server/chunks/routes/api/index.get5.mjs +1 -1
  280. package/.output/server/chunks/routes/api/index.post.mjs +1 -1
  281. package/.output/server/chunks/routes/api/index.post2.mjs +1 -1
  282. package/.output/server/chunks/routes/api/index.post3.mjs +1 -1
  283. package/.output/server/chunks/routes/api/index.post4.mjs +1 -1
  284. package/.output/server/chunks/routes/api/index.post5.mjs +1 -1
  285. package/.output/server/chunks/routes/api/index.post6.mjs +1 -1
  286. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +1 -1
  287. package/.output/server/chunks/routes/api/links/_id_.delete.mjs +1 -1
  288. package/.output/server/chunks/routes/api/links/_id_.patch.mjs +1 -1
  289. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +1 -1
  290. package/.output/server/chunks/routes/api/markers/_id_.put.mjs +1 -1
  291. package/.output/server/chunks/routes/api/notifications/stream.get.mjs +1 -1
  292. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +1 -1
  293. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +1 -1
  294. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +1 -1
  295. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +1 -1
  296. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +1 -1
  297. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +1 -1
  298. package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs +1 -1
  299. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +1 -1
  300. package/.output/server/chunks/routes/api/projects/_id/members.put.mjs +1 -1
  301. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +1 -1
  302. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +1 -1
  303. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +1 -1
  304. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +1 -1
  305. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +50 -0
  306. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs.map +1 -0
  307. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +1 -1
  308. package/.output/server/chunks/routes/api/projects/_id_.get.mjs +1 -1
  309. package/.output/server/chunks/routes/api/projects/_id_.put.mjs +1 -1
  310. package/.output/server/chunks/routes/api/projects/menu.get.mjs +1 -1
  311. package/.output/server/chunks/routes/api/projects/overview.get.mjs +1 -1
  312. package/.output/server/chunks/routes/api/projects.get.mjs +1 -1
  313. package/.output/server/chunks/routes/api/search.get.mjs +1 -1
  314. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +1 -1
  315. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +1 -1
  316. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +1 -1
  317. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +1 -1
  318. package/.output/server/chunks/routes/api/settings/ai.get.mjs +1 -1
  319. package/.output/server/chunks/routes/api/settings/ai.put.mjs +1 -1
  320. package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs +1 -1
  321. package/.output/server/chunks/routes/api/settings/smtp.get.mjs +1 -1
  322. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +40 -0
  323. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs.map +1 -0
  324. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +46 -0
  325. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs.map +1 -0
  326. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +1 -1
  327. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +1 -1
  328. package/.output/server/chunks/routes/api/stream.get.mjs +1 -1
  329. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +1 -1
  330. package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +1 -1
  331. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +1 -1
  332. package/.output/server/chunks/routes/api/tags/_id_.put.mjs +1 -1
  333. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +1 -1
  334. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +1 -1
  335. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +1 -1
  336. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +1 -1
  337. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +1 -1
  338. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +1 -1
  339. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +1 -1
  340. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +1 -1
  341. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +1 -1
  342. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +1 -1
  343. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +1 -1
  344. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs +1 -1
  345. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +1 -1
  346. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +1 -1
  347. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +1 -1
  348. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +1 -1
  349. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +1 -1
  350. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +1 -1
  351. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +1 -1
  352. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +1 -1
  353. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +1 -1
  354. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +1 -1
  355. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +1 -1
  356. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +1 -1
  357. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +1 -1
  358. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +1 -1
  359. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +1 -1
  360. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +1 -1
  361. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +1 -1
  362. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +1 -1
  363. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +1 -1
  364. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +1 -1
  365. package/.output/server/chunks/routes/api/test-runs/start.post.mjs +1 -1
  366. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +3 -1
  367. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
  368. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +2 -1
  369. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
  370. package/.output/server/chunks/routes/api/traces/check.post.mjs +1 -1
  371. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +1 -1
  372. package/.output/server/chunks/routes/api/users/_id/index.get.mjs +1 -1
  373. package/.output/server/chunks/routes/api/users/_id/index.post.mjs +1 -1
  374. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +1 -1
  375. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +1 -1
  376. package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +1 -1
  377. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -1
  378. package/.output/server/chunks/routes/api/users/_id_.patch.mjs +1 -1
  379. package/.output/server/chunks/routes/api/version.get.mjs +1 -1
  380. package/.output/server/chunks/routes/mcp.post.mjs +1 -1
  381. package/.output/server/chunks/routes/renderer.mjs +1 -1
  382. package/.output/server/database/migrations/0037_tired_hellion.sql +1 -0
  383. package/.output/server/database/migrations/0038_glamorous_ulik.sql +1 -0
  384. package/.output/server/database/migrations/meta/0037_snapshot.json +3384 -0
  385. package/.output/server/database/migrations/meta/0038_snapshot.json +3391 -0
  386. package/.output/server/database/migrations/meta/_journal.json +14 -0
  387. package/.output/server/database/migrations-pg/0038_tranquil_moira_mactaggert.sql +1 -0
  388. package/.output/server/database/migrations-pg/0039_fat_starjammers.sql +1 -0
  389. package/.output/server/database/migrations-pg/meta/0038_snapshot.json +4027 -0
  390. package/.output/server/database/migrations-pg/meta/0039_snapshot.json +4033 -0
  391. package/.output/server/database/migrations-pg/meta/_journal.json +14 -0
  392. package/.output/server/index.mjs +1 -1
  393. package/.output/server/package.json +1 -1
  394. package/package.json +1 -1
  395. package/.output/public/_nuxt/2kfkdDTz.js +0 -1
  396. package/.output/public/_nuxt/BXEDsEwG.js +0 -1
  397. package/.output/public/_nuxt/BbgBGuMG.js +0 -1
  398. package/.output/public/_nuxt/CJGJI2Of.js +0 -34
  399. package/.output/public/_nuxt/Ce4EdfL_.js +0 -4
  400. package/.output/public/_nuxt/CkpB9oBr.js +0 -1
  401. package/.output/public/_nuxt/D1tZEdSi.js +0 -1
  402. package/.output/public/_nuxt/DK9uMTYX.js +0 -1
  403. package/.output/public/_nuxt/YDWXnWou.js +0 -1
  404. package/.output/public/_nuxt/builds/meta/f549de31-8db6-4504-b526-482778a55eba.json +0 -1
  405. package/.output/public/_nuxt/entry.BxXHl1Vy.css +0 -1
  406. package/.output/public/_nuxt/wCQds5_f.js +0 -1
  407. package/.output/server/chunks/build/BrowserBadge-BTA4QU_J.mjs.map +0 -1
  408. package/.output/server/chunks/build/ChartCard-BqAhMip2.mjs.map +0 -1
  409. package/.output/server/chunks/build/Checkbox-_1nGm_DR.mjs.map +0 -1
  410. package/.output/server/chunks/build/CiEnvCard-DAufYuJw.mjs.map +0 -1
  411. package/.output/server/chunks/build/CodeBlock-BVKHuYjU.mjs.map +0 -1
  412. package/.output/server/chunks/build/DashboardNavbar-BR6j4VLd.mjs.map +0 -1
  413. package/.output/server/chunks/build/DiagnosisPanel-BnrdXDvd.mjs.map +0 -1
  414. package/.output/server/chunks/build/EnvManagedBadge-DdnEtjIl.mjs.map +0 -1
  415. package/.output/server/chunks/build/HelpHint-D_GJzMpW.mjs.map +0 -1
  416. package/.output/server/chunks/build/Modal-COIjm3js.mjs.map +0 -1
  417. package/.output/server/chunks/build/ProjectTestCasesTable-XFBPQGIX.mjs.map +0 -1
  418. package/.output/server/chunks/build/RunReports-ChNkmuWa.mjs.map +0 -1
  419. package/.output/server/chunks/build/RunStatusBadge-CXpuCUGQ.mjs.map +0 -1
  420. package/.output/server/chunks/build/SectionCard-zs9FDzps.mjs.map +0 -1
  421. package/.output/server/chunks/build/Select-r3S5nkSY.mjs.map +0 -1
  422. package/.output/server/chunks/build/Separator-pqpPG0up.mjs.map +0 -1
  423. package/.output/server/chunks/build/SettingsField-Wdpzlt13.mjs.map +0 -1
  424. package/.output/server/chunks/build/Slideover-02XjJjn0.mjs.map +0 -1
  425. package/.output/server/chunks/build/Switch-gx_JXgCo.mjs.map +0 -1
  426. package/.output/server/chunks/build/Table-C64RrBp3.mjs.map +0 -1
  427. package/.output/server/chunks/build/TestStatusBar--u4VX_Xf.mjs.map +0 -1
  428. package/.output/server/chunks/build/Tooltip-ui_BVvqr.mjs.map +0 -1
  429. package/.output/server/chunks/build/VisuallyHiddenInput-mMsqmkjz.mjs.map +0 -1
  430. package/.output/server/chunks/build/_id_-R6KGfZOC.mjs.map +0 -1
  431. package/.output/server/chunks/build/_id_-pkxJKe17.mjs.map +0 -1
  432. package/.output/server/chunks/build/about-CmtGYbC6.mjs.map +0 -1
  433. package/.output/server/chunks/build/account-AbLuwiZP.mjs.map +0 -1
  434. package/.output/server/chunks/build/ai-DR_slopS.mjs.map +0 -1
  435. package/.output/server/chunks/build/analytics-BbT2-Tr-.mjs.map +0 -1
  436. package/.output/server/chunks/build/db.client-DlA_u5y9.mjs.map +0 -1
  437. package/.output/server/chunks/build/default-D6diRCW0.mjs.map +0 -1
  438. package/.output/server/chunks/build/edit-CNV4xdYj.mjs.map +0 -1
  439. package/.output/server/chunks/build/help-content-BMumoQQF.mjs.map +0 -1
  440. package/.output/server/chunks/build/index-DmHBPf7T.mjs.map +0 -1
  441. package/.output/server/chunks/build/index-Dw526KXV.mjs.map +0 -1
  442. package/.output/server/chunks/build/index-dwYB76GO.mjs.map +0 -1
  443. package/.output/server/chunks/build/index-rSHkKNna.mjs.map +0 -1
  444. package/.output/server/chunks/build/isValueEqualOrExist-DTJ5ejZs.mjs.map +0 -1
  445. package/.output/server/chunks/build/login-Da5C8jP2.mjs.map +0 -1
  446. package/.output/server/chunks/build/mcp-DM1t-9L_.mjs.map +0 -1
  447. package/.output/server/chunks/build/notifications-BTPF0xA7.mjs.map +0 -1
  448. package/.output/server/chunks/build/settings-Bmw_JdBS.mjs.map +0 -1
  449. package/.output/server/chunks/build/settings-metadata-CksLgMun.mjs.map +0 -1
  450. package/.output/server/chunks/build/storage-BqR4acgi.mjs.map +0 -1
  451. package/.output/server/chunks/build/tags-miPAzIr3.mjs.map +0 -1
  452. package/.output/server/chunks/build/test-cases-D-LqhLpk.mjs.map +0 -1
  453. package/.output/server/chunks/build/useAiStatus-FwqbA4gz.mjs.map +0 -1
  454. package/.output/server/chunks/build/useSettingsNav-v_dFuTw9.mjs.map +0 -1
  455. package/.output/server/chunks/build/users-D-GDKZmZ.mjs.map +0 -1
  456. package/.output/server/chunks/build/virtualizer-BcC1XuFf.mjs.map +0 -1
  457. package/.output/server/chunks/build/wasted-time-CFmeT_e2.mjs.map +0 -1
@@ -0,0 +1,34 @@
1
+ import{_ as Ot,a as At}from"./Bvfmwzgw.js";import{_ as Lt,a as zt}from"./IFqRT_xJ.js";import{_ as Bt}from"./C1K3r_fc.js";import{d as z,am as Ut,C as Ft,G as qt,ab as Wt,B as vt,o as s,c as k,h as T,r as ft,j as $,l as at,k as t,f as v,g as f,i as r,v as it,p as N,t as g,q as P,m as j,_ as F,w as B,F as V,y as O,ae as Mt,x as Q,O as ot,s as wt,e as Gt}from"./BPKwYP2Q.js";import{_ as Ht}from"./C3r_Sv1p.js";import{_ as Yt}from"./BGYbnqA7.js";import{u as Xt}from"./iwD5atI2.js";import{u as _t}from"./BIf1R_fu.js";import{_ as Jt}from"./DbeHHTk-.js";import{_ as Qt}from"./Br2K9yi_.js";import{e as q,f as lt,h as Zt,c as Kt}from"./k-z_VVTK.js";import{_ as W}from"./CgoAUz76.js";import{_ as G}from"./CKB_doYB.js";import{_ as H}from"./xUrLy-Zn.js";import{_ as K}from"./DhA17dqR.js";import{_ as te}from"./BQrSEuzu.js";import{_ as Rt}from"./BVW5qIDP.js";import{_ as ee}from"./D2jhe9JK.js";import{_ as ct}from"./BBdfPriC.js";import{X as se,b as Et,c as dt,d as ae,i as ne,e as re,f as oe,g as et,m as mt,h as le,j as kt,k as ie,l as $t,s as st,n as St,o as ce,p as de,q as ue,r as me,t as pe,P as _e,v as ye,_ as bt,u as Dt,a as xt,C as yt,w as ge,O as Z}from"./BV83yObd.js";import{_ as ut}from"./2xvsvjLO.js";import{N as jt}from"./mfzslNx_.js";import{_ as he,a as fe}from"./B2lYFco4.js";import"./jIF87ALb.js";import"./CpO-ABDW.js";import"./mGJLLqyN.js";import"./d5ZB3uxF.js";import"./DAWn6Z7h.js";import"./C219JuBV.js";import"./C38aZbFJ.js";import"./DRtTLQri.js";import"./CQeMb57w.js";import"./r3SBLxtE.js";import"./DuMv-ugy.js";import"./B7yG1G_l.js";import"./D7W_4Sqc.js";function be({x:M,y:e,w:l,h:p,tl:a=!1,tr:R=!1,bl:u=!1,br:D=!1,r:b=0}){let m;m=`M${M+b},${e}h${l-2*b}`;let n=R?b:0,i=R?0:b;return m+=`a${n},${n} 0 0 1 ${n},${n}`,m+=`h${i}v${i}`,m+=`v${p-2*b}`,n=D?b:0,i=D?0:b,m+=`a${n},${n} 0 0 1 ${-n},${n}`,m+=`v${i}h${-i}`,m+=`h${2*b-l}`,n=u?b:0,i=u?0:b,m+=`a${n},${n} 0 0 1 ${-n},${-n}`,m+=`h${-i}v${-i}`,m+=`v${2*b-p}`,n=a?b:0,i=a?0:b,m+=`a${n},${n} 0 0 1 ${n},${-n}`,m+=`v${-i}h${i}`,m+="z",m}const xe=Object.assign(Object.assign({},se),{color:void 0,barMaxWidth:void 0,barWidth:void 0,dataStep:void 0,barPadding:0,roundedCorners:2,cursor:null,barMinHeight1Px:!1,barMinHeightZeroValue:null,orientation:Et.Vertical}),Tt=dt`
2
+ label: stacked-bar-component;
3
+ `,ve=ne`
4
+ :root {
5
+ --vis-stacked-bar-cursor: default;
6
+ --vis-stacked-bar-fill-color: var(--vis-color-main);
7
+ --vis-stacked-bar-stroke-color: none;
8
+ --vis-stacked-bar-stroke-width: 0px;
9
+ --vis-stacked-bar-hover-stroke-width: none;
10
+ --vis-stacked-bar-hover-stroke-color: none;
11
+
12
+ /* Dark Theme */
13
+ --vis-dark-stacked-bar-stroke-color: none;
14
+ }
15
+
16
+ ${ae} ${`.${Tt}`} {
17
+ --vis-stacked-bar-stroke-color: var(--vis-dark-stacked-bar-stroke-color);
18
+ }
19
+ `,rt=dt`
20
+ label: bar;
21
+ fill: var(--vis-stacked-bar-fill-color);
22
+ stroke: var(--vis-stacked-bar-stroke-color);
23
+ stroke-width: var(--vis-stacked-bar-stroke-width);
24
+ cursor: var(--vis-stacked-bar-cursor);
25
+
26
+ &:hover {
27
+ stroke-width: var(--vis-stacked-bar-hover-stroke-width);
28
+ stroke: var(--vis-stacked-bar-hover-stroke-color);
29
+ }
30
+ `,gt=dt`
31
+ label: barGroup;
32
+ `,Vt=dt`
33
+ label: barGroupExit;
34
+ `,ke=Object.freeze(Object.defineProperty({__proto__:null,bar:rt,barGroup:gt,barGroupExit:Vt,globalStyles:ve,root:Tt},Symbol.toStringTag,{value:"Module"}));class It extends re{constructor(e){super(),this._defaultConfig=xe,this.config=this._defaultConfig,this.getAccessors=()=>oe(this.config.y)?this.config.y:[this.config.y],this.stacked=!0,this.events={},this._barData=[],e&&this.setConfig(e)}get bleed(){if(this._barData=this._getVisibleData(),this._barData.length===0)return{top:0,bottom:0,left:0,right:0};const e=!this.isVertical()&&this.dataScale.range()[0]>this.dataScale.range()[1],l=this.dataScale.domain(),p=this._getBarWidth()/2,a=this._barData.map((C,y)=>et(C,this.config.x,y)),R=mt(a),u=le(a),D=this.dataScale(R),b=this.dataScale(u),m=this.dataScale.invert(D+(e?p:-p)),n=this.dataScale.invert(b+(e?-p:p)),i=m<=l[0]?this.dataScale(l[0])-this.dataScale(m):0,E=n>l[1]?this.dataScale(n)-this.dataScale(l[1]):0;return{top:this.isVertical()?0:e?-E:i,bottom:this.isVertical()?0:e?-i:E,left:this.isVertical()?i:0,right:this.isVertical()?E:0}}get dataScale(){return this.isVertical()?this.xScale:this.yScale}get valueScale(){return this.isVertical()?this.yScale:this.xScale}isVertical(){return this.config.orientation===Et.Vertical}_render(e){const{config:l}=this,p=kt(e)?e:l.duration,a=this.getAccessors(),R=ie(this._barData,0,a,this._prevNegative);this._prevNegative=R.map(y=>!!y.isMostlyNegative);const u=this.g.selectAll(`.${gt}`).data(this._barData,(y,h)=>{var c;return`${(c=$t(y,l.id,h))!==null&&c!==void 0?c:h}`}),D=(y,h)=>{const c=this.dataScale(et(y,l.x,h)),S=this.isVertical()?c:0,o=this.isVertical()?0:c;return`translate(${S},${o})`},m=u.enter().append("g").attr("class",gt).attr("transform",D).style("opacity",1).merge(u);st(m,p).attr("transform",D).style("opacity",1);const n=u.exit().attr("class",Vt);st(n,p).style("opacity",0).remove().on("interrupt",function(){this.remove()}),st(n.selectAll(`.${rt}`),p).attr("transform",this.isVertical()?`translate(0,${this._height/3})`:`translate(${this._width/6},0)`);const i=m.selectAll(`.${rt}`).data((y,h)=>{const c=R.map((S,o)=>({datum:y,index:h,stacked:S[h],stackIndex:o})).filter(S=>S.stacked[0]!==S.stacked[1]);return c.forEach((S,o)=>{S.isEnding=o===c.length-1||o<=c.length-1&&c[o+1].stacked[0]!==S.stacked[1]}),c},y=>y.stackIndex),C=i.enter().append("path").attr("class",rt).attr("d",y=>this._getBarPath(y,!0)).style("fill",y=>St(y.datum,l.color,y.stackIndex)).merge(i);st(C,p).attr("d",y=>this._getBarPath(y)).style("fill",y=>St(y.datum,l.color,y.stackIndex)).style("cursor",y=>$t(y.datum,l.cursor,y.stackIndex)),st(i.exit(),p).style("opacity",0).remove().on("interrupt",function(){this.remove()})}_getBarWidth(){const{config:e,datamodel:{data:l}}=this;if(ce(l))return 0;if(e.barWidth)return mt([e.barWidth,e.barMaxWidth]);const p=this.dataScale.bandwidth,a=this.dataScale.domain?this.dataScale.domain():[];let u=1+(p?a.length:a[1]-a[0])/e.dataStep||!p&&l.filter((m,n)=>{const i=et(m,e.x,n);return i>=a[0]&&i<=a[1]}).length||l.length;!p&&u>=2&&(u+=1);const b=(u<2?1:1-e.barPadding)*(this.isVertical()?this._width:this._height)/u;return mt([b,e.barMaxWidth])}_getVisibleData(){const{config:e,datamodel:{data:l}}=this,p=this._getBarWidth(),a=l.length<2?0:p/2,R=this.dataScale,u=Math.abs(R.invert(a)-R.invert(0));return l?.filter((b,m)=>{const n=et(b,e.x,m),i=R.domain(),E=+i[0],C=+i[1];return n>=E-u&&n<=C+u})}_getBarPath(e,l=!1){const{config:p}=this,a=this.getAccessors(),R=this._getBarWidth(),u=e.stacked[1]<0,D=e.isEnding,b=et(e.datum,a[e.stackIndex],e.index),m=l?0:Math.abs(this.valueScale(e.stacked[0])-this.valueScale(e.stacked[1])),n=!l&&p.barMinHeight1Px&&m<1&&isFinite(b)&&b!==p.barMinHeightZeroValue?1:m,i=l?this.valueScale(0):this.valueScale(u?e.stacked[0]:e.stacked[1])-(m<1&&p.barMinHeight1Px?1:0),E=-R/2,C=R,y=p.roundedCorners?kt(p.roundedCorners)?+p.roundedCorners:C/2:0,h=me(y,0,Math.min(m,C)/2),c=this.yScale.range()[0]>this.yScale.range()[1];return be({x:this.isVertical()?E:i-n,y:this.isVertical()?i+(c?0:-n):E,w:this.isVertical()?C:n,h:this.isVertical()?n:C,tl:D&&(this.isVertical()?!u&&c||u&&!c:u),tr:D&&(this.isVertical()?!u&&c||u&&!c:!u),br:D&&(this.isVertical()?u&&c||!u&&!c:!u),bl:D&&(this.isVertical()?u&&c||!u&&!c:u),r:h})}_mapEventDatum(e){return{datum:Object.assign(Object.assign({},e),e.datum),index:e.index}}getValueScaleExtent(e){const{datamodel:l}=this,p=this.getAccessors(),a=e?this._getVisibleData():l.data;return de(a,...p)}getDataScaleExtent(){const{config:e,datamodel:l}=this;return ue(l.data,e.x)}getYDataExtent(e){return this.isVertical()?this.getValueScaleExtent(e):this.getDataScaleExtent()}getXDataExtent(){return this.isVertical()?this.getDataScaleExtent():this.getValueScaleExtent(!1)}}It.selectors=ke;const $e={"data-vis-component":""},Se=z({__name:"index",props:{color:{type:[Function,String,Array,null]},barWidth:{},barMaxWidth:{},dataStep:{},barPadding:{},roundedCorners:{type:[Number,Boolean]},cursor:{type:[Function,String,null]},barMinHeight1Px:{type:Boolean},barMinHeightZeroValue:{},orientation:{},x:{type:[Function,Number,null]},y:{type:[Function,Number,null,Array]},id:{type:Function},xScale:{type:[Object,Function]},yScale:{type:[Object,Function]},excludeFromDomainCalculation:{type:Boolean},duration:{},events:{},attributes:{},data:{}},setup(M,{expose:e}){const l=Ut(pe),p=M,a=T(()=>l.data.value??p.data),R=_e(p),u=ft();return Ft(()=>{qt(()=>{u.value=new It(R.value),u.value?.setData(a.value),l.update(u.value)})}),Wt(()=>{u.value?.destroy(),l.destroy()}),vt(R,(D,b)=>{ye(D,b)||(u.value?.setConfig(R.value),u.value?.render())}),vt(a,()=>{u.value?.setData(a.value)}),e({component:u}),(D,b)=>(s(),k("div",$e))}}),Ce=30,ht=3650;function Me(M){const e={days:String(M.days)};return M.projectIds&&M.projectIds.length>0&&(e.projects=M.projectIds.join(",")),M.environment&&(e.environment=M.environment),M.fullRunsOnly||(e.fullRunsOnly="false"),e}const J={days:Ce,projectIds:[],environment:null,fullRunsOnly:!0};function we(){const M=Xt("piwi-analytics-scope",{default:()=>({...J}),encode:p=>JSON.stringify(p),decode:p=>{try{return p?{...J,...JSON.parse(p)}:{...J}}catch{return{...J}}}}),e=T(()=>({days:M.value.days,projectIds:M.value.projectIds.length>0?M.value.projectIds:void 0,environment:M.value.environment,fullRunsOnly:M.value.fullRunsOnly})),l=T(()=>Me(e.value));return{state:M,scope:e,scopeQuery:l}}function Y(M,e){return _t(`/api/analytics/${M}`,{query:T(e),lazy:!0,server:!1},"$EEH4o0rJ7t")}const Re={class:"flex items-center gap-3 flex-wrap"},Ee={class:"flex items-center gap-1.5"},De={key:0,class:"text-gray-500"},je={key:1,class:"truncate"},Te={key:2},Ve={class:"flex items-center gap-1.5 cursor-pointer select-none text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 transition-colors"},pt="All environments",Ie=z({__name:"AnalyticsScopeBar",props:{modelValue:{},availableProjects:{},availableEnvironments:{}},emits:["update:modelValue"],setup(M,{emit:e}){const l=M,p=e,a=[{label:"Last 7 days",value:7},{label:"Last 30 days",value:30},{label:"Last 90 days",value:90},{label:"Last year",value:365},{label:"All time",value:ht}],R=T({get:()=>l.modelValue.days,set:y=>p("update:modelValue",{...l.modelValue,days:y})}),u=T(()=>l.availableProjects.map(y=>({label:y.label||y.name,value:y.id}))),D=T({get:()=>l.modelValue.projectIds,set:y=>p("update:modelValue",{...l.modelValue,projectIds:y})});function b(y){return u.value.find(h=>h.value===y)?.label??`#${y}`}const m=T({get:()=>l.modelValue.environment??pt,set:y=>p("update:modelValue",{...l.modelValue,environment:y===pt?null:y})}),n=T(()=>[pt,...l.availableEnvironments]),i=T({get:()=>l.modelValue.fullRunsOnly,set:y=>p("update:modelValue",{...l.modelValue,fullRunsOnly:y})}),E=T(()=>l.modelValue.days===J.days&&l.modelValue.projectIds.length===0&&l.modelValue.environment===null&&l.modelValue.fullRunsOnly===J.fullRunsOnly);function C(){p("update:modelValue",{...J})}return(y,h)=>{const c=Bt,S=it,o=Ht,d=Yt,_=F;return s(),k("div",Re,[$(c,{modelValue:t(R),"onUpdate:modelValue":h[0]||(h[0]=w=>at(R)?R.value=w:null),items:a,size:"sm",class:"min-w-[140px]",icon:"i-lucide-calendar-range"},null,8,["modelValue"]),t(u).length>0?(s(),v(o,{key:0,modelValue:t(D),"onUpdate:modelValue":h[1]||(h[1]=w=>at(D)?D.value=w:null),items:t(u),"value-key":"value",multiple:"",searchable:"",size:"sm",class:"min-w-[170px]",placeholder:"All projects"},{default:f(({modelValue:w})=>[r("div",Ee,[$(S,{name:"i-lucide-folder",class:N(["size-3.5 shrink-0",w.length?"text-primary":"text-gray-400"])},null,8,["class"]),w.length?w.length===1?(s(),k("span",je,g(b(w[0])),1)):(s(),k("span",Te,g(w.length)+" projects",1)):(s(),k("span",De,"All projects"))])]),_:1},8,["modelValue","items"])):P("",!0),M.availableEnvironments.length>0?(s(),v(c,{key:1,modelValue:t(m),"onUpdate:modelValue":h[2]||(h[2]=w=>at(m)?m.value=w:null),items:t(n),size:"sm",class:"min-w-[160px]",icon:"i-lucide-server"},null,8,["modelValue","items"])):P("",!0),r("label",Ve,[$(d,{modelValue:t(i),"onUpdate:modelValue":h[3]||(h[3]=w=>at(i)?i.value=w:null),size:"sm"},null,8,["modelValue"]),h[4]||(h[4]=j(" Full runs only ",-1))]),t(E)?P("",!0):(s(),v(_,{key:2,variant:"ghost",size:"sm",color:"neutral",icon:"i-lucide-x",onClick:C},{default:f(()=>[...h[5]||(h[5]=[j(" Reset ",-1)])]),_:1}))])}}}),Pe=Object.assign(Ie,{__name:"AnalyticsScopeBar"}),Pt=[{id:"insights",title:"Insights",icon:"i-lucide-lightbulb",size:"half"},{id:"pass-rate-heatmap",title:"Pass rate heatmap",icon:"i-lucide-grid-3x3",size:"half"},{id:"portfolio",title:"Portfolio health",icon:"i-lucide-table-properties",size:"full"},{id:"ci-time-trend",title:"CI time",icon:"i-lucide-timer",size:"half"},{id:"wasted-time",title:"Wasted CI time",icon:"i-lucide-hourglass",size:"half"},{id:"flaky-leaderboard",title:"Flakiest tests",icon:"i-lucide-repeat",size:"half"},{id:"cluster-landscape",title:"Failure clusters",icon:"i-lucide-layers",size:"half"},{id:"regression-velocity",title:"Regression velocity",icon:"i-lucide-git-pull-request-arrow",size:"half"},{id:"browser-matrix",title:"Browser matrix",icon:"i-lucide-monitor-smartphone",size:"half"},{id:"slow-endpoints",title:"Slow endpoints",icon:"i-lucide-gauge",size:"full"}];new Set(Pt.map(M=>M.id));const Ne={key:3,class:"divide-y divide-gray-100 dark:divide-gray-800"},Oe={class:"min-w-0"},Ae={class:"text-sm font-medium"},Le={key:0,class:"text-xs text-gray-500 dark:text-gray-400 mt-0.5"},ze=z({__name:"InsightsFeed",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("insights",()=>p.query)),e=await e,l(),e),b=Q,m={critical:{icon:"i-lucide-octagon-alert",class:"text-red-500",border:"border-l-red-500"},warning:{icon:"i-lucide-triangle-alert",class:"text-amber-500",border:"border-l-amber-400"},info:{icon:"i-lucide-info",class:"text-blue-500",border:"border-l-blue-400"},positive:{icon:"i-lucide-trending-up",class:"text-green-500",border:"border-l-green-500"}};return(n,i)=>{const E=W,C=F,y=G,h=H,c=it,S=K;return s(),v(S,{icon:"i-lucide-lightbulb",title:"Insights",count:t(a)?.length||void 0,help:"analytics.insights"},{default:f(()=>[t(R)?(s(),v(E,{key:0})):t(u)?(s(),v(y,{key:1,text:`Couldn't load insights: ${("errorMessage"in n?n.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(C,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:i[0]||(i[0]=o=>t(D)())},{default:f(()=>[...i[1]||(i[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).length===0?(s(),v(h,{key:2,icon:"i-lucide-check-circle",text:"Nothing needs your attention in this period."})):(s(),k("div",Ne,[(s(!0),k(V,null,O(t(a),o=>(s(),v(Mt(o.to?t(b):"div"),{key:o.id,to:o.to,class:N(["flex items-start gap-3 py-3 pl-3 border-l-2",[m[o.severity].border,o.to?"hover:bg-gray-50 dark:hover:bg-gray-800/60 rounded-r transition-colors":""]])},{default:f(()=>[$(c,{name:m[o.severity].icon,class:N(["size-4 mt-0.5 shrink-0",m[o.severity].class])},null,8,["name","class"]),r("div",Oe,[r("p",Ae,g(o.message),1),o.detail?(s(),k("p",Le,g(o.detail),1)):P("",!0)])]),_:2},1032,["to","class"]))),128))]))]),_:1},8,["count"])}}}),Be=Object.assign(ze,{__name:"InsightsFeed"}),Ue={class:"md:hidden space-y-3"},Fe={class:"flex items-center justify-between gap-2"},qe={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},We={key:0},Ge={class:"hidden md:block"},He={class:"w-full text-sm"},Ye={class:"divide-y divide-gray-100 dark:divide-gray-800"},Xe={class:"py-2.5 pr-4"},Je={class:"flex items-center gap-2 min-w-0"},Qe={class:"py-2.5 pr-4"},Ze={class:"w-36"},Ke={class:"py-2.5 pr-4 text-right"},ts={class:"py-2.5 pr-4 text-right tabular-nums"},es={class:"py-2.5 pr-4 text-right tabular-nums text-gray-500 dark:text-gray-400"},ss={class:"py-2.5 text-right"},as={class:"text-xs text-gray-500 dark:text-gray-400"},ns={key:1,class:"text-xs text-gray-400"},rs=z({__name:"PortfolioScorecard",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("portfolio",()=>p.query)),e=await e,l(),e);function b(n){return n===null?"text-gray-400":n>=90?"text-green-600 dark:text-green-400":n>=50?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"}function m(n){return n===null||Math.abs(n)<1?null:n>0?{icon:"i-lucide-trending-up",class:"text-green-600 dark:text-green-400"}:{icon:"i-lucide-trending-down",class:"text-red-600 dark:text-red-400"}}return(n,i)=>{const E=W,C=F,y=G,h=H,c=Q,S=te,o=Rt,d=it,_=ee,w=ct,I=K;return s(),v(I,{icon:"i-lucide-table-properties",title:"Portfolio health",count:t(a)?.length||void 0,help:"analytics.portfolio"},{default:f(()=>[t(R)?(s(),v(E,{key:0})):t(u)?(s(),v(y,{key:1,text:`Couldn't load the portfolio: ${("errorMessage"in n?n.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(C,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:i[0]||(i[0]=x=>t(D)())},{default:f(()=>[...i[1]||(i[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).length===0?(s(),v(h,{key:2,text:"No projects with runs in this period."})):(s(),k(V,{key:3},[r("div",Ue,[(s(!0),k(V,null,O(t(a),x=>(s(),k("div",{key:x.projectId,class:"rounded-lg border border-gray-200 dark:border-gray-800 p-3 space-y-2"},[r("div",Fe,[$(c,{to:`/projects/${x.projectId}`,class:"font-medium truncate hover:text-primary"},{default:f(()=>[j(g(x.label||x.name),1)]),_:2},1032,["to"]),r("span",{class:N(["tabular-nums font-semibold shrink-0",b(x.passRate)])},g(x.passRate!==null?`${x.passRate}%`:"—"),3)]),$(S,{runs:x.recentRuns,height:20},null,8,["runs"]),r("div",qe,[r("span",null,g(x.runCount)+" runs · "+g(x.flakyTests)+" flaky · "+g(x.openClusters)+" open clusters",1),x.latestRun?(s(),k("span",We,g(("formatRelativeTime"in n?n.formatRelativeTime:t(lt))(x.latestRun.startTime)),1)):P("",!0)])]))),128))]),r("div",Ge,[$(w,{"min-width":"52rem"},{default:f(()=>[r("table",He,[i[2]||(i[2]=r("thead",null,[r("tr",{class:"text-left text-xs text-gray-500 uppercase tracking-wider border-b border-gray-200 dark:border-gray-800"},[r("th",{class:"py-2 pr-4 font-medium"},"Project"),r("th",{class:"py-2 pr-4 font-medium"},"Trend"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Pass rate"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Runs"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Flaky"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Avg run"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Open clusters"),r("th",{class:"py-2 font-medium text-right"},"Latest run")])],-1)),r("tbody",Ye,[(s(!0),k(V,null,O(t(a),x=>(s(),k("tr",{key:x.projectId},[r("td",Xe,[r("div",Je,[$(c,{to:`/projects/${x.projectId}`,class:"font-medium truncate hover:text-primary"},{default:f(()=>[j(g(x.label||x.name),1)]),_:2},1032,["to"]),(s(!0),k(V,null,O(x.tags.slice(0,2),U=>(s(),v(o,{key:U.id,text:U.text,color:U.color},null,8,["text","color"]))),128))])]),r("td",Qe,[r("div",Ze,[$(S,{runs:x.recentRuns,height:22},null,8,["runs"])])]),r("td",Ke,[r("span",{class:N(["inline-flex items-center gap-1 tabular-nums font-semibold",b(x.passRate)])},[j(g(x.passRate!==null?`${x.passRate}%`:"—")+" ",1),m(x.passRateDelta)?(s(),v(d,{key:0,name:m(x.passRateDelta).icon,class:N(["size-3.5",m(x.passRateDelta).class]),title:`${x.passRateDelta>0?"+":""}${x.passRateDelta} pts vs previous period`},null,8,["name","class","title"])):P("",!0)],2)]),r("td",ts,g(x.runCount),1),r("td",{class:N(["py-2.5 pr-4 text-right tabular-nums",x.flakyTests>0?"text-amber-600 dark:text-amber-400":""])},g(x.flakyTests),3),r("td",es,g(x.avgRunDurationMs?("formatDuration"in n?n.formatDuration:t(Zt))(x.avgRunDurationMs):"—"),1),r("td",{class:N(["py-2.5 pr-4 text-right tabular-nums",x.openClusters>0?"text-red-600 dark:text-red-400":""])},g(x.openClusters),3),r("td",ss,[x.latestRun?(s(),v(c,{key:0,to:`/test-runs/${x.latestRun.id}`,class:"inline-flex items-center gap-2 hover:text-primary"},{default:f(()=>[$(_,{status:x.latestRun.status},null,8,["status"]),r("span",as,g(("formatRelativeTime"in n?n.formatRelativeTime:t(lt))(x.latestRun.startTime)),1)]),_:2},1032,["to"])):(s(),k("span",ns,"No runs"))])]))),128))])])]),_:1})])],64))]),_:1},8,["count"])}}}),os=Object.assign(rs,{__name:"PortfolioScorecard"}),ls={class:"space-y-1"},is={class:"flex gap-px"},cs=["title"],ds={class:"grid gap-2",style:{"grid-template-columns":"8rem 1fr"}},us={class:"relative h-4"},ms=z({__name:"PassRateHeatmap",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("pass-rate-heatmap",()=>p.query)),e=await e,l(),e);function b(c){return c===null?{}:c>=99.5?{backgroundColor:"rgba(34, 197, 94, 0.85)"}:c>=90?{backgroundColor:"rgba(34, 197, 94, 0.5)"}:c>=75?{backgroundColor:"rgba(245, 158, 11, 0.55)"}:c>=50?{backgroundColor:"rgba(249, 115, 22, 0.65)"}:{backgroundColor:"rgba(239, 68, 68, 0.75)"}}function m(c,S,o){const d=a.value?.buckets[S]??"",_=(a.value?.bucketDays??1)>1?` (${a.value.bucketDays} days)`:"";return`${c.label||c.name} · ${d}${_}: ${o!==null?`${o}% passed`:"no runs"}`}const n=[{color:"rgba(34, 197, 94, 0.85)",label:"100%"},{color:"rgba(34, 197, 94, 0.5)",label:"≥ 90%"},{color:"rgba(245, 158, 11, 0.55)",label:"≥ 75%"},{color:"rgba(249, 115, 22, 0.65)",label:"≥ 50%"},{color:"rgba(239, 68, 68, 0.75)",label:"< 50%"}],i=T(()=>{const c=a.value?.bucketDays??1;return c>1?`One cell = ${c} days`:"One cell = one day"}),E=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],C=T(()=>{const c=a.value?.buckets??[];return c.length>1&&c[0].slice(0,4)!==c[c.length-1].slice(0,4)});function y(c){const[S,o,d]=c.split("-"),_=E[Number(o)-1];return C.value?`${_} ${S}`:`${_} ${Number(d)}`}const h=T(()=>{const c=a.value?.buckets??[],S=c.length;if(S===0)return[];const o=Math.min(C.value?4:5,S),d=new Set,_=[];for(let w=0;w<o;w++){const I=o===1?0:Math.round(w*(S-1)/(o-1));if(d.has(I))continue;d.add(I);const x=I===0?0:I===S-1?100:(I+.5)/S*100,U=I===0?"translateX(0)":I===S-1?"translateX(-100%)":"translateX(-50%)";_.push({index:I,label:y(c[I]),left:x,transform:U})}return _});return(c,S)=>{const o=W,d=F,_=G,w=H,I=Q,x=bt,U=ct,X=ut;return s(),v(X,{icon:"i-lucide-grid-3x3",title:"Pass rate heatmap",subtitle:t(i),help:"analytics.heatmap"},{default:f(()=>[t(R)?(s(),v(o,{key:0})):t(u)?(s(),v(_,{key:1,text:`Couldn't load the heatmap: ${("errorMessage"in c?c.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(d,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:S[0]||(S[0]=A=>t(D)())},{default:f(()=>[...S[1]||(S[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).rows.length===0?(s(),v(w,{key:2,text:"No runs in this period."})):(s(),v(U,{key:3,"min-width":"22rem"},{default:f(()=>[r("div",ls,[(s(!0),k(V,null,O(t(a).rows,A=>(s(),k("div",{key:A.projectId,class:"grid items-center gap-2",style:{"grid-template-columns":"8rem 1fr"}},[$(I,{to:`/projects/${A.projectId}`,class:"text-sm truncate hover:text-primary",title:A.label||A.name},{default:f(()=>[j(g(A.label||A.name),1)]),_:2},1032,["to","title"]),r("div",is,[(s(!0),k(V,null,O(A.cells,(nt,tt)=>(s(),k("div",{key:tt,class:"h-6 flex-1 rounded-sm min-w-1 bg-gray-100 dark:bg-gray-800",style:ot(b(nt)),title:m(A,tt,nt)},null,12,cs))),128))])]))),128)),r("div",ds,[S[2]||(S[2]=r("span",null,null,-1)),r("div",us,[(s(!0),k(V,null,O(t(h),A=>(s(),k("span",{key:A.index,class:"absolute top-0 text-xs text-gray-400 whitespace-nowrap",style:ot({left:`${A.left}%`,transform:A.transform})},g(A.label),5))),128))])]),$(x,{items:n,dense:""})])]),_:1}))]),_:1},8,["subtitle"])}}}),ps=Object.assign(ms,{__name:"PassRateHeatmap"}),_s={key:3,class:"w-full relative"},ys={class:"p-2 text-sm text-gray-900 dark:text-gray-100"},gs={class:"font-semibold mb-1"},hs={class:"text-gray-400 text-xs"},Ct="rgb(59, 130, 246)",fs=z({__name:"CiTimeTrendChart",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("ci-time-trend",()=>p.query)),e=await e,l(),e),b=T(()=>a.value?.points.map(o=>({date:new Date(o.date),totalMinutes:o.totalMinutes,runCount:o.runCount}))??[]),m=T(()=>b.value.some(o=>o.runCount>0)),n=o=>o.date,i=o=>o.totalMinutes,E=ft(null),{tooltipData:C,tooltipPos:y,onRenderComplete:h}=Dt(E,b,{x:o=>o.date,series:[{y:o=>o.totalMinutes,color:Ct}]}),c=T(()=>{if(!a.value||a.value.deltaPct===null)return null;const o=a.value.deltaPct;return{label:`${o>0?"+":""}${o}% vs previous period`,class:o>25?"text-red-600 dark:text-red-400":o<-10?"text-green-600 dark:text-green-400":"text-gray-500"}}),S=T(()=>{if(!a.value)return;const o=a.value.totalMinutes;return`${o<60?`${Math.round(o)} min`:`${Math.round(o/60*10)/10} h`} across ${a.value.runCount} runs`});return(o,d)=>{const _=W,w=F,I=G,x=H,U=ut;return s(),v(U,{icon:"i-lucide-timer",title:"CI time",subtitle:t(S),help:"analytics.ci-time"},{actions:f(()=>[t(c)?(s(),k("span",{key:0,class:N(["text-xs font-medium tabular-nums",t(c).class])},g(t(c).label),3)):P("",!0)]),default:f(()=>[t(R)?(s(),v(_,{key:0})):t(u)?(s(),v(I,{key:1,text:`Couldn't load CI time: ${("errorMessage"in o?o.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(w,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:d[0]||(d[0]=X=>t(D)())},{default:f(()=>[...d[1]||(d[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):t(m)?(s(),k("div",_s,[$(t(xt),{ref_key:"xyContainerRef",ref:E,data:t(b),height:220,padding:{top:10,right:10,bottom:0,left:0},"on-render-complete":t(h)},{default:f(()=>[$(t(jt),{x:n,y:i,color:"rgba(59, 130, 246, 0.15)","curve-type":t(yt).MonotoneX},null,8,["curve-type"]),$(t(ge),{x:n,y:i,color:Ct,"curve-type":t(yt).MonotoneX,"line-width":2},null,8,["curve-type"]),$(t(Z),{type:"x","tick-format":X=>new Date(X).toLocaleDateString("en-US",{month:"short",day:"numeric"})},null,8,["tick-format"]),$(t(Z),{type:"y",label:"Minutes","tick-format":X=>X.toString()},null,8,["tick-format"])]),_:1},8,["data","on-render-complete"]),t(C)?(s(),k("div",{key:0,class:"fixed z-50 pointer-events-none bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 max-w-[240px]",style:ot({left:`${t(y).x}px`,top:`${t(y).y}px`})},[r("div",ys,[r("div",gs,g(new Date(t(C).date).toLocaleDateString("en-US",{month:"short",day:"numeric"})),1),r("div",null,g(t(C).totalMinutes)+" minutes",1),r("div",hs,g(t(C).runCount)+" runs",1)])],4)):P("",!0)])):(s(),v(x,{key:2,text:"No runs in this period."}))]),_:1},8,["subtitle"])}}}),bs=Object.assign(fs,{__name:"CiTimeTrendChart"}),xs={key:3,class:"w-full relative"},vs={class:"p-2 text-sm text-gray-900 dark:text-gray-100"},ks={class:"font-semibold mb-1"},$s={key:1,class:"mt-4 flex items-start gap-2 rounded-lg border border-amber-200 bg-amber-50 p-2.5 text-sm dark:border-amber-900/50 dark:bg-amber-950/30"},Ss={class:"text-gray-700 dark:text-gray-300"},Cs={class:"font-semibold"},Ms={key:2,class:"mt-4 space-y-1"},ws={class:"tabular-nums text-gray-500 dark:text-gray-400 shrink-0"},Rs=z({__name:"WastedTimeChart",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("wasted-time",()=>p.query)),e=await e,l(),e),b=T(()=>a.value?.points.map(_=>({date:new Date(_.date),waitMinutes:_.waitMinutes,failedExecMinutes:_.failedExecMinutes}))??[]),m=T(()=>b.value.some(_=>_.waitMinutes>0||_.failedExecMinutes>0)),n=_=>_.date,i=["rgb(245, 158, 11)","rgb(239, 68, 68)"],E=ft(null),{tooltipData:C,tooltipPos:y,onRenderComplete:h}=Dt(E,b,{x:_=>_.date,series:[{y:_=>_.waitMinutes,color:i[0]},{y:_=>_.failedExecMinutes,color:i[1]}]}),c=[{color:i[0],label:"Wait steps"},{color:i[1],label:"Failed attempts"}],S=T(()=>{if(!a.value)return;const _=a.value.totalWaitMinutes+a.value.totalFailedExecMinutes;return`${_<60?`${Math.round(_)} min`:`${Math.round(_/60*10)/10} h`} of CI time produced no signal`}),o=T(()=>a.value?.timeoutReclaimable??null),d=T(()=>{const _=o.value?.estimatedMinutes??0;return _<60?`${Math.round(_)} min`:`${Math.round(_/60*10)/10} h`});return(_,w)=>{const I=bt,x=W,U=F,X=G,A=H,nt=it,tt=Q,Nt=ut;return s(),v(Nt,{icon:"i-lucide-hourglass",title:"Wasted CI time",subtitle:t(S),help:"analytics.wasted-time"},{legend:f(()=>[$(I,{items:c,dense:""})]),default:f(()=>[t(R)?(s(),v(x,{key:0})):t(u)?(s(),v(X,{key:1,text:`Couldn't load wasted time: ${("errorMessage"in _?_.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(U,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:w[0]||(w[0]=L=>t(D)())},{default:f(()=>[...w[1]||(w[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):t(m)?(s(),k("div",xs,[$(t(xt),{ref_key:"xyContainerRef",ref:E,data:t(b),height:220,padding:{top:10,right:10,bottom:0,left:0},"on-render-complete":t(h)},{default:f(()=>[$(t(jt),{x:n,y:[L=>L.waitMinutes,L=>L.failedExecMinutes],color:i,"curve-type":t(yt).MonotoneX},null,8,["y","curve-type"]),$(t(Z),{type:"x","tick-format":L=>new Date(L).toLocaleDateString("en-US",{month:"short",day:"numeric"})},null,8,["tick-format"]),$(t(Z),{type:"y",label:"Minutes","tick-format":L=>L.toString()},null,8,["tick-format"])]),_:1},8,["data","on-render-complete"]),t(C)?(s(),k("div",{key:0,class:"fixed z-50 pointer-events-none bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 max-w-[240px]",style:ot({left:`${t(y).x}px`,top:`${t(y).y}px`})},[r("div",vs,[r("div",ks,g(new Date(t(C).date).toLocaleDateString("en-US",{month:"short",day:"numeric"})),1),r("div",null,[w[2]||(w[2]=r("span",{class:"text-amber-500"},"●",-1)),j(" Wait steps: "+g(t(C).waitMinutes)+" min",1)]),r("div",null,[w[3]||(w[3]=r("span",{class:"text-red-500"},"●",-1)),j(" Failed attempts: "+g(t(C).failedExecMinutes)+" min",1)])])],4)):P("",!0),t(o)?(s(),k("div",$s,[$(nt,{name:"i-lucide-scissors",class:"mt-0.5 shrink-0 text-amber-500"}),r("div",Ss,[w[5]||(w[5]=j(" Up to ",-1)),r("span",Cs,"≈"+g(t(d)),1),j(" of this is avoidable — "+g(t(o).oversizedCount)+" oversized "+g(t(o).oversizedCount===1?"timeout":"timeouts")+" and "+g(t(o).staleSlowCount)+" stale ",1),w[6]||(w[6]=r("code",{class:"text-xs"},"test.slow()",-1)),j(" "+g(t(o).staleSlowCount===1?"mark":"marks")+" inflate the failed-attempt time above. ",1),t(o).topProjectId?(s(),v(tt,{key:0,to:`/projects/${t(o).topProjectId}#performance`,class:"text-primary hover:underline"},{default:f(()=>[...w[4]||(w[4]=[j("Review",-1)])]),_:1},8,["to"])):P("",!0)])])):P("",!0),t(a)&&t(a).byProject.length>0?(s(),k("div",Ms,[(s(!0),k(V,null,O(t(a).byProject.slice(0,5),L=>(s(),k("div",{key:L.projectId,class:"flex items-center justify-between text-sm"},[$(tt,{to:`/projects/${L.projectId}`,class:"truncate hover:text-primary"},{default:f(()=>[j(g(L.label||L.name),1)]),_:2},1032,["to"]),r("span",ws,g(Math.round(L.waitMinutes+L.failedExecMinutes))+" min ",1)]))),128))])):P("",!0)])):(s(),v(A,{key:2,text:"No wasted time recorded in this period."}))]),_:1},8,["subtitle"])}}}),Es=Object.assign(Rs,{__name:"WastedTimeChart"}),Ds={key:3,class:"divide-y divide-gray-100 dark:divide-gray-800"},js={class:"flex-1 min-w-0"},Ts={class:"text-sm font-medium truncate"},Vs={class:"text-xs text-gray-500 dark:text-gray-400 truncate"},Is={class:"text-right shrink-0"},Ps=z({__name:"GlobalFlakyLeaderboard",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("flaky-leaderboard",()=>p.query)),e=await e,l(),e);function b(n){return n>=60?"text-red-600 dark:text-red-400":n>=30?"text-amber-600 dark:text-amber-400":"text-gray-500"}function m(n){return n.retryPassRuns>0?`flaked ${n.retryPassRuns}/${n.totalRuns} runs`:`${n.alternations} status flips in ${n.totalRuns} runs`}return(n,i)=>{const E=W,C=F,y=G,h=H,c=Rt,S=Q,o=K;return s(),v(o,{icon:"i-lucide-repeat",title:"Flakiest tests",count:t(a)?.length||void 0,subtitle:"Across all projects, sorted by impact",help:"analytics.flaky-leaderboard"},{default:f(()=>[t(R)?(s(),v(E,{key:0})):t(u)?(s(),v(y,{key:1,text:`Couldn't load flaky tests: ${("errorMessage"in n?n.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(C,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:i[0]||(i[0]=d=>t(D)())},{default:f(()=>[...i[1]||(i[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).length===0?(s(),v(h,{key:2,text:"No flaky tests detected. Nice and stable."})):(s(),k("div",Ds,[(s(!0),k(V,null,O(t(a),d=>(s(),v(S,{key:`${d.projectId}-${d.testCaseId}`,to:`/test-cases/${d.testCaseId}`,class:"flex items-center gap-3 py-2.5 hover:bg-gray-50 dark:hover:bg-gray-800/60 rounded transition-colors"},{default:f(()=>[r("span",{class:N(["tabular-nums font-bold text-sm w-10 text-right shrink-0",b(d.score)])},g(d.score),3),r("div",js,[r("p",Ts,g(d.title),1),r("p",Vs,[j(g(d.projectLabel||d.projectName)+" · "+g(m(d))+" ",1),d.lastFlakeAt?(s(),k(V,{key:0},[j(" · last "+g(("formatRelativeTime"in n?n.formatRelativeTime:t(lt))(d.lastFlakeAt)),1)],64)):P("",!0)])]),r("div",Is,[r("p",{class:N(["text-sm tabular-nums",d.wastedCiMinutes>=30?"text-red-600 dark:text-red-400":d.wastedCiMinutes>=5?"text-amber-600 dark:text-amber-400":"text-gray-500"])},g(Math.round(d.wastedCiMinutes))+" min ",3),d.rootCause?(s(),v(c,{key:0,text:d.rootCause,color:"neutral"},null,8,["text"])):P("",!0)])]),_:2},1032,["to"]))),128))]))]),_:1},8,["count"])}}}),Ns=Object.assign(Ps,{__name:"GlobalFlakyLeaderboard"}),Os={key:3,class:"space-y-4"},As={key:0,class:"flex flex-wrap gap-1.5"},Ls={class:"divide-y divide-gray-100 dark:divide-gray-800"},zs={class:"flex-1 min-w-0"},Bs={class:"text-sm font-medium truncate"},Us={class:"text-xs text-gray-500 dark:text-gray-400 truncate"},Fs={class:"text-right text-xs shrink-0"},qs={class:"tabular-nums font-medium"},Ws=z({__name:"ClusterLandscape",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("cluster-landscape",()=>p.query)),e=await e,l(),e);function b(m){return m>=30?"text-red-600 dark:text-red-400":m>=14?"text-amber-600 dark:text-amber-400":"text-gray-500"}return(m,n)=>{const i=W,E=F,C=G,y=H,h=fe,c=he,S=wt,o=Q,d=K;return s(),v(d,{icon:"i-lucide-layers",title:"Failure clusters",subtitle:"Open root causes across all projects",help:"analytics.cluster-landscape"},{default:f(()=>[t(R)?(s(),v(i,{key:0})):t(u)?(s(),v(C,{key:1,text:`Couldn't load clusters: ${("errorMessage"in m?m.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(E,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:n[0]||(n[0]=_=>t(D)())},{default:f(()=>[...n[1]||(n[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).totalOpen===0&&t(a).resolvedInPeriod===0?(s(),v(y,{key:2,icon:"i-lucide-check-circle",text:"No open failure clusters."})):(s(),k("div",Os,[$(c,null,{default:f(()=>[$(h,{label:"Open",value:t(a).totalOpen,"value-class":t(a).totalOpen>0?"text-red-600 dark:text-red-400":""},null,8,["value","value-class"]),$(h,{label:"Resolved this period",value:t(a).resolvedInPeriod},null,8,["value"]),$(h,{label:"Oldest open",value:t(a).clusters.length>0?`${Math.max(...t(a).clusters.map(_=>_.ageDays))} d`:"—",size:"lg"},null,8,["value"])]),_:1}),t(a).byErrorType.length>0?(s(),k("div",As,[(s(!0),k(V,null,O(t(a).byErrorType,_=>(s(),v(S,{key:_.errorType,color:("clusterErrorTypeColor"in m?m.clusterErrorTypeColor:t(Kt))(_.errorType),variant:"subtle",size:"sm"},{default:f(()=>[j(g(_.errorType)+" · "+g(_.count),1)]),_:2},1032,["color"]))),128))])):P("",!0),r("div",Ls,[(s(!0),k(V,null,O(t(a).clusters.slice(0,8),_=>(s(),v(o,{key:_.id,to:`/failure-clusters/${_.id}`,class:"flex items-center gap-3 py-2.5 hover:bg-gray-50 dark:hover:bg-gray-800/60 rounded transition-colors"},{default:f(()=>[r("div",zs,[r("p",Bs,g(_.title||_.signature),1),r("p",Us,[j(g(_.projectLabel||_.projectName)+" ",1),_.errorType?(s(),k(V,{key:0},[j(" · "+g(_.errorType),1)],64)):P("",!0)])]),r("div",Fs,[r("p",qs,g(_.occurrences)+"×",1),r("p",{class:N(["tabular-nums",b(_.ageDays)])},g(_.ageDays)+" d open",3)])]),_:2},1032,["to"]))),128))])]))]),_:1})}}}),Gs=Object.assign(Ws,{__name:"ClusterLandscape"}),Hs={key:3,class:"w-full"},Ys=z({__name:"RegressionVelocityChart",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("regression-velocity",()=>p.query)),e=await e,l(),e),b=T(()=>a.value?.points.map(h=>({date:new Date(h.date),regressions:h.regressions,newFlaky:h.newFlaky}))??[]),m=T(()=>b.value.some(h=>h.regressions>0||h.newFlaky>0)),n=h=>h.date,i=["rgb(239, 68, 68)","rgb(147, 51, 234)"],E=[{color:i[0],label:"New regressions"},{color:i[1],label:"Newly flaky"}],C=T(()=>{if(!a.value||a.value.deltaPct===null)return null;const h=a.value.deltaPct;return{label:`${h>0?"+":""}${h}% vs previous period`,class:h>0?"text-red-600 dark:text-red-400":"text-green-600 dark:text-green-400"}}),y=T(()=>{if(a.value)return`${a.value.totalRegressions} new regressions, ${a.value.totalNewFlaky} newly flaky`});return(h,c)=>{const S=bt,o=W,d=F,_=G,w=H,I=ut;return s(),v(I,{icon:"i-lucide-git-pull-request-arrow",title:"Regression velocity",subtitle:t(y),help:"analytics.regression-velocity"},{legend:f(()=>[$(S,{items:E,dense:""})]),actions:f(()=>[t(C)?(s(),k("span",{key:0,class:N(["text-xs font-medium tabular-nums",t(C).class])},g(t(C).label),3)):P("",!0)]),default:f(()=>[t(R)?(s(),v(o,{key:0})):t(u)?(s(),v(_,{key:1,text:`Couldn't load regression velocity: ${("errorMessage"in h?h.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(d,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:c[0]||(c[0]=x=>t(D)())},{default:f(()=>[...c[1]||(c[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):t(m)?(s(),k("div",Hs,[$(t(xt),{data:t(b),height:220,padding:{top:10,right:10,bottom:0,left:0}},{default:f(()=>[$(t(Se),{x:n,y:[x=>x.regressions,x=>x.newFlaky],color:i,"rounded-corners":2},null,8,["y"]),$(t(Z),{type:"x","tick-format":x=>new Date(x).toLocaleDateString("en-US",{month:"short",day:"numeric"})},null,8,["tick-format"]),$(t(Z),{type:"y",label:"Count","tick-format":x=>x.toString()},null,8,["tick-format"])]),_:1},8,["data"])])):(s(),v(w,{key:2,icon:"i-lucide-shield-check",text:"No new regressions in this period."}))]),_:1},8,["subtitle"])}}}),Xs=Object.assign(Ys,{__name:"RegressionVelocityChart"}),Js={class:"w-full text-sm border-separate border-spacing-1"},Qs={class:"pr-2 max-w-[12rem]"},Zs=["title"],Ks=z({__name:"BrowserMatrix",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("browser-matrix",()=>p.query)),e=await e,l(),e);function b(m){return m===null?"bg-gray-100 dark:bg-gray-800 text-gray-400":m>=99.5?"bg-green-500/85 text-white":m>=90?"bg-green-500/45":m>=75?"bg-amber-500/50":m>=50?"bg-orange-500/60":"bg-red-500/70 text-white"}return(m,n)=>{const i=W,E=F,C=G,y=H,h=Q,c=ct,S=K;return s(),v(S,{icon:"i-lucide-monitor-smartphone",title:"Browser matrix",help:"analytics.browser-matrix"},{default:f(()=>[t(R)?(s(),v(i,{key:0})):t(u)?(s(),v(C,{key:1,text:`Couldn't load the browser matrix: ${("errorMessage"in m?m.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(E,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:n[0]||(n[0]=o=>t(D)())},{default:f(()=>[...n[1]||(n[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).rows.length===0?(s(),v(y,{key:2,text:"No runs with browser data in this period."})):(s(),v(c,{key:3,"min-width":"30rem"},{default:f(()=>[r("table",Js,[r("thead",null,[r("tr",null,[n[2]||(n[2]=r("th",{class:"text-left text-xs text-gray-500 uppercase tracking-wider font-medium pr-2"},"Project",-1)),(s(!0),k(V,null,O(t(a).browsers,o=>(s(),k("th",{key:o,class:"text-xs text-gray-500 uppercase tracking-wider font-medium px-1 text-center"},g(o),1))),128))])]),r("tbody",null,[(s(!0),k(V,null,O(t(a).rows,o=>(s(),k("tr",{key:o.projectId},[r("td",Qs,[$(h,{to:`/projects/${o.projectId}`,class:"truncate hover:text-primary block",title:o.label||o.name},{default:f(()=>[j(g(o.label||o.name),1)]),_:2},1032,["to","title"])]),(s(!0),k(V,null,O(o.cells,(d,_)=>(s(),k("td",{key:_,class:N(["text-center tabular-nums rounded-md px-2 py-1.5 font-medium",b(d)]),title:`${o.label||o.name} · ${t(a).browsers[_]}: ${d!==null?`${d}% passed`:"no tests"}`},g(d!==null?`${Math.round(d)}%`:"—"),11,Zs))),128))]))),128))])])]),_:1}))]),_:1})}}}),ta=Object.assign(Ks,{__name:"BrowserMatrix"}),ea={class:"md:hidden space-y-3"},sa={class:"flex items-center gap-2 min-w-0"},aa={class:"text-xs truncate"},na={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},ra={key:0,class:"text-red-600 dark:text-red-400 tabular-nums"},oa={class:"hidden md:block"},la={class:"w-full text-sm"},ia={class:"divide-y divide-gray-100 dark:divide-gray-800"},ca={class:"py-2.5 pr-4"},da={class:"flex items-center gap-2 min-w-0"},ua=["title"],ma={class:"py-2.5 pr-4 text-right tabular-nums"},pa={class:"py-2.5 pr-4 text-right tabular-nums text-gray-500"},_a={class:"py-2.5 pr-4 text-right tabular-nums text-gray-500"},ya={class:"py-2.5 text-right tabular-nums"},ga=z({__name:"SlowEndpointsTable",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("slow-endpoints",()=>p.query)),e=await e,l(),e);function b(n){return n>=1e3?"text-red-600 dark:text-red-400":n>=500?"text-amber-600 dark:text-amber-400":"text-gray-600 dark:text-gray-300"}function m(n){return{GET:"info",POST:"success",PUT:"warning",PATCH:"warning",DELETE:"error"}[n.toUpperCase()]??"neutral"}return(n,i)=>{const E=W,C=F,y=G,h=H,c=wt,S=ct,o=K;return s(),v(o,{icon:"i-lucide-gauge",title:"Slow endpoints",count:t(a)?.endpoints.length||void 0,subtitle:"Backend calls across all projects, slowest first",help:"analytics.slow-endpoints"},{default:f(()=>[t(R)?(s(),v(E,{key:0})):t(u)?(s(),v(y,{key:1,text:`Couldn't load slow endpoints: ${("errorMessage"in n?n.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(C,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:i[0]||(i[0]=d=>t(D)())},{default:f(()=>[...i[1]||(i[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).endpoints.length===0?(s(),v(h,{key:2,icon:"i-lucide-network",text:"No network requests captured in this period."})):(s(),k(V,{key:3},[r("div",ea,[(s(!0),k(V,null,O(t(a).endpoints,d=>(s(),k("div",{key:`${d.method} ${d.route}`,class:"rounded-lg border border-gray-200 dark:border-gray-800 p-3 space-y-1.5"},[r("div",sa,[$(c,{color:m(d.method),variant:"subtle",size:"sm"},{default:f(()=>[j(g(d.method),1)]),_:2},1032,["color"]),r("code",aa,g(d.route),1)]),r("div",na,[r("span",null,[i[2]||(i[2]=j("p90 ",-1)),r("span",{class:N(["tabular-nums font-medium",b(d.p90Ms)])},g(d.p90Ms)+" ms",3)]),r("span",null,g(d.requests)+" reqs · "+g(d.projectCount)+" proj",1),d.errorRate>0?(s(),k("span",ra,g(d.errorRate)+"% err",1)):P("",!0)])]))),128))]),r("div",oa,[$(S,{"min-width":"44rem"},{default:f(()=>[r("table",la,[i[3]||(i[3]=r("thead",null,[r("tr",{class:"text-left text-xs text-gray-500 uppercase tracking-wider border-b border-gray-200 dark:border-gray-800"},[r("th",{class:"py-2 pr-4 font-medium"},"Endpoint"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Requests"),r("th",{class:"py-2 pr-4 font-medium text-right"},"p50"),r("th",{class:"py-2 pr-4 font-medium text-right"},"p90"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Max"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Errors"),r("th",{class:"py-2 font-medium text-right"},"Projects")])],-1)),r("tbody",ia,[(s(!0),k(V,null,O(t(a).endpoints,d=>(s(),k("tr",{key:`${d.method} ${d.route}`},[r("td",ca,[r("div",da,[$(c,{color:m(d.method),variant:"subtle",size:"sm"},{default:f(()=>[j(g(d.method),1)]),_:2},1032,["color"]),r("code",{class:"text-xs truncate max-w-[22rem]",title:d.route},g(d.route),9,ua)])]),r("td",ma,g(d.requests),1),r("td",pa,g(d.p50Ms)+" ms",1),r("td",{class:N(["py-2.5 pr-4 text-right tabular-nums font-medium",b(d.p90Ms)])},g(d.p90Ms)+" ms ",3),r("td",_a,g(d.maxMs)+" ms",1),r("td",{class:N(["py-2.5 pr-4 text-right tabular-nums",d.errorRate>0?"text-red-600 dark:text-red-400":"text-gray-400"])},g(d.errorRate)+"% ",3),r("td",ya,g(d.projectCount),1)]))),128))])])]),_:1})])],64))]),_:1},8,["count"])}}}),ha=Object.assign(ga,{__name:"SlowEndpointsTable"}),fa={class:"space-y-6"},ba={class:"grid grid-cols-1 xl:grid-cols-2 gap-6 items-start"},sn=z({__name:"analytics",async setup(M){let e,l;Gt({title:"Analytics - Piwi Dashboard"});const{state:p,scopeQuery:a}=we(),{data:R}=([e,l]=B(()=>_t("/api/projects/menu",{lazy:!0,server:!1,default:()=>[]},"$jZuDAh0IrH")),e=await e,l(),e),{data:u}=([e,l]=B(()=>_t("/api/test-runs/recent",{lazy:!0,server:!1,default:()=>[]},"$lmj5ErCURQ")),e=await e,l(),e),D=T(()=>{const E=new Set;for(const C of u.value??[])C.environment&&E.add(C.environment);return[...E].sort()}),b=T(()=>{const E=u.value??[];return E.length===0?null:Math.max(...E.map(C=>new Date(C.startTime).getTime()))}),m=T(()=>{if(b.value===null||p.value.days>=ht)return!1;const E=Date.now()-p.value.days*24*60*60*1e3;return b.value<E});function n(){p.value={...p.value,days:ht}}const i={insights:Be,portfolio:os,"pass-rate-heatmap":ps,"ci-time-trend":bs,"wasted-time":Es,"flaky-leaderboard":Ns,"cluster-landscape":Gs,"regression-velocity":Xs,"browser-matrix":ta,"slow-endpoints":ha};return(E,C)=>{const y=Ot,h=At,c=zt,S=Pe,o=Jt,d=Qt,_=Lt;return s(),v(_,{id:"analytics"},{header:f(()=>[$(c,null,{leading:f(()=>[$(y),$(h,{items:[{label:"Analytics",icon:"i-lucide-chart-line",to:"/analytics"}]})]),_:1})]),body:f(()=>[r("div",fa,[$(o,null,{default:f(()=>[$(S,{modelValue:t(p),"onUpdate:modelValue":C[0]||(C[0]=w=>at(p)?p.value=w:null),"available-projects":t(R),"available-environments":t(D)},null,8,["modelValue","available-projects","available-environments"])]),_:1}),t(m)?(s(),v(d,{key:0,icon:"i-lucide-calendar-off",color:"warning",variant:"subtle",title:`No test runs in the last ${t(p).days} days`,description:`Your most recent run was ${("formatRelativeTime"in E?E.formatRelativeTime:t(lt))(t(b))} — the widgets below look empty because the selected range excludes it.`,actions:[{label:"Show all time",color:"warning",variant:"solid",size:"xs",onClick:n}]},null,8,["title","description","actions"])):P("",!0),r("div",ba,[(s(!0),k(V,null,O(t(Pt),w=>(s(),k("div",{key:w.id,class:N(w.size==="full"?"xl:col-span-2":"")},[(s(),v(Mt(i[w.id]),{query:t(a)},null,8,["query"]))],2))),128))])])]),_:1})}}});export{sn as default};
@@ -1 +1 @@
1
- import{d as l,S as o,o as u,f as p,g as d,T as f,U as n,k as i,V as _}from"./B8fs6GU9.js";var m=l({__name:"Label",props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"label"}},setup(r){const t=r;return o(),(s,a)=>(u(),p(i(_),n(t,{onMousedown:a[0]||(a[0]=e=>{!e.defaultPrevented&&e.detail>1&&e.preventDefault()})}),{default:d(()=>[f(s.$slots,"default")]),_:3},16))}}),b=m;export{b as L};
1
+ import{d as l,S as o,o as u,f as p,g as d,T as f,U as n,k as i,V as _}from"./BPKwYP2Q.js";var m=l({__name:"Label",props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"label"}},setup(r){const t=r;return o(),(s,a)=>(u(),p(i(_),n(t,{onMousedown:a[0]||(a[0]=e=>{!e.defaultPrevented&&e.detail>1&&e.preventDefault()})}),{default:d(()=>[f(s.$slots,"default")]),_:3},16))}}),b=m;export{b as L};
@@ -1 +1 @@
1
- import{d as a,o as s,c as t,T as o,q as n,i as r}from"./B8fs6GU9.js";const l={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},c={key:0,class:"flex flex-wrap items-center gap-2 min-w-0"},i={class:"flex flex-wrap items-center gap-2 min-w-0"},m=a({__name:"FilterToolbar",setup(_){return(e,p)=>(s(),t("div",l,[e.$slots.start?(s(),t("div",c,[o(e.$slots,"start")])):n("",!0),r("div",i,[o(e.$slots,"default")])]))}}),f=Object.assign(m,{__name:"FilterToolbar"});export{f as _};
1
+ import{d as a,o as s,c as t,T as o,q as n,i as r}from"./BPKwYP2Q.js";const l={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},c={key:0,class:"flex flex-wrap items-center gap-2 min-w-0"},i={class:"flex flex-wrap items-center gap-2 min-w-0"},m=a({__name:"FilterToolbar",setup(_){return(e,p)=>(s(),t("div",l,[e.$slots.start?(s(),t("div",c,[o(e.$slots,"start")])):n("",!0),r("div",i,[o(e.$slots,"default")])]))}}),f=Object.assign(m,{__name:"FilterToolbar"});export{f as _};
@@ -0,0 +1 @@
1
+ import{d as m,k as r,o as c,f as _,g,j as b,v,O as w,p as x,c as $,h as t}from"./BPKwYP2Q.js";import{_ as S}from"./BpceIssd.js";import{y as C,z}from"./k-z_VVTK.js";const k={key:1,class:"text-xs text-gray-400 dark:text-gray-500 italic"},y=m({__name:"BrowserBadge",props:{browser:{},size:{}},setup(a){const n=a,s=t(()=>n.browser?.projectName??null),l=t(()=>C(s.value)),p=t(()=>z(s.value)),u=t(()=>n.size==="sm"?"size-3.5":n.size==="lg"?"size-5":"size-4"),i=t(()=>{const e=n.browser;if(!e)return[];const o=[];return e.browserName&&e.browserName!==s.value&&o.push(`Browser: ${e.browserName}`),e.channel&&o.push(`Channel: ${e.channel}`),e.viewport&&o.push(`Viewport: ${e.viewport.width}×${e.viewport.height}`),e.deviceScaleFactor&&e.deviceScaleFactor!==1&&o.push(`Scale: ${e.deviceScaleFactor}x`),e.isMobile&&o.push("Mobile"),e.hasTouch&&!e.isMobile&&o.push("Touch"),e.locale&&o.push(`Locale: ${e.locale}`),e.timezoneId&&o.push(`TZ: ${e.timezoneId}`),e.colorScheme&&e.colorScheme!=="light"&&o.push(`Color: ${e.colorScheme}`),e.reducedMotion&&e.reducedMotion!=="no-preference"&&o.push(`Motion: ${e.reducedMotion}`),e.forcedColors&&e.forcedColors!=="none"&&o.push("Colors: forced"),e.offline&&o.push("Offline"),e.bypassCSP&&o.push("CSP bypassed"),e.javaScriptEnabled===!1&&o.push("JS disabled"),e.serviceWorkers==="block"&&o.push("SW blocked"),e.geolocation&&o.push(`Geo: ${e.geolocation.latitude.toFixed(2)},${e.geolocation.longitude.toFixed(2)}`),e.userAgent&&o.push(`UA: ${e.userAgent.length>60?e.userAgent.slice(0,60)+"…":e.userAgent}`),o}),h=t(()=>s.value?i.value.length?`${s.value} · ${i.value.join(" · ")}`:s.value:"");return(e,o)=>{const f=v,d=S;return r(s)?(c(),_(d,{key:0,text:r(h),popper:{placement:"top"}},{default:g(()=>[b(f,{name:r(l),class:x(["shrink-0 cursor-help",r(u)]),style:w({color:r(p)})},null,8,["name","class","style"])]),_:1},8,["text"])):(c(),$("span",k,"—"))}}}),A=Object.assign(y,{__name:"BrowserBadge"});export{A as _};
@@ -1 +1 @@
1
- import{a0 as $,a1 as j,a3 as z,am as y,aT as S,r as V,aN as w,aU as B,B as P,o,f as C,g as b,i as q,p as s,k as t,c as u,j as N,T as n,m as c,t as m,q as f,V as F,h,a6 as D,J as g,c2 as K,c3 as O}from"./B8fs6GU9.js";import{L as W}from"./BC_Wu-fv.js";const E={slots:{root:"",wrapper:"",labelWrapper:"flex content-center items-center justify-between gap-1",label:"block font-medium text-default",container:"relative",description:"text-muted",error:"mt-2 text-error",hint:"text-muted",help:"mt-2 text-muted"},variants:{size:{xs:{root:"text-xs"},sm:{root:"text-xs"},md:{root:"text-sm"},lg:{root:"text-sm"},xl:{root:"text-base"}},required:{true:{label:"after:content-['*'] after:ms-0.5 after:text-error"}},orientation:{vertical:{container:"mt-1"},horizontal:{root:"flex justify-between place-items-baseline gap-2"}}},defaultVariants:{size:"md"}},T=["id"],L=["id"],U=["id"],A=["id"],M={__name:"UFormField",props:{as:{type:null,required:!1},name:{type:String,required:!1},errorPattern:{type:null,required:!1},label:{type:String,required:!1},description:{type:String,required:!1},help:{type:String,required:!1},error:{type:[Boolean,String],required:!1,default:void 0},hint:{type:String,required:!1},size:{type:null,required:!1},required:{type:Boolean,required:!1},eagerValidation:{type:Boolean,required:!1},validateOnInputDelay:{type:Number,required:!1},orientation:{type:null,required:!1,default:"vertical"},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(x){const _=x,l=$(),e=j("formField",_),I=z(),a=h(()=>D({extend:E,...I.ui?.formField||{}})({size:e.size,required:e.required,orientation:e.orientation})),k=y(S,null),i=h(()=>e.error||k?.value?.find(r=>r.name===e.name||e.errorPattern&&r.name?.match(e.errorPattern))?.message),d=V(w()),p=d.value,v=y(B,void 0);return P(d,()=>{v&&e.name&&(v.value[e.name]={id:d.value,pattern:e.errorPattern})},{immediate:!0}),g(K,d),g(O,h(()=>({error:i.value,name:e.name,size:e.size,eagerValidation:e.eagerValidation,validateOnInputDelay:e.validateOnInputDelay,errorPattern:e.errorPattern,hint:e.hint,description:e.description,help:e.help,ariaId:p}))),(r,J)=>(o(),C(t(F),{as:t(e).as,"data-orientation":t(e).orientation,"data-slot":"root",class:s(a.value.root({class:[t(e).ui?.root,t(e).class]}))},{default:b(()=>[q("div",{"data-slot":"wrapper",class:s(a.value.wrapper({class:t(e).ui?.wrapper}))},[t(e).label||l.label?(o(),u("div",{key:0,"data-slot":"labelWrapper",class:s(a.value.labelWrapper({class:t(e).ui?.labelWrapper}))},[N(t(W),{for:d.value,"data-slot":"label",class:s(a.value.label({class:t(e).ui?.label}))},{default:b(()=>[n(r.$slots,"label",{label:t(e).label},()=>[c(m(t(e).label),1)])]),_:3},8,["for","class"]),t(e).hint||l.hint?(o(),u("span",{key:0,id:`${t(p)}-hint`,"data-slot":"hint",class:s(a.value.hint({class:t(e).ui?.hint}))},[n(r.$slots,"hint",{hint:t(e).hint},()=>[c(m(t(e).hint),1)])],10,T)):f("",!0)],2)):f("",!0),t(e).description||l.description?(o(),u("p",{key:1,id:`${t(p)}-description`,"data-slot":"description",class:s(a.value.description({class:t(e).ui?.description}))},[n(r.$slots,"description",{description:t(e).description},()=>[c(m(t(e).description),1)])],10,L)):f("",!0)],2),q("div",{class:s([(t(e).label||!!l.label||t(e).description||!!l.description)&&a.value.container({class:t(e).ui?.container})])},[n(r.$slots,"default",{error:i.value}),t(e).error!==!1&&(typeof i.value=="string"&&i.value||l.error)?(o(),u("div",{key:0,id:`${t(p)}-error`,"data-slot":"error",class:s(a.value.error({class:t(e).ui?.error}))},[n(r.$slots,"error",{error:i.value},()=>[c(m(i.value),1)])],10,U)):t(e).help||l.help?(o(),u("div",{key:1,id:`${t(p)}-help`,"data-slot":"help",class:s(a.value.help({class:t(e).ui?.help}))},[n(r.$slots,"help",{help:t(e).help},()=>[c(m(t(e).help),1)])],10,A)):f("",!0)],2)]),_:3},8,["as","data-orientation","class"]))}};export{M as _};
1
+ import{a0 as $,a1 as j,a3 as z,am as y,aT as S,r as V,aN as w,aU as B,B as P,o,f as C,g as b,i as q,p as s,k as t,c as u,j as N,T as n,m as c,t as m,q as f,V as F,h,a6 as D,J as g,c1 as K,c2 as O}from"./BPKwYP2Q.js";import{L as W}from"./DRtTLQri.js";const E={slots:{root:"",wrapper:"",labelWrapper:"flex content-center items-center justify-between gap-1",label:"block font-medium text-default",container:"relative",description:"text-muted",error:"mt-2 text-error",hint:"text-muted",help:"mt-2 text-muted"},variants:{size:{xs:{root:"text-xs"},sm:{root:"text-xs"},md:{root:"text-sm"},lg:{root:"text-sm"},xl:{root:"text-base"}},required:{true:{label:"after:content-['*'] after:ms-0.5 after:text-error"}},orientation:{vertical:{container:"mt-1"},horizontal:{root:"flex justify-between place-items-baseline gap-2"}}},defaultVariants:{size:"md"}},T=["id"],L=["id"],U=["id"],A=["id"],M={__name:"UFormField",props:{as:{type:null,required:!1},name:{type:String,required:!1},errorPattern:{type:null,required:!1},label:{type:String,required:!1},description:{type:String,required:!1},help:{type:String,required:!1},error:{type:[Boolean,String],required:!1,default:void 0},hint:{type:String,required:!1},size:{type:null,required:!1},required:{type:Boolean,required:!1},eagerValidation:{type:Boolean,required:!1},validateOnInputDelay:{type:Number,required:!1},orientation:{type:null,required:!1,default:"vertical"},class:{type:null,required:!1},ui:{type:Object,required:!1}},setup(x){const _=x,l=$(),e=j("formField",_),I=z(),a=h(()=>D({extend:E,...I.ui?.formField||{}})({size:e.size,required:e.required,orientation:e.orientation})),k=y(S,null),i=h(()=>e.error||k?.value?.find(r=>r.name===e.name||e.errorPattern&&r.name?.match(e.errorPattern))?.message),d=V(w()),p=d.value,v=y(B,void 0);return P(d,()=>{v&&e.name&&(v.value[e.name]={id:d.value,pattern:e.errorPattern})},{immediate:!0}),g(K,d),g(O,h(()=>({error:i.value,name:e.name,size:e.size,eagerValidation:e.eagerValidation,validateOnInputDelay:e.validateOnInputDelay,errorPattern:e.errorPattern,hint:e.hint,description:e.description,help:e.help,ariaId:p}))),(r,J)=>(o(),C(t(F),{as:t(e).as,"data-orientation":t(e).orientation,"data-slot":"root",class:s(a.value.root({class:[t(e).ui?.root,t(e).class]}))},{default:b(()=>[q("div",{"data-slot":"wrapper",class:s(a.value.wrapper({class:t(e).ui?.wrapper}))},[t(e).label||l.label?(o(),u("div",{key:0,"data-slot":"labelWrapper",class:s(a.value.labelWrapper({class:t(e).ui?.labelWrapper}))},[N(t(W),{for:d.value,"data-slot":"label",class:s(a.value.label({class:t(e).ui?.label}))},{default:b(()=>[n(r.$slots,"label",{label:t(e).label},()=>[c(m(t(e).label),1)])]),_:3},8,["for","class"]),t(e).hint||l.hint?(o(),u("span",{key:0,id:`${t(p)}-hint`,"data-slot":"hint",class:s(a.value.hint({class:t(e).ui?.hint}))},[n(r.$slots,"hint",{hint:t(e).hint},()=>[c(m(t(e).hint),1)])],10,T)):f("",!0)],2)):f("",!0),t(e).description||l.description?(o(),u("p",{key:1,id:`${t(p)}-description`,"data-slot":"description",class:s(a.value.description({class:t(e).ui?.description}))},[n(r.$slots,"description",{description:t(e).description},()=>[c(m(t(e).description),1)])],10,L)):f("",!0)],2),q("div",{class:s([(t(e).label||!!l.label||t(e).description||!!l.description)&&a.value.container({class:t(e).ui?.container})])},[n(r.$slots,"default",{error:i.value}),t(e).error!==!1&&(typeof i.value=="string"&&i.value||l.error)?(o(),u("div",{key:0,id:`${t(p)}-error`,"data-slot":"error",class:s(a.value.error({class:t(e).ui?.error}))},[n(r.$slots,"error",{error:i.value},()=>[c(m(i.value),1)])],10,U)):t(e).help||l.help?(o(),u("div",{key:1,id:`${t(p)}-help`,"data-slot":"help",class:s(a.value.help({class:t(e).ui?.help}))},[n(r.$slots,"help",{help:t(e).help},()=>[c(m(t(e).help),1)])],10,A)):f("",!0)],2)]),_:3},8,["as","data-orientation","class"]))}};export{M as _};
@@ -1 +1 @@
1
- import{d as F,S as Z,o as i,f as P,g as u,T,m as I,U as Q,k as e,V as H,W as Oe,X as Ke,h as k,Y as Ge,Z as Qe,$ as Ze,t as x,c as $,i as f,O as de,p as N,j as d,v as Y,F as A,y as le,s as Re,x as $e,q as w,_ as G,r as M,a0 as He,a1 as We,a2 as Xe,a3 as Ye,a4 as Je,a5 as et,a6 as tt,u as at,a as st,K as lt,B as te,D as nt,l as ae,a7 as ot,a8 as ue}from"./B8fs6GU9.js";import{_ as it}from"./IdQR_Djw.js";import{_ as rt}from"./DiUGa0CT.js";import{_ as ut}from"./DKTDub7I.js";import{_ as dt}from"./Surk4Lw-.js";import{_ as ct}from"./DZLrAp2i.js";import{_ as pt}from"./n7Htv9PJ.js";import{_ as qe}from"./BkhdAGx0.js";import{j as ce,t as pe,h as fe,p as me,f as ge,e as ft}from"./CvCF77E-.js";import{_ as mt}from"./2PU-adwy.js";import{_ as gt}from"./D4nLD93c.js";import{_ as vt}from"./BBJ9Pu3M.js";import{u as _t}from"./CFn3w5jn.js";import{u as yt}from"./DAeYEeCC.js";var bt=F({__name:"PaginationEllipsis",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const c=r;return Z(),(s,v)=>(i(),P(e(H),Q(c,{"data-type":"ellipsis"}),{default:u(()=>[T(s.$slots,"default",{},()=>[v[0]||(v[0]=I("…"))])]),_:3},16))}}),ht=bt;const[J,xt]=Ge("PaginationRoot");var kt=F({__name:"PaginationRoot",props:{page:{type:Number,required:!1},defaultPage:{type:Number,required:!1,default:1},itemsPerPage:{type:Number,required:!0},total:{type:Number,required:!1,default:0},siblingCount:{type:Number,required:!1,default:2},disabled:{type:Boolean,required:!1},showEdges:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"nav"}},emits:["update:page"],setup(r,{emit:c}){const s=r,v=c,{siblingCount:m,disabled:t,showEdges:C}=Oe(s);Z();const b=Ke(s,"page",v,{defaultValue:s.defaultPage,passive:s.page===void 0}),j=k(()=>Math.max(1,Math.ceil(s.total/(s.itemsPerPage||1))));return xt({page:b,onPageChange(L){b.value=L},pageCount:j,siblingCount:m,disabled:t,showEdges:C}),(L,D)=>(i(),P(e(H),{as:L.as,"as-child":L.asChild},{default:u(()=>[T(L.$slots,"default",{page:e(b),pageCount:j.value})]),_:3},8,["as","as-child"]))}}),Ct=kt,Pt=F({__name:"PaginationFirst",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r,s=J();Z();const v=k(()=>s.page.value===1||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"First Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("First page"))])]),_:3},16,["type","disabled"]))}}),Rt=Pt,$t=F({__name:"PaginationLast",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r,s=J();Z();const v=k(()=>s.page.value===s.pageCount.value||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Last Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).pageCount.value))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Last page"))])]),_:3},16,["type","disabled"]))}}),qt=$t;function K(r,c){const s=c-r+1;return Array.from({length:s},(v,m)=>m+r)}function St(r){return r.map(c=>typeof c=="number"?{type:"page",value:c}:{type:"ellipsis"})}const se="ellipsis";function zt(r,c,s,v){const t=c,C=Math.max(r-s,1),b=Math.min(r+s,t);if(v){const L=Math.min(2*s+5,c)-2,D=C>3&&Math.abs(t-L-1+1)>2&&Math.abs(C-1)>2,B=b<t-2&&Math.abs(t-L)>2&&Math.abs(t-b)>2;if(!D&&B)return[...K(1,L),se,t];if(D&&!B){const l=K(t-L+1,t);return[1,se,...l]}if(D&&B){const l=K(C,b);return[1,se,...l,se,t]}return K(1,t)}else{const j=s*2+1;return c<j?K(1,t):r<=s+1?K(1,j):c-r<=s?K(c-j+1,t):K(C,b)}}var It=F({__name:"PaginationList",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const c=r;Z();const s=J(),v=k(()=>St(zt(s.page.value,s.pageCount.value,s.siblingCount.value,s.showEdges.value)));return(m,t)=>(i(),P(e(H),Qe(Ze(c)),{default:u(()=>[T(m.$slots,"default",{items:v.value})]),_:3},16))}}),Lt=It,Nt=F({__name:"PaginationListItem",props:{value:{type:Number,required:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===c.value),m=k(()=>s.disabled.value);return(t,C)=>(i(),P(e(H),Q(c,{"data-type":"page","aria-label":`Page ${t.value}`,"aria-current":v.value?"page":void 0,"data-selected":v.value?"true":void 0,disabled:m.value,type:t.as==="button"?"button":void 0,onClick:C[0]||(C[0]=b=>!m.value&&e(s).onPageChange(t.value))}),{default:u(()=>[T(t.$slots,"default",{},()=>[I(x(t.value),1)])]),_:3},16,["aria-label","aria-current","data-selected","disabled","type"]))}}),jt=Nt,Tt=F({__name:"PaginationNext",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===s.pageCount.value||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Next Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).page.value+1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Next page"))])]),_:3},16,["type","disabled"]))}}),wt=Tt,Ft=F({__name:"PaginationPrev",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===1||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Previous Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).page.value-1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Prev page"))])]),_:3},16,["type","disabled"]))}}),Dt=Ft;const Bt=["title"],Et={class:"h-1.5 w-14 shrink-0 overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700"},Vt={class:"text-sm font-medium tabular-nums"},Mt={key:1,class:"text-sm text-muted",title:"No executed runs yet"},At=F({__name:"PassRateIndicator",props:{rate:{}},setup(r){const c=r,s=k(()=>c.rate==null?null:Math.round(c.rate*100)),v=k(()=>s.value==null?"":s.value>=80?"bg-green-500":s.value>=50?"bg-amber-500":"bg-red-500");return(m,t)=>e(s)!=null?(i(),$("div",{key:0,class:"flex items-center gap-2",title:`${e(s)}% of executed runs passed`},[f("div",Et,[f("div",{class:N([e(v),"h-full rounded-full transition-all"]),style:de({width:`${e(s)}%`})},null,6)]),f("span",Vt,x(e(s))+"%",1)],8,Bt)):(i(),$("span",Mt,"—"))}}),Se=Object.assign(At,{__name:"PassRateIndicator"}),Ut={class:"rounded-lg border border-default text-sm"},Ot={class:"flex items-center justify-end px-3 py-1.5 border-b border-default bg-elevated"},Kt=["disabled","title"],Gt=["onClick"],Qt={class:"text-xs text-muted tabular-nums shrink-0"},Zt={class:"w-24 sm:w-32 shrink-0 max-sm:hidden"},Ht={class:"flex items-center gap-3 shrink-0"},Wt=["title"],Xt={key:0,class:"text-xs text-muted tabular-nums max-sm:hidden"},Yt=["title"],Jt={key:0,class:"text-center py-8 text-muted"},ea=F({__name:"ProjectTestCasesTree",props:{items:{},hasFilter:{type:Boolean}},setup(r){const c=r;function s(l){return(l.suitePath||"").split("").filter(Boolean)}function v(l){const n={passed:0,failed:0,skipped:0,flaky:0,didNotRun:0,total:0,cases:l.length};for(const g of l)n.passed+=g.passedRuns,n.failed+=g.failedRuns,n.skipped+=g.skippedRuns,n.flaky+=g.flakyRuns,n.didNotRun+=g.didNotRunRuns,n.total+=g.totalRuns;return n}const m=M(new Set),t=k(()=>m.value.size===0);function C(l){return c.hasFilter?!0:!m.value.has(l)}function b(l){if(c.hasFilter)return;const n=new Set(m.value);n.has(l)?n.delete(l):n.add(l),m.value=n}function j(){const l=new Set;for(const n of c.items){l.add(`file:${n.filePath}`);const g=s(n);for(let y=1;y<=g.length;y++)l.add(`group:${n.filePath}${g.slice(0,y).join("")}`)}return[...l]}function L(){m.value=new Set(j())}function D(){m.value=new Set}function B(l,n,g,y,h){const S=n.filter(o=>s(o).length===y.length),q=n.filter(o=>s(o).length>y.length),z=new Map;for(const o of q){const R=s(o)[y.length];z.has(R)||z.set(R,[]),z.get(R).push(o)}for(const[o,R]of z){const ee=[...y,o],V=`group:${g}${ee.join("")}`;l.push({kind:"group",depth:h,key:V,label:o,agg:v(R)}),C(V)&&B(l,R,g,ee,h+1)}for(const o of S)l.push({kind:"case",depth:h,key:`case:${o.id}`,testCase:o})}const U=k(()=>{const l=[],n=new Map;for(const g of c.items){const y=g.filePath||"unknown";n.has(y)||n.set(y,[]),n.get(y).push(g)}for(const[g,y]of[...n.entries()].sort(([h],[S])=>h.localeCompare(S))){const h=`file:${g}`;l.push({kind:"group",depth:0,key:h,label:g,agg:v(y)}),C(h)&&B(l,y,g,[],1)}return l});return(l,n)=>{const g=Y,y=qe,h=Re,S=$e,q=Se,z=G;return i(),$("div",Ut,[f("div",Ot,[f("button",{class:N(["flex items-center gap-1 text-xs transition-colors",r.hasFilter?"text-muted cursor-not-allowed opacity-50":"text-muted hover:text-default"]),disabled:r.hasFilter,title:r.hasFilter?"Clear filters to collapse/expand":e(t)?"Collapse all":"Expand all",onClick:n[0]||(n[0]=o=>e(t)?L():D())},[d(g,{name:e(t)?"i-lucide-fold-vertical":"i-lucide-unfold-vertical",class:"size-3.5"},null,8,["name"]),I(" "+x(e(t)?"Collapse all":"Expand all"),1)],10,Kt)]),(i(!0),$(A,null,le(e(U),o=>(i(),$(A,{key:o.key},[o.kind==="group"?(i(),$("div",{key:0,class:N(["flex items-center gap-2 py-2 pr-3 border-b border-default last:border-b-0 select-none",[o.depth===0?"bg-elevated":"bg-default",!r.hasFilter&&"cursor-pointer"]]),style:de({paddingLeft:`${o.depth*20+12}px`}),onClick:R=>b(o.key)},[d(g,{name:C(o.key)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5 text-muted shrink-0"},null,8,["name"]),d(g,{name:o.depth===0?"i-lucide-file-code-2":"i-lucide-folder-open",class:N(["size-4 shrink-0",o.depth===0?"text-blue-500":"text-amber-500"])},null,8,["name","class"]),f("span",{class:N(["font-medium truncate min-w-0",[o.depth===0?"text-default font-mono text-xs sm:text-sm":"text-muted"]])},x(o.label),3),f("span",Qt,x(o.agg.cases)+" "+x(o.agg.cases===1?"case":"cases"),1),n[1]||(n[1]=f("div",{class:"flex-1"},null,-1)),f("div",Zt,[d(y,{passed:o.agg.passed,failed:o.agg.failed,skipped:o.agg.skipped,flaky:o.agg.flaky,"did-not-run":o.agg.didNotRun,total:o.agg.total},null,8,["passed","failed","skipped","flaky","did-not-run","total"])])],14,Gt)):(i(),$("div",{key:1,class:"flex flex-wrap items-center gap-x-2 gap-y-1 pr-3 py-1.5 border-b border-default last:border-b-0 hover:bg-gray-50 dark:hover:bg-gray-900/40 transition-colors",style:de({paddingLeft:`${o.depth*20+12}px`})},[d(g,{name:"i-lucide-flask-conical",class:"size-3.5 text-muted shrink-0"}),d(h,{color:("testCaseCategoryColor"in l?l.testCaseCategoryColor:e(pe))(o.testCase.status),size:"xs",variant:"subtle",class:"capitalize shrink-0"},{default:u(()=>[I(x(("formatStatusLabel"in l?l.formatStatusLabel:e(ce))(o.testCase.status)),1)]),_:2},1032,["color"]),d(S,{to:`/test-cases/${o.testCase.id}`,class:"text-sm text-primary hover:underline truncate flex-1 min-w-32",title:o.testCase.title},{default:u(()=>[I(x(o.testCase.title),1)]),_:2},1032,["to","title"]),f("div",Ht,[d(q,{rate:o.testCase.passRate},null,8,["rate"]),f("span",{class:"text-xs text-muted tabular-nums max-sm:hidden",title:`${o.testCase.totalRuns} runs`},x(o.testCase.totalRuns)+"× ",9,Wt),o.testCase.avgDuration!=null?(i(),$("span",Xt,x(("formatDuration"in l?l.formatDuration:e(fe))(o.testCase.avgDuration)),1)):w("",!0),f("span",{class:"text-xs text-muted max-sm:hidden",title:("prettyDateFormat"in l?l.prettyDateFormat:e(me))(o.testCase.lastRun)},x(("formatRelativeTime"in l?l.formatRelativeTime:e(ge))(o.testCase.lastRun)),9,Yt),d(z,{to:`/test-cases/${o.testCase.id}`,size:"xs",variant:"outline"},{default:u(()=>[...n[2]||(n[2]=[I("View",-1)])]),_:1},8,["to"])])],4))],64))),128)),e(U).length===0?(i(),$("div",Jt,[d(g,{name:"i-lucide-search-x",class:"size-6 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),n[3]||(n[3]=f("p",{class:"text-sm"},"No test cases match your filters.",-1))])):w("",!0)])}}}),ta=Object.assign(ea,{__name:"ProjectTestCasesTree"}),aa={slots:{root:"",list:"flex items-center gap-1",ellipsis:"pointer-events-none",label:"min-w-5 text-center",first:"",prev:"",item:"",next:"",last:""}},sa={__name:"UPagination",props:{as:{type:null,required:!1},firstIcon:{type:null,required:!1},prevIcon:{type:null,required:!1},nextIcon:{type:null,required:!1},lastIcon:{type:null,required:!1},ellipsisIcon:{type:null,required:!1},color:{type:null,required:!1,default:"neutral"},variant:{type:null,required:!1,default:"outline"},activeColor:{type:null,required:!1,default:"primary"},activeVariant:{type:null,required:!1,default:"solid"},showControls:{type:Boolean,required:!1,default:!0},size:{type:null,required:!1},to:{type:Function,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultPage:{type:Number,required:!1},disabled:{type:Boolean,required:!1},itemsPerPage:{type:Number,required:!1,default:10},page:{type:Number,required:!1},showEdges:{type:Boolean,required:!1,default:!1},siblingCount:{type:Number,required:!1,default:2},total:{type:Number,required:!1,default:0}},emits:["update:page"],setup(r,{emit:c}){const s=r,v=c,m=He(),t=We("pagination",s),{dir:C}=Xe(),b=Ye(),j=Je(et(t,"as","defaultPage","disabled","itemsPerPage","page","showEdges","siblingCount","total"),v),L=k(()=>t.firstIcon||(C.value==="rtl"?b.ui.icons.chevronDoubleRight:b.ui.icons.chevronDoubleLeft)),D=k(()=>t.prevIcon||(C.value==="rtl"?b.ui.icons.chevronRight:b.ui.icons.chevronLeft)),B=k(()=>t.nextIcon||(C.value==="rtl"?b.ui.icons.chevronLeft:b.ui.icons.chevronRight)),U=k(()=>t.lastIcon||(C.value==="rtl"?b.ui.icons.chevronDoubleLeft:b.ui.icons.chevronDoubleRight)),l=k(()=>tt({extend:aa,...b.ui?.pagination||{}})());return(n,g)=>(i(),P(e(Ct),Q(e(j),{"data-slot":"root",class:l.value.root({class:[e(t).ui?.root,e(t).class]})}),{default:u(({page:y,pageCount:h})=>[d(e(Lt),{"data-slot":"list",class:N(l.value.list({class:e(t).ui?.list}))},{default:u(({items:S})=>[e(t).showControls||m.first?(i(),P(e(Rt),{key:0,"as-child":"","data-slot":"first",class:N(l.value.first({class:e(t).ui?.first}))},{default:u(()=>[T(n.$slots,"first",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:L.value,to:e(t).to?.(1)},null,8,["color","variant","size","icon","to"])])]),_:3},8,["class"])):w("",!0),e(t).showControls||m.prev?(i(),P(e(Dt),{key:1,"as-child":"","data-slot":"prev",class:N(l.value.prev({class:e(t).ui?.prev}))},{default:u(()=>[T(n.$slots,"prev",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:D.value,to:y>1?e(t).to?.(y-1):void 0},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0),(i(!0),$(A,null,le(S,(q,z)=>(i(),$(A,{key:z},[q.type==="page"?(i(),P(e(jt),{key:0,"as-child":"",value:q.value,"data-slot":"item",class:N(l.value.item({class:e(t).ui?.item}))},{default:u(()=>[T(n.$slots,"item",Q({ref_for:!0},{item:q,index:z,page:y,pageCount:h}),()=>[d(G,{color:y===q.value?e(t).activeColor:e(t).color,variant:y===q.value?e(t).activeVariant:e(t).variant,size:e(t).size,label:String(q.value),ui:{label:l.value.label()},to:e(t).to?.(q.value),square:""},null,8,["color","variant","size","label","ui","to"])])]),_:2},1032,["value","class"])):(i(),P(e(ht),{key:1,"as-child":"","data-slot":"ellipsis",class:N(l.value.ellipsis({class:e(t).ui?.ellipsis}))},{default:u(()=>[T(n.$slots,"ellipsis",{ui:l.value},()=>[d(G,{as:"div",color:e(t).color,variant:e(t).variant,size:e(t).size,icon:e(t).ellipsisIcon||e(b).ui.icons.ellipsis},null,8,["color","variant","size","icon"])])]),_:3},8,["class"]))],64))),128)),e(t).showControls||m.next?(i(),P(e(wt),{key:2,"as-child":"","data-slot":"next",class:N(l.value.next({class:e(t).ui?.next}))},{default:u(()=>[T(n.$slots,"next",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:B.value,to:y<h?e(t).to?.(y+1):void 0},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0),e(t).showControls||m.last?(i(),P(e(qt),{key:3,"as-child":"","data-slot":"last",class:N(l.value.last({class:e(t).ui?.last}))},{default:u(()=>[T(n.$slots,"last",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:U.value,to:e(t).to?.(h)},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0)]),_:2},1032,["class"])]),_:3},16,["class"]))}},la={class:"flex items-center rounded-md border border-default overflow-hidden"},na={class:"text-sm text-muted tabular-nums"},oa={class:"flex flex-wrap items-center gap-1"},ia=["aria-pressed","onClick"],ra={class:"mt-3 flex items-center justify-center gap-2"},ua={class:"hidden md:block overflow-x-auto"},da={class:"min-w-0 space-y-0.5"},ca={class:"flex items-center gap-1 text-xs text-muted"},pa={class:"text-sm tabular-nums"},fa={key:0,class:"text-sm text-muted tabular-nums"},ma={key:1,class:"text-sm text-muted"},ga=["title"],va={class:"flex justify-end"},_a={class:"space-y-2 md:hidden"},ya={class:"flex items-start justify-between gap-2"},ba={class:"flex items-center gap-1 text-xs text-muted min-w-0"},ha={class:"flex flex-wrap items-center justify-between gap-x-3 gap-y-1"},xa={class:"text-xs text-muted tabular-nums"},ka={key:0,class:"text-xs text-muted tabular-nums"},Ca=["title"],Pa={class:"mt-4 flex flex-wrap items-center justify-between gap-3"},Ra={class:"flex flex-wrap items-center gap-3"},$a={class:"text-sm text-muted tabular-nums"},qa={class:"flex items-center gap-1.5"},Sa=1e3,Pe=25,za=F({__name:"ProjectTestCasesTable",props:{projectId:{},projectName:{},syncQuery:{type:Boolean}},emits:["total"],setup(r,{expose:c,emit:s}){const v=r,m=s,t=at(),C=st(),{treeView:b,setTreeView:j}=_t("project-test-cases"),L=[{label:"10 / page",value:10},{label:"25 / page",value:25},{label:"50 / page",value:50},{label:"100 / page",value:100}],D=[{label:"Last 7 days",value:7},{label:"Last 30 days",value:30},{label:"Last 90 days",value:90},{label:"Last year",value:365},{label:"All time",value:0}],B=[{label:"Passed",value:"passed",color:"green"},{label:"Failed",value:"failed",color:"red"},{label:"Flaky",value:"flaky",color:"orange"},{label:"Skipped",value:"skipped",color:"gray"},{label:"Didn't run",value:"didnotrun",color:"amber"}],U=lt().public.demoMode?0:30,l=v.syncQuery?t.query:{},n=M(Math.max(1,Number(l.page)||1)),g=M(typeof l.q=="string"?l.q:""),y=M(g.value),h=M(typeof l.status=="string"?l.status.split(",").filter(Boolean):[]),S=M(typeof l.age=="string"&&l.age!==""?Math.max(0,Number(l.age)||0):U),q=M(typeof l.sort=="string"?l.sort:"lastRun"),z=M(l.dir==="asc"?"asc":"desc"),o=Number(l.pageSize),R=M(L.some(p=>p.value===o)?o:Pe);te(y,ot(p=>{g.value=p.trim()},300)),te([g,h,S,q,z,R,b],()=>{n.value=1});const ee=k(()=>({limit:b.value?Sa:R.value,offset:b.value?0:(n.value-1)*R.value,...g.value?{q:g.value}:{},...h.value.length>0?{status:h.value.join(",")}:{},maxAgeDays:S.value,sort:q.value,dir:z.value})),{data:V,status:ne,error:ve,refresh:oe}=yt(`/api/projects/${v.projectId}/test-cases`,{query:ee},"$6hxagaRDEc");te(()=>V.value?.total,p=>{p!=null&&m("total",p)},{immediate:!0}),v.syncQuery&&te([g,h,S,q,z,n,R],()=>{C.replace({query:{...t.query,q:g.value||void 0,status:h.value.length>0?h.value.join(","):void 0,age:S.value!==U?String(S.value):void 0,sort:q.value!=="lastRun"?q.value:void 0,dir:z.value!=="desc"?z.value:void 0,page:n.value>1?String(n.value):void 0,pageSize:R.value!==Pe?String(R.value):void 0}})});function ze(p){h.value=h.value.includes(p)?h.value.filter(_=>_!==p):[...h.value,p]}function Ie(p){q.value===p?z.value=z.value==="asc"?"desc":"asc":(q.value=p,z.value=p==="title"?"asc":"desc")}function W(p,_){return()=>{const O=q.value===_,re=O?z.value==="asc"?"i-lucide-chevron-up":"i-lucide-chevron-down":"i-lucide-chevrons-up-down";return ue("button",{type:"button",class:"flex items-center gap-1 font-semibold select-none cursor-pointer hover:text-highlighted transition-colors",onClick:()=>Ie(_)},[p,ue(Y,{name:re,class:["shrink-0 size-3.5",!O&&"opacity-40"]})])}}const Le=k(()=>[{accessorKey:"title",header:W("Test case","title")},{accessorKey:"status",header:W("Status","status")},{accessorKey:"totalRuns",header:W("Runs","totalRuns")},{accessorKey:"passRate",header:W("Pass rate","passRate")},{id:"results",header:"Results"},{accessorKey:"avgDuration",header:W("Avg duration","avgDuration")},{accessorKey:"lastRun",header:W("Last run","lastRun")},{id:"actions",header:()=>ue("div",{class:"text-right"},"Actions")}]),X=k(()=>V.value?.items??[]),E=k(()=>V.value?.total??0),Ne=k(()=>E.value===0?0:(n.value-1)*R.value+1),je=k(()=>b.value?X.value.length:Math.min(n.value*R.value,E.value)),ie=k(()=>g.value!==""||h.value.length>0),Te=k(()=>ie.value||S.value!==0),we=k(()=>ne.value==="pending"&&!V.value);return c({refresh:oe}),(p,_)=>{const O=G,re=nt,_e=it,Fe=rt,De=ut,Be=dt,ye=ct,Ee=pt,Ve=ta,be=$e,he=mt,xe=Re,ke=Se,Ce=qe,Me=gt,Ae=sa,Ue=vt;return i(),P(Ue,{title:"Test cases",icon:"i-lucide-flask-conical",count:e(V)?.total,help:"project.test-cases"},{actions:u(()=>[d(O,{icon:"i-lucide-refresh-cw",size:"sm",color:"neutral",variant:"ghost","aria-label":"Refresh test cases",loading:e(ne)==="pending"&&!!e(V),onClick:_[0]||(_[0]=()=>e(oe)())},null,8,["loading"])]),default:u(()=>[d(Fe,{class:"mb-4"},{start:u(()=>[f("div",la,[f("button",{type:"button",class:N(["px-2 py-1 text-xs transition-colors",e(b)?"text-muted hover:bg-elevated/60":"bg-primary text-white dark:text-white"]),title:"Flat list",onClick:_[1]||(_[1]=a=>e(j)(!1))},[d(e(Y),{name:"i-lucide-list",class:"size-3.5"})],2),f("button",{type:"button",class:N(["px-2 py-1 text-xs transition-colors",e(b)?"bg-primary text-white dark:text-white":"text-muted hover:bg-elevated/60"]),title:"Tree view",onClick:_[2]||(_[2]=a=>e(j)(!0))},[d(e(Y),{name:"i-lucide-folder-tree",class:"size-3.5"})],2)]),f("span",na,x(e(E))+" "+x(e(E)===1?"case":"cases"),1)]),default:u(()=>[d(re,{modelValue:e(y),"onUpdate:modelValue":_[3]||(_[3]=a=>ae(y)?y.value=a:null),placeholder:"Search title or file...",icon:"i-lucide-search",size:"sm",class:"min-w-48 max-sm:flex-1","aria-label":"Search test cases"},null,8,["modelValue"]),f("div",oa,[(i(),$(A,null,le(B,a=>f("button",{key:a.value,type:"button",class:N(["inline-flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium transition-colors whitespace-nowrap",e(h).includes(a.value)?a.color==="green"?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":a.color==="red"?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":a.color==="orange"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":a.color==="amber"?"bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400":"bg-gray-200 text-gray-700 dark:bg-gray-700 dark:text-gray-300":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700"]),"aria-pressed":e(h).includes(a.value),onClick:Ia=>ze(a.value)},[f("span",{class:N(["size-2 rounded-full shrink-0",a.color==="green"?"bg-green-500":a.color==="red"?"bg-red-500":a.color==="orange"?"bg-orange-500":a.color==="amber"?"bg-amber-500":"bg-gray-400"])},null,2),I(" "+x(a.label),1)],10,ia)),64))]),d(_e,{modelValue:e(S),"onUpdate:modelValue":_[4]||(_[4]=a=>ae(S)?S.value=a:null),items:D,size:"sm",class:"w-36","aria-label":"Last run age filter"},null,8,["modelValue"])]),_:1}),e(we)?(i(),P(De,{key:0,text:"Loading test cases..."})):e(ve)?(i(),P(Be,{key:1,text:("errorMessage"in p?p.errorMessage:e(ft))(e(ve),"Failed to load test cases")},{action:u(()=>[d(O,{size:"sm",variant:"outline",onClick:_[5]||(_[5]=()=>e(oe)())},{default:u(()=>[..._[10]||(_[10]=[I("Retry",-1)])]),_:1})]),_:1},8,["text"])):e(E)===0?(i(),$(A,{key:2},[e(Te)?(i(),P(ye,{key:1,icon:"i-lucide-search-x",text:"No test cases match your filters."},{default:u(()=>[f("div",ra,[e(S)!==0?(i(),P(O,{key:0,size:"sm",variant:"outline",onClick:_[6]||(_[6]=a=>S.value=0)},{default:u(()=>[..._[11]||(_[11]=[I("Show all time",-1)])]),_:1})):w("",!0),e(ie)?(i(),P(O,{key:1,size:"sm",variant:"ghost",onClick:_[7]||(_[7]=()=>{y.value="",g.value="",h.value=[]})},{default:u(()=>[..._[12]||(_[12]=[I(" Clear filters ",-1)])]),_:1})):w("",!0)])]),_:1})):(i(),P(ye,{key:0,icon:"i-lucide-flask-conical",text:"No test cases yet for this project."}))],64)):(i(),$("div",{key:3,class:N([{"opacity-60 pointer-events-none":e(ne)==="pending"},"transition-opacity"])},[e(b)?(i(),$(A,{key:0},[e(X).length<e(E)?(i(),P(Ee,{key:0,color:"warning",variant:"subtle",icon:"i-lucide-triangle-alert",class:"mb-3",title:`Showing the first ${e(X).length} of ${e(E)} cases — narrow the search or filters to see the rest.`},null,8,["title"])):w("",!0),d(Ve,{items:e(X),"has-filter":e(ie)},null,8,["items","has-filter"])],64)):(i(),$(A,{key:1},[f("div",ua,[d(Me,{data:e(X),columns:e(Le),ui:{base:"w-full table-fixed border-separate border-spacing-0 min-w-[56rem]",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0 [&>tr]:hover:bg-gray-50 dark:[&>tr]:hover:bg-gray-900/50",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"title-cell":u(({row:a})=>[f("div",da,[d(be,{to:`/test-cases/${a.original.id}`,class:"text-sm font-medium text-primary hover:underline truncate block",title:a.original.title},{default:u(()=>[I(x(a.original.title),1)]),_:2},1032,["to","title"]),f("div",ca,[d(e(Y),{name:"i-lucide-file-code",class:"size-3 shrink-0"}),d(he,{"file-path":a.original.filePath,"project-key":r.projectId,"project-name":r.projectName,class:"min-w-0"},null,8,["file-path","project-key","project-name"])])])]),"status-cell":u(({row:a})=>[d(xe,{color:("testCaseCategoryColor"in p?p.testCaseCategoryColor:e(pe))(a.original.status),variant:"subtle",size:"sm",class:"capitalize"},{default:u(()=>[I(x(("formatStatusLabel"in p?p.formatStatusLabel:e(ce))(a.original.status)),1)]),_:2},1032,["color"])]),"totalRuns-cell":u(({row:a})=>[f("span",pa,x(a.original.totalRuns),1)]),"passRate-cell":u(({row:a})=>[d(ke,{rate:a.original.passRate},null,8,["rate"])]),"results-cell":u(({row:a})=>[d(Ce,{passed:a.original.passedRuns,failed:a.original.failedRuns,skipped:a.original.skippedRuns,flaky:a.original.flakyRuns,"did-not-run":a.original.didNotRunRuns,total:a.original.totalRuns},null,8,["passed","failed","skipped","flaky","did-not-run","total"])]),"avgDuration-cell":u(({row:a})=>[a.original.avgDuration!=null?(i(),$("span",fa,x(("formatDuration"in p?p.formatDuration:e(fe))(a.original.avgDuration)),1)):(i(),$("span",ma,"—"))]),"lastRun-cell":u(({row:a})=>[f("span",{class:"text-sm text-muted",title:("prettyDateFormat"in p?p.prettyDateFormat:e(me))(a.original.lastRun)},x(a.original.lastRun!=null?("formatRelativeTime"in p?p.formatRelativeTime:e(ge))(a.original.lastRun):"—"),9,ga)]),"actions-cell":u(({row:a})=>[f("div",va,[d(O,{to:`/test-cases/${a.original.id}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:u(()=>[..._[13]||(_[13]=[I(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data","columns"])]),f("div",_a,[(i(!0),$(A,null,le(e(X),a=>(i(),$("div",{key:a.id,class:"rounded-lg border border-default p-3 space-y-2"},[f("div",ya,[d(be,{to:`/test-cases/${a.id}`,class:"text-sm font-medium text-primary hover:underline min-w-0 truncate",title:a.title},{default:u(()=>[I(x(a.title),1)]),_:2},1032,["to","title"]),d(xe,{color:("testCaseCategoryColor"in p?p.testCaseCategoryColor:e(pe))(a.status),variant:"subtle",size:"sm",class:"capitalize shrink-0"},{default:u(()=>[I(x(("formatStatusLabel"in p?p.formatStatusLabel:e(ce))(a.status)),1)]),_:2},1032,["color"])]),f("div",ba,[d(e(Y),{name:"i-lucide-file-code",class:"size-3 shrink-0"}),d(he,{"file-path":a.filePath,"project-key":r.projectId,"project-name":r.projectName,class:"min-w-0"},null,8,["file-path","project-key","project-name"])]),d(Ce,{passed:a.passedRuns,failed:a.failedRuns,skipped:a.skippedRuns,flaky:a.flakyRuns,"did-not-run":a.didNotRunRuns,total:a.totalRuns},null,8,["passed","failed","skipped","flaky","did-not-run","total"]),f("div",ha,[d(ke,{rate:a.passRate},null,8,["rate"]),f("span",xa,x(a.totalRuns)+" runs",1),a.avgDuration!=null?(i(),$("span",ka,x(("formatDuration"in p?p.formatDuration:e(fe))(a.avgDuration)),1)):w("",!0),f("span",{class:"text-xs text-muted",title:("prettyDateFormat"in p?p.prettyDateFormat:e(me))(a.lastRun)},x(a.lastRun!=null?("formatRelativeTime"in p?p.formatRelativeTime:e(ge))(a.lastRun):"—"),9,Ca)])]))),128))]),f("div",Pa,[f("div",Ra,[f("span",$a,"Showing "+x(e(Ne))+"–"+x(e(je))+" of "+x(e(E)),1),f("div",qa,[_[14]||(_[14]=f("span",{class:"text-sm text-muted"},"Rows per page",-1)),d(_e,{modelValue:e(R),"onUpdate:modelValue":_[8]||(_[8]=a=>ae(R)?R.value=a:null),items:L,size:"sm",class:"w-28","aria-label":"Rows per page"},null,8,["modelValue"])])]),e(E)>e(R)?(i(),P(Ae,{key:0,page:e(n),"onUpdate:page":_[9]||(_[9]=a=>ae(n)?n.value=a:null),total:e(E),"items-per-page":e(R),size:"sm"},null,8,["page","total","items-per-page"])):w("",!0)])],64))],2))]),_:1},8,["count"])}}}),Ka=Object.assign(za,{__name:"ProjectTestCasesTable"});export{Ka as _};
1
+ import{d as F,S as Z,o as i,f as P,g as u,T,m as I,U as Q,k as e,V as H,W as Oe,X as Ke,h as k,Y as Ge,Z as Qe,$ as Ze,t as x,c as $,i as f,O as de,p as N,j as d,v as Y,F as A,y as le,s as Re,x as $e,q as w,_ as G,r as M,a0 as He,a1 as We,a2 as Xe,a3 as Ye,a4 as Je,a5 as et,a6 as tt,u as at,a as st,K as lt,B as te,D as nt,l as ae,a7 as ot,a8 as ue}from"./BPKwYP2Q.js";import{_ as it}from"./C1K3r_fc.js";import{_ as rt}from"./DbeHHTk-.js";import{_ as ut}from"./CgoAUz76.js";import{_ as dt}from"./CKB_doYB.js";import{_ as ct}from"./xUrLy-Zn.js";import{_ as pt}from"./Br2K9yi_.js";import{_ as qe}from"./Dzz9_Z0u.js";import{j as ce,t as pe,h as fe,p as me,f as ge,e as ft}from"./k-z_VVTK.js";import{_ as mt}from"./BdFEUAlx.js";import{_ as gt}from"./BuZOa2M3.js";import{_ as vt}from"./DhA17dqR.js";import{u as _t}from"./DJS3Bf50.js";import{u as yt}from"./BIf1R_fu.js";var bt=F({__name:"PaginationEllipsis",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const c=r;return Z(),(s,v)=>(i(),P(e(H),Q(c,{"data-type":"ellipsis"}),{default:u(()=>[T(s.$slots,"default",{},()=>[v[0]||(v[0]=I("…"))])]),_:3},16))}}),ht=bt;const[J,xt]=Ge("PaginationRoot");var kt=F({__name:"PaginationRoot",props:{page:{type:Number,required:!1},defaultPage:{type:Number,required:!1,default:1},itemsPerPage:{type:Number,required:!0},total:{type:Number,required:!1,default:0},siblingCount:{type:Number,required:!1,default:2},disabled:{type:Boolean,required:!1},showEdges:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"nav"}},emits:["update:page"],setup(r,{emit:c}){const s=r,v=c,{siblingCount:m,disabled:t,showEdges:C}=Oe(s);Z();const b=Ke(s,"page",v,{defaultValue:s.defaultPage,passive:s.page===void 0}),j=k(()=>Math.max(1,Math.ceil(s.total/(s.itemsPerPage||1))));return xt({page:b,onPageChange(L){b.value=L},pageCount:j,siblingCount:m,disabled:t,showEdges:C}),(L,D)=>(i(),P(e(H),{as:L.as,"as-child":L.asChild},{default:u(()=>[T(L.$slots,"default",{page:e(b),pageCount:j.value})]),_:3},8,["as","as-child"]))}}),Ct=kt,Pt=F({__name:"PaginationFirst",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r,s=J();Z();const v=k(()=>s.page.value===1||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"First Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("First page"))])]),_:3},16,["type","disabled"]))}}),Rt=Pt,$t=F({__name:"PaginationLast",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r,s=J();Z();const v=k(()=>s.page.value===s.pageCount.value||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Last Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).pageCount.value))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Last page"))])]),_:3},16,["type","disabled"]))}}),qt=$t;function K(r,c){const s=c-r+1;return Array.from({length:s},(v,m)=>m+r)}function St(r){return r.map(c=>typeof c=="number"?{type:"page",value:c}:{type:"ellipsis"})}const se="ellipsis";function zt(r,c,s,v){const t=c,C=Math.max(r-s,1),b=Math.min(r+s,t);if(v){const L=Math.min(2*s+5,c)-2,D=C>3&&Math.abs(t-L-1+1)>2&&Math.abs(C-1)>2,B=b<t-2&&Math.abs(t-L)>2&&Math.abs(t-b)>2;if(!D&&B)return[...K(1,L),se,t];if(D&&!B){const l=K(t-L+1,t);return[1,se,...l]}if(D&&B){const l=K(C,b);return[1,se,...l,se,t]}return K(1,t)}else{const j=s*2+1;return c<j?K(1,t):r<=s+1?K(1,j):c-r<=s?K(c-j+1,t):K(C,b)}}var It=F({__name:"PaginationList",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const c=r;Z();const s=J(),v=k(()=>St(zt(s.page.value,s.pageCount.value,s.siblingCount.value,s.showEdges.value)));return(m,t)=>(i(),P(e(H),Qe(Ze(c)),{default:u(()=>[T(m.$slots,"default",{items:v.value})]),_:3},16))}}),Lt=It,Nt=F({__name:"PaginationListItem",props:{value:{type:Number,required:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===c.value),m=k(()=>s.disabled.value);return(t,C)=>(i(),P(e(H),Q(c,{"data-type":"page","aria-label":`Page ${t.value}`,"aria-current":v.value?"page":void 0,"data-selected":v.value?"true":void 0,disabled:m.value,type:t.as==="button"?"button":void 0,onClick:C[0]||(C[0]=b=>!m.value&&e(s).onPageChange(t.value))}),{default:u(()=>[T(t.$slots,"default",{},()=>[I(x(t.value),1)])]),_:3},16,["aria-label","aria-current","data-selected","disabled","type"]))}}),jt=Nt,Tt=F({__name:"PaginationNext",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===s.pageCount.value||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Next Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).page.value+1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Next page"))])]),_:3},16,["type","disabled"]))}}),wt=Tt,Ft=F({__name:"PaginationPrev",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===1||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Previous Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).page.value-1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Prev page"))])]),_:3},16,["type","disabled"]))}}),Dt=Ft;const Bt=["title"],Et={class:"h-1.5 w-14 shrink-0 overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700"},Vt={class:"text-sm font-medium tabular-nums"},Mt={key:1,class:"text-sm text-muted",title:"No executed runs yet"},At=F({__name:"PassRateIndicator",props:{rate:{}},setup(r){const c=r,s=k(()=>c.rate==null?null:Math.round(c.rate*100)),v=k(()=>s.value==null?"":s.value>=80?"bg-green-500":s.value>=50?"bg-amber-500":"bg-red-500");return(m,t)=>e(s)!=null?(i(),$("div",{key:0,class:"flex items-center gap-2",title:`${e(s)}% of executed runs passed`},[f("div",Et,[f("div",{class:N([e(v),"h-full rounded-full transition-all"]),style:de({width:`${e(s)}%`})},null,6)]),f("span",Vt,x(e(s))+"%",1)],8,Bt)):(i(),$("span",Mt,"—"))}}),Se=Object.assign(At,{__name:"PassRateIndicator"}),Ut={class:"rounded-lg border border-default text-sm"},Ot={class:"flex items-center justify-end px-3 py-1.5 border-b border-default bg-elevated"},Kt=["disabled","title"],Gt=["onClick"],Qt={class:"text-xs text-muted tabular-nums shrink-0"},Zt={class:"w-24 sm:w-32 shrink-0 max-sm:hidden"},Ht={class:"flex items-center gap-3 shrink-0"},Wt=["title"],Xt={key:0,class:"text-xs text-muted tabular-nums max-sm:hidden"},Yt=["title"],Jt={key:0,class:"text-center py-8 text-muted"},ea=F({__name:"ProjectTestCasesTree",props:{items:{},hasFilter:{type:Boolean}},setup(r){const c=r;function s(l){return(l.suitePath||"").split("").filter(Boolean)}function v(l){const n={passed:0,failed:0,skipped:0,flaky:0,didNotRun:0,total:0,cases:l.length};for(const g of l)n.passed+=g.passedRuns,n.failed+=g.failedRuns,n.skipped+=g.skippedRuns,n.flaky+=g.flakyRuns,n.didNotRun+=g.didNotRunRuns,n.total+=g.totalRuns;return n}const m=M(new Set),t=k(()=>m.value.size===0);function C(l){return c.hasFilter?!0:!m.value.has(l)}function b(l){if(c.hasFilter)return;const n=new Set(m.value);n.has(l)?n.delete(l):n.add(l),m.value=n}function j(){const l=new Set;for(const n of c.items){l.add(`file:${n.filePath}`);const g=s(n);for(let y=1;y<=g.length;y++)l.add(`group:${n.filePath}${g.slice(0,y).join("")}`)}return[...l]}function L(){m.value=new Set(j())}function D(){m.value=new Set}function B(l,n,g,y,h){const S=n.filter(o=>s(o).length===y.length),q=n.filter(o=>s(o).length>y.length),z=new Map;for(const o of q){const R=s(o)[y.length];z.has(R)||z.set(R,[]),z.get(R).push(o)}for(const[o,R]of z){const ee=[...y,o],V=`group:${g}${ee.join("")}`;l.push({kind:"group",depth:h,key:V,label:o,agg:v(R)}),C(V)&&B(l,R,g,ee,h+1)}for(const o of S)l.push({kind:"case",depth:h,key:`case:${o.id}`,testCase:o})}const U=k(()=>{const l=[],n=new Map;for(const g of c.items){const y=g.filePath||"unknown";n.has(y)||n.set(y,[]),n.get(y).push(g)}for(const[g,y]of[...n.entries()].sort(([h],[S])=>h.localeCompare(S))){const h=`file:${g}`;l.push({kind:"group",depth:0,key:h,label:g,agg:v(y)}),C(h)&&B(l,y,g,[],1)}return l});return(l,n)=>{const g=Y,y=qe,h=Re,S=$e,q=Se,z=G;return i(),$("div",Ut,[f("div",Ot,[f("button",{class:N(["flex items-center gap-1 text-xs transition-colors",r.hasFilter?"text-muted cursor-not-allowed opacity-50":"text-muted hover:text-default"]),disabled:r.hasFilter,title:r.hasFilter?"Clear filters to collapse/expand":e(t)?"Collapse all":"Expand all",onClick:n[0]||(n[0]=o=>e(t)?L():D())},[d(g,{name:e(t)?"i-lucide-fold-vertical":"i-lucide-unfold-vertical",class:"size-3.5"},null,8,["name"]),I(" "+x(e(t)?"Collapse all":"Expand all"),1)],10,Kt)]),(i(!0),$(A,null,le(e(U),o=>(i(),$(A,{key:o.key},[o.kind==="group"?(i(),$("div",{key:0,class:N(["flex items-center gap-2 py-2 pr-3 border-b border-default last:border-b-0 select-none",[o.depth===0?"bg-elevated":"bg-default",!r.hasFilter&&"cursor-pointer"]]),style:de({paddingLeft:`${o.depth*20+12}px`}),onClick:R=>b(o.key)},[d(g,{name:C(o.key)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5 text-muted shrink-0"},null,8,["name"]),d(g,{name:o.depth===0?"i-lucide-file-code-2":"i-lucide-folder-open",class:N(["size-4 shrink-0",o.depth===0?"text-blue-500":"text-amber-500"])},null,8,["name","class"]),f("span",{class:N(["font-medium truncate min-w-0",[o.depth===0?"text-default font-mono text-xs sm:text-sm":"text-muted"]])},x(o.label),3),f("span",Qt,x(o.agg.cases)+" "+x(o.agg.cases===1?"case":"cases"),1),n[1]||(n[1]=f("div",{class:"flex-1"},null,-1)),f("div",Zt,[d(y,{passed:o.agg.passed,failed:o.agg.failed,skipped:o.agg.skipped,flaky:o.agg.flaky,"did-not-run":o.agg.didNotRun,total:o.agg.total},null,8,["passed","failed","skipped","flaky","did-not-run","total"])])],14,Gt)):(i(),$("div",{key:1,class:"flex flex-wrap items-center gap-x-2 gap-y-1 pr-3 py-1.5 border-b border-default last:border-b-0 hover:bg-gray-50 dark:hover:bg-gray-900/40 transition-colors",style:de({paddingLeft:`${o.depth*20+12}px`})},[d(g,{name:"i-lucide-flask-conical",class:"size-3.5 text-muted shrink-0"}),d(h,{color:("testCaseCategoryColor"in l?l.testCaseCategoryColor:e(pe))(o.testCase.status),size:"xs",variant:"subtle",class:"capitalize shrink-0"},{default:u(()=>[I(x(("formatStatusLabel"in l?l.formatStatusLabel:e(ce))(o.testCase.status)),1)]),_:2},1032,["color"]),d(S,{to:`/test-cases/${o.testCase.id}`,class:"text-sm text-primary hover:underline truncate flex-1 min-w-32",title:o.testCase.title},{default:u(()=>[I(x(o.testCase.title),1)]),_:2},1032,["to","title"]),f("div",Ht,[d(q,{rate:o.testCase.passRate},null,8,["rate"]),f("span",{class:"text-xs text-muted tabular-nums max-sm:hidden",title:`${o.testCase.totalRuns} runs`},x(o.testCase.totalRuns)+"× ",9,Wt),o.testCase.avgDuration!=null?(i(),$("span",Xt,x(("formatDuration"in l?l.formatDuration:e(fe))(o.testCase.avgDuration)),1)):w("",!0),f("span",{class:"text-xs text-muted max-sm:hidden",title:("prettyDateFormat"in l?l.prettyDateFormat:e(me))(o.testCase.lastRun)},x(("formatRelativeTime"in l?l.formatRelativeTime:e(ge))(o.testCase.lastRun)),9,Yt),d(z,{to:`/test-cases/${o.testCase.id}`,size:"xs",variant:"outline"},{default:u(()=>[...n[2]||(n[2]=[I("View",-1)])]),_:1},8,["to"])])],4))],64))),128)),e(U).length===0?(i(),$("div",Jt,[d(g,{name:"i-lucide-search-x",class:"size-6 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),n[3]||(n[3]=f("p",{class:"text-sm"},"No test cases match your filters.",-1))])):w("",!0)])}}}),ta=Object.assign(ea,{__name:"ProjectTestCasesTree"}),aa={slots:{root:"",list:"flex items-center gap-1",ellipsis:"pointer-events-none",label:"min-w-5 text-center",first:"",prev:"",item:"",next:"",last:""}},sa={__name:"UPagination",props:{as:{type:null,required:!1},firstIcon:{type:null,required:!1},prevIcon:{type:null,required:!1},nextIcon:{type:null,required:!1},lastIcon:{type:null,required:!1},ellipsisIcon:{type:null,required:!1},color:{type:null,required:!1,default:"neutral"},variant:{type:null,required:!1,default:"outline"},activeColor:{type:null,required:!1,default:"primary"},activeVariant:{type:null,required:!1,default:"solid"},showControls:{type:Boolean,required:!1,default:!0},size:{type:null,required:!1},to:{type:Function,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultPage:{type:Number,required:!1},disabled:{type:Boolean,required:!1},itemsPerPage:{type:Number,required:!1,default:10},page:{type:Number,required:!1},showEdges:{type:Boolean,required:!1,default:!1},siblingCount:{type:Number,required:!1,default:2},total:{type:Number,required:!1,default:0}},emits:["update:page"],setup(r,{emit:c}){const s=r,v=c,m=He(),t=We("pagination",s),{dir:C}=Xe(),b=Ye(),j=Je(et(t,"as","defaultPage","disabled","itemsPerPage","page","showEdges","siblingCount","total"),v),L=k(()=>t.firstIcon||(C.value==="rtl"?b.ui.icons.chevronDoubleRight:b.ui.icons.chevronDoubleLeft)),D=k(()=>t.prevIcon||(C.value==="rtl"?b.ui.icons.chevronRight:b.ui.icons.chevronLeft)),B=k(()=>t.nextIcon||(C.value==="rtl"?b.ui.icons.chevronLeft:b.ui.icons.chevronRight)),U=k(()=>t.lastIcon||(C.value==="rtl"?b.ui.icons.chevronDoubleLeft:b.ui.icons.chevronDoubleRight)),l=k(()=>tt({extend:aa,...b.ui?.pagination||{}})());return(n,g)=>(i(),P(e(Ct),Q(e(j),{"data-slot":"root",class:l.value.root({class:[e(t).ui?.root,e(t).class]})}),{default:u(({page:y,pageCount:h})=>[d(e(Lt),{"data-slot":"list",class:N(l.value.list({class:e(t).ui?.list}))},{default:u(({items:S})=>[e(t).showControls||m.first?(i(),P(e(Rt),{key:0,"as-child":"","data-slot":"first",class:N(l.value.first({class:e(t).ui?.first}))},{default:u(()=>[T(n.$slots,"first",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:L.value,to:e(t).to?.(1)},null,8,["color","variant","size","icon","to"])])]),_:3},8,["class"])):w("",!0),e(t).showControls||m.prev?(i(),P(e(Dt),{key:1,"as-child":"","data-slot":"prev",class:N(l.value.prev({class:e(t).ui?.prev}))},{default:u(()=>[T(n.$slots,"prev",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:D.value,to:y>1?e(t).to?.(y-1):void 0},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0),(i(!0),$(A,null,le(S,(q,z)=>(i(),$(A,{key:z},[q.type==="page"?(i(),P(e(jt),{key:0,"as-child":"",value:q.value,"data-slot":"item",class:N(l.value.item({class:e(t).ui?.item}))},{default:u(()=>[T(n.$slots,"item",Q({ref_for:!0},{item:q,index:z,page:y,pageCount:h}),()=>[d(G,{color:y===q.value?e(t).activeColor:e(t).color,variant:y===q.value?e(t).activeVariant:e(t).variant,size:e(t).size,label:String(q.value),ui:{label:l.value.label()},to:e(t).to?.(q.value),square:""},null,8,["color","variant","size","label","ui","to"])])]),_:2},1032,["value","class"])):(i(),P(e(ht),{key:1,"as-child":"","data-slot":"ellipsis",class:N(l.value.ellipsis({class:e(t).ui?.ellipsis}))},{default:u(()=>[T(n.$slots,"ellipsis",{ui:l.value},()=>[d(G,{as:"div",color:e(t).color,variant:e(t).variant,size:e(t).size,icon:e(t).ellipsisIcon||e(b).ui.icons.ellipsis},null,8,["color","variant","size","icon"])])]),_:3},8,["class"]))],64))),128)),e(t).showControls||m.next?(i(),P(e(wt),{key:2,"as-child":"","data-slot":"next",class:N(l.value.next({class:e(t).ui?.next}))},{default:u(()=>[T(n.$slots,"next",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:B.value,to:y<h?e(t).to?.(y+1):void 0},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0),e(t).showControls||m.last?(i(),P(e(qt),{key:3,"as-child":"","data-slot":"last",class:N(l.value.last({class:e(t).ui?.last}))},{default:u(()=>[T(n.$slots,"last",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:U.value,to:e(t).to?.(h)},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0)]),_:2},1032,["class"])]),_:3},16,["class"]))}},la={class:"flex items-center rounded-md border border-default overflow-hidden"},na={class:"text-sm text-muted tabular-nums"},oa={class:"flex flex-wrap items-center gap-1"},ia=["aria-pressed","onClick"],ra={class:"mt-3 flex items-center justify-center gap-2"},ua={class:"hidden md:block overflow-x-auto"},da={class:"min-w-0 space-y-0.5"},ca={class:"flex items-center gap-1 text-xs text-muted"},pa={class:"text-sm tabular-nums"},fa={key:0,class:"text-sm text-muted tabular-nums"},ma={key:1,class:"text-sm text-muted"},ga=["title"],va={class:"flex justify-end"},_a={class:"space-y-2 md:hidden"},ya={class:"flex items-start justify-between gap-2"},ba={class:"flex items-center gap-1 text-xs text-muted min-w-0"},ha={class:"flex flex-wrap items-center justify-between gap-x-3 gap-y-1"},xa={class:"text-xs text-muted tabular-nums"},ka={key:0,class:"text-xs text-muted tabular-nums"},Ca=["title"],Pa={class:"mt-4 flex flex-wrap items-center justify-between gap-3"},Ra={class:"flex flex-wrap items-center gap-3"},$a={class:"text-sm text-muted tabular-nums"},qa={class:"flex items-center gap-1.5"},Sa=1e3,Pe=25,za=F({__name:"ProjectTestCasesTable",props:{projectId:{},projectName:{},syncQuery:{type:Boolean}},emits:["total"],setup(r,{expose:c,emit:s}){const v=r,m=s,t=at(),C=st(),{treeView:b,setTreeView:j}=_t("project-test-cases"),L=[{label:"10 / page",value:10},{label:"25 / page",value:25},{label:"50 / page",value:50},{label:"100 / page",value:100}],D=[{label:"Last 7 days",value:7},{label:"Last 30 days",value:30},{label:"Last 90 days",value:90},{label:"Last year",value:365},{label:"All time",value:0}],B=[{label:"Passed",value:"passed",color:"green"},{label:"Failed",value:"failed",color:"red"},{label:"Flaky",value:"flaky",color:"orange"},{label:"Skipped",value:"skipped",color:"gray"},{label:"Didn't run",value:"didnotrun",color:"amber"}],U=lt().public.demoMode?0:30,l=v.syncQuery?t.query:{},n=M(Math.max(1,Number(l.page)||1)),g=M(typeof l.q=="string"?l.q:""),y=M(g.value),h=M(typeof l.status=="string"?l.status.split(",").filter(Boolean):[]),S=M(typeof l.age=="string"&&l.age!==""?Math.max(0,Number(l.age)||0):U),q=M(typeof l.sort=="string"?l.sort:"lastRun"),z=M(l.dir==="asc"?"asc":"desc"),o=Number(l.pageSize),R=M(L.some(p=>p.value===o)?o:Pe);te(y,ot(p=>{g.value=p.trim()},300)),te([g,h,S,q,z,R,b],()=>{n.value=1});const ee=k(()=>({limit:b.value?Sa:R.value,offset:b.value?0:(n.value-1)*R.value,...g.value?{q:g.value}:{},...h.value.length>0?{status:h.value.join(",")}:{},maxAgeDays:S.value,sort:q.value,dir:z.value})),{data:V,status:ne,error:ve,refresh:oe}=yt(`/api/projects/${v.projectId}/test-cases`,{query:ee},"$6hxagaRDEc");te(()=>V.value?.total,p=>{p!=null&&m("total",p)},{immediate:!0}),v.syncQuery&&te([g,h,S,q,z,n,R],()=>{C.replace({query:{...t.query,q:g.value||void 0,status:h.value.length>0?h.value.join(","):void 0,age:S.value!==U?String(S.value):void 0,sort:q.value!=="lastRun"?q.value:void 0,dir:z.value!=="desc"?z.value:void 0,page:n.value>1?String(n.value):void 0,pageSize:R.value!==Pe?String(R.value):void 0}})});function ze(p){h.value=h.value.includes(p)?h.value.filter(_=>_!==p):[...h.value,p]}function Ie(p){q.value===p?z.value=z.value==="asc"?"desc":"asc":(q.value=p,z.value=p==="title"?"asc":"desc")}function W(p,_){return()=>{const O=q.value===_,re=O?z.value==="asc"?"i-lucide-chevron-up":"i-lucide-chevron-down":"i-lucide-chevrons-up-down";return ue("button",{type:"button",class:"flex items-center gap-1 font-semibold select-none cursor-pointer hover:text-highlighted transition-colors",onClick:()=>Ie(_)},[p,ue(Y,{name:re,class:["shrink-0 size-3.5",!O&&"opacity-40"]})])}}const Le=k(()=>[{accessorKey:"title",header:W("Test case","title")},{accessorKey:"status",header:W("Status","status")},{accessorKey:"totalRuns",header:W("Runs","totalRuns")},{accessorKey:"passRate",header:W("Pass rate","passRate")},{id:"results",header:"Results"},{accessorKey:"avgDuration",header:W("Avg duration","avgDuration")},{accessorKey:"lastRun",header:W("Last run","lastRun")},{id:"actions",header:()=>ue("div",{class:"text-right"},"Actions")}]),X=k(()=>V.value?.items??[]),E=k(()=>V.value?.total??0),Ne=k(()=>E.value===0?0:(n.value-1)*R.value+1),je=k(()=>b.value?X.value.length:Math.min(n.value*R.value,E.value)),ie=k(()=>g.value!==""||h.value.length>0),Te=k(()=>ie.value||S.value!==0),we=k(()=>ne.value==="pending"&&!V.value);return c({refresh:oe}),(p,_)=>{const O=G,re=nt,_e=it,Fe=rt,De=ut,Be=dt,ye=ct,Ee=pt,Ve=ta,be=$e,he=mt,xe=Re,ke=Se,Ce=qe,Me=gt,Ae=sa,Ue=vt;return i(),P(Ue,{title:"Test cases",icon:"i-lucide-flask-conical",count:e(V)?.total,help:"project.test-cases"},{actions:u(()=>[d(O,{icon:"i-lucide-refresh-cw",size:"sm",color:"neutral",variant:"ghost","aria-label":"Refresh test cases",loading:e(ne)==="pending"&&!!e(V),onClick:_[0]||(_[0]=()=>e(oe)())},null,8,["loading"])]),default:u(()=>[d(Fe,{class:"mb-4"},{start:u(()=>[f("div",la,[f("button",{type:"button",class:N(["px-2 py-1 text-xs transition-colors",e(b)?"text-muted hover:bg-elevated/60":"bg-primary text-white dark:text-white"]),title:"Flat list",onClick:_[1]||(_[1]=a=>e(j)(!1))},[d(e(Y),{name:"i-lucide-list",class:"size-3.5"})],2),f("button",{type:"button",class:N(["px-2 py-1 text-xs transition-colors",e(b)?"bg-primary text-white dark:text-white":"text-muted hover:bg-elevated/60"]),title:"Tree view",onClick:_[2]||(_[2]=a=>e(j)(!0))},[d(e(Y),{name:"i-lucide-folder-tree",class:"size-3.5"})],2)]),f("span",na,x(e(E))+" "+x(e(E)===1?"case":"cases"),1)]),default:u(()=>[d(re,{modelValue:e(y),"onUpdate:modelValue":_[3]||(_[3]=a=>ae(y)?y.value=a:null),placeholder:"Search title or file...",icon:"i-lucide-search",size:"sm",class:"min-w-48 max-sm:flex-1","aria-label":"Search test cases"},null,8,["modelValue"]),f("div",oa,[(i(),$(A,null,le(B,a=>f("button",{key:a.value,type:"button",class:N(["inline-flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium transition-colors whitespace-nowrap",e(h).includes(a.value)?a.color==="green"?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":a.color==="red"?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":a.color==="orange"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":a.color==="amber"?"bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400":"bg-gray-200 text-gray-700 dark:bg-gray-700 dark:text-gray-300":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700"]),"aria-pressed":e(h).includes(a.value),onClick:Ia=>ze(a.value)},[f("span",{class:N(["size-2 rounded-full shrink-0",a.color==="green"?"bg-green-500":a.color==="red"?"bg-red-500":a.color==="orange"?"bg-orange-500":a.color==="amber"?"bg-amber-500":"bg-gray-400"])},null,2),I(" "+x(a.label),1)],10,ia)),64))]),d(_e,{modelValue:e(S),"onUpdate:modelValue":_[4]||(_[4]=a=>ae(S)?S.value=a:null),items:D,size:"sm",class:"w-36","aria-label":"Last run age filter"},null,8,["modelValue"])]),_:1}),e(we)?(i(),P(De,{key:0,text:"Loading test cases..."})):e(ve)?(i(),P(Be,{key:1,text:("errorMessage"in p?p.errorMessage:e(ft))(e(ve),"Failed to load test cases")},{action:u(()=>[d(O,{size:"sm",variant:"outline",onClick:_[5]||(_[5]=()=>e(oe)())},{default:u(()=>[..._[10]||(_[10]=[I("Retry",-1)])]),_:1})]),_:1},8,["text"])):e(E)===0?(i(),$(A,{key:2},[e(Te)?(i(),P(ye,{key:1,icon:"i-lucide-search-x",text:"No test cases match your filters."},{default:u(()=>[f("div",ra,[e(S)!==0?(i(),P(O,{key:0,size:"sm",variant:"outline",onClick:_[6]||(_[6]=a=>S.value=0)},{default:u(()=>[..._[11]||(_[11]=[I("Show all time",-1)])]),_:1})):w("",!0),e(ie)?(i(),P(O,{key:1,size:"sm",variant:"ghost",onClick:_[7]||(_[7]=()=>{y.value="",g.value="",h.value=[]})},{default:u(()=>[..._[12]||(_[12]=[I(" Clear filters ",-1)])]),_:1})):w("",!0)])]),_:1})):(i(),P(ye,{key:0,icon:"i-lucide-flask-conical",text:"No test cases yet for this project."}))],64)):(i(),$("div",{key:3,class:N([{"opacity-60 pointer-events-none":e(ne)==="pending"},"transition-opacity"])},[e(b)?(i(),$(A,{key:0},[e(X).length<e(E)?(i(),P(Ee,{key:0,color:"warning",variant:"subtle",icon:"i-lucide-triangle-alert",class:"mb-3",title:`Showing the first ${e(X).length} of ${e(E)} cases — narrow the search or filters to see the rest.`},null,8,["title"])):w("",!0),d(Ve,{items:e(X),"has-filter":e(ie)},null,8,["items","has-filter"])],64)):(i(),$(A,{key:1},[f("div",ua,[d(Me,{data:e(X),columns:e(Le),ui:{base:"w-full table-fixed border-separate border-spacing-0 min-w-[56rem]",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0 [&>tr]:hover:bg-gray-50 dark:[&>tr]:hover:bg-gray-900/50",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"title-cell":u(({row:a})=>[f("div",da,[d(be,{to:`/test-cases/${a.original.id}`,class:"text-sm font-medium text-primary hover:underline truncate block",title:a.original.title},{default:u(()=>[I(x(a.original.title),1)]),_:2},1032,["to","title"]),f("div",ca,[d(e(Y),{name:"i-lucide-file-code",class:"size-3 shrink-0"}),d(he,{"file-path":a.original.filePath,"project-key":r.projectId,"project-name":r.projectName,class:"min-w-0"},null,8,["file-path","project-key","project-name"])])])]),"status-cell":u(({row:a})=>[d(xe,{color:("testCaseCategoryColor"in p?p.testCaseCategoryColor:e(pe))(a.original.status),variant:"subtle",size:"sm",class:"capitalize"},{default:u(()=>[I(x(("formatStatusLabel"in p?p.formatStatusLabel:e(ce))(a.original.status)),1)]),_:2},1032,["color"])]),"totalRuns-cell":u(({row:a})=>[f("span",pa,x(a.original.totalRuns),1)]),"passRate-cell":u(({row:a})=>[d(ke,{rate:a.original.passRate},null,8,["rate"])]),"results-cell":u(({row:a})=>[d(Ce,{passed:a.original.passedRuns,failed:a.original.failedRuns,skipped:a.original.skippedRuns,flaky:a.original.flakyRuns,"did-not-run":a.original.didNotRunRuns,total:a.original.totalRuns},null,8,["passed","failed","skipped","flaky","did-not-run","total"])]),"avgDuration-cell":u(({row:a})=>[a.original.avgDuration!=null?(i(),$("span",fa,x(("formatDuration"in p?p.formatDuration:e(fe))(a.original.avgDuration)),1)):(i(),$("span",ma,"—"))]),"lastRun-cell":u(({row:a})=>[f("span",{class:"text-sm text-muted",title:("prettyDateFormat"in p?p.prettyDateFormat:e(me))(a.original.lastRun)},x(a.original.lastRun!=null?("formatRelativeTime"in p?p.formatRelativeTime:e(ge))(a.original.lastRun):"—"),9,ga)]),"actions-cell":u(({row:a})=>[f("div",va,[d(O,{to:`/test-cases/${a.original.id}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:u(()=>[..._[13]||(_[13]=[I(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data","columns"])]),f("div",_a,[(i(!0),$(A,null,le(e(X),a=>(i(),$("div",{key:a.id,class:"rounded-lg border border-default p-3 space-y-2"},[f("div",ya,[d(be,{to:`/test-cases/${a.id}`,class:"text-sm font-medium text-primary hover:underline min-w-0 truncate",title:a.title},{default:u(()=>[I(x(a.title),1)]),_:2},1032,["to","title"]),d(xe,{color:("testCaseCategoryColor"in p?p.testCaseCategoryColor:e(pe))(a.status),variant:"subtle",size:"sm",class:"capitalize shrink-0"},{default:u(()=>[I(x(("formatStatusLabel"in p?p.formatStatusLabel:e(ce))(a.status)),1)]),_:2},1032,["color"])]),f("div",ba,[d(e(Y),{name:"i-lucide-file-code",class:"size-3 shrink-0"}),d(he,{"file-path":a.filePath,"project-key":r.projectId,"project-name":r.projectName,class:"min-w-0"},null,8,["file-path","project-key","project-name"])]),d(Ce,{passed:a.passedRuns,failed:a.failedRuns,skipped:a.skippedRuns,flaky:a.flakyRuns,"did-not-run":a.didNotRunRuns,total:a.totalRuns},null,8,["passed","failed","skipped","flaky","did-not-run","total"]),f("div",ha,[d(ke,{rate:a.passRate},null,8,["rate"]),f("span",xa,x(a.totalRuns)+" runs",1),a.avgDuration!=null?(i(),$("span",ka,x(("formatDuration"in p?p.formatDuration:e(fe))(a.avgDuration)),1)):w("",!0),f("span",{class:"text-xs text-muted",title:("prettyDateFormat"in p?p.prettyDateFormat:e(me))(a.lastRun)},x(a.lastRun!=null?("formatRelativeTime"in p?p.formatRelativeTime:e(ge))(a.lastRun):"—"),9,Ca)])]))),128))]),f("div",Pa,[f("div",Ra,[f("span",$a,"Showing "+x(e(Ne))+"–"+x(e(je))+" of "+x(e(E)),1),f("div",qa,[_[14]||(_[14]=f("span",{class:"text-sm text-muted"},"Rows per page",-1)),d(_e,{modelValue:e(R),"onUpdate:modelValue":_[8]||(_[8]=a=>ae(R)?R.value=a:null),items:L,size:"sm",class:"w-28","aria-label":"Rows per page"},null,8,["modelValue"])])]),e(E)>e(R)?(i(),P(Ae,{key:0,page:e(n),"onUpdate:page":_[9]||(_[9]=a=>ae(n)?n.value=a:null),total:e(E),"items-per-page":e(R),size:"sm"},null,8,["page","total","items-per-page"])):w("",!0)])],64))],2))]),_:1},8,["count"])}}}),Ka=Object.assign(za,{__name:"ProjectTestCasesTable"});export{Ka as _};
@@ -1 +1 @@
1
- import{d as S,o,f as i,g as f,T as x,U as h,k as a,V as k,h as c,Z as C,$ as B,a0 as w,a1 as P,a3 as O,a4 as V,a5 as $,b2 as N,c as y,j as z,i as _,p as d,t as R,v as T,aG as j,q as b,F as g,a6 as A}from"./B8fs6GU9.js";var F=S({__name:"BaseSeparator",props:{orientation:{type:String,required:!1,default:"horizontal"},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(n){const s=n,l=["horizontal","vertical"];function e(r){return l.includes(r)}const u=c(()=>e(s.orientation)?s.orientation:"horizontal"),v=c(()=>u.value==="vertical"?s.orientation:void 0),m=c(()=>s.decorative?{role:"none"}:{"aria-orientation":v.value,role:"separator"});return(r,p)=>(o(),i(a(k),h({as:r.as,"as-child":r.asChild,"data-orientation":u.value},m.value),{default:f(()=>[x(r.$slots,"default")]),_:3},16,["as","as-child","data-orientation"]))}}),D=F,E=S({__name:"Separator",props:{orientation:{type:String,required:!1,default:"horizontal"},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(n){const s=n;return(l,e)=>(o(),i(D,C(B(s)),{default:f(()=>[x(l.$slots,"default")]),_:3},16))}}),I=E;const U={slots:{root:"flex items-center align-center text-center",border:"",container:"font-medium text-default flex",icon:"shrink-0 size-5",avatar:"shrink-0",avatarSize:"2xs",label:"text-sm"},variants:{color:{primary:{border:"border-primary"},secondary:{border:"border-secondary"},success:{border:"border-success"},info:{border:"border-info"},warning:{border:"border-warning"},error:{border:"border-error"},neutral:{border:"border-default"}},orientation:{horizontal:{root:"w-full flex-row",border:"w-full",container:"whitespace-nowrap"},vertical:{root:"h-full flex-col",border:"h-full",container:""}},size:{xs:"",sm:"",md:"",lg:"",xl:""},position:{start:"",center:"",end:""},type:{solid:{border:"border-solid"},dashed:{border:"border-dashed"},dotted:{border:"border-dotted"}}},compoundVariants:[{orientation:"horizontal",position:"start",class:{container:"me-3"}},{orientation:"horizontal",position:"center",class:{container:"mx-3"}},{orientation:"horizontal",position:"end",class:{container:"ms-3"}},{orientation:"vertical",position:"start",class:{container:"mb-2"}},{orientation:"vertical",position:"center",class:{container:"my-2"}},{orientation:"vertical",position:"end",class:{container:"mt-2"}},{orientation:"horizontal",size:"xs",class:{border:"border-t"}},{orientation:"horizontal",size:"sm",class:{border:"border-t-[2px]"}},{orientation:"horizontal",size:"md",class:{border:"border-t-[3px]"}},{orientation:"horizontal",size:"lg",class:{border:"border-t-[4px]"}},{orientation:"horizontal",size:"xl",class:{border:"border-t-[5px]"}},{orientation:"vertical",size:"xs",class:{border:"border-s"}},{orientation:"vertical",size:"sm",class:{border:"border-s-[2px]"}},{orientation:"vertical",size:"md",class:{border:"border-s-[3px]"}},{orientation:"vertical",size:"lg",class:{border:"border-s-[4px]"}},{orientation:"vertical",size:"xl",class:{border:"border-s-[5px]"}}],defaultVariants:{color:"neutral",size:"xs",type:"solid"}},H=Object.assign({inheritAttrs:!1},{__name:"USeparator",props:{as:{type:null,required:!1},label:{type:String,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},color:{type:null,required:!1},size:{type:null,required:!1},type:{type:null,required:!1},orientation:{type:null,required:!1,default:"horizontal"},position:{type:null,required:!1,default:"center"},class:{type:null,required:!1},ui:{type:null,required:!1},decorative:{type:Boolean,required:!1}},setup(n){const s=n,l=w(),e=P("separator",s),u=O(),v=V($(e,"as","decorative","orientation")),[m,r]=N(),p=c(()=>!!(e.label||e.icon||e.avatar||l.default)),t=c(()=>A({extend:U,...u.ui?.separator||{}})({color:e.color,orientation:e.orientation,size:e.size,position:e.position,type:e.type}));return(q,G)=>(o(),y(g,null,[z(a(m),null,{default:f(()=>[_("div",{"data-slot":"container",class:d(t.value.container({class:a(e).ui?.container}))},[x(q.$slots,"default",{ui:t.value},()=>[a(e).label?(o(),y("span",{key:0,"data-slot":"label",class:d(t.value.label({class:a(e).ui?.label}))},R(a(e).label),3)):a(e).icon?(o(),i(T,{key:1,name:a(e).icon,"data-slot":"icon",class:d(t.value.icon({class:a(e).ui?.icon}))},null,8,["name","class"])):a(e).avatar?(o(),i(j,h({key:2,size:a(e).ui?.avatarSize||t.value.avatarSize()},a(e).avatar,{"data-slot":"avatar",class:t.value.avatar({class:a(e).ui?.avatar})}),null,16,["size","class"])):b("",!0)])],2)]),_:3}),z(a(I),h({"data-slot":"root"},{...a(v),...q.$attrs},{class:t.value.root({class:[a(e).ui?.root,a(e).class]})}),{default:f(()=>[p.value&&a(e).position==="start"?(o(),i(a(r),{key:0})):b("",!0),_("div",{"data-slot":"border",class:d(t.value.border({class:a(e).ui?.border}))},null,2),p.value&&a(e).position==="center"?(o(),y(g,{key:1},[z(a(r)),_("div",{"data-slot":"border",class:d(t.value.border({class:a(e).ui?.border}))},null,2)],64)):b("",!0),p.value&&a(e).position==="end"?(o(),i(a(r),{key:2})):b("",!0)]),_:1},16,["class"])],64))}});export{H as _};
1
+ import{d as S,o,f as i,g as f,T as x,U as h,k as a,V as k,h as c,Z as C,$ as B,a0 as w,a1 as P,a3 as O,a4 as V,a5 as $,b2 as N,c as y,j as z,i as _,p as d,t as R,v as T,aG as j,q as b,F as g,a6 as A}from"./BPKwYP2Q.js";var F=S({__name:"BaseSeparator",props:{orientation:{type:String,required:!1,default:"horizontal"},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(n){const s=n,l=["horizontal","vertical"];function e(r){return l.includes(r)}const u=c(()=>e(s.orientation)?s.orientation:"horizontal"),v=c(()=>u.value==="vertical"?s.orientation:void 0),m=c(()=>s.decorative?{role:"none"}:{"aria-orientation":v.value,role:"separator"});return(r,p)=>(o(),i(a(k),h({as:r.as,"as-child":r.asChild,"data-orientation":u.value},m.value),{default:f(()=>[x(r.$slots,"default")]),_:3},16,["as","as-child","data-orientation"]))}}),D=F,E=S({__name:"Separator",props:{orientation:{type:String,required:!1,default:"horizontal"},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(n){const s=n;return(l,e)=>(o(),i(D,C(B(s)),{default:f(()=>[x(l.$slots,"default")]),_:3},16))}}),I=E;const U={slots:{root:"flex items-center align-center text-center",border:"",container:"font-medium text-default flex",icon:"shrink-0 size-5",avatar:"shrink-0",avatarSize:"2xs",label:"text-sm"},variants:{color:{primary:{border:"border-primary"},secondary:{border:"border-secondary"},success:{border:"border-success"},info:{border:"border-info"},warning:{border:"border-warning"},error:{border:"border-error"},neutral:{border:"border-default"}},orientation:{horizontal:{root:"w-full flex-row",border:"w-full",container:"whitespace-nowrap"},vertical:{root:"h-full flex-col",border:"h-full",container:""}},size:{xs:"",sm:"",md:"",lg:"",xl:""},position:{start:"",center:"",end:""},type:{solid:{border:"border-solid"},dashed:{border:"border-dashed"},dotted:{border:"border-dotted"}}},compoundVariants:[{orientation:"horizontal",position:"start",class:{container:"me-3"}},{orientation:"horizontal",position:"center",class:{container:"mx-3"}},{orientation:"horizontal",position:"end",class:{container:"ms-3"}},{orientation:"vertical",position:"start",class:{container:"mb-2"}},{orientation:"vertical",position:"center",class:{container:"my-2"}},{orientation:"vertical",position:"end",class:{container:"mt-2"}},{orientation:"horizontal",size:"xs",class:{border:"border-t"}},{orientation:"horizontal",size:"sm",class:{border:"border-t-[2px]"}},{orientation:"horizontal",size:"md",class:{border:"border-t-[3px]"}},{orientation:"horizontal",size:"lg",class:{border:"border-t-[4px]"}},{orientation:"horizontal",size:"xl",class:{border:"border-t-[5px]"}},{orientation:"vertical",size:"xs",class:{border:"border-s"}},{orientation:"vertical",size:"sm",class:{border:"border-s-[2px]"}},{orientation:"vertical",size:"md",class:{border:"border-s-[3px]"}},{orientation:"vertical",size:"lg",class:{border:"border-s-[4px]"}},{orientation:"vertical",size:"xl",class:{border:"border-s-[5px]"}}],defaultVariants:{color:"neutral",size:"xs",type:"solid"}},H=Object.assign({inheritAttrs:!1},{__name:"USeparator",props:{as:{type:null,required:!1},label:{type:String,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},color:{type:null,required:!1},size:{type:null,required:!1},type:{type:null,required:!1},orientation:{type:null,required:!1,default:"horizontal"},position:{type:null,required:!1,default:"center"},class:{type:null,required:!1},ui:{type:null,required:!1},decorative:{type:Boolean,required:!1}},setup(n){const s=n,l=w(),e=P("separator",s),u=O(),v=V($(e,"as","decorative","orientation")),[m,r]=N(),p=c(()=>!!(e.label||e.icon||e.avatar||l.default)),t=c(()=>A({extend:U,...u.ui?.separator||{}})({color:e.color,orientation:e.orientation,size:e.size,position:e.position,type:e.type}));return(q,G)=>(o(),y(g,null,[z(a(m),null,{default:f(()=>[_("div",{"data-slot":"container",class:d(t.value.container({class:a(e).ui?.container}))},[x(q.$slots,"default",{ui:t.value},()=>[a(e).label?(o(),y("span",{key:0,"data-slot":"label",class:d(t.value.label({class:a(e).ui?.label}))},R(a(e).label),3)):a(e).icon?(o(),i(T,{key:1,name:a(e).icon,"data-slot":"icon",class:d(t.value.icon({class:a(e).ui?.icon}))},null,8,["name","class"])):a(e).avatar?(o(),i(j,h({key:2,size:a(e).ui?.avatarSize||t.value.avatarSize()},a(e).avatar,{"data-slot":"avatar",class:t.value.avatar({class:a(e).ui?.avatar})}),null,16,["size","class"])):b("",!0)])],2)]),_:3}),z(a(I),h({"data-slot":"root"},{...a(v),...q.$attrs},{class:t.value.root({class:[a(e).ui?.root,a(e).class]})}),{default:f(()=>[p.value&&a(e).position==="start"?(o(),i(a(r),{key:0})):b("",!0),_("div",{"data-slot":"border",class:d(t.value.border({class:a(e).ui?.border}))},null,2),p.value&&a(e).position==="center"?(o(),y(g,{key:1},[z(a(r)),_("div",{"data-slot":"border",class:d(t.value.border({class:a(e).ui?.border}))},null,2)],64)):b("",!0),p.value&&a(e).position==="end"?(o(),i(a(r),{key:2})):b("",!0)]),_:1},16,["class"])],64))}});export{H as _};
@@ -1 +1 @@
1
- import{d as _,f as i,aa as h,g as l,o as s,T as o,i as a,v as k,p as g,q as n,m as c,t as m,c as r,F as p}from"./B8fs6GU9.js";import{_ as y}from"./wCQds5_f.js";import{_ as C}from"./B32ySRXg.js";const $={class:"flex items-start justify-between gap-2"},b={class:"flex items-center gap-2 min-w-0"},x={class:"min-w-0"},v={class:"text-lg font-medium inline-flex items-center gap-1"},w={key:0,class:"text-sm text-gray-500 mt-0.5"},S={key:0,class:"flex items-center gap-1 shrink-0"},B=_({__name:"SectionCard",props:{title:{},icon:{},subtitle:{},count:{},iconClass:{default:"text-primary"},help:{}},setup(t){return(e,N)=>{const u=k,d=y,f=C;return s(),i(f,null,h({header:l(()=>[a("div",$,[a("div",b,[t.icon?(s(),i(u,{key:0,name:t.icon,class:g(["w-5 h-5 shrink-0",t.iconClass])},null,8,["name","class"])):n("",!0),a("div",x,[a("h3",v,[c(m(t.title),1),t.count!=null?(s(),r(p,{key:0},[c(" ("+m(t.count)+")",1)],64)):n("",!0),t.help?(s(),i(d,{key:1,topic:t.help},null,8,["topic"])):n("",!0)]),t.subtitle||e.$slots.subtitle?(s(),r("p",w,[o(e.$slots,"subtitle",{},()=>[c(m(t.subtitle),1)])])):n("",!0)])]),e.$slots.actions?(s(),r("div",S,[o(e.$slots,"actions")])):n("",!0)])]),default:l(()=>[o(e.$slots,"default")]),_:2},[e.$slots.footer?{name:"footer",fn:l(()=>[o(e.$slots,"footer")]),key:"0"}:void 0]),1024)}}}),H=Object.assign(B,{__name:"SectionCard"});export{H as _};
1
+ import{d as _,f as i,aa as h,g as l,o as s,T as o,i as a,v as k,p as g,q as n,m as c,t as m,c as r,F as p}from"./BPKwYP2Q.js";import{_ as y}from"./CQeMb57w.js";import{_ as C}from"./B7yG1G_l.js";const $={class:"flex items-start justify-between gap-2"},b={class:"flex items-center gap-2 min-w-0"},x={class:"min-w-0"},v={class:"text-lg font-medium inline-flex items-center gap-1"},w={key:0,class:"text-sm text-gray-500 mt-0.5"},S={key:0,class:"flex items-center gap-1 shrink-0"},B=_({__name:"SectionCard",props:{title:{},icon:{},subtitle:{},count:{},iconClass:{default:"text-primary"},help:{}},setup(t){return(e,N)=>{const u=k,d=y,f=C;return s(),i(f,null,h({header:l(()=>[a("div",$,[a("div",b,[t.icon?(s(),i(u,{key:0,name:t.icon,class:g(["w-5 h-5 shrink-0",t.iconClass])},null,8,["name","class"])):n("",!0),a("div",x,[a("h3",v,[c(m(t.title),1),t.count!=null?(s(),r(p,{key:0},[c(" ("+m(t.count)+")",1)],64)):n("",!0),t.help?(s(),i(d,{key:1,topic:t.help},null,8,["topic"])):n("",!0)]),t.subtitle||e.$slots.subtitle?(s(),r("p",w,[o(e.$slots,"subtitle",{},()=>[c(m(t.subtitle),1)])])):n("",!0)])]),e.$slots.actions?(s(),r("div",S,[o(e.$slots,"actions")])):n("",!0)])]),default:l(()=>[o(e.$slots,"default")]),_:2},[e.$slots.footer?{name:"footer",fn:l(()=>[o(e.$slots,"footer")]),key:"0"}:void 0]),1024)}}}),H=Object.assign(B,{__name:"SectionCard"});export{H as _};
@@ -1,4 +1,4 @@
1
- import{b as se,B as V,C as be,al as ke,r as h,h as Q,am as Ce,J as qe,d as re,o as p,f as H,g as D,j as g,_ as le,m as k,i as l,q as T,l as _e,k as e,E as We,c as $,v as we,t as j,F as K,y as ie,p as Z,x as Ve,G as Je}from"./B8fs6GU9.js";import{_ as Ye}from"./wCQds5_f.js";import{_ as Ge}from"./OG2n3p77.js";import{c as Xe,m as Ke,i as Qe,e as Ze,h as et,f as tt,g as st,j as nt}from"./BfshMo9k.js";import{u as ot}from"./DWzdeQ3Z.js";import{_ as at}from"./CNzoIhwN.js";import{f as $e,v as it,k as rt}from"./CvCF77E-.js";import{_ as lt}from"./n7Htv9PJ.js";import{u as ct}from"./too3WhRB.js";const ut=globalThis.setInterval,ce=Symbol("cluster-diagnosis");function dt(v){const a=se(),u=h(""),d=h(""),x=h([]),y=h([]),I=Q(()=>!!d.value),O=h(null),R=h([]),U=h(0),P=h(0),M=h(null),f=h(null),r=h(!1),t=h(null),o=h(!1);let s=null,i=null,m=!0;function S(){const c={};return u.value.trim()&&(c.baseCommit=u.value.trim()),x.value.length&&(c.selectedCommitShas=x.value),c}async function C(){r.value=!0;try{const c=await $fetch(`/api/failure-clusters/${v}/context`,{query:{...S(),format:"json"}});O.value=c.text,R.value=c.sections,U.value=c.tokenEstimate,P.value=c.imageTokenEstimate??0,M.value=c.coverage,f.value=c.scmChanges??null}catch{O.value="(failed to load context)",R.value=[],U.value=0,P.value=0,M.value=null,f.value=null}finally{r.value=!1}}async function A(c){try{await $fetch(`/api/failure-clusters/${v}/base-commit`,{method:"PATCH",body:{commit:c||null}}),d.value=c}catch{}}function z(){s&&(clearInterval(s),s=null)}function w(){if(s)return;let c=0;s=ut(async()=>{c+=3e3,await W(),(!t.value||t.value.status!=="running"||c>=12e4)&&z()},3e3)}async function W(){try{const c=await $fetch(`/api/failure-clusters/${v}/diagnosis`);t.value=c.diagnosis}catch{}}async function J(c={}){o.value=!0;try{const E=c.force?`/api/failure-clusters/${v}/diagnose?force=true`:`/api/failure-clusters/${v}/diagnose`,F={};c.additionalContext&&(F.additionalContext=c.additionalContext),u.value.trim()&&(F.baseCommit=u.value.trim()),x.value.length&&(F.selectedCommitShas=x.value),c.images?.length&&(F.images=c.images),t.value=await $fetch(E,{method:"POST",body:Object.keys(F).length?F:void 0}),t.value?.status==="running"&&w()}catch(E){E?.statusCode===409?w():a.add({title:"Diagnosis failed",description:String(E?.message??E),color:"error"})}finally{o.value=!1}}return V(u,c=>{m||(i&&clearTimeout(i),i=setTimeout(()=>C(),900),c!==d.value&&A(c))}),V(x,()=>{m||C()},{deep:!0}),V(t,c=>{c?.status==="running"?w():z()}),be(async()=>{try{const c=await $fetch(`/api/failure-clusters/${v}/diagnosis`);t.value=c.diagnosis,c.manualBaseCommit&&(d.value=c.manualBaseCommit,u.value=c.manualBaseCommit);const E=c.diagnosis?.details;E?.selectedCommitShas&&Array.isArray(E.selectedCommitShas)&&(x.value=E.selectedCommitShas),E?.autoSelectedCommits&&Array.isArray(E.autoSelectedCommits)&&(y.value=E.autoSelectedCommits)}catch{}m=!1,C(),t.value?.status==="running"&&w()}),ke(()=>{z(),i&&clearTimeout(i)}),{clusterId:v,baseCommit:u,savedBaseCommit:d,selectedCommitShas:x,autoSelectedCommits:y,baseCommitIsPinned:I,contextText:O,contextSections:R,tokenEstimate:U,imageTokenEstimate:P,coverage:M,scmChanges:f,contextLoading:r,refreshContext:C,diagnosis:t,posting:o,runDiagnosis:J}}function ft(v){const a=dt(v);return qe(ce,a),a}function Os(){const v=Ce(ce);if(!v)throw new Error("useClusterDiagnosis() must be used under a page that called provideClusterDiagnosis()");return v}function pt(v){const a=Ce(ce,null);if(a)return a;if(v==null)throw new Error("useOrProvideClusterDiagnosis() requires a clusterId when used outside provideClusterDiagnosis()");return ft(v)}const mt={class:"w-56 p-1 space-y-0.5"},gt=re({__name:"DiagnosisExportMenu",props:{contextText:{},diagnosis:{},screenshots:{},clusterSignature:{},clusterUrl:{},clusterOccurrences:{},clusterErrorType:{},sampleError:{}},setup(v){const a=v,{copy:u}=ot(),{copyRich:d}=Xe(),x=h(!1);function y(){const t=[];return a.clusterErrorType&&t.push(a.clusterErrorType),a.clusterOccurrences&&t.push(`${a.clusterOccurrences} occurrence${a.clusterOccurrences===1?"":"s"}`),t.join(" · ")}function I(){const t=a.clusterSignature??"Failure cluster",o=y(),s=a.diagnosis?.status==="completed"&&a.diagnosis.summary?`AI diagnosis (${a.diagnosis.category??"unknown"}, ${a.diagnosis.confidence??"?"}): ${a.diagnosis.summary}`:null,i=[`🔍 Investigation: ${t}`,o||null,"",...a.sampleError?["Error:",Ke(a.sampleError),""]:[],...s?[s,""]:[],a.clusterUrl?`Cluster: ${a.clusterUrl}`:null].filter(C=>C!==null).join(`
1
+ import{b as se,B as V,C as be,al as ke,r as h,h as Q,am as Ce,J as qe,d as re,o as p,f as H,g as D,j as g,_ as le,m as k,i as l,q as T,l as _e,k as e,E as We,c as $,v as we,t as j,F as K,y as ie,p as Z,x as Ve,G as Je}from"./BPKwYP2Q.js";import{_ as Ye}from"./CQeMb57w.js";import{_ as Ge}from"./DgYM3eyi.js";import{c as Xe,m as Ke,i as Qe,e as Ze,h as et,f as tt,g as st,j as nt}from"./Dz55UR7w.js";import{u as ot}from"./DuMv-ugy.js";import{_ as at}from"./ABGJk0pu.js";import{f as $e,w as it,k as rt}from"./k-z_VVTK.js";import{_ as lt}from"./Br2K9yi_.js";import{u as ct}from"./B43OGXzV.js";const ut=globalThis.setInterval,ce=Symbol("cluster-diagnosis");function dt(v){const a=se(),u=h(""),d=h(""),x=h([]),y=h([]),I=Q(()=>!!d.value),O=h(null),R=h([]),U=h(0),P=h(0),M=h(null),f=h(null),r=h(!1),t=h(null),o=h(!1);let s=null,i=null,m=!0;function S(){const c={};return u.value.trim()&&(c.baseCommit=u.value.trim()),x.value.length&&(c.selectedCommitShas=x.value),c}async function C(){r.value=!0;try{const c=await $fetch(`/api/failure-clusters/${v}/context`,{query:{...S(),format:"json"}});O.value=c.text,R.value=c.sections,U.value=c.tokenEstimate,P.value=c.imageTokenEstimate??0,M.value=c.coverage,f.value=c.scmChanges??null}catch{O.value="(failed to load context)",R.value=[],U.value=0,P.value=0,M.value=null,f.value=null}finally{r.value=!1}}async function A(c){try{await $fetch(`/api/failure-clusters/${v}/base-commit`,{method:"PATCH",body:{commit:c||null}}),d.value=c}catch{}}function z(){s&&(clearInterval(s),s=null)}function w(){if(s)return;let c=0;s=ut(async()=>{c+=3e3,await W(),(!t.value||t.value.status!=="running"||c>=12e4)&&z()},3e3)}async function W(){try{const c=await $fetch(`/api/failure-clusters/${v}/diagnosis`);t.value=c.diagnosis}catch{}}async function J(c={}){o.value=!0;try{const E=c.force?`/api/failure-clusters/${v}/diagnose?force=true`:`/api/failure-clusters/${v}/diagnose`,F={};c.additionalContext&&(F.additionalContext=c.additionalContext),u.value.trim()&&(F.baseCommit=u.value.trim()),x.value.length&&(F.selectedCommitShas=x.value),c.images?.length&&(F.images=c.images),t.value=await $fetch(E,{method:"POST",body:Object.keys(F).length?F:void 0}),t.value?.status==="running"&&w()}catch(E){E?.statusCode===409?w():a.add({title:"Diagnosis failed",description:String(E?.message??E),color:"error"})}finally{o.value=!1}}return V(u,c=>{m||(i&&clearTimeout(i),i=setTimeout(()=>C(),900),c!==d.value&&A(c))}),V(x,()=>{m||C()},{deep:!0}),V(t,c=>{c?.status==="running"?w():z()}),be(async()=>{try{const c=await $fetch(`/api/failure-clusters/${v}/diagnosis`);t.value=c.diagnosis,c.manualBaseCommit&&(d.value=c.manualBaseCommit,u.value=c.manualBaseCommit);const E=c.diagnosis?.details;E?.selectedCommitShas&&Array.isArray(E.selectedCommitShas)&&(x.value=E.selectedCommitShas),E?.autoSelectedCommits&&Array.isArray(E.autoSelectedCommits)&&(y.value=E.autoSelectedCommits)}catch{}m=!1,C(),t.value?.status==="running"&&w()}),ke(()=>{z(),i&&clearTimeout(i)}),{clusterId:v,baseCommit:u,savedBaseCommit:d,selectedCommitShas:x,autoSelectedCommits:y,baseCommitIsPinned:I,contextText:O,contextSections:R,tokenEstimate:U,imageTokenEstimate:P,coverage:M,scmChanges:f,contextLoading:r,refreshContext:C,diagnosis:t,posting:o,runDiagnosis:J}}function ft(v){const a=dt(v);return qe(ce,a),a}function Os(){const v=Ce(ce);if(!v)throw new Error("useClusterDiagnosis() must be used under a page that called provideClusterDiagnosis()");return v}function pt(v){const a=Ce(ce,null);if(a)return a;if(v==null)throw new Error("useOrProvideClusterDiagnosis() requires a clusterId when used outside provideClusterDiagnosis()");return ft(v)}const mt={class:"w-56 p-1 space-y-0.5"},gt=re({__name:"DiagnosisExportMenu",props:{contextText:{},diagnosis:{},screenshots:{},clusterSignature:{},clusterUrl:{},clusterOccurrences:{},clusterErrorType:{},sampleError:{}},setup(v){const a=v,{copy:u}=ot(),{copyRich:d}=Xe(),x=h(!1);function y(){const t=[];return a.clusterErrorType&&t.push(a.clusterErrorType),a.clusterOccurrences&&t.push(`${a.clusterOccurrences} occurrence${a.clusterOccurrences===1?"":"s"}`),t.join(" · ")}function I(){const t=a.clusterSignature??"Failure cluster",o=y(),s=a.diagnosis?.status==="completed"&&a.diagnosis.summary?`AI diagnosis (${a.diagnosis.category??"unknown"}, ${a.diagnosis.confidence??"?"}): ${a.diagnosis.summary}`:null,i=[`🔍 Investigation: ${t}`,o||null,"",...a.sampleError?["Error:",Ke(a.sampleError),""]:[],...s?[s,""]:[],a.clusterUrl?`Cluster: ${a.clusterUrl}`:null].filter(C=>C!==null).join(`
2
2
  `),m=C=>C.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),S=[`<p><strong>🔍 Investigation: <code>${m(t)}</code></strong></p>`,o?`<p><em>${m(o)}</em></p>`:"",a.sampleError?`<p><strong>Error:</strong></p><pre>${m(a.sampleError)}</pre>`:"",s?`<p><strong>AI diagnosis</strong> (${m(a.diagnosis?.category??"")}, ${m(a.diagnosis?.confidence??"")}):<br>${m(a.diagnosis.summary)}</p>`:"",a.clusterUrl?`<p>🔗 <a href="${a.clusterUrl}">View cluster</a></p>`:""].join("");d(i,S,{toast:"Investigation summary copied"}),x.value=!1}function O(){if(!a.contextText)return;const o=(a.screenshots?.length?`## Screenshots
3
3
 
4
4
  ${a.screenshots.map(s=>`![${s.name}](data:${s.mediaType};base64,${s.data})`).join(`
@@ -1 +1 @@
1
- import{_ as W}from"./B32-7cBF.js";import{_ as X}from"./BY0AkhJh.js";import{_ as Y}from"./nUsJV5qo.js";import{_ as Z,a as tt}from"./C9jjVEQU.js";import{_ as et}from"./2PU-adwy.js";import{d as st,u as at,w as C,B as ot,e as nt,f as m,g as a,h as D,o as r,i,t as l,k as t,q as d,c as u,j as o,s as rt,m as _,x as it,_ as lt,F as T,y as w,p as ct,v as ut,r as dt,n as _t}from"./B8fs6GU9.js";import{_ as mt,a as pt}from"./Cgr8IKY4.js";import{_ as ft}from"./wCQds5_f.js";import{_ as gt}from"./DYDGGqZ3.js";import{_ as ht}from"./CokbKVE6.js";import{_ as yt}from"./DFw8I2FL.js";import{_ as xt}from"./D4nLD93c.js";import{_ as vt}from"./DZLrAp2i.js";import{_ as kt}from"./BBJ9Pu3M.js";import{_ as bt}from"./BpepjHwc.js";import{h as S,f as $t,i as Rt}from"./CvCF77E-.js";import{u as I}from"./DAeYEeCC.js";import"./BtJkQ3to.js";import"./OG2n3p77.js";import"./lRMjXqiA.js";import"./DWzdeQ3Z.js";import"./3SnTawZW.js";import"./ETOCcsVw.js";import"./DQpa8F03.js";import"./D7W_4Sqc.js";import"./BW1UOxWn.js";import"./4fB15L_7.js";import"./B32ySRXg.js";const jt={class:"flex flex-col gap-4 p-4"},Ct={class:"flex items-start gap-4 flex-wrap"},Dt={class:"flex-1 min-w-0"},Tt={class:"text-xl font-bold truncate"},wt={key:1,class:"flex items-center gap-2 mt-2"},St={key:0,class:"grid grid-cols-1 lg:grid-cols-2 gap-4"},It={class:"flex items-center gap-1 flex-wrap max-h-[200px] overflow-y-auto py-1"},zt={key:0,class:"text-sm text-gray-400"},Lt={key:1,class:"text-center py-6 text-gray-400"},Nt={class:"text-xs whitespace-nowrap"},Ut={class:"text-gray-500"},Pt={class:"text-gray-400 ml-1"},Et={key:0},Bt={key:1,class:"text-gray-400"},Ft=["title"],At={class:"flex justify-end"},Kt={class:"space-y-2"},Vt={class:"flex items-center gap-2 min-w-0"},Ht={class:"text-sm truncate"},Mt={key:0,class:"text-xs text-gray-400 shrink-0"},be=st({__name:"[id]",async setup(Ot){let p,y;const h=at().params.id,{data:s,refresh:z}=([p,y]=C(()=>I(`/api/test-cases/${h}`,"$lGxJwg8IQ6")),p=await p,y(),p),{data:f}=([p,y]=C(()=>I(`/api/test-cases/${h}/history`,"$6RWgXFRP_s")),p=await p,y(),p),R=dt([]);ot(()=>s.value?.project?.id,async n=>{if(n)try{R.value=(await $fetch(`/api/projects/${n}/markers`)).markers??[]}catch{}},{immediate:!0});function L(){const n=s.value?.project?.id;n&&_t(`/projects/${n}?tab=timeline`)}nt(D(()=>({title:`${s.value?.title||`Test case #${h}`} — Piwi Dashboard`})));const x=D(()=>{const n=s.value;return!n||!n.totalRuns?null:Math.round((n.passedRuns+n.skippedRuns)/n.totalRuns*100)}),N=n=>n==="open"?"error":n==="resolved"?"success":"neutral",U=[{accessorKey:"startTime",header:"Date"},{accessorKey:"status",header:"Status"},{accessorKey:"duration",header:"Duration"},{accessorKey:"retries",header:"Retries"},{accessorKey:"runId",header:"Run"},{accessorKey:"error",header:"Error"},{id:"actions",header:"Actions"}];return(n,c)=>{const P=W,E=X,B=Y,F=tt,A=et,v=rt,k=lt,b=it,g=pt,K=ft,V=mt,H=gt,j=ht,M=yt,O=ut,G=xt,q=vt,$=kt,J=bt,Q=Z;return r(),m(Q,{id:"test-case-evolution"},{header:a(()=>[o(F,null,{leading:a(()=>[o(P),o(E,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},...t(s)?.project?.id?[{label:t(s).project.name||"Project",to:`/projects/${t(s).project.id}`}]:[{label:"Project"}],{label:t(s)?.title||`Test case #${t(h)}`}]},null,8,["items"])]),right:a(()=>[o(B,{actions:[{label:"Refresh",icon:"i-lucide-refresh-cw",onClick:()=>t(z)()}]},null,8,["actions"])]),_:1})]),body:a(()=>[i("div",jt,[i("div",Ct,[i("div",Dt,[i("h1",Tt,l(t(s)?.title),1),t(s)?.filePath?(r(),m(A,{key:0,"file-path":t(s).filePath,"project-key":t(s)?.project?.id,"project-name":t(s)?.project?.name,class:"text-sm text-gray-500 mt-0.5"},null,8,["file-path","project-key","project-name"])):d("",!0),t(s)?.project?(r(),u("div",wt,[o(v,{color:"neutral",variant:"soft",size:"xs",class:"font-mono"},{default:a(()=>[_(l(t(s).project.name),1)]),_:1}),t(s)?.flakyRuns>0?(r(),m(v,{key:0,color:"warning",variant:"soft",size:"xs"},{default:a(()=>[_(l(t(s).flakyRuns)+" flaky run"+l(t(s).flakyRuns===1?"":"s"),1)]),_:1})):d("",!0)])):d("",!0)]),t(s)?.lastExecutionId?(r(),m(b,{key:0,to:`/test-run-cases/${t(s).lastExecutionId}`,class:"shrink-0"},{default:a(()=>[o(k,{size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:a(()=>[...c[0]||(c[0]=[_(" Latest execution ",-1)])]),_:1})]),_:1},8,["to"])):d("",!0)]),o(V,null,{default:a(()=>[o(g,{label:"Total runs",value:t(s)?.totalRuns??0},null,8,["value"]),o(g,{label:"Pass rate",value:t(x)!==null?`${t(x)}%`:"—","value-class":(t(x)??0)>=80?"text-green-600":(t(x)??0)>=50?"text-yellow-600":"text-red-600"},null,8,["value","value-class"]),o(g,{label:"Failed",value:t(s)?.failedRuns??0,"value-class":"text-red-600"},null,8,["value"]),o(g,{label:"Avg duration",value:t(s)?.avgDuration!=null?("formatDuration"in n?n.formatDuration:t(S))(t(s).avgDuration):"—"},null,8,["value"]),o(g,{label:"Flaky",value:t(s)?.flakyRuns??0,"value-class":(t(s)?.flakyRuns??0)>0?"text-purple-600":""},{label:a(()=>[c[1]||(c[1]=_(" Flaky ",-1)),o(K,{topic:"case.flaky-count"})]),_:1},8,["value","value-class"]),o(g,{label:"Last run",size:"sm",value:t(s)?.lastRunAt?("formatRelativeTime"in n?n.formatRelativeTime:t($t))(t(s).lastRunAt):"—"},null,8,["value"])]),_:1}),t(f)&&t(f).length>1?(r(),u("div",St,[o(j,{title:"Duration trend",icon:"i-lucide-trending-up",help:"case.history-chart"},{default:a(()=>[o(H,{data:t(f),height:200,markers:t(R),onMarkerClick:L},null,8,["data","markers"])]),_:1}),o(j,{title:"Status history",icon:"i-lucide-check-circle",help:"case.sparkline"},{default:a(()=>[i("div",It,[(r(!0),u(T,null,w(t(f),(e,qt)=>(r(),m(M,{key:e.id,text:`Run #${e.runId}: ${e.status} — ${new Date(e.startTime).toLocaleDateString("en-US",{month:"short",day:"numeric"})}`},{default:a(()=>[o(b,{to:`/test-run-cases/${e.id}`,class:ct([{"bg-red-500 hover:bg-red-600":e.status==="failed"||e.status==="timedOut","bg-green-500 hover:bg-green-600":e.status==="passed","bg-yellow-500 hover:bg-yellow-600":e.status==="skipped","bg-gray-400 hover:bg-gray-500":!["passed","failed","skipped","timedOut"].includes(e.status)},"size-3.5 rounded-sm inline-block transition-colors"]),title:`Run #${e.runId}: ${e.status}`},null,8,["to","class","title"])]),_:2},1032,["text"]))),128)),t(f).length===0?(r(),u("span",zt,"No history yet")):d("",!0)])]),_:1})])):t(f)&&t(f).length<=1?(r(),u("div",Lt,[o(O,{name:"i-lucide-trending-up",class:"size-6 mx-auto mb-1"}),c[2]||(c[2]=i("p",{class:"text-sm"},"Need at least 2 runs to show trends.",-1))])):d("",!0),o($,{icon:"i-lucide-list-checks",title:`Recent executions (${t(s)?.recentExecutions?.length??0})`},{default:a(()=>[t(s)?.recentExecutions?.length?(r(),m(G,{key:0,data:t(s).recentExecutions,columns:U,ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"startTime-cell":a(({row:e})=>[i("span",Nt,[i("span",Ut,l(new Date(e.original.startTime).toLocaleDateString("en-US",{month:"short",day:"numeric"})),1),i("span",Pt,l(new Date(e.original.startTime).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})),1)])]),"status-cell":a(({row:e})=>[o(v,{color:("getStatusColor"in n?n.getStatusColor:t(Rt))(e.original.status),class:"capitalize"},{default:a(()=>[_(l(e.original.status),1)]),_:2},1032,["color"])]),"duration-cell":a(({row:e})=>[e.original.duration!==null?(r(),u("span",Et,l(("formatDuration"in n?n.formatDuration:t(S))(e.original.duration)),1)):(r(),u("span",Bt,"—"))]),"retries-cell":a(({row:e})=>[_(l(e.original.retries&&e.original.retries>0?e.original.retries:""),1)]),"runId-cell":a(({row:e})=>[o(b,{to:`/test-runs/${e.original.runId}`,class:"text-primary hover:underline"},{default:a(()=>[_(l(e.original.runLabel?`${e.original.runLabel} (#${e.original.runId})`:`#${e.original.runId}`),1)]),_:2},1032,["to"])]),"error-cell":a(({row:e})=>[e.original.error?(r(),u("span",{key:0,class:"text-red-600 text-xs truncate max-w-xs block",title:e.original.error},l(e.original.error.length>80?`${e.original.error.substring(0,80)}…`:e.original.error),9,Ft)):d("",!0)]),"actions-header":a(()=>[...c[3]||(c[3]=[i("div",{class:"text-right"},"Actions",-1)])]),"actions-cell":a(({row:e})=>[i("div",At,[o(k,{to:`/test-run-cases/${e.original.id}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:a(()=>[...c[4]||(c[4]=[_(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data"])):(r(),m(q,{key:1,icon:"i-lucide-inbox",text:"No executions yet"}))]),_:1},8,["title"]),t(s)?.failureClusters?.length?(r(),m($,{key:2,icon:"i-lucide-bug",title:`Failure clusters (${t(s).failureClusters.length})`,help:"cluster.concept"},{default:a(()=>[i("div",Kt,[(r(!0),u(T,null,w(t(s).failureClusters,e=>(r(),u("div",{key:e.id,class:"flex items-center justify-between py-2 px-2 rounded hover:bg-gray-50 dark:hover:bg-gray-800"},[i("div",Vt,[o(v,{color:N(e.status),variant:"soft",size:"xs",class:"capitalize"},{default:a(()=>[_(l(e.status),1)]),_:2},1032,["color"]),i("span",Ht,l(e.signature),1),e.occurrences>1?(r(),u("span",Mt,l(e.occurrences)+" occurrences ",1)):d("",!0)]),o(k,{to:`/failure-clusters/${e.id}`,size:"xs",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:a(()=>[...c[5]||(c[5]=[_(" View ",-1)])]),_:1},8,["to"])]))),128))])]),_:1},8,["title"])):d("",!0),t(s)?.links?.length?(r(),m($,{key:3,icon:"i-lucide-link",title:"Links",help:"shared.entity-links"},{default:a(()=>[o(J,{"entity-type":"test_case","entity-id":Number(t(h)),links:t(s).links??null},null,8,["entity-id","links"])]),_:1})):d("",!0)])]),_:1})}}});export{be as default};
1
+ import{_ as W}from"./Bvfmwzgw.js";import{_ as X}from"./ze9-Ill2.js";import{_ as Y}from"./BIksQZfR.js";import{_ as Z,a as tt}from"./IFqRT_xJ.js";import{_ as et}from"./BdFEUAlx.js";import{d as st,u as at,w as C,B as ot,e as nt,f as m,g as a,h as D,o as r,i,t as l,k as t,q as d,c as u,j as o,s as rt,m as _,x as it,_ as lt,F as T,y as w,p as ct,v as ut,r as dt,n as _t}from"./BPKwYP2Q.js";import{_ as mt,a as pt}from"./B2lYFco4.js";import{_ as ft}from"./CQeMb57w.js";import{_ as gt}from"./BkDfdHFm.js";import{_ as ht}from"./2xvsvjLO.js";import{_ as yt}from"./BpceIssd.js";import{_ as xt}from"./BuZOa2M3.js";import{_ as vt}from"./xUrLy-Zn.js";import{_ as kt}from"./DhA17dqR.js";import{_ as bt}from"./BR9H8k-L.js";import{h as S,f as $t,i as Rt}from"./k-z_VVTK.js";import{u as I}from"./BIf1R_fu.js";import"./iwD5atI2.js";import"./DgYM3eyi.js";import"./Bb64FEFL.js";import"./DuMv-ugy.js";import"./r3SBLxtE.js";import"./CTdvGdc2.js";import"./oNq5pd3r.js";import"./D7W_4Sqc.js";import"./BV83yObd.js";import"./d5ZB3uxF.js";import"./B7yG1G_l.js";const jt={class:"flex flex-col gap-4 p-4"},Ct={class:"flex items-start gap-4 flex-wrap"},Dt={class:"flex-1 min-w-0"},Tt={class:"text-xl font-bold truncate"},wt={key:1,class:"flex items-center gap-2 mt-2"},St={key:0,class:"grid grid-cols-1 lg:grid-cols-2 gap-4"},It={class:"flex items-center gap-1 flex-wrap max-h-[200px] overflow-y-auto py-1"},zt={key:0,class:"text-sm text-gray-400"},Lt={key:1,class:"text-center py-6 text-gray-400"},Nt={class:"text-xs whitespace-nowrap"},Ut={class:"text-gray-500"},Pt={class:"text-gray-400 ml-1"},Et={key:0},Bt={key:1,class:"text-gray-400"},Ft=["title"],At={class:"flex justify-end"},Kt={class:"space-y-2"},Vt={class:"flex items-center gap-2 min-w-0"},Ht={class:"text-sm truncate"},Mt={key:0,class:"text-xs text-gray-400 shrink-0"},be=st({__name:"[id]",async setup(Ot){let p,y;const h=at().params.id,{data:s,refresh:z}=([p,y]=C(()=>I(`/api/test-cases/${h}`,"$lGxJwg8IQ6")),p=await p,y(),p),{data:f}=([p,y]=C(()=>I(`/api/test-cases/${h}/history`,"$6RWgXFRP_s")),p=await p,y(),p),R=dt([]);ot(()=>s.value?.project?.id,async n=>{if(n)try{R.value=(await $fetch(`/api/projects/${n}/markers`)).markers??[]}catch{}},{immediate:!0});function L(){const n=s.value?.project?.id;n&&_t(`/projects/${n}?tab=timeline`)}nt(D(()=>({title:`${s.value?.title||`Test case #${h}`} — Piwi Dashboard`})));const x=D(()=>{const n=s.value;return!n||!n.totalRuns?null:Math.round((n.passedRuns+n.skippedRuns)/n.totalRuns*100)}),N=n=>n==="open"?"error":n==="resolved"?"success":"neutral",U=[{accessorKey:"startTime",header:"Date"},{accessorKey:"status",header:"Status"},{accessorKey:"duration",header:"Duration"},{accessorKey:"retries",header:"Retries"},{accessorKey:"runId",header:"Run"},{accessorKey:"error",header:"Error"},{id:"actions",header:"Actions"}];return(n,c)=>{const P=W,E=X,B=Y,F=tt,A=et,v=rt,k=lt,b=it,g=pt,K=ft,V=mt,H=gt,j=ht,M=yt,O=ut,G=xt,q=vt,$=kt,J=bt,Q=Z;return r(),m(Q,{id:"test-case-evolution"},{header:a(()=>[o(F,null,{leading:a(()=>[o(P),o(E,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},...t(s)?.project?.id?[{label:t(s).project.name||"Project",to:`/projects/${t(s).project.id}`}]:[{label:"Project"}],{label:t(s)?.title||`Test case #${t(h)}`}]},null,8,["items"])]),right:a(()=>[o(B,{actions:[{label:"Refresh",icon:"i-lucide-refresh-cw",onClick:()=>t(z)()}]},null,8,["actions"])]),_:1})]),body:a(()=>[i("div",jt,[i("div",Ct,[i("div",Dt,[i("h1",Tt,l(t(s)?.title),1),t(s)?.filePath?(r(),m(A,{key:0,"file-path":t(s).filePath,"project-key":t(s)?.project?.id,"project-name":t(s)?.project?.name,class:"text-sm text-gray-500 mt-0.5"},null,8,["file-path","project-key","project-name"])):d("",!0),t(s)?.project?(r(),u("div",wt,[o(v,{color:"neutral",variant:"soft",size:"xs",class:"font-mono"},{default:a(()=>[_(l(t(s).project.name),1)]),_:1}),t(s)?.flakyRuns>0?(r(),m(v,{key:0,color:"warning",variant:"soft",size:"xs"},{default:a(()=>[_(l(t(s).flakyRuns)+" flaky run"+l(t(s).flakyRuns===1?"":"s"),1)]),_:1})):d("",!0)])):d("",!0)]),t(s)?.lastExecutionId?(r(),m(b,{key:0,to:`/test-run-cases/${t(s).lastExecutionId}`,class:"shrink-0"},{default:a(()=>[o(k,{size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:a(()=>[...c[0]||(c[0]=[_(" Latest execution ",-1)])]),_:1})]),_:1},8,["to"])):d("",!0)]),o(V,null,{default:a(()=>[o(g,{label:"Total runs",value:t(s)?.totalRuns??0},null,8,["value"]),o(g,{label:"Pass rate",value:t(x)!==null?`${t(x)}%`:"—","value-class":(t(x)??0)>=80?"text-green-600":(t(x)??0)>=50?"text-yellow-600":"text-red-600"},null,8,["value","value-class"]),o(g,{label:"Failed",value:t(s)?.failedRuns??0,"value-class":"text-red-600"},null,8,["value"]),o(g,{label:"Avg duration",value:t(s)?.avgDuration!=null?("formatDuration"in n?n.formatDuration:t(S))(t(s).avgDuration):"—"},null,8,["value"]),o(g,{label:"Flaky",value:t(s)?.flakyRuns??0,"value-class":(t(s)?.flakyRuns??0)>0?"text-purple-600":""},{label:a(()=>[c[1]||(c[1]=_(" Flaky ",-1)),o(K,{topic:"case.flaky-count"})]),_:1},8,["value","value-class"]),o(g,{label:"Last run",size:"sm",value:t(s)?.lastRunAt?("formatRelativeTime"in n?n.formatRelativeTime:t($t))(t(s).lastRunAt):"—"},null,8,["value"])]),_:1}),t(f)&&t(f).length>1?(r(),u("div",St,[o(j,{title:"Duration trend",icon:"i-lucide-trending-up",help:"case.history-chart"},{default:a(()=>[o(H,{data:t(f),height:200,markers:t(R),onMarkerClick:L},null,8,["data","markers"])]),_:1}),o(j,{title:"Status history",icon:"i-lucide-check-circle",help:"case.sparkline"},{default:a(()=>[i("div",It,[(r(!0),u(T,null,w(t(f),(e,qt)=>(r(),m(M,{key:e.id,text:`Run #${e.runId}: ${e.status} — ${new Date(e.startTime).toLocaleDateString("en-US",{month:"short",day:"numeric"})}`},{default:a(()=>[o(b,{to:`/test-run-cases/${e.id}`,class:ct([{"bg-red-500 hover:bg-red-600":e.status==="failed"||e.status==="timedOut","bg-green-500 hover:bg-green-600":e.status==="passed","bg-yellow-500 hover:bg-yellow-600":e.status==="skipped","bg-gray-400 hover:bg-gray-500":!["passed","failed","skipped","timedOut"].includes(e.status)},"size-3.5 rounded-sm inline-block transition-colors"]),title:`Run #${e.runId}: ${e.status}`},null,8,["to","class","title"])]),_:2},1032,["text"]))),128)),t(f).length===0?(r(),u("span",zt,"No history yet")):d("",!0)])]),_:1})])):t(f)&&t(f).length<=1?(r(),u("div",Lt,[o(O,{name:"i-lucide-trending-up",class:"size-6 mx-auto mb-1"}),c[2]||(c[2]=i("p",{class:"text-sm"},"Need at least 2 runs to show trends.",-1))])):d("",!0),o($,{icon:"i-lucide-list-checks",title:`Recent executions (${t(s)?.recentExecutions?.length??0})`},{default:a(()=>[t(s)?.recentExecutions?.length?(r(),m(G,{key:0,data:t(s).recentExecutions,columns:U,ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"startTime-cell":a(({row:e})=>[i("span",Nt,[i("span",Ut,l(new Date(e.original.startTime).toLocaleDateString("en-US",{month:"short",day:"numeric"})),1),i("span",Pt,l(new Date(e.original.startTime).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit"})),1)])]),"status-cell":a(({row:e})=>[o(v,{color:("getStatusColor"in n?n.getStatusColor:t(Rt))(e.original.status),class:"capitalize"},{default:a(()=>[_(l(e.original.status),1)]),_:2},1032,["color"])]),"duration-cell":a(({row:e})=>[e.original.duration!==null?(r(),u("span",Et,l(("formatDuration"in n?n.formatDuration:t(S))(e.original.duration)),1)):(r(),u("span",Bt,"—"))]),"retries-cell":a(({row:e})=>[_(l(e.original.retries&&e.original.retries>0?e.original.retries:""),1)]),"runId-cell":a(({row:e})=>[o(b,{to:`/test-runs/${e.original.runId}`,class:"text-primary hover:underline"},{default:a(()=>[_(l(e.original.runLabel?`${e.original.runLabel} (#${e.original.runId})`:`#${e.original.runId}`),1)]),_:2},1032,["to"])]),"error-cell":a(({row:e})=>[e.original.error?(r(),u("span",{key:0,class:"text-red-600 text-xs truncate max-w-xs block",title:e.original.error},l(e.original.error.length>80?`${e.original.error.substring(0,80)}…`:e.original.error),9,Ft)):d("",!0)]),"actions-header":a(()=>[...c[3]||(c[3]=[i("div",{class:"text-right"},"Actions",-1)])]),"actions-cell":a(({row:e})=>[i("div",At,[o(k,{to:`/test-run-cases/${e.original.id}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:a(()=>[...c[4]||(c[4]=[_(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data"])):(r(),m(q,{key:1,icon:"i-lucide-inbox",text:"No executions yet"}))]),_:1},8,["title"]),t(s)?.failureClusters?.length?(r(),m($,{key:2,icon:"i-lucide-bug",title:`Failure clusters (${t(s).failureClusters.length})`,help:"cluster.concept"},{default:a(()=>[i("div",Kt,[(r(!0),u(T,null,w(t(s).failureClusters,e=>(r(),u("div",{key:e.id,class:"flex items-center justify-between py-2 px-2 rounded hover:bg-gray-50 dark:hover:bg-gray-800"},[i("div",Vt,[o(v,{color:N(e.status),variant:"soft",size:"xs",class:"capitalize"},{default:a(()=>[_(l(e.status),1)]),_:2},1032,["color"]),i("span",Ht,l(e.signature),1),e.occurrences>1?(r(),u("span",Mt,l(e.occurrences)+" occurrences ",1)):d("",!0)]),o(k,{to:`/failure-clusters/${e.id}`,size:"xs",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:a(()=>[...c[5]||(c[5]=[_(" View ",-1)])]),_:1},8,["to"])]))),128))])]),_:1},8,["title"])):d("",!0),t(s)?.links?.length?(r(),m($,{key:3,icon:"i-lucide-link",title:"Links",help:"shared.entity-links"},{default:a(()=>[o(J,{"entity-type":"test_case","entity-id":Number(t(h)),links:t(s).links??null},null,8,["entity-id","links"])]),_:1})):d("",!0)])]),_:1})}}});export{be as default};
@@ -0,0 +1,7 @@
1
+ import{d as j,b as A,w as F,c as _,i as e,j as o,g as r,k as s,f as N,q as k,F as h,P as O,o as u,t as n,_ as W,m as p,v as q,y as K,l as X,h as Y,r as C}from"./BPKwYP2Q.js";import{_ as G}from"./DhA17dqR.js";import{_ as Z}from"./bAfTAihV.js";import{_ as H}from"./C1K3r_fc.js";import{_ as J}from"./DdbrJwT-.js";import{_ as Q}from"./nCjfWTGm.js";import{k as P}from"./k-z_VVTK.js";import{e as tt,g as et}from"./CQeMb57w.js";import{u as st}from"./DuMv-ugy.js";import{u as D}from"./BIf1R_fu.js";import"./B7yG1G_l.js";import"./BpceIssd.js";import"./jIF87ALb.js";import"./DRtTLQri.js";import"./r3SBLxtE.js";const ot={class:"space-y-6"},at={key:0,class:"space-y-4 text-sm"},lt={class:"space-y-1"},nt={class:"flex items-start gap-2"},it={class:"text-xs break-all flex-1"},rt={class:"space-y-1"},dt={class:"flex items-start gap-2"},ct={class:"text-xs break-all flex-1"},pt={class:"space-y-3 text-sm"},ut={class:"space-y-1"},mt={class:"flex items-start gap-2"},_t={class:"text-xs break-all flex-1"},ft={class:"space-y-1"},vt={class:"relative"},gt={class:"text-xs bg-gray-50 dark:bg-gray-900 rounded-md p-3 overflow-x-auto"},xt={class:"space-y-3"},yt={class:"flex items-center gap-2 text-sm text-muted"},bt={class:"grid grid-cols-1 sm:grid-cols-2 gap-2 text-sm"},kt={class:"text-muted"},ht={class:"flex items-center gap-2 font-mono"},Ct={class:"text-xs"},wt={key:0,class:"flex items-center gap-2 py-4 text-muted"},$t={key:1,class:"grid grid-cols-2 sm:grid-cols-3 gap-4"},St={class:"space-y-1"},Bt={class:"text-2xl font-semibold"},Tt={class:"space-y-1"},Ft={class:"text-2xl font-semibold"},Pt={class:"space-y-1"},Dt={class:"text-2xl font-semibold"},Et={class:"space-y-1"},Vt={class:"text-2xl font-semibold"},zt={class:"space-y-1"},It={class:"text-2xl font-semibold"},Ut={class:"space-y-1"},Lt={class:"text-2xl font-semibold"},Mt={class:"space-y-1"},Rt={class:"text-2xl font-semibold"},jt={class:"flex flex-col sm:flex-row items-start sm:items-center gap-4"},oe=j({__name:"storage",async setup(At){let d,g;const w=A(),{copy:x}=st(),{data:i,refresh:$,pending:S}=([d,g]=F(()=>D("/api/admin/stats","$-MAlPFSlMr")),d=await d,g(),d),{data:y}=([d,g]=F(()=>D("/api/desktop/reporter-config",{default:()=>null},"$w9XS1YZFXM")),d=await d,g(),d),B=Y(()=>{const a=y.value;return a?`reporter: [
2
+ ['@piwitests/reporter', {
3
+ serverUrl: '${a.url}',
4
+ projectName: 'my-project',
5
+ apiKey: '${a.token}',
6
+ }],
7
+ ],`:""}),E=tt("storage").map(a=>({name:a,...et(a)})),V=[{label:"7 days",value:7},{label:"14 days",value:14},{label:"30 days",value:30},{label:"60 days",value:60},{label:"90 days",value:90},{label:"180 days",value:180},{label:"1 year",value:365}],m=C(30),f=C(!1),b=C(!1);async function z(){f.value=!1,b.value=!0;try{const a=await $fetch("/api/admin/cleanup",{method:"DELETE",body:{olderThanDays:m.value}});w.add({title:"Cleanup complete",description:`Deleted ${a.deletedRuns} test run(s) older than ${m.value} days.`,color:"success"}),await $()}catch(a){const t=a&&typeof a=="object"&&"data"in a?a.data?.message:void 0;w.add({title:"Cleanup failed",description:t||"An error occurred",color:"error"})}finally{b.value=!1}}return(a,t)=>{const c=W,v=G,T=q,I=Z,U=H,L=J,M=Q,R=O;return u(),_(h,null,[e("div",ot,[o(v,{icon:"i-lucide-folder-open",title:"Data location"},{subtitle:r(()=>[...t[9]||(t[9]=[p(" Where this instance keeps its database and files on disk. ",-1)])]),default:r(()=>[s(i)?(u(),_("div",at,[e("div",lt,[t[10]||(t[10]=e("div",{class:"text-muted"},"Database",-1)),e("div",nt,[e("code",it,n(s(i).databaseLocation),1),o(c,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy database location",onClick:t[0]||(t[0]=l=>s(x)(s(i).databaseLocation,{toast:!0}))})])]),e("div",rt,[t[11]||(t[11]=e("div",{class:"text-muted"},"File storage",-1)),e("div",dt,[e("code",ct,n(s(i).storageLocation),1),o(c,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy storage location",onClick:t[1]||(t[1]=l=>s(x)(s(i).storageLocation,{toast:!0}))})])])])):k("",!0)]),_:1}),s(y)?(u(),N(v,{key:0,icon:"i-lucide-upload",title:"Send results to this app"},{subtitle:r(()=>[...t[12]||(t[12]=[p(" Point the Playwright reporter at this desktop app. The access token is a local secret — prefer setting it via the ",-1),e("code",null,"PIWI_API_KEY",-1),p(" env var over committing it. ",-1)])]),default:r(()=>[e("div",pt,[e("div",ut,[t[13]||(t[13]=e("div",{class:"text-muted"},"Access token",-1)),e("div",mt,[e("code",_t,n(s(y).token),1),o(c,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy access token",onClick:t[2]||(t[2]=l=>s(x)(s(y).token,{toast:!0}))})])]),e("div",ft,[t[14]||(t[14]=e("div",{class:"text-muted"},"playwright.config.ts",-1)),e("div",vt,[e("pre",gt,[e("code",null,n(s(B)),1)]),o(c,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs",class:"absolute top-2 right-2","aria-label":"Copy config snippet",onClick:t[3]||(t[3]=l=>s(x)(s(B),{toast:!0}))})])])])]),_:1})):k("",!0),o(v,{icon:"i-lucide-server",title:"Storage backend",help:"settings.storage-backend"},{subtitle:r(()=>[...t[15]||(t[15]=[p(" Configured through environment variables. The active backend is shown read-only. ",-1)])]),default:r(()=>[e("div",xt,[e("div",yt,[o(T,{name:"i-lucide-info",class:"size-4"}),t[16]||(t[16]=p(" Storage backend selection (local disk or S3) and its credentials are set via the environment. Each variable below is shown read-only — hover the lock to see what it controls. ",-1))]),e("div",bt,[(u(!0),_(h,null,K(s(E),l=>(u(),_(h,{key:l.name},[e("div",kt,n(l.name.replace("PIWI_S3_","S3 ").replace("PIWI_STORAGE_","Storage ")),1),e("div",ht,[e("code",Ct,n(l.name),1),o(I,{"env-vars":[l.name]},null,8,["env-vars"])])],64))),128))])])]),_:1}),o(v,{icon:"i-lucide-database",title:"Storage statistics",help:"settings.storage-stats"},{footer:r(()=>[o(c,{icon:"i-lucide-refresh-cw",variant:"outline",size:"sm",loading:s(S),label:"Refresh",onClick:t[4]||(t[4]=l=>s($)())},null,8,["loading"])]),default:r(()=>[s(S)?(u(),_("div",wt,[o(T,{name:"i-lucide-loader-2",class:"animate-spin"}),t[17]||(t[17]=p(" Loading… ",-1))])):s(i)?(u(),_("div",$t,[e("div",St,[t[18]||(t[18]=e("p",{class:"text-sm text-muted"},"Projects",-1)),e("p",Bt,n(s(i).totalProjects),1)]),e("div",Tt,[t[19]||(t[19]=e("p",{class:"text-sm text-muted"},"Test runs",-1)),e("p",Ft,n(s(i).totalRuns),1)]),e("div",Pt,[t[20]||(t[20]=e("p",{class:"text-sm text-muted"},"Test cases (unique)",-1)),e("p",Dt,n(s(i).totalTestCases),1)]),e("div",Et,[t[21]||(t[21]=e("p",{class:"text-sm text-muted"},"Test results",-1)),e("p",Vt,n(s(i).totalRunsCases),1)]),e("div",zt,[t[22]||(t[22]=e("p",{class:"text-sm text-muted"},"Stored files",-1)),e("p",It,n(s(i).totalFiles),1)]),e("div",Ut,[t[23]||(t[23]=e("p",{class:"text-sm text-muted"},"File size (DB)",-1)),e("p",Lt,n(("formatBytes"in a?a.formatBytes:s(P))(s(i).totalFileSize)),1)]),e("div",Mt,[t[24]||(t[24]=e("p",{class:"text-sm text-muted"},"Storage on disk",-1)),e("p",Rt,n(("formatBytes"in a?a.formatBytes:s(P))(s(i).storageSizeOnDisk)),1)])])):k("",!0)]),_:1}),o(v,{icon:"i-lucide-trash-2",title:"Cleanup old test runs",help:"settings.cleanup"},{default:r(()=>[e("div",jt,[o(L,{label:"Delete runs older than",name:"period"},{default:r(()=>[o(U,{modelValue:s(m),"onUpdate:modelValue":t[5]||(t[5]=l=>X(m)?m.value=l:null),items:V},null,8,["modelValue"])]),_:1}),o(c,{icon:"i-lucide-trash-2",color:"error",variant:"soft",loading:s(b),label:"Run cleanup",class:"mt-4 sm:mt-5",onClick:t[6]||(t[6]=l=>f.value=!0)},null,8,["loading"])])]),_:1})]),o(R,null,{default:r(()=>[o(M,{open:s(f),title:"Confirm cleanup","onUpdate:open":t[8]||(t[8]=l=>f.value=l)},{body:r(()=>[e("p",null,[t[25]||(t[25]=p(" This will permanently delete all test runs older than ",-1)),e("strong",null,n(s(m))+" days",1),t[26]||(t[26]=p(", along with their associated reports, traces, and test results. This action cannot be undone. ",-1))])]),footer:r(()=>[o(c,{color:"neutral",variant:"ghost",label:"Cancel",onClick:t[7]||(t[7]=l=>f.value=!1)}),o(c,{color:"error",label:"Delete",icon:"i-lucide-trash-2",loading:s(b),onClick:z},null,8,["loading"])]),_:1},8,["open"])]),_:1})],64)}}});export{oe as default};