@piwitests/server 0.18.2 → 0.20.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 (783) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{Dwws9U0D.js → -f7BAm1H.js} +1 -1
  3. package/.output/public/_nuxt/{BjCHB89N.js → 4gYNA-d4.js} +1 -1
  4. package/.output/public/_nuxt/5A6ITZXj.js +1 -0
  5. package/.output/public/_nuxt/8PUUncmO.js +44 -0
  6. package/.output/public/_nuxt/A1pj0VnG.js +1 -0
  7. package/.output/public/_nuxt/{DZ3Vfcpz.js → AbmKWFQQ.js} +1 -1
  8. package/.output/public/_nuxt/B3obW6cw.js +3 -0
  9. package/.output/public/_nuxt/{QmMoMxLM.js → B7FTvFWq.js} +3 -3
  10. package/.output/public/_nuxt/{DXbPFI1d.js → B8zkOmwo.js} +1 -1
  11. package/.output/public/_nuxt/B96M2gdj.js +1 -0
  12. package/.output/public/_nuxt/{BFP6M-20.js → B99fbi73.js} +1 -1
  13. package/.output/public/_nuxt/{DD5HpaW9.js → B9OLmp0f.js} +1 -1
  14. package/.output/public/_nuxt/BKkF4pPD.js +1 -0
  15. package/.output/public/_nuxt/BT3wGCTI.js +1 -0
  16. package/.output/public/_nuxt/BUa0V0Ly.js +1 -0
  17. package/.output/public/_nuxt/BUkim3TM.js +1 -0
  18. package/.output/public/_nuxt/BVc14Ncz.js +4 -0
  19. package/.output/public/_nuxt/BY0HxR3t.js +17 -0
  20. package/.output/public/_nuxt/B_xAMWQS.js +2 -0
  21. package/.output/public/_nuxt/BdQoBaOv.js +1 -0
  22. package/.output/public/_nuxt/{Cng9gj7q.js → BdfhYr-u.js} +1 -1
  23. package/.output/public/_nuxt/BgRu_3tT.js +1 -0
  24. package/.output/public/_nuxt/{BBK2-Krn.js → BiO7RBWb.js} +2 -2
  25. package/.output/public/_nuxt/BicAJ6U8.js +1 -0
  26. package/.output/public/_nuxt/BjaRappk.js +1 -0
  27. package/.output/public/_nuxt/Bm62iDV5.js +1 -0
  28. package/.output/public/_nuxt/{C9YzQCiq.js → BmUfSNMV.js} +1 -1
  29. package/.output/public/_nuxt/Bnxf8nbZ.js +1 -0
  30. package/.output/public/_nuxt/{CsUoYK75.js → Bow4tTR0.js} +1 -1
  31. package/.output/public/_nuxt/{B2oUeBbA.js → BrQEE053.js} +1 -1
  32. package/.output/public/_nuxt/BzRRzmwm.js +1 -0
  33. package/.output/public/_nuxt/{CN1mJlvD.js → C0_yH0N7.js} +1 -1
  34. package/.output/public/_nuxt/C1gTN4Q8.js +1 -0
  35. package/.output/public/_nuxt/{CNMoZYMv.js → C2hkrSey.js} +1 -1
  36. package/.output/public/_nuxt/{rTvJTef_.js → C8e1EbJI.js} +1 -1
  37. package/.output/public/_nuxt/CA9B2HE5.js +1 -0
  38. package/.output/public/_nuxt/{oFM1KLWA.js → CAAwCT7H.js} +1 -1
  39. package/.output/public/_nuxt/{qpI-_f9Q.js → CAvY22RE.js} +1 -1
  40. package/.output/public/_nuxt/{BLIRKrbM.js → CEfS4-oS.js} +4 -4
  41. package/.output/public/_nuxt/CIoSMkpp.js +1 -0
  42. package/.output/public/_nuxt/{hH1UFE3Z.js → CIrFl3MW.js} +1 -1
  43. package/.output/public/_nuxt/CJFtzlQ4.js +1 -0
  44. package/.output/public/_nuxt/{hgHc4teu.js → CNyV9YpI.js} +1 -1
  45. package/.output/public/_nuxt/CSJ-eOQM.js +1 -0
  46. package/.output/public/_nuxt/CTU1mrhq.js +1 -0
  47. package/.output/public/_nuxt/CXEH9OPk.js +1 -0
  48. package/.output/public/_nuxt/CahpB9Z2.js +5 -0
  49. package/.output/public/_nuxt/{C8OCrfDP.js → Cbh--1MW.js} +1 -1
  50. package/.output/public/_nuxt/CeG9pBAD.js +1 -0
  51. package/.output/public/_nuxt/{DBtBvrYc.js → CeW8v31b.js} +1 -1
  52. package/.output/public/_nuxt/{DZUgX70W.js → CjPfj7ya.js} +1 -1
  53. package/.output/public/_nuxt/Cnsmicv2.js +79 -0
  54. package/.output/public/_nuxt/CsLojMwR.js +1 -0
  55. package/.output/public/_nuxt/{BXY_PWcx.js → Cus22Ud3.js} +2 -2
  56. package/.output/public/_nuxt/{4TxgDGVa.js → CwGWJbiy.js} +1 -1
  57. package/.output/public/_nuxt/Cx6gc2VW.js +1 -0
  58. package/.output/public/_nuxt/{B1X__ilH.js → CxyAzHr3.js} +1 -1
  59. package/.output/public/_nuxt/{BJtlcTrb.js → CzAPFPpL.js} +1 -1
  60. package/.output/public/_nuxt/D--H4jLI.js +1 -0
  61. package/.output/public/_nuxt/D-c8ZSws.js +1 -0
  62. package/.output/public/_nuxt/D1POo6S4.js +10 -0
  63. package/.output/public/_nuxt/D5tke0B5.js +1 -0
  64. package/.output/public/_nuxt/D8nkF-OO.js +3 -0
  65. package/.output/public/_nuxt/DA25RkyK.js +1 -0
  66. package/.output/public/_nuxt/{DZ1zNBVM.js → DIB-5fUJ.js} +1 -1
  67. package/.output/public/_nuxt/DJmoLeVt.js +1 -0
  68. package/.output/public/_nuxt/DJxlKFGb.js +1 -0
  69. package/.output/public/_nuxt/DMec-OLo.js +1 -0
  70. package/.output/public/_nuxt/DPCxhHri.js +1 -0
  71. package/.output/public/_nuxt/{By4YL7mx.js → DSqHUrvO.js} +1 -1
  72. package/.output/public/_nuxt/DabzhQB1.js +1 -0
  73. package/.output/public/_nuxt/{D5oNv2cB.js → DdwHkKfV.js} +1 -1
  74. package/.output/public/_nuxt/{CfOLBbW9.js → DeY2JkR2.js} +1 -1
  75. package/.output/public/_nuxt/{CPLJeOCb.js → DfgOx_ou.js} +1 -1
  76. package/.output/public/_nuxt/DmkUdSS4.js +1 -0
  77. package/.output/public/_nuxt/{CUvGJXY3.js → DoIREDVb.js} +1 -1
  78. package/.output/public/_nuxt/DpZ1r1HA.js +1 -0
  79. package/.output/public/_nuxt/{BOCwBVnz.js → Dpd16JVI.js} +1 -1
  80. package/.output/public/_nuxt/DqcKngf3.js +1 -0
  81. package/.output/public/_nuxt/{xqiPI_FQ.js → DrfE8IY0.js} +1 -1
  82. package/.output/public/_nuxt/{BeFDVhpA.js → DsesNydr.js} +1 -1
  83. package/.output/public/_nuxt/{D0cnIs93.js → DtHJgCS8.js} +1 -1
  84. package/.output/public/_nuxt/Dtd4rC58.js +9 -0
  85. package/.output/public/_nuxt/Du2W7Jne.js +254 -0
  86. package/.output/public/_nuxt/DuwtTfO8.js +2 -0
  87. package/.output/public/_nuxt/Dy-TJ0Mt.js +1 -0
  88. package/.output/public/_nuxt/{BlnwU1OO.js → Dy86h-7P.js} +1 -1
  89. package/.output/public/_nuxt/{B-IcwqZ2.js → Dyeqn3aG.js} +1 -1
  90. package/.output/public/_nuxt/{BlA8mIS-.js → FaFoMVKo.js} +1 -1
  91. package/.output/public/_nuxt/GPNI1ffD.js +4 -0
  92. package/.output/public/_nuxt/{DWowvnwc.js → H94BMf3L.js} +1 -1
  93. package/.output/public/_nuxt/HPNQD6v3.js +1 -0
  94. package/.output/public/_nuxt/HXadJrHu.js +2 -0
  95. package/.output/public/_nuxt/KyA_4Ks-.js +1 -0
  96. package/.output/public/_nuxt/{e7zD3uJ0.js → L3kAWB2a.js} +1 -1
  97. package/.output/public/_nuxt/McL25vkx.js +34 -0
  98. package/.output/public/_nuxt/Nn93e_Mz.js +1 -0
  99. package/.output/public/_nuxt/TagBadge.By1E6r4y.css +1 -0
  100. package/.output/public/_nuxt/UdR3DBPS.js +1 -0
  101. package/.output/public/_nuxt/Und3xXFc.js +5 -0
  102. package/.output/public/_nuxt/_mj6CfPa.js +1 -0
  103. package/.output/public/_nuxt/b-GYfcrQ.js +1 -0
  104. package/.output/public/_nuxt/bLcjFslv.js +1 -0
  105. package/.output/public/_nuxt/builds/latest.json +1 -1
  106. package/.output/public/_nuxt/builds/meta/e659b3e1-0e61-4971-940e-10063f9f4763.json +1 -0
  107. package/.output/public/_nuxt/entry.DmptwB51.css +1 -0
  108. package/.output/public/_nuxt/{wHnZ9OaL.js → hC_z4G8p.js} +1 -1
  109. package/.output/public/_nuxt/{DZOS7Fh7.js → hNh4CIL0.js} +1 -1
  110. package/.output/public/_nuxt/{kjYMoWWx.js → l5WKbU4h.js} +3 -3
  111. package/.output/public/_nuxt/oAClCn_h.js +1 -0
  112. package/.output/public/_nuxt/{gnCL8GjZ.js → pQqGiNch.js} +1 -1
  113. package/.output/public/_nuxt/ryMzSDUj.js +2 -0
  114. package/.output/public/demo/seed.version.json +2 -2
  115. package/.output/server/chunks/_/ai-prompt-preview.mjs +38 -0
  116. package/.output/server/chunks/_/ai-prompt-preview.mjs.map +1 -0
  117. package/.output/server/chunks/_/collect.mjs +122 -0
  118. package/.output/server/chunks/_/collect.mjs.map +1 -0
  119. package/.output/server/chunks/_/markers.mjs +1 -1
  120. package/.output/server/chunks/_/quarantine.mjs +112 -0
  121. package/.output/server/chunks/_/quarantine.mjs.map +1 -0
  122. package/.output/server/chunks/_/users.mjs +1 -1
  123. package/.output/server/chunks/build/{Alert-Bp1Wz_sq.mjs → Alert-C4xq8lao.mjs} +2 -2
  124. package/.output/server/chunks/build/Alert-C4xq8lao.mjs.map +1 -0
  125. package/.output/server/chunks/build/{Breadcrumb-C9ZPTLym.mjs → Breadcrumb-Ak2Lg3oM.mjs} +3 -3
  126. package/.output/server/chunks/build/Breadcrumb-Ak2Lg3oM.mjs.map +1 -0
  127. package/.output/server/chunks/build/{BreadcrumbNav-C3y42Vun.mjs → BreadcrumbNav-DO7I_z-n.mjs} +3 -3
  128. package/.output/server/chunks/build/BreadcrumbNav-DO7I_z-n.mjs.map +1 -0
  129. package/.output/server/chunks/build/{BrowserBadge-DNCp9pF-.mjs → BrowserBadge-MFvBwxmD.mjs} +67 -7
  130. package/.output/server/chunks/build/BrowserBadge-MFvBwxmD.mjs.map +1 -0
  131. package/.output/server/chunks/build/{ChartCard-Fr557IbV.mjs → ChartCard-Y1UKwMsf.mjs} +2 -2
  132. package/.output/server/chunks/build/ChartCard-Y1UKwMsf.mjs.map +1 -0
  133. package/.output/server/chunks/build/{Checkbox-cVOSIY93.mjs → Checkbox-4Q5d0fa0.mjs} +8 -8
  134. package/.output/server/chunks/build/Checkbox-4Q5d0fa0.mjs.map +1 -0
  135. package/.output/server/chunks/build/CiEnvCard-DB5DvBh1.mjs +1492 -0
  136. package/.output/server/chunks/build/CiEnvCard-DB5DvBh1.mjs.map +1 -0
  137. package/.output/server/chunks/build/{CodeBlock-BGwNmJ8J.mjs → CodeBlock-BgE-NSmE.mjs} +7 -22
  138. package/.output/server/chunks/build/CodeBlock-BgE-NSmE.mjs.map +1 -0
  139. package/.output/server/chunks/build/{DashboardNavbar-Bdp-OwTN.mjs → DashboardNavbar-BHmMSPX7.mjs} +3 -3
  140. package/.output/server/chunks/build/DashboardNavbar-BHmMSPX7.mjs.map +1 -0
  141. package/.output/server/chunks/build/{DashboardSidebarToggle-Ji6ADuqF.mjs → DashboardSidebarToggle-DCTnHiIv.mjs} +3 -3
  142. package/.output/server/chunks/build/DashboardSidebarToggle-DCTnHiIv.mjs.map +1 -0
  143. package/.output/server/chunks/build/{DataLocationCard-D6xSOrme.mjs → DataLocationCard-B_YHdzSz.mjs} +3 -3
  144. package/.output/server/chunks/build/DataLocationCard-B_YHdzSz.mjs.map +1 -0
  145. package/.output/server/chunks/build/{DiagnosisPanel-DV1xwGu4.mjs → DiagnosisPanel-CALyEmcJ.mjs} +17 -528
  146. package/.output/server/chunks/build/DiagnosisPanel-CALyEmcJ.mjs.map +1 -0
  147. package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs +43 -0
  148. package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs.map +1 -0
  149. package/.output/server/chunks/build/{EmptyState-DV3oT_xz.mjs → EmptyState-DC2q_7TD.mjs} +3 -3
  150. package/.output/server/chunks/build/EmptyState-DC2q_7TD.mjs.map +1 -0
  151. package/.output/server/chunks/build/{EntityLinks-DeOP13Kr.mjs → EntityLinks-BBHWssHH.mjs} +6 -6
  152. package/.output/server/chunks/build/EntityLinks-BBHWssHH.mjs.map +1 -0
  153. package/.output/server/chunks/build/{EnvManagedBadge-Qpn58Nmr.mjs → EnvManagedBadge-UwD2b9v2.mjs} +3 -3
  154. package/.output/server/chunks/build/EnvManagedBadge-UwD2b9v2.mjs.map +1 -0
  155. package/.output/server/chunks/build/{FormField-B-GSn_VR.mjs → FormField-B0HKsdMd.mjs} +3 -3
  156. package/.output/server/chunks/build/FormField-B0HKsdMd.mjs.map +1 -0
  157. package/.output/server/chunks/build/{HelpHint-YEMWtKu1.mjs → HelpHint-DrcIv-Oj.mjs} +53 -6
  158. package/.output/server/chunks/build/HelpHint-DrcIv-Oj.mjs.map +1 -0
  159. package/.output/server/chunks/build/{Label-DBvbHd3A.mjs → Label-DYDR1Oeh.mjs} +2 -2
  160. package/.output/server/chunks/build/Label-DYDR1Oeh.mjs.map +1 -0
  161. package/.output/server/chunks/build/{MiniRunBars-C3HG-EYm.mjs → MiniRunBars-CZMugDrh.mjs} +2 -2
  162. package/.output/server/chunks/build/MiniRunBars-CZMugDrh.mjs.map +1 -0
  163. package/.output/server/chunks/build/{Modal-CfA78Hm1.mjs → Modal-pSDlXzT3.mjs} +2 -2
  164. package/.output/server/chunks/build/Modal-pSDlXzT3.mjs.map +1 -0
  165. package/.output/server/chunks/build/{OpenInIdeLink-B92wosXu.mjs → OpenInIdeLink-CQWKKChd.mjs} +6 -6
  166. package/.output/server/chunks/build/{OpenInIdeLink-B92wosXu.mjs.map → OpenInIdeLink-CQWKKChd.mjs.map} +1 -1
  167. package/.output/server/chunks/build/{ProjectTestCasesTable-9Ia825h8.mjs → ProjectTestCasesTable-Bo61P5K1.mjs} +120 -45
  168. package/.output/server/chunks/build/ProjectTestCasesTable-Bo61P5K1.mjs.map +1 -0
  169. package/.output/server/chunks/build/{RovingFocusItem-CxhHdNGo.mjs → RovingFocusItem--OEHI2P3.mjs} +2 -2
  170. package/.output/server/chunks/build/RovingFocusItem--OEHI2P3.mjs.map +1 -0
  171. package/.output/server/chunks/build/{RunReports-BpJqLHY9.mjs → RunReports-DFLv51TX.mjs} +8 -6
  172. package/.output/server/chunks/build/RunReports-DFLv51TX.mjs.map +1 -0
  173. package/.output/server/chunks/build/{RunStatusBadge-BhmJ_RKM.mjs → RunStatusBadge-FfGb6bkW.mjs} +3 -2
  174. package/.output/server/chunks/build/RunStatusBadge-FfGb6bkW.mjs.map +1 -0
  175. package/.output/server/chunks/build/{SectionCard-COd9TuDq.mjs → SectionCard-CN-v0FZ_.mjs} +2 -2
  176. package/.output/server/chunks/build/SectionCard-CN-v0FZ_.mjs.map +1 -0
  177. package/.output/server/chunks/build/{Select-ppPz926C.mjs → Select-5DK9frQ7.mjs} +4 -4
  178. package/.output/server/chunks/build/Select-5DK9frQ7.mjs.map +1 -0
  179. package/.output/server/chunks/build/{SelectMenu-799c_Ils.mjs → SelectMenu-D-2FSqBU.mjs} +939 -7
  180. package/.output/server/chunks/build/{SelectMenu-799c_Ils.mjs.map → SelectMenu-D-2FSqBU.mjs.map} +1 -1
  181. package/.output/server/chunks/build/{Separator-CxZdx8kw.mjs → Separator-CR4WcEKD.mjs} +2 -2
  182. package/.output/server/chunks/build/Separator-CR4WcEKD.mjs.map +1 -0
  183. package/.output/server/chunks/build/{SettingsField-DDD4oqys.mjs → SettingsField-BZfx4ma1.mjs} +6 -6
  184. package/.output/server/chunks/build/SettingsField-BZfx4ma1.mjs.map +1 -0
  185. package/.output/server/chunks/build/{Slideover-B95Rj237.mjs → Slideover-D270EZZD.mjs} +3 -3
  186. package/.output/server/chunks/build/Slideover-D270EZZD.mjs.map +1 -0
  187. package/.output/server/chunks/build/{Switch-xQQ3_ME1.mjs → Switch-B5Fp8ULt.mjs} +5 -5
  188. package/.output/server/chunks/build/Switch-B5Fp8ULt.mjs.map +1 -0
  189. package/.output/server/chunks/build/{Table-CPhhVzDv.mjs → Table-BRk04Hd2.mjs} +3 -3
  190. package/.output/server/chunks/build/Table-BRk04Hd2.mjs.map +1 -0
  191. package/.output/server/chunks/build/{Tabs-BV9XqjoO.mjs → Tabs-BkSOnbaB.mjs} +3 -3
  192. package/.output/server/chunks/build/Tabs-BkSOnbaB.mjs.map +1 -0
  193. package/.output/server/chunks/build/TagBadge-DwzoFCBb.mjs +31 -0
  194. package/.output/server/chunks/build/TagBadge-DwzoFCBb.mjs.map +1 -0
  195. package/.output/server/chunks/build/TagBadge-styles.jhuZ4NjP.mjs +8 -0
  196. package/.output/server/chunks/build/TagBadge-styles.jhuZ4NjP.mjs.map +1 -0
  197. package/.output/server/chunks/build/{TestCaseHistoryChart-DMb-xSJa.mjs → TestCaseHistoryChart-CSi64vVA.mjs} +6 -6
  198. package/.output/server/chunks/build/TestCaseHistoryChart-CSi64vVA.mjs.map +1 -0
  199. package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs +200 -0
  200. package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs.map +1 -0
  201. package/.output/server/chunks/build/{TestStatusBar-CEzt76wk.mjs → TestStatusBar-DX3EhlyP.mjs} +15 -15
  202. package/.output/server/chunks/build/TestStatusBar-DX3EhlyP.mjs.map +1 -0
  203. package/.output/server/chunks/build/{Textarea-DrrqQUVG.mjs → Textarea-Dv2-lOvW.mjs} +2 -2
  204. package/.output/server/chunks/build/Textarea-Dv2-lOvW.mjs.map +1 -0
  205. package/.output/server/chunks/build/{Tooltip-7vwuDPrZ.mjs → Tooltip-Dv4htNP6.mjs} +3 -3
  206. package/.output/server/chunks/build/Tooltip-Dv4htNP6.mjs.map +1 -0
  207. package/.output/server/chunks/build/{VisuallyHiddenInput-C9eJVpPW.mjs → VisuallyHiddenInput-BHvzNumK.mjs} +2 -2
  208. package/.output/server/chunks/build/VisuallyHiddenInput-BHvzNumK.mjs.map +1 -0
  209. package/.output/server/chunks/build/{_id_-CE0Gso6i.mjs → _id_-BdG37K7s.mjs} +91 -42
  210. package/.output/server/chunks/build/_id_-BdG37K7s.mjs.map +1 -0
  211. package/.output/server/chunks/build/{_id_-bWcP2xFl.mjs → _id_-BdJs7BJZ.mjs} +719 -448
  212. package/.output/server/chunks/build/_id_-BdJs7BJZ.mjs.map +1 -0
  213. package/.output/server/chunks/build/{_id_-B2yirIuA.mjs → _id_-BxA6IgWr.mjs} +831 -368
  214. package/.output/server/chunks/build/_id_-BxA6IgWr.mjs.map +1 -0
  215. package/.output/server/chunks/build/{_id_-B4V5fop6.mjs → _id_-C_uSBiyU.mjs} +296 -60
  216. package/.output/server/chunks/build/{_id_-B4V5fop6.mjs.map → _id_-C_uSBiyU.mjs.map} +1 -1
  217. package/.output/server/chunks/build/{about-CoJjvUwM.mjs → about-BE0UV-8-.mjs} +456 -61
  218. package/.output/server/chunks/build/about-BE0UV-8-.mjs.map +1 -0
  219. package/.output/server/chunks/build/{account-Cn-eZqXM.mjs → account-DAfvaD-F.mjs} +21 -9
  220. package/.output/server/chunks/build/account-DAfvaD-F.mjs.map +1 -0
  221. package/.output/server/chunks/build/{ai-7jdaPOmj.mjs → ai-Cn05ch0u.mjs} +45 -23
  222. package/.output/server/chunks/build/{ai-7jdaPOmj.mjs.map → ai-Cn05ch0u.mjs.map} +1 -1
  223. package/.output/server/chunks/build/{analytics-B276WPeU.mjs → analytics-Bo_B_jko.mjs} +66 -41
  224. package/.output/server/chunks/build/analytics-Bo_B_jko.mjs.map +1 -0
  225. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  226. package/.output/server/chunks/build/compare-RxHSOdsO.mjs +12 -0
  227. package/.output/server/chunks/build/{db.client-aHcD0wyX.mjs → db.client-CQoVTYB9.mjs} +83 -5
  228. package/.output/server/chunks/build/db.client-CQoVTYB9.mjs.map +1 -0
  229. package/.output/server/chunks/build/{default-BSzdkM_L.mjs → default-CbNHaFsy.mjs} +622 -78
  230. package/.output/server/chunks/build/default-CbNHaFsy.mjs.map +1 -0
  231. package/.output/server/chunks/build/{docs-BN_x1OW3.mjs → docs-B_llWMxx.mjs} +30 -49
  232. package/.output/server/chunks/build/{docs-BN_x1OW3.mjs.map → docs-B_llWMxx.mjs.map} +1 -1
  233. package/.output/server/chunks/build/{edit-C9Z7oZeu.mjs → edit-J0asTFg8.mjs} +29 -18
  234. package/.output/server/chunks/build/edit-J0asTFg8.mjs.map +1 -0
  235. package/.output/server/chunks/build/{fetch-8kznMtBM.mjs → fetch-B4FwBOzu.mjs} +3 -3
  236. package/.output/server/chunks/build/fetch-B4FwBOzu.mjs.map +1 -0
  237. package/.output/server/chunks/build/{forgot-password-BqPF4Rxs.mjs → forgot-password-CC__1OnV.mjs} +17 -5
  238. package/.output/server/chunks/build/forgot-password-CC__1OnV.mjs.map +1 -0
  239. package/.output/server/chunks/build/{help-content-DmFnuhNu.mjs → help-content-C876a9WD.mjs} +37 -8
  240. package/.output/server/chunks/build/help-content-C876a9WD.mjs.map +1 -0
  241. package/.output/server/chunks/build/import-CS9oylTN.mjs +1021 -0
  242. package/.output/server/chunks/build/import-CS9oylTN.mjs.map +1 -0
  243. package/.output/server/chunks/build/{index-CULN3-en.mjs → index-CU2nZhAa.mjs} +113 -42
  244. package/.output/server/chunks/build/index-CU2nZhAa.mjs.map +1 -0
  245. package/.output/server/chunks/build/{index-BR9hw6qk.mjs → index-DE45ycdZ.mjs} +51 -31
  246. package/.output/server/chunks/build/index-DE45ycdZ.mjs.map +1 -0
  247. package/.output/server/chunks/build/{index-BK9PTRpd.mjs → index-e9skCi-V.mjs} +85 -69
  248. package/.output/server/chunks/build/{index-BK9PTRpd.mjs.map → index-e9skCi-V.mjs.map} +1 -1
  249. package/.output/server/chunks/build/{index-DVUtBexc.mjs → index-hGHlmyxj.mjs} +1520 -288
  250. package/.output/server/chunks/build/index-hGHlmyxj.mjs.map +1 -0
  251. package/.output/server/chunks/build/{index-Ba-Fifra.mjs → index-tR6owKzj.mjs} +18 -6
  252. package/.output/server/chunks/build/index-tR6owKzj.mjs.map +1 -0
  253. package/.output/server/chunks/build/{isValueEqualOrExist-DBZjbD_3.mjs → isValueEqualOrExist-D2qw9YEr.mjs} +3 -3
  254. package/.output/server/chunks/build/isValueEqualOrExist-D2qw9YEr.mjs.map +1 -0
  255. package/.output/server/chunks/build/{login-D2XZDuek.mjs → login-Da4u1IlW.mjs} +19 -7
  256. package/.output/server/chunks/build/login-Da4u1IlW.mjs.map +1 -0
  257. package/.output/server/chunks/build/{mcp-_o6cMS6m.mjs → mcp-uhVCCwQM.mjs} +359 -24
  258. package/.output/server/chunks/build/mcp-uhVCCwQM.mjs.map +1 -0
  259. package/.output/server/chunks/build/{notifications-Dzm9c0u_.mjs → notifications-fx_qnKGA.mjs} +27 -21
  260. package/.output/server/chunks/build/notifications-fx_qnKGA.mjs.map +1 -0
  261. package/.output/server/chunks/build/pr-feedback-X6-70iF0.mjs +368 -0
  262. package/.output/server/chunks/build/pr-feedback-X6-70iF0.mjs.map +1 -0
  263. package/.output/server/chunks/build/{reset-password-gpFzIEDj.mjs → reset-password-BmrUS4ZD.mjs} +17 -5
  264. package/.output/server/chunks/build/reset-password-BmrUS4ZD.mjs.map +1 -0
  265. package/.output/server/chunks/build/server.mjs +238 -36
  266. package/.output/server/chunks/build/{settings-pNyPBXVa.mjs → settings-CCYe7rsc.mjs} +23 -10
  267. package/.output/server/chunks/build/settings-CCYe7rsc.mjs.map +1 -0
  268. package/.output/server/chunks/build/{settings-metadata-B0wo5R-W.mjs → settings-metadata-DrEqWcW-.mjs} +11 -2
  269. package/.output/server/chunks/build/settings-metadata-DrEqWcW-.mjs.map +1 -0
  270. package/.output/server/chunks/build/{storage-XelzuyPy.mjs → storage-CJEmviCD.mjs} +41 -31
  271. package/.output/server/chunks/build/storage-CJEmviCD.mjs.map +1 -0
  272. package/.output/server/chunks/build/styles.mjs +1 -0
  273. package/.output/server/chunks/build/{tags-DrCQ7QSw.mjs → tags-DauTe_F-.mjs} +22 -10
  274. package/.output/server/chunks/build/tags-DauTe_F-.mjs.map +1 -0
  275. package/.output/server/chunks/build/{test-cases-pmOxi-AN.mjs → test-cases-thBbAykw.mjs} +38 -24
  276. package/.output/server/chunks/build/test-cases-thBbAykw.mjs.map +1 -0
  277. package/.output/server/chunks/build/{timeout-hygiene-CNs71Iah.mjs → timeout-hygiene-CbnSaVbK.mjs} +20 -8
  278. package/.output/server/chunks/build/timeout-hygiene-CbnSaVbK.mjs.map +1 -0
  279. package/.output/server/chunks/build/{useAiStatus-ZO987RY7.mjs → useAiStatus-CxjMmDDY.mjs} +89 -89
  280. package/.output/server/chunks/build/useAiStatus-CxjMmDDY.mjs.map +1 -0
  281. package/.output/server/chunks/build/{useCopy-BQQKcwlq.mjs → useCopy-CeKWgHyT.mjs} +2 -2
  282. package/.output/server/chunks/build/useCopy-CeKWgHyT.mjs.map +1 -0
  283. package/.output/server/chunks/build/{PageStateCard-Bwee6JTk.mjs → useCopyRich-RJKhWoyj.mjs} +472 -63
  284. package/.output/server/chunks/build/useCopyRich-RJKhWoyj.mjs.map +1 -0
  285. package/.output/server/chunks/build/useDesktopDownload-BepjqxOt.mjs +46 -0
  286. package/.output/server/chunks/build/useDesktopDownload-BepjqxOt.mjs.map +1 -0
  287. package/.output/server/chunks/build/{useFormControl-BLpq1s4O.mjs → useFormControl-CZ9So7iX.mjs} +2 -2
  288. package/.output/server/chunks/build/useFormControl-CZ9So7iX.mjs.map +1 -0
  289. package/.output/server/chunks/build/{useOpenInIde-kMZ7Jw5c.mjs → useOpenInIde-BbTnPhFA.mjs} +3 -3
  290. package/.output/server/chunks/build/useOpenInIde-BbTnPhFA.mjs.map +1 -0
  291. package/.output/server/chunks/build/{useSettingsNav-NjI2seBy.mjs → useSettingsNav-DnQKacz8.mjs} +6 -6
  292. package/.output/server/chunks/build/useSettingsNav-DnQKacz8.mjs.map +1 -0
  293. package/.output/server/chunks/build/useTauri-Kf3HE_42.mjs +11 -0
  294. package/.output/server/chunks/build/useTauri-Kf3HE_42.mjs.map +1 -0
  295. package/.output/server/chunks/build/{useTreeViewCookie-DVYpxW-p.mjs → useTreeViewCookie-CQjQdTkH.mjs} +2 -2
  296. package/.output/server/chunks/build/useTreeViewCookie-CQjQdTkH.mjs.map +1 -0
  297. package/.output/server/chunks/build/{users-NmAUZs3i.mjs → users-CTUqXyGh.mjs} +22 -10
  298. package/.output/server/chunks/build/users-CTUqXyGh.mjs.map +1 -0
  299. package/.output/server/chunks/build/{wasted-time-CguAF9zc.mjs → wasted-time-BNTPIyrC.mjs} +26 -14
  300. package/.output/server/chunks/build/wasted-time-BNTPIyrC.mjs.map +1 -0
  301. package/.output/server/chunks/nitro/nitro.mjs +6438 -1964
  302. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  303. package/.output/server/chunks/routes/__piwi/session.get.mjs +13 -1
  304. package/.output/server/chunks/routes/__piwi/session.get.mjs.map +1 -1
  305. package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs +12 -0
  306. package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs.map +1 -1
  307. package/.output/server/chunks/routes/api/admin/stats.get.mjs +12 -0
  308. package/.output/server/chunks/routes/api/admin/stats.get.mjs.map +1 -1
  309. package/.output/server/chunks/routes/api/ai/status.get.mjs +12 -0
  310. package/.output/server/chunks/routes/api/ai/status.get.mjs.map +1 -1
  311. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +12 -0
  312. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs.map +1 -1
  313. package/.output/server/chunks/routes/api/auth/change-password.post.mjs +12 -0
  314. package/.output/server/chunks/routes/api/auth/change-password.post.mjs.map +1 -1
  315. package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs +12 -0
  316. package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs.map +1 -1
  317. package/.output/server/chunks/routes/api/auth/login.post.mjs +12 -0
  318. package/.output/server/chunks/routes/api/auth/login.post.mjs.map +1 -1
  319. package/.output/server/chunks/routes/api/auth/logout.post.mjs +12 -0
  320. package/.output/server/chunks/routes/api/auth/logout.post.mjs.map +1 -1
  321. package/.output/server/chunks/routes/api/auth/me.get.mjs +12 -0
  322. package/.output/server/chunks/routes/api/auth/me.get.mjs.map +1 -1
  323. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +12 -0
  324. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs.map +1 -1
  325. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +12 -0
  326. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs.map +1 -1
  327. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +12 -0
  328. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs.map +1 -1
  329. package/.output/server/chunks/routes/api/auth/reset-password.post.mjs +12 -0
  330. package/.output/server/chunks/routes/api/auth/reset-password.post.mjs.map +1 -1
  331. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +12 -0
  332. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs.map +1 -1
  333. package/.output/server/chunks/routes/api/auth/setup.get.mjs +12 -0
  334. package/.output/server/chunks/routes/api/auth/setup.get.mjs.map +1 -1
  335. package/.output/server/chunks/routes/api/auth/setup.post.mjs +12 -0
  336. package/.output/server/chunks/routes/api/auth/setup.post.mjs.map +1 -1
  337. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +12 -0
  338. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs.map +1 -1
  339. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +12 -0
  340. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs.map +1 -1
  341. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +12 -0
  342. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs.map +1 -1
  343. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +12 -0
  344. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs.map +1 -1
  345. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +12 -0
  346. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs.map +1 -1
  347. package/.output/server/chunks/routes/api/desktop/import-local.post.mjs +88 -0
  348. package/.output/server/chunks/routes/api/desktop/import-local.post.mjs.map +1 -0
  349. package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs +12 -0
  350. package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs.map +1 -1
  351. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +13 -1
  352. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs.map +1 -1
  353. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +13 -1
  354. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs.map +1 -1
  355. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +13 -1
  356. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs.map +1 -1
  357. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +13 -1
  358. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs.map +1 -1
  359. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +24 -1
  360. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs.map +1 -1
  361. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +13 -1
  362. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs.map +1 -1
  363. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +13 -1
  364. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs.map +1 -1
  365. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +13 -1
  366. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs.map +1 -1
  367. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +13 -1
  368. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs.map +1 -1
  369. package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs +64 -0
  370. package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs.map +1 -0
  371. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +13 -1
  372. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs.map +1 -1
  373. package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs +56 -0
  374. package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs.map +1 -0
  375. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +13 -1
  376. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs.map +1 -1
  377. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +13 -1
  378. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs.map +1 -1
  379. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +13 -1
  380. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs.map +1 -1
  381. package/.output/server/chunks/routes/api/files/_...path_.get.mjs +13 -32
  382. package/.output/server/chunks/routes/api/files/_...path_.get.mjs.map +1 -1
  383. package/.output/server/chunks/routes/api/health.get.mjs +13 -1
  384. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  385. package/.output/server/chunks/routes/api/index.get.mjs +12 -0
  386. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  387. package/.output/server/chunks/routes/api/index.get2.mjs +13 -1
  388. package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
  389. package/.output/server/chunks/routes/api/index.get3.mjs +13 -1
  390. package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
  391. package/.output/server/chunks/routes/api/index.get4.mjs +13 -1
  392. package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
  393. package/.output/server/chunks/routes/api/index.get5.mjs +12 -0
  394. package/.output/server/chunks/routes/api/index.get5.mjs.map +1 -1
  395. package/.output/server/chunks/routes/api/index.post.mjs +12 -0
  396. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  397. package/.output/server/chunks/routes/api/index.post2.mjs +13 -1
  398. package/.output/server/chunks/routes/api/index.post2.mjs.map +1 -1
  399. package/.output/server/chunks/routes/api/index.post3.mjs +13 -1
  400. package/.output/server/chunks/routes/api/index.post3.mjs.map +1 -1
  401. package/.output/server/chunks/routes/api/index.post4.mjs +13 -1
  402. package/.output/server/chunks/routes/api/index.post4.mjs.map +1 -1
  403. package/.output/server/chunks/routes/api/index.post5.mjs +13 -1
  404. package/.output/server/chunks/routes/api/index.post5.mjs.map +1 -1
  405. package/.output/server/chunks/routes/api/index.post6.mjs +12 -0
  406. package/.output/server/chunks/routes/api/index.post6.mjs.map +1 -1
  407. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +13 -1
  408. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs.map +1 -1
  409. package/.output/server/chunks/routes/api/links/_id_.delete.mjs +13 -1
  410. package/.output/server/chunks/routes/api/links/_id_.delete.mjs.map +1 -1
  411. package/.output/server/chunks/routes/api/links/_id_.patch.mjs +13 -1
  412. package/.output/server/chunks/routes/api/links/_id_.patch.mjs.map +1 -1
  413. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +13 -1
  414. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs.map +1 -1
  415. package/.output/server/chunks/routes/api/markers/_id_.put.mjs +13 -1
  416. package/.output/server/chunks/routes/api/markers/_id_.put.mjs.map +1 -1
  417. package/.output/server/chunks/routes/api/notifications/stream.get.mjs +13 -1
  418. package/.output/server/chunks/routes/api/notifications/stream.get.mjs.map +1 -1
  419. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +13 -1
  420. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs.map +1 -1
  421. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +13 -1
  422. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs.map +1 -1
  423. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +13 -1
  424. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs.map +1 -1
  425. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +22 -2
  426. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs.map +1 -1
  427. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +13 -1
  428. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs.map +1 -1
  429. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +13 -1
  430. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs.map +1 -1
  431. package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs +13 -1
  432. package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs.map +1 -1
  433. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +13 -1
  434. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs.map +1 -1
  435. package/.output/server/chunks/routes/api/projects/_id/members.put.mjs +13 -1
  436. package/.output/server/chunks/routes/api/projects/_id/members.put.mjs.map +1 -1
  437. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +13 -1
  438. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs.map +1 -1
  439. package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs +58 -0
  440. package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs.map +1 -0
  441. package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs +57 -0
  442. package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs.map +1 -0
  443. package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs +72 -0
  444. package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs.map +1 -0
  445. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +13 -1
  446. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs.map +1 -1
  447. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +13 -1
  448. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs.map +1 -1
  449. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +13 -1
  450. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs.map +1 -1
  451. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +13 -1
  452. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs.map +1 -1
  453. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +13 -1
  454. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs.map +1 -1
  455. package/.output/server/chunks/routes/api/projects/_id_.get.mjs +13 -1
  456. package/.output/server/chunks/routes/api/projects/_id_.get.mjs.map +1 -1
  457. package/.output/server/chunks/routes/api/projects/_id_.put.mjs +13 -1
  458. package/.output/server/chunks/routes/api/projects/_id_.put.mjs.map +1 -1
  459. package/.output/server/chunks/routes/api/projects/menu.get.mjs +13 -1
  460. package/.output/server/chunks/routes/api/projects/menu.get.mjs.map +1 -1
  461. package/.output/server/chunks/routes/api/projects/overview.get.mjs +13 -1
  462. package/.output/server/chunks/routes/api/projects/overview.get.mjs.map +1 -1
  463. package/.output/server/chunks/routes/api/projects.get.mjs +13 -1
  464. package/.output/server/chunks/routes/api/projects.get.mjs.map +1 -1
  465. package/.output/server/chunks/routes/api/search.get.mjs +13 -1
  466. package/.output/server/chunks/routes/api/search.get.mjs.map +1 -1
  467. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +13 -1
  468. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs.map +1 -1
  469. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +13 -1
  470. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs.map +1 -1
  471. package/.output/server/chunks/routes/api/settings/ai/models.post.mjs +12 -0
  472. package/.output/server/chunks/routes/api/settings/ai/models.post.mjs.map +1 -1
  473. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +13 -1
  474. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs.map +1 -1
  475. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +13 -1
  476. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs.map +1 -1
  477. package/.output/server/chunks/routes/api/settings/ai.get.mjs +13 -1
  478. package/.output/server/chunks/routes/api/settings/ai.get.mjs.map +1 -1
  479. package/.output/server/chunks/routes/api/settings/ai.put.mjs +13 -1
  480. package/.output/server/chunks/routes/api/settings/ai.put.mjs.map +1 -1
  481. package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs +57 -0
  482. package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs.map +1 -0
  483. package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs +63 -0
  484. package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs.map +1 -0
  485. package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs +12 -0
  486. package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs.map +1 -1
  487. package/.output/server/chunks/routes/api/settings/smtp.get.mjs +13 -1
  488. package/.output/server/chunks/routes/api/settings/smtp.get.mjs.map +1 -1
  489. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +13 -1
  490. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs.map +1 -1
  491. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +13 -1
  492. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs.map +1 -1
  493. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +13 -1
  494. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs.map +1 -1
  495. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +13 -1
  496. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs.map +1 -1
  497. package/.output/server/chunks/routes/api/stream.get.mjs +13 -1
  498. package/.output/server/chunks/routes/api/stream.get.mjs.map +1 -1
  499. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +13 -1
  500. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs.map +1 -1
  501. package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +13 -1
  502. package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs.map +1 -1
  503. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +13 -1
  504. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs.map +1 -1
  505. package/.output/server/chunks/routes/api/tags/_id_.put.mjs +13 -1
  506. package/.output/server/chunks/routes/api/tags/_id_.put.mjs.map +1 -1
  507. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +13 -1
  508. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs.map +1 -1
  509. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +13 -1
  510. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs.map +1 -1
  511. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +13 -1
  512. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs.map +1 -1
  513. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +13 -1
  514. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs.map +1 -1
  515. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +25 -3
  516. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs.map +1 -1
  517. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +13 -1
  518. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs.map +1 -1
  519. package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs +60 -0
  520. package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs.map +1 -0
  521. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +13 -1
  522. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs.map +1 -1
  523. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +13 -1
  524. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs.map +1 -1
  525. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +13 -1
  526. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs.map +1 -1
  527. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +13 -1
  528. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs.map +1 -1
  529. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +17 -3
  530. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs.map +1 -1
  531. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs +13 -1
  532. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs.map +1 -1
  533. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +13 -1
  534. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs.map +1 -1
  535. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +13 -1
  536. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs.map +1 -1
  537. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +13 -1
  538. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs.map +1 -1
  539. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +13 -1
  540. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs.map +1 -1
  541. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +13 -1
  542. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs.map +1 -1
  543. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +13 -1
  544. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs.map +1 -1
  545. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +13 -1
  546. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs.map +1 -1
  547. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +13 -1
  548. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs.map +1 -1
  549. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +15 -1
  550. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs.map +1 -1
  551. package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs +196 -0
  552. package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs.map +1 -0
  553. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +13 -1
  554. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs.map +1 -1
  555. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +13 -1
  556. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs.map +1 -1
  557. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +13 -1
  558. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs.map +1 -1
  559. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +13 -1
  560. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs.map +1 -1
  561. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +13 -1
  562. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs.map +1 -1
  563. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +13 -1
  564. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs.map +1 -1
  565. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +13 -1
  566. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs.map +1 -1
  567. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +13 -1
  568. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs.map +1 -1
  569. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +13 -1
  570. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs.map +1 -1
  571. package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs +77 -0
  572. package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs.map +1 -0
  573. package/.output/server/chunks/routes/api/test-runs/import.post.mjs +77 -0
  574. package/.output/server/chunks/routes/api/test-runs/import.post.mjs.map +1 -0
  575. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +13 -1
  576. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs.map +1 -1
  577. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +13 -1
  578. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs.map +1 -1
  579. package/.output/server/chunks/routes/api/test-runs/start.post.mjs +13 -1
  580. package/.output/server/chunks/routes/api/test-runs/start.post.mjs.map +1 -1
  581. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +32 -15
  582. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
  583. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +21 -6
  584. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
  585. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +156 -3
  586. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
  587. package/.output/server/chunks/routes/api/traces/check.post.mjs +13 -1
  588. package/.output/server/chunks/routes/api/traces/check.post.mjs.map +1 -1
  589. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +12 -0
  590. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs.map +1 -1
  591. package/.output/server/chunks/routes/api/users/_id/index.get.mjs +12 -0
  592. package/.output/server/chunks/routes/api/users/_id/index.get.mjs.map +1 -1
  593. package/.output/server/chunks/routes/api/users/_id/index.post.mjs +13 -1
  594. package/.output/server/chunks/routes/api/users/_id/index.post.mjs.map +1 -1
  595. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +13 -1
  596. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs.map +1 -1
  597. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +13 -1
  598. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs.map +1 -1
  599. package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +13 -1
  600. package/.output/server/chunks/routes/api/users/_id/projects.put.mjs.map +1 -1
  601. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +12 -0
  602. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  603. package/.output/server/chunks/routes/api/users/_id_.patch.mjs +12 -0
  604. package/.output/server/chunks/routes/api/users/_id_.patch.mjs.map +1 -1
  605. package/.output/server/chunks/routes/api/version.get.mjs +13 -1
  606. package/.output/server/chunks/routes/api/version.get.mjs.map +1 -1
  607. package/.output/server/chunks/routes/mcp.post.mjs +13 -1
  608. package/.output/server/chunks/routes/mcp.post.mjs.map +1 -1
  609. package/.output/server/chunks/routes/renderer.mjs +1 -1
  610. package/.output/server/chunks/tasks/sweep.mjs +12 -0
  611. package/.output/server/chunks/tasks/sweep.mjs.map +1 -1
  612. package/.output/server/chunks/tasks/sweep2.mjs +12 -0
  613. package/.output/server/chunks/tasks/sweep2.mjs.map +1 -1
  614. package/.output/server/database/migrations/0039_remarkable_jean_grey.sql +2 -0
  615. package/.output/server/database/migrations/0040_organic_phalanx.sql +8 -0
  616. package/.output/server/database/migrations/0041_tense_gravity.sql +5 -0
  617. package/.output/server/database/migrations/0042_burly_hemingway.sql +19 -0
  618. package/.output/server/database/migrations/meta/0039_snapshot.json +3403 -0
  619. package/.output/server/database/migrations/meta/0040_snapshot.json +3457 -0
  620. package/.output/server/database/migrations/meta/0041_snapshot.json +3492 -0
  621. package/.output/server/database/migrations/meta/0042_snapshot.json +3618 -0
  622. package/.output/server/database/migrations/meta/_journal.json +28 -0
  623. package/.output/server/database/migrations-pg/0040_lazy_layla_miller.sql +2 -0
  624. package/.output/server/database/migrations-pg/0041_light_screwball.sql +8 -0
  625. package/.output/server/database/migrations-pg/0042_serious_layla_miller.sql +5 -0
  626. package/.output/server/database/migrations-pg/0043_wonderful_mordo.sql +19 -0
  627. package/.output/server/database/migrations-pg/meta/0040_snapshot.json +4060 -0
  628. package/.output/server/database/migrations-pg/meta/0041_snapshot.json +4123 -0
  629. package/.output/server/database/migrations-pg/meta/0042_snapshot.json +4153 -0
  630. package/.output/server/database/migrations-pg/meta/0043_snapshot.json +4308 -0
  631. package/.output/server/database/migrations-pg/meta/_journal.json +28 -0
  632. package/.output/server/index.mjs +13 -1
  633. package/.output/server/index.mjs.map +1 -1
  634. package/.output/server/node_modules/fflate/esm/index.mjs +2710 -0
  635. package/.output/server/node_modules/fflate/package.json +128 -0
  636. package/.output/server/node_modules/highlight.js/es/languages/yaml.js +213 -0
  637. package/.output/server/node_modules/marked/lib/marked.esm.js +72 -0
  638. package/.output/server/node_modules/marked/package.json +103 -0
  639. package/.output/server/package.json +3 -1
  640. package/package.json +2 -2
  641. package/.output/public/_nuxt/9-wVZMur.js +0 -4
  642. package/.output/public/_nuxt/B-5GukRk.js +0 -1
  643. package/.output/public/_nuxt/B1G3GGhQ.js +0 -1
  644. package/.output/public/_nuxt/B1zMFx24.js +0 -1
  645. package/.output/public/_nuxt/B4jvLMfS.js +0 -1
  646. package/.output/public/_nuxt/BBnX5xw4.js +0 -2
  647. package/.output/public/_nuxt/BHpUiv6j.js +0 -3
  648. package/.output/public/_nuxt/BLOUs6AE.js +0 -5
  649. package/.output/public/_nuxt/BT6p4Pgt.js +0 -2
  650. package/.output/public/_nuxt/BUXSUkJ_.js +0 -1
  651. package/.output/public/_nuxt/BVf6Yx9V.js +0 -26
  652. package/.output/public/_nuxt/BbS6Bwby.js +0 -1
  653. package/.output/public/_nuxt/Bd3HqPMF.js +0 -1
  654. package/.output/public/_nuxt/BeKvLsja.js +0 -2
  655. package/.output/public/_nuxt/BeUm5UNV.js +0 -1
  656. package/.output/public/_nuxt/BfV444H3.js +0 -3
  657. package/.output/public/_nuxt/BjKamgHq.js +0 -1
  658. package/.output/public/_nuxt/BoJdjCVl.js +0 -4
  659. package/.output/public/_nuxt/BreO2PiA.js +0 -1
  660. package/.output/public/_nuxt/BvIDC_R-.js +0 -1
  661. package/.output/public/_nuxt/ByuJWADR.js +0 -34
  662. package/.output/public/_nuxt/C1dyLp_j.js +0 -1
  663. package/.output/public/_nuxt/CAUgpKsF.js +0 -2
  664. package/.output/public/_nuxt/CL9-VLTJ.js +0 -1
  665. package/.output/public/_nuxt/CazDIG_m.js +0 -1
  666. package/.output/public/_nuxt/CcXaak_K.js +0 -1
  667. package/.output/public/_nuxt/CdMuck_X.js +0 -1
  668. package/.output/public/_nuxt/CfPSts5n.js +0 -1
  669. package/.output/public/_nuxt/CfROFPse.js +0 -1
  670. package/.output/public/_nuxt/Cnapl7lZ.js +0 -1
  671. package/.output/public/_nuxt/CscWZxCi.js +0 -1
  672. package/.output/public/_nuxt/CuicKV-B.js +0 -34
  673. package/.output/public/_nuxt/Cyiu1VQD.js +0 -1
  674. package/.output/public/_nuxt/D6PUPmRC.js +0 -1
  675. package/.output/public/_nuxt/DCl2yo4g.js +0 -8
  676. package/.output/public/_nuxt/DHXWp5yD.js +0 -1
  677. package/.output/public/_nuxt/DHltYerF.js +0 -114
  678. package/.output/public/_nuxt/DLXydYJb.js +0 -47
  679. package/.output/public/_nuxt/DRPSi76A.js +0 -1
  680. package/.output/public/_nuxt/DS53kyHJ.js +0 -1
  681. package/.output/public/_nuxt/DWhBqv_7.js +0 -1
  682. package/.output/public/_nuxt/Dd0kK5WH.js +0 -1
  683. package/.output/public/_nuxt/Df7kUO0m.js +0 -1
  684. package/.output/public/_nuxt/Dga3Av-m.js +0 -1
  685. package/.output/public/_nuxt/DgwTpwfB.js +0 -1
  686. package/.output/public/_nuxt/DkI145a5.js +0 -1
  687. package/.output/public/_nuxt/DoFBTaDR.js +0 -1
  688. package/.output/public/_nuxt/Dr_dI5hB.js +0 -1
  689. package/.output/public/_nuxt/EPZOxdgq.js +0 -1
  690. package/.output/public/_nuxt/R1nNqTru.js +0 -1
  691. package/.output/public/_nuxt/S5DLdEpg.js +0 -4
  692. package/.output/public/_nuxt/builds/meta/7caf3cb3-d272-4dbd-bb3f-1eeb64fab5d1.json +0 -1
  693. package/.output/public/_nuxt/entry.ChQMshd4.css +0 -1
  694. package/.output/public/_nuxt/gCELhaU9.js +0 -1
  695. package/.output/public/_nuxt/ipDzNHcs.js +0 -5
  696. package/.output/public/_nuxt/kS3boz40.js +0 -1
  697. package/.output/public/_nuxt/qH_j2A3a.js +0 -1
  698. package/.output/public/_nuxt/r3SBLxtE.js +0 -1
  699. package/.output/public/_nuxt/rsiRgrVM.js +0 -1
  700. package/.output/public/_nuxt/swrbBdtB.js +0 -1
  701. package/.output/public/sw.js +0 -1
  702. package/.output/public/workbox-2fbc6a65.js +0 -1
  703. package/.output/server/chunks/build/Alert-Bp1Wz_sq.mjs.map +0 -1
  704. package/.output/server/chunks/build/Breadcrumb-C9ZPTLym.mjs.map +0 -1
  705. package/.output/server/chunks/build/BreadcrumbNav-C3y42Vun.mjs.map +0 -1
  706. package/.output/server/chunks/build/BrowserBadge-DNCp9pF-.mjs.map +0 -1
  707. package/.output/server/chunks/build/ChartCard-Fr557IbV.mjs.map +0 -1
  708. package/.output/server/chunks/build/Checkbox-cVOSIY93.mjs.map +0 -1
  709. package/.output/server/chunks/build/CiEnvCard-DXPOhdSG.mjs +0 -640
  710. package/.output/server/chunks/build/CiEnvCard-DXPOhdSG.mjs.map +0 -1
  711. package/.output/server/chunks/build/CodeBlock-BGwNmJ8J.mjs.map +0 -1
  712. package/.output/server/chunks/build/DashboardNavbar-Bdp-OwTN.mjs.map +0 -1
  713. package/.output/server/chunks/build/DashboardSidebarToggle-Ji6ADuqF.mjs.map +0 -1
  714. package/.output/server/chunks/build/DataLocationCard-D6xSOrme.mjs.map +0 -1
  715. package/.output/server/chunks/build/DiagnosisPanel-DV1xwGu4.mjs.map +0 -1
  716. package/.output/server/chunks/build/EmptyState-DV3oT_xz.mjs.map +0 -1
  717. package/.output/server/chunks/build/EntityLinks-DeOP13Kr.mjs.map +0 -1
  718. package/.output/server/chunks/build/EnvManagedBadge-Qpn58Nmr.mjs.map +0 -1
  719. package/.output/server/chunks/build/FormField-B-GSn_VR.mjs.map +0 -1
  720. package/.output/server/chunks/build/HelpHint-YEMWtKu1.mjs.map +0 -1
  721. package/.output/server/chunks/build/Label-DBvbHd3A.mjs.map +0 -1
  722. package/.output/server/chunks/build/MiniRunBars-C3HG-EYm.mjs.map +0 -1
  723. package/.output/server/chunks/build/Modal-CfA78Hm1.mjs.map +0 -1
  724. package/.output/server/chunks/build/PageStateCard-Bwee6JTk.mjs.map +0 -1
  725. package/.output/server/chunks/build/ProjectTestCasesTable-9Ia825h8.mjs.map +0 -1
  726. package/.output/server/chunks/build/RovingFocusItem-CxhHdNGo.mjs.map +0 -1
  727. package/.output/server/chunks/build/RunReports-BpJqLHY9.mjs.map +0 -1
  728. package/.output/server/chunks/build/RunStatusBadge-BhmJ_RKM.mjs.map +0 -1
  729. package/.output/server/chunks/build/SectionCard-COd9TuDq.mjs.map +0 -1
  730. package/.output/server/chunks/build/Select-ppPz926C.mjs.map +0 -1
  731. package/.output/server/chunks/build/Separator-CxZdx8kw.mjs.map +0 -1
  732. package/.output/server/chunks/build/SettingsField-DDD4oqys.mjs.map +0 -1
  733. package/.output/server/chunks/build/Slideover-B95Rj237.mjs.map +0 -1
  734. package/.output/server/chunks/build/Switch-xQQ3_ME1.mjs.map +0 -1
  735. package/.output/server/chunks/build/Table-CPhhVzDv.mjs.map +0 -1
  736. package/.output/server/chunks/build/Tabs-BV9XqjoO.mjs.map +0 -1
  737. package/.output/server/chunks/build/TagBadge-BDcvvGxw.mjs +0 -47
  738. package/.output/server/chunks/build/TagBadge-BDcvvGxw.mjs.map +0 -1
  739. package/.output/server/chunks/build/TestCaseHistoryChart-DMb-xSJa.mjs.map +0 -1
  740. package/.output/server/chunks/build/TestStatusBar-CEzt76wk.mjs.map +0 -1
  741. package/.output/server/chunks/build/Textarea-DrrqQUVG.mjs.map +0 -1
  742. package/.output/server/chunks/build/Tooltip-7vwuDPrZ.mjs.map +0 -1
  743. package/.output/server/chunks/build/VisuallyHiddenInput-C9eJVpPW.mjs.map +0 -1
  744. package/.output/server/chunks/build/_id_-B2yirIuA.mjs.map +0 -1
  745. package/.output/server/chunks/build/_id_-CE0Gso6i.mjs.map +0 -1
  746. package/.output/server/chunks/build/_id_-bWcP2xFl.mjs.map +0 -1
  747. package/.output/server/chunks/build/about-CoJjvUwM.mjs.map +0 -1
  748. package/.output/server/chunks/build/account-Cn-eZqXM.mjs.map +0 -1
  749. package/.output/server/chunks/build/analytics-B276WPeU.mjs.map +0 -1
  750. package/.output/server/chunks/build/db.client-aHcD0wyX.mjs.map +0 -1
  751. package/.output/server/chunks/build/default-BSzdkM_L.mjs.map +0 -1
  752. package/.output/server/chunks/build/edit-C9Z7oZeu.mjs.map +0 -1
  753. package/.output/server/chunks/build/fetch-8kznMtBM.mjs.map +0 -1
  754. package/.output/server/chunks/build/forgot-password-BqPF4Rxs.mjs.map +0 -1
  755. package/.output/server/chunks/build/help-content-DmFnuhNu.mjs.map +0 -1
  756. package/.output/server/chunks/build/index-BR9hw6qk.mjs.map +0 -1
  757. package/.output/server/chunks/build/index-Ba-Fifra.mjs.map +0 -1
  758. package/.output/server/chunks/build/index-CULN3-en.mjs.map +0 -1
  759. package/.output/server/chunks/build/index-DVUtBexc.mjs.map +0 -1
  760. package/.output/server/chunks/build/isValueEqualOrExist-DBZjbD_3.mjs.map +0 -1
  761. package/.output/server/chunks/build/login-D2XZDuek.mjs.map +0 -1
  762. package/.output/server/chunks/build/mcp-_o6cMS6m.mjs.map +0 -1
  763. package/.output/server/chunks/build/notifications-Dzm9c0u_.mjs.map +0 -1
  764. package/.output/server/chunks/build/reset-password-gpFzIEDj.mjs.map +0 -1
  765. package/.output/server/chunks/build/settings-metadata-B0wo5R-W.mjs.map +0 -1
  766. package/.output/server/chunks/build/settings-pNyPBXVa.mjs.map +0 -1
  767. package/.output/server/chunks/build/storage-XelzuyPy.mjs.map +0 -1
  768. package/.output/server/chunks/build/tags-DrCQ7QSw.mjs.map +0 -1
  769. package/.output/server/chunks/build/test-cases-pmOxi-AN.mjs.map +0 -1
  770. package/.output/server/chunks/build/timeout-hygiene-CNs71Iah.mjs.map +0 -1
  771. package/.output/server/chunks/build/useAiStatus-ZO987RY7.mjs.map +0 -1
  772. package/.output/server/chunks/build/useCopy-BQQKcwlq.mjs.map +0 -1
  773. package/.output/server/chunks/build/useFormControl-BLpq1s4O.mjs.map +0 -1
  774. package/.output/server/chunks/build/useOpenInIde-kMZ7Jw5c.mjs.map +0 -1
  775. package/.output/server/chunks/build/useSettingsNav-NjI2seBy.mjs.map +0 -1
  776. package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs +0 -7
  777. package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs.map +0 -1
  778. package/.output/server/chunks/build/useTreeViewCookie-DVYpxW-p.mjs.map +0 -1
  779. package/.output/server/chunks/build/users-NmAUZs3i.mjs.map +0 -1
  780. package/.output/server/chunks/build/virtualizer-ZaqK4guJ.mjs +0 -940
  781. package/.output/server/chunks/build/virtualizer-ZaqK4guJ.mjs.map +0 -1
  782. package/.output/server/chunks/build/wasted-time-CguAF9zc.mjs.map +0 -1
  783. /package/.output/public/_nuxt/{PageStateCard.BrM5HWjY.css → useCopyRich.BrM5HWjY.css} +0 -0
