plum-e2e 2.9.14 → 2.10.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 (709) hide show
  1. package/CLAUDE.md +1 -1
  2. package/README.md +23 -20
  3. package/backend/_scaffold/utils/browser.ts +1 -13
  4. package/backend/_scaffold/utils/hooks.ts +1 -13
  5. package/backend/constants/socketEvents.js +8 -14
  6. package/backend/lib/serverBootstrap.js +4 -4
  7. package/backend/mcp/server.js +3 -3
  8. package/backend/prisma/migrations/20260829000000_add_run_queue/migration.sql +29 -0
  9. package/backend/prisma/schema.prisma +33 -13
  10. package/backend/routes/active-runs.routes.js +10 -6
  11. package/backend/routes/node.routes.js +7 -0
  12. package/backend/routes/trigger.routes.js +8 -5
  13. package/backend/server.js +5 -1
  14. package/backend/services/cronService.js +15 -443
  15. package/backend/services/nodeExecutionService.js +13 -1
  16. package/backend/services/runExecutorService.js +423 -0
  17. package/backend/services/runQueueService.js +276 -0
  18. package/backend/services/runnerService.js +22 -4
  19. package/backend/services/triggerService.js +13 -231
  20. package/backend/websockets/socketHandler.js +32 -590
  21. package/frontend/.svelte-kit/adapter-node/.vite/manifest.json +35 -35
  22. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/BackLink.DRrgBGDC.css +6 -0
  23. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_layout.HkPnpRl9.css +6 -0
  24. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.B9H_IpSU.css +6 -0
  25. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.Be5c3USL.css +6 -0
  26. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.COwSGmmy.css +6 -0
  27. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.ClS4XkkN.css +6 -0
  28. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.Dp6vaGRc.css +6 -0
  29. package/frontend/.svelte-kit/adapter-node/chunks/BackLink.js +1 -1
  30. package/frontend/.svelte-kit/adapter-node/chunks/Badge.js +1 -1
  31. package/frontend/.svelte-kit/adapter-node/chunks/ConfirmModal.js +1 -1
  32. package/frontend/.svelte-kit/adapter-node/chunks/EmptyState.js +1 -1
  33. package/frontend/.svelte-kit/adapter-node/chunks/Modal.js +1 -1
  34. package/frontend/.svelte-kit/adapter-node/chunks/Toast.js +1 -1
  35. package/frontend/.svelte-kit/adapter-node/chunks/constants.js +6 -4
  36. package/frontend/.svelte-kit/adapter-node/chunks/format.js +3 -3
  37. package/frontend/.svelte-kit/adapter-node/chunks/index.js +4 -4
  38. package/frontend/.svelte-kit/adapter-node/chunks/internal.js +1 -1
  39. package/frontend/.svelte-kit/adapter-node/chunks/reports.js +1 -1
  40. package/frontend/.svelte-kit/adapter-node/chunks/reports2.js +38 -40
  41. package/frontend/.svelte-kit/adapter-node/chunks/repository.js +8 -0
  42. package/frontend/.svelte-kit/adapter-node/chunks/runner.js +10 -20
  43. package/frontend/.svelte-kit/adapter-node/entries/pages/live/_id_/_page.svelte.js +254 -0
  44. package/frontend/.svelte-kit/adapter-node/entries/pages/login/_page.svelte.js +1 -1
  45. package/frontend/.svelte-kit/adapter-node/entries/pages/reports/_id_/_page.svelte.js +29 -24
  46. package/frontend/.svelte-kit/adapter-node/entries/pages/reports/_page.svelte.js +23 -19
  47. package/frontend/.svelte-kit/adapter-node/entries/pages/scheduled-tests/_page.svelte.js +3 -3
  48. package/frontend/.svelte-kit/adapter-node/entries/pages/settings/_page.svelte.js +173 -51
  49. package/frontend/.svelte-kit/adapter-node/entries/pages/setup/_page.svelte.js +1 -1
  50. package/frontend/.svelte-kit/adapter-node/entries/pages/test-repository/runs/_id_/_page.svelte.js +1 -1
  51. package/frontend/.svelte-kit/adapter-node/entries/pages/test-repository/suites/_id_/_page.svelte.js +63 -11
  52. package/frontend/.svelte-kit/adapter-node/manifest-full.js +10 -10
  53. package/frontend/.svelte-kit/adapter-node/manifest.js +10 -10
  54. package/frontend/.svelte-kit/adapter-node/nodes/0.js +2 -2
  55. package/frontend/.svelte-kit/adapter-node/nodes/1.js +1 -1
  56. package/frontend/.svelte-kit/adapter-node/nodes/10.js +1 -1
  57. package/frontend/.svelte-kit/adapter-node/nodes/11.js +1 -1
  58. package/frontend/.svelte-kit/adapter-node/nodes/12.js +2 -2
  59. package/frontend/.svelte-kit/adapter-node/nodes/2.js +1 -1
  60. package/frontend/.svelte-kit/adapter-node/nodes/3.js +3 -3
  61. package/frontend/.svelte-kit/adapter-node/nodes/4.js +3 -3
  62. package/frontend/.svelte-kit/adapter-node/nodes/5.js +3 -3
  63. package/frontend/.svelte-kit/adapter-node/nodes/6.js +3 -3
  64. package/frontend/.svelte-kit/adapter-node/nodes/7.js +1 -1
  65. package/frontend/.svelte-kit/adapter-node/nodes/8.js +2 -2
  66. package/frontend/.svelte-kit/adapter-node/nodes/9.js +1 -1
  67. package/frontend/.svelte-kit/ambient.d.ts +28 -28
  68. package/frontend/.svelte-kit/generated/client/app.js +4 -4
  69. package/frontend/.svelte-kit/generated/client/nodes/13.js +6 -0
  70. package/frontend/.svelte-kit/generated/client/nodes/3.js +1 -1
  71. package/frontend/.svelte-kit/generated/client/nodes/4.js +1 -1
  72. package/frontend/.svelte-kit/generated/client/nodes/5.js +1 -1
  73. package/frontend/.svelte-kit/generated/client/nodes/6.js +1 -1
  74. package/frontend/.svelte-kit/generated/client-optimized/app.js +4 -4
  75. package/frontend/.svelte-kit/generated/client-optimized/nodes/3.js +1 -1
  76. package/frontend/.svelte-kit/generated/client-optimized/nodes/4.js +1 -1
  77. package/frontend/.svelte-kit/generated/client-optimized/nodes/5.js +1 -1
  78. package/frontend/.svelte-kit/generated/client-optimized/nodes/6.js +1 -1
  79. package/frontend/.svelte-kit/generated/server/internal.js +1 -1
  80. package/frontend/.svelte-kit/output/client/.vite/manifest.json +413 -401
  81. package/frontend/.svelte-kit/output/client/_app/immutable/assets/0.CmJTG5mP.css +6 -0
  82. package/frontend/.svelte-kit/output/client/_app/immutable/assets/12.B9H_IpSU.css +6 -0
  83. package/frontend/.svelte-kit/output/client/_app/immutable/assets/3.Be5c3USL.css +6 -0
  84. package/frontend/.svelte-kit/output/client/_app/immutable/assets/5.ClS4XkkN.css +6 -0
  85. package/frontend/.svelte-kit/output/client/_app/immutable/assets/6.BN5XbLUX.css +6 -0
  86. package/frontend/.svelte-kit/output/client/_app/immutable/assets/8.COwSGmmy.css +6 -0
  87. package/frontend/.svelte-kit/output/client/_app/immutable/assets/BackLink.DRrgBGDC.css +6 -0
  88. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_layout.HkPnpRl9.css +6 -0
  89. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.B9H_IpSU.css +6 -0
  90. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.Be5c3USL.css +6 -0
  91. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.COwSGmmy.css +6 -0
  92. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.ClS4XkkN.css +6 -0
  93. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.Dp6vaGRc.css +6 -0
  94. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/2-KCkWZO.js +6 -0
  95. package/frontend/{build/client/_app/immutable/chunks/CNdcuGR0.js → .svelte-kit/output/client/_app/immutable/chunks/B00vxw57.js} +1 -1
  96. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/B0_HKFXV.js +6 -0
  97. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{t-La0hgu.js → BAvTKHxT.js} +1 -1
  98. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BJ_ypKl3.js +6 -0
  99. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BbYY_TzB.js +6 -0
  100. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Beula-TH.js +11 -0
  101. package/frontend/{build/client/_app/immutable/chunks/CKDtmZUQ.js → .svelte-kit/output/client/_app/immutable/chunks/C00jnSU2.js} +1 -1
  102. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/C2_rQ4aY.js +175 -0
  103. package/frontend/{build/client/_app/immutable/chunks/DCgHuuvs.js → .svelte-kit/output/client/_app/immutable/chunks/C7uEQ-LH.js} +1 -1
  104. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/C8S7qQjQ.js +6 -0
  105. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{CzlPaHY9.js → CZWchtW8.js} +1 -1
  106. package/frontend/{build/client/_app/immutable/chunks/2zMvi6fR.js → .svelte-kit/output/client/_app/immutable/chunks/CboYYxrf.js} +1 -1
  107. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CeH-RgMb.js +6 -0
  108. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{CgnwuKKO.js → CegSvdD-.js} +1 -1
  109. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CfkUW1vA.js +6 -0
  110. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Cfmt4_tJ.js +6 -0
  111. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Cgw8TOOy.js +6 -0
  112. package/frontend/{build/client/_app/immutable/chunks/C1Vid6wz.js → .svelte-kit/output/client/_app/immutable/chunks/Ck6C3Fl0.js} +1 -1
  113. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CoTEzvLa.js +6 -0
  114. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{DMZwI8Cj.js → DAmOMhaf.js} +1 -1
  115. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DB3YXVFP.js +6 -0
  116. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{w0D4Uzlq.js → DWzEJYIF.js} +1 -1
  117. package/frontend/{build/client/_app/immutable/chunks/CMEtqUfQ.js → .svelte-kit/output/client/_app/immutable/chunks/DgQy0SB2.js} +1 -1
  118. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{kkA1mrsH.js → DiVmSEJa.js} +2 -2
  119. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Dl-F6VCo.js +6 -0
  120. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DuAVKaL3.js +6 -0
  121. package/frontend/{build/client/_app/immutable/chunks/BmZ9upwL.js → .svelte-kit/output/client/_app/immutable/chunks/GDjpV3r7.js} +1 -1
  122. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/K1h4wprj.js +6 -0
  123. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{DDZw0L0T.js → d2K3c8Kx.js} +1 -1
  124. package/frontend/.svelte-kit/output/client/_app/immutable/entry/app.DRjRA71t.js +7 -0
  125. package/frontend/{build/client/_app/immutable/entry/start.4qxHHAcl.js → .svelte-kit/output/client/_app/immutable/entry/start.BXOLyf9R.js} +1 -1
  126. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/0.CRb8Nyce.js +6 -0
  127. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{1.Df9sLw8b.js → 1.BI97il3r.js} +1 -1
  128. package/frontend/{build/client/_app/immutable/nodes/10.DEbnxfND.js → .svelte-kit/output/client/_app/immutable/nodes/10.kyazROhw.js} +1 -1
  129. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{11.BViaDK2m.js → 11.B3vMgT2v.js} +1 -1
  130. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/12.DkPcIrgW.js +6 -0
  131. package/frontend/{build/client/_app/immutable/nodes/2.BCPSg7H4.js → .svelte-kit/output/client/_app/immutable/nodes/2.Dr6yugXz.js} +1 -1
  132. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/3.DUiL7fb5.js +6 -0
  133. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{3.8BFAJoHT.js → 4.DDADylfF.js} +1 -1
  134. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/5.N4CeDeoD.js +6 -0
  135. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/6.DWd93Bv5.js +10 -0
  136. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/7.c8d1cQQM.js +6 -0
  137. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/8.Cvd3MauU.js +9 -0
  138. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{9.CvfGx3Hu.js → 9.BOK0GNF_.js} +1 -1
  139. package/frontend/.svelte-kit/output/client/_app/version.json +1 -1
  140. package/frontend/.svelte-kit/output/server/.vite/manifest.json +35 -35
  141. package/frontend/.svelte-kit/output/server/_app/immutable/assets/BackLink.DRrgBGDC.css +6 -0
  142. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_layout.HkPnpRl9.css +6 -0
  143. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.B9H_IpSU.css +6 -0
  144. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.Be5c3USL.css +6 -0
  145. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.COwSGmmy.css +6 -0
  146. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.ClS4XkkN.css +6 -0
  147. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.Dp6vaGRc.css +6 -0
  148. package/frontend/.svelte-kit/output/server/chunks/BackLink.js +1 -1
  149. package/frontend/.svelte-kit/output/server/chunks/Badge.js +1 -1
  150. package/frontend/.svelte-kit/output/server/chunks/ConfirmModal.js +1 -1
  151. package/frontend/.svelte-kit/output/server/chunks/EmptyState.js +1 -1
  152. package/frontend/.svelte-kit/output/server/chunks/Modal.js +1 -1
  153. package/frontend/.svelte-kit/output/server/chunks/Toast.js +1 -1
  154. package/frontend/.svelte-kit/output/server/chunks/constants.js +6 -4
  155. package/frontend/.svelte-kit/output/server/chunks/format.js +3 -3
  156. package/frontend/.svelte-kit/output/server/chunks/index.js +4 -4
  157. package/frontend/.svelte-kit/output/server/chunks/internal.js +1 -1
  158. package/frontend/.svelte-kit/output/server/chunks/reports.js +1 -1
  159. package/frontend/.svelte-kit/output/server/chunks/reports2.js +38 -40
  160. package/frontend/.svelte-kit/output/server/chunks/repository.js +8 -0
  161. package/frontend/.svelte-kit/output/server/chunks/runner.js +10 -20
  162. package/frontend/.svelte-kit/output/server/entries/pages/live/_id_/_page.svelte.js +254 -0
  163. package/frontend/.svelte-kit/output/server/entries/pages/login/_page.svelte.js +1 -1
  164. package/frontend/.svelte-kit/output/server/entries/pages/reports/_id_/_page.svelte.js +29 -24
  165. package/frontend/.svelte-kit/output/server/entries/pages/reports/_page.svelte.js +23 -19
  166. package/frontend/.svelte-kit/output/server/entries/pages/scheduled-tests/_page.svelte.js +3 -3
  167. package/frontend/.svelte-kit/output/server/entries/pages/settings/_page.svelte.js +173 -51
  168. package/frontend/.svelte-kit/output/server/entries/pages/setup/_page.svelte.js +1 -1
  169. package/frontend/.svelte-kit/output/server/entries/pages/test-repository/runs/_id_/_page.svelte.js +1 -1
  170. package/frontend/.svelte-kit/output/server/entries/pages/test-repository/suites/_id_/_page.svelte.js +63 -11
  171. package/frontend/.svelte-kit/output/server/manifest-full.js +10 -10
  172. package/frontend/.svelte-kit/output/server/manifest.js +10 -10
  173. package/frontend/.svelte-kit/output/server/nodes/0.js +2 -2
  174. package/frontend/.svelte-kit/output/server/nodes/1.js +1 -1
  175. package/frontend/.svelte-kit/output/server/nodes/10.js +1 -1
  176. package/frontend/.svelte-kit/output/server/nodes/11.js +1 -1
  177. package/frontend/.svelte-kit/output/server/nodes/12.js +2 -2
  178. package/frontend/.svelte-kit/output/server/nodes/2.js +1 -1
  179. package/frontend/.svelte-kit/output/server/nodes/3.js +3 -3
  180. package/frontend/.svelte-kit/output/server/nodes/4.js +3 -3
  181. package/frontend/.svelte-kit/output/server/nodes/5.js +3 -3
  182. package/frontend/.svelte-kit/output/server/nodes/6.js +3 -3
  183. package/frontend/.svelte-kit/output/server/nodes/7.js +1 -1
  184. package/frontend/.svelte-kit/output/server/nodes/8.js +2 -2
  185. package/frontend/.svelte-kit/output/server/nodes/9.js +1 -1
  186. package/frontend/build/client/_app/immutable/assets/0.CmJTG5mP.css +6 -0
  187. package/frontend/build/client/_app/immutable/assets/0.CmJTG5mP.css.br +0 -0
  188. package/frontend/build/client/_app/immutable/assets/0.CmJTG5mP.css.gz +0 -0
  189. package/frontend/build/client/_app/immutable/assets/12.B9H_IpSU.css +6 -0
  190. package/frontend/build/client/_app/immutable/assets/12.B9H_IpSU.css.br +0 -0
  191. package/frontend/build/client/_app/immutable/assets/12.B9H_IpSU.css.gz +0 -0
  192. package/frontend/build/client/_app/immutable/assets/3.Be5c3USL.css +6 -0
  193. package/frontend/build/client/_app/immutable/assets/3.Be5c3USL.css.br +0 -0
  194. package/frontend/build/client/_app/immutable/assets/3.Be5c3USL.css.gz +0 -0
  195. package/frontend/build/client/_app/immutable/assets/5.ClS4XkkN.css +6 -0
  196. package/frontend/build/client/_app/immutable/assets/5.ClS4XkkN.css.br +0 -0
  197. package/frontend/build/client/_app/immutable/assets/5.ClS4XkkN.css.gz +0 -0
  198. package/frontend/build/client/_app/immutable/assets/6.BN5XbLUX.css +6 -0
  199. package/frontend/build/client/_app/immutable/assets/6.BN5XbLUX.css.br +0 -0
  200. package/frontend/build/client/_app/immutable/assets/6.BN5XbLUX.css.gz +0 -0
  201. package/frontend/build/client/_app/immutable/assets/8.COwSGmmy.css +6 -0
  202. package/frontend/build/client/_app/immutable/assets/8.COwSGmmy.css.br +0 -0
  203. package/frontend/build/client/_app/immutable/assets/8.COwSGmmy.css.gz +0 -0
  204. package/frontend/build/client/_app/immutable/assets/BackLink.DRrgBGDC.css +6 -0
  205. package/frontend/build/client/_app/immutable/assets/BackLink.DRrgBGDC.css.br +0 -0
  206. package/frontend/build/client/_app/immutable/assets/BackLink.DRrgBGDC.css.gz +0 -0
  207. package/frontend/build/client/_app/immutable/assets/_layout.HkPnpRl9.css +6 -0
  208. package/frontend/build/client/_app/immutable/assets/_layout.HkPnpRl9.css.br +0 -0
  209. package/frontend/build/client/_app/immutable/assets/_layout.HkPnpRl9.css.gz +0 -0
  210. package/frontend/build/client/_app/immutable/assets/_page.B9H_IpSU.css +6 -0
  211. package/frontend/build/client/_app/immutable/assets/_page.B9H_IpSU.css.br +0 -0
  212. package/frontend/build/client/_app/immutable/assets/_page.B9H_IpSU.css.gz +0 -0
  213. package/frontend/build/client/_app/immutable/assets/_page.Be5c3USL.css +6 -0
  214. package/frontend/build/client/_app/immutable/assets/_page.Be5c3USL.css.br +0 -0
  215. package/frontend/build/client/_app/immutable/assets/_page.Be5c3USL.css.gz +0 -0
  216. package/frontend/build/client/_app/immutable/assets/_page.COwSGmmy.css +6 -0
  217. package/frontend/build/client/_app/immutable/assets/_page.COwSGmmy.css.br +0 -0
  218. package/frontend/build/client/_app/immutable/assets/_page.COwSGmmy.css.gz +0 -0
  219. package/frontend/build/client/_app/immutable/assets/_page.ClS4XkkN.css +6 -0
  220. package/frontend/build/client/_app/immutable/assets/_page.ClS4XkkN.css.br +0 -0
  221. package/frontend/build/client/_app/immutable/assets/_page.ClS4XkkN.css.gz +0 -0
  222. package/frontend/build/client/_app/immutable/assets/_page.Dp6vaGRc.css +6 -0
  223. package/frontend/build/client/_app/immutable/assets/_page.Dp6vaGRc.css.br +0 -0
  224. package/frontend/build/client/_app/immutable/assets/_page.Dp6vaGRc.css.gz +0 -0
  225. package/frontend/build/client/_app/immutable/chunks/2-KCkWZO.js +6 -0
  226. package/frontend/build/client/_app/immutable/chunks/2-KCkWZO.js.br +0 -0
  227. package/frontend/build/client/_app/immutable/chunks/2-KCkWZO.js.gz +0 -0
  228. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/CNdcuGR0.js → build/client/_app/immutable/chunks/B00vxw57.js} +1 -1
  229. package/frontend/build/client/_app/immutable/chunks/B00vxw57.js.br +0 -0
  230. package/frontend/build/client/_app/immutable/chunks/B00vxw57.js.gz +0 -0
  231. package/frontend/build/client/_app/immutable/chunks/B0_HKFXV.js +6 -0
  232. package/frontend/build/client/_app/immutable/chunks/B0_HKFXV.js.br +0 -0
  233. package/frontend/build/client/_app/immutable/chunks/B0_HKFXV.js.gz +0 -0
  234. package/frontend/build/client/_app/immutable/chunks/{t-La0hgu.js → BAvTKHxT.js} +1 -1
  235. package/frontend/build/client/_app/immutable/chunks/BAvTKHxT.js.br +0 -0
  236. package/frontend/build/client/_app/immutable/chunks/BAvTKHxT.js.gz +0 -0
  237. package/frontend/build/client/_app/immutable/chunks/BJ_ypKl3.js +6 -0
  238. package/frontend/build/client/_app/immutable/chunks/BJ_ypKl3.js.br +0 -0
  239. package/frontend/build/client/_app/immutable/chunks/BJ_ypKl3.js.gz +0 -0
  240. package/frontend/build/client/_app/immutable/chunks/BbYY_TzB.js +6 -0
  241. package/frontend/build/client/_app/immutable/chunks/BbYY_TzB.js.br +0 -0
  242. package/frontend/build/client/_app/immutable/chunks/BbYY_TzB.js.gz +0 -0
  243. package/frontend/build/client/_app/immutable/chunks/Beula-TH.js +11 -0
  244. package/frontend/build/client/_app/immutable/chunks/Beula-TH.js.br +0 -0
  245. package/frontend/build/client/_app/immutable/chunks/Beula-TH.js.gz +0 -0
  246. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/CKDtmZUQ.js → build/client/_app/immutable/chunks/C00jnSU2.js} +1 -1
  247. package/frontend/build/client/_app/immutable/chunks/C00jnSU2.js.br +0 -0
  248. package/frontend/build/client/_app/immutable/chunks/C00jnSU2.js.gz +0 -0
  249. package/frontend/build/client/_app/immutable/chunks/C2_rQ4aY.js +175 -0
  250. package/frontend/build/client/_app/immutable/chunks/C2_rQ4aY.js.br +0 -0
  251. package/frontend/build/client/_app/immutable/chunks/C2_rQ4aY.js.gz +0 -0
  252. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/DCgHuuvs.js → build/client/_app/immutable/chunks/C7uEQ-LH.js} +1 -1
  253. package/frontend/build/client/_app/immutable/chunks/C7uEQ-LH.js.br +0 -0
  254. package/frontend/build/client/_app/immutable/chunks/C7uEQ-LH.js.gz +0 -0
  255. package/frontend/build/client/_app/immutable/chunks/C8S7qQjQ.js +6 -0
  256. package/frontend/build/client/_app/immutable/chunks/C8S7qQjQ.js.br +0 -0
  257. package/frontend/build/client/_app/immutable/chunks/C8S7qQjQ.js.gz +0 -0
  258. package/frontend/build/client/_app/immutable/chunks/{CzlPaHY9.js → CZWchtW8.js} +1 -1
  259. package/frontend/build/client/_app/immutable/chunks/CZWchtW8.js.br +0 -0
  260. package/frontend/build/client/_app/immutable/chunks/CZWchtW8.js.gz +0 -0
  261. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/2zMvi6fR.js → build/client/_app/immutable/chunks/CboYYxrf.js} +1 -1
  262. package/frontend/build/client/_app/immutable/chunks/CboYYxrf.js.br +6 -0
  263. package/frontend/build/client/_app/immutable/chunks/CboYYxrf.js.gz +0 -0
  264. package/frontend/build/client/_app/immutable/chunks/CeH-RgMb.js +6 -0
  265. package/frontend/build/client/_app/immutable/chunks/CeH-RgMb.js.br +0 -0
  266. package/frontend/build/client/_app/immutable/chunks/CeH-RgMb.js.gz +0 -0
  267. package/frontend/build/client/_app/immutable/chunks/{CgnwuKKO.js → CegSvdD-.js} +1 -1
  268. package/frontend/build/client/_app/immutable/chunks/CegSvdD-.js.br +0 -0
  269. package/frontend/build/client/_app/immutable/chunks/CegSvdD-.js.gz +0 -0
  270. package/frontend/build/client/_app/immutable/chunks/CfkUW1vA.js +6 -0
  271. package/frontend/build/client/_app/immutable/chunks/CfkUW1vA.js.br +0 -0
  272. package/frontend/build/client/_app/immutable/chunks/CfkUW1vA.js.gz +0 -0
  273. package/frontend/build/client/_app/immutable/chunks/Cfmt4_tJ.js +6 -0
  274. package/frontend/build/client/_app/immutable/chunks/Cfmt4_tJ.js.br +0 -0
  275. package/frontend/build/client/_app/immutable/chunks/Cfmt4_tJ.js.gz +0 -0
  276. package/frontend/build/client/_app/immutable/chunks/Cgw8TOOy.js +6 -0
  277. package/frontend/build/client/_app/immutable/chunks/Cgw8TOOy.js.br +0 -0
  278. package/frontend/build/client/_app/immutable/chunks/Cgw8TOOy.js.gz +0 -0
  279. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/C1Vid6wz.js → build/client/_app/immutable/chunks/Ck6C3Fl0.js} +1 -1
  280. package/frontend/build/client/_app/immutable/chunks/Ck6C3Fl0.js.br +0 -0
  281. package/frontend/build/client/_app/immutable/chunks/Ck6C3Fl0.js.gz +0 -0
  282. package/frontend/build/client/_app/immutable/chunks/CoTEzvLa.js +6 -0
  283. package/frontend/build/client/_app/immutable/chunks/CoTEzvLa.js.br +0 -0
  284. package/frontend/build/client/_app/immutable/chunks/CoTEzvLa.js.gz +0 -0
  285. package/frontend/build/client/_app/immutable/chunks/{DMZwI8Cj.js → DAmOMhaf.js} +1 -1
  286. package/frontend/build/client/_app/immutable/chunks/DAmOMhaf.js.br +0 -0
  287. package/frontend/build/client/_app/immutable/chunks/DAmOMhaf.js.gz +0 -0
  288. package/frontend/build/client/_app/immutable/chunks/DB3YXVFP.js +6 -0
  289. package/frontend/build/client/_app/immutable/chunks/DB3YXVFP.js.br +0 -0
  290. package/frontend/build/client/_app/immutable/chunks/DB3YXVFP.js.gz +0 -0
  291. package/frontend/build/client/_app/immutable/chunks/{w0D4Uzlq.js → DWzEJYIF.js} +1 -1
  292. package/frontend/build/client/_app/immutable/chunks/DWzEJYIF.js.br +7 -0
  293. package/frontend/build/client/_app/immutable/chunks/DWzEJYIF.js.gz +0 -0
  294. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/CMEtqUfQ.js → build/client/_app/immutable/chunks/DgQy0SB2.js} +1 -1
  295. package/frontend/build/client/_app/immutable/chunks/DgQy0SB2.js.br +0 -0
  296. package/frontend/build/client/_app/immutable/chunks/DgQy0SB2.js.gz +0 -0
  297. package/frontend/build/client/_app/immutable/chunks/{kkA1mrsH.js → DiVmSEJa.js} +2 -2
  298. package/frontend/build/client/_app/immutable/chunks/DiVmSEJa.js.br +0 -0
  299. package/frontend/build/client/_app/immutable/chunks/DiVmSEJa.js.gz +0 -0
  300. package/frontend/build/client/_app/immutable/chunks/Dl-F6VCo.js +6 -0
  301. package/frontend/build/client/_app/immutable/chunks/Dl-F6VCo.js.br +0 -0
  302. package/frontend/build/client/_app/immutable/chunks/Dl-F6VCo.js.gz +0 -0
  303. package/frontend/build/client/_app/immutable/chunks/DuAVKaL3.js +6 -0
  304. package/frontend/build/client/_app/immutable/chunks/DuAVKaL3.js.br +0 -0
  305. package/frontend/build/client/_app/immutable/chunks/DuAVKaL3.js.gz +0 -0
  306. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/BmZ9upwL.js → build/client/_app/immutable/chunks/GDjpV3r7.js} +1 -1
  307. package/frontend/build/client/_app/immutable/chunks/GDjpV3r7.js.br +0 -0
  308. package/frontend/build/client/_app/immutable/chunks/GDjpV3r7.js.gz +0 -0
  309. package/frontend/build/client/_app/immutable/chunks/K1h4wprj.js +6 -0
  310. package/frontend/build/client/_app/immutable/chunks/K1h4wprj.js.br +0 -0
  311. package/frontend/build/client/_app/immutable/chunks/K1h4wprj.js.gz +0 -0
  312. package/frontend/build/client/_app/immutable/chunks/{DDZw0L0T.js → d2K3c8Kx.js} +1 -1
  313. package/frontend/build/client/_app/immutable/chunks/d2K3c8Kx.js.br +0 -0
  314. package/frontend/build/client/_app/immutable/chunks/d2K3c8Kx.js.gz +0 -0
  315. package/frontend/build/client/_app/immutable/entry/app.DRjRA71t.js +7 -0
  316. package/frontend/build/client/_app/immutable/entry/app.DRjRA71t.js.br +0 -0
  317. package/frontend/build/client/_app/immutable/entry/app.DRjRA71t.js.gz +0 -0
  318. package/frontend/{.svelte-kit/output/client/_app/immutable/entry/start.4qxHHAcl.js → build/client/_app/immutable/entry/start.BXOLyf9R.js} +1 -1
  319. package/frontend/build/client/_app/immutable/entry/{start.4qxHHAcl.js.br → start.BXOLyf9R.js.br} +1 -1
  320. package/frontend/build/client/_app/immutable/entry/{start.4qxHHAcl.js.gz → start.BXOLyf9R.js.gz} +0 -0
  321. package/frontend/build/client/_app/immutable/nodes/0.CRb8Nyce.js +6 -0
  322. package/frontend/build/client/_app/immutable/nodes/0.CRb8Nyce.js.br +0 -0
  323. package/frontend/build/client/_app/immutable/nodes/0.CRb8Nyce.js.gz +0 -0
  324. package/frontend/build/client/_app/immutable/nodes/{1.Df9sLw8b.js → 1.BI97il3r.js} +1 -1
  325. package/frontend/build/client/_app/immutable/nodes/1.BI97il3r.js.br +0 -0
  326. package/frontend/build/client/_app/immutable/nodes/1.BI97il3r.js.gz +0 -0
  327. package/frontend/{.svelte-kit/output/client/_app/immutable/nodes/10.DEbnxfND.js → build/client/_app/immutable/nodes/10.kyazROhw.js} +1 -1
  328. package/frontend/build/client/_app/immutable/nodes/10.kyazROhw.js.br +0 -0
  329. package/frontend/build/client/_app/immutable/nodes/10.kyazROhw.js.gz +0 -0
  330. package/frontend/build/client/_app/immutable/nodes/{11.BViaDK2m.js → 11.B3vMgT2v.js} +1 -1
  331. package/frontend/build/client/_app/immutable/nodes/11.B3vMgT2v.js.br +0 -0
  332. package/frontend/build/client/_app/immutable/nodes/11.B3vMgT2v.js.gz +0 -0
  333. package/frontend/build/client/_app/immutable/nodes/12.DkPcIrgW.js +6 -0
  334. package/frontend/build/client/_app/immutable/nodes/12.DkPcIrgW.js.br +0 -0
  335. package/frontend/build/client/_app/immutable/nodes/12.DkPcIrgW.js.gz +0 -0
  336. package/frontend/{.svelte-kit/output/client/_app/immutable/nodes/2.BCPSg7H4.js → build/client/_app/immutable/nodes/2.Dr6yugXz.js} +1 -1
  337. package/frontend/build/client/_app/immutable/nodes/2.Dr6yugXz.js.br +0 -0
  338. package/frontend/build/client/_app/immutable/nodes/2.Dr6yugXz.js.gz +0 -0
  339. package/frontend/build/client/_app/immutable/nodes/3.DUiL7fb5.js +6 -0
  340. package/frontend/build/client/_app/immutable/nodes/3.DUiL7fb5.js.br +0 -0
  341. package/frontend/build/client/_app/immutable/nodes/3.DUiL7fb5.js.gz +0 -0
  342. package/frontend/build/client/_app/immutable/nodes/{3.8BFAJoHT.js → 4.DDADylfF.js} +1 -1
  343. package/frontend/build/client/_app/immutable/nodes/4.DDADylfF.js.br +0 -0
  344. package/frontend/build/client/_app/immutable/nodes/4.DDADylfF.js.gz +0 -0
  345. package/frontend/build/client/_app/immutable/nodes/5.N4CeDeoD.js +6 -0
  346. package/frontend/build/client/_app/immutable/nodes/5.N4CeDeoD.js.br +0 -0
  347. package/frontend/build/client/_app/immutable/nodes/5.N4CeDeoD.js.gz +0 -0
  348. package/frontend/build/client/_app/immutable/nodes/6.DWd93Bv5.js +10 -0
  349. package/frontend/build/client/_app/immutable/nodes/6.DWd93Bv5.js.br +0 -0
  350. package/frontend/build/client/_app/immutable/nodes/6.DWd93Bv5.js.gz +0 -0
  351. package/frontend/build/client/_app/immutable/nodes/7.c8d1cQQM.js +6 -0
  352. package/frontend/build/client/_app/immutable/nodes/7.c8d1cQQM.js.br +0 -0
  353. package/frontend/build/client/_app/immutable/nodes/7.c8d1cQQM.js.gz +0 -0
  354. package/frontend/build/client/_app/immutable/nodes/8.Cvd3MauU.js +9 -0
  355. package/frontend/build/client/_app/immutable/nodes/8.Cvd3MauU.js.br +0 -0
  356. package/frontend/build/client/_app/immutable/nodes/8.Cvd3MauU.js.gz +0 -0
  357. package/frontend/build/client/_app/immutable/nodes/{9.CvfGx3Hu.js → 9.BOK0GNF_.js} +1 -1
  358. package/frontend/build/client/_app/immutable/nodes/9.BOK0GNF_.js.br +0 -0
  359. package/frontend/build/client/_app/immutable/nodes/9.BOK0GNF_.js.gz +0 -0
  360. package/frontend/build/client/_app/version.json +1 -1
  361. package/frontend/build/client/_app/version.json.br +0 -0
  362. package/frontend/build/client/_app/version.json.gz +0 -0
  363. package/frontend/build/server/chunks/0-_rljpEay.js +22 -0
  364. package/frontend/build/server/chunks/0-_rljpEay.js.map +5 -0
  365. package/frontend/build/server/chunks/{1-Kxn9d30Z.js → 1-B3HpigzL.js} +3 -3
  366. package/frontend/build/server/chunks/{1-Kxn9d30Z.js.map → 1-B3HpigzL.js.map} +1 -1
  367. package/frontend/build/server/chunks/10-BQBBYpxV.js +14 -0
  368. package/frontend/build/server/chunks/10-BQBBYpxV.js.map +5 -0
  369. package/frontend/build/server/chunks/11-10xw0TIP.js +14 -0
  370. package/frontend/build/server/chunks/11-10xw0TIP.js.map +5 -0
  371. package/frontend/build/server/chunks/12-CZ3_Uw3c.js +14 -0
  372. package/frontend/build/server/chunks/{12-De6Ol6pu.js.map → 12-CZ3_Uw3c.js.map} +1 -1
  373. package/frontend/build/server/chunks/2-DioMbKbC.js +14 -0
  374. package/frontend/build/server/chunks/{2-Dc_rKWoK.js.map → 2-DioMbKbC.js.map} +1 -1
  375. package/frontend/build/server/chunks/3-CgiZg_9v.js +14 -0
  376. package/frontend/build/server/chunks/3-CgiZg_9v.js.map +5 -0
  377. package/frontend/build/server/chunks/4-BM-49dbE.js +14 -0
  378. package/frontend/build/server/chunks/4-BM-49dbE.js.map +5 -0
  379. package/frontend/build/server/chunks/5-Brx_KOzy.js +14 -0
  380. package/frontend/build/server/chunks/5-Brx_KOzy.js.map +5 -0
  381. package/frontend/build/server/chunks/6-C5swINND.js +14 -0
  382. package/frontend/build/server/chunks/6-C5swINND.js.map +5 -0
  383. package/frontend/build/server/chunks/7-B8e4y3CB.js +14 -0
  384. package/frontend/build/server/chunks/{7-DiQJZEF_.js.map → 7-B8e4y3CB.js.map} +1 -1
  385. package/frontend/build/server/chunks/8-BZtkZMIZ.js +14 -0
  386. package/frontend/build/server/chunks/8-BZtkZMIZ.js.map +5 -0
  387. package/frontend/build/server/chunks/9-BMAKiAem.js +14 -0
  388. package/frontend/build/server/chunks/{9-DirZG_Lu.js.map → 9-BMAKiAem.js.map} +1 -1
  389. package/frontend/build/server/chunks/{BackLink-BJ8NaemM.js → BackLink-CMpNTYqE.js} +2 -2
  390. package/frontend/build/server/chunks/BackLink-CMpNTYqE.js.map +5 -0
  391. package/frontend/build/server/chunks/{Badge-44ZTDx0V.js → Badge-BTWnF9pA.js} +2 -2
  392. package/frontend/build/server/chunks/Badge-BTWnF9pA.js.map +5 -0
  393. package/frontend/build/server/chunks/{ConfirmModal-C0EAXcq_.js → ConfirmModal-CtGWHl0v.js} +3 -3
  394. package/frontend/build/server/chunks/ConfirmModal-CtGWHl0v.js.map +5 -0
  395. package/frontend/build/server/chunks/{EmptyState-BA_eXaeR.js → EmptyState-Zpm9tJe1.js} +2 -2
  396. package/frontend/build/server/chunks/EmptyState-Zpm9tJe1.js.map +5 -0
  397. package/frontend/build/server/chunks/{Modal-DChG187n.js → Modal-BJJMnfIg.js} +2 -2
  398. package/frontend/build/server/chunks/Modal-BJJMnfIg.js.map +5 -0
  399. package/frontend/build/server/chunks/{Toast-v-q4ZnYq.js → Toast-CHB87F8k.js} +2 -2
  400. package/frontend/build/server/chunks/Toast-CHB87F8k.js.map +5 -0
  401. package/frontend/build/server/chunks/{_layout.svelte-CHVI3Prt.js → _layout.svelte-C_6nsIpT.js} +7 -7
  402. package/frontend/build/server/chunks/{_layout.svelte-CHVI3Prt.js.map → _layout.svelte-C_6nsIpT.js.map} +1 -1
  403. package/frontend/build/server/chunks/{_page.svelte-1jo8MapI.js → _page.svelte-BNwU9zza.js} +11 -10
  404. package/frontend/build/server/chunks/_page.svelte-BNwU9zza.js.map +5 -0
  405. package/frontend/build/server/chunks/{_page.svelte-04WxjOuH.js → _page.svelte-Bamoq11m.js} +8 -8
  406. package/frontend/build/server/chunks/{_page.svelte-04WxjOuH.js.map → _page.svelte-Bamoq11m.js.map} +1 -1
  407. package/frontend/build/server/chunks/{_page.svelte-Kg69DDaM.js → _page.svelte-BrYksycU.js} +5 -5
  408. package/frontend/build/server/chunks/_page.svelte-BrYksycU.js.map +5 -0
  409. package/frontend/build/server/chunks/{_page.svelte-BuFusRK1.js → _page.svelte-CAlhaCzS.js} +12 -12
  410. package/frontend/build/server/chunks/_page.svelte-CAlhaCzS.js.map +5 -0
  411. package/frontend/build/server/chunks/_page.svelte-CTebwzwy.js +62 -0
  412. package/frontend/build/server/chunks/_page.svelte-CTebwzwy.js.map +5 -0
  413. package/frontend/build/server/chunks/{_page.svelte-1as75nPc.js → _page.svelte-CbTrCeeX.js} +32 -28
  414. package/frontend/build/server/chunks/_page.svelte-CbTrCeeX.js.map +5 -0
  415. package/frontend/build/server/chunks/{_page.svelte-D3E6Eojd.js → _page.svelte-Cf6bI1Y2.js} +5 -5
  416. package/frontend/build/server/chunks/_page.svelte-Cf6bI1Y2.js.map +5 -0
  417. package/frontend/build/server/chunks/{_page.svelte-CWWeZuid.js → _page.svelte-CmJKt3-H.js} +71 -19
  418. package/frontend/build/server/chunks/_page.svelte-CmJKt3-H.js.map +5 -0
  419. package/frontend/build/server/chunks/{_page.svelte-CB8-QBNg.js → _page.svelte-DHZhNTPg.js} +11 -10
  420. package/frontend/build/server/chunks/{_page.svelte-CB8-QBNg.js.map → _page.svelte-DHZhNTPg.js.map} +1 -1
  421. package/frontend/build/server/chunks/_page.svelte-DObTHQe2.js +257 -0
  422. package/frontend/build/server/chunks/_page.svelte-DObTHQe2.js.map +5 -0
  423. package/frontend/build/server/chunks/{_page.svelte-8gELc_B1.js → _page.svelte-ywHy9KCh.js} +182 -59
  424. package/frontend/build/server/chunks/_page.svelte-ywHy9KCh.js.map +5 -0
  425. package/frontend/build/server/chunks/{auth-Chw-wBpI.js → auth-DDPlushv.js} +2 -2
  426. package/frontend/build/server/chunks/{auth-Chw-wBpI.js.map → auth-DDPlushv.js.map} +1 -1
  427. package/frontend/build/server/chunks/{client-DEmxR_a-.js → client-CsTiGNZy.js} +2 -2
  428. package/frontend/build/server/chunks/{client-DEmxR_a-.js.map → client-CsTiGNZy.js.map} +1 -1
  429. package/frontend/build/server/chunks/{constants-CXTaQaB6.js → constants-BYVkTZ-O.js} +3 -2
  430. package/frontend/build/server/chunks/constants-BYVkTZ-O.js.map +5 -0
  431. package/frontend/build/server/chunks/{error.svelte-BD3xNemk.js → error.svelte-BXr4lXlB.js} +3 -3
  432. package/frontend/build/server/chunks/{error.svelte-BD3xNemk.js.map → error.svelte-BXr4lXlB.js.map} +1 -1
  433. package/frontend/build/server/chunks/{format-CiNRMfHu.js → format-2pqy61MU.js} +2 -2
  434. package/frontend/build/server/chunks/{format-CiNRMfHu.js.map → format-2pqy61MU.js.map} +1 -1
  435. package/frontend/build/server/chunks/{index-server-B3M9vyh2.js → index-server-53nOZg5X.js} +2 -2
  436. package/frontend/build/server/chunks/{index-server-B3M9vyh2.js.map → index-server-53nOZg5X.js.map} +1 -1
  437. package/frontend/build/server/chunks/{index2-5R1tbrep.js → index2-DGcbugKe.js} +2 -2
  438. package/frontend/build/server/chunks/{index2-5R1tbrep.js.map → index2-DGcbugKe.js.map} +1 -1
  439. package/frontend/build/server/chunks/{reports-D_ApeeNh.js → reports-WuXG6tj3.js} +2 -2
  440. package/frontend/build/server/chunks/{reports-D_ApeeNh.js.map → reports-WuXG6tj3.js.map} +1 -1
  441. package/frontend/build/server/chunks/{reports2-BtElN_53.js → reports2-CCpI0xkQ.js} +7 -8
  442. package/frontend/build/server/chunks/reports2-CCpI0xkQ.js.map +5 -0
  443. package/frontend/build/server/chunks/{repository-FYYV_vKE.js → repository-TYWcFuWP.js} +6 -2
  444. package/frontend/build/server/chunks/repository-TYWcFuWP.js.map +5 -0
  445. package/frontend/build/server/chunks/runner-D5yCWOsy.js +27 -0
  446. package/frontend/build/server/chunks/runner-D5yCWOsy.js.map +5 -0
  447. package/frontend/build/server/chunks/{stores-BLenR3c1.js → stores-C4ZkywTG.js} +3 -3
  448. package/frontend/build/server/chunks/{stores-BLenR3c1.js.map → stores-C4ZkywTG.js.map} +1 -1
  449. package/frontend/build/server/chunks/{theme-nAx-GvX_.js → theme-C81wSe5T.js} +2 -2
  450. package/frontend/build/server/chunks/{theme-nAx-GvX_.js.map → theme-C81wSe5T.js.map} +1 -1
  451. package/frontend/build/server/index.js +2 -2
  452. package/frontend/build/server/index.js.map +1 -1
  453. package/frontend/build/server/manifest.js +23 -23
  454. package/frontend/build/server/manifest.js.map +1 -1
  455. package/frontend/src/lib/components/layout/RunnerPanel.svelte +186 -266
  456. package/frontend/src/lib/copy/reports.js +9 -0
  457. package/frontend/src/lib/copy/runners.js +9 -6
  458. package/frontend/src/lib/socketEvents.js +3 -15
  459. package/frontend/src/lib/stores/runner.js +62 -46
  460. package/frontend/src/routes/{reports/live → live/[id]}/+page.svelte +112 -183
  461. package/frontend/src/routes/scheduled-tests/+page.svelte +2 -2
  462. package/package.json +1 -1
  463. package/backend/services/activeRunsService.js +0 -55
  464. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -6
  465. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_layout.BuhMvMUj.css +0 -6
  466. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.0Eln51hV.css +0 -6
  467. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BZfe6nWe.css +0 -6
  468. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.Bj_a_5lv.css +0 -6
  469. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BwgOqeMo.css +0 -6
  470. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.CFnbmY-D.css +0 -6
  471. package/frontend/.svelte-kit/adapter-node/entries/pages/reports/live/_page.svelte.js +0 -247
  472. package/frontend/.svelte-kit/output/client/_app/immutable/assets/0.BhSG-jZH.css +0 -6
  473. package/frontend/.svelte-kit/output/client/_app/immutable/assets/12.Bj_a_5lv.css +0 -6
  474. package/frontend/.svelte-kit/output/client/_app/immutable/assets/4.0Eln51hV.css +0 -6
  475. package/frontend/.svelte-kit/output/client/_app/immutable/assets/5.DFV9OgAu.css +0 -6
  476. package/frontend/.svelte-kit/output/client/_app/immutable/assets/6.CFnbmY-D.css +0 -6
  477. package/frontend/.svelte-kit/output/client/_app/immutable/assets/8.BwgOqeMo.css +0 -6
  478. package/frontend/.svelte-kit/output/client/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -6
  479. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_layout.BuhMvMUj.css +0 -6
  480. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.0Eln51hV.css +0 -6
  481. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BZfe6nWe.css +0 -6
  482. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.Bj_a_5lv.css +0 -6
  483. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BwgOqeMo.css +0 -6
  484. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.CFnbmY-D.css +0 -6
  485. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/3InFPLvE.js +0 -6
  486. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BAACMRH5.js +0 -6
  487. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BAMUGSh7.js +0 -6
  488. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BKuh57WU.js +0 -6
  489. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BUwxRmHf.js +0 -6
  490. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/C8OURRSs.js +0 -6
  491. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CGeZlCaI.js +0 -6
  492. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CMBQQ9RZ.js +0 -6
  493. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CUC98kMZ.js +0 -6
  494. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Co3xKhEp.js +0 -6
  495. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CuqnZUex.js +0 -6
  496. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DHM6H-es.js +0 -7
  497. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DSLBMEpr.js +0 -6
  498. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DbgD7JLa.js +0 -6
  499. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/TOCyHP97.js +0 -11
  500. package/frontend/.svelte-kit/output/client/_app/immutable/entry/app.KrtMZ3my.js +0 -7
  501. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/0.C8DodwXs.js +0 -11
  502. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/12.BMSCSd88.js +0 -6
  503. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/4.D-YT_JJe.js +0 -6
  504. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/5.DVeH2eQP.js +0 -6
  505. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/6.DI7-IJhN.js +0 -6
  506. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/7.C-pKvVZy.js +0 -6
  507. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/8.93Mb3ofT.js +0 -9
  508. package/frontend/.svelte-kit/output/server/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -6
  509. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_layout.BuhMvMUj.css +0 -6
  510. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.0Eln51hV.css +0 -6
  511. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BZfe6nWe.css +0 -6
  512. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.Bj_a_5lv.css +0 -6
  513. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BwgOqeMo.css +0 -6
  514. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.CFnbmY-D.css +0 -6
  515. package/frontend/.svelte-kit/output/server/entries/pages/reports/live/_page.svelte.js +0 -247
  516. package/frontend/build/client/_app/immutable/assets/0.BhSG-jZH.css +0 -6
  517. package/frontend/build/client/_app/immutable/assets/0.BhSG-jZH.css.br +0 -0
  518. package/frontend/build/client/_app/immutable/assets/0.BhSG-jZH.css.gz +0 -0
  519. package/frontend/build/client/_app/immutable/assets/12.Bj_a_5lv.css +0 -6
  520. package/frontend/build/client/_app/immutable/assets/12.Bj_a_5lv.css.br +0 -0
  521. package/frontend/build/client/_app/immutable/assets/12.Bj_a_5lv.css.gz +0 -0
  522. package/frontend/build/client/_app/immutable/assets/4.0Eln51hV.css +0 -6
  523. package/frontend/build/client/_app/immutable/assets/4.0Eln51hV.css.br +0 -0
  524. package/frontend/build/client/_app/immutable/assets/4.0Eln51hV.css.gz +0 -0
  525. package/frontend/build/client/_app/immutable/assets/5.DFV9OgAu.css +0 -6
  526. package/frontend/build/client/_app/immutable/assets/5.DFV9OgAu.css.br +0 -0
  527. package/frontend/build/client/_app/immutable/assets/5.DFV9OgAu.css.gz +0 -0
  528. package/frontend/build/client/_app/immutable/assets/6.CFnbmY-D.css +0 -6
  529. package/frontend/build/client/_app/immutable/assets/6.CFnbmY-D.css.br +0 -0
  530. package/frontend/build/client/_app/immutable/assets/6.CFnbmY-D.css.gz +0 -0
  531. package/frontend/build/client/_app/immutable/assets/8.BwgOqeMo.css +0 -6
  532. package/frontend/build/client/_app/immutable/assets/8.BwgOqeMo.css.br +0 -0
  533. package/frontend/build/client/_app/immutable/assets/8.BwgOqeMo.css.gz +0 -0
  534. package/frontend/build/client/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -6
  535. package/frontend/build/client/_app/immutable/assets/BackLink.CvWWuO3h.css.br +0 -0
  536. package/frontend/build/client/_app/immutable/assets/BackLink.CvWWuO3h.css.gz +0 -0
  537. package/frontend/build/client/_app/immutable/assets/_layout.BuhMvMUj.css +0 -6
  538. package/frontend/build/client/_app/immutable/assets/_layout.BuhMvMUj.css.br +0 -0
  539. package/frontend/build/client/_app/immutable/assets/_layout.BuhMvMUj.css.gz +0 -0
  540. package/frontend/build/client/_app/immutable/assets/_page.0Eln51hV.css +0 -6
  541. package/frontend/build/client/_app/immutable/assets/_page.0Eln51hV.css.br +0 -0
  542. package/frontend/build/client/_app/immutable/assets/_page.0Eln51hV.css.gz +0 -0
  543. package/frontend/build/client/_app/immutable/assets/_page.BZfe6nWe.css +0 -6
  544. package/frontend/build/client/_app/immutable/assets/_page.BZfe6nWe.css.br +0 -0
  545. package/frontend/build/client/_app/immutable/assets/_page.BZfe6nWe.css.gz +0 -0
  546. package/frontend/build/client/_app/immutable/assets/_page.Bj_a_5lv.css +0 -6
  547. package/frontend/build/client/_app/immutable/assets/_page.Bj_a_5lv.css.br +0 -0
  548. package/frontend/build/client/_app/immutable/assets/_page.Bj_a_5lv.css.gz +0 -0
  549. package/frontend/build/client/_app/immutable/assets/_page.BwgOqeMo.css +0 -6
  550. package/frontend/build/client/_app/immutable/assets/_page.BwgOqeMo.css.br +0 -0
  551. package/frontend/build/client/_app/immutable/assets/_page.BwgOqeMo.css.gz +0 -0
  552. package/frontend/build/client/_app/immutable/assets/_page.CFnbmY-D.css +0 -6
  553. package/frontend/build/client/_app/immutable/assets/_page.CFnbmY-D.css.br +0 -0
  554. package/frontend/build/client/_app/immutable/assets/_page.CFnbmY-D.css.gz +0 -0
  555. package/frontend/build/client/_app/immutable/chunks/2zMvi6fR.js.br +0 -0
  556. package/frontend/build/client/_app/immutable/chunks/2zMvi6fR.js.gz +0 -0
  557. package/frontend/build/client/_app/immutable/chunks/3InFPLvE.js +0 -6
  558. package/frontend/build/client/_app/immutable/chunks/3InFPLvE.js.br +0 -0
  559. package/frontend/build/client/_app/immutable/chunks/3InFPLvE.js.gz +0 -0
  560. package/frontend/build/client/_app/immutable/chunks/BAACMRH5.js +0 -6
  561. package/frontend/build/client/_app/immutable/chunks/BAACMRH5.js.br +0 -0
  562. package/frontend/build/client/_app/immutable/chunks/BAACMRH5.js.gz +0 -0
  563. package/frontend/build/client/_app/immutable/chunks/BAMUGSh7.js +0 -6
  564. package/frontend/build/client/_app/immutable/chunks/BAMUGSh7.js.br +0 -0
  565. package/frontend/build/client/_app/immutable/chunks/BAMUGSh7.js.gz +0 -0
  566. package/frontend/build/client/_app/immutable/chunks/BKuh57WU.js +0 -6
  567. package/frontend/build/client/_app/immutable/chunks/BKuh57WU.js.br +0 -0
  568. package/frontend/build/client/_app/immutable/chunks/BKuh57WU.js.gz +0 -0
  569. package/frontend/build/client/_app/immutable/chunks/BUwxRmHf.js +0 -6
  570. package/frontend/build/client/_app/immutable/chunks/BUwxRmHf.js.br +0 -0
  571. package/frontend/build/client/_app/immutable/chunks/BUwxRmHf.js.gz +0 -0
  572. package/frontend/build/client/_app/immutable/chunks/BmZ9upwL.js.br +0 -0
  573. package/frontend/build/client/_app/immutable/chunks/BmZ9upwL.js.gz +0 -0
  574. package/frontend/build/client/_app/immutable/chunks/C1Vid6wz.js.br +0 -0
  575. package/frontend/build/client/_app/immutable/chunks/C1Vid6wz.js.gz +0 -0
  576. package/frontend/build/client/_app/immutable/chunks/C8OURRSs.js +0 -6
  577. package/frontend/build/client/_app/immutable/chunks/C8OURRSs.js.br +0 -0
  578. package/frontend/build/client/_app/immutable/chunks/C8OURRSs.js.gz +0 -0
  579. package/frontend/build/client/_app/immutable/chunks/CGeZlCaI.js +0 -6
  580. package/frontend/build/client/_app/immutable/chunks/CGeZlCaI.js.br +0 -0
  581. package/frontend/build/client/_app/immutable/chunks/CGeZlCaI.js.gz +0 -0
  582. package/frontend/build/client/_app/immutable/chunks/CKDtmZUQ.js.br +0 -0
  583. package/frontend/build/client/_app/immutable/chunks/CKDtmZUQ.js.gz +0 -0
  584. package/frontend/build/client/_app/immutable/chunks/CMBQQ9RZ.js +0 -6
  585. package/frontend/build/client/_app/immutable/chunks/CMBQQ9RZ.js.br +0 -0
  586. package/frontend/build/client/_app/immutable/chunks/CMBQQ9RZ.js.gz +0 -0
  587. package/frontend/build/client/_app/immutable/chunks/CMEtqUfQ.js.br +0 -0
  588. package/frontend/build/client/_app/immutable/chunks/CMEtqUfQ.js.gz +0 -0
  589. package/frontend/build/client/_app/immutable/chunks/CNdcuGR0.js.br +0 -0
  590. package/frontend/build/client/_app/immutable/chunks/CNdcuGR0.js.gz +0 -0
  591. package/frontend/build/client/_app/immutable/chunks/CUC98kMZ.js +0 -6
  592. package/frontend/build/client/_app/immutable/chunks/CUC98kMZ.js.br +0 -0
  593. package/frontend/build/client/_app/immutable/chunks/CUC98kMZ.js.gz +0 -0
  594. package/frontend/build/client/_app/immutable/chunks/CgnwuKKO.js.br +0 -0
  595. package/frontend/build/client/_app/immutable/chunks/CgnwuKKO.js.gz +0 -0
  596. package/frontend/build/client/_app/immutable/chunks/Co3xKhEp.js +0 -6
  597. package/frontend/build/client/_app/immutable/chunks/Co3xKhEp.js.br +0 -0
  598. package/frontend/build/client/_app/immutable/chunks/Co3xKhEp.js.gz +0 -0
  599. package/frontend/build/client/_app/immutable/chunks/CuqnZUex.js +0 -6
  600. package/frontend/build/client/_app/immutable/chunks/CuqnZUex.js.br +0 -5
  601. package/frontend/build/client/_app/immutable/chunks/CuqnZUex.js.gz +0 -0
  602. package/frontend/build/client/_app/immutable/chunks/CzlPaHY9.js.br +0 -0
  603. package/frontend/build/client/_app/immutable/chunks/CzlPaHY9.js.gz +0 -0
  604. package/frontend/build/client/_app/immutable/chunks/DCgHuuvs.js.br +0 -0
  605. package/frontend/build/client/_app/immutable/chunks/DCgHuuvs.js.gz +0 -0
  606. package/frontend/build/client/_app/immutable/chunks/DDZw0L0T.js.br +0 -0
  607. package/frontend/build/client/_app/immutable/chunks/DDZw0L0T.js.gz +0 -0
  608. package/frontend/build/client/_app/immutable/chunks/DHM6H-es.js +0 -7
  609. package/frontend/build/client/_app/immutable/chunks/DHM6H-es.js.br +0 -0
  610. package/frontend/build/client/_app/immutable/chunks/DHM6H-es.js.gz +0 -0
  611. package/frontend/build/client/_app/immutable/chunks/DMZwI8Cj.js.br +0 -0
  612. package/frontend/build/client/_app/immutable/chunks/DMZwI8Cj.js.gz +0 -0
  613. package/frontend/build/client/_app/immutable/chunks/DSLBMEpr.js +0 -6
  614. package/frontend/build/client/_app/immutable/chunks/DSLBMEpr.js.br +0 -0
  615. package/frontend/build/client/_app/immutable/chunks/DSLBMEpr.js.gz +0 -0
  616. package/frontend/build/client/_app/immutable/chunks/DbgD7JLa.js +0 -6
  617. package/frontend/build/client/_app/immutable/chunks/DbgD7JLa.js.br +0 -0
  618. package/frontend/build/client/_app/immutable/chunks/DbgD7JLa.js.gz +0 -0
  619. package/frontend/build/client/_app/immutable/chunks/TOCyHP97.js +0 -11
  620. package/frontend/build/client/_app/immutable/chunks/TOCyHP97.js.br +0 -0
  621. package/frontend/build/client/_app/immutable/chunks/TOCyHP97.js.gz +0 -0
  622. package/frontend/build/client/_app/immutable/chunks/kkA1mrsH.js.br +0 -0
  623. package/frontend/build/client/_app/immutable/chunks/kkA1mrsH.js.gz +0 -0
  624. package/frontend/build/client/_app/immutable/chunks/t-La0hgu.js.br +0 -0
  625. package/frontend/build/client/_app/immutable/chunks/t-La0hgu.js.gz +0 -0
  626. package/frontend/build/client/_app/immutable/chunks/w0D4Uzlq.js.br +0 -0
  627. package/frontend/build/client/_app/immutable/chunks/w0D4Uzlq.js.gz +0 -0
  628. package/frontend/build/client/_app/immutable/entry/app.KrtMZ3my.js +0 -7
  629. package/frontend/build/client/_app/immutable/entry/app.KrtMZ3my.js.br +0 -0
  630. package/frontend/build/client/_app/immutable/entry/app.KrtMZ3my.js.gz +0 -0
  631. package/frontend/build/client/_app/immutable/nodes/0.C8DodwXs.js +0 -11
  632. package/frontend/build/client/_app/immutable/nodes/0.C8DodwXs.js.br +0 -0
  633. package/frontend/build/client/_app/immutable/nodes/0.C8DodwXs.js.gz +0 -0
  634. package/frontend/build/client/_app/immutable/nodes/1.Df9sLw8b.js.br +0 -0
  635. package/frontend/build/client/_app/immutable/nodes/1.Df9sLw8b.js.gz +0 -0
  636. package/frontend/build/client/_app/immutable/nodes/10.DEbnxfND.js.br +0 -0
  637. package/frontend/build/client/_app/immutable/nodes/10.DEbnxfND.js.gz +0 -0
  638. package/frontend/build/client/_app/immutable/nodes/11.BViaDK2m.js.br +0 -0
  639. package/frontend/build/client/_app/immutable/nodes/11.BViaDK2m.js.gz +0 -0
  640. package/frontend/build/client/_app/immutable/nodes/12.BMSCSd88.js +0 -6
  641. package/frontend/build/client/_app/immutable/nodes/12.BMSCSd88.js.br +0 -0
  642. package/frontend/build/client/_app/immutable/nodes/12.BMSCSd88.js.gz +0 -0
  643. package/frontend/build/client/_app/immutable/nodes/2.BCPSg7H4.js.br +0 -0
  644. package/frontend/build/client/_app/immutable/nodes/2.BCPSg7H4.js.gz +0 -0
  645. package/frontend/build/client/_app/immutable/nodes/3.8BFAJoHT.js.br +0 -0
  646. package/frontend/build/client/_app/immutable/nodes/3.8BFAJoHT.js.gz +0 -0
  647. package/frontend/build/client/_app/immutable/nodes/4.D-YT_JJe.js +0 -6
  648. package/frontend/build/client/_app/immutable/nodes/4.D-YT_JJe.js.br +0 -0
  649. package/frontend/build/client/_app/immutable/nodes/4.D-YT_JJe.js.gz +0 -0
  650. package/frontend/build/client/_app/immutable/nodes/5.DVeH2eQP.js +0 -6
  651. package/frontend/build/client/_app/immutable/nodes/5.DVeH2eQP.js.br +0 -0
  652. package/frontend/build/client/_app/immutable/nodes/5.DVeH2eQP.js.gz +0 -0
  653. package/frontend/build/client/_app/immutable/nodes/6.DI7-IJhN.js +0 -6
  654. package/frontend/build/client/_app/immutable/nodes/6.DI7-IJhN.js.br +0 -0
  655. package/frontend/build/client/_app/immutable/nodes/6.DI7-IJhN.js.gz +0 -0
  656. package/frontend/build/client/_app/immutable/nodes/7.C-pKvVZy.js +0 -6
  657. package/frontend/build/client/_app/immutable/nodes/7.C-pKvVZy.js.br +0 -0
  658. package/frontend/build/client/_app/immutable/nodes/7.C-pKvVZy.js.gz +0 -0
  659. package/frontend/build/client/_app/immutable/nodes/8.93Mb3ofT.js +0 -9
  660. package/frontend/build/client/_app/immutable/nodes/8.93Mb3ofT.js.br +0 -0
  661. package/frontend/build/client/_app/immutable/nodes/8.93Mb3ofT.js.gz +0 -0
  662. package/frontend/build/client/_app/immutable/nodes/9.CvfGx3Hu.js.br +0 -0
  663. package/frontend/build/client/_app/immutable/nodes/9.CvfGx3Hu.js.gz +0 -0
  664. package/frontend/build/server/chunks/0-D5YWFygh.js +0 -22
  665. package/frontend/build/server/chunks/0-D5YWFygh.js.map +0 -5
  666. package/frontend/build/server/chunks/10-l6_ikL_D.js +0 -14
  667. package/frontend/build/server/chunks/10-l6_ikL_D.js.map +0 -5
  668. package/frontend/build/server/chunks/11-CNLerze_.js +0 -14
  669. package/frontend/build/server/chunks/11-CNLerze_.js.map +0 -5
  670. package/frontend/build/server/chunks/12-De6Ol6pu.js +0 -14
  671. package/frontend/build/server/chunks/2-Dc_rKWoK.js +0 -14
  672. package/frontend/build/server/chunks/3-DrRqVrcX.js +0 -14
  673. package/frontend/build/server/chunks/3-DrRqVrcX.js.map +0 -5
  674. package/frontend/build/server/chunks/4-Bo04DC5Z.js +0 -14
  675. package/frontend/build/server/chunks/4-Bo04DC5Z.js.map +0 -5
  676. package/frontend/build/server/chunks/5-CFeE5dPZ.js +0 -14
  677. package/frontend/build/server/chunks/5-CFeE5dPZ.js.map +0 -5
  678. package/frontend/build/server/chunks/6-DZk37MZH.js +0 -14
  679. package/frontend/build/server/chunks/6-DZk37MZH.js.map +0 -5
  680. package/frontend/build/server/chunks/7-DiQJZEF_.js +0 -14
  681. package/frontend/build/server/chunks/8-CKPVFOqJ.js +0 -14
  682. package/frontend/build/server/chunks/8-CKPVFOqJ.js.map +0 -5
  683. package/frontend/build/server/chunks/9-DirZG_Lu.js +0 -14
  684. package/frontend/build/server/chunks/BackLink-BJ8NaemM.js.map +0 -5
  685. package/frontend/build/server/chunks/Badge-44ZTDx0V.js.map +0 -5
  686. package/frontend/build/server/chunks/ConfirmModal-C0EAXcq_.js.map +0 -5
  687. package/frontend/build/server/chunks/EmptyState-BA_eXaeR.js.map +0 -5
  688. package/frontend/build/server/chunks/Modal-DChG187n.js.map +0 -5
  689. package/frontend/build/server/chunks/Toast-v-q4ZnYq.js.map +0 -5
  690. package/frontend/build/server/chunks/_page.svelte-1as75nPc.js.map +0 -5
  691. package/frontend/build/server/chunks/_page.svelte-1jo8MapI.js.map +0 -5
  692. package/frontend/build/server/chunks/_page.svelte-8gELc_B1.js.map +0 -5
  693. package/frontend/build/server/chunks/_page.svelte-BuFusRK1.js.map +0 -5
  694. package/frontend/build/server/chunks/_page.svelte-CAVyp70V.js +0 -250
  695. package/frontend/build/server/chunks/_page.svelte-CAVyp70V.js.map +0 -5
  696. package/frontend/build/server/chunks/_page.svelte-CWWeZuid.js.map +0 -5
  697. package/frontend/build/server/chunks/_page.svelte-D3E6Eojd.js.map +0 -5
  698. package/frontend/build/server/chunks/_page.svelte-Kg69DDaM.js.map +0 -5
  699. package/frontend/build/server/chunks/_page.svelte-L9fuiN_q.js +0 -57
  700. package/frontend/build/server/chunks/_page.svelte-L9fuiN_q.js.map +0 -5
  701. package/frontend/build/server/chunks/constants-CXTaQaB6.js.map +0 -5
  702. package/frontend/build/server/chunks/reports2-BtElN_53.js.map +0 -5
  703. package/frontend/build/server/chunks/repository-FYYV_vKE.js.map +0 -5
  704. package/frontend/build/server/chunks/runner-DC7hXbnY.js +0 -37
  705. package/frontend/build/server/chunks/runner-DC7hXbnY.js.map +0 -5
  706. /package/frontend/.svelte-kit/output/client/_app/immutable/assets/{3.BR3wgXcZ.css → 4.BR3wgXcZ.css} +0 -0
  707. /package/frontend/build/client/_app/immutable/assets/{3.BR3wgXcZ.css → 4.BR3wgXcZ.css} +0 -0
  708. /package/frontend/build/client/_app/immutable/assets/{3.BR3wgXcZ.css.br → 4.BR3wgXcZ.css.br} +0 -0
  709. /package/frontend/build/client/_app/immutable/assets/{3.BR3wgXcZ.css.gz → 4.BR3wgXcZ.css.gz} +0 -0
