@piwitests/server 0.19.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (732) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{279D2RYp.js → 9ti9eNH9.js} +1 -1
  3. package/.output/public/_nuxt/{DcmZRa_F.js → B-zdP-D4.js} +1 -1
  4. package/.output/public/_nuxt/{eaVkJRSa.js → B1RmmOsM.js} +1 -1
  5. package/.output/public/_nuxt/{DprVVyUQ.js → B3Fsod9X.js} +1 -1
  6. package/.output/public/_nuxt/{HXerICAi.js → B3rirOqU.js} +34 -34
  7. package/.output/public/_nuxt/B3zmIJYb.js +1 -0
  8. package/.output/public/_nuxt/{CDk0q2hV.js → BAKUqW95.js} +2 -2
  9. package/.output/public/_nuxt/BG0KKQiT.js +7 -0
  10. package/.output/public/_nuxt/BGL_V7Y4.js +1 -0
  11. package/.output/public/_nuxt/{Jo8kRmHz.js → BGusFAvZ.js} +1 -1
  12. package/.output/public/_nuxt/{CGNkHojN.js → BNurUTla.js} +3 -3
  13. package/.output/public/_nuxt/BR5cR2Ot.js +1 -0
  14. package/.output/public/_nuxt/BTCh_0zN.js +1 -0
  15. package/.output/public/_nuxt/{ZFiQCMUB.js → BTVqMsA3.js} +1 -1
  16. package/.output/public/_nuxt/{BqV0l12c.js → B_13C0GF.js} +1 -1
  17. package/.output/public/_nuxt/BeDIjhoR.js +44 -0
  18. package/.output/public/_nuxt/{BDicZ1gQ.js → BerCW7Ug.js} +1 -1
  19. package/.output/public/_nuxt/BfTNbVc_.js +1 -0
  20. package/.output/public/_nuxt/BnbSEpXX.js +1 -0
  21. package/.output/public/_nuxt/Bo_dxehb.js +1 -0
  22. package/.output/public/_nuxt/{ClOqkAcc.js → BpBHls4-.js} +1 -1
  23. package/.output/public/_nuxt/{C7P1UCO2.js → BpM6ZPIG.js} +1 -1
  24. package/.output/public/_nuxt/BqGumsDo.js +4 -0
  25. package/.output/public/_nuxt/{DS636elg.js → BrxtP_cN.js} +1 -1
  26. package/.output/public/_nuxt/{YVN7WG7q.js → C2hNxjjz.js} +1 -1
  27. package/.output/public/_nuxt/C5PSqfKi.js +2 -0
  28. package/.output/public/_nuxt/C5vsaU4G.js +1 -0
  29. package/.output/public/_nuxt/C9sdHaXd.js +1 -0
  30. package/.output/public/_nuxt/{SfMRXW25.js → CAxgBYIt.js} +2 -2
  31. package/.output/public/_nuxt/{CZfMdzfk.js → CES2i5Pl.js} +1 -1
  32. package/.output/public/_nuxt/{BX9ZXe98.js → CFEdRqaj.js} +1 -1
  33. package/.output/public/_nuxt/{B44A4LSJ.js → CFTZwazK.js} +1 -1
  34. package/.output/public/_nuxt/CIBS7ye6.js +1 -0
  35. package/.output/public/_nuxt/CIEceDOw.js +1 -0
  36. package/.output/public/_nuxt/{DHDtnj7p.js → CJBhojV6.js} +1 -1
  37. package/.output/public/_nuxt/{BPQoBGg5.js → CKYddHa6.js} +1 -1
  38. package/.output/public/_nuxt/{BccXfBfI.js → CLVWiCds.js} +1 -1
  39. package/.output/public/_nuxt/{DX-MDGb3.js → CMYAryzi.js} +1 -1
  40. package/.output/public/_nuxt/{BuMC3WjZ.js → COhdybDy.js} +1 -1
  41. package/.output/public/_nuxt/{Bu2aaVIY.js → CRBXM2d6.js} +2 -2
  42. package/.output/public/_nuxt/{BYDaY0Z7.js → CTD_pJ_v.js} +1 -1
  43. package/.output/public/_nuxt/{C9_jrmk9.js → CTP8Pw0-.js} +2 -2
  44. package/.output/public/_nuxt/{D55D4EYo.js → CV8iF2kG.js} +1 -1
  45. package/.output/public/_nuxt/{BCMuIgP5.js → CWKmbYlT.js} +1 -1
  46. package/.output/public/_nuxt/C_NfGMTd.js +9 -0
  47. package/.output/public/_nuxt/Cejoebel.js +6 -0
  48. package/.output/public/_nuxt/{Dnpkl-1q.js → Chpah_7l.js} +1 -1
  49. package/.output/public/_nuxt/Ci9d8YVV.js +1 -0
  50. package/.output/public/_nuxt/{C95YAaJq.js → CifRHVaR.js} +1 -1
  51. package/.output/public/_nuxt/{BMvCSA6h.js → Ckgsh9AT.js} +1 -1
  52. package/.output/public/_nuxt/{eptP4pGv.js → Cpsq-kYE.js} +1 -1
  53. package/.output/public/_nuxt/Cqc-DSTF.js +1 -0
  54. package/.output/public/_nuxt/{KnfsST6Y.js → CsHulb12.js} +1 -1
  55. package/.output/public/_nuxt/Ctb2CqUf.js +5 -0
  56. package/.output/public/_nuxt/CtstIQSh.js +1 -0
  57. package/.output/public/_nuxt/{DGfAxLHV.js → CvMzDKvu.js} +1 -1
  58. package/.output/public/_nuxt/{fVcG504p.js → D2pBhsH8.js} +1 -1
  59. package/.output/public/_nuxt/{rWNTSFD6.js → D8gX1Jde.js} +3 -3
  60. package/.output/public/_nuxt/D9knOn6D.js +1 -0
  61. package/.output/public/_nuxt/DAPTVdvA.js +1 -0
  62. package/.output/public/_nuxt/{NQikbhmK.js → DCFbQvIN.js} +44 -43
  63. package/.output/public/_nuxt/DCoJlz_q.js +1 -0
  64. package/.output/public/_nuxt/DGnQ69wW.js +64 -0
  65. package/.output/public/_nuxt/{CTxDO9fB.js → DHzij16p.js} +1 -1
  66. package/.output/public/_nuxt/DJMCXRuW.js +5 -0
  67. package/.output/public/_nuxt/DJXcGkJP.js +2 -0
  68. package/.output/public/_nuxt/{CK_2LZBS.js → DKFXZdWZ.js} +1 -1
  69. package/.output/public/_nuxt/{tvgqrYDd.js → DL24AjfW.js} +1 -1
  70. package/.output/public/_nuxt/DON74Yh6.js +1 -0
  71. package/.output/public/_nuxt/{CHEFCN8Q.js → DQM62mxB.js} +1 -1
  72. package/.output/public/_nuxt/DSe8DxMl.js +1 -0
  73. package/.output/public/_nuxt/DWwiVTZX.js +24 -0
  74. package/.output/public/_nuxt/DX4tAP78.js +1 -0
  75. package/.output/public/_nuxt/{DLSrtpsA.js → D_eDAIsT.js} +1 -1
  76. package/.output/public/_nuxt/Da8A92cF.js +1 -0
  77. package/.output/public/_nuxt/{BxCKKeYs.js → DdH3op4b.js} +1 -1
  78. package/.output/public/_nuxt/DepFDZO3.js +1 -0
  79. package/.output/public/_nuxt/{CV9-fTmY.js → DfSBKzrC.js} +1 -1
  80. package/.output/public/_nuxt/{DT53RWbC.js → DfnKh3dZ.js} +1 -1
  81. package/.output/public/_nuxt/{ndShiWE8.js → DhpTfeip.js} +1 -1
  82. package/.output/public/_nuxt/{ybDYeNxd.js → Dk9nD32g.js} +1 -1
  83. package/.output/public/_nuxt/{D0HNloZ9.js → DkT2nCqn.js} +1 -1
  84. package/.output/public/_nuxt/DlW85lQq.js +4 -0
  85. package/.output/public/_nuxt/DnNio-ut.js +1 -0
  86. package/.output/public/_nuxt/{BfTuX0wq.js → DnQv_hst.js} +1 -1
  87. package/.output/public/_nuxt/{FUXhyidq.js → DqEOMteW.js} +1 -1
  88. package/.output/public/_nuxt/{Bti38m-M.js → Dsvu7YJT.js} +1 -1
  89. package/.output/public/_nuxt/DvhCDBrR.js +2 -0
  90. package/.output/public/_nuxt/DwQaVMZR.js +1 -0
  91. package/.output/public/_nuxt/E-_n_6vi.js +1 -0
  92. package/.output/public/_nuxt/{DP8hfJ9h.js → Ebw5l7n8.js} +1 -1
  93. package/.output/public/_nuxt/{nv9-6vBK.js → IPePdbzl.js} +1 -1
  94. package/.output/public/_nuxt/{BPRffDuo.js → LHoUGrfi.js} +1 -1
  95. package/.output/public/_nuxt/{CYsTqbBS.js → NERLHpOL.js} +1 -1
  96. package/.output/public/_nuxt/RAdNGxcF.js +1 -0
  97. package/.output/public/_nuxt/Vxyo_mU9.js +1 -0
  98. package/.output/public/_nuxt/{IvQlbZk6.js → YE1kAkU9.js} +1 -1
  99. package/.output/public/_nuxt/{DgE2YE3R.js → YmT5WiN5.js} +1 -1
  100. package/.output/public/_nuxt/ZcAfCxWE.js +17 -0
  101. package/.output/public/_nuxt/{cHAnlQbv.js → _rglcvXN.js} +1 -1
  102. package/.output/public/_nuxt/bFU9Y1Vw.js +10 -0
  103. package/.output/public/_nuxt/bfecIH89.js +1 -0
  104. package/.output/public/_nuxt/builds/latest.json +1 -1
  105. package/.output/public/_nuxt/builds/meta/31ca2be4-a949-4df6-9818-773fc085557a.json +1 -0
  106. package/.output/public/_nuxt/entry.BAvBQY-h.css +1 -0
  107. package/.output/public/_nuxt/four-S1Y.js +1 -0
  108. package/.output/public/_nuxt/{DiOLdHBC.js → gV2U_Gqd.js} +1 -1
  109. package/.output/public/_nuxt/{C-elpgyr.js → lGC893pn.js} +1 -1
  110. package/.output/public/_nuxt/nOfj-ar8.js +1 -0
  111. package/.output/public/_nuxt/oKrbs1XK.js +1 -0
  112. package/.output/public/_nuxt/oSJFAC38.js +1 -0
  113. package/.output/public/_nuxt/rL4C0HV5.js +1 -0
  114. package/.output/public/_nuxt/{Cdff9XNh.js → tQoyVPCE.js} +1 -1
  115. package/.output/public/_nuxt/{DEFEpYzn.js → uSPCvASp.js} +1 -1
  116. package/.output/public/_nuxt/{y17lMTFy.js → wkz5-1SO.js} +1 -1
  117. package/.output/public/_nuxt/yYlVYKCz.js +34 -0
  118. package/.output/public/_nuxt/{B9WhzpKO.js → zv8WdMx0.js} +1 -1
  119. package/.output/server/chunks/_/collect.mjs +1 -1
  120. package/.output/server/chunks/_/markers.mjs +1 -1
  121. package/.output/server/chunks/_/quarantine.mjs +1 -1
  122. package/.output/server/chunks/_/scope.mjs +43 -27
  123. package/.output/server/chunks/_/scope.mjs.map +1 -1
  124. package/.output/server/chunks/_/users.mjs +1 -1
  125. package/.output/server/chunks/build/{Breadcrumb-Ak2Lg3oM.mjs → Breadcrumb-3itRZ1uz.mjs} +2 -2
  126. package/.output/server/chunks/build/Breadcrumb-3itRZ1uz.mjs.map +1 -0
  127. package/.output/server/chunks/build/{BreadcrumbNav-DO7I_z-n.mjs → BreadcrumbNav-GnjBvXuT.mjs} +2 -2
  128. package/.output/server/chunks/build/BreadcrumbNav-GnjBvXuT.mjs.map +1 -0
  129. package/.output/server/chunks/build/{BrowserBadge-D33lqUcj.mjs → BrowserBadge-DQqJS9CV.mjs} +66 -6
  130. package/.output/server/chunks/build/BrowserBadge-DQqJS9CV.mjs.map +1 -0
  131. package/.output/server/chunks/build/{ChartCard-Y1UKwMsf.mjs → ChartCard-D0rzMf-N.mjs} +2 -2
  132. package/.output/server/chunks/build/ChartCard-D0rzMf-N.mjs.map +1 -0
  133. package/.output/server/chunks/build/{Checkbox-DvUBGagc.mjs → Checkbox-DmRKG-0s.mjs} +5 -5
  134. package/.output/server/chunks/build/Checkbox-DmRKG-0s.mjs.map +1 -0
  135. package/.output/server/chunks/build/{CodeBlock-BgE-NSmE.mjs → CodeBlock-DGhKVFad.mjs} +4 -4
  136. package/.output/server/chunks/build/CodeBlock-DGhKVFad.mjs.map +1 -0
  137. package/.output/server/chunks/build/{DashboardNavbar-BHmMSPX7.mjs → DashboardNavbar-DCr10nxL.mjs} +2 -2
  138. package/.output/server/chunks/build/DashboardNavbar-DCr10nxL.mjs.map +1 -0
  139. package/.output/server/chunks/build/{DashboardSidebarToggle-DCTnHiIv.mjs → DashboardSidebarToggle-8EpBhX0R.mjs} +3 -3
  140. package/.output/server/chunks/build/DashboardSidebarToggle-8EpBhX0R.mjs.map +1 -0
  141. package/.output/server/chunks/build/{DataLocationCard-B_YHdzSz.mjs → DataLocationCard-rzS-pgCP.mjs} +5 -5
  142. package/.output/server/chunks/build/DataLocationCard-rzS-pgCP.mjs.map +1 -0
  143. package/.output/server/chunks/build/{DiagnosisPanel-B646dK4p.mjs → DiagnosisPanel-BWTpoCKy.mjs} +8 -7
  144. package/.output/server/chunks/build/DiagnosisPanel-BWTpoCKy.mjs.map +1 -0
  145. package/.output/server/chunks/build/{useAiStatus-CWvIo32Q.mjs → DiagnosisResult-Br3qBLXe.mjs} +14 -36
  146. package/.output/server/chunks/build/DiagnosisResult-Br3qBLXe.mjs.map +1 -0
  147. package/.output/server/chunks/build/{DurationValue-D20oGbnc.mjs → DurationValue-CWKfjIF2.mjs} +2 -2
  148. package/.output/server/chunks/build/DurationValue-CWKfjIF2.mjs.map +1 -0
  149. package/.output/server/chunks/build/{EmptyState-Dtlab7S9.mjs → EmptyState-DC2q_7TD.mjs} +3 -3
  150. package/.output/server/chunks/build/EmptyState-DC2q_7TD.mjs.map +1 -0
  151. package/.output/server/chunks/build/{EntityLinks-D3fp57pR.mjs → EntityLinks-CF0xG3Y8.mjs} +6 -6
  152. package/.output/server/chunks/build/EntityLinks-CF0xG3Y8.mjs.map +1 -0
  153. package/.output/server/chunks/build/{EnvManagedBadge-Bg3FSiU1.mjs → EnvManagedBadge-UwD2b9v2.mjs} +3 -3
  154. package/.output/server/chunks/build/EnvManagedBadge-UwD2b9v2.mjs.map +1 -0
  155. package/.output/server/chunks/build/FeatureUnavailable-CwPms6X_.mjs +83 -0
  156. package/.output/server/chunks/build/FeatureUnavailable-CwPms6X_.mjs.map +1 -0
  157. package/.output/server/chunks/build/{FormField-B0HKsdMd.mjs → FormField-e7OnSKPM.mjs} +2 -2
  158. package/.output/server/chunks/build/FormField-e7OnSKPM.mjs.map +1 -0
  159. package/.output/server/chunks/build/GetStartedWizard-CB5v1Xzu.mjs +510 -0
  160. package/.output/server/chunks/build/GetStartedWizard-CB5v1Xzu.mjs.map +1 -0
  161. package/.output/server/chunks/build/{HelpHint-DrcIv-Oj.mjs → HelpHint-DjGrGFA7.mjs} +3 -3
  162. package/.output/server/chunks/build/HelpHint-DjGrGFA7.mjs.map +1 -0
  163. package/.output/server/chunks/build/{LoadingState-C3pBSuOO.mjs → LoadingState-B8v1nWJt.mjs} +3 -3
  164. package/.output/server/chunks/build/LoadingState-B8v1nWJt.mjs.map +1 -0
  165. package/.output/server/chunks/build/MetaStripGroup-dXXa_MzF.mjs +1205 -0
  166. package/.output/server/chunks/build/MetaStripGroup-dXXa_MzF.mjs.map +1 -0
  167. package/.output/server/chunks/build/{MiniRunBars-CZMugDrh.mjs → MiniRunBars-fgLMgRUp.mjs} +2 -2
  168. package/.output/server/chunks/build/MiniRunBars-fgLMgRUp.mjs.map +1 -0
  169. package/.output/server/chunks/build/{Modal-Ck2XLt8d.mjs → Modal-pSDlXzT3.mjs} +2 -2
  170. package/.output/server/chunks/build/Modal-pSDlXzT3.mjs.map +1 -0
  171. package/.output/server/chunks/build/{useSettingsNav-C3O866KC.mjs → NavigationMenu-cqpt11Ce.mjs} +6 -29
  172. package/.output/server/chunks/build/NavigationMenu-cqpt11Ce.mjs.map +1 -0
  173. package/.output/server/chunks/build/{OpenInIdeLink-C4MXA8ya.mjs → OpenInIdeLink-B9wvQkhy.mjs} +5 -5
  174. package/.output/server/chunks/build/{OpenInIdeLink-C4MXA8ya.mjs.map → OpenInIdeLink-B9wvQkhy.mjs.map} +1 -1
  175. package/.output/server/chunks/build/{ProjectTestCasesTable-CxfQ5wtN.mjs → ProjectTestCasesTable-BwHEtZTz.mjs} +19 -19
  176. package/.output/server/chunks/build/ProjectTestCasesTable-BwHEtZTz.mjs.map +1 -0
  177. package/.output/server/chunks/build/{RovingFocusItem-BJSzTBjy.mjs → RovingFocusItem--OEHI2P3.mjs} +2 -2
  178. package/.output/server/chunks/build/RovingFocusItem--OEHI2P3.mjs.map +1 -0
  179. package/.output/server/chunks/build/{RunReports-DFLv51TX.mjs → RunReports-BDRIWn3o.mjs} +3 -3
  180. package/.output/server/chunks/build/RunReports-BDRIWn3o.mjs.map +1 -0
  181. package/.output/server/chunks/build/{RunStatusBadge-FfGb6bkW.mjs → RunStatusBadge-CuTDknRJ.mjs} +2 -2
  182. package/.output/server/chunks/build/RunStatusBadge-CuTDknRJ.mjs.map +1 -0
  183. package/.output/server/chunks/build/{SectionCard-CN-v0FZ_.mjs → SectionCard-BW5Lynrr.mjs} +2 -2
  184. package/.output/server/chunks/build/SectionCard-BW5Lynrr.mjs.map +1 -0
  185. package/.output/server/chunks/build/{Select-CUqj50wi.mjs → Select-CVctwpib.mjs} +3 -3
  186. package/.output/server/chunks/build/Select-CVctwpib.mjs.map +1 -0
  187. package/.output/server/chunks/build/{SelectMenu-Db7osY7J.mjs → SelectMenu-XLVBEa11.mjs} +939 -7
  188. package/.output/server/chunks/build/{SelectMenu-Db7osY7J.mjs.map → SelectMenu-XLVBEa11.mjs.map} +1 -1
  189. package/.output/server/chunks/build/{SettingsField-D6iEYbEc.mjs → SettingsField-DvtRvI6O.mjs} +4 -4
  190. package/.output/server/chunks/build/SettingsField-DvtRvI6O.mjs.map +1 -0
  191. package/.output/server/chunks/build/{Slideover-DgCa80mf.mjs → Slideover-D270EZZD.mjs} +3 -3
  192. package/.output/server/chunks/build/Slideover-D270EZZD.mjs.map +1 -0
  193. package/.output/server/chunks/build/{StatTile-D61Vzo6e.mjs → StatTile-DpcVQFVI.mjs} +2 -26
  194. package/.output/server/chunks/build/StatTile-DpcVQFVI.mjs.map +1 -0
  195. package/.output/server/chunks/build/StatTileGrid-7zOFUQ6j.mjs +30 -0
  196. package/.output/server/chunks/build/StatTileGrid-7zOFUQ6j.mjs.map +1 -0
  197. package/.output/server/chunks/build/{Switch-CgUioOYB.mjs → Switch-8zWfwI5B.mjs} +3 -3
  198. package/.output/server/chunks/build/Switch-8zWfwI5B.mjs.map +1 -0
  199. package/.output/server/chunks/build/Table-BRk04Hd2.mjs +1 -1
  200. package/.output/server/chunks/build/{Tabs-Bbsg9wag.mjs → Tabs-BkSOnbaB.mjs} +2 -2
  201. package/.output/server/chunks/build/Tabs-BkSOnbaB.mjs.map +1 -0
  202. package/.output/server/chunks/build/{TestCaseHistoryChart-nMLPhdvD.mjs → TestCaseHistoryChart-C6t5RrCG.mjs} +6 -6
  203. package/.output/server/chunks/build/TestCaseHistoryChart-C6t5RrCG.mjs.map +1 -0
  204. package/.output/server/chunks/build/{TestMetaBadges-D5_yUtIP.mjs → TestMetaBadges-BlyKmfeP.mjs} +1 -1
  205. package/.output/server/chunks/build/TestMetaBadges-BlyKmfeP.mjs.map +1 -0
  206. package/.output/server/chunks/build/{TestStatusBar-j6h2Jp6A.mjs → TestStatusBar-DhbrM_rQ.mjs} +4 -4
  207. package/.output/server/chunks/build/TestStatusBar-DhbrM_rQ.mjs.map +1 -0
  208. package/.output/server/chunks/build/{Textarea-Dv2-lOvW.mjs → Textarea-vkMKVQTJ.mjs} +2 -2
  209. package/.output/server/chunks/build/Textarea-vkMKVQTJ.mjs.map +1 -0
  210. package/.output/server/chunks/build/{Tooltip-BOazooWP.mjs → Tooltip-Dv4htNP6.mjs} +3 -3
  211. package/.output/server/chunks/build/Tooltip-Dv4htNP6.mjs.map +1 -0
  212. package/.output/server/chunks/build/{VisuallyHiddenInput-D6kBJxVd.mjs → VisuallyHiddenInput-BHvzNumK.mjs} +2 -2
  213. package/.output/server/chunks/build/VisuallyHiddenInput-BHvzNumK.mjs.map +1 -0
  214. package/.output/server/chunks/build/{_id_-z5N6HPyC.mjs → _id_-2PMH6rl8.mjs} +26 -25
  215. package/.output/server/chunks/build/_id_-2PMH6rl8.mjs.map +1 -0
  216. package/.output/server/chunks/build/{_id_-BHh65pfg.mjs → _id_-8cGIgeg6.mjs} +1912 -1098
  217. package/.output/server/chunks/build/_id_-8cGIgeg6.mjs.map +1 -0
  218. package/.output/server/chunks/build/{_id_-Rzkqx55x.mjs → _id_-CUZ5S6y5.mjs} +43 -44
  219. package/.output/server/chunks/build/_id_-CUZ5S6y5.mjs.map +1 -0
  220. package/.output/server/chunks/build/{_id_-B78ky13D.mjs → _id_-DMkgWSLZ.mjs} +956 -429
  221. package/.output/server/chunks/build/_id_-DMkgWSLZ.mjs.map +1 -0
  222. package/.output/server/chunks/build/about-D3WXTDro.mjs +696 -0
  223. package/.output/server/chunks/build/about-D3WXTDro.mjs.map +1 -0
  224. package/.output/server/chunks/build/{account-DAfvaD-F.mjs → account-BslDNCoo.mjs} +6 -6
  225. package/.output/server/chunks/build/account-BslDNCoo.mjs.map +1 -0
  226. package/.output/server/chunks/build/{ai-B4VJ9K1K.mjs → ai-C23R9l94.mjs} +18 -18
  227. package/.output/server/chunks/build/{ai-B4VJ9K1K.mjs.map → ai-C23R9l94.mjs.map} +1 -1
  228. package/.output/server/chunks/build/{analytics-CJPC6t4L.mjs → analytics-DQHeToK0.mjs} +106 -80
  229. package/.output/server/chunks/build/analytics-DQHeToK0.mjs.map +1 -0
  230. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  231. package/.output/server/chunks/build/compare-RxHSOdsO.mjs +1 -0
  232. package/.output/server/chunks/build/{db.client-CQoVTYB9.mjs → db.client-D74DghqX.mjs} +38 -2
  233. package/.output/server/chunks/build/db.client-D74DghqX.mjs.map +1 -0
  234. package/.output/server/chunks/build/{default-zvbFgDJG.mjs → default-CeyePZ5I.mjs} +624 -79
  235. package/.output/server/chunks/build/default-CeyePZ5I.mjs.map +1 -0
  236. package/.output/server/chunks/build/{docs-DyuVEgtB.mjs → docs-f_bnC75q.mjs} +17 -17
  237. package/.output/server/chunks/build/{docs-DyuVEgtB.mjs.map → docs-f_bnC75q.mjs.map} +1 -1
  238. package/.output/server/chunks/build/{edit-CFR5g2Qf.mjs → edit-BOC4zWuH.mjs} +13 -15
  239. package/.output/server/chunks/build/edit-BOC4zWuH.mjs.map +1 -0
  240. package/.output/server/chunks/build/{fetch-B4FwBOzu.mjs → fetch-BQg_fhX0.mjs} +32 -4
  241. package/.output/server/chunks/build/fetch-BQg_fhX0.mjs.map +1 -0
  242. package/.output/server/chunks/build/{forgot-password-CC__1OnV.mjs → forgot-password-CxuVbGWy.mjs} +4 -3
  243. package/.output/server/chunks/build/forgot-password-CxuVbGWy.mjs.map +1 -0
  244. package/.output/server/chunks/build/{import-CZo3djDi.mjs → import-CC27wEIu.mjs} +14 -14
  245. package/.output/server/chunks/build/import-CC27wEIu.mjs.map +1 -0
  246. package/.output/server/chunks/build/{index-gCw_y4ZJ.mjs → index-B6PjfyTY.mjs} +44 -543
  247. package/.output/server/chunks/build/index-B6PjfyTY.mjs.map +1 -0
  248. package/.output/server/chunks/build/{index-CU2nZhAa.mjs → index-BOK1aJk9.mjs} +2 -1
  249. package/.output/server/chunks/build/index-BOK1aJk9.mjs.map +1 -0
  250. package/.output/server/chunks/build/{index-D7fe97l3.mjs → index-BhS1DuCr.mjs} +400 -151
  251. package/.output/server/chunks/build/index-BhS1DuCr.mjs.map +1 -0
  252. package/.output/server/chunks/build/{index-Stqw0dEI.mjs → index-DUmjP3Gr.mjs} +18 -19
  253. package/.output/server/chunks/build/index-DUmjP3Gr.mjs.map +1 -0
  254. package/.output/server/chunks/build/index-jvF53f7_.mjs +91 -0
  255. package/.output/server/chunks/build/index-jvF53f7_.mjs.map +1 -0
  256. package/.output/server/chunks/build/isValueEqualOrExist-D2qw9YEr.mjs +1 -1
  257. package/.output/server/chunks/build/{login-Da4u1IlW.mjs → login-CdpOhiP8.mjs} +8 -7
  258. package/.output/server/chunks/build/login-CdpOhiP8.mjs.map +1 -0
  259. package/.output/server/chunks/build/{mcp-B3IUvRgD.mjs → mcp-WTeO5WRo.mjs} +528 -16
  260. package/.output/server/chunks/build/mcp-WTeO5WRo.mjs.map +1 -0
  261. package/.output/server/chunks/build/{notifications-abDv0id8.mjs → notifications-yY6ik-fi.mjs} +11 -11
  262. package/.output/server/chunks/build/notifications-yY6ik-fi.mjs.map +1 -0
  263. package/.output/server/chunks/build/{pr-feedback-DjZID6q-.mjs → pr-feedback-Hv2Ydh_6.mjs} +8 -8
  264. package/.output/server/chunks/build/pr-feedback-Hv2Ydh_6.mjs.map +1 -0
  265. package/.output/server/chunks/build/{reset-password-BmrUS4ZD.mjs → reset-password-CFtO8A6n.mjs} +4 -3
  266. package/.output/server/chunks/build/reset-password-CFtO8A6n.mjs.map +1 -0
  267. package/.output/server/chunks/build/server.mjs +51 -34
  268. package/.output/server/chunks/build/{settings-Du7YqF8i.mjs → settings-DIpvnY8_.mjs} +11 -9
  269. package/.output/server/chunks/build/settings-DIpvnY8_.mjs.map +1 -0
  270. package/.output/server/chunks/build/{settings-metadata-DrEqWcW-.mjs → settings-metadata-DRv9VveS.mjs} +32 -2
  271. package/.output/server/chunks/build/settings-metadata-DRv9VveS.mjs.map +1 -0
  272. package/.output/server/chunks/build/setup-Di0UMyWx.mjs +1116 -0
  273. package/.output/server/chunks/build/setup-Di0UMyWx.mjs.map +1 -0
  274. package/.output/server/chunks/build/{storage-B4vzxd8G.mjs → storage-gAbY1KbQ.mjs} +13 -13
  275. package/.output/server/chunks/build/storage-gAbY1KbQ.mjs.map +1 -0
  276. package/.output/server/chunks/build/{tags-DauTe_F-.mjs → tags-DJ80wCqt.mjs} +6 -7
  277. package/.output/server/chunks/build/tags-DJ80wCqt.mjs.map +1 -0
  278. package/.output/server/chunks/build/{test-cases-DUvaO1He.mjs → test-cases-YP83YlnL.mjs} +21 -21
  279. package/.output/server/chunks/build/test-cases-YP83YlnL.mjs.map +1 -0
  280. package/.output/server/chunks/build/test-functions-BwLTxGmM.mjs +550 -0
  281. package/.output/server/chunks/build/test-functions-BwLTxGmM.mjs.map +1 -0
  282. package/.output/server/chunks/build/{timeout-hygiene-CbnSaVbK.mjs → timeout-hygiene-RpXDjXTX.mjs} +6 -6
  283. package/.output/server/chunks/build/timeout-hygiene-RpXDjXTX.mjs.map +1 -0
  284. package/.output/server/chunks/build/useAiStatus-UR8x-feE.mjs +9 -0
  285. package/.output/server/chunks/build/useAiStatus-UR8x-feE.mjs.map +1 -0
  286. package/.output/server/chunks/build/{useCopyRich-BemRsKgv.mjs → useCopyRich-Cd5Yj_Wy.mjs} +721 -239
  287. package/.output/server/chunks/build/useCopyRich-Cd5Yj_Wy.mjs.map +1 -0
  288. package/.output/server/chunks/build/{useDesktopDownload-D49JRQSw.mjs → useDesktopDownload-BmR6ouz2.mjs} +3 -3
  289. package/.output/server/chunks/build/useDesktopDownload-BmR6ouz2.mjs.map +1 -0
  290. package/.output/server/chunks/build/{useOpenInIde-4GFf-kdi.mjs → useOpenInIde-DolN3bZ5.mjs} +2 -2
  291. package/.output/server/chunks/build/useOpenInIde-DolN3bZ5.mjs.map +1 -0
  292. package/.output/server/chunks/build/useSettingsNav-DfnOFlR_.mjs +19 -0
  293. package/.output/server/chunks/build/useSettingsNav-DfnOFlR_.mjs.map +1 -0
  294. package/.output/server/chunks/build/useTauri-Kf3HE_42.mjs +11 -0
  295. package/.output/server/chunks/build/useTauri-Kf3HE_42.mjs.map +1 -0
  296. package/.output/server/chunks/build/{users-CTUqXyGh.mjs → users-I2K7HXS2.mjs} +6 -7
  297. package/.output/server/chunks/build/users-I2K7HXS2.mjs.map +1 -0
  298. package/.output/server/chunks/build/{wasted-time-lYkx5YO4.mjs → wasted-time-DyIk0olc.mjs} +11 -11
  299. package/.output/server/chunks/build/wasted-time-DyIk0olc.mjs.map +1 -0
  300. package/.output/server/chunks/nitro/nitro.mjs +3124 -1782
  301. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  302. package/.output/server/chunks/routes/__piwi/session.get.mjs +2 -1
  303. package/.output/server/chunks/routes/__piwi/session.get.mjs.map +1 -1
  304. package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs +1 -0
  305. package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs.map +1 -1
  306. package/.output/server/chunks/routes/api/admin/stats.get.mjs +1 -0
  307. package/.output/server/chunks/routes/api/admin/stats.get.mjs.map +1 -1
  308. package/.output/server/chunks/routes/api/ai/status.get.mjs +1 -0
  309. package/.output/server/chunks/routes/api/ai/status.get.mjs.map +1 -1
  310. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +1 -0
  311. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs.map +1 -1
  312. package/.output/server/chunks/routes/api/auth/logout.post.mjs +1 -0
  313. package/.output/server/chunks/routes/api/auth/logout.post.mjs.map +1 -1
  314. package/.output/server/chunks/routes/api/auth/me.get.mjs +1 -0
  315. package/.output/server/chunks/routes/api/auth/me.get.mjs.map +1 -1
  316. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +1 -0
  317. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs.map +1 -1
  318. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +1 -0
  319. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs.map +1 -1
  320. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +1 -0
  321. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs.map +1 -1
  322. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +1 -0
  323. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs.map +1 -1
  324. package/.output/server/chunks/routes/api/auth/setup.get.mjs +1 -0
  325. package/.output/server/chunks/routes/api/auth/setup.get.mjs.map +1 -1
  326. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +1 -0
  327. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs.map +1 -1
  328. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +1 -0
  329. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs.map +1 -1
  330. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +1 -0
  331. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs.map +1 -1
  332. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +1 -0
  333. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs.map +1 -1
  334. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +1 -0
  335. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs.map +1 -1
  336. package/.output/server/chunks/routes/api/desktop/import-local.post.mjs +89 -0
  337. package/.output/server/chunks/routes/api/desktop/import-local.post.mjs.map +1 -0
  338. package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs +1 -0
  339. package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs.map +1 -1
  340. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +2 -1
  341. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs.map +1 -1
  342. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +2 -1
  343. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs.map +1 -1
  344. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +2 -1
  345. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs.map +1 -1
  346. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +2 -1
  347. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs.map +1 -1
  348. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +2 -1
  349. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs.map +1 -1
  350. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +2 -1
  351. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs.map +1 -1
  352. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +2 -1
  353. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs.map +1 -1
  354. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +2 -1
  355. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs.map +1 -1
  356. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +2 -1
  357. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs.map +1 -1
  358. package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs +2 -1
  359. package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs.map +1 -1
  360. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +2 -1
  361. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs.map +1 -1
  362. package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs +2 -1
  363. package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs.map +1 -1
  364. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +2 -1
  365. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs.map +1 -1
  366. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +2 -1
  367. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs.map +1 -1
  368. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +2 -1
  369. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs.map +1 -1
  370. package/.output/server/chunks/routes/api/files/_...path_.get.mjs +2 -1
  371. package/.output/server/chunks/routes/api/files/_...path_.get.mjs.map +1 -1
  372. package/.output/server/chunks/routes/api/health.get.mjs +2 -1
  373. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  374. package/.output/server/chunks/routes/api/index.get.mjs +1 -0
  375. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  376. package/.output/server/chunks/routes/api/index.get2.mjs +2 -1
  377. package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
  378. package/.output/server/chunks/routes/api/index.get3.mjs +2 -1
  379. package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
  380. package/.output/server/chunks/routes/api/index.get4.mjs +2 -1
  381. package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
  382. package/.output/server/chunks/routes/api/index.get5.mjs +1 -0
  383. package/.output/server/chunks/routes/api/index.get5.mjs.map +1 -1
  384. package/.output/server/chunks/routes/api/index.post2.mjs +1 -1
  385. package/.output/server/chunks/routes/api/index.post3.mjs +1 -1
  386. package/.output/server/chunks/routes/api/index.post4.mjs +1 -1
  387. package/.output/server/chunks/routes/api/index.post5.mjs +1 -1
  388. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +2 -1
  389. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs.map +1 -1
  390. package/.output/server/chunks/routes/api/links/_id_.delete.mjs +2 -1
  391. package/.output/server/chunks/routes/api/links/_id_.delete.mjs.map +1 -1
  392. package/.output/server/chunks/routes/api/links/_id_.patch.mjs +1 -1
  393. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +2 -1
  394. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs.map +1 -1
  395. package/.output/server/chunks/routes/api/markers/_id_.put.mjs +1 -1
  396. package/.output/server/chunks/routes/api/notifications/stream.get.mjs +2 -1
  397. package/.output/server/chunks/routes/api/notifications/stream.get.mjs.map +1 -1
  398. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +2 -1
  399. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs.map +1 -1
  400. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +2 -1
  401. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs.map +1 -1
  402. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +2 -1
  403. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs.map +1 -1
  404. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +2 -1
  405. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs.map +1 -1
  406. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +2 -1
  407. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs.map +1 -1
  408. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +2 -1
  409. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs.map +1 -1
  410. package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs +1 -1
  411. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +2 -1
  412. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs.map +1 -1
  413. package/.output/server/chunks/routes/api/projects/_id/members.put.mjs +1 -1
  414. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +2 -1
  415. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs.map +1 -1
  416. package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs +2 -1
  417. package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs.map +1 -1
  418. package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs +2 -1
  419. package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs.map +1 -1
  420. package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs +2 -1
  421. package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs.map +1 -1
  422. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +2 -1
  423. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs.map +1 -1
  424. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +2 -1
  425. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs.map +1 -1
  426. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +2 -1
  427. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs.map +1 -1
  428. package/.output/server/chunks/routes/api/projects/_id/test-functions/extract.post.mjs +76 -0
  429. package/.output/server/chunks/routes/api/projects/_id/test-functions/extract.post.mjs.map +1 -0
  430. package/.output/server/chunks/routes/api/projects/_id/test-functions/validate-proposal.post.mjs +66 -0
  431. package/.output/server/chunks/routes/api/projects/_id/test-functions/validate-proposal.post.mjs.map +1 -0
  432. package/.output/server/chunks/routes/api/projects/_id/test-functions.get.mjs +53 -0
  433. package/.output/server/chunks/routes/api/projects/_id/test-functions.get.mjs.map +1 -0
  434. package/.output/server/chunks/routes/api/projects/_id/test-functions.post.mjs +67 -0
  435. package/.output/server/chunks/routes/api/projects/_id/test-functions.post.mjs.map +1 -0
  436. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +2 -1
  437. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs.map +1 -1
  438. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +2 -1
  439. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs.map +1 -1
  440. package/.output/server/chunks/routes/api/projects/_id_.get.mjs +2 -1
  441. package/.output/server/chunks/routes/api/projects/_id_.get.mjs.map +1 -1
  442. package/.output/server/chunks/routes/api/projects/_id_.put.mjs +1 -1
  443. package/.output/server/chunks/routes/api/projects/menu.get.mjs +2 -1
  444. package/.output/server/chunks/routes/api/projects/menu.get.mjs.map +1 -1
  445. package/.output/server/chunks/routes/api/projects/overview.get.mjs +2 -1
  446. package/.output/server/chunks/routes/api/projects/overview.get.mjs.map +1 -1
  447. package/.output/server/chunks/routes/api/projects.get.mjs +2 -1
  448. package/.output/server/chunks/routes/api/projects.get.mjs.map +1 -1
  449. package/.output/server/chunks/routes/api/search.get.mjs +2 -1
  450. package/.output/server/chunks/routes/api/search.get.mjs.map +1 -1
  451. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +2 -1
  452. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs.map +1 -1
  453. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +2 -1
  454. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs.map +1 -1
  455. package/.output/server/chunks/routes/api/settings/ai/models.post.mjs +1 -0
  456. package/.output/server/chunks/routes/api/settings/ai/models.post.mjs.map +1 -1
  457. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +2 -1
  458. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs.map +1 -1
  459. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +2 -1
  460. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs.map +1 -1
  461. package/.output/server/chunks/routes/api/settings/ai.get.mjs +2 -1
  462. package/.output/server/chunks/routes/api/settings/ai.get.mjs.map +1 -1
  463. package/.output/server/chunks/routes/api/settings/ai.put.mjs +2 -1
  464. package/.output/server/chunks/routes/api/settings/ai.put.mjs.map +1 -1
  465. package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs +2 -1
  466. package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs.map +1 -1
  467. package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs +2 -1
  468. package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs.map +1 -1
  469. package/.output/server/chunks/routes/api/settings/smtp.get.mjs +2 -1
  470. package/.output/server/chunks/routes/api/settings/smtp.get.mjs.map +1 -1
  471. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +2 -1
  472. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs.map +1 -1
  473. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +2 -1
  474. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs.map +1 -1
  475. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +2 -1
  476. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs.map +1 -1
  477. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +2 -1
  478. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs.map +1 -1
  479. package/.output/server/chunks/routes/api/setup-status.get.mjs +99 -0
  480. package/.output/server/chunks/routes/api/setup-status.get.mjs.map +1 -0
  481. package/.output/server/chunks/routes/api/stream.get.mjs +2 -1
  482. package/.output/server/chunks/routes/api/stream.get.mjs.map +1 -1
  483. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +2 -1
  484. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs.map +1 -1
  485. package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +1 -1
  486. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +2 -1
  487. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs.map +1 -1
  488. package/.output/server/chunks/routes/api/tags/_id_.put.mjs +1 -1
  489. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +2 -1
  490. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs.map +1 -1
  491. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +2 -1
  492. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs.map +1 -1
  493. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +2 -1
  494. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs.map +1 -1
  495. package/.output/server/chunks/routes/api/test-functions/_id_.delete.mjs +60 -0
  496. package/.output/server/chunks/routes/api/test-functions/_id_.delete.mjs.map +1 -0
  497. package/.output/server/chunks/routes/api/test-functions/_id_.put.mjs +69 -0
  498. package/.output/server/chunks/routes/api/test-functions/_id_.put.mjs.map +1 -0
  499. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +2 -1
  500. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs.map +1 -1
  501. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +2 -1
  502. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs.map +1 -1
  503. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +2 -1
  504. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs.map +1 -1
  505. package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs +2 -1
  506. package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs.map +1 -1
  507. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +2 -1
  508. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs.map +1 -1
  509. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +2 -1
  510. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs.map +1 -1
  511. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +2 -1
  512. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs.map +1 -1
  513. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +2 -1
  514. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs.map +1 -1
  515. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +6 -3
  516. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs.map +1 -1
  517. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs +2 -1
  518. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs.map +1 -1
  519. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +2 -1
  520. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs.map +1 -1
  521. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +2 -1
  522. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs.map +1 -1
  523. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +2 -1
  524. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs.map +1 -1
  525. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +2 -1
  526. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs.map +1 -1
  527. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +2 -1
  528. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs.map +1 -1
  529. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +2 -1
  530. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs.map +1 -1
  531. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +2 -1
  532. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs.map +1 -1
  533. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +2 -1
  534. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs.map +1 -1
  535. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +2 -1
  536. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs.map +1 -1
  537. package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs +2 -1
  538. package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs.map +1 -1
  539. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +2 -1
  540. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs.map +1 -1
  541. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +2 -1
  542. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs.map +1 -1
  543. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +2 -1
  544. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs.map +1 -1
  545. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +2 -1
  546. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs.map +1 -1
  547. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +2 -1
  548. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs.map +1 -1
  549. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +2 -1
  550. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs.map +1 -1
  551. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +2 -1
  552. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs.map +1 -1
  553. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +2 -1
  554. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs.map +1 -1
  555. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +2 -1
  556. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs.map +1 -1
  557. package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs +2 -2
  558. package/.output/server/chunks/routes/api/test-runs/import.post.mjs +5 -128
  559. package/.output/server/chunks/routes/api/test-runs/import.post.mjs.map +1 -1
  560. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +2 -1
  561. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs.map +1 -1
  562. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +2 -1
  563. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs.map +1 -1
  564. package/.output/server/chunks/routes/api/test-runs/start.post.mjs +2 -1
  565. package/.output/server/chunks/routes/api/test-runs/start.post.mjs.map +1 -1
  566. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +2 -1
  567. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
  568. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +2 -1
  569. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
  570. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +4 -1
  571. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
  572. package/.output/server/chunks/routes/api/traces/check.post.mjs +2 -1
  573. package/.output/server/chunks/routes/api/traces/check.post.mjs.map +1 -1
  574. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +1 -0
  575. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs.map +1 -1
  576. package/.output/server/chunks/routes/api/users/_id/index.get.mjs +1 -0
  577. package/.output/server/chunks/routes/api/users/_id/index.get.mjs.map +1 -1
  578. package/.output/server/chunks/routes/api/users/_id/index.post.mjs +1 -1
  579. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +2 -1
  580. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs.map +1 -1
  581. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +2 -1
  582. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs.map +1 -1
  583. package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +1 -1
  584. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -0
  585. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  586. package/.output/server/chunks/routes/api/version.get.mjs +2 -1
  587. package/.output/server/chunks/routes/api/version.get.mjs.map +1 -1
  588. package/.output/server/chunks/routes/mcp.post.mjs +41 -11
  589. package/.output/server/chunks/routes/mcp.post.mjs.map +1 -1
  590. package/.output/server/chunks/routes/renderer.mjs +1 -1
  591. package/.output/server/chunks/tasks/sweep.mjs +1 -0
  592. package/.output/server/chunks/tasks/sweep.mjs.map +1 -1
  593. package/.output/server/chunks/tasks/sweep2.mjs +1 -0
  594. package/.output/server/chunks/tasks/sweep2.mjs.map +1 -1
  595. package/.output/server/database/migrations/0043_watery_dragon_lord.sql +22 -0
  596. package/.output/server/database/migrations/meta/0043_snapshot.json +3764 -0
  597. package/.output/server/database/migrations/meta/_journal.json +7 -0
  598. package/.output/server/database/migrations-pg/0044_dark_triathlon.sql +22 -0
  599. package/.output/server/database/migrations-pg/meta/0044_snapshot.json +4473 -0
  600. package/.output/server/database/migrations-pg/meta/_journal.json +7 -0
  601. package/.output/server/index.mjs +2 -1
  602. package/.output/server/index.mjs.map +1 -1
  603. package/.output/server/package.json +1 -1
  604. package/package.json +1 -1
  605. package/.output/public/_nuxt/-09h6CA9.js +0 -1
  606. package/.output/public/_nuxt/81InBX9v.js +0 -1
  607. package/.output/public/_nuxt/Ar3IelOY.js +0 -1
  608. package/.output/public/_nuxt/B33iXw77.js +0 -1
  609. package/.output/public/_nuxt/B3B9Ii2A.js +0 -1
  610. package/.output/public/_nuxt/B3HO8kuh.js +0 -1
  611. package/.output/public/_nuxt/B7NBP1C-.js +0 -1
  612. package/.output/public/_nuxt/BJ0XQElc.js +0 -1
  613. package/.output/public/_nuxt/BSIxhGsh.js +0 -1
  614. package/.output/public/_nuxt/BVaxh6Nl.js +0 -4
  615. package/.output/public/_nuxt/Bc8mOoz9.js +0 -4
  616. package/.output/public/_nuxt/BeLWlVK0.js +0 -1
  617. package/.output/public/_nuxt/Bn0YQDyy.js +0 -1
  618. package/.output/public/_nuxt/Bp5ELvx9.js +0 -1
  619. package/.output/public/_nuxt/BpUaY9nH.js +0 -2
  620. package/.output/public/_nuxt/C2_3mdPC.js +0 -1
  621. package/.output/public/_nuxt/C5iG7O4O.js +0 -64
  622. package/.output/public/_nuxt/CHNwfU1y.js +0 -1
  623. package/.output/public/_nuxt/CNFYDQmj.js +0 -1
  624. package/.output/public/_nuxt/CU5S9GCh.js +0 -1
  625. package/.output/public/_nuxt/CUtJobDm.js +0 -1
  626. package/.output/public/_nuxt/CpjgB2aY.js +0 -1
  627. package/.output/public/_nuxt/CrwJAwhk.js +0 -1
  628. package/.output/public/_nuxt/CtQBsNUb.js +0 -1
  629. package/.output/public/_nuxt/CuSVQEkS.js +0 -3
  630. package/.output/public/_nuxt/CylWPruw.js +0 -1
  631. package/.output/public/_nuxt/CzGyac8q.js +0 -1
  632. package/.output/public/_nuxt/DDDpCFpF.js +0 -1
  633. package/.output/public/_nuxt/DVDXJYq2.js +0 -2
  634. package/.output/public/_nuxt/DW0xl3I6.js +0 -17
  635. package/.output/public/_nuxt/Dgf5N4Ng.js +0 -1
  636. package/.output/public/_nuxt/DiZyJYez.js +0 -1
  637. package/.output/public/_nuxt/Dk9fwOCm.js +0 -34
  638. package/.output/public/_nuxt/DoUy4UHi.js +0 -44
  639. package/.output/public/_nuxt/DslPMqfa.js +0 -1
  640. package/.output/public/_nuxt/OSduWzyz.js +0 -1
  641. package/.output/public/_nuxt/SlIRLREZ.js +0 -6
  642. package/.output/public/_nuxt/WsxFTEFq.js +0 -10
  643. package/.output/public/_nuxt/aQgs_c6e.js +0 -9
  644. package/.output/public/_nuxt/builds/meta/ab473028-4b37-4884-b243-b8f6e5046e5e.json +0 -1
  645. package/.output/public/_nuxt/dYCKgE-3.js +0 -5
  646. package/.output/public/_nuxt/entry.CPhW41mh.css +0 -1
  647. package/.output/public/_nuxt/g26aVPxc.js +0 -1
  648. package/.output/public/_nuxt/zQyPuvV1.js +0 -1
  649. package/.output/server/chunks/_/import-runs.mjs +0 -351
  650. package/.output/server/chunks/_/import-runs.mjs.map +0 -1
  651. package/.output/server/chunks/build/Breadcrumb-Ak2Lg3oM.mjs.map +0 -1
  652. package/.output/server/chunks/build/BreadcrumbNav-DO7I_z-n.mjs.map +0 -1
  653. package/.output/server/chunks/build/BrowserBadge-D33lqUcj.mjs.map +0 -1
  654. package/.output/server/chunks/build/ChartCard-Y1UKwMsf.mjs.map +0 -1
  655. package/.output/server/chunks/build/Checkbox-DvUBGagc.mjs.map +0 -1
  656. package/.output/server/chunks/build/CiEnvCard-CrjOM17n.mjs +0 -631
  657. package/.output/server/chunks/build/CiEnvCard-CrjOM17n.mjs.map +0 -1
  658. package/.output/server/chunks/build/CodeBlock-BgE-NSmE.mjs.map +0 -1
  659. package/.output/server/chunks/build/DashboardNavbar-BHmMSPX7.mjs.map +0 -1
  660. package/.output/server/chunks/build/DashboardSidebarToggle-DCTnHiIv.mjs.map +0 -1
  661. package/.output/server/chunks/build/DataLocationCard-B_YHdzSz.mjs.map +0 -1
  662. package/.output/server/chunks/build/DiagnosisPanel-B646dK4p.mjs.map +0 -1
  663. package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs.map +0 -1
  664. package/.output/server/chunks/build/EmptyState-Dtlab7S9.mjs.map +0 -1
  665. package/.output/server/chunks/build/EntityLinks-D3fp57pR.mjs.map +0 -1
  666. package/.output/server/chunks/build/EnvManagedBadge-Bg3FSiU1.mjs.map +0 -1
  667. package/.output/server/chunks/build/FormField-B0HKsdMd.mjs.map +0 -1
  668. package/.output/server/chunks/build/HelpHint-DrcIv-Oj.mjs.map +0 -1
  669. package/.output/server/chunks/build/LoadingState-C3pBSuOO.mjs.map +0 -1
  670. package/.output/server/chunks/build/MiniRunBars-CZMugDrh.mjs.map +0 -1
  671. package/.output/server/chunks/build/Modal-Ck2XLt8d.mjs.map +0 -1
  672. package/.output/server/chunks/build/ProjectTestCasesTable-CxfQ5wtN.mjs.map +0 -1
  673. package/.output/server/chunks/build/RovingFocusItem-BJSzTBjy.mjs.map +0 -1
  674. package/.output/server/chunks/build/RunReports-DFLv51TX.mjs.map +0 -1
  675. package/.output/server/chunks/build/RunStatusBadge-FfGb6bkW.mjs.map +0 -1
  676. package/.output/server/chunks/build/SectionCard-CN-v0FZ_.mjs.map +0 -1
  677. package/.output/server/chunks/build/Select-CUqj50wi.mjs.map +0 -1
  678. package/.output/server/chunks/build/SettingsField-D6iEYbEc.mjs.map +0 -1
  679. package/.output/server/chunks/build/Slideover-DgCa80mf.mjs.map +0 -1
  680. package/.output/server/chunks/build/StatTile-D61Vzo6e.mjs.map +0 -1
  681. package/.output/server/chunks/build/Switch-CgUioOYB.mjs.map +0 -1
  682. package/.output/server/chunks/build/Tabs-Bbsg9wag.mjs.map +0 -1
  683. package/.output/server/chunks/build/TestCaseHistoryChart-nMLPhdvD.mjs.map +0 -1
  684. package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs.map +0 -1
  685. package/.output/server/chunks/build/TestStatusBar-j6h2Jp6A.mjs.map +0 -1
  686. package/.output/server/chunks/build/Textarea-Dv2-lOvW.mjs.map +0 -1
  687. package/.output/server/chunks/build/Tooltip-BOazooWP.mjs.map +0 -1
  688. package/.output/server/chunks/build/VisuallyHiddenInput-D6kBJxVd.mjs.map +0 -1
  689. package/.output/server/chunks/build/_id_-B78ky13D.mjs.map +0 -1
  690. package/.output/server/chunks/build/_id_-BHh65pfg.mjs.map +0 -1
  691. package/.output/server/chunks/build/_id_-Rzkqx55x.mjs.map +0 -1
  692. package/.output/server/chunks/build/_id_-z5N6HPyC.mjs.map +0 -1
  693. package/.output/server/chunks/build/about-CvSP73Ug.mjs +0 -781
  694. package/.output/server/chunks/build/about-CvSP73Ug.mjs.map +0 -1
  695. package/.output/server/chunks/build/account-DAfvaD-F.mjs.map +0 -1
  696. package/.output/server/chunks/build/analytics-CJPC6t4L.mjs.map +0 -1
  697. package/.output/server/chunks/build/db.client-CQoVTYB9.mjs.map +0 -1
  698. package/.output/server/chunks/build/default-zvbFgDJG.mjs.map +0 -1
  699. package/.output/server/chunks/build/edit-CFR5g2Qf.mjs.map +0 -1
  700. package/.output/server/chunks/build/fetch-B4FwBOzu.mjs.map +0 -1
  701. package/.output/server/chunks/build/forgot-password-CC__1OnV.mjs.map +0 -1
  702. package/.output/server/chunks/build/import-CZo3djDi.mjs.map +0 -1
  703. package/.output/server/chunks/build/index-CU2nZhAa.mjs.map +0 -1
  704. package/.output/server/chunks/build/index-D7fe97l3.mjs.map +0 -1
  705. package/.output/server/chunks/build/index-Stqw0dEI.mjs.map +0 -1
  706. package/.output/server/chunks/build/index-gCw_y4ZJ.mjs.map +0 -1
  707. package/.output/server/chunks/build/index-tR6owKzj.mjs +0 -167
  708. package/.output/server/chunks/build/index-tR6owKzj.mjs.map +0 -1
  709. package/.output/server/chunks/build/login-Da4u1IlW.mjs.map +0 -1
  710. package/.output/server/chunks/build/mcp-B3IUvRgD.mjs.map +0 -1
  711. package/.output/server/chunks/build/notifications-abDv0id8.mjs.map +0 -1
  712. package/.output/server/chunks/build/pr-feedback-DjZID6q-.mjs.map +0 -1
  713. package/.output/server/chunks/build/reset-password-BmrUS4ZD.mjs.map +0 -1
  714. package/.output/server/chunks/build/settings-Du7YqF8i.mjs.map +0 -1
  715. package/.output/server/chunks/build/settings-metadata-DrEqWcW-.mjs.map +0 -1
  716. package/.output/server/chunks/build/storage-B4vzxd8G.mjs.map +0 -1
  717. package/.output/server/chunks/build/tags-DauTe_F-.mjs.map +0 -1
  718. package/.output/server/chunks/build/test-cases-DUvaO1He.mjs.map +0 -1
  719. package/.output/server/chunks/build/timeout-hygiene-CbnSaVbK.mjs.map +0 -1
  720. package/.output/server/chunks/build/useAiStatus-CWvIo32Q.mjs.map +0 -1
  721. package/.output/server/chunks/build/useCopy-CeKWgHyT.mjs +0 -33
  722. package/.output/server/chunks/build/useCopy-CeKWgHyT.mjs.map +0 -1
  723. package/.output/server/chunks/build/useCopyRich-BemRsKgv.mjs.map +0 -1
  724. package/.output/server/chunks/build/useDesktopDownload-D49JRQSw.mjs.map +0 -1
  725. package/.output/server/chunks/build/useOpenInIde-4GFf-kdi.mjs.map +0 -1
  726. package/.output/server/chunks/build/useSettingsNav-C3O866KC.mjs.map +0 -1
  727. package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs +0 -7
  728. package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs.map +0 -1
  729. package/.output/server/chunks/build/users-CTUqXyGh.mjs.map +0 -1
  730. package/.output/server/chunks/build/virtualizer-Cd1hhlxC.mjs +0 -940
  731. package/.output/server/chunks/build/virtualizer-Cd1hhlxC.mjs.map +0 -1
  732. package/.output/server/chunks/build/wasted-time-lYkx5YO4.mjs.map +0 -1
