@piwitests/server 0.18.1 → 0.19.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 (773) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{BaDv5D7A.js → -09h6CA9.js} +1 -1
  3. package/.output/public/_nuxt/279D2RYp.js +1 -0
  4. package/.output/public/_nuxt/81InBX9v.js +1 -0
  5. package/.output/public/_nuxt/{CRpbGS75.js → Ar3IelOY.js} +1 -1
  6. package/.output/public/_nuxt/B33iXw77.js +1 -0
  7. package/.output/public/_nuxt/B3B9Ii2A.js +1 -0
  8. package/.output/public/_nuxt/B3HO8kuh.js +1 -0
  9. package/.output/public/_nuxt/B44A4LSJ.js +1 -0
  10. package/.output/public/_nuxt/{CPZ5wygb.js → B7NBP1C-.js} +1 -1
  11. package/.output/public/_nuxt/{Db_-yjYg.js → B9WhzpKO.js} +1 -1
  12. package/.output/public/_nuxt/{DoYgYLOd.js → BCMuIgP5.js} +1 -1
  13. package/.output/public/_nuxt/BDicZ1gQ.js +1 -0
  14. package/.output/public/_nuxt/BJ0XQElc.js +1 -0
  15. package/.output/public/_nuxt/{D4SFgXAf.js → BMvCSA6h.js} +1 -1
  16. package/.output/public/_nuxt/BPQoBGg5.js +1 -0
  17. package/.output/public/_nuxt/BPRffDuo.js +1 -0
  18. package/.output/public/_nuxt/BSIxhGsh.js +1 -0
  19. package/.output/public/_nuxt/BVaxh6Nl.js +4 -0
  20. package/.output/public/_nuxt/{BReNbog6.js → BX9ZXe98.js} +1 -1
  21. package/.output/public/_nuxt/{rm7OkgDG.js → BYDaY0Z7.js} +1 -1
  22. package/.output/public/_nuxt/{WAaPPk0g.js → Bc8mOoz9.js} +2 -2
  23. package/.output/public/_nuxt/BccXfBfI.js +1 -0
  24. package/.output/public/_nuxt/{Dbg8z684.js → BeLWlVK0.js} +1 -1
  25. package/.output/public/_nuxt/{CP0vUzbd.js → BfTuX0wq.js} +1 -1
  26. package/.output/public/_nuxt/BjaRappk.js +1 -0
  27. package/.output/public/_nuxt/{D3MWm6JP.js → Bn0YQDyy.js} +1 -1
  28. package/.output/public/_nuxt/Bp5ELvx9.js +1 -0
  29. package/.output/public/_nuxt/BpUaY9nH.js +2 -0
  30. package/.output/public/_nuxt/BqV0l12c.js +1 -0
  31. package/.output/public/_nuxt/{D8YZvjas.js → Bti38m-M.js} +1 -1
  32. package/.output/public/_nuxt/{DVgMaBxD.js → Bu2aaVIY.js} +3 -3
  33. package/.output/public/_nuxt/{CUDeMcEK.js → BuMC3WjZ.js} +1 -1
  34. package/.output/public/_nuxt/{Bi3i470l.js → BxCKKeYs.js} +1 -1
  35. package/.output/public/_nuxt/{BTYiG93l.js → C-elpgyr.js} +1 -1
  36. package/.output/public/_nuxt/C2_3mdPC.js +1 -0
  37. package/.output/public/_nuxt/{BoC6qaRF.js → C5iG7O4O.js} +4 -4
  38. package/.output/public/_nuxt/C7P1UCO2.js +1 -0
  39. package/.output/public/_nuxt/{BuuvTH9e.js → C95YAaJq.js} +1 -1
  40. package/.output/public/_nuxt/{DOr_4nln.js → C9_jrmk9.js} +2 -2
  41. package/.output/public/_nuxt/CDk0q2hV.js +2 -0
  42. package/.output/public/_nuxt/{DIA_NAIv.js → CGNkHojN.js} +3 -3
  43. package/.output/public/_nuxt/CHEFCN8Q.js +1 -0
  44. package/.output/public/_nuxt/CHNwfU1y.js +1 -0
  45. package/.output/public/_nuxt/CK_2LZBS.js +1 -0
  46. package/.output/public/_nuxt/CNFYDQmj.js +1 -0
  47. package/.output/public/_nuxt/{BfoG8R5a.js → CTxDO9fB.js} +1 -1
  48. package/.output/public/_nuxt/{B1CB30tg.js → CU5S9GCh.js} +1 -1
  49. package/.output/public/_nuxt/{BKaU95es.js → CUtJobDm.js} +1 -1
  50. package/.output/public/_nuxt/CV9-fTmY.js +1 -0
  51. package/.output/public/_nuxt/{BAkJhSAW.js → CYsTqbBS.js} +1 -1
  52. package/.output/public/_nuxt/{AjuKBlzz.js → CZfMdzfk.js} +1 -1
  53. package/.output/public/_nuxt/{lowCGL2S.js → Cdff9XNh.js} +1 -1
  54. package/.output/public/_nuxt/{quV6tp4n.js → ClOqkAcc.js} +1 -1
  55. package/.output/public/_nuxt/{Doul3p1_.js → CpjgB2aY.js} +1 -1
  56. package/.output/public/_nuxt/CrwJAwhk.js +1 -0
  57. package/.output/public/_nuxt/CtQBsNUb.js +1 -0
  58. package/.output/public/_nuxt/CuSVQEkS.js +3 -0
  59. package/.output/public/_nuxt/{wQZj69OY.js → CylWPruw.js} +1 -1
  60. package/.output/public/_nuxt/CzGyac8q.js +1 -0
  61. package/.output/public/_nuxt/D-c8ZSws.js +1 -0
  62. package/.output/public/_nuxt/{B6IHiVa1.js → D0HNloZ9.js} +1 -1
  63. package/.output/public/_nuxt/{ClIKZ4qY.js → D55D4EYo.js} +1 -1
  64. package/.output/public/_nuxt/{Bi9DO8jm.js → DDDpCFpF.js} +1 -1
  65. package/.output/public/_nuxt/{va1mwSm9.js → DEFEpYzn.js} +1 -1
  66. package/.output/public/_nuxt/DGfAxLHV.js +1 -0
  67. package/.output/public/_nuxt/DHDtnj7p.js +1 -0
  68. package/.output/public/_nuxt/DLSrtpsA.js +1 -0
  69. package/.output/public/_nuxt/DP8hfJ9h.js +1 -0
  70. package/.output/public/_nuxt/DS636elg.js +1 -0
  71. package/.output/public/_nuxt/{D51_cB9D.js → DT53RWbC.js} +1 -1
  72. package/.output/public/_nuxt/DVDXJYq2.js +2 -0
  73. package/.output/public/_nuxt/DW0xl3I6.js +17 -0
  74. package/.output/public/_nuxt/{BEB2Mv6B.js → DX-MDGb3.js} +1 -1
  75. package/.output/public/_nuxt/DcmZRa_F.js +1 -0
  76. package/.output/public/_nuxt/DgE2YE3R.js +1 -0
  77. package/.output/public/_nuxt/Dgf5N4Ng.js +1 -0
  78. package/.output/public/_nuxt/DiOLdHBC.js +1 -0
  79. package/.output/public/_nuxt/DiZyJYez.js +1 -0
  80. package/.output/public/_nuxt/Dk9fwOCm.js +34 -0
  81. package/.output/public/_nuxt/{DRE6Aqqp.js → Dnpkl-1q.js} +1 -1
  82. package/.output/public/_nuxt/DoUy4UHi.js +44 -0
  83. package/.output/public/_nuxt/{empGC_x-.js → DprVVyUQ.js} +1 -1
  84. package/.output/public/_nuxt/{BVDBIVAQ.js → DslPMqfa.js} +1 -1
  85. package/.output/public/_nuxt/{Vnfkr1pJ.js → FUXhyidq.js} +1 -1
  86. package/.output/public/_nuxt/HXerICAi.js +79 -0
  87. package/.output/public/_nuxt/{Do6zIWQf.js → IvQlbZk6.js} +1 -1
  88. package/.output/public/_nuxt/{n-QWmQgc.js → Jo8kRmHz.js} +1 -1
  89. package/.output/public/_nuxt/{BsDB_eCd.js → KnfsST6Y.js} +1 -1
  90. package/.output/public/_nuxt/NQikbhmK.js +253 -0
  91. package/.output/public/_nuxt/OSduWzyz.js +1 -0
  92. package/.output/public/_nuxt/SfMRXW25.js +5 -0
  93. package/.output/public/_nuxt/{mlAADjK3.js → SlIRLREZ.js} +2 -2
  94. package/.output/public/_nuxt/TagBadge.By1E6r4y.css +1 -0
  95. package/.output/public/_nuxt/WsxFTEFq.js +10 -0
  96. package/.output/public/_nuxt/YVN7WG7q.js +1 -0
  97. package/.output/public/_nuxt/{CRcjGmf7.js → ZFiQCMUB.js} +1 -1
  98. package/.output/public/_nuxt/aQgs_c6e.js +9 -0
  99. package/.output/public/_nuxt/builds/latest.json +1 -1
  100. package/.output/public/_nuxt/builds/meta/ab473028-4b37-4884-b243-b8f6e5046e5e.json +1 -0
  101. package/.output/public/_nuxt/{Dwp3GkV-.js → cHAnlQbv.js} +1 -1
  102. package/.output/public/_nuxt/dYCKgE-3.js +5 -0
  103. package/.output/public/_nuxt/{DnThe2U0.js → eaVkJRSa.js} +1 -1
  104. package/.output/public/_nuxt/entry.CPhW41mh.css +1 -0
  105. package/.output/public/_nuxt/{DoFSKAvY.js → eptP4pGv.js} +1 -1
  106. package/.output/public/_nuxt/fVcG504p.js +1 -0
  107. package/.output/public/_nuxt/g26aVPxc.js +1 -0
  108. package/.output/public/_nuxt/{wGpfdK6o.js → ndShiWE8.js} +1 -1
  109. package/.output/public/_nuxt/nv9-6vBK.js +1 -0
  110. package/.output/public/_nuxt/rWNTSFD6.js +3 -0
  111. package/.output/public/_nuxt/tvgqrYDd.js +1 -0
  112. package/.output/public/_nuxt/{DCMFuzDI.js → y17lMTFy.js} +1 -1
  113. package/.output/public/_nuxt/{DM_YaJgJ.js → ybDYeNxd.js} +1 -1
  114. package/.output/public/_nuxt/{B_aSGB8S.js → zQyPuvV1.js} +1 -1
  115. package/.output/public/demo/seed.version.json +2 -2
  116. package/.output/server/chunks/_/ai-prompt-preview.mjs +38 -0
  117. package/.output/server/chunks/_/ai-prompt-preview.mjs.map +1 -0
  118. package/.output/server/chunks/_/collect.mjs +122 -0
  119. package/.output/server/chunks/_/collect.mjs.map +1 -0
  120. package/.output/server/chunks/_/import-runs.mjs +351 -0
  121. package/.output/server/chunks/_/import-runs.mjs.map +1 -0
  122. package/.output/server/chunks/_/markers.mjs +1 -1
  123. package/.output/server/chunks/_/quarantine.mjs +112 -0
  124. package/.output/server/chunks/_/quarantine.mjs.map +1 -0
  125. package/.output/server/chunks/_/users.mjs +1 -1
  126. package/.output/server/chunks/build/{Alert-Bp1Wz_sq.mjs → Alert-C4xq8lao.mjs} +2 -2
  127. package/.output/server/chunks/build/Alert-C4xq8lao.mjs.map +1 -0
  128. package/.output/server/chunks/build/{Breadcrumb-C9ZPTLym.mjs → Breadcrumb-Ak2Lg3oM.mjs} +3 -3
  129. package/.output/server/chunks/build/Breadcrumb-Ak2Lg3oM.mjs.map +1 -0
  130. package/.output/server/chunks/build/{BreadcrumbNav-C3y42Vun.mjs → BreadcrumbNav-DO7I_z-n.mjs} +3 -3
  131. package/.output/server/chunks/build/BreadcrumbNav-DO7I_z-n.mjs.map +1 -0
  132. package/.output/server/chunks/build/{BrowserBadge-DNCp9pF-.mjs → BrowserBadge-D33lqUcj.mjs} +5 -5
  133. package/.output/server/chunks/build/BrowserBadge-D33lqUcj.mjs.map +1 -0
  134. package/.output/server/chunks/build/{ChartCard-Fr557IbV.mjs → ChartCard-Y1UKwMsf.mjs} +2 -2
  135. package/.output/server/chunks/build/ChartCard-Y1UKwMsf.mjs.map +1 -0
  136. package/.output/server/chunks/build/{Checkbox-cVOSIY93.mjs → Checkbox-DvUBGagc.mjs} +8 -8
  137. package/.output/server/chunks/build/Checkbox-DvUBGagc.mjs.map +1 -0
  138. package/.output/server/chunks/build/{CiEnvCard-DXPOhdSG.mjs → CiEnvCard-CrjOM17n.mjs} +25 -34
  139. package/.output/server/chunks/build/CiEnvCard-CrjOM17n.mjs.map +1 -0
  140. package/.output/server/chunks/build/{CodeBlock-BGwNmJ8J.mjs → CodeBlock-BgE-NSmE.mjs} +7 -22
  141. package/.output/server/chunks/build/CodeBlock-BgE-NSmE.mjs.map +1 -0
  142. package/.output/server/chunks/build/{DashboardNavbar-Bdp-OwTN.mjs → DashboardNavbar-BHmMSPX7.mjs} +3 -3
  143. package/.output/server/chunks/build/DashboardNavbar-BHmMSPX7.mjs.map +1 -0
  144. package/.output/server/chunks/build/{DashboardSidebarToggle-Ji6ADuqF.mjs → DashboardSidebarToggle-DCTnHiIv.mjs} +3 -3
  145. package/.output/server/chunks/build/DashboardSidebarToggle-DCTnHiIv.mjs.map +1 -0
  146. package/.output/server/chunks/build/{DataLocationCard-D6xSOrme.mjs → DataLocationCard-B_YHdzSz.mjs} +3 -3
  147. package/.output/server/chunks/build/DataLocationCard-B_YHdzSz.mjs.map +1 -0
  148. package/.output/server/chunks/build/{DiagnosisPanel-DV1xwGu4.mjs → DiagnosisPanel-B646dK4p.mjs} +17 -528
  149. package/.output/server/chunks/build/DiagnosisPanel-B646dK4p.mjs.map +1 -0
  150. package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs +43 -0
  151. package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs.map +1 -0
  152. package/.output/server/chunks/build/{EmptyState-DV3oT_xz.mjs → EmptyState-Dtlab7S9.mjs} +3 -3
  153. package/.output/server/chunks/build/EmptyState-Dtlab7S9.mjs.map +1 -0
  154. package/.output/server/chunks/build/{EntityLinks-DeOP13Kr.mjs → EntityLinks-D3fp57pR.mjs} +6 -6
  155. package/.output/server/chunks/build/EntityLinks-D3fp57pR.mjs.map +1 -0
  156. package/.output/server/chunks/build/{EnvManagedBadge-Qpn58Nmr.mjs → EnvManagedBadge-Bg3FSiU1.mjs} +3 -3
  157. package/.output/server/chunks/build/EnvManagedBadge-Bg3FSiU1.mjs.map +1 -0
  158. package/.output/server/chunks/build/{FormField-B-GSn_VR.mjs → FormField-B0HKsdMd.mjs} +3 -3
  159. package/.output/server/chunks/build/FormField-B0HKsdMd.mjs.map +1 -0
  160. package/.output/server/chunks/build/{HelpHint-YEMWtKu1.mjs → HelpHint-DrcIv-Oj.mjs} +53 -6
  161. package/.output/server/chunks/build/HelpHint-DrcIv-Oj.mjs.map +1 -0
  162. package/.output/server/chunks/build/{Label-DBvbHd3A.mjs → Label-DYDR1Oeh.mjs} +2 -2
  163. package/.output/server/chunks/build/Label-DYDR1Oeh.mjs.map +1 -0
  164. package/.output/server/chunks/build/{MiniRunBars-C3HG-EYm.mjs → MiniRunBars-CZMugDrh.mjs} +2 -2
  165. package/.output/server/chunks/build/MiniRunBars-CZMugDrh.mjs.map +1 -0
  166. package/.output/server/chunks/build/{Modal-CfA78Hm1.mjs → Modal-Ck2XLt8d.mjs} +2 -2
  167. package/.output/server/chunks/build/Modal-Ck2XLt8d.mjs.map +1 -0
  168. package/.output/server/chunks/build/{OpenInIdeLink-B92wosXu.mjs → OpenInIdeLink-C4MXA8ya.mjs} +6 -6
  169. package/.output/server/chunks/build/{OpenInIdeLink-B92wosXu.mjs.map → OpenInIdeLink-C4MXA8ya.mjs.map} +1 -1
  170. package/.output/server/chunks/build/{ProjectTestCasesTable-9Ia825h8.mjs → ProjectTestCasesTable-CxfQ5wtN.mjs} +120 -45
  171. package/.output/server/chunks/build/ProjectTestCasesTable-CxfQ5wtN.mjs.map +1 -0
  172. package/.output/server/chunks/build/{RovingFocusItem-CxhHdNGo.mjs → RovingFocusItem-BJSzTBjy.mjs} +2 -2
  173. package/.output/server/chunks/build/RovingFocusItem-BJSzTBjy.mjs.map +1 -0
  174. package/.output/server/chunks/build/{RunReports-BpJqLHY9.mjs → RunReports-DFLv51TX.mjs} +8 -6
  175. package/.output/server/chunks/build/RunReports-DFLv51TX.mjs.map +1 -0
  176. package/.output/server/chunks/build/{RunStatusBadge-BhmJ_RKM.mjs → RunStatusBadge-FfGb6bkW.mjs} +3 -2
  177. package/.output/server/chunks/build/RunStatusBadge-FfGb6bkW.mjs.map +1 -0
  178. package/.output/server/chunks/build/{SectionCard-COd9TuDq.mjs → SectionCard-CN-v0FZ_.mjs} +2 -2
  179. package/.output/server/chunks/build/SectionCard-CN-v0FZ_.mjs.map +1 -0
  180. package/.output/server/chunks/build/{Select-ppPz926C.mjs → Select-CUqj50wi.mjs} +4 -4
  181. package/.output/server/chunks/build/Select-CUqj50wi.mjs.map +1 -0
  182. package/.output/server/chunks/build/{SelectMenu-799c_Ils.mjs → SelectMenu-Db7osY7J.mjs} +4 -4
  183. package/.output/server/chunks/build/{SelectMenu-799c_Ils.mjs.map → SelectMenu-Db7osY7J.mjs.map} +1 -1
  184. package/.output/server/chunks/build/{Separator-CxZdx8kw.mjs → Separator-CR4WcEKD.mjs} +2 -2
  185. package/.output/server/chunks/build/Separator-CR4WcEKD.mjs.map +1 -0
  186. package/.output/server/chunks/build/{SettingsField-DDD4oqys.mjs → SettingsField-D6iEYbEc.mjs} +6 -6
  187. package/.output/server/chunks/build/SettingsField-D6iEYbEc.mjs.map +1 -0
  188. package/.output/server/chunks/build/{Slideover-B95Rj237.mjs → Slideover-DgCa80mf.mjs} +3 -3
  189. package/.output/server/chunks/build/Slideover-DgCa80mf.mjs.map +1 -0
  190. package/.output/server/chunks/build/{Switch-xQQ3_ME1.mjs → Switch-CgUioOYB.mjs} +5 -5
  191. package/.output/server/chunks/build/Switch-CgUioOYB.mjs.map +1 -0
  192. package/.output/server/chunks/build/{Table-CPhhVzDv.mjs → Table-BRk04Hd2.mjs} +3 -3
  193. package/.output/server/chunks/build/Table-BRk04Hd2.mjs.map +1 -0
  194. package/.output/server/chunks/build/{Tabs-BV9XqjoO.mjs → Tabs-Bbsg9wag.mjs} +3 -3
  195. package/.output/server/chunks/build/Tabs-Bbsg9wag.mjs.map +1 -0
  196. package/.output/server/chunks/build/TagBadge-DwzoFCBb.mjs +31 -0
  197. package/.output/server/chunks/build/TagBadge-DwzoFCBb.mjs.map +1 -0
  198. package/.output/server/chunks/build/TagBadge-styles.jhuZ4NjP.mjs +8 -0
  199. package/.output/server/chunks/build/TagBadge-styles.jhuZ4NjP.mjs.map +1 -0
  200. package/.output/server/chunks/build/{TestCaseHistoryChart-DMb-xSJa.mjs → TestCaseHistoryChart-nMLPhdvD.mjs} +6 -6
  201. package/.output/server/chunks/build/TestCaseHistoryChart-nMLPhdvD.mjs.map +1 -0
  202. package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs +200 -0
  203. package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs.map +1 -0
  204. package/.output/server/chunks/build/{TestStatusBar-CEzt76wk.mjs → TestStatusBar-j6h2Jp6A.mjs} +15 -15
  205. package/.output/server/chunks/build/TestStatusBar-j6h2Jp6A.mjs.map +1 -0
  206. package/.output/server/chunks/build/{Textarea-DrrqQUVG.mjs → Textarea-Dv2-lOvW.mjs} +2 -2
  207. package/.output/server/chunks/build/Textarea-Dv2-lOvW.mjs.map +1 -0
  208. package/.output/server/chunks/build/{Tooltip-7vwuDPrZ.mjs → Tooltip-BOazooWP.mjs} +3 -3
  209. package/.output/server/chunks/build/Tooltip-BOazooWP.mjs.map +1 -0
  210. package/.output/server/chunks/build/{VisuallyHiddenInput-C9eJVpPW.mjs → VisuallyHiddenInput-D6kBJxVd.mjs} +2 -2
  211. package/.output/server/chunks/build/VisuallyHiddenInput-D6kBJxVd.mjs.map +1 -0
  212. package/.output/server/chunks/build/{_id_-B2yirIuA.mjs → _id_-B78ky13D.mjs} +798 -358
  213. package/.output/server/chunks/build/_id_-B78ky13D.mjs.map +1 -0
  214. package/.output/server/chunks/build/{_id_-bWcP2xFl.mjs → _id_-BHh65pfg.mjs} +690 -443
  215. package/.output/server/chunks/build/_id_-BHh65pfg.mjs.map +1 -0
  216. package/.output/server/chunks/build/{_id_-B4V5fop6.mjs → _id_-Rzkqx55x.mjs} +297 -60
  217. package/.output/server/chunks/build/{_id_-B4V5fop6.mjs.map → _id_-Rzkqx55x.mjs.map} +1 -1
  218. package/.output/server/chunks/build/{_id_-CE0Gso6i.mjs → _id_-z5N6HPyC.mjs} +89 -40
  219. package/.output/server/chunks/build/_id_-z5N6HPyC.mjs.map +1 -0
  220. package/.output/server/chunks/build/{about-CoJjvUwM.mjs → about-CvSP73Ug.mjs} +100 -52
  221. package/.output/server/chunks/build/about-CvSP73Ug.mjs.map +1 -0
  222. package/.output/server/chunks/build/{account-Cn-eZqXM.mjs → account-DAfvaD-F.mjs} +21 -9
  223. package/.output/server/chunks/build/account-DAfvaD-F.mjs.map +1 -0
  224. package/.output/server/chunks/build/{ai-7jdaPOmj.mjs → ai-B4VJ9K1K.mjs} +45 -23
  225. package/.output/server/chunks/build/{ai-7jdaPOmj.mjs.map → ai-B4VJ9K1K.mjs.map} +1 -1
  226. package/.output/server/chunks/build/{analytics-B276WPeU.mjs → analytics-CJPC6t4L.mjs} +65 -39
  227. package/.output/server/chunks/build/{analytics-B276WPeU.mjs.map → analytics-CJPC6t4L.mjs.map} +1 -1
  228. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  229. package/.output/server/chunks/build/compare-RxHSOdsO.mjs +12 -0
  230. package/.output/server/chunks/build/{db.client-aHcD0wyX.mjs → db.client-CQoVTYB9.mjs} +83 -5
  231. package/.output/server/chunks/build/db.client-CQoVTYB9.mjs.map +1 -0
  232. package/.output/server/chunks/build/{default-BSzdkM_L.mjs → default-zvbFgDJG.mjs} +36 -24
  233. package/.output/server/chunks/build/default-zvbFgDJG.mjs.map +1 -0
  234. package/.output/server/chunks/build/{docs-BN_x1OW3.mjs → docs-DyuVEgtB.mjs} +30 -49
  235. package/.output/server/chunks/build/{docs-BN_x1OW3.mjs.map → docs-DyuVEgtB.mjs.map} +1 -1
  236. package/.output/server/chunks/build/{edit-C9Z7oZeu.mjs → edit-CFR5g2Qf.mjs} +30 -18
  237. package/.output/server/chunks/build/edit-CFR5g2Qf.mjs.map +1 -0
  238. package/.output/server/chunks/build/{fetch-8kznMtBM.mjs → fetch-B4FwBOzu.mjs} +3 -3
  239. package/.output/server/chunks/build/fetch-B4FwBOzu.mjs.map +1 -0
  240. package/.output/server/chunks/build/{forgot-password-BqPF4Rxs.mjs → forgot-password-CC__1OnV.mjs} +17 -5
  241. package/.output/server/chunks/build/forgot-password-CC__1OnV.mjs.map +1 -0
  242. package/.output/server/chunks/build/{help-content-DmFnuhNu.mjs → help-content-C876a9WD.mjs} +37 -8
  243. package/.output/server/chunks/build/help-content-C876a9WD.mjs.map +1 -0
  244. package/.output/server/chunks/build/import-CZo3djDi.mjs +1021 -0
  245. package/.output/server/chunks/build/import-CZo3djDi.mjs.map +1 -0
  246. package/.output/server/chunks/build/{index-CULN3-en.mjs → index-CU2nZhAa.mjs} +113 -42
  247. package/.output/server/chunks/build/index-CU2nZhAa.mjs.map +1 -0
  248. package/.output/server/chunks/build/{index-DVUtBexc.mjs → index-D7fe97l3.mjs} +1305 -281
  249. package/.output/server/chunks/build/index-D7fe97l3.mjs.map +1 -0
  250. package/.output/server/chunks/build/{index-BR9hw6qk.mjs → index-Stqw0dEI.mjs} +50 -30
  251. package/.output/server/chunks/build/index-Stqw0dEI.mjs.map +1 -0
  252. package/.output/server/chunks/build/{index-BK9PTRpd.mjs → index-gCw_y4ZJ.mjs} +87 -70
  253. package/.output/server/chunks/build/{index-BK9PTRpd.mjs.map → index-gCw_y4ZJ.mjs.map} +1 -1
  254. package/.output/server/chunks/build/{index-Ba-Fifra.mjs → index-tR6owKzj.mjs} +18 -6
  255. package/.output/server/chunks/build/index-tR6owKzj.mjs.map +1 -0
  256. package/.output/server/chunks/build/{isValueEqualOrExist-DBZjbD_3.mjs → isValueEqualOrExist-D2qw9YEr.mjs} +3 -3
  257. package/.output/server/chunks/build/isValueEqualOrExist-D2qw9YEr.mjs.map +1 -0
  258. package/.output/server/chunks/build/{login-D2XZDuek.mjs → login-Da4u1IlW.mjs} +19 -7
  259. package/.output/server/chunks/build/login-Da4u1IlW.mjs.map +1 -0
  260. package/.output/server/chunks/build/{mcp-_o6cMS6m.mjs → mcp-B3IUvRgD.mjs} +27 -21
  261. package/.output/server/chunks/build/mcp-B3IUvRgD.mjs.map +1 -0
  262. package/.output/server/chunks/build/{notifications-Dzm9c0u_.mjs → notifications-abDv0id8.mjs} +27 -21
  263. package/.output/server/chunks/build/notifications-abDv0id8.mjs.map +1 -0
  264. package/.output/server/chunks/build/pr-feedback-DjZID6q-.mjs +368 -0
  265. package/.output/server/chunks/build/pr-feedback-DjZID6q-.mjs.map +1 -0
  266. package/.output/server/chunks/build/{reset-password-gpFzIEDj.mjs → reset-password-BmrUS4ZD.mjs} +17 -5
  267. package/.output/server/chunks/build/reset-password-BmrUS4ZD.mjs.map +1 -0
  268. package/.output/server/chunks/build/server.mjs +238 -36
  269. package/.output/server/chunks/build/{settings-pNyPBXVa.mjs → settings-Du7YqF8i.mjs} +23 -10
  270. package/.output/server/chunks/build/settings-Du7YqF8i.mjs.map +1 -0
  271. package/.output/server/chunks/build/{settings-metadata-B0wo5R-W.mjs → settings-metadata-DrEqWcW-.mjs} +11 -2
  272. package/.output/server/chunks/build/settings-metadata-DrEqWcW-.mjs.map +1 -0
  273. package/.output/server/chunks/build/{storage-XelzuyPy.mjs → storage-B4vzxd8G.mjs} +41 -31
  274. package/.output/server/chunks/build/storage-B4vzxd8G.mjs.map +1 -0
  275. package/.output/server/chunks/build/styles.mjs +1 -0
  276. package/.output/server/chunks/build/{tags-DrCQ7QSw.mjs → tags-DauTe_F-.mjs} +22 -10
  277. package/.output/server/chunks/build/tags-DauTe_F-.mjs.map +1 -0
  278. package/.output/server/chunks/build/{test-cases-pmOxi-AN.mjs → test-cases-DUvaO1He.mjs} +38 -24
  279. package/.output/server/chunks/build/test-cases-DUvaO1He.mjs.map +1 -0
  280. package/.output/server/chunks/build/{timeout-hygiene-CNs71Iah.mjs → timeout-hygiene-CbnSaVbK.mjs} +20 -8
  281. package/.output/server/chunks/build/timeout-hygiene-CbnSaVbK.mjs.map +1 -0
  282. package/.output/server/chunks/build/{useAiStatus-ZO987RY7.mjs → useAiStatus-CWvIo32Q.mjs} +89 -89
  283. package/.output/server/chunks/build/useAiStatus-CWvIo32Q.mjs.map +1 -0
  284. package/.output/server/chunks/build/{useCopy-BQQKcwlq.mjs → useCopy-CeKWgHyT.mjs} +2 -2
  285. package/.output/server/chunks/build/useCopy-CeKWgHyT.mjs.map +1 -0
  286. package/.output/server/chunks/build/{PageStateCard-Bwee6JTk.mjs → useCopyRich-BemRsKgv.mjs} +418 -39
  287. package/.output/server/chunks/build/useCopyRich-BemRsKgv.mjs.map +1 -0
  288. package/.output/server/chunks/build/useDesktopDownload-D49JRQSw.mjs +46 -0
  289. package/.output/server/chunks/build/useDesktopDownload-D49JRQSw.mjs.map +1 -0
  290. package/.output/server/chunks/build/{useFormControl-BLpq1s4O.mjs → useFormControl-CZ9So7iX.mjs} +2 -2
  291. package/.output/server/chunks/build/useFormControl-CZ9So7iX.mjs.map +1 -0
  292. package/.output/server/chunks/build/{useOpenInIde-kMZ7Jw5c.mjs → useOpenInIde-4GFf-kdi.mjs} +2 -2
  293. package/.output/server/chunks/build/useOpenInIde-4GFf-kdi.mjs.map +1 -0
  294. package/.output/server/chunks/build/{useSettingsNav-NjI2seBy.mjs → useSettingsNav-C3O866KC.mjs} +6 -6
  295. package/.output/server/chunks/build/useSettingsNav-C3O866KC.mjs.map +1 -0
  296. package/.output/server/chunks/build/{useTreeViewCookie-DVYpxW-p.mjs → useTreeViewCookie-CQjQdTkH.mjs} +2 -2
  297. package/.output/server/chunks/build/useTreeViewCookie-CQjQdTkH.mjs.map +1 -0
  298. package/.output/server/chunks/build/{users-NmAUZs3i.mjs → users-CTUqXyGh.mjs} +22 -10
  299. package/.output/server/chunks/build/users-CTUqXyGh.mjs.map +1 -0
  300. package/.output/server/chunks/build/{virtualizer-ZaqK4guJ.mjs → virtualizer-Cd1hhlxC.mjs} +5 -5
  301. package/.output/server/chunks/build/virtualizer-Cd1hhlxC.mjs.map +1 -0
  302. package/.output/server/chunks/build/{wasted-time-CguAF9zc.mjs → wasted-time-lYkx5YO4.mjs} +26 -14
  303. package/.output/server/chunks/build/wasted-time-lYkx5YO4.mjs.map +1 -0
  304. package/.output/server/chunks/nitro/nitro.mjs +4914 -1102
  305. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  306. package/.output/server/chunks/routes/__piwi/session.get.mjs +13 -1
  307. package/.output/server/chunks/routes/__piwi/session.get.mjs.map +1 -1
  308. package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs +12 -0
  309. package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs.map +1 -1
  310. package/.output/server/chunks/routes/api/admin/stats.get.mjs +12 -0
  311. package/.output/server/chunks/routes/api/admin/stats.get.mjs.map +1 -1
  312. package/.output/server/chunks/routes/api/ai/status.get.mjs +12 -0
  313. package/.output/server/chunks/routes/api/ai/status.get.mjs.map +1 -1
  314. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +12 -0
  315. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs.map +1 -1
  316. package/.output/server/chunks/routes/api/auth/change-password.post.mjs +12 -0
  317. package/.output/server/chunks/routes/api/auth/change-password.post.mjs.map +1 -1
  318. package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs +12 -0
  319. package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs.map +1 -1
  320. package/.output/server/chunks/routes/api/auth/login.post.mjs +12 -0
  321. package/.output/server/chunks/routes/api/auth/login.post.mjs.map +1 -1
  322. package/.output/server/chunks/routes/api/auth/logout.post.mjs +12 -0
  323. package/.output/server/chunks/routes/api/auth/logout.post.mjs.map +1 -1
  324. package/.output/server/chunks/routes/api/auth/me.get.mjs +12 -0
  325. package/.output/server/chunks/routes/api/auth/me.get.mjs.map +1 -1
  326. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +12 -0
  327. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs.map +1 -1
  328. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +12 -0
  329. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs.map +1 -1
  330. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +12 -0
  331. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs.map +1 -1
  332. package/.output/server/chunks/routes/api/auth/reset-password.post.mjs +12 -0
  333. package/.output/server/chunks/routes/api/auth/reset-password.post.mjs.map +1 -1
  334. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +12 -0
  335. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs.map +1 -1
  336. package/.output/server/chunks/routes/api/auth/setup.get.mjs +12 -0
  337. package/.output/server/chunks/routes/api/auth/setup.get.mjs.map +1 -1
  338. package/.output/server/chunks/routes/api/auth/setup.post.mjs +12 -0
  339. package/.output/server/chunks/routes/api/auth/setup.post.mjs.map +1 -1
  340. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +12 -0
  341. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs.map +1 -1
  342. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +12 -0
  343. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs.map +1 -1
  344. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +12 -0
  345. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs.map +1 -1
  346. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +12 -0
  347. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs.map +1 -1
  348. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +12 -0
  349. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs.map +1 -1
  350. package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs +12 -0
  351. package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs.map +1 -1
  352. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +12 -0
  353. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs.map +1 -1
  354. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +12 -0
  355. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs.map +1 -1
  356. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +12 -0
  357. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs.map +1 -1
  358. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +12 -0
  359. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs.map +1 -1
  360. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +24 -1
  361. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs.map +1 -1
  362. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +13 -1
  363. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs.map +1 -1
  364. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +13 -1
  365. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs.map +1 -1
  366. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +13 -1
  367. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs.map +1 -1
  368. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +13 -1
  369. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs.map +1 -1
  370. package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs +64 -0
  371. package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs.map +1 -0
  372. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +13 -1
  373. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs.map +1 -1
  374. package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs +56 -0
  375. package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs.map +1 -0
  376. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +13 -1
  377. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs.map +1 -1
  378. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +12 -0
  379. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs.map +1 -1
  380. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +13 -1
  381. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs.map +1 -1
  382. package/.output/server/chunks/routes/api/files/_...path_.get.mjs +13 -32
  383. package/.output/server/chunks/routes/api/files/_...path_.get.mjs.map +1 -1
  384. package/.output/server/chunks/routes/api/health.get.mjs +13 -1
  385. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  386. package/.output/server/chunks/routes/api/index.get.mjs +12 -0
  387. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  388. package/.output/server/chunks/routes/api/index.get2.mjs +13 -1
  389. package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
  390. package/.output/server/chunks/routes/api/index.get3.mjs +13 -1
  391. package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
  392. package/.output/server/chunks/routes/api/index.get4.mjs +13 -1
  393. package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
  394. package/.output/server/chunks/routes/api/index.get5.mjs +12 -0
  395. package/.output/server/chunks/routes/api/index.get5.mjs.map +1 -1
  396. package/.output/server/chunks/routes/api/index.post.mjs +12 -0
  397. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  398. package/.output/server/chunks/routes/api/index.post2.mjs +13 -1
  399. package/.output/server/chunks/routes/api/index.post2.mjs.map +1 -1
  400. package/.output/server/chunks/routes/api/index.post3.mjs +13 -1
  401. package/.output/server/chunks/routes/api/index.post3.mjs.map +1 -1
  402. package/.output/server/chunks/routes/api/index.post4.mjs +13 -1
  403. package/.output/server/chunks/routes/api/index.post4.mjs.map +1 -1
  404. package/.output/server/chunks/routes/api/index.post5.mjs +13 -1
  405. package/.output/server/chunks/routes/api/index.post5.mjs.map +1 -1
  406. package/.output/server/chunks/routes/api/index.post6.mjs +12 -0
  407. package/.output/server/chunks/routes/api/index.post6.mjs.map +1 -1
  408. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +13 -1
  409. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs.map +1 -1
  410. package/.output/server/chunks/routes/api/links/_id_.delete.mjs +13 -1
  411. package/.output/server/chunks/routes/api/links/_id_.delete.mjs.map +1 -1
  412. package/.output/server/chunks/routes/api/links/_id_.patch.mjs +13 -1
  413. package/.output/server/chunks/routes/api/links/_id_.patch.mjs.map +1 -1
  414. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +13 -1
  415. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs.map +1 -1
  416. package/.output/server/chunks/routes/api/markers/_id_.put.mjs +13 -1
  417. package/.output/server/chunks/routes/api/markers/_id_.put.mjs.map +1 -1
  418. package/.output/server/chunks/routes/api/notifications/stream.get.mjs +13 -1
  419. package/.output/server/chunks/routes/api/notifications/stream.get.mjs.map +1 -1
  420. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +13 -1
  421. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs.map +1 -1
  422. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +13 -1
  423. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs.map +1 -1
  424. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +13 -1
  425. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs.map +1 -1
  426. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +22 -2
  427. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs.map +1 -1
  428. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +13 -1
  429. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs.map +1 -1
  430. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +13 -1
  431. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs.map +1 -1
  432. package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs +13 -1
  433. package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs.map +1 -1
  434. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +13 -1
  435. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs.map +1 -1
  436. package/.output/server/chunks/routes/api/projects/_id/members.put.mjs +13 -1
  437. package/.output/server/chunks/routes/api/projects/_id/members.put.mjs.map +1 -1
  438. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +13 -1
  439. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs.map +1 -1
  440. package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs +58 -0
  441. package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs.map +1 -0
  442. package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs +57 -0
  443. package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs.map +1 -0
  444. package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs +72 -0
  445. package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs.map +1 -0
  446. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +13 -1
  447. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs.map +1 -1
  448. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +13 -1
  449. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs.map +1 -1
  450. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +13 -1
  451. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs.map +1 -1
  452. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +13 -1
  453. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs.map +1 -1
  454. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +13 -1
  455. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs.map +1 -1
  456. package/.output/server/chunks/routes/api/projects/_id_.get.mjs +13 -1
  457. package/.output/server/chunks/routes/api/projects/_id_.get.mjs.map +1 -1
  458. package/.output/server/chunks/routes/api/projects/_id_.put.mjs +13 -1
  459. package/.output/server/chunks/routes/api/projects/_id_.put.mjs.map +1 -1
  460. package/.output/server/chunks/routes/api/projects/menu.get.mjs +13 -1
  461. package/.output/server/chunks/routes/api/projects/menu.get.mjs.map +1 -1
  462. package/.output/server/chunks/routes/api/projects/overview.get.mjs +13 -1
  463. package/.output/server/chunks/routes/api/projects/overview.get.mjs.map +1 -1
  464. package/.output/server/chunks/routes/api/projects.get.mjs +13 -1
  465. package/.output/server/chunks/routes/api/projects.get.mjs.map +1 -1
  466. package/.output/server/chunks/routes/api/search.get.mjs +13 -1
  467. package/.output/server/chunks/routes/api/search.get.mjs.map +1 -1
  468. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +13 -1
  469. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs.map +1 -1
  470. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +13 -1
  471. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs.map +1 -1
  472. package/.output/server/chunks/routes/api/settings/ai/models.post.mjs +12 -0
  473. package/.output/server/chunks/routes/api/settings/ai/models.post.mjs.map +1 -1
  474. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +13 -1
  475. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs.map +1 -1
  476. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +13 -1
  477. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs.map +1 -1
  478. package/.output/server/chunks/routes/api/settings/ai.get.mjs +13 -1
  479. package/.output/server/chunks/routes/api/settings/ai.get.mjs.map +1 -1
  480. package/.output/server/chunks/routes/api/settings/ai.put.mjs +13 -1
  481. package/.output/server/chunks/routes/api/settings/ai.put.mjs.map +1 -1
  482. package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs +57 -0
  483. package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs.map +1 -0
  484. package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs +63 -0
  485. package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs.map +1 -0
  486. package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs +12 -0
  487. package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs.map +1 -1
  488. package/.output/server/chunks/routes/api/settings/smtp.get.mjs +13 -1
  489. package/.output/server/chunks/routes/api/settings/smtp.get.mjs.map +1 -1
  490. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +13 -1
  491. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs.map +1 -1
  492. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +13 -1
  493. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs.map +1 -1
  494. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +13 -1
  495. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs.map +1 -1
  496. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +13 -1
  497. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs.map +1 -1
  498. package/.output/server/chunks/routes/api/stream.get.mjs +13 -1
  499. package/.output/server/chunks/routes/api/stream.get.mjs.map +1 -1
  500. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +13 -1
  501. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs.map +1 -1
  502. package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +13 -1
  503. package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs.map +1 -1
  504. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +13 -1
  505. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs.map +1 -1
  506. package/.output/server/chunks/routes/api/tags/_id_.put.mjs +13 -1
  507. package/.output/server/chunks/routes/api/tags/_id_.put.mjs.map +1 -1
  508. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +13 -1
  509. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs.map +1 -1
  510. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +13 -1
  511. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs.map +1 -1
  512. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +13 -1
  513. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs.map +1 -1
  514. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +13 -1
  515. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs.map +1 -1
  516. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +25 -3
  517. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs.map +1 -1
  518. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +13 -1
  519. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs.map +1 -1
  520. package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs +60 -0
  521. package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs.map +1 -0
  522. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +13 -1
  523. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs.map +1 -1
  524. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +13 -1
  525. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs.map +1 -1
  526. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +13 -1
  527. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs.map +1 -1
  528. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +13 -1
  529. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs.map +1 -1
  530. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +13 -1
  531. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs.map +1 -1
  532. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs +13 -1
  533. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs.map +1 -1
  534. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +13 -1
  535. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs.map +1 -1
  536. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +13 -1
  537. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs.map +1 -1
  538. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +13 -1
  539. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs.map +1 -1
  540. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +13 -1
  541. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs.map +1 -1
  542. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +13 -1
  543. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs.map +1 -1
  544. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +13 -1
  545. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs.map +1 -1
  546. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +13 -1
  547. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs.map +1 -1
  548. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +13 -1
  549. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs.map +1 -1
  550. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +15 -1
  551. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs.map +1 -1
  552. package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs +196 -0
  553. package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs.map +1 -0
  554. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +13 -1
  555. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs.map +1 -1
  556. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +13 -1
  557. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs.map +1 -1
  558. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +13 -1
  559. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs.map +1 -1
  560. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +13 -1
  561. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs.map +1 -1
  562. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +13 -1
  563. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs.map +1 -1
  564. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +13 -1
  565. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs.map +1 -1
  566. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +13 -1
  567. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs.map +1 -1
  568. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +13 -1
  569. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs.map +1 -1
  570. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +13 -1
  571. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs.map +1 -1
  572. package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs +78 -0
  573. package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs.map +1 -0
  574. package/.output/server/chunks/routes/api/test-runs/import.post.mjs +201 -0
  575. package/.output/server/chunks/routes/api/test-runs/import.post.mjs.map +1 -0
  576. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +13 -1
  577. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs.map +1 -1
  578. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +13 -1
  579. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs.map +1 -1
  580. package/.output/server/chunks/routes/api/test-runs/start.post.mjs +13 -1
  581. package/.output/server/chunks/routes/api/test-runs/start.post.mjs.map +1 -1
  582. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +32 -15
  583. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
  584. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +21 -6
  585. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
  586. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +154 -3
  587. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
  588. package/.output/server/chunks/routes/api/traces/check.post.mjs +13 -1
  589. package/.output/server/chunks/routes/api/traces/check.post.mjs.map +1 -1
  590. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +12 -0
  591. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs.map +1 -1
  592. package/.output/server/chunks/routes/api/users/_id/index.get.mjs +12 -0
  593. package/.output/server/chunks/routes/api/users/_id/index.get.mjs.map +1 -1
  594. package/.output/server/chunks/routes/api/users/_id/index.post.mjs +13 -1
  595. package/.output/server/chunks/routes/api/users/_id/index.post.mjs.map +1 -1
  596. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +13 -1
  597. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs.map +1 -1
  598. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +13 -1
  599. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs.map +1 -1
  600. package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +13 -1
  601. package/.output/server/chunks/routes/api/users/_id/projects.put.mjs.map +1 -1
  602. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +12 -0
  603. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  604. package/.output/server/chunks/routes/api/users/_id_.patch.mjs +12 -0
  605. package/.output/server/chunks/routes/api/users/_id_.patch.mjs.map +1 -1
  606. package/.output/server/chunks/routes/api/version.get.mjs +13 -1
  607. package/.output/server/chunks/routes/api/version.get.mjs.map +1 -1
  608. package/.output/server/chunks/routes/mcp.post.mjs +13 -1
  609. package/.output/server/chunks/routes/mcp.post.mjs.map +1 -1
  610. package/.output/server/chunks/routes/renderer.mjs +1 -1
  611. package/.output/server/chunks/tasks/sweep.mjs +12 -0
  612. package/.output/server/chunks/tasks/sweep.mjs.map +1 -1
  613. package/.output/server/chunks/tasks/sweep2.mjs +12 -0
  614. package/.output/server/chunks/tasks/sweep2.mjs.map +1 -1
  615. package/.output/server/database/migrations/0039_remarkable_jean_grey.sql +2 -0
  616. package/.output/server/database/migrations/0040_organic_phalanx.sql +8 -0
  617. package/.output/server/database/migrations/0041_tense_gravity.sql +5 -0
  618. package/.output/server/database/migrations/0042_burly_hemingway.sql +19 -0
  619. package/.output/server/database/migrations/meta/0039_snapshot.json +3403 -0
  620. package/.output/server/database/migrations/meta/0040_snapshot.json +3457 -0
  621. package/.output/server/database/migrations/meta/0041_snapshot.json +3492 -0
  622. package/.output/server/database/migrations/meta/0042_snapshot.json +3618 -0
  623. package/.output/server/database/migrations/meta/_journal.json +28 -0
  624. package/.output/server/database/migrations-pg/0040_lazy_layla_miller.sql +2 -0
  625. package/.output/server/database/migrations-pg/0041_light_screwball.sql +8 -0
  626. package/.output/server/database/migrations-pg/0042_serious_layla_miller.sql +5 -0
  627. package/.output/server/database/migrations-pg/0043_wonderful_mordo.sql +19 -0
  628. package/.output/server/database/migrations-pg/meta/0040_snapshot.json +4060 -0
  629. package/.output/server/database/migrations-pg/meta/0041_snapshot.json +4123 -0
  630. package/.output/server/database/migrations-pg/meta/0042_snapshot.json +4153 -0
  631. package/.output/server/database/migrations-pg/meta/0043_snapshot.json +4308 -0
  632. package/.output/server/database/migrations-pg/meta/_journal.json +28 -0
  633. package/.output/server/index.mjs +13 -1
  634. package/.output/server/index.mjs.map +1 -1
  635. package/.output/server/node_modules/fflate/esm/index.mjs +2710 -0
  636. package/.output/server/node_modules/fflate/package.json +128 -0
  637. package/.output/server/node_modules/highlight.js/es/languages/yaml.js +213 -0
  638. package/.output/server/node_modules/marked/lib/marked.esm.js +72 -0
  639. package/.output/server/node_modules/marked/package.json +103 -0
  640. package/.output/server/package.json +3 -1
  641. package/package.json +2 -2
  642. package/.output/public/_nuxt/36cXPVrY.js +0 -26
  643. package/.output/public/_nuxt/87SGk1nu.js +0 -1
  644. package/.output/public/_nuxt/B6rt3IcG.js +0 -1
  645. package/.output/public/_nuxt/BAaSmp8J.js +0 -1
  646. package/.output/public/_nuxt/BBnX5xw4.js +0 -2
  647. package/.output/public/_nuxt/BCArQk0c.js +0 -1
  648. package/.output/public/_nuxt/BFjmLXYo.js +0 -8
  649. package/.output/public/_nuxt/BJltXwHg.js +0 -1
  650. package/.output/public/_nuxt/BUMZHDRC.js +0 -2
  651. package/.output/public/_nuxt/BdHdHyop.js +0 -34
  652. package/.output/public/_nuxt/BiX7c2qU.js +0 -1
  653. package/.output/public/_nuxt/C11lmBd4.js +0 -4
  654. package/.output/public/_nuxt/C4AfzZER.js +0 -47
  655. package/.output/public/_nuxt/C7ZVzS0K.js +0 -1
  656. package/.output/public/_nuxt/C8cz5feG.js +0 -1
  657. package/.output/public/_nuxt/C9EpbPNU.js +0 -1
  658. package/.output/public/_nuxt/C9ahP7km.js +0 -1
  659. package/.output/public/_nuxt/CBEM3L1q.js +0 -4
  660. package/.output/public/_nuxt/CCsl9MOZ.js +0 -1
  661. package/.output/public/_nuxt/CCw3Tx4S.js +0 -1
  662. package/.output/public/_nuxt/CGq9qR-0.js +0 -1
  663. package/.output/public/_nuxt/CLdGRzLL.js +0 -1
  664. package/.output/public/_nuxt/CTgM5Fke.js +0 -2
  665. package/.output/public/_nuxt/CU3W9YrI.js +0 -1
  666. package/.output/public/_nuxt/CYIR2GbL.js +0 -1
  667. package/.output/public/_nuxt/Ccit_CX1.js +0 -1
  668. package/.output/public/_nuxt/CiPH-swI.js +0 -1
  669. package/.output/public/_nuxt/ClVRQpP_.js +0 -1
  670. package/.output/public/_nuxt/CmbjAoQu.js +0 -1
  671. package/.output/public/_nuxt/Cx65B3c3.js +0 -1
  672. package/.output/public/_nuxt/D1ttGJfs.js +0 -5
  673. package/.output/public/_nuxt/D3SYPlEB.js +0 -114
  674. package/.output/public/_nuxt/DB3ljns7.js +0 -1
  675. package/.output/public/_nuxt/DC51KKt4.js +0 -1
  676. package/.output/public/_nuxt/DaewB_zT.js +0 -1
  677. package/.output/public/_nuxt/DcfRfTaA.js +0 -34
  678. package/.output/public/_nuxt/Dm1_3W9g.js +0 -1
  679. package/.output/public/_nuxt/DraETso1.js +0 -1
  680. package/.output/public/_nuxt/Dy4TloG3.js +0 -1
  681. package/.output/public/_nuxt/EltzgiyS.js +0 -1
  682. package/.output/public/_nuxt/HTQtMbWb.js +0 -1
  683. package/.output/public/_nuxt/KYucVFu7.js +0 -1
  684. package/.output/public/_nuxt/TBDx0s9p.js +0 -3
  685. package/.output/public/_nuxt/Tt5LX5Y-.js +0 -1
  686. package/.output/public/_nuxt/builds/meta/2f517ae9-c342-457e-b4c5-6301728179f5.json +0 -1
  687. package/.output/public/_nuxt/entry.ChQMshd4.css +0 -1
  688. package/.output/public/_nuxt/l0QnzFNM.js +0 -1
  689. package/.output/public/_nuxt/oFIS9u6t.js +0 -3
  690. package/.output/public/_nuxt/oWY3I9uX.js +0 -1
  691. package/.output/public/_nuxt/q0DPzLKN.js +0 -2
  692. package/.output/public/_nuxt/r3SBLxtE.js +0 -1
  693. package/.output/public/_nuxt/riEUDnED.js +0 -1
  694. package/.output/public/_nuxt/uaqMzXqE.js +0 -5
  695. package/.output/public/_nuxt/wgcgHmRR.js +0 -1
  696. package/.output/public/sw.js +0 -1
  697. package/.output/public/workbox-2fbc6a65.js +0 -1
  698. package/.output/server/chunks/build/Alert-Bp1Wz_sq.mjs.map +0 -1
  699. package/.output/server/chunks/build/Breadcrumb-C9ZPTLym.mjs.map +0 -1
  700. package/.output/server/chunks/build/BreadcrumbNav-C3y42Vun.mjs.map +0 -1
  701. package/.output/server/chunks/build/BrowserBadge-DNCp9pF-.mjs.map +0 -1
  702. package/.output/server/chunks/build/ChartCard-Fr557IbV.mjs.map +0 -1
  703. package/.output/server/chunks/build/Checkbox-cVOSIY93.mjs.map +0 -1
  704. package/.output/server/chunks/build/CiEnvCard-DXPOhdSG.mjs.map +0 -1
  705. package/.output/server/chunks/build/CodeBlock-BGwNmJ8J.mjs.map +0 -1
  706. package/.output/server/chunks/build/DashboardNavbar-Bdp-OwTN.mjs.map +0 -1
  707. package/.output/server/chunks/build/DashboardSidebarToggle-Ji6ADuqF.mjs.map +0 -1
  708. package/.output/server/chunks/build/DataLocationCard-D6xSOrme.mjs.map +0 -1
  709. package/.output/server/chunks/build/DiagnosisPanel-DV1xwGu4.mjs.map +0 -1
  710. package/.output/server/chunks/build/EmptyState-DV3oT_xz.mjs.map +0 -1
  711. package/.output/server/chunks/build/EntityLinks-DeOP13Kr.mjs.map +0 -1
  712. package/.output/server/chunks/build/EnvManagedBadge-Qpn58Nmr.mjs.map +0 -1
  713. package/.output/server/chunks/build/FormField-B-GSn_VR.mjs.map +0 -1
  714. package/.output/server/chunks/build/HelpHint-YEMWtKu1.mjs.map +0 -1
  715. package/.output/server/chunks/build/Label-DBvbHd3A.mjs.map +0 -1
  716. package/.output/server/chunks/build/MiniRunBars-C3HG-EYm.mjs.map +0 -1
  717. package/.output/server/chunks/build/Modal-CfA78Hm1.mjs.map +0 -1
  718. package/.output/server/chunks/build/PageStateCard-Bwee6JTk.mjs.map +0 -1
  719. package/.output/server/chunks/build/ProjectTestCasesTable-9Ia825h8.mjs.map +0 -1
  720. package/.output/server/chunks/build/RovingFocusItem-CxhHdNGo.mjs.map +0 -1
  721. package/.output/server/chunks/build/RunReports-BpJqLHY9.mjs.map +0 -1
  722. package/.output/server/chunks/build/RunStatusBadge-BhmJ_RKM.mjs.map +0 -1
  723. package/.output/server/chunks/build/SectionCard-COd9TuDq.mjs.map +0 -1
  724. package/.output/server/chunks/build/Select-ppPz926C.mjs.map +0 -1
  725. package/.output/server/chunks/build/Separator-CxZdx8kw.mjs.map +0 -1
  726. package/.output/server/chunks/build/SettingsField-DDD4oqys.mjs.map +0 -1
  727. package/.output/server/chunks/build/Slideover-B95Rj237.mjs.map +0 -1
  728. package/.output/server/chunks/build/Switch-xQQ3_ME1.mjs.map +0 -1
  729. package/.output/server/chunks/build/Table-CPhhVzDv.mjs.map +0 -1
  730. package/.output/server/chunks/build/Tabs-BV9XqjoO.mjs.map +0 -1
  731. package/.output/server/chunks/build/TagBadge-BDcvvGxw.mjs +0 -47
  732. package/.output/server/chunks/build/TagBadge-BDcvvGxw.mjs.map +0 -1
  733. package/.output/server/chunks/build/TestCaseHistoryChart-DMb-xSJa.mjs.map +0 -1
  734. package/.output/server/chunks/build/TestStatusBar-CEzt76wk.mjs.map +0 -1
  735. package/.output/server/chunks/build/Textarea-DrrqQUVG.mjs.map +0 -1
  736. package/.output/server/chunks/build/Tooltip-7vwuDPrZ.mjs.map +0 -1
  737. package/.output/server/chunks/build/VisuallyHiddenInput-C9eJVpPW.mjs.map +0 -1
  738. package/.output/server/chunks/build/_id_-B2yirIuA.mjs.map +0 -1
  739. package/.output/server/chunks/build/_id_-CE0Gso6i.mjs.map +0 -1
  740. package/.output/server/chunks/build/_id_-bWcP2xFl.mjs.map +0 -1
  741. package/.output/server/chunks/build/about-CoJjvUwM.mjs.map +0 -1
  742. package/.output/server/chunks/build/account-Cn-eZqXM.mjs.map +0 -1
  743. package/.output/server/chunks/build/db.client-aHcD0wyX.mjs.map +0 -1
  744. package/.output/server/chunks/build/default-BSzdkM_L.mjs.map +0 -1
  745. package/.output/server/chunks/build/edit-C9Z7oZeu.mjs.map +0 -1
  746. package/.output/server/chunks/build/fetch-8kznMtBM.mjs.map +0 -1
  747. package/.output/server/chunks/build/forgot-password-BqPF4Rxs.mjs.map +0 -1
  748. package/.output/server/chunks/build/help-content-DmFnuhNu.mjs.map +0 -1
  749. package/.output/server/chunks/build/index-BR9hw6qk.mjs.map +0 -1
  750. package/.output/server/chunks/build/index-Ba-Fifra.mjs.map +0 -1
  751. package/.output/server/chunks/build/index-CULN3-en.mjs.map +0 -1
  752. package/.output/server/chunks/build/index-DVUtBexc.mjs.map +0 -1
  753. package/.output/server/chunks/build/isValueEqualOrExist-DBZjbD_3.mjs.map +0 -1
  754. package/.output/server/chunks/build/login-D2XZDuek.mjs.map +0 -1
  755. package/.output/server/chunks/build/mcp-_o6cMS6m.mjs.map +0 -1
  756. package/.output/server/chunks/build/notifications-Dzm9c0u_.mjs.map +0 -1
  757. package/.output/server/chunks/build/reset-password-gpFzIEDj.mjs.map +0 -1
  758. package/.output/server/chunks/build/settings-metadata-B0wo5R-W.mjs.map +0 -1
  759. package/.output/server/chunks/build/settings-pNyPBXVa.mjs.map +0 -1
  760. package/.output/server/chunks/build/storage-XelzuyPy.mjs.map +0 -1
  761. package/.output/server/chunks/build/tags-DrCQ7QSw.mjs.map +0 -1
  762. package/.output/server/chunks/build/test-cases-pmOxi-AN.mjs.map +0 -1
  763. package/.output/server/chunks/build/timeout-hygiene-CNs71Iah.mjs.map +0 -1
  764. package/.output/server/chunks/build/useAiStatus-ZO987RY7.mjs.map +0 -1
  765. package/.output/server/chunks/build/useCopy-BQQKcwlq.mjs.map +0 -1
  766. package/.output/server/chunks/build/useFormControl-BLpq1s4O.mjs.map +0 -1
  767. package/.output/server/chunks/build/useOpenInIde-kMZ7Jw5c.mjs.map +0 -1
  768. package/.output/server/chunks/build/useSettingsNav-NjI2seBy.mjs.map +0 -1
  769. package/.output/server/chunks/build/useTreeViewCookie-DVYpxW-p.mjs.map +0 -1
  770. package/.output/server/chunks/build/users-NmAUZs3i.mjs.map +0 -1
  771. package/.output/server/chunks/build/virtualizer-ZaqK4guJ.mjs.map +0 -1
  772. package/.output/server/chunks/build/wasted-time-CguAF9zc.mjs.map +0 -1
  773. /package/.output/public/_nuxt/{PageStateCard.BrM5HWjY.css → useCopyRich.BrM5HWjY.css} +0 -0