@@ -3,11 +3,11 @@
3
3
  * Licensed under the MIT License. See LICENSE file in the project root for details.
4
4
  */
5
5
 
6
- import { _ as store_get, a2 as copy_payload, a3 as assign_payload, $ as unsubscribe_stores, p as pop, a as push, Y as ensure_array_like, X as head, Z as stringify } from "../../../chunks/index.js";
6
+ import { a0 as store_get, a2 as copy_payload, a3 as assign_payload, a1 as unsubscribe_stores, p as pop, a as push, Y as ensure_array_like, X as head, Z as stringify } from "../../../chunks/index.js";
7
7
  import "../../../chunks/client.js";
8
- import { A as API_BASE, M as MAX_TEST_RETRIES, B as BROWSERS } from "../../../chunks/constants.js";
8
+ import { A as API_BASE, M as MAX_TEST_RETRIES, B as BROWSERS, T as TOAST_TIMEOUT_MS } from "../../../chunks/constants.js";
9
9
  import { a as auth } from "../../../chunks/auth.js";
10
- import { c as builtInEnabled } from "../../../chunks/runner.js";
10
+ import { a as builtInEnabled } from "../../../chunks/runner.js";
11
11
  import { t as theme } from "../../../chunks/theme.js";
12
12
  import { T as Toast, B as Button } from "../../../chunks/Toast.js";