@@ -1,44 +1,48 @@
1
- import { _ as _sfc_main$1$1, a as _sfc_main$j } from './DashboardNavbar-Bdp-OwTN.mjs';
2
- import { _ as _sfc_main$1$2 } from './Breadcrumb-C9ZPTLym.mjs';
3
- import { _ as __nuxt_component_3 } from './BreadcrumbNav-C3y42Vun.mjs';
4
- import { _ as __nuxt_component_4$1 } from './NavbarActions-_YjrSUat.mjs';
5
- import { u as useRoute, k as useRouter, l as useHead, j as useToast, s as useAuth, n as _sfc_main$7$1, m as _sfc_main$k, o as _sfc_main$p, _ as _sfc_main$d$1, v as navigateTo, w as __nuxt_component_7$1, r as useRuntimeConfig, p as __nuxt_component_12, q as _sfc_main$8$1 } from './server.mjs';
6
- import { _ as _sfc_main$m } from './Separator-CxZdx8kw.mjs';
7
- import { _ as __nuxt_component_2, a as __nuxt_component_9 } from './HelpHint-YEMWtKu1.mjs';
8
- import { _ as _sfc_main$n } from './FormField-B-GSn_VR.mjs';
9
- import { _ as _sfc_main$b } from './Select-ppPz926C.mjs';
1
+ import { _ as _sfc_main$1$1, a as _sfc_main$m } from './DashboardNavbar-BHmMSPX7.mjs';
2
+ import { _ as _sfc_main$1$2 } from './Breadcrumb-Ak2Lg3oM.mjs';
3
+ import { _ as __nuxt_component_3$1 } from './BreadcrumbNav-DO7I_z-n.mjs';
4
+ import { _ as __nuxt_component_4$2 } from './NavbarActions-_YjrSUat.mjs';
5
+ import { u as useRoute, k as useRouter, l as useHead, j as useToast, w as useAuth, n as _sfc_main$7$1, m as _sfc_main$k, o as _sfc_main$p, _ as _sfc_main$d$1, x as navigateTo, y as __nuxt_component_7$2, r as useRuntimeConfig, s as __nuxt_component_12, v as _sfc_main$8$1 } from './server.mjs';
6
+ import { _ as _sfc_main$o } from './Separator-CR4WcEKD.mjs';
7
+ import { _ as __nuxt_component_2, a as __nuxt_component_9 } from './HelpHint-DrcIv-Oj.mjs';
8
+ import { _ as _sfc_main$q } from './FormField-B0HKsdMd.mjs';
9
+ import { _ as _sfc_main$d } from './Select-5DK9frQ7.mjs';
10
10
  import { computed, effectScope, defineComponent, withAsyncContext, ref, watch, withCtx, unref, isRef, createVNode, createTextVNode, toDisplayString, openBlock, createBlock, Fragment, renderList, createCommentVNode, withModifiers, mergeProps, withDirectives, vModelCheckbox, reactive, useSSRContext } from 'vue';
