@piwitests/server 0.16.0 → 0.18.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 (208) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{Dz55UR7w.js → 36cXPVrY.js} +1 -1
  3. package/.output/public/_nuxt/{IFqRT_xJ.js → 87SGk1nu.js} +1 -1
  4. package/.output/public/_nuxt/{bAfTAihV.js → AjuKBlzz.js} +1 -1
  5. package/.output/public/_nuxt/{1AB111xL.js → B1CB30tg.js} +1 -1
  6. package/.output/public/_nuxt/{Br2K9yi_.js → B6IHiVa1.js} +1 -1
  7. package/.output/public/_nuxt/{iwD5atI2.js → B6rt3IcG.js} +1 -1
  8. package/.output/public/_nuxt/{Bvfmwzgw.js → BAaSmp8J.js} +1 -1
  9. package/.output/public/_nuxt/{DRtTLQri.js → BAkJhSAW.js} +1 -1
  10. package/.output/public/_nuxt/{DuBBqqbF.js → BCArQk0c.js} +1 -1
  11. package/.output/public/_nuxt/{BV83yObd.js → BEB2Mv6B.js} +1 -1
  12. package/.output/public/_nuxt/BFjmLXYo.js +8 -0
  13. package/.output/public/_nuxt/BJltXwHg.js +1 -0
  14. package/.output/public/_nuxt/{CuYYdFBL.js → BKaU95es.js} +1 -1
  15. package/.output/public/_nuxt/{2xvsvjLO.js → BReNbog6.js} +1 -1
  16. package/.output/public/_nuxt/{DJS3Bf50.js → BTYiG93l.js} +1 -1
  17. package/.output/public/_nuxt/{k-z_VVTK.js → BUMZHDRC.js} +1 -1
  18. package/.output/public/_nuxt/BVDBIVAQ.js +1 -0
  19. package/.output/public/_nuxt/{JCFZINev.js → B_aSGB8S.js} +1 -1
  20. package/.output/public/_nuxt/{e1zUTrBb.js → BaDv5D7A.js} +1 -1
  21. package/.output/public/_nuxt/{DjZKuUMz.js → BdHdHyop.js} +1 -1
  22. package/.output/public/_nuxt/{CJFqA_QW.js → BfoG8R5a.js} +1 -1
  23. package/.output/public/_nuxt/{CgoAUz76.js → Bi3i470l.js} +1 -1
  24. package/.output/public/_nuxt/Bi9DO8jm.js +1 -0
  25. package/.output/public/_nuxt/{BS0gKVuF.js → BiX7c2qU.js} +1 -1
  26. package/.output/public/_nuxt/{-KQO1A4C.js → BoC6qaRF.js} +4 -4
  27. package/.output/public/_nuxt/{CSYJwpXG.js → BsDB_eCd.js} +1 -1
  28. package/.output/public/_nuxt/{B43OGXzV.js → BuuvTH9e.js} +1 -1
  29. package/.output/public/_nuxt/{BRKa6EQR.js → C11lmBd4.js} +1 -1
  30. package/.output/public/_nuxt/C4AfzZER.js +47 -0
  31. package/.output/public/_nuxt/{BBdfPriC.js → C7ZVzS0K.js} +1 -1
  32. package/.output/public/_nuxt/{CQeMb57w.js → C8cz5feG.js} +1 -1
  33. package/.output/public/_nuxt/{Dzz9_Z0u.js → C9EpbPNU.js} +1 -1
  34. package/.output/public/_nuxt/{qzAP_nm7.js → C9ahP7km.js} +1 -1
  35. package/.output/public/_nuxt/{N3pCB6-m.js → CBEM3L1q.js} +1 -1
  36. package/.output/public/_nuxt/{C1K3r_fc.js → CCsl9MOZ.js} +1 -1
  37. package/.output/public/_nuxt/{BpceIssd.js → CCw3Tx4S.js} +1 -1
  38. package/.output/public/_nuxt/{B3NbDoBP.js → CGq9qR-0.js} +1 -1
  39. package/.output/public/_nuxt/{BoRFLTAO.js → CLdGRzLL.js} +1 -1
  40. package/.output/public/_nuxt/{BZekCf_x.js → CP0vUzbd.js} +1 -1
  41. package/.output/public/_nuxt/CPZ5wygb.js +1 -0
  42. package/.output/public/_nuxt/{CTdvGdc2.js → CRcjGmf7.js} +1 -1
  43. package/.output/public/_nuxt/{B2lYFco4.js → CRpbGS75.js} +1 -1
  44. package/.output/public/_nuxt/CTgM5Fke.js +2 -0
  45. package/.output/public/_nuxt/{DcCNnjKl.js → CU3W9YrI.js} +1 -1
  46. package/.output/public/_nuxt/{BIksQZfR.js → CUDeMcEK.js} +1 -1
  47. package/.output/public/_nuxt/{BpNqHxg2.js → CYIR2GbL.js} +1 -1
  48. package/.output/public/_nuxt/{ze9-Ill2.js → Ccit_CX1.js} +1 -1
  49. package/.output/public/_nuxt/CiPH-swI.js +1 -0
  50. package/.output/public/_nuxt/{BkDfdHFm.js → ClIKZ4qY.js} +1 -1
  51. package/.output/public/_nuxt/{BVW5qIDP.js → ClVRQpP_.js} +1 -1
  52. package/.output/public/_nuxt/CmbjAoQu.js +1 -0
  53. package/.output/public/_nuxt/Cx65B3c3.js +1 -0
  54. package/.output/public/_nuxt/{B3sNtVnf.js → D1ttGJfs.js} +1 -1
  55. package/.output/public/_nuxt/{DuMv-ugy.js → D3MWm6JP.js} +1 -1
  56. package/.output/public/_nuxt/{BPKwYP2Q.js → D3SYPlEB.js} +28 -28
  57. package/.output/public/_nuxt/{BGYbnqA7.js → D4SFgXAf.js} +1 -1
  58. package/.output/public/_nuxt/D51_cB9D.js +1 -0
  59. package/.output/public/_nuxt/{DbeHHTk-.js → D8YZvjas.js} +1 -1
  60. package/.output/public/_nuxt/{DgYM3eyi.js → DB3ljns7.js} +1 -1
  61. package/.output/public/_nuxt/{Bzl2H_vl.js → DC51KKt4.js} +1 -1
  62. package/.output/public/_nuxt/{BR9H8k-L.js → DCMFuzDI.js} +1 -1
  63. package/.output/public/_nuxt/{mfzslNx_.js → DIA_NAIv.js} +1 -1
  64. package/.output/public/_nuxt/{CKB_doYB.js → DM_YaJgJ.js} +1 -1
  65. package/.output/public/_nuxt/{BuZOa2M3.js → DOr_4nln.js} +2 -2
  66. package/.output/public/_nuxt/{oNq5pd3r.js → DRE6Aqqp.js} +1 -1
  67. package/.output/public/_nuxt/{CMYQpoOI.js → DVgMaBxD.js} +1 -1
  68. package/.output/public/_nuxt/{C3r_Sv1p.js → DaewB_zT.js} +1 -1
  69. package/.output/public/_nuxt/{DdbrJwT-.js → Db_-yjYg.js} +1 -1
  70. package/.output/public/_nuxt/{CpO-ABDW.js → Dbg8z684.js} +1 -1
  71. package/.output/public/_nuxt/{DOuoR2Pk.js → DcfRfTaA.js} +1 -1
  72. package/.output/public/_nuxt/{BpIsBP5g.js → Dm1_3W9g.js} +1 -1
  73. package/.output/public/_nuxt/{ABGJk0pu.js → DnThe2U0.js} +1 -1
  74. package/.output/public/_nuxt/{C38aZbFJ.js → Do6zIWQf.js} +1 -1
  75. package/.output/public/_nuxt/{B7yG1G_l.js → DoFSKAvY.js} +1 -1
  76. package/.output/public/_nuxt/{C8RBRg7I.js → DoYgYLOd.js} +1 -1
  77. package/.output/public/_nuxt/{BIf1R_fu.js → Doul3p1_.js} +1 -1
  78. package/.output/public/_nuxt/{BQrSEuzu.js → DraETso1.js} +1 -1
  79. package/.output/public/_nuxt/{DszOHBMG.js → Dwp3GkV-.js} +1 -1
  80. package/.output/public/_nuxt/{DqnyWaSQ.js → Dy4TloG3.js} +1 -1
  81. package/.output/public/_nuxt/{DfcAIbcX.js → EltzgiyS.js} +1 -1
  82. package/.output/public/_nuxt/{D2jhe9JK.js → HTQtMbWb.js} +1 -1
  83. package/.output/public/_nuxt/{xUrLy-Zn.js → KYucVFu7.js} +1 -1
  84. package/.output/public/_nuxt/TBDx0s9p.js +3 -0
  85. package/.output/public/_nuxt/{BdFEUAlx.js → Tt5LX5Y-.js} +1 -1
  86. package/.output/public/_nuxt/{d5ZB3uxF.js → Vnfkr1pJ.js} +1 -1
  87. package/.output/public/_nuxt/{DIkLLyR6.js → WAaPPk0g.js} +2 -2
  88. package/.output/public/_nuxt/builds/latest.json +1 -1
  89. package/.output/public/_nuxt/builds/meta/ed1db2e5-9865-4231-9605-4edd5272e164.json +1 -0
  90. package/.output/public/_nuxt/{DhA17dqR.js → empGC_x-.js} +1 -1
  91. package/.output/public/_nuxt/entry.ChQMshd4.css +1 -0
  92. package/.output/public/_nuxt/{nCjfWTGm.js → l0QnzFNM.js} +1 -1
  93. package/.output/public/_nuxt/{l0gdGdar.js → lowCGL2S.js} +1 -1
  94. package/.output/public/_nuxt/{DL20rwkA.js → mlAADjK3.js} +1 -1
  95. package/.output/public/_nuxt/{D33On6AX.js → n-QWmQgc.js} +1 -1
  96. package/.output/public/_nuxt/{CoHGrO41.js → oFIS9u6t.js} +2 -2
  97. package/.output/public/_nuxt/{BY4oA2IH.js → oWY3I9uX.js} +1 -1
  98. package/.output/public/_nuxt/{D4VpoHDP.js → q0DPzLKN.js} +1 -1
  99. package/.output/public/_nuxt/{uKeO2H7F.js → quV6tp4n.js} +1 -1
  100. package/.output/public/_nuxt/{B33X4zrC.js → riEUDnED.js} +1 -1
  101. package/.output/public/_nuxt/{mGJLLqyN.js → rm7OkgDG.js} +1 -1
  102. package/.output/public/_nuxt/uaqMzXqE.js +5 -0
  103. package/.output/public/_nuxt/{DAWn6Z7h.js → va1mwSm9.js} +1 -1
  104. package/.output/public/_nuxt/{DCpmQ47_.js → wGpfdK6o.js} +1 -1
  105. package/.output/public/_nuxt/{Bb64FEFL.js → wQZj69OY.js} +1 -1
  106. package/.output/public/_nuxt/wgcgHmRR.js +1 -0
  107. package/.output/public/sw.js +1 -1
  108. package/.output/server/chunks/build/{Checkbox-7ZiMz60w.mjs → Checkbox-cVOSIY93.mjs} +2 -2
  109. package/.output/server/chunks/build/Checkbox-cVOSIY93.mjs.map +1 -0
  110. package/.output/server/chunks/build/{CiEnvCard-DNxBVvx4.mjs → CiEnvCard-DXPOhdSG.mjs} +2 -2
  111. package/.output/server/chunks/build/CiEnvCard-DXPOhdSG.mjs.map +1 -0
  112. package/.output/server/chunks/build/DataLocationCard-D6xSOrme.mjs +102 -0
  113. package/.output/server/chunks/build/DataLocationCard-D6xSOrme.mjs.map +1 -0
  114. package/.output/server/chunks/build/{ProjectTestCasesTable-9418EI8J.mjs → ProjectTestCasesTable-9Ia825h8.mjs} +2 -2
  115. package/.output/server/chunks/build/ProjectTestCasesTable-9Ia825h8.mjs.map +1 -0
  116. package/.output/server/chunks/build/{Select-COwTIQlV.mjs → Select-ppPz926C.mjs} +3 -2
  117. package/.output/server/chunks/build/Select-ppPz926C.mjs.map +1 -0
  118. package/.output/server/chunks/build/{SelectMenu-BkyAHFCM.mjs → SelectMenu-799c_Ils.mjs} +2 -2
  119. package/.output/server/chunks/build/{SelectMenu-BkyAHFCM.mjs.map → SelectMenu-799c_Ils.mjs.map} +1 -1
  120. package/.output/server/chunks/build/{Switch-htSKgC38.mjs → Switch-xQQ3_ME1.mjs} +2 -2
  121. package/.output/server/chunks/build/Switch-xQQ3_ME1.mjs.map +1 -0
  122. package/.output/server/chunks/build/{_id_-CnwAyvvS.mjs → _id_-B2yirIuA.mjs} +5 -4
  123. package/.output/server/chunks/build/{_id_-CnwAyvvS.mjs.map → _id_-B2yirIuA.mjs.map} +1 -1
  124. package/.output/server/chunks/build/{_id_-BDqvTM9D.mjs → _id_-B4V5fop6.mjs} +5 -4
  125. package/.output/server/chunks/build/{_id_-BDqvTM9D.mjs.map → _id_-B4V5fop6.mjs.map} +1 -1
  126. package/.output/server/chunks/build/{_id_-Dy67M9Dj.mjs → _id_-bWcP2xFl.mjs} +8 -7
  127. package/.output/server/chunks/build/{_id_-Dy67M9Dj.mjs.map → _id_-bWcP2xFl.mjs.map} +1 -1
  128. package/.output/server/chunks/build/about-CoJjvUwM.mjs +733 -0
  129. package/.output/server/chunks/build/about-CoJjvUwM.mjs.map +1 -0
  130. package/.output/server/chunks/build/{ai-V3YOh3yx.mjs → ai-7jdaPOmj.mjs} +6 -5
  131. package/.output/server/chunks/build/{ai-V3YOh3yx.mjs.map → ai-7jdaPOmj.mjs.map} +1 -1
  132. package/.output/server/chunks/build/{analytics-BBlAEmj5.mjs → analytics-B276WPeU.mjs} +7 -6
  133. package/.output/server/chunks/build/{analytics-BBlAEmj5.mjs.map → analytics-B276WPeU.mjs.map} +1 -1
  134. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  135. package/.output/server/chunks/build/{default-BfMirIgG.mjs → default-BSzdkM_L.mjs} +9 -7
  136. package/.output/server/chunks/build/default-BSzdkM_L.mjs.map +1 -0
  137. package/.output/server/chunks/build/{docs-DtNcJCyb.mjs → docs-BN_x1OW3.mjs} +53 -8
  138. package/.output/server/chunks/build/{docs-DtNcJCyb.mjs.map → docs-BN_x1OW3.mjs.map} +1 -1
  139. package/.output/server/chunks/build/{edit-Dsf11mL5.mjs → edit-C9Z7oZeu.mjs} +5 -4
  140. package/.output/server/chunks/build/edit-C9Z7oZeu.mjs.map +1 -0
  141. package/.output/server/chunks/build/handleAndDispatchCustomEvent-Bk_AVSSo.mjs +13 -0
  142. package/.output/server/chunks/build/handleAndDispatchCustomEvent-Bk_AVSSo.mjs.map +1 -0
  143. package/.output/server/chunks/build/{index-DzEgjHlB.mjs → index-BK9PTRpd.mjs} +24 -8
  144. package/.output/server/chunks/build/{index-DzEgjHlB.mjs.map → index-BK9PTRpd.mjs.map} +1 -1
  145. package/.output/server/chunks/build/{index-BgpEKTSq.mjs → index-DVUtBexc.mjs} +9 -8
  146. package/.output/server/chunks/build/{index-BgpEKTSq.mjs.map → index-DVUtBexc.mjs.map} +1 -1
  147. package/.output/server/chunks/build/{mcp-CXwa3xU3.mjs → mcp-_o6cMS6m.mjs} +347 -158
  148. package/.output/server/chunks/build/mcp-_o6cMS6m.mjs.map +1 -0
  149. package/.output/server/chunks/build/{notifications-hJj8tbAT.mjs → notifications-Dzm9c0u_.mjs} +4 -3
  150. package/.output/server/chunks/build/notifications-Dzm9c0u_.mjs.map +1 -0
  151. package/.output/server/chunks/build/server.mjs +17 -17
  152. package/.output/server/chunks/build/{settings-metadata-Cp0dx0vm.mjs → settings-metadata-B0wo5R-W.mjs} +3 -1
  153. package/.output/server/chunks/build/settings-metadata-B0wo5R-W.mjs.map +1 -0
  154. package/.output/server/chunks/build/{settings-Ci_7EXYQ.mjs → settings-pNyPBXVa.mjs} +4 -3
  155. package/.output/server/chunks/build/settings-pNyPBXVa.mjs.map +1 -0
  156. package/.output/server/chunks/build/{storage-CM-Pd-9E.mjs → storage-XelzuyPy.mjs} +16 -182
  157. package/.output/server/chunks/build/storage-XelzuyPy.mjs.map +1 -0
  158. package/.output/server/chunks/build/{test-cases-DkGQB027.mjs → test-cases-pmOxi-AN.mjs} +5 -4
  159. package/.output/server/chunks/build/test-cases-pmOxi-AN.mjs.map +1 -0
  160. package/.output/server/chunks/build/useFormControl-BLpq1s4O.mjs +9 -0
  161. package/.output/server/chunks/build/useFormControl-BLpq1s4O.mjs.map +1 -0
  162. package/.output/server/chunks/build/useIsDesktop-BS13spVj.mjs +9 -0
  163. package/.output/server/chunks/build/useIsDesktop-BS13spVj.mjs.map +1 -0
  164. package/.output/server/chunks/build/{useSettingsNav-D2knPCqF.mjs → useSettingsNav-NjI2seBy.mjs} +5 -3
  165. package/.output/server/chunks/build/useSettingsNav-NjI2seBy.mjs.map +1 -0
  166. package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs +7 -0
  167. package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs.map +1 -0
  168. package/.output/server/chunks/build/{virtualizer-0-UBy7xl.mjs → virtualizer-ZaqK4guJ.mjs} +3 -2
  169. package/.output/server/chunks/build/virtualizer-ZaqK4guJ.mjs.map +1 -0
  170. package/.output/server/chunks/build/{wasted-time-L4kBV5Nh.mjs → wasted-time-CguAF9zc.mjs} +2 -2
  171. package/.output/server/chunks/build/wasted-time-CguAF9zc.mjs.map +1 -0
  172. package/.output/server/chunks/nitro/nitro.mjs +664 -649
  173. package/.output/server/package.json +1 -1
  174. package/package.json +1 -1
  175. package/.output/public/_nuxt/B6Jp7fpa.js +0 -46
  176. package/.output/public/_nuxt/BP_SWi7S.js +0 -1
  177. package/.output/public/_nuxt/Bf62wdzp.js +0 -1
  178. package/.output/public/_nuxt/C219JuBV.js +0 -1
  179. package/.output/public/_nuxt/CCRRqXez.js +0 -1
  180. package/.output/public/_nuxt/CX1dcT4v.js +0 -1
  181. package/.output/public/_nuxt/CdME81ij.js +0 -2
  182. package/.output/public/_nuxt/Dsk4Ic18.js +0 -7
  183. package/.output/public/_nuxt/HoKG9cc2.js +0 -1
  184. package/.output/public/_nuxt/Kc7La4sL.js +0 -5
  185. package/.output/public/_nuxt/WctJXszi.js +0 -3
  186. package/.output/public/_nuxt/builds/meta/5182c9fb-56a6-4df2-9685-4020a08ce7a5.json +0 -1
  187. package/.output/public/_nuxt/entry.BsmKRJzR.css +0 -1
  188. package/.output/public/_nuxt/jIF87ALb.js +0 -1
  189. package/.output/server/chunks/build/Checkbox-7ZiMz60w.mjs.map +0 -1
  190. package/.output/server/chunks/build/CiEnvCard-DNxBVvx4.mjs.map +0 -1
  191. package/.output/server/chunks/build/ProjectTestCasesTable-9418EI8J.mjs.map +0 -1
  192. package/.output/server/chunks/build/Select-COwTIQlV.mjs.map +0 -1
  193. package/.output/server/chunks/build/Switch-htSKgC38.mjs.map +0 -1
  194. package/.output/server/chunks/build/about-FB9PYAHK.mjs +0 -313
  195. package/.output/server/chunks/build/about-FB9PYAHK.mjs.map +0 -1
  196. package/.output/server/chunks/build/default-BfMirIgG.mjs.map +0 -1
  197. package/.output/server/chunks/build/edit-Dsf11mL5.mjs.map +0 -1
  198. package/.output/server/chunks/build/mcp-CXwa3xU3.mjs.map +0 -1
  199. package/.output/server/chunks/build/notifications-hJj8tbAT.mjs.map +0 -1
  200. package/.output/server/chunks/build/settings-Ci_7EXYQ.mjs.map +0 -1
  201. package/.output/server/chunks/build/settings-metadata-Cp0dx0vm.mjs.map +0 -1
  202. package/.output/server/chunks/build/storage-CM-Pd-9E.mjs.map +0 -1
  203. package/.output/server/chunks/build/test-cases-DkGQB027.mjs.map +0 -1
  204. package/.output/server/chunks/build/useFormControl-DFTjniPG.mjs +0 -19
  205. package/.output/server/chunks/build/useFormControl-DFTjniPG.mjs.map +0 -1
  206. package/.output/server/chunks/build/useSettingsNav-D2knPCqF.mjs.map +0 -1
  207. package/.output/server/chunks/build/virtualizer-0-UBy7xl.mjs.map +0 -1
  208. package/.output/server/chunks/build/wasted-time-L4kBV5Nh.mjs.map +0 -1