@@ -1 +0,0 @@
1
- import{d as L,Y as He,az as st,Z as Le,B as ae,o as n,f as c,g as u,j as y,k as e,W as C,l as Ye,V as v,ba as nt,bb as Ee,K as Ce,bc as ut,r as G,h as w,at as dt,$ as Te,bd as pt,U as X,X as le,be as ct,bf as ft,bg as mt,bh as gt,bi as vt,ad as Fe,bj as bt,bk as Ze,C as qe,bl as yt,ag as ht,bm as _t,a0 as te,bn as xt,v as A,bo as Ct,aA as Ie,aC as qt,m as ee,H as Ae,S as It,bp as St,bq as zt,t as Z,a1 as me,br as wt,a2 as Bt,a3 as kt,E as Ot,a4 as Lt,a5 as At,a6 as Et,a7 as Tt,bs as Ft,aN as Vt,bt as $t,aY as Pt,b3 as Ne,aP as Be,b4 as Y,c as F,q as h,i as ce,aH as se,p as xe,aI as je,bu as Rt,F as Q,y as ke,_ as Dt,bv as Mt,I as Kt,G as Ge,bw as Ue,bx as fe,av as Nt,aZ as jt,a8 as Gt,by as Ut,bz as Wt,bA as Ht}from"./NQikbhmK.js";import{L as Yt,a as Zt,b as Xt,i as Jt,c as Qt,d as ea,e as ta,f as aa,g as la}from"./BeLWlVK0.js";const[D,ia]=Te("ComboboxRoot");var oa=L({__name:"ComboboxRoot",props:{open:{type:Boolean,required:!1,default:void 0},defaultOpen:{type:Boolean,required:!1},resetSearchTermOnBlur:{type:Boolean,required:!1,default:!0},resetSearchTermOnSelect:{type:Boolean,required:!1,default:!0},openOnFocus:{type:Boolean,required:!1,default:!1},openOnClick:{type:Boolean,required:!1,default:!1},ignoreFilter:{type:Boolean,required:!1},resetModelValueOnClear:{type:Boolean,required:!1,default:!1},modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},multiple:{type:Boolean,required:!1},dir:{type:String,required:!1},disabled:{type:Boolean,required:!1},highlightOnHover:{type:Boolean,required:!1,default:!0},by:{type:[String,Function],required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue","highlight","update:open"],setup(m,{expose:f,emit:o}){const s=m,a=o,{primitiveElement:l,currentElement:t}=Ee(),{multiple:p,disabled:b,ignoreFilter:E,resetSearchTermOnSelect:_,openOnFocus:V,openOnClick:T,dir:M,resetModelValueOnClear:B,highlightOnHover:q}=He(s),I=st(M),K=Le(s,"modelValue",a,{defaultValue:s.defaultValue??(p.value?[]:void 0),passive:s.modelValue===void 0,deep:!0}),N=Le(s,"open",a,{defaultValue:s.defaultOpen,passive:s.open===void 0});async function g(S){N.value=S,oe.value="",S?(await Ce(),l.value?.highlightSelected(),j.value=!0,U.value?.focus()):(j.value=!1,setTimeout(()=>{!S&&s.resetSearchTermOnBlur&&k.trigger()},1))}const k=ut(),j=G(!1),ie=G(!1),U=G(),ne=G(),ge=w(()=>l.value?.highlightedElement??void 0),ue=G(new Map),de=G(new Map),{contains:Se}=pt({sensitivity:"base"}),oe=G(""),ve=w(S=>{if(!oe.value||s.ignoreFilter||ie.value)return{count:ue.value.size,items:S?.items??new Map,groups:S?.groups??new Set(de.value.keys())};let $=0;const P=new Map,J=new Set;for(const[pe,H]of ue.value){const re=Se(H,oe.value);P.set(pe,re?1:0),re&&$++}for(const[pe,H]of de.value)for(const re of H)if(P.get(re)>0){J.add(pe);break}return{count:$,items:P,groups:J}}),W=dt();return ae(()=>{W?.exposed&&(W.exposed.highlightItem=l.value?.highlightItem,W.exposed.highlightFirstItem=l.value?.highlightFirstItem,W.exposed.highlightSelected=l.value?.highlightSelected)}),f({filtered:ve,highlightedElement:ge,highlightItem:l.value?.highlightItem,highlightFirstItem:l.value?.highlightFirstItem,highlightSelected:l.value?.highlightSelected}),ia({modelValue:K,multiple:p,disabled:b,open:N,onOpenChange:g,contentId:"",isUserInputted:j,isVirtual:ie,inputElement:U,highlightedElement:ge,onInputElementChange:S=>U.value=S,triggerElement:ne,onTriggerElementChange:S=>ne.value=S,parentElement:t,resetSearchTermOnSelect:_,onResetSearchTerm:k.on,allItems:ue,allGroups:de,filterSearch:oe,filterState:ve,ignoreFilter:E,openOnFocus:V,openOnClick:T,resetModelValueOnClear:B}),(S,$)=>(n(),c(e(nt),null,{default:u(()=>[y(e(Yt),C({ref_key:"primitiveElement",ref:l},S.$attrs,{modelValue:e(K),"onUpdate:modelValue":$[0]||($[0]=P=>Ye(K)?K.value=P:null),style:{pointerEvents:e(N)?"auto":void 0},as:S.as,"as-child":S.asChild,dir:e(I),multiple:e(p),name:S.name,required:S.required,disabled:e(b),"highlight-on-hover":e(q),by:s.by,onHighlight:$[1]||($[1]=P=>a("highlight",P))}),{default:u(()=>[v(S.$slots,"default",{open:e(N),modelValue:e(K)})]),_:3},16,["modelValue","style","as","as-child","dir","multiple","name","required","disabled","highlight-on-hover","by"])]),_:3}))}}),ra=oa,sa=L({__name:"ComboboxAnchor",props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(m){const{forwardRef:f}=X();return(o,s)=>(n(),c(e(ct),{"as-child":"",reference:o.reference},{default:u(()=>[y(e(le),C({ref:e(f),"as-child":o.asChild,as:o.as},o.$attrs),{default:u(()=>[v(o.$slots,"default")]),_:3},16,["as-child","as"])]),_:3},8,["reference"]))}}),na=sa;const[ua,da]=Te("ComboboxContent");var pa=L({__name:"ComboboxContentImpl",props:{position:{type:String,required:!1,default:"inline"},bodyLock:{type:Boolean,required:!1},hideWhenEmpty:{type:Boolean,required:!1},memoDependencies:{type:Array,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(m,{emit:f}){const o=m,s=f,{position:a}=He(o),l=D(),t=w(()=>l.ignoreFilter.value?l.allItems.value.size===0:l.filterState.value.count===0),{forwardRef:p,currentElement:b}=X();ft(o.bodyLock),mt(),gt(l.parentElement);const E=w(()=>o.position==="popper"?o:{}),_=vt(E.value),V={boxSizing:"border-box","--reka-combobox-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-combobox-content-available-width":"var(--reka-popper-available-width)","--reka-combobox-content-available-height":"var(--reka-popper-available-height)","--reka-combobox-trigger-width":"var(--reka-popper-anchor-width)","--reka-combobox-trigger-height":"var(--reka-popper-anchor-height)"};da({position:a});const T=G(!1);ae(()=>{l.inputElement.value&&(T.value=b.value.contains(l.inputElement.value),T.value&&l.inputElement.value.focus())}),Fe(()=>{const B=bt();T.value&&(!B||B===document.body)&&l.triggerElement.value?.focus()});function M(B){if(l.parentElement.value?.contains(B))return!0;const I=(B instanceof Element?B.closest("label"):null)?.control;return!!I&&!!l.parentElement.value?.contains(I)}return(B,q)=>(n(),c(e(Zt),{"as-child":""},{default:u(()=>[y(e(Ze),{"as-child":"",onMountAutoFocus:q[5]||(q[5]=qe(()=>{},["prevent"])),onUnmountAutoFocus:q[6]||(q[6]=qe(()=>{},["prevent"]))},{default:u(()=>[y(e(yt),{"as-child":"","disable-outside-pointer-events":B.disableOutsidePointerEvents,onDismiss:q[0]||(q[0]=I=>e(l).onOpenChange(!1)),onFocusOutside:q[1]||(q[1]=I=>{M(I.target)&&I.preventDefault(),s("focusOutside",I)}),onInteractOutside:q[2]||(q[2]=I=>s("interactOutside",I)),onEscapeKeyDown:q[3]||(q[3]=I=>s("escapeKeyDown",I)),onPointerDownOutside:q[4]||(q[4]=I=>{M(I.target)&&I.preventDefault(),s("pointerDownOutside",I)})},{default:u(()=>[(n(),c(ht(e(a)==="popper"?e(_t):e(le)),C({...B.$attrs,...e(_)},{id:e(l).contentId,ref:e(p),"memo-dependencies":e(a)==="popper"?[e(l).filterSearch.value,e(l).filterState.value]:void 0,"data-state":e(l).open.value?"open":"closed","data-empty":t.value?"":void 0,style:{display:o.hideWhenEmpty&&t.value?"none":"flex",flexDirection:"column",outline:"none",...e(a)==="popper"?V:{}}}),{default:u(()=>[v(B.$slots,"default")]),_:3},16,["id","memo-dependencies","data-state","data-empty","style"]))]),_:3},8,["disable-outside-pointer-events"])]),_:3})]),_:3}))}}),ca=pa,fa=L({__name:"ComboboxArrow",props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"svg"}},setup(m){const f=m,o=D(),s=ua();return X(),(a,l)=>e(o).open.value&&e(s).position.value==="popper"?(n(),c(e(xt),te(C({key:0},f)),{default:u(()=>[v(a.$slots,"default")]),_:3},16)):A("v-if",!0)}}),ma=fa,ga=L({__name:"ComboboxCancel",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(m){const f=m;X();const o=D();function s(){o.filterSearch.value="",o.inputElement.value&&(o.inputElement.value.value="",o.inputElement.value.focus()),o.resetModelValueOnClear?.value&&(o.modelValue.value=o.multiple.value?[]:null)}return(a,l)=>(n(),c(e(le),C({type:a.as==="button"?"button":void 0},f,{tabindex:"-1",onClick:s}),{default:u(()=>[v(a.$slots,"default")]),_:3},16,["type"]))}}),va=ga,ba=L({__name:"ComboboxContent",props:{forceMount:{type:Boolean,required:!1},position:{type:String,required:!1},bodyLock:{type:Boolean,required:!1},hideWhenEmpty:{type:Boolean,required:!1},memoDependencies:{type:Array,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},dir:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(m,{emit:f}){const a=Ct(m,f),{forwardRef:l}=X(),t=D();return t.contentId||=Ie(void 0,"reka-combobox-content"),(p,b)=>(n(),c(e(qt),{present:p.forceMount||e(t).open.value},{default:u(()=>[y(ca,C({...e(a),...p.$attrs},{ref:e(l)}),{default:u(()=>[v(p.$slots,"default")]),_:3},16)]),_:3},8,["present"]))}}),ya=ba,ha=L({__name:"ComboboxEmpty",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(m){const f=m,o=D(),s=w(()=>o.ignoreFilter.value?o.allItems.value.size===0:o.filterState.value.count===0);return(a,l)=>s.value?(n(),c(e(le),te(C({key:0},f)),{default:u(()=>[v(a.$slots,"default",{},()=>[l[0]||(l[0]=ee("No options"))])]),_:3},16)):A("v-if",!0)}}),_a=ha;const[Xe,xa]=Te("ComboboxGroup");var Ca=L({__name:"ComboboxGroup",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(m){const f=m,o=Ie(void 0,"reka-combobox-group"),s=D(),a=w(()=>s.ignoreFilter.value?!0:s.filterSearch.value?s.filterState.value.groups.has(o):!0),l=xa({id:o,labelId:""});return ae(()=>{s.allGroups.value.has(o)||s.allGroups.value.set(o,new Set)}),Fe(()=>{s.allGroups.value.delete(o)}),(t,p)=>(n(),c(e(Xt),C({id:e(o),"aria-labelledby":e(l).labelId},f,{hidden:a.value?void 0:!0}),{default:u(()=>[v(t.$slots,"default")]),_:3},16,["id","aria-labelledby","hidden"]))}}),Oe=Ca,qa=L({__name:"ComboboxInput",props:{displayValue:{type:Function,required:!1},modelValue:{type:String,required:!1},autoFocus:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"input"}},emits:["update:modelValue"],setup(m,{emit:f}){const o=m,s=f,a=D(),l=Jt(),{primitiveElement:t,currentElement:p}=Ee(),b=Le(o,"modelValue",s,{passive:o.modelValue===void 0});ae(()=>{p.value&&a.onInputElementChange(p.value)});const{isComposing:E,handleCompositionStart:_,handleCompositionEnd:V}=St(g=>{const k=g.target;k&&M(k.value)});function T(g){E.value||(g.preventDefault(),a.open.value||a.onOpenChange(!0))}function M(g){a.open.value?a.filterSearch.value=g:(a.onOpenChange(!0),Ce(()=>{g&&(a.filterSearch.value=g,l.highlightFirstItem())}))}function B(g){E.value||M(g.target.value)}function q(){a.openOnFocus.value&&!a.open.value&&a.onOpenChange(!0)}function I(g){if(!a.open.value)return;const k=g.relatedTarget;if(!k)return;const j=a.parentElement.value?.contains(k),ie=document.getElementById(a.contentId)?.contains(k);!j&&!ie&&requestAnimationFrame(()=>{if(!a.open.value)return;const U=document.activeElement;!a.parentElement.value?.contains(U)&&!document.getElementById(a.contentId)?.contains(U)&&a.onOpenChange(!1)})}function K(){a.openOnClick.value&&!a.open.value&&a.onOpenChange(!0)}function N(){const g=a.modelValue.value;o.displayValue?b.value=o.displayValue(g):!a.multiple.value&&g&&!Array.isArray(g)&&typeof g!="object"?b.value=g.toString():b.value="",Ce(()=>{b.value=b.value})}return a.onResetSearchTerm(()=>{N()}),Ae(a.modelValue,async()=>{!a.isUserInputted.value&&a.resetSearchTermOnSelect.value&&N()},{immediate:!0,deep:!0}),Ae(a.filterState,(g,k)=>{!a.isVirtual.value&&k.count===0&&l.highlightFirstItem()}),(g,k)=>(n(),c(e(Qt),{ref_key:"primitiveElement",ref:t,modelValue:e(b),"onUpdate:modelValue":k[0]||(k[0]=j=>Ye(b)?b.value=j:null),as:g.as,"as-child":g.asChild,"auto-focus":g.autoFocus,disabled:g.disabled,"aria-expanded":e(a).open.value,"aria-controls":e(a).contentId,"aria-autocomplete":"list",role:"combobox",autocomplete:"off",onClick:K,onInput:B,onKeydown:It(T,["down","up"]),onFocus:q,onBlur:I,onCompositionstart:e(_),onCompositionend:e(V)},{default:u(()=>[v(g.$slots,"default")]),_:3},8,["modelValue","as","as-child","auto-focus","disabled","aria-expanded","aria-controls","onCompositionstart","onCompositionend"]))}}),Ia=qa,Sa=L({__name:"ComboboxItem",props:{textValue:{type:String,required:!1},value:{type:null,required:!0},disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["select"],setup(m,{emit:f}){const o=m,s=f,a=Ie(void 0,"reka-combobox-item"),l=D(),t=Xe(null),{primitiveElement:p,currentElement:b}=Ee();if(o.value==="")throw new Error("A <ComboboxItem /> must have a value prop that is not an empty string. This is because the Combobox value can be set to an empty string to clear the selection and show the placeholder.");const E=w(()=>{if(l.isVirtual.value||l.ignoreFilter.value||!l.filterSearch.value)return!0;{const _=l.filterState.value.items.get(a);return _===void 0?!0:_>0}});return ae(()=>{l.allItems.value.set(a,o.textValue||b.value.textContent||b.value.innerText);const _=t?.id;_&&(l.allGroups.value.has(_)?l.allGroups.value.get(_)?.add(a):l.allGroups.value.set(_,new Set([a])))}),Fe(()=>{l.allItems.value.delete(a)}),(_,V)=>E.value?zt([E.value,e(l).filterSearch.value,e(l).disabled.value,_.disabled,o.value,o.as,o.asChild,...Object.values(_.$attrs)],()=>(n(),c(e(ea),C({key:0},o,{id:e(a),ref_key:"primitiveElement",ref:p,disabled:e(l).disabled.value||_.disabled,onSelect:V[0]||(V[0]=T=>{s("select",T),!T.defaultPrevented&&(!e(l).multiple.value&&!_.disabled&&!e(l).disabled.value?(T.preventDefault(),e(l).onOpenChange(!1),e(l).modelValue.value=o.value):e(l).multiple.value&&e(l).inputElement.value?.focus())})}),{default:u(()=>[v(_.$slots,"default",{},()=>[ee(Z(_.value),1)])]),_:3},16,["id","disabled"])),V,1):A("v-if",!0)}}),We=Sa,za=L({__name:"ComboboxItemIndicator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(m){const f=m;return(o,s)=>(n(),c(e(ta),te(me(f)),{default:u(()=>[v(o.$slots,"default")]),_:3},16))}}),wa=za,Ba=L({__name:"ComboboxLabel",props:{for:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"div"}},setup(m){const f=m;X();const o=Xe({id:"",labelId:""});return o.labelId||=Ie(void 0,"reka-combobox-group-label"),(s,a)=>(n(),c(e(le),C(f,{id:e(o).labelId}),{default:u(()=>[v(s.$slots,"default")]),_:3},16,["id"]))}}),ka=Ba,Oa=L({__name:"ComboboxPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(m){const f=m;return(o,s)=>(n(),c(e(wt),te(me(f)),{default:u(()=>[v(o.$slots,"default")]),_:3},16))}}),La=Oa,Aa=L({__name:"ComboboxSeparator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(m){const f=m;return X(),(o,s)=>(n(),c(e(le),C(f,{"aria-hidden":"true"}),{default:u(()=>[v(o.$slots,"default")]),_:3},16))}}),Ea=Aa,Ta=L({__name:"ComboboxTrigger",props:{disabled:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(m){const f=m,{forwardRef:o,currentElement:s}=X(),a=D(),l=w(()=>f.disabled||a.disabled.value||!1);return ae(()=>{s.value&&a.onTriggerElementChange(s.value)}),(t,p)=>(n(),c(e(le),C(f,{ref:e(o),type:t.as==="button"?"button":void 0,tabindex:"-1","aria-label":"Show popup","aria-haspopup":"listbox","aria-expanded":e(a).open.value,"aria-controls":e(a).contentId,"data-state":e(a).open.value?"open":"closed",disabled:l.value,"data-disabled":l.value?"":void 0,"aria-disabled":l.value??void 0,onClick:p[0]||(p[0]=b=>e(a).onOpenChange(!e(a).open.value))}),{default:u(()=>[v(t.$slots,"default")]),_:3},16,["type","aria-expanded","aria-controls","data-state","disabled","data-disabled","aria-disabled"]))}}),Fa=Ta,Va=L({__name:"ComboboxVirtualizer",props:{options:{type:Array,required:!0},overscan:{type:Number,required:!1},estimateSize:{type:[Number,Function],required:!1},textContent:{type:Function,required:!1}},setup(m){const f=m,o=D();return o.isVirtual.value=!0,(s,a)=>(n(),c(aa,te(me(f)),{default:u(l=>[v(s.$slots,"default",te(me(l)))]),_:3},16))}}),$a=Va;const Pa={slots:{base:["relative group rounded-md inline-flex items-center disabled:cursor-not-allowed disabled:opacity-75","transition-colors"],leading:"absolute inset-y-0 start-0 flex items-center",leadingIcon:"shrink-0 text-dimmed",leadingAvatar:"shrink-0",leadingAvatarSize:"",trailing:"absolute inset-y-0 end-0 flex items-center",trailingIcon:"shrink-0 text-dimmed",value:"truncate pointer-events-none",placeholder:"truncate text-dimmed",arrow:"fill-bg stroke-default",content:["max-h-[min(15rem,var(--reka-select-content-available-height,15rem))] w-(--reka-select-trigger-width) bg-default shadow-lg rounded-md ring ring-default overflow-hidden origin-(--reka-select-content-transform-origin) pointer-events-auto flex flex-col","max-h-[min(15rem,var(--reka-combobox-content-available-height,15rem))] origin-(--reka-combobox-content-transform-origin) w-(--reka-combobox-trigger-width)"],viewport:"relative scroll-py-1 overflow-y-auto flex-1",group:"p-1 isolate",empty:"text-center text-muted",label:"font-semibold text-highlighted",separator:"-mx-1 my-1 h-px bg-border",item:["group relative w-full flex items-start select-none outline-none before:absolute before:z-[-1] before:inset-px before:rounded-md data-disabled:cursor-not-allowed data-disabled:opacity-75 text-default data-highlighted:not-data-disabled:text-highlighted data-highlighted:not-data-disabled:before:bg-elevated/50","transition-colors before:transition-colors"],itemLeadingIcon:["shrink-0 text-dimmed group-data-highlighted:not-group-data-disabled:text-default","transition-colors"],itemLeadingAvatar:"shrink-0",itemLeadingAvatarSize:"",itemLeadingChip:"shrink-0",itemLeadingChipSize:"",itemTrailing:"ms-auto inline-flex gap-1.5 items-center",itemTrailingIcon:"shrink-0",itemWrapper:"flex-1 flex flex-col min-w-0",itemLabel:"truncate",itemDescription:"truncate text-muted",input:"border-b border-default",focusScope:"flex flex-col min-h-0",trailingClear:"p-0"},variants:{fieldGroup:{horizontal:"not-only:first:rounded-e-none not-only:last:rounded-s-none not-last:not-first:rounded-none focus-visible:z-[1]",vertical:"not-only:first:rounded-b-none not-only:last:rounded-t-none not-last:not-first:rounded-none focus-visible:z-[1]"},size:{xs:{base:"px-2 py-1 text-xs gap-1",leading:"ps-2",trailing:"pe-2",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4",label:"p-1 text-[10px]/3 gap-1",item:"p-1 text-xs gap-1",itemLeadingIcon:"size-4",itemLeadingAvatarSize:"3xs",itemLeadingChip:"size-4",itemLeadingChipSize:"sm",itemTrailingIcon:"size-4",empty:"p-2 text-xs"},sm:{base:"px-2.5 py-1.5 text-xs gap-1.5",leading:"ps-2.5",trailing:"pe-2.5",leadingIcon:"size-4",leadingAvatarSize:"3xs",trailingIcon:"size-4",label:"p-1.5 text-[10px]/3 gap-1.5",item:"p-1.5 text-xs gap-1.5",itemLeadingIcon:"size-4",itemLeadingAvatarSize:"3xs",itemLeadingChip:"size-4",itemLeadingChipSize:"sm",itemTrailingIcon:"size-4",empty:"p-2.5 text-xs"},md:{base:"px-2.5 py-1.5 text-sm gap-1.5",leading:"ps-2.5",trailing:"pe-2.5",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5",label:"p-1.5 text-xs gap-1.5",item:"p-1.5 text-sm gap-1.5",itemLeadingIcon:"size-5",itemLeadingAvatarSize:"2xs",itemLeadingChip:"size-5",itemLeadingChipSize:"md",itemTrailingIcon:"size-5",empty:"p-2.5 text-sm"},lg:{base:"px-3 py-2 text-sm gap-2",leading:"ps-3",trailing:"pe-3",leadingIcon:"size-5",leadingAvatarSize:"2xs",trailingIcon:"size-5",label:"p-2 text-xs gap-2",item:"p-2 text-sm gap-2",itemLeadingIcon:"size-5",itemLeadingAvatarSize:"2xs",itemLeadingChip:"size-5",itemLeadingChipSize:"md",itemTrailingIcon:"size-5",empty:"p-3 text-sm"},xl:{base:"px-3 py-2 text-base gap-2",leading:"ps-3",trailing:"pe-3",leadingIcon:"size-6",leadingAvatarSize:"xs",trailingIcon:"size-6",label:"p-2 text-sm gap-2",item:"p-2 text-base gap-2",itemLeadingIcon:"size-6",itemLeadingAvatarSize:"xs",itemLeadingChip:"size-6",itemLeadingChipSize:"lg",itemTrailingIcon:"size-6",empty:"p-3 text-base"}},variant:{outline:"text-highlighted bg-default ring ring-inset ring-accented hover:bg-elevated disabled:bg-default",soft:"text-highlighted bg-elevated/50 hover:bg-elevated focus:bg-elevated disabled:bg-elevated/50",subtle:"text-highlighted bg-elevated ring ring-inset ring-accented hover:bg-accented/75 disabled:bg-elevated",ghost:"text-highlighted bg-transparent hover:bg-elevated focus:bg-elevated disabled:bg-transparent dark:disabled:bg-transparent",none:"text-highlighted bg-transparent focus:outline-none"},color:{primary:"",secondary:"",success:"",info:"",warning:"",error:"",neutral:""},leading:{true:""},trailing:{true:""},loading:{true:""},highlight:{true:""},fixed:{false:""},type:{file:"file:me-1.5 file:font-medium file:text-muted file:outline-none"},position:{popper:{content:"data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in]"},"item-aligned":{content:""}},multiple:{true:""},virtualize:{true:{viewport:"p-1 isolate"},false:{viewport:"divide-y divide-default"}}},compoundVariants:[{color:"primary",variant:["outline","subtle"],class:"outline-primary/25 focus-visible:outline-3 focus-visible:ring-primary"},{color:"secondary",variant:["outline","subtle"],class:"outline-secondary/25 focus-visible:outline-3 focus-visible:ring-secondary"},{color:"success",variant:["outline","subtle"],class:"outline-success/25 focus-visible:outline-3 focus-visible:ring-success"},{color:"info",variant:["outline","subtle"],class:"outline-info/25 focus-visible:outline-3 focus-visible:ring-info"},{color:"warning",variant:["outline","subtle"],class:"outline-warning/25 focus-visible:outline-3 focus-visible:ring-warning"},{color:"error",variant:["outline","subtle"],class:"outline-error/25 focus-visible:outline-3 focus-visible:ring-error"},{color:"primary",variant:["soft","ghost"],class:"outline-primary/25 focus-visible:outline-3"},{color:"secondary",variant:["soft","ghost"],class:"outline-secondary/25 focus-visible:outline-3"},{color:"success",variant:["soft","ghost"],class:"outline-success/25 focus-visible:outline-3"},{color:"info",variant:["soft","ghost"],class:"outline-info/25 focus-visible:outline-3"},{color:"warning",variant:["soft","ghost"],class:"outline-warning/25 focus-visible:outline-3"},{color:"error",variant:["soft","ghost"],class:"outline-error/25 focus-visible:outline-3"},{color:"primary",highlight:!0,class:"ring ring-inset ring-primary"},{color:"secondary",highlight:!0,class:"ring ring-inset ring-secondary"},{color:"success",highlight:!0,class:"ring ring-inset ring-success"},{color:"info",highlight:!0,class:"ring ring-inset ring-info"},{color:"warning",highlight:!0,class:"ring ring-inset ring-warning"},{color:"error",highlight:!0,class:"ring ring-inset ring-error"},{color:"neutral",variant:["outline","subtle"],class:"outline-inverted/25 focus-visible:outline-3 focus-visible:ring-inverted"},{color:"neutral",variant:["soft","ghost"],class:"outline-inverted/25 focus-visible:outline-3"},{color:"neutral",highlight:!0,class:"ring ring-inset ring-inverted"},{leading:!0,size:"xs",class:"ps-7"},{leading:!0,size:"sm",class:"ps-8"},{leading:!0,size:"md",class:"ps-9"},{leading:!0,size:"lg",class:"ps-10"},{leading:!0,size:"xl",class:"ps-11"},{trailing:!0,size:"xs",class:"pe-7"},{trailing:!0,size:"sm",class:"pe-8"},{trailing:!0,size:"md",class:"pe-9"},{trailing:!0,size:"lg",class:"pe-10"},{trailing:!0,size:"xl",class:"pe-11"},{loading:!0,leading:!0,class:{leadingIcon:"animate-spin"}},{loading:!0,leading:!1,trailing:!0,class:{trailingIcon:"animate-spin"}},{fixed:!1,size:"xs",class:"md:text-xs"},{fixed:!1,size:"sm",class:"md:text-xs"},{fixed:!1,size:"md",class:"md:text-sm"},{fixed:!1,size:"lg",class:"md:text-sm"}],defaultVariants:{size:"md",color:"primary",variant:"outline",position:"popper"}},Ma=Object.assign({inheritAttrs:!1},{__name:"USelectMenu",props:Ge({id:{type:String,required:!1},placeholder:{type:String,required:!1},searchInput:{type:[Boolean,Object],required:!1,default:!0},color:{type:null,required:!1},variant:{type:null,required:!1},size:{type:null,required:!1},required:{type:Boolean,required:!1},trailingIcon:{type:null,required:!1},selectedIcon:{type:null,required:!1},clear:{type:[Boolean,Object],required:!1},clearIcon:{type:null,required:!1},content:{type:Object,required:!1},arrow:{type:[Boolean,Object],required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},virtualize:{type:[Boolean,Object],required:!1,default:!1},valueKey:{type:null,required:!1},labelKey:{type:null,required:!1,default:"label"},descriptionKey:{type:null,required:!1,default:"description"},items:{type:null,required:!1},defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1},modelModifiers:{type:null,required:!1},multiple:{type:Boolean,required:!1},highlight:{type:Boolean,required:!1},createItem:{type:[Boolean,String,Object],required:!1},filterFields:{type:Array,required:!1},ignoreFilter:{type:Boolean,required:!1},autofocus:{type:Boolean,required:!1},autofocusDelay:{type:Number,required:!1,default:0},class:{type:null,required:!1},ui:{type:Object,required:!1},open:{type:Boolean,required:!1},defaultOpen:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},name:{type:String,required:!1},resetSearchTermOnBlur:{type:Boolean,required:!1,default:!0},resetSearchTermOnSelect:{type:Boolean,required:!1,default:!0},resetModelValueOnClear:{type:Boolean,required:!1,default:!0},highlightOnHover:{type:Boolean,required:!1},by:{type:[String,Function],required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},leading:{type:Boolean,required:!1},leadingIcon:{type:null,required:!1},trailing:{type:Boolean,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1}},{searchTerm:{type:String,default:""},searchTermModifiers:{}}),emits:Ge(["change","blur","focus","create","clear","highlight","update:modelValue","update:open"],["update:searchTerm"]),setup(m,{expose:f,emit:o}){const s=m,a=o,l=Bt(),t=kt("selectMenu",s),p=Ot(m,"searchTerm",{type:String,default:""}),{t:b}=Lt(),E=At(),{filterGroups:_}=Ht(),V=Et(Tt(t,"modelValue","defaultValue","open","defaultOpen","required","multiple","resetSearchTermOnBlur","resetSearchTermOnSelect","resetModelValueOnClear","highlightOnHover","by"),a),T=Ft(Y(()=>t.portal)),M=Y(()=>fe(t.content,{side:"bottom",sideOffset:8,collisionPadding:8,position:"popper"})),B=Y(()=>fe(t.arrow,{rounded:!0})),q=w(()=>typeof t.clear=="object"?t.clear:{}),I=Y(()=>t.virtualize?fe(typeof t.virtualize=="boolean"?{}:t.virtualize,{estimateSize:la(be.value,J.value||"md",t.descriptionKey,!!l["item-description"])}):!1),K=Y(()=>fe(t.searchInput,{placeholder:b("selectMenu.search"),variant:"none"})),{emitFormBlur:N,emitFormFocus:g,emitFormInput:k,emitFormChange:j,size:ie,color:U,id:ne,name:ge,highlight:ue,disabled:de,ariaAttrs:Se}=Vt(s),{orientation:oe,size:ve}=$t(s),{isLeading:W,isTrailing:S,leadingIconName:$,trailingIconName:P}=Pt(Y(()=>fe(t,{trailingIcon:E.ui.icons.chevronDown}))),J=w(()=>ve.value||ie.value),[pe,H]=Ne(),[re,Ve]=Ne({props:{item:{type:[Object,String,Number,Boolean],required:!0},index:{type:Number,required:!1}}}),d=w(()=>Gt({extend:Pa,...E.ui?.selectMenu||{}})({color:U.value??t.color,variant:t.variant,size:J?.value??t.size,loading:t.loading,highlight:ue.value??t.highlight,leading:W.value||!!t.avatar||!!l.leading,trailing:S.value||!!l.trailing,fieldGroup:oe.value,virtualize:!!t.virtualize,multiple:t.multiple}));function Je(r){if(t.multiple&&Array.isArray(r)){const x=r.map(i=>Ue($e.value,i,{labelKey:t.labelKey,valueKey:t.valueKey,by:t.by})).filter(i=>i!=null&&i!=="");return x.length>0?x.join(", "):void 0}return Ue($e.value,r,{labelKey:t.labelKey,valueKey:t.valueKey,by:t.by})}const ze=w(()=>t.items?.length?Wt(t.items)?t.items:[t.items]:[]),$e=w(()=>ze.value.flatMap(r=>r)),Pe=w(()=>{if(t.ignoreFilter||!p.value)return ze.value;const r=Array.isArray(t.filterFields)?t.filterFields:[t.labelKey];return _(ze.value,p.value,{fields:r,isStructural:x=>z(x)&&!!x.type&&["label","separator"].includes(x.type)})}),be=w(()=>Pe.value.flatMap(r=>r)),ye=w(()=>{if(!t.createItem||!p.value)return!1;const r=t.valueKey?{[t.valueKey]:p.value}:p.value;return typeof t.createItem=="object"&&t.createItem.when==="always"||t.createItem==="always"?!be.value.find(x=>Ut(x,r,t.by??t.valueKey)):!be.value.length}),he=w(()=>typeof t.createItem=="object"?t.createItem.position:"bottom"),we=Be("triggerRef");function Qe(){t.autofocus&&we.value?.$el?.focus({focusVisible:!0})}ae(()=>{setTimeout(()=>{Qe()},t.autofocusDelay)});function et(r){if(Nt(t.modelValue)===r)return;t.modelModifiers?.trim&&(typeof r=="string"||r===null||r===void 0)&&(r=r?.trim()??null),t.modelModifiers?.number&&(r=jt(r)),t.modelModifiers?.nullable&&(r??=null),t.modelModifiers?.optional&&!t.modelModifiers?.nullable&&r!==null&&(r??=void 0);const x=new Event("change",{target:{value:r}});a("change",x),j(),k(),t.resetSearchTermOnSelect&&(p.value="")}const Re=G(!1);function tt(r){Re.value=r;let x;if(r){const i=new FocusEvent("focus");a("focus",i),g(),clearTimeout(x)}else{const i=new FocusEvent("blur");a("blur",i),N(),t.resetSearchTermOnBlur&&(x=setTimeout(()=>{p.value=""},100))}}function at(r){r.preventDefault(),r.stopPropagation(),a("create",p.value)}function lt(r,x){if(z(x)){if(x.disabled){r.preventDefault();return}x.onSelect?.(r)}}function z(r){return typeof r=="object"&&r!==null}function it(r){return t.multiple&&Array.isArray(r)?r.length===0:r==null||r===""}function ot(){a("clear")}const De=Be("viewportRef"),Me=Be("comboboxRootRef");return Ae(()=>t.items,async()=>{!Re.value||!t.createItem||(await Ce(),Me.value?.highlightFirstItem?.())},{flush:"post"}),f({triggerRef:Y(()=>we.value?.$el),viewportRef:Y(()=>De.value)}),(r,x)=>(n(),F(Q,null,[y(e(pe),null,{default:u(()=>[y(e(We),{"data-slot":"item",class:h(d.value.item({class:e(t).ui?.item})),value:p.value,onSelect:at},{default:u(()=>[ce("span",{"data-slot":"itemLabel",class:h(d.value.itemLabel({class:e(t).ui?.itemLabel}))},[v(r.$slots,"create-item-label",{item:p.value},()=>[ee(Z(e(b)("selectMenu.create",{label:p.value})),1)])],2)]),_:3},8,["class","value"])]),_:3}),y(e(re),null,{default:u(({item:i,index:R})=>[z(i)&&i.type==="label"?(n(),c(e(ka),{key:0,"data-slot":"label",class:h(d.value.label({class:[e(t).ui?.label,i.ui?.label,i.class]}))},{default:u(()=>[ee(Z(e(se)(i,e(t).labelKey)),1)]),_:2},1032,["class"])):z(i)&&i.type==="separator"?(n(),c(e(Ea),{key:1,"data-slot":"separator",class:h(d.value.separator({class:[e(t).ui?.separator,i.ui?.separator,i.class]}))},null,8,["class"])):(n(),c(e(We),{key:2,"data-slot":"item",class:h(d.value.item({class:[e(t).ui?.item,z(i)&&i.ui?.item,z(i)&&i.class]})),disabled:z(i)&&i.disabled,value:e(t).valueKey&&z(i)?e(se)(i,e(t).valueKey):i,onSelect:O=>lt(O,i)},{default:u(()=>[v(r.$slots,"item",{item:i,index:R,ui:d.value},()=>[v(r.$slots,"item-leading",{item:i,index:R,ui:d.value},()=>[z(i)&&i.icon?(n(),c(xe,{key:0,name:i.icon,"data-slot":"itemLeadingIcon",class:h(d.value.itemLeadingIcon({class:[e(t).ui?.itemLeadingIcon,i.ui?.itemLeadingIcon]}))},null,8,["name","class"])):z(i)&&i.avatar?(n(),c(je,C({key:1,size:i.ui?.itemLeadingAvatarSize||e(t).ui?.itemLeadingAvatarSize||d.value.itemLeadingAvatarSize()},i.avatar,{"data-slot":"itemLeadingAvatar",class:d.value.itemLeadingAvatar({class:[e(t).ui?.itemLeadingAvatar,i.ui?.itemLeadingAvatar]})}),null,16,["size","class"])):z(i)&&i.chip?(n(),c(Rt,C({key:2,size:i.ui?.itemLeadingChipSize||e(t).ui?.itemLeadingChipSize||d.value.itemLeadingChipSize(),inset:"",standalone:""},i.chip,{"data-slot":"itemLeadingChip",class:d.value.itemLeadingChip({class:[e(t).ui?.itemLeadingChip,i.ui?.itemLeadingChip]})}),null,16,["size","class"])):A("",!0)]),ce("span",{"data-slot":"itemWrapper",class:h(d.value.itemWrapper({class:[e(t).ui?.itemWrapper,z(i)&&i.ui?.itemWrapper]}))},[ce("span",{"data-slot":"itemLabel",class:h(d.value.itemLabel({class:[e(t).ui?.itemLabel,z(i)&&i.ui?.itemLabel]}))},[v(r.$slots,"item-label",{item:i,index:R},()=>[ee(Z(z(i)?e(se)(i,e(t).labelKey):i),1)])],2),z(i)&&(e(se)(i,e(t).descriptionKey)||l["item-description"])?(n(),F("span",{key:0,"data-slot":"itemDescription",class:h(d.value.itemDescription({class:[e(t).ui?.itemDescription,z(i)&&i.ui?.itemDescription]}))},[v(r.$slots,"item-description",{item:i,index:R},()=>[ee(Z(e(se)(i,e(t).descriptionKey)),1)])],2)):A("",!0)],2),ce("span",{"data-slot":"itemTrailing",class:h(d.value.itemTrailing({class:[e(t).ui?.itemTrailing,z(i)&&i.ui?.itemTrailing]}))},[v(r.$slots,"item-trailing",{item:i,index:R,ui:d.value}),y(e(wa),{"as-child":""},{default:u(()=>[y(xe,{name:e(t).selectedIcon||e(E).ui.icons.check,"data-slot":"itemTrailingIcon",class:h(d.value.itemTrailingIcon({class:[e(t).ui?.itemTrailingIcon,z(i)&&i.ui?.itemTrailingIcon]}))},null,8,["name","class"])]),_:2},1024)],2)])]),_:2},1032,["class","disabled","value","onSelect"]))]),_:3}),y(e(ra),C({ref_key:"comboboxRootRef",ref:Me},e(V),{"ignore-filter":"","as-child":"",name:e(ge),disabled:e(de),"onUpdate:modelValue":et,"onUpdate:open":tt}),{default:u(({modelValue:i,open:R})=>[y(e(na),{"as-child":""},{default:u(()=>[y(e(Fa),C({id:e(ne),ref_key:"triggerRef",ref:we,"data-slot":"base",class:d.value.base({class:[e(t).ui?.base,e(t).class]}),tabindex:"0"},{...r.$attrs,...e(Se)}),{default:u(()=>[e(W)||e(t).avatar||l.leading?(n(),F("span",{key:0,"data-slot":"leading",class:h(d.value.leading({class:e(t).ui?.leading}))},[v(r.$slots,"leading",{modelValue:i,open:R,ui:d.value},()=>[e(W)&&e($)?(n(),c(xe,{key:0,name:e($),"data-slot":"leadingIcon",class:h(d.value.leadingIcon({class:e(t).ui?.leadingIcon}))},null,8,["name","class"])):e(t).avatar?(n(),c(je,C({key:1,size:e(t).ui?.itemLeadingAvatarSize||d.value.itemLeadingAvatarSize()},e(t).avatar,{"data-slot":"itemLeadingAvatar",class:d.value.itemLeadingAvatar({class:e(t).ui?.itemLeadingAvatar})}),null,16,["size","class"])):A("",!0)])],2)):A("",!0),v(r.$slots,"default",{modelValue:i,open:R,ui:d.value},()=>[(n(!0),F(Q,null,ke([Je(i)],O=>(n(),F(Q,{key:O},[O!=null?(n(),F("span",{key:0,"data-slot":"value",class:h(d.value.value({class:e(t).ui?.value}))},Z(O),3)):(n(),F("span",{key:1,"data-slot":"placeholder",class:h(d.value.placeholder({class:e(t).ui?.placeholder}))},Z(e(t).placeholder??" "),3))],64))),128))]),e(S)||l.trailing||e(t).clear?(n(),F("span",{key:1,"data-slot":"trailing",class:h(d.value.trailing({class:e(t).ui?.trailing}))},[v(r.$slots,"trailing",{modelValue:i,open:R,ui:d.value},()=>[e(t).clear&&!it(i)?(n(),c(e(va),{key:0,"as-child":""},{default:u(()=>[y(Dt,C({as:"span",icon:e(t).clearIcon||e(E).ui.icons.close,size:J.value,variant:"link",color:"neutral",tabindex:"-1"},q.value,{"data-slot":"trailingClear",class:d.value.trailingClear({class:e(t).ui?.trailingClear}),onClick:qe(ot,["stop"])}),null,16,["icon","size","class"])]),_:1})):e(P)?(n(),c(xe,{key:1,name:e(P),"data-slot":"trailingIcon",class:h(d.value.trailingIcon({class:e(t).ui?.trailingIcon}))},null,8,["name","class"])):A("",!0)])],2)):A("",!0)]),_:2},1040,["id","class"])]),_:2},1024),y(e(La),te(me(e(T))),{default:u(()=>[y(e(Mt),null,{default:u(()=>[y(e(ya),C({"data-slot":"content",class:d.value.content({class:e(t).ui?.content})},M.value),{default:u(()=>[y(e(Ze),{trapped:"","data-slot":"focusScope",class:h(d.value.focusScope({class:e(t).ui?.focusScope}))},{default:u(()=>[v(r.$slots,"content-top"),e(t).searchInput?(n(),c(e(Ia),{key:0,modelValue:p.value,"onUpdate:modelValue":x[1]||(x[1]=O=>p.value=O),"display-value":()=>p.value,"as-child":""},{default:u(()=>[y(Kt,C({autofocus:"",autocomplete:"off",size:J.value},K.value,{"model-modifiers":{trim:e(t).modelModifiers?.trim},"data-slot":"input",class:d.value.input({class:e(t).ui?.input}),onChange:x[0]||(x[0]=qe(()=>{},["stop"]))}),null,16,["size","model-modifiers","class"])]),_:1},8,["modelValue","display-value"])):A("",!0),y(e(_a),{"data-slot":"empty",class:h(d.value.empty({class:e(t).ui?.empty}))},{default:u(()=>[v(r.$slots,"empty",{searchTerm:p.value},()=>[ee(Z(p.value?e(b)("selectMenu.noMatch",{searchTerm:p.value}):e(b)("selectMenu.noData")),1)])]),_:3},8,["class"]),ce("div",{ref_key:"viewportRef",ref:De,role:"presentation","data-slot":"viewport",class:h(d.value.viewport({class:e(t).ui?.viewport}))},[e(t).virtualize?(n(),F(Q,{key:0},[ye.value&&he.value==="top"?(n(),c(e(H),{key:0})):A("",!0),y(e($a),C({options:be.value,"text-content":O=>z(O)?e(se)(O,e(t).labelKey):String(O)},I.value),{default:u(({option:O,virtualItem:_e})=>[y(e(Ve),{item:O,index:_e.index},null,8,["item","index"])]),_:1},16,["options","text-content"]),ye.value&&he.value==="bottom"?(n(),c(e(H),{key:1})):A("",!0)],64)):(n(),F(Q,{key:1},[ye.value&&he.value==="top"?(n(),c(e(Oe),{key:0,"data-slot":"group",class:h(d.value.group({class:e(t).ui?.group}))},{default:u(()=>[y(e(H))]),_:1},8,["class"])):A("",!0),(n(!0),F(Q,null,ke(Pe.value,(O,_e)=>(n(),c(e(Oe),{key:`group-${_e}`,"data-slot":"group",class:h(d.value.group({class:e(t).ui?.group}))},{default:u(()=>[(n(!0),F(Q,null,ke(O,(rt,Ke)=>(n(),c(e(Ve),{key:`group-${_e}-${Ke}`,item:rt,index:Ke},null,8,["item","index"]))),128))]),_:2},1032,["class"]))),128)),ye.value&&he.value==="bottom"?(n(),c(e(Oe),{key:1,"data-slot":"group",class:h(d.value.group({class:e(t).ui?.group}))},{default:u(()=>[y(e(H))]),_:1},8,["class"])):A("",!0)],64))],2),v(r.$slots,"content-bottom")]),_:3},8,["class"]),e(t).arrow?(n(),c(e(ma),C({key:0},B.value,{"data-slot":"arrow",class:d.value.arrow({class:e(t).ui?.arrow})}),null,16,["class"])):A("",!0)]),_:3},16,["class"])]),_:3})]),_:3},16)]),_:3},16,["name","disabled"])],64))}});export{Ma as _};
@@ -1,34 +0,0 @@
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,44 +0,0 @@
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 +0,0 @@
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 +0,0 @@
1
- import{_ as ut,a as dt}from"./279D2RYp.js";import{_ as mt,a as pt}from"./C7P1UCO2.js";import{_ as _t}from"./BuMC3WjZ.js";import{_ as ft,a as gt}from"./CHEFCN8Q.js";import{d as yt,e as xt,b as bt,c as l,j as o,g as s,F as R,R as vt,o as a,i as c,I as ht,m as d,y as P,f as m,_ as kt,v as _,t as y,k as i,D as jt,h as N,r as x,L as Rt}from"./NQikbhmK.js";import{_ as $t}from"./DcmZRa_F.js";import{_ as Ct}from"./CV9-fTmY.js";import{_ as Tt}from"./tvgqrYDd.js";import{_ as Pt}from"./BSIxhGsh.js";import{_ as Nt}from"./BccXfBfI.js";import{_ as Ut}from"./C9_jrmk9.js";import{_ as Dt}from"./DiOLdHBC.js";import{_ as Ft}from"./Cdff9XNh.js";import{_ as St}from"./DLSrtpsA.js";import{_ as Bt}from"./CK_2LZBS.js";import{o as Kt,s as U,_ as Lt}from"./C5iG7O4O.js";import{_ as Vt}from"./B3HO8kuh.js";import{p as wt,i as b}from"./CDk0q2hV.js";import{u as w}from"./CpjgB2aY.js";import"./YVN7WG7q.js";import"./BjaRappk.js";import"./Bn0YQDyy.js";import"./DP8hfJ9h.js";import"./D-c8ZSws.js";import"./FUXhyidq.js";import"./B9WhzpKO.js";import"./CYsTqbBS.js";import"./eaVkJRSa.js";import"./DiZyJYez.js";import"./BeLWlVK0.js";import"./g26aVPxc.js";import"./BYDaY0Z7.js";const zt={class:"flex flex-wrap items-center gap-3 mb-4"},Ht={key:0,class:"flex flex-wrap items-center gap-2"},It={class:"text-sm text-muted shrink-0 inline-flex items-center gap-1"},At=["onClick"],Ot={class:"flex flex-col gap-1"},qt={class:"flex items-center gap-2"},Mt={key:0,class:"flex flex-wrap gap-1"},Et={key:0,class:"text-xs text-gray-600 italic"},Gt={key:1},Qt={key:0,class:"text-xs text-gray-600"},Xt={key:1,class:"text-xs text-gray-600 italic"},Jt={key:0,class:"flex items-center gap-1 flex-wrap"},Wt={key:0,class:"text-xs font-medium bg-gray-100 dark:bg-gray-800 px-1.5 py-0.5 rounded"},Yt={key:1,class:"text-xs text-gray-500"},Zt={key:1,class:"text-xs text-gray-600 italic"},te={key:1,class:"text-xs text-gray-600 italic"},ee={key:1,class:"text-xs text-gray-600 italic"},ae={class:"flex justify-end gap-2"},se={key:1,class:"space-y-2","aria-busy":"true"},oe={key:2,class:"text-center py-12 text-gray-500"},ne={class:"text-xs text-gray-400 max-w-sm"},le={class:"flex w-full justify-end gap-2"},He=yt({__name:"index",setup(re){xt({title:"Projects — Piwi Dashboard"});const{data:v,refresh:D,status:z}=w("/api/projects",{key:"projects",lazy:!0,default:()=>[]},"$AIGg5yw_0K"),{data:H,refresh:I}=w("/api/tags",{lazy:!0},"$qcllBXh9C_"),F=bt(),$=N(()=>H.value?.tags||[]),A=N(()=>z.value==="pending"&&!v.value?.length),h=x(""),u=x([]),S=N(()=>{let n=v.value||[];if(h.value.trim()){const e=h.value.trim().toLowerCase();n=n.filter(p=>(p.label||p.name).toLowerCase().includes(e)||p.name.toLowerCase().includes(e))}return u.value.length>0&&(n=n.filter(e=>u.value.some(p=>(e.tags||[]).some(T=>T.id===p)))),n});function O(n){const e=u.value.indexOf(n);e===-1?u.value.push(n):u.value.splice(e,1)}function q(n){return u.value.includes(n)}const f=x(!1),M=Kt({name:U().min(1,"Project name is required").max(100),label:U().optional(),description:U().optional()}),r=Rt({name:"",label:"",description:""}),k=x([]),C=x(!1);async function E(){if(r.name?.trim())try{C.value=!0,await $fetch("/api/projects",{method:"POST",body:{name:r.name.trim(),label:r.label?.trim()||null,description:r.description?.trim()||null,tagIds:k.value.map(n=>n.id)}}),F.add({title:"Project created",description:`Project "${r.name}" has been created`,color:"success"}),f.value=!1,r.name="",r.label="",r.description="",k.value=[],await D()}catch(n){const e=n&&typeof n=="object"&&"data"in n?n.data?.message:void 0;F.add({title:"Failed to create project",description:e||"An error occurred",color:"error"})}finally{C.value=!1}}const G=[{header:"Project",columns:[{accessorKey:"name",header:b("Name")},{accessorKey:"totalRuns",header:b("Runs")}]},{accessorKey:"latestRunData",header:"Latest run",columns:[{accessorKey:"latestRun",header:b("Date")},{accessorKey:"branch",header:"Branch"},{accessorKey:"duration",header:b("Duration")},{accessorKey:"status",header:b("Status")},{accessorKey:"testRatio",header:"Test status"},{accessorKey:"report",header:"Reports"}]},{accessorKey:"actions",header:"Project actions"}];return(n,e)=>{const p=ut,T=dt,B=mt,Q=_t,X=gt,J=ht,K=$t,g=kt,L=jt,W=Ct,Y=Tt,Z=Pt,tt=Nt,et=Ut,at=Dt,V=Ft,st=pt,ot=St,nt=ft,lt=Bt,rt=Lt,it=Vt,ct=vt;return a(),l(R,null,[o(nt,{id:"projects"},{header:s(()=>[o(X,null,{leading:s(()=>[o(p),o(T,{items:[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects"}]})]),right:s(()=>[o(Q,{actions:[{label:"New project",icon:"i-lucide-plus",onClick:()=>f.value=!0},{label:"Refresh",icon:"i-lucide-refresh-cw",variant:"outline",onClick:()=>i(D)()}]},{leading:s(()=>[o(B,{topic:"projects.table",size:"sm"})]),_:1},8,["actions"])]),_:1})]),body:s(()=>[c("div",zt,[o(J,{modelValue:h.value,"onUpdate:modelValue":e[0]||(e[0]=t=>h.value=t),icon:"i-lucide-search",placeholder:"Search projects by name...",class:"min-w-48 flex-1",ui:{base:"w-full"}},null,8,["modelValue"]),$.value.length>0?(a(),l("div",Ht,[c("span",It,[e[10]||(e[10]=d(" Filter by tag (any match): ",-1)),o(B,{topic:"projects.tag-filter"})]),(a(!0),l(R,null,P($.value,t=>(a(),l("button",{key:t.id,type:"button",class:"cursor-pointer focus:outline-none",onClick:j=>O(t.id)},[o(K,{text:t.text,color:t.color,variant:q(t.id)?"solid":"outline"},null,8,["text","color","variant"])],8,At))),128)),u.value.length>0?(a(),m(g,{key:0,size:"xs",variant:"ghost",color:"neutral",icon:"i-lucide-x",label:"Clear filters",onClick:e[1]||(e[1]=t=>u.value=[])})):_("",!0)])):_("",!0)]),S.value.length>0?(a(),m(at,{key:0,"min-width":"60rem",bleed:!1},{default:s(()=>[o(et,{data:S.value,columns:G,ui:{base:"table-fixed border-separate border-spacing-0",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"name-cell":s(({row:t})=>[c("div",Ot,[c("div",qt,[o(L,{to:`/projects/${t.original.id}`,class:"text-primary hover:underline font-medium"},{default:s(()=>[d(y(t.original.label||t.original.name),1)]),_:2},1032,["to"])]),t.original.tags?.length?(a(),l("div",Mt,[(a(!0),l(R,null,P(t.original.tags,j=>(a(),m(K,{key:j.id,text:j.text,color:j.color},null,8,["text","color"]))),128))])):_("",!0)])]),"totalRuns-cell":s(({row:t})=>[t.original.totalRuns===0?(a(),l("span",Et,"No data")):(a(),l("span",Gt,y(t.original.totalRuns)+" runs",1))]),"latestRun-cell":s(({row:t})=>[t.original.latestRun?(a(),l("span",Qt,y(("prettyDateFormat"in n?n.prettyDateFormat:i(wt))(t.original.latestRun.startTime)),1)):(a(),l("span",Xt,"No data"))]),"branch-cell":s(({row:t})=>[t.original.latestRun?.metadata?.scm?(a(),l("div",Jt,[t.original.latestRun.metadata.scm.branch?(a(),l("span",Wt,y(t.original.latestRun.metadata.scm.branch),1)):_("",!0),t.original.latestRun.metadata.scm.commit?(a(),l("code",Yt,y(t.original.latestRun.metadata.scm.commit.substring(0,7)),1)):_("",!0)])):_("",!0)]),"duration-cell":s(({row:t})=>[t.original.latestRun?.duration!=null?(a(),m(W,{key:0,ms:t.original.latestRun.duration,class:"text-sm text-gray-600"},null,8,["ms"])):(a(),l("span",Zt,"No data"))]),"status-cell":s(({row:t})=>[t.original.latestRun?(a(),m(Y,{key:0,status:t.original.latestRun.status},null,8,["status"])):(a(),l("span",te,"No data"))]),"testRatio-cell":s(({row:t})=>[t.original.latestRun?(a(),m(Z,{key:0,passed:t.original.latestRun.passedTests,failed:t.original.latestRun.failedTests,skipped:t.original.latestRun.skippedTests,flaky:t.original.latestRun.flakyTests,"did-not-run":t.original.latestRun.didNotRunTests??0,total:t.original.latestRun.totalTests},null,8,["passed","failed","skipped","flaky","did-not-run","total"])):(a(),l("span",ee,"No data"))]),"report-cell":s(({row:t})=>[t.original.latestRun?(a(),m(tt,{key:0,reports:t.original.latestRun.reports},null,8,["reports"])):_("",!0)]),"actions-header":s(()=>[...e[11]||(e[11]=[c("div",{class:"text-right"},"Project actions",-1)])]),"actions-cell":s(({row:t})=>[c("div",ae,[o(g,{to:`/projects/${t.original.id}`,size:"sm",variant:"outline"},{default:s(()=>[...e[12]||(e[12]=[d("View details",-1)])]),_:1},8,["to"]),o(g,{to:`/projects/${t.original.id}/edit`,size:"sm",variant:"ghost",icon:"i-lucide-pencil"},null,8,["to"])])]),_:1},8,["data"])]),_:1})):A.value?(a(),l("div",se,[e[13]||(e[13]=c("span",{class:"sr-only",role:"status"},"Loading projects…",-1)),o(V,{class:"h-10 w-full rounded-lg"}),(a(),l(R,null,P(6,t=>o(V,{key:t,class:"h-14 w-full rounded-lg"})),64))])):i(v)&&i(v).length>0?(a(),l("div",oe,[...e[14]||(e[14]=[c("p",{class:"text-lg mb-2"},"No projects match your search",-1),c("p",{class:"text-sm"},"Try adjusting your search or filters",-1)])])):(a(),m(ot,{key:3,icon:"i-lucide-rocket",text:"No projects yet"},{default:s(()=>[c("p",ne,[e[17]||(e[17]=d(" Projects are created automatically once the reporter submits its first run — see the ",-1)),o(L,{to:"/",class:"text-primary hover:underline"},{default:s(()=>[...e[15]||(e[15]=[d("home page",-1)])]),_:1}),e[18]||(e[18]=d(" for a copy-paste setup snippet, or the ",-1)),o(st,{to:"reporter","no-icon":"",class:"text-primary hover:underline"},{default:s(()=>[...e[16]||(e[16]=[d("reporter docs",-1)])]),_:1}),e[19]||(e[19]=d(". ",-1))]),o(g,{icon:"i-lucide-plus",label:"New project",variant:"ghost",size:"sm",class:"mt-2",onClick:e[2]||(e[2]=t=>f.value=!0)})]),_:1}))]),_:1}),o(ct,null,{default:s(()=>[o(it,{open:f.value,title:"Create new project","onUpdate:open":e[9]||(e[9]=t=>f.value=t)},{body:s(()=>[o(rt,{schema:i(M),state:i(r)},{default:s(()=>[o(lt,{mode:"create",name:i(r).name,"onUpdate:name":e[3]||(e[3]=t=>i(r).name=t),label:i(r).label,"onUpdate:label":e[4]||(e[4]=t=>i(r).label=t),description:i(r).description,"onUpdate:description":e[5]||(e[5]=t=>i(r).description=t),tags:k.value,"onUpdate:tags":e[6]||(e[6]=t=>k.value=t),"all-tags":$.value,onTagCreated:e[7]||(e[7]=t=>i(I)())},null,8,["name","label","description","tags","all-tags"])]),_:1},8,["schema","state"])]),footer:s(()=>[c("div",le,[o(g,{color:"neutral",variant:"ghost",label:"Cancel",onClick:e[8]||(e[8]=t=>f.value=!1)}),o(g,{label:"Create project",icon:"i-lucide-plus",loading:C.value,onClick:E},null,8,["loading"])])]),_:1},8,["open"])]),_:1})],64)}}});export{He as default};
@@ -1,6 +0,0 @@
1
- import{_ as ie}from"./CZfMdzfk.js";import{d as re,b as de,w as D,c as r,j as a,ac as ce,k as s,g as d,F as y,f as v,h as N,r as k,o as n,i,I as ue,l as me,_ as pe,m as c,p as fe,t as p,v as _,y as R,s as _e,q as ge,L as ye,A as ve}from"./NQikbhmK.js";import{_ as he}from"./rWNTSFD6.js";import{_ as ke}from"./C7P1UCO2.js";import{_ as xe}from"./DprVVyUQ.js";import{_ as be}from"./B9WhzpKO.js";import{_ as Se}from"./DS636elg.js";import{_ as we}from"./DP8hfJ9h.js";import{_ as Te}from"./D0HNloZ9.js";import{u as W}from"./CpjgB2aY.js";import"./CDk0q2hV.js";import"./Bn0YQDyy.js";import"./BjaRappk.js";import"./eptP4pGv.js";import"./CYsTqbBS.js";import"./g26aVPxc.js";const Pe={class:"space-y-6"},Ue={class:"space-y-3"},Ce={key:0,class:"flex items-center gap-2 text-sm text-success-600 dark:text-success-400"},Ie={key:1,class:"flex items-center gap-2 text-sm text-warning-600 dark:text-warning-400"},Me={key:2,class:"grid grid-cols-2 gap-2 text-sm"},$e={class:"font-mono"},Ve={class:"font-mono"},Ee={key:3,class:"text-sm text-muted space-y-1"},ze={class:"flex items-center gap-2 w-full"},Ae={key:0,class:"mb-4 p-4 rounded-lg border border-primary/30 bg-primary/5 space-y-3"},De={class:"grid grid-cols-2 gap-3"},Ne={class:"flex justify-end gap-2"},Re={key:1,class:"text-sm text-muted py-4 text-center"},We={class:"space-y-2"},Oe={class:"flex-1 min-w-0"},Fe={class:"font-medium text-sm flex items-center gap-1.5"},Le={class:"text-xs text-muted"},Be={key:3,class:"ml-1 text-primary text-xs"},je={class:"flex items-center gap-1"},He={key:0,class:"text-sm text-muted py-4 text-center"},qe={class:"space-y-2"},Je={class:"flex-1 min-w-0 space-y-0.5"},Qe={class:"font-medium text-sm"},Xe={class:"text-xs text-muted flex flex-wrap gap-x-3"},Ke={key:0},Ye={key:1},Ge={key:2,class:"text-warning-500"},Ze={class:"flex flex-wrap gap-1 mt-1"},et={class:"flex items-center gap-1"},vt=re({__name:"notifications",async setup(tt){let f,x;const u=de(),j=ve(),I=N(()=>j.public.authEnabled),H=["PIWI_SMTP_HOST","PIWI_SMTP_PORT","PIWI_SMTP_USER","PIWI_SMTP_PASS","PIWI_SMTP_FROM","PIWI_SMTP_FROM_NAME","PIWI_SMTP_SECURE"],{data:m}=([f,x]=D(()=>W("/api/settings/smtp","$gVOXSKoU4Q")),f=await f,x(),f),h=k(""),M=k(!1);async function q(){if(h.value){M.value=!0;try{const o=await $fetch("/api/settings/smtp/test",{method:"POST",body:{to:h.value}});o.success?u.add({title:"Test email sent",description:`Check ${h.value}`,color:"success"}):u.add({title:"Send failed",description:o.error||"Unknown error",color:"error"})}catch(o){u.add({title:"Send failed",description:String(o?.message??o),color:"error"})}finally{M.value=!1}}}const{data:J,refresh:O}=I.value?([f,x]=D(()=>W("/api/channels","$fv1jJkJo5B")),f=await f,x(),f):{data:k(null),refresh:()=>{}},$=N(()=>J.value?.channels??[]),b=k(!1),l=ye({name:"",type:"email",address:"",webhookUrl:"",url:"",secret:"",global:!1}),V=k(!1),E=k(null),Q=[{label:"Email",value:"email"},{label:"Slack webhook",value:"slack"},{label:"Webhook",value:"webhook"}];async function X(){V.value=!0;try{const o={};l.type==="email"?o.address=l.address:l.type==="slack"?o.webhookUrl=l.webhookUrl:l.type==="webhook"&&(o.url=l.url,l.secret&&(o.secret=l.secret)),await $fetch("/api/channels",{method:"POST",body:{name:l.name,type:l.type,config:o,global:l.global}}),b.value=!1,Object.assign(l,{name:"",type:"email",address:"",webhookUrl:"",url:"",secret:"",global:!1}),await O(),u.add({title:"Channel created",color:"success"})}catch(o){u.add({title:"Failed to create channel",description:String(o?.message??o),color:"error"})}finally{V.value=!1}}async function K(o){try{await $fetch(`/api/channels/${o}`,{method:"DELETE"}),await O(),u.add({title:"Channel deleted",color:"success"})}catch(e){u.add({title:"Failed to delete channel",description:String(e?.message??e),color:"error"})}}async function Y(o){E.value=o;try{const e=await $fetch(`/api/channels/${o}/test`,{method:"POST"});e.success?u.add({title:"Test notification sent",color:"success"}):u.add({title:"Test failed",description:e.error,color:"error"})}catch(e){u.add({title:"Test failed",description:String(e?.message??e),color:"error"})}finally{E.value=null}}const{data:G,refresh:F}=I.value?([f,x]=D(()=>W("/api/subscriptions","$WhEQp2PfoM")),f=await f,x(),f):{data:k(null),refresh:()=>{}},z=N(()=>G.value?.subscriptions??[]);async function Z(o){try{await $fetch(`/api/subscriptions/${o}`,{method:"DELETE"}),await F(),u.add({title:"Subscription removed",color:"success"})}catch(e){u.add({title:"Failed to remove subscription",description:String(e?.message??e),color:"error"})}}async function ee(o){const e=o.mutedUntil&&new Date(o.mutedUntil)>new Date;try{await $fetch(`/api/subscriptions/${o.id}`,{method:"PATCH",body:{mutedUntil:e?null:new Date(Date.now()+10080*60*1e3).toISOString()}}),await F(),u.add({title:e?"Unmuted":"Muted for 7 days",color:"success"})}catch(U){u.add({title:"Failed to update subscription",description:String(U?.message??U),color:"error"})}}function P(o){return o.mutedUntil&&new Date(o.mutedUntil)>new Date}function L(o){return o==="personal_email"?"i-lucide-user-round":o==="email"?"i-lucide-mail":o==="slack"?"i-lucide-slack":"i-lucide-webhook"}function te(o){return o.replace(/\./g," › ")}return(o,e)=>{const U=ie,C=fe,se=he,oe=ke,S=ue,g=pe,A=xe,w=be,ne=Se,B=_e,le=we,ae=Te;return n(),r("div",Pe,[a(A,{icon:"i-lucide-mail",title:"SMTP email delivery",help:"settings.smtp"},ce({subtitle:d(()=>[e[9]||(e[9]=c(" Configure SMTP via environment variables. The connection cannot be changed here. ",-1))]),actions:d(()=>[s(m)?.configured?(n(),v(U,{key:0,"env-vars":H,size:"md"})):_("",!0)]),default:d(()=>[i("div",Ue,[s(m)?.configured?(n(),r("div",Ce,[a(C,{name:"i-lucide-circle-check-big",class:"size-4"}),e[10]||(e[10]=c(" Configured ",-1))])):(n(),r("div",Ie,[a(C,{name:"i-lucide-circle-alert",class:"size-4"}),e[11]||(e[11]=c(" Not configured ",-1))])),s(m)?.configured?(n(),r("div",Me,[e[12]||(e[12]=i("div",{class:"text-muted"},"Host",-1)),i("div",$e,p(s(m)?.host)+":"+p(s(m)?.port),1),e[13]||(e[13]=i("div",{class:"text-muted"},"From",-1)),i("div",null,p(s(m)?.fromName?`${s(m).fromName} <${s(m).from}>`:s(m)?.from),1),e[14]||(e[14]=i("div",{class:"text-muted"},"User",-1)),i("div",Ve,p(s(m)?.user),1),e[15]||(e[15]=i("div",{class:"text-muted"},"TLS",-1)),i("div",null,p(s(m)?.secure?"Yes (port 465)":"STARTTLS / plain"),1)])):_("",!0),s(m)?.configured?_("",!0):(n(),r("div",Ee,[e[16]||(e[16]=i("p",null,"Set these environment variables to enable email notifications:",-1)),a(se,{code:`PIWI_SMTP_HOST=smtp.example.com
2
- PIWI_SMTP_PORT=465
3
- PIWI_SMTP_USER=user@example.com
4
- PIWI_SMTP_PASS=secret
5
- PIWI_SMTP_FROM=noreply@example.com
6
- PIWI_SMTP_FROM_NAME=Piwi Dashboard`,lang:"bash"})]))])]),_:2},[s(m)?.configured?{name:"footer",fn:d(()=>[i("div",ze,[a(oe,{topic:"notifications.test-email"}),a(S,{modelValue:s(h),"onUpdate:modelValue":e[0]||(e[0]=t=>me(h)?h.value=t:null),type:"email",placeholder:"Send test to email address…",class:"flex-1"},null,8,["modelValue"]),a(g,{color:"neutral",variant:"soft",icon:"i-lucide-send",loading:s(M),disabled:!s(h),onClick:q},{default:d(()=>[...e[17]||(e[17]=[c(" Send test ",-1)])]),_:1},8,["loading","disabled"])])]),key:"0"}:void 0]),1024),s(I)?(n(),r(y,{key:0},[a(A,{icon:"i-lucide-radio",title:"Notification channels",count:s($).length,help:"notifications.channels"},{actions:d(()=>[a(g,{size:"sm",icon:"i-lucide-plus",onClick:e[1]||(e[1]=t=>b.value=!s(b))},{default:d(()=>[...e[18]||(e[18]=[c(" Add channel ",-1)])]),_:1})]),default:d(()=>[s(b)?(n(),r("div",Ae,[e[21]||(e[21]=i("h4",{class:"font-medium text-sm"},"New channel",-1)),i("div",De,[a(w,{label:"Name"},{default:d(()=>[a(S,{modelValue:s(l).name,"onUpdate:modelValue":e[2]||(e[2]=t=>s(l).name=t),placeholder:"e.g. My email",class:"w-full"},null,8,["modelValue"])]),_:1}),a(w,{label:"Type"},{default:d(()=>[a(ne,{modelValue:s(l).type,"onUpdate:modelValue":e[3]||(e[3]=t=>s(l).type=t),items:Q,class:"w-full"},null,8,["modelValue"])]),_:1})]),s(l).type==="email"?(n(),v(w,{key:0,label:"Email address"},{default:d(()=>[a(S,{modelValue:s(l).address,"onUpdate:modelValue":e[4]||(e[4]=t=>s(l).address=t),type:"email",placeholder:"you@example.com",class:"w-full"},null,8,["modelValue"])]),_:1})):s(l).type==="slack"?(n(),v(w,{key:1,label:"Slack webhook URL"},{default:d(()=>[a(S,{modelValue:s(l).webhookUrl,"onUpdate:modelValue":e[5]||(e[5]=t=>s(l).webhookUrl=t),placeholder:"https://hooks.slack.com/…",class:"w-full"},null,8,["modelValue"])]),_:1})):s(l).type==="webhook"?(n(),r(y,{key:2},[a(w,{label:"Endpoint URL"},{default:d(()=>[a(S,{modelValue:s(l).url,"onUpdate:modelValue":e[6]||(e[6]=t=>s(l).url=t),placeholder:"https://your-server.com/webhook",class:"w-full"},null,8,["modelValue"])]),_:1}),a(w,{label:"Secret (optional)",description:"Used to sign requests with X-Piwi-Signature header"},{default:d(()=>[a(S,{modelValue:s(l).secret,"onUpdate:modelValue":e[7]||(e[7]=t=>s(l).secret=t),type:"password",placeholder:"Shared secret",class:"w-full"},null,8,["modelValue"])]),_:1})],64)):_("",!0),i("div",Ne,[a(g,{color:"neutral",variant:"ghost",size:"sm",onClick:e[8]||(e[8]=t=>b.value=!1)},{default:d(()=>[...e[19]||(e[19]=[c("Cancel",-1)])]),_:1}),a(g,{color:"primary",size:"sm",loading:s(V),disabled:!s(l).name,onClick:X},{default:d(()=>[...e[20]||(e[20]=[c(" Save channel ",-1)])]),_:1},8,["loading","disabled"])])])):_("",!0),s($).length===0&&!s(b)?(n(),r("div",Re," No channels yet. Add one to start receiving notifications. ")):_("",!0),i("div",We,[(n(!0),r(y,null,R(s($),t=>(n(),r("div",{key:t.id,class:"flex items-center gap-3 rounded-lg border border-default px-4 py-3"},[a(C,{name:L(t.type),class:"size-5 text-muted shrink-0"},null,8,["name"]),i("div",Oe,[i("div",Fe,[c(p(t.name)+" ",1),t.type==="personal_email"?(n(),v(B,{key:0,size:"xs",variant:"soft",color:"neutral"},{default:d(()=>[...e[22]||(e[22]=[c("auto",-1)])]),_:1})):_("",!0)]),i("div",Le,[t.type==="personal_email"||t.type==="email"?(n(),r(y,{key:0},[c(p(t.config.address),1)],64)):t.type==="slack"?(n(),r(y,{key:1},[c("Slack webhook")],64)):(n(),r(y,{key:2},[c(p(t.config.url),1)],64)),t.userId===null?(n(),r("span",Be,"(global)")):_("",!0)])]),i("div",je,[a(g,{icon:"i-lucide-send",color:"neutral",variant:"ghost",size:"sm",title:"Send test notification",loading:s(E)===t.id,onClick:T=>Y(t.id)},null,8,["loading","onClick"]),t.type==="personal_email"?(n(),v(le,{key:0,text:"Remove your email in Account settings to disconnect"},{default:d(()=>[a(g,{icon:"i-lucide-trash-2",color:"neutral",variant:"ghost",size:"sm",disabled:""})]),_:1})):(n(),v(g,{key:1,icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"sm",title:"Delete channel",onClick:T=>K(t.id)},null,8,["onClick"]))])]))),128))])]),_:1},8,["count"]),a(A,{icon:"i-lucide-bell",title:"My subscriptions",count:s(z).length,help:"notifications.subscriptions"},{default:d(()=>[s(z).length===0?(n(),r("div",He,[...e[23]||(e[23]=[c(" No subscriptions yet. Use the ",-1),i("strong",null,"Subscribe",-1),c(" bell on a project page to get started. ",-1)])])):_("",!0),i("div",qe,[(n(!0),r(y,null,R(s(z),t=>(n(),r("div",{key:t.id,class:ge(["flex items-center gap-3 rounded-lg border border-default px-4 py-3",P(t)?"opacity-60":""])},[a(C,{name:L(t.channel.type),class:"size-5 text-muted shrink-0"},null,8,["name"]),i("div",Je,[i("div",Qe,p(t.channel.name),1),i("div",Xe,[t.projectId?(n(),r("span",Ke,"Project #"+p(t.projectId),1)):(n(),r("span",Ye,"All projects")),i("span",null,p(t.mode),1),P(t)?(n(),r("span",Ge,"Muted until "+p(new Date(t.mutedUntil).toLocaleDateString()),1)):_("",!0)]),i("div",Ze,[(n(!0),r(y,null,R(t.events??[],T=>(n(),v(B,{key:T,size:"xs",variant:"soft",color:"neutral"},{default:d(()=>[c(p(te(T)),1)]),_:2},1024))),128))])]),i("div",et,[a(g,{icon:P(t)?"i-lucide-bell":"i-lucide-bell-off",color:"neutral",variant:"ghost",size:"sm",title:P(t)?"Unmute":"Mute for 7 days",onClick:T=>ee(t)},null,8,["icon","title","onClick"]),a(g,{icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"sm",title:"Remove subscription",onClick:T=>Z(t.id)},null,8,["onClick"])])],2))),128))])]),_:1},8,["count"])],64)):(n(),v(ae,{key:1,color:"info",icon:"i-lucide-info",title:"Authentication required",description:"Channels and subscriptions require authentication (PIWI_AUTH_ENABLED=true)."}))])}}});export{vt as default};
@@ -1,10 +0,0 @@
1
- import{_ as Q,a as Y}from"./Ar3IelOY.js";import{_ as B}from"./DprVVyUQ.js";import{_ as H}from"./DT53RWbC.js";import{_ as V}from"./rWNTSFD6.js";import{_ as J}from"./B44A4LSJ.js";import{d as D,f as k,g as _,o as m,i as t,j as n,m as l,t as I,k as e,h as S,_ as M,b as X,B as Z,c as $,p as N,r as w,ax as L,w as P,F as tt,v as b,A as et,x as ot}from"./NQikbhmK.js";import{u as E}from"./Bn0YQDyy.js";import{_ as nt}from"./Jo8kRmHz.js";import{a as st}from"./C7P1UCO2.js";import{f as at}from"./CDk0q2hV.js";import{u as it}from"./CHNwfU1y.js";import{u as j}from"./CpjgB2aY.js";import"./eptP4pGv.js";import"./CYsTqbBS.js";import"./g26aVPxc.js";import"./CNFYDQmj.js";import"./BYDaY0Z7.js";import"./BjaRappk.js";const lt={class:"space-y-4 text-sm"},rt={class:"space-y-1"},ct={class:"space-y-3"},ut={class:"space-y-1"},dt={class:"flex items-start gap-2"},pt={class:"text-xs break-all flex-1"},mt={class:"space-y-1"},_t=`reporter: [
2
- ['@piwitests/reporter', { projectName: 'my-project' }],
3
- ],`,ft=D({__name:"DesktopReporterCard",props:{url:{},token:{}},setup(f){const s=f,{copy:u}=E(),r=S(()=>`reporter: [
4
- ['@piwitests/reporter', {
5
- serverUrl: '${s.url}',
6
- projectName: 'my-project',
7
- apiKey: '${s.token}',
8
- }],
9
- ],`);return(d,a)=>{const o=V,p=J,y=M,v=B;return m(),k(v,{icon:"i-lucide-upload",title:"Send results to this app"},{subtitle:_(()=>[...a[1]||(a[1]=[l(" While this app is running, the Playwright reporter finds it on its own — no URL and no token in your config. ",-1)])]),default:_(()=>[t("div",lt,[t("div",rt,[a[2]||(a[2]=t("div",{class:"text-muted"},"playwright.config.ts",-1)),n(o,{code:_t,lang:"typescript"}),a[3]||(a[3]=t("p",{class:"text-muted text-xs"},[l(" The app publishes its address and token to "),t("code",null,"~/.piwi/desktop.json"),l(" while it runs. The reporter reads that file only when your config and environment set no "),t("code",null,"serverUrl"),l(" and no "),t("code",null,"apiKey"),l(", so a project already pointed at another dashboard is never redirected here. ")],-1))]),n(p),t("div",ct,[a[6]||(a[6]=t("p",{class:"text-muted"},[l(" Configure it by hand when discovery cannot apply — tests running as another user, in a container, or with a config that already sets "),t("code",null,"serverUrl"),l(". The token is a local secret: prefer the "),t("code",null,"PIWI_API_KEY"),l(" env var over committing it. ")],-1)),t("div",ut,[a[4]||(a[4]=t("div",{class:"text-muted"},"Access token",-1)),t("div",dt,[t("code",pt,I(f.token),1),n(y,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy access token",onClick:a[0]||(a[0]=c=>e(u)(f.token,{toast:!0}))})])]),t("div",mt,[a[5]||(a[5]=t("div",{class:"text-muted"},"playwright.config.ts",-1)),n(o,{code:e(r),lang:"typescript"},null,8,["code"])])])])]),_:1})}}}),vt=Object.assign(ft,{__name:"DesktopReporterCard"}),kt={class:"space-y-3 text-sm"},yt={class:"space-y-1"},gt={class:"flex items-start gap-2"},xt={class:"text-xs break-all flex-1"},ht={class:"space-y-1"},bt={class:"flex items-start gap-2"},Ct={class:"text-xs break-all flex-1"},wt={class:"space-y-1"},$t=D({__name:"DesktopMcpCard",props:{url:{},token:{}},setup(f){const s=f,{copy:u}=E(),r=S(()=>`${s.url}/mcp`),d=S(()=>`claude mcp add --transport http piwi ${r.value} \\
10
- --header "Authorization: Bearer ${s.token}"`);return(a,o)=>{const p=M,y=V,v=B;return m(),k(v,{icon:"i-lucide-plug",title:"Connect an AI assistant (MCP)"},{subtitle:_(()=>[...o[2]||(o[2]=[l(" This app exposes a local MCP endpoint. Point your client at the URL below and authenticate with the access token — it is the Bearer token, even though sign-in is off. ",-1)])]),default:_(()=>[t("div",kt,[t("div",yt,[o[3]||(o[3]=t("div",{class:"text-muted"},"MCP URL",-1)),t("div",gt,[t("code",xt,I(e(r)),1),n(p,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy MCP URL",onClick:o[0]||(o[0]=c=>e(u)(e(r),{toast:!0}))})])]),t("div",ht,[o[4]||(o[4]=t("div",{class:"text-muted"},"Access token",-1)),t("div",bt,[t("code",Ct,I(f.token),1),n(p,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy access token",onClick:o[1]||(o[1]=c=>e(u)(f.token,{toast:!0}))})])]),t("div",wt,[o[5]||(o[5]=t("div",{class:"text-muted"},"Claude Code",-1)),n(y,{code:e(d),lang:"sh"},null,8,["code"])])])]),_:1})}}}),St=Object.assign($t,{__name:"DesktopMcpCard"}),Bt={key:0,class:"flex items-center gap-2 text-sm text-muted"},Dt={key:1,class:"space-y-4"},Rt={class:"flex items-start justify-between gap-4"},Ut={class:"flex items-start justify-between gap-4"},Lt={key:2,class:"space-y-1 text-sm text-muted"},Pt=D({__name:"DesktopServiceCard",setup(f){const s=X(),u=w(!0),r=w(!1),d=w(!1),a=w(!1),o=w(!1);async function p(){const c=L();if(!c){r.value=!1,u.value=!1;return}try{const i=await c.invoke("desktop_get_service_settings");a.value=!!i.run_in_background,o.value=!!i.start_on_login,r.value=!0}catch{r.value=!1}finally{u.value=!1}}Z(p);async function y(c){const i=L();if(i){d.value=!0;try{await i.invoke("desktop_set_run_in_background",{enabled:c}),a.value=c}catch{s.add({title:'Could not update "Run in background"',color:"error"})}finally{d.value=!1}}}async function v(c){const i=L();if(i){d.value=!0;try{await i.invoke("desktop_set_start_on_login",{enabled:c}),o.value=c}catch{s.add({title:'Could not update "Start on login"',color:"error"})}finally{d.value=!1}}}return(c,i)=>{const R=N,C=nt,U=B;return m(),k(U,{icon:"i-lucide-monitor-cog",title:"Desktop app"},{subtitle:_(()=>[...i[0]||(i[0]=[l(" Keep Piwi running in the background and start it automatically when you log in. ",-1)])]),default:_(()=>[e(u)?(m(),$("div",Bt,[n(R,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),i[1]||(i[1]=l(" Checking… ",-1))])):e(r)?(m(),$("div",Dt,[t("div",Rt,[i[2]||(i[2]=t("div",{class:"space-y-0.5"},[t("p",{class:"text-sm font-medium"},"Run in background"),t("p",{class:"text-xs text-muted"},"Closing the window keeps the server running in the tray instead of quitting.")],-1)),n(C,{"model-value":e(a),disabled:e(d),"onUpdate:modelValue":y},null,8,["model-value","disabled"])]),t("div",Ut,[i[3]||(i[3]=t("div",{class:"space-y-0.5"},[t("p",{class:"text-sm font-medium"},"Start on login"),t("p",{class:"text-xs text-muted"}," Launch Piwi automatically (hidden in the tray) when you sign in to your computer. ")],-1)),n(C,{"model-value":e(o),disabled:e(d),"onUpdate:modelValue":v},null,8,["model-value","disabled"])])])):(m(),$("div",Lt,[...i[4]||(i[4]=[t("p",null,"Manage these from the Piwi tray icon:",-1),t("p",{class:"text-xs"},[l(" Right-click the Piwi icon in your system tray for "),t("strong",null,"Run in background"),l(" and "),t("strong",null,"Start on login"),l(". On Windows the icon may be hidden under the “show hidden icons” arrow (▲) next to the clock — drag it onto the taskbar to keep it in view. ")],-1)])]))]),_:1})}}}),jt=Object.assign(Pt,{__name:"DesktopServiceCard"}),It={class:"space-y-6"},Tt={class:"flex flex-wrap items-center gap-x-6 gap-y-3 text-sm"},te=D({__name:"about",async setup(f){let s,u;const r=et(),d=it(),{data:a}=([s,u]=P(()=>j("/api/version","$mIoGdvWYhF")),s=await s,u(),s),{data:o}=([s,u]=P(()=>j("/api/admin/stats",{immediate:d,default:()=>null},"$IuuLVEbWlE")),s=await s,u(),s),{data:p}=([s,u]=P(()=>j("/api/desktop/reporter-config",{immediate:d,default:()=>null},"$A4rSe7BAN_")),s=await s,u(),s),y=r.public.appVersion,v=r.public.buildSha,c=r.public.buildTime,i=r.public.nodeVersion,R=r.public.authEnabled,C=S(()=>v?v.slice(0,7):null),U=S(()=>{const g=a.value?.dbBackend;return g==="postgresql"?"PostgreSQL":g==="sqlite"?"SQLite":g??null});return(g,x)=>{const h=Y,O=Q,T=B,z=H,W=vt,F=St,K=jt,q=st,A=ot,G=N;return m(),$("div",It,[n(T,{icon:"i-lucide-info",title:"Application"},{default:_(()=>[n(O,null,{default:_(()=>[n(h,{label:"Version",value:`v${e(y)}`},null,8,["value"]),e(C)?(m(),k(h,{key:0,label:"Build",value:e(C),hint:e(v)},null,8,["value","hint"])):b("",!0),e(c)?(m(),k(h,{key:1,label:"Built",value:("formatRelativeTime"in g?g.formatRelativeTime:e(at))(e(c)),hint:e(c)},null,8,["value","hint"])):b("",!0),n(h,{label:"Node.js",value:e(i)},null,8,["value"]),n(h,{label:"Database",value:e(U)},null,8,["value"]),n(h,{label:"Authentication",value:e(R)?"Enabled":"Disabled"},null,8,["value"])]),_:1})]),_:1}),e(d)?(m(),$(tt,{key:0},[e(o)?(m(),k(z,{key:0,database:e(o).databaseLocation,storage:e(o).storageLocation},null,8,["database","storage"])):b("",!0),e(p)?(m(),k(W,{key:1,url:e(p).url,token:e(p).token},null,8,["url","token"])):b("",!0),e(p)?(m(),k(F,{key:2,url:e(p).url,token:e(p).token},null,8,["url","token"])):b("",!0),n(K)],64)):b("",!0),n(T,{icon:"i-lucide-book-open",title:"Resources"},{default:_(()=>[t("div",Tt,[n(q,{to:""},{default:_(()=>[...x[0]||(x[0]=[l("Documentation",-1)])]),_:1}),n(A,{to:"/docs",class:"inline-flex items-center gap-1 text-primary hover:underline"},{default:_(()=>[...x[1]||(x[1]=[l(" API reference ",-1)])]),_:1}),n(A,{to:"https://github.com/piwitests/platform",target:"_blank",rel:"noopener noreferrer",class:"inline-flex items-center gap-1 text-primary hover:underline"},{default:_(()=>[x[2]||(x[2]=l(" GitHub ",-1)),n(G,{name:"i-lucide-external-link",class:"w-3.5 h-3.5 shrink-0"})]),_:1})])]),_:1})])}}});export{te as default};