11
11
  import { ssrRenderComponent, ssrInterpolate, ssrRenderList, ssrRenderClass, ssrRenderAttr, ssrIncludeBooleanAttr, ssrRenderAttrs, ssrRenderStyle, ssrLooseContain } from 'vue/server-renderer';
12
- import { bp as NOTIFICATION_EVENTS } from '../nitro/nitro.mjs';
13
- import { c as useCookie } from './DashboardSidebarToggle-Ji6ADuqF.mjs';
14
- import { u as useFetch } from './fetch-8kznMtBM.mjs';
15
- import { _ as __nuxt_component_4 } from './TagBadge-BDcvvGxw.mjs';
16
- import { _ as _sfc_main$c } from './Tabs-BV9XqjoO.mjs';
17
- import { _ as __nuxt_component_0 } from './ChartCard-Fr557IbV.mjs';
12
+ import { bP as NOTIFICATION_EVENTS } from '../nitro/nitro.mjs';
13
+ import { c as useCookie } from './DashboardSidebarToggle-DCTnHiIv.mjs';
14
+ import { u as useFetch } from './fetch-B4FwBOzu.mjs';
15
+ import { _ as __nuxt_component_4 } from './TagBadge-DwzoFCBb.mjs';
16
+ import { _ as __nuxt_component_11$1 } from './SectionCard-CN-v0FZ_.mjs';
17
+ import { _ as __nuxt_component_3, u as useDesktopProjectLink } from './BrowserBadge-MFvBwxmD.mjs';
18
+ import { _ as _sfc_main$e } from './Tabs-BkSOnbaB.mjs';
19
+ import { _ as __nuxt_component_0 } from './ChartCard-Y1UKwMsf.mjs';
18
20
  import { _ as __nuxt_component_0$1 } from './ChartMarkerTooltip-0DcMfD_6.mjs';
19
- import { _ as __nuxt_component_8 } from './EmptyState-DV3oT_xz.mjs';
20
- import { u as useChartMarkers, _ as __nuxt_component_1$2 } from './useChartMarkers-C89e_VLV.mjs';
21
+ import { _ as __nuxt_component_4$1 } from './EmptyState-DC2q_7TD.mjs';
22
+ import { u as useChartMarkers, _ as __nuxt_component_1$3 } from './useChartMarkers-C89e_VLV.mjs';
21
23
  import { VisXYContainer, VisLine, VisAxis, VisArea } from '@unovis/vue';
22
24
  import { CurveType } from '@unovis/ts';
23
- import { _ as _sfc_main$d } from './Card-BQP_oZkQ.mjs';
24
- import { _ as _sfc_main$h } from './Switch-xQQ3_ME1.mjs';
25
- import { _ as _sfc_main$g } from './Table-CPhhVzDv.mjs';
26
- import { _ as __nuxt_component_13$1 } from './RunStatusBadge-BhmJ_RKM.mjs';
27
- import { _ as _sfc_main$i } from './Tooltip-7vwuDPrZ.mjs';
28
- import { _ as __nuxt_component_2$1 } from './BrowserBadge-DNCp9pF-.mjs';
29
- import { _ as __nuxt_component_13 } from './TestStatusBar-CEzt76wk.mjs';
30
- import { _ as __nuxt_component_14 } from './RunReports-BpJqLHY9.mjs';
31
- import { _ as __nuxt_component_11 } from './SectionCard-COd9TuDq.mjs';
32
- import { _ as __nuxt_component_3$1 } from './TableScroller-DMcdCVrH.mjs';
33
- import { a as formatDuration, j as getStatusColor, p as prettyDateFormat, u as createSortHeader, f as formatRelativeTime, h as clusterStatusColor, g as clusterErrorTypeColor, e as errorMessage } from './index-CULN3-en.mjs';
34
- import { _ as __nuxt_component_1$1 } from './OpenInIdeLink-B92wosXu.mjs';
25
+ import { _ as _sfc_main$f } from './Card-BQP_oZkQ.mjs';
26
+ import { _ as _sfc_main$j } from './Switch-B5Fp8ULt.mjs';
27
+ import { _ as _sfc_main$i } from './Table-BRk04Hd2.mjs';
28
+ import { _ as __nuxt_component_13 } from './RunStatusBadge-FfGb6bkW.mjs';
29
+ import { _ as _sfc_main$l } from './Tooltip-Dv4htNP6.mjs';
30
+ import { _ as __nuxt_component_14$1 } from './TestStatusBar-DX3EhlyP.mjs';
31
+ import { _ as __nuxt_component_14 } from './DurationValue-D20oGbnc.mjs';
32
+ import { _ as __nuxt_component_15 } from './RunReports-DFLv51TX.mjs';
33
+ import { _ as __nuxt_component_3$2 } from './TableScroller-DMcdCVrH.mjs';
34
+ import { v as getStatusColor, p as prettyDateFormat, w as createSortHeader, f as formatRelativeTime, b as toTestPriority, j as clusterStatusColor, i as clusterErrorTypeColor, e as errorMessage, h as fixVerificationBadge } from './index-CU2nZhAa.mjs';
35
+ import { _ as __nuxt_component_2$2 } from './TestMetaBadges-D5_yUtIP.mjs';
36
+ import { _ as __nuxt_component_1$1 } from './OpenInIdeLink-CQWKKChd.mjs';
35
37
  import { _ as __nuxt_component_1 } from './LoadingState-C3pBSuOO.mjs';
36
- import { _ as _sfc_main$f } from './SelectMenu-799c_Ils.mjs';
37
- import { _ as __nuxt_component_34 } from './ProjectTestCasesTable-9Ia825h8.mjs';
38
- import { _ as _sfc_main$e } from './Checkbox-cVOSIY93.mjs';
38
+ import { _ as _sfc_main$h } from './SelectMenu-D-2FSqBU.mjs';
39
+ import { _ as __nuxt_component_36 } from './ProjectTestCasesTable-Bo61P5K1.mjs';
40
+ import { _ as __nuxt_component_5$2 } from './ErrorState-CktYyeEZ.mjs';
41
+ import { _ as __nuxt_component_1$2, a as __nuxt_component_2$1 } from './StatTile-D61Vzo6e.mjs';
42
+ import { _ as _sfc_main$g } from './Checkbox-4Q5d0fa0.mjs';
39
43
  import { _ as __nuxt_component_5$1 } from './MarkerBadge-D7meXy4u.mjs';
40
44
  import { g as getMarkerCategory, a as MARKER_CATEGORIES, D as DEFAULT_MARKER_CATEGORY } from '../_/marker-categories.mjs';
41
- import { _ as _sfc_main$l } from './Modal-CfA78Hm1.mjs';
45
+ import { _ as _sfc_main$n } from './Modal-pSDlXzT3.mjs';
42
46
  import { u as useRunComparison } from './useRunComparison-CiMBLpe2.mjs';
43
47
  import 'vue-router';
44
48
  import '@iconify/vue';
@@ -60,6 +64,18 @@ import 'path';
60
64
  import 'fs/promises';
61
65
  import 'zlib';
62
66
  import 'util';
67
+ import 'marked';
68
+ import 'highlight.js/lib/core';
69
+ import 'highlight.js/lib/languages/bash';
70
+ import 'highlight.js/lib/languages/css';
71
+ import 'highlight.js/lib/languages/diff';
72
+ import 'highlight.js/lib/languages/javascript';
73
+ import 'highlight.js/lib/languages/json';
74
+ import 'highlight.js/lib/languages/python';
75
+ import 'highlight.js/lib/languages/typescript';
76
+ import 'highlight.js/lib/languages/xml';
77
+ import 'highlight.js/lib/languages/yaml';
78
+ import 'fflate';
63
79
  import 'pixelmatch';
64
80
  import 'sharp';
65
81
  import '@anthropic-ai/sdk';
@@ -83,25 +99,24 @@ import 'node:zlib';
83
99
  import 'consola';
84
100
  import 'node:url';
85
101
  import '@iconify/utils';
86
- import './help-content-DmFnuhNu.mjs';
87
- import './useCopy-BQQKcwlq.mjs';
88
- import './Label-DBvbHd3A.mjs';
89
- import './useFormControl-BLpq1s4O.mjs';
102
+ import './help-content-C876a9WD.mjs';
103
+ import './useCopy-CeKWgHyT.mjs';
104
+ import './Label-DYDR1Oeh.mjs';
105
+ import './useFormControl-CZ9So7iX.mjs';
90
106
  import './handleAndDispatchCustomEvent-Bk_AVSSo.mjs';
91
107
  import '@vue/shared';
92
- import './RovingFocusItem-CxhHdNGo.mjs';
108
+ import './useTauri-Kf3HE_42.mjs';
109
+ import './RovingFocusItem--OEHI2P3.mjs';
93
110
  import './useForwardScopeId-D0ameaSU.mjs';
94
- import './VisuallyHiddenInput-C9eJVpPW.mjs';
111
+ import './VisuallyHiddenInput-BHvzNumK.mjs';
95
112
  import '@tanstack/vue-table';
96
113
  import '@tanstack/vue-virtual';
97
114
  import 'date-fns';
98
- import './useOpenInIde-kMZ7Jw5c.mjs';
99
- import './virtualizer-ZaqK4guJ.mjs';
115
+ import './useOpenInIde-BbTnPhFA.mjs';
100
116
  import './FilterToolbar-BwXy8xSk.mjs';
101
- import './ErrorState-CktYyeEZ.mjs';
102
- import './Alert-Bp1Wz_sq.mjs';
103
- import './useTreeViewCookie-DVYpxW-p.mjs';
104
- import './isValueEqualOrExist-DBZjbD_3.mjs';
117
+ import './Alert-C4xq8lao.mjs';
118
+ import './useTreeViewCookie-CQjQdTkH.mjs';
119
+ import './isValueEqualOrExist-D2qw9YEr.mjs';
105
120
 
106
121
  const COOKIE_KEY = "piwi-browser-notify";
107
122
  function defaultStored() {
@@ -298,7 +313,7 @@ function useDemoNotifications() {
298
313
  }
299
314
  return { scheduleFor, cancelFor };
300
315
  }