@@ -1,2 +1,2 @@
1
- import{a8 as S,v as N}from"./BPKwYP2Q.js";const y=43200,P=1440,k=Symbol.for("constructDateFrom");function D(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&k in e?e[k](t):e instanceof Date?new e.constructor(t):new Date(t)}function g(e,t){return D(e,e)}let $={};function F(){return $}function C(e){const t=g(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}function x(e,...t){const n=D.bind(null,e||t.find(r=>typeof r=="object"));return t.map(n)}function w(e,t){const n=+g(e)-+g(t);return n<0?-1:n>0?1:n}function O(e){return D(e,Date.now())}function I(e,t,n){const[r,a]=x(n?.in,e,t),u=r.getFullYear()-a.getFullYear(),i=r.getMonth()-a.getMonth();return u*12+i}function L(e){return t=>{const r=(e?Math[e]:Math.trunc)(t);return r===0?0:r}}function j(e,t){return+g(e)-+g(t)}function _(e,t){const n=g(e);return n.setHours(23,59,59,999),n}function X(e,t){const n=g(e),r=n.getMonth();return n.setFullYear(n.getFullYear(),r+1,0),n.setHours(23,59,59,999),n}function z(e,t){const n=g(e);return+_(n)==+X(n)}function E(e,t,n){const[r,a,u]=x(n?.in,e,e,t),i=w(a,u),o=Math.abs(I(a,u));if(o<1)return 0;a.getMonth()===1&&a.getDate()>27&&a.setDate(30),a.setMonth(a.getMonth()-i*o);let c=w(a,u)===-i;z(r)&&o===1&&w(r,u)===1&&(c=!1);const l=i*(o-+c);return l===0?0:l}function B(e,t,n){const r=j(e,t)/1e3;return L(n?.roundingMethod)(r)}const R={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Y=(e,t,n)=>{let r;const a=R[e];return typeof a=="string"?r=a:t===1?r=a.one:r=a.other.replace("{{count}}",t.toString()),n?.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function v(e){return(t={})=>{const n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}const H={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},U={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},V={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},q={date:v({formats:H,defaultWidth:"full"}),time:v({formats:U,defaultWidth:"full"}),dateTime:v({formats:V,defaultWidth:"full"})},J={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},Q=(e,t,n,r)=>J[e];function p(e){return(t,n)=>{const r=n?.context?String(n.context):"standalone";let a;if(r==="formatting"&&e.formattingValues){const i=e.defaultFormattingWidth||e.defaultWidth,o=n?.width?String(n.width):i;a=e.formattingValues[o]||e.formattingValues[i]}else{const i=e.defaultWidth,o=n?.width?String(n.width):e.defaultWidth;a=e.values[o]||e.values[i]}const u=e.argumentCallback?e.argumentCallback(t):t;return a[u]}}const G={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},K={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Z={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},ee={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},te={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},ne={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},re=(e,t)=>{const n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},ae={ordinalNumber:re,era:p({values:G,defaultWidth:"wide"}),quarter:p({values:K,defaultWidth:"wide",argumentCallback:e=>e-1}),month:p({values:Z,defaultWidth:"wide"}),day:p({values:ee,defaultWidth:"wide"}),dayPeriod:p({values:te,defaultWidth:"wide",formattingValues:ne,defaultFormattingWidth:"wide"})};function b(e){return(t,n={})=>{const r=n.width,a=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],u=t.match(a);if(!u)return null;const i=u[0],o=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],c=Array.isArray(o)?ie(o,m=>m.test(i)):oe(o,m=>m.test(i));let l;l=e.valueCallback?e.valueCallback(c):c,l=n.valueCallback?n.valueCallback(l):l;const d=t.slice(i.length);return{value:l,rest:d}}}function oe(e,t){for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function ie(e,t){for(let n=0;n<e.length;n++)if(t(e[n]))return n}function se(e){return(t,n={})=>{const r=t.match(e.matchPattern);if(!r)return null;const a=r[0],u=t.match(e.parsePattern);if(!u)return null;let i=e.valueCallback?e.valueCallback(u[0]):u[0];i=n.valueCallback?n.valueCallback(i):i;const o=t.slice(a.length);return{value:i,rest:o}}}const ue=/^(\d+)(th|st|nd|rd)?/i,ce=/\d+/i,le={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},fe={any:[/^b/i,/^(a|c)/i]},de={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},me={any:[/1/i,/2/i,/3/i,/4/i]},he={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},ge={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},pe={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},be={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},ye={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},we={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Me={ordinalNumber:se({matchPattern:ue,parsePattern:ce,valueCallback:e=>parseInt(e,10)}),era:b({matchPatterns:le,defaultMatchWidth:"wide",parsePatterns:fe,defaultParseWidth:"any"}),quarter:b({matchPatterns:de,defaultMatchWidth:"wide",parsePatterns:me,defaultParseWidth:"any",valueCallback:e=>e+1}),month:b({matchPatterns:he,defaultMatchWidth:"wide",parsePatterns:ge,defaultParseWidth:"any"}),day:b({matchPatterns:pe,defaultMatchWidth:"wide",parsePatterns:be,defaultParseWidth:"any"}),dayPeriod:b({matchPatterns:ye,defaultMatchWidth:"any",parsePatterns:we,defaultParseWidth:"any"})},T={code:"en-US",formatDistance:Y,formatLong:q,formatRelative:Q,localize:ae,match:Me,options:{weekStartsOn:0,firstWeekContainsDate:1}};function ve(e,t,n){const r=F(),a=n?.locale??r.locale??T,u=2520,i=w(e,t);if(isNaN(i))throw new RangeError("Invalid time value");const o=Object.assign({},n,{addSuffix:n?.addSuffix,comparison:i}),[c,l]=x(n?.in,...i>0?[t,e]:[e,t]),d=B(l,c),m=(C(l)-C(c))/1e3,f=Math.round((d-m)/60);let s;if(f<2)return n?.includeSeconds?d<5?a.formatDistance("lessThanXSeconds",5,o):d<10?a.formatDistance("lessThanXSeconds",10,o):d<20?a.formatDistance("lessThanXSeconds",20,o):d<40?a.formatDistance("halfAMinute",0,o):d<60?a.formatDistance("lessThanXMinutes",1,o):a.formatDistance("xMinutes",1,o):f===0?a.formatDistance("lessThanXMinutes",1,o):a.formatDistance("xMinutes",f,o);if(f<45)return a.formatDistance("xMinutes",f,o);if(f<90)return a.formatDistance("aboutXHours",1,o);if(f<P){const h=Math.round(f/60);return a.formatDistance("aboutXHours",h,o)}else{if(f<u)return a.formatDistance("xDays",1,o);if(f<y){const h=Math.round(f/P);return a.formatDistance("xDays",h,o)}else if(f<y*2)return s=Math.round(f/y),a.formatDistance("aboutXMonths",s,o)}if(s=E(l,c),s<12){const h=Math.round(f/y);return a.formatDistance("xMonths",h,o)}else{const h=s%12,M=Math.trunc(s/12);return h<3?a.formatDistance("aboutXYears",M,o):h<9?a.formatDistance("overXYears",M,o):a.formatDistance("almostXYears",M+1,o)}}function De(e,t){return ve(e,O(e),t)}const xe=["years","months","weeks","days","hours","minutes","seconds"];function Se(e,t){const r=F().locale??T,a=xe,u=" ";return r.formatDistance?a.reduce((o,c)=>{const l=`x${c.replace(/(^.)/,m=>m.toUpperCase())}`,d=e[c];return d!==void 0&&e[c]?o.concat(r.formatDistance(l,d)):o},[]).join(u):""}function Ae(e){return({column:t})=>{const n=t.getIsSorted();return S("button",{class:"flex items-center gap-1 font-semibold select-none cursor-pointer hover:text-highlighted transition-colors",onClick:()=>t.toggleSorting()},[e,S(N,{name:n==="asc"?"i-lucide-chevron-up":n==="desc"?"i-lucide-chevron-down":"i-lucide-chevrons-up-down",class:["shrink-0 size-3.5",!n&&"opacity-40"]})])}}function Ne(e){if(!e||e===0)return"0 B";const t=1024,n=["B","KB","MB","GB","TB"],r=Math.floor(Math.log(e)/Math.log(t));return`${(e/Math.pow(t,r)).toFixed(2)} ${n[r]}`}function $e(e,t={}){if(e==null||e==="")return"N/A";let n;if(e instanceof Date)n=e;else{const r=typeof e=="number"?e:Number(e);!Number.isNaN(r)&&String(e).trim()!==""?n=new Date(r<1e12?r*1e3:r):n=new Date(e)}return Number.isNaN(n.getTime())?"N/A":t.dateOnly?n.toLocaleDateString():n.toLocaleString()}function Oe(e){return e?De(new Date(e),{addSuffix:!0}):"N/A"}function Ie(e){if(e==null)return"N/A";const t=Math.round(Math.abs(e));return t===0?"0 seconds":(e<0?"−":"")+Se({seconds:t/1e3})}function Le(e){if(e==null)return null;const t=Math.round(Math.abs(e)),n=e<0?"−":"";if(t<1e3)return{value:n+t,unit:"ms"};const r=t/1e3;return r<60?{value:n+Math.round(r*10)/10,unit:"s"}:{value:n+Math.round(r/60*10)/10,unit:"m"}}function je(e){switch(e){case"html":return"i-lucide-layout-dashboard";case"monocart":return"i-lucide-bar-chart-2";case"blob":return"i-lucide-download";default:return"i-lucide-file-text"}}function _e(e){if(!e)return"i-lucide-globe";const t=e.toLowerCase();return t.includes("chrome")||t.includes("chromium")?"i-simple-icons-googlechrome":t.includes("firefox")?"i-simple-icons-firefoxbrowser":t.includes("safari")||t.includes("webkit")?"i-simple-icons-safari":t.includes("edge")?"i-simple-icons-microsoftedge":"i-lucide-globe"}function Xe(e){if(!e)return"#6b7280";const t=e.toLowerCase();return t.includes("chrome")||t.includes("chromium")?"#4285F4":t.includes("firefox")?"#FF7139":t.includes("safari")||t.includes("webkit")?"#007AFF":t.includes("edge")?"#0078D7":"#6b7280"}function Pe(e){switch(e){case"passed":return"success";case"failed":return"error";case"timedout":return"warning";case"timedOut":return"warning";case"interrupted":return"warning";case"cancelled":return"neutral";case"initialising":return"info";case"running":return"info";case"finalizing":return"info";default:return"neutral"}}function ze(e){return e==="timedOut"||e==="timedout"?"failed":e==="didnotrun"?"didn't run":e==="never-run"?"never run":e}function Ee(e){return e&&{open:"warning",resolved:"success",ignored:"neutral"}[e]||"neutral"}function Be(e){return e&&{timeout:"warning",assertion:"error","strict-mode":"info",navigation:"secondary",crash:"error",unknown:"neutral"}[e]||"neutral"}function Re(){const e=Math.floor(Math.random()*360),t=65,n=50,r=(1-Math.abs(2*n/100-1))*t/100,a=r*(1-Math.abs(e/60%2-1)),u=n/100-r/2;let i=0,o=0,c=0;e<60?(i=r,o=a):e<120?(i=a,o=r):e<180?(o=r,c=a):e<240?(o=a,c=r):e<300?(i=a,c=r):(i=r,c=a);const l=d=>Math.round((d+u)*255).toString(16).padStart(2,"0");return`#${l(i)}${l(o)}${l(c)}`}function A(e){return!e.startsWith(".")&&!e.startsWith("/")?e:e.replace(".data/storage/","")}function Ye(e,t,n="/"){let a=`${(n||"/").replace(/\/$/,"")}/api/files/${A(e)}`;const u=/\.[a-z0-9]+$/i.test(e);return t&&!u&&(a+=`?contentType=${encodeURIComponent(t)}`),a}function He(e,t="/",n=!1){const r=(t||"/").replace(/\/$/,""),i=`${typeof location>"u"?"":location.origin}${r}/${n?"":"api/files/"}${A(e)}`;return`${r}/trace-viewer/?trace=${encodeURIComponent(i)}`}function Ue(e,t="Unknown error"){if(e&&typeof e=="object"){const n=e;return n.data?.message??n.message??t}return t}function Ve(e,t){const n=t.trim().toLowerCase();return n?e.filter(r=>r.message.toLowerCase().includes(n)||r.author.toLowerCase().includes(n)||r.sha.includes(n)||r.shortSha.includes(n)):e}function qe(e){switch(e){case"added":return{icon:"i-lucide-file-plus",color:"text-green-500",badgeColor:"success"};case"removed":return{icon:"i-lucide-file-minus",color:"text-red-500",badgeColor:"error"};case"renamed":return{icon:"i-lucide-file-symlink",color:"text-blue-500",badgeColor:"info"};default:return{icon:"i-lucide-file-pen-line",color:"text-gray-400",badgeColor:"neutral"}}}const Je={add:"bg-green-50 dark:bg-green-950/30 text-green-800 dark:text-green-300",remove:"bg-red-50 dark:bg-red-950/30 text-red-800 dark:text-red-300",hunk:"bg-blue-50 dark:bg-blue-950/20 text-blue-500 dark:text-blue-400",context:"text-gray-600 dark:text-gray-400"};function Qe(e){return e.split(`
1
+ import{a8 as S,v as N}from"./D3SYPlEB.js";const y=43200,P=1440,k=Symbol.for("constructDateFrom");function D(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&k in e?e[k](t):e instanceof Date?new e.constructor(t):new Date(t)}function g(e,t){return D(e,e)}let $={};function F(){return $}function C(e){const t=g(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}function x(e,...t){const n=D.bind(null,e||t.find(r=>typeof r=="object"));return t.map(n)}function w(e,t){const n=+g(e)-+g(t);return n<0?-1:n>0?1:n}function O(e){return D(e,Date.now())}function I(e,t,n){const[r,a]=x(n?.in,e,t),u=r.getFullYear()-a.getFullYear(),i=r.getMonth()-a.getMonth();return u*12+i}function L(e){return t=>{const r=(e?Math[e]:Math.trunc)(t);return r===0?0:r}}function j(e,t){return+g(e)-+g(t)}function _(e,t){const n=g(e);return n.setHours(23,59,59,999),n}function X(e,t){const n=g(e),r=n.getMonth();return n.setFullYear(n.getFullYear(),r+1,0),n.setHours(23,59,59,999),n}function z(e,t){const n=g(e);return+_(n)==+X(n)}function E(e,t,n){const[r,a,u]=x(n?.in,e,e,t),i=w(a,u),o=Math.abs(I(a,u));if(o<1)return 0;a.getMonth()===1&&a.getDate()>27&&a.setDate(30),a.setMonth(a.getMonth()-i*o);let c=w(a,u)===-i;z(r)&&o===1&&w(r,u)===1&&(c=!1);const l=i*(o-+c);return l===0?0:l}function B(e,t,n){const r=j(e,t)/1e3;return L(n?.roundingMethod)(r)}const R={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Y=(e,t,n)=>{let r;const a=R[e];return typeof a=="string"?r=a:t===1?r=a.one:r=a.other.replace("{{count}}",t.toString()),n?.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function v(e){return(t={})=>{const n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}const H={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},U={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},V={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},q={date:v({formats:H,defaultWidth:"full"}),time:v({formats:U,defaultWidth:"full"}),dateTime:v({formats:V,defaultWidth:"full"})},J={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},Q=(e,t,n,r)=>J[e];function p(e){return(t,n)=>{const r=n?.context?String(n.context):"standalone";let a;if(r==="formatting"&&e.formattingValues){const i=e.defaultFormattingWidth||e.defaultWidth,o=n?.width?String(n.width):i;a=e.formattingValues[o]||e.formattingValues[i]}else{const i=e.defaultWidth,o=n?.width?String(n.width):e.defaultWidth;a=e.values[o]||e.values[i]}const u=e.argumentCallback?e.argumentCallback(t):t;return a[u]}}const G={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},K={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Z={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},ee={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},te={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},ne={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},re=(e,t)=>{const n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},ae={ordinalNumber:re,era:p({values:G,defaultWidth:"wide"}),quarter:p({values:K,defaultWidth:"wide",argumentCallback:e=>e-1}),month:p({values:Z,defaultWidth:"wide"}),day:p({values:ee,defaultWidth:"wide"}),dayPeriod:p({values:te,defaultWidth:"wide",formattingValues:ne,defaultFormattingWidth:"wide"})};function b(e){return(t,n={})=>{const r=n.width,a=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],u=t.match(a);if(!u)return null;const i=u[0],o=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],c=Array.isArray(o)?ie(o,m=>m.test(i)):oe(o,m=>m.test(i));let l;l=e.valueCallback?e.valueCallback(c):c,l=n.valueCallback?n.valueCallback(l):l;const d=t.slice(i.length);return{value:l,rest:d}}}function oe(e,t){for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function ie(e,t){for(let n=0;n<e.length;n++)if(t(e[n]))return n}function se(e){return(t,n={})=>{const r=t.match(e.matchPattern);if(!r)return null;const a=r[0],u=t.match(e.parsePattern);if(!u)return null;let i=e.valueCallback?e.valueCallback(u[0]):u[0];i=n.valueCallback?n.valueCallback(i):i;const o=t.slice(a.length);return{value:i,rest:o}}}const ue=/^(\d+)(th|st|nd|rd)?/i,ce=/\d+/i,le={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},fe={any:[/^b/i,/^(a|c)/i]},de={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},me={any:[/1/i,/2/i,/3/i,/4/i]},he={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},ge={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},pe={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},be={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},ye={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},we={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Me={ordinalNumber:se({matchPattern:ue,parsePattern:ce,valueCallback:e=>parseInt(e,10)}),era:b({matchPatterns:le,defaultMatchWidth:"wide",parsePatterns:fe,defaultParseWidth:"any"}),quarter:b({matchPatterns:de,defaultMatchWidth:"wide",parsePatterns:me,defaultParseWidth:"any",valueCallback:e=>e+1}),month:b({matchPatterns:he,defaultMatchWidth:"wide",parsePatterns:ge,defaultParseWidth:"any"}),day:b({matchPatterns:pe,defaultMatchWidth:"wide",parsePatterns:be,defaultParseWidth:"any"}),dayPeriod:b({matchPatterns:ye,defaultMatchWidth:"any",parsePatterns:we,defaultParseWidth:"any"})},T={code:"en-US",formatDistance:Y,formatLong:q,formatRelative:Q,localize:ae,match:Me,options:{weekStartsOn:0,firstWeekContainsDate:1}};function ve(e,t,n){const r=F(),a=n?.locale??r.locale??T,u=2520,i=w(e,t);if(isNaN(i))throw new RangeError("Invalid time value");const o=Object.assign({},n,{addSuffix:n?.addSuffix,comparison:i}),[c,l]=x(n?.in,...i>0?[t,e]:[e,t]),d=B(l,c),m=(C(l)-C(c))/1e3,f=Math.round((d-m)/60);let s;if(f<2)return n?.includeSeconds?d<5?a.formatDistance("lessThanXSeconds",5,o):d<10?a.formatDistance("lessThanXSeconds",10,o):d<20?a.formatDistance("lessThanXSeconds",20,o):d<40?a.formatDistance("halfAMinute",0,o):d<60?a.formatDistance("lessThanXMinutes",1,o):a.formatDistance("xMinutes",1,o):f===0?a.formatDistance("lessThanXMinutes",1,o):a.formatDistance("xMinutes",f,o);if(f<45)return a.formatDistance("xMinutes",f,o);if(f<90)return a.formatDistance("aboutXHours",1,o);if(f<P){const h=Math.round(f/60);return a.formatDistance("aboutXHours",h,o)}else{if(f<u)return a.formatDistance("xDays",1,o);if(f<y){const h=Math.round(f/P);return a.formatDistance("xDays",h,o)}else if(f<y*2)return s=Math.round(f/y),a.formatDistance("aboutXMonths",s,o)}if(s=E(l,c),s<12){const h=Math.round(f/y);return a.formatDistance("xMonths",h,o)}else{const h=s%12,M=Math.trunc(s/12);return h<3?a.formatDistance("aboutXYears",M,o):h<9?a.formatDistance("overXYears",M,o):a.formatDistance("almostXYears",M+1,o)}}function De(e,t){return ve(e,O(e),t)}const xe=["years","months","weeks","days","hours","minutes","seconds"];function Se(e,t){const r=F().locale??T,a=xe,u=" ";return r.formatDistance?a.reduce((o,c)=>{const l=`x${c.replace(/(^.)/,m=>m.toUpperCase())}`,d=e[c];return d!==void 0&&e[c]?o.concat(r.formatDistance(l,d)):o},[]).join(u):""}function Ae(e){return({column:t})=>{const n=t.getIsSorted();return S("button",{class:"flex items-center gap-1 font-semibold select-none cursor-pointer hover:text-highlighted transition-colors",onClick:()=>t.toggleSorting()},[e,S(N,{name:n==="asc"?"i-lucide-chevron-up":n==="desc"?"i-lucide-chevron-down":"i-lucide-chevrons-up-down",class:["shrink-0 size-3.5",!n&&"opacity-40"]})])}}function Ne(e){if(!e||e===0)return"0 B";const t=1024,n=["B","KB","MB","GB","TB"],r=Math.floor(Math.log(e)/Math.log(t));return`${(e/Math.pow(t,r)).toFixed(2)} ${n[r]}`}function $e(e,t={}){if(e==null||e==="")return"N/A";let n;if(e instanceof Date)n=e;else{const r=typeof e=="number"?e:Number(e);!Number.isNaN(r)&&String(e).trim()!==""?n=new Date(r<1e12?r*1e3:r):n=new Date(e)}return Number.isNaN(n.getTime())?"N/A":t.dateOnly?n.toLocaleDateString():n.toLocaleString()}function Oe(e){return e?De(new Date(e),{addSuffix:!0}):"N/A"}function Ie(e){if(e==null)return"N/A";const t=Math.round(Math.abs(e));return t===0?"0 seconds":(e<0?"−":"")+Se({seconds:t/1e3})}function Le(e){if(e==null)return null;const t=Math.round(Math.abs(e)),n=e<0?"−":"";if(t<1e3)return{value:n+t,unit:"ms"};const r=t/1e3;return r<60?{value:n+Math.round(r*10)/10,unit:"s"}:{value:n+Math.round(r/60*10)/10,unit:"m"}}function je(e){switch(e){case"html":return"i-lucide-layout-dashboard";case"monocart":return"i-lucide-bar-chart-2";case"blob":return"i-lucide-download";default:return"i-lucide-file-text"}}function _e(e){if(!e)return"i-lucide-globe";const t=e.toLowerCase();return t.includes("chrome")||t.includes("chromium")?"i-simple-icons-googlechrome":t.includes("firefox")?"i-simple-icons-firefoxbrowser":t.includes("safari")||t.includes("webkit")?"i-simple-icons-safari":t.includes("edge")?"i-simple-icons-microsoftedge":"i-lucide-globe"}function Xe(e){if(!e)return"#6b7280";const t=e.toLowerCase();return t.includes("chrome")||t.includes("chromium")?"#4285F4":t.includes("firefox")?"#FF7139":t.includes("safari")||t.includes("webkit")?"#007AFF":t.includes("edge")?"#0078D7":"#6b7280"}function Pe(e){switch(e){case"passed":return"success";case"failed":return"error";case"timedout":return"warning";case"timedOut":return"warning";case"interrupted":return"warning";case"cancelled":return"neutral";case"initialising":return"info";case"running":return"info";case"finalizing":return"info";default:return"neutral"}}function ze(e){return e==="timedOut"||e==="timedout"?"failed":e==="didnotrun"?"didn't run":e==="never-run"?"never run":e}function Ee(e){return e&&{open:"warning",resolved:"success",ignored:"neutral"}[e]||"neutral"}function Be(e){return e&&{timeout:"warning",assertion:"error","strict-mode":"info",navigation:"secondary",crash:"error",unknown:"neutral"}[e]||"neutral"}function Re(){const e=Math.floor(Math.random()*360),t=65,n=50,r=(1-Math.abs(2*n/100-1))*t/100,a=r*(1-Math.abs(e/60%2-1)),u=n/100-r/2;let i=0,o=0,c=0;e<60?(i=r,o=a):e<120?(i=a,o=r):e<180?(o=r,c=a):e<240?(o=a,c=r):e<300?(i=a,c=r):(i=r,c=a);const l=d=>Math.round((d+u)*255).toString(16).padStart(2,"0");return`#${l(i)}${l(o)}${l(c)}`}function A(e){return!e.startsWith(".")&&!e.startsWith("/")?e:e.replace(".data/storage/","")}function Ye(e,t,n="/"){let a=`${(n||"/").replace(/\/$/,"")}/api/files/${A(e)}`;const u=/\.[a-z0-9]+$/i.test(e);return t&&!u&&(a+=`?contentType=${encodeURIComponent(t)}`),a}function He(e,t="/",n=!1){const r=(t||"/").replace(/\/$/,""),i=`${typeof location>"u"?"":location.origin}${r}/${n?"":"api/files/"}${A(e)}`;return`${r}/trace-viewer/?trace=${encodeURIComponent(i)}`}function Ue(e,t="Unknown error"){if(e&&typeof e=="object"){const n=e;return n.data?.message??n.message??t}return t}function Ve(e,t){const n=t.trim().toLowerCase();return n?e.filter(r=>r.message.toLowerCase().includes(n)||r.author.toLowerCase().includes(n)||r.sha.includes(n)||r.shortSha.includes(n)):e}function qe(e){switch(e){case"added":return{icon:"i-lucide-file-plus",color:"text-green-500",badgeColor:"success"};case"removed":return{icon:"i-lucide-file-minus",color:"text-red-500",badgeColor:"error"};case"renamed":return{icon:"i-lucide-file-symlink",color:"text-blue-500",badgeColor:"info"};default:return{icon:"i-lucide-file-pen-line",color:"text-gray-400",badgeColor:"neutral"}}}const Je={add:"bg-green-50 dark:bg-green-950/30 text-green-800 dark:text-green-300",remove:"bg-red-50 dark:bg-red-950/30 text-red-800 dark:text-red-300",hunk:"bg-blue-50 dark:bg-blue-950/20 text-blue-500 dark:text-blue-400",context:"text-gray-600 dark:text-gray-400"};function Qe(e){return e.split(`
2
2
  `).map(t=>t.startsWith("+")&&!t.startsWith("+++")?{type:"add",text:t}:t.startsWith("-")&&!t.startsWith("---")?{type:"remove",text:t}:t.startsWith("@@")?{type:"hunk",text:t}:{type:"context",text:t})}const ke="\x1B",Ce={30:"#000000",31:"#dc2626",32:"#16a34a",33:"#d97706",34:"#2563eb",35:"#9333ea",36:"#0891b2",37:"#9ca3af"},We={40:"#000000",41:"#dc2626",42:"#16a34a",43:"#d97706",44:"#2563eb",45:"#9333ea",46:"#0891b2",47:"#9ca3af"},W=new RegExp(`${ke}\\[([0-9;]*)m`,"g");function Fe(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Ge(e){const t=[];let n=0,r,a,u=!1,i=!1,o=!1,c=!1;const l=f=>{if(!f)return;const s=[];u&&s.push("font-weight:600"),i&&s.push("opacity:.7"),o&&s.push("font-style:italic"),c&&s.push("text-decoration:underline"),r&&s.push(`color:${r}`),a&&s.push(`background:${a}`);const h=Fe(f);t.push(s.length?`<span style="${s.join(";")}">${h}</span>`:h)},d=f=>{for(const s of f)s===0?(r=void 0,a=void 0,u=!1,i=!1,o=!1,c=!1):s===1?u=!0:s===2?i=!0:s===3?o=!0:s===4?c=!0:s===22?(u=!1,i=!1):s===23?o=!1:s===24?c=!1:s>=30&&s<=37?r=Ce[s]:s===39?r=void 0:s>=40&&s<=47?a=We[s]:s===49&&(a=void 0)};let m;for(;(m=W.exec(e))!==null;){l(e.slice(n,m.index)),n=W.lastIndex;const f=m[1]?m[1].split(";").map(Number):[0];d(f)}return l(e.slice(n)),t.join("")}function Ke(e,t=120){if(!e)return"";const n=e.replace(/\n/g," · ");return n.length<=t?n:n.slice(0,t)+"…"}function Ze(e){return e.totalTests>0?Math.round(e.passedTests/e.totalTests*100):0}function et(e){return e==="flaky"?"warning":e==="never-run"?"neutral":e==="didnotrun"?"warning":Pe(e)}function tt(e){switch(e.toUpperCase()){case"GET":return"info";case"POST":return"success";case"DELETE":return"error";case"PUT":case"PATCH":return"warning";default:return"neutral"}}function nt(e){return!e||e<=0?"neutral":e>=500?"error":e>=400?"warning":"success"}export{Re as A,Ze as B,Ee as a,Ve as b,Be as c,Ke as d,Ue as e,Oe as f,Ae as g,Ie as h,Pe as i,ze as j,Ne as k,Ye as l,tt as m,nt as n,Le as o,$e as p,Je as q,Ge as r,qe as s,et as t,Qe as u,He as v,A as w,je as x,_e as y,Xe as z};
@@ -0,0 +1 @@
1
+ import{_ as L}from"./D51_cB9D.js";import{d as M,b as z,w as I,c as u,i as t,k as s,f as O,q as w,j as a,g as r,F as x,P as j,o as c,v as A,m as p,y as N,t as i,_ as q,l as W,r as y}from"./D3SYPlEB.js";import{_ as G}from"./AjuKBlzz.js";import{_ as H}from"./empGC_x-.js";import{_ as J}from"./CCsl9MOZ.js";import{_ as K}from"./Db_-yjYg.js";import{_ as Q}from"./l0QnzFNM.js";import{k as B}from"./BUMZHDRC.js";import{e as X,g as Y}from"./C8cz5feG.js";import{u as Z}from"./Doul3p1_.js";import"./D3MWm6JP.js";import"./CCw3Tx4S.js";import"./DoFSKAvY.js";import"./Cx65B3c3.js";import"./BAkJhSAW.js";import"./r3SBLxtE.js";const ee={class:"space-y-6"},te={class:"space-y-3"},se={class:"flex items-center gap-2 text-sm text-muted"},oe={class:"grid grid-cols-1 sm:grid-cols-2 gap-2 text-sm"},ae={class:"text-muted"},ne={class:"flex items-center gap-2 font-mono"},le={class:"text-xs"},ie={key:0,class:"flex items-center gap-2 py-4 text-muted"},re={key:1,class:"grid grid-cols-2 sm:grid-cols-3 gap-4"},de={class:"space-y-1"},ce={class:"text-2xl font-semibold"},me={class:"space-y-1"},ue={class:"text-2xl font-semibold"},pe={class:"space-y-1"},_e={class:"text-2xl font-semibold"},fe={class:"space-y-1"},ge={class:"text-2xl font-semibold"},ve={class:"space-y-1"},xe={class:"text-2xl font-semibold"},ye={class:"space-y-1"},be={class:"text-2xl font-semibold"},he={class:"space-y-1"},Ce={class:"text-2xl font-semibold"},ke={class:"flex flex-col sm:flex-row items-start sm:items-center gap-4"},je=M({__name:"storage",async setup(Se){let _,b;const h=z(),{data:n,refresh:C,pending:k}=([_,b]=I(()=>Z("/api/admin/stats","$-MAlPFSlMr")),_=await _,b(),_),$=X("storage").map(o=>({name:o,...Y(o)})),T=[{label:"7 days",value:7},{label:"14 days",value:14},{label:"30 days",value:30},{label:"60 days",value:60},{label:"90 days",value:90},{label:"180 days",value:180},{label:"1 year",value:365}],d=y(30),m=y(!1),f=y(!1);async function V(){m.value=!1,f.value=!0;try{const o=await $fetch("/api/admin/cleanup",{method:"DELETE",body:{olderThanDays:d.value}});h.add({title:"Cleanup complete",description:`Deleted ${o.deletedRuns} test run(s) older than ${d.value} days.`,color:"success"}),await C()}catch(o){const e=o&&typeof o=="object"&&"data"in o?o.data?.message:void 0;h.add({title:"Cleanup failed",description:e||"An error occurred",color:"error"})}finally{f.value=!1}}return(o,e)=>{const D=L,S=A,E=G,v=H,g=q,F=J,P=K,R=Q,U=j;return c(),u(x,null,[t("div",ee,[s(n)?(c(),O(D,{key:0,database:s(n).databaseLocation,storage:s(n).storageLocation},null,8,["database","storage"])):w("",!0),a(v,{icon:"i-lucide-server",title:"Storage backend",help:"settings.storage-backend"},{subtitle:r(()=>[...e[5]||(e[5]=[p(" Configured through environment variables. The active backend is shown read-only. ",-1)])]),default:r(()=>[t("div",te,[t("div",se,[a(S,{name:"i-lucide-info",class:"size-4"}),e[6]||(e[6]=p(" Storage backend selection (local disk or S3) and its credentials are set via the environment. Each variable below is shown read-only — hover the lock to see what it controls. ",-1))]),t("div",oe,[(c(!0),u(x,null,N(s($),l=>(c(),u(x,{key:l.name},[t("div",ae,i(l.name.replace("PIWI_S3_","S3 ").replace("PIWI_STORAGE_","Storage ")),1),t("div",ne,[t("code",le,i(l.name),1),a(E,{"env-vars":[l.name]},null,8,["env-vars"])])],64))),128))])])]),_:1}),a(v,{icon:"i-lucide-database",title:"Storage statistics",help:"settings.storage-stats"},{footer:r(()=>[a(g,{icon:"i-lucide-refresh-cw",variant:"outline",size:"sm",loading:s(k),label:"Refresh",onClick:e[0]||(e[0]=l=>s(C)())},null,8,["loading"])]),default:r(()=>[s(k)?(c(),u("div",ie,[a(S,{name:"i-lucide-loader-2",class:"animate-spin"}),e[7]||(e[7]=p(" Loading… ",-1))])):s(n)?(c(),u("div",re,[t("div",de,[e[8]||(e[8]=t("p",{class:"text-sm text-muted"},"Projects",-1)),t("p",ce,i(s(n).totalProjects),1)]),t("div",me,[e[9]||(e[9]=t("p",{class:"text-sm text-muted"},"Test runs",-1)),t("p",ue,i(s(n).totalRuns),1)]),t("div",pe,[e[10]||(e[10]=t("p",{class:"text-sm text-muted"},"Test cases (unique)",-1)),t("p",_e,i(s(n).totalTestCases),1)]),t("div",fe,[e[11]||(e[11]=t("p",{class:"text-sm text-muted"},"Test results",-1)),t("p",ge,i(s(n).totalRunsCases),1)]),t("div",ve,[e[12]||(e[12]=t("p",{class:"text-sm text-muted"},"Stored files",-1)),t("p",xe,i(s(n).totalFiles),1)]),t("div",ye,[e[13]||(e[13]=t("p",{class:"text-sm text-muted"},"File size (DB)",-1)),t("p",be,i(("formatBytes"in o?o.formatBytes:s(B))(s(n).totalFileSize)),1)]),t("div",he,[e[14]||(e[14]=t("p",{class:"text-sm text-muted"},"Storage on disk",-1)),t("p",Ce,i(("formatBytes"in o?o.formatBytes:s(B))(s(n).storageSizeOnDisk)),1)])])):w("",!0)]),_:1}),a(v,{icon:"i-lucide-trash-2",title:"Cleanup old test runs",help:"settings.cleanup"},{default:r(()=>[t("div",ke,[a(P,{label:"Delete runs older than",name:"period"},{default:r(()=>[a(F,{modelValue:s(d),"onUpdate:modelValue":e[1]||(e[1]=l=>W(d)?d.value=l:null),items:T},null,8,["modelValue"])]),_:1}),a(g,{icon:"i-lucide-trash-2",color:"error",variant:"soft",loading:s(f),label:"Run cleanup",class:"mt-4 sm:mt-5",onClick:e[2]||(e[2]=l=>m.value=!0)},null,8,["loading"])])]),_:1})]),a(U,null,{default:r(()=>[a(R,{open:s(m),title:"Confirm cleanup","onUpdate:open":e[4]||(e[4]=l=>m.value=l)},{body:r(()=>[t("p",null,[e[15]||(e[15]=p(" This will permanently delete all test runs older than ",-1)),t("strong",null,i(s(d))+" days",1),e[16]||(e[16]=p(", along with their associated reports, traces, and test results. This action cannot be undone. ",-1))])]),footer:r(()=>[a(g,{color:"neutral",variant:"ghost",label:"Cancel",onClick:e[3]||(e[3]=l=>m.value=!1)}),a(g,{color:"error",label:"Delete",icon:"i-lucide-trash-2",loading:s(f),onClick:V},null,8,["loading"])]),_:1},8,["open"])]),_:1})],64)}}});export{je as default};
@@ -1 +1 @@
1
- import{_ as oe}from"./CQeMb57w.js";import{_ as se}from"./Br2K9yi_.js";import{d as ne,b as le,u as ie,a as re,w as de,B as ce,C as ue,c,k as t,f as p,g as o,F as R,j as s,aa as me,q as w,o as l,i as d,m as r,D as pe,l as E,_ as fe,v as ye,t as H,y as ge,s as ve,h as $,r as u,K as we}from"./BPKwYP2Q.js";import{_ as _e}from"./DdbrJwT-.js";import{_ as ke}from"./DhA17dqR.js";import{u as he}from"./BIf1R_fu.js";import"./r3SBLxtE.js";import"./DuMv-ugy.js";import"./DRtTLQri.js";import"./B7yG1G_l.js";const xe={class:"space-y-6"},be={class:"inline-flex items-center gap-1.5"},Pe={class:"flex justify-end"},Ce={class:"space-y-3"},Ve={key:0,class:"flex items-center gap-2 text-sm text-success-600 dark:text-success-400"},Ee={key:1,class:"flex items-center gap-2 text-sm text-warning-600 dark:text-warning-400"},$e={key:2,class:"text-xs text-gray-400"},Se={class:"flex justify-end"},Ae={class:"space-y-3"},Ue={class:"flex items-center gap-2 text-sm"},Be={key:1,class:"text-xs text-gray-400",title:"Set a password first to keep a way to sign in"},Fe={key:2,class:"text-xs text-gray-400"},Ne={class:"space-y-4"},Te={class:"flex justify-end"},qe={class:"text-sm text-gray-500"},Ke=ne({__name:"account",async setup(ze){let S,I;const i=le(),y=ie(),L=re(),U=we(),{data:m,refresh:A}=([S,I]=de(()=>he("/api/auth/me","$lZCnZ7VEtB")),S=await S,I(),S),g=$(()=>m.value?.user?.oauthProvider??null),O=$(()=>!!m.value?.user?.hasPassword),_=$(()=>!!g.value&&!O.value),B={google:{label:"Google",icon:"i-lucide-chrome"},github:{label:"GitHub",icon:"i-lucide-github"}},j=$(()=>U.public.demoMode?[]:(U.public.oauthProviders||[]).filter(a=>B[a])),k=u(""),F=u(!1),h=u(""),N=u(!1),T=u(!1),x=u(""),f=u(""),b=u(""),q=u(!1),z=u("");ce(()=>m.value?.user,a=>{a&&(k.value=a.name||"",h.value=a.email||"")},{immediate:!0});const M={"already-linked":"That provider account is already linked to another user.","link-requires-login":"Please sign in before connecting a provider.","domain-not-allowed":"That account’s email domain is not allowed.","org-not-allowed":"You are not a member of an allowed organization.","invalid-state":"Connecting failed (invalid state). Please try again.","access-denied":"Authorization was cancelled.","oauth-failed":"Connecting the provider failed."};ue(()=>{y.query.verified&&i.add({title:"Email verified",color:"success"}),y.query.linked&&(i.add({title:"Account connected",color:"success"}),A());const a=y.query.error;a&&i.add({title:"Could not connect account",description:M[a]||"Please try again.",color:"error"}),(y.query.linked||y.query.error||y.query.verified)&&L.replace({query:{}})});async function Y(){F.value=!0;try{await $fetch(`/api/users/${m.value?.user?.id}`,{method:"PATCH",body:{name:k.value||null}}),await A(),i.add({title:"Display name updated",color:"success"})}catch(a){i.add({title:"Failed to update display name",description:String(a?.message??a),color:"error"})}finally{F.value=!1}}async function G(){N.value=!0;try{await $fetch(`/api/users/${m.value?.user?.id}`,{method:"PATCH",body:{email:h.value||null}}),await A(),i.add({title:"Email updated",color:"success"})}catch(a){i.add({title:"Failed to update email",description:String(a?.message??a),color:"error"})}finally{N.value=!1}}async function K(){T.value=!0;try{await $fetch("/api/auth/send-verify-email",{method:"POST"}),i.add({title:"Verification email sent",description:"Check your inbox.",color:"success"})}catch(a){i.add({title:"Failed to send verification",description:String(a?.message??a),color:"error"})}finally{T.value=!1}}async function W(){if(f.value.length<8){i.add({title:"Password too short",description:"At least 8 characters required",color:"error"});return}if(f.value!==b.value){i.add({title:"Passwords do not match",color:"error"});return}q.value=!0;try{await $fetch("/api/auth/change-password",{method:"POST",body:{currentPassword:x.value,newPassword:f.value}}),x.value="",f.value="",b.value="",i.add({title:"Password changed",color:"success"})}catch(a){i.add({title:"Failed to change password",description:String(a?.message??a),color:"error"})}finally{q.value=!1}}function Z(a){window.location.href=`/api/auth/oauth/${a}/login?link=1`}async function J(a){z.value=a;try{await $fetch(`/api/auth/oauth/${a}/unlink`,{method:"POST"}),await A(),i.add({title:"Account disconnected",color:"success"})}catch(e){i.add({title:"Failed to disconnect",description:String(e?.data?.message??e?.message??e),color:"error"})}finally{z.value=""}}const Q=$(()=>U.public.authEnabled);return(a,e)=>{const X=oe,ee=se,P=pe,C=_e,v=fe,V=ke,D=ye,te=ve;return l(),c("div",xe,[t(Q)?t(m)?.user?(l(),c(R,{key:1},[s(V,{icon:"i-lucide-user",title:"Display name",help:"account.display-name"},{footer:o(()=>[d("div",Pe,[s(v,{color:"primary",loading:t(F),icon:"i-lucide-save",onClick:Y},{default:o(()=>[...e[8]||(e[8]=[r(" Save name ",-1)])]),_:1},8,["loading"])])]),default:o(()=>[s(C,{label:"Display name",name:"name"},{default:o(()=>[s(P,{modelValue:t(k),"onUpdate:modelValue":e[0]||(e[0]=n=>E(k)?k.value=n:null),placeholder:"Your display name (optional)",class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),s(V,{icon:"i-lucide-mail",title:"Email address",help:"account.email"},me({default:o(()=>[d("div",Ce,[t(m).user.emailVerified?(l(),c("div",Ve,[s(D,{name:"i-lucide-circle-check-big",class:"size-4"}),e[9]||(e[9]=r(" Verified ",-1))])):t(m).user.email?(l(),c("div",Ee,[s(D,{name:"i-lucide-circle-alert",class:"size-4"}),e[11]||(e[11]=r(" Not verified ",-1)),t(_)?w("",!0):(l(),p(v,{key:0,size:"xs",variant:"soft",color:"warning",loading:t(T),onClick:K},{default:o(()=>[...e[10]||(e[10]=[r(" Send verification email ",-1)])]),_:1},8,["loading"]))])):w("",!0),s(C,{label:"Email",name:"email"},{default:o(()=>[s(P,{modelValue:t(h),"onUpdate:modelValue":e[1]||(e[1]=n=>E(h)?h.value=n:null),type:"email",placeholder:"you@example.com",disabled:t(_),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),t(_)?(l(),c("p",$e,[e[12]||(e[12]=r(" Email is managed by ",-1)),d("strong",null,H(t(g)),1),e[13]||(e[13]=r(". ",-1))])):w("",!0)])]),_:2},[t(_)?void 0:{name:"footer",fn:o(()=>[d("div",Se,[s(v,{color:"primary",loading:t(N),icon:"i-lucide-save",onClick:G},{default:o(()=>[...e[14]||(e[14]=[r(" Save email ",-1)])]),_:1},8,["loading"])])]),key:"0"}]),1024),t(j).length>0?(l(),p(V,{key:0,icon:"i-lucide-link",title:"Connected accounts",help:"account.connected-accounts"},{default:o(()=>[d("div",Ae,[(l(!0),c(R,null,ge(t(j),n=>(l(),c("div",{key:n,class:"flex items-center justify-between gap-3 rounded-md border border-default px-3 py-2"},[d("div",Ue,[s(D,{name:B[n].icon,class:"size-5"},null,8,["name"]),d("span",null,H(B[n].label),1),t(g)===n?(l(),p(te,{key:0,color:"success",variant:"subtle",size:"sm"},{default:o(()=>[...e[15]||(e[15]=[r("Connected",-1)])]),_:1})):w("",!0)]),t(g)===n?(l(),c(R,{key:0},[t(O)?(l(),p(v,{key:0,size:"xs",color:"error",variant:"soft",icon:"i-lucide-unlink",loading:t(z)===n,onClick:ae=>J(n)},{default:o(()=>[...e[16]||(e[16]=[r(" Disconnect ",-1)])]),_:1},8,["loading","onClick"])):(l(),c("span",Be," Set a password to disconnect "))],64)):t(g)?(l(),c("span",Fe,"Another provider is connected")):(l(),p(v,{key:1,size:"xs",variant:"outline",color:"neutral",icon:"i-lucide-plus",onClick:ae=>Z(n)},{default:o(()=>[...e[17]||(e[17]=[r(" Connect ",-1)])]),_:1},8,["onClick"]))]))),128)),e[18]||(e[18]=d("p",{class:"text-xs text-gray-400"},"One provider can be connected per account.",-1))])]),_:1})):w("",!0),t(_)?(l(),p(V,{key:2,icon:"i-lucide-lock",title:"Password"},{default:o(()=>[d("p",qe,[e[20]||(e[20]=r(" Your account is managed by ",-1)),d("strong",null,H(t(g)),1),e[21]||(e[21]=r(". Password management is handled by that provider. ",-1))])]),_:1})):(l(),p(V,{key:1,icon:"i-lucide-lock",title:"Change password",help:"account.password"},{footer:o(()=>[d("div",Te,[s(v,{color:"primary",loading:t(q),icon:"i-lucide-key-round",onClick:W},{default:o(()=>[...e[19]||(e[19]=[r(" Change password ",-1)])]),_:1},8,["loading"])])]),default:o(()=>[d("div",Ne,[s(C,{label:"Current password",name:"currentPassword"},{default:o(()=>[s(P,{modelValue:t(x),"onUpdate:modelValue":e[2]||(e[2]=n=>E(x)?x.value=n:null),type:"password",placeholder:"Current password",autocomplete:"current-password",class:"w-full"},null,8,["modelValue"])]),_:1}),s(C,{label:"New password",name:"newPassword",description:"Minimum 8 characters"},{default:o(()=>[s(P,{modelValue:t(f),"onUpdate:modelValue":e[3]||(e[3]=n=>E(f)?f.value=n:null),type:"password",placeholder:"New password",autocomplete:"new-password",class:"w-full"},null,8,["modelValue"])]),_:1}),s(C,{label:"Confirm new password",name:"confirmPassword"},{default:o(()=>[s(P,{modelValue:t(b),"onUpdate:modelValue":e[4]||(e[4]=n=>E(b)?b.value=n:null),type:"password",placeholder:"Repeat new password",autocomplete:"new-password",class:"w-full"},null,8,["modelValue"])]),_:1})])]),_:1}))],64)):w("",!0):(l(),p(ee,{key:0,color:"warning",icon:"i-lucide-lock-open",title:"Authentication disabled",description:"Enable PIWI_AUTH_ENABLED=true to manage your account."},{description:o(()=>[d("span",be,[e[5]||(e[5]=r(" Enable ",-1)),e[6]||(e[6]=d("code",{class:"font-mono text-xs"},"PIWI_AUTH_ENABLED=true",-1)),e[7]||(e[7]=r(" to manage your account. ",-1)),s(X,{topic:"settings.auth-toggle"})])]),_:1}))])}}});export{Ke as default};
1
+ import{_ as oe}from"./C8cz5feG.js";import{_ as se}from"./B6IHiVa1.js";import{d as ne,b as le,u as ie,a as re,w as de,B as ce,C as ue,c,k as t,f as p,g as o,F as R,j as s,aa as me,q as w,o as l,i as d,m as r,D as pe,l as E,_ as fe,v as ye,t as H,y as ge,s as ve,h as $,r as u,K as we}from"./D3SYPlEB.js";import{_ as _e}from"./Db_-yjYg.js";import{_ as ke}from"./empGC_x-.js";import{u as he}from"./Doul3p1_.js";import"./r3SBLxtE.js";import"./D3MWm6JP.js";import"./BAkJhSAW.js";import"./DoFSKAvY.js";const xe={class:"space-y-6"},be={class:"inline-flex items-center gap-1.5"},Pe={class:"flex justify-end"},Ce={class:"space-y-3"},Ve={key:0,class:"flex items-center gap-2 text-sm text-success-600 dark:text-success-400"},Ee={key:1,class:"flex items-center gap-2 text-sm text-warning-600 dark:text-warning-400"},$e={key:2,class:"text-xs text-gray-400"},Se={class:"flex justify-end"},Ae={class:"space-y-3"},Ue={class:"flex items-center gap-2 text-sm"},Be={key:1,class:"text-xs text-gray-400",title:"Set a password first to keep a way to sign in"},Fe={key:2,class:"text-xs text-gray-400"},Ne={class:"space-y-4"},Te={class:"flex justify-end"},qe={class:"text-sm text-gray-500"},Ke=ne({__name:"account",async setup(ze){let S,I;const i=le(),y=ie(),L=re(),U=we(),{data:m,refresh:A}=([S,I]=de(()=>he("/api/auth/me","$lZCnZ7VEtB")),S=await S,I(),S),g=$(()=>m.value?.user?.oauthProvider??null),O=$(()=>!!m.value?.user?.hasPassword),_=$(()=>!!g.value&&!O.value),B={google:{label:"Google",icon:"i-lucide-chrome"},github:{label:"GitHub",icon:"i-lucide-github"}},j=$(()=>U.public.demoMode?[]:(U.public.oauthProviders||[]).filter(a=>B[a])),k=u(""),F=u(!1),h=u(""),N=u(!1),T=u(!1),x=u(""),f=u(""),b=u(""),q=u(!1),z=u("");ce(()=>m.value?.user,a=>{a&&(k.value=a.name||"",h.value=a.email||"")},{immediate:!0});const M={"already-linked":"That provider account is already linked to another user.","link-requires-login":"Please sign in before connecting a provider.","domain-not-allowed":"That account’s email domain is not allowed.","org-not-allowed":"You are not a member of an allowed organization.","invalid-state":"Connecting failed (invalid state). Please try again.","access-denied":"Authorization was cancelled.","oauth-failed":"Connecting the provider failed."};ue(()=>{y.query.verified&&i.add({title:"Email verified",color:"success"}),y.query.linked&&(i.add({title:"Account connected",color:"success"}),A());const a=y.query.error;a&&i.add({title:"Could not connect account",description:M[a]||"Please try again.",color:"error"}),(y.query.linked||y.query.error||y.query.verified)&&L.replace({query:{}})});async function Y(){F.value=!0;try{await $fetch(`/api/users/${m.value?.user?.id}`,{method:"PATCH",body:{name:k.value||null}}),await A(),i.add({title:"Display name updated",color:"success"})}catch(a){i.add({title:"Failed to update display name",description:String(a?.message??a),color:"error"})}finally{F.value=!1}}async function G(){N.value=!0;try{await $fetch(`/api/users/${m.value?.user?.id}`,{method:"PATCH",body:{email:h.value||null}}),await A(),i.add({title:"Email updated",color:"success"})}catch(a){i.add({title:"Failed to update email",description:String(a?.message??a),color:"error"})}finally{N.value=!1}}async function K(){T.value=!0;try{await $fetch("/api/auth/send-verify-email",{method:"POST"}),i.add({title:"Verification email sent",description:"Check your inbox.",color:"success"})}catch(a){i.add({title:"Failed to send verification",description:String(a?.message??a),color:"error"})}finally{T.value=!1}}async function W(){if(f.value.length<8){i.add({title:"Password too short",description:"At least 8 characters required",color:"error"});return}if(f.value!==b.value){i.add({title:"Passwords do not match",color:"error"});return}q.value=!0;try{await $fetch("/api/auth/change-password",{method:"POST",body:{currentPassword:x.value,newPassword:f.value}}),x.value="",f.value="",b.value="",i.add({title:"Password changed",color:"success"})}catch(a){i.add({title:"Failed to change password",description:String(a?.message??a),color:"error"})}finally{q.value=!1}}function Z(a){window.location.href=`/api/auth/oauth/${a}/login?link=1`}async function J(a){z.value=a;try{await $fetch(`/api/auth/oauth/${a}/unlink`,{method:"POST"}),await A(),i.add({title:"Account disconnected",color:"success"})}catch(e){i.add({title:"Failed to disconnect",description:String(e?.data?.message??e?.message??e),color:"error"})}finally{z.value=""}}const Q=$(()=>U.public.authEnabled);return(a,e)=>{const X=oe,ee=se,P=pe,C=_e,v=fe,V=ke,D=ye,te=ve;return l(),c("div",xe,[t(Q)?t(m)?.user?(l(),c(R,{key:1},[s(V,{icon:"i-lucide-user",title:"Display name",help:"account.display-name"},{footer:o(()=>[d("div",Pe,[s(v,{color:"primary",loading:t(F),icon:"i-lucide-save",onClick:Y},{default:o(()=>[...e[8]||(e[8]=[r(" Save name ",-1)])]),_:1},8,["loading"])])]),default:o(()=>[s(C,{label:"Display name",name:"name"},{default:o(()=>[s(P,{modelValue:t(k),"onUpdate:modelValue":e[0]||(e[0]=n=>E(k)?k.value=n:null),placeholder:"Your display name (optional)",class:"w-full"},null,8,["modelValue"])]),_:1})]),_:1}),s(V,{icon:"i-lucide-mail",title:"Email address",help:"account.email"},me({default:o(()=>[d("div",Ce,[t(m).user.emailVerified?(l(),c("div",Ve,[s(D,{name:"i-lucide-circle-check-big",class:"size-4"}),e[9]||(e[9]=r(" Verified ",-1))])):t(m).user.email?(l(),c("div",Ee,[s(D,{name:"i-lucide-circle-alert",class:"size-4"}),e[11]||(e[11]=r(" Not verified ",-1)),t(_)?w("",!0):(l(),p(v,{key:0,size:"xs",variant:"soft",color:"warning",loading:t(T),onClick:K},{default:o(()=>[...e[10]||(e[10]=[r(" Send verification email ",-1)])]),_:1},8,["loading"]))])):w("",!0),s(C,{label:"Email",name:"email"},{default:o(()=>[s(P,{modelValue:t(h),"onUpdate:modelValue":e[1]||(e[1]=n=>E(h)?h.value=n:null),type:"email",placeholder:"you@example.com",disabled:t(_),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),t(_)?(l(),c("p",$e,[e[12]||(e[12]=r(" Email is managed by ",-1)),d("strong",null,H(t(g)),1),e[13]||(e[13]=r(". ",-1))])):w("",!0)])]),_:2},[t(_)?void 0:{name:"footer",fn:o(()=>[d("div",Se,[s(v,{color:"primary",loading:t(N),icon:"i-lucide-save",onClick:G},{default:o(()=>[...e[14]||(e[14]=[r(" Save email ",-1)])]),_:1},8,["loading"])])]),key:"0"}]),1024),t(j).length>0?(l(),p(V,{key:0,icon:"i-lucide-link",title:"Connected accounts",help:"account.connected-accounts"},{default:o(()=>[d("div",Ae,[(l(!0),c(R,null,ge(t(j),n=>(l(),c("div",{key:n,class:"flex items-center justify-between gap-3 rounded-md border border-default px-3 py-2"},[d("div",Ue,[s(D,{name:B[n].icon,class:"size-5"},null,8,["name"]),d("span",null,H(B[n].label),1),t(g)===n?(l(),p(te,{key:0,color:"success",variant:"subtle",size:"sm"},{default:o(()=>[...e[15]||(e[15]=[r("Connected",-1)])]),_:1})):w("",!0)]),t(g)===n?(l(),c(R,{key:0},[t(O)?(l(),p(v,{key:0,size:"xs",color:"error",variant:"soft",icon:"i-lucide-unlink",loading:t(z)===n,onClick:ae=>J(n)},{default:o(()=>[...e[16]||(e[16]=[r(" Disconnect ",-1)])]),_:1},8,["loading","onClick"])):(l(),c("span",Be," Set a password to disconnect "))],64)):t(g)?(l(),c("span",Fe,"Another provider is connected")):(l(),p(v,{key:1,size:"xs",variant:"outline",color:"neutral",icon:"i-lucide-plus",onClick:ae=>Z(n)},{default:o(()=>[...e[17]||(e[17]=[r(" Connect ",-1)])]),_:1},8,["onClick"]))]))),128)),e[18]||(e[18]=d("p",{class:"text-xs text-gray-400"},"One provider can be connected per account.",-1))])]),_:1})):w("",!0),t(_)?(l(),p(V,{key:2,icon:"i-lucide-lock",title:"Password"},{default:o(()=>[d("p",qe,[e[20]||(e[20]=r(" Your account is managed by ",-1)),d("strong",null,H(t(g)),1),e[21]||(e[21]=r(". Password management is handled by that provider. ",-1))])]),_:1})):(l(),p(V,{key:1,icon:"i-lucide-lock",title:"Change password",help:"account.password"},{footer:o(()=>[d("div",Te,[s(v,{color:"primary",loading:t(q),icon:"i-lucide-key-round",onClick:W},{default:o(()=>[...e[19]||(e[19]=[r(" Change password ",-1)])]),_:1},8,["loading"])])]),default:o(()=>[d("div",Ne,[s(C,{label:"Current password",name:"currentPassword"},{default:o(()=>[s(P,{modelValue:t(x),"onUpdate:modelValue":e[2]||(e[2]=n=>E(x)?x.value=n:null),type:"password",placeholder:"Current password",autocomplete:"current-password",class:"w-full"},null,8,["modelValue"])]),_:1}),s(C,{label:"New password",name:"newPassword",description:"Minimum 8 characters"},{default:o(()=>[s(P,{modelValue:t(f),"onUpdate:modelValue":e[3]||(e[3]=n=>E(f)?f.value=n:null),type:"password",placeholder:"New password",autocomplete:"new-password",class:"w-full"},null,8,["modelValue"])]),_:1}),s(C,{label:"Confirm new password",name:"confirmPassword"},{default:o(()=>[s(P,{modelValue:t(b),"onUpdate:modelValue":e[4]||(e[4]=n=>E(b)?b.value=n:null),type:"password",placeholder:"Repeat new password",autocomplete:"new-password",class:"w-full"},null,8,["modelValue"])]),_:1})])]),_:1}))],64)):w("",!0):(l(),p(ee,{key:0,color:"warning",icon:"i-lucide-lock-open",title:"Authentication disabled",description:"Enable PIWI_AUTH_ENABLED=true to manage your account."},{description:o(()=>[d("span",be,[e[5]||(e[5]=r(" Enable ",-1)),e[6]||(e[6]=d("code",{class:"font-mono text-xs"},"PIWI_AUTH_ENABLED=true",-1)),e[7]||(e[7]=r(" to manage your account. ",-1)),s(X,{topic:"settings.auth-toggle"})])]),_:1}))])}}});export{Ke as default};
@@ -1 +1 @@
1
- import{d as ee,w as te,b as oe,L as ae,c as A,i as n,k as t,f as u,g as s,j as a,F as le,P as se,o as d,_ as ne,q as m,t as j,O as re,v as ie,D as ce,M as q,ai as M,m as S,h as P,r as v,I as B,K as de}from"./BPKwYP2Q.js";import{_ as ue}from"./BVW5qIDP.js";import{_ as me}from"./BuZOa2M3.js";import{_ as pe}from"./DhA17dqR.js";import{_ as ge}from"./DdbrJwT-.js";import{o as fe,s as N,_ as xe}from"./-KQO1A4C.js";import{_ as _e}from"./nCjfWTGm.js";import{p as ve}from"./k-z_VVTK.js";import{u as be}from"./BIf1R_fu.js";import"./d5ZB3uxF.js";import"./CQeMb57w.js";import"./r3SBLxtE.js";import"./DuMv-ugy.js";import"./B7yG1G_l.js";import"./DRtTLQri.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"},Ue={class:"flex justify-center mb-4"},Ve={class:"flex items-center gap-3"},we={key:0,class:"mt-2"},Ae={class:"flex items-center gap-3"},De={key:0,class:"mt-2"},b="#6366f1",Ge=ee({__name:"tags",async setup(Fe){let y,D;const{data:z,refresh:U}=([y,D]=te(()=>be("/api/tags","$WIWNTsOq96")),y=await y,D(),y),p=oe(),{authState:I}=ae(),K=de(),V=P(()=>z.value?.tags||[]),T=P(()=>K.public.authEnabled?I.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=fe({text:N().min(1,"Tag text is required").max(50,"Tag text must be at most 50 characters"),color:N().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 W(){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 U()}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 G(){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 U()}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 H(l){f.value=l,_.value=!0}async function J(){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 U()}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,Q=me,E=pe,X=ie,h=ce,$=ge,O=xe,w=_e,Y=se;return d(),A(le,null,[n("div",ye,[t(V).length>0?(d(),u(E,{key:0,title:"Tags",count:t(V).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(Q,{data:t(V),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,j(o.original.color),1)])]),"createdAt-cell":s(({row:o})=>[n("span",ke,j(("prettyDateFormat"in l?l.prettyDateFormat:t(ve))(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=>H(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",Ue,[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(w,{open:t(g),title:"Add new tag","onUpdate:open":e[6]||(e[6]=o=>g.value=o)},{body:s(()=>[a(O,{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",Ve,[q(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(),A("div",we,[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:W})]),_:1},8,["open"]),a(w,{open:t(x),title:"Edit tag","onUpdate:open":e[11]||(e[11]=o=>x.value=o)},{body:s(()=>[a(O,{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",Ae,[q(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(),A("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:G})]),_:1},8,["open"]),a(w,{open:t(_),title:"Delete tag","onUpdate:open":e[13]||(e[13]=o=>_.value=o)},{body:s(()=>[n("p",null,[e[18]||(e[18]=S(" 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]=S("? 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:J})]),_:1},8,["open"])]),_:1})],64)}}});export{Ge as default};
1
+ import{d as ee,w as te,b as oe,L as ae,c as A,i as n,k as t,f as u,g as s,j as a,F as le,P as se,o as d,_ as ne,q as m,t as j,O as re,v as ie,D as ce,M as q,ai as M,m as S,h as P,r as v,I as B,K as de}from"./D3SYPlEB.js";import{_ as ue}from"./ClVRQpP_.js";import{_ as me}from"./DOr_4nln.js";import{_ as pe}from"./empGC_x-.js";import{_ as ge}from"./Db_-yjYg.js";import{o as fe,s as N,_ as xe}from"./BoC6qaRF.js";import{_ as _e}from"./l0QnzFNM.js";import{p as ve}from"./BUMZHDRC.js";import{u as be}from"./Doul3p1_.js";import"./Vnfkr1pJ.js";import"./C8cz5feG.js";import"./r3SBLxtE.js";import"./D3MWm6JP.js";import"./DoFSKAvY.js";import"./BAkJhSAW.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"},Ue={class:"flex justify-center mb-4"},Ve={class:"flex items-center gap-3"},we={key:0,class:"mt-2"},Ae={class:"flex items-center gap-3"},De={key:0,class:"mt-2"},b="#6366f1",Ge=ee({__name:"tags",async setup(Fe){let y,D;const{data:z,refresh:U}=([y,D]=te(()=>be("/api/tags","$WIWNTsOq96")),y=await y,D(),y),p=oe(),{authState:I}=ae(),K=de(),V=P(()=>z.value?.tags||[]),T=P(()=>K.public.authEnabled?I.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=fe({text:N().min(1,"Tag text is required").max(50,"Tag text must be at most 50 characters"),color:N().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 W(){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 U()}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 G(){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 U()}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 H(l){f.value=l,_.value=!0}async function J(){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 U()}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,Q=me,E=pe,X=ie,h=ce,$=ge,O=xe,w=_e,Y=se;return d(),A(le,null,[n("div",ye,[t(V).length>0?(d(),u(E,{key:0,title:"Tags",count:t(V).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(Q,{data:t(V),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,j(o.original.color),1)])]),"createdAt-cell":s(({row:o})=>[n("span",ke,j(("prettyDateFormat"in l?l.prettyDateFormat:t(ve))(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=>H(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",Ue,[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(w,{open:t(g),title:"Add new tag","onUpdate:open":e[6]||(e[6]=o=>g.value=o)},{body:s(()=>[a(O,{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",Ve,[q(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(),A("div",we,[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:W})]),_:1},8,["open"]),a(w,{open:t(x),title:"Edit tag","onUpdate:open":e[11]||(e[11]=o=>x.value=o)},{body:s(()=>[a(O,{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",Ae,[q(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(),A("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:G})]),_:1},8,["open"]),a(w,{open:t(_),title:"Delete tag","onUpdate:open":e[13]||(e[13]=o=>_.value=o)},{body:s(()=>[n("p",null,[e[18]||(e[18]=S(" 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]=S("? 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:J})]),_:1},8,["open"])]),_:1})],64)}}});export{Ge as default};
@@ -1,4 +1,4 @@
1
- import{b as se,B as V,C as be,al as ke,r as h,h as Q,am as Ce,J as qe,d as re,o as p,f as H,g as D,j as g,_ as le,m as k,i as l,q as T,l as _e,k as e,E as We,c as $,v as we,t as j,F as K,y as ie,p as Z,x as Ve,G as Je}from"./BPKwYP2Q.js";import{_ as Ye}from"./CQeMb57w.js";import{_ as Ge}from"./DgYM3eyi.js";import{c as Xe,m as Ke,i as Qe,e as Ze,h as et,f as tt,g as st,j as nt}from"./Dz55UR7w.js";import{u as ot}from"./DuMv-ugy.js";import{_ as at}from"./ABGJk0pu.js";import{f as $e,w as it,k as rt}from"./k-z_VVTK.js";import{_ as lt}from"./Br2K9yi_.js";import{u as ct}from"./B43OGXzV.js";const ut=globalThis.setInterval,ce=Symbol("cluster-diagnosis");function dt(v){const a=se(),u=h(""),d=h(""),x=h([]),y=h([]),I=Q(()=>!!d.value),O=h(null),R=h([]),U=h(0),P=h(0),M=h(null),f=h(null),r=h(!1),t=h(null),o=h(!1);let s=null,i=null,m=!0;function S(){const c={};return u.value.trim()&&(c.baseCommit=u.value.trim()),x.value.length&&(c.selectedCommitShas=x.value),c}async function C(){r.value=!0;try{const c=await $fetch(`/api/failure-clusters/${v}/context`,{query:{...S(),format:"json"}});O.value=c.text,R.value=c.sections,U.value=c.tokenEstimate,P.value=c.imageTokenEstimate??0,M.value=c.coverage,f.value=c.scmChanges??null}catch{O.value="(failed to load context)",R.value=[],U.value=0,P.value=0,M.value=null,f.value=null}finally{r.value=!1}}async function A(c){try{await $fetch(`/api/failure-clusters/${v}/base-commit`,{method:"PATCH",body:{commit:c||null}}),d.value=c}catch{}}function z(){s&&(clearInterval(s),s=null)}function w(){if(s)return;let c=0;s=ut(async()=>{c+=3e3,await W(),(!t.value||t.value.status!=="running"||c>=12e4)&&z()},3e3)}async function W(){try{const c=await $fetch(`/api/failure-clusters/${v}/diagnosis`);t.value=c.diagnosis}catch{}}async function J(c={}){o.value=!0;try{const E=c.force?`/api/failure-clusters/${v}/diagnose?force=true`:`/api/failure-clusters/${v}/diagnose`,F={};c.additionalContext&&(F.additionalContext=c.additionalContext),u.value.trim()&&(F.baseCommit=u.value.trim()),x.value.length&&(F.selectedCommitShas=x.value),c.images?.length&&(F.images=c.images),t.value=await $fetch(E,{method:"POST",body:Object.keys(F).length?F:void 0}),t.value?.status==="running"&&w()}catch(E){E?.statusCode===409?w():a.add({title:"Diagnosis failed",description:String(E?.message??E),color:"error"})}finally{o.value=!1}}return V(u,c=>{m||(i&&clearTimeout(i),i=setTimeout(()=>C(),900),c!==d.value&&A(c))}),V(x,()=>{m||C()},{deep:!0}),V(t,c=>{c?.status==="running"?w():z()}),be(async()=>{try{const c=await $fetch(`/api/failure-clusters/${v}/diagnosis`);t.value=c.diagnosis,c.manualBaseCommit&&(d.value=c.manualBaseCommit,u.value=c.manualBaseCommit);const E=c.diagnosis?.details;E?.selectedCommitShas&&Array.isArray(E.selectedCommitShas)&&(x.value=E.selectedCommitShas),E?.autoSelectedCommits&&Array.isArray(E.autoSelectedCommits)&&(y.value=E.autoSelectedCommits)}catch{}m=!1,C(),t.value?.status==="running"&&w()}),ke(()=>{z(),i&&clearTimeout(i)}),{clusterId:v,baseCommit:u,savedBaseCommit:d,selectedCommitShas:x,autoSelectedCommits:y,baseCommitIsPinned:I,contextText:O,contextSections:R,tokenEstimate:U,imageTokenEstimate:P,coverage:M,scmChanges:f,contextLoading:r,refreshContext:C,diagnosis:t,posting:o,runDiagnosis:J}}function ft(v){const a=dt(v);return qe(ce,a),a}function Os(){const v=Ce(ce);if(!v)throw new Error("useClusterDiagnosis() must be used under a page that called provideClusterDiagnosis()");return v}function pt(v){const a=Ce(ce,null);if(a)return a;if(v==null)throw new Error("useOrProvideClusterDiagnosis() requires a clusterId when used outside provideClusterDiagnosis()");return ft(v)}const mt={class:"w-56 p-1 space-y-0.5"},gt=re({__name:"DiagnosisExportMenu",props:{contextText:{},diagnosis:{},screenshots:{},clusterSignature:{},clusterUrl:{},clusterOccurrences:{},clusterErrorType:{},sampleError:{}},setup(v){const a=v,{copy:u}=ot(),{copyRich:d}=Xe(),x=h(!1);function y(){const t=[];return a.clusterErrorType&&t.push(a.clusterErrorType),a.clusterOccurrences&&t.push(`${a.clusterOccurrences} occurrence${a.clusterOccurrences===1?"":"s"}`),t.join(" · ")}function I(){const t=a.clusterSignature??"Failure cluster",o=y(),s=a.diagnosis?.status==="completed"&&a.diagnosis.summary?`AI diagnosis (${a.diagnosis.category??"unknown"}, ${a.diagnosis.confidence??"?"}): ${a.diagnosis.summary}`:null,i=[`🔍 Investigation: ${t}`,o||null,"",...a.sampleError?["Error:",Ke(a.sampleError),""]:[],...s?[s,""]:[],a.clusterUrl?`Cluster: ${a.clusterUrl}`:null].filter(C=>C!==null).join(`
1
+ import{b as se,B as V,C as be,al as ke,r as h,h as Q,am as Ce,J as qe,d as re,o as p,f as H,g as D,j as g,_ as le,m as k,i as l,q as T,l as _e,k as e,E as We,c as $,v as we,t as j,F as K,y as ie,p as Z,x as Ve,G as Je}from"./D3SYPlEB.js";import{_ as Ye}from"./C8cz5feG.js";import{_ as Ge}from"./DB3ljns7.js";import{c as Xe,m as Ke,i as Qe,e as Ze,h as et,f as tt,g as st,j as nt}from"./36cXPVrY.js";import{u as ot}from"./D3MWm6JP.js";import{_ as at}from"./DnThe2U0.js";import{f as $e,w as it,k as rt}from"./BUMZHDRC.js";import{_ as lt}from"./B6IHiVa1.js";import{u as ct}from"./BuuvTH9e.js";const ut=globalThis.setInterval,ce=Symbol("cluster-diagnosis");function dt(v){const a=se(),u=h(""),d=h(""),x=h([]),y=h([]),I=Q(()=>!!d.value),O=h(null),R=h([]),U=h(0),P=h(0),M=h(null),f=h(null),r=h(!1),t=h(null),o=h(!1);let s=null,i=null,m=!0;function S(){const c={};return u.value.trim()&&(c.baseCommit=u.value.trim()),x.value.length&&(c.selectedCommitShas=x.value),c}async function C(){r.value=!0;try{const c=await $fetch(`/api/failure-clusters/${v}/context`,{query:{...S(),format:"json"}});O.value=c.text,R.value=c.sections,U.value=c.tokenEstimate,P.value=c.imageTokenEstimate??0,M.value=c.coverage,f.value=c.scmChanges??null}catch{O.value="(failed to load context)",R.value=[],U.value=0,P.value=0,M.value=null,f.value=null}finally{r.value=!1}}async function A(c){try{await $fetch(`/api/failure-clusters/${v}/base-commit`,{method:"PATCH",body:{commit:c||null}}),d.value=c}catch{}}function z(){s&&(clearInterval(s),s=null)}function w(){if(s)return;let c=0;s=ut(async()=>{c+=3e3,await W(),(!t.value||t.value.status!=="running"||c>=12e4)&&z()},3e3)}async function W(){try{const c=await $fetch(`/api/failure-clusters/${v}/diagnosis`);t.value=c.diagnosis}catch{}}async function J(c={}){o.value=!0;try{const E=c.force?`/api/failure-clusters/${v}/diagnose?force=true`:`/api/failure-clusters/${v}/diagnose`,F={};c.additionalContext&&(F.additionalContext=c.additionalContext),u.value.trim()&&(F.baseCommit=u.value.trim()),x.value.length&&(F.selectedCommitShas=x.value),c.images?.length&&(F.images=c.images),t.value=await $fetch(E,{method:"POST",body:Object.keys(F).length?F:void 0}),t.value?.status==="running"&&w()}catch(E){E?.statusCode===409?w():a.add({title:"Diagnosis failed",description:String(E?.message??E),color:"error"})}finally{o.value=!1}}return V(u,c=>{m||(i&&clearTimeout(i),i=setTimeout(()=>C(),900),c!==d.value&&A(c))}),V(x,()=>{m||C()},{deep:!0}),V(t,c=>{c?.status==="running"?w():z()}),be(async()=>{try{const c=await $fetch(`/api/failure-clusters/${v}/diagnosis`);t.value=c.diagnosis,c.manualBaseCommit&&(d.value=c.manualBaseCommit,u.value=c.manualBaseCommit);const E=c.diagnosis?.details;E?.selectedCommitShas&&Array.isArray(E.selectedCommitShas)&&(x.value=E.selectedCommitShas),E?.autoSelectedCommits&&Array.isArray(E.autoSelectedCommits)&&(y.value=E.autoSelectedCommits)}catch{}m=!1,C(),t.value?.status==="running"&&w()}),ke(()=>{z(),i&&clearTimeout(i)}),{clusterId:v,baseCommit:u,savedBaseCommit:d,selectedCommitShas:x,autoSelectedCommits:y,baseCommitIsPinned:I,contextText:O,contextSections:R,tokenEstimate:U,imageTokenEstimate:P,coverage:M,scmChanges:f,contextLoading:r,refreshContext:C,diagnosis:t,posting:o,runDiagnosis:J}}function ft(v){const a=dt(v);return qe(ce,a),a}function Os(){const v=Ce(ce);if(!v)throw new Error("useClusterDiagnosis() must be used under a page that called provideClusterDiagnosis()");return v}function pt(v){const a=Ce(ce,null);if(a)return a;if(v==null)throw new Error("useOrProvideClusterDiagnosis() requires a clusterId when used outside provideClusterDiagnosis()");return ft(v)}const mt={class:"w-56 p-1 space-y-0.5"},gt=re({__name:"DiagnosisExportMenu",props:{contextText:{},diagnosis:{},screenshots:{},clusterSignature:{},clusterUrl:{},clusterOccurrences:{},clusterErrorType:{},sampleError:{}},setup(v){const a=v,{copy:u}=ot(),{copyRich:d}=Xe(),x=h(!1);function y(){const t=[];return a.clusterErrorType&&t.push(a.clusterErrorType),a.clusterOccurrences&&t.push(`${a.clusterOccurrences} occurrence${a.clusterOccurrences===1?"":"s"}`),t.join(" · ")}function I(){const t=a.clusterSignature??"Failure cluster",o=y(),s=a.diagnosis?.status==="completed"&&a.diagnosis.summary?`AI diagnosis (${a.diagnosis.category??"unknown"}, ${a.diagnosis.confidence??"?"}): ${a.diagnosis.summary}`:null,i=[`🔍 Investigation: ${t}`,o||null,"",...a.sampleError?["Error:",Ke(a.sampleError),""]:[],...s?[s,""]:[],a.clusterUrl?`Cluster: ${a.clusterUrl}`:null].filter(C=>C!==null).join(`
2
2
  `),m=C=>C.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),S=[`<p><strong>🔍 Investigation: <code>${m(t)}</code></strong></p>`,o?`<p><em>${m(o)}</em></p>`:"",a.sampleError?`<p><strong>Error:</strong></p><pre>${m(a.sampleError)}</pre>`:"",s?`<p><strong>AI diagnosis</strong> (${m(a.diagnosis?.category??"")}, ${m(a.diagnosis?.confidence??"")}):<br>${m(a.diagnosis.summary)}</p>`:"",a.clusterUrl?`<p>🔗 <a href="${a.clusterUrl}">View cluster</a></p>`:""].join("");d(i,S,{toast:"Investigation summary copied"}),x.value=!1}function O(){if(!a.contextText)return;const o=(a.screenshots?.length?`## Screenshots
3
3
 
4
4
  ${a.screenshots.map(s=>`![${s.name}](data:${s.mediaType};base64,${s.data})`).join(`
@@ -1 +1 @@
1
- import{d as C,u as I,a as F,b as S,c as g,j as t,g as n,o as i,k as e,f as h,F as T,q as j,i as d,H as A,D as M,l as k,_ as D,m as b,t as x,x as z,v as E,h as V,r as u}from"./BPKwYP2Q.js";import{_ as H}from"./Br2K9yi_.js";import{_ as L}from"./DdbrJwT-.js";import{_ as O}from"./B7yG1G_l.js";import"./DRtTLQri.js";const G={class:"min-h-screen flex items-center justify-center bg-elevated/50"},J={class:"flex items-center gap-2"},K={class:"text-2xl font-bold"},Q={class:"mt-4 text-center"},te=C({__name:"reset-password",setup(W){const f=I(),U=F(),$=S(),m=V(()=>f.query.token),p=V(()=>f.query.mode==="invite"),o=u(""),c=u(""),r=u(!1),a=u("");async function B(){if(a.value="",!m.value){a.value="Missing reset token";return}if(o.value.length<8){a.value="Password must be at least 8 characters";return}if(o.value!==c.value){a.value="Passwords do not match";return}r.value=!0;try{await $fetch("/api/auth/reset-password",{method:"POST",body:{token:m.value,password:o.value}}),$.add({title:p.value?"Account activated!":"Password reset!",color:"success"}),U.push("/login")}catch(l){const s=l&&typeof l=="object"&&"data"in l?l.data?.message:void 0;a.value=s||"Invalid or expired link"}finally{r.value=!1}}return(l,s)=>{const N=E,v=H,w=M,y=L,P=D,R=z,q=O;return i(),g("div",G,[t(q,{class:"w-full max-w-md"},{header:n(()=>[d("div",J,[t(N,{name:"i-lucide-lock",class:"size-6"}),d("h1",K,x(e(p)?"Set your password":"Reset your password"),1)])]),default:n(()=>[e(m)?(i(),g(T,{key:1},[e(a)?(i(),h(v,{key:0,color:"error",title:e(a),variant:"subtle",class:"mb-4"},null,8,["title"])):j("",!0),d("form",{class:"space-y-4",onSubmit:A(B,["prevent"])},[t(y,{label:"New password",name:"password",required:""},{default:n(()=>[t(w,{modelValue:e(o),"onUpdate:modelValue":s[0]||(s[0]=_=>k(o)?o.value=_:null),type:"password",placeholder:"Min 8 characters",autocomplete:"new-password",disabled:e(r),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),t(y,{label:"Confirm password",name:"confirmPassword",required:""},{default:n(()=>[t(w,{modelValue:e(c),"onUpdate:modelValue":s[1]||(s[1]=_=>k(c)?c.value=_:null),type:"password",placeholder:"Repeat password",autocomplete:"new-password",disabled:e(r),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),t(P,{type:"submit",block:"",loading:e(r)},{default:n(()=>[b(x(e(p)?"Activate account":"Reset password"),1)]),_:1},8,["loading"])],32)],64)):(i(),h(v,{key:0,color:"error",title:"Invalid link",description:"This link is missing or malformed."})),d("div",Q,[t(R,{to:"/login",class:"text-sm text-gray-500 hover:text-gray-700 dark:hover:text-gray-300"},{default:n(()=>[...s[2]||(s[2]=[b(" Back to login ",-1)])]),_:1})])]),_:1})])}}});export{te as default};
1
+ import{d as C,u as I,a as F,b as S,c as g,j as t,g as n,o as i,k as e,f as h,F as T,q as j,i as d,H as A,D as M,l as k,_ as D,m as b,t as x,x as z,v as E,h as V,r as u}from"./D3SYPlEB.js";import{_ as H}from"./B6IHiVa1.js";import{_ as L}from"./Db_-yjYg.js";import{_ as O}from"./DoFSKAvY.js";import"./BAkJhSAW.js";const G={class:"min-h-screen flex items-center justify-center bg-elevated/50"},J={class:"flex items-center gap-2"},K={class:"text-2xl font-bold"},Q={class:"mt-4 text-center"},te=C({__name:"reset-password",setup(W){const f=I(),U=F(),$=S(),m=V(()=>f.query.token),p=V(()=>f.query.mode==="invite"),o=u(""),c=u(""),r=u(!1),a=u("");async function B(){if(a.value="",!m.value){a.value="Missing reset token";return}if(o.value.length<8){a.value="Password must be at least 8 characters";return}if(o.value!==c.value){a.value="Passwords do not match";return}r.value=!0;try{await $fetch("/api/auth/reset-password",{method:"POST",body:{token:m.value,password:o.value}}),$.add({title:p.value?"Account activated!":"Password reset!",color:"success"}),U.push("/login")}catch(l){const s=l&&typeof l=="object"&&"data"in l?l.data?.message:void 0;a.value=s||"Invalid or expired link"}finally{r.value=!1}}return(l,s)=>{const N=E,v=H,w=M,y=L,P=D,R=z,q=O;return i(),g("div",G,[t(q,{class:"w-full max-w-md"},{header:n(()=>[d("div",J,[t(N,{name:"i-lucide-lock",class:"size-6"}),d("h1",K,x(e(p)?"Set your password":"Reset your password"),1)])]),default:n(()=>[e(m)?(i(),g(T,{key:1},[e(a)?(i(),h(v,{key:0,color:"error",title:e(a),variant:"subtle",class:"mb-4"},null,8,["title"])):j("",!0),d("form",{class:"space-y-4",onSubmit:A(B,["prevent"])},[t(y,{label:"New password",name:"password",required:""},{default:n(()=>[t(w,{modelValue:e(o),"onUpdate:modelValue":s[0]||(s[0]=_=>k(o)?o.value=_:null),type:"password",placeholder:"Min 8 characters",autocomplete:"new-password",disabled:e(r),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),t(y,{label:"Confirm password",name:"confirmPassword",required:""},{default:n(()=>[t(w,{modelValue:e(c),"onUpdate:modelValue":s[1]||(s[1]=_=>k(c)?c.value=_:null),type:"password",placeholder:"Repeat password",autocomplete:"new-password",disabled:e(r),class:"w-full"},null,8,["modelValue","disabled"])]),_:1}),t(P,{type:"submit",block:"",loading:e(r)},{default:n(()=>[b(x(e(p)?"Activate account":"Reset password"),1)]),_:1},8,["loading"])],32)],64)):(i(),h(v,{key:0,color:"error",title:"Invalid link",description:"This link is missing or malformed."})),d("div",Q,[t(R,{to:"/login",class:"text-sm text-gray-500 hover:text-gray-700 dark:hover:text-gray-300"},{default:n(()=>[...s[2]||(s[2]=[b(" Back to login ",-1)])]),_:1})])]),_:1})])}}});export{te as default};
@@ -1 +1 @@
1
- import{d as a,o as s,c as n,j as o,v as c,i,t as r,p as d}from"./BPKwYP2Q.js";const l={class:"text-sm"},p=a({__name:"LoadingState",props:{text:{default:"Loading…"},padded:{type:Boolean,default:!0}},setup(e){return(_,m)=>{const t=c;return s(),n("div",{role:"status","aria-live":"polite","aria-busy":"true",class:d(["flex items-center justify-center gap-2 text-gray-400",e.padded&&"py-8"])},[o(t,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),i("span",l,r(e.text),1)],2)}}}),f=Object.assign(p,{__name:"LoadingState"});export{f as _};
1
+ import{d as a,o as s,c as n,j as o,v as c,i,t as r,p as d}from"./D3SYPlEB.js";const l={class:"text-sm"},p=a({__name:"LoadingState",props:{text:{default:"Loading…"},padded:{type:Boolean,default:!0}},setup(e){return(_,m)=>{const t=c;return s(),n("div",{role:"status","aria-live":"polite","aria-busy":"true",class:d(["flex items-center justify-center gap-2 text-gray-400",e.padded&&"py-8"])},[o(t,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),i("span",l,r(e.text),1)],2)}}}),f=Object.assign(p,{__name:"LoadingState"});export{f as _};
@@ -0,0 +1 @@
1
+ import{d as p,a_ as f,f as r,g as n,K as _,o as s,k as o,c as m,i as t,m as a,_ as g,q as h}from"./D3SYPlEB.js";import{_ as x}from"./empGC_x-.js";import"./C8cz5feG.js";import"./r3SBLxtE.js";import"./D3MWm6JP.js";import"./DoFSKAvY.js";const b={key:0,class:"flex max-sm:flex-col justify-between items-start gap-4"},k={key:1,class:"text-sm text-muted"},N=p({__name:"index",setup(v){const i=_().public.demoMode,{isResetting:d,resetDemo:c}=f();return(C,e)=>{const l=g,u=x;return s(),r(u,{icon:"i-lucide-settings",title:"General settings",help:"settings.general"},{actions:n(()=>[o(i)?(s(),r(l,{key:0,color:"error",variant:"soft",icon:"i-lucide-refresh-cw",loading:o(d),onClick:o(c)},{default:n(()=>[...e[0]||(e[0]=[a(" Reset demo ",-1)])]),_:1},8,["loading","onClick"])):h("",!0)]),default:n(()=>[o(i)?(s(),m("div",b,[...e[1]||(e[1]=[t("div",null,[t("p",{class:"font-medium text-sm"},"Reset demo data"),t("p",{class:"text-sm text-muted"}," Wipe the in-browser database and reload with fresh sample data dated to the current moment. All changes made during this demo session will be lost. ")],-1)])])):(s(),m("div",k,[...e[2]||(e[2]=[t("p",null," Appearance and theme are in the top bar. Use the sidebar to manage your account, users, AI diagnosis, notifications, storage, and tags. ",-1),t("p",{class:"mt-2"},[a(" Settings that can be overridden by "),t("code",{class:"font-mono text-xs"},"PIWI_*"),a(" environment variables show a lock badge with the variable name — hover the help icon on any card to see which env var backs a setting. ")],-1)])]))]),_:1})}}});export{N as default};
@@ -1 +1 @@
1
- import{_ as k}from"./Br2K9yi_.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,q as v,aa as x,T as p}from"./BPKwYP2Q.js";import{_ as B}from"./CQeMb57w.js";import{_ as E}from"./bAfTAihV.js";import{_ as M}from"./DdbrJwT-.js";import{h as $}from"./r3SBLxtE.js";const F={key:0},q={key:1},S={class:"font-mono text-xs"},T={key:0},A={key:2},C=_({__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",q,[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",S,u(i),1),m<e.envVars.length-1?(n(),a("span",T,", ")):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",A," These settings are pinned by environment variables and cannot be changed here. "))]),_:1},8,["title"])}}}),z=Object.assign(C,{__name:"EnvManagedAlert"}),N={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 $(t.help)});return(o,s)=>{const d=B,i=E,m=M;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",N,[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"./B6IHiVa1.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,q as v,aa as x,T as p}from"./D3SYPlEB.js";import{_ as B}from"./C8cz5feG.js";import{_ as $}from"./AjuKBlzz.js";import{_ as E}from"./Db_-yjYg.js";import{h as M}from"./r3SBLxtE.js";const F={key:0},q={key:1},S={class:"font-mono text-xs"},T={key:0},A={key:2},C=_({__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",q,[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",S,u(i),1),m<e.envVars.length-1?(n(),a("span",T,", ")):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",A," These settings are pinned by environment variables and cannot be changed here. "))]),_:1},8,["title"])}}}),z=Object.assign(C,{__name:"EnvManagedAlert"}),N={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",N,[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};