@@ -0,0 +1,1021 @@
1
+ import { _ as _sfc_main$1$1, a as _sfc_main$3 } from './DashboardNavbar-BHmMSPX7.mjs';
2
+ import { _ as _sfc_main$1$2 } from './Breadcrumb-Ak2Lg3oM.mjs';
3
+ import { _ as __nuxt_component_3 } from './BreadcrumbNav-DO7I_z-n.mjs';
4
+ import { _ as __nuxt_component_11 } from './SectionCard-CN-v0FZ_.mjs';
5
+ import { _ as __nuxt_component_5 } from './CodeBlock-BgE-NSmE.mjs';
6
+ import { _ as _sfc_main$2 } from './Alert-C4xq8lao.mjs';
7
+ import { u as useRoute, l as useHead, r as useRuntimeConfig, o as _sfc_main$p, m as _sfc_main$k, n as _sfc_main$7, p as _sfc_main$j, q as _sfc_main$l } from './server.mjs';
8
+ import { _ as __nuxt_component_9 } from './EmptyState-Dtlab7S9.mjs';
9
+ import { cB as formatBytes, dB as sha256Blob, dC as Sha256 } from '../nitro/nitro.mjs';
10
+ import { defineComponent, withAsyncContext, computed, ref, mergeProps, withCtx, unref, createVNode, createTextVNode, openBlock, createBlock, createCommentVNode, withModifiers, toDisplayString, Fragment, renderList, useSSRContext } from 'vue';
11
+ import { ssrRenderComponent, ssrRenderClass, ssrInterpolate, ssrRenderList, ssrRenderAttrs } from 'vue/server-renderer';
12
+ import { u as useFetch } from './fetch-B4FwBOzu.mjs';
13
+ import './DashboardSidebarToggle-DCTnHiIv.mjs';
14
+ import './Card-BQP_oZkQ.mjs';
15
+ import './HelpHint-DrcIv-Oj.mjs';
16
+ import './help-content-C876a9WD.mjs';
17
+ import './useCopy-CeKWgHyT.mjs';
18
+ import './index-CU2nZhAa.mjs';
19
+ import 'date-fns';
20
+ import 'vue-router';
21
+ import '@iconify/vue';
22
+ import 'tailwindcss/colors';
23
+ import 'tailwind-variants';
24
+ import '@iconify/utils/lib/css/icon';
25
+ import 'perfect-debounce';
26
+ import '@floating-ui/vue';
27
+ import 'aria-hidden';
28
+ import '../routes/renderer.mjs';
29
+ import 'vue-bundle-renderer/runtime';
30
+ import 'unhead/server';
31
+ import 'devalue';
32
+ import 'unhead/plugins';
33
+ import 'unhead/utils';
34
+ import 'node:crypto';
35
+ import 'drizzle-orm';
36
+ import 'path';
37
+ import 'fs/promises';
38
+ import 'zlib';
39
+ import 'util';
40
+ import 'marked';
41
+ import 'highlight.js/lib/core';
42
+ import 'highlight.js/lib/languages/bash';
43
+ import 'highlight.js/lib/languages/css';
44
+ import 'highlight.js/lib/languages/diff';
45
+ import 'highlight.js/lib/languages/javascript';
46
+ import 'highlight.js/lib/languages/json';
47
+ import 'highlight.js/lib/languages/python';
48
+ import 'highlight.js/lib/languages/typescript';
49
+ import 'highlight.js/lib/languages/xml';
50
+ import 'highlight.js/lib/languages/yaml';
51
+ import 'fflate';
52
+ import 'pixelmatch';
53
+ import 'sharp';
54
+ import '@anthropic-ai/sdk';
55
+ import 'nodemailer';
56
+ import 'node:util';
57
+ import 'rou3';
58
+ import 'fs';
59
+ import '@aws-sdk/client-s3';
60
+ import 'node:http';
61
+ import 'node:https';
62
+ import 'node:events';
63
+ import 'node:buffer';
64
+ import 'node:fs';
65
+ import 'node:path';
66
+ import 'drizzle-orm/libsql/sqlite3';
67
+ import 'drizzle-orm/sqlite-core';
68
+ import 'drizzle-orm/pg-core';
69
+ import 'url';
70
+ import 'node:async_hooks';
71
+ import 'node:zlib';
72
+ import 'consola';
73
+ import 'node:url';
74
+ import '@iconify/utils';
75
+ import '@vue/shared';
76
+
77
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
78
+ __name: "ImportFileRow",
79
+ __ssrInlineRender: true,
80
+ props: {
81
+ entry: {},
82
+ removable: { type: Boolean }
83
+ },
84
+ emits: ["remove"],
85
+ setup(__props) {
86
+ const props = __props;
87
+ const PRESENTATION = {
88
+ hashing: { label: "Reading", color: "neutral", icon: "i-lucide-loader-circle" },
89
+ checking: { label: "Checking", color: "neutral", icon: "i-lucide-loader-circle" },
90
+ ready: { label: "Ready", color: "primary", icon: "i-lucide-circle-check" },
91
+ uploading: { label: "Importing", color: "primary", icon: "i-lucide-loader-circle" },
92
+ imported: { label: "Imported", color: "success", icon: "i-lucide-check" },
93
+ duplicate: { label: "Already imported", color: "neutral", icon: "i-lucide-copy-check" },
94
+ "too-large": { label: "Too large", color: "warning", icon: "i-lucide-weight" },
95
+ invalid: { label: "Not importable", color: "warning", icon: "i-lucide-file-x" },
96
+ failed: { label: "Failed", color: "error", icon: "i-lucide-circle-alert" }
97
+ };
98
+ const presentation = computed(() => PRESENTATION[props.entry.state]);
99
+ const spinning = computed(() => ["hashing", "checking", "uploading"].includes(props.entry.state));
100
+ const result = computed(() => props.entry.result);
101
+ const summary = computed(() => props.entry.state === "imported" ? result.value : null);
102
+ const isTrace = computed(() => summary.value?.kind === "trace");
103
+ function plural(count, noun) {
104
+ return `${count} ${noun}${count === 1 ? "" : "s"}`;
105
+ }
106
+ return (_ctx, _push, _parent, _attrs) => {
107
+ const _component_UBadge = _sfc_main$7;
108
+ const _component_UIcon = _sfc_main$p;
109
+ const _component_UButton = _sfc_main$k;
110
+ const _component_UProgress = _sfc_main$j;
111
+ const _component_ULink = _sfc_main$l;
112
+ const _component_UAlert = _sfc_main$2;
113
+ _push(`<div${ssrRenderAttrs(mergeProps({ class: "p-3 sm:p-4 space-y-2" }, _attrs))}><div class="flex items-start justify-between gap-3"><div class="min-w-0 space-y-1"><p class="font-medium text-sm break-all">${ssrInterpolate(__props.entry.name)}</p><p class="text-xs text-gray-500">${ssrInterpolate(("formatBytes" in _ctx ? _ctx.formatBytes : unref(formatBytes))(__props.entry.size))}</p></div><div class="flex items-center gap-2 shrink-0">`);
114
+ _push(ssrRenderComponent(_component_UBadge, {
115
+ color: unref(presentation).color,
116
+ variant: "subtle",
117
+ size: "sm"
118
+ }, {
119
+ default: withCtx((_, _push2, _parent2, _scopeId) => {
120
+ if (_push2) {
121
+ _push2(ssrRenderComponent(_component_UIcon, {
122
+ name: unref(presentation).icon,
123
+ class: ["size-3.5 mr-1", unref(spinning) && "animate-spin"]
124
+ }, null, _parent2, _scopeId));
125
+ _push2(` ${ssrInterpolate(unref(presentation).label)}`);
126
+ } else {
127
+ return [
128
+ createVNode(_component_UIcon, {
129
+ name: unref(presentation).icon,
130
+ class: ["size-3.5 mr-1", unref(spinning) && "animate-spin"]
131
+ }, null, 8, ["name", "class"]),
132
+ createTextVNode(" " + toDisplayString(unref(presentation).label), 1)
133
+ ];
134
+ }
135
+ }),
136
+ _: 1
137
+ }, _parent));
138
+ if (__props.removable) {
139
+ _push(ssrRenderComponent(_component_UButton, {
140
+ icon: "i-lucide-x",
141
+ color: "neutral",
142
+ variant: "ghost",
143
+ size: "xs",
144
+ title: "Remove from the list",
145
+ onClick: ($event) => _ctx.$emit("remove", __props.entry.id)
146
+ }, null, _parent));
147
+ } else {
148
+ _push(`<!---->`);
149
+ }
150
+ _push(`</div></div>`);
151
+ if (__props.entry.state === "uploading" || __props.entry.state === "hashing") {
152
+ _push(ssrRenderComponent(_component_UProgress, {
153
+ "model-value": Math.round(__props.entry.progress * 100),
154
+ size: "sm"
155
+ }, null, _parent));
156
+ } else {
157
+ _push(`<!---->`);
158
+ }
159
+ if (__props.entry.message) {
160
+ _push(`<p class="${ssrRenderClass([__props.entry.state === "failed" ? "text-error" : "text-gray-500", "text-xs"])}">${ssrInterpolate(__props.entry.message)}</p>`);
161
+ } else {
162
+ _push(`<!---->`);
163
+ }
164
+ if (unref(result)?.testRunId) {
165
+ _push(`<div class="text-xs">`);
166
+ _push(ssrRenderComponent(_component_ULink, {
167
+ to: `/test-runs/${unref(result).testRunId}`,
168
+ class: "text-primary hover:underline"
169
+ }, {
170
+ default: withCtx((_, _push2, _parent2, _scopeId) => {
171
+ if (_push2) {
172
+ _push2(` View run #${ssrInterpolate(unref(result).testRunId)}`);
173
+ } else {
174
+ return [
175
+ createTextVNode(" View run #" + toDisplayString(unref(result).testRunId), 1)
176
+ ];
177
+ }
178
+ }),
179
+ _: 1
180
+ }, _parent));
181
+ _push(`</div>`);
182
+ } else {
183
+ _push(`<!---->`);
184
+ }
185
+ if (unref(summary)) {
186
+ _push(`<!--[-->`);
187
+ if (unref(isTrace)) {
188
+ _push(`<p class="text-xs text-gray-500"> Added <span class="text-default">${ssrInterpolate(unref(summary).caseTitle)}</span> to this run. </p>`);
189
+ } else {
190
+ _push(`<div class="flex flex-wrap gap-x-4 gap-y-1 text-xs text-gray-500"><span>${ssrInterpolate(plural(unref(summary).totalTests, "execution"))}</span><span>${ssrInterpolate(unref(summary).passedTests)} passed</span><span>${ssrInterpolate(unref(summary).failedTests)} failed</span>`);
191
+ if (unref(summary).skippedTests) {
192
+ _push(`<span>${ssrInterpolate(unref(summary).skippedTests)} skipped</span>`);
193
+ } else {
194
+ _push(`<!---->`);
195
+ }
196
+ if (unref(summary).flakyTests) {
197
+ _push(`<span>${ssrInterpolate(unref(summary).flakyTests)} flaky</span>`);
198
+ } else {
199
+ _push(`<!---->`);
200
+ }
201
+ if (unref(summary).traceCount) {
202
+ _push(`<span>${ssrInterpolate(plural(unref(summary).traceCount, "trace"))}</span>`);
203
+ } else {
204
+ _push(`<!---->`);
205
+ }
206
+ if (unref(summary).attachmentCount) {
207
+ _push(`<span>${ssrInterpolate(plural(unref(summary).attachmentCount, "attachment"))}</span>`);
208
+ } else {
209
+ _push(`<!---->`);
210
+ }
211
+ _push(`</div>`);
212
+ }
213
+ if (unref(summary).shard) {
214
+ _push(ssrRenderComponent(_component_UAlert, {
215
+ color: "warning",
216
+ variant: "subtle",
217
+ icon: "i-lucide-split",
218
+ description: `This archive is shard ${unref(summary).shard.current} of ${unref(summary).shard.total}. Each shard imports as its own run — they are not merged.`,
219
+ ui: { description: "text-xs" }
220
+ }, null, _parent));
221
+ } else {
222
+ _push(`<!---->`);
223
+ }
224
+ if (unref(summary).filePaths.length && !unref(isTrace)) {
225
+ _push(`<div class="text-xs text-gray-500"><p class="mb-1"> Spec files recorded as <span class="text-gray-400">(these must match the paths your live runs report for history to line up)</span>: </p><ul class="space-y-0.5"><!--[-->`);
226
+ ssrRenderList(unref(summary).filePaths, (path) => {
227
+ _push(`<li><code class="text-[11px]">${ssrInterpolate(path)}</code></li>`);
228
+ });
229
+ _push(`<!--]--></ul></div>`);
230
+ } else {
231
+ _push(`<!---->`);
232
+ }
233
+ _push(`<!--]-->`);
234
+ } else {
235
+ _push(`<!---->`);
236
+ }
237
+ _push(`</div>`);
238
+ };
239
+ }
240
+ });
241
+ const _sfc_setup$1 = _sfc_main$1.setup;
242
+ _sfc_main$1.setup = (props, ctx) => {
243
+ const ssrContext = useSSRContext();
244
+ (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/project/ImportFileRow.vue");
245
+ return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0;
246
+ };
247
+ const __nuxt_component_10 = Object.assign(_sfc_main$1, { __name: "ImportFileRow" });
248
+ const UPLOADABLE = ["ready", "failed"];
249
+ const STATE_BY_VERDICT = {
250
+ ok: "ready",
251
+ duplicate: "duplicate",
252
+ "too-large": "too-large",
253
+ invalid: "invalid"
254
+ };
255
+ function useBlobReportImport(projectName) {
256
+ const importUrl = withAppBase("/api/test-runs/import");
257
+ const entries = ref([]);
258
+ const maxBytes = ref(null);
259
+ const limitError = ref(null);
260
+ const importing = ref(false);
261
+ let nextId = 1;
262
+ const readyCount = computed(() => entries.value.filter((e) => UPLOADABLE.includes(e.state)).length);
263
+ const importedCount = computed(() => entries.value.filter((e) => e.state === "imported").length);
264
+ const busy = computed(() => entries.value.some((e) => e.state === "hashing" || e.state === "checking"));
265
+ const batch = ref({ done: 0, total: 0 });
266
+ async function loadLimit() {
267
+ if (!projectName.value) return;
268
+ try {
269
+ const response = await $fetch("/api/test-runs/import/check", {
270
+ method: "POST",
271
+ body: { projectName: projectName.value, files: [] }
272
+ });
273
+ maxBytes.value = response.maxBytes;
274
+ limitError.value = null;
275
+ } catch (error) {
276
+ limitError.value = errorMessage(error, "Could not reach the server to read its upload limit.");
277
+ }
278
+ }
279
+ async function addFiles(selected) {
280
+ const staged = selected.map((file) => ({
281
+ id: nextId++,
282
+ file,
283
+ name: file.name,
284
+ size: file.size,
285
+ state: "hashing",
286
+ progress: 0
287
+ }));
288
+ entries.value = [...entries.value, ...staged];
289
+ const added = entries.value.slice(-staged.length);
290
+ const withinLimit = [];
291
+ for (const entry of added) {
292
+ if (maxBytes.value != null && entry.size > maxBytes.value) {
293
+ entry.state = "too-large";
294
+ entry.message = `${formatBytes(entry.size)} exceeds the ${formatBytes(maxBytes.value)} limit.`;
295
+ } else if (entry.size === 0) {
296
+ entry.state = "invalid";
297
+ entry.message = "The file is empty.";
298
+ } else if (!entry.name.toLowerCase().endsWith(".zip")) {
299
+ entry.state = "invalid";
300
+ entry.message = "Expected a .zip blob report (blob-report/report-*.zip).";
301
+ } else {
302
+ withinLimit.push(entry);
303
+ }
304
+ }
305
+ if (withinLimit.length === 0) return;
306
+ for (const entry of withinLimit) {
307
+ try {
308
+ entry.progress = 0;
309
+ entry.hash = await sha256Blob(entry.file, (p) => {
310
+ entry.progress = p;
311
+ });
312
+ entry.state = "checking";
313
+ } catch (error) {
314
+ entry.state = "failed";
315
+ entry.message = errorMessage(error, "Could not read the file.");
316
+ } finally {
317
+ entry.progress = 0;
318
+ }
319
+ }
320
+ const group = await groupKeyFor(withinLimit);
321
+ for (const entry of withinLimit) entry.group = group ?? void 0;
322
+ await runPreflight(withinLimit.filter((e) => e.state === "checking"));
323
+ }
324
+ async function runPreflight(pending) {
325
+ if (pending.length === 0 || !projectName.value) return;
326
+ try {
327
+ const response = await $fetch("/api/test-runs/import/check", {
328
+ method: "POST",
329
+ body: {
330
+ projectName: projectName.value,
331
+ files: pending.map((e) => ({ name: e.name, size: e.size, hash: e.hash }))
332
+ }
333
+ });
334
+ maxBytes.value = response.maxBytes;
335
+ response.results.forEach((result, index) => {
336
+ const entry = pending[index];
337
+ if (!entry) return;
338
+ entry.state = STATE_BY_VERDICT[result.status] ?? "ready";
339
+ entry.message = result.message;
340
+ if (result.testRunId) entry.result = { testRunId: result.testRunId };
341
+ });
342
+ } catch (error) {
343
+ const message = errorMessage(error, "Pre-flight check failed.");
344
+ for (const entry of pending) {
345
+ entry.state = "ready";
346
+ entry.message = `${message} Importing will still verify it.`;
347
+ }
348
+ }
349
+ }
350
+ async function startImport() {
351
+ if (importing.value || !projectName.value) return;
352
+ importing.value = true;
353
+ const queued = entries.value.filter((e) => UPLOADABLE.includes(e.state));
354
+ batch.value = { done: 0, total: queued.length };
355
+ try {
356
+ for (const entry of queued) {
357
+ entry.state = "uploading";
358
+ entry.message = void 0;
359
+ entry.progress = 0;
360
+ try {
361
+ const result = await uploadArchive(importUrl, projectName.value, entry, entry.group ?? null, (p) => {
362
+ entry.progress = p;
363
+ });
364
+ entry.result = result;
365
+ entry.state = result.status === "duplicate" ? "duplicate" : "imported";
366
+ entry.message = result.status === "duplicate" ? "Already imported into this project." : void 0;
367
+ } catch (error) {
368
+ entry.state = "failed";
369
+ entry.message = errorMessage(error, "The import failed.");
370
+ } finally {
371
+ entry.progress = 0;
372
+ batch.value = { ...batch.value, done: batch.value.done + 1 };
373
+ }
374
+ }
375
+ } finally {
376
+ importing.value = false;
377
+ }
378
+ }
379
+ function remove(id) {
380
+ entries.value = entries.value.filter((e) => e.id !== id);
381
+ }
382
+ function clearFinished() {
383
+ entries.value = entries.value.filter((e) => !["imported", "duplicate"].includes(e.state));
384
+ }
385
+ return {
386
+ entries,
387
+ maxBytes,
388
+ limitError,
389
+ importing,
390
+ readyCount,
391
+ importedCount,
392
+ busy,
393
+ batch,
394
+ loadLimit,
395
+ addFiles,
396
+ startImport,
397
+ remove,
398
+ clearFinished
399
+ };
400
+ }
401
+ function withAppBase(path) {
402
+ const base = useRuntimeConfig().app.baseURL || "/";
403
+ return `${base.replace(/\/$/, "")}${path}`;
404
+ }
405
+ async function groupKeyFor(entries) {
406
+ const hashes = entries.map((entry) => entry.hash).filter((hash) => Boolean(hash));
407
+ if (hashes.length === 0) return null;
408
+ return new Sha256().update(new TextEncoder().encode([...hashes].sort().join(""))).hex();
409
+ }
410
+ function uploadArchive(url, projectName, entry, group, onProgress) {
411
+ return new Promise((resolve, reject) => {
412
+ const body = new FormData();
413
+ body.append("projectName", projectName);
414
+ if (group) body.append("importGroup", group);
415
+ body.append("archive", entry.file, entry.name);
416
+ const request = new (void 0)();
417
+ request.open("POST", url);
418
+ request.responseType = "json";
419
+ request.upload.addEventListener("progress", (event) => {
420
+ if (event.lengthComputable) onProgress(event.loaded / event.total);
421
+ });
422
+ request.addEventListener("load", () => {
423
+ const payload = request.response;
424
+ if (request.status >= 200 && request.status < 300) {
425
+ resolve(payload);
426
+ return;
427
+ }
428
+ const detail = typeof payload?.message === "string" ? payload.message : null;
429
+ reject(new Error(detail ?? httpFallbackMessage(request.status)));
430
+ });
431
+ request.addEventListener("error", () => reject(new Error("The connection dropped during the upload.")));
432
+ request.addEventListener("abort", () => reject(new Error("The upload was cancelled.")));
433
+ request.addEventListener("timeout", () => reject(new Error("The upload timed out.")));
434
+ request.send(body);
435
+ });
436
+ }
437
+ function httpFallbackMessage(status) {
438
+ if (status === 413) return "The server (or a proxy in front of it) rejected the archive as too large.";
439
+ if (status === 401 || status === 403) return "You do not have permission to import into this project.";
440
+ if (status === 0) return "The connection dropped during the upload.";
441
+ if (status >= 500) return `The server failed while importing (HTTP ${status}).`;
442
+ return `The import was rejected (HTTP ${status}).`;
443
+ }
444
+ function errorMessage(error, fallback) {
445
+ const data = error?.data;
446
+ if (typeof data?.message === "string" && data.message) return data.message;
447
+ const message = error?.message;
448
+ return message || fallback;
449
+ }
450
+ const _sfc_main = /* @__PURE__ */ defineComponent({
451
+ __name: "import",
452
+ __ssrInlineRender: true,
453
+ async setup(__props) {
454
+ let __temp, __restore;
455
+ const route = useRoute();
456
+ const projectId = route.params.id;
457
+ const { data: project } = ([__temp, __restore] = withAsyncContext(() => useFetch(
458
+ `/api/projects/${projectId}`,
459
+ "$w9ISz8uFNz"
460
+ /* nuxt-injected */
461
+ )), __temp = await __temp, __restore(), __temp);
462
+ useHead(
463
+ computed(() => ({
464
+ title: `Import runs — ${project.value?.label || project.value?.name || "Project"} — Piwi Dashboard`
465
+ }))
466
+ );
467
+ const isDemoMode = useRuntimeConfig().public.demoMode;
468
+ const projectName = computed(() => project.value?.name);
469
+ const {
470
+ entries,
471
+ maxBytes,
472
+ limitError,
473
+ importing,
474
+ readyCount,
475
+ importedCount,
476
+ busy,
477
+ batch,
478
+ addFiles,
479
+ startImport,
480
+ remove,
481
+ clearFinished
482
+ } = useBlobReportImport(projectName);
483
+ const fileInput = ref(null);
484
+ const dragging = ref(false);
485
+ function onPicked(event) {
486
+ const input = event.target;
487
+ if (input.files?.length) addFiles([...input.files]);
488
+ input.value = "";
489
+ }
490
+ function onDrop(event) {
491
+ dragging.value = false;
492
+ const dropped = [...event.dataTransfer?.files ?? []];
493
+ if (dropped.length) addFiles(dropped);
494
+ }
495
+ const finishedCount = computed(() => entries.value.filter((e) => ["imported", "duplicate"].includes(e.state)).length);
496
+ return (_ctx, _push, _parent, _attrs) => {
497
+ const _component_UDashboardPanel = _sfc_main$1$1;
498
+ const _component_UDashboardNavbar = _sfc_main$3;
499
+ const _component_UDashboardSidebarCollapse = _sfc_main$1$2;
500
+ const _component_BreadcrumbNav = __nuxt_component_3;
501
+ const _component_SectionCard = __nuxt_component_11;
502
+ const _component_CodeBlock = __nuxt_component_5;
503
+ const _component_UAlert = _sfc_main$2;
504
+ const _component_UButton = _sfc_main$k;
505
+ const _component_UIcon = _sfc_main$p;
506
+ const _component_EmptyState = __nuxt_component_9;
507
+ const _component_ImportFileRow = __nuxt_component_10;
508
+ _push(ssrRenderComponent(_component_UDashboardPanel, mergeProps({ id: "project-import" }, _attrs), {
509
+ header: withCtx((_, _push2, _parent2, _scopeId) => {
510
+ if (_push2) {
511
+ _push2(ssrRenderComponent(_component_UDashboardNavbar, null, {
512
+ leading: withCtx((_2, _push3, _parent3, _scopeId2) => {
513
+ if (_push3) {
514
+ _push3(ssrRenderComponent(_component_UDashboardSidebarCollapse, null, null, _parent3, _scopeId2));
515
+ _push3(ssrRenderComponent(_component_BreadcrumbNav, {
516
+ items: [
517
+ { label: "Home", icon: "i-lucide-house", to: "/" },
518
+ { label: "Projects", to: "/projects" },
519
+ { label: unref(project)?.label || unref(project)?.name || "Project", to: `/projects/${unref(projectId)}` },
520
+ { label: "Import runs" }
521
+ ]
522
+ }, null, _parent3, _scopeId2));
523
+ } else {
524
+ return [
525
+ createVNode(_component_UDashboardSidebarCollapse),
526
+ createVNode(_component_BreadcrumbNav, {
527
+ items: [
528
+ { label: "Home", icon: "i-lucide-house", to: "/" },
529
+ { label: "Projects", to: "/projects" },
530
+ { label: unref(project)?.label || unref(project)?.name || "Project", to: `/projects/${unref(projectId)}` },
531
+ { label: "Import runs" }
532
+ ]
533
+ }, null, 8, ["items"])
534
+ ];
535
+ }
536
+ }),
537
+ _: 1
538
+ }, _parent2, _scopeId));
539
+ } else {
540
+ return [
541
+ createVNode(_component_UDashboardNavbar, null, {
542
+ leading: withCtx(() => [
543
+ createVNode(_component_UDashboardSidebarCollapse),
544
+ createVNode(_component_BreadcrumbNav, {
545
+ items: [
546
+ { label: "Home", icon: "i-lucide-house", to: "/" },
547
+ { label: "Projects", to: "/projects" },
548
+ { label: unref(project)?.label || unref(project)?.name || "Project", to: `/projects/${unref(projectId)}` },
549
+ { label: "Import runs" }
550
+ ]
551
+ }, null, 8, ["items"])
552
+ ]),
553
+ _: 1
554
+ })
555
+ ];
556
+ }
557
+ }),
558
+ body: withCtx((_, _push2, _parent2, _scopeId) => {
559
+ if (_push2) {
560
+ _push2(`<div class="p-4 space-y-4"${_scopeId}>`);
561
+ _push2(ssrRenderComponent(_component_SectionCard, {
562
+ title: "Import past runs",
563
+ icon: "i-lucide-import",
564
+ help: "project.import",
565
+ subtitle: "Backfill runs recorded before you started using Piwi, from Playwright's own blob reports."
566
+ }, {
567
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
568
+ if (_push3) {
569
+ _push3(`<div class="space-y-4"${_scopeId2}><div class="text-sm text-gray-600 dark:text-gray-400 space-y-2"${_scopeId2}><p${_scopeId2}> Run your suite with the blob reporter and upload the archives it writes to <code${_scopeId2}>blob-report/</code>: </p>`);
570
+ _push3(ssrRenderComponent(_component_CodeBlock, {
571
+ code: "npx playwright test --reporter=blob",
572
+ language: "bash"
573
+ }, null, _parent3, _scopeId2));
574
+ _push3(`<p${_scopeId2}> Each archive imports as one completed run, with its traces, screenshots and videos. Importing the same archive twice does nothing, so an interrupted batch is safe to repeat. </p></div>`);
575
+ if (unref(isDemoMode)) {
576
+ _push3(ssrRenderComponent(_component_UAlert, {
577
+ color: "primary",
578
+ variant: "subtle",
579
+ icon: "i-lucide-monitor-smartphone",
580
+ title: "Nothing leaves your browser",
581
+ description: "This is the demo: the archive is read by a service worker and stored in your browser, not uploaded. It is cleared when the demo's sample data is refreshed, or when you reset the demo.",
582
+ ui: { description: "text-xs" }
583
+ }, null, _parent3, _scopeId2));
584
+ } else {
585
+ _push3(`<!---->`);
586
+ }
587
+ _push3(ssrRenderComponent(_component_UAlert, {
588
+ color: "neutral",
589
+ variant: "subtle",
590
+ icon: "i-lucide-info",
591
+ title: "What imported runs carry",
592
+ description: "Failures still cluster, and traces, screenshots and videos open exactly as they do for reported runs. Web vitals, page state and locator healing come from Piwi's own capture fixtures, so historical runs have none — they start once the reporter is in place.",
593
+ ui: { description: "text-xs" }
594
+ }, null, _parent3, _scopeId2));
595
+ if (unref(limitError)) {
596
+ _push3(ssrRenderComponent(_component_UAlert, {
597
+ color: "error",
598
+ variant: "subtle",
599
+ icon: "i-lucide-circle-alert",
600
+ description: unref(limitError)
601
+ }, null, _parent3, _scopeId2));
602
+ } else {
603
+ _push3(`<!---->`);
604
+ }
605
+ _push3(`</div>`);
606
+ } else {
607
+ return [
608
+ createVNode("div", { class: "space-y-4" }, [
609
+ createVNode("div", { class: "text-sm text-gray-600 dark:text-gray-400 space-y-2" }, [
610
+ createVNode("p", null, [
611
+ createTextVNode(" Run your suite with the blob reporter and upload the archives it writes to "),
612
+ createVNode("code", null, "blob-report/"),
613
+ createTextVNode(": ")
614
+ ]),
615
+ createVNode(_component_CodeBlock, {
616
+ code: "npx playwright test --reporter=blob",
617
+ language: "bash"
618
+ }),
619
+ createVNode("p", null, " Each archive imports as one completed run, with its traces, screenshots and videos. Importing the same archive twice does nothing, so an interrupted batch is safe to repeat. ")
620
+ ]),
621
+ unref(isDemoMode) ? (openBlock(), createBlock(_component_UAlert, {
622
+ key: 0,
623
+ color: "primary",
624
+ variant: "subtle",
625
+ icon: "i-lucide-monitor-smartphone",
626
+ title: "Nothing leaves your browser",
627
+ description: "This is the demo: the archive is read by a service worker and stored in your browser, not uploaded. It is cleared when the demo's sample data is refreshed, or when you reset the demo.",
628
+ ui: { description: "text-xs" }
629
+ })) : createCommentVNode("", true),
630
+ createVNode(_component_UAlert, {
631
+ color: "neutral",
632
+ variant: "subtle",
633
+ icon: "i-lucide-info",
634
+ title: "What imported runs carry",
635
+ description: "Failures still cluster, and traces, screenshots and videos open exactly as they do for reported runs. Web vitals, page state and locator healing come from Piwi's own capture fixtures, so historical runs have none — they start once the reporter is in place.",
636
+ ui: { description: "text-xs" }
637
+ }),
638
+ unref(limitError) ? (openBlock(), createBlock(_component_UAlert, {
639
+ key: 1,
640
+ color: "error",
641
+ variant: "subtle",
642
+ icon: "i-lucide-circle-alert",
643
+ description: unref(limitError)
644
+ }, null, 8, ["description"])) : createCommentVNode("", true)
645
+ ])
646
+ ];
647
+ }
648
+ }),
649
+ _: 1
650
+ }, _parent2, _scopeId));
651
+ _push2(ssrRenderComponent(_component_SectionCard, {
652
+ title: "Archives",
653
+ icon: "i-lucide-files",
654
+ count: unref(entries).length || null
655
+ }, {
656
+ actions: withCtx((_2, _push3, _parent3, _scopeId2) => {
657
+ if (_push3) {
658
+ _push3(`<div class="flex items-center gap-2"${_scopeId2}>`);
659
+ if (unref(importing)) {
660
+ _push3(`<span class="text-xs text-gray-500 tabular-nums"${_scopeId2}>${ssrInterpolate(unref(batch).done)} of ${ssrInterpolate(unref(batch).total)} done </span>`);
661
+ } else {
662
+ _push3(`<!---->`);
663
+ }
664
+ if (unref(finishedCount) > 0 && !unref(importing)) {
665
+ _push3(ssrRenderComponent(_component_UButton, {
666
+ label: "Clear finished",
667
+ icon: "i-lucide-eraser",
668
+ color: "neutral",
669
+ variant: "ghost",
670
+ size: "sm",
671
+ disabled: unref(importing),
672
+ onClick: ($event) => unref(clearFinished)()
673
+ }, null, _parent3, _scopeId2));
674
+ } else {
675
+ _push3(`<!---->`);
676
+ }
677
+ _push3(ssrRenderComponent(_component_UButton, {
678
+ label: unref(readyCount) > 0 ? `Import ${unref(readyCount)} archive${unref(readyCount) === 1 ? "" : "s"}` : "Import",
679
+ icon: "i-lucide-upload",
680
+ size: "sm",
681
+ loading: unref(importing),
682
+ disabled: unref(readyCount) === 0 || unref(busy),
683
+ onClick: ($event) => unref(startImport)()
684
+ }, null, _parent3, _scopeId2));
685
+ _push3(`</div>`);
686
+ } else {
687
+ return [
688
+ createVNode("div", { class: "flex items-center gap-2" }, [
689
+ unref(importing) ? (openBlock(), createBlock("span", {
690
+ key: 0,
691
+ class: "text-xs text-gray-500 tabular-nums"
692
+ }, toDisplayString(unref(batch).done) + " of " + toDisplayString(unref(batch).total) + " done ", 1)) : createCommentVNode("", true),
693
+ unref(finishedCount) > 0 && !unref(importing) ? (openBlock(), createBlock(_component_UButton, {
694
+ key: 1,
695
+ label: "Clear finished",
696
+ icon: "i-lucide-eraser",
697
+ color: "neutral",
698
+ variant: "ghost",
699
+ size: "sm",
700
+ disabled: unref(importing),
701
+ onClick: ($event) => unref(clearFinished)()
702
+ }, null, 8, ["disabled", "onClick"])) : createCommentVNode("", true),
703
+ createVNode(_component_UButton, {
704
+ label: unref(readyCount) > 0 ? `Import ${unref(readyCount)} archive${unref(readyCount) === 1 ? "" : "s"}` : "Import",
705
+ icon: "i-lucide-upload",
706
+ size: "sm",
707
+ loading: unref(importing),
708
+ disabled: unref(readyCount) === 0 || unref(busy),
709
+ onClick: ($event) => unref(startImport)()
710
+ }, null, 8, ["label", "loading", "disabled", "onClick"])
711
+ ])
712
+ ];
713
+ }
714
+ }),
715
+ default: withCtx((_2, _push3, _parent3, _scopeId2) => {
716
+ if (_push3) {
717
+ _push3(`<div class="space-y-4"${_scopeId2}><div class="${ssrRenderClass([unref(dragging) ? "border-primary bg-primary/5" : "border-gray-200 dark:border-gray-700", "rounded-lg border-2 border-dashed p-6 text-center transition-colors"])}"${_scopeId2}>`);
718
+ _push3(ssrRenderComponent(_component_UIcon, {
719
+ name: "i-lucide-file-archive",
720
+ class: "size-7 text-gray-400 mb-2"
721
+ }, null, _parent3, _scopeId2));
722
+ _push3(`<p class="text-sm text-gray-600 dark:text-gray-400"${_scopeId2}>Drop <code${_scopeId2}>report-*.zip</code> files here, or</p>`);
723
+ _push3(ssrRenderComponent(_component_UButton, {
724
+ label: "Choose files",
725
+ icon: "i-lucide-folder-open",
726
+ variant: "outline",
727
+ size: "sm",
728
+ class: "mt-2",
729
+ disabled: unref(importing),
730
+ onClick: ($event) => unref(fileInput)?.click()
731
+ }, null, _parent3, _scopeId2));
732
+ if (unref(maxBytes)) {
733
+ _push3(`<p class="text-xs text-gray-500 mt-3"${_scopeId2}> Up to ${ssrInterpolate(("formatBytes" in _ctx ? _ctx.formatBytes : unref(formatBytes))(unref(maxBytes)))} per archive. Larger ones are rejected here, before uploading. </p>`);
734
+ } else {
735
+ _push3(`<!---->`);
736
+ }
737
+ _push3(`<input type="file" accept=".zip" multiple class="hidden"${_scopeId2}></div>`);
738
+ if (unref(entries).length === 0) {
739
+ _push3(ssrRenderComponent(_component_EmptyState, {
740
+ icon: "i-lucide-inbox",
741
+ text: "No archives selected yet."
742
+ }, null, _parent3, _scopeId2));
743
+ } else {
744
+ _push3(`<div class="divide-y divide-gray-100 dark:divide-gray-800 border rounded-lg border-gray-200 dark:border-gray-800"${_scopeId2}><!--[-->`);
745
+ ssrRenderList(unref(entries), (entry) => {
746
+ _push3(ssrRenderComponent(_component_ImportFileRow, {
747
+ key: entry.id,
748
+ entry,
749
+ removable: !unref(importing) && entry.state !== "uploading",
750
+ onRemove: unref(remove)
751
+ }, null, _parent3, _scopeId2));
752
+ });
753
+ _push3(`<!--]--></div>`);
754
+ }
755
+ if (unref(importedCount) > 0) {
756
+ _push3(`<div class="flex justify-end"${_scopeId2}>`);
757
+ _push3(ssrRenderComponent(_component_UButton, {
758
+ label: `Open ${unref(project)?.label || unref(project)?.name || "project"}`,
759
+ icon: "i-lucide-arrow-right",
760
+ trailing: "",
761
+ variant: "ghost",
762
+ size: "sm",
763
+ to: `/projects/${unref(projectId)}`
764
+ }, null, _parent3, _scopeId2));
765
+ _push3(`</div>`);
766
+ } else {
767
+ _push3(`<!---->`);
768
+ }
769
+ _push3(`</div>`);
770
+ } else {
771
+ return [
772
+ createVNode("div", { class: "space-y-4" }, [
773
+ createVNode("div", {
774
+ class: ["rounded-lg border-2 border-dashed p-6 text-center transition-colors", unref(dragging) ? "border-primary bg-primary/5" : "border-gray-200 dark:border-gray-700"],
775
+ onDragover: withModifiers(($event) => dragging.value = true, ["prevent"]),
776
+ onDragleave: withModifiers(($event) => dragging.value = false, ["prevent"]),
777
+ onDrop: withModifiers(onDrop, ["prevent"])
778
+ }, [
779
+ createVNode(_component_UIcon, {
780
+ name: "i-lucide-file-archive",
781
+ class: "size-7 text-gray-400 mb-2"
782
+ }),
783
+ createVNode("p", { class: "text-sm text-gray-600 dark:text-gray-400" }, [
784
+ createTextVNode("Drop "),
785
+ createVNode("code", null, "report-*.zip"),
786
+ createTextVNode(" files here, or")
787
+ ]),
788
+ createVNode(_component_UButton, {
789
+ label: "Choose files",
790
+ icon: "i-lucide-folder-open",
791
+ variant: "outline",
792
+ size: "sm",
793
+ class: "mt-2",
794
+ disabled: unref(importing),
795
+ onClick: ($event) => unref(fileInput)?.click()
796
+ }, null, 8, ["disabled", "onClick"]),
797
+ unref(maxBytes) ? (openBlock(), createBlock("p", {
798
+ key: 0,
799
+ class: "text-xs text-gray-500 mt-3"
800
+ }, " Up to " + toDisplayString(("formatBytes" in _ctx ? _ctx.formatBytes : unref(formatBytes))(unref(maxBytes))) + " per archive. Larger ones are rejected here, before uploading. ", 1)) : createCommentVNode("", true),
801
+ createVNode("input", {
802
+ ref_key: "fileInput",
803
+ ref: fileInput,
804
+ type: "file",
805
+ accept: ".zip",
806
+ multiple: "",
807
+ class: "hidden",
808
+ onChange: onPicked
809
+ }, null, 544)
810
+ ], 42, ["onDragover", "onDragleave"]),
811
+ unref(entries).length === 0 ? (openBlock(), createBlock(_component_EmptyState, {
812
+ key: 0,
813
+ icon: "i-lucide-inbox",
814
+ text: "No archives selected yet."
815
+ })) : (openBlock(), createBlock("div", {
816
+ key: 1,
817
+ class: "divide-y divide-gray-100 dark:divide-gray-800 border rounded-lg border-gray-200 dark:border-gray-800"
818
+ }, [
819
+ (openBlock(true), createBlock(Fragment, null, renderList(unref(entries), (entry) => {
820
+ return openBlock(), createBlock(_component_ImportFileRow, {
821
+ key: entry.id,
822
+ entry,
823
+ removable: !unref(importing) && entry.state !== "uploading",
824
+ onRemove: unref(remove)
825
+ }, null, 8, ["entry", "removable", "onRemove"]);
826
+ }), 128))
827
+ ])),
828
+ unref(importedCount) > 0 ? (openBlock(), createBlock("div", {
829
+ key: 2,
830
+ class: "flex justify-end"
831
+ }, [
832
+ createVNode(_component_UButton, {
833
+ label: `Open ${unref(project)?.label || unref(project)?.name || "project"}`,
834
+ icon: "i-lucide-arrow-right",
835
+ trailing: "",
836
+ variant: "ghost",
837
+ size: "sm",
838
+ to: `/projects/${unref(projectId)}`
839
+ }, null, 8, ["label", "to"])
840
+ ])) : createCommentVNode("", true)
841
+ ])
842
+ ];
843
+ }
844
+ }),
845
+ _: 1
846
+ }, _parent2, _scopeId));
847
+ _push2(`</div>`);
848
+ } else {
849
+ return [
850
+ createVNode("div", { class: "p-4 space-y-4" }, [
851
+ createVNode(_component_SectionCard, {
852
+ title: "Import past runs",
853
+ icon: "i-lucide-import",
854
+ help: "project.import",
855
+ subtitle: "Backfill runs recorded before you started using Piwi, from Playwright's own blob reports."
856
+ }, {
857
+ default: withCtx(() => [
858
+ createVNode("div", { class: "space-y-4" }, [
859
+ createVNode("div", { class: "text-sm text-gray-600 dark:text-gray-400 space-y-2" }, [
860
+ createVNode("p", null, [
861
+ createTextVNode(" Run your suite with the blob reporter and upload the archives it writes to "),
862
+ createVNode("code", null, "blob-report/"),
863
+ createTextVNode(": ")
864
+ ]),
865
+ createVNode(_component_CodeBlock, {
866
+ code: "npx playwright test --reporter=blob",
867
+ language: "bash"
868
+ }),
869
+ createVNode("p", null, " Each archive imports as one completed run, with its traces, screenshots and videos. Importing the same archive twice does nothing, so an interrupted batch is safe to repeat. ")
870
+ ]),
871
+ unref(isDemoMode) ? (openBlock(), createBlock(_component_UAlert, {
872
+ key: 0,
873
+ color: "primary",
874
+ variant: "subtle",
875
+ icon: "i-lucide-monitor-smartphone",
876
+ title: "Nothing leaves your browser",
877
+ description: "This is the demo: the archive is read by a service worker and stored in your browser, not uploaded. It is cleared when the demo's sample data is refreshed, or when you reset the demo.",
878
+ ui: { description: "text-xs" }
879
+ })) : createCommentVNode("", true),
880
+ createVNode(_component_UAlert, {
881
+ color: "neutral",
882
+ variant: "subtle",
883
+ icon: "i-lucide-info",
884
+ title: "What imported runs carry",
885
+ description: "Failures still cluster, and traces, screenshots and videos open exactly as they do for reported runs. Web vitals, page state and locator healing come from Piwi's own capture fixtures, so historical runs have none — they start once the reporter is in place.",
886
+ ui: { description: "text-xs" }
887
+ }),
888
+ unref(limitError) ? (openBlock(), createBlock(_component_UAlert, {
889
+ key: 1,
890
+ color: "error",
891
+ variant: "subtle",
892
+ icon: "i-lucide-circle-alert",
893
+ description: unref(limitError)
894
+ }, null, 8, ["description"])) : createCommentVNode("", true)
895
+ ])
896
+ ]),
897
+ _: 1
898
+ }),
899
+ createVNode(_component_SectionCard, {
900
+ title: "Archives",
901
+ icon: "i-lucide-files",
902
+ count: unref(entries).length || null
903
+ }, {
904
+ actions: withCtx(() => [
905
+ createVNode("div", { class: "flex items-center gap-2" }, [
906
+ unref(importing) ? (openBlock(), createBlock("span", {
907
+ key: 0,
908
+ class: "text-xs text-gray-500 tabular-nums"
909
+ }, toDisplayString(unref(batch).done) + " of " + toDisplayString(unref(batch).total) + " done ", 1)) : createCommentVNode("", true),
910
+ unref(finishedCount) > 0 && !unref(importing) ? (openBlock(), createBlock(_component_UButton, {
911
+ key: 1,
912
+ label: "Clear finished",
913
+ icon: "i-lucide-eraser",
914
+ color: "neutral",
915
+ variant: "ghost",
916
+ size: "sm",
917
+ disabled: unref(importing),
918
+ onClick: ($event) => unref(clearFinished)()
919
+ }, null, 8, ["disabled", "onClick"])) : createCommentVNode("", true),
920
+ createVNode(_component_UButton, {
921
+ label: unref(readyCount) > 0 ? `Import ${unref(readyCount)} archive${unref(readyCount) === 1 ? "" : "s"}` : "Import",
922
+ icon: "i-lucide-upload",
923
+ size: "sm",
924
+ loading: unref(importing),
925
+ disabled: unref(readyCount) === 0 || unref(busy),
926
+ onClick: ($event) => unref(startImport)()
927
+ }, null, 8, ["label", "loading", "disabled", "onClick"])
928
+ ])
929
+ ]),
930
+ default: withCtx(() => [
931
+ createVNode("div", { class: "space-y-4" }, [
932
+ createVNode("div", {
933
+ class: ["rounded-lg border-2 border-dashed p-6 text-center transition-colors", unref(dragging) ? "border-primary bg-primary/5" : "border-gray-200 dark:border-gray-700"],
934
+ onDragover: withModifiers(($event) => dragging.value = true, ["prevent"]),
935
+ onDragleave: withModifiers(($event) => dragging.value = false, ["prevent"]),
936
+ onDrop: withModifiers(onDrop, ["prevent"])
937
+ }, [
938
+ createVNode(_component_UIcon, {
939
+ name: "i-lucide-file-archive",
940
+ class: "size-7 text-gray-400 mb-2"
941
+ }),
942
+ createVNode("p", { class: "text-sm text-gray-600 dark:text-gray-400" }, [
943
+ createTextVNode("Drop "),
944
+ createVNode("code", null, "report-*.zip"),
945
+ createTextVNode(" files here, or")
946
+ ]),
947
+ createVNode(_component_UButton, {
948
+ label: "Choose files",
949
+ icon: "i-lucide-folder-open",
950
+ variant: "outline",
951
+ size: "sm",
952
+ class: "mt-2",
953
+ disabled: unref(importing),
954
+ onClick: ($event) => unref(fileInput)?.click()
955
+ }, null, 8, ["disabled", "onClick"]),
956
+ unref(maxBytes) ? (openBlock(), createBlock("p", {
957
+ key: 0,
958
+ class: "text-xs text-gray-500 mt-3"
959
+ }, " Up to " + toDisplayString(("formatBytes" in _ctx ? _ctx.formatBytes : unref(formatBytes))(unref(maxBytes))) + " per archive. Larger ones are rejected here, before uploading. ", 1)) : createCommentVNode("", true),
960
+ createVNode("input", {
961
+ ref_key: "fileInput",
962
+ ref: fileInput,
963
+ type: "file",
964
+ accept: ".zip",
965
+ multiple: "",
966
+ class: "hidden",
967
+ onChange: onPicked
968
+ }, null, 544)
969
+ ], 42, ["onDragover", "onDragleave"]),
970
+ unref(entries).length === 0 ? (openBlock(), createBlock(_component_EmptyState, {
971
+ key: 0,
972
+ icon: "i-lucide-inbox",
973
+ text: "No archives selected yet."
974
+ })) : (openBlock(), createBlock("div", {
975
+ key: 1,
976
+ class: "divide-y divide-gray-100 dark:divide-gray-800 border rounded-lg border-gray-200 dark:border-gray-800"
977
+ }, [
978
+ (openBlock(true), createBlock(Fragment, null, renderList(unref(entries), (entry) => {
979
+ return openBlock(), createBlock(_component_ImportFileRow, {
980
+ key: entry.id,
981
+ entry,
982
+ removable: !unref(importing) && entry.state !== "uploading",
983
+ onRemove: unref(remove)
984
+ }, null, 8, ["entry", "removable", "onRemove"]);
985
+ }), 128))
986
+ ])),
987
+ unref(importedCount) > 0 ? (openBlock(), createBlock("div", {
988
+ key: 2,
989
+ class: "flex justify-end"
990
+ }, [
991
+ createVNode(_component_UButton, {
992
+ label: `Open ${unref(project)?.label || unref(project)?.name || "project"}`,
993
+ icon: "i-lucide-arrow-right",
994
+ trailing: "",
995
+ variant: "ghost",
996
+ size: "sm",
997
+ to: `/projects/${unref(projectId)}`
998
+ }, null, 8, ["label", "to"])
999
+ ])) : createCommentVNode("", true)
1000
+ ])
1001
+ ]),
1002
+ _: 1
1003
+ }, 8, ["count"])
1004
+ ])
1005
+ ];
1006
+ }
1007
+ }),
1008
+ _: 1
1009
+ }, _parent));
1010
+ };
1011
+ }
1012
+ });
1013
+ const _sfc_setup = _sfc_main.setup;
1014
+ _sfc_main.setup = (props, ctx) => {
1015
+ const ssrContext = useSSRContext();
1016
+ (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/projects/[id]/import.vue");
1017
+ return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
1018
+ };
1019
+
1020
+ export { _sfc_main as default };
1021
+ //# sourceMappingURL=import-CZo3djDi.mjs.map