301
- const _sfc_main$a = /* @__PURE__ */ defineComponent({
316
+ const _sfc_main$c = /* @__PURE__ */ defineComponent({
302
317
  __name: "SubscribeBell",
303
318
  __ssrInlineRender: true,
304
319
  props: {
@@ -467,12 +482,12 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
467
482
  return (_ctx, _push, _parent, _attrs) => {
468
483
  const _component_UPopover = _sfc_main$8$1;
469
484
  const _component_UButton = _sfc_main$k;
470
- const _component_USeparator = _sfc_main$m;
485
+ const _component_USeparator = _sfc_main$o;
471
486
  const _component_HelpHint = __nuxt_component_2;
472
487
  const _component_UIcon = _sfc_main$p;
473
488
  const _component_NuxtLink = __nuxt_component_12;
474
- const _component_UFormField = _sfc_main$n;
475
- const _component_USelect = _sfc_main$b;
489
+ const _component_UFormField = _sfc_main$q;
490
+ const _component_USelect = _sfc_main$d;
476
491
  if (unref(showComponent)) {
477
492
  _push(ssrRenderComponent(_component_UPopover, mergeProps({
478
493
  open: unref(open),
@@ -1160,14 +1175,219 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
1160
1175
  };
1161
1176
  }
1162
1177
  });
1163
- const _sfc_setup$a = _sfc_main$a.setup;
1164
- _sfc_main$a.setup = (props, ctx) => {
1178
+ const _sfc_setup$c = _sfc_main$c.setup;
1179
+ _sfc_main$c.setup = (props, ctx) => {
1165
1180
  const ssrContext = useSSRContext();
1166
1181
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/project/SubscribeBell.vue");
1167
- return _sfc_setup$a ? _sfc_setup$a(props, ctx) : void 0;
1182
+ return _sfc_setup$c ? _sfc_setup$c(props, ctx) : void 0;
1168
1183
  };
1169
- const __nuxt_component_5 = Object.assign(_sfc_main$a, { __name: "SubscribeBell" });
1170
- const _sfc_main$9 = /* @__PURE__ */ defineComponent({
1184
+ const __nuxt_component_5 = Object.assign(_sfc_main$c, { __name: "SubscribeBell" });
1185
+ const _sfc_main$b = /* @__PURE__ */ defineComponent({
1186
+ __name: "DesktopProjectLinkCard",
1187
+ __ssrInlineRender: true,
1188
+ props: {
1189
+ projectId: {}
1190
+ },
1191
+ setup(__props) {
1192
+ const props = __props;
1193
+ const { available, link, busy, pickAndLink, unlink } = useDesktopProjectLink(() => props.projectId);
1194
+ return (_ctx, _push, _parent, _attrs) => {
1195
+ const _component_SectionCard = __nuxt_component_11$1;
1196
+ const _component_UIcon = _sfc_main$p;
1197
+ const _component_UBadge = _sfc_main$7$1;
1198
+ const _component_UButton = _sfc_main$k;
1199
+ if (unref(available)) {
1200
+ _push(ssrRenderComponent(_component_SectionCard, mergeProps({
1201
+ icon: "i-lucide-folder-symlink",
1202
+ title: "Local folder"
1203
+ }, _attrs), {
1204
+ subtitle: withCtx((_, _push2, _parent2, _scopeId) => {
1205
+ if (_push2) {
1206
+ _push2(` Link this project to its checkout on this machine to retry failures from here and open files in your IDE. `);
1207
+ } else {
1208
+ return [
1209
+ createTextVNode(" Link this project to its checkout on this machine to retry failures from here and open files in your IDE. ")
1210
+ ];
1211
+ }
1212
+ }),
1213
+ default: withCtx((_, _push2, _parent2, _scopeId) => {
1214
+ if (_push2) {
1215
+ if (unref(link)) {
1216
+ _push2(`<div class="flex items-center justify-between gap-3"${_scopeId}><div class="flex items-center gap-2 min-w-0 text-sm"${_scopeId}>`);
1217
+ _push2(ssrRenderComponent(_component_UIcon, {
1218
+ name: unref(link).exists ? "i-lucide-folder-check" : "i-lucide-folder-x",
1219
+ class: ["size-4 shrink-0", unref(link).exists ? "text-success" : "text-warning"]
1220
+ }, null, _parent2, _scopeId));
1221
+ _push2(`<code class="text-xs break-all"${_scopeId}>${ssrInterpolate(unref(link).path)}</code>`);
1222
+ if (!unref(link).exists) {
1223
+ _push2(ssrRenderComponent(_component_UBadge, {
1224
+ color: "warning",
1225
+ variant: "subtle",
1226
+ size: "sm"
1227
+ }, {
1228
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
1229
+ if (_push3) {
1230
+ _push3(`missing`);
1231
+ } else {
1232
+ return [
1233
+ createTextVNode("missing")
1234
+ ];
1235
+ }
1236
+ }),
1237
+ _: 1
1238
+ }, _parent2, _scopeId));
1239
+ } else {
1240
+ _push2(`<!---->`);
1241
+ }
1242
+ _push2(`</div><div class="flex items-center gap-1.5 shrink-0"${_scopeId}>`);
1243
+ _push2(ssrRenderComponent(_component_UButton, {
1244
+ size: "xs",
1245
+ color: "neutral",
1246
+ variant: "soft",
1247
+ icon: "i-lucide-folder-search",
1248
+ loading: unref(busy),
1249
+ onClick: unref(pickAndLink)
1250
+ }, {
1251
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
1252
+ if (_push3) {
1253
+ _push3(` Change `);
1254
+ } else {
1255
+ return [
1256
+ createTextVNode(" Change ")
1257
+ ];
1258
+ }
1259
+ }),
1260
+ _: 1
1261
+ }, _parent2, _scopeId));
1262
+ _push2(ssrRenderComponent(_component_UButton, {
1263
+ size: "xs",
1264
+ color: "neutral",
1265
+ variant: "ghost",
1266
+ icon: "i-lucide-unlink",
1267
+ disabled: unref(busy),
1268
+ onClick: unref(unlink)
1269
+ }, {
1270
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
1271
+ if (_push3) {
1272
+ _push3(` Unlink `);
1273
+ } else {
1274
+ return [
1275
+ createTextVNode(" Unlink ")
1276
+ ];
1277
+ }
1278
+ }),
1279
+ _: 1
1280
+ }, _parent2, _scopeId));
1281
+ _push2(`</div></div>`);
1282
+ } else {
1283
+ _push2(`<div class="flex items-center justify-between gap-3"${_scopeId}><p class="text-sm text-muted"${_scopeId}>No folder linked yet.</p>`);
1284
+ _push2(ssrRenderComponent(_component_UButton, {
1285
+ size: "xs",
1286
+ icon: "i-lucide-folder-plus",
1287
+ loading: unref(busy),
1288
+ onClick: unref(pickAndLink)
1289
+ }, {
1290
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
1291
+ if (_push3) {
1292
+ _push3(`Choose folder…`);
1293
+ } else {
1294
+ return [
1295
+ createTextVNode("Choose folder…")
1296
+ ];
1297
+ }
1298
+ }),
1299
+ _: 1
1300
+ }, _parent2, _scopeId));
1301
+ _push2(`</div>`);
1302
+ }
1303
+ } else {
1304
+ return [
1305
+ unref(link) ? (openBlock(), createBlock("div", {
1306
+ key: 0,
1307
+ class: "flex items-center justify-between gap-3"
1308
+ }, [
1309
+ createVNode("div", { class: "flex items-center gap-2 min-w-0 text-sm" }, [
1310
+ createVNode(_component_UIcon, {
1311
+ name: unref(link).exists ? "i-lucide-folder-check" : "i-lucide-folder-x",
1312
+ class: ["size-4 shrink-0", unref(link).exists ? "text-success" : "text-warning"]
1313
+ }, null, 8, ["name", "class"]),
1314
+ createVNode("code", { class: "text-xs break-all" }, toDisplayString(unref(link).path), 1),
1315
+ !unref(link).exists ? (openBlock(), createBlock(_component_UBadge, {
1316
+ key: 0,
1317
+ color: "warning",
1318
+ variant: "subtle",
1319
+ size: "sm"
1320
+ }, {
1321
+ default: withCtx(() => [
1322
+ createTextVNode("missing")
1323
+ ]),
1324
+ _: 1
1325
+ })) : createCommentVNode("", true)
1326
+ ]),
1327
+ createVNode("div", { class: "flex items-center gap-1.5 shrink-0" }, [
1328
+ createVNode(_component_UButton, {
1329
+ size: "xs",
1330
+ color: "neutral",
1331
+ variant: "soft",
1332
+ icon: "i-lucide-folder-search",
1333
+ loading: unref(busy),
1334
+ onClick: unref(pickAndLink)
1335
+ }, {
1336
+ default: withCtx(() => [
1337
+ createTextVNode(" Change ")
1338
+ ]),
1339
+ _: 1
1340
+ }, 8, ["loading", "onClick"]),
1341
+ createVNode(_component_UButton, {
1342
+ size: "xs",
1343
+ color: "neutral",
1344
+ variant: "ghost",
1345
+ icon: "i-lucide-unlink",
1346
+ disabled: unref(busy),
1347
+ onClick: unref(unlink)
1348
+ }, {
1349
+ default: withCtx(() => [
1350
+ createTextVNode(" Unlink ")
1351
+ ]),
1352
+ _: 1
1353
+ }, 8, ["disabled", "onClick"])
1354
+ ])
1355
+ ])) : (openBlock(), createBlock("div", {
1356
+ key: 1,
1357
+ class: "flex items-center justify-between gap-3"
1358
+ }, [
1359
+ createVNode("p", { class: "text-sm text-muted" }, "No folder linked yet."),
1360
+ createVNode(_component_UButton, {
1361
+ size: "xs",
1362
+ icon: "i-lucide-folder-plus",
1363
+ loading: unref(busy),
1364
+ onClick: unref(pickAndLink)
1365
+ }, {
1366
+ default: withCtx(() => [
1367
+ createTextVNode("Choose folder…")
1368
+ ]),
1369
+ _: 1
1370
+ }, 8, ["loading", "onClick"])
1371
+ ]))
1372
+ ];
1373
+ }
1374
+ }),
1375
+ _: 1
1376
+ }, _parent));
1377
+ } else {
1378
+ _push(`<!---->`);
1379
+ }
1380
+ };
1381
+ }
1382
+ });
1383
+ const _sfc_setup$b = _sfc_main$b.setup;
1384
+ _sfc_main$b.setup = (props, ctx) => {
1385
+ const ssrContext = useSSRContext();
1386
+ (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/desktop/DesktopProjectLinkCard.vue");
1387
+ return _sfc_setup$b ? _sfc_setup$b(props, ctx) : void 0;
1388
+ };
1389
+ const __nuxt_component_7$1 = Object.assign(_sfc_main$b, { __name: "DesktopProjectLinkCard" });
1390
+ const _sfc_main$a = /* @__PURE__ */ defineComponent({
1171
1391
  __name: "TestRunsChart",
1172
1392
  __ssrInlineRender: true,
1173
1393
  props: {
@@ -1227,8 +1447,8 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
1227
1447
  ];
1228
1448
  return (_ctx, _push, _parent, _attrs) => {
1229
1449
  const _component_ChartMarkerTooltip = __nuxt_component_0$1;
1230
- const _component_EmptyState = __nuxt_component_8;
1231
- const _component_ChartLegend = __nuxt_component_1$2;
1450
+ const _component_EmptyState = __nuxt_component_4$1;
1451
+ const _component_ChartLegend = __nuxt_component_1$3;
1232
1452
  _push(`<div${ssrRenderAttrs(mergeProps({ class: "w-full relative" }, _attrs))}>`);
1233
1453
  if (unref(chartData).length > 0) {
1234
1454
  _push(`<div>`);
@@ -1316,14 +1536,14 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
1316
1536
  };
1317
1537
  }
1318
1538
  });
1319
- const _sfc_setup$9 = _sfc_main$9.setup;
1320
- _sfc_main$9.setup = (props, ctx) => {
1539
+ const _sfc_setup$a = _sfc_main$a.setup;
1540
+ _sfc_main$a.setup = (props, ctx) => {
1321
1541
  const ssrContext = useSSRContext();
1322
1542
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/project/TestRunsChart.vue");
1323
- return _sfc_setup$9 ? _sfc_setup$9(props, ctx) : void 0;
1543
+ return _sfc_setup$a ? _sfc_setup$a(props, ctx) : void 0;
1324
1544
  };
1325
- const __nuxt_component_10 = Object.assign(_sfc_main$9, { __name: "TestRunsChart" });
1326
- const _sfc_main$8 = /* @__PURE__ */ defineComponent({
1545
+ const __nuxt_component_11 = Object.assign(_sfc_main$a, { __name: "TestRunsChart" });
1546
+ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
1327
1547
  __name: "ClusterMergeSuggestions",
1328
1548
  __ssrInlineRender: true,
1329
1549
  props: {
@@ -1359,7 +1579,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
1359
1579
  }
1360
1580
  const pct = (s) => s == null ? "" : `${Math.round(s * 100)}% similar`;
1361
1581
  return (_ctx, _push, _parent, _attrs) => {
1362
- const _component_SectionCard = __nuxt_component_11;
1582
+ const _component_SectionCard = __nuxt_component_11$1;
1363
1583
  const _component_UBadge = _sfc_main$7$1;
1364
1584
  const _component_UButton = _sfc_main$k;
1365
1585
  if (unref(suggestions).length) {
@@ -1536,14 +1756,14 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
1536
1756
  };
1537
1757
  }
1538
1758
  });
1539
- const _sfc_setup$8 = _sfc_main$8.setup;
1540
- _sfc_main$8.setup = (props, ctx) => {
1759
+ const _sfc_setup$9 = _sfc_main$9.setup;
1760
+ _sfc_main$9.setup = (props, ctx) => {
1541
1761
  const ssrContext = useSSRContext();
1542
1762
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/project/ClusterMergeSuggestions.vue");
1543
- return _sfc_setup$8 ? _sfc_setup$8(props, ctx) : void 0;
1763
+ return _sfc_setup$9 ? _sfc_setup$9(props, ctx) : void 0;
1544
1764
  };
1545
- const __nuxt_component_24 = Object.assign(_sfc_main$8, { __name: "ClusterMergeSuggestions" });
1546
- const _sfc_main$7 = /* @__PURE__ */ defineComponent({
1765
+ const __nuxt_component_27 = Object.assign(_sfc_main$9, { __name: "ClusterMergeSuggestions" });
1766
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
1547
1767
  __name: "FailureClustersList",
1548
1768
  __ssrInlineRender: true,
1549
1769
  props: {
@@ -1564,6 +1784,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
1564
1784
  "$f7pDU1t-lL"
1565
1785
  /* nuxt-injected */
1566
1786
  )), __temp = await __temp, __restore(), __temp);
1787
+ const resolutionOf = (cluster) => fixVerificationBadge(cluster.fixVerification);
1567
1788
  const columns = [
1568
1789
  { accessorKey: "signature", header: createSortHeader("Signature") },
1569
1790
  { accessorKey: "errorType", header: createSortHeader("Type") },
@@ -1575,16 +1796,17 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
1575
1796
  { id: "actions", header: "Actions" }
1576
1797
  ];
1577
1798
  return (_ctx, _push, _parent, _attrs) => {
1578
- const _component_UCard = _sfc_main$d;
1799
+ const _component_UCard = _sfc_main$f;
1579
1800
  const _component_HelpHint = __nuxt_component_2;
1580
- const _component_USelect = _sfc_main$b;
1581
- const _component_TableScroller = __nuxt_component_3$1;
1582
- const _component_UTable = _sfc_main$g;
1801
+ const _component_USelect = _sfc_main$d;
1802
+ const _component_TableScroller = __nuxt_component_3$2;
1803
+ const _component_UTable = _sfc_main$i;
1583
1804
  const _component_NuxtLink = __nuxt_component_12;
1584
1805
  const _component_UBadge = _sfc_main$7$1;
1806
+ const _component_UTooltip = _sfc_main$l;
1585
1807
  const _component_UIcon = _sfc_main$p;
1586
1808
  const _component_UButton = _sfc_main$k;
1587
- const _component_EmptyState = __nuxt_component_8;
1809
+ const _component_EmptyState = __nuxt_component_4$1;
1588
1810
  _push(ssrRenderComponent(_component_UCard, _attrs, {
1589
1811
  header: withCtx((_, _push2, _parent2, _scopeId) => {
1590
1812
  if (_push2) {
@@ -1738,6 +1960,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
1738
1960
  }),
1739
1961
  "status-cell": withCtx(({ row }, _push4, _parent4, _scopeId3) => {
1740
1962
  if (_push4) {
1963
+ _push4(`<div class="space-y-1"${_scopeId3}>`);
1741
1964
  _push4(ssrRenderComponent(_component_UBadge, {
1742
1965
  color: ("clusterStatusColor" in _ctx ? _ctx.clusterStatusColor : unref(clusterStatusColor))(row.original.status),
1743
1966
  variant: "subtle",
@@ -1754,18 +1977,100 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
1754
1977
  }),
1755
1978
  _: 2
1756
1979
  }, _parent4, _scopeId3));
1757
- } else {
1758
- return [
1759
- createVNode(_component_UBadge, {
1760
- color: ("clusterStatusColor" in _ctx ? _ctx.clusterStatusColor : unref(clusterStatusColor))(row.original.status),
1761
- variant: "subtle",
1762
- size: "sm"
1980
+ if (resolutionOf(row.original)) {
1981
+ _push4(ssrRenderComponent(_component_UTooltip, {
1982
+ text: resolutionOf(row.original).hint
1763
1983
  }, {
1764
- default: withCtx(() => [
1765
- createTextVNode(toDisplayString(row.original.status), 1)
1766
- ]),
1984
+ default: withCtx((_3, _push5, _parent5, _scopeId4) => {
1985
+ if (_push5) {
1986
+ _push5(ssrRenderComponent(_component_UBadge, {
1987
+ color: resolutionOf(row.original).color,
1988
+ variant: "subtle",
1989
+ size: "sm",
1990
+ class: "gap-1"
1991
+ }, {
1992
+ default: withCtx((_4, _push6, _parent6, _scopeId5) => {
1993
+ if (_push6) {
1994
+ _push6(ssrRenderComponent(_component_UIcon, {
1995
+ name: resolutionOf(row.original).icon,
1996
+ class: "size-3"
1997
+ }, null, _parent6, _scopeId5));
1998
+ _push6(` ${ssrInterpolate(resolutionOf(row.original).label)}`);
1999
+ } else {
2000
+ return [
2001
+ createVNode(_component_UIcon, {
2002
+ name: resolutionOf(row.original).icon,
2003
+ class: "size-3"
2004
+ }, null, 8, ["name"]),
2005
+ createTextVNode(" " + toDisplayString(resolutionOf(row.original).label), 1)
2006
+ ];
2007
+ }
2008
+ }),
2009
+ _: 2
2010
+ }, _parent5, _scopeId4));
2011
+ } else {
2012
+ return [
2013
+ createVNode(_component_UBadge, {
2014
+ color: resolutionOf(row.original).color,
2015
+ variant: "subtle",
2016
+ size: "sm",
2017
+ class: "gap-1"
2018
+ }, {
2019
+ default: withCtx(() => [
2020
+ createVNode(_component_UIcon, {
2021
+ name: resolutionOf(row.original).icon,
2022
+ class: "size-3"
2023
+ }, null, 8, ["name"]),
2024
+ createTextVNode(" " + toDisplayString(resolutionOf(row.original).label), 1)
2025
+ ]),
2026
+ _: 2
2027
+ }, 1032, ["color"])
2028
+ ];
2029
+ }
2030
+ }),
1767
2031
  _: 2
1768
- }, 1032, ["color"])
2032
+ }, _parent4, _scopeId3));
2033
+ } else {
2034
+ _push4(`<!---->`);
2035
+ }
2036
+ _push4(`</div>`);
2037
+ } else {
2038
+ return [
2039
+ createVNode("div", { class: "space-y-1" }, [
2040
+ createVNode(_component_UBadge, {
2041
+ color: ("clusterStatusColor" in _ctx ? _ctx.clusterStatusColor : unref(clusterStatusColor))(row.original.status),
2042
+ variant: "subtle",
2043
+ size: "sm"
2044
+ }, {
2045
+ default: withCtx(() => [
2046
+ createTextVNode(toDisplayString(row.original.status), 1)
2047
+ ]),
2048
+ _: 2
2049
+ }, 1032, ["color"]),
2050
+ resolutionOf(row.original) ? (openBlock(), createBlock(_component_UTooltip, {
2051
+ key: 0,
2052
+ text: resolutionOf(row.original).hint
2053
+ }, {
2054
+ default: withCtx(() => [
2055
+ createVNode(_component_UBadge, {
2056
+ color: resolutionOf(row.original).color,
2057
+ variant: "subtle",
2058
+ size: "sm",
2059
+ class: "gap-1"
2060
+ }, {
2061
+ default: withCtx(() => [
2062
+ createVNode(_component_UIcon, {
2063
+ name: resolutionOf(row.original).icon,
2064
+ class: "size-3"
2065
+ }, null, 8, ["name"]),
2066
+ createTextVNode(" " + toDisplayString(resolutionOf(row.original).label), 1)
2067
+ ]),
2068
+ _: 2
2069
+ }, 1032, ["color"])
2070
+ ]),
2071
+ _: 2
2072
+ }, 1032, ["text"])) : createCommentVNode("", true)
2073
+ ])
1769
2074
  ];
1770
2075
  }
1771
2076
  }),
@@ -1972,16 +2277,41 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
1972
2277
  }, "—"))
1973
2278
  ]),
1974
2279
  "status-cell": withCtx(({ row }) => [
1975
- createVNode(_component_UBadge, {
1976
- color: ("clusterStatusColor" in _ctx ? _ctx.clusterStatusColor : unref(clusterStatusColor))(row.original.status),
1977
- variant: "subtle",
1978
- size: "sm"
1979
- }, {
1980
- default: withCtx(() => [
1981
- createTextVNode(toDisplayString(row.original.status), 1)
1982
- ]),
1983
- _: 2
1984
- }, 1032, ["color"])
2280
+ createVNode("div", { class: "space-y-1" }, [
2281
+ createVNode(_component_UBadge, {
2282
+ color: ("clusterStatusColor" in _ctx ? _ctx.clusterStatusColor : unref(clusterStatusColor))(row.original.status),
2283
+ variant: "subtle",
2284
+ size: "sm"
2285
+ }, {
2286
+ default: withCtx(() => [
2287
+ createTextVNode(toDisplayString(row.original.status), 1)
2288
+ ]),
2289
+ _: 2
2290
+ }, 1032, ["color"]),
2291
+ resolutionOf(row.original) ? (openBlock(), createBlock(_component_UTooltip, {
2292
+ key: 0,
2293
+ text: resolutionOf(row.original).hint
2294
+ }, {
2295
+ default: withCtx(() => [
2296
+ createVNode(_component_UBadge, {
2297
+ color: resolutionOf(row.original).color,
2298
+ variant: "subtle",
2299
+ size: "sm",
2300
+ class: "gap-1"
2301
+ }, {
2302
+ default: withCtx(() => [
2303
+ createVNode(_component_UIcon, {
2304
+ name: resolutionOf(row.original).icon,
2305
+ class: "size-3"
2306
+ }, null, 8, ["name"]),
2307
+ createTextVNode(" " + toDisplayString(resolutionOf(row.original).label), 1)
2308
+ ]),
2309
+ _: 2
2310
+ }, 1032, ["color"])
2311
+ ]),
2312
+ _: 2
2313
+ }, 1032, ["text"])) : createCommentVNode("", true)
2314
+ ])
1985
2315
  ]),
1986
2316
  "affectedTests-cell": withCtx(({ row }) => [
1987
2317
  createVNode("span", { class: "text-sm tabular-nums" }, toDisplayString(row.original.affectedTests), 1)
@@ -2108,16 +2438,41 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
2108
2438
  }, "—"))
2109
2439
  ]),
2110
2440
  "status-cell": withCtx(({ row }) => [
2111
- createVNode(_component_UBadge, {
2112
- color: ("clusterStatusColor" in _ctx ? _ctx.clusterStatusColor : unref(clusterStatusColor))(row.original.status),
2113
- variant: "subtle",
2114
- size: "sm"
2115
- }, {
2116
- default: withCtx(() => [
2117
- createTextVNode(toDisplayString(row.original.status), 1)
2118
- ]),
2119
- _: 2
2120
- }, 1032, ["color"])
2441
+ createVNode("div", { class: "space-y-1" }, [
2442
+ createVNode(_component_UBadge, {
2443
+ color: ("clusterStatusColor" in _ctx ? _ctx.clusterStatusColor : unref(clusterStatusColor))(row.original.status),
2444
+ variant: "subtle",
2445
+ size: "sm"
2446
+ }, {
2447
+ default: withCtx(() => [
2448
+ createTextVNode(toDisplayString(row.original.status), 1)
2449
+ ]),
2450
+ _: 2
2451
+ }, 1032, ["color"]),
2452
+ resolutionOf(row.original) ? (openBlock(), createBlock(_component_UTooltip, {
2453
+ key: 0,
2454
+ text: resolutionOf(row.original).hint
2455
+ }, {
2456
+ default: withCtx(() => [
2457
+ createVNode(_component_UBadge, {
2458
+ color: resolutionOf(row.original).color,
2459
+ variant: "subtle",
2460
+ size: "sm",
2461
+ class: "gap-1"
2462
+ }, {
2463
+ default: withCtx(() => [
2464
+ createVNode(_component_UIcon, {
2465
+ name: resolutionOf(row.original).icon,
2466
+ class: "size-3"
2467
+ }, null, 8, ["name"]),
2468
+ createTextVNode(" " + toDisplayString(resolutionOf(row.original).label), 1)
2469
+ ]),
2470
+ _: 2
2471
+ }, 1032, ["color"])
2472
+ ]),
2473
+ _: 2
2474
+ }, 1032, ["text"])) : createCommentVNode("", true)
2475
+ ])
2121
2476
  ]),
2122
2477
  "affectedTests-cell": withCtx(({ row }) => [
2123
2478
  createVNode("span", { class: "text-sm tabular-nums" }, toDisplayString(row.original.affectedTests), 1)
@@ -2197,14 +2552,14 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
2197
2552
  };
2198
2553
  }
2199
2554
  });