13
13
  import { C as ConfirmModal } from "../../../chunks/ConfirmModal.js";
@@ -15,6 +15,13 @@ import { B as Badge } from "../../../chunks/Badge.js";
15
15
  import { a as SAVE_LABEL, b as CANCEL_LABEL, E as EDIT_LABEL, c as EMAIL_LABEL } from "../../../chunks/common.js";
16
16
  import { e as escape_html } from "../../../chunks/escaping.js";
17
17
  import { a as attr } from "../../../chunks/attributes.js";
18
+ function authHeaders() {
19
+ return { Authorization: `Bearer ${auth.getToken()}` };
20
+ }
21
+ async function fetchS3Backups() {
22
+ const res = await fetch(`${API_BASE}/backup/s3-backups`, { headers: authHeaders() });
23
+ return res.json();
24
+ }
18
25
  const PAGE_TITLE = "Settings — Plum";
19
26
  const HEADING = "Settings";
20
27
  const NAME_LABEL = "Name";
@@ -90,7 +97,7 @@ const SLACK_WEBHOOK_LABEL = "Slack Webhook URL";
90
97
  const SLACK_WEBHOOK_HINT = "Leave blank to disable Slack notifications";
91
98
  const SLACK_WEBHOOK_PLACEHOLDER = "https://hooks.slack.com/services/…";
