@piwitests/server 0.23.0 → 0.24.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 (346) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{Clg2Qx0r.js → -COcylA_.js} +1 -1
  3. package/.output/public/_nuxt/03FA4-rI.js +1 -0
  4. package/.output/public/_nuxt/{B7tiBVLW.js → 5a7jHE9s.js} +1 -1
  5. package/.output/public/_nuxt/{roaTZkYi.js → 6Z_ZwH8I.js} +1 -1
  6. package/.output/public/_nuxt/{xZQGtnVA.js → 7ZHq6PCI.js} +1 -1
  7. package/.output/public/_nuxt/{5SkLJHl8.js → 98sAB6Gu.js} +1 -1
  8. package/.output/public/_nuxt/{DnxrNGE_.js → B--J7VNt.js} +1 -1
  9. package/.output/public/_nuxt/{DJzFYrBt.js → B1LUinhp.js} +1 -1
  10. package/.output/public/_nuxt/{axj2iIDK.js → B33YjaHr.js} +1 -1
  11. package/.output/public/_nuxt/B69RP95P.js +1 -0
  12. package/.output/public/_nuxt/{DNKZmhbX.js → B8H4XydJ.js} +1 -1
  13. package/.output/public/_nuxt/{DmqCquDx.js → B8Xm4_S_.js} +1 -1
  14. package/.output/public/_nuxt/{Ya8ZzWuY.js → BBhrClA9.js} +1 -1
  15. package/.output/public/_nuxt/{BZFiz2UB.js → BCGljaM0.js} +1 -1
  16. package/.output/public/_nuxt/{oSLbl-p0.js → BFxvHlO9.js} +1 -1
  17. package/.output/public/_nuxt/{PDSNX4Te.js → BKrWWV14.js} +1 -1
  18. package/.output/public/_nuxt/BN1zZw5b.js +9 -0
  19. package/.output/public/_nuxt/{Dbf8eT28.js → BPXqL9vK.js} +1 -1
  20. package/.output/public/_nuxt/{DgEa6_av.js → BUnwEAjq.js} +1 -1
  21. package/.output/public/_nuxt/{CUOS6S13.js → BVLqydCr.js} +1 -1
  22. package/.output/public/_nuxt/{CvVbKrcH.js → BWMSVSNM.js} +1 -1
  23. package/.output/public/_nuxt/{Wk7ZKG4B.js → B_r0xHVS.js} +1 -1
  24. package/.output/public/_nuxt/{DAhv9aNg.js → BakMHV79.js} +1 -1
  25. package/.output/public/_nuxt/{BDUfBn3i.js → Bd8B-yeR.js} +1 -1
  26. package/.output/public/_nuxt/{sqqg4oXL.js → BevElZaK.js} +1 -1
  27. package/.output/public/_nuxt/{B0tmRAhY.js → BfA6lfg4.js} +1 -1
  28. package/.output/public/_nuxt/{D3SJGdl4.js → Bg93Rnts.js} +1 -1
  29. package/.output/public/_nuxt/{Ck_fTH5z.js → BgABj4Ty.js} +1 -1
  30. package/.output/public/_nuxt/{B2L0-Lzp.js → BkM2KXUo.js} +1 -1
  31. package/.output/public/_nuxt/{CBJFORiZ.js → BkxRbXIj.js} +1 -1
  32. package/.output/public/_nuxt/{Bsc11YIJ.js → Bme1UkOl.js} +1 -1
  33. package/.output/public/_nuxt/{BfcMJBTf.js → BmzxRbcg.js} +1 -1
  34. package/.output/public/_nuxt/{D7fxV-UA.js → Bn0jaRxI.js} +1 -1
  35. package/.output/public/_nuxt/{C77tM5Hz.js → BoNKdx5o.js} +1 -1
  36. package/.output/public/_nuxt/{Bb2mDqKr.js → Bp3FRuEm.js} +1 -1
  37. package/.output/public/_nuxt/{BjOFxi54.js → BrUBOQ0y.js} +1 -1
  38. package/.output/public/_nuxt/{DXkFgrsT.js → BtSGUY-7.js} +1 -1
  39. package/.output/public/_nuxt/{QZYo3ErV.js → BtbpLWDs.js} +1 -1
  40. package/.output/public/_nuxt/{Bag08cIY.js → BvAfKk6C.js} +1 -1
  41. package/.output/public/_nuxt/{BOvtXn3m.js → BwEN1fJ1.js} +1 -1
  42. package/.output/public/_nuxt/{DYjxDsYC.js → C-XjxjG5.js} +1 -1
  43. package/.output/public/_nuxt/{RkNtgoTD.js → C3W_wyr9.js} +1 -1
  44. package/.output/public/_nuxt/{CNu3kken.js → C5TrTuWv.js} +3 -3
  45. package/.output/public/_nuxt/{B4mZElvM.js → C7D5Wl7T.js} +1 -1
  46. package/.output/public/_nuxt/{ZLfZolDM.js → C7fq_rHE.js} +1 -1
  47. package/.output/public/_nuxt/{B_JSV0yG.js → C8Paf_V1.js} +1 -1
  48. package/.output/public/_nuxt/{C2_7XZo0.js → CD8ZzAFC.js} +1 -1
  49. package/.output/public/_nuxt/{CTTmX4gy.js → CDTeSrLO.js} +1 -1
  50. package/.output/public/_nuxt/{CLWMETf9.js → CGHV0Y2d.js} +1 -1
  51. package/.output/public/_nuxt/{AQ86C4c2.js → CIpF9l75.js} +1 -1
  52. package/.output/public/_nuxt/{jR2xm3_t.js → CJ1rmnk4.js} +1 -1
  53. package/.output/public/_nuxt/{7_9fts7T.js → CMuzkARi.js} +1 -1
  54. package/.output/public/_nuxt/{a8Z6VC7V.js → COuZu9FO.js} +1 -1
  55. package/.output/public/_nuxt/{D7t0Dn3h.js → CX5Q0dZ8.js} +1 -1
  56. package/.output/public/_nuxt/{9_aJhhcm.js → CX_G-FHC.js} +14 -14
  57. package/.output/public/_nuxt/{C9I1Dp3S.js → Ce5_Tq63.js} +1 -1
  58. package/.output/public/_nuxt/{BtZNYmZO.js → Cf4MFOuf.js} +1 -1
  59. package/.output/public/_nuxt/{mi22nGUC.js → CgkXEZMo.js} +1 -1
  60. package/.output/public/_nuxt/{Ce89VyHE.js → CjBktNrC.js} +1 -1
  61. package/.output/public/_nuxt/{Bj_v57Zu.js → CjtjQV60.js} +1 -1
  62. package/.output/public/_nuxt/{BuGAn4f7.js → CpcrljrH.js} +1 -1
  63. package/.output/public/_nuxt/{6vX5JdHr.js → Cq33x7yV.js} +1 -1
  64. package/.output/public/_nuxt/{jxc14CqP.js → CsV7pmcT.js} +1 -1
  65. package/.output/public/_nuxt/{DTrPCv7R.js → Cu2Q4iPh.js} +1 -1
  66. package/.output/public/_nuxt/{DylyATWU.js → CyLcEDg2.js} +1 -1
  67. package/.output/public/_nuxt/{Ce_j5NtN.js → D0Kop4bS.js} +1 -1
  68. package/.output/public/_nuxt/{DCE2_MKD.js → D1Y43xM1.js} +1 -1
  69. package/.output/public/_nuxt/{499RbBSX.js → D1vqYZsL.js} +1 -1
  70. package/.output/public/_nuxt/{BjMo2tKC.js → D2rZosKf.js} +1 -1
  71. package/.output/public/_nuxt/D7jpwkRG.js +5 -0
  72. package/.output/public/_nuxt/{BFYkWpPx.js → D8NAb7VE.js} +1 -1
  73. package/.output/public/_nuxt/{CIQeRUSy.js → D8vguZKg.js} +1 -1
  74. package/.output/public/_nuxt/{Bq4_kqIp.js → DEvYVl9M.js} +1 -1
  75. package/.output/public/_nuxt/{DBWM_xs-.js → DF6Mes5z.js} +1 -1
  76. package/.output/public/_nuxt/{CGDPUNcO.js → DGq4A2Pd.js} +1 -1
  77. package/.output/public/_nuxt/{CF_eDZHu.js → DH5H1DJh.js} +1 -1
  78. package/.output/public/_nuxt/{kWnH8yJq.js → DL8knjzi.js} +1 -1
  79. package/.output/public/_nuxt/{CC8wk-N0.js → DM3bDZC6.js} +1 -1
  80. package/.output/public/_nuxt/{Ce47NgZw.js → DMAiMrNr.js} +1 -1
  81. package/.output/public/_nuxt/{HbnAkiyK.js → DMWfVJCj.js} +1 -1
  82. package/.output/public/_nuxt/{B3AG2m76.js → DMsm-RGQ.js} +1 -1
  83. package/.output/public/_nuxt/{DeewM3Wg.js → DMtrFQqi.js} +1 -1
  84. package/.output/public/_nuxt/{D1Ucra3E.js → DPZBpFOX.js} +1 -1
  85. package/.output/public/_nuxt/{DiWxW-w3.js → DVEGfqtt.js} +1 -1
  86. package/.output/public/_nuxt/{DZ-KbUZi.js → D_y2VS8k.js} +1 -1
  87. package/.output/public/_nuxt/DaNC-xl1.js +1 -0
  88. package/.output/public/_nuxt/{DZECGgZm.js → DbmGeOus.js} +1 -1
  89. package/.output/public/_nuxt/{HIGGZ_c-.js → DcLbz6DV.js} +1 -1
  90. package/.output/public/_nuxt/{B_MVJP17.js → DcR0Mmdl.js} +1 -1
  91. package/.output/public/_nuxt/{DNqm5cWU.js → DhYznn-U.js} +1 -1
  92. package/.output/public/_nuxt/DhuRRlmK.js +1 -0
  93. package/.output/public/_nuxt/{pZbe82l5.js → Drw8yQg6.js} +1 -1
  94. package/.output/public/_nuxt/{CPQRQqXU.js → DuO5wfAC.js} +1 -1
  95. package/.output/public/_nuxt/{FJTsZ5Aa.js → DuOH5jcQ.js} +1 -1
  96. package/.output/public/_nuxt/{BM5BPKlc.js → DvEsAuE9.js} +1 -1
  97. package/.output/public/_nuxt/{dUPMBJ4f.js → Dz6g_QJT.js} +1 -1
  98. package/.output/public/_nuxt/{BAbrtVp3.js → DzZpIs4W.js} +1 -1
  99. package/.output/public/_nuxt/DzzNS-K1.js +1 -0
  100. package/.output/public/_nuxt/{BwwfasRt.js → Fsw2W4TA.js} +1 -1
  101. package/.output/public/_nuxt/{CdEzDaDI.js → LwoTUb-r.js} +1 -1
  102. package/.output/public/_nuxt/{DuBtaw3j.js → OfPjZaky.js} +1 -1
  103. package/.output/public/_nuxt/{LTMoFvEY.js → P5uOaRUZ.js} +1 -1
  104. package/.output/public/_nuxt/{B3G-TIoP.js → Qo6oszaF.js} +1 -1
  105. package/.output/public/_nuxt/{DprkT7rM.js → T5UuMUxA.js} +1 -1
  106. package/.output/public/_nuxt/UY8pjaZA.js +1 -0
  107. package/.output/public/_nuxt/{CmTzxoQt.js → V9p3z39z.js} +1 -1
  108. package/.output/public/_nuxt/{5QBnDbs_.js → VACXezo0.js} +1 -1
  109. package/.output/public/_nuxt/{6sA-GK37.js → YmCeJkZ2.js} +1 -1
  110. package/.output/public/_nuxt/builds/latest.json +1 -1
  111. package/.output/public/_nuxt/builds/meta/70224ee0-4d1f-45d2-b380-2ecb18064bf1.json +1 -0
  112. package/.output/public/_nuxt/entry.DzPSf_u5.css +1 -0
  113. package/.output/public/_nuxt/fXUwH_3d.js +1 -0
  114. package/.output/public/_nuxt/{CAoQUDI4.js → opwuUqHG.js} +1 -1
  115. package/.output/public/_nuxt/{2yLW7WU0.js → opyDpgSw.js} +1 -1
  116. package/.output/public/_nuxt/{B070fjS-.js → sVV8xB9f.js} +1 -1
  117. package/.output/public/_nuxt/{C6t4kxaa.js → xa5UHCot.js} +1 -1
  118. package/.output/server/chunks/_/collect.mjs +1 -1
  119. package/.output/server/chunks/_/markers.mjs +1 -1
  120. package/.output/server/chunks/_/quarantine.mjs +1 -1
  121. package/.output/server/chunks/_/users.mjs +1 -1
  122. package/.output/server/chunks/build/Checkbox-BisdHf8n.mjs +1 -1
  123. package/.output/server/chunks/build/CodeBlock-B8BNtZAe.mjs +1 -1
  124. package/.output/server/chunks/build/DashboardSidebarToggle-C3HdHvlE.mjs +1 -1
  125. package/.output/server/chunks/build/DiagnosisPanel-BVb2LgHu.mjs +1 -1
  126. package/.output/server/chunks/build/DiagnosisResult-xVgZlfKK.mjs +1 -1
  127. package/.output/server/chunks/build/EntityLinks-Dzn73fbq.mjs +1 -1
  128. package/.output/server/chunks/build/HelpHint-plioHKA0.mjs +27 -0
  129. package/.output/server/chunks/build/NavigationMenu-RfBOyS32.mjs +1 -1
  130. package/.output/server/chunks/build/OpenInIdeLink-Jp6SzEtD.mjs +1 -1
  131. package/.output/server/chunks/build/RunReports-nuLb-Nm3.mjs +1 -1
  132. package/.output/server/chunks/build/Select-CEyw7HGK.mjs +1 -1
  133. package/.output/server/chunks/build/SelectMenu-C02Hs2_F.mjs +1 -1
  134. package/.output/server/chunks/build/Table-qZdnm9t2.mjs +1 -1
  135. package/.output/server/chunks/build/Tooltip-BI3WQErw.mjs +1 -1
  136. package/.output/server/chunks/build/{_id_-D7UtAIPR.mjs → _id_-26komi8G.mjs} +15 -8
  137. package/.output/server/chunks/build/{_id_-D7UtAIPR.mjs.map → _id_-26komi8G.mjs.map} +1 -1
  138. package/.output/server/chunks/build/{_id_-CrGTZymJ.mjs → _id_-w7YCSiiy.mjs} +2 -2
  139. package/.output/server/chunks/build/{_id_-CrGTZymJ.mjs.map → _id_-w7YCSiiy.mjs.map} +1 -1
  140. package/.output/server/chunks/build/_id_-wiULjAVc.mjs +1 -1
  141. package/.output/server/chunks/build/ai-DYhpzbqp.mjs +1 -1
  142. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  143. package/.output/server/chunks/build/{db.client-Bdqk_eYQ.mjs → db.client-DijpEH6i.mjs} +3 -1
  144. package/.output/server/chunks/build/db.client-DijpEH6i.mjs.map +1 -0
  145. package/.output/server/chunks/build/{default-DO1izI2V.mjs → default-CQa_bmAf.mjs} +2 -2
  146. package/.output/server/chunks/build/{default-DO1izI2V.mjs.map → default-CQa_bmAf.mjs.map} +1 -1
  147. package/.output/server/chunks/build/fetch-tkz5_OA-.mjs +1 -1
  148. package/.output/server/chunks/build/import-B27Sv7h5.mjs +1 -1
  149. package/.output/server/chunks/build/{index-vRwzDXLs.mjs → index-Dq6nk6OB.mjs} +367 -87
  150. package/.output/server/chunks/build/index-Dq6nk6OB.mjs.map +1 -0
  151. package/.output/server/chunks/build/isValueEqualOrExist-D4lZ8uRY.mjs +1 -1
  152. package/.output/server/chunks/build/login-hxCF06JT.mjs +1 -1
  153. package/.output/server/chunks/build/mcp-BVW1llyW.mjs +1 -1
  154. package/.output/server/chunks/build/server.mjs +6 -6
  155. package/.output/server/chunks/build/settings-metadata-DnAK4Rzg.mjs +1 -1
  156. package/.output/server/chunks/build/storage-zN92cA9q.mjs +1 -1
  157. package/.output/server/chunks/build/test-functions-DVRJgiWo.mjs +1 -1
  158. package/.output/server/chunks/build/{useCopyRich-CZxJ7IY_.mjs → useCopyRich-BM9GTjJi.mjs} +64 -18
  159. package/.output/server/chunks/build/{useCopyRich-CZxJ7IY_.mjs.map → useCopyRich-BM9GTjJi.mjs.map} +1 -1
  160. package/.output/server/chunks/nitro/nitro.mjs +1037 -733
  161. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  162. package/.output/server/chunks/routes/__piwi/session.get.mjs +1 -1
  163. package/.output/server/chunks/routes/api/ai/step-resolution.post.mjs +88 -0
  164. package/.output/server/chunks/routes/api/ai/step-resolution.post.mjs.map +1 -0
  165. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +1 -1
  166. package/.output/server/chunks/routes/api/auth/change-password.post.mjs +1 -1
  167. package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs +1 -1
  168. package/.output/server/chunks/routes/api/auth/login.post.mjs +1 -1
  169. package/.output/server/chunks/routes/api/auth/logout.post.mjs +1 -1
  170. package/.output/server/chunks/routes/api/auth/me.get.mjs +1 -1
  171. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +1 -1
  172. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +1 -1
  173. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +1 -1
  174. package/.output/server/chunks/routes/api/auth/reset-password.post.mjs +1 -1
  175. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +1 -1
  176. package/.output/server/chunks/routes/api/auth/setup.get.mjs +1 -1
  177. package/.output/server/chunks/routes/api/auth/setup.post.mjs +1 -1
  178. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +1 -1
  179. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +1 -1
  180. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +1 -1
  181. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +1 -1
  182. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +1 -1
  183. package/.output/server/chunks/routes/api/desktop/import-local.post.mjs +1 -1
  184. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +1 -1
  185. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +1 -1
  186. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +1 -1
  187. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +1 -1
  188. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +1 -1
  189. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +1 -1
  190. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +1 -1
  191. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +1 -1
  192. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +1 -1
  193. package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs +1 -1
  194. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +1 -1
  195. package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs +1 -1
  196. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +1 -1
  197. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +1 -1
  198. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +1 -1
  199. package/.output/server/chunks/routes/api/files/_...path_.get.mjs +1 -1
  200. package/.output/server/chunks/routes/api/health.get.mjs +1 -1
  201. package/.output/server/chunks/routes/api/index.get.mjs +1 -1
  202. package/.output/server/chunks/routes/api/index.get2.mjs +1 -1
  203. package/.output/server/chunks/routes/api/index.get3.mjs +1 -1
  204. package/.output/server/chunks/routes/api/index.get4.mjs +1 -1
  205. package/.output/server/chunks/routes/api/index.get5.mjs +1 -1
  206. package/.output/server/chunks/routes/api/index.post.mjs +1 -1
  207. package/.output/server/chunks/routes/api/index.post2.mjs +1 -1
  208. package/.output/server/chunks/routes/api/index.post3.mjs +1 -1
  209. package/.output/server/chunks/routes/api/index.post4.mjs +1 -1
  210. package/.output/server/chunks/routes/api/index.post5.mjs +1 -1
  211. package/.output/server/chunks/routes/api/index.post6.mjs +1 -1
  212. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +1 -1
  213. package/.output/server/chunks/routes/api/links/_id_.delete.mjs +1 -1
  214. package/.output/server/chunks/routes/api/links/_id_.patch.mjs +1 -1
  215. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +1 -1
  216. package/.output/server/chunks/routes/api/markers/_id_.put.mjs +1 -1
  217. package/.output/server/chunks/routes/api/notifications/stream.get.mjs +1 -1
  218. package/.output/server/chunks/routes/api/projects/_id/ai-steps.get.mjs +63 -0
  219. package/.output/server/chunks/routes/api/projects/_id/ai-steps.get.mjs.map +1 -0
  220. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +1 -1
  221. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +1 -1
  222. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +1 -1
  223. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +1 -1
  224. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +1 -1
  225. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +1 -1
  226. package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs +1 -1
  227. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +1 -1
  228. package/.output/server/chunks/routes/api/projects/_id/members.put.mjs +1 -1
  229. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +1 -1
  230. package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs +1 -1
  231. package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs +1 -1
  232. package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs +1 -1
  233. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +1 -1
  234. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +1 -1
  235. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +1 -1
  236. package/.output/server/chunks/routes/api/projects/_id/test-functions/extract.post.mjs +1 -1
  237. package/.output/server/chunks/routes/api/projects/_id/test-functions/validate-proposal.post.mjs +1 -1
  238. package/.output/server/chunks/routes/api/projects/_id/test-functions.get.mjs +1 -1
  239. package/.output/server/chunks/routes/api/projects/_id/test-functions.post.mjs +1 -1
  240. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +1 -1
  241. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +1 -1
  242. package/.output/server/chunks/routes/api/projects/_id_.get.mjs +1 -1
  243. package/.output/server/chunks/routes/api/projects/_id_.put.mjs +1 -1
  244. package/.output/server/chunks/routes/api/projects/menu.get.mjs +1 -1
  245. package/.output/server/chunks/routes/api/projects/overview.get.mjs +1 -1
  246. package/.output/server/chunks/routes/api/projects.get.mjs +1 -1
  247. package/.output/server/chunks/routes/api/search.get.mjs +1 -1
  248. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +1 -1
  249. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +1 -1
  250. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +1 -1
  251. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +1 -1
  252. package/.output/server/chunks/routes/api/settings/ai.get.mjs +1 -1
  253. package/.output/server/chunks/routes/api/settings/ai.put.mjs +1 -1
  254. package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs +1 -1
  255. package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs +1 -1
  256. package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs +1 -1
  257. package/.output/server/chunks/routes/api/settings/smtp.get.mjs +1 -1
  258. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +1 -1
  259. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +1 -1
  260. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +1 -1
  261. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +1 -1
  262. package/.output/server/chunks/routes/api/setup-status.get.mjs +1 -1
  263. package/.output/server/chunks/routes/api/stream.get.mjs +1 -1
  264. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +1 -1
  265. package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +1 -1
  266. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +1 -1
  267. package/.output/server/chunks/routes/api/tags/_id_.put.mjs +1 -1
  268. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +1 -1
  269. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +1 -1
  270. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +1 -1
  271. package/.output/server/chunks/routes/api/test-functions/_id_.delete.mjs +1 -1
  272. package/.output/server/chunks/routes/api/test-functions/_id_.put.mjs +1 -1
  273. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +1 -1
  274. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +1 -1
  275. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +1 -1
  276. package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs +1 -1
  277. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +1 -1
  278. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +1 -1
  279. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +1 -1
  280. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +1 -1
  281. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +1 -1
  282. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs +1 -1
  283. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +1 -1
  284. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +1 -1
  285. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +1 -1
  286. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +1 -1
  287. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +1 -1
  288. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +1 -1
  289. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +1 -1
  290. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +1 -1
  291. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +1 -1
  292. package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs +1 -1
  293. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +1 -1
  294. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +1 -1
  295. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +1 -1
  296. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +1 -1
  297. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +1 -1
  298. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +1 -1
  299. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +1 -1
  300. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +1 -1
  301. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +1 -1
  302. package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs +1 -1
  303. package/.output/server/chunks/routes/api/test-runs/import.post.mjs +1 -1
  304. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +1 -1
  305. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +1 -1
  306. package/.output/server/chunks/routes/api/test-runs/start.post.mjs +1 -1
  307. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +3 -1
  308. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
  309. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +2 -1
  310. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
  311. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +2 -1
  312. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
  313. package/.output/server/chunks/routes/api/traces/check.post.mjs +1 -1
  314. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +1 -1
  315. package/.output/server/chunks/routes/api/users/_id/index.get.mjs +1 -1
  316. package/.output/server/chunks/routes/api/users/_id/index.post.mjs +1 -1
  317. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +1 -1
  318. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +1 -1
  319. package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +1 -1
  320. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +1 -1
  321. package/.output/server/chunks/routes/api/users/_id_.patch.mjs +1 -1
  322. package/.output/server/chunks/routes/api/version.get.mjs +1 -1
  323. package/.output/server/chunks/routes/mcp.post.mjs +1 -1
  324. package/.output/server/chunks/routes/renderer.mjs +1 -1
  325. package/.output/server/database/migrations/0045_productive_stingray.sql +1 -0
  326. package/.output/server/database/migrations/meta/0045_snapshot.json +3779 -0
  327. package/.output/server/database/migrations/meta/_journal.json +7 -0
  328. package/.output/server/database/migrations-pg/0046_gorgeous_hercules.sql +1 -0
  329. package/.output/server/database/migrations-pg/meta/0046_snapshot.json +4486 -0
  330. package/.output/server/database/migrations-pg/meta/_journal.json +7 -0
  331. package/.output/server/index.mjs +1 -1
  332. package/.output/server/package.json +1 -1
  333. package/package.json +1 -1
  334. package/.output/public/_nuxt/BNyTWIad.js +0 -9
  335. package/.output/public/_nuxt/BVyjw9Bi.js +0 -1
  336. package/.output/public/_nuxt/BZOykMLD.js +0 -1
  337. package/.output/public/_nuxt/CEai-PWF.js +0 -1
  338. package/.output/public/_nuxt/CYhm2FBS.js +0 -5
  339. package/.output/public/_nuxt/CfhOanaF.js +0 -1
  340. package/.output/public/_nuxt/Cz7SCzdW.js +0 -1
  341. package/.output/public/_nuxt/DFfqRQxk.js +0 -1
  342. package/.output/public/_nuxt/builds/meta/6d1766a0-0aba-46b8-9d97-7dd174130359.json +0 -1
  343. package/.output/public/_nuxt/eT2oObCh.js +0 -1
  344. package/.output/public/_nuxt/entry.D_eWXrnD.css +0 -1
  345. package/.output/server/chunks/build/db.client-Bdqk_eYQ.mjs.map +0 -1
  346. package/.output/server/chunks/build/index-vRwzDXLs.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import{_ as ra}from"./Ya8ZzWuY.js";import{aR as oa,d as oe,Z as Ve,Y as Re,U as pe,o as i,c as y,j as s,g as o,V as M,k as e,W as X,C as Pe,X as ge,f as w,v as k,F as re,h as K,aB as ia,aI as na,$ as ze,aS as qe,S as da,r as b,aT as ua,aE as ca,a2 as pa,a3 as ma,a5 as fa,a6 as va,a7 as ya,aN as ba,aU as ha,i as d,q as D,m as V,t as _,y as Se,ag as $e,a8 as ga,aJ as be,w as _a,b as ka,O as wa,B as Ca,D as xa,am as Aa,_ as qa,s as $a,p as Ua,E as Ia,l as he,M as Va,A as Ra}from"./CNu3kken.js";import{_ as Pa}from"./D3SJGdl4.js";import{_ as za}from"./DZECGgZm.js";import{_ as Sa}from"./Ce47NgZw.js";import{_ as ja}from"./CF_eDZHu.js";import{_ as Ka}from"./C9I1Dp3S.js";import{_ as Da}from"./Wk7ZKG4B.js";import{_ as Ea}from"./roaTZkYi.js";import{_ as Fa}from"./CfhOanaF.js";import{_ as Ba}from"./DJzFYrBt.js";import{L as Ue}from"./DZ-KbUZi.js";import{u as je}from"./BVyjw9Bi.js";import{V as Ke}from"./B3AG2m76.js";import{u as De}from"./BZOykMLD.js";import{R as Ga}from"./Bq4_kqIp.js";import{_ as Ma}from"./BM5BPKlc.js";import{p as ue,i as le}from"./DeewM3Wg.js";import{a as Oa,u as Ta}from"./DprkT7rM.js";import{o as La,s as ce,l as Ie,_ as Na,u as Ha}from"./DGnQ69wW.js";import"./CmTzxoQt.js";import"./B_JSV0yG.js";import"./BjaRappk.js";const Wa="radio.select";function Ya(j,A,u){oa(Wa,u,{originalEvent:j,value:A})}var Ja=oe({inheritAttrs:!1,__name:"Radio",props:{id:{type:String,required:!1},value:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},checked:{type:Boolean,required:!1,default:void 0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:checked","select"],setup(j,{emit:A}){const u=j,h=A,g=Ve(u,"checked",h,{passive:u.checked===void 0}),{value:l}=Re(u),{forwardRef:I,currentElement:x}=pe(),R=je(x),C=De(),P=K(()=>u.id&&x.value?document.querySelector(`[for="${u.id}"]`)?.innerText??u.value:void 0);function q(p){u.disabled||Ya(p,u.value,z=>{h("select",z),!z?.defaultPrevented&&(g.value=!0,R.value&&z.stopPropagation())})}return(p,z)=>(i(),y(re,null,[s(e(ge),X({id:p.id,ref:e(I),role:"radio",type:p.as==="button"?"button":void 0,as:p.as,"aria-checked":e(g)??!1,"aria-label":P.value,"as-child":p.asChild,disabled:p.disabled?"":void 0,"data-state":e(g)?"checked":"unchecked","data-disabled":p.disabled?"":void 0,value:e(l),required:p.required,name:p.name},{...e(C),...p.$attrs},{onClick:Pe(q,["stop"])}),{default:o(()=>[M(p.$slots,"default",{checked:e(g)})]),_:3},16,["id","type","as","aria-checked","aria-label","as-child","disabled","data-state","data-disabled","value","required","name"]),e(R)&&p.name?(i(),w(e(Ke),X({key:0,type:"radio",tabindex:"-1",value:e(l),checked:!!e(g),name:p.name,disabled:p.disabled,required:p.required},e(C)),null,16,["value","checked","name","disabled","required"])):k("v-if",!0)],64))}}),Qa=Ja;const[Xa,Za]=ze("RadioGroupRoot");var et=oe({__name:"RadioGroupRoot",props:{modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1,default:!1}},emits:["update:modelValue"],setup(j,{emit:A}){const u=j,h=A,{forwardRef:g,currentElement:l}=pe(),I=Ve(u,"modelValue",h,{defaultValue:u.defaultValue,passive:u.modelValue===void 0}),{disabled:x,loop:R,orientation:C,name:P,required:q,dir:p}=Re(u),z=ia(p),$=je(l);return Za({modelValue:I,changeModelValue:m=>{I.value=m},disabled:x,loop:R,orientation:C,name:P?.value,required:q}),(m,c)=>(i(),w(e(na),{"as-child":"",orientation:e(C),dir:e(z),loop:e(R)},{default:o(()=>[s(e(ge),{ref:e(g),role:"radiogroup","data-disabled":e(x)?"":void 0,"as-child":m.asChild,as:m.as,"aria-orientation":e(C),"aria-required":e(q),dir:e(z)},{default:o(()=>[M(m.$slots,"default",{modelValue:e(I)}),e($)&&e(P)?(i(),w(e(Ke),{key:0,required:e(q),disabled:e(x),value:e(I),name:e(P)},null,8,["required","disabled","value","name"])):k("v-if",!0)]),_:3},8,["data-disabled","as-child","as","aria-orientation","aria-required","dir"])]),_:3},8,["orientation","dir","loop"]))}}),at=et;const[tt,st]=ze("RadioGroupItem");var lt=oe({inheritAttrs:!1,__name:"RadioGroupItem",props:{id:{type:String,required:!1},value:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["select"],setup(j,{emit:A}){const u=j,h=A,{forwardRef:g,currentElement:l}=pe(),I=Xa(),x=K(()=>I.disabled.value||u.disabled),R=K(()=>I.required.value||u.required),C=K(()=>ua(I.modelValue?.value,u.value));st({disabled:x,checked:C});const P=b(!1),q=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"];qe("keydown",$=>{q.includes($.key)&&(P.value=!0)}),qe("keyup",()=>{P.value=!1});function p(){setTimeout(()=>{P.value&&l.value?.click()},0)}const z=De();return($,m)=>(i(),w(e(Ga),{checked:C.value,disabled:x.value,"as-child":"",focusable:!x.value,active:C.value},{default:o(()=>[s(Qa,X({...e(z),...$.$attrs,...u},{ref:e(g),checked:C.value,required:R.value,disabled:x.value,"onUpdate:checked":m[0]||(m[0]=c=>e(I).changeModelValue($.value)),onSelect:m[1]||(m[1]=c=>h("select",c)),onKeydown:m[2]||(m[2]=da(Pe(()=>{},["prevent"]),["enter"])),onFocus:p}),{default:o(()=>[M($.$slots,"default",{checked:C.value,required:R.value,disabled:x.value})]),_:3},16,["checked","required","disabled"])]),_:3},8,["checked","disabled","focusable","active"]))}}),rt=lt,ot=oe({__name:"RadioGroupIndicator",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(j){const{forwardRef:A}=pe(),u=tt();return(h,g)=>(i(),w(e(ca),{present:h.forceMount||e(u).checked.value},{default:o(()=>[s(e(ge),X({ref:e(A),"data-state":e(u).checked.value?"checked":"unchecked","data-disabled":e(u).disabled.value?"":void 0,"as-child":h.asChild,as:h.as},h.$attrs),{default:o(()=>[M(h.$slots,"default")]),_:3},16,["data-state","data-disabled","as-child","as"])]),_:3},8,["present"]))}}),it=ot;const nt={slots:{root:"relative",fieldset:"flex gap-x-2",legend:"mb-1 block font-medium text-default",item:"flex items-start",container:"flex items-center",base:"rounded-full ring ring-inset ring-accented overflow-hidden focus-visible:outline-3",indicator:"flex items-center justify-center size-full after:bg-default after:rounded-full",wrapper:"w-full",label:"block font-medium text-default",description:"text-muted"},variants:{color:{primary:{base:"outline-primary/25 focus-visible:ring-primary",indicator:"bg-primary"},secondary:{base:"outline-secondary/25 focus-visible:ring-secondary",indicator:"bg-secondary"},success:{base:"outline-success/25 focus-visible:ring-success",indicator:"bg-success"},info:{base:"outline-info/25 focus-visible:ring-info",indicator:"bg-info"},warning:{base:"outline-warning/25 focus-visible:ring-warning",indicator:"bg-warning"},error:{base:"outline-error/25 focus-visible:ring-error",indicator:"bg-error"},neutral:{base:"outline-inverted/25 focus-visible:ring-inverted",indicator:"bg-inverted"}},variant:{list:{item:""},card:{item:"border border-muted rounded-lg"},table:{item:"border border-muted"}},orientation:{horizontal:{fieldset:"flex-row"},vertical:{fieldset:"flex-col"}},indicator:{start:{item:"flex-row",wrapper:"ms-2"},end:{item:"flex-row-reverse",wrapper:"me-2"},hidden:{base:"sr-only",wrapper:"text-center"}},size:{xs:{fieldset:"gap-y-0.5",legend:"text-xs",base:"size-3",item:"text-xs",container:"h-4",indicator:"after:size-1"},sm:{fieldset:"gap-y-0.5",legend:"text-xs",base:"size-3.5",item:"text-xs",container:"h-4",indicator:"after:size-1"},md:{fieldset:"gap-y-1",legend:"text-sm",base:"size-4",item:"text-sm",container:"h-5",indicator:"after:size-1.5"},lg:{fieldset:"gap-y-1",legend:"text-sm",base:"size-4.5",item:"text-sm",container:"h-5",indicator:"after:size-1.5"},xl:{fieldset:"gap-y-1.5",legend:"text-base",base:"size-5",item:"text-base",container:"h-6",indicator:"after:size-2"}},highlight:{true:""},disabled:{true:{item:"opacity-75",base:"cursor-not-allowed",label:"cursor-not-allowed",description:"cursor-not-allowed"}},required:{true:{legend:"after:content-['*'] after:ms-0.5 after:text-error"}}},compoundVariants:[{size:"xs",variant:["card","table"],class:{item:"p-2.5"}},{size:"sm",variant:["card","table"],class:{item:"p-3"}},{size:"md",variant:["card","table"],class:{item:"p-3.5"}},{size:"lg",variant:["card","table"],class:{item:"p-4"}},{size:"xl",variant:["card","table"],class:{item:"p-4.5"}},{orientation:"horizontal",variant:"table",class:{item:"first-of-type:rounded-s-lg last-of-type:rounded-e-lg",fieldset:"gap-0 -space-x-px"}},{orientation:"vertical",variant:"table",class:{item:"first-of-type:rounded-t-lg last-of-type:rounded-b-lg",fieldset:"gap-0 -space-y-px"}},{color:"primary",variant:"card",class:{item:"has-data-[state=checked]:border-primary"}},{color:"secondary",variant:"card",class:{item:"has-data-[state=checked]:border-secondary"}},{color:"success",variant:"card",class:{item:"has-data-[state=checked]:border-success"}},{color:"info",variant:"card",class:{item:"has-data-[state=checked]:border-info"}},{color:"warning",variant:"card",class:{item:"has-data-[state=checked]:border-warning"}},{color:"error",variant:"card",class:{item:"has-data-[state=checked]:border-error"}},{color:"neutral",variant:"card",class:{item:"has-data-[state=checked]:border-inverted"}},{color:"primary",variant:"table",class:{item:"has-data-[state=checked]:bg-primary/10 has-data-[state=checked]:border-primary/50 has-data-[state=checked]:z-[1]"}},{color:"secondary",variant:"table",class:{item:"has-data-[state=checked]:bg-secondary/10 has-data-[state=checked]:border-secondary/50 has-data-[state=checked]:z-[1]"}},{color:"success",variant:"table",class:{item:"has-data-[state=checked]:bg-success/10 has-data-[state=checked]:border-success/50 has-data-[state=checked]:z-[1]"}},{color:"info",variant:"table",class:{item:"has-data-[state=checked]:bg-info/10 has-data-[state=checked]:border-info/50 has-data-[state=checked]:z-[1]"}},{color:"warning",variant:"table",class:{item:"has-data-[state=checked]:bg-warning/10 has-data-[state=checked]:border-warning/50 has-data-[state=checked]:z-[1]"}},{color:"error",variant:"table",class:{item:"has-data-[state=checked]:bg-error/10 has-data-[state=checked]:border-error/50 has-data-[state=checked]:z-[1]"}},{color:"neutral",variant:"table",class:{item:"has-data-[state=checked]:bg-elevated has-data-[state=checked]:border-inverted/50 has-data-[state=checked]:z-[1]"}},{variant:["card","table"],disabled:!0,class:{item:"cursor-not-allowed"}},{color:"primary",highlight:!0,class:{base:"ring-primary"}},{color:"secondary",highlight:!0,class:{base:"ring-secondary"}},{color:"success",highlight:!0,class:{base:"ring-success"}},{color:"info",highlight:!0,class:{base:"ring-info"}},{color:"warning",highlight:!0,class:{base:"ring-warning"}},{color:"error",highlight:!0,class:{base:"ring-error"}},{color:"neutral",highlight:!0,class:{base:"ring-inverted"}}],defaultVariants:{size:"md",color:"primary",variant:"list",indicator:"start"}},dt={__name:"URadioGroup",props:{as:{type:null,required:!1},legend:{type:String,required:!1},valueKey:{type:null,required:!1,default:"value"},labelKey:{type:null,required:!1,default:"label"},descriptionKey:{type:null,required:!1,default:"description"},items:{type:null,required:!1},modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},size:{type:null,required:!1},variant:{type:null,required:!1},color:{type:null,required:!1},highlight:{type:Boolean,required:!1},orientation:{type:null,required:!1,default:"vertical"},indicator:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},disabled:{type:Boolean,required:!1},loop:{type:Boolean,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["change","update:modelValue"],setup(j,{emit:A}){const u=j,h=A,g=pa(),l=ma("radioGroup",u),I=fa(),x=va(ya(l,"as","loop","required"),h),{emitFormChange:R,emitFormInput:C,color:P,name:q,size:p,highlight:z,id:$,disabled:m,ariaAttrs:c}=ba(u,{bind:!1}),O=$.value??ha(),S=K(()=>ga({extend:nt,...I.ui?.radioGroup||{}})({size:p.value??l.size,color:P.value??l.color,highlight:z.value??l.highlight,disabled:m.value,required:l.required,orientation:l.orientation,variant:l.variant,indicator:l.indicator}));function me(f){if(f===null)return{id:`${O}:null`,value:void 0,label:void 0};if(typeof f=="string"||typeof f=="number"||typeof f=="bigint")return{id:`${O}:${f}`,value:String(f),label:String(f)};const G=be(f,l.valueKey),n=be(f,l.labelKey),T=be(f,l.descriptionKey);return{...f,value:G,label:n,description:T,id:`${O}:${G}`}}const fe=K(()=>l.items?l.items.map(me):[]);function B(f){const G=new Event("change",{target:{value:f}});h("change",G),R(),C()}return(f,G)=>(i(),w(e(at),X({id:e(O)},e(x),{"model-value":e(l).modelValue,"default-value":e(l).defaultValue,orientation:e(l).orientation,name:e(q),disabled:e(m),"data-slot":"root",class:S.value.root({class:[e(l).ui?.root,e(l).class]}),"onUpdate:modelValue":B}),{default:o(()=>[d("fieldset",X({"data-slot":"fieldset",class:S.value.fieldset({class:e(l).ui?.fieldset})},e(c)),[e(l).legend||g.legend?(i(),y("legend",{key:0,"data-slot":"legend",class:D(S.value.legend({class:e(l).ui?.legend}))},[M(f.$slots,"legend",{},()=>[V(_(e(l).legend),1)])],2)):k("",!0),(i(!0),y(re,null,Se(fe.value,n=>(i(),w($e(!e(l).variant||e(l).variant==="list"?"div":e(Ue)),{key:n.value,"data-slot":"item",class:D(S.value.item({class:[e(l).ui?.item,n.ui?.item,n.class],disabled:n.disabled||e(m)}))},{default:o(()=>[d("div",{"data-slot":"container",class:D(S.value.container({class:[e(l).ui?.container,n.ui?.container]}))},[s(e(rt),{id:n.id,value:n.value,disabled:n.disabled||e(m),"data-slot":"base",class:D(S.value.base({class:[e(l).ui?.base,n.ui?.base],disabled:n.disabled||e(m)}))},{default:o(()=>[s(e(it),{"data-slot":"indicator",class:D(S.value.indicator({class:[e(l).ui?.indicator,n.ui?.indicator]}))},null,8,["class"])]),_:2},1032,["id","value","disabled","class"])],2),n.label||g.label||n.description||g.description?(i(),y("div",{key:0,"data-slot":"wrapper",class:D(S.value.wrapper({class:[e(l).ui?.wrapper,n.ui?.wrapper]}))},[n.label||g.label?(i(),w($e(!e(l).variant||e(l).variant==="list"?e(Ue):"p"),{key:0,for:n.id,"data-slot":"label",class:D(S.value.label({class:[e(l).ui?.label,n.ui?.label],disabled:n.disabled||e(m)}))},{default:o(()=>[M(f.$slots,"label",{item:n,modelValue:e(l).modelValue},()=>[V(_(n.label),1)])]),_:2},1032,["for","class"])):k("",!0),n.description||g.description?(i(),y("p",{key:1,"data-slot":"description",class:D(S.value.description({class:[e(l).ui?.description,n.ui?.description],disabled:n.disabled||e(m)}))},[M(f.$slots,"description",{item:n,modelValue:e(l).modelValue},()=>[V(_(n.description),1)])],2)):k("",!0)],2)):k("",!0)]),_:2},1032,["class"]))),128))],16)]),_:3},16,["id","model-value","default-value","orientation","name","disabled","class"]))}},ut={class:"space-y-6"},ct={class:"text-muted"},pt={key:0,class:"flex items-center gap-1 text-sm"},mt={key:1,class:"text-muted"},ft={class:"text-sm text-muted"},vt={class:"flex items-center gap-1 justify-end"},yt={class:"text-center py-12"},bt={class:"flex justify-center mb-4"},ht={class:"flex w-full justify-end gap-2"},gt={class:"inline-flex items-center gap-1"},_t={class:"space-y-4"},kt={key:0,class:"rounded-lg border border-primary/30 bg-primary/5 p-4 space-y-4"},wt={key:0,class:"space-y-4"},Ct={class:"rounded-lg bg-elevated p-3 font-mono text-sm break-all select-all"},xt={class:"flex gap-2"},At={key:1,class:"space-y-3"},qt={class:"flex gap-2"},$t={key:1,class:"space-y-2"},Ut={class:"flex-1 min-w-0"},It={class:"flex items-center gap-2"},Vt={class:"font-medium truncate"},Rt={class:"text-xs text-muted mt-1 flex flex-wrap gap-x-4"},Pt={class:"font-mono"},zt={key:0},St={key:1,class:"italic"},jt={key:2,class:"text-center text-muted py-6 text-sm"},Kt={class:"inline-flex items-center gap-1"},Dt={class:"space-y-6"},Et={key:0,class:"text-[var(--ui-text-muted)]"},Ft={key:1},ds=oe({__name:"users",async setup(j){let A,u;const{data:h,refresh:g}=([A,u]=_a(()=>Ta("/api/users","$JTvQRs7G1d")),A=await A,u(),A),l=ka(),{copy:I}=Oa(),{authState:x}=wa(),R=Ra(),C=K(()=>h.value?.users||[]),P=K(()=>h.value?.authEnabled||!1),q=K(()=>R.public.authEnabled?x.value.user?.role==="administrator":!0),p=K(()=>x.value.user?.id??null),z=[{accessorKey:"username",header:le("Username")},{accessorKey:"name",header:le("Name")},{accessorKey:"email",header:le("Email")},{accessorKey:"role",header:le("Role")},{accessorKey:"createdAt",header:le("Created")},{accessorKey:"actions",header:""}],$=b(!1),m=La({username:ce().min(3,"Username must be at least 3 characters"),password:Ha([ce().min(6,"Password must be at least 6 characters"),Ie("").transform(()=>{})]).optional(),role:Na(["administrator","reporter","user"]),name:ce().optional(),email:ce().email().optional().or(Ie(""))}),c=Va({username:"",password:"",role:"user",name:"",email:""}),O=[{label:"Administrator",value:"administrator"},{label:"Reporter",value:"reporter"},{label:"User",value:"user"}];async function S(){try{const r={...c,password:c.password||void 0};await $fetch("/api/users",{method:"POST",body:r}),l.add({title:"User created",description:`User ${c.username} has been created successfully`,color:"success"}),$.value=!1,c.username="",c.password="",c.role="user",c.name="",c.email="",await g()}catch(r){const a=r&&typeof r=="object"&&"data"in r?r.data?.message:void 0;l.add({title:"Failed to create user",description:a||"An error occurred",color:"error"})}}async function me(r){f.value=r,B.value=!0}async function fe(){const r=f.value;if(r){B.value=!1,f.value=null;try{await $fetch(`/api/users/${r.id}`,{method:"DELETE"}),l.add({title:"User deleted",description:`User ${r.username} has been deleted`,color:"success"}),await g()}catch(a){const U=a&&typeof a=="object"&&"data"in a?a.data?.message:void 0;l.add({title:"Failed to delete user",description:U||"An error occurred",color:"error"})}}}const B=b(!1),f=b(null);function G(r){switch(r){case"administrator":return"primary";case"reporter":return"info";case"user":return"neutral";default:return"neutral"}}const n=b(null),T=b(!1),ie=b([]);async function Ee(r){n.value=r,T.value=!0,await _e(r.id)}async function _e(r){try{const a=await $fetch(`/api/users/${r}/api-keys`);ie.value=a.apiKeys}catch{ie.value=[]}}async function ke(){n.value&&await _e(n.value.id)}const L=b(!1),N=b(""),H=b(""),E=b(null),we=b("http://localhost:3000");Ca(()=>{we.value=window.location.origin});const Fe=K(()=>`['@piwitests/reporter', {
1
+ import{_ as ra}from"./BBhrClA9.js";import{aR as oa,d as oe,Z as Ve,Y as Re,U as pe,o as i,c as y,j as s,g as o,V as M,k as e,W as X,C as Pe,X as ge,f as w,v as k,F as re,h as K,aB as ia,aI as na,$ as ze,aS as qe,S as da,r as b,aT as ua,aE as ca,a2 as pa,a3 as ma,a5 as fa,a6 as va,a7 as ya,aN as ba,aU as ha,i as d,q as D,m as V,t as _,y as Se,ag as $e,a8 as ga,aJ as be,w as _a,b as ka,O as wa,B as Ca,D as xa,am as Aa,_ as qa,s as $a,p as Ua,E as Ia,l as he,M as Va,A as Ra}from"./C5TrTuWv.js";import{_ as Pa}from"./Bg93Rnts.js";import{_ as za}from"./DbmGeOus.js";import{_ as Sa}from"./DMAiMrNr.js";import{_ as ja}from"./DH5H1DJh.js";import{_ as Ka}from"./Ce5_Tq63.js";import{_ as Da}from"./B_r0xHVS.js";import{_ as Ea}from"./6Z_ZwH8I.js";import{_ as Fa}from"./B69RP95P.js";import{_ as Ba}from"./B1LUinhp.js";import{L as Ue}from"./D_y2VS8k.js";import{u as je}from"./DaNC-xl1.js";import{V as Ke}from"./DMsm-RGQ.js";import{u as De}from"./03FA4-rI.js";import{R as Ga}from"./DEvYVl9M.js";import{_ as Ma}from"./DvEsAuE9.js";import{p as ue,i as le}from"./DMtrFQqi.js";import{a as Oa,u as Ta}from"./T5UuMUxA.js";import{o as La,s as ce,l as Ie,_ as Na,u as Ha}from"./DGnQ69wW.js";import"./V9p3z39z.js";import"./C8Paf_V1.js";import"./BjaRappk.js";const Wa="radio.select";function Ya(j,A,u){oa(Wa,u,{originalEvent:j,value:A})}var Ja=oe({inheritAttrs:!1,__name:"Radio",props:{id:{type:String,required:!1},value:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},checked:{type:Boolean,required:!1,default:void 0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:checked","select"],setup(j,{emit:A}){const u=j,h=A,g=Ve(u,"checked",h,{passive:u.checked===void 0}),{value:l}=Re(u),{forwardRef:I,currentElement:x}=pe(),R=je(x),C=De(),P=K(()=>u.id&&x.value?document.querySelector(`[for="${u.id}"]`)?.innerText??u.value:void 0);function q(p){u.disabled||Ya(p,u.value,z=>{h("select",z),!z?.defaultPrevented&&(g.value=!0,R.value&&z.stopPropagation())})}return(p,z)=>(i(),y(re,null,[s(e(ge),X({id:p.id,ref:e(I),role:"radio",type:p.as==="button"?"button":void 0,as:p.as,"aria-checked":e(g)??!1,"aria-label":P.value,"as-child":p.asChild,disabled:p.disabled?"":void 0,"data-state":e(g)?"checked":"unchecked","data-disabled":p.disabled?"":void 0,value:e(l),required:p.required,name:p.name},{...e(C),...p.$attrs},{onClick:Pe(q,["stop"])}),{default:o(()=>[M(p.$slots,"default",{checked:e(g)})]),_:3},16,["id","type","as","aria-checked","aria-label","as-child","disabled","data-state","data-disabled","value","required","name"]),e(R)&&p.name?(i(),w(e(Ke),X({key:0,type:"radio",tabindex:"-1",value:e(l),checked:!!e(g),name:p.name,disabled:p.disabled,required:p.required},e(C)),null,16,["value","checked","name","disabled","required"])):k("v-if",!0)],64))}}),Qa=Ja;const[Xa,Za]=ze("RadioGroupRoot");var et=oe({__name:"RadioGroupRoot",props:{modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},orientation:{type:String,required:!1,default:void 0},dir:{type:String,required:!1},loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1,default:!1}},emits:["update:modelValue"],setup(j,{emit:A}){const u=j,h=A,{forwardRef:g,currentElement:l}=pe(),I=Ve(u,"modelValue",h,{defaultValue:u.defaultValue,passive:u.modelValue===void 0}),{disabled:x,loop:R,orientation:C,name:P,required:q,dir:p}=Re(u),z=ia(p),$=je(l);return Za({modelValue:I,changeModelValue:m=>{I.value=m},disabled:x,loop:R,orientation:C,name:P?.value,required:q}),(m,c)=>(i(),w(e(na),{"as-child":"",orientation:e(C),dir:e(z),loop:e(R)},{default:o(()=>[s(e(ge),{ref:e(g),role:"radiogroup","data-disabled":e(x)?"":void 0,"as-child":m.asChild,as:m.as,"aria-orientation":e(C),"aria-required":e(q),dir:e(z)},{default:o(()=>[M(m.$slots,"default",{modelValue:e(I)}),e($)&&e(P)?(i(),w(e(Ke),{key:0,required:e(q),disabled:e(x),value:e(I),name:e(P)},null,8,["required","disabled","value","name"])):k("v-if",!0)]),_:3},8,["data-disabled","as-child","as","aria-orientation","aria-required","dir"])]),_:3},8,["orientation","dir","loop"]))}}),at=et;const[tt,st]=ze("RadioGroupItem");var lt=oe({inheritAttrs:!1,__name:"RadioGroupItem",props:{id:{type:String,required:!1},value:{type:null,required:!1},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["select"],setup(j,{emit:A}){const u=j,h=A,{forwardRef:g,currentElement:l}=pe(),I=Xa(),x=K(()=>I.disabled.value||u.disabled),R=K(()=>I.required.value||u.required),C=K(()=>ua(I.modelValue?.value,u.value));st({disabled:x,checked:C});const P=b(!1),q=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"];qe("keydown",$=>{q.includes($.key)&&(P.value=!0)}),qe("keyup",()=>{P.value=!1});function p(){setTimeout(()=>{P.value&&l.value?.click()},0)}const z=De();return($,m)=>(i(),w(e(Ga),{checked:C.value,disabled:x.value,"as-child":"",focusable:!x.value,active:C.value},{default:o(()=>[s(Qa,X({...e(z),...$.$attrs,...u},{ref:e(g),checked:C.value,required:R.value,disabled:x.value,"onUpdate:checked":m[0]||(m[0]=c=>e(I).changeModelValue($.value)),onSelect:m[1]||(m[1]=c=>h("select",c)),onKeydown:m[2]||(m[2]=da(Pe(()=>{},["prevent"]),["enter"])),onFocus:p}),{default:o(()=>[M($.$slots,"default",{checked:C.value,required:R.value,disabled:x.value})]),_:3},16,["checked","required","disabled"])]),_:3},8,["checked","disabled","focusable","active"]))}}),rt=lt,ot=oe({__name:"RadioGroupIndicator",props:{forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(j){const{forwardRef:A}=pe(),u=tt();return(h,g)=>(i(),w(e(ca),{present:h.forceMount||e(u).checked.value},{default:o(()=>[s(e(ge),X({ref:e(A),"data-state":e(u).checked.value?"checked":"unchecked","data-disabled":e(u).disabled.value?"":void 0,"as-child":h.asChild,as:h.as},h.$attrs),{default:o(()=>[M(h.$slots,"default")]),_:3},16,["data-state","data-disabled","as-child","as"])]),_:3},8,["present"]))}}),it=ot;const nt={slots:{root:"relative",fieldset:"flex gap-x-2",legend:"mb-1 block font-medium text-default",item:"flex items-start",container:"flex items-center",base:"rounded-full ring ring-inset ring-accented overflow-hidden focus-visible:outline-3",indicator:"flex items-center justify-center size-full after:bg-default after:rounded-full",wrapper:"w-full",label:"block font-medium text-default",description:"text-muted"},variants:{color:{primary:{base:"outline-primary/25 focus-visible:ring-primary",indicator:"bg-primary"},secondary:{base:"outline-secondary/25 focus-visible:ring-secondary",indicator:"bg-secondary"},success:{base:"outline-success/25 focus-visible:ring-success",indicator:"bg-success"},info:{base:"outline-info/25 focus-visible:ring-info",indicator:"bg-info"},warning:{base:"outline-warning/25 focus-visible:ring-warning",indicator:"bg-warning"},error:{base:"outline-error/25 focus-visible:ring-error",indicator:"bg-error"},neutral:{base:"outline-inverted/25 focus-visible:ring-inverted",indicator:"bg-inverted"}},variant:{list:{item:""},card:{item:"border border-muted rounded-lg"},table:{item:"border border-muted"}},orientation:{horizontal:{fieldset:"flex-row"},vertical:{fieldset:"flex-col"}},indicator:{start:{item:"flex-row",wrapper:"ms-2"},end:{item:"flex-row-reverse",wrapper:"me-2"},hidden:{base:"sr-only",wrapper:"text-center"}},size:{xs:{fieldset:"gap-y-0.5",legend:"text-xs",base:"size-3",item:"text-xs",container:"h-4",indicator:"after:size-1"},sm:{fieldset:"gap-y-0.5",legend:"text-xs",base:"size-3.5",item:"text-xs",container:"h-4",indicator:"after:size-1"},md:{fieldset:"gap-y-1",legend:"text-sm",base:"size-4",item:"text-sm",container:"h-5",indicator:"after:size-1.5"},lg:{fieldset:"gap-y-1",legend:"text-sm",base:"size-4.5",item:"text-sm",container:"h-5",indicator:"after:size-1.5"},xl:{fieldset:"gap-y-1.5",legend:"text-base",base:"size-5",item:"text-base",container:"h-6",indicator:"after:size-2"}},highlight:{true:""},disabled:{true:{item:"opacity-75",base:"cursor-not-allowed",label:"cursor-not-allowed",description:"cursor-not-allowed"}},required:{true:{legend:"after:content-['*'] after:ms-0.5 after:text-error"}}},compoundVariants:[{size:"xs",variant:["card","table"],class:{item:"p-2.5"}},{size:"sm",variant:["card","table"],class:{item:"p-3"}},{size:"md",variant:["card","table"],class:{item:"p-3.5"}},{size:"lg",variant:["card","table"],class:{item:"p-4"}},{size:"xl",variant:["card","table"],class:{item:"p-4.5"}},{orientation:"horizontal",variant:"table",class:{item:"first-of-type:rounded-s-lg last-of-type:rounded-e-lg",fieldset:"gap-0 -space-x-px"}},{orientation:"vertical",variant:"table",class:{item:"first-of-type:rounded-t-lg last-of-type:rounded-b-lg",fieldset:"gap-0 -space-y-px"}},{color:"primary",variant:"card",class:{item:"has-data-[state=checked]:border-primary"}},{color:"secondary",variant:"card",class:{item:"has-data-[state=checked]:border-secondary"}},{color:"success",variant:"card",class:{item:"has-data-[state=checked]:border-success"}},{color:"info",variant:"card",class:{item:"has-data-[state=checked]:border-info"}},{color:"warning",variant:"card",class:{item:"has-data-[state=checked]:border-warning"}},{color:"error",variant:"card",class:{item:"has-data-[state=checked]:border-error"}},{color:"neutral",variant:"card",class:{item:"has-data-[state=checked]:border-inverted"}},{color:"primary",variant:"table",class:{item:"has-data-[state=checked]:bg-primary/10 has-data-[state=checked]:border-primary/50 has-data-[state=checked]:z-[1]"}},{color:"secondary",variant:"table",class:{item:"has-data-[state=checked]:bg-secondary/10 has-data-[state=checked]:border-secondary/50 has-data-[state=checked]:z-[1]"}},{color:"success",variant:"table",class:{item:"has-data-[state=checked]:bg-success/10 has-data-[state=checked]:border-success/50 has-data-[state=checked]:z-[1]"}},{color:"info",variant:"table",class:{item:"has-data-[state=checked]:bg-info/10 has-data-[state=checked]:border-info/50 has-data-[state=checked]:z-[1]"}},{color:"warning",variant:"table",class:{item:"has-data-[state=checked]:bg-warning/10 has-data-[state=checked]:border-warning/50 has-data-[state=checked]:z-[1]"}},{color:"error",variant:"table",class:{item:"has-data-[state=checked]:bg-error/10 has-data-[state=checked]:border-error/50 has-data-[state=checked]:z-[1]"}},{color:"neutral",variant:"table",class:{item:"has-data-[state=checked]:bg-elevated has-data-[state=checked]:border-inverted/50 has-data-[state=checked]:z-[1]"}},{variant:["card","table"],disabled:!0,class:{item:"cursor-not-allowed"}},{color:"primary",highlight:!0,class:{base:"ring-primary"}},{color:"secondary",highlight:!0,class:{base:"ring-secondary"}},{color:"success",highlight:!0,class:{base:"ring-success"}},{color:"info",highlight:!0,class:{base:"ring-info"}},{color:"warning",highlight:!0,class:{base:"ring-warning"}},{color:"error",highlight:!0,class:{base:"ring-error"}},{color:"neutral",highlight:!0,class:{base:"ring-inverted"}}],defaultVariants:{size:"md",color:"primary",variant:"list",indicator:"start"}},dt={__name:"URadioGroup",props:{as:{type:null,required:!1},legend:{type:String,required:!1},valueKey:{type:null,required:!1,default:"value"},labelKey:{type:null,required:!1,default:"label"},descriptionKey:{type:null,required:!1,default:"description"},items:{type:null,required:!1},modelValue:{type:null,required:!1},defaultValue:{type:null,required:!1},size:{type:null,required:!1},variant:{type:null,required:!1},color:{type:null,required:!1},highlight:{type:Boolean,required:!1},orientation:{type:null,required:!1,default:"vertical"},indicator:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},disabled:{type:Boolean,required:!1},loop:{type:Boolean,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["change","update:modelValue"],setup(j,{emit:A}){const u=j,h=A,g=pa(),l=ma("radioGroup",u),I=fa(),x=va(ya(l,"as","loop","required"),h),{emitFormChange:R,emitFormInput:C,color:P,name:q,size:p,highlight:z,id:$,disabled:m,ariaAttrs:c}=ba(u,{bind:!1}),O=$.value??ha(),S=K(()=>ga({extend:nt,...I.ui?.radioGroup||{}})({size:p.value??l.size,color:P.value??l.color,highlight:z.value??l.highlight,disabled:m.value,required:l.required,orientation:l.orientation,variant:l.variant,indicator:l.indicator}));function me(f){if(f===null)return{id:`${O}:null`,value:void 0,label:void 0};if(typeof f=="string"||typeof f=="number"||typeof f=="bigint")return{id:`${O}:${f}`,value:String(f),label:String(f)};const G=be(f,l.valueKey),n=be(f,l.labelKey),T=be(f,l.descriptionKey);return{...f,value:G,label:n,description:T,id:`${O}:${G}`}}const fe=K(()=>l.items?l.items.map(me):[]);function B(f){const G=new Event("change",{target:{value:f}});h("change",G),R(),C()}return(f,G)=>(i(),w(e(at),X({id:e(O)},e(x),{"model-value":e(l).modelValue,"default-value":e(l).defaultValue,orientation:e(l).orientation,name:e(q),disabled:e(m),"data-slot":"root",class:S.value.root({class:[e(l).ui?.root,e(l).class]}),"onUpdate:modelValue":B}),{default:o(()=>[d("fieldset",X({"data-slot":"fieldset",class:S.value.fieldset({class:e(l).ui?.fieldset})},e(c)),[e(l).legend||g.legend?(i(),y("legend",{key:0,"data-slot":"legend",class:D(S.value.legend({class:e(l).ui?.legend}))},[M(f.$slots,"legend",{},()=>[V(_(e(l).legend),1)])],2)):k("",!0),(i(!0),y(re,null,Se(fe.value,n=>(i(),w($e(!e(l).variant||e(l).variant==="list"?"div":e(Ue)),{key:n.value,"data-slot":"item",class:D(S.value.item({class:[e(l).ui?.item,n.ui?.item,n.class],disabled:n.disabled||e(m)}))},{default:o(()=>[d("div",{"data-slot":"container",class:D(S.value.container({class:[e(l).ui?.container,n.ui?.container]}))},[s(e(rt),{id:n.id,value:n.value,disabled:n.disabled||e(m),"data-slot":"base",class:D(S.value.base({class:[e(l).ui?.base,n.ui?.base],disabled:n.disabled||e(m)}))},{default:o(()=>[s(e(it),{"data-slot":"indicator",class:D(S.value.indicator({class:[e(l).ui?.indicator,n.ui?.indicator]}))},null,8,["class"])]),_:2},1032,["id","value","disabled","class"])],2),n.label||g.label||n.description||g.description?(i(),y("div",{key:0,"data-slot":"wrapper",class:D(S.value.wrapper({class:[e(l).ui?.wrapper,n.ui?.wrapper]}))},[n.label||g.label?(i(),w($e(!e(l).variant||e(l).variant==="list"?e(Ue):"p"),{key:0,for:n.id,"data-slot":"label",class:D(S.value.label({class:[e(l).ui?.label,n.ui?.label],disabled:n.disabled||e(m)}))},{default:o(()=>[M(f.$slots,"label",{item:n,modelValue:e(l).modelValue},()=>[V(_(n.label),1)])]),_:2},1032,["for","class"])):k("",!0),n.description||g.description?(i(),y("p",{key:1,"data-slot":"description",class:D(S.value.description({class:[e(l).ui?.description,n.ui?.description],disabled:n.disabled||e(m)}))},[M(f.$slots,"description",{item:n,modelValue:e(l).modelValue},()=>[V(_(n.description),1)])],2)):k("",!0)],2)):k("",!0)]),_:2},1032,["class"]))),128))],16)]),_:3},16,["id","model-value","default-value","orientation","name","disabled","class"]))}},ut={class:"space-y-6"},ct={class:"text-muted"},pt={key:0,class:"flex items-center gap-1 text-sm"},mt={key:1,class:"text-muted"},ft={class:"text-sm text-muted"},vt={class:"flex items-center gap-1 justify-end"},yt={class:"text-center py-12"},bt={class:"flex justify-center mb-4"},ht={class:"flex w-full justify-end gap-2"},gt={class:"inline-flex items-center gap-1"},_t={class:"space-y-4"},kt={key:0,class:"rounded-lg border border-primary/30 bg-primary/5 p-4 space-y-4"},wt={key:0,class:"space-y-4"},Ct={class:"rounded-lg bg-elevated p-3 font-mono text-sm break-all select-all"},xt={class:"flex gap-2"},At={key:1,class:"space-y-3"},qt={class:"flex gap-2"},$t={key:1,class:"space-y-2"},Ut={class:"flex-1 min-w-0"},It={class:"flex items-center gap-2"},Vt={class:"font-medium truncate"},Rt={class:"text-xs text-muted mt-1 flex flex-wrap gap-x-4"},Pt={class:"font-mono"},zt={key:0},St={key:1,class:"italic"},jt={key:2,class:"text-center text-muted py-6 text-sm"},Kt={class:"inline-flex items-center gap-1"},Dt={class:"space-y-6"},Et={key:0,class:"text-[var(--ui-text-muted)]"},Ft={key:1},ds=oe({__name:"users",async setup(j){let A,u;const{data:h,refresh:g}=([A,u]=_a(()=>Ta("/api/users","$JTvQRs7G1d")),A=await A,u(),A),l=ka(),{copy:I}=Oa(),{authState:x}=wa(),R=Ra(),C=K(()=>h.value?.users||[]),P=K(()=>h.value?.authEnabled||!1),q=K(()=>R.public.authEnabled?x.value.user?.role==="administrator":!0),p=K(()=>x.value.user?.id??null),z=[{accessorKey:"username",header:le("Username")},{accessorKey:"name",header:le("Name")},{accessorKey:"email",header:le("Email")},{accessorKey:"role",header:le("Role")},{accessorKey:"createdAt",header:le("Created")},{accessorKey:"actions",header:""}],$=b(!1),m=La({username:ce().min(3,"Username must be at least 3 characters"),password:Ha([ce().min(6,"Password must be at least 6 characters"),Ie("").transform(()=>{})]).optional(),role:Na(["administrator","reporter","user"]),name:ce().optional(),email:ce().email().optional().or(Ie(""))}),c=Va({username:"",password:"",role:"user",name:"",email:""}),O=[{label:"Administrator",value:"administrator"},{label:"Reporter",value:"reporter"},{label:"User",value:"user"}];async function S(){try{const r={...c,password:c.password||void 0};await $fetch("/api/users",{method:"POST",body:r}),l.add({title:"User created",description:`User ${c.username} has been created successfully`,color:"success"}),$.value=!1,c.username="",c.password="",c.role="user",c.name="",c.email="",await g()}catch(r){const a=r&&typeof r=="object"&&"data"in r?r.data?.message:void 0;l.add({title:"Failed to create user",description:a||"An error occurred",color:"error"})}}async function me(r){f.value=r,B.value=!0}async function fe(){const r=f.value;if(r){B.value=!1,f.value=null;try{await $fetch(`/api/users/${r.id}`,{method:"DELETE"}),l.add({title:"User deleted",description:`User ${r.username} has been deleted`,color:"success"}),await g()}catch(a){const U=a&&typeof a=="object"&&"data"in a?a.data?.message:void 0;l.add({title:"Failed to delete user",description:U||"An error occurred",color:"error"})}}}const B=b(!1),f=b(null);function G(r){switch(r){case"administrator":return"primary";case"reporter":return"info";case"user":return"neutral";default:return"neutral"}}const n=b(null),T=b(!1),ie=b([]);async function Ee(r){n.value=r,T.value=!0,await _e(r.id)}async function _e(r){try{const a=await $fetch(`/api/users/${r}/api-keys`);ie.value=a.apiKeys}catch{ie.value=[]}}async function ke(){n.value&&await _e(n.value.id)}const L=b(!1),N=b(""),H=b(""),E=b(null),we=b("http://localhost:3000");Ca(()=>{we.value=window.location.origin});const Fe=K(()=>`['@piwitests/reporter', {
2
2
  serverUrl: '${we.value}',
3
3
  apiKey: '${E.value??""}', // or set PIWI_API_KEY and use apiKey: process.env.PIWI_API_KEY
4
4
  }]`);function Be(){N.value="",H.value="",E.value=null,L.value=!0}function Ce(){L.value=!1,E.value=null}async function Ge(){if(n.value)try{const r={name:N.value};H.value&&(r.expiresAt=new Date(H.value).toISOString());const a=await $fetch(`/api/users/${n.value.id}/api-keys`,{method:"POST",body:r});E.value=a.key,await ke()}catch(r){const a=r&&typeof r=="object"&&"data"in r?r.data?.message:void 0;l.add({title:"Failed to create API key",description:a||"An error occurred",color:"error"})}}function Me(){I(E.value,{toast:"API key copied to clipboard"})}function Oe(){E.value=null,L.value=!1}const Z=b(!1),ee=b(null);function Te(r){ee.value=r,Z.value=!0}async function Le(){if(!n.value||!ee.value)return;const r=ee.value;Z.value=!1,ee.value=null;try{await $fetch(`/api/users/${n.value.id}/api-keys/${r.id}`,{method:"DELETE"}),l.add({title:"API key revoked",description:`Key "${r.name}" has been revoked`,color:"success"}),await ke()}catch(a){const U=a&&typeof a=="object"&&"data"in a?a.data?.message:void 0;l.add({title:"Failed to revoke API key",description:U||"An error occurred",color:"error"})}}function Ne(r){return R.public.authEnabled?q.value||p.value===r.id:!0}const ne=b(null),ae=b(!1),W=b(!1),Y=b([]),J=b([]);async function He(r){ne.value=r,ae.value=!0;try{const a=await $fetch("/api/projects/menu");J.value=a.map(U=>({...U,label:U.label||U.name}))}catch{J.value=[]}try{const a=await $fetch(`/api/users/${r.id}/projects`);W.value=a.global,Y.value=J.value.filter(U=>a.projectIds.includes(U.id))}catch{W.value=!1,Y.value=[]}}async function We(){const r=ne.value;if(r)try{await $fetch(`/api/users/${r.id}/projects`,{method:"PUT",body:{global:W.value,projectIds:Y.value.map(a=>a.id)}}),l.add({title:"Project access updated",description:`Access for ${r.username} has been updated`,color:"success"}),ae.value=!1}catch(a){const U=a&&typeof a=="object"&&"data"in a?a.data?.message:void 0;l.add({title:"Failed to update project access",description:U||"An error occurred",color:"error"})}}const ve=b(null);async function Ye(r){if(!r.email){l.add({title:"No email address",description:"Set an email address for this user first.",color:"error"});return}ve.value=r.id;try{await $fetch(`/api/users/${r.id}/invite`,{method:"POST"}),l.add({title:"Invite sent",description:`Invitation sent to ${r.email}`,color:"success"})}catch(a){const U=a&&typeof a=="object"&&"data"in a?a.data?.message:void 0;l.add({title:"Failed to send invite",description:U||"An error occurred",color:"error"})}finally{ve.value=null}}return(r,a)=>{const U=ra,v=qa,ye=Ua,Je=$a,Qe=Pa,Xe=za,xe=Sa,Q=Ia,F=ja,Ze=Ka,ea=Da,te=Ea,se=xa,Ae=Fa,aa=Ba,ta=dt,sa=Aa("UDivider"),la=Ma;return i(),y(re,null,[d("div",ut,[e(P)?k("",!0):(i(),w(U,{key:0,icon:"i-lucide-info",color:"primary",variant:"subtle",title:"Authentication is disabled",description:"Authentication is currently disabled. You can manage users here, but they will only be used when authentication is enabled via the PIWI_AUTH_ENABLED environment variable."})),e(C).length>0?(i(),w(xe,{key:1,title:"Users",count:e(C).length,help:"settings.users"},{actions:o(()=>[e(q)?(i(),w(v,{key:0,label:"Add user",icon:"i-lucide-user-plus",size:"sm",onClick:a[0]||(a[0]=t=>$.value=!0)})):k("",!0)]),default:o(()=>[s(Xe,{"min-width":"44rem",bleed:!1},{default:o(()=>[s(Qe,{data:e(C),columns:z,sticky:"",class:"max-h-[32rem]"},{"username-cell":o(({row:t})=>[V(_(t.original.username),1)]),"name-cell":o(({row:t})=>[d("span",ct,_(t.original.name||"-"),1)]),"email-cell":o(({row:t})=>[t.original.email?(i(),y("span",pt,[V(_(t.original.email)+" ",1),t.original.emailVerified?(i(),w(ye,{key:0,name:"i-lucide-circle-check-big",class:"size-3.5 text-success-500",title:"Email verified"})):k("",!0)])):(i(),y("span",mt,"—"))]),"role-cell":o(({row:t})=>[s(Je,{color:G(t.original.role),variant:"subtle"},{default:o(()=>[V(_(t.original.role),1)]),_:2},1032,["color"])]),"createdAt-cell":o(({row:t})=>[d("span",ft,_(("prettyDateFormat"in r?r.prettyDateFormat:e(ue))(t.original.createdAt,{dateOnly:!0})),1)]),"actions-cell":o(({row:t})=>[d("div",vt,[e(q)&&t.original.email&&!t.original.oauthProvider?(i(),w(v,{key:0,icon:"i-lucide-send",color:"neutral",variant:"ghost",size:"sm",title:"Send invite email","aria-label":"Send invite email",loading:e(ve)===t.original.id,onClick:de=>Ye(t.original)},null,8,["loading","onClick"])):k("",!0),e(q)&&t.original.role!=="administrator"?(i(),w(v,{key:1,icon:"i-lucide-folder-lock",color:"neutral",variant:"ghost",size:"sm",title:"Project access","aria-label":"Project access",onClick:de=>He(t.original)},null,8,["onClick"])):k("",!0),Ne(t.original)?(i(),w(v,{key:2,icon:"i-lucide-key",color:"neutral",variant:"ghost",size:"sm",title:"Manage API keys","aria-label":"Manage API keys",onClick:de=>Ee(t.original)},null,8,["onClick"])):k("",!0),e(q)?(i(),w(v,{key:3,icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"sm",title:"Delete user","aria-label":"Delete user",onClick:de=>me(t.original)},null,8,["onClick"])):k("",!0)])]),_:1},8,["data"])]),_:1})]),_:1},8,["count"])):(i(),w(xe,{key:2,title:"Users",count:0,help:"settings.users"},{default:o(()=>[d("div",yt,[d("div",bt,[s(ye,{name:"i-lucide-users",class:"text-4xl text-muted"})]),a[21]||(a[21]=d("h3",{class:"text-lg font-semibold mb-2"},"No users yet",-1)),a[22]||(a[22]=d("p",{class:"text-muted mb-4"},"Create your first user to get started with authentication",-1)),e(q)?(i(),w(v,{key:0,label:"Add user",icon:"i-lucide-user-plus",onClick:a[1]||(a[1]=t=>$.value=!0)})):k("",!0)])]),_:1}))]),s(se,null,{default:o(()=>[s(te,{open:e($),title:"Add new user","onUpdate:open":a[8]||(a[8]=t=>$.value=t)},{body:o(()=>[s(ea,{schema:e(m),state:e(c),class:"space-y-5"},{default:o(()=>[s(F,{label:"Username",name:"username",required:""},{default:o(()=>[s(Q,{modelValue:e(c).username,"onUpdate:modelValue":a[2]||(a[2]=t=>e(c).username=t),placeholder:"Enter username",class:"w-full"},null,8,["modelValue"])]),_:1}),s(F,{label:"Password",name:"password",description:"Leave blank to let the user set their own password via invite email"},{default:o(()=>[s(Q,{modelValue:e(c).password,"onUpdate:modelValue":a[3]||(a[3]=t=>e(c).password=t),type:"password",placeholder:"Leave blank to send invite",class:"w-full"},null,8,["modelValue"])]),_:1}),s(F,{label:"Display name",name:"name"},{default:o(()=>[s(Q,{modelValue:e(c).name,"onUpdate:modelValue":a[4]||(a[4]=t=>e(c).name=t),placeholder:"Enter display name (optional)",class:"w-full"},null,8,["modelValue"])]),_:1}),s(F,{label:"Email",name:"email",description:"Optional — needed for invites and notifications"},{default:o(()=>[s(Q,{modelValue:e(c).email,"onUpdate:modelValue":a[5]||(a[5]=t=>e(c).email=t),type:"email",placeholder:"user@example.com (optional)",class:"w-full"},null,8,["modelValue"])]),_:1}),s(F,{label:"Role",name:"role",required:""},{default:o(()=>[s(Ze,{modelValue:e(c).role,"onUpdate:modelValue":a[6]||(a[6]=t=>e(c).role=t),items:O,class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1},8,["schema","state"])]),footer:o(()=>[d("div",ht,[s(v,{type:"button",color:"neutral",variant:"ghost",label:"Cancel",onClick:a[7]||(a[7]=t=>$.value=!1)}),s(v,{type:"submit",label:"Create user",icon:"i-lucide-user-plus",onClick:S})])]),_:1},8,["open"])]),_:1}),s(se,null,{default:o(()=>[s(te,{open:e(T),title:`API keys – ${e(n)?.username}`,size:"xl","onUpdate:open":a[12]||(a[12]=t=>{T.value=t,t||Ce()})},{title:o(()=>[d("span",gt,[V(" API keys – "+_(e(n)?.username)+" ",1),s(Ae,{topic:"settings.api-keys"})])]),body:o(()=>[d("div",_t,[a[26]||(a[26]=d("p",{class:"text-sm text-muted"},[V(" API keys allow the Playwright reporter (and other CI tools) to submit test results without a username/password login. Each key is shown "),d("strong",null,"only once"),V(" at creation time — store it in a CI secret immediately. ")],-1)),e(L)?(i(),y("div",kt,[e(E)?(i(),y("div",wt,[s(U,{icon:"i-lucide-triangle-alert",color:"warning",variant:"subtle",title:"Save your API key now",description:"This key will never be shown again. Copy it and store it in your CI secret manager immediately."}),d("div",Ct,_(e(E)),1),d("div",xt,[s(v,{label:"Copy to clipboard",icon:"i-lucide-clipboard",color:"primary",size:"sm",onClick:Me}),s(v,{label:"Done",variant:"ghost",size:"sm",onClick:Oe})]),d("div",null,[a[23]||(a[23]=d("p",{class:"text-xs font-semibold uppercase tracking-wide text-muted mb-2"}," Use it in your reporter config ",-1)),s(aa,{code:e(Fe),lang:"typescript"},null,8,["code"])])])):(i(),y("div",At,[a[24]||(a[24]=d("h4",{class:"font-medium text-sm"},"Create new API key",-1)),s(F,{label:"Key name",name:"name",required:""},{default:o(()=>[s(Q,{modelValue:e(N),"onUpdate:modelValue":a[9]||(a[9]=t=>he(N)?N.value=t:null),placeholder:"e.g. GitHub Actions CI",size:"sm"},null,8,["modelValue"])]),_:1}),s(F,{label:"Expires at (optional)",name:"expiresAt"},{default:o(()=>[s(Q,{modelValue:e(H),"onUpdate:modelValue":a[10]||(a[10]=t=>he(H)?H.value=t:null),type:"date",size:"sm",min:new Date().toISOString().split("T")[0]},null,8,["modelValue","min"])]),_:1}),d("div",qt,[s(v,{label:"Generate key",icon:"i-lucide-key",size:"sm",disabled:!e(N).trim(),onClick:Ge},null,8,["disabled"]),s(v,{color:"neutral",variant:"ghost",label:"Cancel",size:"sm",onClick:Ce})])]))])):k("",!0),e(ie).length>0?(i(),y("div",$t,[(i(!0),y(re,null,Se(e(ie),t=>(i(),y("div",{key:t.id,class:"flex items-center justify-between rounded-lg border border-default px-4 py-3"},[d("div",Ut,[d("div",It,[s(ye,{name:"i-lucide-key",class:"text-muted shrink-0"}),d("span",Vt,_(t.name),1)]),d("div",Rt,[d("span",null,[a[25]||(a[25]=V("Prefix: ",-1)),d("code",Pt,"pd_"+_(t.keyPrefix)+"…",1)]),d("span",null,"Created: "+_(("prettyDateFormat"in r?r.prettyDateFormat:e(ue))(t.createdAt,{dateOnly:!0})),1),t.lastUsedAt?(i(),y("span",zt,"Last used: "+_(("prettyDateFormat"in r?r.prettyDateFormat:e(ue))(t.lastUsedAt,{dateOnly:!0})),1)):(i(),y("span",St,"Never used")),t.expiresAt?(i(),y("span",{key:2,class:D(new Date(t.expiresAt)<new Date?"text-error":"")}," Expires: "+_(("prettyDateFormat"in r?r.prettyDateFormat:e(ue))(t.expiresAt,{dateOnly:!0})),3)):k("",!0)])]),s(v,{icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"sm",title:"Revoke key",onClick:de=>Te(t)},null,8,["onClick"])]))),128))])):e(L)?k("",!0):(i(),y("div",jt," No API keys yet. Create one to allow CI access. "))])]),footer:o(()=>[s(v,{color:"neutral",variant:"ghost",label:"Close",onClick:a[11]||(a[11]=t=>T.value=!1)}),e(L)?k("",!0):(i(),w(v,{key:0,label:"Create API key",icon:"i-lucide-plus",onClick:Be}))]),_:1},8,["open","title"])]),_:1}),s(se,null,{default:o(()=>[s(te,{open:e(B),title:"Delete user","onUpdate:open":a[14]||(a[14]=t=>B.value=t)},{body:o(()=>[d("p",null,[a[27]||(a[27]=V(" Are you sure you want to delete user ",-1)),d("strong",null,_(e(f)?.username),1),a[28]||(a[28]=V("? This action cannot be undone. ",-1))])]),footer:o(()=>[s(v,{color:"neutral",variant:"ghost",label:"Cancel",onClick:a[13]||(a[13]=t=>B.value=!1)}),s(v,{color:"error",label:"Delete user",icon:"i-lucide-trash-2",onClick:fe})]),_:1},8,["open"])]),_:1}),s(se,null,{default:o(()=>[s(te,{open:e(Z),title:"Revoke API key","onUpdate:open":a[16]||(a[16]=t=>Z.value=t)},{body:o(()=>[d("p",null,[a[29]||(a[29]=V(" Revoke API key ",-1)),d("strong",null,'"'+_(e(ee)?.name)+'"',1),a[30]||(a[30]=V("? Any CI pipeline using it will stop working immediately. ",-1))])]),footer:o(()=>[s(v,{color:"neutral",variant:"ghost",label:"Cancel",onClick:a[15]||(a[15]=t=>Z.value=!1)}),s(v,{color:"error",label:"Revoke",icon:"i-lucide-trash-2",onClick:Le})]),_:1},8,["open"])]),_:1}),s(se,null,{default:o(()=>[s(te,{open:e(ae),title:`Project access – ${e(ne)?.username}`,size:"xl","onUpdate:open":a[20]||(a[20]=t=>ae.value=t)},{title:o(()=>[d("span",Kt,[V(" Project access – "+_(e(ne)?.username)+" ",1),s(Ae,{topic:"project.members"})])]),body:o(()=>[d("div",Dt,[a[31]||(a[31]=d("p",{class:"text-sm text-muted"}," Control which projects this user can access. Users without any project access will see no projects. ",-1)),s(ta,{"model-value":e(W)?"global":"specific",items:[{value:"global",label:"Global access",description:"Access to all projects (current and future)"},{value:"specific",label:"Specific projects",description:"Access only to selected projects"}],"onUpdate:modelValue":a[17]||(a[17]=t=>W.value=t==="global")},null,8,["model-value"]),e(W)?k("",!0):(i(),y(re,{key:0},[s(sa),s(F,{label:"Specific projects",description:`Select from ${e(J).length>0?e(J).length:"0"} available projects`},{default:o(()=>[s(la,{modelValue:e(Y),"onUpdate:modelValue":a[18]||(a[18]=t=>he(Y)?Y.value=t:null),items:e(J),by:"id",multiple:"",searchable:"",class:"w-full",placeholder:"Search and select projects…"},{default:o(({modelValue:t})=>[t.length===0?(i(),y("span",Et,"Select projects…")):(i(),y("span",Ft,_(t.length)+" project(s) selected",1))]),_:1},8,["modelValue","items"])]),_:1},8,["description"])],64))])]),footer:o(()=>[s(v,{color:"neutral",variant:"ghost",label:"Cancel",onClick:a[19]||(a[19]=t=>ae.value=!1)}),s(v,{label:"Save",icon:"i-lucide-check",onClick:We})]),_:1},8,["open","title"])]),_:1})],64)}}});export{ds as default};
@@ -1 +1 @@
1
- import{_ as l}from"./Ce47NgZw.js";import{d as a,o as i,f as c,ac as r,g as n,V as s}from"./CNu3kken.js";const u=a({__name:"ChartCard",props:{title:{},subtitle:{},icon:{},iconClass:{},help:{}},setup(e){return(t,m)=>{const o=l;return i(),c(o,{title:e.title,subtitle:e.subtitle,icon:e.icon,"icon-class":e.iconClass,help:e.help},r({default:n(()=>[s(t.$slots,"default")]),_:2},[t.$slots.subtitle?{name:"subtitle",fn:n(()=>[s(t.$slots,"subtitle")]),key:"0"}:void 0,t.$slots.legend||t.$slots.actions?{name:"actions",fn:n(()=>[s(t.$slots,"legend"),s(t.$slots,"actions")]),key:"1"}:void 0]),1032,["title","subtitle","icon","icon-class","help"])}}}),C=Object.assign(u,{__name:"ChartCard"});export{C as _};
1
+ import{_ as l}from"./DMAiMrNr.js";import{d as a,o as i,f as c,ac as r,g as n,V as s}from"./C5TrTuWv.js";const u=a({__name:"ChartCard",props:{title:{},subtitle:{},icon:{},iconClass:{},help:{}},setup(e){return(t,m)=>{const o=l;return i(),c(o,{title:e.title,subtitle:e.subtitle,icon:e.icon,"icon-class":e.iconClass,help:e.help},r({default:n(()=>[s(t.$slots,"default")]),_:2},[t.$slots.subtitle?{name:"subtitle",fn:n(()=>[s(t.$slots,"subtitle")]),key:"0"}:void 0,t.$slots.legend||t.$slots.actions?{name:"actions",fn:n(()=>[s(t.$slots,"legend"),s(t.$slots,"actions")]),key:"1"}:void 0]),1032,["title","subtitle","icon","icon-class","help"])}}}),C=Object.assign(u,{__name:"ChartCard"});export{C as _};
@@ -1 +1 @@
1
- import{ad as b,A as E}from"./CNu3kken.js";const v="piwi-demo-run-events";let o=null;const u=new Set;function S(e){return o||(o=new BroadcastChannel(v),o.onmessage=n=>{for(const l of u)l(n.data)}),u.add(e),()=>{u.delete(e),u.size===0&&o&&(o.close(),o=null)}}let t=null,r=null;const s=new Set;let i=null;const p=1e3,w=3e4,y=[5*6e4,15*6e4,30*6e4];let a=Date.now(),c=!1;function f(){a=Date.now()}function h(){const e=Date.now()-a;let n=1;for(const l of y)if(e>=l)n*=2;else break;return Math.min(p*n,w)}const A=new Set(["run-initialising","run-started","run-finalizing","run-finished","run-submitted","run-cancelled"]);function d(e){A.has(e)&&(i&&clearTimeout(i),i=setTimeout(()=>{for(const n of s)n()},h()))}function m(){t||(t=new EventSource("/api/stream"),t.onmessage=e=>{try{const n=JSON.parse(e.data);d(n.type)}catch{}},t.onerror=()=>{})}function C(){if(f(),document.visibilityState==="hidden")t&&(t.close(),t=null),i&&(clearTimeout(i),i=null);else if(s.size>0){m();for(const e of s)e()}}function g(){if(!c){c=!0;const e=["mousemove","keydown","pointerdown","scroll"];for(const n of e)window.addEventListener(n,f,{passive:!0});document.addEventListener("visibilitychange",C)}if(E().public.demoMode){if(r)return;r=S(e=>{e.scope==="global"&&d(e.event.type)});return}document.visibilityState!=="hidden"&&m()}function T(){s.size>0||(t&&(t.close(),t=null),r&&(r(),r=null),i&&(clearTimeout(i),i=null))}function N(e){g(),s.add(e),b(()=>{s.delete(e),T()})}export{S as s,N as u};
1
+ import{ad as b,A as E}from"./C5TrTuWv.js";const v="piwi-demo-run-events";let o=null;const u=new Set;function S(e){return o||(o=new BroadcastChannel(v),o.onmessage=n=>{for(const l of u)l(n.data)}),u.add(e),()=>{u.delete(e),u.size===0&&o&&(o.close(),o=null)}}let t=null,r=null;const s=new Set;let i=null;const p=1e3,w=3e4,y=[5*6e4,15*6e4,30*6e4];let a=Date.now(),c=!1;function f(){a=Date.now()}function h(){const e=Date.now()-a;let n=1;for(const l of y)if(e>=l)n*=2;else break;return Math.min(p*n,w)}const A=new Set(["run-initialising","run-started","run-finalizing","run-finished","run-submitted","run-cancelled"]);function d(e){A.has(e)&&(i&&clearTimeout(i),i=setTimeout(()=>{for(const n of s)n()},h()))}function m(){t||(t=new EventSource("/api/stream"),t.onmessage=e=>{try{const n=JSON.parse(e.data);d(n.type)}catch{}},t.onerror=()=>{})}function C(){if(f(),document.visibilityState==="hidden")t&&(t.close(),t=null),i&&(clearTimeout(i),i=null);else if(s.size>0){m();for(const e of s)e()}}function g(){if(!c){c=!0;const e=["mousemove","keydown","pointerdown","scroll"];for(const n of e)window.addEventListener(n,f,{passive:!0});document.addEventListener("visibilitychange",C)}if(E().public.demoMode){if(r)return;r=S(e=>{e.scope==="global"&&d(e.event.type)});return}document.visibilityState!=="hidden"&&m()}function T(){s.size>0||(t&&(t.close(),t=null),r&&(r(),r=null),i&&(clearTimeout(i),i=null))}function N(e){g(),s.add(e),b(()=>{s.delete(e),T()})}export{S as s,N as u};
@@ -1 +1 @@
1
- import{ca as s}from"./CNu3kken.js";import{h as o}from"./BjaRappk.js";const c=[{id:"instance",label:"Instance"},{id:"analysis",label:"Analysis"},{id:"meta",label:""}],n=[{id:"account",label:"Account",icon:"i-lucide-user-round",to:"/settings/account",group:"instance",authOnly:!0,fields:[{id:"account.display-name",label:"Display name",help:"account.display-name"},{id:"account.email",label:"Email address",help:"account.email"},{id:"account.connected-accounts",label:"Connected accounts",help:"account.connected-accounts"},{id:"account.password",label:"Password",help:"account.password"},{id:"account.auth-toggle",label:"Authentication",help:"settings.auth-toggle",envOnly:!0}]},{id:"users",label:"Users",icon:"i-lucide-users",to:"/settings/users",group:"instance",roles:[s.ADMINISTRATOR],authOnly:!0,introHelp:"settings.users",fields:[{id:"users.list",label:"Users & roles",help:"settings.users"},{id:"users.api-keys",label:"API keys",help:"settings.api-keys"}]},{id:"notifications",label:"Notifications",icon:"i-lucide-bell",to:"/settings/notifications",group:"instance",fields:[{id:"notifications.smtp",label:"SMTP email delivery",help:"settings.smtp",envOnly:!0},{id:"notifications.test-email",label:"Send test email",help:"notifications.test-email"},{id:"notifications.channels",label:"Notification channels",help:"notifications.channels"},{id:"notifications.subscriptions",label:"My subscriptions",help:"notifications.subscriptions"}]},{id:"tags",label:"Tags",icon:"i-lucide-tags",to:"/settings/tags",group:"analysis",roles:[s.ADMINISTRATOR],introHelp:"settings.tags",fields:[{id:"tags.list",label:"Tags",help:"settings.tags"}]},{id:"storage",label:"Storage",icon:"i-lucide-hard-drive",to:"/settings/storage",group:"instance",roles:[s.ADMINISTRATOR],fields:[{id:"storage.backend",label:"Storage backend",help:"settings.storage-backend",envOnly:!0},{id:"storage.stats",label:"Storage statistics",help:"settings.storage-stats"},{id:"storage.cleanup",label:"Cleanup old test runs",help:"settings.cleanup"}]},{id:"performance",label:"Performance",icon:"i-lucide-gauge",to:"/settings/performance",group:"analysis",roles:[s.ADMINISTRATOR],fields:[{id:"wasted-time.patterns",label:"Wasted-time patterns",help:"settings.wasted-time"},{id:"timeout-hygiene.thresholds",label:"Detection thresholds",help:"settings.timeout-hygiene"}]},{id:"pr-feedback",label:"Pull requests",icon:"i-lucide-git-pull-request",to:"/settings/pr-feedback",group:"analysis",roles:[s.ADMINISTRATOR],introHelp:"settings.pr-feedback",fields:[{id:"pr-feedback.settings",label:"Pull-request feedback",help:"settings.pr-feedback"}]},{id:"ai",label:"AI diagnosis",icon:"i-lucide-sparkles",to:"/settings/ai",group:"analysis",roles:[s.ADMINISTRATOR],fields:[{id:"ai.diagnosis",label:"Diagnosis model",help:"settings.ai-provider"},{id:"ai.research",label:"Research model",help:"settings.ai-research"},{id:"ai.embedding",label:"Embedding model",help:"settings.embedding-model"},{id:"ai.auto-diagnose",label:"Auto-diagnose",help:"settings.auto-diagnose"},{id:"ai.context-limits",label:"Diagnosis context limits",help:"settings.ai-limits"},{id:"ai.instructions",label:"Global analysis instructions",help:"settings.ai-instructions"},{id:"ai.scm-token",label:"Repository access token",help:"project.scm-token"},{id:"ai.privacy",label:"Privacy notice",help:"settings.privacy"}]},{id:"about",label:"About",icon:"i-lucide-info",to:"/settings/about",group:"meta",fields:[]}];function r(i){return o(i.help)}function g(i){const t=new Set;for(const a of i.fields)for(const e of r(a))t.add(e);return[...t]}function p(i){const t=n.find(a=>a.id===i);if(!t)throw new Error(`Unknown settings page: ${i}`);return t}function b(i){const t=n.filter(e=>(!e.roles||i.canSeeAdmin)&&!(i.isDesktop&&e.authOnly)),a=e=>({label:e.label,icon:e.icon,to:e.to,...i.envManaged?.[e.id]?{badge:{icon:"i-lucide-lock",color:"neutral"}}:{}});return c.map(e=>t.filter(l=>l.group===e.id).map(a)).filter(e=>e.length>0)}export{b,p as g,g as p};
1
+ import{ca as s}from"./C5TrTuWv.js";import{h as o}from"./BjaRappk.js";const c=[{id:"instance",label:"Instance"},{id:"analysis",label:"Analysis"},{id:"meta",label:""}],n=[{id:"account",label:"Account",icon:"i-lucide-user-round",to:"/settings/account",group:"instance",authOnly:!0,fields:[{id:"account.display-name",label:"Display name",help:"account.display-name"},{id:"account.email",label:"Email address",help:"account.email"},{id:"account.connected-accounts",label:"Connected accounts",help:"account.connected-accounts"},{id:"account.password",label:"Password",help:"account.password"},{id:"account.auth-toggle",label:"Authentication",help:"settings.auth-toggle",envOnly:!0}]},{id:"users",label:"Users",icon:"i-lucide-users",to:"/settings/users",group:"instance",roles:[s.ADMINISTRATOR],authOnly:!0,introHelp:"settings.users",fields:[{id:"users.list",label:"Users & roles",help:"settings.users"},{id:"users.api-keys",label:"API keys",help:"settings.api-keys"}]},{id:"notifications",label:"Notifications",icon:"i-lucide-bell",to:"/settings/notifications",group:"instance",fields:[{id:"notifications.smtp",label:"SMTP email delivery",help:"settings.smtp",envOnly:!0},{id:"notifications.test-email",label:"Send test email",help:"notifications.test-email"},{id:"notifications.channels",label:"Notification channels",help:"notifications.channels"},{id:"notifications.subscriptions",label:"My subscriptions",help:"notifications.subscriptions"}]},{id:"tags",label:"Tags",icon:"i-lucide-tags",to:"/settings/tags",group:"analysis",roles:[s.ADMINISTRATOR],introHelp:"settings.tags",fields:[{id:"tags.list",label:"Tags",help:"settings.tags"}]},{id:"storage",label:"Storage",icon:"i-lucide-hard-drive",to:"/settings/storage",group:"instance",roles:[s.ADMINISTRATOR],fields:[{id:"storage.backend",label:"Storage backend",help:"settings.storage-backend",envOnly:!0},{id:"storage.stats",label:"Storage statistics",help:"settings.storage-stats"},{id:"storage.cleanup",label:"Cleanup old test runs",help:"settings.cleanup"}]},{id:"performance",label:"Performance",icon:"i-lucide-gauge",to:"/settings/performance",group:"analysis",roles:[s.ADMINISTRATOR],fields:[{id:"wasted-time.patterns",label:"Wasted-time patterns",help:"settings.wasted-time"},{id:"timeout-hygiene.thresholds",label:"Detection thresholds",help:"settings.timeout-hygiene"}]},{id:"pr-feedback",label:"Pull requests",icon:"i-lucide-git-pull-request",to:"/settings/pr-feedback",group:"analysis",roles:[s.ADMINISTRATOR],introHelp:"settings.pr-feedback",fields:[{id:"pr-feedback.settings",label:"Pull-request feedback",help:"settings.pr-feedback"}]},{id:"ai",label:"AI diagnosis",icon:"i-lucide-sparkles",to:"/settings/ai",group:"analysis",roles:[s.ADMINISTRATOR],fields:[{id:"ai.diagnosis",label:"Diagnosis model",help:"settings.ai-provider"},{id:"ai.research",label:"Research model",help:"settings.ai-research"},{id:"ai.embedding",label:"Embedding model",help:"settings.embedding-model"},{id:"ai.auto-diagnose",label:"Auto-diagnose",help:"settings.auto-diagnose"},{id:"ai.context-limits",label:"Diagnosis context limits",help:"settings.ai-limits"},{id:"ai.instructions",label:"Global analysis instructions",help:"settings.ai-instructions"},{id:"ai.scm-token",label:"Repository access token",help:"project.scm-token"},{id:"ai.privacy",label:"Privacy notice",help:"settings.privacy"}]},{id:"about",label:"About",icon:"i-lucide-info",to:"/settings/about",group:"meta",fields:[]}];function r(i){return o(i.help)}function g(i){const t=new Set;for(const a of i.fields)for(const e of r(a))t.add(e);return[...t]}function p(i){const t=n.find(a=>a.id===i);if(!t)throw new Error(`Unknown settings page: ${i}`);return t}function b(i){const t=n.filter(e=>(!e.roles||i.canSeeAdmin)&&!(i.isDesktop&&e.authOnly)),a=e=>({label:e.label,icon:e.icon,to:e.to,...i.envManaged?.[e.id]?{badge:{icon:"i-lucide-lock",color:"neutral"}}:{}});return c.map(e=>t.filter(l=>l.group===e.id).map(a)).filter(e=>e.length>0)}export{b,p as g,g as p};
@@ -1 +1 @@
1
- import{e as H,t as j}from"./D7t0Dn3h.js";import{ap as $,b as J,a as K,ak as b,h as X,aM as Y}from"./CNu3kken.js";import{e as V}from"./DeewM3Wg.js";const z={normal:[],headed:["--headed"],debug:["--debug"],ui:["--ui"]};function Q(n){const i=new Map;for(const r of n){const u=r.projectName||"";i.has(u)||i.set(u,[]),i.get(u).push(r)}return i}function W(n,i){if(i==="grep"){const a=n.map(c=>H(c.title));return["--grep",a.length===1?a[0]:`(${a.join("|")})`]}const r=new Set,u=[];for(const a of n){const c=i==="file-line"&&a.line?`${j(a.filePath)}:${a.line}`:j(a.filePath);r.has(c)||(r.add(c),u.push(c))}return u}function Z(n){return/[\s"'()|]/.test(n)?`"${n.replace(/"/g,'\\"')}"`:n}function ee(n,i={}){if(n.length===0)return[];const r=i.mode??"file-line",u=i.runMode??"normal",a=Math.min(1e3,Math.max(1,Math.floor(i.repeatEach??1))),c=[];for(const[h,g]of Q(n)){const d=W(g,r);h&&d.push(`--project=${h}`),d.push(...z[u]),i.trace&&d.push("--trace=on"),a>1&&d.push(`--repeat-each=${a}`),c.push({args:d,display:["playwright","test",...d.map(Z)].join(" ")})}return c}function re(n){return n.progressTotal?`Running ${n.progressDone}/${n.progressTotal}…`:n.steps.length>1?`Running ${n.stepIndex+1}/${n.steps.length}…`:"Running…"}const te={mode:"file-line",runMode:"normal",trace:!1,repeatEach:1},ce=[{label:"Headless",value:"normal",icon:"i-lucide-square-terminal"},{label:"Headed",value:"headed",icon:"i-lucide-app-window"},{label:"Debug (inspector)",value:"debug",icon:"i-lucide-bug"},{label:"UI mode",value:"ui",icon:"i-lucide-layout-grid"}],ue=[{label:"File:line",value:"file-line"},{label:"Title (grep)",value:"grep"},{label:"File only",value:"file"}],S=2e3,k=15,_="piwi:desktop-local-run-options";let se=1,E=null,w=0,v=[];const y=new Map,R=new Map;let I=null,O=null,x=!1;const ne=/^Running (\d+) tests? using \d+ workers?$/,oe=/^\s{1,6}(?:✓|✘|✗|x|ok|-)\s+\d+\s/;function de(){const n=$("desktop-local-runs",()=>[]),i=$("desktop-local-runs-tray",()=>!1),r=$("desktop-local-run-options",()=>({}));I=J(),O=K();const u=X(()=>n.value.filter(e=>e.status==="running").length);function a(){if(!x){x=!0;try{const e=localStorage.getItem(_);e&&(r.value=JSON.parse(e))}catch{}}}function c(e){return a(),{...te,...r.value[String(e)]}}function h(e,t){a();const s={...c(e),...t};r.value={...r.value,[String(e)]:s};try{localStorage.setItem(_,JSON.stringify(r.value))}catch{}}function g(e,t,s){if(e.lines.push({text:t,error:s}),e.lines.length>S&&e.lines.splice(0,e.lines.length-S),s)return;const o=ne.exec(t);o?e.progressTotal=(e.progressTotal??0)+Number(o[1]):oe.test(t)&&(e.progressDone=Math.min(e.progressDone+1,e.progressTotal??e.progressDone+1))}function d(e,t){if(t.kind==="exit"){R.get(t.id)?.(t.code);return}g(e,t.line??"",t.kind!=="stdout")}async function M(){if(E)return;const e=Y();if(!e)throw new Error("The desktop bridge is unavailable.");E=await e.listen("piwi:local-run",({payload:t})=>{const s=y.get(t.id);s?d(s,t):w>0&&v.push(t)})}async function T(e,t){const s=b();if(!s)throw new Error("The desktop bridge is unavailable.");w+=1;let o;try{o=await s.invoke("desktop_run_local_tests",{projectId:e.projectId,args:t.args})}catch(p){throw w-=1,p}const l=new Promise(p=>R.set(o,p));y.set(o,e),e.shellId=o;const f=v.filter(p=>p.id===o);v=w>1?v.filter(p=>p.id!==o):[],w-=1;for(const p of f)d(e,p);const m=await l;return y.delete(o),R.delete(o),e.shellId=null,m}async function A(e){try{await M();let t=0;for(const[s,o]of e.steps.entries()){if(e.stopRequested)break;e.stepIndex=s,e.steps.length>1&&g(e,`$ ${o.display}`,!1);const l=await T(e,o);if(e.stopRequested)break;l!==0&&(t=l??1)}e.stopRequested?e.status="stopped":(e.exitCode=typeof t=="number"?t:1,e.status=t===0?"passed":"failed")}catch(t){g(e,V(t),!0),e.status="error"}finally{e.finishedAt=Date.now(),P(e),N()}}function P(e){if(e.status==="stopped")return;const t=e.projectLabel||"Local run",s=`${e.cases.length} test${e.cases.length===1?"":"s"}`,o=Math.max(1,Math.round(((e.finishedAt??Date.now())-e.startedAt)/1e3));D(e,t,s,o);const l={label:"View output",color:"neutral",variant:"outline",onClick:()=>{i.value=!0}},f=e.piwiRunId==null?[]:[{label:`Open run #${e.piwiRunId}`,color:"neutral",variant:"outline",onClick:()=>{O?.push(`/test-runs/${e.piwiRunId}`)}}];e.status==="passed"?I?.add({title:"Local run passed",description:`${t} — ${s} in ${o}s`,icon:"i-lucide-check",color:"success",actions:[l,...f]}):e.status==="failed"?I?.add({title:"Local run failed",description:`${t} — exit ${e.exitCode??1} after ${o}s`,icon:"i-lucide-x",color:"error",actions:[l,...f]}):I?.add({title:"Local run could not start",description:e.lines.findLast(m=>m.error)?.text,icon:"i-lucide-triangle-alert",color:"error",actions:[l]})}function D(e,t,s,o){if(typeof Notification>"u"||Notification.permission!=="granted"||!document.hidden&&document.hasFocus())return;const l=e.status==="passed"?"Local run passed":e.status==="failed"?"Local run failed":"Local run could not start",f=e.status==="failed"?`${t} — exit ${e.exitCode??1} after ${o}s`:`${t} — ${s} in ${o}s`;try{new Notification(l,{body:f})}catch{}}function N(){const e=n.value.filter(s=>s.status!=="running");if(e.length<=k)return;const t=new Set(e.slice(k).map(s=>s.key));n.value=n.value.filter(s=>!t.has(s.key))}function L(e){if(!b()||e.cases.length===0)return null;const t={...c(e.projectId),...e.options},s=ee(e.cases,t);if(s.length===0)return null;e.persistOptions!==!1&&h(e.projectId,t);const o={key:se++,projectId:String(e.projectId),projectLabel:e.projectLabel??null,cases:e.cases.map(f=>({...f})),options:t,steps:s,stepIndex:0,status:"running",lines:[],exitCode:null,startedAt:Date.now(),finishedAt:null,shellId:null,stopRequested:!1,progressTotal:null,progressDone:0,piwiRunId:null,piwiRunBaseline:null};n.value=[o,...n.value];const l=n.value[0];return i.value=!0,C(l),A(l),l}async function C(e){try{const t=await $fetch(`/api/projects/${e.projectId}/latest-run`);e.piwiRunBaseline=t?.id??0}catch{}}async function F(){const e=Date.now()-12e4;for(const t of n.value)if(!(t.piwiRunId!=null||t.piwiRunBaseline==null)&&!(t.status!=="running"&&(t.finishedAt??0)<e))try{const s=await $fetch(`/api/projects/${t.projectId}/latest-run`);s&&s.id>t.piwiRunBaseline&&(t.piwiRunId=s.id)}catch{}}function B(e){return L({projectId:e.projectId,projectLabel:e.projectLabel,cases:e.cases,options:e.options,persistOptions:!1})}async function U(e){if(e.status!=="running")return;e.stopRequested=!0;const t=b(),s=e.shellId;if(t&&s!=null){try{await t.invoke("desktop_stop_local_tests",{runId:s})}catch{}R.get(s)?.(null)}}function q(){n.value=n.value.filter(e=>e.status==="running")}function G(e){if(e==null)return;const t=String(e);return n.value.find(s=>s.projectId===t)}return{runs:n,trayOpen:i,activeCount:u,startRun:L,rerun:B,stopRun:U,clearFinished:q,latestForProject:G,getProjectOptions:c,saveProjectOptions:h,correlatePiwiRuns:F}}export{ce as L,ue as R,ee as b,re as l,de as u};
1
+ import{e as H,t as j}from"./CX5Q0dZ8.js";import{ap as $,b as J,a as K,ak as b,h as X,aM as Y}from"./C5TrTuWv.js";import{e as V}from"./DMtrFQqi.js";const z={normal:[],headed:["--headed"],debug:["--debug"],ui:["--ui"]};function Q(n){const i=new Map;for(const r of n){const u=r.projectName||"";i.has(u)||i.set(u,[]),i.get(u).push(r)}return i}function W(n,i){if(i==="grep"){const a=n.map(c=>H(c.title));return["--grep",a.length===1?a[0]:`(${a.join("|")})`]}const r=new Set,u=[];for(const a of n){const c=i==="file-line"&&a.line?`${j(a.filePath)}:${a.line}`:j(a.filePath);r.has(c)||(r.add(c),u.push(c))}return u}function Z(n){return/[\s"'()|]/.test(n)?`"${n.replace(/"/g,'\\"')}"`:n}function ee(n,i={}){if(n.length===0)return[];const r=i.mode??"file-line",u=i.runMode??"normal",a=Math.min(1e3,Math.max(1,Math.floor(i.repeatEach??1))),c=[];for(const[h,g]of Q(n)){const d=W(g,r);h&&d.push(`--project=${h}`),d.push(...z[u]),i.trace&&d.push("--trace=on"),a>1&&d.push(`--repeat-each=${a}`),c.push({args:d,display:["playwright","test",...d.map(Z)].join(" ")})}return c}function re(n){return n.progressTotal?`Running ${n.progressDone}/${n.progressTotal}…`:n.steps.length>1?`Running ${n.stepIndex+1}/${n.steps.length}…`:"Running…"}const te={mode:"file-line",runMode:"normal",trace:!1,repeatEach:1},ce=[{label:"Headless",value:"normal",icon:"i-lucide-square-terminal"},{label:"Headed",value:"headed",icon:"i-lucide-app-window"},{label:"Debug (inspector)",value:"debug",icon:"i-lucide-bug"},{label:"UI mode",value:"ui",icon:"i-lucide-layout-grid"}],ue=[{label:"File:line",value:"file-line"},{label:"Title (grep)",value:"grep"},{label:"File only",value:"file"}],S=2e3,k=15,_="piwi:desktop-local-run-options";let se=1,E=null,w=0,v=[];const y=new Map,R=new Map;let I=null,O=null,x=!1;const ne=/^Running (\d+) tests? using \d+ workers?$/,oe=/^\s{1,6}(?:✓|✘|✗|x|ok|-)\s+\d+\s/;function de(){const n=$("desktop-local-runs",()=>[]),i=$("desktop-local-runs-tray",()=>!1),r=$("desktop-local-run-options",()=>({}));I=J(),O=K();const u=X(()=>n.value.filter(e=>e.status==="running").length);function a(){if(!x){x=!0;try{const e=localStorage.getItem(_);e&&(r.value=JSON.parse(e))}catch{}}}function c(e){return a(),{...te,...r.value[String(e)]}}function h(e,t){a();const s={...c(e),...t};r.value={...r.value,[String(e)]:s};try{localStorage.setItem(_,JSON.stringify(r.value))}catch{}}function g(e,t,s){if(e.lines.push({text:t,error:s}),e.lines.length>S&&e.lines.splice(0,e.lines.length-S),s)return;const o=ne.exec(t);o?e.progressTotal=(e.progressTotal??0)+Number(o[1]):oe.test(t)&&(e.progressDone=Math.min(e.progressDone+1,e.progressTotal??e.progressDone+1))}function d(e,t){if(t.kind==="exit"){R.get(t.id)?.(t.code);return}g(e,t.line??"",t.kind!=="stdout")}async function M(){if(E)return;const e=Y();if(!e)throw new Error("The desktop bridge is unavailable.");E=await e.listen("piwi:local-run",({payload:t})=>{const s=y.get(t.id);s?d(s,t):w>0&&v.push(t)})}async function T(e,t){const s=b();if(!s)throw new Error("The desktop bridge is unavailable.");w+=1;let o;try{o=await s.invoke("desktop_run_local_tests",{projectId:e.projectId,args:t.args})}catch(p){throw w-=1,p}const l=new Promise(p=>R.set(o,p));y.set(o,e),e.shellId=o;const f=v.filter(p=>p.id===o);v=w>1?v.filter(p=>p.id!==o):[],w-=1;for(const p of f)d(e,p);const m=await l;return y.delete(o),R.delete(o),e.shellId=null,m}async function A(e){try{await M();let t=0;for(const[s,o]of e.steps.entries()){if(e.stopRequested)break;e.stepIndex=s,e.steps.length>1&&g(e,`$ ${o.display}`,!1);const l=await T(e,o);if(e.stopRequested)break;l!==0&&(t=l??1)}e.stopRequested?e.status="stopped":(e.exitCode=typeof t=="number"?t:1,e.status=t===0?"passed":"failed")}catch(t){g(e,V(t),!0),e.status="error"}finally{e.finishedAt=Date.now(),P(e),N()}}function P(e){if(e.status==="stopped")return;const t=e.projectLabel||"Local run",s=`${e.cases.length} test${e.cases.length===1?"":"s"}`,o=Math.max(1,Math.round(((e.finishedAt??Date.now())-e.startedAt)/1e3));D(e,t,s,o);const l={label:"View output",color:"neutral",variant:"outline",onClick:()=>{i.value=!0}},f=e.piwiRunId==null?[]:[{label:`Open run #${e.piwiRunId}`,color:"neutral",variant:"outline",onClick:()=>{O?.push(`/test-runs/${e.piwiRunId}`)}}];e.status==="passed"?I?.add({title:"Local run passed",description:`${t} — ${s} in ${o}s`,icon:"i-lucide-check",color:"success",actions:[l,...f]}):e.status==="failed"?I?.add({title:"Local run failed",description:`${t} — exit ${e.exitCode??1} after ${o}s`,icon:"i-lucide-x",color:"error",actions:[l,...f]}):I?.add({title:"Local run could not start",description:e.lines.findLast(m=>m.error)?.text,icon:"i-lucide-triangle-alert",color:"error",actions:[l]})}function D(e,t,s,o){if(typeof Notification>"u"||Notification.permission!=="granted"||!document.hidden&&document.hasFocus())return;const l=e.status==="passed"?"Local run passed":e.status==="failed"?"Local run failed":"Local run could not start",f=e.status==="failed"?`${t} — exit ${e.exitCode??1} after ${o}s`:`${t} — ${s} in ${o}s`;try{new Notification(l,{body:f})}catch{}}function N(){const e=n.value.filter(s=>s.status!=="running");if(e.length<=k)return;const t=new Set(e.slice(k).map(s=>s.key));n.value=n.value.filter(s=>!t.has(s.key))}function L(e){if(!b()||e.cases.length===0)return null;const t={...c(e.projectId),...e.options},s=ee(e.cases,t);if(s.length===0)return null;e.persistOptions!==!1&&h(e.projectId,t);const o={key:se++,projectId:String(e.projectId),projectLabel:e.projectLabel??null,cases:e.cases.map(f=>({...f})),options:t,steps:s,stepIndex:0,status:"running",lines:[],exitCode:null,startedAt:Date.now(),finishedAt:null,shellId:null,stopRequested:!1,progressTotal:null,progressDone:0,piwiRunId:null,piwiRunBaseline:null};n.value=[o,...n.value];const l=n.value[0];return i.value=!0,C(l),A(l),l}async function C(e){try{const t=await $fetch(`/api/projects/${e.projectId}/latest-run`);e.piwiRunBaseline=t?.id??0}catch{}}async function F(){const e=Date.now()-12e4;for(const t of n.value)if(!(t.piwiRunId!=null||t.piwiRunBaseline==null)&&!(t.status!=="running"&&(t.finishedAt??0)<e))try{const s=await $fetch(`/api/projects/${t.projectId}/latest-run`);s&&s.id>t.piwiRunBaseline&&(t.piwiRunId=s.id)}catch{}}function B(e){return L({projectId:e.projectId,projectLabel:e.projectLabel,cases:e.cases,options:e.options,persistOptions:!1})}async function U(e){if(e.status!=="running")return;e.stopRequested=!0;const t=b(),s=e.shellId;if(t&&s!=null){try{await t.invoke("desktop_stop_local_tests",{runId:s})}catch{}R.get(s)?.(null)}}function q(){n.value=n.value.filter(e=>e.status==="running")}function G(e){if(e==null)return;const t=String(e);return n.value.find(s=>s.projectId===t)}return{runs:n,trayOpen:i,activeCount:u,startRun:L,rerun:B,stopRun:U,clearFinished:q,latestForProject:G,getProjectOptions:c,saveProjectOptions:h,correlatePiwiRuns:F}}export{ce as L,ue as R,ee as b,re as l,de as u};
@@ -1 +1 @@
1
- import{d as ee,w as te,b as oe,O as ae,c as w,i as n,k as t,f as u,g as s,j as a,F as le,D as se,o as d,_ as ne,v as m,t as O,R as re,p as ie,E as ce,P as S,al as M,m as q,h as P,r as v,M as B,A as de}from"./CNu3kken.js";import{_ as ue}from"./Ce89VyHE.js";import{_ as me}from"./D3SJGdl4.js";import{_ as pe}from"./Ce47NgZw.js";import{_ as ge}from"./CF_eDZHu.js";import{_ as fe}from"./Wk7ZKG4B.js";import{_ as xe}from"./roaTZkYi.js";import{p as _e}from"./DeewM3Wg.js";import{u as ve}from"./DprkT7rM.js";import{o as be,s as z}from"./DGnQ69wW.js";import"./CmTzxoQt.js";import"./CfhOanaF.js";import"./BjaRappk.js";import"./B_JSV0yG.js";import"./DZ-KbUZi.js";const ye={class:"space-y-6"},Te={class:"flex items-center gap-2"},Ce={class:"text-sm font-mono text-muted"},ke={class:"text-sm text-muted"},he={class:"flex gap-1 justify-end"},$e={class:"text-center py-12"},Ve={class:"flex justify-center mb-4"},Ae={class:"flex items-center gap-3"},Ue={key:0,class:"mt-2"},we={class:"flex items-center gap-3"},De={key:0,class:"mt-2"},b="#6366f1",He=ee({__name:"tags",async setup(Fe){let y,D;const{data:N,refresh:V}=([y,D]=te(()=>ve("/api/tags","$F3fVqC3Sbv")),y=await y,D(),y),p=oe(),{authState:K}=ae(),I=de(),A=P(()=>N.value?.tags||[]),T=P(()=>I.public.authEnabled?K.value.user?.role==="administrator":!0),L=[{accessorKey:"text",header:"Tag"},{accessorKey:"color",header:"Color"},{accessorKey:"createdAt",header:"Created"},{accessorKey:"actions",header:""}],g=v(!1),F=be({text:z().min(1,"Tag text is required").max(50,"Tag text must be at most 50 characters"),color:z().min(1,"Color is required")}),r=B({text:"",color:b}),x=v(!1),C=v(null),i=B({text:"",color:b});function R(l){C.value=l,i.text=l.text,i.color=l.color,x.value=!0}async function G(){try{await $fetch("/api/tags",{method:"POST",body:r}),p.add({title:"Tag created",description:`Tag "${r.text}" has been created successfully`,color:"success"}),g.value=!1,r.text="",r.color=b,await V()}catch(l){const e=l&&typeof l=="object"&&"data"in l?l.data?.message:void 0;p.add({title:"Failed to create tag",description:e||"An error occurred",color:"error"})}}async function H(){if(C.value)try{await $fetch(`/api/tags/${C.value.id}`,{method:"PUT",body:{text:i.text,color:i.color}}),p.add({title:"Tag updated",description:"Tag has been updated successfully",color:"success"}),x.value=!1,C.value=null,await V()}catch(l){const e=l&&typeof l=="object"&&"data"in l?l.data?.message:void 0;p.add({title:"Failed to update tag",description:e||"An error occurred",color:"error"})}}const _=v(!1),f=v(null);function J(l){f.value=l,_.value=!0}async function Q(){const l=f.value;if(l){_.value=!1,f.value=null;try{await $fetch(`/api/tags/${l.id}`,{method:"DELETE"}),p.add({title:"Tag deleted",description:`Tag "${l.text}" has been deleted`,color:"success"}),await V()}catch(e){const c=e&&typeof e=="object"&&"data"in e?e.data?.message:void 0;p.add({title:"Failed to delete tag",description:c||"An error occurred",color:"error"})}}}return(l,e)=>{const c=ne,k=ue,W=me,E=pe,X=ie,h=ce,$=ge,j=fe,U=xe,Y=se;return d(),w(le,null,[n("div",ye,[t(A).length>0?(d(),u(E,{key:0,title:"Tags",count:t(A).length,help:"settings.tags"},{actions:s(()=>[t(T)?(d(),u(c,{key:0,label:"Add tag",icon:"i-lucide-tag",size:"sm",onClick:e[0]||(e[0]=o=>g.value=!0)})):m("",!0)]),default:s(()=>[a(W,{data:t(A),columns:L},{"text-cell":s(({row:o})=>[a(k,{text:o.original.text,color:o.original.color},null,8,["text","color"])]),"color-cell":s(({row:o})=>[n("div",Te,[n("span",{class:"inline-block w-4 h-4 rounded-full border border-black/10",style:re({backgroundColor:o.original.color})},null,4),n("span",Ce,O(o.original.color),1)])]),"createdAt-cell":s(({row:o})=>[n("span",ke,O(("prettyDateFormat"in l?l.prettyDateFormat:t(_e))(o.original.createdAt,{dateOnly:!0})),1)]),"actions-cell":s(({row:o})=>[n("div",he,[t(T)?(d(),u(c,{key:0,icon:"i-lucide-pencil",color:"neutral",variant:"ghost",size:"sm",onClick:Z=>R(o.original)},null,8,["onClick"])):m("",!0),t(T)?(d(),u(c,{key:1,icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"sm",onClick:Z=>J(o.original)},null,8,["onClick"])):m("",!0)])]),_:1},8,["data"])]),_:1},8,["count"])):(d(),u(E,{key:1,title:"Tags",count:0,help:"settings.tags"},{default:s(()=>[n("div",$e,[n("div",Ve,[a(X,{name:"i-lucide-tags",class:"text-4xl text-muted"})]),e[14]||(e[14]=n("h3",{class:"text-lg font-semibold mb-2"},"No tags yet",-1)),e[15]||(e[15]=n("p",{class:"text-muted mb-4"},"Create tags to categorize and filter your projects",-1)),t(T)?(d(),u(c,{key:0,label:"Add tag",icon:"i-lucide-tag",onClick:e[1]||(e[1]=o=>g.value=!0)})):m("",!0)])]),_:1}))]),a(Y,null,{default:s(()=>[a(U,{open:t(g),title:"Add new tag","onUpdate:open":e[6]||(e[6]=o=>g.value=o)},{body:s(()=>[a(j,{schema:t(F),state:t(r)},{default:s(()=>[a($,{label:"Tag text",name:"text",required:"",class:"mb-4"},{default:s(()=>[a(h,{modelValue:t(r).text,"onUpdate:modelValue":e[2]||(e[2]=o=>t(r).text=o),placeholder:"Enter tag name"},null,8,["modelValue"])]),_:1}),a($,{label:"Color",name:"color",required:"",class:"mb-4"},{default:s(()=>[n("div",Ae,[S(n("input",{"onUpdate:modelValue":e[3]||(e[3]=o=>t(r).color=o),type:"color",class:"w-10 h-10 rounded cursor-pointer border border-default","aria-label":"Pick tag color"},null,512),[[M,t(r).color]]),a(h,{modelValue:t(r).color,"onUpdate:modelValue":e[4]||(e[4]=o=>t(r).color=o),class:"flex-1 font-mono",placeholder:"#6366f1"},null,8,["modelValue"])])]),_:1}),t(r).text?(d(),w("div",Ue,[e[16]||(e[16]=n("span",{class:"text-sm text-muted mr-2"},"Preview:",-1)),a(k,{text:t(r).text,color:t(r).color||b},null,8,["text","color"])])):m("",!0)]),_:1},8,["schema","state"])]),footer:s(()=>[a(c,{type:"button",color:"neutral",variant:"ghost",label:"Cancel",onClick:e[5]||(e[5]=o=>g.value=!1)}),a(c,{type:"submit",label:"Create tag",icon:"i-lucide-tag",onClick:G})]),_:1},8,["open"]),a(U,{open:t(x),title:"Edit tag","onUpdate:open":e[11]||(e[11]=o=>x.value=o)},{body:s(()=>[a(j,{schema:t(F),state:t(i)},{default:s(()=>[a($,{label:"Tag text",name:"text",required:"",class:"mb-4"},{default:s(()=>[a(h,{modelValue:t(i).text,"onUpdate:modelValue":e[7]||(e[7]=o=>t(i).text=o),placeholder:"Enter tag name"},null,8,["modelValue"])]),_:1}),a($,{label:"Color",name:"color",required:"",class:"mb-4"},{default:s(()=>[n("div",we,[S(n("input",{"onUpdate:modelValue":e[8]||(e[8]=o=>t(i).color=o),type:"color",class:"w-10 h-10 rounded cursor-pointer border border-default","aria-label":"Pick tag color"},null,512),[[M,t(i).color]]),a(h,{modelValue:t(i).color,"onUpdate:modelValue":e[9]||(e[9]=o=>t(i).color=o),class:"flex-1 font-mono",placeholder:"#6366f1"},null,8,["modelValue"])])]),_:1}),t(i).text?(d(),w("div",De,[e[17]||(e[17]=n("span",{class:"text-sm text-muted mr-2"},"Preview:",-1)),a(k,{text:t(i).text,color:t(i).color||b},null,8,["text","color"])])):m("",!0)]),_:1},8,["schema","state"])]),footer:s(()=>[a(c,{type:"button",color:"neutral",variant:"ghost",label:"Cancel",onClick:e[10]||(e[10]=o=>x.value=!1)}),a(c,{type:"submit",label:"Save changes",icon:"i-lucide-check",onClick:H})]),_:1},8,["open"]),a(U,{open:t(_),title:"Delete tag","onUpdate:open":e[13]||(e[13]=o=>_.value=o)},{body:s(()=>[n("p",null,[e[18]||(e[18]=q(" Are you sure you want to delete tag ",-1)),t(f)?(d(),u(k,{key:0,text:t(f).text,color:t(f).color,class:"inline-flex"},null,8,["text","color"])):m("",!0),e[19]||(e[19]=q("? It will be removed from all projects. ",-1))])]),footer:s(()=>[a(c,{color:"neutral",variant:"ghost",label:"Cancel",onClick:e[12]||(e[12]=o=>_.value=!1)}),a(c,{color:"error",label:"Delete",icon:"i-lucide-trash-2",onClick:Q})]),_:1},8,["open"])]),_:1})],64)}}});export{He as default};
1
+ import{d as ee,w as te,b as oe,O as ae,c as w,i as n,k as t,f as u,g as s,j as a,F as le,D as se,o as d,_ as ne,v as m,t as O,R as re,p as ie,E as ce,P as S,al as M,m as q,h as P,r as v,M as B,A as de}from"./C5TrTuWv.js";import{_ as ue}from"./CjBktNrC.js";import{_ as me}from"./Bg93Rnts.js";import{_ as pe}from"./DMAiMrNr.js";import{_ as ge}from"./DH5H1DJh.js";import{_ as fe}from"./B_r0xHVS.js";import{_ as xe}from"./6Z_ZwH8I.js";import{p as _e}from"./DMtrFQqi.js";import{u as ve}from"./T5UuMUxA.js";import{o as be,s as z}from"./DGnQ69wW.js";import"./V9p3z39z.js";import"./B69RP95P.js";import"./BjaRappk.js";import"./C8Paf_V1.js";import"./D_y2VS8k.js";const ye={class:"space-y-6"},Te={class:"flex items-center gap-2"},Ce={class:"text-sm font-mono text-muted"},ke={class:"text-sm text-muted"},he={class:"flex gap-1 justify-end"},$e={class:"text-center py-12"},Ve={class:"flex justify-center mb-4"},Ae={class:"flex items-center gap-3"},Ue={key:0,class:"mt-2"},we={class:"flex items-center gap-3"},De={key:0,class:"mt-2"},b="#6366f1",He=ee({__name:"tags",async setup(Fe){let y,D;const{data:N,refresh:V}=([y,D]=te(()=>ve("/api/tags","$F3fVqC3Sbv")),y=await y,D(),y),p=oe(),{authState:K}=ae(),I=de(),A=P(()=>N.value?.tags||[]),T=P(()=>I.public.authEnabled?K.value.user?.role==="administrator":!0),L=[{accessorKey:"text",header:"Tag"},{accessorKey:"color",header:"Color"},{accessorKey:"createdAt",header:"Created"},{accessorKey:"actions",header:""}],g=v(!1),F=be({text:z().min(1,"Tag text is required").max(50,"Tag text must be at most 50 characters"),color:z().min(1,"Color is required")}),r=B({text:"",color:b}),x=v(!1),C=v(null),i=B({text:"",color:b});function R(l){C.value=l,i.text=l.text,i.color=l.color,x.value=!0}async function G(){try{await $fetch("/api/tags",{method:"POST",body:r}),p.add({title:"Tag created",description:`Tag "${r.text}" has been created successfully`,color:"success"}),g.value=!1,r.text="",r.color=b,await V()}catch(l){const e=l&&typeof l=="object"&&"data"in l?l.data?.message:void 0;p.add({title:"Failed to create tag",description:e||"An error occurred",color:"error"})}}async function H(){if(C.value)try{await $fetch(`/api/tags/${C.value.id}`,{method:"PUT",body:{text:i.text,color:i.color}}),p.add({title:"Tag updated",description:"Tag has been updated successfully",color:"success"}),x.value=!1,C.value=null,await V()}catch(l){const e=l&&typeof l=="object"&&"data"in l?l.data?.message:void 0;p.add({title:"Failed to update tag",description:e||"An error occurred",color:"error"})}}const _=v(!1),f=v(null);function J(l){f.value=l,_.value=!0}async function Q(){const l=f.value;if(l){_.value=!1,f.value=null;try{await $fetch(`/api/tags/${l.id}`,{method:"DELETE"}),p.add({title:"Tag deleted",description:`Tag "${l.text}" has been deleted`,color:"success"}),await V()}catch(e){const c=e&&typeof e=="object"&&"data"in e?e.data?.message:void 0;p.add({title:"Failed to delete tag",description:c||"An error occurred",color:"error"})}}}return(l,e)=>{const c=ne,k=ue,W=me,E=pe,X=ie,h=ce,$=ge,j=fe,U=xe,Y=se;return d(),w(le,null,[n("div",ye,[t(A).length>0?(d(),u(E,{key:0,title:"Tags",count:t(A).length,help:"settings.tags"},{actions:s(()=>[t(T)?(d(),u(c,{key:0,label:"Add tag",icon:"i-lucide-tag",size:"sm",onClick:e[0]||(e[0]=o=>g.value=!0)})):m("",!0)]),default:s(()=>[a(W,{data:t(A),columns:L},{"text-cell":s(({row:o})=>[a(k,{text:o.original.text,color:o.original.color},null,8,["text","color"])]),"color-cell":s(({row:o})=>[n("div",Te,[n("span",{class:"inline-block w-4 h-4 rounded-full border border-black/10",style:re({backgroundColor:o.original.color})},null,4),n("span",Ce,O(o.original.color),1)])]),"createdAt-cell":s(({row:o})=>[n("span",ke,O(("prettyDateFormat"in l?l.prettyDateFormat:t(_e))(o.original.createdAt,{dateOnly:!0})),1)]),"actions-cell":s(({row:o})=>[n("div",he,[t(T)?(d(),u(c,{key:0,icon:"i-lucide-pencil",color:"neutral",variant:"ghost",size:"sm",onClick:Z=>R(o.original)},null,8,["onClick"])):m("",!0),t(T)?(d(),u(c,{key:1,icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"sm",onClick:Z=>J(o.original)},null,8,["onClick"])):m("",!0)])]),_:1},8,["data"])]),_:1},8,["count"])):(d(),u(E,{key:1,title:"Tags",count:0,help:"settings.tags"},{default:s(()=>[n("div",$e,[n("div",Ve,[a(X,{name:"i-lucide-tags",class:"text-4xl text-muted"})]),e[14]||(e[14]=n("h3",{class:"text-lg font-semibold mb-2"},"No tags yet",-1)),e[15]||(e[15]=n("p",{class:"text-muted mb-4"},"Create tags to categorize and filter your projects",-1)),t(T)?(d(),u(c,{key:0,label:"Add tag",icon:"i-lucide-tag",onClick:e[1]||(e[1]=o=>g.value=!0)})):m("",!0)])]),_:1}))]),a(Y,null,{default:s(()=>[a(U,{open:t(g),title:"Add new tag","onUpdate:open":e[6]||(e[6]=o=>g.value=o)},{body:s(()=>[a(j,{schema:t(F),state:t(r)},{default:s(()=>[a($,{label:"Tag text",name:"text",required:"",class:"mb-4"},{default:s(()=>[a(h,{modelValue:t(r).text,"onUpdate:modelValue":e[2]||(e[2]=o=>t(r).text=o),placeholder:"Enter tag name"},null,8,["modelValue"])]),_:1}),a($,{label:"Color",name:"color",required:"",class:"mb-4"},{default:s(()=>[n("div",Ae,[S(n("input",{"onUpdate:modelValue":e[3]||(e[3]=o=>t(r).color=o),type:"color",class:"w-10 h-10 rounded cursor-pointer border border-default","aria-label":"Pick tag color"},null,512),[[M,t(r).color]]),a(h,{modelValue:t(r).color,"onUpdate:modelValue":e[4]||(e[4]=o=>t(r).color=o),class:"flex-1 font-mono",placeholder:"#6366f1"},null,8,["modelValue"])])]),_:1}),t(r).text?(d(),w("div",Ue,[e[16]||(e[16]=n("span",{class:"text-sm text-muted mr-2"},"Preview:",-1)),a(k,{text:t(r).text,color:t(r).color||b},null,8,["text","color"])])):m("",!0)]),_:1},8,["schema","state"])]),footer:s(()=>[a(c,{type:"button",color:"neutral",variant:"ghost",label:"Cancel",onClick:e[5]||(e[5]=o=>g.value=!1)}),a(c,{type:"submit",label:"Create tag",icon:"i-lucide-tag",onClick:G})]),_:1},8,["open"]),a(U,{open:t(x),title:"Edit tag","onUpdate:open":e[11]||(e[11]=o=>x.value=o)},{body:s(()=>[a(j,{schema:t(F),state:t(i)},{default:s(()=>[a($,{label:"Tag text",name:"text",required:"",class:"mb-4"},{default:s(()=>[a(h,{modelValue:t(i).text,"onUpdate:modelValue":e[7]||(e[7]=o=>t(i).text=o),placeholder:"Enter tag name"},null,8,["modelValue"])]),_:1}),a($,{label:"Color",name:"color",required:"",class:"mb-4"},{default:s(()=>[n("div",we,[S(n("input",{"onUpdate:modelValue":e[8]||(e[8]=o=>t(i).color=o),type:"color",class:"w-10 h-10 rounded cursor-pointer border border-default","aria-label":"Pick tag color"},null,512),[[M,t(i).color]]),a(h,{modelValue:t(i).color,"onUpdate:modelValue":e[9]||(e[9]=o=>t(i).color=o),class:"flex-1 font-mono",placeholder:"#6366f1"},null,8,["modelValue"])])]),_:1}),t(i).text?(d(),w("div",De,[e[17]||(e[17]=n("span",{class:"text-sm text-muted mr-2"},"Preview:",-1)),a(k,{text:t(i).text,color:t(i).color||b},null,8,["text","color"])])):m("",!0)]),_:1},8,["schema","state"])]),footer:s(()=>[a(c,{type:"button",color:"neutral",variant:"ghost",label:"Cancel",onClick:e[10]||(e[10]=o=>x.value=!1)}),a(c,{type:"submit",label:"Save changes",icon:"i-lucide-check",onClick:H})]),_:1},8,["open"]),a(U,{open:t(_),title:"Delete tag","onUpdate:open":e[13]||(e[13]=o=>_.value=o)},{body:s(()=>[n("p",null,[e[18]||(e[18]=q(" Are you sure you want to delete tag ",-1)),t(f)?(d(),u(k,{key:0,text:t(f).text,color:t(f).color,class:"inline-flex"},null,8,["text","color"])):m("",!0),e[19]||(e[19]=q("? It will be removed from all projects. ",-1))])]),footer:s(()=>[a(c,{color:"neutral",variant:"ghost",label:"Cancel",onClick:e[12]||(e[12]=o=>_.value=!1)}),a(c,{color:"error",label:"Delete",icon:"i-lucide-trash-2",onClick:Q})]),_:1},8,["open"])]),_:1})],64)}}});export{He as default};
@@ -1 +1 @@
1
- import{D as H,a as E,b as N,c as R,d as _,e as b,f as A,g as L}from"./roaTZkYi.js";import{a2 as T,a3 as z,a4 as F,a5 as I,a6 as G,a7 as K,bP as U,o as a,f as l,g as r,k as e,q as c,V as d,v as i,j as h,W as k,bS as W,c3 as Y,bY as J,m,t as v,c as q,_ as M,i as Q,a0 as X,a1 as Z,h as $,b9 as B,c7 as ee,a8 as te}from"./CNu3kken.js";const se={slots:{overlay:"fixed inset-0 bg-elevated/75",content:"fixed bg-default divide-y divide-default sm:ring ring-default sm:shadow-lg flex flex-col focus:outline-none",header:"flex items-center gap-1.5 p-4 sm:px-6 min-h-(--ui-header-height)",wrapper:"",body:"flex-1 overflow-y-auto p-4 sm:p-6",footer:"flex items-center gap-1.5 p-4 sm:px-6",title:"text-highlighted font-semibold",description:"mt-1 text-muted text-sm",close:"absolute top-4 end-4"},variants:{side:{top:{content:""},right:{content:"max-w-md"},bottom:{content:""},left:{content:"max-w-md"}},inset:{true:{content:"rounded-lg"}},transition:{true:{overlay:"data-[state=open]:animate-[fade-in_200ms_ease-out] data-[state=closed]:animate-[fade-out_200ms_ease-in]"}}},compoundVariants:[{side:"top",inset:!0,class:{content:"max-h-[calc(100%-2rem)] inset-x-4 top-4"}},{side:"top",inset:!1,class:{content:"max-h-full inset-x-0 top-0"}},{side:"right",inset:!0,class:{content:"w-[calc(100%-2rem)] inset-y-4 right-4"}},{side:"right",inset:!1,class:{content:"w-full inset-y-0 right-0"}},{side:"bottom",inset:!0,class:{content:"max-h-[calc(100%-2rem)] inset-x-4 bottom-4"}},{side:"bottom",inset:!1,class:{content:"max-h-full inset-x-0 bottom-0"}},{side:"left",inset:!0,class:{content:"w-[calc(100%-2rem)] inset-y-4 left-4"}},{side:"left",inset:!1,class:{content:"w-full inset-y-0 left-0"}},{transition:!0,side:"top",class:{content:"data-[state=open]:animate-[slide-in-from-top_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-top_200ms_ease-in-out]"}},{transition:!0,side:"right",class:{content:"data-[state=open]:animate-[slide-in-from-right_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-right_200ms_ease-in-out]"}},{transition:!0,side:"bottom",class:{content:"data-[state=open]:animate-[slide-in-from-bottom_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-bottom_200ms_ease-in-out]"}},{transition:!0,side:"left",class:{content:"data-[state=open]:animate-[slide-in-from-left_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-left_200ms_ease-in-out]"}}]},le={__name:"USlideover",props:{title:{type:String,required:!1},description:{type:String,required:!1},content:{type:Object,required:!1},overlay:{type:Boolean,required:!1,default:!0},transition:{type:Boolean,required:!1,default:!0},side:{type:null,required:!1,default:"right"},inset:{type:Boolean,required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},close:{type:[Boolean,Object],required:!1,default:!0},closeIcon:{type:null,required:!1},dismissible:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1},open:{type:Boolean,required:!1},defaultOpen:{type:Boolean,required:!1},modal:{type:Boolean,required:!1,default:!0},unmountOnHide:{type:Boolean,required:!1}},emits:["leave","after:leave","enter","after:enter","close:prevent","update:open"],setup(D,{emit:P}){const O=D,f=P,s=T(),t=z("slideover",O),{t:C}=F(),w=I(),S=G(K(t,"open","defaultOpen","modal","unmountOnHide"),f),x=U(B(()=>t.portal)),V=B(()=>t.content),j=$(()=>t.dismissible?{pointerDownOutside:ee}:["interactOutside","escapeKeyDown"].reduce((n,y)=>(n[y]=p=>{p.preventDefault(),f("close:prevent")},n),{})),u=$(()=>te({extend:se,...w.ui?.slideover||{}})({transition:t.transition,side:t.side,inset:t.inset}));return(o,n)=>(a(),l(e(L),X(Z(e(S))),{default:r(({open:y,close:p})=>[s.default?(a(),l(e(H),{key:0,"as-child":"",class:c(e(t).class)},{default:r(()=>[d(o.$slots,"default",{open:y})]),_:2},1032,["class"])):i("",!0),h(e(E),k(e(x),{"force-mount":e(x).disabled&&e(t).unmountOnHide===!1||void 0}),{default:r(()=>[h(e(W),null,{default:r(()=>[e(t).overlay?(a(),l(e(N),{key:0,"data-slot":"overlay",class:c(u.value.overlay({class:e(t).ui?.overlay}))},null,8,["class"])):i("",!0),h(e(R),k({"data-side":e(t).side,"data-slot":"content",class:u.value.content({class:[!s.default&&e(t).class,e(t).ui?.content]})},V.value,{onEnter:n[0]||(n[0]=g=>f("enter")),onAfterEnter:n[1]||(n[1]=g=>f("after:enter")),onLeave:n[2]||(n[2]=g=>f("leave")),onAfterLeave:n[3]||(n[3]=g=>f("after:leave"))},Y(j.value)),{default:r(()=>[!e(t).title&&!s.title||!e(t).description&&!s.description||s.content?(a(),l(e(J),{key:0},{default:r(()=>[!e(t).title&&!s.title?(a(),l(e(_),{key:0})):s.content?(a(),l(e(_),{key:1},{default:r(()=>[d(o.$slots,"title",{},()=>[m(v(e(t).title),1)])]),_:3})):i("",!0),!e(t).description&&!s.description?(a(),l(e(b),{key:2})):s.content?(a(),l(e(b),{key:3},{default:r(()=>[d(o.$slots,"description",{},()=>[m(v(e(t).description),1)])]),_:3})):i("",!0)]),_:3})):i("",!0),d(o.$slots,"content",{close:p},()=>[s.header||e(t).title||s.title||e(t).description||s.description||e(t).close||s.close?(a(),q("div",{key:0,"data-slot":"header",class:c(u.value.header({class:e(t).ui?.header}))},[d(o.$slots,"header",{close:p},()=>[e(t).title||s.title||e(t).description||s.description?(a(),q("div",{key:0,"data-slot":"wrapper",class:c(u.value.wrapper({class:e(t).ui?.wrapper}))},[e(t).title||s.title?(a(),l(e(_),{key:0,"data-slot":"title",class:c(u.value.title({class:e(t).ui?.title}))},{default:r(()=>[d(o.$slots,"title",{},()=>[m(v(e(t).title),1)])]),_:3},8,["class"])):i("",!0),e(t).description||s.description?(a(),l(e(b),{key:1,"data-slot":"description",class:c(u.value.description({class:e(t).ui?.description}))},{default:r(()=>[d(o.$slots,"description",{},()=>[m(v(e(t).description),1)])]),_:3},8,["class"])):i("",!0)],2)):i("",!0),d(o.$slots,"actions"),e(t).close||s.close?(a(),l(e(A),{key:1,"as-child":""},{default:r(()=>[d(o.$slots,"close",{ui:u.value},()=>[e(t).close?(a(),l(M,k({key:0,icon:e(t).closeIcon||e(w).ui.icons.close,color:"neutral",variant:"ghost","aria-label":e(C)("slideover.close")},typeof e(t).close=="object"?e(t).close:{},{"data-slot":"close",class:u.value.close({class:e(t).ui?.close})}),null,16,["icon","aria-label","class"])):i("",!0)])]),_:2},1024)):i("",!0)])],2)):i("",!0),Q("div",{"data-slot":"body",class:c(u.value.body({class:e(t).ui?.body}))},[d(o.$slots,"body",{close:p})],2),s.footer?(a(),q("div",{key:1,"data-slot":"footer",class:c(u.value.footer({class:e(t).ui?.footer}))},[d(o.$slots,"footer",{close:p})],2)):i("",!0)])]),_:2},1040,["data-side","class"])]),_:2},1024)]),_:2},1040,["force-mount"])]),_:3},16))}};export{le as _};
1
+ import{D as H,a as E,b as N,c as R,d as _,e as b,f as A,g as L}from"./6Z_ZwH8I.js";import{a2 as T,a3 as z,a4 as F,a5 as I,a6 as G,a7 as K,bP as U,o as a,f as l,g as r,k as e,q as c,V as d,v as i,j as h,W as k,bS as W,c3 as Y,bY as J,m,t as v,c as q,_ as M,i as Q,a0 as X,a1 as Z,h as $,b9 as B,c7 as ee,a8 as te}from"./C5TrTuWv.js";const se={slots:{overlay:"fixed inset-0 bg-elevated/75",content:"fixed bg-default divide-y divide-default sm:ring ring-default sm:shadow-lg flex flex-col focus:outline-none",header:"flex items-center gap-1.5 p-4 sm:px-6 min-h-(--ui-header-height)",wrapper:"",body:"flex-1 overflow-y-auto p-4 sm:p-6",footer:"flex items-center gap-1.5 p-4 sm:px-6",title:"text-highlighted font-semibold",description:"mt-1 text-muted text-sm",close:"absolute top-4 end-4"},variants:{side:{top:{content:""},right:{content:"max-w-md"},bottom:{content:""},left:{content:"max-w-md"}},inset:{true:{content:"rounded-lg"}},transition:{true:{overlay:"data-[state=open]:animate-[fade-in_200ms_ease-out] data-[state=closed]:animate-[fade-out_200ms_ease-in]"}}},compoundVariants:[{side:"top",inset:!0,class:{content:"max-h-[calc(100%-2rem)] inset-x-4 top-4"}},{side:"top",inset:!1,class:{content:"max-h-full inset-x-0 top-0"}},{side:"right",inset:!0,class:{content:"w-[calc(100%-2rem)] inset-y-4 right-4"}},{side:"right",inset:!1,class:{content:"w-full inset-y-0 right-0"}},{side:"bottom",inset:!0,class:{content:"max-h-[calc(100%-2rem)] inset-x-4 bottom-4"}},{side:"bottom",inset:!1,class:{content:"max-h-full inset-x-0 bottom-0"}},{side:"left",inset:!0,class:{content:"w-[calc(100%-2rem)] inset-y-4 left-4"}},{side:"left",inset:!1,class:{content:"w-full inset-y-0 left-0"}},{transition:!0,side:"top",class:{content:"data-[state=open]:animate-[slide-in-from-top_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-top_200ms_ease-in-out]"}},{transition:!0,side:"right",class:{content:"data-[state=open]:animate-[slide-in-from-right_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-right_200ms_ease-in-out]"}},{transition:!0,side:"bottom",class:{content:"data-[state=open]:animate-[slide-in-from-bottom_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-bottom_200ms_ease-in-out]"}},{transition:!0,side:"left",class:{content:"data-[state=open]:animate-[slide-in-from-left_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-left_200ms_ease-in-out]"}}]},le={__name:"USlideover",props:{title:{type:String,required:!1},description:{type:String,required:!1},content:{type:Object,required:!1},overlay:{type:Boolean,required:!1,default:!0},transition:{type:Boolean,required:!1,default:!0},side:{type:null,required:!1,default:"right"},inset:{type:Boolean,required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},close:{type:[Boolean,Object],required:!1,default:!0},closeIcon:{type:null,required:!1},dismissible:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1},open:{type:Boolean,required:!1},defaultOpen:{type:Boolean,required:!1},modal:{type:Boolean,required:!1,default:!0},unmountOnHide:{type:Boolean,required:!1}},emits:["leave","after:leave","enter","after:enter","close:prevent","update:open"],setup(D,{emit:P}){const O=D,f=P,s=T(),t=z("slideover",O),{t:C}=F(),w=I(),S=G(K(t,"open","defaultOpen","modal","unmountOnHide"),f),x=U(B(()=>t.portal)),V=B(()=>t.content),j=$(()=>t.dismissible?{pointerDownOutside:ee}:["interactOutside","escapeKeyDown"].reduce((n,y)=>(n[y]=p=>{p.preventDefault(),f("close:prevent")},n),{})),u=$(()=>te({extend:se,...w.ui?.slideover||{}})({transition:t.transition,side:t.side,inset:t.inset}));return(o,n)=>(a(),l(e(L),X(Z(e(S))),{default:r(({open:y,close:p})=>[s.default?(a(),l(e(H),{key:0,"as-child":"",class:c(e(t).class)},{default:r(()=>[d(o.$slots,"default",{open:y})]),_:2},1032,["class"])):i("",!0),h(e(E),k(e(x),{"force-mount":e(x).disabled&&e(t).unmountOnHide===!1||void 0}),{default:r(()=>[h(e(W),null,{default:r(()=>[e(t).overlay?(a(),l(e(N),{key:0,"data-slot":"overlay",class:c(u.value.overlay({class:e(t).ui?.overlay}))},null,8,["class"])):i("",!0),h(e(R),k({"data-side":e(t).side,"data-slot":"content",class:u.value.content({class:[!s.default&&e(t).class,e(t).ui?.content]})},V.value,{onEnter:n[0]||(n[0]=g=>f("enter")),onAfterEnter:n[1]||(n[1]=g=>f("after:enter")),onLeave:n[2]||(n[2]=g=>f("leave")),onAfterLeave:n[3]||(n[3]=g=>f("after:leave"))},Y(j.value)),{default:r(()=>[!e(t).title&&!s.title||!e(t).description&&!s.description||s.content?(a(),l(e(J),{key:0},{default:r(()=>[!e(t).title&&!s.title?(a(),l(e(_),{key:0})):s.content?(a(),l(e(_),{key:1},{default:r(()=>[d(o.$slots,"title",{},()=>[m(v(e(t).title),1)])]),_:3})):i("",!0),!e(t).description&&!s.description?(a(),l(e(b),{key:2})):s.content?(a(),l(e(b),{key:3},{default:r(()=>[d(o.$slots,"description",{},()=>[m(v(e(t).description),1)])]),_:3})):i("",!0)]),_:3})):i("",!0),d(o.$slots,"content",{close:p},()=>[s.header||e(t).title||s.title||e(t).description||s.description||e(t).close||s.close?(a(),q("div",{key:0,"data-slot":"header",class:c(u.value.header({class:e(t).ui?.header}))},[d(o.$slots,"header",{close:p},()=>[e(t).title||s.title||e(t).description||s.description?(a(),q("div",{key:0,"data-slot":"wrapper",class:c(u.value.wrapper({class:e(t).ui?.wrapper}))},[e(t).title||s.title?(a(),l(e(_),{key:0,"data-slot":"title",class:c(u.value.title({class:e(t).ui?.title}))},{default:r(()=>[d(o.$slots,"title",{},()=>[m(v(e(t).title),1)])]),_:3},8,["class"])):i("",!0),e(t).description||s.description?(a(),l(e(b),{key:1,"data-slot":"description",class:c(u.value.description({class:e(t).ui?.description}))},{default:r(()=>[d(o.$slots,"description",{},()=>[m(v(e(t).description),1)])]),_:3},8,["class"])):i("",!0)],2)):i("",!0),d(o.$slots,"actions"),e(t).close||s.close?(a(),l(e(A),{key:1,"as-child":""},{default:r(()=>[d(o.$slots,"close",{ui:u.value},()=>[e(t).close?(a(),l(M,k({key:0,icon:e(t).closeIcon||e(w).ui.icons.close,color:"neutral",variant:"ghost","aria-label":e(C)("slideover.close")},typeof e(t).close=="object"?e(t).close:{},{"data-slot":"close",class:u.value.close({class:e(t).ui?.close})}),null,16,["icon","aria-label","class"])):i("",!0)])]),_:2},1024)):i("",!0)])],2)):i("",!0),Q("div",{"data-slot":"body",class:c(u.value.body({class:e(t).ui?.body}))},[d(o.$slots,"body",{close:p})],2),s.footer?(a(),q("div",{key:1,"data-slot":"footer",class:c(u.value.footer({class:e(t).ui?.footer}))},[d(o.$slots,"footer",{close:p})],2)):i("",!0)])]),_:2},1040,["data-side","class"])]),_:2},1024)]),_:2},1040,["force-mount"])]),_:3},16))}};export{le as _};
@@ -1 +1 @@
1
- import{d as S,o,f as i,g as f,V as x,W as h,k as a,X as k,h as c,a0 as C,a1 as B,a2 as w,a3 as P,a5 as O,a6 as V,a7 as $,b8 as N,c as y,j as z,i as _,q as d,t as R,p as j,aK as A,v as b,F as g,a8 as F}from"./CNu3kken.js";var T=S({__name:"BaseSeparator",props:{orientation:{type:String,required:!1,default:"horizontal"},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(n){const s=n,l=["horizontal","vertical"];function e(r){return l.includes(r)}const u=c(()=>e(s.orientation)?s.orientation:"horizontal"),v=c(()=>u.value==="vertical"?s.orientation:void 0),m=c(()=>s.decorative?{role:"none"}:{"aria-orientation":v.value,role:"separator"});return(r,p)=>(o(),i(a(k),h({as:r.as,"as-child":r.asChild,"data-orientation":u.value},m.value),{default:f(()=>[x(r.$slots,"default")]),_:3},16,["as","as-child","data-orientation"]))}}),D=T,E=S({__name:"Separator",props:{orientation:{type:String,required:!1,default:"horizontal"},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(n){const s=n;return(l,e)=>(o(),i(D,C(B(s)),{default:f(()=>[x(l.$slots,"default")]),_:3},16))}}),I=E;const K={slots:{root:"flex items-center align-center text-center",border:"",container:"font-medium text-default flex",icon:"shrink-0 size-5",avatar:"shrink-0",avatarSize:"2xs",label:"text-sm"},variants:{color:{primary:{border:"border-primary"},secondary:{border:"border-secondary"},success:{border:"border-success"},info:{border:"border-info"},warning:{border:"border-warning"},error:{border:"border-error"},neutral:{border:"border-default"}},orientation:{horizontal:{root:"w-full flex-row",border:"w-full",container:"whitespace-nowrap"},vertical:{root:"h-full flex-col",border:"h-full",container:""}},size:{xs:"",sm:"",md:"",lg:"",xl:""},position:{start:"",center:"",end:""},type:{solid:{border:"border-solid"},dashed:{border:"border-dashed"},dotted:{border:"border-dotted"}}},compoundVariants:[{orientation:"horizontal",position:"start",class:{container:"me-3"}},{orientation:"horizontal",position:"center",class:{container:"mx-3"}},{orientation:"horizontal",position:"end",class:{container:"ms-3"}},{orientation:"vertical",position:"start",class:{container:"mb-2"}},{orientation:"vertical",position:"center",class:{container:"my-2"}},{orientation:"vertical",position:"end",class:{container:"mt-2"}},{orientation:"horizontal",size:"xs",class:{border:"border-t"}},{orientation:"horizontal",size:"sm",class:{border:"border-t-[2px]"}},{orientation:"horizontal",size:"md",class:{border:"border-t-[3px]"}},{orientation:"horizontal",size:"lg",class:{border:"border-t-[4px]"}},{orientation:"horizontal",size:"xl",class:{border:"border-t-[5px]"}},{orientation:"vertical",size:"xs",class:{border:"border-s"}},{orientation:"vertical",size:"sm",class:{border:"border-s-[2px]"}},{orientation:"vertical",size:"md",class:{border:"border-s-[3px]"}},{orientation:"vertical",size:"lg",class:{border:"border-s-[4px]"}},{orientation:"vertical",size:"xl",class:{border:"border-s-[5px]"}}],defaultVariants:{color:"neutral",size:"xs",type:"solid"}},X=Object.assign({inheritAttrs:!1},{__name:"USeparator",props:{as:{type:null,required:!1},label:{type:String,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},color:{type:null,required:!1},size:{type:null,required:!1},type:{type:null,required:!1},orientation:{type:null,required:!1,default:"horizontal"},position:{type:null,required:!1,default:"center"},class:{type:null,required:!1},ui:{type:null,required:!1},decorative:{type:Boolean,required:!1}},setup(n){const s=n,l=w(),e=P("separator",s),u=O(),v=V($(e,"as","decorative","orientation")),[m,r]=N(),p=c(()=>!!(e.label||e.icon||e.avatar||l.default)),t=c(()=>F({extend:K,...u.ui?.separator||{}})({color:e.color,orientation:e.orientation,size:e.size,position:e.position,type:e.type}));return(q,U)=>(o(),y(g,null,[z(a(m),null,{default:f(()=>[_("div",{"data-slot":"container",class:d(t.value.container({class:a(e).ui?.container}))},[x(q.$slots,"default",{ui:t.value},()=>[a(e).label?(o(),y("span",{key:0,"data-slot":"label",class:d(t.value.label({class:a(e).ui?.label}))},R(a(e).label),3)):a(e).icon?(o(),i(j,{key:1,name:a(e).icon,"data-slot":"icon",class:d(t.value.icon({class:a(e).ui?.icon}))},null,8,["name","class"])):a(e).avatar?(o(),i(A,h({key:2,size:a(e).ui?.avatarSize||t.value.avatarSize()},a(e).avatar,{"data-slot":"avatar",class:t.value.avatar({class:a(e).ui?.avatar})}),null,16,["size","class"])):b("",!0)])],2)]),_:3}),z(a(I),h({"data-slot":"root"},{...a(v),...q.$attrs},{class:t.value.root({class:[a(e).ui?.root,a(e).class]})}),{default:f(()=>[p.value&&a(e).position==="start"?(o(),i(a(r),{key:0})):b("",!0),_("div",{"data-slot":"border",class:d(t.value.border({class:a(e).ui?.border}))},null,2),p.value&&a(e).position==="center"?(o(),y(g,{key:1},[z(a(r)),_("div",{"data-slot":"border",class:d(t.value.border({class:a(e).ui?.border}))},null,2)],64)):b("",!0),p.value&&a(e).position==="end"?(o(),i(a(r),{key:2})):b("",!0)]),_:1},16,["class"])],64))}});export{X as _};
1
+ import{d as S,o,f as i,g as f,V as x,W as h,k as a,X as k,h as c,a0 as C,a1 as B,a2 as w,a3 as P,a5 as O,a6 as V,a7 as $,b8 as N,c as y,j as z,i as _,q as d,t as R,p as j,aK as A,v as b,F as g,a8 as F}from"./C5TrTuWv.js";var T=S({__name:"BaseSeparator",props:{orientation:{type:String,required:!1,default:"horizontal"},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(n){const s=n,l=["horizontal","vertical"];function e(r){return l.includes(r)}const u=c(()=>e(s.orientation)?s.orientation:"horizontal"),v=c(()=>u.value==="vertical"?s.orientation:void 0),m=c(()=>s.decorative?{role:"none"}:{"aria-orientation":v.value,role:"separator"});return(r,p)=>(o(),i(a(k),h({as:r.as,"as-child":r.asChild,"data-orientation":u.value},m.value),{default:f(()=>[x(r.$slots,"default")]),_:3},16,["as","as-child","data-orientation"]))}}),D=T,E=S({__name:"Separator",props:{orientation:{type:String,required:!1,default:"horizontal"},decorative:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(n){const s=n;return(l,e)=>(o(),i(D,C(B(s)),{default:f(()=>[x(l.$slots,"default")]),_:3},16))}}),I=E;const K={slots:{root:"flex items-center align-center text-center",border:"",container:"font-medium text-default flex",icon:"shrink-0 size-5",avatar:"shrink-0",avatarSize:"2xs",label:"text-sm"},variants:{color:{primary:{border:"border-primary"},secondary:{border:"border-secondary"},success:{border:"border-success"},info:{border:"border-info"},warning:{border:"border-warning"},error:{border:"border-error"},neutral:{border:"border-default"}},orientation:{horizontal:{root:"w-full flex-row",border:"w-full",container:"whitespace-nowrap"},vertical:{root:"h-full flex-col",border:"h-full",container:""}},size:{xs:"",sm:"",md:"",lg:"",xl:""},position:{start:"",center:"",end:""},type:{solid:{border:"border-solid"},dashed:{border:"border-dashed"},dotted:{border:"border-dotted"}}},compoundVariants:[{orientation:"horizontal",position:"start",class:{container:"me-3"}},{orientation:"horizontal",position:"center",class:{container:"mx-3"}},{orientation:"horizontal",position:"end",class:{container:"ms-3"}},{orientation:"vertical",position:"start",class:{container:"mb-2"}},{orientation:"vertical",position:"center",class:{container:"my-2"}},{orientation:"vertical",position:"end",class:{container:"mt-2"}},{orientation:"horizontal",size:"xs",class:{border:"border-t"}},{orientation:"horizontal",size:"sm",class:{border:"border-t-[2px]"}},{orientation:"horizontal",size:"md",class:{border:"border-t-[3px]"}},{orientation:"horizontal",size:"lg",class:{border:"border-t-[4px]"}},{orientation:"horizontal",size:"xl",class:{border:"border-t-[5px]"}},{orientation:"vertical",size:"xs",class:{border:"border-s"}},{orientation:"vertical",size:"sm",class:{border:"border-s-[2px]"}},{orientation:"vertical",size:"md",class:{border:"border-s-[3px]"}},{orientation:"vertical",size:"lg",class:{border:"border-s-[4px]"}},{orientation:"vertical",size:"xl",class:{border:"border-s-[5px]"}}],defaultVariants:{color:"neutral",size:"xs",type:"solid"}},X=Object.assign({inheritAttrs:!1},{__name:"USeparator",props:{as:{type:null,required:!1},label:{type:String,required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},color:{type:null,required:!1},size:{type:null,required:!1},type:{type:null,required:!1},orientation:{type:null,required:!1,default:"horizontal"},position:{type:null,required:!1,default:"center"},class:{type:null,required:!1},ui:{type:null,required:!1},decorative:{type:Boolean,required:!1}},setup(n){const s=n,l=w(),e=P("separator",s),u=O(),v=V($(e,"as","decorative","orientation")),[m,r]=N(),p=c(()=>!!(e.label||e.icon||e.avatar||l.default)),t=c(()=>F({extend:K,...u.ui?.separator||{}})({color:e.color,orientation:e.orientation,size:e.size,position:e.position,type:e.type}));return(q,U)=>(o(),y(g,null,[z(a(m),null,{default:f(()=>[_("div",{"data-slot":"container",class:d(t.value.container({class:a(e).ui?.container}))},[x(q.$slots,"default",{ui:t.value},()=>[a(e).label?(o(),y("span",{key:0,"data-slot":"label",class:d(t.value.label({class:a(e).ui?.label}))},R(a(e).label),3)):a(e).icon?(o(),i(j,{key:1,name:a(e).icon,"data-slot":"icon",class:d(t.value.icon({class:a(e).ui?.icon}))},null,8,["name","class"])):a(e).avatar?(o(),i(A,h({key:2,size:a(e).ui?.avatarSize||t.value.avatarSize()},a(e).avatar,{"data-slot":"avatar",class:t.value.avatar({class:a(e).ui?.avatar})}),null,16,["size","class"])):b("",!0)])],2)]),_:3}),z(a(I),h({"data-slot":"root"},{...a(v),...q.$attrs},{class:t.value.root({class:[a(e).ui?.root,a(e).class]})}),{default:f(()=>[p.value&&a(e).position==="start"?(o(),i(a(r),{key:0})):b("",!0),_("div",{"data-slot":"border",class:d(t.value.border({class:a(e).ui?.border}))},null,2),p.value&&a(e).position==="center"?(o(),y(g,{key:1},[z(a(r)),_("div",{"data-slot":"border",class:d(t.value.border({class:a(e).ui?.border}))},null,2)],64)):b("",!0),p.value&&a(e).position==="end"?(o(),i(a(r),{key:2})):b("",!0)]),_:1},16,["class"])],64))}});export{X as _};
@@ -1,4 +1,4 @@
1
- import{a as W,_ as B}from"./QZYo3ErV.js";import{_ as D}from"./B0tmRAhY.js";import{d as $,b as M,w as V,ax as U,o as v,c as C,k as t,f as R,v as E,j as u,g as p,i as l,l as N,m as r,t as z,_ as S,r as T,h as H,F as I,y as K,E as L,M as X}from"./CNu3kken.js";import{_ as F}from"./Ce47NgZw.js";import{p as Z,g as q}from"./BfcMJBTf.js";import{u as P}from"./DprkT7rM.js";import{_ as G}from"./CF_eDZHu.js";import"./Ya8ZzWuY.js";import"./CfhOanaF.js";import"./BjaRappk.js";import"./a8Z6VC7V.js";import"./FJTsZ5Aa.js";import"./B_JSV0yG.js";import"./DZ-KbUZi.js";const J={class:"space-y-6"},Q={class:"space-y-4"},Y={class:"text-xs text-gray-400"},ee={class:"flex items-center gap-2 justify-end"},te=$({__name:"WastedTimeCard",async setup(j){let m,y;const d=M(),{data:s,refresh:g}=([m,y]=V(()=>P("/api/settings/wasted-waits","$4Z8lhzMc_W")),m=await m,y(),m),o=T(""),n=T(!1);U(()=>{s.value&&(o.value=s.value.patterns.join(`
1
+ import{a as W,_ as B}from"./BtbpLWDs.js";import{_ as D}from"./BfA6lfg4.js";import{d as $,b as M,w as V,ax as U,o as v,c as C,k as t,f as R,v as E,j as u,g as p,i as l,l as N,m as r,t as z,_ as S,r as T,h as H,F as I,y as K,E as L,M as X}from"./C5TrTuWv.js";import{_ as F}from"./DMAiMrNr.js";import{p as Z,g as q}from"./BmzxRbcg.js";import{u as P}from"./T5UuMUxA.js";import{_ as G}from"./DH5H1DJh.js";import"./BBhrClA9.js";import"./B69RP95P.js";import"./BjaRappk.js";import"./COuZu9FO.js";import"./DuOH5jcQ.js";import"./C8Paf_V1.js";import"./D_y2VS8k.js";const J={class:"space-y-6"},Q={class:"space-y-4"},Y={class:"text-xs text-gray-400"},ee={class:"flex items-center gap-2 justify-end"},te=$({__name:"WastedTimeCard",async setup(j){let m,y;const d=M(),{data:s,refresh:g}=([m,y]=V(()=>P("/api/settings/wasted-waits","$4Z8lhzMc_W")),m=await m,y(),m),o=T(""),n=T(!1);U(()=>{s.value&&(o.value=s.value.patterns.join(`
2
2
  `))});const _=H(()=>s.value?.envManaged??!1),b=Z(q("performance"));function x(a){return a.split(`
3
3
  `).map(e=>e.trim()).filter(e=>e.length>0)}async function i(){n.value=!0;try{const a=await $fetch("/api/settings/wasted-waits",{method:"PUT",body:{patterns:x(o.value)}});s.value=a,d.add({title:"Wasted-time patterns saved",color:"success"}),await g()}catch(a){const e=a&&typeof a=="object"&&"data"in a?a.data?.message:void 0;d.add({title:"Save failed",description:e||"An error occurred",color:"error"})}finally{n.value=!1}}async function f(){n.value=!0;try{const a=await $fetch("/api/settings/wasted-waits",{method:"PUT",body:{patterns:null}});s.value=a,o.value=a.patterns.join(`
4
4
  `),d.add({title:"Reset to defaults",color:"success"}),await g()}catch{d.add({title:"Reset failed",color:"error"})}finally{n.value=!1}}return(a,e)=>{const h=B,k=D,c=W,w=S,A=F;return v(),C("div",J,[t(_)?(v(),R(h,{key:0,"env-vars":t(b)},null,8,["env-vars"])):E("",!0),u(A,{icon:"i-lucide-hourglass",title:"Wasted-time patterns",help:"settings.wasted-time"},{subtitle:p(()=>[...e[1]||(e[1]=[r(" Define which wait steps count as ",-1),l("strong",null,"wasted time",-1),r(". A wait is wasted when any pattern below matches its step title or its source location. Patterns are case-insensitive and support ",-1),l("code",null,"*",-1),r(" and ",-1),l("code",null,"?",-1),r(" wildcards. Wasted time is recomputed when runs are viewed, so changes apply to existing runs immediately. ",-1)])]),footer:p(()=>[l("div",ee,[u(w,{variant:"ghost",color:"neutral",disabled:t(n)||t(_),label:"Reset to defaults",onClick:f},null,8,["disabled"]),u(w,{color:"primary",loading:t(n),disabled:t(_),icon:"i-lucide-save",onClick:i},{default:p(()=>[...e[8]||(e[8]=[r(" Save ",-1)])]),_:1},8,["loading","disabled"])])]),default:p(()=>[l("div",Q,[u(c,{label:"Patterns",help:"settings.wasted-time","env-managed":t(_),description:"One glob pattern per line. An empty list means no wait is counted as wasted."},{default:p(()=>[u(k,{modelValue:t(o),"onUpdate:modelValue":e[0]||(e[0]=O=>N(o)?o.value=O:null),rows:6,disabled:t(_),class:"w-full font-mono",placeholder:`Wait for timeout*
@@ -1 +1 @@
1
- import{_ as k}from"./Ya8ZzWuY.js";import{d as _,f as r,g as l,k as b,o as n,c as a,t as u,m as h,F as g,y as V,h as f,i as y,v,ac as x,V as p}from"./CNu3kken.js";import{_ as B}from"./CfhOanaF.js";import{_ as $}from"./a8Z6VC7V.js";import{_ as E}from"./CF_eDZHu.js";import{h as M}from"./BjaRappk.js";const F={key:0},S={key:1},q={class:"font-mono text-xs"},A={key:0},C={key:2},N=_({__name:"EnvManagedAlert",props:{envVars:{},title:{},description:{}},setup(e){const t=e,c=f(()=>t.title??"Managed by environment variables");return(o,s)=>{const d=k;return n(),r(d,{icon:"i-lucide-lock",color:"neutral",variant:"subtle",title:b(c)},{description:l(()=>[e.description?(n(),a("span",F,u(e.description),1)):e.envVars?.length?(n(),a("span",S,[s[0]||(s[0]=h(" These settings are pinned by ",-1)),(n(!0),a(g,null,V(e.envVars,(i,m)=>(n(),a(g,{key:i},[y("code",q,u(i),1),m<e.envVars.length-1?(n(),a("span",A,", ")):v("",!0)],64))),128)),s[1]||(s[1]=h(" and cannot be changed here. Edit the environment and restart to change them. ",-1))])):(n(),a("span",C," These settings are pinned by environment variables and cannot be changed here. "))]),_:1},8,["title"])}}}),z=Object.assign(N,{__name:"EnvManagedAlert"}),T={class:"inline-flex items-center gap-1"},j=_({__name:"SettingsField",props:{label:{},help:{},envVars:{},envManaged:{type:Boolean},description:{},hint:{},required:{type:Boolean},name:{},disabled:{type:Boolean}},setup(e){const t=e,c=f(()=>{if(t.envVars)return t.envVars;if(t.help)return M(t.help)});return(o,s)=>{const d=B,i=$,m=E;return n(),r(m,{label:e.label,description:e.description,hint:e.hint,required:e.required,name:e.name,disabled:e.disabled||e.envManaged},x({label:l(()=>[y("span",T,[h(u(e.label)+" ",1),e.help?(n(),r(d,{key:0,topic:e.help},null,8,["topic"])):v("",!0),e.envManaged?(n(),r(i,{key:1,"env-vars":b(c)},null,8,["env-vars"])):v("",!0)])]),default:l(()=>[p(o.$slots,"default")]),_:2},[o.$slots.trailing?{name:"trailing",fn:l(()=>[p(o.$slots,"trailing")]),key:"0"}:void 0]),1032,["label","description","hint","required","name","disabled"])}}}),G=Object.assign(j,{__name:"SettingsField"});export{z as _,G as a};
1
+ import{_ as k}from"./BBhrClA9.js";import{d as _,f as r,g as l,k as b,o as n,c as a,t as u,m as h,F as g,y as V,h as f,i as y,v,ac as x,V as p}from"./C5TrTuWv.js";import{_ as B}from"./B69RP95P.js";import{_ as $}from"./COuZu9FO.js";import{_ as E}from"./DH5H1DJh.js";import{h as M}from"./BjaRappk.js";const F={key:0},S={key:1},q={class:"font-mono text-xs"},A={key:0},C={key:2},N=_({__name:"EnvManagedAlert",props:{envVars:{},title:{},description:{}},setup(e){const t=e,c=f(()=>t.title??"Managed by environment variables");return(o,s)=>{const d=k;return n(),r(d,{icon:"i-lucide-lock",color:"neutral",variant:"subtle",title:b(c)},{description:l(()=>[e.description?(n(),a("span",F,u(e.description),1)):e.envVars?.length?(n(),a("span",S,[s[0]||(s[0]=h(" These settings are pinned by ",-1)),(n(!0),a(g,null,V(e.envVars,(i,m)=>(n(),a(g,{key:i},[y("code",q,u(i),1),m<e.envVars.length-1?(n(),a("span",A,", ")):v("",!0)],64))),128)),s[1]||(s[1]=h(" and cannot be changed here. Edit the environment and restart to change them. ",-1))])):(n(),a("span",C," These settings are pinned by environment variables and cannot be changed here. "))]),_:1},8,["title"])}}}),z=Object.assign(N,{__name:"EnvManagedAlert"}),T={class:"inline-flex items-center gap-1"},j=_({__name:"SettingsField",props:{label:{},help:{},envVars:{},envManaged:{type:Boolean},description:{},hint:{},required:{type:Boolean},name:{},disabled:{type:Boolean}},setup(e){const t=e,c=f(()=>{if(t.envVars)return t.envVars;if(t.help)return M(t.help)});return(o,s)=>{const d=B,i=$,m=E;return n(),r(m,{label:e.label,description:e.description,hint:e.hint,required:e.required,name:e.name,disabled:e.disabled||e.envManaged},x({label:l(()=>[y("span",T,[h(u(e.label)+" ",1),e.help?(n(),r(d,{key:0,topic:e.help},null,8,["topic"])):v("",!0),e.envManaged?(n(),r(i,{key:1,"env-vars":b(c)},null,8,["env-vars"])):v("",!0)])]),default:l(()=>[p(o.$slots,"default")]),_:2},[o.$slots.trailing?{name:"trailing",fn:l(()=>[p(o.$slots,"trailing")]),key:"0"}:void 0]),1032,["label","description","hint","required","name","disabled"])}}}),G=Object.assign(j,{__name:"SettingsField"});export{z as _,G as a};
@@ -1 +1 @@
1
- import{d as l,o,f as c,g as i,j as m,p as u,k as t,i as d,t as _,v as g,h as k,s as f}from"./CNu3kken.js";import{g as p}from"./D7W_4Sqc.js";const y={class:"truncate"},B=l({__name:"MarkerBadge",props:{marker:{},size:{default:"sm"},categoryOnly:{type:Boolean,default:!1}},setup(e){const n=e,a=k(()=>p(n.marker.category));return(h,z)=>{const s=u,r=f;return o(),c(r,{color:t(a).color,size:e.size,variant:"subtle",class:"gap-1 items-center max-w-full"},{default:i(()=>[m(s,{name:t(a).icon,class:"size-3 shrink-0"},null,8,["name"]),d("span",y,_(e.categoryOnly?t(a).label:e.marker.label),1),e.marker.source==="auto"?(o(),c(s,{key:0,name:"i-lucide-sparkles",class:"size-3 shrink-0 opacity-70",title:"Automatically detected"})):g("",!0)]),_:1},8,["color","size"])}}}),C=Object.assign(B,{__name:"MarkerBadge"});export{C as _};
1
+ import{d as l,o,f as c,g as i,j as m,p as u,k as t,i as d,t as _,v as g,h as k,s as f}from"./C5TrTuWv.js";import{g as p}from"./D7W_4Sqc.js";const y={class:"truncate"},B=l({__name:"MarkerBadge",props:{marker:{},size:{default:"sm"},categoryOnly:{type:Boolean,default:!1}},setup(e){const n=e,a=k(()=>p(n.marker.category));return(h,z)=>{const s=u,r=f;return o(),c(r,{color:t(a).color,size:e.size,variant:"subtle",class:"gap-1 items-center max-w-full"},{default:i(()=>[m(s,{name:t(a).icon,class:"size-3 shrink-0"},null,8,["name"]),d("span",y,_(e.categoryOnly?t(a).label:e.marker.label),1),e.marker.source==="auto"?(o(),c(s,{key:0,name:"i-lucide-sparkles",class:"size-3 shrink-0 opacity-70",title:"Automatically detected"})):g("",!0)]),_:1},8,["color","size"])}}}),C=Object.assign(B,{__name:"MarkerBadge"});export{C as _};
@@ -1 +1 @@
1
- import{_ as be,a as Re}from"./DTrPCv7R.js";import{d as ee,o as a,c as u,f as p,g as i,i as n,j as o,p as te,q as j,t as c,l as Q,k as t,v as g,m as k,h as _,_ as ne,G as le,F as E,y as M,r as re,e as Te,ac as $e}from"./CNu3kken.js";import{_ as we}from"./BM5BPKlc.js";import{_ as Fe}from"./BtZNYmZO.js";import{_ as je,a as Se}from"./2yLW7WU0.js";import{_ as Ce}from"./B_MVJP17.js";import{_ as Ve}from"./DgEa6_av.js";import{_ as Ne}from"./Ya8ZzWuY.js";import{_ as ze}from"./Ce89VyHE.js";import{_ as Pe}from"./C6t4kxaa.js";import{_ as oe}from"./6vX5JdHr.js";import{_ as ie}from"./CdEzDaDI.js";import{_ as Ue}from"./D3SJGdl4.js";import{_ as Ee}from"./oSLbl-p0.js";import{_ as ue}from"./Ce47NgZw.js";import{f as Z,F as L,e as Oe}from"./DeewM3Wg.js";import{_ as De}from"./CTTmX4gy.js";import{_ as Ie}from"./B_JSV0yG.js";import{u as se}from"./DprkT7rM.js";import{u as Ae}from"./Bsc11YIJ.js";import{u as Be}from"./BZFiz2UB.js";import"./BVyjw9Bi.js";import"./B3AG2m76.js";import"./CmTzxoQt.js";import"./BuGAn4f7.js";import"./BZOykMLD.js";import"./Bq4_kqIp.js";import"./DZ-KbUZi.js";import"./CfhOanaF.js";import"./BjaRappk.js";import"./DJzFYrBt.js";import"./DFfqRQxk.js";const Le={class:"flex items-center gap-3 flex-wrap"},Me={class:"flex items-center gap-1.5"},He={key:0,class:"text-gray-500"},Ge={key:1},Ke={key:2},We={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"},Je=ee({__name:"HomeFilters",props:{modelValue:{},availableEnvironments:{}},emits:["update:modelValue"],setup(O,{emit:b}){const T=O,R=b,N=_({get:()=>T.modelValue.environments,set:S=>R("update:modelValue",{...T.modelValue,environments:S})}),$=_({get:()=>T.modelValue.fullRunsOnly,set:S=>R("update:modelValue",{...T.modelValue,fullRunsOnly:S})}),D=_(()=>T.modelValue.environments.length>0||!T.modelValue.fullRunsOnly);function z(){R("update:modelValue",{environments:[],fullRunsOnly:!0})}return(S,v)=>{const H=te,r=we,f=Fe,x=ne;return a(),u("div",Le,[O.availableEnvironments.length>0?(a(),p(r,{key:0,modelValue:t(N),"onUpdate:modelValue":v[0]||(v[0]=m=>Q(N)?N.value=m:null),items:O.availableEnvironments,multiple:"",placeholder:"All environments",size:"sm",class:"min-w-[160px]"},{default:i(({modelValue:m})=>[n("div",Me,[o(H,{name:"i-lucide-server",class:j(["size-3.5 shrink-0",m.length?"text-primary":"text-gray-400"])},null,8,["class"]),m.length?m.length===1?(a(),u("span",Ge,c(m[0]),1)):(a(),u("span",Ke,c(m.length)+" environments",1)):(a(),u("span",He,"All environments"))])]),_:1},8,["modelValue","items"])):g("",!0),n("label",We,[o(f,{modelValue:t($),"onUpdate:modelValue":v[1]||(v[1]=m=>Q($)?$.value=m:null),size:"sm"},null,8,["modelValue"]),v[2]||(v[2]=k(" Full runs only ",-1))]),t(D)?(a(),p(x,{key:1,variant:"ghost",size:"sm",color:"neutral",icon:"i-lucide-x",onClick:z},{default:i(()=>[...v[3]||(v[3]=[k(" Reset ",-1)])]),_:1})):g("",!0)])}}}),Ye=Object.assign(Je,{__name:"HomeFilters"}),qe={class:"hidden md:block overflow-x-auto -mx-4 px-4 sm:mx-0 sm:px-0"},Xe={key:0,class:"flex flex-wrap gap-1 mt-0.5"},Qe={class:"w-40"},Ze={key:1,class:"text-gray-400 text-sm"},et={class:"text-xs text-gray-500 dark:text-gray-400"},tt={key:1,class:"text-gray-400 text-sm"},nt={key:0,class:"tabular-nums text-sm text-gray-600 dark:text-gray-400"},st={key:1,class:"text-gray-400"},at={class:"space-y-2 md:hidden"},lt={class:"flex items-start justify-between gap-2"},rt={key:0,class:"flex flex-wrap gap-1"},ot={class:"flex items-center justify-between gap-2 text-xs"},it={class:"text-gray-500 dark:text-gray-400 truncate"},ut={key:1,class:"text-gray-400"},ct={key:2,class:"shrink-0 tabular-nums text-gray-500 dark:text-gray-400"},dt=ee({__name:"ProjectTrendTable",props:{projects:{},limit:{default:10}},setup(O){const b=O,T={failing:0,flaky:1,passing:2,unknown:3},R=re(!1),N=_(()=>b.projects.length>b.limit),$=_(()=>{const r=[...b.projects].sort((f,x)=>{const m=T[f.tendency]-T[x.tendency];if(m!==0)return m;const C=f.latestFullRun?new Date(f.latestFullRun.startTime).getTime():0;return(x.latestFullRun?new Date(x.latestFullRun.startTime).getTime():0)-C});return R.value?r:r.slice(0,b.limit)});function D(r){return 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 z(r){switch(r){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 S(r){return r==="unknown"?"Unknown":r.charAt(0).toUpperCase()+r.slice(1)}function v(r){switch(r){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 H=[{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(r,f)=>{const x=ne,m=le,C=ze,h=Pe,I=te,V=oe,A=ie,Y=Ue,q=Ee,G=ue;return a(),p(G,{icon:"i-lucide-layout-dashboard",title:"Project health",help:"home.project-health"},{actions:i(()=>[t(N)&&!t(R)?(a(),p(x,{key:0,variant:"ghost",size:"sm","trailing-icon":"i-lucide-chevron-down",onClick:f[0]||(f[0]=e=>R.value=!0)},{default:i(()=>[k(" Show all "+c(b.projects.length),1)]),_:1})):t(R)?(a(),p(x,{key:1,variant:"ghost",size:"sm","trailing-icon":"i-lucide-chevron-up",onClick:f[1]||(f[1]=e=>R.value=!1)},{default:i(()=>[...f[2]||(f[2]=[k(" Show less ",-1)])]),_:1})):g("",!0),o(x,{to:"/projects",variant:"outline",size:"sm"},{default:i(()=>[...f[3]||(f[3]=[k("View all",-1)])]),_:1})]),default:i(()=>[n("div",qe,[o(Y,{data:t($),columns:H,ui:{base:"min-w-[700px]",td:"py-3",th:"py-3 text-xs uppercase tracking-wide"}},{"name-cell":i(({row:e})=>[o(m,{to:`/projects/${e.original.id}`,class:"font-medium text-primary hover:underline truncate block max-w-[200px]"},{default:i(()=>[k(c(e.original.label||e.original.name),1)]),_:2},1032,["to"]),e.original.tags.length>0?(a(),u("div",Xe,[(a(!0),u(E,null,M(e.original.tags,w=>(a(),p(C,{key:w.id,text:w.text,color:w.color},null,8,["text","color"]))),128))])):g("",!0)]),"recentRuns-cell":i(({row:e})=>[n("div",Qe,[o(h,{runs:e.original.recentRuns,height:28},null,8,["runs"])])]),"tendency-cell":i(({row:e})=>[n("span",{class:j(["inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-xs font-medium border whitespace-nowrap",z(e.original.tendency)])},[o(I,{name:v(e.original.tendency),class:"size-3 shrink-0"},null,8,["name"]),k(" "+c(S(e.original.tendency)),1)],2)]),"passRate-cell":i(({row:e})=>[e.original.latestFullRun?(a(),u("span",{key:0,class:j(["font-semibold tabular-nums text-sm",D(("passRate"in r?r.passRate:t(L))(e.original.latestFullRun))])},c(("passRate"in r?r.passRate:t(L))(e.original.latestFullRun))+"% ",3)):(a(),u("span",Ze,"—"))]),"latestRun-cell":i(({row:e})=>[e.original.latestFullRun?(a(),p(m,{key:0,to:`/test-runs/${e.original.latestFullRun.id}`,class:"flex items-center gap-2 min-w-[140px] hover:opacity-80 transition-opacity"},{default:i(()=>[o(V,{status:e.original.latestFullRun.status},null,8,["status"]),n("div",et,[n("div",null,c(("formatRelativeTime"in r?r.formatRelativeTime:t(Z))(e.original.latestFullRun.startTime)),1),e.original.latestFullRun.duration?(a(),p(A,{key:0,ms:e.original.latestFullRun.duration},null,8,["ms"])):g("",!0)])]),_:2},1032,["to"])):(a(),u("span",tt,"No full runs"))]),"tests-cell":i(({row:e})=>[e.original.latestFullRun?(a(),u("span",nt,c(e.original.latestFullRun.passedTests)+"/"+c(e.original.latestFullRun.totalTests),1)):(a(),u("span",st,"—"))]),_:1},8,["data"])]),n("div",at,[(a(!0),u(E,null,M(t($),e=>(a(),u("div",{key:e.id,class:"rounded-lg border border-default p-3 space-y-2"},[n("div",lt,[o(m,{to:`/projects/${e.id}`,class:"font-medium text-primary hover:underline truncate"},{default:i(()=>[k(c(e.label||e.name),1)]),_:2},1032,["to"]),n("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",z(e.tendency)])},[o(I,{name:v(e.tendency),class:"size-3 shrink-0"},null,8,["name"]),k(" "+c(S(e.tendency)),1)],2)]),e.tags.length>0?(a(),u("div",rt,[(a(!0),u(E,null,M(e.tags,w=>(a(),p(C,{key:w.id,text:w.text,color:w.color},null,8,["text","color"]))),128))])):g("",!0),o(h,{runs:e.recentRuns,height:24},null,8,["runs"]),n("div",ot,[e.latestFullRun?(a(),p(m,{key:0,to:`/test-runs/${e.latestFullRun.id}`,class:"flex items-center gap-1.5 min-w-0 hover:opacity-80"},{default:i(()=>[o(V,{status:e.latestFullRun.status},null,8,["status"]),n("span",it,c(("formatRelativeTime"in r?r.formatRelativeTime:t(Z))(e.latestFullRun.startTime)),1)]),_:2},1032,["to"])):(a(),u("span",ut,"No full runs")),e.latestFullRun?(a(),u("span",ct,[n("span",{class:j(["font-semibold",D(("passRate"in r?r.passRate:t(L))(e.latestFullRun))])},c(("passRate"in r?r.passRate:t(L))(e.latestFullRun))+"% ",3),k(" · "+c(e.latestFullRun.passedTests)+"/"+c(e.latestFullRun.totalTests),1)])):g("",!0)])]))),128))]),t($).length===0?(a(),p(q,{key:0,text:"No projects yet",padded:!1,class:"py-8"})):g("",!0)]),_:1})}}}),mt=Object.assign(dt,{__name:"ProjectTrendTable"}),pt={key:0,class:"p-6"},gt={key:1,class:"p-6 space-y-8","aria-busy":"true"},_t={class:"grid grid-cols-1 xl:grid-cols-3 gap-6 items-start"},ft={class:"xl:col-span-2 space-y-3"},yt={class:"space-y-3"},vt={key:2,class:"p-6 space-y-8"},ht={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"},xt={class:"flex items-center gap-1.5"},kt={class:"font-semibold tabular-nums"},bt={class:"flex items-center gap-1.5"},Rt={class:"flex items-center gap-1.5"},Tt={key:0,class:"flex items-center gap-1.5"},$t={class:"font-semibold tabular-nums"},wt={class:"flex items-center gap-1.5"},Ft={class:"font-semibold tabular-nums"},jt={key:2,class:"grid grid-cols-1 xl:grid-cols-3 gap-6 items-start"},St={class:"xl:col-span-2"},Ct={class:"divide-y divide-gray-100 dark:divide-gray-800 text-sm"},Vt={class:"flex-1 min-w-0"},Nt={class:"font-medium truncate"},zt={class:"text-xs text-gray-400"},Pt={class:"text-right tabular-nums shrink-0"},Ut={key:3,class:"text-center py-12 text-gray-500 dark:text-gray-400"},Et={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4"},Ot={class:"flex flex-col gap-3 h-full"},Dt={class:"p-2 bg-primary/10 rounded-lg w-fit"},It={class:"text-xs font-semibold uppercase tracking-wide text-primary mb-1"},At={class:"font-semibold mb-1"},Bt={class:"text-sm text-gray-600 dark:text-gray-400"},ae=6,kn=ee({__name:"index",setup(O){Te({title:"Piwi Dashboard"});const{data:b,error:T,refresh:R,status:N}=se("/api/projects/overview",{lazy:!0,default:()=>[]},"$LKtEy4Bi96"),{data:$,error:D,refresh:z}=se("/api/test-runs/recent",{lazy:!0},"$tXxkP3waVF");Ae(()=>Promise.all([R(),z()]));const S=_(()=>N.value==="pending"&&!b.value?.length),v=_(()=>T.value||D.value);function H(){R(),z()}const r=Be("piwi-home-filters",{default:()=>({environments:[],fullRunsOnly:!0}),encode:l=>JSON.stringify(l),decode:l=>{try{return l?JSON.parse(l):{environments:[],fullRunsOnly:!0}}catch{return{environments:[],fullRunsOnly:!0}}}}),f=_(()=>{const l=new Set;for(const s of $.value??[])s.environment&&l.add(s.environment);for(const s of b.value??[])for(const y of s.recentRuns)y.environment&&l.add(y.environment);return[...l].sort()});function x(l){return r.value.environments.length===0?!0:!!l&&r.value.environments.includes(l)}const m=_(()=>{let l=$.value??[];return r.value.fullRunsOnly&&(l=l.filter(s=>s.isFullRun)),r.value.environments.length>0&&(l=l.filter(s=>x(s.environment))),l}),C=_(()=>{let l=b.value??[];return r.value.environments.length>0&&(l=l.map(s=>({...s,recentRuns:s.recentRuns.filter(y=>x(y.environment))})).filter(s=>s.recentRuns.length>0)),l}),h=_(()=>{const l=C.value,s=l.length,y=l.filter(F=>F.tendency==="failing").length,B=l.filter(F=>F.tendency==="flaky").length;let P=0,K=0;for(const F of l)F.latestFullRun&&(P+=F.latestFullRun.passedTests,K+=F.latestFullRun.totalTests);const W=K>0?Math.round(P/K*100):null,X=Date.now()-1440*60*1e3,U=m.value.filter(F=>new Date(F.startTime).getTime()>X).length;return{totalProjects:s,failingNow:y,flakyNow:B,avgPassRate:W,runs24h:U}}),I=new Set(["running","initialising","finalizing"]),V=re(!1),A=_(()=>[...m.value].sort((s,y)=>{const B=I.has(s.status)?0:1,P=I.has(y.status)?0:1;return B!==P?B-P:new Date(y.startTime).getTime()-new Date(s.startTime).getTime()})),Y=_(()=>V.value?A.value:A.value.slice(0,ae)),q=_(()=>A.value.length>ae),G=_(()=>m.value.length>0),e=_(()=>(b.value?.length??0)>0),w=_(()=>r.value.fullRunsOnly?($.value??[]).filter(y=>x(y.environment)).filter(y=>!y.isFullRun).length:0);function ce(){r.value={...r.value,fullRunsOnly:!1}}function de(l){const s=L(l);return s>=90?"text-green-600 dark:text-green-400":s>=50?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"}function me(l){return I.has(l)?"border-l-blue-400":l==="passed"?"border-l-green-500":l==="failed"||l==="timedout"||l==="interrupted"?"border-l-red-500":"border-l-gray-300 dark:border-l-gray-600"}const pe=[{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(l,s)=>{const y=be,B=Re,P=Ye,K=Se,W=ne,X=Ce,U=Ve,F=Ne,J=te,ge=mt,_e=oe,fe=ie,ye=le,ve=ue,he=De,xe=Ie,ke=je;return a(),p(ke,{id:"home"},{header:i(()=>[o(K,null,$e({leading:i(()=>[o(y),o(B,{items:[{label:"Home",icon:"i-lucide-house",to:"/"}]})]),_:2},[t(e)?{name:"trailing",fn:i(()=>[o(P,{modelValue:t(r),"onUpdate:modelValue":s[0]||(s[0]=d=>Q(r)?r.value=d:null),"available-environments":t(f)},null,8,["modelValue","available-environments"])]),key:"0"}:void 0]),1024)]),body:i(()=>[t(v)?(a(),u("div",pt,[o(X,{text:`Couldn't load the dashboard: ${t(Oe)(t(v))}`},{action:i(()=>[o(W,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:H},{default:i(()=>[...s[3]||(s[3]=[k(" Retry ",-1)])]),_:1})]),_:1},8,["text"])])):t(S)?(a(),u("div",gt,[s[4]||(s[4]=n("span",{class:"sr-only",role:"status"},"Loading dashboard…",-1)),o(U,{class:"h-14 w-full rounded-xl"}),n("div",_t,[n("div",ft,[o(U,{class:"h-7 w-40"}),o(U,{class:"h-72 w-full rounded-lg"})]),n("div",yt,[o(U,{class:"h-7 w-32"}),(a(),u(E,null,M(5,d=>o(U,{key:d,class:"h-12 w-full rounded-lg"})),64))])])])):(a(),u("div",vt,[t(w)>0?(a(),p(F,{key:0,icon:"i-lucide-info",color:"primary",variant:"subtle",title:t(w)===1?"1 partial run is hidden":`${t(w)} 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"])):g("",!0),t(e)?(a(),u("div",ht,[n("div",xt,[o(J,{name:"i-lucide-folder",class:"size-4 text-primary shrink-0"}),n("span",kt,c(t(h).totalProjects),1),s[5]||(s[5]=n("span",{class:"text-gray-500"},"projects",-1))]),n("div",bt,[n("div",{class:j(["w-2 h-2 rounded-full shrink-0",t(h).failingNow>0?"bg-red-500":"bg-green-500"])},null,2),n("span",{class:j(["font-semibold tabular-nums",t(h).failingNow>0?"text-red-600 dark:text-red-400":""])},c(t(h).failingNow),3),s[6]||(s[6]=n("span",{class:"text-gray-500"},"failing now",-1))]),n("div",Rt,[n("div",{class:j(["w-2 h-2 rounded-full shrink-0",t(h).flakyNow>0?"bg-amber-400":"bg-gray-300 dark:bg-gray-600"])},null,2),n("span",{class:j(["font-semibold tabular-nums",t(h).flakyNow>0?"text-amber-600 dark:text-amber-400":""])},c(t(h).flakyNow),3),s[7]||(s[7]=n("span",{class:"text-gray-500"},"flaky",-1))]),t(h).avgPassRate!==null?(a(),u("div",Tt,[o(J,{name:"i-lucide-check-circle",class:"size-4 text-green-500 shrink-0"}),n("span",$t,c(t(h).avgPassRate)+"%",1),s[8]||(s[8]=n("span",{class:"text-gray-500"},"avg pass rate",-1))])):g("",!0),n("div",wt,[o(J,{name:"i-lucide-play-circle",class:"size-4 text-primary shrink-0"}),n("span",Ft,c(t(h).runs24h),1),s[9]||(s[9]=n("span",{class:"text-gray-500"},"runs today",-1))])])):g("",!0),t(e)||t(G)?(a(),u("div",jt,[n("div",St,[t(e)?(a(),p(ge,{key:0,projects:t(C)},null,8,["projects"])):g("",!0)]),t(G)?(a(),p(ve,{key:0,icon:"i-lucide-activity",title:"Recent activity"},{actions:i(()=>[t(q)&&!t(V)?(a(),p(W,{key:0,variant:"ghost",size:"sm","trailing-icon":"i-lucide-chevron-down",onClick:s[1]||(s[1]=d=>V.value=!0)},{default:i(()=>[k(" Show all "+c(t(A).length),1)]),_:1})):t(V)?(a(),p(W,{key:1,variant:"ghost",size:"sm","trailing-icon":"i-lucide-chevron-up",onClick:s[2]||(s[2]=d=>V.value=!1)},{default:i(()=>[...s[10]||(s[10]=[k(" Show less ",-1)])]),_:1})):g("",!0)]),default:i(()=>[n("div",Ct,[(a(!0),u(E,null,M(t(Y),d=>(a(),p(ye,{key:d.id,to:`/test-runs/${d.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",me(d.status)])},{default:i(()=>[o(_e,{status:d.status},null,8,["status"]),n("div",Vt,[n("div",Nt,c(d.projectLabel||d.projectName),1),n("div",zt,"Run #"+c(d.id)+" · "+c(("formatRelativeTime"in l?l.formatRelativeTime:t(Z))(d.startTime)),1)]),n("div",Pt,[n("div",{class:j(de(d))},c(("passRate"in l?l.passRate:t(L))(d))+"%",3),d.duration?(a(),p(fe,{key:0,ms:d.duration,class:"block text-xs text-gray-400"},null,8,["ms"])):g("",!0)])]),_:2},1032,["to","class"]))),128))])]),_:1})):g("",!0)])):g("",!0),t(e)&&!t(G)&&t(C).length===0?(a(),u("div",Ut,[o(J,{name:"i-lucide-filter-x",class:"size-8 mx-auto mb-2 opacity-40"}),s[11]||(s[11]=n("p",null,"No runs match the current filters.",-1))])):g("",!0),t(e)?g("",!0):(a(),u(E,{key:4},[o(he),n("div",Et,[(a(),u(E,null,M(pe,d=>o(xe,{key:d.title,class:"flex flex-col"},{default:i(()=>[n("div",Ot,[n("div",Dt,[o(J,{name:d.icon,class:"size-5 text-primary"},null,8,["name"])]),n("div",null,[n("p",It,c(d.tagline),1),n("h3",At,c(d.title),1),n("p",Bt,c(d.description),1)])])]),_:2},1024)),64))])],64))]))]),_:1})}}});export{kn as default};
1
+ import{_ as be,a as Re}from"./Cu2Q4iPh.js";import{d as ee,o as a,c as u,f as p,g as i,i as n,j as o,p as te,q as j,t as c,l as Q,k as t,v as g,m as k,h as _,_ as ne,G as le,F as E,y as M,r as re,e as Te,ac as $e}from"./C5TrTuWv.js";import{_ as we}from"./DvEsAuE9.js";import{_ as Fe}from"./Cf4MFOuf.js";import{_ as je,a as Se}from"./opyDpgSw.js";import{_ as Ce}from"./DcR0Mmdl.js";import{_ as Ve}from"./BUnwEAjq.js";import{_ as Ne}from"./BBhrClA9.js";import{_ as ze}from"./CjBktNrC.js";import{_ as Pe}from"./xa5UHCot.js";import{_ as oe}from"./Cq33x7yV.js";import{_ as ie}from"./LwoTUb-r.js";import{_ as Ue}from"./Bg93Rnts.js";import{_ as Ee}from"./BFxvHlO9.js";import{_ as ue}from"./DMAiMrNr.js";import{f as Z,F as L,e as Oe}from"./DMtrFQqi.js";import{_ as De}from"./CDTeSrLO.js";import{_ as Ie}from"./C8Paf_V1.js";import{u as se}from"./T5UuMUxA.js";import{u as Ae}from"./Bme1UkOl.js";import{u as Be}from"./BCGljaM0.js";import"./DaNC-xl1.js";import"./DMsm-RGQ.js";import"./V9p3z39z.js";import"./CpcrljrH.js";import"./03FA4-rI.js";import"./DEvYVl9M.js";import"./D_y2VS8k.js";import"./B69RP95P.js";import"./BjaRappk.js";import"./B1LUinhp.js";import"./fXUwH_3d.js";const Le={class:"flex items-center gap-3 flex-wrap"},Me={class:"flex items-center gap-1.5"},He={key:0,class:"text-gray-500"},Ge={key:1},Ke={key:2},We={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"},Je=ee({__name:"HomeFilters",props:{modelValue:{},availableEnvironments:{}},emits:["update:modelValue"],setup(O,{emit:b}){const T=O,R=b,N=_({get:()=>T.modelValue.environments,set:S=>R("update:modelValue",{...T.modelValue,environments:S})}),$=_({get:()=>T.modelValue.fullRunsOnly,set:S=>R("update:modelValue",{...T.modelValue,fullRunsOnly:S})}),D=_(()=>T.modelValue.environments.length>0||!T.modelValue.fullRunsOnly);function z(){R("update:modelValue",{environments:[],fullRunsOnly:!0})}return(S,v)=>{const H=te,r=we,f=Fe,x=ne;return a(),u("div",Le,[O.availableEnvironments.length>0?(a(),p(r,{key:0,modelValue:t(N),"onUpdate:modelValue":v[0]||(v[0]=m=>Q(N)?N.value=m:null),items:O.availableEnvironments,multiple:"",placeholder:"All environments",size:"sm",class:"min-w-[160px]"},{default:i(({modelValue:m})=>[n("div",Me,[o(H,{name:"i-lucide-server",class:j(["size-3.5 shrink-0",m.length?"text-primary":"text-gray-400"])},null,8,["class"]),m.length?m.length===1?(a(),u("span",Ge,c(m[0]),1)):(a(),u("span",Ke,c(m.length)+" environments",1)):(a(),u("span",He,"All environments"))])]),_:1},8,["modelValue","items"])):g("",!0),n("label",We,[o(f,{modelValue:t($),"onUpdate:modelValue":v[1]||(v[1]=m=>Q($)?$.value=m:null),size:"sm"},null,8,["modelValue"]),v[2]||(v[2]=k(" Full runs only ",-1))]),t(D)?(a(),p(x,{key:1,variant:"ghost",size:"sm",color:"neutral",icon:"i-lucide-x",onClick:z},{default:i(()=>[...v[3]||(v[3]=[k(" Reset ",-1)])]),_:1})):g("",!0)])}}}),Ye=Object.assign(Je,{__name:"HomeFilters"}),qe={class:"hidden md:block overflow-x-auto -mx-4 px-4 sm:mx-0 sm:px-0"},Xe={key:0,class:"flex flex-wrap gap-1 mt-0.5"},Qe={class:"w-40"},Ze={key:1,class:"text-gray-400 text-sm"},et={class:"text-xs text-gray-500 dark:text-gray-400"},tt={key:1,class:"text-gray-400 text-sm"},nt={key:0,class:"tabular-nums text-sm text-gray-600 dark:text-gray-400"},st={key:1,class:"text-gray-400"},at={class:"space-y-2 md:hidden"},lt={class:"flex items-start justify-between gap-2"},rt={key:0,class:"flex flex-wrap gap-1"},ot={class:"flex items-center justify-between gap-2 text-xs"},it={class:"text-gray-500 dark:text-gray-400 truncate"},ut={key:1,class:"text-gray-400"},ct={key:2,class:"shrink-0 tabular-nums text-gray-500 dark:text-gray-400"},dt=ee({__name:"ProjectTrendTable",props:{projects:{},limit:{default:10}},setup(O){const b=O,T={failing:0,flaky:1,passing:2,unknown:3},R=re(!1),N=_(()=>b.projects.length>b.limit),$=_(()=>{const r=[...b.projects].sort((f,x)=>{const m=T[f.tendency]-T[x.tendency];if(m!==0)return m;const C=f.latestFullRun?new Date(f.latestFullRun.startTime).getTime():0;return(x.latestFullRun?new Date(x.latestFullRun.startTime).getTime():0)-C});return R.value?r:r.slice(0,b.limit)});function D(r){return 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 z(r){switch(r){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 S(r){return r==="unknown"?"Unknown":r.charAt(0).toUpperCase()+r.slice(1)}function v(r){switch(r){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 H=[{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(r,f)=>{const x=ne,m=le,C=ze,h=Pe,I=te,V=oe,A=ie,Y=Ue,q=Ee,G=ue;return a(),p(G,{icon:"i-lucide-layout-dashboard",title:"Project health",help:"home.project-health"},{actions:i(()=>[t(N)&&!t(R)?(a(),p(x,{key:0,variant:"ghost",size:"sm","trailing-icon":"i-lucide-chevron-down",onClick:f[0]||(f[0]=e=>R.value=!0)},{default:i(()=>[k(" Show all "+c(b.projects.length),1)]),_:1})):t(R)?(a(),p(x,{key:1,variant:"ghost",size:"sm","trailing-icon":"i-lucide-chevron-up",onClick:f[1]||(f[1]=e=>R.value=!1)},{default:i(()=>[...f[2]||(f[2]=[k(" Show less ",-1)])]),_:1})):g("",!0),o(x,{to:"/projects",variant:"outline",size:"sm"},{default:i(()=>[...f[3]||(f[3]=[k("View all",-1)])]),_:1})]),default:i(()=>[n("div",qe,[o(Y,{data:t($),columns:H,ui:{base:"min-w-[700px]",td:"py-3",th:"py-3 text-xs uppercase tracking-wide"}},{"name-cell":i(({row:e})=>[o(m,{to:`/projects/${e.original.id}`,class:"font-medium text-primary hover:underline truncate block max-w-[200px]"},{default:i(()=>[k(c(e.original.label||e.original.name),1)]),_:2},1032,["to"]),e.original.tags.length>0?(a(),u("div",Xe,[(a(!0),u(E,null,M(e.original.tags,w=>(a(),p(C,{key:w.id,text:w.text,color:w.color},null,8,["text","color"]))),128))])):g("",!0)]),"recentRuns-cell":i(({row:e})=>[n("div",Qe,[o(h,{runs:e.original.recentRuns,height:28},null,8,["runs"])])]),"tendency-cell":i(({row:e})=>[n("span",{class:j(["inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-xs font-medium border whitespace-nowrap",z(e.original.tendency)])},[o(I,{name:v(e.original.tendency),class:"size-3 shrink-0"},null,8,["name"]),k(" "+c(S(e.original.tendency)),1)],2)]),"passRate-cell":i(({row:e})=>[e.original.latestFullRun?(a(),u("span",{key:0,class:j(["font-semibold tabular-nums text-sm",D(("passRate"in r?r.passRate:t(L))(e.original.latestFullRun))])},c(("passRate"in r?r.passRate:t(L))(e.original.latestFullRun))+"% ",3)):(a(),u("span",Ze,"—"))]),"latestRun-cell":i(({row:e})=>[e.original.latestFullRun?(a(),p(m,{key:0,to:`/test-runs/${e.original.latestFullRun.id}`,class:"flex items-center gap-2 min-w-[140px] hover:opacity-80 transition-opacity"},{default:i(()=>[o(V,{status:e.original.latestFullRun.status},null,8,["status"]),n("div",et,[n("div",null,c(("formatRelativeTime"in r?r.formatRelativeTime:t(Z))(e.original.latestFullRun.startTime)),1),e.original.latestFullRun.duration?(a(),p(A,{key:0,ms:e.original.latestFullRun.duration},null,8,["ms"])):g("",!0)])]),_:2},1032,["to"])):(a(),u("span",tt,"No full runs"))]),"tests-cell":i(({row:e})=>[e.original.latestFullRun?(a(),u("span",nt,c(e.original.latestFullRun.passedTests)+"/"+c(e.original.latestFullRun.totalTests),1)):(a(),u("span",st,"—"))]),_:1},8,["data"])]),n("div",at,[(a(!0),u(E,null,M(t($),e=>(a(),u("div",{key:e.id,class:"rounded-lg border border-default p-3 space-y-2"},[n("div",lt,[o(m,{to:`/projects/${e.id}`,class:"font-medium text-primary hover:underline truncate"},{default:i(()=>[k(c(e.label||e.name),1)]),_:2},1032,["to"]),n("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",z(e.tendency)])},[o(I,{name:v(e.tendency),class:"size-3 shrink-0"},null,8,["name"]),k(" "+c(S(e.tendency)),1)],2)]),e.tags.length>0?(a(),u("div",rt,[(a(!0),u(E,null,M(e.tags,w=>(a(),p(C,{key:w.id,text:w.text,color:w.color},null,8,["text","color"]))),128))])):g("",!0),o(h,{runs:e.recentRuns,height:24},null,8,["runs"]),n("div",ot,[e.latestFullRun?(a(),p(m,{key:0,to:`/test-runs/${e.latestFullRun.id}`,class:"flex items-center gap-1.5 min-w-0 hover:opacity-80"},{default:i(()=>[o(V,{status:e.latestFullRun.status},null,8,["status"]),n("span",it,c(("formatRelativeTime"in r?r.formatRelativeTime:t(Z))(e.latestFullRun.startTime)),1)]),_:2},1032,["to"])):(a(),u("span",ut,"No full runs")),e.latestFullRun?(a(),u("span",ct,[n("span",{class:j(["font-semibold",D(("passRate"in r?r.passRate:t(L))(e.latestFullRun))])},c(("passRate"in r?r.passRate:t(L))(e.latestFullRun))+"% ",3),k(" · "+c(e.latestFullRun.passedTests)+"/"+c(e.latestFullRun.totalTests),1)])):g("",!0)])]))),128))]),t($).length===0?(a(),p(q,{key:0,text:"No projects yet",padded:!1,class:"py-8"})):g("",!0)]),_:1})}}}),mt=Object.assign(dt,{__name:"ProjectTrendTable"}),pt={key:0,class:"p-6"},gt={key:1,class:"p-6 space-y-8","aria-busy":"true"},_t={class:"grid grid-cols-1 xl:grid-cols-3 gap-6 items-start"},ft={class:"xl:col-span-2 space-y-3"},yt={class:"space-y-3"},vt={key:2,class:"p-6 space-y-8"},ht={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"},xt={class:"flex items-center gap-1.5"},kt={class:"font-semibold tabular-nums"},bt={class:"flex items-center gap-1.5"},Rt={class:"flex items-center gap-1.5"},Tt={key:0,class:"flex items-center gap-1.5"},$t={class:"font-semibold tabular-nums"},wt={class:"flex items-center gap-1.5"},Ft={class:"font-semibold tabular-nums"},jt={key:2,class:"grid grid-cols-1 xl:grid-cols-3 gap-6 items-start"},St={class:"xl:col-span-2"},Ct={class:"divide-y divide-gray-100 dark:divide-gray-800 text-sm"},Vt={class:"flex-1 min-w-0"},Nt={class:"font-medium truncate"},zt={class:"text-xs text-gray-400"},Pt={class:"text-right tabular-nums shrink-0"},Ut={key:3,class:"text-center py-12 text-gray-500 dark:text-gray-400"},Et={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4"},Ot={class:"flex flex-col gap-3 h-full"},Dt={class:"p-2 bg-primary/10 rounded-lg w-fit"},It={class:"text-xs font-semibold uppercase tracking-wide text-primary mb-1"},At={class:"font-semibold mb-1"},Bt={class:"text-sm text-gray-600 dark:text-gray-400"},ae=6,kn=ee({__name:"index",setup(O){Te({title:"Piwi Dashboard"});const{data:b,error:T,refresh:R,status:N}=se("/api/projects/overview",{lazy:!0,default:()=>[]},"$LKtEy4Bi96"),{data:$,error:D,refresh:z}=se("/api/test-runs/recent",{lazy:!0},"$tXxkP3waVF");Ae(()=>Promise.all([R(),z()]));const S=_(()=>N.value==="pending"&&!b.value?.length),v=_(()=>T.value||D.value);function H(){R(),z()}const r=Be("piwi-home-filters",{default:()=>({environments:[],fullRunsOnly:!0}),encode:l=>JSON.stringify(l),decode:l=>{try{return l?JSON.parse(l):{environments:[],fullRunsOnly:!0}}catch{return{environments:[],fullRunsOnly:!0}}}}),f=_(()=>{const l=new Set;for(const s of $.value??[])s.environment&&l.add(s.environment);for(const s of b.value??[])for(const y of s.recentRuns)y.environment&&l.add(y.environment);return[...l].sort()});function x(l){return r.value.environments.length===0?!0:!!l&&r.value.environments.includes(l)}const m=_(()=>{let l=$.value??[];return r.value.fullRunsOnly&&(l=l.filter(s=>s.isFullRun)),r.value.environments.length>0&&(l=l.filter(s=>x(s.environment))),l}),C=_(()=>{let l=b.value??[];return r.value.environments.length>0&&(l=l.map(s=>({...s,recentRuns:s.recentRuns.filter(y=>x(y.environment))})).filter(s=>s.recentRuns.length>0)),l}),h=_(()=>{const l=C.value,s=l.length,y=l.filter(F=>F.tendency==="failing").length,B=l.filter(F=>F.tendency==="flaky").length;let P=0,K=0;for(const F of l)F.latestFullRun&&(P+=F.latestFullRun.passedTests,K+=F.latestFullRun.totalTests);const W=K>0?Math.round(P/K*100):null,X=Date.now()-1440*60*1e3,U=m.value.filter(F=>new Date(F.startTime).getTime()>X).length;return{totalProjects:s,failingNow:y,flakyNow:B,avgPassRate:W,runs24h:U}}),I=new Set(["running","initialising","finalizing"]),V=re(!1),A=_(()=>[...m.value].sort((s,y)=>{const B=I.has(s.status)?0:1,P=I.has(y.status)?0:1;return B!==P?B-P:new Date(y.startTime).getTime()-new Date(s.startTime).getTime()})),Y=_(()=>V.value?A.value:A.value.slice(0,ae)),q=_(()=>A.value.length>ae),G=_(()=>m.value.length>0),e=_(()=>(b.value?.length??0)>0),w=_(()=>r.value.fullRunsOnly?($.value??[]).filter(y=>x(y.environment)).filter(y=>!y.isFullRun).length:0);function ce(){r.value={...r.value,fullRunsOnly:!1}}function de(l){const s=L(l);return s>=90?"text-green-600 dark:text-green-400":s>=50?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"}function me(l){return I.has(l)?"border-l-blue-400":l==="passed"?"border-l-green-500":l==="failed"||l==="timedout"||l==="interrupted"?"border-l-red-500":"border-l-gray-300 dark:border-l-gray-600"}const pe=[{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(l,s)=>{const y=be,B=Re,P=Ye,K=Se,W=ne,X=Ce,U=Ve,F=Ne,J=te,ge=mt,_e=oe,fe=ie,ye=le,ve=ue,he=De,xe=Ie,ke=je;return a(),p(ke,{id:"home"},{header:i(()=>[o(K,null,$e({leading:i(()=>[o(y),o(B,{items:[{label:"Home",icon:"i-lucide-house",to:"/"}]})]),_:2},[t(e)?{name:"trailing",fn:i(()=>[o(P,{modelValue:t(r),"onUpdate:modelValue":s[0]||(s[0]=d=>Q(r)?r.value=d:null),"available-environments":t(f)},null,8,["modelValue","available-environments"])]),key:"0"}:void 0]),1024)]),body:i(()=>[t(v)?(a(),u("div",pt,[o(X,{text:`Couldn't load the dashboard: ${t(Oe)(t(v))}`},{action:i(()=>[o(W,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:H},{default:i(()=>[...s[3]||(s[3]=[k(" Retry ",-1)])]),_:1})]),_:1},8,["text"])])):t(S)?(a(),u("div",gt,[s[4]||(s[4]=n("span",{class:"sr-only",role:"status"},"Loading dashboard…",-1)),o(U,{class:"h-14 w-full rounded-xl"}),n("div",_t,[n("div",ft,[o(U,{class:"h-7 w-40"}),o(U,{class:"h-72 w-full rounded-lg"})]),n("div",yt,[o(U,{class:"h-7 w-32"}),(a(),u(E,null,M(5,d=>o(U,{key:d,class:"h-12 w-full rounded-lg"})),64))])])])):(a(),u("div",vt,[t(w)>0?(a(),p(F,{key:0,icon:"i-lucide-info",color:"primary",variant:"subtle",title:t(w)===1?"1 partial run is hidden":`${t(w)} 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"])):g("",!0),t(e)?(a(),u("div",ht,[n("div",xt,[o(J,{name:"i-lucide-folder",class:"size-4 text-primary shrink-0"}),n("span",kt,c(t(h).totalProjects),1),s[5]||(s[5]=n("span",{class:"text-gray-500"},"projects",-1))]),n("div",bt,[n("div",{class:j(["w-2 h-2 rounded-full shrink-0",t(h).failingNow>0?"bg-red-500":"bg-green-500"])},null,2),n("span",{class:j(["font-semibold tabular-nums",t(h).failingNow>0?"text-red-600 dark:text-red-400":""])},c(t(h).failingNow),3),s[6]||(s[6]=n("span",{class:"text-gray-500"},"failing now",-1))]),n("div",Rt,[n("div",{class:j(["w-2 h-2 rounded-full shrink-0",t(h).flakyNow>0?"bg-amber-400":"bg-gray-300 dark:bg-gray-600"])},null,2),n("span",{class:j(["font-semibold tabular-nums",t(h).flakyNow>0?"text-amber-600 dark:text-amber-400":""])},c(t(h).flakyNow),3),s[7]||(s[7]=n("span",{class:"text-gray-500"},"flaky",-1))]),t(h).avgPassRate!==null?(a(),u("div",Tt,[o(J,{name:"i-lucide-check-circle",class:"size-4 text-green-500 shrink-0"}),n("span",$t,c(t(h).avgPassRate)+"%",1),s[8]||(s[8]=n("span",{class:"text-gray-500"},"avg pass rate",-1))])):g("",!0),n("div",wt,[o(J,{name:"i-lucide-play-circle",class:"size-4 text-primary shrink-0"}),n("span",Ft,c(t(h).runs24h),1),s[9]||(s[9]=n("span",{class:"text-gray-500"},"runs today",-1))])])):g("",!0),t(e)||t(G)?(a(),u("div",jt,[n("div",St,[t(e)?(a(),p(ge,{key:0,projects:t(C)},null,8,["projects"])):g("",!0)]),t(G)?(a(),p(ve,{key:0,icon:"i-lucide-activity",title:"Recent activity"},{actions:i(()=>[t(q)&&!t(V)?(a(),p(W,{key:0,variant:"ghost",size:"sm","trailing-icon":"i-lucide-chevron-down",onClick:s[1]||(s[1]=d=>V.value=!0)},{default:i(()=>[k(" Show all "+c(t(A).length),1)]),_:1})):t(V)?(a(),p(W,{key:1,variant:"ghost",size:"sm","trailing-icon":"i-lucide-chevron-up",onClick:s[2]||(s[2]=d=>V.value=!1)},{default:i(()=>[...s[10]||(s[10]=[k(" Show less ",-1)])]),_:1})):g("",!0)]),default:i(()=>[n("div",Ct,[(a(!0),u(E,null,M(t(Y),d=>(a(),p(ye,{key:d.id,to:`/test-runs/${d.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",me(d.status)])},{default:i(()=>[o(_e,{status:d.status},null,8,["status"]),n("div",Vt,[n("div",Nt,c(d.projectLabel||d.projectName),1),n("div",zt,"Run #"+c(d.id)+" · "+c(("formatRelativeTime"in l?l.formatRelativeTime:t(Z))(d.startTime)),1)]),n("div",Pt,[n("div",{class:j(de(d))},c(("passRate"in l?l.passRate:t(L))(d))+"%",3),d.duration?(a(),p(fe,{key:0,ms:d.duration,class:"block text-xs text-gray-400"},null,8,["ms"])):g("",!0)])]),_:2},1032,["to","class"]))),128))])]),_:1})):g("",!0)])):g("",!0),t(e)&&!t(G)&&t(C).length===0?(a(),u("div",Ut,[o(J,{name:"i-lucide-filter-x",class:"size-8 mx-auto mb-2 opacity-40"}),s[11]||(s[11]=n("p",null,"No runs match the current filters.",-1))])):g("",!0),t(e)?g("",!0):(a(),u(E,{key:4},[o(he),n("div",Et,[(a(),u(E,null,M(pe,d=>o(xe,{key:d.title,class:"flex flex-col"},{default:i(()=>[n("div",Ot,[n("div",Dt,[o(J,{name:d.icon,class:"size-5 text-primary"},null,8,["name"])]),n("div",null,[n("p",It,c(d.tagline),1),n("h3",At,c(d.title),1),n("p",Bt,c(d.description),1)])])]),_:2},1024)),64))])],64))]))]),_:1})}}});export{kn as default};
@@ -1 +1 @@
1
- import{d as P,Y as L,Z as M,U as j,o as r,c as v,j as C,g as f,V as q,k as e,W as z,S as O,C as D,X as I,f as u,v as h,F as N,h as w,$ as H,a2 as W,a3 as X,a5 as Y,a6 as Z,a7 as G,aN as J,aU as Q,au as ee,i as ae,q as o,p as S,m as R,t as A,a8 as te}from"./CNu3kken.js";import{L as se}from"./DZ-KbUZi.js";import{u as re}from"./BVyjw9Bi.js";import{u as le}from"./BZOykMLD.js";import{V as ie}from"./B3AG2m76.js";const[oe,ne]=H("SwitchRoot");var de=P({inheritAttrs:!1,__name:"SwitchRoot",props:{defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1,default:void 0},disabled:{type:Boolean,required:!1},id:{type:String,required:!1},value:{type:String,required:!1,default:"on"},trueValue:{type:null,required:!1,default:()=>!0},falseValue:{type:null,required:!1,default:()=>!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue"],setup(g,{emit:c}){const t=g,d=c,{disabled:n}=L(t),a=M(t,"modelValue",d,{defaultValue:t.defaultValue??t.falseValue,passive:t.modelValue===void 0}),i=w(()=>a.value===t.trueValue);function m(){n.value||(a.value=i.value?t.falseValue:t.trueValue)}const{forwardRef:V,currentElement:b}=j(),x=re(b),k=le(),_=w(()=>t.id&&b.value?document.querySelector(`[for="${t.id}"]`)?.innerText:void 0);return ne({checked:i,toggleCheck:m,disabled:n}),(s,B)=>(r(),v(N,null,[C(e(I),z({id:s.id,ref:e(V),role:"switch",type:s.as==="button"?"button":void 0,value:s.value,"aria-label":s.$attrs["aria-label"]||_.value,"aria-checked":i.value,"aria-required":s.required,"data-state":i.value?"checked":"unchecked","data-disabled":e(n)?"":void 0,"as-child":s.asChild,as:s.as,disabled:e(n)},{...e(k),...s.$attrs},{onClick:m,onKeydown:O(D(m,["prevent"]),["enter"])}),{default:f(()=>[q(s.$slots,"default",{modelValue:e(a),checked:i.value})]),_:3},16,["id","type","value","aria-label","aria-checked","aria-required","data-state","data-disabled","as-child","as","disabled","onKeydown"]),e(x)&&s.name?(r(),u(e(ie),z({key:0,type:"checkbox",name:s.name,disabled:e(n),required:s.required,value:s.value,checked:i.value},e(k)),null,16,["name","disabled","required","value","checked"])):h("v-if",!0)],64))}}),ue=de,ce=P({__name:"SwitchThumb",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(g){const c=oe();return j(),(t,d)=>(r(),u(e(I),{"data-state":e(c).checked.value?"checked":"unchecked","data-disabled":e(c).disabled.value?"":void 0,"as-child":t.asChild,as:t.as},{default:f(()=>[q(t.$slots,"default")]),_:3},8,["data-state","data-disabled","as-child","as"]))}}),pe=ce;const he={slots:{root:"relative flex items-start",base:["inline-flex items-center shrink-0 rounded-full border-2 border-transparent focus-visible:outline-3 data-[state=unchecked]:bg-accented","transition-[background] duration-200"],container:"flex items-center",thumb:"group pointer-events-none rounded-full bg-default shadow-lg ring-0 transition-transform duration-200 data-[state=unchecked]:translate-x-0 data-[state=unchecked]:rtl:-translate-x-0 flex items-center justify-center",icon:["absolute shrink-0 group-data-[state=unchecked]:text-dimmed opacity-0 size-10/12","transition-[color,opacity] duration-200"],wrapper:"ms-2",label:"block font-medium text-default",description:"text-muted"},variants:{color:{primary:{base:"data-[state=checked]:bg-primary outline-primary/25",icon:"group-data-[state=checked]:text-primary"},secondary:{base:"data-[state=checked]:bg-secondary outline-secondary/25",icon:"group-data-[state=checked]:text-secondary"},success:{base:"data-[state=checked]:bg-success outline-success/25",icon:"group-data-[state=checked]:text-success"},info:{base:"data-[state=checked]:bg-info outline-info/25",icon:"group-data-[state=checked]:text-info"},warning:{base:"data-[state=checked]:bg-warning outline-warning/25",icon:"group-data-[state=checked]:text-warning"},error:{base:"data-[state=checked]:bg-error outline-error/25",icon:"group-data-[state=checked]:text-error"},neutral:{base:"data-[state=checked]:bg-inverted outline-inverted/25",icon:"group-data-[state=checked]:text-highlighted"}},size:{xs:{base:"w-7",container:"h-4",thumb:"size-3 data-[state=checked]:translate-x-3 data-[state=checked]:rtl:-translate-x-3",wrapper:"text-xs"},sm:{base:"w-8",container:"h-4",thumb:"size-3.5 data-[state=checked]:translate-x-3.5 data-[state=checked]:rtl:-translate-x-3.5",wrapper:"text-xs"},md:{base:"w-9",container:"h-5",thumb:"size-4 data-[state=checked]:translate-x-4 data-[state=checked]:rtl:-translate-x-4",wrapper:"text-sm"},lg:{base:"w-10",container:"h-5",thumb:"size-4.5 data-[state=checked]:translate-x-4.5 data-[state=checked]:rtl:-translate-x-4.5",wrapper:"text-sm"},xl:{base:"w-11",container:"h-6",thumb:"size-5 data-[state=checked]:translate-x-5 data-[state=checked]:rtl:-translate-x-5",wrapper:"text-base"}},checked:{true:{icon:"group-data-[state=checked]:opacity-100"}},unchecked:{true:{icon:"group-data-[state=unchecked]:opacity-100"}},loading:{true:{icon:"animate-spin"}},highlight:{true:""},required:{true:{label:"after:content-['*'] after:ms-0.5 after:text-error"}},disabled:{true:{root:"opacity-75",base:"cursor-not-allowed",label:"cursor-not-allowed",description:"cursor-not-allowed"}}},compoundVariants:[{color:"primary",highlight:!0,class:{base:"ring ring-primary"}},{color:"secondary",highlight:!0,class:{base:"ring ring-secondary"}},{color:"success",highlight:!0,class:{base:"ring ring-success"}},{color:"info",highlight:!0,class:{base:"ring ring-info"}},{color:"warning",highlight:!0,class:{base:"ring ring-warning"}},{color:"error",highlight:!0,class:{base:"ring ring-error"}},{color:"neutral",highlight:!0,class:{base:"ring ring-inverted"}}],defaultVariants:{color:"primary",size:"md"}},ye=Object.assign({inheritAttrs:!1},{__name:"USwitch",props:{as:{type:null,required:!1},color:{type:null,required:!1},size:{type:null,required:!1},highlight:{type:Boolean,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1},checkedIcon:{type:null,required:!1},uncheckedIcon:{type:null,required:!1},label:{type:String,required:!1},description:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},disabled:{type:Boolean,required:!1},id:{type:String,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1},value:{type:String,required:!1},defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1},trueValue:{type:null,required:!1},falseValue:{type:null,required:!1}},emits:["change","update:modelValue"],setup(g,{emit:c}){const t=g,d=W(),n=c,a=X("switch",t),i=Y(),m=Z(G(a,"required","value","defaultValue","modelValue","trueValue","falseValue"),n),{id:V,emitFormChange:b,emitFormInput:x,size:k,color:_,highlight:s,name:B,disabled:F,ariaAttrs:T}=J(t),$=V.value??Q(),U=ee(),E=w(()=>{const{"data-state":p,...y}=U;return y}),l=w(()=>te({extend:he,...i.ui?.switch||{}})({size:k.value??a.size,color:_.value??a.color,highlight:s.value??a.highlight,required:a.required,loading:a.loading,disabled:F.value||a.loading}));function K(p){const y=new Event("change",{target:{value:p}});n("change",y),b(),x()}return(p,y)=>(r(),u(e(I),{as:e(a).as,"data-slot":p.$attrs["data-slot"]??"root",class:o(l.value.root({class:[e(a).ui?.root,e(a).class]}))},{default:f(()=>[ae("div",{"data-slot":"container",class:o(l.value.container({class:e(a).ui?.container}))},[C(e(ue),z({id:e($)},{...e(m),...E.value,...e(T)},{name:e(B),disabled:e(F)||e(a).loading,"data-slot":"base",class:l.value.base({class:e(a).ui?.base}),"onUpdate:modelValue":K}),{default:f(()=>[C(e(pe),{"data-slot":"thumb",class:o(l.value.thumb({class:e(a).ui?.thumb}))},{default:f(()=>[e(a).loading?(r(),u(S,{key:0,name:e(a).loadingIcon||e(i).ui.icons.loading,"data-slot":"icon",class:o(l.value.icon({class:e(a).ui?.icon,checked:!0,unchecked:!0}))},null,8,["name","class"])):(r(),v(N,{key:1},[e(a).checkedIcon?(r(),u(S,{key:0,name:e(a).checkedIcon,"data-slot":"icon",class:o(l.value.icon({class:e(a).ui?.icon,checked:!0}))},null,8,["name","class"])):h("",!0),e(a).uncheckedIcon?(r(),u(S,{key:1,name:e(a).uncheckedIcon,"data-slot":"icon",class:o(l.value.icon({class:e(a).ui?.icon,unchecked:!0}))},null,8,["name","class"])):h("",!0)],64))]),_:1},8,["class"])]),_:1},16,["id","name","disabled","class"])],2),e(a).label||d.label||e(a).description||d.description?(r(),v("div",{key:0,"data-slot":"wrapper",class:o(l.value.wrapper({class:e(a).ui?.wrapper}))},[e(a).label||d.label?(r(),u(e(se),{key:0,for:e($),"data-slot":"label",class:o(l.value.label({class:e(a).ui?.label}))},{default:f(()=>[q(p.$slots,"label",{label:e(a).label},()=>[R(A(e(a).label),1)])]),_:3},8,["for","class"])):h("",!0),e(a).description||d.description?(r(),v("p",{key:1,"data-slot":"description",class:o(l.value.description({class:e(a).ui?.description}))},[q(p.$slots,"description",{description:e(a).description},()=>[R(A(e(a).description),1)])],2)):h("",!0)],2)):h("",!0)]),_:3},8,["as","data-slot","class"]))}});export{ye as _};
1
+ import{d as P,Y as L,Z as M,U as j,o as r,c as v,j as C,g as f,V as q,k as e,W as z,S as O,C as D,X as I,f as u,v as h,F as N,h as w,$ as H,a2 as W,a3 as X,a5 as Y,a6 as Z,a7 as G,aN as J,aU as Q,au as ee,i as ae,q as o,p as S,m as R,t as A,a8 as te}from"./C5TrTuWv.js";import{L as se}from"./D_y2VS8k.js";import{u as re}from"./DaNC-xl1.js";import{u as le}from"./03FA4-rI.js";import{V as ie}from"./DMsm-RGQ.js";const[oe,ne]=H("SwitchRoot");var de=P({inheritAttrs:!1,__name:"SwitchRoot",props:{defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1,default:void 0},disabled:{type:Boolean,required:!1},id:{type:String,required:!1},value:{type:String,required:!1,default:"on"},trueValue:{type:null,required:!1,default:()=>!0},falseValue:{type:null,required:!1,default:()=>!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"},name:{type:String,required:!1},required:{type:Boolean,required:!1}},emits:["update:modelValue"],setup(g,{emit:c}){const t=g,d=c,{disabled:n}=L(t),a=M(t,"modelValue",d,{defaultValue:t.defaultValue??t.falseValue,passive:t.modelValue===void 0}),i=w(()=>a.value===t.trueValue);function m(){n.value||(a.value=i.value?t.falseValue:t.trueValue)}const{forwardRef:V,currentElement:b}=j(),x=re(b),k=le(),_=w(()=>t.id&&b.value?document.querySelector(`[for="${t.id}"]`)?.innerText:void 0);return ne({checked:i,toggleCheck:m,disabled:n}),(s,B)=>(r(),v(N,null,[C(e(I),z({id:s.id,ref:e(V),role:"switch",type:s.as==="button"?"button":void 0,value:s.value,"aria-label":s.$attrs["aria-label"]||_.value,"aria-checked":i.value,"aria-required":s.required,"data-state":i.value?"checked":"unchecked","data-disabled":e(n)?"":void 0,"as-child":s.asChild,as:s.as,disabled:e(n)},{...e(k),...s.$attrs},{onClick:m,onKeydown:O(D(m,["prevent"]),["enter"])}),{default:f(()=>[q(s.$slots,"default",{modelValue:e(a),checked:i.value})]),_:3},16,["id","type","value","aria-label","aria-checked","aria-required","data-state","data-disabled","as-child","as","disabled","onKeydown"]),e(x)&&s.name?(r(),u(e(ie),z({key:0,type:"checkbox",name:s.name,disabled:e(n),required:s.required,value:s.value,checked:i.value},e(k)),null,16,["name","disabled","required","value","checked"])):h("v-if",!0)],64))}}),ue=de,ce=P({__name:"SwitchThumb",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"span"}},setup(g){const c=oe();return j(),(t,d)=>(r(),u(e(I),{"data-state":e(c).checked.value?"checked":"unchecked","data-disabled":e(c).disabled.value?"":void 0,"as-child":t.asChild,as:t.as},{default:f(()=>[q(t.$slots,"default")]),_:3},8,["data-state","data-disabled","as-child","as"]))}}),pe=ce;const he={slots:{root:"relative flex items-start",base:["inline-flex items-center shrink-0 rounded-full border-2 border-transparent focus-visible:outline-3 data-[state=unchecked]:bg-accented","transition-[background] duration-200"],container:"flex items-center",thumb:"group pointer-events-none rounded-full bg-default shadow-lg ring-0 transition-transform duration-200 data-[state=unchecked]:translate-x-0 data-[state=unchecked]:rtl:-translate-x-0 flex items-center justify-center",icon:["absolute shrink-0 group-data-[state=unchecked]:text-dimmed opacity-0 size-10/12","transition-[color,opacity] duration-200"],wrapper:"ms-2",label:"block font-medium text-default",description:"text-muted"},variants:{color:{primary:{base:"data-[state=checked]:bg-primary outline-primary/25",icon:"group-data-[state=checked]:text-primary"},secondary:{base:"data-[state=checked]:bg-secondary outline-secondary/25",icon:"group-data-[state=checked]:text-secondary"},success:{base:"data-[state=checked]:bg-success outline-success/25",icon:"group-data-[state=checked]:text-success"},info:{base:"data-[state=checked]:bg-info outline-info/25",icon:"group-data-[state=checked]:text-info"},warning:{base:"data-[state=checked]:bg-warning outline-warning/25",icon:"group-data-[state=checked]:text-warning"},error:{base:"data-[state=checked]:bg-error outline-error/25",icon:"group-data-[state=checked]:text-error"},neutral:{base:"data-[state=checked]:bg-inverted outline-inverted/25",icon:"group-data-[state=checked]:text-highlighted"}},size:{xs:{base:"w-7",container:"h-4",thumb:"size-3 data-[state=checked]:translate-x-3 data-[state=checked]:rtl:-translate-x-3",wrapper:"text-xs"},sm:{base:"w-8",container:"h-4",thumb:"size-3.5 data-[state=checked]:translate-x-3.5 data-[state=checked]:rtl:-translate-x-3.5",wrapper:"text-xs"},md:{base:"w-9",container:"h-5",thumb:"size-4 data-[state=checked]:translate-x-4 data-[state=checked]:rtl:-translate-x-4",wrapper:"text-sm"},lg:{base:"w-10",container:"h-5",thumb:"size-4.5 data-[state=checked]:translate-x-4.5 data-[state=checked]:rtl:-translate-x-4.5",wrapper:"text-sm"},xl:{base:"w-11",container:"h-6",thumb:"size-5 data-[state=checked]:translate-x-5 data-[state=checked]:rtl:-translate-x-5",wrapper:"text-base"}},checked:{true:{icon:"group-data-[state=checked]:opacity-100"}},unchecked:{true:{icon:"group-data-[state=unchecked]:opacity-100"}},loading:{true:{icon:"animate-spin"}},highlight:{true:""},required:{true:{label:"after:content-['*'] after:ms-0.5 after:text-error"}},disabled:{true:{root:"opacity-75",base:"cursor-not-allowed",label:"cursor-not-allowed",description:"cursor-not-allowed"}}},compoundVariants:[{color:"primary",highlight:!0,class:{base:"ring ring-primary"}},{color:"secondary",highlight:!0,class:{base:"ring ring-secondary"}},{color:"success",highlight:!0,class:{base:"ring ring-success"}},{color:"info",highlight:!0,class:{base:"ring ring-info"}},{color:"warning",highlight:!0,class:{base:"ring ring-warning"}},{color:"error",highlight:!0,class:{base:"ring ring-error"}},{color:"neutral",highlight:!0,class:{base:"ring ring-inverted"}}],defaultVariants:{color:"primary",size:"md"}},ye=Object.assign({inheritAttrs:!1},{__name:"USwitch",props:{as:{type:null,required:!1},color:{type:null,required:!1},size:{type:null,required:!1},highlight:{type:Boolean,required:!1},loading:{type:Boolean,required:!1},loadingIcon:{type:null,required:!1},checkedIcon:{type:null,required:!1},uncheckedIcon:{type:null,required:!1},label:{type:String,required:!1},description:{type:String,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},disabled:{type:Boolean,required:!1},id:{type:String,required:!1},name:{type:String,required:!1},required:{type:Boolean,required:!1},value:{type:String,required:!1},defaultValue:{type:null,required:!1},modelValue:{type:null,required:!1},trueValue:{type:null,required:!1},falseValue:{type:null,required:!1}},emits:["change","update:modelValue"],setup(g,{emit:c}){const t=g,d=W(),n=c,a=X("switch",t),i=Y(),m=Z(G(a,"required","value","defaultValue","modelValue","trueValue","falseValue"),n),{id:V,emitFormChange:b,emitFormInput:x,size:k,color:_,highlight:s,name:B,disabled:F,ariaAttrs:T}=J(t),$=V.value??Q(),U=ee(),E=w(()=>{const{"data-state":p,...y}=U;return y}),l=w(()=>te({extend:he,...i.ui?.switch||{}})({size:k.value??a.size,color:_.value??a.color,highlight:s.value??a.highlight,required:a.required,loading:a.loading,disabled:F.value||a.loading}));function K(p){const y=new Event("change",{target:{value:p}});n("change",y),b(),x()}return(p,y)=>(r(),u(e(I),{as:e(a).as,"data-slot":p.$attrs["data-slot"]??"root",class:o(l.value.root({class:[e(a).ui?.root,e(a).class]}))},{default:f(()=>[ae("div",{"data-slot":"container",class:o(l.value.container({class:e(a).ui?.container}))},[C(e(ue),z({id:e($)},{...e(m),...E.value,...e(T)},{name:e(B),disabled:e(F)||e(a).loading,"data-slot":"base",class:l.value.base({class:e(a).ui?.base}),"onUpdate:modelValue":K}),{default:f(()=>[C(e(pe),{"data-slot":"thumb",class:o(l.value.thumb({class:e(a).ui?.thumb}))},{default:f(()=>[e(a).loading?(r(),u(S,{key:0,name:e(a).loadingIcon||e(i).ui.icons.loading,"data-slot":"icon",class:o(l.value.icon({class:e(a).ui?.icon,checked:!0,unchecked:!0}))},null,8,["name","class"])):(r(),v(N,{key:1},[e(a).checkedIcon?(r(),u(S,{key:0,name:e(a).checkedIcon,"data-slot":"icon",class:o(l.value.icon({class:e(a).ui?.icon,checked:!0}))},null,8,["name","class"])):h("",!0),e(a).uncheckedIcon?(r(),u(S,{key:1,name:e(a).uncheckedIcon,"data-slot":"icon",class:o(l.value.icon({class:e(a).ui?.icon,unchecked:!0}))},null,8,["name","class"])):h("",!0)],64))]),_:1},8,["class"])]),_:1},16,["id","name","disabled","class"])],2),e(a).label||d.label||e(a).description||d.description?(r(),v("div",{key:0,"data-slot":"wrapper",class:o(l.value.wrapper({class:e(a).ui?.wrapper}))},[e(a).label||d.label?(r(),u(e(se),{key:0,for:e($),"data-slot":"label",class:o(l.value.label({class:e(a).ui?.label}))},{default:f(()=>[q(p.$slots,"label",{label:e(a).label},()=>[R(A(e(a).label),1)])]),_:3},8,["for","class"])):h("",!0),e(a).description||d.description?(r(),v("p",{key:1,"data-slot":"description",class:o(l.value.description({class:e(a).ui?.description}))},[q(p.$slots,"description",{description:e(a).description},()=>[R(A(e(a).description),1)])],2)):h("",!0)],2)):h("",!0)]),_:3},8,["as","data-slot","class"]))}});export{ye as _};