2200
- const _sfc_setup$7 = _sfc_main$7.setup;
2201
- _sfc_main$7.setup = (props, ctx) => {
2555
+ const _sfc_setup$8 = _sfc_main$8.setup;
2556
+ _sfc_main$8.setup = (props, ctx) => {
2202
2557
  const ssrContext = useSSRContext();
2203
2558
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/project/FailureClustersList.vue");
2204
- return _sfc_setup$7 ? _sfc_setup$7(props, ctx) : void 0;
2559
+ return _sfc_setup$8 ? _sfc_setup$8(props, ctx) : void 0;
2205
2560
  };
2206
- const __nuxt_component_25 = Object.assign(_sfc_main$7, { __name: "FailureClustersList" });
2207
- const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2561
+ const __nuxt_component_28 = Object.assign(_sfc_main$8, { __name: "FailureClustersList" });
2562
+ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
2208
2563
  __name: "FlakyTestsList",
2209
2564
  __ssrInlineRender: true,
2210
2565
  props: {
@@ -2277,15 +2632,16 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2277
2632
  { id: "actions", header: "Actions" }
2278
2633
  ];
2279
2634
  return (_ctx, _push, _parent, _attrs) => {
2280
- const _component_UCard = _sfc_main$d;
2635
+ const _component_UCard = _sfc_main$f;
2281
2636
  const _component_HelpHint = __nuxt_component_2;
2282
2637
  const _component_UBadge = _sfc_main$7$1;
2283
2638
  const _component_UIcon = _sfc_main$p;
2284
2639
  const _component_UButton = _sfc_main$k;
2285
- const _component_USelect = _sfc_main$b;
2286
- const _component_TableScroller = __nuxt_component_3$1;
2287
- const _component_UTable = _sfc_main$g;
2640
+ const _component_USelect = _sfc_main$d;
2641
+ const _component_TableScroller = __nuxt_component_3$2;
2642
+ const _component_UTable = _sfc_main$i;
2288
2643
  const _component_NuxtLink = __nuxt_component_12;
2644
+ const _component_TestMetaBadges = __nuxt_component_2$2;
2289
2645
  const _component_OpenInIdeLink = __nuxt_component_1$1;
2290
2646
  const _component_TagBadge = __nuxt_component_4;
2291
2647
  _push(ssrRenderComponent(_component_UCard, _attrs, {
@@ -2456,6 +2812,11 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2456
2812
  }),
2457
2813
  _: 2
2458
2814
  }, _parent4, _scopeId3));
2815
+ _push4(ssrRenderComponent(_component_TestMetaBadges, {
2816
+ tags: row.original.tags,
2817
+ meta: { owner: row.original.owner ?? void 0, priority: ("toTestPriority" in _ctx ? _ctx.toTestPriority : unref(toTestPriority))(row.original.priority) },
2818
+ "max-tags": 3
2819
+ }, null, _parent4, _scopeId3));
2459
2820
  _push4(ssrRenderComponent(_component_OpenInIdeLink, {
2460
2821
  "file-path": row.original.filePath,
2461
2822
  "project-key": __props.projectId,
@@ -2476,6 +2837,11 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2476
2837
  ]),
2477
2838
  _: 2
2478
2839
  }, 1032, ["to", "title"]),
2840
+ createVNode(_component_TestMetaBadges, {
2841
+ tags: row.original.tags,
2842
+ meta: { owner: row.original.owner ?? void 0, priority: ("toTestPriority" in _ctx ? _ctx.toTestPriority : unref(toTestPriority))(row.original.priority) },
2843
+ "max-tags": 3
2844
+ }, null, 8, ["tags", "meta"]),
2479
2845
  createVNode(_component_OpenInIdeLink, {
2480
2846
  "file-path": row.original.filePath,
2481
2847
  "project-key": __props.projectId,
@@ -2739,6 +3105,11 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2739
3105
  ]),
2740
3106
  _: 2
2741
3107
  }, 1032, ["to", "title"]),
3108
+ createVNode(_component_TestMetaBadges, {
3109
+ tags: row.original.tags,
3110
+ meta: { owner: row.original.owner ?? void 0, priority: ("toTestPriority" in _ctx ? _ctx.toTestPriority : unref(toTestPriority))(row.original.priority) },
3111
+ "max-tags": 3
3112
+ }, null, 8, ["tags", "meta"]),
2742
3113
  createVNode(_component_OpenInIdeLink, {
2743
3114
  "file-path": row.original.filePath,
2744
3115
  "project-key": __props.projectId,
@@ -2881,6 +3252,11 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2881
3252
  ]),
2882
3253
  _: 2
2883
3254
  }, 1032, ["to", "title"]),
3255
+ createVNode(_component_TestMetaBadges, {
3256
+ tags: row.original.tags,
3257
+ meta: { owner: row.original.owner ?? void 0, priority: ("toTestPriority" in _ctx ? _ctx.toTestPriority : unref(toTestPriority))(row.original.priority) },
3258
+ "max-tags": 3
3259
+ }, null, 8, ["tags", "meta"]),
2884
3260
  createVNode(_component_OpenInIdeLink, {
2885
3261
  "file-path": row.original.filePath,
2886
3262
  "project-key": __props.projectId,
@@ -2999,14 +3375,14 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2999
3375
  };
3000
3376
  }
3001
3377
  });
3002
- const _sfc_setup$6 = _sfc_main$6.setup;
3003
- _sfc_main$6.setup = (props, ctx) => {
3378
+ const _sfc_setup$7 = _sfc_main$7.setup;
3379
+ _sfc_main$7.setup = (props, ctx) => {
3004
3380
  const ssrContext = useSSRContext();
3005
3381
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/project/FlakyTestsList.vue");
3006
- return _sfc_setup$6 ? _sfc_setup$6(props, ctx) : void 0;
3382
+ return _sfc_setup$7 ? _sfc_setup$7(props, ctx) : void 0;
3007
3383
  };
3008
- const __nuxt_component_26 = Object.assign(_sfc_main$6, { __name: "FlakyTestsList" });
3009
- const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3384
+ const __nuxt_component_29 = Object.assign(_sfc_main$7, { __name: "FlakyTestsList" });
3385
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
3010
3386
  __name: "PerformanceTrendChart",
3011
3387
  __ssrInlineRender: true,
3012
3388
  props: {
@@ -3062,8 +3438,8 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3062
3438
  ];
3063
3439
  return (_ctx, _push, _parent, _attrs) => {
3064
3440
  const _component_ChartMarkerTooltip = __nuxt_component_0$1;
3065
- const _component_EmptyState = __nuxt_component_8;
3066
- const _component_ChartLegend = __nuxt_component_1$2;
3441
+ const _component_EmptyState = __nuxt_component_4$1;
3442
+ const _component_ChartLegend = __nuxt_component_1$3;
3067
3443
  _push(`<div${ssrRenderAttrs(mergeProps({ class: "w-full relative" }, _attrs))}>`);
3068
3444
  if (unref(chartData).length > 0) {
3069
3445
  _push(`<div>`);
@@ -3147,14 +3523,14 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3147
3523
  };
3148
3524
  }
3149
3525
  });
3150
- const _sfc_setup$5 = _sfc_main$5.setup;
3151
- _sfc_main$5.setup = (props, ctx) => {
3526
+ const _sfc_setup$6 = _sfc_main$6.setup;
3527
+ _sfc_main$6.setup = (props, ctx) => {
3152
3528
  const ssrContext = useSSRContext();
3153
3529
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/project/PerformanceTrendChart.vue");
3154
- return _sfc_setup$5 ? _sfc_setup$5(props, ctx) : void 0;
3530
+ return _sfc_setup$6 ? _sfc_setup$6(props, ctx) : void 0;
3155
3531
  };
3156
- const __nuxt_component_29 = Object.assign(_sfc_main$5, { __name: "PerformanceTrendChart" });
3157
- const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3532
+ const __nuxt_component_32 = Object.assign(_sfc_main$6, { __name: "PerformanceTrendChart" });
3533
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
3158
3534
  __name: "TimeoutOpportunitiesTable",
3159
3535
  __ssrInlineRender: true,
3160
3536
  props: {
@@ -3186,11 +3562,11 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3186
3562
  { accessorKey: "runCount", header: createSortHeader("Runs") }
3187
3563
  ];
3188
3564
  return (_ctx, _push, _parent, _attrs) => {
3189
- const _component_UCard = _sfc_main$d;
3565
+ const _component_UCard = _sfc_main$f;
3190
3566
  const _component_LoadingState = __nuxt_component_1;
3191
- const _component_EmptyState = __nuxt_component_8;
3192
- const _component_TableScroller = __nuxt_component_3$1;
3193
- const _component_UTable = _sfc_main$g;
3567
+ const _component_EmptyState = __nuxt_component_4$1;
3568
+ const _component_TableScroller = __nuxt_component_3$2;
3569
+ const _component_UTable = _sfc_main$i;
3194
3570
  const _component_NuxtLink = __nuxt_component_12;
3195
3571
  const _component_OpenInIdeLink = __nuxt_component_1$1;
3196
3572
  const _component_UBadge = _sfc_main$7$1;
@@ -3555,14 +3931,14 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3555
3931
  };
3556
3932
  }
3557
3933
  });