92
99
  const PUBLIC_URL_LABEL = "Public URL";
93
- const PUBLIC_URL_HINT = "Base URL of this Plum instance, used to link reports in notifications";
100
+ const PUBLIC_URL_HINT = "Base URL of this Plum instance used to link reports in notifications, and by remote runner nodes to stream live test output back here";
94
101
  const PUBLIC_URL_PLACEHOLDER = "https://plum.yourcompany.com";
95
102
  const CI_TRIGGERS_CARD_TITLE = "CI / External Triggers";
96
103
  const CI_DESC_PART1 = "Trigger a Plum run from GitHub Actions (e.g. on a pull request, against its preview deployment) or any other external script by calling";
@@ -132,8 +139,10 @@ const EXPORT_BLOCK_DESC_SUFFIX = "file with all cron jobs, test cases, test runs
132
139
  const IMPORT_BLOCK_TITLE = "Import";
133
140
  const IMPORT_BLOCK_DESC = "Restores all data from a previously exported backup. Existing records are overwritten. Cron jobs are re-scheduled after import.";
134
141
  const CHOOSE_FILE_LABEL = "Choose file…";
135
- const BACKUP_DISCLAIMER_PREFIX = "Reports are not included in backups. To back up report history, run";
136
- const BACKUP_DISCLAIMER_SUFFIX = "directly on the PostgreSQL volume.";
142
+ const INCLUDE_REPORTS_LABEL = "Include reports & recordings";
143
+ const INCLUDE_REPORTS_HINT = "Applies to both manual export and scheduled S3 backups. Can make backups significantly larger — recordings are session replays, not just screenshots.";
144
+ const includeReportsDisclaimer = (included) => 'Reports are not included in backups — enable "Include reports & recordings" above, or run pg_dump directly on the PostgreSQL volume, to back up report history.';
145
+ const saveIncludeReportsLabel = (saving) => SAVE_LABEL;
137
146
  const S3_STORAGE_CARD_TITLE = "S3 Storage";
