@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,34 @@
1
+ import{_ as At,a as Lt}from"./279D2RYp.js";import{_ as Ot,a as zt}from"./CHEFCN8Q.js";import{_ as Bt}from"./DS636elg.js";import{d as B,an as Ut,B as Ft,K as qt,ad as Wt,H as vt,o as s,c as v,h as T,r as ft,j as k,l as at,k as t,f as x,g as f,i as n,p as it,q as A,t as g,v as P,m as D,_ as q,w as F,F as V,y as L,ag as wt,D as Q,Q as ot,s as Mt,e as Gt}from"./NQikbhmK.js";import{_ as Ht}from"./DiZyJYez.js";import{_ as Yt}from"./BMvCSA6h.js";import{u as Xt}from"./YVN7WG7q.js";import{u as _t}from"./CpjgB2aY.js";import{_ as Jt}from"./Bti38m-M.js";import{_ as Qt}from"./D0HNloZ9.js";import{g as W,f as lt,c as Zt}from"./CDk0q2hV.js";import{_ as G}from"./BxCKKeYs.js";import{_ as H}from"./ybDYeNxd.js";import{_ as Y}from"./DLSrtpsA.js";import{_ as K}from"./DprVVyUQ.js";import{_ as Kt}from"./DHDtnj7p.js";import{_ as Rt}from"./DcmZRa_F.js";import{_ as te}from"./CV9-fTmY.js";import{_ as ee}from"./tvgqrYDd.js";import{_ as ct}from"./DiOLdHBC.js";import{X as se,b as Et,c as dt,d as ae,i as ne,e as re,f as oe,g as et,m as mt,h as le,j as kt,k as ie,l as $t,s as st,n as St,o as ce,p as de,q as ue,r as me,t as pe,P as _e,v as ye,_ as bt,u as jt,a as xt,C as yt,w as ge,O as Z}from"./DX-MDGb3.js";import{_ as ut}from"./BX9ZXe98.js";import{N as Dt}from"./CGNkHojN.js";import{_ as he,a as fe}from"./Ar3IelOY.js";import"./g26aVPxc.js";import"./BeLWlVK0.js";import"./BYDaY0Z7.js";import"./FUXhyidq.js";import"./DEFEpYzn.js";import"./CNFYDQmj.js";import"./IvQlbZk6.js";import"./CYsTqbBS.js";import"./C7P1UCO2.js";import"./BjaRappk.js";import"./Bn0YQDyy.js";import"./eptP4pGv.js";import"./D7W_4Sqc.js";function be({x:C,y:e,w:l,h:p,tl:a=!1,tr:R=!1,bl:u=!1,br:j=!1,r:b=0}){let m;m=`M${C+b},${e}h${l-2*b}`;let r=R?b:0,i=R?0:b;return m+=`a${r},${r} 0 0 1 ${r},${r}`,m+=`h${i}v${i}`,m+=`v${p-2*b}`,r=j?b:0,i=j?0:b,m+=`a${r},${r} 0 0 1 ${-r},${r}`,m+=`v${i}h${-i}`,m+=`h${2*b-l}`,r=u?b:0,i=u?0:b,m+=`a${r},${r} 0 0 1 ${-r},${-r}`,m+=`h${-i}v${-i}`,m+=`v${2*b-p}`,r=a?b:0,i=a?0:b,m+=`a${r},${r} 0 0 1 ${r},${-r}`,m+=`v${-i}h${i}`,m+="z",m}const xe=Object.assign(Object.assign({},se),{color:void 0,barMaxWidth:void 0,barWidth:void 0,dataStep:void 0,barPadding:0,roundedCorners:2,cursor:null,barMinHeight1Px:!1,barMinHeightZeroValue:null,orientation:Et.Vertical}),Tt=dt`
2
+ label: stacked-bar-component;
3
+ `,ve=ne`
4
+ :root {
5
+ --vis-stacked-bar-cursor: default;
6
+ --vis-stacked-bar-fill-color: var(--vis-color-main);
7
+ --vis-stacked-bar-stroke-color: none;
8
+ --vis-stacked-bar-stroke-width: 0px;
9
+ --vis-stacked-bar-hover-stroke-width: none;
10
+ --vis-stacked-bar-hover-stroke-color: none;
11
+
12
+ /* Dark Theme */
13
+ --vis-dark-stacked-bar-stroke-color: none;
14
+ }
15
+
16
+ ${ae} ${`.${Tt}`} {
17
+ --vis-stacked-bar-stroke-color: var(--vis-dark-stacked-bar-stroke-color);
18
+ }
19
+ `,rt=dt`
20
+ label: bar;
21
+ fill: var(--vis-stacked-bar-fill-color);
22
+ stroke: var(--vis-stacked-bar-stroke-color);
23
+ stroke-width: var(--vis-stacked-bar-stroke-width);
24
+ cursor: var(--vis-stacked-bar-cursor);
25
+
26
+ &:hover {
27
+ stroke-width: var(--vis-stacked-bar-hover-stroke-width);
28
+ stroke: var(--vis-stacked-bar-hover-stroke-color);
29
+ }
30
+ `,gt=dt`
31
+ label: barGroup;
32
+ `,Vt=dt`
33
+ label: barGroupExit;
34
+ `,ke=Object.freeze(Object.defineProperty({__proto__:null,bar:rt,barGroup:gt,barGroupExit:Vt,globalStyles:ve,root:Tt},Symbol.toStringTag,{value:"Module"}));class It extends re{constructor(e){super(),this._defaultConfig=xe,this.config=this._defaultConfig,this.getAccessors=()=>oe(this.config.y)?this.config.y:[this.config.y],this.stacked=!0,this.events={},this._barData=[],e&&this.setConfig(e)}get bleed(){if(this._barData=this._getVisibleData(),this._barData.length===0)return{top:0,bottom:0,left:0,right:0};const e=!this.isVertical()&&this.dataScale.range()[0]>this.dataScale.range()[1],l=this.dataScale.domain(),p=this._getBarWidth()/2,a=this._barData.map((S,y)=>et(S,this.config.x,y)),R=mt(a),u=le(a),j=this.dataScale(R),b=this.dataScale(u),m=this.dataScale.invert(j+(e?p:-p)),r=this.dataScale.invert(b+(e?-p:p)),i=m<=l[0]?this.dataScale(l[0])-this.dataScale(m):0,E=r>l[1]?this.dataScale(r)-this.dataScale(l[1]):0;return{top:this.isVertical()?0:e?-E:i,bottom:this.isVertical()?0:e?-i:E,left:this.isVertical()?i:0,right:this.isVertical()?E:0}}get dataScale(){return this.isVertical()?this.xScale:this.yScale}get valueScale(){return this.isVertical()?this.yScale:this.xScale}isVertical(){return this.config.orientation===Et.Vertical}_render(e){const{config:l}=this,p=kt(e)?e:l.duration,a=this.getAccessors(),R=ie(this._barData,0,a,this._prevNegative);this._prevNegative=R.map(y=>!!y.isMostlyNegative);const u=this.g.selectAll(`.${gt}`).data(this._barData,(y,h)=>{var c;return`${(c=$t(y,l.id,h))!==null&&c!==void 0?c:h}`}),j=(y,h)=>{const c=this.dataScale(et(y,l.x,h)),$=this.isVertical()?c:0,o=this.isVertical()?0:c;return`translate(${$},${o})`},m=u.enter().append("g").attr("class",gt).attr("transform",j).style("opacity",1).merge(u);st(m,p).attr("transform",j).style("opacity",1);const r=u.exit().attr("class",Vt);st(r,p).style("opacity",0).remove().on("interrupt",function(){this.remove()}),st(r.selectAll(`.${rt}`),p).attr("transform",this.isVertical()?`translate(0,${this._height/3})`:`translate(${this._width/6},0)`);const i=m.selectAll(`.${rt}`).data((y,h)=>{const c=R.map(($,o)=>({datum:y,index:h,stacked:$[h],stackIndex:o})).filter($=>$.stacked[0]!==$.stacked[1]);return c.forEach(($,o)=>{$.isEnding=o===c.length-1||o<=c.length-1&&c[o+1].stacked[0]!==$.stacked[1]}),c},y=>y.stackIndex),S=i.enter().append("path").attr("class",rt).attr("d",y=>this._getBarPath(y,!0)).style("fill",y=>St(y.datum,l.color,y.stackIndex)).merge(i);st(S,p).attr("d",y=>this._getBarPath(y)).style("fill",y=>St(y.datum,l.color,y.stackIndex)).style("cursor",y=>$t(y.datum,l.cursor,y.stackIndex)),st(i.exit(),p).style("opacity",0).remove().on("interrupt",function(){this.remove()})}_getBarWidth(){const{config:e,datamodel:{data:l}}=this;if(ce(l))return 0;if(e.barWidth)return mt([e.barWidth,e.barMaxWidth]);const p=this.dataScale.bandwidth,a=this.dataScale.domain?this.dataScale.domain():[];let u=1+(p?a.length:a[1]-a[0])/e.dataStep||!p&&l.filter((m,r)=>{const i=et(m,e.x,r);return i>=a[0]&&i<=a[1]}).length||l.length;!p&&u>=2&&(u+=1);const b=(u<2?1:1-e.barPadding)*(this.isVertical()?this._width:this._height)/u;return mt([b,e.barMaxWidth])}_getVisibleData(){const{config:e,datamodel:{data:l}}=this,p=this._getBarWidth(),a=l.length<2?0:p/2,R=this.dataScale,u=Math.abs(R.invert(a)-R.invert(0));return l?.filter((b,m)=>{const r=et(b,e.x,m),i=R.domain(),E=+i[0],S=+i[1];return r>=E-u&&r<=S+u})}_getBarPath(e,l=!1){const{config:p}=this,a=this.getAccessors(),R=this._getBarWidth(),u=e.stacked[1]<0,j=e.isEnding,b=et(e.datum,a[e.stackIndex],e.index),m=l?0:Math.abs(this.valueScale(e.stacked[0])-this.valueScale(e.stacked[1])),r=!l&&p.barMinHeight1Px&&m<1&&isFinite(b)&&b!==p.barMinHeightZeroValue?1:m,i=l?this.valueScale(0):this.valueScale(u?e.stacked[0]:e.stacked[1])-(m<1&&p.barMinHeight1Px?1:0),E=-R/2,S=R,y=p.roundedCorners?kt(p.roundedCorners)?+p.roundedCorners:S/2:0,h=me(y,0,Math.min(m,S)/2),c=this.yScale.range()[0]>this.yScale.range()[1];return be({x:this.isVertical()?E:i-r,y:this.isVertical()?i+(c?0:-r):E,w:this.isVertical()?S:r,h:this.isVertical()?r:S,tl:j&&(this.isVertical()?!u&&c||u&&!c:u),tr:j&&(this.isVertical()?!u&&c||u&&!c:!u),br:j&&(this.isVertical()?u&&c||!u&&!c:!u),bl:j&&(this.isVertical()?u&&c||!u&&!c:u),r:h})}_mapEventDatum(e){return{datum:Object.assign(Object.assign({},e),e.datum),index:e.index}}getValueScaleExtent(e){const{datamodel:l}=this,p=this.getAccessors(),a=e?this._getVisibleData():l.data;return de(a,...p)}getDataScaleExtent(){const{config:e,datamodel:l}=this;return ue(l.data,e.x)}getYDataExtent(e){return this.isVertical()?this.getValueScaleExtent(e):this.getDataScaleExtent()}getXDataExtent(){return this.isVertical()?this.getDataScaleExtent():this.getValueScaleExtent(!1)}}It.selectors=ke;const $e={"data-vis-component":""},Se=B({__name:"index",props:{color:{type:[Function,String,Array,null]},barWidth:{},barMaxWidth:{},dataStep:{},barPadding:{},roundedCorners:{type:[Number,Boolean]},cursor:{type:[Function,String,null]},barMinHeight1Px:{type:Boolean},barMinHeightZeroValue:{},orientation:{},x:{type:[Function,Number,null]},y:{type:[Function,Number,null,Array]},id:{type:Function},xScale:{type:[Object,Function]},yScale:{type:[Object,Function]},excludeFromDomainCalculation:{type:Boolean},duration:{},events:{},attributes:{},data:{}},setup(C,{expose:e}){const l=Ut(pe),p=C,a=T(()=>l.data.value??p.data),R=_e(p),u=ft();return Ft(()=>{qt(()=>{u.value=new It(R.value),u.value?.setData(a.value),l.update(u.value)})}),Wt(()=>{u.value?.destroy(),l.destroy()}),vt(R,(j,b)=>{ye(j,b)||(u.value?.setConfig(R.value),u.value?.render())}),vt(a,()=>{u.value?.setData(a.value)}),e({component:u}),(j,b)=>(s(),v("div",$e))}}),Ce=30,ht=3650;function we(C){const e={days:String(C.days)};return C.projectIds&&C.projectIds.length>0&&(e.projects=C.projectIds.join(",")),C.environment&&(e.environment=C.environment),C.fullRunsOnly||(e.fullRunsOnly="false"),e}const J={days:Ce,projectIds:[],environment:null,fullRunsOnly:!0};function Me(){const C=Xt("piwi-analytics-scope",{default:()=>({...J}),encode:p=>JSON.stringify(p),decode:p=>{try{return p?{...J,...JSON.parse(p)}:{...J}}catch{return{...J}}}}),e=T(()=>({days:C.value.days,projectIds:C.value.projectIds.length>0?C.value.projectIds:void 0,environment:C.value.environment,fullRunsOnly:C.value.fullRunsOnly})),l=T(()=>we(e.value));return{state:C,scope:e,scopeQuery:l}}function X(C,e){return _t(`/api/analytics/${C}`,{query:T(e),lazy:!0,server:!1},"$EEH4o0rJ7t")}const Re={class:"flex items-center gap-3 flex-wrap"},Ee={class:"flex items-center gap-1.5"},je={key:0,class:"text-gray-500"},De={key:1,class:"truncate"},Te={key:2},Ve={class:"flex items-center gap-1.5 cursor-pointer select-none text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 transition-colors"},pt="All environments",Ie=B({__name:"AnalyticsScopeBar",props:{modelValue:{},availableProjects:{},availableEnvironments:{}},emits:["update:modelValue"],setup(C,{emit:e}){const l=C,p=e,a=[{label:"Last 7 days",value:7},{label:"Last 30 days",value:30},{label:"Last 90 days",value:90},{label:"Last year",value:365},{label:"All time",value:ht}],R=T({get:()=>l.modelValue.days,set:y=>p("update:modelValue",{...l.modelValue,days:y})}),u=T(()=>l.availableProjects.map(y=>({label:y.label||y.name,value:y.id}))),j=T({get:()=>l.modelValue.projectIds,set:y=>p("update:modelValue",{...l.modelValue,projectIds:y})});function b(y){return u.value.find(h=>h.value===y)?.label??`#${y}`}const m=T({get:()=>l.modelValue.environment??pt,set:y=>p("update:modelValue",{...l.modelValue,environment:y===pt?null:y})}),r=T(()=>[pt,...l.availableEnvironments]),i=T({get:()=>l.modelValue.fullRunsOnly,set:y=>p("update:modelValue",{...l.modelValue,fullRunsOnly:y})}),E=T(()=>l.modelValue.days===J.days&&l.modelValue.projectIds.length===0&&l.modelValue.environment===null&&l.modelValue.fullRunsOnly===J.fullRunsOnly);function S(){p("update:modelValue",{...J})}return(y,h)=>{const c=Bt,$=it,o=Ht,d=Yt,_=q;return s(),v("div",Re,[k(c,{modelValue:t(R),"onUpdate:modelValue":h[0]||(h[0]=w=>at(R)?R.value=w:null),items:a,size:"sm",class:"min-w-[140px]",icon:"i-lucide-calendar-range"},null,8,["modelValue"]),t(u).length>0?(s(),x(o,{key:0,modelValue:t(j),"onUpdate:modelValue":h[1]||(h[1]=w=>at(j)?j.value=w:null),items:t(u),"value-key":"value",multiple:"",searchable:"",size:"sm",class:"min-w-[170px]",placeholder:"All projects"},{default:f(({modelValue:w})=>[n("div",Ee,[k($,{name:"i-lucide-folder",class:A(["size-3.5 shrink-0",w.length?"text-primary":"text-gray-400"])},null,8,["class"]),w.length?w.length===1?(s(),v("span",De,g(b(w[0])),1)):(s(),v("span",Te,g(w.length)+" projects",1)):(s(),v("span",je,"All projects"))])]),_:1},8,["modelValue","items"])):P("",!0),C.availableEnvironments.length>0?(s(),x(c,{key:1,modelValue:t(m),"onUpdate:modelValue":h[2]||(h[2]=w=>at(m)?m.value=w:null),items:t(r),size:"sm",class:"min-w-[160px]",icon:"i-lucide-server"},null,8,["modelValue","items"])):P("",!0),n("label",Ve,[k(d,{modelValue:t(i),"onUpdate:modelValue":h[3]||(h[3]=w=>at(i)?i.value=w:null),size:"sm"},null,8,["modelValue"]),h[4]||(h[4]=D(" Full runs only ",-1))]),t(E)?P("",!0):(s(),x(_,{key:2,variant:"ghost",size:"sm",color:"neutral",icon:"i-lucide-x",onClick:S},{default:f(()=>[...h[5]||(h[5]=[D(" Reset ",-1)])]),_:1}))])}}}),Pe=Object.assign(Ie,{__name:"AnalyticsScopeBar"}),Pt=[{id:"insights",title:"Insights",icon:"i-lucide-lightbulb",size:"half"},{id:"pass-rate-heatmap",title:"Pass rate heatmap",icon:"i-lucide-grid-3x3",size:"half"},{id:"portfolio",title:"Portfolio health",icon:"i-lucide-table-properties",size:"full"},{id:"ci-time-trend",title:"CI time",icon:"i-lucide-timer",size:"half"},{id:"wasted-time",title:"Wasted CI time",icon:"i-lucide-hourglass",size:"half"},{id:"flaky-leaderboard",title:"Flakiest tests",icon:"i-lucide-repeat",size:"half"},{id:"cluster-landscape",title:"Failure clusters",icon:"i-lucide-layers",size:"half"},{id:"regression-velocity",title:"Regression velocity",icon:"i-lucide-git-pull-request-arrow",size:"half"},{id:"browser-matrix",title:"Browser matrix",icon:"i-lucide-monitor-smartphone",size:"half"},{id:"slow-endpoints",title:"Slow endpoints",icon:"i-lucide-gauge",size:"full"}];new Set(Pt.map(C=>C.id));const Ne={key:3,class:"divide-y divide-gray-100 dark:divide-gray-800"},Ae={class:"min-w-0"},Le={class:"text-sm font-medium"},Oe={key:0,class:"text-xs text-gray-500 dark:text-gray-400 mt-0.5"},ze=B({__name:"InsightsFeed",props:{query:{}},async setup(C){let e,l;const p=C,{data:a,pending:R,error:u,refresh:j}=([e,l]=F(()=>X("insights",()=>p.query)),e=await e,l(),e),b=Q,m={critical:{icon:"i-lucide-octagon-alert",class:"text-red-500",border:"border-l-red-500"},warning:{icon:"i-lucide-triangle-alert",class:"text-amber-500",border:"border-l-amber-400"},info:{icon:"i-lucide-info",class:"text-blue-500",border:"border-l-blue-400"},positive:{icon:"i-lucide-trending-up",class:"text-green-500",border:"border-l-green-500"}};return(r,i)=>{const E=G,S=q,y=H,h=Y,c=it,$=K;return s(),x($,{icon:"i-lucide-lightbulb",title:"Insights",count:t(a)?.length||void 0,help:"analytics.insights"},{default:f(()=>[t(R)?(s(),x(E,{key:0})):t(u)?(s(),x(y,{key:1,text:`Couldn't load insights: ${("errorMessage"in r?r.errorMessage:t(W))(t(u))}`},{action:f(()=>[k(S,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:i[0]||(i[0]=o=>t(j)())},{default:f(()=>[...i[1]||(i[1]=[D(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).length===0?(s(),x(h,{key:2,icon:"i-lucide-check-circle",text:"Nothing needs your attention in this period."})):(s(),v("div",Ne,[(s(!0),v(V,null,L(t(a),o=>(s(),x(wt(o.to?t(b):"div"),{key:o.id,to:o.to,class:A(["flex items-start gap-3 py-3 pl-3 border-l-2",[m[o.severity].border,o.to?"hover:bg-gray-50 dark:hover:bg-gray-800/60 rounded-r transition-colors":""]])},{default:f(()=>[k(c,{name:m[o.severity].icon,class:A(["size-4 mt-0.5 shrink-0",m[o.severity].class])},null,8,["name","class"]),n("div",Ae,[n("p",Le,g(o.message),1),o.detail?(s(),v("p",Oe,g(o.detail),1)):P("",!0)])]),_:2},1032,["to","class"]))),128))]))]),_:1},8,["count"])}}}),Be=Object.assign(ze,{__name:"InsightsFeed"}),Ue={class:"md:hidden space-y-3"},Fe={class:"flex items-center justify-between gap-2"},qe={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},We={key:0},Ge={class:"hidden md:block"},He={class:"w-full text-sm"},Ye={class:"divide-y divide-gray-100 dark:divide-gray-800"},Xe={class:"py-2.5 pr-4"},Je={class:"flex items-center gap-2 min-w-0"},Qe={class:"py-2.5 pr-4"},Ze={class:"w-36"},Ke={class:"py-2.5 pr-4 text-right"},ts={class:"py-2.5 pr-4 text-right tabular-nums"},es={class:"py-2.5 pr-4 text-right tabular-nums text-gray-500 dark:text-gray-400"},ss={class:"py-2.5 text-right"},as={class:"text-xs text-gray-500 dark:text-gray-400"},ns={key:1,class:"text-xs text-gray-400"},rs=B({__name:"PortfolioScorecard",props:{query:{}},async setup(C){let e,l;const p=C,{data:a,pending:R,error:u,refresh:j}=([e,l]=F(()=>X("portfolio",()=>p.query)),e=await e,l(),e);function b(r){return r===null?"text-gray-400":r>=90?"text-green-600 dark:text-green-400":r>=50?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"}function m(r){return r===null||Math.abs(r)<1?null:r>0?{icon:"i-lucide-trending-up",class:"text-green-600 dark:text-green-400"}:{icon:"i-lucide-trending-down",class:"text-red-600 dark:text-red-400"}}return(r,i)=>{const E=G,S=q,y=H,h=Y,c=Q,$=Kt,o=Rt,d=it,_=te,w=ee,I=ct,N=K;return s(),x(N,{icon:"i-lucide-table-properties",title:"Portfolio health",count:t(a)?.length||void 0,help:"analytics.portfolio"},{default:f(()=>[t(R)?(s(),x(E,{key:0})):t(u)?(s(),x(y,{key:1,text:`Couldn't load the portfolio: ${("errorMessage"in r?r.errorMessage:t(W))(t(u))}`},{action:f(()=>[k(S,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:i[0]||(i[0]=M=>t(j)())},{default:f(()=>[...i[1]||(i[1]=[D(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).length===0?(s(),x(h,{key:2,text:"No projects with runs in this period."})):(s(),v(V,{key:3},[n("div",Ue,[(s(!0),v(V,null,L(t(a),M=>(s(),v("div",{key:M.projectId,class:"rounded-lg border border-gray-200 dark:border-gray-800 p-3 space-y-2"},[n("div",Fe,[k(c,{to:`/projects/${M.projectId}`,class:"font-medium truncate hover:text-primary"},{default:f(()=>[D(g(M.label||M.name),1)]),_:2},1032,["to"]),n("span",{class:A(["tabular-nums font-semibold shrink-0",b(M.passRate)])},g(M.passRate!==null?`${M.passRate}%`:"—"),3)]),k($,{runs:M.recentRuns,height:20},null,8,["runs"]),n("div",qe,[n("span",null,g(M.runCount)+" runs · "+g(M.flakyTests)+" flaky · "+g(M.openClusters)+" open clusters",1),M.latestRun?(s(),v("span",We,g(("formatRelativeTime"in r?r.formatRelativeTime:t(lt))(M.latestRun.startTime)),1)):P("",!0)])]))),128))]),n("div",Ge,[k(I,{"min-width":"52rem"},{default:f(()=>[n("table",He,[i[2]||(i[2]=n("thead",null,[n("tr",{class:"text-left text-xs text-gray-500 uppercase tracking-wider border-b border-gray-200 dark:border-gray-800"},[n("th",{class:"py-2 pr-4 font-medium"},"Project"),n("th",{class:"py-2 pr-4 font-medium"},"Trend"),n("th",{class:"py-2 pr-4 font-medium text-right"},"Pass rate"),n("th",{class:"py-2 pr-4 font-medium text-right"},"Runs"),n("th",{class:"py-2 pr-4 font-medium text-right"},"Flaky"),n("th",{class:"py-2 pr-4 font-medium text-right"},"Avg run"),n("th",{class:"py-2 pr-4 font-medium text-right"},"Open clusters"),n("th",{class:"py-2 font-medium text-right"},"Latest run")])],-1)),n("tbody",Ye,[(s(!0),v(V,null,L(t(a),M=>(s(),v("tr",{key:M.projectId},[n("td",Xe,[n("div",Je,[k(c,{to:`/projects/${M.projectId}`,class:"font-medium truncate hover:text-primary"},{default:f(()=>[D(g(M.label||M.name),1)]),_:2},1032,["to"]),(s(!0),v(V,null,L(M.tags.slice(0,2),U=>(s(),x(o,{key:U.id,text:U.text,color:U.color},null,8,["text","color"]))),128))])]),n("td",Qe,[n("div",Ze,[k($,{runs:M.recentRuns,height:22},null,8,["runs"])])]),n("td",Ke,[n("span",{class:A(["inline-flex items-center gap-1 tabular-nums font-semibold",b(M.passRate)])},[D(g(M.passRate!==null?`${M.passRate}%`:"—")+" ",1),m(M.passRateDelta)?(s(),x(d,{key:0,name:m(M.passRateDelta).icon,class:A(["size-3.5",m(M.passRateDelta).class]),title:`${M.passRateDelta>0?"+":""}${M.passRateDelta} pts vs previous period`},null,8,["name","class","title"])):P("",!0)],2)]),n("td",ts,g(M.runCount),1),n("td",{class:A(["py-2.5 pr-4 text-right tabular-nums",M.flakyTests>0?"text-amber-600 dark:text-amber-400":""])},g(M.flakyTests),3),n("td",es,[k(_,{ms:M.avgRunDurationMs},null,8,["ms"])]),n("td",{class:A(["py-2.5 pr-4 text-right tabular-nums",M.openClusters>0?"text-red-600 dark:text-red-400":""])},g(M.openClusters),3),n("td",ss,[M.latestRun?(s(),x(c,{key:0,to:`/test-runs/${M.latestRun.id}`,class:"inline-flex items-center gap-2 hover:text-primary"},{default:f(()=>[k(w,{status:M.latestRun.status},null,8,["status"]),n("span",as,g(("formatRelativeTime"in r?r.formatRelativeTime:t(lt))(M.latestRun.startTime)),1)]),_:2},1032,["to"])):(s(),v("span",ns,"No runs"))])]))),128))])])]),_:1})])],64))]),_:1},8,["count"])}}}),os=Object.assign(rs,{__name:"PortfolioScorecard"}),ls={class:"space-y-1"},is={class:"flex gap-px"},cs=["title"],ds={class:"grid gap-2",style:{"grid-template-columns":"8rem 1fr"}},us={class:"relative h-4"},ms=B({__name:"PassRateHeatmap",props:{query:{}},async setup(C){let e,l;const p=C,{data:a,pending:R,error:u,refresh:j}=([e,l]=F(()=>X("pass-rate-heatmap",()=>p.query)),e=await e,l(),e);function b(c){return c===null?{}:c>=99.5?{backgroundColor:"rgba(34, 197, 94, 0.85)"}:c>=90?{backgroundColor:"rgba(34, 197, 94, 0.5)"}:c>=75?{backgroundColor:"rgba(245, 158, 11, 0.55)"}:c>=50?{backgroundColor:"rgba(249, 115, 22, 0.65)"}:{backgroundColor:"rgba(239, 68, 68, 0.75)"}}function m(c,$,o){const d=a.value?.buckets[$]??"",_=(a.value?.bucketDays??1)>1?` (${a.value.bucketDays} days)`:"";return`${c.label||c.name} · ${d}${_}: ${o!==null?`${o}% passed`:"no runs"}`}const r=[{color:"rgba(34, 197, 94, 0.85)",label:"100%"},{color:"rgba(34, 197, 94, 0.5)",label:"≥ 90%"},{color:"rgba(245, 158, 11, 0.55)",label:"≥ 75%"},{color:"rgba(249, 115, 22, 0.65)",label:"≥ 50%"},{color:"rgba(239, 68, 68, 0.75)",label:"< 50%"}],i=T(()=>{const c=a.value?.bucketDays??1;return c>1?`One cell = ${c} days`:"One cell = one day"}),E=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],S=T(()=>{const c=a.value?.buckets??[];return c.length>1&&c[0].slice(0,4)!==c[c.length-1].slice(0,4)});function y(c){const[$,o,d]=c.split("-"),_=E[Number(o)-1];return S.value?`${_} ${$}`:`${_} ${Number(d)}`}const h=T(()=>{const c=a.value?.buckets??[],$=c.length;if($===0)return[];const o=Math.min(S.value?4:5,$),d=new Set,_=[];for(let w=0;w<o;w++){const I=o===1?0:Math.round(w*($-1)/(o-1));if(d.has(I))continue;d.add(I);const N=I===0?0:I===$-1?100:(I+.5)/$*100,M=I===0?"translateX(0)":I===$-1?"translateX(-100%)":"translateX(-50%)";_.push({index:I,label:y(c[I]),left:N,transform:M})}return _});return(c,$)=>{const o=G,d=q,_=H,w=Y,I=Q,N=bt,M=ct,U=ut;return s(),x(U,{icon:"i-lucide-grid-3x3",title:"Pass rate heatmap",subtitle:t(i),help:"analytics.heatmap"},{default:f(()=>[t(R)?(s(),x(o,{key:0})):t(u)?(s(),x(_,{key:1,text:`Couldn't load the heatmap: ${("errorMessage"in c?c.errorMessage:t(W))(t(u))}`},{action:f(()=>[k(d,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:$[0]||($[0]=O=>t(j)())},{default:f(()=>[...$[1]||($[1]=[D(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).rows.length===0?(s(),x(w,{key:2,text:"No runs in this period."})):(s(),x(M,{key:3,"min-width":"22rem"},{default:f(()=>[n("div",ls,[(s(!0),v(V,null,L(t(a).rows,O=>(s(),v("div",{key:O.projectId,class:"grid items-center gap-2",style:{"grid-template-columns":"8rem 1fr"}},[k(I,{to:`/projects/${O.projectId}`,class:"text-sm truncate hover:text-primary",title:O.label||O.name},{default:f(()=>[D(g(O.label||O.name),1)]),_:2},1032,["to","title"]),n("div",is,[(s(!0),v(V,null,L(O.cells,(nt,tt)=>(s(),v("div",{key:tt,class:"h-6 flex-1 rounded-sm min-w-1 bg-gray-100 dark:bg-gray-800",style:ot(b(nt)),title:m(O,tt,nt)},null,12,cs))),128))])]))),128)),n("div",ds,[$[2]||($[2]=n("span",null,null,-1)),n("div",us,[(s(!0),v(V,null,L(t(h),O=>(s(),v("span",{key:O.index,class:"absolute top-0 text-xs text-gray-400 whitespace-nowrap",style:ot({left:`${O.left}%`,transform:O.transform})},g(O.label),5))),128))])]),k(N,{items:r,dense:""})])]),_:1}))]),_:1},8,["subtitle"])}}}),ps=Object.assign(ms,{__name:"PassRateHeatmap"}),_s={key:3,class:"w-full relative"},ys={class:"p-2 text-sm text-gray-900 dark:text-gray-100"},gs={class:"font-semibold mb-1"},hs={class:"text-gray-400 text-xs"},Ct="rgb(59, 130, 246)",fs=B({__name:"CiTimeTrendChart",props:{query:{}},async setup(C){let e,l;const p=C,{data:a,pending:R,error:u,refresh:j}=([e,l]=F(()=>X("ci-time-trend",()=>p.query)),e=await e,l(),e),b=T(()=>a.value?.points.map(o=>({date:new Date(o.date),totalMinutes:o.totalMinutes,runCount:o.runCount}))??[]),m=T(()=>b.value.some(o=>o.runCount>0)),r=o=>o.date,i=o=>o.totalMinutes,E=ft(null),{tooltipData:S,tooltipPos:y,onRenderComplete:h}=jt(E,b,{x:o=>o.date,series:[{y:o=>o.totalMinutes,color:Ct}]}),c=T(()=>{if(!a.value||a.value.deltaPct===null)return null;const o=a.value.deltaPct;return{label:`${o>0?"+":""}${o}% vs previous period`,class:o>25?"text-red-600 dark:text-red-400":o<-10?"text-green-600 dark:text-green-400":"text-gray-500"}}),$=T(()=>{if(!a.value)return;const o=a.value.totalMinutes;return`${o<60?`${Math.round(o)} min`:`${Math.round(o/60*10)/10} h`} across ${a.value.runCount} runs`});return(o,d)=>{const _=G,w=q,I=H,N=Y,M=ut;return s(),x(M,{icon:"i-lucide-timer",title:"CI time",subtitle:t($),help:"analytics.ci-time"},{actions:f(()=>[t(c)?(s(),v("span",{key:0,class:A(["text-xs font-medium tabular-nums",t(c).class])},g(t(c).label),3)):P("",!0)]),default:f(()=>[t(R)?(s(),x(_,{key:0})):t(u)?(s(),x(I,{key:1,text:`Couldn't load CI time: ${("errorMessage"in o?o.errorMessage:t(W))(t(u))}`},{action:f(()=>[k(w,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:d[0]||(d[0]=U=>t(j)())},{default:f(()=>[...d[1]||(d[1]=[D(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):t(m)?(s(),v("div",_s,[k(t(xt),{ref_key:"xyContainerRef",ref:E,data:t(b),height:220,padding:{top:10,right:10,bottom:0,left:0},"on-render-complete":t(h)},{default:f(()=>[k(t(Dt),{x:r,y:i,color:"rgba(59, 130, 246, 0.15)","curve-type":t(yt).MonotoneX},null,8,["curve-type"]),k(t(ge),{x:r,y:i,color:Ct,"curve-type":t(yt).MonotoneX,"line-width":2},null,8,["curve-type"]),k(t(Z),{type:"x","tick-format":U=>new Date(U).toLocaleDateString("en-US",{month:"short",day:"numeric"})},null,8,["tick-format"]),k(t(Z),{type:"y",label:"Minutes","tick-format":U=>U.toString()},null,8,["tick-format"])]),_:1},8,["data","on-render-complete"]),t(S)?(s(),v("div",{key:0,class:"fixed z-50 pointer-events-none bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 max-w-[240px]",style:ot({left:`${t(y).x}px`,top:`${t(y).y}px`})},[n("div",ys,[n("div",gs,g(new Date(t(S).date).toLocaleDateString("en-US",{month:"short",day:"numeric"})),1),n("div",null,g(t(S).totalMinutes)+" minutes",1),n("div",hs,g(t(S).runCount)+" runs",1)])],4)):P("",!0)])):(s(),x(N,{key:2,text:"No runs in this period."}))]),_:1},8,["subtitle"])}}}),bs=Object.assign(fs,{__name:"CiTimeTrendChart"}),xs={key:3,class:"w-full relative"},vs={class:"p-2 text-sm text-gray-900 dark:text-gray-100"},ks={class:"font-semibold mb-1"},$s={key:1,class:"mt-4 flex items-start gap-2 rounded-lg border border-amber-200 bg-amber-50 p-2.5 text-sm dark:border-amber-900/50 dark:bg-amber-950/30"},Ss={class:"text-gray-700 dark:text-gray-300"},Cs={class:"font-semibold"},ws={key:2,class:"mt-4 space-y-1"},Ms={class:"tabular-nums text-gray-500 dark:text-gray-400 shrink-0"},Rs=B({__name:"WastedTimeChart",props:{query:{}},async setup(C){let e,l;const p=C,{data:a,pending:R,error:u,refresh:j}=([e,l]=F(()=>X("wasted-time",()=>p.query)),e=await e,l(),e),b=T(()=>a.value?.points.map(_=>({date:new Date(_.date),waitMinutes:_.waitMinutes,failedExecMinutes:_.failedExecMinutes}))??[]),m=T(()=>b.value.some(_=>_.waitMinutes>0||_.failedExecMinutes>0)),r=_=>_.date,i=["rgb(245, 158, 11)","rgb(239, 68, 68)"],E=ft(null),{tooltipData:S,tooltipPos:y,onRenderComplete:h}=jt(E,b,{x:_=>_.date,series:[{y:_=>_.waitMinutes,color:i[0]},{y:_=>_.failedExecMinutes,color:i[1]}]}),c=[{color:i[0],label:"Wait steps"},{color:i[1],label:"Failed attempts"}],$=T(()=>{if(!a.value)return;const _=a.value.totalWaitMinutes+a.value.totalFailedExecMinutes;return`${_<60?`${Math.round(_)} min`:`${Math.round(_/60*10)/10} h`} of CI time produced no signal`}),o=T(()=>a.value?.timeoutReclaimable??null),d=T(()=>{const _=o.value?.estimatedMinutes??0;return _<60?`${Math.round(_)} min`:`${Math.round(_/60*10)/10} h`});return(_,w)=>{const I=bt,N=G,M=q,U=H,O=Y,nt=it,tt=Q,Nt=ut;return s(),x(Nt,{icon:"i-lucide-hourglass",title:"Wasted CI time",subtitle:t($),help:"analytics.wasted-time"},{legend:f(()=>[k(I,{items:c,dense:""})]),default:f(()=>[t(R)?(s(),x(N,{key:0})):t(u)?(s(),x(U,{key:1,text:`Couldn't load wasted time: ${("errorMessage"in _?_.errorMessage:t(W))(t(u))}`},{action:f(()=>[k(M,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:w[0]||(w[0]=z=>t(j)())},{default:f(()=>[...w[1]||(w[1]=[D(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):t(m)?(s(),v("div",xs,[k(t(xt),{ref_key:"xyContainerRef",ref:E,data:t(b),height:220,padding:{top:10,right:10,bottom:0,left:0},"on-render-complete":t(h)},{default:f(()=>[k(t(Dt),{x:r,y:[z=>z.waitMinutes,z=>z.failedExecMinutes],color:i,"curve-type":t(yt).MonotoneX},null,8,["y","curve-type"]),k(t(Z),{type:"x","tick-format":z=>new Date(z).toLocaleDateString("en-US",{month:"short",day:"numeric"})},null,8,["tick-format"]),k(t(Z),{type:"y",label:"Minutes","tick-format":z=>z.toString()},null,8,["tick-format"])]),_:1},8,["data","on-render-complete"]),t(S)?(s(),v("div",{key:0,class:"fixed z-50 pointer-events-none bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 max-w-[240px]",style:ot({left:`${t(y).x}px`,top:`${t(y).y}px`})},[n("div",vs,[n("div",ks,g(new Date(t(S).date).toLocaleDateString("en-US",{month:"short",day:"numeric"})),1),n("div",null,[w[2]||(w[2]=n("span",{class:"text-amber-500"},"●",-1)),D(" Wait steps: "+g(t(S).waitMinutes)+" min",1)]),n("div",null,[w[3]||(w[3]=n("span",{class:"text-red-500"},"●",-1)),D(" Failed attempts: "+g(t(S).failedExecMinutes)+" min",1)])])],4)):P("",!0),t(o)?(s(),v("div",$s,[k(nt,{name:"i-lucide-scissors",class:"mt-0.5 shrink-0 text-amber-500"}),n("div",Ss,[w[5]||(w[5]=D(" Up to ",-1)),n("span",Cs,"≈"+g(t(d)),1),D(" of this is avoidable — "+g(t(o).oversizedCount)+" oversized "+g(t(o).oversizedCount===1?"timeout":"timeouts")+" and "+g(t(o).staleSlowCount)+" stale ",1),w[6]||(w[6]=n("code",{class:"text-xs"},"test.slow()",-1)),D(" "+g(t(o).staleSlowCount===1?"mark":"marks")+" inflate the failed-attempt time above. ",1),t(o).topProjectId?(s(),x(tt,{key:0,to:`/projects/${t(o).topProjectId}#performance`,class:"text-primary hover:underline"},{default:f(()=>[...w[4]||(w[4]=[D("Review",-1)])]),_:1},8,["to"])):P("",!0)])])):P("",!0),t(a)&&t(a).byProject.length>0?(s(),v("div",ws,[(s(!0),v(V,null,L(t(a).byProject.slice(0,5),z=>(s(),v("div",{key:z.projectId,class:"flex items-center justify-between text-sm"},[k(tt,{to:`/projects/${z.projectId}`,class:"truncate hover:text-primary"},{default:f(()=>[D(g(z.label||z.name),1)]),_:2},1032,["to"]),n("span",Ms,g(Math.round(z.waitMinutes+z.failedExecMinutes))+" min ",1)]))),128))])):P("",!0)])):(s(),x(O,{key:2,text:"No wasted time recorded in this period."}))]),_:1},8,["subtitle"])}}}),Es=Object.assign(Rs,{__name:"WastedTimeChart"}),js={key:3,class:"divide-y divide-gray-100 dark:divide-gray-800"},Ds={class:"flex-1 min-w-0"},Ts={class:"text-sm font-medium truncate"},Vs={class:"text-xs text-gray-500 dark:text-gray-400 truncate"},Is={class:"text-right shrink-0"},Ps=B({__name:"GlobalFlakyLeaderboard",props:{query:{}},async setup(C){let e,l;const p=C,{data:a,pending:R,error:u,refresh:j}=([e,l]=F(()=>X("flaky-leaderboard",()=>p.query)),e=await e,l(),e);function b(r){return r>=60?"text-red-600 dark:text-red-400":r>=30?"text-amber-600 dark:text-amber-400":"text-gray-500"}function m(r){return r.retryPassRuns>0?`flaked ${r.retryPassRuns}/${r.totalRuns} runs`:`${r.alternations} status flips in ${r.totalRuns} runs`}return(r,i)=>{const E=G,S=q,y=H,h=Y,c=Rt,$=Q,o=K;return s(),x(o,{icon:"i-lucide-repeat",title:"Flakiest tests",count:t(a)?.length||void 0,subtitle:"Across all projects, sorted by impact",help:"analytics.flaky-leaderboard"},{default:f(()=>[t(R)?(s(),x(E,{key:0})):t(u)?(s(),x(y,{key:1,text:`Couldn't load flaky tests: ${("errorMessage"in r?r.errorMessage:t(W))(t(u))}`},{action:f(()=>[k(S,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:i[0]||(i[0]=d=>t(j)())},{default:f(()=>[...i[1]||(i[1]=[D(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).length===0?(s(),x(h,{key:2,text:"No flaky tests detected. Nice and stable."})):(s(),v("div",js,[(s(!0),v(V,null,L(t(a),d=>(s(),x($,{key:`${d.projectId}-${d.testCaseId}`,to:`/test-cases/${d.testCaseId}`,class:"flex items-center gap-3 py-2.5 hover:bg-gray-50 dark:hover:bg-gray-800/60 rounded transition-colors"},{default:f(()=>[n("span",{class:A(["tabular-nums font-bold text-sm w-10 text-right shrink-0",b(d.score)])},g(d.score),3),n("div",Ds,[n("p",Ts,g(d.title),1),n("p",Vs,[D(g(d.projectLabel||d.projectName)+" · "+g(m(d))+" ",1),d.lastFlakeAt?(s(),v(V,{key:0},[D(" · last "+g(("formatRelativeTime"in r?r.formatRelativeTime:t(lt))(d.lastFlakeAt)),1)],64)):P("",!0)])]),n("div",Is,[n("p",{class:A(["text-sm tabular-nums",d.wastedCiMinutes>=30?"text-red-600 dark:text-red-400":d.wastedCiMinutes>=5?"text-amber-600 dark:text-amber-400":"text-gray-500"])},g(Math.round(d.wastedCiMinutes))+" min ",3),d.rootCause?(s(),x(c,{key:0,text:d.rootCause,color:"neutral"},null,8,["text"])):P("",!0)])]),_:2},1032,["to"]))),128))]))]),_:1},8,["count"])}}}),Ns=Object.assign(Ps,{__name:"GlobalFlakyLeaderboard"}),As={key:3,class:"space-y-4"},Ls={key:0,class:"flex flex-wrap gap-1.5"},Os={class:"divide-y divide-gray-100 dark:divide-gray-800"},zs={class:"flex-1 min-w-0"},Bs={class:"text-sm font-medium truncate"},Us={class:"text-xs text-gray-500 dark:text-gray-400 truncate"},Fs={class:"text-right text-xs shrink-0"},qs={class:"tabular-nums font-medium"},Ws=B({__name:"ClusterLandscape",props:{query:{}},async setup(C){let e,l;const p=C,{data:a,pending:R,error:u,refresh:j}=([e,l]=F(()=>X("cluster-landscape",()=>p.query)),e=await e,l(),e);function b(m){return m>=30?"text-red-600 dark:text-red-400":m>=14?"text-amber-600 dark:text-amber-400":"text-gray-500"}return(m,r)=>{const i=G,E=q,S=H,y=Y,h=fe,c=he,$=Mt,o=Q,d=K;return s(),x(d,{icon:"i-lucide-layers",title:"Failure clusters",subtitle:"Open root causes across all projects",help:"analytics.cluster-landscape"},{default:f(()=>[t(R)?(s(),x(i,{key:0})):t(u)?(s(),x(S,{key:1,text:`Couldn't load clusters: ${("errorMessage"in m?m.errorMessage:t(W))(t(u))}`},{action:f(()=>[k(E,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:r[0]||(r[0]=_=>t(j)())},{default:f(()=>[...r[1]||(r[1]=[D(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).totalOpen===0&&t(a).resolvedInPeriod===0?(s(),x(y,{key:2,icon:"i-lucide-check-circle",text:"No open failure clusters."})):(s(),v("div",As,[k(c,null,{default:f(()=>[k(h,{label:"Open",value:t(a).totalOpen,"value-class":t(a).totalOpen>0?"text-red-600 dark:text-red-400":""},null,8,["value","value-class"]),k(h,{label:"Resolved this period",value:t(a).resolvedInPeriod},null,8,["value"]),k(h,{label:"Oldest open",value:t(a).clusters.length>0?`${Math.max(...t(a).clusters.map(_=>_.ageDays))} d`:"—",size:"lg"},null,8,["value"])]),_:1}),t(a).byErrorType.length>0?(s(),v("div",Ls,[(s(!0),v(V,null,L(t(a).byErrorType,_=>(s(),x($,{key:_.errorType,color:("clusterErrorTypeColor"in m?m.clusterErrorTypeColor:t(Zt))(_.errorType),variant:"subtle",size:"sm"},{default:f(()=>[D(g(_.errorType)+" · "+g(_.count),1)]),_:2},1032,["color"]))),128))])):P("",!0),n("div",Os,[(s(!0),v(V,null,L(t(a).clusters.slice(0,8),_=>(s(),x(o,{key:_.id,to:`/failure-clusters/${_.id}`,class:"flex items-center gap-3 py-2.5 hover:bg-gray-50 dark:hover:bg-gray-800/60 rounded transition-colors"},{default:f(()=>[n("div",zs,[n("p",Bs,g(_.title||_.signature),1),n("p",Us,[D(g(_.projectLabel||_.projectName)+" ",1),_.errorType?(s(),v(V,{key:0},[D(" · "+g(_.errorType),1)],64)):P("",!0)])]),n("div",Fs,[n("p",qs,g(_.occurrences)+"×",1),n("p",{class:A(["tabular-nums",b(_.ageDays)])},g(_.ageDays)+" d open",3)])]),_:2},1032,["to"]))),128))])]))]),_:1})}}}),Gs=Object.assign(Ws,{__name:"ClusterLandscape"}),Hs={key:3,class:"w-full"},Ys=B({__name:"RegressionVelocityChart",props:{query:{}},async setup(C){let e,l;const p=C,{data:a,pending:R,error:u,refresh:j}=([e,l]=F(()=>X("regression-velocity",()=>p.query)),e=await e,l(),e),b=T(()=>a.value?.points.map(h=>({date:new Date(h.date),regressions:h.regressions,newFlaky:h.newFlaky}))??[]),m=T(()=>b.value.some(h=>h.regressions>0||h.newFlaky>0)),r=h=>h.date,i=["rgb(239, 68, 68)","rgb(147, 51, 234)"],E=[{color:i[0],label:"New regressions"},{color:i[1],label:"Newly flaky"}],S=T(()=>{if(!a.value||a.value.deltaPct===null)return null;const h=a.value.deltaPct;return{label:`${h>0?"+":""}${h}% vs previous period`,class:h>0?"text-red-600 dark:text-red-400":"text-green-600 dark:text-green-400"}}),y=T(()=>{if(a.value)return`${a.value.totalRegressions} new regressions, ${a.value.totalNewFlaky} newly flaky`});return(h,c)=>{const $=bt,o=G,d=q,_=H,w=Y,I=ut;return s(),x(I,{icon:"i-lucide-git-pull-request-arrow",title:"Regression velocity",subtitle:t(y),help:"analytics.regression-velocity"},{legend:f(()=>[k($,{items:E,dense:""})]),actions:f(()=>[t(S)?(s(),v("span",{key:0,class:A(["text-xs font-medium tabular-nums",t(S).class])},g(t(S).label),3)):P("",!0)]),default:f(()=>[t(R)?(s(),x(o,{key:0})):t(u)?(s(),x(_,{key:1,text:`Couldn't load regression velocity: ${("errorMessage"in h?h.errorMessage:t(W))(t(u))}`},{action:f(()=>[k(d,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:c[0]||(c[0]=N=>t(j)())},{default:f(()=>[...c[1]||(c[1]=[D(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):t(m)?(s(),v("div",Hs,[k(t(xt),{data:t(b),height:220,padding:{top:10,right:10,bottom:0,left:0}},{default:f(()=>[k(t(Se),{x:r,y:[N=>N.regressions,N=>N.newFlaky],color:i,"rounded-corners":2},null,8,["y"]),k(t(Z),{type:"x","tick-format":N=>new Date(N).toLocaleDateString("en-US",{month:"short",day:"numeric"})},null,8,["tick-format"]),k(t(Z),{type:"y",label:"Count","tick-format":N=>N.toString()},null,8,["tick-format"])]),_:1},8,["data"])])):(s(),x(w,{key:2,icon:"i-lucide-shield-check",text:"No new regressions in this period."}))]),_:1},8,["subtitle"])}}}),Xs=Object.assign(Ys,{__name:"RegressionVelocityChart"}),Js={class:"w-full text-sm border-separate border-spacing-1"},Qs={class:"pr-2 max-w-[12rem]"},Zs=["title"],Ks=B({__name:"BrowserMatrix",props:{query:{}},async setup(C){let e,l;const p=C,{data:a,pending:R,error:u,refresh:j}=([e,l]=F(()=>X("browser-matrix",()=>p.query)),e=await e,l(),e);function b(m){return m===null?"bg-gray-100 dark:bg-gray-800 text-gray-400":m>=99.5?"bg-green-500/85 text-white":m>=90?"bg-green-500/45":m>=75?"bg-amber-500/50":m>=50?"bg-orange-500/60":"bg-red-500/70 text-white"}return(m,r)=>{const i=G,E=q,S=H,y=Y,h=Q,c=ct,$=K;return s(),x($,{icon:"i-lucide-monitor-smartphone",title:"Browser matrix",help:"analytics.browser-matrix"},{default:f(()=>[t(R)?(s(),x(i,{key:0})):t(u)?(s(),x(S,{key:1,text:`Couldn't load the browser matrix: ${("errorMessage"in m?m.errorMessage:t(W))(t(u))}`},{action:f(()=>[k(E,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:r[0]||(r[0]=o=>t(j)())},{default:f(()=>[...r[1]||(r[1]=[D(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).rows.length===0?(s(),x(y,{key:2,text:"No runs with browser data in this period."})):(s(),x(c,{key:3,"min-width":"30rem"},{default:f(()=>[n("table",Js,[n("thead",null,[n("tr",null,[r[2]||(r[2]=n("th",{class:"text-left text-xs text-gray-500 uppercase tracking-wider font-medium pr-2"},"Project",-1)),(s(!0),v(V,null,L(t(a).browsers,o=>(s(),v("th",{key:o,class:"text-xs text-gray-500 uppercase tracking-wider font-medium px-1 text-center"},g(o),1))),128))])]),n("tbody",null,[(s(!0),v(V,null,L(t(a).rows,o=>(s(),v("tr",{key:o.projectId},[n("td",Qs,[k(h,{to:`/projects/${o.projectId}`,class:"truncate hover:text-primary block",title:o.label||o.name},{default:f(()=>[D(g(o.label||o.name),1)]),_:2},1032,["to","title"])]),(s(!0),v(V,null,L(o.cells,(d,_)=>(s(),v("td",{key:_,class:A(["text-center tabular-nums rounded-md px-2 py-1.5 font-medium",b(d)]),title:`${o.label||o.name} · ${t(a).browsers[_]}: ${d!==null?`${d}% passed`:"no tests"}`},g(d!==null?`${Math.round(d)}%`:"—"),11,Zs))),128))]))),128))])])]),_:1}))]),_:1})}}}),ta=Object.assign(Ks,{__name:"BrowserMatrix"}),ea={class:"md:hidden space-y-3"},sa={class:"flex items-center gap-2 min-w-0"},aa={class:"text-xs truncate"},na={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},ra={key:0,class:"text-red-600 dark:text-red-400 tabular-nums"},oa={class:"hidden md:block"},la={class:"w-full text-sm"},ia={class:"divide-y divide-gray-100 dark:divide-gray-800"},ca={class:"py-2.5 pr-4"},da={class:"flex items-center gap-2 min-w-0"},ua=["title"],ma={class:"py-2.5 pr-4 text-right tabular-nums"},pa={class:"py-2.5 pr-4 text-right tabular-nums text-gray-500"},_a={class:"py-2.5 pr-4 text-right tabular-nums text-gray-500"},ya={class:"py-2.5 text-right tabular-nums"},ga=B({__name:"SlowEndpointsTable",props:{query:{}},async setup(C){let e,l;const p=C,{data:a,pending:R,error:u,refresh:j}=([e,l]=F(()=>X("slow-endpoints",()=>p.query)),e=await e,l(),e);function b(r){return r>=1e3?"text-red-600 dark:text-red-400":r>=500?"text-amber-600 dark:text-amber-400":"text-gray-600 dark:text-gray-300"}function m(r){return{GET:"info",POST:"success",PUT:"warning",PATCH:"warning",DELETE:"error"}[r.toUpperCase()]??"neutral"}return(r,i)=>{const E=G,S=q,y=H,h=Y,c=Mt,$=ct,o=K;return s(),x(o,{icon:"i-lucide-gauge",title:"Slow endpoints",count:t(a)?.endpoints.length||void 0,subtitle:"Backend calls across all projects, slowest first",help:"analytics.slow-endpoints"},{default:f(()=>[t(R)?(s(),x(E,{key:0})):t(u)?(s(),x(y,{key:1,text:`Couldn't load slow endpoints: ${("errorMessage"in r?r.errorMessage:t(W))(t(u))}`},{action:f(()=>[k(S,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:i[0]||(i[0]=d=>t(j)())},{default:f(()=>[...i[1]||(i[1]=[D(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).endpoints.length===0?(s(),x(h,{key:2,icon:"i-lucide-network",text:"No network requests captured in this period."})):(s(),v(V,{key:3},[n("div",ea,[(s(!0),v(V,null,L(t(a).endpoints,d=>(s(),v("div",{key:`${d.method} ${d.route}`,class:"rounded-lg border border-gray-200 dark:border-gray-800 p-3 space-y-1.5"},[n("div",sa,[k(c,{color:m(d.method),variant:"subtle",size:"sm"},{default:f(()=>[D(g(d.method),1)]),_:2},1032,["color"]),n("code",aa,g(d.route),1)]),n("div",na,[n("span",null,[i[2]||(i[2]=D("p90 ",-1)),n("span",{class:A(["tabular-nums font-medium",b(d.p90Ms)])},g(d.p90Ms)+" ms",3)]),n("span",null,g(d.requests)+" reqs · "+g(d.projectCount)+" proj",1),d.errorRate>0?(s(),v("span",ra,g(d.errorRate)+"% err",1)):P("",!0)])]))),128))]),n("div",oa,[k($,{"min-width":"44rem"},{default:f(()=>[n("table",la,[i[3]||(i[3]=n("thead",null,[n("tr",{class:"text-left text-xs text-gray-500 uppercase tracking-wider border-b border-gray-200 dark:border-gray-800"},[n("th",{class:"py-2 pr-4 font-medium"},"Endpoint"),n("th",{class:"py-2 pr-4 font-medium text-right"},"Requests"),n("th",{class:"py-2 pr-4 font-medium text-right"},"p50"),n("th",{class:"py-2 pr-4 font-medium text-right"},"p90"),n("th",{class:"py-2 pr-4 font-medium text-right"},"Max"),n("th",{class:"py-2 pr-4 font-medium text-right"},"Errors"),n("th",{class:"py-2 font-medium text-right"},"Projects")])],-1)),n("tbody",ia,[(s(!0),v(V,null,L(t(a).endpoints,d=>(s(),v("tr",{key:`${d.method} ${d.route}`},[n("td",ca,[n("div",da,[k(c,{color:m(d.method),variant:"subtle",size:"sm"},{default:f(()=>[D(g(d.method),1)]),_:2},1032,["color"]),n("code",{class:"text-xs truncate max-w-[22rem]",title:d.route},g(d.route),9,ua)])]),n("td",ma,g(d.requests),1),n("td",pa,g(d.p50Ms)+" ms",1),n("td",{class:A(["py-2.5 pr-4 text-right tabular-nums font-medium",b(d.p90Ms)])},g(d.p90Ms)+" ms ",3),n("td",_a,g(d.maxMs)+" ms",1),n("td",{class:A(["py-2.5 pr-4 text-right tabular-nums",d.errorRate>0?"text-red-600 dark:text-red-400":"text-gray-400"])},g(d.errorRate)+"% ",3),n("td",ya,g(d.projectCount),1)]))),128))])])]),_:1})])],64))]),_:1},8,["count"])}}}),ha=Object.assign(ga,{__name:"SlowEndpointsTable"}),fa={class:"space-y-6"},ba={class:"grid grid-cols-1 xl:grid-cols-2 gap-6 items-start"},an=B({__name:"analytics",async setup(C){let e,l;Gt({title:"Analytics - Piwi Dashboard"});const{state:p,scopeQuery:a}=Me(),{data:R}=([e,l]=F(()=>_t("/api/projects/menu",{lazy:!0,server:!1,default:()=>[]},"$jZuDAh0IrH")),e=await e,l(),e),{data:u}=([e,l]=F(()=>_t("/api/test-runs/recent",{lazy:!0,server:!1,default:()=>[]},"$lmj5ErCURQ")),e=await e,l(),e),j=T(()=>{const E=new Set;for(const S of u.value??[])S.environment&&E.add(S.environment);return[...E].sort()}),b=T(()=>{const E=u.value??[];return E.length===0?null:Math.max(...E.map(S=>new Date(S.startTime).getTime()))}),m=T(()=>{if(b.value===null||p.value.days>=ht)return!1;const E=Date.now()-p.value.days*24*60*60*1e3;return b.value<E});function r(){p.value={...p.value,days:ht}}const i={insights:Be,portfolio:os,"pass-rate-heatmap":ps,"ci-time-trend":bs,"wasted-time":Es,"flaky-leaderboard":Ns,"cluster-landscape":Gs,"regression-velocity":Xs,"browser-matrix":ta,"slow-endpoints":ha};return(E,S)=>{const y=At,h=Lt,c=zt,$=Pe,o=Jt,d=Qt,_=Ot;return s(),x(_,{id:"analytics"},{header:f(()=>[k(c,null,{leading:f(()=>[k(y),k(h,{items:[{label:"Analytics",icon:"i-lucide-chart-line",to:"/analytics"}]})]),_:1})]),body:f(()=>[n("div",fa,[k(o,null,{default:f(()=>[k($,{modelValue:t(p),"onUpdate:modelValue":S[0]||(S[0]=w=>at(p)?p.value=w:null),"available-projects":t(R),"available-environments":t(j)},null,8,["modelValue","available-projects","available-environments"])]),_:1}),t(m)?(s(),x(d,{key:0,icon:"i-lucide-calendar-off",color:"warning",variant:"subtle",title:`No test runs in the last ${t(p).days} days`,description:`Your most recent run was ${("formatRelativeTime"in E?E.formatRelativeTime:t(lt))(t(b))} — the widgets below look empty because the selected range excludes it.`,actions:[{label:"Show all time",color:"warning",variant:"solid",size:"xs",onClick:r}]},null,8,["title","description","actions"])):P("",!0),n("div",ba,[(s(!0),v(V,null,L(t(Pt),w=>(s(),v("div",{key:w.id,class:A(w.size==="full"?"xl:col-span-2":"")},[(s(),x(wt(i[w.id]),{query:t(a)},null,8,["query"]))],2))),128))])])]),_:1})}}});export{an as default};
@@ -1 +1 @@
1
- import{d as l,o,f as c,g as i,j as m,v as u,k as t,i as d,t as _,q as g,h as k,s as f}from"./D3SYPlEB.js";import{g as p}from"./D7W_4Sqc.js";const y={class:"truncate"},B=l({__name:"MarkerBadge",props:{marker:{},size:{default:"sm"},categoryOnly:{type:Boolean,default:!1}},setup(e){const n=e,a=k(()=>p(n.marker.category));return(h,z)=>{const s=u,r=f;return o(),c(r,{color:t(a).color,size:e.size,variant:"subtle",class:"gap-1 items-center max-w-full"},{default:i(()=>[m(s,{name:t(a).icon,class:"size-3 shrink-0"},null,8,["name"]),d("span",y,_(e.categoryOnly?t(a).label:e.marker.label),1),e.marker.source==="auto"?(o(),c(s,{key:0,name:"i-lucide-sparkles",class:"size-3 shrink-0 opacity-70",title:"Automatically detected"})):g("",!0)]),_:1},8,["color","size"])}}}),C=Object.assign(B,{__name:"MarkerBadge"});export{C as _};
1
+ import{d as l,o,f as c,g as i,j as m,p as u,k as t,i as d,t as _,v as g,h as k,s as f}from"./NQikbhmK.js";import{g as p}from"./D7W_4Sqc.js";const y={class:"truncate"},B=l({__name:"MarkerBadge",props:{marker:{},size:{default:"sm"},categoryOnly:{type:Boolean,default:!1}},setup(e){const n=e,a=k(()=>p(n.marker.category));return(h,z)=>{const s=u,r=f;return o(),c(r,{color:t(a).color,size:e.size,variant:"subtle",class:"gap-1 items-center max-w-full"},{default:i(()=>[m(s,{name:t(a).icon,class:"size-3 shrink-0"},null,8,["name"]),d("span",y,_(e.categoryOnly?t(a).label:e.marker.label),1),e.marker.source==="auto"?(o(),c(s,{key:0,name:"i-lucide-sparkles",class:"size-3 shrink-0 opacity-70",title:"Automatically detected"})):g("",!0)]),_:1},8,["color","size"])}}}),C=Object.assign(B,{__name:"MarkerBadge"});export{C as _};
@@ -0,0 +1,44 @@
1
+ import{_ as Re,a as we}from"./279D2RYp.js";import{d as X,o as n,c as d,f,g as u,i as e,j as l,p as Z,q as j,t as m,l as se,k as s,v as _,m as c,h as x,_ as ee,D as oe,F as E,y as H,r as Q,B as $e,s as Ce,A as Te,e as Fe,ac as je}from"./NQikbhmK.js";import{_ as Se}from"./DiZyJYez.js";import{_ as Pe}from"./BMvCSA6h.js";import{_ as ze,a as Ie}from"./CHEFCN8Q.js";import{_ as Ue}from"./ybDYeNxd.js";import{_ as Ve}from"./Cdff9XNh.js";import{_ as Ae}from"./D0HNloZ9.js";import{_ as Ne}from"./DcmZRa_F.js";import{_ as Ee}from"./DHDtnj7p.js";import{_ as ie}from"./tvgqrYDd.js";import{_ as le}from"./CV9-fTmY.js";import{_ as De}from"./C9_jrmk9.js";import{_ as Oe}from"./DLSrtpsA.js";import{_ as ue}from"./DprVVyUQ.js";import{f as ne,F as G,g as Be}from"./CDk0q2hV.js";import{a as Le,d as We,_ as He}from"./C7P1UCO2.js";import{_ as Me}from"./rWNTSFD6.js";import{_ as de}from"./eptP4pGv.js";import{u as Ge}from"./CHNwfU1y.js";import{u as re}from"./CpjgB2aY.js";import{u as Ke}from"./BCMuIgP5.js";import{u as Ye}from"./YVN7WG7q.js";import"./BeLWlVK0.js";import"./g26aVPxc.js";import"./BYDaY0Z7.js";import"./FUXhyidq.js";import"./DEFEpYzn.js";import"./CNFYDQmj.js";import"./IvQlbZk6.js";import"./CYsTqbBS.js";import"./BjaRappk.js";import"./Bn0YQDyy.js";const qe={class:"flex items-center gap-3 flex-wrap"},Je={class:"flex items-center gap-1.5"},Qe={key:0,class:"text-gray-500"},Xe={key:1},Ze={key:2},et={class:"flex items-center gap-1.5 cursor-pointer select-none text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 transition-colors"},tt=X({__name:"HomeFilters",props:{modelValue:{},availableEnvironments:{}},emits:["update:modelValue"],setup(D,{emit:w}){const $=D,k=w,z=x({get:()=>$.modelValue.environments,set:T=>k("update:modelValue",{...$.modelValue,environments:T})}),C=x({get:()=>$.modelValue.fullRunsOnly,set:T=>k("update:modelValue",{...$.modelValue,fullRunsOnly:T})}),N=x(()=>$.modelValue.environments.length>0||!$.modelValue.fullRunsOnly);function U(){k("update:modelValue",{environments:[],fullRunsOnly:!0})}return(T,h)=>{const O=Z,o=Se,y=Pe,t=ee;return n(),d("div",qe,[D.availableEnvironments.length>0?(n(),f(o,{key:0,modelValue:s(z),"onUpdate:modelValue":h[0]||(h[0]=p=>se(z)?z.value=p:null),items:D.availableEnvironments,multiple:"",placeholder:"All environments",size:"sm",class:"min-w-[160px]"},{default:u(({modelValue:p})=>[e("div",Je,[l(O,{name:"i-lucide-server",class:j(["size-3.5 shrink-0",p.length?"text-primary":"text-gray-400"])},null,8,["class"]),p.length?p.length===1?(n(),d("span",Xe,m(p[0]),1)):(n(),d("span",Ze,m(p.length)+" environments",1)):(n(),d("span",Qe,"All environments"))])]),_:1},8,["modelValue","items"])):_("",!0),e("label",et,[l(y,{modelValue:s(C),"onUpdate:modelValue":h[1]||(h[1]=p=>se(C)?C.value=p:null),size:"sm"},null,8,["modelValue"]),h[2]||(h[2]=c(" Full runs only ",-1))]),s(N)?(n(),f(t,{key:1,variant:"ghost",size:"sm",color:"neutral",icon:"i-lucide-x",onClick:U},{default:u(()=>[...h[3]||(h[3]=[c(" Reset ",-1)])]),_:1})):_("",!0)])}}}),st=Object.assign(tt,{__name:"HomeFilters"}),nt={class:"hidden md:block overflow-x-auto -mx-4 px-4 sm:mx-0 sm:px-0"},rt={key:0,class:"flex flex-wrap gap-1 mt-0.5"},at={class:"w-40"},ot={key:1,class:"text-gray-400 text-sm"},it={class:"text-xs text-gray-500 dark:text-gray-400"},lt={key:1,class:"text-gray-400 text-sm"},ut={key:0,class:"tabular-nums text-sm text-gray-600 dark:text-gray-400"},dt={key:1,class:"text-gray-400"},ct={class:"space-y-2 md:hidden"},mt={class:"flex items-start justify-between gap-2"},pt={key:0,class:"flex flex-wrap gap-1"},gt={class:"flex items-center justify-between gap-2 text-xs"},ft={class:"text-gray-500 dark:text-gray-400 truncate"},yt={key:1,class:"text-gray-400"},_t={key:2,class:"shrink-0 tabular-nums text-gray-500 dark:text-gray-400"},xt=X({__name:"ProjectTrendTable",props:{projects:{},limit:{default:10}},setup(D){const w=D,$={failing:0,flaky:1,passing:2,unknown:3},k=Q(!1),z=x(()=>w.projects.length>w.limit),C=x(()=>{const o=[...w.projects].sort((y,t)=>{const p=$[y.tendency]-$[t.tendency];if(p!==0)return p;const I=y.latestFullRun?new Date(y.latestFullRun.startTime).getTime():0;return(t.latestFullRun?new Date(t.latestFullRun.startTime).getTime():0)-I});return k.value?o:o.slice(0,w.limit)});function N(o){return o>=90?"text-green-600 dark:text-green-400":o>=50?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"}function U(o){switch(o){case"failing":return"text-red-700 dark:text-red-400 bg-red-50 dark:bg-red-900/20 border-red-200 dark:border-red-800";case"flaky":return"text-amber-700 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/20 border-amber-200 dark:border-amber-800";case"passing":return"text-green-700 dark:text-green-400 bg-green-50 dark:bg-green-900/20 border-green-200 dark:border-green-800";default:return"text-gray-500 dark:text-gray-400 bg-gray-50 dark:bg-gray-800 border-gray-200 dark:border-gray-700"}}function T(o){return o==="unknown"?"Unknown":o.charAt(0).toUpperCase()+o.slice(1)}function h(o){switch(o){case"failing":return"i-lucide-trending-down";case"flaky":return"i-lucide-shuffle";case"passing":return"i-lucide-trending-up";default:return"i-lucide-minus"}}const O=[{accessorKey:"name",header:"Project"},{id:"recentRuns",header:"Last 20 runs"},{accessorKey:"tendency",header:"Tendency"},{id:"passRate",header:"Pass rate"},{id:"latestRun",header:"Latest run"},{id:"tests",header:"Tests"}];return(o,y)=>{const t=ee,p=oe,I=Ne,v=Ee,V=Z,F=ie,A=le,K=De,b=Oe,B=ue;return n(),f(B,{icon:"i-lucide-layout-dashboard",title:"Project health",help:"home.project-health"},{actions:u(()=>[s(z)&&!s(k)?(n(),f(t,{key:0,variant:"ghost",size:"sm","trailing-icon":"i-lucide-chevron-down",onClick:y[0]||(y[0]=r=>k.value=!0)},{default:u(()=>[c(" Show all "+m(w.projects.length),1)]),_:1})):s(k)?(n(),f(t,{key:1,variant:"ghost",size:"sm","trailing-icon":"i-lucide-chevron-up",onClick:y[1]||(y[1]=r=>k.value=!1)},{default:u(()=>[...y[2]||(y[2]=[c(" Show less ",-1)])]),_:1})):_("",!0),l(t,{to:"/projects",variant:"outline",size:"sm"},{default:u(()=>[...y[3]||(y[3]=[c("View all",-1)])]),_:1})]),default:u(()=>[e("div",nt,[l(K,{data:s(C),columns:O,ui:{base:"min-w-[700px]",td:"py-3",th:"py-3 text-xs uppercase tracking-wide"}},{"name-cell":u(({row:r})=>[l(p,{to:`/projects/${r.original.id}`,class:"font-medium text-primary hover:underline truncate block max-w-[200px]"},{default:u(()=>[c(m(r.original.label||r.original.name),1)]),_:2},1032,["to"]),r.original.tags.length>0?(n(),d("div",rt,[(n(!0),d(E,null,H(r.original.tags,S=>(n(),f(I,{key:S.id,text:S.text,color:S.color},null,8,["text","color"]))),128))])):_("",!0)]),"recentRuns-cell":u(({row:r})=>[e("div",at,[l(v,{runs:r.original.recentRuns,height:28},null,8,["runs"])])]),"tendency-cell":u(({row:r})=>[e("span",{class:j(["inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-xs font-medium border whitespace-nowrap",U(r.original.tendency)])},[l(V,{name:h(r.original.tendency),class:"size-3 shrink-0"},null,8,["name"]),c(" "+m(T(r.original.tendency)),1)],2)]),"passRate-cell":u(({row:r})=>[r.original.latestFullRun?(n(),d("span",{key:0,class:j(["font-semibold tabular-nums text-sm",N(("passRate"in o?o.passRate:s(G))(r.original.latestFullRun))])},m(("passRate"in o?o.passRate:s(G))(r.original.latestFullRun))+"% ",3)):(n(),d("span",ot,"—"))]),"latestRun-cell":u(({row:r})=>[r.original.latestFullRun?(n(),f(p,{key:0,to:`/test-runs/${r.original.latestFullRun.id}`,class:"flex items-center gap-2 min-w-[140px] hover:opacity-80 transition-opacity"},{default:u(()=>[l(F,{status:r.original.latestFullRun.status},null,8,["status"]),e("div",it,[e("div",null,m(("formatRelativeTime"in o?o.formatRelativeTime:s(ne))(r.original.latestFullRun.startTime)),1),r.original.latestFullRun.duration?(n(),f(A,{key:0,ms:r.original.latestFullRun.duration},null,8,["ms"])):_("",!0)])]),_:2},1032,["to"])):(n(),d("span",lt,"No full runs"))]),"tests-cell":u(({row:r})=>[r.original.latestFullRun?(n(),d("span",ut,m(r.original.latestFullRun.passedTests)+"/"+m(r.original.latestFullRun.totalTests),1)):(n(),d("span",dt,"—"))]),_:1},8,["data"])]),e("div",ct,[(n(!0),d(E,null,H(s(C),r=>(n(),d("div",{key:r.id,class:"rounded-lg border border-default p-3 space-y-2"},[e("div",mt,[l(p,{to:`/projects/${r.id}`,class:"font-medium text-primary hover:underline truncate"},{default:u(()=>[c(m(r.label||r.name),1)]),_:2},1032,["to"]),e("span",{class:j(["inline-flex shrink-0 items-center gap-1 rounded border px-1.5 py-0.5 text-xs font-medium whitespace-nowrap",U(r.tendency)])},[l(V,{name:h(r.tendency),class:"size-3 shrink-0"},null,8,["name"]),c(" "+m(T(r.tendency)),1)],2)]),r.tags.length>0?(n(),d("div",pt,[(n(!0),d(E,null,H(r.tags,S=>(n(),f(I,{key:S.id,text:S.text,color:S.color},null,8,["text","color"]))),128))])):_("",!0),l(v,{runs:r.recentRuns,height:24},null,8,["runs"]),e("div",gt,[r.latestFullRun?(n(),f(p,{key:0,to:`/test-runs/${r.latestFullRun.id}`,class:"flex items-center gap-1.5 min-w-0 hover:opacity-80"},{default:u(()=>[l(F,{status:r.latestFullRun.status},null,8,["status"]),e("span",ft,m(("formatRelativeTime"in o?o.formatRelativeTime:s(ne))(r.latestFullRun.startTime)),1)]),_:2},1032,["to"])):(n(),d("span",yt,"No full runs")),r.latestFullRun?(n(),d("span",_t,[e("span",{class:j(["font-semibold",N(("passRate"in o?o.passRate:s(G))(r.latestFullRun))])},m(("passRate"in o?o.passRate:s(G))(r.latestFullRun))+"% ",3),c(" · "+m(r.latestFullRun.passedTests)+"/"+m(r.latestFullRun.totalTests),1)])):_("",!0)])]))),128))]),s(C).length===0?(n(),f(b,{key:0,text:"No projects yet",padded:!1,class:"py-8"})):_("",!0)]),_:1})}}}),ht=Object.assign(xt,{__name:"ProjectTrendTable"}),vt={class:"flex items-center gap-3"},bt={class:"p-2 bg-primary/10 rounded-lg shrink-0"},kt={class:"text-xl font-semibold inline-flex items-center gap-1"},Rt={class:"text-sm text-gray-500 dark:text-gray-400"},wt={class:"flex flex-col items-center shrink-0"},$t={key:1},Ct={key:0,class:"w-px flex-1 mt-2 min-h-6 bg-gray-200 dark:bg-gray-700"},Tt={class:"flex-1 pb-6"},Ft={class:"flex items-center gap-2 mb-1"},jt={class:"font-medium"},St={class:"text-sm text-gray-600 dark:text-gray-400 mb-3"},Pt={class:"border-t border-gray-200 dark:border-gray-700 pt-4 mt-2"},zt={key:0,class:"mt-4 space-y-6"},It={class:"text-sm text-gray-600 dark:text-gray-400 mb-3"},Ut={class:"flex items-center justify-between text-sm text-gray-500 dark:text-gray-400"},Vt=`// tests/fixtures.ts
2
+ import { test as base, expect } from '@playwright/test'
3
+ import { piwiFixtures } from '@piwitests/reporter'
4
+
5
+ export const test = base.extend(piwiFixtures)
6
+ export { expect }`,At=`// your test file
7
+ import { test, expect } from './fixtures'
8
+
9
+ test('homepage loads', async ({ page }) => {
10
+ await page.goto('/')
11
+ // network requests, web vitals, console errors, and ARIA snapshots
12
+ // are captured automatically and appear in the dashboard
13
+ })`,Nt=`// tests/fixtures.ts
14
+ import { test as base } from '@playwright/test'
15
+ import { extendPiwiFixtures } from '@piwitests/reporter'
16
+
17
+ export const test = extendPiwiFixtures(base)
18
+ export { expect } from '@playwright/test'`,Et=X({__name:"GetStartedWizard",setup(D){const w=Te(),$=x(()=>!!w.public.authEnabled),k=Ge(),z=Q("http://localhost:3000");$e(()=>{z.value=window.location.origin});function C(y){const t=["projectName: 'my-project',"];return k||(t.unshift(`serverUrl: '${z.value}',`),$.value&&t.push("apiKey: process.env.PIWI_API_KEY,")),t.map(p=>`${y}${p}`).join(`
19
+ `)}const N=x(()=>`import { defineConfig } from '@playwright/test'
20
+
21
+ export default defineConfig({
22
+ reporter: [
23
+ ['list'],
24
+ ['@piwitests/reporter', {
25
+ ${C(" ")}
26
+ }],
27
+ ],
28
+ use: {
29
+ trace: 'retain-on-failure',
30
+ },
31
+ })`),U=x(()=>`import { defineConfig } from '@playwright/test'
32
+ import PiwiDashboard from '@piwitests/reporter'
33
+
34
+ export default PiwiDashboard.wrapConfig(
35
+ defineConfig({
36
+ // your existing config
37
+ use: {
38
+ trace: 'retain-on-failure',
39
+ },
40
+ }),
41
+ {
42
+ ${C(" ")}
43
+ },
44
+ )`),T=x(()=>{const y=[{title:"Start the dashboard",description:"You're already here — the dashboard is running.",done:!0},{title:"Install the reporter",description:"Add the Piwi reporter to your Playwright project.",code:"npm install --save-dev @piwitests/reporter",lang:"bash"}];return $.value&&y.push({title:"Create an API key",description:"Authentication is enabled on this instance, so the reporter needs a key to submit results. Create one, then set it as PIWI_API_KEY in your CI secrets (used by the snippet below).",action:"create-api-key"}),y.push({title:"Configure Playwright",description:k?"Add the reporter to your playwright.config.ts. While this app is running it needs no URL or token — the reporter finds it automatically.":"Add the reporter to your playwright.config.ts.",code:N.value,lang:"typescript"},{title:"Run your tests",description:"Results appear in the dashboard automatically. The project is created on first submit.",code:"npx playwright test",lang:"bash"}),y.map((t,p)=>({id:p+1,...t}))}),h=["zero","one","two","three","four","five","six"],O=x(()=>h[T.value.length]??String(T.value.length)),o=Q(!1);return(y,t)=>{const p=Z,I=He,v=Ce,V=ee,F=Me,A=Le,K=de;return n(),f(K,null,{header:u(()=>[e("div",vt,[e("div",bt,[l(p,{name:"i-lucide-rocket",class:"size-5 text-primary"})]),e("div",null,[e("h2",kt,[t[1]||(t[1]=c(" Get started in 60 seconds ",-1)),l(I,{topic:"home.get-started"})]),e("p",Rt,"Send your first test run in "+m(s(O))+" steps",1)])])]),footer:u(()=>[e("div",Ut,[e("span",null,[t[18]||(t[18]=c("Need more options? See the ",-1)),l(A,{to:"reporter","no-icon":"",class:"text-primary hover:underline"},{default:u(()=>[...t[17]||(t[17]=[c("full reporter docs",-1)])]),_:1}),t[19]||(t[19]=c(".",-1))]),l(V,{to:s(We)("demo/"),target:"_blank",variant:"ghost",size:"sm",color:"neutral","trailing-icon":"i-lucide-external-link"},{default:u(()=>[...t[20]||(t[20]=[c(" View demo with sample data ",-1)])]),_:1},8,["to"])])]),default:u(()=>[e("div",null,[(n(!0),d(E,null,H(s(T),(b,B)=>(n(),d("div",{key:b.id,class:"flex gap-4"},[e("div",wt,[e("div",{class:j(["flex size-8 items-center justify-center rounded-full text-sm font-semibold",b.done?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":"bg-primary/10 text-primary"])},[b.done?(n(),f(p,{key:0,name:"i-lucide-check",class:"size-4"})):(n(),d("span",$t,m(b.id),1))],2),B<s(T).length-1?(n(),d("div",Ct)):_("",!0)]),e("div",Tt,[e("div",Ft,[e("h3",jt,m(b.title),1),b.done?(n(),f(v,{key:0,color:"success",variant:"subtle",size:"xs"},{default:u(()=>[...t[2]||(t[2]=[c("Done",-1)])]),_:1})):_("",!0)]),e("p",St,m(b.description),1),b.action==="create-api-key"?(n(),f(V,{key:0,to:"/settings/users",icon:"i-lucide-key-round",size:"sm",variant:"soft"},{default:u(()=>[...t[3]||(t[3]=[c(" Create an API key ",-1)])]),_:1})):_("",!0),b.code?(n(),f(F,{key:1,code:b.code,lang:b.lang},null,8,["code","lang"])):_("",!0)])]))),128)),e("div",Pt,[e("button",{class:"flex items-center gap-2 text-sm font-medium text-gray-600 dark:text-gray-300 hover:text-primary dark:hover:text-primary transition-colors w-full text-left",onClick:t[0]||(t[0]=b=>o.value=!s(o))},[l(p,{name:"i-lucide-chevron-right",class:j(["size-4 transition-transform duration-200",s(o)?"rotate-90":""])},null,8,["class"]),t[4]||(t[4]=c(" Go further — simpler config & capture fixtures ",-1))]),s(o)?(n(),d("div",zt,[e("div",null,[t[5]||(t[5]=e("h4",{class:"font-medium text-sm mb-1"},[c(" Simpler config with "),e("code",{class:"text-primary text-xs"},"wrapConfig")],-1)),t[6]||(t[6]=e("p",{class:"text-sm text-gray-600 dark:text-gray-400 mb-3"},[c(" Instead of manually adding the reporter array entry, "),e("code",{class:"text-xs bg-gray-100 dark:bg-gray-800 px-1 py-0.5 rounded"},"wrapConfig"),c(" auto-injects the reporter and chains the global setup in one call. It also registers the run on the dashboard "),e("em",null,"before"),c(" your "),e("code",{class:"text-xs bg-gray-100 dark:bg-gray-800 px-1 py-0.5 rounded"},"globalSetup"),c(" runs, so the dashboard shows an initializing state during setup. ")],-1)),l(F,{code:s(U),lang:"typescript"},null,8,["code"])]),e("div",null,[t[14]||(t[14]=e("h4",{class:"font-medium text-sm mb-1"},[c(" Capture fixtures — network, Web Vitals, console & locator healing with "),e("code",{class:"text-primary text-xs"},"piwiFixtures")],-1)),e("p",It,[t[8]||(t[8]=c(" Extend your Playwright ",-1)),t[9]||(t[9]=e("code",{class:"text-xs bg-gray-100 dark:bg-gray-800 px-1 py-0.5 rounded"},"test",-1)),t[10]||(t[10]=c(" with ",-1)),t[11]||(t[11]=e("code",{class:"text-xs bg-gray-100 dark:bg-gray-800 px-1 py-0.5 rounded"},"piwiFixtures",-1)),t[12]||(t[12]=c(" to automatically capture network timing, browser Web Vitals, console errors, ARIA snapshots on failure, and the locator snapshots that power locator healing. See the ",-1)),l(A,{to:"capture-fixtures","no-icon":"",class:"text-primary hover:underline"},{default:u(()=>[...t[7]||(t[7]=[c("capture fixtures guide",-1)])]),_:1}),t[13]||(t[13]=c(". ",-1))]),t[15]||(t[15]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-gray-400 dark:text-gray-500 mb-2"}," Option A — extend your existing fixtures ",-1)),l(F,{code:Vt,lang:"typescript",class:"mb-3"}),l(F,{code:At,lang:"typescript",class:"mb-4"}),t[16]||(t[16]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-gray-400 dark:text-gray-500 mb-2"}," Option B — one-line extend ",-1)),l(F,{code:Nt,lang:"typescript"})])])):_("",!0)])])]),_:1})}}}),Dt=Object.assign(Et,{__name:"GetStartedWizard"}),Ot={key:0,class:"p-6"},Bt={key:1,class:"p-6 space-y-8","aria-busy":"true"},Lt={class:"grid grid-cols-1 xl:grid-cols-3 gap-6 items-start"},Wt={class:"xl:col-span-2 space-y-3"},Ht={class:"space-y-3"},Mt={key:2,class:"p-6 space-y-8"},Gt={key:1,class:"flex flex-wrap items-center gap-x-8 gap-y-3 text-sm border border-gray-200 dark:border-gray-700 rounded-xl px-6 py-4 bg-gray-50 dark:bg-gray-900/50"},Kt={class:"flex items-center gap-1.5"},Yt={class:"font-semibold tabular-nums"},qt={class:"flex items-center gap-1.5"},Jt={class:"flex items-center gap-1.5"},Qt={key:0,class:"flex items-center gap-1.5"},Xt={class:"font-semibold tabular-nums"},Zt={class:"flex items-center gap-1.5"},es={class:"font-semibold tabular-nums"},ts={key:2,class:"grid grid-cols-1 xl:grid-cols-3 gap-6 items-start"},ss={class:"xl:col-span-2"},ns={class:"divide-y divide-gray-100 dark:divide-gray-800 text-sm"},rs={class:"flex-1 min-w-0"},as={class:"font-medium truncate"},os={class:"text-xs text-gray-400"},is={class:"text-right tabular-nums shrink-0"},ls={key:3,class:"text-center py-12 text-gray-500 dark:text-gray-400"},us={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4"},ds={class:"flex flex-col gap-3 h-full"},cs={class:"p-2 bg-primary/10 rounded-lg w-fit"},ms={class:"text-xs font-semibold uppercase tracking-wide text-primary mb-1"},ps={class:"font-semibold mb-1"},gs={class:"text-sm text-gray-600 dark:text-gray-400"},ae=6,Ys=X({__name:"index",setup(D){Fe({title:"Piwi Dashboard"});const{data:w,error:$,refresh:k,status:z}=re("/api/projects/overview",{lazy:!0,default:()=>[]},"$cnA6-rHww6"),{data:C,error:N,refresh:U}=re("/api/test-runs/recent",{lazy:!0},"$LEgADC56ri");Ke(()=>Promise.all([k(),U()]));const T=x(()=>z.value==="pending"&&!w.value?.length),h=x(()=>$.value||N.value);function O(){k(),U()}const o=Ye("piwi-home-filters",{default:()=>({environments:[],fullRunsOnly:!0}),encode:i=>JSON.stringify(i),decode:i=>{try{return i?JSON.parse(i):{environments:[],fullRunsOnly:!0}}catch{return{environments:[],fullRunsOnly:!0}}}}),y=x(()=>{const i=new Set;for(const a of C.value??[])a.environment&&i.add(a.environment);for(const a of w.value??[])for(const R of a.recentRuns)R.environment&&i.add(R.environment);return[...i].sort()});function t(i){return o.value.environments.length===0?!0:!!i&&o.value.environments.includes(i)}const p=x(()=>{let i=C.value??[];return o.value.fullRunsOnly&&(i=i.filter(a=>a.isFullRun)),o.value.environments.length>0&&(i=i.filter(a=>t(a.environment))),i}),I=x(()=>{let i=w.value??[];return o.value.environments.length>0&&(i=i.map(a=>({...a,recentRuns:a.recentRuns.filter(R=>t(R.environment))})).filter(a=>a.recentRuns.length>0)),i}),v=x(()=>{const i=I.value,a=i.length,R=i.filter(P=>P.tendency==="failing").length,M=i.filter(P=>P.tendency==="flaky").length;let L=0,Y=0;for(const P of i)P.latestFullRun&&(L+=P.latestFullRun.passedTests,Y+=P.latestFullRun.totalTests);const q=Y>0?Math.round(L/Y*100):null,te=Date.now()-1440*60*1e3,W=p.value.filter(P=>new Date(P.startTime).getTime()>te).length;return{totalProjects:a,failingNow:R,flakyNow:M,avgPassRate:q,runs24h:W}}),V=new Set(["running","initialising","finalizing"]),F=Q(!1),A=x(()=>[...p.value].sort((a,R)=>{const M=V.has(a.status)?0:1,L=V.has(R.status)?0:1;return M!==L?M-L:new Date(R.startTime).getTime()-new Date(a.startTime).getTime()})),K=x(()=>F.value?A.value:A.value.slice(0,ae)),b=x(()=>A.value.length>ae),B=x(()=>p.value.length>0),r=x(()=>(w.value?.length??0)>0),S=x(()=>o.value.fullRunsOnly?(C.value??[]).filter(R=>t(R.environment)).filter(R=>!R.isFullRun).length:0);function ce(){o.value={...o.value,fullRunsOnly:!1}}function me(i){const a=G(i);return a>=90?"text-green-600 dark:text-green-400":a>=50?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"}function pe(i){return V.has(i)?"border-l-blue-400":i==="passed"?"border-l-green-500":i==="failed"||i==="timedout"||i==="interrupted"?"border-l-red-500":"border-l-gray-300 dark:border-l-gray-600"}const ge=[{icon:"i-lucide-radio",tagline:"Watch your CI run live",title:"Live streaming",description:"Follow test execution in real time. Investigate failures while the suite is still running — no waiting for the CI job to finish."},{icon:"i-lucide-layers",tagline:"10 failures, 2 root causes",title:"Failure clustering",description:"Tests sharing the same error are grouped automatically. Triage one cluster instead of scrolling through unrelated failures."},{icon:"i-lucide-brain-circuit",tagline:"Diagnosis grounded in your code",title:"AI diagnosis",description:"AI analyzes failure clusters using your actual SCM diff, trace files, and run history — not a generic prompt."},{icon:"i-lucide-archive",tagline:"Every run, forever",title:"Permanent test intelligence",description:"Test results, traces, and HTML reports stored permanently. Compare runs, track flakiness trends, and never lose a CI result again."}];return(i,a)=>{const R=Re,M=we,L=st,Y=Ie,q=ee,te=Ue,W=Ve,P=Ae,J=Z,fe=ht,ye=ie,_e=le,xe=oe,he=ue,ve=Dt,be=de,ke=ze;return n(),f(ke,{id:"home"},{header:u(()=>[l(Y,null,je({leading:u(()=>[l(R),l(M,{items:[{label:"Home",icon:"i-lucide-house",to:"/"}]})]),_:2},[s(r)?{name:"trailing",fn:u(()=>[l(L,{modelValue:s(o),"onUpdate:modelValue":a[0]||(a[0]=g=>se(o)?o.value=g:null),"available-environments":s(y)},null,8,["modelValue","available-environments"])]),key:"0"}:void 0]),1024)]),body:u(()=>[s(h)?(n(),d("div",Ot,[l(te,{text:`Couldn't load the dashboard: ${s(Be)(s(h))}`},{action:u(()=>[l(q,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:O},{default:u(()=>[...a[3]||(a[3]=[c(" Retry ",-1)])]),_:1})]),_:1},8,["text"])])):s(T)?(n(),d("div",Bt,[a[4]||(a[4]=e("span",{class:"sr-only",role:"status"},"Loading dashboard…",-1)),l(W,{class:"h-14 w-full rounded-xl"}),e("div",Lt,[e("div",Wt,[l(W,{class:"h-7 w-40"}),l(W,{class:"h-72 w-full rounded-lg"})]),e("div",Ht,[l(W,{class:"h-7 w-32"}),(n(),d(E,null,H(5,g=>l(W,{key:g,class:"h-12 w-full rounded-lg"})),64))])])])):(n(),d("div",Mt,[s(S)>0?(n(),f(P,{key:0,icon:"i-lucide-info",color:"primary",variant:"subtle",title:s(S)===1?"1 partial run is hidden":`${s(S)} partial runs are hidden`,description:"The “Full runs only” filter hides runs that only cover part of the suite (e.g. a single spec or --grep).",actions:[{label:"Show them",color:"primary",variant:"solid",size:"xs",onClick:ce}]},null,8,["title","actions"])):_("",!0),s(r)?(n(),d("div",Gt,[e("div",Kt,[l(J,{name:"i-lucide-folder",class:"size-4 text-primary shrink-0"}),e("span",Yt,m(s(v).totalProjects),1),a[5]||(a[5]=e("span",{class:"text-gray-500"},"projects",-1))]),e("div",qt,[e("div",{class:j(["w-2 h-2 rounded-full shrink-0",s(v).failingNow>0?"bg-red-500":"bg-green-500"])},null,2),e("span",{class:j(["font-semibold tabular-nums",s(v).failingNow>0?"text-red-600 dark:text-red-400":""])},m(s(v).failingNow),3),a[6]||(a[6]=e("span",{class:"text-gray-500"},"failing now",-1))]),e("div",Jt,[e("div",{class:j(["w-2 h-2 rounded-full shrink-0",s(v).flakyNow>0?"bg-amber-400":"bg-gray-300 dark:bg-gray-600"])},null,2),e("span",{class:j(["font-semibold tabular-nums",s(v).flakyNow>0?"text-amber-600 dark:text-amber-400":""])},m(s(v).flakyNow),3),a[7]||(a[7]=e("span",{class:"text-gray-500"},"flaky",-1))]),s(v).avgPassRate!==null?(n(),d("div",Qt,[l(J,{name:"i-lucide-check-circle",class:"size-4 text-green-500 shrink-0"}),e("span",Xt,m(s(v).avgPassRate)+"%",1),a[8]||(a[8]=e("span",{class:"text-gray-500"},"avg pass rate",-1))])):_("",!0),e("div",Zt,[l(J,{name:"i-lucide-play-circle",class:"size-4 text-primary shrink-0"}),e("span",es,m(s(v).runs24h),1),a[9]||(a[9]=e("span",{class:"text-gray-500"},"runs today",-1))])])):_("",!0),s(r)||s(B)?(n(),d("div",ts,[e("div",ss,[s(r)?(n(),f(fe,{key:0,projects:s(I)},null,8,["projects"])):_("",!0)]),s(B)?(n(),f(he,{key:0,icon:"i-lucide-activity",title:"Recent activity"},{actions:u(()=>[s(b)&&!s(F)?(n(),f(q,{key:0,variant:"ghost",size:"sm","trailing-icon":"i-lucide-chevron-down",onClick:a[1]||(a[1]=g=>F.value=!0)},{default:u(()=>[c(" Show all "+m(s(A).length),1)]),_:1})):s(F)?(n(),f(q,{key:1,variant:"ghost",size:"sm","trailing-icon":"i-lucide-chevron-up",onClick:a[2]||(a[2]=g=>F.value=!1)},{default:u(()=>[...a[10]||(a[10]=[c(" Show less ",-1)])]),_:1})):_("",!0)]),default:u(()=>[e("div",ns,[(n(!0),d(E,null,H(s(K),g=>(n(),f(xe,{key:g.id,to:`/test-runs/${g.id}`,class:j(["flex items-center gap-3 py-3 pl-3 border-l-2 hover:bg-gray-50 dark:hover:bg-gray-800/60 rounded-r transition-colors",pe(g.status)])},{default:u(()=>[l(ye,{status:g.status},null,8,["status"]),e("div",rs,[e("div",as,m(g.projectLabel||g.projectName),1),e("div",os,"Run #"+m(g.id)+" · "+m(("formatRelativeTime"in i?i.formatRelativeTime:s(ne))(g.startTime)),1)]),e("div",is,[e("div",{class:j(me(g))},m(("passRate"in i?i.passRate:s(G))(g))+"%",3),g.duration?(n(),f(_e,{key:0,ms:g.duration,class:"block text-xs text-gray-400"},null,8,["ms"])):_("",!0)])]),_:2},1032,["to","class"]))),128))])]),_:1})):_("",!0)])):_("",!0),s(r)&&!s(B)&&s(I).length===0?(n(),d("div",ls,[l(J,{name:"i-lucide-filter-x",class:"size-8 mx-auto mb-2 opacity-40"}),a[11]||(a[11]=e("p",null,"No runs match the current filters.",-1))])):_("",!0),s(r)?_("",!0):(n(),d(E,{key:4},[l(ve),e("div",us,[(n(),d(E,null,H(ge,g=>l(be,{key:g.title,class:"flex flex-col"},{default:u(()=>[e("div",ds,[e("div",cs,[l(J,{name:g.icon,class:"size-5 text-primary"},null,8,["name"])]),e("div",null,[e("p",ms,m(g.tagline),1),e("h3",ps,m(g.title),1),e("p",gs,m(g.description),1)])])]),_:2},1024)),64))])],64))]))]),_:1})}}});export{Ys as default};
@@ -1 +1 @@
1
- import{d as _,f as i,aa as h,g as l,o as s,T as o,i as a,v as k,p as g,q as n,m as c,t as m,c as r,F as p}from"./D3SYPlEB.js";import{_ as y}from"./C8cz5feG.js";import{_ as C}from"./DoFSKAvY.js";const $={class:"flex items-start justify-between gap-2"},b={class:"flex items-center gap-2 min-w-0"},x={class:"min-w-0"},v={class:"text-lg font-medium inline-flex items-center gap-1"},w={key:0,class:"text-sm text-gray-500 mt-0.5"},S={key:0,class:"flex items-center gap-1 shrink-0"},B=_({__name:"SectionCard",props:{title:{},icon:{},subtitle:{},count:{},iconClass:{default:"text-primary"},help:{}},setup(t){return(e,N)=>{const u=k,d=y,f=C;return s(),i(f,null,h({header:l(()=>[a("div",$,[a("div",b,[t.icon?(s(),i(u,{key:0,name:t.icon,class:g(["w-5 h-5 shrink-0",t.iconClass])},null,8,["name","class"])):n("",!0),a("div",x,[a("h3",v,[c(m(t.title),1),t.count!=null?(s(),r(p,{key:0},[c(" ("+m(t.count)+")",1)],64)):n("",!0),t.help?(s(),i(d,{key:1,topic:t.help},null,8,["topic"])):n("",!0)]),t.subtitle||e.$slots.subtitle?(s(),r("p",w,[o(e.$slots,"subtitle",{},()=>[c(m(t.subtitle),1)])])):n("",!0)])]),e.$slots.actions?(s(),r("div",S,[o(e.$slots,"actions")])):n("",!0)])]),default:l(()=>[o(e.$slots,"default")]),_:2},[e.$slots.footer?{name:"footer",fn:l(()=>[o(e.$slots,"footer")]),key:"0"}:void 0]),1024)}}}),H=Object.assign(B,{__name:"SectionCard"});export{H as _};
1
+ import{d as _,f as i,ac as h,g as l,o as s,V as o,i as a,p as k,q as g,v as n,m as c,t as m,c as r,F as p}from"./NQikbhmK.js";import{_ as y}from"./C7P1UCO2.js";import{_ as C}from"./eptP4pGv.js";const $={class:"flex items-start justify-between gap-2"},b={class:"flex items-center gap-2 min-w-0"},x={class:"min-w-0"},v={class:"text-lg font-medium inline-flex items-center gap-1"},w={key:0,class:"text-sm text-gray-500 mt-0.5"},S={key:0,class:"flex items-center gap-1 shrink-0"},B=_({__name:"SectionCard",props:{title:{},icon:{},subtitle:{},count:{},iconClass:{default:"text-primary"},help:{}},setup(t){return(e,V)=>{const u=k,d=y,f=C;return s(),i(f,null,h({header:l(()=>[a("div",$,[a("div",b,[t.icon?(s(),i(u,{key:0,name:t.icon,class:g(["w-5 h-5 shrink-0",t.iconClass])},null,8,["name","class"])):n("",!0),a("div",x,[a("h3",v,[c(m(t.title),1),t.count!=null?(s(),r(p,{key:0},[c(" ("+m(t.count)+")",1)],64)):n("",!0),t.help?(s(),i(d,{key:1,topic:t.help},null,8,["topic"])):n("",!0)]),t.subtitle||e.$slots.subtitle?(s(),r("p",w,[o(e.$slots,"subtitle",{},()=>[c(m(t.subtitle),1)])])):n("",!0)])]),e.$slots.actions?(s(),r("div",S,[o(e.$slots,"actions")])):n("",!0)])]),default:l(()=>[o(e.$slots,"default")]),_:2},[e.$slots.footer?{name:"footer",fn:l(()=>[o(e.$slots,"footer")]),key:"0"}:void 0]),1024)}}}),H=Object.assign(B,{__name:"SectionCard"});export{H as _};
@@ -1 +1 @@
1
- import{_ as L}from"./D51_cB9D.js";import{d as M,b as z,w as I,c as u,i as t,k as s,f as O,q as w,j as a,g as r,F as x,P as j,o as c,v as A,m as p,y as N,t as i,_ as q,l as W,r as y}from"./D3SYPlEB.js";import{_ as G}from"./AjuKBlzz.js";import{_ as H}from"./empGC_x-.js";import{_ as J}from"./CCsl9MOZ.js";import{_ as K}from"./Db_-yjYg.js";import{_ as Q}from"./l0QnzFNM.js";import{k as B}from"./BUMZHDRC.js";import{e as X,g as Y}from"./C8cz5feG.js";import{u as Z}from"./Doul3p1_.js";import"./D3MWm6JP.js";import"./CCw3Tx4S.js";import"./DoFSKAvY.js";import"./Cx65B3c3.js";import"./BAkJhSAW.js";import"./r3SBLxtE.js";const ee={class:"space-y-6"},te={class:"space-y-3"},se={class:"flex items-center gap-2 text-sm text-muted"},oe={class:"grid grid-cols-1 sm:grid-cols-2 gap-2 text-sm"},ae={class:"text-muted"},ne={class:"flex items-center gap-2 font-mono"},le={class:"text-xs"},ie={key:0,class:"flex items-center gap-2 py-4 text-muted"},re={key:1,class:"grid grid-cols-2 sm:grid-cols-3 gap-4"},de={class:"space-y-1"},ce={class:"text-2xl font-semibold"},me={class:"space-y-1"},ue={class:"text-2xl font-semibold"},pe={class:"space-y-1"},_e={class:"text-2xl font-semibold"},fe={class:"space-y-1"},ge={class:"text-2xl font-semibold"},ve={class:"space-y-1"},xe={class:"text-2xl font-semibold"},ye={class:"space-y-1"},be={class:"text-2xl font-semibold"},he={class:"space-y-1"},Ce={class:"text-2xl font-semibold"},ke={class:"flex flex-col sm:flex-row items-start sm:items-center gap-4"},je=M({__name:"storage",async setup(Se){let _,b;const h=z(),{data:n,refresh:C,pending:k}=([_,b]=I(()=>Z("/api/admin/stats","$-MAlPFSlMr")),_=await _,b(),_),$=X("storage").map(o=>({name:o,...Y(o)})),T=[{label:"7 days",value:7},{label:"14 days",value:14},{label:"30 days",value:30},{label:"60 days",value:60},{label:"90 days",value:90},{label:"180 days",value:180},{label:"1 year",value:365}],d=y(30),m=y(!1),f=y(!1);async function V(){m.value=!1,f.value=!0;try{const o=await $fetch("/api/admin/cleanup",{method:"DELETE",body:{olderThanDays:d.value}});h.add({title:"Cleanup complete",description:`Deleted ${o.deletedRuns} test run(s) older than ${d.value} days.`,color:"success"}),await C()}catch(o){const e=o&&typeof o=="object"&&"data"in o?o.data?.message:void 0;h.add({title:"Cleanup failed",description:e||"An error occurred",color:"error"})}finally{f.value=!1}}return(o,e)=>{const D=L,S=A,E=G,v=H,g=q,F=J,P=K,R=Q,U=j;return c(),u(x,null,[t("div",ee,[s(n)?(c(),O(D,{key:0,database:s(n).databaseLocation,storage:s(n).storageLocation},null,8,["database","storage"])):w("",!0),a(v,{icon:"i-lucide-server",title:"Storage backend",help:"settings.storage-backend"},{subtitle:r(()=>[...e[5]||(e[5]=[p(" Configured through environment variables. The active backend is shown read-only. ",-1)])]),default:r(()=>[t("div",te,[t("div",se,[a(S,{name:"i-lucide-info",class:"size-4"}),e[6]||(e[6]=p(" Storage backend selection (local disk or S3) and its credentials are set via the environment. Each variable below is shown read-only — hover the lock to see what it controls. ",-1))]),t("div",oe,[(c(!0),u(x,null,N(s($),l=>(c(),u(x,{key:l.name},[t("div",ae,i(l.name.replace("PIWI_S3_","S3 ").replace("PIWI_STORAGE_","Storage ")),1),t("div",ne,[t("code",le,i(l.name),1),a(E,{"env-vars":[l.name]},null,8,["env-vars"])])],64))),128))])])]),_:1}),a(v,{icon:"i-lucide-database",title:"Storage statistics",help:"settings.storage-stats"},{footer:r(()=>[a(g,{icon:"i-lucide-refresh-cw",variant:"outline",size:"sm",loading:s(k),label:"Refresh",onClick:e[0]||(e[0]=l=>s(C)())},null,8,["loading"])]),default:r(()=>[s(k)?(c(),u("div",ie,[a(S,{name:"i-lucide-loader-2",class:"animate-spin"}),e[7]||(e[7]=p(" Loading… ",-1))])):s(n)?(c(),u("div",re,[t("div",de,[e[8]||(e[8]=t("p",{class:"text-sm text-muted"},"Projects",-1)),t("p",ce,i(s(n).totalProjects),1)]),t("div",me,[e[9]||(e[9]=t("p",{class:"text-sm text-muted"},"Test runs",-1)),t("p",ue,i(s(n).totalRuns),1)]),t("div",pe,[e[10]||(e[10]=t("p",{class:"text-sm text-muted"},"Test cases (unique)",-1)),t("p",_e,i(s(n).totalTestCases),1)]),t("div",fe,[e[11]||(e[11]=t("p",{class:"text-sm text-muted"},"Test results",-1)),t("p",ge,i(s(n).totalRunsCases),1)]),t("div",ve,[e[12]||(e[12]=t("p",{class:"text-sm text-muted"},"Stored files",-1)),t("p",xe,i(s(n).totalFiles),1)]),t("div",ye,[e[13]||(e[13]=t("p",{class:"text-sm text-muted"},"File size (DB)",-1)),t("p",be,i(("formatBytes"in o?o.formatBytes:s(B))(s(n).totalFileSize)),1)]),t("div",he,[e[14]||(e[14]=t("p",{class:"text-sm text-muted"},"Storage on disk",-1)),t("p",Ce,i(("formatBytes"in o?o.formatBytes:s(B))(s(n).storageSizeOnDisk)),1)])])):w("",!0)]),_:1}),a(v,{icon:"i-lucide-trash-2",title:"Cleanup old test runs",help:"settings.cleanup"},{default:r(()=>[t("div",ke,[a(P,{label:"Delete runs older than",name:"period"},{default:r(()=>[a(F,{modelValue:s(d),"onUpdate:modelValue":e[1]||(e[1]=l=>W(d)?d.value=l:null),items:T},null,8,["modelValue"])]),_:1}),a(g,{icon:"i-lucide-trash-2",color:"error",variant:"soft",loading:s(f),label:"Run cleanup",class:"mt-4 sm:mt-5",onClick:e[2]||(e[2]=l=>m.value=!0)},null,8,["loading"])])]),_:1})]),a(U,null,{default:r(()=>[a(R,{open:s(m),title:"Confirm cleanup","onUpdate:open":e[4]||(e[4]=l=>m.value=l)},{body:r(()=>[t("p",null,[e[15]||(e[15]=p(" This will permanently delete all test runs older than ",-1)),t("strong",null,i(s(d))+" days",1),e[16]||(e[16]=p(", along with their associated reports, traces, and test results. This action cannot be undone. ",-1))])]),footer:r(()=>[a(g,{color:"neutral",variant:"ghost",label:"Cancel",onClick:e[3]||(e[3]=l=>m.value=!1)}),a(g,{color:"error",label:"Delete",icon:"i-lucide-trash-2",loading:s(f),onClick:V},null,8,["loading"])]),_:1},8,["open"])]),_:1})],64)}}});export{je as default};
1
+ import{_ as M}from"./DT53RWbC.js";import{d as P,b as z,w as I,c as u,i as t,k as s,f as O,v as w,j as a,g as r,F as x,R as j,o as c,p as A,m as p,y as N,t as i,_ as W,l as q,r as y}from"./NQikbhmK.js";import{_ as G}from"./CZfMdzfk.js";import{_ as H}from"./DprVVyUQ.js";import{_ as J}from"./DS636elg.js";import{_ as K}from"./B9WhzpKO.js";import{_ as Q}from"./B3HO8kuh.js";import{f as B}from"./D-c8ZSws.js";import{e as X,g as Y}from"./C7P1UCO2.js";import{u as Z}from"./CpjgB2aY.js";import"./Bn0YQDyy.js";import"./DP8hfJ9h.js";import"./eptP4pGv.js";import"./g26aVPxc.js";import"./CYsTqbBS.js";import"./BjaRappk.js";const ee={class:"space-y-6"},te={class:"space-y-3"},se={class:"flex items-center gap-2 text-sm text-muted"},oe={class:"grid grid-cols-1 sm:grid-cols-2 gap-2 text-sm"},ae={class:"text-muted"},ne={class:"flex items-center gap-2 font-mono"},le={class:"text-xs"},ie={key:0,class:"flex items-center gap-2 py-4 text-muted"},re={key:1,class:"grid grid-cols-2 sm:grid-cols-3 gap-4"},de={class:"space-y-1"},ce={class:"text-2xl font-semibold"},me={class:"space-y-1"},ue={class:"text-2xl font-semibold"},pe={class:"space-y-1"},_e={class:"text-2xl font-semibold"},fe={class:"space-y-1"},ge={class:"text-2xl font-semibold"},ve={class:"space-y-1"},xe={class:"text-2xl font-semibold"},ye={class:"space-y-1"},be={class:"text-2xl font-semibold"},he={class:"space-y-1"},Ce={class:"text-2xl font-semibold"},ke={class:"flex flex-col sm:flex-row items-start sm:items-center gap-4"},je=P({__name:"storage",async setup(Se){let _,b;const h=z(),{data:n,refresh:C,pending:k}=([_,b]=I(()=>Z("/api/admin/stats","$-MAlPFSlMr")),_=await _,b(),_),T=X("storage").map(o=>({name:o,...Y(o)})),$=[{label:"7 days",value:7},{label:"14 days",value:14},{label:"30 days",value:30},{label:"60 days",value:60},{label:"90 days",value:90},{label:"180 days",value:180},{label:"1 year",value:365}],d=y(30),m=y(!1),f=y(!1);async function V(){m.value=!1,f.value=!0;try{const o=await $fetch("/api/admin/cleanup",{method:"DELETE",body:{olderThanDays:d.value}});h.add({title:"Cleanup complete",description:`Deleted ${o.deletedRuns} test run(s) older than ${d.value} days.`,color:"success"}),await C()}catch(o){const e=o&&typeof o=="object"&&"data"in o?o.data?.message:void 0;h.add({title:"Cleanup failed",description:e||"An error occurred",color:"error"})}finally{f.value=!1}}return(o,e)=>{const D=M,S=A,E=G,v=H,g=W,F=J,R=K,U=Q,L=j;return c(),u(x,null,[t("div",ee,[s(n)?(c(),O(D,{key:0,database:s(n).databaseLocation,storage:s(n).storageLocation},null,8,["database","storage"])):w("",!0),a(v,{icon:"i-lucide-server",title:"Storage backend",help:"settings.storage-backend"},{subtitle:r(()=>[...e[5]||(e[5]=[p(" Configured through environment variables. The active backend is shown read-only. ",-1)])]),default:r(()=>[t("div",te,[t("div",se,[a(S,{name:"i-lucide-info",class:"size-4"}),e[6]||(e[6]=p(" Storage backend selection (local disk or S3) and its credentials are set via the environment. Each variable below is shown read-only — hover the lock to see what it controls. ",-1))]),t("div",oe,[(c(!0),u(x,null,N(s(T),l=>(c(),u(x,{key:l.name},[t("div",ae,i(l.name.replace("PIWI_S3_","S3 ").replace("PIWI_STORAGE_","Storage ")),1),t("div",ne,[t("code",le,i(l.name),1),a(E,{"env-vars":[l.name]},null,8,["env-vars"])])],64))),128))])])]),_:1}),a(v,{icon:"i-lucide-database",title:"Storage statistics",help:"settings.storage-stats"},{footer:r(()=>[a(g,{icon:"i-lucide-refresh-cw",variant:"outline",size:"sm",loading:s(k),label:"Refresh",onClick:e[0]||(e[0]=l=>s(C)())},null,8,["loading"])]),default:r(()=>[s(k)?(c(),u("div",ie,[a(S,{name:"i-lucide-loader-2",class:"animate-spin"}),e[7]||(e[7]=p(" Loading… ",-1))])):s(n)?(c(),u("div",re,[t("div",de,[e[8]||(e[8]=t("p",{class:"text-sm text-muted"},"Projects",-1)),t("p",ce,i(s(n).totalProjects),1)]),t("div",me,[e[9]||(e[9]=t("p",{class:"text-sm text-muted"},"Test runs",-1)),t("p",ue,i(s(n).totalRuns),1)]),t("div",pe,[e[10]||(e[10]=t("p",{class:"text-sm text-muted"},"Test cases (unique)",-1)),t("p",_e,i(s(n).totalTestCases),1)]),t("div",fe,[e[11]||(e[11]=t("p",{class:"text-sm text-muted"},"Test results",-1)),t("p",ge,i(s(n).totalRunsCases),1)]),t("div",ve,[e[12]||(e[12]=t("p",{class:"text-sm text-muted"},"Stored files",-1)),t("p",xe,i(s(n).totalFiles),1)]),t("div",ye,[e[13]||(e[13]=t("p",{class:"text-sm text-muted"},"File size (DB)",-1)),t("p",be,i(("formatBytes"in o?o.formatBytes:s(B))(s(n).totalFileSize)),1)]),t("div",he,[e[14]||(e[14]=t("p",{class:"text-sm text-muted"},"Storage on disk",-1)),t("p",Ce,i(("formatBytes"in o?o.formatBytes:s(B))(s(n).storageSizeOnDisk)),1)])])):w("",!0)]),_:1}),a(v,{icon:"i-lucide-trash-2",title:"Cleanup old test runs",help:"settings.cleanup"},{default:r(()=>[t("div",ke,[a(R,{label:"Delete runs older than",name:"period"},{default:r(()=>[a(F,{modelValue:s(d),"onUpdate:modelValue":e[1]||(e[1]=l=>q(d)?d.value=l:null),items:$},null,8,["modelValue"])]),_:1}),a(g,{icon:"i-lucide-trash-2",color:"error",variant:"soft",loading:s(f),label:"Run cleanup",class:"mt-4 sm:mt-5",onClick:e[2]||(e[2]=l=>m.value=!0)},null,8,["loading"])])]),_:1})]),a(L,null,{default:r(()=>[a(U,{open:s(m),title:"Confirm cleanup","onUpdate:open":e[4]||(e[4]=l=>m.value=l)},{body:r(()=>[t("p",null,[e[15]||(e[15]=p(" This will permanently delete all test runs older than ",-1)),t("strong",null,i(s(d))+" days",1),e[16]||(e[16]=p(", along with their associated reports, traces, and test results. This action cannot be undone. ",-1))])]),footer:r(()=>[a(g,{color:"neutral",variant:"ghost",label:"Cancel",onClick:e[3]||(e[3]=l=>m.value=!1)}),a(g,{color:"error",label:"Delete",icon:"i-lucide-trash-2",loading:s(f),onClick:V},null,8,["loading"])]),_:1},8,["open"])]),_:1})],64)}}});export{je as default};
@@ -1 +1 @@
1
- import{k as C,B as W,al as N,aA as P,cc as j,h as B}from"./D3SYPlEB.js";function H(l,h,t){const e=new Array(l);return new Proxy(e,{get(s,i,o){if(typeof i=="string"){const n=i.charCodeAt(0);if(n>=48&&n<=57){const r=+i;if(Number.isInteger(r)&&r>=0&&r<l){let a=s[r];if(!a){const d=h[r*2];a=s[r]={index:r,key:t(r),start:d,size:h[r*2+1],end:d+h[r*2+1],lane:0}}return a}}if(i==="length")return l}return Reflect.get(s,i,o)}})}function w(l,h,t){let e=t.initialDeps??[],s,i=!0;function o(){const n=l();return(n.length!==e.length||n.some((a,d)=>e[d]!==a))&&(e=n,s=h(...n),t?.onChange&&!(i&&t.skipInitialOnChange)&&t.onChange(s),i=!1),s}return o.updateDeps=n=>{e=n},o}function L(l,h){if(l===void 0)throw new Error("Unexpected undefined");return l}const J=(l,h)=>Math.abs(l-h)<1.01,U=(l,h,t)=>{let e;return function(...s){l.clearTimeout(e),e=l.setTimeout(()=>h.apply(this,s),t)}};let M;const R=()=>{if(M!==void 0)return M;if(typeof navigator>"u")return M=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return M=!0;const l=navigator.maxTouchPoints;return M=navigator.platform==="MacIntel"&&l!==void 0&&l>0},V=l=>{const{offsetWidth:h,offsetHeight:t}=l;return{width:h,height:t}},q=l=>l,X=l=>{const h=Math.max(l.startIndex-l.overscan,0),e=Math.min(l.endIndex+l.overscan,l.count-1)-h+1,s=new Array(e);for(let i=0;i<e;i++)s[i]=h+i;return s},$=(l,h)=>{const t=l.scrollElement;if(!t)return;const e=l.targetWindow;if(!e)return;const s=o=>{const{width:n,height:r}=o;h({width:Math.round(n),height:Math.round(r)})};if(s(V(t)),!e.ResizeObserver)return()=>{};const i=new e.ResizeObserver(o=>{const n=()=>{const r=o[0];if(r?.borderBoxSize){const a=r.borderBoxSize[0];if(a){s({width:a.inlineSize,height:a.blockSize});return}}s(V(t))};l.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(n):n()});return i.observe(t,{box:"border-box"}),()=>{i.unobserve(t)}},A={passive:!0},G=typeof window>"u"?!0:"onscrollend"in window,Q=(l,h,t)=>{const e=l.scrollElement;if(!e)return;const s=l.targetWindow;if(!s)return;const i=l.options.useScrollendEvent&&G;let o=0;const n=i?null:U(s,()=>h(o,!1),l.options.isScrollingResetDelay),r=m=>()=>{o=t(e),n?.(),h(o,m)},a=r(!0),d=r(!1);return e.addEventListener("scroll",a,A),i&&e.addEventListener("scrollend",d,A),()=>{e.removeEventListener("scroll",a),i&&e.removeEventListener("scrollend",d)}},Y=(l,h)=>Q(l,h,t=>{const{horizontal:e,isRtl:s}=l.options;return e?t.scrollLeft*(s&&-1||1):t.scrollTop}),Z=(l,h,t)=>{if(t.options.useCachedMeasurements){const e=t.indexFromElement(l),s=t.options.getItemKey(e);return t.itemSizeCache.get(s)??t.options.estimateSize(e)}if(h?.borderBoxSize){const e=h.borderBoxSize[0];if(e)return Math.round(e[t.options.horizontal?"inlineSize":"blockSize"])}if(!h){const e=t.indexFromElement(l),s=t.options.getItemKey(e),i=t.itemSizeCache.get(s);if(i!==void 0)return i}return l[t.options.horizontal?"offsetWidth":"offsetHeight"]},tt=(l,{adjustments:h=0,behavior:t},e)=>{var s,i;(i=(s=e.scrollElement)==null?void 0:s.scrollTo)==null||i.call(s,{[e.options.horizontal?"left":"top"]:l+h,behavior:t})},et=tt;class st{constructor(h){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this._flatMeasurements=null,this.itemSizeCache=new Map,this.itemSizeCacheVersion=0,this.laneAssignments=new Map,this.pendingMin=null,this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.pendingScrollAnchor=null,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._intendedScrollOffset=null,this.elementsCache=new Map,this.now=()=>{var t,e,s;return((s=(e=(t=this.targetWindow)==null?void 0:t.performance)==null?void 0:e.now)==null?void 0:s.call(e))??Date.now()},this.observer=(()=>{let t=null;const e=()=>t||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:t=new this.targetWindow.ResizeObserver(s=>{s.forEach(i=>{const o=()=>{const n=i.target,r=this.indexFromElement(n);if(!n.isConnected){this.observer.unobserve(n);for(const[a,d]of this.elementsCache)if(d===n){this.elementsCache.delete(a);break}return}this.shouldMeasureDuringScroll(r)&&this.resizeItem(r,this.options.measureElement(n,i,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(o):o()})}));return{disconnect:()=>{var s;(s=e())==null||s.disconnect(),t=null},observe:s=>{var i;return(i=e())==null?void 0:i.observe(s,{box:"border-box"})},unobserve:s=>{var i;return(i=e())==null?void 0:i.unobserve(s)}}})(),this.range=null,this.setOptions=t=>{var e,s;const i={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:q,rangeExtractor:X,onChange:()=>{},measureElement:Z,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,anchorTo:"start",followOnAppend:!1,scrollEndThreshold:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:"estimate",useCachedMeasurements:!1};for(const u in t){const g=t[u];g!==void 0&&(i[u]=g)}const o=this.options;let n=null,r=null,a=!1;if(o!==void 0&&o.enabled&&i.enabled&&i.anchorTo==="end"&&this.scrollElement!==null){const u=o.count,g=i.count,S=this.getMeasurements(),E=u>0?((e=S[0])==null?void 0:e.key)??o.getItemKey(0):null,O=u>0?((s=S[u-1])==null?void 0:s.key)??o.getItemKey(u-1):null;if(g!==u||u>0&&g>0&&(i.getItemKey(0)!==E||i.getItemKey(g-1)!==O)){a=!0;const b=u>0?this.getVirtualItemForOffset(this.getScrollOffset())??S[0]:null;b&&(n=[b.key,this.getScrollOffset()-b.start]);const v=i.followOnAppend===!0?"auto":i.followOnAppend||null;v&&g>u&&this.isAtEnd(o.scrollEndThreshold)&&(u===0||i.getItemKey(g-1)!==O)&&(r=v)}}this.options=i,a&&(this.pendingMin=0,this.itemSizeCacheVersion++);let d=!1,m=0;if(n&&this.scrollOffset!==null){const[u,g]=n,S=this.getMeasurements(),{count:E,getItemKey:O}=this.options;let c=0;for(;c<E&&O(c)!==u;)c++;if(c<E){const f=S[c];if(f){const b=f.start+g;b!==this.scrollOffset&&(m=b-this.scrollOffset,this.scrollOffset=b,d=!0)}}}(d||r)&&(this.pendingScrollAnchor=[d?n[0]:null,d?n[1]:0,r,m])},this.notify=t=>{var e,s;(s=(e=this.options).onChange)==null||s.call(e,this,t)},this.maybeNotify=w(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),t=>{this.notify(t)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(t=>t()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var t;const e=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==e){if(this.cleanup(),!e){this.maybeNotify();return}if(this.scrollElement=e,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((t=this.scrollElement)==null?void 0:t.window)??null,this.elementsCache.forEach(i=>{this.observer.observe(i)}),this.unsubs.push(this.options.observeElementRect(this,i=>{this.scrollRect=i,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(i,o)=>{if(o&&this._intendedScrollOffset===null&&i===this.scrollOffset)return;this._intendedScrollOffset!==null&&Math.abs(i-this._intendedScrollOffset)<1.5&&(i=this._intendedScrollOffset),this._intendedScrollOffset=null,this.scrollAdjustments=0;const n=this.getScrollOffset();this.scrollDirection=o?n===i?this.scrollDirection:n<i?"forward":"backward":null,this.scrollOffset=i,this.isScrolling=o,this._flushIosDeferredIfReady(),this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),"addEventListener"in this.scrollElement){const i=this.scrollElement,o=()=>{this._iosTouching=!0,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)},n=()=>{this._iosTouching=!1,!(!R()||this.targetWindow==null)&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};i.addEventListener("touchstart",o,A),i.addEventListener("touchend",n,A),this.unsubs.push(()=>{i.removeEventListener("touchstart",o),i.removeEventListener("touchend",n),this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)})}this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}const s=this.pendingScrollAnchor;if(this.pendingScrollAnchor=null,s&&this.scrollElement&&this.options.enabled){const[i,o,n,r]=s;i!==null&&!n&&(R()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?r!==0&&(this._iosDeferredAdjustment+=r):this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})),n&&this.scrollToEnd({behavior:n})}},this._flushIosDeferredIfReady=()=>{if(this._iosDeferredAdjustment===0||this.isScrolling||this._iosTouching||this._iosJustTouchEnded)return;const t=this.getScrollOffset(),e=this.getMaxScrollOffset();if(t<0||t>e)return;const s=this._iosDeferredAdjustment;this._iosDeferredAdjustment=0,this._scrollToOffset(t,{adjustments:this.scrollAdjustments+=s,behavior:void 0})},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getMeasurementOptions=w(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode,this.options.gap],(t,e,s,i,o,n,r,a)=>(this.prevLanes!==void 0&&this.prevLanes!==n&&(this.lanesChangedFlag=!0),this.prevLanes=n,this.pendingMin=null,{count:t,paddingStart:e,scrollMargin:s,getItemKey:i,enabled:o,lanes:n,laneAssignmentMode:r,gap:a}),{key:!1}),this.getMeasurements=w(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:t,paddingStart:e,scrollMargin:s,getItemKey:i,enabled:o,lanes:n,laneAssignmentMode:r,gap:a},d)=>{const m=this.itemSizeCache;if(!o)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>t)for(const c of this.laneAssignments.keys())c>=t&&this.laneAssignments.delete(c);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMin=null),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(c=>{this.itemSizeCache.set(c.key,c.size)}));const u=this.lanesSettling?0:this.pendingMin??0;if(this.pendingMin=null,this.lanesSettling&&this.measurementsCache.length===t&&(this.lanesSettling=!1),n===1){const c=t*2;let f=this._flatMeasurements;if(!f||f.length<c){const p=new Float64Array(c);f&&u>0&&p.set(f.subarray(0,u*2)),f=p,this._flatMeasurements=f}let b;if(u===0)b=e+s;else{const p=u-1;b=f[p*2]+f[p*2+1]+a}for(let p=u;p<t;p++){const T=i(p),x=m.get(T),z=typeof x=="number"?x:this.options.estimateSize(p);f[p*2]=b,f[p*2+1]=z,b+=z+a}const v=H(t,f,i);return this.measurementsCache=v,v}const g=this.measurementsCache.slice(0,u),S=new Array(n).fill(void 0),E=new Float64Array(n);let O=0;for(let c=0;c<u;c++){const f=g[c];f&&(S[f.lane]===void 0&&O++,S[f.lane]=c,E[f.lane]=f.end)}for(let c=u;c<t;c++){const f=i(c),b=this.laneAssignments.get(c);let v,p;const T=r==="estimate"||m.has(f);if(b!==void 0&&this.options.lanes>1){v=b;const y=S[v],I=y!==void 0?g[y]:void 0;p=I?I.end+a:e+s}else if(O===n){let y=0,I=E[0],D=S[0];for(let _=1;_<n;_++){const F=E[_];(F<I||F===I&&S[_]<D)&&(y=_,I=F,D=S[_])}v=y,p=I+a,T&&this.laneAssignments.set(c,v)}else v=c%this.options.lanes,p=e+s,T&&this.laneAssignments.set(c,v);const x=m.get(f),z=typeof x=="number"?x:this.options.estimateSize(c),k=p+z;g[c]={index:c,start:p,size:z,end:k,key:f,lane:v},S[v]===void 0&&O++,S[v]=c,E[v]=k}return this.measurementsCache=g,g},{key:!1,debug:()=>this.options.debug}),this.calculateRange=w(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(t,e,s,i)=>t.length===0||e===0?(this.range=null,null):(this.range=nt(t,e,s,i,i===1&&this._flatMeasurements!=null?this._flatMeasurements:null),this.range),{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=w(()=>{let t=null,e=null;const s=this.calculateRange();return s&&(t=s.startIndex,e=s.endIndex),this.maybeNotify.updateDeps([this.isScrolling,t,e]),[this.options.rangeExtractor,this.options.overscan,this.options.count,t,e]},(t,e,s,i,o)=>i===null||o===null?[]:t({startIndex:i,endIndex:o,overscan:e,count:s}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=t=>{const e=this.options.indexAttribute,s=t.getAttribute(e);return s?parseInt(s,10):(console.warn(`Missing attribute name '${e}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=t=>{var e;if(!this.scrollState||this.scrollState.behavior!=="smooth")return!0;const s=this.scrollState.index??((e=this.getVirtualItemForOffset(this.scrollState.lastTargetOffset))==null?void 0:e.index);if(s!==void 0&&this.range){const i=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),o=Math.max(0,s-i),n=Math.min(this.options.count-1,s+i);return t>=o&&t<=n}return!0},this.measureElement=t=>{if(!t){this.elementsCache.forEach((o,n)=>{o.isConnected||(this.observer.unobserve(o),this.elementsCache.delete(n))});return}const e=this.indexFromElement(t),s=this.options.getItemKey(e),i=this.elementsCache.get(s);i!==t&&(i&&this.observer.unobserve(i),this.observer.observe(t),this.elementsCache.set(s,t)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(e)&&this.resizeItem(e,this.options.measureElement(t,void 0,this))},this.resizeItem=(t,e)=>{var s,i;if(t<0||t>=this.options.count)return;let o,n,r;const a=this._flatMeasurements;if(this.options.lanes===1&&a!==null)r=this.options.getItemKey(t),n=a[t*2],o=a[t*2+1];else{const u=this.measurementsCache[t];if(!u)return;r=u.key,n=u.start,o=u.size}const d=this.itemSizeCache.get(r)??o,m=e-d;if(m!==0){const u=this.options.anchorTo==="end"&&((s=this.scrollState)==null?void 0:s.behavior)!=="smooth"&&this.getVirtualDistanceFromEnd()<=this.options.scrollEndThreshold,g=u?this.getTotalSize():0,S=((i=this.scrollState)==null?void 0:i.behavior)!=="smooth"&&(this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(this.measurementsCache[t]??{index:t,key:r,start:n,size:o,end:n+o,lane:0},m,this):n<this.getScrollOffset()+this.scrollAdjustments&&(!this.itemSizeCache.has(r)||this.scrollDirection!=="backward"));(this.pendingMin===null||t<this.pendingMin)&&(this.pendingMin=t),this.itemSizeCache.set(r,e),this.itemSizeCacheVersion++,u?this.applyScrollAdjustment(this.getTotalSize()-g):S&&this.applyScrollAdjustment(m),this.notify(!1)}},this.getVirtualItems=w(()=>[this.getVirtualIndexes(),this.getMeasurements()],(t,e)=>{const s=[];for(let i=0,o=t.length;i<o;i++){const n=t[i],r=e[n];s.push(r)}return s},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=t=>{const e=this.getMeasurements();if(e.length===0)return;const s=this._flatMeasurements,i=this.options.lanes===1&&s!=null,o=K(0,e.length-1,i?n=>s[n*2]:n=>L(e[n]).start,t);return L(e[o])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if("scrollHeight"in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{const t=this.scrollElement.document.documentElement;return this.options.horizontal?t.scrollWidth-this.scrollElement.innerWidth:t.scrollHeight-this.scrollElement.innerHeight}},this.getVirtualDistanceFromEnd=()=>Math.max(this.getTotalSize()-this.getSize()-this.getScrollOffset(),0),this.getDistanceFromEnd=()=>Math.max(this.getMaxScrollOffset()-this.getScrollOffset(),0),this.isAtEnd=(t=this.options.scrollEndThreshold)=>this.getDistanceFromEnd()<=t,this.getOffsetForAlignment=(t,e,s=0)=>{if(!this.scrollElement)return 0;const i=this.getSize(),o=this.getScrollOffset();e==="auto"&&(e=t>=o+i?"end":"start"),e==="center"?t+=(s-i)/2:e==="end"&&(t-=i);const n=this.getMaxScrollOffset();return Math.max(Math.min(n,t),0)},this.getOffsetForIndex=(t,e="auto")=>{t=Math.max(0,Math.min(t,this.options.count-1));const s=this.getSize(),i=this.getScrollOffset(),o=this.measurementsCache[t];if(!o)return;if(e==="auto")if(o.end>=i+s-this.options.scrollPaddingEnd)e="end";else if(o.start<=i+this.options.scrollPaddingStart)e="start";else return[i,e];if(e==="end"&&t===this.options.count-1)return[this.getMaxScrollOffset(),e];const n=e==="end"?o.end+this.options.scrollPaddingEnd:o.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(n,e,o.size),e]},this.scrollToOffset=(t,{align:e="start",behavior:s="auto"}={})=>{const i=this.getOffsetForAlignment(t,e),o=this.now();this.scrollState={index:null,align:e,behavior:s,startedAt:o,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:s}),this.scheduleScrollReconcile()},this.scrollToIndex=(t,{align:e="auto",behavior:s="auto"}={})=>{t=Math.max(0,Math.min(t,this.options.count-1));const i=this.getOffsetForIndex(t,e);if(!i)return;const[o,n]=i,r=this.now();this.scrollState={index:t,align:n,behavior:s,startedAt:r,lastTargetOffset:o,stableFrames:0},this._scrollToOffset(o,{adjustments:void 0,behavior:s}),this.scheduleScrollReconcile()},this.scrollBy=(t,{behavior:e="auto"}={})=>{const s=this.getScrollOffset()+t,i=this.now();this.scrollState={index:null,align:"start",behavior:e,startedAt:i,lastTargetOffset:s,stableFrames:0},this._scrollToOffset(s,{adjustments:void 0,behavior:e}),this.scheduleScrollReconcile()},this.scrollToEnd=({behavior:t="auto"}={})=>{if(this.options.count>0){this.scrollToIndex(this.options.count-1,{align:"end",behavior:t});return}this.scrollToOffset(Math.max(this.getTotalSize()-this.getSize(),0),{behavior:t})},this.getTotalSize=()=>{var t;const e=this.getMeasurements();let s;if(e.length===0)s=this.options.paddingStart;else if(this.options.lanes===1){const i=e.length-1,o=this._flatMeasurements;o!=null?s=o[i*2]+o[i*2+1]:s=((t=e[i])==null?void 0:t.end)??0}else{const i=Array(this.options.lanes).fill(null);let o=e.length-1;for(;o>=0&&i.some(n=>n===null);){const n=e[o];i[n.lane]===null&&(i[n.lane]=n.end),o--}s=Math.max(...i.filter(n=>n!==null))}return Math.max(s-this.options.scrollMargin+this.options.paddingEnd,0)},this.takeSnapshot=()=>{const t=[];if(this.itemSizeCache.size===0)return t;const e=this.getMeasurements();for(const s of e)s&&this.itemSizeCache.has(s.key)&&t.push({index:s.index,key:s.key,start:s.start,size:s.size,end:s.end,lane:s.lane});return t},this._scrollToOffset=(t,{adjustments:e,behavior:s})=>{this._intendedScrollOffset=t+(e??0),this.options.scrollToFn(t,{behavior:s,adjustments:e},this)},this.measure=()=>{this.pendingMin=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.itemSizeCacheVersion++,this.notify(!1)},this.setOptions(h)}applyScrollAdjustment(h,t){h!==0&&(R()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?this._iosDeferredAdjustment+=h:(this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=h,behavior:t}),this.scrollOffset!==null&&(this.scrollOffset+=this.scrollAdjustments,this.scrollAdjustments=0)))}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId==null&&(this.rafId=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()}))}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}const e=this.scrollState.index!=null?this.getOffsetForIndex(this.scrollState.index,this.scrollState.align):void 0,s=e?e[0]:this.scrollState.lastTargetOffset,i=1,o=s!==this.scrollState.lastTargetOffset;if(!o&&J(s,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=i){this.getScrollOffset()!==s&&this._scrollToOffset(s,{adjustments:void 0,behavior:"auto"}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,o){const n=this.getSize()||600,r=Math.abs(s-this.getScrollOffset()),a=this.scrollState.behavior==="smooth"&&r>n;this.scrollState.lastTargetOffset=s,a||(this.scrollState.behavior="auto"),this._scrollToOffset(s,{adjustments:void 0,behavior:a?"smooth":"auto"})}this.scheduleScrollReconcile()}}const K=(l,h,t,e)=>{for(;l<=h;){const s=(l+h)/2|0,i=t(s);if(i<e)l=s+1;else if(i>e)h=s-1;else return s}return l>0?l-1:0};function it(l,h,t){let e=0;for(;e<=h;){const s=(e+h)/2|0,i=l[s*2];if(i<t)e=s+1;else if(i>t)h=s-1;else return s}return e>0?e-1:0}function nt(l,h,t,e,s){const i=l.length-1;if(l.length<=e)return{startIndex:0,endIndex:i};if(e===1&&s!==null){const a=it(s,i,t);let d=a;const m=t+h;for(;d<i&&s[d*2]+s[d*2+1]<m;)d++;return{startIndex:a,endIndex:d}}let n=K(0,i,a=>l[a].start,t),r=n;if(e===1)for(;r<i&&l[r].end<t+h;)r++;else if(e>1){const a=Array(e).fill(0);for(;r<i&&a.some(m=>m<t+h);){const m=l[r];a[m.lane]=m.end,r++}const d=Array(e).fill(t+h);for(;n>=0&&d.some(m=>m>=t);){const m=l[n];d[m.lane]=m.start,n--}n=Math.max(0,n-n%e),r=Math.min(i,r+(e-1-r%e))}return{startIndex:n,endIndex:r}}function ot(l){const h=new st(C(l)),t=P(h),e=h._didMount();return W(()=>C(l).getScrollElement(),s=>{s&&h._willUpdate()},{immediate:!0}),W(()=>C(l),s=>{h.setOptions({...s,onChange:(i,o)=>{var n;j(t),(n=s.onChange)==null||n.call(s,i,o)}}),h._willUpdate(),j(t)},{immediate:!0}),N(e),t}function rt(l){return ot(B(()=>({observeElementRect:$,observeElementOffset:Y,scrollToFn:et,...C(l)})))}export{rt as u};
1
+ import{k as C,H as W,am as N,aB as P,cc as j,h as B}from"./NQikbhmK.js";function H(l,h,t){const e=new Array(l);return new Proxy(e,{get(s,i,o){if(typeof i=="string"){const n=i.charCodeAt(0);if(n>=48&&n<=57){const r=+i;if(Number.isInteger(r)&&r>=0&&r<l){let a=s[r];if(!a){const d=h[r*2];a=s[r]={index:r,key:t(r),start:d,size:h[r*2+1],end:d+h[r*2+1],lane:0}}return a}}if(i==="length")return l}return Reflect.get(s,i,o)}})}function w(l,h,t){let e=t.initialDeps??[],s,i=!0;function o(){const n=l();return(n.length!==e.length||n.some((a,d)=>e[d]!==a))&&(e=n,s=h(...n),t?.onChange&&!(i&&t.skipInitialOnChange)&&t.onChange(s),i=!1),s}return o.updateDeps=n=>{e=n},o}function L(l,h){if(l===void 0)throw new Error("Unexpected undefined");return l}const J=(l,h)=>Math.abs(l-h)<1.01,U=(l,h,t)=>{let e;return function(...s){l.clearTimeout(e),e=l.setTimeout(()=>h.apply(this,s),t)}};let M;const R=()=>{if(M!==void 0)return M;if(typeof navigator>"u")return M=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return M=!0;const l=navigator.maxTouchPoints;return M=navigator.platform==="MacIntel"&&l!==void 0&&l>0},V=l=>{const{offsetWidth:h,offsetHeight:t}=l;return{width:h,height:t}},q=l=>l,X=l=>{const h=Math.max(l.startIndex-l.overscan,0),e=Math.min(l.endIndex+l.overscan,l.count-1)-h+1,s=new Array(e);for(let i=0;i<e;i++)s[i]=h+i;return s},$=(l,h)=>{const t=l.scrollElement;if(!t)return;const e=l.targetWindow;if(!e)return;const s=o=>{const{width:n,height:r}=o;h({width:Math.round(n),height:Math.round(r)})};if(s(V(t)),!e.ResizeObserver)return()=>{};const i=new e.ResizeObserver(o=>{const n=()=>{const r=o[0];if(r?.borderBoxSize){const a=r.borderBoxSize[0];if(a){s({width:a.inlineSize,height:a.blockSize});return}}s(V(t))};l.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(n):n()});return i.observe(t,{box:"border-box"}),()=>{i.unobserve(t)}},A={passive:!0},G=typeof window>"u"?!0:"onscrollend"in window,Q=(l,h,t)=>{const e=l.scrollElement;if(!e)return;const s=l.targetWindow;if(!s)return;const i=l.options.useScrollendEvent&&G;let o=0;const n=i?null:U(s,()=>h(o,!1),l.options.isScrollingResetDelay),r=m=>()=>{o=t(e),n?.(),h(o,m)},a=r(!0),d=r(!1);return e.addEventListener("scroll",a,A),i&&e.addEventListener("scrollend",d,A),()=>{e.removeEventListener("scroll",a),i&&e.removeEventListener("scrollend",d)}},Y=(l,h)=>Q(l,h,t=>{const{horizontal:e,isRtl:s}=l.options;return e?t.scrollLeft*(s&&-1||1):t.scrollTop}),Z=(l,h,t)=>{if(t.options.useCachedMeasurements){const e=t.indexFromElement(l),s=t.options.getItemKey(e);return t.itemSizeCache.get(s)??t.options.estimateSize(e)}if(h?.borderBoxSize){const e=h.borderBoxSize[0];if(e)return Math.round(e[t.options.horizontal?"inlineSize":"blockSize"])}if(!h){const e=t.indexFromElement(l),s=t.options.getItemKey(e),i=t.itemSizeCache.get(s);if(i!==void 0)return i}return l[t.options.horizontal?"offsetWidth":"offsetHeight"]},tt=(l,{adjustments:h=0,behavior:t},e)=>{var s,i;(i=(s=e.scrollElement)==null?void 0:s.scrollTo)==null||i.call(s,{[e.options.horizontal?"left":"top"]:l+h,behavior:t})},et=tt;class st{constructor(h){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this._flatMeasurements=null,this.itemSizeCache=new Map,this.itemSizeCacheVersion=0,this.laneAssignments=new Map,this.pendingMin=null,this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.pendingScrollAnchor=null,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._intendedScrollOffset=null,this.elementsCache=new Map,this.now=()=>{var t,e,s;return((s=(e=(t=this.targetWindow)==null?void 0:t.performance)==null?void 0:e.now)==null?void 0:s.call(e))??Date.now()},this.observer=(()=>{let t=null;const e=()=>t||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:t=new this.targetWindow.ResizeObserver(s=>{s.forEach(i=>{const o=()=>{const n=i.target,r=this.indexFromElement(n);if(!n.isConnected){this.observer.unobserve(n);for(const[a,d]of this.elementsCache)if(d===n){this.elementsCache.delete(a);break}return}this.shouldMeasureDuringScroll(r)&&this.resizeItem(r,this.options.measureElement(n,i,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(o):o()})}));return{disconnect:()=>{var s;(s=e())==null||s.disconnect(),t=null},observe:s=>{var i;return(i=e())==null?void 0:i.observe(s,{box:"border-box"})},unobserve:s=>{var i;return(i=e())==null?void 0:i.unobserve(s)}}})(),this.range=null,this.setOptions=t=>{var e,s;const i={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:q,rangeExtractor:X,onChange:()=>{},measureElement:Z,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,anchorTo:"start",followOnAppend:!1,scrollEndThreshold:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:"estimate",useCachedMeasurements:!1};for(const u in t){const g=t[u];g!==void 0&&(i[u]=g)}const o=this.options;let n=null,r=null,a=!1;if(o!==void 0&&o.enabled&&i.enabled&&i.anchorTo==="end"&&this.scrollElement!==null){const u=o.count,g=i.count,S=this.getMeasurements(),E=u>0?((e=S[0])==null?void 0:e.key)??o.getItemKey(0):null,O=u>0?((s=S[u-1])==null?void 0:s.key)??o.getItemKey(u-1):null;if(g!==u||u>0&&g>0&&(i.getItemKey(0)!==E||i.getItemKey(g-1)!==O)){a=!0;const b=u>0?this.getVirtualItemForOffset(this.getScrollOffset())??S[0]:null;b&&(n=[b.key,this.getScrollOffset()-b.start]);const v=i.followOnAppend===!0?"auto":i.followOnAppend||null;v&&g>u&&this.isAtEnd(o.scrollEndThreshold)&&(u===0||i.getItemKey(g-1)!==O)&&(r=v)}}this.options=i,a&&(this.pendingMin=0,this.itemSizeCacheVersion++);let d=!1,m=0;if(n&&this.scrollOffset!==null){const[u,g]=n,S=this.getMeasurements(),{count:E,getItemKey:O}=this.options;let c=0;for(;c<E&&O(c)!==u;)c++;if(c<E){const f=S[c];if(f){const b=f.start+g;b!==this.scrollOffset&&(m=b-this.scrollOffset,this.scrollOffset=b,d=!0)}}}(d||r)&&(this.pendingScrollAnchor=[d?n[0]:null,d?n[1]:0,r,m])},this.notify=t=>{var e,s;(s=(e=this.options).onChange)==null||s.call(e,this,t)},this.maybeNotify=w(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),t=>{this.notify(t)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(t=>t()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var t;const e=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==e){if(this.cleanup(),!e){this.maybeNotify();return}if(this.scrollElement=e,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((t=this.scrollElement)==null?void 0:t.window)??null,this.elementsCache.forEach(i=>{this.observer.observe(i)}),this.unsubs.push(this.options.observeElementRect(this,i=>{this.scrollRect=i,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(i,o)=>{if(o&&this._intendedScrollOffset===null&&i===this.scrollOffset)return;this._intendedScrollOffset!==null&&Math.abs(i-this._intendedScrollOffset)<1.5&&(i=this._intendedScrollOffset),this._intendedScrollOffset=null,this.scrollAdjustments=0;const n=this.getScrollOffset();this.scrollDirection=o?n===i?this.scrollDirection:n<i?"forward":"backward":null,this.scrollOffset=i,this.isScrolling=o,this._flushIosDeferredIfReady(),this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),"addEventListener"in this.scrollElement){const i=this.scrollElement,o=()=>{this._iosTouching=!0,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)},n=()=>{this._iosTouching=!1,!(!R()||this.targetWindow==null)&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};i.addEventListener("touchstart",o,A),i.addEventListener("touchend",n,A),this.unsubs.push(()=>{i.removeEventListener("touchstart",o),i.removeEventListener("touchend",n),this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)})}this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}const s=this.pendingScrollAnchor;if(this.pendingScrollAnchor=null,s&&this.scrollElement&&this.options.enabled){const[i,o,n,r]=s;i!==null&&!n&&(R()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?r!==0&&(this._iosDeferredAdjustment+=r):this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})),n&&this.scrollToEnd({behavior:n})}},this._flushIosDeferredIfReady=()=>{if(this._iosDeferredAdjustment===0||this.isScrolling||this._iosTouching||this._iosJustTouchEnded)return;const t=this.getScrollOffset(),e=this.getMaxScrollOffset();if(t<0||t>e)return;const s=this._iosDeferredAdjustment;this._iosDeferredAdjustment=0,this._scrollToOffset(t,{adjustments:this.scrollAdjustments+=s,behavior:void 0})},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getMeasurementOptions=w(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode,this.options.gap],(t,e,s,i,o,n,r,a)=>(this.prevLanes!==void 0&&this.prevLanes!==n&&(this.lanesChangedFlag=!0),this.prevLanes=n,this.pendingMin=null,{count:t,paddingStart:e,scrollMargin:s,getItemKey:i,enabled:o,lanes:n,laneAssignmentMode:r,gap:a}),{key:!1}),this.getMeasurements=w(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:t,paddingStart:e,scrollMargin:s,getItemKey:i,enabled:o,lanes:n,laneAssignmentMode:r,gap:a},d)=>{const m=this.itemSizeCache;if(!o)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>t)for(const c of this.laneAssignments.keys())c>=t&&this.laneAssignments.delete(c);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMin=null),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(c=>{this.itemSizeCache.set(c.key,c.size)}));const u=this.lanesSettling?0:this.pendingMin??0;if(this.pendingMin=null,this.lanesSettling&&this.measurementsCache.length===t&&(this.lanesSettling=!1),n===1){const c=t*2;let f=this._flatMeasurements;if(!f||f.length<c){const p=new Float64Array(c);f&&u>0&&p.set(f.subarray(0,u*2)),f=p,this._flatMeasurements=f}let b;if(u===0)b=e+s;else{const p=u-1;b=f[p*2]+f[p*2+1]+a}for(let p=u;p<t;p++){const T=i(p),x=m.get(T),z=typeof x=="number"?x:this.options.estimateSize(p);f[p*2]=b,f[p*2+1]=z,b+=z+a}const v=H(t,f,i);return this.measurementsCache=v,v}const g=this.measurementsCache.slice(0,u),S=new Array(n).fill(void 0),E=new Float64Array(n);let O=0;for(let c=0;c<u;c++){const f=g[c];f&&(S[f.lane]===void 0&&O++,S[f.lane]=c,E[f.lane]=f.end)}for(let c=u;c<t;c++){const f=i(c),b=this.laneAssignments.get(c);let v,p;const T=r==="estimate"||m.has(f);if(b!==void 0&&this.options.lanes>1){v=b;const y=S[v],I=y!==void 0?g[y]:void 0;p=I?I.end+a:e+s}else if(O===n){let y=0,I=E[0],D=S[0];for(let _=1;_<n;_++){const F=E[_];(F<I||F===I&&S[_]<D)&&(y=_,I=F,D=S[_])}v=y,p=I+a,T&&this.laneAssignments.set(c,v)}else v=c%this.options.lanes,p=e+s,T&&this.laneAssignments.set(c,v);const x=m.get(f),z=typeof x=="number"?x:this.options.estimateSize(c),k=p+z;g[c]={index:c,start:p,size:z,end:k,key:f,lane:v},S[v]===void 0&&O++,S[v]=c,E[v]=k}return this.measurementsCache=g,g},{key:!1,debug:()=>this.options.debug}),this.calculateRange=w(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(t,e,s,i)=>t.length===0||e===0?(this.range=null,null):(this.range=nt(t,e,s,i,i===1&&this._flatMeasurements!=null?this._flatMeasurements:null),this.range),{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=w(()=>{let t=null,e=null;const s=this.calculateRange();return s&&(t=s.startIndex,e=s.endIndex),this.maybeNotify.updateDeps([this.isScrolling,t,e]),[this.options.rangeExtractor,this.options.overscan,this.options.count,t,e]},(t,e,s,i,o)=>i===null||o===null?[]:t({startIndex:i,endIndex:o,overscan:e,count:s}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=t=>{const e=this.options.indexAttribute,s=t.getAttribute(e);return s?parseInt(s,10):(console.warn(`Missing attribute name '${e}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=t=>{var e;if(!this.scrollState||this.scrollState.behavior!=="smooth")return!0;const s=this.scrollState.index??((e=this.getVirtualItemForOffset(this.scrollState.lastTargetOffset))==null?void 0:e.index);if(s!==void 0&&this.range){const i=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),o=Math.max(0,s-i),n=Math.min(this.options.count-1,s+i);return t>=o&&t<=n}return!0},this.measureElement=t=>{if(!t){this.elementsCache.forEach((o,n)=>{o.isConnected||(this.observer.unobserve(o),this.elementsCache.delete(n))});return}const e=this.indexFromElement(t),s=this.options.getItemKey(e),i=this.elementsCache.get(s);i!==t&&(i&&this.observer.unobserve(i),this.observer.observe(t),this.elementsCache.set(s,t)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(e)&&this.resizeItem(e,this.options.measureElement(t,void 0,this))},this.resizeItem=(t,e)=>{var s,i;if(t<0||t>=this.options.count)return;let o,n,r;const a=this._flatMeasurements;if(this.options.lanes===1&&a!==null)r=this.options.getItemKey(t),n=a[t*2],o=a[t*2+1];else{const u=this.measurementsCache[t];if(!u)return;r=u.key,n=u.start,o=u.size}const d=this.itemSizeCache.get(r)??o,m=e-d;if(m!==0){const u=this.options.anchorTo==="end"&&((s=this.scrollState)==null?void 0:s.behavior)!=="smooth"&&this.getVirtualDistanceFromEnd()<=this.options.scrollEndThreshold,g=u?this.getTotalSize():0,S=((i=this.scrollState)==null?void 0:i.behavior)!=="smooth"&&(this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(this.measurementsCache[t]??{index:t,key:r,start:n,size:o,end:n+o,lane:0},m,this):n<this.getScrollOffset()+this.scrollAdjustments&&(!this.itemSizeCache.has(r)||this.scrollDirection!=="backward"));(this.pendingMin===null||t<this.pendingMin)&&(this.pendingMin=t),this.itemSizeCache.set(r,e),this.itemSizeCacheVersion++,u?this.applyScrollAdjustment(this.getTotalSize()-g):S&&this.applyScrollAdjustment(m),this.notify(!1)}},this.getVirtualItems=w(()=>[this.getVirtualIndexes(),this.getMeasurements()],(t,e)=>{const s=[];for(let i=0,o=t.length;i<o;i++){const n=t[i],r=e[n];s.push(r)}return s},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=t=>{const e=this.getMeasurements();if(e.length===0)return;const s=this._flatMeasurements,i=this.options.lanes===1&&s!=null,o=K(0,e.length-1,i?n=>s[n*2]:n=>L(e[n]).start,t);return L(e[o])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if("scrollHeight"in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{const t=this.scrollElement.document.documentElement;return this.options.horizontal?t.scrollWidth-this.scrollElement.innerWidth:t.scrollHeight-this.scrollElement.innerHeight}},this.getVirtualDistanceFromEnd=()=>Math.max(this.getTotalSize()-this.getSize()-this.getScrollOffset(),0),this.getDistanceFromEnd=()=>Math.max(this.getMaxScrollOffset()-this.getScrollOffset(),0),this.isAtEnd=(t=this.options.scrollEndThreshold)=>this.getDistanceFromEnd()<=t,this.getOffsetForAlignment=(t,e,s=0)=>{if(!this.scrollElement)return 0;const i=this.getSize(),o=this.getScrollOffset();e==="auto"&&(e=t>=o+i?"end":"start"),e==="center"?t+=(s-i)/2:e==="end"&&(t-=i);const n=this.getMaxScrollOffset();return Math.max(Math.min(n,t),0)},this.getOffsetForIndex=(t,e="auto")=>{t=Math.max(0,Math.min(t,this.options.count-1));const s=this.getSize(),i=this.getScrollOffset(),o=this.measurementsCache[t];if(!o)return;if(e==="auto")if(o.end>=i+s-this.options.scrollPaddingEnd)e="end";else if(o.start<=i+this.options.scrollPaddingStart)e="start";else return[i,e];if(e==="end"&&t===this.options.count-1)return[this.getMaxScrollOffset(),e];const n=e==="end"?o.end+this.options.scrollPaddingEnd:o.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(n,e,o.size),e]},this.scrollToOffset=(t,{align:e="start",behavior:s="auto"}={})=>{const i=this.getOffsetForAlignment(t,e),o=this.now();this.scrollState={index:null,align:e,behavior:s,startedAt:o,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:s}),this.scheduleScrollReconcile()},this.scrollToIndex=(t,{align:e="auto",behavior:s="auto"}={})=>{t=Math.max(0,Math.min(t,this.options.count-1));const i=this.getOffsetForIndex(t,e);if(!i)return;const[o,n]=i,r=this.now();this.scrollState={index:t,align:n,behavior:s,startedAt:r,lastTargetOffset:o,stableFrames:0},this._scrollToOffset(o,{adjustments:void 0,behavior:s}),this.scheduleScrollReconcile()},this.scrollBy=(t,{behavior:e="auto"}={})=>{const s=this.getScrollOffset()+t,i=this.now();this.scrollState={index:null,align:"start",behavior:e,startedAt:i,lastTargetOffset:s,stableFrames:0},this._scrollToOffset(s,{adjustments:void 0,behavior:e}),this.scheduleScrollReconcile()},this.scrollToEnd=({behavior:t="auto"}={})=>{if(this.options.count>0){this.scrollToIndex(this.options.count-1,{align:"end",behavior:t});return}this.scrollToOffset(Math.max(this.getTotalSize()-this.getSize(),0),{behavior:t})},this.getTotalSize=()=>{var t;const e=this.getMeasurements();let s;if(e.length===0)s=this.options.paddingStart;else if(this.options.lanes===1){const i=e.length-1,o=this._flatMeasurements;o!=null?s=o[i*2]+o[i*2+1]:s=((t=e[i])==null?void 0:t.end)??0}else{const i=Array(this.options.lanes).fill(null);let o=e.length-1;for(;o>=0&&i.some(n=>n===null);){const n=e[o];i[n.lane]===null&&(i[n.lane]=n.end),o--}s=Math.max(...i.filter(n=>n!==null))}return Math.max(s-this.options.scrollMargin+this.options.paddingEnd,0)},this.takeSnapshot=()=>{const t=[];if(this.itemSizeCache.size===0)return t;const e=this.getMeasurements();for(const s of e)s&&this.itemSizeCache.has(s.key)&&t.push({index:s.index,key:s.key,start:s.start,size:s.size,end:s.end,lane:s.lane});return t},this._scrollToOffset=(t,{adjustments:e,behavior:s})=>{this._intendedScrollOffset=t+(e??0),this.options.scrollToFn(t,{behavior:s,adjustments:e},this)},this.measure=()=>{this.pendingMin=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.itemSizeCacheVersion++,this.notify(!1)},this.setOptions(h)}applyScrollAdjustment(h,t){h!==0&&(R()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?this._iosDeferredAdjustment+=h:(this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=h,behavior:t}),this.scrollOffset!==null&&(this.scrollOffset+=this.scrollAdjustments,this.scrollAdjustments=0)))}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId==null&&(this.rafId=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()}))}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}const e=this.scrollState.index!=null?this.getOffsetForIndex(this.scrollState.index,this.scrollState.align):void 0,s=e?e[0]:this.scrollState.lastTargetOffset,i=1,o=s!==this.scrollState.lastTargetOffset;if(!o&&J(s,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=i){this.getScrollOffset()!==s&&this._scrollToOffset(s,{adjustments:void 0,behavior:"auto"}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,o){const n=this.getSize()||600,r=Math.abs(s-this.getScrollOffset()),a=this.scrollState.behavior==="smooth"&&r>n;this.scrollState.lastTargetOffset=s,a||(this.scrollState.behavior="auto"),this._scrollToOffset(s,{adjustments:void 0,behavior:a?"smooth":"auto"})}this.scheduleScrollReconcile()}}const K=(l,h,t,e)=>{for(;l<=h;){const s=(l+h)/2|0,i=t(s);if(i<e)l=s+1;else if(i>e)h=s-1;else return s}return l>0?l-1:0};function it(l,h,t){let e=0;for(;e<=h;){const s=(e+h)/2|0,i=l[s*2];if(i<t)e=s+1;else if(i>t)h=s-1;else return s}return e>0?e-1:0}function nt(l,h,t,e,s){const i=l.length-1;if(l.length<=e)return{startIndex:0,endIndex:i};if(e===1&&s!==null){const a=it(s,i,t);let d=a;const m=t+h;for(;d<i&&s[d*2]+s[d*2+1]<m;)d++;return{startIndex:a,endIndex:d}}let n=K(0,i,a=>l[a].start,t),r=n;if(e===1)for(;r<i&&l[r].end<t+h;)r++;else if(e>1){const a=Array(e).fill(0);for(;r<i&&a.some(m=>m<t+h);){const m=l[r];a[m.lane]=m.end,r++}const d=Array(e).fill(t+h);for(;n>=0&&d.some(m=>m>=t);){const m=l[n];d[m.lane]=m.start,n--}n=Math.max(0,n-n%e),r=Math.min(i,r+(e-1-r%e))}return{startIndex:n,endIndex:r}}function ot(l){const h=new st(C(l)),t=P(h),e=h._didMount();return W(()=>C(l).getScrollElement(),s=>{s&&h._willUpdate()},{immediate:!0}),W(()=>C(l),s=>{h.setOptions({...s,onChange:(i,o)=>{var n;j(t),(n=s.onChange)==null||n.call(s,i,o)}}),h._willUpdate(),j(t)},{immediate:!0}),N(e),t}function rt(l){return ot(B(()=>({observeElementRect:$,observeElementOffset:Y,scrollToFn:et,...C(l)})))}export{rt as u};