3558
- const _sfc_setup$4 = _sfc_main$4.setup;
3559
- _sfc_main$4.setup = (props, ctx) => {
3934
+ const _sfc_setup$5 = _sfc_main$5.setup;
3935
+ _sfc_main$5.setup = (props, ctx) => {
3560
3936
  const ssrContext = useSSRContext();
3561
3937
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/project/TimeoutOpportunitiesTable.vue");
3562
- return _sfc_setup$4 ? _sfc_setup$4(props, ctx) : void 0;
3938
+ return _sfc_setup$5 ? _sfc_setup$5(props, ctx) : void 0;
3563
3939
  };
3564
- const __nuxt_component_31 = Object.assign(_sfc_main$4, { __name: "TimeoutOpportunitiesTable" });
3565
- const _sfc_main$3 = /* @__PURE__ */ defineComponent({
3940
+ const __nuxt_component_34 = Object.assign(_sfc_main$5, { __name: "TimeoutOpportunitiesTable" });
3941
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
3566
3942
  __name: "SpecHealthTable",
3567
3943
  __ssrInlineRender: true,
3568
3944
  props: {
@@ -3612,13 +3988,13 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
3612
3988
  { accessorKey: "avgDuration", header: createSortHeader("Avg time") }
3613
3989
  ];
3614
3990
  return (_ctx, _push, _parent, _attrs) => {
3615
- const _component_UCard = _sfc_main$d;
3991
+ const _component_UCard = _sfc_main$f;
3616
3992
  const _component_HelpHint = __nuxt_component_2;
3617
- const _component_USelect = _sfc_main$b;
3993
+ const _component_USelect = _sfc_main$d;
3618
3994
  const _component_LoadingState = __nuxt_component_1;
3619
- const _component_EmptyState = __nuxt_component_8;
3620
- const _component_TableScroller = __nuxt_component_3$1;
3621
- const _component_UTable = _sfc_main$g;
3995
+ const _component_EmptyState = __nuxt_component_4$1;
3996
+ const _component_TableScroller = __nuxt_component_3$2;
3997
+ const _component_UTable = _sfc_main$i;
3622
3998
  const _component_NuxtLink = __nuxt_component_12;
3623
3999
  _push(ssrRenderComponent(_component_UCard, _attrs, {
3624
4000
  header: withCtx((_, _push2, _parent2, _scopeId) => {
@@ -3814,78 +4190,688 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
3814
4190
  _: 1
3815
4191
  }, _parent2, _scopeId));
3816
4192
  }
3817
- } else {
3818
- return [
3819
- unref(pending) ? (openBlock(), createBlock(_component_LoadingState, { key: 0 })) : unref(specs).length === 0 ? (openBlock(), createBlock(_component_EmptyState, {
3820
- key: 1,
3821
- text: "No data",
3822
- description: "No spec health data available for the selected period."
3823
- })) : (openBlock(), createBlock(_component_TableScroller, {
3824
- key: 2,
3825
- "min-width": "46rem",
3826
- bleed: false
3827
- }, {
3828
- default: withCtx(() => [
3829
- createVNode(_component_UTable, {
3830
- data: unref(specs),
3831
- columns,
3832
- sticky: "",
3833
- class: "max-h-[32rem]"
3834
- }, {
3835
- "prefix-cell": withCtx(({ row }) => [
3836
- createVNode(_component_NuxtLink, {
3837
- to: `/projects/${__props.projectId}/test-cases?file=${encodeURIComponent(row.original.prefix)}`,
3838
- class: "flex items-center gap-2 min-w-0 text-primary hover:underline",
3839
- title: row.original.prefix
3840
- }, {
3841
- default: withCtx(() => [
3842
- createVNode("span", {
3843
- class: ["inline-block size-3 rounded shrink-0", passRateColor(row.original.passRate)]
3844
- }, null, 2),
3845
- createVNode("span", { class: "truncate font-mono text-xs" }, toDisplayString(row.original.prefix), 1)
3846
- ]),
3847
- _: 2
3848
- }, 1032, ["to", "title"])
3849
- ]),
3850
- "passRate-cell": withCtx(({ row }) => [
3851
- createVNode("span", {
3852
- class: ["font-medium tabular-nums", passRateTextColor(row.original.passRate)]
3853
- }, toDisplayString(passRateLabel(row.original.passRate)), 3)
3854
- ]),
3855
- "flakyRate-cell": withCtx(({ row }) => [
3856
- createVNode("span", { class: "tabular-nums" }, toDisplayString(Math.round(row.original.flakyRate * 100)) + "%", 1)
3857
- ]),
3858
- "failureCount-cell": withCtx(({ row }) => [
3859
- createVNode("span", {
3860
- class: ["tabular-nums", row.original.failureCount > 0 ? "text-red-600 dark:text-red-400" : ""]
3861
- }, toDisplayString(row.original.failureCount), 3)
3862
- ]),
3863
- "testCount-cell": withCtx(({ row }) => [
3864
- createVNode("span", { class: "tabular-nums text-gray-500" }, toDisplayString(row.original.testCount), 1)
3865
- ]),
3866
- "avgDuration-cell": withCtx(({ row }) => [
3867
- createVNode("span", { class: "tabular-nums text-gray-500" }, toDisplayString(formatMs(row.original.avgDuration)), 1)
3868
- ]),
3869
- _: 1
3870
- }, 8, ["data"])
3871
- ]),
3872
- _: 1
3873
- }))
3874
- ];
3875
- }
3876
- }),
3877
- _: 1
3878
- }, _parent));
4193
+ } else {
4194
+ return [
4195
+ unref(pending) ? (openBlock(), createBlock(_component_LoadingState, { key: 0 })) : unref(specs).length === 0 ? (openBlock(), createBlock(_component_EmptyState, {
4196
+ key: 1,
4197
+ text: "No data",
4198
+ description: "No spec health data available for the selected period."
4199
+ })) : (openBlock(), createBlock(_component_TableScroller, {
4200
+ key: 2,
4201
+ "min-width": "46rem",
4202
+ bleed: false
4203
+ }, {
4204
+ default: withCtx(() => [
4205
+ createVNode(_component_UTable, {
4206
+ data: unref(specs),
4207
+ columns,
4208
+ sticky: "",
4209
+ class: "max-h-[32rem]"
4210
+ }, {
4211
+ "prefix-cell": withCtx(({ row }) => [
4212
+ createVNode(_component_NuxtLink, {
4213
+ to: `/projects/${__props.projectId}/test-cases?file=${encodeURIComponent(row.original.prefix)}`,
4214
+ class: "flex items-center gap-2 min-w-0 text-primary hover:underline",
4215
+ title: row.original.prefix
4216
+ }, {
4217
+ default: withCtx(() => [
4218
+ createVNode("span", {
4219
+ class: ["inline-block size-3 rounded shrink-0", passRateColor(row.original.passRate)]
4220
+ }, null, 2),
4221
+ createVNode("span", { class: "truncate font-mono text-xs" }, toDisplayString(row.original.prefix), 1)
4222
+ ]),
4223
+ _: 2
4224
+ }, 1032, ["to", "title"])
4225
+ ]),
4226
+ "passRate-cell": withCtx(({ row }) => [
4227
+ createVNode("span", {
4228
+ class: ["font-medium tabular-nums", passRateTextColor(row.original.passRate)]
4229
+ }, toDisplayString(passRateLabel(row.original.passRate)), 3)
4230
+ ]),
4231
+ "flakyRate-cell": withCtx(({ row }) => [
4232
+ createVNode("span", { class: "tabular-nums" }, toDisplayString(Math.round(row.original.flakyRate * 100)) + "%", 1)
4233
+ ]),
4234
+ "failureCount-cell": withCtx(({ row }) => [
4235
+ createVNode("span", {
4236
+ class: ["tabular-nums", row.original.failureCount > 0 ? "text-red-600 dark:text-red-400" : ""]
4237
+ }, toDisplayString(row.original.failureCount), 3)
4238
+ ]),
4239
+ "testCount-cell": withCtx(({ row }) => [
4240
+ createVNode("span", { class: "tabular-nums text-gray-500" }, toDisplayString(row.original.testCount), 1)
4241
+ ]),
4242
+ "avgDuration-cell": withCtx(({ row }) => [
4243
+ createVNode("span", { class: "tabular-nums text-gray-500" }, toDisplayString(formatMs(row.original.avgDuration)), 1)
4244
+ ]),
4245
+ _: 1
4246
+ }, 8, ["data"])
4247
+ ]),
4248
+ _: 1
4249
+ }))
4250
+ ];
4251
+ }
4252
+ }),
4253
+ _: 1
4254
+ }, _parent));
4255
+ };
4256
+ }
4257
+ });
4258
+ const _sfc_setup$4 = _sfc_main$4.setup;
4259
+ _sfc_main$4.setup = (props, ctx) => {
4260
+ const ssrContext = useSSRContext();
4261
+ (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/project/SpecHealthTable.vue");
4262
+ return _sfc_setup$4 ? _sfc_setup$4(props, ctx) : void 0;
4263
+ };
4264
+ const __nuxt_component_37 = Object.assign(_sfc_main$4, { __name: "SpecHealthTable" });
4265
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
4266
+ __name: "QuarantineTable",
4267
+ __ssrInlineRender: true,
4268
+ props: {
4269
+ projectId: {},
4270
+ projectName: {}
4271
+ },
4272
+ async setup(__props) {
4273
+ let __temp, __restore;
4274
+ const props = __props;
4275
+ const toast = useToast();
4276
+ const busy = ref(null);
4277
+ const { data, status, error, refresh } = ([__temp, __restore] = withAsyncContext(() => useFetch(
4278
+ () => `/api/projects/${props.projectId}/quarantine`,
4279
+ "$9P2J7SsiYf"
4280
+ /* nuxt-injected */
4281
+ )), __temp = await __temp, __restore(), __temp);
4282
+ function formatAge(ms) {
4283
+ const hours = Math.round(ms / 36e5);
4284
+ if (hours < 48) return `${Math.max(1, hours)}h`;
4285
+ return `${Math.round(hours / 24)}d`;
4286
+ }
4287
+ async function quarantine(testCaseId, reason) {
4288
+ busy.value = testCaseId;
4289
+ try {
4290
+ await $fetch(`/api/projects/${props.projectId}/quarantine`, {
4291
+ method: "POST",
4292
+ body: { testCaseId, reason, source: "proposed" }
4293
+ });
4294
+ toast.add({ title: "Quarantined", color: "success" });
4295
+ await refresh();
4296
+ } catch {
4297
+ toast.add({ title: "Could not quarantine that test", color: "error" });
4298
+ } finally {
4299
+ busy.value = null;
4300
+ }
4301
+ }
4302
+ async function release(testCaseId) {
4303
+ busy.value = testCaseId;
4304
+ try {
4305
+ await $fetch(`/api/projects/${props.projectId}/quarantine/${testCaseId}`, { method: "DELETE" });
4306
+ toast.add({ title: "Released", color: "success" });
4307
+ await refresh();
4308
+ } catch {
4309
+ toast.add({ title: "Could not release that test", color: "error" });
4310
+ } finally {
4311
+ busy.value = null;
4312
+ }
4313
+ }
4314
+ return (_ctx, _push, _parent, _attrs) => {
4315
+ const _component_SectionCard = __nuxt_component_11$1;
4316
+ const _component_LoadingState = __nuxt_component_1;
4317
+ const _component_ErrorState = __nuxt_component_5$2;
4318
+ const _component_StatTileGrid = __nuxt_component_1$2;
4319
+ const _component_StatTile = __nuxt_component_2$1;
4320
+ const _component_EmptyState = __nuxt_component_4$1;
4321
+ const _component_TableScroller = __nuxt_component_3$2;
4322
+ const _component_NuxtLink = __nuxt_component_12;
4323
+ const _component_TestMetaBadges = __nuxt_component_2$2;
4324
+ const _component_OpenInIdeLink = __nuxt_component_1$1;
4325
+ const _component_UBadge = _sfc_main$7$1;
4326
+ const _component_UButton = _sfc_main$k;
4327
+ _push(`<div${ssrRenderAttrs(mergeProps({ class: "space-y-6" }, _attrs))}>`);
4328
+ _push(ssrRenderComponent(_component_SectionCard, {
4329
+ title: "Quarantine",
4330
+ icon: "i-lucide-shield-alert",
4331
+ count: unref(data)?.debt.active,
4332
+ help: "project.quarantine"
4333
+ }, {
4334
+ subtitle: withCtx((_, _push2, _parent2, _scopeId) => {
4335
+ if (_push2) {
4336
+ _push2(` A quarantined test keeps running and keeps reporting — it is excluded from the CI gate&#39;s verdict and nothing else. That is what lets it earn its way back out. `);
4337
+ } else {
4338
+ return [
4339
+ createTextVNode(" A quarantined test keeps running and keeps reporting — it is excluded from the CI gate's verdict and nothing else. That is what lets it earn its way back out. ")
4340
+ ];
4341
+ }
4342
+ }),
4343
+ default: withCtx((_, _push2, _parent2, _scopeId) => {
4344
+ if (_push2) {
4345
+ if (unref(status) === "pending") {
4346
+ _push2(ssrRenderComponent(_component_LoadingState, null, null, _parent2, _scopeId));
4347
+ } else if (unref(error)) {
4348
+ _push2(ssrRenderComponent(_component_ErrorState, {
4349
+ text: String(unref(error))
4350
+ }, null, _parent2, _scopeId));
4351
+ } else {
4352
+ _push2(`<!--[-->`);
4353
+ if (unref(data) && unref(data).debt.active > 0) {
4354
+ _push2(ssrRenderComponent(_component_StatTileGrid, { class: "mb-4" }, {
4355
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
4356
+ if (_push3) {
4357
+ _push3(ssrRenderComponent(_component_StatTile, {
4358
+ label: "Quarantined",
4359
+ value: unref(data).debt.active
4360
+ }, null, _parent3, _scopeId2));
4361
+ _push3(ssrRenderComponent(_component_StatTile, {
4362
+ label: "Ready to release",
4363
+ value: unref(data).debt.readyToRelease,
4364
+ "value-class": unref(data).debt.readyToRelease > 0 ? "text-green-600 dark:text-green-400" : "",
4365
+ hint: "earned their way out"
4366
+ }, null, _parent3, _scopeId2));
4367
+ _push3(ssrRenderComponent(_component_StatTile, {
4368
+ label: "Still failing",
4369
+ value: unref(data).debt.stillFailing,
4370
+ hint: "no passing streak"
4371
+ }, null, _parent3, _scopeId2));
4372
+ _push3(ssrRenderComponent(_component_StatTile, {
4373
+ label: "Oldest",
4374
+ value: formatAge(unref(data).debt.oldestAgeMs),
4375
+ size: "sm"
4376
+ }, null, _parent3, _scopeId2));
4377
+ } else {
4378
+ return [
4379
+ createVNode(_component_StatTile, {
4380
+ label: "Quarantined",
4381
+ value: unref(data).debt.active
4382
+ }, null, 8, ["value"]),
4383
+ createVNode(_component_StatTile, {
4384
+ label: "Ready to release",
4385
+ value: unref(data).debt.readyToRelease,
4386
+ "value-class": unref(data).debt.readyToRelease > 0 ? "text-green-600 dark:text-green-400" : "",
4387
+ hint: "earned their way out"
4388
+ }, null, 8, ["value", "value-class"]),
4389
+ createVNode(_component_StatTile, {
4390
+ label: "Still failing",
4391
+ value: unref(data).debt.stillFailing,
4392
+ hint: "no passing streak"
4393
+ }, null, 8, ["value"]),
4394
+ createVNode(_component_StatTile, {
4395
+ label: "Oldest",
4396
+ value: formatAge(unref(data).debt.oldestAgeMs),
4397
+ size: "sm"
4398
+ }, null, 8, ["value"])
4399
+ ];
4400
+ }
4401
+ }),
4402
+ _: 1
4403
+ }, _parent2, _scopeId));
4404
+ } else {
4405
+ _push2(`<!---->`);
4406
+ }
4407
+ if (!unref(data) || unref(data).entries.length === 0) {
4408
+ _push2(ssrRenderComponent(_component_EmptyState, {
4409
+ icon: "i-lucide-shield-check",
4410
+ text: "Nothing quarantined. Tests you quarantine appear here with their progress back out."
4411
+ }, null, _parent2, _scopeId));
4412
+ } else {
4413
+ _push2(ssrRenderComponent(_component_TableScroller, null, {
4414
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
4415
+ if (_push3) {
4416
+ _push3(`<table class="w-full text-sm"${_scopeId2}><thead class="text-left text-xs text-muted"${_scopeId2}><tr${_scopeId2}><th class="px-3 py-2"${_scopeId2}>Test</th><th class="px-3 py-2"${_scopeId2}>Reason</th><th class="px-3 py-2 whitespace-nowrap"${_scopeId2}>Streak</th><th class="px-3 py-2 whitespace-nowrap"${_scopeId2}>Age</th><th class="px-3 py-2 text-right"${_scopeId2}>Actions</th></tr></thead><tbody${_scopeId2}><!--[-->`);
4417
+ ssrRenderList(unref(data).entries, (entry) => {
4418
+ _push3(`<tr class="border-t border-default"${_scopeId2}><td class="px-3 py-2 min-w-0"${_scopeId2}>`);
4419
+ _push3(ssrRenderComponent(_component_NuxtLink, {
4420
+ to: `/test-cases/${entry.testCaseId}`,
4421
+ class: "text-primary hover:underline font-medium"
4422
+ }, {
4423
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
4424
+ if (_push4) {
4425
+ _push4(`${ssrInterpolate(entry.title)}`);
4426
+ } else {
4427
+ return [
4428
+ createTextVNode(toDisplayString(entry.title), 1)
4429
+ ];
4430
+ }
4431
+ }),
4432
+ _: 2
4433
+ }, _parent3, _scopeId2));
4434
+ _push3(ssrRenderComponent(_component_TestMetaBadges, {
4435
+ tags: entry.tags,
4436
+ meta: { owner: entry.owner ?? void 0 },
4437
+ "max-tags": 3,
4438
+ class: "ml-1"
4439
+ }, null, _parent3, _scopeId2));
4440
+ _push3(`<div class="text-xs text-muted"${_scopeId2}>`);
4441
+ _push3(ssrRenderComponent(_component_OpenInIdeLink, {
4442
+ "file-path": entry.filePath,
4443
+ "project-key": __props.projectId,
4444
+ "project-name": __props.projectName
4445
+ }, null, _parent3, _scopeId2));
4446
+ _push3(`</div></td><td class="px-3 py-2 text-muted"${_scopeId2}>${ssrInterpolate(entry.reason || "—")}</td><td class="px-3 py-2 whitespace-nowrap"${_scopeId2}>`);
4447
+ if (entry.releaseProposed) {
4448
+ _push3(ssrRenderComponent(_component_UBadge, {
4449
+ color: "success",
4450
+ variant: "soft",
4451
+ size: "xs"
4452
+ }, {
4453
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
4454
+ if (_push4) {
4455
+ _push4(`${ssrInterpolate(entry.consecutivePasses)} green — ready `);
4456
+ } else {
4457
+ return [
4458
+ createTextVNode(toDisplayString(entry.consecutivePasses) + " green — ready ", 1)
4459
+ ];
4460
+ }
4461
+ }),
4462
+ _: 2
4463
+ }, _parent3, _scopeId2));
4464
+ } else if (entry.runsSinceQuarantine === 0) {
4465
+ _push3(`<span class="text-xs text-muted"${_scopeId2}>not run yet</span>`);
4466
+ } else {
4467
+ _push3(`<span class="text-xs"${_scopeId2}>${ssrInterpolate(entry.consecutivePasses)} / ${ssrInterpolate(unref(data).releaseAfterConsecutivePasses)}</span>`);
4468
+ }
4469
+ _push3(`</td><td class="px-3 py-2 whitespace-nowrap text-muted"${_scopeId2}>${ssrInterpolate(formatAge(entry.ageMs))}</td><td class="px-3 py-2 text-right"${_scopeId2}>`);
4470
+ _push3(ssrRenderComponent(_component_UButton, {
4471
+ size: "xs",
4472
+ color: entry.releaseProposed ? "primary" : "neutral",
4473
+ variant: "soft",
4474
+ loading: unref(busy) === entry.testCaseId,
4475
+ onClick: ($event) => release(entry.testCaseId)
4476
+ }, {
4477
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
4478
+ if (_push4) {
4479
+ _push4(` Release `);
4480
+ } else {
4481
+ return [
4482
+ createTextVNode(" Release ")
4483
+ ];
4484
+ }
4485
+ }),
4486
+ _: 2
4487
+ }, _parent3, _scopeId2));
4488
+ _push3(`</td></tr>`);
4489
+ });
4490
+ _push3(`<!--]--></tbody></table>`);
4491
+ } else {
4492
+ return [
4493
+ createVNode("table", { class: "w-full text-sm" }, [
4494
+ createVNode("thead", { class: "text-left text-xs text-muted" }, [
4495
+ createVNode("tr", null, [
4496
+ createVNode("th", { class: "px-3 py-2" }, "Test"),
4497
+ createVNode("th", { class: "px-3 py-2" }, "Reason"),
4498
+ createVNode("th", { class: "px-3 py-2 whitespace-nowrap" }, "Streak"),
4499
+ createVNode("th", { class: "px-3 py-2 whitespace-nowrap" }, "Age"),
4500
+ createVNode("th", { class: "px-3 py-2 text-right" }, "Actions")
4501
+ ])
4502
+ ]),
4503
+ createVNode("tbody", null, [
4504
+ (openBlock(true), createBlock(Fragment, null, renderList(unref(data).entries, (entry) => {
4505
+ return openBlock(), createBlock("tr", {
4506
+ key: entry.id,
4507
+ class: "border-t border-default"
4508
+ }, [
4509
+ createVNode("td", { class: "px-3 py-2 min-w-0" }, [
4510
+ createVNode(_component_NuxtLink, {
4511
+ to: `/test-cases/${entry.testCaseId}`,
4512
+ class: "text-primary hover:underline font-medium"
4513
+ }, {
4514
+ default: withCtx(() => [
4515
+ createTextVNode(toDisplayString(entry.title), 1)
4516
+ ]),
4517
+ _: 2
4518
+ }, 1032, ["to"]),
4519
+ createVNode(_component_TestMetaBadges, {
4520
+ tags: entry.tags,
4521
+ meta: { owner: entry.owner ?? void 0 },
4522
+ "max-tags": 3,
4523
+ class: "ml-1"
4524
+ }, null, 8, ["tags", "meta"]),
4525
+ createVNode("div", { class: "text-xs text-muted" }, [
4526
+ createVNode(_component_OpenInIdeLink, {
4527
+ "file-path": entry.filePath,
4528
+ "project-key": __props.projectId,
4529
+ "project-name": __props.projectName
4530
+ }, null, 8, ["file-path", "project-key", "project-name"])
4531
+ ])
4532
+ ]),
4533
+ createVNode("td", { class: "px-3 py-2 text-muted" }, toDisplayString(entry.reason || "—"), 1),
4534
+ createVNode("td", { class: "px-3 py-2 whitespace-nowrap" }, [
4535
+ entry.releaseProposed ? (openBlock(), createBlock(_component_UBadge, {
4536
+ key: 0,
4537
+ color: "success",
4538
+ variant: "soft",
4539
+ size: "xs"
4540
+ }, {
4541
+ default: withCtx(() => [
4542
+ createTextVNode(toDisplayString(entry.consecutivePasses) + " green — ready ", 1)
4543
+ ]),
4544
+ _: 2
4545
+ }, 1024)) : entry.runsSinceQuarantine === 0 ? (openBlock(), createBlock("span", {
4546
+ key: 1,
4547
+ class: "text-xs text-muted"
4548
+ }, "not run yet")) : (openBlock(), createBlock("span", {
4549
+ key: 2,
4550
+ class: "text-xs"
4551
+ }, toDisplayString(entry.consecutivePasses) + " / " + toDisplayString(unref(data).releaseAfterConsecutivePasses), 1))
4552
+ ]),
4553
+ createVNode("td", { class: "px-3 py-2 whitespace-nowrap text-muted" }, toDisplayString(formatAge(entry.ageMs)), 1),
4554
+ createVNode("td", { class: "px-3 py-2 text-right" }, [
4555
+ createVNode(_component_UButton, {
4556
+ size: "xs",
4557
+ color: entry.releaseProposed ? "primary" : "neutral",
4558
+ variant: "soft",
4559
+ loading: unref(busy) === entry.testCaseId,
4560
+ onClick: ($event) => release(entry.testCaseId)
4561
+ }, {
4562
+ default: withCtx(() => [
4563
+ createTextVNode(" Release ")
4564
+ ]),
4565
+ _: 1
4566
+ }, 8, ["color", "loading", "onClick"])
4567
+ ])
4568
+ ]);
4569
+ }), 128))
4570
+ ])
4571
+ ])
4572
+ ];
4573
+ }
4574
+ }),
4575
+ _: 1
4576
+ }, _parent2, _scopeId));
4577
+ }
4578
+ _push2(`<!--]-->`);
4579
+ }
4580
+ } else {
4581
+ return [
4582
+ unref(status) === "pending" ? (openBlock(), createBlock(_component_LoadingState, { key: 0 })) : unref(error) ? (openBlock(), createBlock(_component_ErrorState, {
4583
+ key: 1,
4584
+ text: String(unref(error))
4585
+ }, null, 8, ["text"])) : (openBlock(), createBlock(Fragment, { key: 2 }, [
4586
+ unref(data) && unref(data).debt.active > 0 ? (openBlock(), createBlock(_component_StatTileGrid, {
4587
+ key: 0,
4588
+ class: "mb-4"
4589
+ }, {
4590
+ default: withCtx(() => [
4591
+ createVNode(_component_StatTile, {
4592
+ label: "Quarantined",
4593
+ value: unref(data).debt.active
4594
+ }, null, 8, ["value"]),
4595
+ createVNode(_component_StatTile, {
4596
+ label: "Ready to release",
4597
+ value: unref(data).debt.readyToRelease,
4598
+ "value-class": unref(data).debt.readyToRelease > 0 ? "text-green-600 dark:text-green-400" : "",
4599
+ hint: "earned their way out"
4600
+ }, null, 8, ["value", "value-class"]),
4601
+ createVNode(_component_StatTile, {
4602
+ label: "Still failing",
4603
+ value: unref(data).debt.stillFailing,
4604
+ hint: "no passing streak"
4605
+ }, null, 8, ["value"]),
4606
+ createVNode(_component_StatTile, {
4607
+ label: "Oldest",
4608
+ value: formatAge(unref(data).debt.oldestAgeMs),
4609
+ size: "sm"
4610
+ }, null, 8, ["value"])
4611
+ ]),
4612
+ _: 1
4613
+ })) : createCommentVNode("", true),
4614
+ !unref(data) || unref(data).entries.length === 0 ? (openBlock(), createBlock(_component_EmptyState, {
4615
+ key: 1,
4616
+ icon: "i-lucide-shield-check",
4617
+ text: "Nothing quarantined. Tests you quarantine appear here with their progress back out."
4618
+ })) : (openBlock(), createBlock(_component_TableScroller, { key: 2 }, {
4619
+ default: withCtx(() => [
4620
+ createVNode("table", { class: "w-full text-sm" }, [
4621
+ createVNode("thead", { class: "text-left text-xs text-muted" }, [
4622
+ createVNode("tr", null, [
4623
+ createVNode("th", { class: "px-3 py-2" }, "Test"),
4624
+ createVNode("th", { class: "px-3 py-2" }, "Reason"),
4625
+ createVNode("th", { class: "px-3 py-2 whitespace-nowrap" }, "Streak"),
4626
+ createVNode("th", { class: "px-3 py-2 whitespace-nowrap" }, "Age"),
4627
+ createVNode("th", { class: "px-3 py-2 text-right" }, "Actions")
4628
+ ])
4629
+ ]),
4630
+ createVNode("tbody", null, [
4631
+ (openBlock(true), createBlock(Fragment, null, renderList(unref(data).entries, (entry) => {
4632
+ return openBlock(), createBlock("tr", {
4633
+ key: entry.id,
4634
+ class: "border-t border-default"
4635
+ }, [
4636
+ createVNode("td", { class: "px-3 py-2 min-w-0" }, [
4637
+ createVNode(_component_NuxtLink, {
4638
+ to: `/test-cases/${entry.testCaseId}`,
4639
+ class: "text-primary hover:underline font-medium"
4640
+ }, {
4641
+ default: withCtx(() => [
4642
+ createTextVNode(toDisplayString(entry.title), 1)
4643
+ ]),
4644
+ _: 2
4645
+ }, 1032, ["to"]),
4646
+ createVNode(_component_TestMetaBadges, {
4647
+ tags: entry.tags,
4648
+ meta: { owner: entry.owner ?? void 0 },
4649
+ "max-tags": 3,
4650
+ class: "ml-1"
4651
+ }, null, 8, ["tags", "meta"]),
4652
+ createVNode("div", { class: "text-xs text-muted" }, [
4653
+ createVNode(_component_OpenInIdeLink, {
4654
+ "file-path": entry.filePath,
4655
+ "project-key": __props.projectId,
4656
+ "project-name": __props.projectName
4657
+ }, null, 8, ["file-path", "project-key", "project-name"])
4658
+ ])
4659
+ ]),
4660
+ createVNode("td", { class: "px-3 py-2 text-muted" }, toDisplayString(entry.reason || "—"), 1),
4661
+ createVNode("td", { class: "px-3 py-2 whitespace-nowrap" }, [
4662
+ entry.releaseProposed ? (openBlock(), createBlock(_component_UBadge, {
4663
+ key: 0,
4664
+ color: "success",
4665
+ variant: "soft",
4666
+ size: "xs"
4667
+ }, {
4668
+ default: withCtx(() => [
4669
+ createTextVNode(toDisplayString(entry.consecutivePasses) + " green — ready ", 1)
4670
+ ]),
4671
+ _: 2
4672
+ }, 1024)) : entry.runsSinceQuarantine === 0 ? (openBlock(), createBlock("span", {
4673
+ key: 1,
4674
+ class: "text-xs text-muted"
4675
+ }, "not run yet")) : (openBlock(), createBlock("span", {
4676
+ key: 2,
4677
+ class: "text-xs"
4678
+ }, toDisplayString(entry.consecutivePasses) + " / " + toDisplayString(unref(data).releaseAfterConsecutivePasses), 1))
4679
+ ]),
4680
+ createVNode("td", { class: "px-3 py-2 whitespace-nowrap text-muted" }, toDisplayString(formatAge(entry.ageMs)), 1),
4681
+ createVNode("td", { class: "px-3 py-2 text-right" }, [
4682
+ createVNode(_component_UButton, {
4683
+ size: "xs",
4684
+ color: entry.releaseProposed ? "primary" : "neutral",
4685
+ variant: "soft",
4686
+ loading: unref(busy) === entry.testCaseId,
4687
+ onClick: ($event) => release(entry.testCaseId)
4688
+ }, {
4689
+ default: withCtx(() => [
4690
+ createTextVNode(" Release ")
4691
+ ]),
4692
+ _: 1
4693
+ }, 8, ["color", "loading", "onClick"])
4694
+ ])
4695
+ ]);
4696
+ }), 128))
4697
+ ])
4698
+ ])
4699
+ ]),
4700
+ _: 1
4701
+ }))
4702
+ ], 64))
4703
+ ];
4704
+ }
4705
+ }),
4706
+ _: 1
4707
+ }, _parent));
4708
+ if (unref(data) && unref(data).candidates.length > 0) {
4709
+ _push(ssrRenderComponent(_component_SectionCard, {
4710
+ title: "Worth quarantining",
4711
+ icon: "i-lucide-lightbulb",
4712
+ count: unref(data).candidates.length
4713
+ }, {
4714
+ subtitle: withCtx((_, _push2, _parent2, _scopeId) => {
4715
+ if (_push2) {
4716
+ _push2(` Ranked by the CI minutes their flakiness wastes, not by how often they flake — a test that flakes constantly but finishes instantly costs nothing. `);
4717
+ } else {
4718
+ return [
4719
+ createTextVNode(" Ranked by the CI minutes their flakiness wastes, not by how often they flake — a test that flakes constantly but finishes instantly costs nothing. ")
4720
+ ];
4721
+ }
4722
+ }),
4723
+ default: withCtx((_, _push2, _parent2, _scopeId) => {
4724
+ if (_push2) {
4725
+ _push2(ssrRenderComponent(_component_TableScroller, null, {
4726
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
4727
+ if (_push3) {
4728
+ _push3(`<table class="w-full text-sm"${_scopeId2}><tbody${_scopeId2}><!--[-->`);
4729
+ ssrRenderList(unref(data).candidates, (candidate) => {
4730
+ _push3(`<tr class="border-t border-default"${_scopeId2}><td class="px-3 py-2 min-w-0"${_scopeId2}>`);
4731
+ _push3(ssrRenderComponent(_component_NuxtLink, {
4732
+ to: `/test-cases/${candidate.testCaseId}`,
4733
+ class: "text-primary hover:underline font-medium"
4734
+ }, {
4735
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
4736
+ if (_push4) {
4737
+ _push4(`${ssrInterpolate(candidate.title)}`);
4738
+ } else {
4739
+ return [
4740
+ createTextVNode(toDisplayString(candidate.title), 1)
4741
+ ];
4742
+ }
4743
+ }),
4744
+ _: 2
4745
+ }, _parent3, _scopeId2));
4746
+ _push3(`<div class="text-xs text-muted"${_scopeId2}>${ssrInterpolate(candidate.rationale)}</div></td><td class="px-3 py-2 text-right whitespace-nowrap"${_scopeId2}>`);
4747
+ _push3(ssrRenderComponent(_component_UButton, {
4748
+ size: "xs",
4749
+ color: "neutral",
4750
+ variant: "soft",
4751
+ loading: unref(busy) === candidate.testCaseId,
4752
+ onClick: ($event) => quarantine(candidate.testCaseId, candidate.rationale)
4753
+ }, {
4754
+ default: withCtx((_3, _push4, _parent4, _scopeId3) => {
4755
+ if (_push4) {
4756
+ _push4(` Quarantine `);
4757
+ } else {
4758
+ return [
4759
+ createTextVNode(" Quarantine ")
4760
+ ];
4761
+ }
4762
+ }),
4763
+ _: 2
4764
+ }, _parent3, _scopeId2));
4765
+ _push3(`</td></tr>`);
4766
+ });
4767
+ _push3(`<!--]--></tbody></table>`);
4768
+ } else {
4769
+ return [
4770
+ createVNode("table", { class: "w-full text-sm" }, [
4771
+ createVNode("tbody", null, [
4772
+ (openBlock(true), createBlock(Fragment, null, renderList(unref(data).candidates, (candidate) => {
4773
+ return openBlock(), createBlock("tr", {
4774
+ key: candidate.testCaseId,
4775
+ class: "border-t border-default"
4776
+ }, [
4777
+ createVNode("td", { class: "px-3 py-2 min-w-0" }, [
4778
+ createVNode(_component_NuxtLink, {
4779
+ to: `/test-cases/${candidate.testCaseId}`,
4780
+ class: "text-primary hover:underline font-medium"
4781
+ }, {
4782
+ default: withCtx(() => [
4783
+ createTextVNode(toDisplayString(candidate.title), 1)
4784
+ ]),
4785
+ _: 2
4786
+ }, 1032, ["to"]),
4787
+ createVNode("div", { class: "text-xs text-muted" }, toDisplayString(candidate.rationale), 1)
4788
+ ]),
4789
+ createVNode("td", { class: "px-3 py-2 text-right whitespace-nowrap" }, [
4790
+ createVNode(_component_UButton, {
4791
+ size: "xs",
4792
+ color: "neutral",
4793
+ variant: "soft",
4794
+ loading: unref(busy) === candidate.testCaseId,
4795
+ onClick: ($event) => quarantine(candidate.testCaseId, candidate.rationale)
4796
+ }, {
4797
+ default: withCtx(() => [
4798
+ createTextVNode(" Quarantine ")
4799
+ ]),
4800
+ _: 1
4801
+ }, 8, ["loading", "onClick"])
4802
+ ])
4803
+ ]);
4804
+ }), 128))
4805
+ ])
4806
+ ])
4807
+ ];
4808
+ }
4809
+ }),
4810
+ _: 1
4811
+ }, _parent2, _scopeId));
4812
+ } else {
4813
+ return [
4814
+ createVNode(_component_TableScroller, null, {
4815
+ default: withCtx(() => [
4816
+ createVNode("table", { class: "w-full text-sm" }, [
4817
+ createVNode("tbody", null, [
4818
+ (openBlock(true), createBlock(Fragment, null, renderList(unref(data).candidates, (candidate) => {
4819
+ return openBlock(), createBlock("tr", {
4820
+ key: candidate.testCaseId,
4821
+ class: "border-t border-default"
4822
+ }, [
4823
+ createVNode("td", { class: "px-3 py-2 min-w-0" }, [
4824
+ createVNode(_component_NuxtLink, {
4825
+ to: `/test-cases/${candidate.testCaseId}`,
4826
+ class: "text-primary hover:underline font-medium"
4827
+ }, {
4828
+ default: withCtx(() => [
4829
+ createTextVNode(toDisplayString(candidate.title), 1)
4830
+ ]),
4831
+ _: 2
4832
+ }, 1032, ["to"]),
4833
+ createVNode("div", { class: "text-xs text-muted" }, toDisplayString(candidate.rationale), 1)
4834
+ ]),
4835
+ createVNode("td", { class: "px-3 py-2 text-right whitespace-nowrap" }, [
4836
+ createVNode(_component_UButton, {
4837
+ size: "xs",
4838
+ color: "neutral",
4839
+ variant: "soft",
4840
+ loading: unref(busy) === candidate.testCaseId,
4841
+ onClick: ($event) => quarantine(candidate.testCaseId, candidate.rationale)
4842
+ }, {
4843
+ default: withCtx(() => [
4844
+ createTextVNode(" Quarantine ")
4845
+ ]),
4846
+ _: 1
4847
+ }, 8, ["loading", "onClick"])
4848
+ ])
4849
+ ]);
4850
+ }), 128))
4851
+ ])
4852
+ ])
4853
+ ]),
4854
+ _: 1
4855
+ })
4856
+ ];
4857
+ }
4858
+ }),
4859
+ _: 1
4860
+ }, _parent));
4861
+ } else {
4862
+ _push(`<!---->`);
4863
+ }
4864
+ _push(`</div>`);
3879
4865
  };
3880
4866
  }
3881
4867
  });
3882
4868
  const _sfc_setup$3 = _sfc_main$3.setup;
3883
4869
  _sfc_main$3.setup = (props, ctx) => {
3884
4870
  const ssrContext = useSSRContext();
3885
- (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/project/SpecHealthTable.vue");
4871
+ (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/project/QuarantineTable.vue");
3886
4872
  return _sfc_setup$3 ? _sfc_setup$3(props, ctx) : void 0;
3887
4873
  };
3888
- const __nuxt_component_35 = Object.assign(_sfc_main$3, { __name: "SpecHealthTable" });
4874
+ const __nuxt_component_38 = Object.assign(_sfc_main$3, { __name: "QuarantineTable" });
3889
4875
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
3890
4876
  __name: "MarkerFormModal",
3891
4877
  __ssrInlineRender: true,
@@ -3934,7 +4920,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
3934
4920
  }
3935
4921
  );
3936
4922
  return (_ctx, _push, _parent, _attrs) => {
3937
- const _component_ClientOnly = __nuxt_component_7$1;
4923
+ const _component_ClientOnly = __nuxt_component_7$2;
3938
4924
  _push(ssrRenderComponent(_component_ClientOnly, _attrs, {}, _parent));
3939
4925
  };
3940
4926
  }
@@ -4009,16 +4995,16 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4009
4995
  }
4010
4996
  }