138
147
  const S3_STORAGE_DESC_PREFIX = "Works with any S3-compatible provider — Cloudflare R2, Backblaze B2, AWS S3, or MinIO. Leave";
139
148
  const ENDPOINT_URL_LABEL = "Endpoint URL";
@@ -157,6 +166,13 @@ const SAVE_S3_CONFIG_LABEL = "Save S3 Config";
157
166
  const SECRET_KEY_REQUIRED_HINT = "Required";
158
167
  const SECRET_KEY_SET_PLACEHOLDER = "••••••••";
159
168
  const SECRET_KEY_UNSET_PLACEHOLDER = "Enter secret key";
169
+ const RESTORE_FROM_S3_CARD_TITLE = "Restore from S3";
170
+ const RESTORE_FROM_S3_DESC = "Restores directly from a backup already uploaded to S3 — no need to download it yourself first. Existing records are overwritten. Cron jobs are re-scheduled after restore.";
171
+ const CONFIGURE_S3_FIRST_RESTORE_MESSAGE = "Configure S3 storage above to restore from it.";
172
+ const NO_S3_BACKUPS_MESSAGE = "No backups found at this bucket/prefix.";
173
+ const REFRESH_LABEL = "Refresh";
174
+ const RESTORE_CONFIRM_TITLE = "Restore this backup?";
175
+ const LIST_S3_BACKUPS_FAILED = "Failed to list S3 backups.";
160
176
  const SCHEDULED_BACKUP_CARD_TITLE = "Scheduled Backup";
161
177
  const CONFIGURE_S3_FIRST_MESSAGE = "Configure S3 storage above to enable scheduled backups.";
162
178
  const ENABLE_SCHEDULED_BACKUP_LABEL = "Enable scheduled backup";
@@ -175,6 +191,9 @@ const testConnectionLabel = (testing) => TEST_CONNECTION_LABEL;
175
191
  const saveS3ConfigLabel = (saving) => SAVE_S3_CONFIG_LABEL;
176
192
  const uploadS3NowLabel = (running) => UPLOAD_TO_S3_NOW_LABEL;
177
193
  const saveScheduleLabel = (saving) => SAVE_SCHEDULE_LABEL;
194
+ const restoreLabel = (restoring) => restoring ? "Restoring…" : "Restore";
195
+ const refreshingLabel = (loading) => loading ? "Loading…" : REFRESH_LABEL;
196
+ const backupSizeLabel = (bytes) => `${(bytes / 1024).toFixed(1)} KB`;
178
197
  function _page($$payload, $$props) {
179
198
  push();
180
199
  var $$store_subs;
@@ -229,12 +248,19 @@ function _page($$payload, $$props) {
229
248
  backupS3Bucket: "",
230
249
  backupS3AccessKey: "",
231
250
  backupS3SecretKey: "",
232
- backupS3Prefix: ""
251
+ backupS3Prefix: "",
252
+ backupIncludeReports: false
233
253
  };
234
254
  let backupConfigSaving = false;
255
+ let includeReportsSaving = false;
235
256
  let backupS3SecretKeySet = false;
236
257
  let backupTestingS3 = false;
237
258
  let backupRunningNow = false;
259
+ let s3Backups = [];
260
+ let s3BackupsLoaded = false;
261
+ let loadingS3Backups = false;
262
+ let restoringKey = null;
263
+ let restoreConfirmOpen = false;
238
264
  let runners = [];
239
265
  let pingResults = {};
240
266
  let stoppingId = null;
@@ -246,6 +272,22 @@ function _page($$payload, $$props) {
246
272
  token: ""
247
273
  };
248
274
  let editFormSaving = false;
275
+ function showToast(type, message) {
276
+ toast = { type, message };
277
+ setTimeout(() => toast = null, TOAST_TIMEOUT_MS);
278
+ }
279
+ async function loadS3Backups() {
280
+ loadingS3Backups = true;
281
+ try {
282
+ const result = await fetchS3Backups();
283
+ if (result.error) throw new Error(result.error);
284
+ s3Backups = result.backups ?? [];
285
+ } catch (e) {
286
+ showToast("error", e.message || LIST_S3_BACKUPS_FAILED);
287
+ } finally {
288
+ loadingS3Backups = false;
289
+ }
290
+ }
249
291
  const ADMIN_SECTIONS = /* @__PURE__ */ new Set([
250
292
  "project",
251
293
  "runners",
@@ -259,6 +301,10 @@ function _page($$payload, $$props) {
259
301
  section = "account";
260
302
  }
261
303
  s3Configured = false;
304
+ if (s3Configured && !s3BackupsLoaded) {
305
+ s3BackupsLoaded = true;
306
+ loadS3Backups();
307
+ }
262
308
  JSON.stringify(
263
309
  {
264
310
  mcpServers: {
@@ -298,27 +344,27 @@ function _page($$payload, $$props) {
298
344
  $$payload3.title = `<title>${escape_html(PAGE_TITLE)}</title>`;
299
345
  });
300
346
  Toast($$payload2, { toast });
301
- $$payload2.out += `<!----> <div class="page-header svelte-bpb2i4"><h1 class="svelte-bpb2i4">${escape_html(HEADING)}</h1></div> <div class="settings-layout svelte-bpb2i4"><aside class="settings-sidebar svelte-bpb2i4"><nav class="svelte-bpb2i4"><!--[-->`;
347
+ $$payload2.out += `<!----> <div class="page-header svelte-1b139ls"><h1 class="svelte-1b139ls">${escape_html(HEADING)}</h1></div> <div class="settings-layout svelte-1b139ls"><aside class="settings-sidebar svelte-1b139ls"><nav class="svelte-1b139ls"><!--[-->`;
302
348
  for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
303
349
  let item = each_array[$$index];
304
- $$payload2.out += `<button${attr("class", `sidebar-item svelte-bpb2i4 ${stringify([section === item.id ? "active" : ""].filter(Boolean).join(" "))}`)}>${escape_html(item.label)}</button>`;
350
+ $$payload2.out += `<button${attr("class", `sidebar-item svelte-1b139ls ${stringify([section === item.id ? "active" : ""].filter(Boolean).join(" "))}`)}>${escape_html(item.label)}</button>`;
305
351
  }
306
- $$payload2.out += `<!--]--></nav></aside> <div class="settings-content svelte-bpb2i4">`;
352
+ $$payload2.out += `<!--]--></nav></aside> <div class="settings-content svelte-1b139ls">`;
307
353
  if (section === "project") {
308
354
  $$payload2.out += "<!--[-->";
309
355
  const each_array_1 = ensure_array_like(TIMEZONES);
310
- $$payload2.out += `<div class="content-section svelte-bpb2i4"><div class="content-header svelte-bpb2i4"><h2 class="svelte-bpb2i4">${escape_html(PROJECT_LABEL)}</h2> <p class="content-desc svelte-bpb2i4">${escape_html(PROJECT_DESC)}</p></div> <div class="card settings-card svelte-bpb2i4"><div class="field"><label class="field-label svelte-bpb2i4" for="project-name">${escape_html(PROJECT_NAME_LABEL)}</label> <input id="project-name" type="text" class="field-input"${attr("value", project.name)}${attr("placeholder", PROJECT_NAME_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-bpb2i4" for="project-logo"><span>${escape_html(LOGO_URL_LABEL)}</span> <span class="field-hint svelte-bpb2i4">${escape_html(LOGO_URL_HINT)}</span></label> <input id="project-logo" type="url" class="field-input"${attr("value", project.logoUrl)}${attr("placeholder", LOGO_URL_PLACEHOLDER)}></div> `;
356
+ $$payload2.out += `<div class="content-section svelte-1b139ls"><div class="content-header svelte-1b139ls"><h2 class="svelte-1b139ls">${escape_html(PROJECT_LABEL)}</h2> <p class="content-desc svelte-1b139ls">${escape_html(PROJECT_DESC)}</p></div> <div class="card settings-card svelte-1b139ls"><div class="field"><label class="field-label svelte-1b139ls" for="project-name">${escape_html(PROJECT_NAME_LABEL)}</label> <input id="project-name" type="text" class="field-input"${attr("value", project.name)}${attr("placeholder", PROJECT_NAME_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-1b139ls" for="project-logo"><span>${escape_html(LOGO_URL_LABEL)}</span> <span class="field-hint svelte-1b139ls">${escape_html(LOGO_URL_HINT)}</span></label> <input id="project-logo" type="url" class="field-input"${attr("value", project.logoUrl)}${attr("placeholder", LOGO_URL_PLACEHOLDER)}></div> `;
311
357
  {
312
358
  $$payload2.out += "<!--[!-->";
313
359
  }
314
- $$payload2.out += `<!--]--> <div class="field"><label class="field-label svelte-bpb2i4" for="project-timezone"><span>${escape_html(TIMEZONE_LABEL)}</span> <span class="field-hint svelte-bpb2i4">${escape_html(TIMEZONE_HINT)}</span></label> <select id="project-timezone" class="field-input"><!--[-->`;
360
+ $$payload2.out += `<!--]--> <div class="field"><label class="field-label svelte-1b139ls" for="project-timezone"><span>${escape_html(TIMEZONE_LABEL)}</span> <span class="field-hint svelte-1b139ls">${escape_html(TIMEZONE_HINT)}</span></label> <select id="project-timezone" class="field-input"><!--[-->`;
315
361
  for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
316
362
  let tz = each_array_1[$$index_1];
317
363
  $$payload2.out += `<option${attr("value", tz)}>${escape_html(tz)}</option>`;
318
364
  }
319
- $$payload2.out += `<!--]--></select></div> <div class="field"><label class="field-label svelte-bpb2i4" for="project-max-retries"><span>${escape_html(RETRY_FAILED_TESTS_LABEL)}</span> <span class="field-hint svelte-bpb2i4">${escape_html(RETRY_FAILED_TESTS_HINT)}</span></label> <input id="project-max-retries" type="number" class="field-input" min="0"${attr("max", MAX_TEST_RETRIES)}${attr("value", project.maxRetries)}></div> <div class="toggle-row svelte-bpb2i4"><div class="toggle-info svelte-bpb2i4"><span class="toggle-label svelte-bpb2i4">${escape_html(DARK_MODE_LABEL)}</span> <span class="toggle-desc svelte-bpb2i4">${escape_html(DARK_MODE_DESC)}</span></div> <button${attr("class", `toggle-switch svelte-bpb2i4 ${stringify([
365
+ $$payload2.out += `<!--]--></select></div> <div class="field"><label class="field-label svelte-1b139ls" for="project-max-retries"><span>${escape_html(RETRY_FAILED_TESTS_LABEL)}</span> <span class="field-hint svelte-1b139ls">${escape_html(RETRY_FAILED_TESTS_HINT)}</span></label> <input id="project-max-retries" type="number" class="field-input" min="0"${attr("max", MAX_TEST_RETRIES)}${attr("value", project.maxRetries)}></div> <div class="toggle-row svelte-1b139ls"><div class="toggle-info svelte-1b139ls"><span class="toggle-label svelte-1b139ls">${escape_html(DARK_MODE_LABEL)}</span> <span class="toggle-desc svelte-1b139ls">${escape_html(DARK_MODE_DESC)}</span></div> <button${attr("class", `toggle-switch svelte-1b139ls ${stringify([
320
366
  store_get($$store_subs ??= {}, "$theme", theme) === "dark" ? "on" : ""
321
- ].filter(Boolean).join(" "))}`)} role="switch"${attr("aria-checked", store_get($$store_subs ??= {}, "$theme", theme) === "dark")}><span class="toggle-thumb svelte-bpb2i4"></span></button></div> <div class="card-footer svelte-bpb2i4">`;
367
+ ].filter(Boolean).join(" "))}`)} role="switch"${attr("aria-checked", store_get($$store_subs ??= {}, "$theme", theme) === "dark")}><span class="toggle-thumb svelte-1b139ls"></span></button></div> <div class="card-footer svelte-1b139ls">`;
322
368
  Button($$payload2, {
323
369
  disabled: projectSaving,
324
370
  children: ($$payload3) => {
@@ -331,20 +377,20 @@ function _page($$payload, $$props) {
331
377
  $$payload2.out += "<!--[!-->";
332
378
  if (section === "runners") {
333
379
  $$payload2.out += "<!--[-->";
334
- $$payload2.out += `<div class="content-section svelte-bpb2i4"><div class="content-header svelte-bpb2i4"><h2 class="svelte-bpb2i4">${escape_html(RUNNERS_LABEL)}</h2> <p class="content-desc svelte-bpb2i4">${escape_html(RUNNERS_DESC)}</p></div> <div class="card settings-card svelte-bpb2i4"><div class="toggle-row svelte-bpb2i4"><div class="toggle-info svelte-bpb2i4"><span class="toggle-label svelte-bpb2i4">${escape_html(BUILTIN_RUNNER_TOGGLE_LABEL)}</span> <span class="toggle-desc svelte-bpb2i4">${escape_html(BUILTIN_RUNNER_TOGGLE_DESC)}</span></div> <button${attr("class", `toggle-switch svelte-bpb2i4 ${stringify([
380
+ $$payload2.out += `<div class="content-section svelte-1b139ls"><div class="content-header svelte-1b139ls"><h2 class="svelte-1b139ls">${escape_html(RUNNERS_LABEL)}</h2> <p class="content-desc svelte-1b139ls">${escape_html(RUNNERS_DESC)}</p></div> <div class="card settings-card svelte-1b139ls"><div class="toggle-row svelte-1b139ls"><div class="toggle-info svelte-1b139ls"><span class="toggle-label svelte-1b139ls">${escape_html(BUILTIN_RUNNER_TOGGLE_LABEL)}</span> <span class="toggle-desc svelte-1b139ls">${escape_html(BUILTIN_RUNNER_TOGGLE_DESC)}</span></div> <button${attr("class", `toggle-switch svelte-1b139ls ${stringify([
335
381
  store_get($$store_subs ??= {}, "$builtInEnabled", builtInEnabled) ? "on" : ""
336
- ].filter(Boolean).join(" "))}`)} role="switch"${attr("aria-checked", store_get($$store_subs ??= {}, "$builtInEnabled", builtInEnabled))}><span class="toggle-thumb svelte-bpb2i4"></span></button></div> `;
382
+ ].filter(Boolean).join(" "))}`)} role="switch"${attr("aria-checked", store_get($$store_subs ??= {}, "$builtInEnabled", builtInEnabled))}><span class="toggle-thumb svelte-1b139ls"></span></button></div> `;
337
383
  if (runners.length > 0) {
338
384
  $$payload2.out += "<!--[-->";
339
385
  const each_array_2 = ensure_array_like(runners);
340
- $$payload2.out += `<div class="runner-cards svelte-bpb2i4"><!--[-->`;
386
+ $$payload2.out += `<div class="runner-cards svelte-1b139ls"><!--[-->`;
341
387
  for (let $$index_3 = 0, $$length = each_array_2.length; $$index_3 < $$length; $$index_3++) {
342
388
  let r = each_array_2[$$index_3];
343
389
  const ping = pingResults[r.id];
344
390
  if (editingId === r.id) {
345
391
  $$payload2.out += "<!--[-->";
346
392
  const each_array_3 = ensure_array_like(BROWSERS);
347
- $$payload2.out += `<div class="runner-card editing svelte-bpb2i4"><div class="runner-form-fields svelte-bpb2i4"><div class="field"><label class="field-label svelte-bpb2i4"${attr("for", `edit-name-${stringify(r.id)}`)}>${escape_html(NAME_LABEL)}</label> <input${attr("id", `edit-name-${stringify(r.id)}`)} type="text" class="field-input"${attr("value", editForm.name)}${attr("placeholder", RUNNER_NAME_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-bpb2i4"${attr("for", `edit-url-${stringify(r.id)}`)}>${escape_html(RUNNER_URL_LABEL)} <span class="field-hint svelte-bpb2i4">${escape_html(RUNNER_URL_HINT_PREFIX)} <code>host.docker.internal</code> ${escape_html(RUNNER_URL_HINT_SUFFIX)}</span></label> <input${attr("id", `edit-url-${stringify(r.id)}`)} type="url" class="field-input"${attr("value", editForm.url)}${attr("placeholder", RUNNER_URL_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-bpb2i4"${attr("for", `edit-token-${stringify(r.id)}`)}>${escape_html(TOKEN_LABEL)}</label> <input${attr("id", `edit-token-${stringify(r.id)}`)} type="text" class="field-input"${attr("value", editForm.token)}${attr("placeholder", KEEP_TOKEN_PLACEHOLDER)} spellcheck="false" autocomplete="off"></div> <div class="field"><label class="field-label svelte-bpb2i4"${attr("for", `edit-browser-${stringify(r.id)}`)}>${escape_html(BROWSER_LABEL)}</label> <select${attr("id", `edit-browser-${stringify(r.id)}`)} class="field-input"><!--[-->`;
393
+ $$payload2.out += `<div class="runner-card editing svelte-1b139ls"><div class="runner-form-fields svelte-1b139ls"><div class="field"><label class="field-label svelte-1b139ls"${attr("for", `edit-name-${stringify(r.id)}`)}>${escape_html(NAME_LABEL)}</label> <input${attr("id", `edit-name-${stringify(r.id)}`)} type="text" class="field-input"${attr("value", editForm.name)}${attr("placeholder", RUNNER_NAME_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-1b139ls"${attr("for", `edit-url-${stringify(r.id)}`)}>${escape_html(RUNNER_URL_LABEL)} <span class="field-hint svelte-1b139ls">${escape_html(RUNNER_URL_HINT_PREFIX)} <code>host.docker.internal</code> ${escape_html(RUNNER_URL_HINT_SUFFIX)}</span></label> <input${attr("id", `edit-url-${stringify(r.id)}`)} type="url" class="field-input"${attr("value", editForm.url)}${attr("placeholder", RUNNER_URL_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-1b139ls"${attr("for", `edit-token-${stringify(r.id)}`)}>${escape_html(TOKEN_LABEL)}</label> <input${attr("id", `edit-token-${stringify(r.id)}`)} type="text" class="field-input"${attr("value", editForm.token)}${attr("placeholder", KEEP_TOKEN_PLACEHOLDER)} spellcheck="false" autocomplete="off"></div> <div class="field"><label class="field-label svelte-1b139ls"${attr("for", `edit-browser-${stringify(r.id)}`)}>${escape_html(BROWSER_LABEL)}</label> <select${attr("id", `edit-browser-${stringify(r.id)}`)} class="field-input"><!--[-->`;
348
394
  for (let $$index_2 = 0, $$length2 = each_array_3.length; $$index_2 < $$length2; $$index_2++) {
349
395
  let b = each_array_3[$$index_2];
350
396
  $$payload2.out += `<option${attr("value", b.id)}>${escape_html(b.label)}</option>`;
@@ -353,7 +399,7 @@ function _page($$payload, $$props) {
353
399
  {
354
400
  $$payload2.out += "<!--[!-->";
355
401
  }
356
- $$payload2.out += `<!--]--> <div class="runner-form-actions svelte-bpb2i4">`;
402
+ $$payload2.out += `<!--]--> <div class="runner-form-actions svelte-1b139ls">`;
357
403
  Button($$payload2, {
358
404
  disabled: editFormSaving,
359
405
  children: ($$payload3) => {
@@ -373,28 +419,28 @@ function _page($$payload, $$props) {
373
419
  $$payload2.out += `<!----></div></div>`;
374
420
  } else {
375
421
  $$payload2.out += "<!--[!-->";
376
- $$payload2.out += `<div class="runner-card svelte-bpb2i4"><div class="runner-card-header svelte-bpb2i4"><svg class="runner-card-icon svelte-bpb2i4" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><rect x="2" y="3" width="20" height="14" rx="2"></rect><path d="M8 21h8M12 17v4"></path></svg> <span class="runner-card-name svelte-bpb2i4">${escape_html(r.name)}</span> <span class="runner-browser-pill svelte-bpb2i4">${escape_html(r.browser)}</span> `;
422
+ $$payload2.out += `<div class="runner-card svelte-1b139ls"><div class="runner-card-header svelte-1b139ls"><svg class="runner-card-icon svelte-1b139ls" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><rect x="2" y="3" width="20" height="14" rx="2"></rect><path d="M8 21h8M12 17v4"></path></svg> <span class="runner-card-name svelte-1b139ls">${escape_html(r.name)}</span> <span class="runner-browser-pill svelte-1b139ls">${escape_html(r.browser)}</span> `;
377
423
  if (ping && !ping.loading) {
378
424
  $$payload2.out += "<!--[-->";
379
425
  if (ping.ok) {
380
426
  $$payload2.out += "<!--[-->";
381
- $$payload2.out += `<span class="ping-badge ok svelte-bpb2i4">${escape_html(ping.latency)}ms</span>`;
427
+ $$payload2.out += `<span class="ping-badge ok svelte-1b139ls">${escape_html(ping.latency)}ms</span>`;
382
428
  } else {
383
429
  $$payload2.out += "<!--[!-->";
384
- $$payload2.out += `<span class="ping-badge fail svelte-bpb2i4"${attr("title", ping.error)}>${escape_html(RUNNER_UNREACHABLE_LABEL)}</span>`;
430
+ $$payload2.out += `<span class="ping-badge fail svelte-1b139ls"${attr("title", ping.error)}>${escape_html(RUNNER_UNREACHABLE_LABEL)}</span>`;
385
431
  }
386
432
  $$payload2.out += `<!--]-->`;
387
433
  } else {
388
434
  $$payload2.out += "<!--[!-->";
389
435
  if (ping?.loading) {
390
436
  $$payload2.out += "<!--[-->";
391
- $$payload2.out += `<span class="ping-badge pinging svelte-bpb2i4">${escape_html(RUNNER_PINGING_LABEL)}</span>`;
437
+ $$payload2.out += `<span class="ping-badge pinging svelte-1b139ls">${escape_html(RUNNER_PINGING_LABEL)}</span>`;
392
438
  } else {
393
439
  $$payload2.out += "<!--[!-->";
394
440
  }
395
441
  $$payload2.out += `<!--]-->`;
396
442
  }
397
- $$payload2.out += `<!--]--></div> <p class="runner-card-url svelte-bpb2i4">${escape_html(r.url)}</p> <div class="runner-card-actions svelte-bpb2i4">`;
443
+ $$payload2.out += `<!--]--></div> <p class="runner-card-url svelte-1b139ls">${escape_html(r.url)}</p> <div class="runner-card-actions svelte-1b139ls">`;
398
444
  Button($$payload2, {
399
445
  variant: "ghost",
400
446
  size: "sm",
@@ -443,7 +489,7 @@ function _page($$payload, $$props) {
443
489
  $$payload2.out += `<!--]--> `;
444
490
  {
445
491
  $$payload2.out += "<!--[!-->";
446
- $$payload2.out += `<div class="card-footer svelte-bpb2i4">`;
492
+ $$payload2.out += `<div class="card-footer svelte-1b139ls">`;
447
493
  Button($$payload2, {
448
494
  variant: "ghost",
449
495
  children: ($$payload3) => {
@@ -458,7 +504,7 @@ function _page($$payload, $$props) {
458
504
  $$payload2.out += "<!--[!-->";
459
505
  if (section === "repository") {
460
506
  $$payload2.out += "<!--[-->";
461
- $$payload2.out += `<div class="content-section svelte-bpb2i4"><div class="content-header svelte-bpb2i4"><h2 class="svelte-bpb2i4">${escape_html(REPOSITORY_HEADING)}</h2> <p class="content-desc svelte-bpb2i4">${escape_html(REPOSITORY_DESC)}</p></div> <div class="card settings-card svelte-bpb2i4"><div class="field-row svelte-bpb2i4"><div class="field"><label class="field-label svelte-bpb2i4" for="tc-prefix">${escape_html(CASE_PREFIX_LABEL)}</label> <input id="tc-prefix" type="text" class="field-input mono svelte-bpb2i4"${attr("value", prefixes.testCasePrefix)}${attr("placeholder", CASE_PREFIX_PLACEHOLDER)} maxlength="10"></div> <div class="field"><label class="field-label svelte-bpb2i4" for="ts-prefix">${escape_html(SUITE_PREFIX_LABEL)}</label> <input id="ts-prefix" type="text" class="field-input mono svelte-bpb2i4"${attr("value", prefixes.testSuitePrefix)}${attr("placeholder", SUITE_PREFIX_PLACEHOLDER)} maxlength="10"></div></div> <p class="content-desc svelte-bpb2i4">${escape_html(EXAMPLES_LABEL)} <code class="code-sample svelte-bpb2i4">${escape_html(prefixes.testCasePrefix)}-001</code>, <code class="code-sample svelte-bpb2i4">${escape_html(prefixes.testSuitePrefix)}-001</code></p> <div class="card-footer svelte-bpb2i4">`;
507
+ $$payload2.out += `<div class="content-section svelte-1b139ls"><div class="content-header svelte-1b139ls"><h2 class="svelte-1b139ls">${escape_html(REPOSITORY_HEADING)}</h2> <p class="content-desc svelte-1b139ls">${escape_html(REPOSITORY_DESC)}</p></div> <div class="card settings-card svelte-1b139ls"><div class="field-row svelte-1b139ls"><div class="field"><label class="field-label svelte-1b139ls" for="tc-prefix">${escape_html(CASE_PREFIX_LABEL)}</label> <input id="tc-prefix" type="text" class="field-input mono svelte-1b139ls"${attr("value", prefixes.testCasePrefix)}${attr("placeholder", CASE_PREFIX_PLACEHOLDER)} maxlength="10"></div> <div class="field"><label class="field-label svelte-1b139ls" for="ts-prefix">${escape_html(SUITE_PREFIX_LABEL)}</label> <input id="ts-prefix" type="text" class="field-input mono svelte-1b139ls"${attr("value", prefixes.testSuitePrefix)}${attr("placeholder", SUITE_PREFIX_PLACEHOLDER)} maxlength="10"></div></div> <p class="content-desc svelte-1b139ls">${escape_html(EXAMPLES_LABEL)} <code class="code-sample svelte-1b139ls">${escape_html(prefixes.testCasePrefix)}-001</code>, <code class="code-sample svelte-1b139ls">${escape_html(prefixes.testSuitePrefix)}-001</code></p> <div class="card-footer svelte-1b139ls">`;
462
508
  Button($$payload2, {
463
509
  disabled: prefixesSaving,
464
510
  children: ($$payload3) => {
@@ -466,7 +512,7 @@ function _page($$payload, $$props) {
466
512
  },
467
513
  $$slots: { default: true }
468
514
  });
469
- $$payload2.out += `<!----></div></div> <div class="content-header svelte-bpb2i4" style="margin-top: 1rem"><h2 class="svelte-bpb2i4">${escape_html(MIGRATE_IDS_HEADING)}</h2> <p class="content-desc svelte-bpb2i4">${escape_html(MIGRATE_DESC_PREFIX)} <strong>${escape_html(MIGRATE_DESC_STRONG)}</strong> ${escape_html(MIGRATE_DESC_SUFFIX)}</p></div> <div class="card settings-card svelte-bpb2i4"><div class="field-row svelte-bpb2i4"><div class="field"><label class="field-label svelte-bpb2i4" for="mig-tc">${escape_html(NEW_CASE_PREFIX_LABEL)}</label> <input id="mig-tc" type="text" class="field-input mono svelte-bpb2i4"${attr("value", migrateForm.testCasePrefix)}${attr("placeholder", prefixes.testCasePrefix)} maxlength="10"></div> <div class="field"><label class="field-label svelte-bpb2i4" for="mig-ts">${escape_html(NEW_SUITE_PREFIX_LABEL)}</label> <input id="mig-ts" type="text" class="field-input mono svelte-bpb2i4"${attr("value", migrateForm.testSuitePrefix)}${attr("placeholder", prefixes.testSuitePrefix)} maxlength="10"></div></div> <div class="card-footer svelte-bpb2i4">`;
515
+ $$payload2.out += `<!----></div></div> <div class="content-header svelte-1b139ls" style="margin-top: 1rem"><h2 class="svelte-1b139ls">${escape_html(MIGRATE_IDS_HEADING)}</h2> <p class="content-desc svelte-1b139ls">${escape_html(MIGRATE_DESC_PREFIX)} <strong>${escape_html(MIGRATE_DESC_STRONG)}</strong> ${escape_html(MIGRATE_DESC_SUFFIX)}</p></div> <div class="card settings-card svelte-1b139ls"><div class="field-row svelte-1b139ls"><div class="field"><label class="field-label svelte-1b139ls" for="mig-tc">${escape_html(NEW_CASE_PREFIX_LABEL)}</label> <input id="mig-tc" type="text" class="field-input mono svelte-1b139ls"${attr("value", migrateForm.testCasePrefix)}${attr("placeholder", prefixes.testCasePrefix)} maxlength="10"></div> <div class="field"><label class="field-label svelte-1b139ls" for="mig-ts">${escape_html(NEW_SUITE_PREFIX_LABEL)}</label> <input id="mig-ts" type="text" class="field-input mono svelte-1b139ls"${attr("value", migrateForm.testSuitePrefix)}${attr("placeholder", prefixes.testSuitePrefix)} maxlength="10"></div></div> <div class="card-footer svelte-1b139ls">`;
470
516
  Button($$payload2, {
471
517
  variant: "ghost",
472
518
  disabled: migrating,
@@ -480,7 +526,7 @@ function _page($$payload, $$props) {
480
526
  $$payload2.out += "<!--[!-->";
481
527
  if (section === "integrations") {
482
528
  $$payload2.out += "<!--[-->";
483
- $$payload2.out += `<div class="content-section svelte-bpb2i4"><div class="content-header svelte-bpb2i4"><h2 class="svelte-bpb2i4">${escape_html(INTEGRATIONS_LABEL)}</h2> <p class="content-desc svelte-bpb2i4">${escape_html(INTEGRATIONS_DESC)}</p></div> <div class="card settings-card svelte-bpb2i4"><p class="card-title">${escape_html(WEBHOOKS_CARD_TITLE)}</p> <div class="field"><label class="field-label svelte-bpb2i4" for="discord-url"><span>${escape_html(DISCORD_WEBHOOK_LABEL)}</span> <span class="field-hint svelte-bpb2i4">${escape_html(DISCORD_WEBHOOK_HINT)}</span></label> <input id="discord-url" type="url" class="field-input"${attr("value", integrations.discordWebhookUrl)}${attr("placeholder", DISCORD_WEBHOOK_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-bpb2i4" for="slack-url"><span>${escape_html(SLACK_WEBHOOK_LABEL)}</span> <span class="field-hint svelte-bpb2i4">${escape_html(SLACK_WEBHOOK_HINT)}</span></label> <input id="slack-url" type="url" class="field-input"${attr("value", integrations.slackWebhookUrl)}${attr("placeholder", SLACK_WEBHOOK_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-bpb2i4" for="public-url"><span>${escape_html(PUBLIC_URL_LABEL)}</span> <span class="field-hint svelte-bpb2i4">${escape_html(PUBLIC_URL_HINT)}</span></label> <input id="public-url" type="url" class="field-input"${attr("value", integrations.notifyPublicUrl)}${attr("placeholder", PUBLIC_URL_PLACEHOLDER)}></div> `;
529
+ $$payload2.out += `<div class="content-section svelte-1b139ls"><div class="content-header svelte-1b139ls"><h2 class="svelte-1b139ls">${escape_html(INTEGRATIONS_LABEL)}</h2> <p class="content-desc svelte-1b139ls">${escape_html(INTEGRATIONS_DESC)}</p></div> <div class="card settings-card svelte-1b139ls"><p class="card-title">${escape_html(WEBHOOKS_CARD_TITLE)}</p> <div class="field"><label class="field-label svelte-1b139ls" for="discord-url"><span>${escape_html(DISCORD_WEBHOOK_LABEL)}</span> <span class="field-hint svelte-1b139ls">${escape_html(DISCORD_WEBHOOK_HINT)}</span></label> <input id="discord-url" type="url" class="field-input"${attr("value", integrations.discordWebhookUrl)}${attr("placeholder", DISCORD_WEBHOOK_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-1b139ls" for="slack-url"><span>${escape_html(SLACK_WEBHOOK_LABEL)}</span> <span class="field-hint svelte-1b139ls">${escape_html(SLACK_WEBHOOK_HINT)}</span></label> <input id="slack-url" type="url" class="field-input"${attr("value", integrations.slackWebhookUrl)}${attr("placeholder", SLACK_WEBHOOK_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-1b139ls" for="public-url"><span>${escape_html(PUBLIC_URL_LABEL)}</span> <span class="field-hint svelte-1b139ls">${escape_html(PUBLIC_URL_HINT)}</span></label> <input id="public-url" type="url" class="field-input"${attr("value", integrations.notifyPublicUrl)}${attr("placeholder", PUBLIC_URL_PLACEHOLDER)}></div> `;
484
530
  Button($$payload2, {
485
531
  disabled: integrationsSaving,
486
532
  children: ($$payload3) => {
@@ -488,7 +534,7 @@ function _page($$payload, $$props) {
488
534
  },
489
535
  $$slots: { default: true }
490
536
  });
491
- $$payload2.out += `<!----></div> <div class="card settings-card svelte-bpb2i4"><p class="card-title">${escape_html(CI_TRIGGERS_CARD_TITLE)}</p> <p class="content-desc svelte-bpb2i4">${escape_html(CI_DESC_PART1)} <code class="code-sample svelte-bpb2i4">POST ${escape_html(API_BASE)}/trigger</code> ${escape_html(CI_DESC_PART2)} <code class="code-sample svelte-bpb2i4">Authorization: ApiKey …</code> ${escape_html(CI_DESC_PART3)} <button class="link-btn svelte-bpb2i4">${escape_html(MCP_TAB_LINK_LABEL)}</button> ${escape_html(CI_DESC_PART4)} `;
537
+ $$payload2.out += `<!----></div> <div class="card settings-card svelte-1b139ls"><p class="card-title">${escape_html(CI_TRIGGERS_CARD_TITLE)}</p> <p class="content-desc svelte-1b139ls">${escape_html(CI_DESC_PART1)} <code class="code-sample svelte-1b139ls">POST ${escape_html(API_BASE)}/trigger</code> ${escape_html(CI_DESC_PART2)} <code class="code-sample svelte-1b139ls">Authorization: ApiKey …</code> ${escape_html(CI_DESC_PART3)} <button class="link-btn svelte-1b139ls">${escape_html(MCP_TAB_LINK_LABEL)}</button> ${escape_html(CI_DESC_PART4)} `;
492
538
  Badge($$payload2, {
493
539
  variant: "external",
494
540
  children: ($$payload3) => {
@@ -496,7 +542,7 @@ function _page($$payload, $$props) {
496
542
  },
497
543
  $$slots: { default: true }
498
544
  });
499
- $$payload2.out += `<!---->.</p> <pre class="mcp-snippet svelte-bpb2i4">${escape_html(ciWorkflowSnippet)}</pre> <div class="card-footer svelte-bpb2i4">`;
545
+ $$payload2.out += `<!---->.</p> <pre class="mcp-snippet svelte-1b139ls">${escape_html(ciWorkflowSnippet)}</pre> <div class="card-footer svelte-1b139ls">`;
500
546
  Button($$payload2, {
501
547
  variant: "ghost",
502
548
  children: ($$payload3) => {
@@ -509,10 +555,10 @@ function _page($$payload, $$props) {
509
555
  $$payload2.out += "<!--[!-->";
510
556
  if (section === "mcp") {
511
557
  $$payload2.out += "<!--[-->";
512
- $$payload2.out += `<div class="content-section svelte-bpb2i4"><div class="content-header svelte-bpb2i4"><h2 class="svelte-bpb2i4">${escape_html(MCP_HEADING)}</h2> <p class="content-desc svelte-bpb2i4">${escape_html(MCP_DESC)}</p></div> <div class="card settings-card svelte-bpb2i4"><p class="card-title">${escape_html(API_KEY_CARD_TITLE)}</p> `;
558
+ $$payload2.out += `<div class="content-section svelte-1b139ls"><div class="content-header svelte-1b139ls"><h2 class="svelte-1b139ls">${escape_html(MCP_HEADING)}</h2> <p class="content-desc svelte-1b139ls">${escape_html(MCP_DESC)}</p></div> <div class="card settings-card svelte-1b139ls"><p class="card-title">${escape_html(API_KEY_CARD_TITLE)}</p> `;
513
559
  {
514
560
  $$payload2.out += "<!--[-->";
515
- $$payload2.out += `<p class="content-desc svelte-bpb2i4">${escape_html(NO_KEY_GENERATED_MESSAGE)}</p> <div class="card-footer svelte-bpb2i4">`;
561
+ $$payload2.out += `<p class="content-desc svelte-1b139ls">${escape_html(NO_KEY_GENERATED_MESSAGE)}</p> <div class="card-footer svelte-1b139ls">`;
516
562
  Button($$payload2, {
517
563
  disabled: mcpGenerating,
518
564
  children: ($$payload3) => {
@@ -531,11 +577,11 @@ function _page($$payload, $$props) {
531
577
  $$payload2.out += "<!--[!-->";
532
578
  if (section === "account") {
533
579
  $$payload2.out += "<!--[-->";
534
- $$payload2.out += `<div class="content-section svelte-bpb2i4"><div class="content-header svelte-bpb2i4"><h2 class="svelte-bpb2i4">${escape_html(ACCOUNT_LABEL)}</h2> <p class="content-desc svelte-bpb2i4">${escape_html(ACCOUNT_DESC)}</p></div> <div class="card settings-card svelte-bpb2i4"><p class="card-title">${escape_html(PROFILE_CARD_TITLE)}</p> <div class="field"><label class="field-label svelte-bpb2i4" for="profile-name">${escape_html(NAME_LABEL)}</label> <input id="profile-name" type="text" class="field-input"${attr("value", profileForm.name)}></div> <div class="field"><label class="field-label svelte-bpb2i4" for="profile-email">${escape_html(EMAIL_LABEL)}</label> <input id="profile-email" type="email" class="field-input"${attr("value", profileForm.email)}></div> `;
580
+ $$payload2.out += `<div class="content-section svelte-1b139ls"><div class="content-header svelte-1b139ls"><h2 class="svelte-1b139ls">${escape_html(ACCOUNT_LABEL)}</h2> <p class="content-desc svelte-1b139ls">${escape_html(ACCOUNT_DESC)}</p></div> <div class="card settings-card svelte-1b139ls"><p class="card-title">${escape_html(PROFILE_CARD_TITLE)}</p> <div class="field"><label class="field-label svelte-1b139ls" for="profile-name">${escape_html(NAME_LABEL)}</label> <input id="profile-name" type="text" class="field-input"${attr("value", profileForm.name)}></div> <div class="field"><label class="field-label svelte-1b139ls" for="profile-email">${escape_html(EMAIL_LABEL)}</label> <input id="profile-email" type="email" class="field-input"${attr("value", profileForm.email)}></div> `;
535
581
  {
536
582
  $$payload2.out += "<!--[!-->";
537
583
  }
538
- $$payload2.out += `<!--]--> <div class="card-footer svelte-bpb2i4">`;
584
+ $$payload2.out += `<!--]--> <div class="card-footer svelte-1b139ls">`;
539
585
  Button($$payload2, {
540
586
  disabled: true,
541
587
  children: ($$payload3) => {
@@ -543,11 +589,11 @@ function _page($$payload, $$props) {
543
589
  },
544
590
  $$slots: { default: true }
545
591
  });
546
- $$payload2.out += `<!----></div></div> <div class="card settings-card svelte-bpb2i4"><p class="card-title">${escape_html(CHANGE_PASSWORD_CARD_TITLE)}</p> <div class="field"><label class="field-label svelte-bpb2i4" for="pw-current">${escape_html(CURRENT_PASSWORD_LABEL)}</label> <input id="pw-current" type="password" class="field-input"${attr("value", pwForm.currentPassword)} autocomplete="current-password"></div> <div class="field"><label class="field-label svelte-bpb2i4" for="pw-new">${escape_html(NEW_PASSWORD_LABEL)}</label> <input id="pw-new" type="password" class="field-input"${attr("value", pwForm.newPassword)} autocomplete="new-password"></div> <div class="field"><label class="field-label svelte-bpb2i4" for="pw-confirm">${escape_html(CONFIRM_NEW_PASSWORD_LABEL)}</label> <input id="pw-confirm" type="password" class="field-input"${attr("value", pwForm.confirmPassword)} autocomplete="new-password"></div> `;
592
+ $$payload2.out += `<!----></div></div> <div class="card settings-card svelte-1b139ls"><p class="card-title">${escape_html(CHANGE_PASSWORD_CARD_TITLE)}</p> <div class="field"><label class="field-label svelte-1b139ls" for="pw-current">${escape_html(CURRENT_PASSWORD_LABEL)}</label> <input id="pw-current" type="password" class="field-input"${attr("value", pwForm.currentPassword)} autocomplete="current-password"></div> <div class="field"><label class="field-label svelte-1b139ls" for="pw-new">${escape_html(NEW_PASSWORD_LABEL)}</label> <input id="pw-new" type="password" class="field-input"${attr("value", pwForm.newPassword)} autocomplete="new-password"></div> <div class="field"><label class="field-label svelte-1b139ls" for="pw-confirm">${escape_html(CONFIRM_NEW_PASSWORD_LABEL)}</label> <input id="pw-confirm" type="password" class="field-input"${attr("value", pwForm.confirmPassword)} autocomplete="new-password"></div> `;
547
593
  {
548
594
  $$payload2.out += "<!--[!-->";
549
595
  }
550
- $$payload2.out += `<!--]--> <div class="card-footer svelte-bpb2i4">`;
596
+ $$payload2.out += `<!--]--> <div class="card-footer svelte-1b139ls">`;
551
597
  Button($$payload2, {
552
598
  disabled: true,
553
599
  children: ($$payload3) => {
@@ -555,7 +601,7 @@ function _page($$payload, $$props) {
555
601
  },
556
602
  $$slots: { default: true }
557
603
  });
558
- $$payload2.out += `<!----></div></div> <div class="card settings-card svelte-bpb2i4"><div class="card-footer svelte-bpb2i4">`;
604
+ $$payload2.out += `<!----></div></div> <div class="card settings-card svelte-1b139ls"><div class="card-footer svelte-1b139ls">`;
559
605
  Button($$payload2, {
560
606
  variant: "danger",
561
607
  size: "sm",
@@ -569,7 +615,7 @@ function _page($$payload, $$props) {
569
615
  $$payload2.out += "<!--[!-->";
570
616
  if (section === "users") {
571
617
  $$payload2.out += "<!--[-->";
572
- $$payload2.out += `<div class="content-section svelte-bpb2i4"><div class="content-header svelte-bpb2i4"><h2 class="svelte-bpb2i4">${escape_html(USERS_LABEL)}</h2> <p class="content-desc svelte-bpb2i4">${escape_html(USERS_DESC)}</p></div> `;
618
+ $$payload2.out += `<div class="content-section svelte-1b139ls"><div class="content-header svelte-1b139ls"><h2 class="svelte-1b139ls">${escape_html(USERS_LABEL)}</h2> <p class="content-desc svelte-1b139ls">${escape_html(USERS_DESC)}</p></div> `;
573
619
  ConfirmModal($$payload2, {
574
620
  title: REMOVE_USER_MODAL_TITLE,
575
621
  confirmLabel: REMOVE_USER_LABEL,
@@ -588,11 +634,11 @@ function _page($$payload, $$props) {
588
634
  },
589
635
  $$slots: { default: true }
590
636
  });
591
- $$payload2.out += `<!----> <div class="card settings-card svelte-bpb2i4"><p class="card-title">${escape_html(ADD_USER_CARD_TITLE)}</p> <div class="field-row svelte-bpb2i4"><div class="field"><label class="field-label svelte-bpb2i4" for="u-name">${escape_html(NAME_LABEL)}</label> <input id="u-name" type="text" class="field-input"${attr("value", userForm.name)}${attr("placeholder", USER_NAME_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-bpb2i4" for="u-email">${escape_html(EMAIL_LABEL)}</label> <input id="u-email" type="email" class="field-input"${attr("value", userForm.email)}${attr("placeholder", USER_EMAIL_PLACEHOLDER)}></div></div> <div class="field-row svelte-bpb2i4"><div class="field"><label class="field-label svelte-bpb2i4" for="u-pw">${escape_html(PASSWORD_LABEL)}</label> <input id="u-pw" type="password" class="field-input"${attr("value", userForm.password)} autocomplete="new-password"></div> <div class="field"><label class="field-label svelte-bpb2i4" for="u-role">${escape_html(ROLE_LABEL)}</label> <select id="u-role" class="field-input"><option value="user">${escape_html(USER_ROLE_OPTION)}</option><option value="admin">${escape_html(ADMIN_ROLE_OPTION)}</option></select></div></div> `;
637
+ $$payload2.out += `<!----> <div class="card settings-card svelte-1b139ls"><p class="card-title">${escape_html(ADD_USER_CARD_TITLE)}</p> <div class="field-row svelte-1b139ls"><div class="field"><label class="field-label svelte-1b139ls" for="u-name">${escape_html(NAME_LABEL)}</label> <input id="u-name" type="text" class="field-input"${attr("value", userForm.name)}${attr("placeholder", USER_NAME_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-1b139ls" for="u-email">${escape_html(EMAIL_LABEL)}</label> <input id="u-email" type="email" class="field-input"${attr("value", userForm.email)}${attr("placeholder", USER_EMAIL_PLACEHOLDER)}></div></div> <div class="field-row svelte-1b139ls"><div class="field"><label class="field-label svelte-1b139ls" for="u-pw">${escape_html(PASSWORD_LABEL)}</label> <input id="u-pw" type="password" class="field-input"${attr("value", userForm.password)} autocomplete="new-password"></div> <div class="field"><label class="field-label svelte-1b139ls" for="u-role">${escape_html(ROLE_LABEL)}</label> <select id="u-role" class="field-input"><option value="user">${escape_html(USER_ROLE_OPTION)}</option><option value="admin">${escape_html(ADMIN_ROLE_OPTION)}</option></select></div></div> `;
592
638
  {
593
639
  $$payload2.out += "<!--[!-->";
594
640
  }
595
- $$payload2.out += `<!--]--> <div class="card-footer svelte-bpb2i4">`;
641
+ $$payload2.out += `<!--]--> <div class="card-footer svelte-1b139ls">`;
596
642
  Button($$payload2, {
597
643
  disabled: userFormSaving,
598
644
  children: ($$payload3) => {
@@ -604,16 +650,16 @@ function _page($$payload, $$props) {
604
650
  if (allUsers.length > 0) {
605
651
  $$payload2.out += "<!--[-->";
606
652
  const each_array_5 = ensure_array_like(allUsers);
607
- $$payload2.out += `<div class="users-table svelte-bpb2i4"><!--[-->`;
653
+ $$payload2.out += `<div class="users-table svelte-1b139ls"><!--[-->`;
608
654
  for (let $$index_5 = 0, $$length = each_array_5.length; $$index_5 < $$length; $$index_5++) {
609
655
  let u = each_array_5[$$index_5];
610
- $$payload2.out += `<div class="user-row svelte-bpb2i4"><div class="user-info svelte-bpb2i4"><span class="user-name svelte-bpb2i4">${escape_html(u.name)}</span> <span class="user-email svelte-bpb2i4">${escape_html(u.email)}</span></div> <span${attr("class", `role-chip ${stringify(u.role)} svelte-bpb2i4`)}>${escape_html(u.role)}</span> `;
656
+ $$payload2.out += `<div class="user-row svelte-1b139ls"><div class="user-info svelte-1b139ls"><span class="user-name svelte-1b139ls">${escape_html(u.name)}</span> <span class="user-email svelte-1b139ls">${escape_html(u.email)}</span></div> <span${attr("class", `role-chip ${stringify(u.role)} svelte-1b139ls`)}>${escape_html(u.role)}</span> `;
611
657
  if (u.id !== store_get($$store_subs ??= {}, "$auth", auth).user?.id) {
612
658
  $$payload2.out += "<!--[-->";
613
- $$payload2.out += `<button class="icon-btn danger svelte-bpb2i4"${attr("title", REMOVE_USER_ICON_TITLE)}><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"></path><path d="M10 11v6M14 11v6"></path><path d="M9 6V4h6v2"></path></svg></button>`;
659
+ $$payload2.out += `<button class="icon-btn danger svelte-1b139ls"${attr("title", REMOVE_USER_ICON_TITLE)}><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"></path><path d="M10 11v6M14 11v6"></path><path d="M9 6V4h6v2"></path></svg></button>`;
614
660
  } else {
615
661
  $$payload2.out += "<!--[!-->";
616
- $$payload2.out += `<span class="you-chip svelte-bpb2i4">${escape_html(YOU_CHIP_LABEL)}</span>`;
662
+ $$payload2.out += `<span class="you-chip svelte-1b139ls">${escape_html(YOU_CHIP_LABEL)}</span>`;
617
663
  }
618
664
  $$payload2.out += `<!--]--></div>`;
619
665
  }
@@ -626,7 +672,7 @@ function _page($$payload, $$props) {
626
672
  $$payload2.out += "<!--[!-->";
627
673
  if (section === "backup") {
628
674
  $$payload2.out += "<!--[-->";
629
- $$payload2.out += `<div class="content-section svelte-bpb2i4"><div class="content-header svelte-bpb2i4"><h2 class="svelte-bpb2i4">${escape_html(BACKUP_LABEL)}</h2> <p class="content-desc svelte-bpb2i4">${escape_html(BACKUP_DESC)}</p></div> <div class="card settings-card svelte-bpb2i4"><p class="card-title">${escape_html(MANUAL_BACKUP_CARD_TITLE)}</p> <div class="backup-row svelte-bpb2i4"><div class="backup-block svelte-bpb2i4"><p class="backup-block-title svelte-bpb2i4">${escape_html(EXPORT_BLOCK_TITLE)}</p> <p class="backup-block-desc svelte-bpb2i4">${escape_html(EXPORT_BLOCK_DESC_PREFIX)} <code class="svelte-bpb2i4">.json</code> ${escape_html(EXPORT_BLOCK_DESC_SUFFIX)}</p> `;
675
+ $$payload2.out += `<div class="content-section svelte-1b139ls"><div class="content-header svelte-1b139ls"><h2 class="svelte-1b139ls">${escape_html(BACKUP_LABEL)}</h2> <p class="content-desc svelte-1b139ls">${escape_html(BACKUP_DESC)}</p></div> <div class="card settings-card svelte-1b139ls"><p class="card-title">${escape_html(MANUAL_BACKUP_CARD_TITLE)}</p> <div class="backup-row svelte-1b139ls"><div class="backup-block svelte-1b139ls"><p class="backup-block-title svelte-1b139ls">${escape_html(EXPORT_BLOCK_TITLE)}</p> <p class="backup-block-desc svelte-1b139ls">${escape_html(EXPORT_BLOCK_DESC_PREFIX)} <code class="svelte-1b139ls">.json</code> ${escape_html(EXPORT_BLOCK_DESC_SUFFIX)}</p> `;
630
676
  Button($$payload2, {
631
677
  disabled: exporting,
632
678
  children: ($$payload3) => {
@@ -634,7 +680,7 @@ function _page($$payload, $$props) {
634
680
  },
635
681
  $$slots: { default: true }
636
682
  });
637
- $$payload2.out += `<!----></div> <div class="backup-divider svelte-bpb2i4"></div> <div class="backup-block svelte-bpb2i4"><p class="backup-block-title svelte-bpb2i4">${escape_html(IMPORT_BLOCK_TITLE)}</p> <p class="backup-block-desc svelte-bpb2i4">${escape_html(IMPORT_BLOCK_DESC)}</p> <div class="import-row svelte-bpb2i4"><label class="file-label svelte-bpb2i4"><input type="file" accept=".json" class="file-input-hidden svelte-bpb2i4"> <span class="file-btn svelte-bpb2i4">${escape_html(CHOOSE_FILE_LABEL)}</span></label> `;
683
+ $$payload2.out += `<!----></div> <div class="backup-divider svelte-1b139ls"></div> <div class="backup-block svelte-1b139ls"><p class="backup-block-title svelte-1b139ls">${escape_html(IMPORT_BLOCK_TITLE)}</p> <p class="backup-block-desc svelte-1b139ls">${escape_html(IMPORT_BLOCK_DESC)}</p> <div class="import-row svelte-1b139ls"><label class="file-label svelte-1b139ls"><input type="file" accept=".json" class="file-input-hidden svelte-1b139ls"> <span class="file-btn svelte-1b139ls">${escape_html(CHOOSE_FILE_LABEL)}</span></label> `;
638
684
  Button($$payload2, {
639
685
  disabled: true,
640
686
  children: ($$payload3) => {
@@ -642,7 +688,18 @@ function _page($$payload, $$props) {
642
688
  },
643
689
  $$slots: { default: true }
644
690
  });
645
- $$payload2.out += `<!----></div></div></div> <p class="backup-disclaimer svelte-bpb2i4">${escape_html(BACKUP_DISCLAIMER_PREFIX)} <code>pg_dump</code> ${escape_html(BACKUP_DISCLAIMER_SUFFIX)}</p></div> <div class="card settings-card svelte-bpb2i4"><p class="card-title">${escape_html(S3_STORAGE_CARD_TITLE)}</p> <p class="backup-block-desc svelte-bpb2i4" style="margin-bottom: 1.25rem;">${escape_html(S3_STORAGE_DESC_PREFIX)} <strong>${escape_html(ENDPOINT_URL_LABEL)}</strong> ${escape_html(S3_STORAGE_DESC_SUFFIX)}</p> <div class="field-row svelte-bpb2i4"><div class="field"><label class="field-label svelte-bpb2i4" for="s3-endpoint"><span>${escape_html(ENDPOINT_URL_LABEL)}</span> <span class="field-hint svelte-bpb2i4">${escape_html(ENDPOINT_URL_HINT)}</span></label> <input id="s3-endpoint" type="url" class="field-input"${attr("value", backupConfig.backupS3Endpoint)}${attr("placeholder", ENDPOINT_URL_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-bpb2i4" for="s3-region"><span>${escape_html(REGION_LABEL)}</span> <span class="field-hint svelte-bpb2i4">${escape_html(REGION_HINT_PREFIX)} <code>auto</code> ${escape_html(REGION_HINT_SUFFIX)}</span></label> <input id="s3-region" type="text" class="field-input"${attr("value", backupConfig.backupS3Region)}${attr("placeholder", REGION_PLACEHOLDER)}></div></div> <div class="field-row svelte-bpb2i4"><div class="field"><label class="field-label svelte-bpb2i4" for="s3-bucket"><span>${escape_html(BUCKET_LABEL)}</span></label> <input id="s3-bucket" type="text" class="field-input"${attr("value", backupConfig.backupS3Bucket)}${attr("placeholder", BUCKET_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-bpb2i4" for="s3-prefix"><span>${escape_html(PATH_PREFIX_LABEL)}</span> <span class="field-hint svelte-bpb2i4">${escape_html(PATH_PREFIX_HINT)}</span></label> <input id="s3-prefix" type="text" class="field-input"${attr("value", backupConfig.backupS3Prefix)}${attr("placeholder", PATH_PREFIX_PLACEHOLDER)}></div></div> <div class="field-row svelte-bpb2i4"><div class="field"><label class="field-label svelte-bpb2i4" for="s3-access-key"><span>${escape_html(ACCESS_KEY_LABEL)}</span></label> <input id="s3-access-key" type="text" class="field-input"${attr("value", backupConfig.backupS3AccessKey)}${attr("placeholder", ACCESS_KEY_PLACEHOLDER)} autocomplete="off"></div> <div class="field"><label class="field-label svelte-bpb2i4" for="s3-secret-key"><span>${escape_html(SECRET_KEY_LABEL)}</span> <span class="field-hint svelte-bpb2i4">${escape_html(secretKeyHint())}</span></label> <input id="s3-secret-key" type="password" class="field-input"${attr("value", backupConfig.backupS3SecretKey)}${attr("placeholder", secretKeyPlaceholder(backupS3SecretKeySet))} autocomplete="new-password"></div></div> <div class="backup-actions svelte-bpb2i4">`;
691
+ $$payload2.out += `<!----></div></div></div> <div class="include-reports-row svelte-1b139ls"><label class="field-label backup-toggle-label svelte-1b139ls" for="include-reports"><span class="svelte-1b139ls">${escape_html(INCLUDE_REPORTS_LABEL)} <span class="field-hint svelte-1b139ls">${escape_html(INCLUDE_REPORTS_HINT)}</span></span> <button id="include-reports"${attr("class", `toggle-btn svelte-1b139ls ${stringify([
692
+ ""
693
+ ].filter(Boolean).join(" "))}`)} role="switch"${attr("aria-checked", backupConfig.backupIncludeReports)}><span class="toggle-thumb svelte-1b139ls"></span></button></label> `;
694
+ Button($$payload2, {
695
+ variant: "ghost",
696
+ disabled: includeReportsSaving,
697
+ children: ($$payload3) => {
698
+ $$payload3.out += `<!---->${escape_html(saveIncludeReportsLabel())}`;
699
+ },
700
+ $$slots: { default: true }
701
+ });
702
+ $$payload2.out += `<!----></div> <p class="backup-disclaimer svelte-1b139ls">${escape_html(includeReportsDisclaimer())}</p></div> <div class="card settings-card svelte-1b139ls"><p class="card-title">${escape_html(S3_STORAGE_CARD_TITLE)}</p> <p class="backup-block-desc svelte-1b139ls" style="margin-bottom: 1.25rem;">${escape_html(S3_STORAGE_DESC_PREFIX)} <strong>${escape_html(ENDPOINT_URL_LABEL)}</strong> ${escape_html(S3_STORAGE_DESC_SUFFIX)}</p> <div class="field-row svelte-1b139ls"><div class="field"><label class="field-label svelte-1b139ls" for="s3-endpoint"><span>${escape_html(ENDPOINT_URL_LABEL)}</span> <span class="field-hint svelte-1b139ls">${escape_html(ENDPOINT_URL_HINT)}</span></label> <input id="s3-endpoint" type="url" class="field-input"${attr("value", backupConfig.backupS3Endpoint)}${attr("placeholder", ENDPOINT_URL_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-1b139ls" for="s3-region"><span>${escape_html(REGION_LABEL)}</span> <span class="field-hint svelte-1b139ls">${escape_html(REGION_HINT_PREFIX)} <code>auto</code> ${escape_html(REGION_HINT_SUFFIX)}</span></label> <input id="s3-region" type="text" class="field-input"${attr("value", backupConfig.backupS3Region)}${attr("placeholder", REGION_PLACEHOLDER)}></div></div> <div class="field-row svelte-1b139ls"><div class="field"><label class="field-label svelte-1b139ls" for="s3-bucket"><span>${escape_html(BUCKET_LABEL)}</span></label> <input id="s3-bucket" type="text" class="field-input"${attr("value", backupConfig.backupS3Bucket)}${attr("placeholder", BUCKET_PLACEHOLDER)}></div> <div class="field"><label class="field-label svelte-1b139ls" for="s3-prefix"><span>${escape_html(PATH_PREFIX_LABEL)}</span> <span class="field-hint svelte-1b139ls">${escape_html(PATH_PREFIX_HINT)}</span></label> <input id="s3-prefix" type="text" class="field-input"${attr("value", backupConfig.backupS3Prefix)}${attr("placeholder", PATH_PREFIX_PLACEHOLDER)}></div></div> <div class="field-row svelte-1b139ls"><div class="field"><label class="field-label svelte-1b139ls" for="s3-access-key"><span>${escape_html(ACCESS_KEY_LABEL)}</span></label> <input id="s3-access-key" type="text" class="field-input"${attr("value", backupConfig.backupS3AccessKey)}${attr("placeholder", ACCESS_KEY_PLACEHOLDER)} autocomplete="off"></div> <div class="field"><label class="field-label svelte-1b139ls" for="s3-secret-key"><span>${escape_html(SECRET_KEY_LABEL)}</span> <span class="field-hint svelte-1b139ls">${escape_html(secretKeyHint())}</span></label> <input id="s3-secret-key" type="password" class="field-input"${attr("value", backupConfig.backupS3SecretKey)}${attr("placeholder", secretKeyPlaceholder(backupS3SecretKeySet))} autocomplete="new-password"></div></div> <div class="backup-actions svelte-1b139ls">`;
646
703
  Button($$payload2, {
647
704
  variant: "ghost",
648
705
  disabled: backupTestingS3,
@@ -663,17 +720,82 @@ function _page($$payload, $$props) {
663
720
  {
664
721
  $$payload2.out += "<!--[!-->";
665
722
  }
666
- $$payload2.out += `<!--]--></div> <div${attr("class", `card settings-card svelte-bpb2i4 ${stringify([!s3Configured ? "card-disabled" : ""].filter(Boolean).join(" "))}`)}><p class="card-title">${escape_html(SCHEDULED_BACKUP_CARD_TITLE)}</p> `;
723
+ $$payload2.out += `<!--]--></div> `;
724
+ ConfirmModal($$payload2, {
725
+ title: RESTORE_CONFIRM_TITLE,
726
+ confirmLabel: restoreLabel(false),
727
+ loading: false,
728
+ get open() {
729
+ return restoreConfirmOpen;
730
+ },
731
+ set open($$value) {
732
+ restoreConfirmOpen = $$value;
733
+ $$settled = false;
734
+ },
735
+ children: ($$payload3) => {
736
+ {
737
+ $$payload3.out += "<!--[!-->";
738
+ }
739
+ $$payload3.out += `<!--]-->`;
740
+ },
741
+ $$slots: { default: true }
742
+ });
743
+ $$payload2.out += `<!----> <div${attr("class", `card settings-card svelte-1b139ls ${stringify([!s3Configured ? "card-disabled" : ""].filter(Boolean).join(" "))}`)}><div class="card-title-row svelte-1b139ls"><p class="card-title svelte-1b139ls">${escape_html(RESTORE_FROM_S3_CARD_TITLE)}</p> `;
744
+ if (s3Configured) {
745
+ $$payload2.out += "<!--[-->";
746
+ Button($$payload2, {
747
+ variant: "ghost",
748
+ disabled: loadingS3Backups,
749
+ children: ($$payload3) => {
750
+ $$payload3.out += `<!---->${escape_html(refreshingLabel(loadingS3Backups))}`;
751
+ },
752
+ $$slots: { default: true }
753
+ });
754
+ } else {
755
+ $$payload2.out += "<!--[!-->";
756
+ }
757
+ $$payload2.out += `<!--]--></div> `;
758
+ if (!s3Configured) {
759
+ $$payload2.out += "<!--[-->";
760
+ $$payload2.out += `<p class="backup-block-desc svelte-1b139ls">${escape_html(CONFIGURE_S3_FIRST_RESTORE_MESSAGE)}</p>`;
761
+ } else {
762
+ $$payload2.out += "<!--[!-->";
763
+ $$payload2.out += `<p class="backup-block-desc svelte-1b139ls" style="margin-bottom: 1rem;">${escape_html(RESTORE_FROM_S3_DESC)}</p> `;
764
+ if (s3Backups.length === 0) {
765
+ $$payload2.out += "<!--[-->";
766
+ $$payload2.out += `<p class="backup-block-desc svelte-1b139ls">${escape_html(loadingS3Backups ? refreshingLabel(true) : NO_S3_BACKUPS_MESSAGE)}</p>`;
767
+ } else {
768
+ $$payload2.out += "<!--[!-->";
769
+ const each_array_6 = ensure_array_like(s3Backups);
770
+ $$payload2.out += `<ul class="s3-backup-list svelte-1b139ls"><!--[-->`;
771
+ for (let $$index_6 = 0, $$length = each_array_6.length; $$index_6 < $$length; $$index_6++) {
772
+ let backup = each_array_6[$$index_6];
773
+ $$payload2.out += `<li class="s3-backup-row svelte-1b139ls"><div class="s3-backup-info svelte-1b139ls"><span class="s3-backup-key svelte-1b139ls">${escape_html(backup.key)}</span> <span class="s3-backup-meta svelte-1b139ls">${escape_html(new Date(backup.lastModified).toLocaleString())} · ${escape_html(backupSizeLabel(backup.size))}</span></div> `;
774
+ Button($$payload2, {
775
+ variant: "ghost",
776
+ disabled: restoringKey === backup.key,
777
+ children: ($$payload3) => {
778
+ $$payload3.out += `<!---->${escape_html(restoreLabel(restoringKey === backup.key))}`;
779
+ },
780
+ $$slots: { default: true }
781
+ });
782
+ $$payload2.out += `<!----></li>`;
783
+ }
784
+ $$payload2.out += `<!--]--></ul>`;
785
+ }
786
+ $$payload2.out += `<!--]-->`;
787
+ }
788
+ $$payload2.out += `<!--]--></div> <div${attr("class", `card settings-card svelte-1b139ls ${stringify([!s3Configured ? "card-disabled" : ""].filter(Boolean).join(" "))}`)}><p class="card-title">${escape_html(SCHEDULED_BACKUP_CARD_TITLE)}</p> `;
667
789
  if (!s3Configured) {
668
790
  $$payload2.out += "<!--[-->";
669
- $$payload2.out += `<p class="backup-block-desc svelte-bpb2i4">${escape_html(CONFIGURE_S3_FIRST_MESSAGE)}</p>`;
791
+ $$payload2.out += `<p class="backup-block-desc svelte-1b139ls">${escape_html(CONFIGURE_S3_FIRST_MESSAGE)}</p>`;
670
792
  } else {
671
793
  $$payload2.out += "<!--[!-->";
672
- $$payload2.out += `<div class="field"><label class="field-label backup-toggle-label svelte-bpb2i4" for="backup-enabled"><span>${escape_html(ENABLE_SCHEDULED_BACKUP_LABEL)}</span> <button id="backup-enabled"${attr("class", `toggle-btn svelte-bpb2i4 ${stringify([""].filter(Boolean).join(" "))}`)} role="switch"${attr("aria-checked", backupConfig.backupEnabled)}><span class="toggle-thumb svelte-bpb2i4"></span></button></label></div> <div class="field"><label class="field-label svelte-bpb2i4" for="backup-cron"><span>${escape_html(CRON_EXPRESSION_LABEL)}</span> <span class="field-hint svelte-bpb2i4">${escape_html(CRON_HINT_PREFIX)} <code>0 2 * * *</code> ${escape_html(CRON_HINT_SUFFIX)} <a href="https://crontab.guru" target="_blank" rel="noopener noreferrer">${escape_html(CRONTAB_LINK_LABEL)}</a></span></label> <input id="backup-cron" type="text" class="field-input field-input-mono svelte-bpb2i4"${attr("value", backupConfig.backupCron)}${attr("placeholder", CRON_PLACEHOLDER)}></div> `;
794
+ $$payload2.out += `<div class="field"><label class="field-label backup-toggle-label svelte-1b139ls" for="backup-enabled"><span>${escape_html(ENABLE_SCHEDULED_BACKUP_LABEL)}</span> <button id="backup-enabled"${attr("class", `toggle-btn svelte-1b139ls ${stringify([""].filter(Boolean).join(" "))}`)} role="switch"${attr("aria-checked", backupConfig.backupEnabled)}><span class="toggle-thumb svelte-1b139ls"></span></button></label></div> <div class="field"><label class="field-label svelte-1b139ls" for="backup-cron"><span>${escape_html(CRON_EXPRESSION_LABEL)}</span> <span class="field-hint svelte-1b139ls">${escape_html(CRON_HINT_PREFIX)} <code>0 2 * * *</code> ${escape_html(CRON_HINT_SUFFIX)} <a href="https://crontab.guru" target="_blank" rel="noopener noreferrer">${escape_html(CRONTAB_LINK_LABEL)}</a></span></label> <input id="backup-cron" type="text" class="field-input field-input-mono svelte-1b139ls"${attr("value", backupConfig.backupCron)}${attr("placeholder", CRON_PLACEHOLDER)}></div> `;
673
795
  {
674
796
  $$payload2.out += "<!--[!-->";
675
797
  }
676
- $$payload2.out += `<!--]--> <div class="backup-actions svelte-bpb2i4">`;
798
+ $$payload2.out += `<!--]--> <div class="backup-actions svelte-1b139ls">`;
677
799
  Button($$payload2, {
678
800
  variant: "ghost",
679
801
  disabled: backupRunningNow,
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License. See LICENSE file in the project root for details.
4
4
  */
5
5
 
6
- import { X as head, _ as store_get, $ as unsubscribe_stores, p as pop, a as push } from "../../../chunks/index.js";
6
+ import { X as head, a0 as store_get, a1 as unsubscribe_stores, p as pop, a as push } from "../../../chunks/index.js";
7
7
  import "../../../chunks/client.js";
8
8
  import "../../../chunks/auth.js";
9
9
  import { t as theme } from "../../../chunks/theme.js";