4011
4997
  return (_ctx, _push, _parent, _attrs) => {
4012
- const _component_SectionCard = __nuxt_component_11;
4998
+ const _component_SectionCard = __nuxt_component_11$1;
4013
4999
  const _component_UButton = _sfc_main$k;
4014
- const _component_EmptyState = __nuxt_component_8;
5000
+ const _component_EmptyState = __nuxt_component_4$1;
4015
5001
  const _component_MarkerBadge = __nuxt_component_5$1;
4016
5002
  const _component_UBadge = _sfc_main$7$1;
4017
- const _component_UTable = _sfc_main$g;
5003
+ const _component_UTable = _sfc_main$i;
4018
5004
  const _component_UIcon = _sfc_main$p;
4019
5005
  const _component_MarkerFormModal = __nuxt_component_7;
4020
- const _component_ClientOnly = __nuxt_component_7$1;
4021
- const _component_UModal = _sfc_main$l;
5006
+ const _component_ClientOnly = __nuxt_component_7$2;
5007
+ const _component_UModal = _sfc_main$n;
4022
5008
  _push(ssrRenderComponent(_component_SectionCard, mergeProps({
4023
5009
  title: "Timeline markers",
4024
5010
  count: __props.markers.length,
@@ -4518,7 +5504,7 @@ _sfc_main$1.setup = (props, ctx) => {
4518
5504
  (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/project/ProjectTimeline.vue");
4519
5505
  return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0;
4520
5506
  };
4521
- const __nuxt_component_37 = Object.assign(_sfc_main$1, { __name: "ProjectTimeline" });
5507
+ const __nuxt_component_40 = Object.assign(_sfc_main$1, { __name: "ProjectTimeline" });
4522
5508
  const _sfc_main = /* @__PURE__ */ defineComponent({
4523
5509
  __name: "index",
4524
5510
  __ssrInlineRender: true,
@@ -4539,6 +5525,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4539
5525
  const { isAdmin, isReporter } = useAuth();
4540
5526
  const runtimeConfig = useRuntimeConfig();
4541
5527
  const canDelete = computed(() => !runtimeConfig.public.authEnabled || isAdmin.value);
5528
+ const canImport = canDelete;
4542
5529
  const showDeleteProjectModal = ref(false);
4543
5530
  const deleteProjectConfirmInput = ref("");
4544
5531
  ref(false);
@@ -4623,6 +5610,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4623
5610
  "test-cases",
4624
5611
  "compare",
4625
5612
  "spec-health",
5613
+ "quarantine",
4626
5614
  "timeline",
4627
5615
  "members"
4628
5616
  ];
@@ -4661,6 +5649,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4661
5649
  },
4662
5650
  { label: "Compare", icon: "i-lucide-git-compare-arrows", value: "compare", slot: "compare" },
4663
5651
  { label: "Spec health", icon: "i-lucide-table-2", value: "spec-health", slot: "spec-health" },
5652
+ { label: "Quarantine", icon: "i-lucide-shield-alert", value: "quarantine", slot: "quarantine" },
4664
5653
  {
4665
5654
  label: `Timeline${markers.value.length ? ` (${markers.value.length})` : ""}`,
4666
5655
  icon: "i-lucide-milestone",
@@ -4967,44 +5956,47 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
4967
5956
  ];
4968
5957
  return (_ctx, _push, _parent, _attrs) => {
4969
5958
  const _component_UDashboardPanel = _sfc_main$1$1;
4970
- const _component_UDashboardNavbar = _sfc_main$j;
5959
+ const _component_UDashboardNavbar = _sfc_main$m;
4971
5960
  const _component_UDashboardSidebarCollapse = _sfc_main$1$2;
4972
- const _component_BreadcrumbNav = __nuxt_component_3;
4973
- const _component_NavbarActions = __nuxt_component_4$1;
5961
+ const _component_BreadcrumbNav = __nuxt_component_3$1;
5962
+ const _component_NavbarActions = __nuxt_component_4$2;
4974
5963
  const _component_SubscribeBell = __nuxt_component_5;
4975
5964
  const _component_TagBadge = __nuxt_component_4;
4976
- const _component_USelect = _sfc_main$b;
4977
- const _component_UTabs = _sfc_main$c;
5965
+ const _component_DesktopProjectLinkCard = __nuxt_component_7$1;
5966
+ const _component_USelect = _sfc_main$d;
5967
+ const _component_UTabs = _sfc_main$e;
4978
5968
  const _component_ChartCard = __nuxt_component_0;
4979
- const _component_TestRunsChart = __nuxt_component_10;
4980
- const _component_UCard = _sfc_main$d;
4981
- const _component_USwitch = _sfc_main$h;
5969
+ const _component_TestRunsChart = __nuxt_component_11;
5970
+ const _component_UCard = _sfc_main$f;
5971
+ const _component_USwitch = _sfc_main$j;
4982
5972
  const _component_HelpHint = __nuxt_component_2;
4983
5973
  const _component_UButton = _sfc_main$k;
4984
- const _component_UTable = _sfc_main$g;
4985
- const _component_RunStatusBadge = __nuxt_component_13$1;
4986
- const _component_UTooltip = _sfc_main$i;
5974
+ const _component_UTable = _sfc_main$i;
5975
+ const _component_RunStatusBadge = __nuxt_component_13;
5976
+ const _component_UTooltip = _sfc_main$l;
4987
5977
  const _component_UIcon = _sfc_main$p;
4988
- const _component_BrowserBadge = __nuxt_component_2$1;
4989
- const _component_TestStatusBar = __nuxt_component_13;
4990
- const _component_RunReports = __nuxt_component_14;
4991
- const _component_EmptyState = __nuxt_component_8;
5978
+ const _component_BrowserBadge = __nuxt_component_3;
5979
+ const _component_UBadge = _sfc_main$7$1;
5980
+ const _component_TestStatusBar = __nuxt_component_14$1;
5981
+ const _component_DurationValue = __nuxt_component_14;
5982
+ const _component_RunReports = __nuxt_component_15;
5983
+ const _component_EmptyState = __nuxt_component_4$1;
4992
5984
  const _component_DocLink = __nuxt_component_9;
4993
- const _component_ClusterMergeSuggestions = __nuxt_component_24;
4994
- const _component_FailureClustersList = __nuxt_component_25;
4995
- const _component_FlakyTestsList = __nuxt_component_26;
5985
+ const _component_ClusterMergeSuggestions = __nuxt_component_27;
5986
+ const _component_FailureClustersList = __nuxt_component_28;
5987
+ const _component_FlakyTestsList = __nuxt_component_29;
4996
5988
  const _component_UInput = _sfc_main$d$1;
4997
5989
  const _component_LoadingState = __nuxt_component_1;
4998
- const _component_PerformanceTrendChart = __nuxt_component_29;
5990
+ const _component_PerformanceTrendChart = __nuxt_component_32;
4999
5991
  const _component_OpenInIdeLink = __nuxt_component_1$1;
5000
- const _component_TimeoutOpportunitiesTable = __nuxt_component_31;
5001
- const _component_USelectMenu = _sfc_main$f;
5002
- const _component_UBadge = _sfc_main$7$1;
5003
- const _component_ProjectTestCasesTable = __nuxt_component_34;
5004
- const _component_SpecHealthTable = __nuxt_component_35;
5005
- const _component_UCheckbox = _sfc_main$e;
5006
- const _component_ProjectTimeline = __nuxt_component_37;
5007
- const _component_ClientOnly = __nuxt_component_7$1;
5992
+ const _component_TimeoutOpportunitiesTable = __nuxt_component_34;
5993
+ const _component_USelectMenu = _sfc_main$h;
5994
+ const _component_ProjectTestCasesTable = __nuxt_component_36;
5995
+ const _component_SpecHealthTable = __nuxt_component_37;
5996
+ const _component_QuarantineTable = __nuxt_component_38;
5997
+ const _component_UCheckbox = _sfc_main$g;
5998
+ const _component_ProjectTimeline = __nuxt_component_40;
5999
+ const _component_ClientOnly = __nuxt_component_7$2;
5008
6000
  _push(`<!--[-->`);
5009
6001
  _push(ssrRenderComponent(_component_UDashboardPanel, { id: "project-detail" }, {
5010
6002
  header: withCtx((_, _push2, _parent2, _scopeId) => {
@@ -5050,6 +6042,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5050
6042
  }
5051
6043
  }
5052
6044
  ] : [],
6045
+ ...unref(canImport) ? [
6046
+ {
6047
+ label: "Import",
6048
+ icon: "i-lucide-import",
6049
+ variant: "outline",
6050
+ to: `/projects/${unref(projectId)}/import`
6051
+ }
6052
+ ] : [],
5053
6053
  {
5054
6054
  label: "Edit",
5055
6055
  icon: "i-lucide-pencil",
@@ -5093,6 +6093,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5093
6093
  }
5094
6094
  }
5095
6095
  ] : [],
6096
+ ...unref(canImport) ? [
6097
+ {
6098
+ label: "Import",
6099
+ icon: "i-lucide-import",
6100
+ variant: "outline",
6101
+ to: `/projects/${unref(projectId)}/import`
6102
+ }
6103
+ ] : [],
5096
6104
  {
5097
6105
  label: "Edit",
5098
6106
  icon: "i-lucide-pencil",
@@ -5144,6 +6152,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5144
6152
  }
5145
6153
  }
5146
6154
  ] : [],
6155
+ ...unref(canImport) ? [
6156
+ {
6157
+ label: "Import",
6158
+ icon: "i-lucide-import",
6159
+ variant: "outline",
6160
+ to: `/projects/${unref(projectId)}/import`
6161
+ }
6162
+ ] : [],
5147
6163
  {
5148
6164
  label: "Edit",
5149
6165
  icon: "i-lucide-pencil",
@@ -5194,6 +6210,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5194
6210
  } else {
5195
6211
  _push2(`<!---->`);
5196
6212
  }
6213
+ _push2(ssrRenderComponent(_component_DesktopProjectLinkCard, { "project-id": unref(projectId) }, null, _parent2, _scopeId));
5197
6214
  _push2(ssrRenderComponent(_component_USelect, {
5198
6215
  modelValue: unref(activeTab),
5199
6216
  "onUpdate:modelValue": ($event) => isRef(activeTab) ? activeTab.value = $event : null,
@@ -5259,7 +6276,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5259
6276
  ssrRenderList(unref(availableEnvironments), (env) => {
5260
6277
  _push4(`<button type="button" class="${ssrRenderClass([
5261
6278
  "text-xs font-medium px-2 py-1 rounded border cursor-pointer focus:outline-none transition-colors",
5262
- isEnvironmentFilterActive(env) ? "bg-blue-600 text-white border-blue-600" : "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200 border-blue-300 dark:border-blue-700 hover:bg-blue-200 dark:hover:bg-blue-800"
6279
+ isEnvironmentFilterActive(env) ? "bg-blue-100 text-blue-700 border-blue-300 dark:bg-blue-900/40 dark:text-blue-300 dark:border-blue-700" : "bg-zinc-100 text-zinc-500 border-zinc-200 hover:bg-zinc-200 dark:bg-zinc-800 dark:text-zinc-400 dark:border-zinc-700 dark:hover:bg-zinc-700"
5263
6280
  ])}"${_scopeId3}>${ssrInterpolate(env)}</button>`);
5264
6281
  });
5265
6282
  _push4(`<!--]-->`);
@@ -5465,16 +6482,38 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5465
6482
  "environment-cell": withCtx(({ row }, _push5, _parent5, _scopeId4) => {
5466
6483
  if (_push5) {
5467
6484
  if (row.original.environment) {
5468
- _push5(`<span class="text-xs font-medium bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200 px-1.5 py-0.5 rounded"${_scopeId4}>${ssrInterpolate(row.original.environment)}</span>`);
6485
+ _push5(ssrRenderComponent(_component_UBadge, {
6486
+ color: "info",
6487
+ variant: "subtle",
6488
+ size: "sm"
6489
+ }, {
6490
+ default: withCtx((_4, _push6, _parent6, _scopeId5) => {
6491
+ if (_push6) {
6492
+ _push6(`${ssrInterpolate(row.original.environment)}`);
6493
+ } else {
6494
+ return [
6495
+ createTextVNode(toDisplayString(row.original.environment), 1)
6496
+ ];
6497
+ }
6498
+ }),
6499
+ _: 2
6500
+ }, _parent5, _scopeId4));
5469
6501
  } else {
5470
6502
  _push5(`<!---->`);
5471
6503
  }
5472
6504
  } else {
5473
6505
  return [
5474
- row.original.environment ? (openBlock(), createBlock("span", {
6506
+ row.original.environment ? (openBlock(), createBlock(_component_UBadge, {
5475
6507
  key: 0,
5476
- class: "text-xs font-medium bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200 px-1.5 py-0.5 rounded"
5477
- }, toDisplayString(row.original.environment), 1)) : createCommentVNode("", true)
6508
+ color: "info",
6509
+ variant: "subtle",
6510
+ size: "sm"
6511
+ }, {
6512
+ default: withCtx(() => [
6513
+ createTextVNode(toDisplayString(row.original.environment), 1)
6514
+ ]),
6515
+ _: 2
6516
+ }, 1024)) : createCommentVNode("", true)
5478
6517
  ];
5479
6518
  }
5480
6519
  }),
@@ -5525,7 +6564,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5525
6564
  "did-not-run": row.original.didNotRunTests ?? 0,
5526
6565
  total: row.original.totalTests
5527
6566
  }, null, _parent5, _scopeId4));
5528
- _push5(`<span class="text-xs text-gray-500"${_scopeId4}>${ssrInterpolate(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.duration))}</span></div>`);
6567
+ _push5(ssrRenderComponent(_component_DurationValue, {
6568
+ ms: row.original.duration,
6569
+ class: "text-xs text-gray-500"
6570
+ }, null, _parent5, _scopeId4));
6571
+ _push5(`</div>`);
5529
6572
  } else {
5530
6573
  return [
5531
6574
  createVNode("div", { class: "space-y-1" }, [
@@ -5537,7 +6580,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5537
6580
  "did-not-run": row.original.didNotRunTests ?? 0,
5538
6581
  total: row.original.totalTests
5539
6582
  }, null, 8, ["passed", "failed", "skipped", "flaky", "did-not-run", "total"]),
5540
- createVNode("span", { class: "text-xs text-gray-500" }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.duration)), 1)
6583
+ createVNode(_component_DurationValue, {
6584
+ ms: row.original.duration,
6585
+ class: "text-xs text-gray-500"
6586
+ }, null, 8, ["ms"])
5541
6587
  ])
5542
6588
  ];
5543
6589
  }
@@ -5708,7 +6754,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5708
6754
  type: "button",
5709
6755
  class: [
5710
6756
  "text-xs font-medium px-2 py-1 rounded border cursor-pointer focus:outline-none transition-colors",
5711
- isEnvironmentFilterActive(env) ? "bg-blue-600 text-white border-blue-600" : "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200 border-blue-300 dark:border-blue-700 hover:bg-blue-200 dark:hover:bg-blue-800"
6757
+ isEnvironmentFilterActive(env) ? "bg-blue-100 text-blue-700 border-blue-300 dark:bg-blue-900/40 dark:text-blue-300 dark:border-blue-700" : "bg-zinc-100 text-zinc-500 border-zinc-200 hover:bg-zinc-200 dark:bg-zinc-800 dark:text-zinc-400 dark:border-zinc-700 dark:hover:bg-zinc-700"
5712
6758
  ],
5713
6759
  onClick: ($event) => toggleEnvironmentFilter(env)
5714
6760
  }, toDisplayString(env), 11, ["onClick"]);
@@ -5824,10 +6870,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5824
6870
  createVNode("span", { class: "text-xs text-gray-600" }, toDisplayString(("prettyDateFormat" in _ctx ? _ctx.prettyDateFormat : unref(prettyDateFormat))(row.original.startTime)), 1)
5825
6871
  ]),
5826
6872
  "environment-cell": withCtx(({ row }) => [
5827
- row.original.environment ? (openBlock(), createBlock("span", {
6873
+ row.original.environment ? (openBlock(), createBlock(_component_UBadge, {
5828
6874
  key: 0,
5829
- class: "text-xs font-medium bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200 px-1.5 py-0.5 rounded"
5830
- }, toDisplayString(row.original.environment), 1)) : createCommentVNode("", true)
6875
+ color: "info",
6876
+ variant: "subtle",
6877
+ size: "sm"
6878
+ }, {
6879
+ default: withCtx(() => [
6880
+ createTextVNode(toDisplayString(row.original.environment), 1)
6881
+ ]),
6882
+ _: 2
6883
+ }, 1024)) : createCommentVNode("", true)
5831
6884
  ]),
5832
6885
  "metadata-cell": withCtx(({ row }) => [
5833
6886
  row.original.metadata?.scm ? (openBlock(), createBlock("div", {
@@ -5854,7 +6907,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5854
6907
  "did-not-run": row.original.didNotRunTests ?? 0,
5855
6908
  total: row.original.totalTests
5856
6909
  }, null, 8, ["passed", "failed", "skipped", "flaky", "did-not-run", "total"]),
5857
- createVNode("span", { class: "text-xs text-gray-500" }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.duration)), 1)
6910
+ createVNode(_component_DurationValue, {
6911
+ ms: row.original.duration,
6912
+ class: "text-xs text-gray-500"
6913
+ }, null, 8, ["ms"])
5858
6914
  ])
5859
6915
  ]),
5860
6916
  "reports-cell": withCtx(({ row }) => [
@@ -5966,7 +7022,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
5966
7022
  type: "button",
5967
7023
  class: [
5968
7024
  "text-xs font-medium px-2 py-1 rounded border cursor-pointer focus:outline-none transition-colors",
5969
- isEnvironmentFilterActive(env) ? "bg-blue-600 text-white border-blue-600" : "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200 border-blue-300 dark:border-blue-700 hover:bg-blue-200 dark:hover:bg-blue-800"
7025
+ isEnvironmentFilterActive(env) ? "bg-blue-100 text-blue-700 border-blue-300 dark:bg-blue-900/40 dark:text-blue-300 dark:border-blue-700" : "bg-zinc-100 text-zinc-500 border-zinc-200 hover:bg-zinc-200 dark:bg-zinc-800 dark:text-zinc-400 dark:border-zinc-700 dark:hover:bg-zinc-700"
5970
7026
  ],
5971
7027
  onClick: ($event) => toggleEnvironmentFilter(env)
5972
7028
  }, toDisplayString(env), 11, ["onClick"]);
@@ -6082,10 +7138,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
6082
7138
  createVNode("span", { class: "text-xs text-gray-600" }, toDisplayString(("prettyDateFormat" in _ctx ? _ctx.prettyDateFormat : unref(prettyDateFormat))(row.original.startTime)), 1)
6083
7139
  ]),
6084
7140
  "environment-cell": withCtx(({ row }) => [
6085
- row.original.environment ? (openBlock(), createBlock("span", {
7141
+ row.original.environment ? (openBlock(), createBlock(_component_UBadge, {
6086
7142
  key: 0,
6087
- class: "text-xs font-medium bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200 px-1.5 py-0.5 rounded"
6088
- }, toDisplayString(row.original.environment), 1)) : createCommentVNode("", true)
7143
+ color: "info",
7144
+ variant: "subtle",
7145
+ size: "sm"
7146
+ }, {
7147
+ default: withCtx(() => [
7148
+ createTextVNode(toDisplayString(row.original.environment), 1)
7149
+ ]),
7150
+ _: 2
7151
+ }, 1024)) : createCommentVNode("", true)
6089
7152
  ]),
6090
7153
  "metadata-cell": withCtx(({ row }) => [
6091
7154
  row.original.metadata?.scm ? (openBlock(), createBlock("div", {
@@ -6112,7 +7175,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
6112
7175
  "did-not-run": row.original.didNotRunTests ?? 0,
6113
7176
  total: row.original.totalTests
6114
7177
  }, null, 8, ["passed", "failed", "skipped", "flaky", "did-not-run", "total"]),
6115
- createVNode("span", { class: "text-xs text-gray-500" }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.duration)), 1)
7178
+ createVNode(_component_DurationValue, {
7179
+ ms: row.original.duration,
7180
+ class: "text-xs text-gray-500"
7181
+ }, null, 8, ["ms"])
6116
7182
  ])
6117
7183
  ]),
6118
7184
  "reports-cell": withCtx(({ row }) => [
@@ -6593,6 +7659,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
6593
7659
  } else {
6594
7660
  _push5(ssrRenderComponent(_component_UBadge, {
6595
7661
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusA),
7662
+ variant: "subtle",
6596
7663
  class: "capitalize"
6597
7664
  }, {
6598
7665
  default: withCtx((_4, _push6, _parent6, _scopeId5) => {
@@ -6615,6 +7682,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
6615
7682
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
6616
7683
  key: 1,
6617
7684
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusA),
7685
+ variant: "subtle",
6618
7686
  class: "capitalize"
6619
7687
  }, {
6620
7688
  default: withCtx(() => [
@@ -6632,6 +7700,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
6632
7700
  } else {
6633
7701
  _push5(ssrRenderComponent(_component_UBadge, {
6634
7702
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusB),
7703
+ variant: "subtle",
6635
7704
  class: "capitalize"
6636
7705
  }, {
6637
7706
  default: withCtx((_4, _push6, _parent6, _scopeId5) => {
@@ -6654,6 +7723,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
6654
7723
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
6655
7724
  key: 1,
6656
7725
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusB),
7726
+ variant: "subtle",
6657
7727
  class: "capitalize"
6658
7728
  }, {
6659
7729
  default: withCtx(() => [
@@ -6667,13 +7737,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
6667
7737
  "durationA-cell": withCtx(({ row }, _push5, _parent5, _scopeId4) => {
6668
7738
  if (_push5) {
6669
7739
  if (row.original.durationA !== null) {
6670
- _push5(`<span${_scopeId4}>${ssrInterpolate(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationA))}</span>`);
7740
+ _push5(ssrRenderComponent(_component_DurationValue, {
7741
+ ms: row.original.durationA
7742
+ }, null, _parent5, _scopeId4));
6671
7743
  } else {
6672
7744
  _push5(`<span class="text-gray-400"${_scopeId4}>—</span>`);
6673
7745
  }
6674
7746
  } else {
6675
7747
  return [
6676
- row.original.durationA !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationA)), 1)) : (openBlock(), createBlock("span", {
7748
+ row.original.durationA !== null ? (openBlock(), createBlock(_component_DurationValue, {
7749
+ key: 0,
7750
+ ms: row.original.durationA
7751
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
6677
7752
  key: 1,
6678
7753
  class: "text-gray-400"
6679
7754
  }, "—"))
@@ -6683,13 +7758,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
6683
7758
  "durationB-cell": withCtx(({ row }, _push5, _parent5, _scopeId4) => {
6684
7759
  if (_push5) {
6685
7760
  if (row.original.durationB !== null) {
6686
- _push5(`<span${_scopeId4}>${ssrInterpolate(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationB))}</span>`);
7761
+ _push5(ssrRenderComponent(_component_DurationValue, {
7762
+ ms: row.original.durationB
7763
+ }, null, _parent5, _scopeId4));
6687
7764
  } else {
6688
7765
  _push5(`<span class="text-gray-400"${_scopeId4}>—</span>`);
6689
7766
  }
6690
7767
  } else {
6691
7768
  return [
6692
- row.original.durationB !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationB)), 1)) : (openBlock(), createBlock("span", {
7769
+ row.original.durationB !== null ? (openBlock(), createBlock(_component_DurationValue, {
7770
+ key: 0,
7771
+ ms: row.original.durationB
7772
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
6693
7773
  key: 1,
6694
7774
  class: "text-gray-400"
6695
7775
  }, "—"))
@@ -6703,7 +7783,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
6703
7783
  } else {
6704
7784
  _push5(`<span class="${ssrRenderClass(
6705
7785
  row.original.delta > 0 ? "text-red-600" : row.original.delta < 0 ? "text-green-600" : "text-gray-500"
6706
- )}"${_scopeId4}>${ssrInterpolate(row.original.delta > 0 ? "+" : "")}${ssrInterpolate(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.delta))}</span>`);
7786
+ )}"${_scopeId4}>${ssrInterpolate(row.original.delta > 0 ? "+" : "")}`);
7787
+ _push5(ssrRenderComponent(_component_DurationValue, {
7788
+ ms: row.original.delta,
7789
+ "unit-class": "opacity-60"
7790
+ }, null, _parent5, _scopeId4));
7791
+ _push5(`</span>`);
6707
7792
  }
6708
7793
  } else {
6709
7794
  return [
@@ -6713,7 +7798,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
6713
7798
  }, "—")) : (openBlock(), createBlock("span", {
6714
7799
  key: 1,
6715
7800
  class: row.original.delta > 0 ? "text-red-600" : row.original.delta < 0 ? "text-green-600" : "text-gray-500"
6716
- }, toDisplayString(row.original.delta > 0 ? "+" : "") + toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.delta)), 3))
7801
+ }, [
7802
+ createTextVNode(toDisplayString(row.original.delta > 0 ? "+" : ""), 1),
7803
+ createVNode(_component_DurationValue, {
7804
+ ms: row.original.delta,
7805
+ "unit-class": "opacity-60"
7806
+ }, null, 8, ["ms"])
7807
+ ], 2))
6717
7808
  ];
6718
7809
  }
6719
7810
  }),
@@ -6833,6 +7924,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
6833
7924
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
6834
7925
  key: 1,
6835
7926
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusA),
7927
+ variant: "subtle",
6836
7928
  class: "capitalize"
6837
7929
  }, {
6838
7930
  default: withCtx(() => [
@@ -6848,6 +7940,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
6848
7940
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
6849
7941
  key: 1,
6850
7942
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusB),
7943
+ variant: "subtle",
6851
7944
  class: "capitalize"
6852
7945
  }, {
6853
7946
  default: withCtx(() => [
@@ -6857,13 +7950,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
6857
7950
  }, 1032, ["color"]))
6858
7951
  ]),
6859
7952
  "durationA-cell": withCtx(({ row }) => [
6860
- row.original.durationA !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationA)), 1)) : (openBlock(), createBlock("span", {
7953
+ row.original.durationA !== null ? (openBlock(), createBlock(_component_DurationValue, {
7954
+ key: 0,
7955
+ ms: row.original.durationA
7956
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
6861
7957
  key: 1,
6862
7958
  class: "text-gray-400"
6863
7959
  }, "—"))
6864
7960
  ]),
6865
7961
  "durationB-cell": withCtx(({ row }) => [
6866
- row.original.durationB !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationB)), 1)) : (openBlock(), createBlock("span", {
7962
+ row.original.durationB !== null ? (openBlock(), createBlock(_component_DurationValue, {
7963
+ key: 0,
7964
+ ms: row.original.durationB
7965
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
6867
7966
  key: 1,
6868
7967
  class: "text-gray-400"
6869
7968
  }, "—"))
@@ -6875,7 +7974,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
6875
7974
  }, "—")) : (openBlock(), createBlock("span", {
6876
7975
  key: 1,
6877
7976
  class: row.original.delta > 0 ? "text-red-600" : row.original.delta < 0 ? "text-green-600" : "text-gray-500"
6878
- }, toDisplayString(row.original.delta > 0 ? "+" : "") + toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.delta)), 3))
7977
+ }, [
7978
+ createTextVNode(toDisplayString(row.original.delta > 0 ? "+" : ""), 1),
7979
+ createVNode(_component_DurationValue, {
7980
+ ms: row.original.delta,
7981
+ "unit-class": "opacity-60"
7982
+ }, null, 8, ["ms"])
7983
+ ], 2))
6879
7984
  ]),
6880
7985
  "percentChange-cell": withCtx(({ row }) => [
6881
7986
  row.original.percentChange === null ? (openBlock(), createBlock("span", {
@@ -7123,6 +8228,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7123
8228
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
7124
8229
  key: 1,
7125
8230
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusA),
8231
+ variant: "subtle",
7126
8232
  class: "capitalize"
7127
8233
  }, {
7128
8234
  default: withCtx(() => [
@@ -7138,6 +8244,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7138
8244
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
7139
8245
  key: 1,
7140
8246
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusB),
8247
+ variant: "subtle",
7141
8248
  class: "capitalize"
7142
8249
  }, {
7143
8250
  default: withCtx(() => [
@@ -7147,13 +8254,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7147
8254
  }, 1032, ["color"]))
7148
8255
  ]),
7149
8256
  "durationA-cell": withCtx(({ row }) => [
7150
- row.original.durationA !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationA)), 1)) : (openBlock(), createBlock("span", {
8257
+ row.original.durationA !== null ? (openBlock(), createBlock(_component_DurationValue, {
8258
+ key: 0,
8259
+ ms: row.original.durationA
8260
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
7151
8261
  key: 1,
7152
8262
  class: "text-gray-400"
7153
8263
  }, "—"))
7154
8264
  ]),
7155
8265
  "durationB-cell": withCtx(({ row }) => [
7156
- row.original.durationB !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationB)), 1)) : (openBlock(), createBlock("span", {
8266
+ row.original.durationB !== null ? (openBlock(), createBlock(_component_DurationValue, {
8267
+ key: 0,
8268
+ ms: row.original.durationB
8269
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
7157
8270
  key: 1,
7158
8271
  class: "text-gray-400"
7159
8272
  }, "—"))
@@ -7165,7 +8278,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7165
8278
  }, "—")) : (openBlock(), createBlock("span", {
7166
8279
  key: 1,
7167
8280
  class: row.original.delta > 0 ? "text-red-600" : row.original.delta < 0 ? "text-green-600" : "text-gray-500"
7168
- }, toDisplayString(row.original.delta > 0 ? "+" : "") + toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.delta)), 3))
8281
+ }, [
8282
+ createTextVNode(toDisplayString(row.original.delta > 0 ? "+" : ""), 1),
8283
+ createVNode(_component_DurationValue, {
8284
+ ms: row.original.delta,
8285
+ "unit-class": "opacity-60"
8286
+ }, null, 8, ["ms"])
8287
+ ], 2))
7169
8288
  ]),
7170
8289
  "percentChange-cell": withCtx(({ row }) => [
7171
8290
  row.original.percentChange === null ? (openBlock(), createBlock("span", {
@@ -7417,6 +8536,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7417
8536
  } else {
7418
8537
  _push5(ssrRenderComponent(_component_UBadge, {
7419
8538
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusA),
8539
+ variant: "subtle",
7420
8540
  class: "capitalize"
7421
8541
  }, {
7422
8542
  default: withCtx((_4, _push6, _parent6, _scopeId5) => {
@@ -7439,6 +8559,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7439
8559
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
7440
8560
  key: 1,
7441
8561
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusA),
8562
+ variant: "subtle",
7442
8563
  class: "capitalize"
7443
8564
  }, {
7444
8565
  default: withCtx(() => [
@@ -7456,6 +8577,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7456
8577
  } else {
7457
8578
  _push5(ssrRenderComponent(_component_UBadge, {
7458
8579
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusB),
8580
+ variant: "subtle",
7459
8581
  class: "capitalize"
7460
8582
  }, {
7461
8583
  default: withCtx((_4, _push6, _parent6, _scopeId5) => {
@@ -7478,6 +8600,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7478
8600
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
7479
8601
  key: 1,
7480
8602
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusB),
8603
+ variant: "subtle",
7481
8604
  class: "capitalize"
7482
8605
  }, {
7483
8606
  default: withCtx(() => [
@@ -7491,13 +8614,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7491
8614
  "durationA-cell": withCtx(({ row }, _push5, _parent5, _scopeId4) => {
7492
8615
  if (_push5) {
7493
8616
  if (row.original.durationA !== null) {
7494
- _push5(`<span${_scopeId4}>${ssrInterpolate(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationA))}</span>`);
8617
+ _push5(ssrRenderComponent(_component_DurationValue, {
8618
+ ms: row.original.durationA
8619
+ }, null, _parent5, _scopeId4));
7495
8620
  } else {
7496
8621
  _push5(`<span class="text-gray-400"${_scopeId4}>—</span>`);
7497
8622
  }
7498
8623
  } else {
7499
8624
  return [
7500
- row.original.durationA !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationA)), 1)) : (openBlock(), createBlock("span", {
8625
+ row.original.durationA !== null ? (openBlock(), createBlock(_component_DurationValue, {
8626
+ key: 0,
8627
+ ms: row.original.durationA
8628
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
7501
8629
  key: 1,
7502
8630
  class: "text-gray-400"
7503
8631
  }, "—"))
@@ -7507,13 +8635,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7507
8635
  "durationB-cell": withCtx(({ row }, _push5, _parent5, _scopeId4) => {
7508
8636
  if (_push5) {
7509
8637
  if (row.original.durationB !== null) {
7510
- _push5(`<span${_scopeId4}>${ssrInterpolate(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationB))}</span>`);
8638
+ _push5(ssrRenderComponent(_component_DurationValue, {
8639
+ ms: row.original.durationB
8640
+ }, null, _parent5, _scopeId4));
7511
8641
  } else {
7512
8642
  _push5(`<span class="text-gray-400"${_scopeId4}>—</span>`);
7513
8643
  }
7514
8644
  } else {
7515
8645
  return [
7516
- row.original.durationB !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationB)), 1)) : (openBlock(), createBlock("span", {
8646
+ row.original.durationB !== null ? (openBlock(), createBlock(_component_DurationValue, {
8647
+ key: 0,
8648
+ ms: row.original.durationB
8649
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
7517
8650
  key: 1,
7518
8651
  class: "text-gray-400"
7519
8652
  }, "—"))
@@ -7527,7 +8660,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7527
8660
  } else {
7528
8661
  _push5(`<span class="${ssrRenderClass(
7529
8662
  row.original.delta > 0 ? "text-red-600" : row.original.delta < 0 ? "text-green-600" : "text-gray-500"
7530
- )}"${_scopeId4}>${ssrInterpolate(row.original.delta > 0 ? "+" : "")}${ssrInterpolate(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.delta))}</span>`);
8663
+ )}"${_scopeId4}>${ssrInterpolate(row.original.delta > 0 ? "+" : "")}`);
8664
+ _push5(ssrRenderComponent(_component_DurationValue, {
8665
+ ms: row.original.delta,
8666
+ "unit-class": "opacity-60"
8667
+ }, null, _parent5, _scopeId4));
8668
+ _push5(`</span>`);
7531
8669
  }
7532
8670
  } else {
7533
8671
  return [
@@ -7537,7 +8675,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7537
8675
  }, "—")) : (openBlock(), createBlock("span", {
7538
8676
  key: 1,
7539
8677
  class: row.original.delta > 0 ? "text-red-600" : row.original.delta < 0 ? "text-green-600" : "text-gray-500"
7540
- }, toDisplayString(row.original.delta > 0 ? "+" : "") + toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.delta)), 3))
8678
+ }, [
8679
+ createTextVNode(toDisplayString(row.original.delta > 0 ? "+" : ""), 1),
8680
+ createVNode(_component_DurationValue, {
8681
+ ms: row.original.delta,
8682
+ "unit-class": "opacity-60"
8683
+ }, null, 8, ["ms"])
8684
+ ], 2))
7541
8685
  ];
7542
8686
  }
7543
8687
  }),
@@ -7702,6 +8846,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7702
8846
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
7703
8847
  key: 1,
7704
8848
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusA),
8849
+ variant: "subtle",
7705
8850
  class: "capitalize"
7706
8851
  }, {
7707
8852
  default: withCtx(() => [
@@ -7717,6 +8862,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7717
8862
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
7718
8863
  key: 1,
7719
8864
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusB),
8865
+ variant: "subtle",
7720
8866
  class: "capitalize"
7721
8867
  }, {
7722
8868
  default: withCtx(() => [
@@ -7726,13 +8872,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7726
8872
  }, 1032, ["color"]))
7727
8873
  ]),
7728
8874
  "durationA-cell": withCtx(({ row }) => [
7729
- row.original.durationA !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationA)), 1)) : (openBlock(), createBlock("span", {
8875
+ row.original.durationA !== null ? (openBlock(), createBlock(_component_DurationValue, {
8876
+ key: 0,
8877
+ ms: row.original.durationA
8878
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
7730
8879
  key: 1,
7731
8880
  class: "text-gray-400"
7732
8881
  }, "—"))
7733
8882
  ]),
7734
8883
  "durationB-cell": withCtx(({ row }) => [
7735
- row.original.durationB !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationB)), 1)) : (openBlock(), createBlock("span", {
8884
+ row.original.durationB !== null ? (openBlock(), createBlock(_component_DurationValue, {
8885
+ key: 0,
8886
+ ms: row.original.durationB
8887
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
7736
8888
  key: 1,
7737
8889
  class: "text-gray-400"
7738
8890
  }, "—"))
@@ -7744,7 +8896,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7744
8896
  }, "—")) : (openBlock(), createBlock("span", {
7745
8897
  key: 1,
7746
8898
  class: row.original.delta > 0 ? "text-red-600" : row.original.delta < 0 ? "text-green-600" : "text-gray-500"
7747
- }, toDisplayString(row.original.delta > 0 ? "+" : "") + toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.delta)), 3))
8899
+ }, [
8900
+ createTextVNode(toDisplayString(row.original.delta > 0 ? "+" : ""), 1),
8901
+ createVNode(_component_DurationValue, {
8902
+ ms: row.original.delta,
8903
+ "unit-class": "opacity-60"
8904
+ }, null, 8, ["ms"])
8905
+ ], 2))
7748
8906
  ]),
7749
8907
  "percentChange-cell": withCtx(({ row }) => [
7750
8908
  row.original.percentChange === null ? (openBlock(), createBlock("span", {
@@ -7919,6 +9077,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7919
9077
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
7920
9078
  key: 1,
7921
9079
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusA),
9080
+ variant: "subtle",
7922
9081
  class: "capitalize"
7923
9082
  }, {
7924
9083
  default: withCtx(() => [
@@ -7934,6 +9093,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7934
9093
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
7935
9094
  key: 1,
7936
9095
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusB),
9096
+ variant: "subtle",
7937
9097
  class: "capitalize"
7938
9098
  }, {
7939
9099
  default: withCtx(() => [
@@ -7943,13 +9103,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7943
9103
  }, 1032, ["color"]))
7944
9104
  ]),
7945
9105
  "durationA-cell": withCtx(({ row }) => [
7946
- row.original.durationA !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationA)), 1)) : (openBlock(), createBlock("span", {
9106
+ row.original.durationA !== null ? (openBlock(), createBlock(_component_DurationValue, {
9107
+ key: 0,
9108
+ ms: row.original.durationA
9109
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
7947
9110
  key: 1,
7948
9111
  class: "text-gray-400"
7949
9112
  }, "—"))
7950
9113
  ]),
7951
9114
  "durationB-cell": withCtx(({ row }) => [
7952
- row.original.durationB !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationB)), 1)) : (openBlock(), createBlock("span", {
9115
+ row.original.durationB !== null ? (openBlock(), createBlock(_component_DurationValue, {
9116
+ key: 0,
9117
+ ms: row.original.durationB
9118
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
7953
9119
  key: 1,
7954
9120
  class: "text-gray-400"
7955
9121
  }, "—"))
@@ -7961,7 +9127,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7961
9127
  }, "—")) : (openBlock(), createBlock("span", {
7962
9128
  key: 1,
7963
9129
  class: row.original.delta > 0 ? "text-red-600" : row.original.delta < 0 ? "text-green-600" : "text-gray-500"
7964
- }, toDisplayString(row.original.delta > 0 ? "+" : "") + toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.delta)), 3))
9130
+ }, [
9131
+ createTextVNode(toDisplayString(row.original.delta > 0 ? "+" : ""), 1),
9132
+ createVNode(_component_DurationValue, {
9133
+ ms: row.original.delta,
9134
+ "unit-class": "opacity-60"
9135
+ }, null, 8, ["ms"])
9136
+ ], 2))
7965
9137
  ]),
7966
9138
  "percentChange-cell": withCtx(({ row }) => [
7967
9139
  row.original.percentChange === null ? (openBlock(), createBlock("span", {
@@ -8001,6 +9173,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
8001
9173
  ];
8002
9174
  }
8003
9175
  }),
9176
+ quarantine: withCtx((_2, _push3, _parent3, _scopeId2) => {
9177
+ if (_push3) {
9178
+ _push3(ssrRenderComponent(_component_QuarantineTable, {
9179
+ "project-id": String(unref(projectId)),
9180
+ "project-name": unref(project)?.name
9181
+ }, null, _parent3, _scopeId2));
9182
+ } else {
9183
+ return [
9184
+ createVNode(_component_QuarantineTable, {
9185
+ "project-id": String(unref(projectId)),
9186
+ "project-name": unref(project)?.name
9187
+ }, null, 8, ["project-id", "project-name"])
9188
+ ];
9189
+ }
9190
+ }),
8004
9191
  members: withCtx((_2, _push3, _parent3, _scopeId2) => {
8005
9192
  if (_push3) {
8006
9193
  _push3(ssrRenderComponent(_component_UCard, null, {
@@ -8253,6 +9440,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
8253
9440
  }), 128))
8254
9441
  ])) : createCommentVNode("", true)
8255
9442
  ])) : createCommentVNode("", true),
9443
+ createVNode(_component_DesktopProjectLinkCard, { "project-id": unref(projectId) }, null, 8, ["project-id"]),
8256
9444
  createVNode(_component_USelect, {
8257
9445
  modelValue: unref(activeTab),
8258
9446
  "onUpdate:modelValue": ($event) => isRef(activeTab) ? activeTab.value = $event : null,
@@ -8306,7 +9494,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
8306
9494
  type: "button",
8307
9495
  class: [
8308
9496
  "text-xs font-medium px-2 py-1 rounded border cursor-pointer focus:outline-none transition-colors",
8309
- isEnvironmentFilterActive(env) ? "bg-blue-600 text-white border-blue-600" : "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200 border-blue-300 dark:border-blue-700 hover:bg-blue-200 dark:hover:bg-blue-800"
9497
+ isEnvironmentFilterActive(env) ? "bg-blue-100 text-blue-700 border-blue-300 dark:bg-blue-900/40 dark:text-blue-300 dark:border-blue-700" : "bg-zinc-100 text-zinc-500 border-zinc-200 hover:bg-zinc-200 dark:bg-zinc-800 dark:text-zinc-400 dark:border-zinc-700 dark:hover:bg-zinc-700"
8310
9498
  ],
8311
9499
  onClick: ($event) => toggleEnvironmentFilter(env)
8312
9500
  }, toDisplayString(env), 11, ["onClick"]);
@@ -8422,10 +9610,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
8422
9610
  createVNode("span", { class: "text-xs text-gray-600" }, toDisplayString(("prettyDateFormat" in _ctx ? _ctx.prettyDateFormat : unref(prettyDateFormat))(row.original.startTime)), 1)
8423
9611
  ]),
8424
9612
  "environment-cell": withCtx(({ row }) => [
8425
- row.original.environment ? (openBlock(), createBlock("span", {
9613
+ row.original.environment ? (openBlock(), createBlock(_component_UBadge, {
8426
9614
  key: 0,
8427
- class: "text-xs font-medium bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200 px-1.5 py-0.5 rounded"
8428
- }, toDisplayString(row.original.environment), 1)) : createCommentVNode("", true)
9615
+ color: "info",
9616
+ variant: "subtle",
9617
+ size: "sm"
9618
+ }, {
9619
+ default: withCtx(() => [
9620
+ createTextVNode(toDisplayString(row.original.environment), 1)
9621
+ ]),
9622
+ _: 2
9623
+ }, 1024)) : createCommentVNode("", true)
8429
9624
  ]),
8430
9625
  "metadata-cell": withCtx(({ row }) => [
8431
9626
  row.original.metadata?.scm ? (openBlock(), createBlock("div", {
@@ -8452,7 +9647,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
8452
9647
  "did-not-run": row.original.didNotRunTests ?? 0,
8453
9648
  total: row.original.totalTests
8454
9649
  }, null, 8, ["passed", "failed", "skipped", "flaky", "did-not-run", "total"]),
8455
- createVNode("span", { class: "text-xs text-gray-500" }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.duration)), 1)
9650
+ createVNode(_component_DurationValue, {
9651
+ ms: row.original.duration,
9652
+ class: "text-xs text-gray-500"
9653
+ }, null, 8, ["ms"])
8456
9654
  ])
8457
9655
  ]),
8458
9656
  "reports-cell": withCtx(({ row }) => [
@@ -8767,6 +9965,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
8767
9965
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
8768
9966
  key: 1,
8769
9967
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusA),
9968
+ variant: "subtle",
8770
9969
  class: "capitalize"
8771
9970
  }, {
8772
9971
  default: withCtx(() => [
@@ -8782,6 +9981,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
8782
9981
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
8783
9982
  key: 1,
8784
9983
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusB),
9984
+ variant: "subtle",
8785
9985
  class: "capitalize"
8786
9986
  }, {
8787
9987
  default: withCtx(() => [
@@ -8791,13 +9991,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
8791
9991
  }, 1032, ["color"]))
8792
9992
  ]),
8793
9993
  "durationA-cell": withCtx(({ row }) => [
8794
- row.original.durationA !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationA)), 1)) : (openBlock(), createBlock("span", {
9994
+ row.original.durationA !== null ? (openBlock(), createBlock(_component_DurationValue, {
9995
+ key: 0,
9996
+ ms: row.original.durationA
9997
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
8795
9998
  key: 1,
8796
9999
  class: "text-gray-400"
8797
10000
  }, "—"))
8798
10001
  ]),
8799
10002
  "durationB-cell": withCtx(({ row }) => [
8800
- row.original.durationB !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationB)), 1)) : (openBlock(), createBlock("span", {
10003
+ row.original.durationB !== null ? (openBlock(), createBlock(_component_DurationValue, {
10004
+ key: 0,
10005
+ ms: row.original.durationB
10006
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
8801
10007
  key: 1,
8802
10008
  class: "text-gray-400"
8803
10009
  }, "—"))
@@ -8809,7 +10015,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
8809
10015
  }, "—")) : (openBlock(), createBlock("span", {
8810
10016
  key: 1,
8811
10017
  class: row.original.delta > 0 ? "text-red-600" : row.original.delta < 0 ? "text-green-600" : "text-gray-500"
8812
- }, toDisplayString(row.original.delta > 0 ? "+" : "") + toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.delta)), 3))
10018
+ }, [
10019
+ createTextVNode(toDisplayString(row.original.delta > 0 ? "+" : ""), 1),
10020
+ createVNode(_component_DurationValue, {
10021
+ ms: row.original.delta,
10022
+ "unit-class": "opacity-60"
10023
+ }, null, 8, ["ms"])
10024
+ ], 2))
8813
10025
  ]),
8814
10026
  "percentChange-cell": withCtx(({ row }) => [
8815
10027
  row.original.percentChange === null ? (openBlock(), createBlock("span", {
@@ -8990,6 +10202,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
8990
10202
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
8991
10203
  key: 1,
8992
10204
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusA),
10205
+ variant: "subtle",
8993
10206
  class: "capitalize"
8994
10207
  }, {
8995
10208
  default: withCtx(() => [
@@ -9005,6 +10218,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
9005
10218
  }, "—")) : (openBlock(), createBlock(_component_UBadge, {
9006
10219
  key: 1,
9007
10220
  color: ("getStatusColor" in _ctx ? _ctx.getStatusColor : unref(getStatusColor))(row.original.statusB),
10221
+ variant: "subtle",
9008
10222
  class: "capitalize"
9009
10223
  }, {
9010
10224
  default: withCtx(() => [
@@ -9014,13 +10228,19 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
9014
10228
  }, 1032, ["color"]))
9015
10229
  ]),
9016
10230
  "durationA-cell": withCtx(({ row }) => [
9017
- row.original.durationA !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationA)), 1)) : (openBlock(), createBlock("span", {
10231
+ row.original.durationA !== null ? (openBlock(), createBlock(_component_DurationValue, {
10232
+ key: 0,
10233
+ ms: row.original.durationA
10234
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
9018
10235
  key: 1,
9019
10236
  class: "text-gray-400"
9020
10237
  }, "—"))
9021
10238
  ]),
9022
10239
  "durationB-cell": withCtx(({ row }) => [
9023
- row.original.durationB !== null ? (openBlock(), createBlock("span", { key: 0 }, toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.durationB)), 1)) : (openBlock(), createBlock("span", {
10240
+ row.original.durationB !== null ? (openBlock(), createBlock(_component_DurationValue, {
10241
+ key: 0,
10242
+ ms: row.original.durationB
10243
+ }, null, 8, ["ms"])) : (openBlock(), createBlock("span", {
9024
10244
  key: 1,
9025
10245
  class: "text-gray-400"
9026
10246
  }, "—"))
@@ -9032,7 +10252,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
9032
10252
  }, "—")) : (openBlock(), createBlock("span", {
9033
10253
  key: 1,
9034
10254
  class: row.original.delta > 0 ? "text-red-600" : row.original.delta < 0 ? "text-green-600" : "text-gray-500"
9035
- }, toDisplayString(row.original.delta > 0 ? "+" : "") + toDisplayString(("formatDuration" in _ctx ? _ctx.formatDuration : unref(formatDuration))(row.original.delta)), 3))
10255
+ }, [
10256
+ createTextVNode(toDisplayString(row.original.delta > 0 ? "+" : ""), 1),
10257
+ createVNode(_component_DurationValue, {
10258
+ ms: row.original.delta,
10259
+ "unit-class": "opacity-60"
10260
+ }, null, 8, ["ms"])
10261
+ ], 2))
9036
10262
  ]),
9037
10263
  "percentChange-cell": withCtx(({ row }) => [
9038
10264
  row.original.percentChange === null ? (openBlock(), createBlock("span", {
@@ -9062,6 +10288,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
9062
10288
  "project-id": String(unref(projectId))
9063
10289
  }, null, 8, ["project-id"])
9064
10290
  ]),
10291
+ quarantine: withCtx(() => [
10292
+ createVNode(_component_QuarantineTable, {
10293
+ "project-id": String(unref(projectId)),
10294
+ "project-name": unref(project)?.name
10295
+ }, null, 8, ["project-id", "project-name"])
10296
+ ]),
9065
10297
  members: withCtx(() => [
9066
10298
  createVNode(_component_UCard, null, {
9067
10299
  header: withCtx(() => [
@@ -9162,4 +10394,4 @@ _sfc_main.setup = (props, ctx) => {
9162
10394
  };
9163
10395
 
9164
10396
  export { _sfc_main as default };
9165
- //# sourceMappingURL=index-DVUtBexc.mjs.map
10397
+ //# sourceMappingURL=index-hGHlmyxj.mjs.map