plum-e2e 2.6.8 → 2.7.1

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 (1040) hide show
  1. package/.env +5 -0
  2. package/CLAUDE.md +17 -2
  3. package/LICENSE +21 -677
  4. package/README.md +1 -1
  5. package/backend/Dockerfile +1 -13
  6. package/backend/app.js +4 -14
  7. package/backend/config/scripts/create-step.mjs +1 -13
  8. package/backend/config/scripts/create-test.mjs +1 -13
  9. package/backend/config/scripts/generate-report.js +5 -15
  10. package/backend/config/scripts/run-tests.js +5 -16
  11. package/backend/constants/defaults.js +8 -0
  12. package/backend/constants/env.js +16 -0
  13. package/backend/constants/jobStatus.js +21 -0
  14. package/backend/constants/socketEvents.js +40 -0
  15. package/backend/constants/triggers.js +6 -14
  16. package/backend/entrypoint.sh +1 -13
  17. package/backend/lib/authHeader.js +16 -0
  18. package/backend/lib/globalRegistry.js +1 -13
  19. package/backend/lib/nodeRegister.js +1 -13
  20. package/backend/lib/reportFilename.js +1 -13
  21. package/backend/lib/retryRunner.js +1 -13
  22. package/backend/lib/runnerProcess.js +34 -31
  23. package/backend/lib/screenshotPoller.js +1 -13
  24. package/backend/lib/serverBootstrap.js +189 -0
  25. package/backend/lib/serverConfig.js +1 -13
  26. package/backend/lib/testChunker.js +1 -13
  27. package/backend/lib/testEnv.js +1 -13
  28. package/backend/logs/runner-cmqneqerz0000qq01i5ap2rvl.log +4 -0
  29. package/backend/logs/runner-cmqnfv7kr0000r101aeocm8eu.log +4 -0
  30. package/backend/logs/runner-cmqnfvb560001r101qoi0phau.log +4 -0
  31. package/backend/logs/runner-cmqnfvlm20002r101gsyqb837.log +4 -0
  32. package/backend/logs/runner-cmqnfvqfy0003r101fh41pzx3.log +4 -0
  33. package/backend/logs/runner-cmqnfvvwo0004r101q4dtqxd2.log +4 -0
  34. package/backend/logs/runner-cmr8o2x3n0000mg01410tpuck.log +4 -0
  35. package/backend/logs/runner-cmr90hvcx0000n2016edtmrtv.log +4 -0
  36. package/backend/logs/runner-cmr90i7h20001n201g2wg6v3n.log +4 -0
  37. package/backend/logs/runner-cmr90iilm0002n201mmisva95.log +4 -0
  38. package/backend/logs/runner-cmr90j70r0003n201xz8525dz.log +4 -0
  39. package/backend/logs/runner-cmr90yup70000qp017ianc2gp.log +4 -0
  40. package/backend/logs/runner-cmr90zbtm0001qp01u9tfdkh1.log +4 -0
  41. package/backend/logs/runner-cmr91a3mw0000tb01414rd1df.log +4 -0
  42. package/backend/logs/runner-cmr91dhla0001tb01jp7thjnl.log +4 -0
  43. package/backend/logs/runner-cmrkk6fcl0000qj012kve79f4.log +4 -0
  44. package/backend/logs/runner-cmrkl8sym0000qy01euz4270n.log +4 -0
  45. package/backend/logs/runner-cmrkl9oyx0001qy0137nzr94d.log +4 -0
  46. package/backend/mcp/server.js +5 -15
  47. package/backend/middleware/auth.js +4 -14
  48. package/backend/middleware/jwtAuth.js +5 -16
  49. package/backend/middleware/requireAdmin.js +1 -13
  50. package/backend/package.json +3 -3
  51. package/backend/playwright.config.js +1 -13
  52. package/backend/routes/active-runs.routes.js +18 -0
  53. package/backend/routes/auth.routes.js +1 -13
  54. package/backend/routes/backup.routes.js +10 -21
  55. package/backend/routes/cron.routes.js +1 -13
  56. package/backend/routes/node.routes.js +11 -148
  57. package/backend/routes/reports.routes.js +1 -13
  58. package/backend/routes/runners.routes.js +11 -21
  59. package/backend/routes/settings.routes.js +6 -17
  60. package/backend/routes/test-cases.routes.js +1 -13
  61. package/backend/routes/test-runs.routes.js +1 -13
  62. package/backend/routes/test-suites.routes.js +1 -13
  63. package/backend/routes/tests.routes.js +1 -13
  64. package/backend/routes/trigger.routes.js +23 -165
  65. package/backend/routes/users.routes.js +1 -13
  66. package/backend/scripts/manage-runners.mjs +1 -13
  67. package/backend/server.js +34 -151
  68. package/backend/services/activeRunsService.js +55 -0
  69. package/backend/services/backupCronService.js +1 -13
  70. package/backend/services/backupService.js +7 -17
  71. package/backend/services/cronService.js +57 -39
  72. package/backend/services/envService.js +1 -13
  73. package/backend/services/nodeExecutionService.js +140 -0
  74. package/backend/services/notificationService.js +7 -17
  75. package/backend/services/prisma.js +1 -13
  76. package/backend/services/reportService.js +21 -17
  77. package/backend/services/runnerService.js +46 -27
  78. package/backend/services/settingsService.js +19 -19
  79. package/backend/services/testCaseService.js +1 -13
  80. package/backend/services/testRunService.js +1 -13
  81. package/backend/services/testService.js +1 -13
  82. package/backend/services/testSuiteService.js +1 -13
  83. package/backend/services/triggerService.js +246 -0
  84. package/backend/services/userService.js +1 -13
  85. package/backend/websockets/socketHandler.js +99 -48
  86. package/bin/plum.js +14 -13
  87. package/bin/postinstall.js +34 -0
  88. package/bin/scaffold-tests.js +1 -13
  89. package/docker-compose.node.yml +1 -13
  90. package/docker-compose.yml +1 -13
  91. package/frontend/.svelte-kit/adapter-node/.vite/manifest.json +97 -41
  92. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -17
  93. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/Badge.D1SV0Gv7.css +0 -17
  94. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css +1 -0
  95. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/EmptyState.DUDM4P19.css +1 -0
  96. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/Modal.BuaCfdLj.css +1 -0
  97. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/Pagination.DZmi2Po-.css +0 -17
  98. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/Toast.DENwYn3g.css +0 -17
  99. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_layout.BuhMvMUj.css +0 -17
  100. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.0Eln51hV.css +0 -17
  101. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.5IJAEAjc.css +0 -17
  102. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BR3wgXcZ.css +0 -17
  103. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BWAH0Beh.css +1 -0
  104. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BZfe6nWe.css +0 -17
  105. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.Bj_a_5lv.css +0 -17
  106. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BwgOqeMo.css +1 -0
  107. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.CBHi6pzT.css +0 -17
  108. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.CFnbmY-D.css +0 -17
  109. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.DvMkmYA-.css +1 -0
  110. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page._h2o67kg.css +0 -17
  111. package/frontend/.svelte-kit/adapter-node/chunks/BackLink.js +0 -17
  112. package/frontend/.svelte-kit/adapter-node/chunks/Badge.js +1 -18
  113. package/frontend/.svelte-kit/adapter-node/chunks/ConfirmModal.js +7 -37
  114. package/frontend/.svelte-kit/adapter-node/chunks/EmptyState.js +25 -25
  115. package/frontend/.svelte-kit/adapter-node/chunks/Modal.js +21 -0
  116. package/frontend/.svelte-kit/adapter-node/chunks/Toast.js +12 -18
  117. package/frontend/.svelte-kit/adapter-node/chunks/attributes.js +0 -17
  118. package/frontend/.svelte-kit/adapter-node/chunks/auth.js +0 -17
  119. package/frontend/.svelte-kit/adapter-node/chunks/auth2.js +8 -0
  120. package/frontend/.svelte-kit/adapter-node/chunks/client.js +0 -17
  121. package/frontend/.svelte-kit/adapter-node/chunks/common.js +36 -0
  122. package/frontend/.svelte-kit/adapter-node/chunks/constants.js +8 -20
  123. package/frontend/.svelte-kit/adapter-node/chunks/escaping.js +0 -17
  124. package/frontend/.svelte-kit/adapter-node/chunks/exports.js +0 -17
  125. package/frontend/.svelte-kit/adapter-node/chunks/format.js +0 -17
  126. package/frontend/.svelte-kit/adapter-node/chunks/index-server.js +0 -17
  127. package/frontend/.svelte-kit/adapter-node/chunks/index.js +4 -21
  128. package/frontend/.svelte-kit/adapter-node/chunks/index2.js +0 -17
  129. package/frontend/.svelte-kit/adapter-node/chunks/internal.js +2 -19
  130. package/frontend/.svelte-kit/adapter-node/chunks/reports.js +0 -17
  131. package/frontend/.svelte-kit/adapter-node/chunks/reports2.js +87 -0
  132. package/frontend/.svelte-kit/adapter-node/chunks/repository.js +87 -0
  133. package/frontend/.svelte-kit/adapter-node/chunks/runner.js +9 -20
  134. package/frontend/.svelte-kit/adapter-node/chunks/stores.js +0 -17
  135. package/frontend/.svelte-kit/adapter-node/chunks/theme.js +0 -17
  136. package/frontend/.svelte-kit/adapter-node/entries/fallbacks/error.svelte.js +0 -17
  137. package/frontend/.svelte-kit/adapter-node/entries/pages/_layout.js +0 -17
  138. package/frontend/.svelte-kit/adapter-node/entries/pages/_layout.svelte.js +2 -17
  139. package/frontend/.svelte-kit/adapter-node/entries/pages/_page.svelte.js +135 -101
  140. package/frontend/.svelte-kit/adapter-node/entries/pages/login/_page.svelte.js +5 -20
  141. package/frontend/.svelte-kit/adapter-node/entries/pages/reports/_id_/_page.svelte.js +5 -20
  142. package/frontend/.svelte-kit/adapter-node/entries/pages/reports/_page.svelte.js +17 -43
  143. package/frontend/.svelte-kit/adapter-node/entries/pages/reports/live/_page.svelte.js +27 -42
  144. package/frontend/.svelte-kit/adapter-node/entries/pages/scheduled-tests/_page.svelte.js +68 -50
  145. package/frontend/.svelte-kit/adapter-node/entries/pages/settings/_page.svelte.js +272 -113
  146. package/frontend/.svelte-kit/adapter-node/entries/pages/setup/_page.svelte.js +5 -20
  147. package/frontend/.svelte-kit/adapter-node/entries/pages/test-repository/_page.svelte.js +38 -53
  148. package/frontend/.svelte-kit/adapter-node/entries/pages/test-repository/runs/_id_/_page.svelte.js +61 -30
  149. package/frontend/.svelte-kit/adapter-node/entries/pages/test-repository/suites/_id_/_page.svelte.js +19 -35
  150. package/frontend/.svelte-kit/adapter-node/index.js +0 -17
  151. package/frontend/.svelte-kit/adapter-node/internal.js +0 -17
  152. package/frontend/.svelte-kit/adapter-node/manifest-full.js +1 -18
  153. package/frontend/.svelte-kit/adapter-node/manifest.js +1 -18
  154. package/frontend/.svelte-kit/adapter-node/nodes/0.js +2 -19
  155. package/frontend/.svelte-kit/adapter-node/nodes/1.js +1 -18
  156. package/frontend/.svelte-kit/adapter-node/nodes/10.js +2 -19
  157. package/frontend/.svelte-kit/adapter-node/nodes/11.js +2 -19
  158. package/frontend/.svelte-kit/adapter-node/nodes/12.js +2 -19
  159. package/frontend/.svelte-kit/adapter-node/nodes/2.js +2 -19
  160. package/frontend/.svelte-kit/adapter-node/nodes/3.js +1 -18
  161. package/frontend/.svelte-kit/adapter-node/nodes/4.js +2 -19
  162. package/frontend/.svelte-kit/adapter-node/nodes/5.js +1 -18
  163. package/frontend/.svelte-kit/adapter-node/nodes/6.js +1 -18
  164. package/frontend/.svelte-kit/adapter-node/nodes/7.js +2 -19
  165. package/frontend/.svelte-kit/adapter-node/nodes/8.js +2 -19
  166. package/frontend/.svelte-kit/adapter-node/nodes/9.js +1 -18
  167. package/frontend/.svelte-kit/ambient.d.ts +2 -21
  168. package/frontend/.svelte-kit/generated/client/app.js +0 -17
  169. package/frontend/.svelte-kit/generated/client/matchers.js +0 -17
  170. package/frontend/.svelte-kit/generated/client/nodes/0.js +0 -17
  171. package/frontend/.svelte-kit/generated/client/nodes/1.js +0 -17
  172. package/frontend/.svelte-kit/generated/client/nodes/10.js +0 -17
  173. package/frontend/.svelte-kit/generated/client/nodes/11.js +0 -17
  174. package/frontend/.svelte-kit/generated/client/nodes/12.js +0 -17
  175. package/frontend/.svelte-kit/generated/client/nodes/2.js +0 -17
  176. package/frontend/.svelte-kit/generated/client/nodes/3.js +0 -17
  177. package/frontend/.svelte-kit/generated/client/nodes/4.js +0 -17
  178. package/frontend/.svelte-kit/generated/client/nodes/5.js +0 -17
  179. package/frontend/.svelte-kit/generated/client/nodes/6.js +0 -17
  180. package/frontend/.svelte-kit/generated/client/nodes/7.js +0 -17
  181. package/frontend/.svelte-kit/generated/client/nodes/8.js +0 -17
  182. package/frontend/.svelte-kit/generated/client/nodes/9.js +0 -17
  183. package/frontend/.svelte-kit/generated/client-optimized/app.js +0 -17
  184. package/frontend/.svelte-kit/generated/client-optimized/matchers.js +0 -17
  185. package/frontend/.svelte-kit/generated/client-optimized/nodes/0.js +0 -17
  186. package/frontend/.svelte-kit/generated/client-optimized/nodes/1.js +0 -17
  187. package/frontend/.svelte-kit/generated/client-optimized/nodes/10.js +0 -17
  188. package/frontend/.svelte-kit/generated/client-optimized/nodes/11.js +0 -17
  189. package/frontend/.svelte-kit/generated/client-optimized/nodes/12.js +0 -17
  190. package/frontend/.svelte-kit/generated/client-optimized/nodes/2.js +0 -17
  191. package/frontend/.svelte-kit/generated/client-optimized/nodes/3.js +0 -17
  192. package/frontend/.svelte-kit/generated/client-optimized/nodes/4.js +0 -17
  193. package/frontend/.svelte-kit/generated/client-optimized/nodes/5.js +0 -17
  194. package/frontend/.svelte-kit/generated/client-optimized/nodes/6.js +0 -17
  195. package/frontend/.svelte-kit/generated/client-optimized/nodes/7.js +0 -17
  196. package/frontend/.svelte-kit/generated/client-optimized/nodes/8.js +0 -17
  197. package/frontend/.svelte-kit/generated/client-optimized/nodes/9.js +0 -17
  198. package/frontend/.svelte-kit/generated/root.js +0 -17
  199. package/frontend/.svelte-kit/generated/root.svelte +0 -17
  200. package/frontend/.svelte-kit/generated/server/internal.js +2 -19
  201. package/frontend/.svelte-kit/non-ambient.d.ts +0 -17
  202. package/frontend/.svelte-kit/output/client/.vite/manifest.json +406 -352
  203. package/frontend/.svelte-kit/output/client/_app/immutable/assets/0.BhSG-jZH.css +0 -17
  204. package/frontend/.svelte-kit/output/client/_app/immutable/assets/10.CdaQUS6U.css +0 -17
  205. package/frontend/.svelte-kit/output/client/_app/immutable/assets/11.BWAH0Beh.css +1 -0
  206. package/frontend/.svelte-kit/output/client/_app/immutable/assets/12.Bj_a_5lv.css +0 -17
  207. package/frontend/.svelte-kit/output/client/_app/immutable/assets/2.DvMkmYA-.css +1 -0
  208. package/frontend/.svelte-kit/output/client/_app/immutable/assets/3.BR3wgXcZ.css +0 -17
  209. package/frontend/.svelte-kit/output/client/_app/immutable/assets/4.0Eln51hV.css +0 -17
  210. package/frontend/.svelte-kit/output/client/_app/immutable/assets/5.DFV9OgAu.css +0 -17
  211. package/frontend/.svelte-kit/output/client/_app/immutable/assets/6.CFnbmY-D.css +0 -17
  212. package/frontend/.svelte-kit/output/client/_app/immutable/assets/7.CBHi6pzT.css +0 -17
  213. package/frontend/.svelte-kit/output/client/_app/immutable/assets/8.BwgOqeMo.css +1 -0
  214. package/frontend/.svelte-kit/output/client/_app/immutable/assets/9._h2o67kg.css +0 -17
  215. package/frontend/.svelte-kit/output/client/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -17
  216. package/frontend/.svelte-kit/output/client/_app/immutable/assets/Badge.D1SV0Gv7.css +0 -17
  217. package/frontend/.svelte-kit/output/client/_app/immutable/assets/Button.FOWXxvc7.css +0 -17
  218. package/frontend/.svelte-kit/output/client/_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css +1 -0
  219. package/frontend/.svelte-kit/output/client/_app/immutable/assets/EmptyState.DUDM4P19.css +1 -0
  220. package/frontend/.svelte-kit/output/client/_app/immutable/assets/Modal.BZpm0HP8.css +1 -0
  221. package/frontend/.svelte-kit/output/client/_app/immutable/assets/Modal.BuaCfdLj.css +1 -0
  222. package/frontend/.svelte-kit/output/client/_app/immutable/assets/Pagination.DZmi2Po-.css +0 -17
  223. package/frontend/.svelte-kit/output/client/_app/immutable/assets/Toast.DENwYn3g.css +0 -17
  224. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_layout.BuhMvMUj.css +0 -17
  225. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.0Eln51hV.css +0 -17
  226. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.5IJAEAjc.css +0 -17
  227. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BR3wgXcZ.css +0 -17
  228. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BWAH0Beh.css +1 -0
  229. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BZfe6nWe.css +0 -17
  230. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.Bj_a_5lv.css +0 -17
  231. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BwgOqeMo.css +1 -0
  232. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.CBHi6pzT.css +0 -17
  233. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.CFnbmY-D.css +0 -17
  234. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.DvMkmYA-.css +1 -0
  235. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page._h2o67kg.css +0 -17
  236. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/2zMvi6fR.js +1 -0
  237. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/3InFPLvE.js +1 -0
  238. package/frontend/{build/client/_app/immutable/chunks/C67QNx7Z.js → .svelte-kit/output/client/_app/immutable/chunks/BAACMRH5.js} +1 -18
  239. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BAMUGSh7.js +1 -0
  240. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BKuh57WU.js +1 -0
  241. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{BFEiffAL.js → BUwxRmHf.js} +1 -18
  242. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Bfc47y5P.js +0 -17
  243. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{BVMec-1T.js → BmZ9upwL.js} +1 -18
  244. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/C1Vid6wz.js +1 -0
  245. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/C8OURRSs.js +1 -0
  246. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CGeZlCaI.js +1 -0
  247. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CKDtmZUQ.js +1 -0
  248. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CMBQQ9RZ.js +1 -0
  249. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CMEtqUfQ.js +1 -0
  250. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CNdcuGR0.js +1 -0
  251. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CUC98kMZ.js +1 -0
  252. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CgnwuKKO.js +1 -0
  253. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Co3xKhEp.js +1 -0
  254. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CuqnZUex.js +1 -0
  255. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{BkKmeUbA.js → CzlPaHY9.js} +1 -18
  256. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DCgHuuvs.js +1 -0
  257. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DHM6H-es.js +2 -0
  258. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DMZwI8Cj.js +1 -0
  259. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DMyTUV-Y.js +3 -0
  260. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{B0pefNHY.js → DSLBMEpr.js} +1 -18
  261. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{CxTX_lpP.js → DbgD7JLa.js} +1 -18
  262. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Dlnxgs49.js +1 -0
  263. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/TOCyHP97.js +6 -0
  264. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/nURnIknV.js +1 -0
  265. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/t-La0hgu.js +1 -0
  266. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/w0D4Uzlq.js +1 -0
  267. package/frontend/.svelte-kit/output/client/_app/immutable/entry/app.BkBD0hgA.js +2 -0
  268. package/frontend/.svelte-kit/output/client/_app/immutable/entry/start.BxeX1Uxs.js +1 -0
  269. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/0.ChjDHxSJ.js +6 -0
  270. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/1.DBSWa36f.js +1 -0
  271. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/10.DEbnxfND.js +1 -0
  272. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/11.O4cjXCg4.js +1 -0
  273. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/12.BWQdeRdX.js +1 -0
  274. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/2.BnHalSCi.js +1 -0
  275. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/3._S1vrLVF.js +1 -0
  276. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/4.D-YT_JJe.js +1 -0
  277. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/5.BiFBiWcW.js +1 -0
  278. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/6.BNS-W0R_.js +1 -0
  279. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/7.C-pKvVZy.js +1 -0
  280. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/8.BEUdazrw.js +4 -0
  281. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/9.CrLHYPEJ.js +1 -0
  282. package/frontend/.svelte-kit/output/client/_app/version.json +1 -1
  283. package/frontend/.svelte-kit/output/server/.vite/manifest.json +97 -41
  284. package/frontend/.svelte-kit/output/server/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -17
  285. package/frontend/.svelte-kit/output/server/_app/immutable/assets/Badge.D1SV0Gv7.css +0 -17
  286. package/frontend/.svelte-kit/output/server/_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css +1 -0
  287. package/frontend/.svelte-kit/output/server/_app/immutable/assets/EmptyState.DUDM4P19.css +1 -0
  288. package/frontend/.svelte-kit/output/server/_app/immutable/assets/Modal.BuaCfdLj.css +1 -0
  289. package/frontend/.svelte-kit/output/server/_app/immutable/assets/Pagination.DZmi2Po-.css +0 -17
  290. package/frontend/.svelte-kit/output/server/_app/immutable/assets/Toast.DENwYn3g.css +0 -17
  291. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_layout.BuhMvMUj.css +0 -17
  292. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.0Eln51hV.css +0 -17
  293. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.5IJAEAjc.css +0 -17
  294. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BR3wgXcZ.css +0 -17
  295. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BWAH0Beh.css +1 -0
  296. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BZfe6nWe.css +0 -17
  297. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.Bj_a_5lv.css +0 -17
  298. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BwgOqeMo.css +1 -0
  299. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.CBHi6pzT.css +0 -17
  300. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.CFnbmY-D.css +0 -17
  301. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.DvMkmYA-.css +1 -0
  302. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page._h2o67kg.css +0 -17
  303. package/frontend/.svelte-kit/output/server/chunks/BackLink.js +0 -17
  304. package/frontend/.svelte-kit/output/server/chunks/Badge.js +1 -18
  305. package/frontend/.svelte-kit/output/server/chunks/ConfirmModal.js +7 -37
  306. package/frontend/.svelte-kit/output/server/chunks/EmptyState.js +25 -25
  307. package/frontend/.svelte-kit/output/server/chunks/Modal.js +21 -0
  308. package/frontend/.svelte-kit/output/server/chunks/Toast.js +12 -18
  309. package/frontend/.svelte-kit/output/server/chunks/attributes.js +0 -17
  310. package/frontend/.svelte-kit/output/server/chunks/auth.js +0 -17
  311. package/frontend/.svelte-kit/output/server/chunks/auth2.js +8 -0
  312. package/frontend/.svelte-kit/output/server/chunks/client.js +0 -17
  313. package/frontend/.svelte-kit/output/server/chunks/common.js +36 -0
  314. package/frontend/.svelte-kit/output/server/chunks/constants.js +8 -20
  315. package/frontend/.svelte-kit/output/server/chunks/escaping.js +0 -17
  316. package/frontend/.svelte-kit/output/server/chunks/exports.js +0 -17
  317. package/frontend/.svelte-kit/output/server/chunks/format.js +0 -17
  318. package/frontend/.svelte-kit/output/server/chunks/index-server.js +0 -17
  319. package/frontend/.svelte-kit/output/server/chunks/index.js +4 -21
  320. package/frontend/.svelte-kit/output/server/chunks/index2.js +0 -17
  321. package/frontend/.svelte-kit/output/server/chunks/internal.js +2 -19
  322. package/frontend/.svelte-kit/output/server/chunks/reports.js +0 -17
  323. package/frontend/.svelte-kit/output/server/chunks/reports2.js +87 -0
  324. package/frontend/.svelte-kit/output/server/chunks/repository.js +87 -0
  325. package/frontend/.svelte-kit/output/server/chunks/runner.js +9 -20
  326. package/frontend/.svelte-kit/output/server/chunks/stores.js +0 -17
  327. package/frontend/.svelte-kit/output/server/chunks/theme.js +0 -17
  328. package/frontend/.svelte-kit/output/server/entries/fallbacks/error.svelte.js +0 -17
  329. package/frontend/.svelte-kit/output/server/entries/pages/_layout.js +0 -17
  330. package/frontend/.svelte-kit/output/server/entries/pages/_layout.svelte.js +2 -17
  331. package/frontend/.svelte-kit/output/server/entries/pages/_page.svelte.js +135 -101
  332. package/frontend/.svelte-kit/output/server/entries/pages/login/_page.svelte.js +5 -20
  333. package/frontend/.svelte-kit/output/server/entries/pages/reports/_id_/_page.svelte.js +5 -20
  334. package/frontend/.svelte-kit/output/server/entries/pages/reports/_page.svelte.js +17 -43
  335. package/frontend/.svelte-kit/output/server/entries/pages/reports/live/_page.svelte.js +27 -42
  336. package/frontend/.svelte-kit/output/server/entries/pages/scheduled-tests/_page.svelte.js +68 -50
  337. package/frontend/.svelte-kit/output/server/entries/pages/settings/_page.svelte.js +272 -113
  338. package/frontend/.svelte-kit/output/server/entries/pages/setup/_page.svelte.js +5 -20
  339. package/frontend/.svelte-kit/output/server/entries/pages/test-repository/_page.svelte.js +38 -53
  340. package/frontend/.svelte-kit/output/server/entries/pages/test-repository/runs/_id_/_page.svelte.js +61 -30
  341. package/frontend/.svelte-kit/output/server/entries/pages/test-repository/suites/_id_/_page.svelte.js +19 -35
  342. package/frontend/.svelte-kit/output/server/index.js +0 -17
  343. package/frontend/.svelte-kit/output/server/internal.js +0 -17
  344. package/frontend/.svelte-kit/output/server/manifest-full.js +1 -18
  345. package/frontend/.svelte-kit/output/server/manifest.js +1 -18
  346. package/frontend/.svelte-kit/output/server/nodes/0.js +2 -19
  347. package/frontend/.svelte-kit/output/server/nodes/1.js +1 -18
  348. package/frontend/.svelte-kit/output/server/nodes/10.js +2 -19
  349. package/frontend/.svelte-kit/output/server/nodes/11.js +2 -19
  350. package/frontend/.svelte-kit/output/server/nodes/12.js +2 -19
  351. package/frontend/.svelte-kit/output/server/nodes/2.js +2 -19
  352. package/frontend/.svelte-kit/output/server/nodes/3.js +1 -18
  353. package/frontend/.svelte-kit/output/server/nodes/4.js +2 -19
  354. package/frontend/.svelte-kit/output/server/nodes/5.js +1 -18
  355. package/frontend/.svelte-kit/output/server/nodes/6.js +1 -18
  356. package/frontend/.svelte-kit/output/server/nodes/7.js +2 -19
  357. package/frontend/.svelte-kit/output/server/nodes/8.js +2 -19
  358. package/frontend/.svelte-kit/output/server/nodes/9.js +1 -18
  359. package/frontend/Dockerfile +1 -13
  360. package/frontend/build/client/_app/immutable/assets/0.BhSG-jZH.css +0 -17
  361. package/frontend/build/client/_app/immutable/assets/0.BhSG-jZH.css.br +0 -0
  362. package/frontend/build/client/_app/immutable/assets/0.BhSG-jZH.css.gz +0 -0
  363. package/frontend/build/client/_app/immutable/assets/10.CdaQUS6U.css +0 -17
  364. package/frontend/build/client/_app/immutable/assets/10.CdaQUS6U.css.br +0 -0
  365. package/frontend/build/client/_app/immutable/assets/10.CdaQUS6U.css.gz +0 -0
  366. package/frontend/build/client/_app/immutable/assets/11.BWAH0Beh.css +1 -0
  367. package/frontend/build/client/_app/immutable/assets/11.BWAH0Beh.css.br +0 -0
  368. package/frontend/build/client/_app/immutable/assets/11.BWAH0Beh.css.gz +0 -0
  369. package/frontend/build/client/_app/immutable/assets/12.Bj_a_5lv.css +0 -17
  370. package/frontend/build/client/_app/immutable/assets/12.Bj_a_5lv.css.br +0 -0
  371. package/frontend/build/client/_app/immutable/assets/12.Bj_a_5lv.css.gz +0 -0
  372. package/frontend/build/client/_app/immutable/assets/2.DvMkmYA-.css +1 -0
  373. package/frontend/build/client/_app/immutable/assets/2.DvMkmYA-.css.br +0 -0
  374. package/frontend/build/client/_app/immutable/assets/2.DvMkmYA-.css.gz +0 -0
  375. package/frontend/build/client/_app/immutable/assets/3.BR3wgXcZ.css +0 -17
  376. package/frontend/build/client/_app/immutable/assets/3.BR3wgXcZ.css.br +0 -0
  377. package/frontend/build/client/_app/immutable/assets/3.BR3wgXcZ.css.gz +0 -0
  378. package/frontend/build/client/_app/immutable/assets/4.0Eln51hV.css +0 -17
  379. package/frontend/build/client/_app/immutable/assets/4.0Eln51hV.css.br +0 -0
  380. package/frontend/build/client/_app/immutable/assets/4.0Eln51hV.css.gz +0 -0
  381. package/frontend/build/client/_app/immutable/assets/5.DFV9OgAu.css +0 -17
  382. package/frontend/build/client/_app/immutable/assets/5.DFV9OgAu.css.br +0 -0
  383. package/frontend/build/client/_app/immutable/assets/5.DFV9OgAu.css.gz +0 -0
  384. package/frontend/build/client/_app/immutable/assets/6.CFnbmY-D.css +0 -17
  385. package/frontend/build/client/_app/immutable/assets/6.CFnbmY-D.css.br +0 -0
  386. package/frontend/build/client/_app/immutable/assets/6.CFnbmY-D.css.gz +0 -0
  387. package/frontend/build/client/_app/immutable/assets/7.CBHi6pzT.css +0 -17
  388. package/frontend/build/client/_app/immutable/assets/7.CBHi6pzT.css.br +0 -0
  389. package/frontend/build/client/_app/immutable/assets/7.CBHi6pzT.css.gz +0 -0
  390. package/frontend/build/client/_app/immutable/assets/8.BwgOqeMo.css +1 -0
  391. package/frontend/build/client/_app/immutable/assets/8.BwgOqeMo.css.br +0 -0
  392. package/frontend/build/client/_app/immutable/assets/8.BwgOqeMo.css.gz +0 -0
  393. package/frontend/build/client/_app/immutable/assets/9._h2o67kg.css +0 -17
  394. package/frontend/build/client/_app/immutable/assets/9._h2o67kg.css.br +0 -0
  395. package/frontend/build/client/_app/immutable/assets/9._h2o67kg.css.gz +0 -0
  396. package/frontend/build/client/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -17
  397. package/frontend/build/client/_app/immutable/assets/BackLink.CvWWuO3h.css.br +0 -0
  398. package/frontend/build/client/_app/immutable/assets/BackLink.CvWWuO3h.css.gz +0 -0
  399. package/frontend/build/client/_app/immutable/assets/Badge.D1SV0Gv7.css +0 -17
  400. package/frontend/build/client/_app/immutable/assets/Badge.D1SV0Gv7.css.br +0 -0
  401. package/frontend/build/client/_app/immutable/assets/Badge.D1SV0Gv7.css.gz +0 -0
  402. package/frontend/build/client/_app/immutable/assets/Button.FOWXxvc7.css +0 -17
  403. package/frontend/build/client/_app/immutable/assets/Button.FOWXxvc7.css.br +0 -0
  404. package/frontend/build/client/_app/immutable/assets/Button.FOWXxvc7.css.gz +0 -0
  405. package/frontend/build/client/_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css +1 -0
  406. package/frontend/build/client/_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css.br +0 -0
  407. package/frontend/build/client/_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css.gz +0 -0
  408. package/frontend/build/client/_app/immutable/assets/EmptyState.DUDM4P19.css +1 -0
  409. package/frontend/build/client/_app/immutable/assets/EmptyState.DUDM4P19.css.br +0 -0
  410. package/frontend/build/client/_app/immutable/assets/EmptyState.DUDM4P19.css.gz +0 -0
  411. package/frontend/build/client/_app/immutable/assets/Modal.BZpm0HP8.css +1 -0
  412. package/frontend/build/client/_app/immutable/assets/Modal.BZpm0HP8.css.br +0 -0
  413. package/frontend/build/client/_app/immutable/assets/Modal.BZpm0HP8.css.gz +0 -0
  414. package/frontend/build/client/_app/immutable/assets/Modal.BuaCfdLj.css +1 -0
  415. package/frontend/build/client/_app/immutable/assets/Modal.BuaCfdLj.css.br +0 -0
  416. package/frontend/build/client/_app/immutable/assets/Modal.BuaCfdLj.css.gz +0 -0
  417. package/frontend/build/client/_app/immutable/assets/Pagination.DZmi2Po-.css +0 -17
  418. package/frontend/build/client/_app/immutable/assets/Pagination.DZmi2Po-.css.br +0 -0
  419. package/frontend/build/client/_app/immutable/assets/Pagination.DZmi2Po-.css.gz +0 -0
  420. package/frontend/build/client/_app/immutable/assets/Toast.DENwYn3g.css +0 -17
  421. package/frontend/build/client/_app/immutable/assets/Toast.DENwYn3g.css.br +0 -0
  422. package/frontend/build/client/_app/immutable/assets/Toast.DENwYn3g.css.gz +0 -0
  423. package/frontend/build/client/_app/immutable/assets/_layout.BuhMvMUj.css +0 -17
  424. package/frontend/build/client/_app/immutable/assets/_layout.BuhMvMUj.css.br +0 -0
  425. package/frontend/build/client/_app/immutable/assets/_layout.BuhMvMUj.css.gz +0 -0
  426. package/frontend/build/client/_app/immutable/assets/_page.0Eln51hV.css +0 -17
  427. package/frontend/build/client/_app/immutable/assets/_page.0Eln51hV.css.br +0 -0
  428. package/frontend/build/client/_app/immutable/assets/_page.0Eln51hV.css.gz +0 -0
  429. package/frontend/build/client/_app/immutable/assets/_page.5IJAEAjc.css +0 -17
  430. package/frontend/build/client/_app/immutable/assets/_page.5IJAEAjc.css.br +0 -0
  431. package/frontend/build/client/_app/immutable/assets/_page.5IJAEAjc.css.gz +0 -0
  432. package/frontend/build/client/_app/immutable/assets/_page.BR3wgXcZ.css +0 -17
  433. package/frontend/build/client/_app/immutable/assets/_page.BR3wgXcZ.css.br +0 -0
  434. package/frontend/build/client/_app/immutable/assets/_page.BR3wgXcZ.css.gz +0 -0
  435. package/frontend/build/client/_app/immutable/assets/_page.BWAH0Beh.css +1 -0
  436. package/frontend/build/client/_app/immutable/assets/_page.BWAH0Beh.css.br +0 -0
  437. package/frontend/build/client/_app/immutable/assets/_page.BWAH0Beh.css.gz +0 -0
  438. package/frontend/build/client/_app/immutable/assets/_page.BZfe6nWe.css +0 -17
  439. package/frontend/build/client/_app/immutable/assets/_page.BZfe6nWe.css.br +0 -0
  440. package/frontend/build/client/_app/immutable/assets/_page.BZfe6nWe.css.gz +0 -0
  441. package/frontend/build/client/_app/immutable/assets/_page.Bj_a_5lv.css +0 -17
  442. package/frontend/build/client/_app/immutable/assets/_page.Bj_a_5lv.css.br +0 -0
  443. package/frontend/build/client/_app/immutable/assets/_page.Bj_a_5lv.css.gz +0 -0
  444. package/frontend/build/client/_app/immutable/assets/_page.BwgOqeMo.css +1 -0
  445. package/frontend/build/client/_app/immutable/assets/_page.BwgOqeMo.css.br +0 -0
  446. package/frontend/build/client/_app/immutable/assets/_page.BwgOqeMo.css.gz +0 -0
  447. package/frontend/build/client/_app/immutable/assets/_page.CBHi6pzT.css +0 -17
  448. package/frontend/build/client/_app/immutable/assets/_page.CBHi6pzT.css.br +0 -0
  449. package/frontend/build/client/_app/immutable/assets/_page.CBHi6pzT.css.gz +0 -0
  450. package/frontend/build/client/_app/immutable/assets/_page.CFnbmY-D.css +0 -17
  451. package/frontend/build/client/_app/immutable/assets/_page.CFnbmY-D.css.br +0 -0
  452. package/frontend/build/client/_app/immutable/assets/_page.CFnbmY-D.css.gz +0 -0
  453. package/frontend/build/client/_app/immutable/assets/_page.DvMkmYA-.css +1 -0
  454. package/frontend/build/client/_app/immutable/assets/_page.DvMkmYA-.css.br +0 -0
  455. package/frontend/build/client/_app/immutable/assets/_page.DvMkmYA-.css.gz +0 -0
  456. package/frontend/build/client/_app/immutable/assets/_page._h2o67kg.css +0 -17
  457. package/frontend/build/client/_app/immutable/assets/_page._h2o67kg.css.br +0 -0
  458. package/frontend/build/client/_app/immutable/assets/_page._h2o67kg.css.gz +0 -0
  459. package/frontend/build/client/_app/immutable/chunks/2zMvi6fR.js +1 -0
  460. package/frontend/build/client/_app/immutable/chunks/2zMvi6fR.js.br +0 -0
  461. package/frontend/build/client/_app/immutable/chunks/2zMvi6fR.js.gz +0 -0
  462. package/frontend/build/client/_app/immutable/chunks/3InFPLvE.js +1 -0
  463. package/frontend/build/client/_app/immutable/chunks/3InFPLvE.js.br +0 -0
  464. package/frontend/build/client/_app/immutable/chunks/3InFPLvE.js.gz +0 -0
  465. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/C67QNx7Z.js → build/client/_app/immutable/chunks/BAACMRH5.js} +1 -18
  466. package/frontend/build/client/_app/immutable/chunks/BAACMRH5.js.br +0 -0
  467. package/frontend/build/client/_app/immutable/chunks/BAACMRH5.js.gz +0 -0
  468. package/frontend/build/client/_app/immutable/chunks/BAMUGSh7.js +1 -0
  469. package/frontend/build/client/_app/immutable/chunks/BAMUGSh7.js.br +0 -0
  470. package/frontend/build/client/_app/immutable/chunks/BAMUGSh7.js.gz +0 -0
  471. package/frontend/build/client/_app/immutable/chunks/BKuh57WU.js +1 -0
  472. package/frontend/build/client/_app/immutable/chunks/BKuh57WU.js.br +0 -0
  473. package/frontend/build/client/_app/immutable/chunks/BKuh57WU.js.gz +0 -0
  474. package/frontend/build/client/_app/immutable/chunks/{BFEiffAL.js → BUwxRmHf.js} +1 -18
  475. package/frontend/build/client/_app/immutable/chunks/BUwxRmHf.js.br +0 -0
  476. package/frontend/build/client/_app/immutable/chunks/BUwxRmHf.js.gz +0 -0
  477. package/frontend/build/client/_app/immutable/chunks/Bfc47y5P.js +0 -17
  478. package/frontend/build/client/_app/immutable/chunks/Bfc47y5P.js.br +0 -0
  479. package/frontend/build/client/_app/immutable/chunks/Bfc47y5P.js.gz +0 -0
  480. package/frontend/build/client/_app/immutable/chunks/{BVMec-1T.js → BmZ9upwL.js} +1 -18
  481. package/frontend/build/client/_app/immutable/chunks/BmZ9upwL.js.br +0 -0
  482. package/frontend/build/client/_app/immutable/chunks/BmZ9upwL.js.gz +0 -0
  483. package/frontend/build/client/_app/immutable/chunks/C1Vid6wz.js +1 -0
  484. package/frontend/build/client/_app/immutable/chunks/C1Vid6wz.js.br +0 -0
  485. package/frontend/build/client/_app/immutable/chunks/C1Vid6wz.js.gz +0 -0
  486. package/frontend/build/client/_app/immutable/chunks/C8OURRSs.js +1 -0
  487. package/frontend/build/client/_app/immutable/chunks/C8OURRSs.js.br +0 -0
  488. package/frontend/build/client/_app/immutable/chunks/C8OURRSs.js.gz +0 -0
  489. package/frontend/build/client/_app/immutable/chunks/CGeZlCaI.js +1 -0
  490. package/frontend/build/client/_app/immutable/chunks/CGeZlCaI.js.br +0 -0
  491. package/frontend/build/client/_app/immutable/chunks/CGeZlCaI.js.gz +0 -0
  492. package/frontend/build/client/_app/immutable/chunks/CKDtmZUQ.js +1 -0
  493. package/frontend/build/client/_app/immutable/chunks/CKDtmZUQ.js.br +0 -0
  494. package/frontend/build/client/_app/immutable/chunks/CKDtmZUQ.js.gz +0 -0
  495. package/frontend/build/client/_app/immutable/chunks/CMBQQ9RZ.js +1 -0
  496. package/frontend/build/client/_app/immutable/chunks/CMBQQ9RZ.js.br +0 -0
  497. package/frontend/build/client/_app/immutable/chunks/CMBQQ9RZ.js.gz +0 -0
  498. package/frontend/build/client/_app/immutable/chunks/CMEtqUfQ.js +1 -0
  499. package/frontend/build/client/_app/immutable/chunks/CMEtqUfQ.js.br +0 -0
  500. package/frontend/build/client/_app/immutable/chunks/CMEtqUfQ.js.gz +0 -0
  501. package/frontend/build/client/_app/immutable/chunks/CNdcuGR0.js +1 -0
  502. package/frontend/build/client/_app/immutable/chunks/CNdcuGR0.js.br +0 -0
  503. package/frontend/build/client/_app/immutable/chunks/CNdcuGR0.js.gz +0 -0
  504. package/frontend/build/client/_app/immutable/chunks/CUC98kMZ.js +1 -0
  505. package/frontend/build/client/_app/immutable/chunks/CUC98kMZ.js.br +0 -0
  506. package/frontend/build/client/_app/immutable/chunks/CUC98kMZ.js.gz +0 -0
  507. package/frontend/build/client/_app/immutable/chunks/CgnwuKKO.js +1 -0
  508. package/frontend/build/client/_app/immutable/chunks/CgnwuKKO.js.br +0 -0
  509. package/frontend/build/client/_app/immutable/chunks/CgnwuKKO.js.gz +0 -0
  510. package/frontend/build/client/_app/immutable/chunks/Co3xKhEp.js +1 -0
  511. package/frontend/build/client/_app/immutable/chunks/Co3xKhEp.js.br +0 -0
  512. package/frontend/build/client/_app/immutable/chunks/Co3xKhEp.js.gz +0 -0
  513. package/frontend/build/client/_app/immutable/chunks/CuqnZUex.js +1 -0
  514. package/frontend/build/client/_app/immutable/chunks/CuqnZUex.js.br +1 -0
  515. package/frontend/build/client/_app/immutable/chunks/CuqnZUex.js.gz +0 -0
  516. package/frontend/build/client/_app/immutable/chunks/{BkKmeUbA.js → CzlPaHY9.js} +1 -18
  517. package/frontend/build/client/_app/immutable/chunks/CzlPaHY9.js.br +0 -0
  518. package/frontend/build/client/_app/immutable/chunks/CzlPaHY9.js.gz +0 -0
  519. package/frontend/build/client/_app/immutable/chunks/DCgHuuvs.js +1 -0
  520. package/frontend/build/client/_app/immutable/chunks/DCgHuuvs.js.br +0 -0
  521. package/frontend/build/client/_app/immutable/chunks/DCgHuuvs.js.gz +0 -0
  522. package/frontend/build/client/_app/immutable/chunks/DHM6H-es.js +2 -0
  523. package/frontend/build/client/_app/immutable/chunks/DHM6H-es.js.br +0 -0
  524. package/frontend/build/client/_app/immutable/chunks/DHM6H-es.js.gz +0 -0
  525. package/frontend/build/client/_app/immutable/chunks/DMZwI8Cj.js +1 -0
  526. package/frontend/build/client/_app/immutable/chunks/DMZwI8Cj.js.br +0 -0
  527. package/frontend/build/client/_app/immutable/chunks/DMZwI8Cj.js.gz +0 -0
  528. package/frontend/build/client/_app/immutable/chunks/DMyTUV-Y.js +3 -0
  529. package/frontend/build/client/_app/immutable/chunks/DMyTUV-Y.js.br +0 -0
  530. package/frontend/build/client/_app/immutable/chunks/DMyTUV-Y.js.gz +0 -0
  531. package/frontend/build/client/_app/immutable/chunks/{B0pefNHY.js → DSLBMEpr.js} +1 -18
  532. package/frontend/build/client/_app/immutable/chunks/DSLBMEpr.js.br +0 -0
  533. package/frontend/build/client/_app/immutable/chunks/DSLBMEpr.js.gz +0 -0
  534. package/frontend/build/client/_app/immutable/chunks/{CxTX_lpP.js → DbgD7JLa.js} +1 -18
  535. package/frontend/build/client/_app/immutable/chunks/DbgD7JLa.js.br +0 -0
  536. package/frontend/build/client/_app/immutable/chunks/DbgD7JLa.js.gz +0 -0
  537. package/frontend/build/client/_app/immutable/chunks/Dlnxgs49.js +1 -0
  538. package/frontend/build/client/_app/immutable/chunks/Dlnxgs49.js.br +0 -0
  539. package/frontend/build/client/_app/immutable/chunks/Dlnxgs49.js.gz +0 -0
  540. package/frontend/build/client/_app/immutable/chunks/TOCyHP97.js +6 -0
  541. package/frontend/build/client/_app/immutable/chunks/TOCyHP97.js.br +0 -0
  542. package/frontend/build/client/_app/immutable/chunks/TOCyHP97.js.gz +0 -0
  543. package/frontend/build/client/_app/immutable/chunks/nURnIknV.js +1 -0
  544. package/frontend/build/client/_app/immutable/chunks/nURnIknV.js.br +0 -0
  545. package/frontend/build/client/_app/immutable/chunks/nURnIknV.js.gz +0 -0
  546. package/frontend/build/client/_app/immutable/chunks/t-La0hgu.js +1 -0
  547. package/frontend/build/client/_app/immutable/chunks/t-La0hgu.js.br +0 -0
  548. package/frontend/build/client/_app/immutable/chunks/t-La0hgu.js.gz +0 -0
  549. package/frontend/build/client/_app/immutable/chunks/w0D4Uzlq.js +1 -0
  550. package/frontend/build/client/_app/immutable/chunks/w0D4Uzlq.js.br +0 -0
  551. package/frontend/build/client/_app/immutable/chunks/w0D4Uzlq.js.gz +0 -0
  552. package/frontend/build/client/_app/immutable/entry/app.BkBD0hgA.js +2 -0
  553. package/frontend/build/client/_app/immutable/entry/app.BkBD0hgA.js.br +0 -0
  554. package/frontend/build/client/_app/immutable/entry/app.BkBD0hgA.js.gz +0 -0
  555. package/frontend/build/client/_app/immutable/entry/start.BxeX1Uxs.js +1 -0
  556. package/frontend/build/client/_app/immutable/entry/start.BxeX1Uxs.js.br +2 -0
  557. package/frontend/build/client/_app/immutable/entry/start.BxeX1Uxs.js.gz +0 -0
  558. package/frontend/build/client/_app/immutable/nodes/0.ChjDHxSJ.js +6 -0
  559. package/frontend/build/client/_app/immutable/nodes/0.ChjDHxSJ.js.br +0 -0
  560. package/frontend/build/client/_app/immutable/nodes/0.ChjDHxSJ.js.gz +0 -0
  561. package/frontend/build/client/_app/immutable/nodes/1.DBSWa36f.js +1 -0
  562. package/frontend/build/client/_app/immutable/nodes/1.DBSWa36f.js.br +0 -0
  563. package/frontend/build/client/_app/immutable/nodes/1.DBSWa36f.js.gz +0 -0
  564. package/frontend/build/client/_app/immutable/nodes/10.DEbnxfND.js +1 -0
  565. package/frontend/build/client/_app/immutable/nodes/10.DEbnxfND.js.br +0 -0
  566. package/frontend/build/client/_app/immutable/nodes/10.DEbnxfND.js.gz +0 -0
  567. package/frontend/build/client/_app/immutable/nodes/11.O4cjXCg4.js +1 -0
  568. package/frontend/build/client/_app/immutable/nodes/11.O4cjXCg4.js.br +0 -0
  569. package/frontend/build/client/_app/immutable/nodes/11.O4cjXCg4.js.gz +0 -0
  570. package/frontend/build/client/_app/immutable/nodes/12.BWQdeRdX.js +1 -0
  571. package/frontend/build/client/_app/immutable/nodes/12.BWQdeRdX.js.br +0 -0
  572. package/frontend/build/client/_app/immutable/nodes/12.BWQdeRdX.js.gz +0 -0
  573. package/frontend/build/client/_app/immutable/nodes/2.BnHalSCi.js +1 -0
  574. package/frontend/build/client/_app/immutable/nodes/2.BnHalSCi.js.br +0 -0
  575. package/frontend/build/client/_app/immutable/nodes/2.BnHalSCi.js.gz +0 -0
  576. package/frontend/build/client/_app/immutable/nodes/3._S1vrLVF.js +1 -0
  577. package/frontend/build/client/_app/immutable/nodes/3._S1vrLVF.js.br +0 -0
  578. package/frontend/build/client/_app/immutable/nodes/3._S1vrLVF.js.gz +0 -0
  579. package/frontend/build/client/_app/immutable/nodes/4.D-YT_JJe.js +1 -0
  580. package/frontend/build/client/_app/immutable/nodes/4.D-YT_JJe.js.br +0 -0
  581. package/frontend/build/client/_app/immutable/nodes/4.D-YT_JJe.js.gz +0 -0
  582. package/frontend/build/client/_app/immutable/nodes/5.BiFBiWcW.js +1 -0
  583. package/frontend/build/client/_app/immutable/nodes/5.BiFBiWcW.js.br +0 -0
  584. package/frontend/build/client/_app/immutable/nodes/5.BiFBiWcW.js.gz +0 -0
  585. package/frontend/build/client/_app/immutable/nodes/6.BNS-W0R_.js +1 -0
  586. package/frontend/build/client/_app/immutable/nodes/6.BNS-W0R_.js.br +0 -0
  587. package/frontend/build/client/_app/immutable/nodes/6.BNS-W0R_.js.gz +0 -0
  588. package/frontend/build/client/_app/immutable/nodes/7.C-pKvVZy.js +1 -0
  589. package/frontend/build/client/_app/immutable/nodes/7.C-pKvVZy.js.br +0 -0
  590. package/frontend/build/client/_app/immutable/nodes/7.C-pKvVZy.js.gz +0 -0
  591. package/frontend/build/client/_app/immutable/nodes/8.BEUdazrw.js +4 -0
  592. package/frontend/build/client/_app/immutable/nodes/8.BEUdazrw.js.br +0 -0
  593. package/frontend/build/client/_app/immutable/nodes/8.BEUdazrw.js.gz +0 -0
  594. package/frontend/build/client/_app/immutable/nodes/9.CrLHYPEJ.js +1 -0
  595. package/frontend/build/client/_app/immutable/nodes/9.CrLHYPEJ.js.br +0 -0
  596. package/frontend/build/client/_app/immutable/nodes/9.CrLHYPEJ.js.gz +0 -0
  597. package/frontend/build/client/_app/version.json +1 -1
  598. package/frontend/build/client/_app/version.json.br +0 -0
  599. package/frontend/build/client/_app/version.json.gz +0 -0
  600. package/frontend/build/env.js +0 -17
  601. package/frontend/build/handler.js +0 -17
  602. package/frontend/build/index.js +0 -17
  603. package/frontend/build/server/chunks/0-Cn_2hzqk.js +17 -0
  604. package/frontend/build/server/chunks/0-Cn_2hzqk.js.map +1 -0
  605. package/frontend/build/server/chunks/1-BrRGJFSB.js +9 -0
  606. package/frontend/build/server/chunks/1-BrRGJFSB.js.map +1 -0
  607. package/frontend/build/server/chunks/10-l6_ikL_D.js +9 -0
  608. package/frontend/build/server/chunks/10-l6_ikL_D.js.map +1 -0
  609. package/frontend/build/server/chunks/11-BLPbHJqB.js +9 -0
  610. package/frontend/build/server/chunks/11-BLPbHJqB.js.map +1 -0
  611. package/frontend/build/server/chunks/12-S1ujUrHy.js +9 -0
  612. package/frontend/build/server/chunks/12-S1ujUrHy.js.map +1 -0
  613. package/frontend/build/server/chunks/2-Cte30Dgy.js +9 -0
  614. package/frontend/build/server/chunks/2-Cte30Dgy.js.map +1 -0
  615. package/frontend/build/server/chunks/3-BHkXVoNI.js +9 -0
  616. package/frontend/build/server/chunks/3-BHkXVoNI.js.map +1 -0
  617. package/frontend/build/server/chunks/4-Bo04DC5Z.js +9 -0
  618. package/frontend/build/server/chunks/4-Bo04DC5Z.js.map +1 -0
  619. package/frontend/build/server/chunks/5-F1ZsXMt2.js +9 -0
  620. package/frontend/build/server/chunks/5-F1ZsXMt2.js.map +1 -0
  621. package/frontend/build/server/chunks/6-FlZLnYJ6.js +9 -0
  622. package/frontend/build/server/chunks/6-FlZLnYJ6.js.map +1 -0
  623. package/frontend/build/server/chunks/7-DiQJZEF_.js +9 -0
  624. package/frontend/build/server/chunks/7-DiQJZEF_.js.map +1 -0
  625. package/frontend/build/server/chunks/8-DXReUGxi.js +9 -0
  626. package/frontend/build/server/chunks/8-DXReUGxi.js.map +1 -0
  627. package/frontend/build/server/chunks/9-Cy_mGmt4.js +9 -0
  628. package/frontend/build/server/chunks/9-Cy_mGmt4.js.map +1 -0
  629. package/frontend/build/server/chunks/BackLink-BJ8NaemM.js +13 -0
  630. package/frontend/build/server/chunks/{BackLink-KxZNqsaq.js.map → BackLink-BJ8NaemM.js.map} +1 -17
  631. package/frontend/build/server/chunks/Badge-44ZTDx0V.js +13 -0
  632. package/frontend/build/server/chunks/{Badge-B5V-z6pI.js.map → Badge-44ZTDx0V.js.map} +1 -17
  633. package/frontend/build/server/chunks/ConfirmModal-C0EAXcq_.js +44 -0
  634. package/frontend/build/server/chunks/ConfirmModal-C0EAXcq_.js.map +1 -0
  635. package/frontend/build/server/chunks/EmptyState-BA_eXaeR.js +34 -0
  636. package/frontend/build/server/chunks/EmptyState-BA_eXaeR.js.map +1 -0
  637. package/frontend/build/server/chunks/Modal-DChG187n.js +21 -0
  638. package/frontend/build/server/chunks/Modal-DChG187n.js.map +1 -0
  639. package/frontend/build/server/chunks/Toast-v-q4ZnYq.js +30 -0
  640. package/frontend/build/server/chunks/Toast-v-q4ZnYq.js.map +1 -0
  641. package/frontend/build/server/chunks/_layout.svelte-CHVI3Prt.js +24 -0
  642. package/frontend/build/server/chunks/_layout.svelte-CHVI3Prt.js.map +1 -0
  643. package/frontend/build/server/chunks/{_page.svelte-LcJmR5du.js → _page.svelte-1as75nPc.js} +28 -51
  644. package/frontend/build/server/chunks/_page.svelte-1as75nPc.js.map +1 -0
  645. package/frontend/build/server/chunks/_page.svelte-1jo8MapI.js +96 -0
  646. package/frontend/build/server/chunks/_page.svelte-1jo8MapI.js.map +1 -0
  647. package/frontend/build/server/chunks/{_page.svelte-C0vstY93.js → _page.svelte-BuFusRK1.js} +74 -56
  648. package/frontend/build/server/chunks/_page.svelte-BuFusRK1.js.map +1 -0
  649. package/frontend/build/server/chunks/{_page.svelte-gnktnXKP.js → _page.svelte-CAVyp70V.js} +37 -51
  650. package/frontend/build/server/chunks/_page.svelte-CAVyp70V.js.map +1 -0
  651. package/frontend/build/server/chunks/{_page.svelte-CC27sZag.js → _page.svelte-CB8-QBNg.js} +42 -57
  652. package/frontend/build/server/chunks/_page.svelte-CB8-QBNg.js.map +1 -0
  653. package/frontend/build/server/chunks/{_page.svelte-DqWsUJRp.js → _page.svelte-CWWeZuid.js} +24 -40
  654. package/frontend/build/server/chunks/_page.svelte-CWWeZuid.js.map +1 -0
  655. package/frontend/build/server/chunks/_page.svelte-CpB-fgJl.js +219 -0
  656. package/frontend/build/server/chunks/_page.svelte-CpB-fgJl.js.map +1 -0
  657. package/frontend/build/server/chunks/_page.svelte-D3E6Eojd.js +27 -0
  658. package/frontend/build/server/chunks/_page.svelte-D3E6Eojd.js.map +1 -0
  659. package/frontend/build/server/chunks/_page.svelte-Kg69DDaM.js +27 -0
  660. package/frontend/build/server/chunks/_page.svelte-Kg69DDaM.js.map +1 -0
  661. package/frontend/build/server/chunks/{_page.svelte-BETENC2e.js → _page.svelte-L9fuiN_q.js} +13 -28
  662. package/frontend/build/server/chunks/_page.svelte-L9fuiN_q.js.map +1 -0
  663. package/frontend/build/server/chunks/_page.svelte-wKyUmA2e.js +724 -0
  664. package/frontend/build/server/chunks/_page.svelte-wKyUmA2e.js.map +1 -0
  665. package/frontend/build/server/chunks/attributes-BeaNKpgU.js +0 -17
  666. package/frontend/build/server/chunks/attributes-BeaNKpgU.js.map +0 -16
  667. package/frontend/build/server/chunks/{auth-rlH-cIzn.js → auth-Chw-wBpI.js} +2 -19
  668. package/frontend/build/server/chunks/{auth-rlH-cIzn.js.map → auth-Chw-wBpI.js.map} +1 -17
  669. package/frontend/build/server/chunks/auth2-C02yYDpz.js +6 -0
  670. package/frontend/build/server/chunks/auth2-C02yYDpz.js.map +1 -0
  671. package/frontend/build/server/chunks/{client-DyII78e0.js → client-DEmxR_a-.js} +2 -19
  672. package/frontend/build/server/chunks/{client-DyII78e0.js.map → client-DEmxR_a-.js.map} +1 -17
  673. package/frontend/build/server/chunks/common-DYYTVHPw.js +21 -0
  674. package/frontend/build/server/chunks/common-DYYTVHPw.js.map +1 -0
  675. package/frontend/build/server/chunks/constants-CXTaQaB6.js +22 -0
  676. package/frontend/build/server/chunks/constants-CXTaQaB6.js.map +1 -0
  677. package/frontend/build/server/chunks/error.svelte-BD3xNemk.js +28 -0
  678. package/frontend/build/server/chunks/{error.svelte-BDW3iP1O.js.map → error.svelte-BD3xNemk.js.map} +1 -17
  679. package/frontend/build/server/chunks/escaping-CqgfEcN3.js +0 -17
  680. package/frontend/build/server/chunks/escaping-CqgfEcN3.js.map +0 -16
  681. package/frontend/build/server/chunks/exports-D0QHgeSL.js +0 -17
  682. package/frontend/build/server/chunks/exports-D0QHgeSL.js.map +0 -16
  683. package/frontend/build/server/chunks/{format-D26ZQccb.js → format-CiNRMfHu.js} +2 -19
  684. package/frontend/build/server/chunks/{format-D26ZQccb.js.map → format-CiNRMfHu.js.map} +1 -17
  685. package/frontend/build/server/chunks/index-server-B3M9vyh2.js +14 -0
  686. package/frontend/build/server/chunks/index-server-B3M9vyh2.js.map +1 -0
  687. package/frontend/build/server/chunks/{index2-DG8XHU5D.js → index2-5R1tbrep.js} +2 -19
  688. package/frontend/build/server/chunks/{index2-DG8XHU5D.js.map → index2-5R1tbrep.js.map} +1 -17
  689. package/frontend/build/server/chunks/reports-D_ApeeNh.js +23 -0
  690. package/frontend/build/server/chunks/{reports-Bgi7V5N7.js.map → reports-D_ApeeNh.js.map} +1 -17
  691. package/frontend/build/server/chunks/reports2-BtElN_53.js +47 -0
  692. package/frontend/build/server/chunks/reports2-BtElN_53.js.map +1 -0
  693. package/frontend/build/server/chunks/repository-FYYV_vKE.js +47 -0
  694. package/frontend/build/server/chunks/repository-FYYV_vKE.js.map +1 -0
  695. package/frontend/build/server/chunks/runner-DC7hXbnY.js +32 -0
  696. package/frontend/build/server/chunks/runner-DC7hXbnY.js.map +1 -0
  697. package/frontend/build/server/chunks/stores-BLenR3c1.js +27 -0
  698. package/frontend/build/server/chunks/{stores-DlkXV308.js.map → stores-BLenR3c1.js.map} +1 -17
  699. package/frontend/build/server/chunks/theme-nAx-GvX_.js +10 -0
  700. package/frontend/build/server/chunks/theme-nAx-GvX_.js.map +1 -0
  701. package/frontend/build/server/index.js +3 -20
  702. package/frontend/build/server/index.js.map +1 -17
  703. package/frontend/build/server/manifest.js +14 -31
  704. package/frontend/build/server/manifest.js.map +1 -17
  705. package/frontend/build/shims.js +0 -17
  706. package/frontend/package.json +1 -0
  707. package/frontend/src/app.css +1 -13
  708. package/frontend/src/app.html +1 -13
  709. package/frontend/src/lib/api/activeRuns.js +18 -0
  710. package/frontend/src/lib/api/auth.js +1 -13
  711. package/frontend/src/lib/api/reports.js +1 -13
  712. package/frontend/src/lib/api/repository.js +1 -13
  713. package/frontend/src/lib/api/runners.js +26 -21
  714. package/frontend/src/lib/api/schedules.js +1 -13
  715. package/frontend/src/lib/api/settings.js +11 -23
  716. package/frontend/src/lib/api/tests.js +1 -13
  717. package/frontend/src/lib/api/users.js +1 -13
  718. package/frontend/src/lib/components/icons/BrowserIcon.svelte +1 -13
  719. package/frontend/src/lib/components/layout/Nav.svelte +1 -13
  720. package/frontend/src/lib/components/layout/PageShell.svelte +1 -13
  721. package/frontend/src/lib/components/layout/RunnerPanel.svelte +146 -105
  722. package/frontend/src/lib/components/ui/AutomatedBadge.svelte +2 -31
  723. package/frontend/src/lib/components/ui/BackLink.svelte +1 -30
  724. package/frontend/src/lib/components/ui/Badge.svelte +1 -13
  725. package/frontend/src/lib/components/ui/Button.svelte +1 -13
  726. package/frontend/src/lib/components/ui/CaseIdChip.svelte +1 -30
  727. package/frontend/src/lib/components/ui/ConfirmModal.svelte +8 -17
  728. package/frontend/src/lib/components/ui/EmptyState.svelte +26 -15
  729. package/frontend/src/lib/components/ui/Modal.svelte +1 -13
  730. package/frontend/src/lib/components/ui/Pagination.svelte +1 -13
  731. package/frontend/src/lib/components/ui/PriorityBadge.svelte +1 -30
  732. package/frontend/src/lib/components/ui/ResultChip.svelte +1 -30
  733. package/frontend/src/lib/components/ui/StatusDot.svelte +1 -30
  734. package/frontend/src/lib/components/ui/StepKeyword.svelte +1 -30
  735. package/frontend/src/lib/components/ui/StepStatusIcon.svelte +1 -30
  736. package/frontend/src/lib/components/ui/TagChip.svelte +1 -30
  737. package/frontend/src/lib/components/ui/Terminal.svelte +1 -13
  738. package/frontend/src/lib/components/ui/Toast.svelte +1 -13
  739. package/frontend/src/lib/constants.js +5 -17
  740. package/frontend/src/lib/copy/auth.js +29 -0
  741. package/frontend/src/lib/copy/common.js +39 -0
  742. package/frontend/src/lib/copy/dashboard.js +28 -0
  743. package/frontend/src/lib/copy/reports.js +83 -0
  744. package/frontend/src/lib/copy/repository.js +153 -0
  745. package/frontend/src/lib/copy/runners.js +59 -0
  746. package/frontend/src/lib/copy/schedules.js +96 -0
  747. package/frontend/src/lib/copy/settings.js +295 -0
  748. package/frontend/src/lib/index.js +1 -13
  749. package/frontend/src/lib/socketEvents.js +36 -0
  750. package/frontend/src/lib/stores/auth.js +1 -13
  751. package/frontend/src/lib/stores/runner.js +10 -18
  752. package/frontend/src/lib/stores/theme.js +1 -13
  753. package/frontend/src/lib/styles/global.css +1 -13
  754. package/frontend/src/lib/styles/reset.css +1 -13
  755. package/frontend/src/lib/styles/tokens.css +1 -13
  756. package/frontend/src/lib/utils/format.js +1 -13
  757. package/frontend/src/routes/+layout.js +1 -13
  758. package/frontend/src/routes/+layout.svelte +1 -13
  759. package/frontend/src/routes/+page.svelte +296 -115
  760. package/frontend/src/routes/login/+page.svelte +22 -23
  761. package/frontend/src/routes/reports/+page.svelte +37 -38
  762. package/frontend/src/routes/reports/[id]/+page.svelte +54 -43
  763. package/frontend/src/routes/reports/live/+page.svelte +57 -42
  764. package/frontend/src/routes/scheduled-tests/+page.svelte +134 -117
  765. package/frontend/src/routes/settings/+page.svelte +490 -267
  766. package/frontend/src/routes/setup/+page.svelte +30 -27
  767. package/frontend/src/routes/test-repository/+page.svelte +120 -91
  768. package/frontend/src/routes/test-repository/runs/[id]/+page.svelte +95 -60
  769. package/frontend/src/routes/test-repository/suites/[id]/+page.svelte +145 -91
  770. package/frontend/svelte.config.js +1 -13
  771. package/frontend/vite.config.js +1 -13
  772. package/package.json +3 -2
  773. package/resources/mit-license.txt +2 -0
  774. package/backend/scripts/create-test.js +0 -149
  775. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/ConfirmModal.CdhOYVBb.css +0 -18
  776. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/EmptyState.BdO1q9cJ.css +0 -18
  777. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BJ-I1gHO.css +0 -18
  778. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.Bhof07Eg.css +0 -18
  779. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.CrXpMrqh.css +0 -18
  780. package/frontend/.svelte-kit/adapter-node/chunks/Button.js +0 -33
  781. package/frontend/.svelte-kit/output/client/_app/immutable/assets/11.BJ-I1gHO.css +0 -18
  782. package/frontend/.svelte-kit/output/client/_app/immutable/assets/2.CrXpMrqh.css +0 -18
  783. package/frontend/.svelte-kit/output/client/_app/immutable/assets/8.Bhof07Eg.css +0 -18
  784. package/frontend/.svelte-kit/output/client/_app/immutable/assets/ConfirmModal.CdhOYVBb.css +0 -18
  785. package/frontend/.svelte-kit/output/client/_app/immutable/assets/ConfirmModal.DmxkcwXv.css +0 -18
  786. package/frontend/.svelte-kit/output/client/_app/immutable/assets/EmptyState.BdO1q9cJ.css +0 -18
  787. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BJ-I1gHO.css +0 -18
  788. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.Bhof07Eg.css +0 -18
  789. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.CrXpMrqh.css +0 -18
  790. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BFgtfHj2.js +0 -18
  791. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BIRVeCLU.js +0 -18
  792. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BKCNyxZ2.js +0 -18
  793. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BLAiBE__.js +0 -18
  794. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BeO8veBd.js +0 -18
  795. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BgNaeXAp.js +0 -18
  796. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/C3SY6-sX.js +0 -19
  797. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/C4eeChIU.js +0 -18
  798. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CVV6HrFb.js +0 -18
  799. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CstKKb9b.js +0 -18
  800. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CyQ_oBw2.js +0 -18
  801. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DGryW1Vp.js +0 -18
  802. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DIx44H9N.js +0 -18
  803. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DP6QP4L6.js +0 -18
  804. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DmRbbcS3.js +0 -23
  805. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/IFIFk6zi.js +0 -18
  806. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/KJdjlibc.js +0 -20
  807. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/ll-VsEGv.js +0 -18
  808. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/raHbXn_9.js +0 -18
  809. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/uFRI_bmR.js +0 -18
  810. package/frontend/.svelte-kit/output/client/_app/immutable/entry/app.Dz_CBZcR.js +0 -19
  811. package/frontend/.svelte-kit/output/client/_app/immutable/entry/start.MMlC62np.js +0 -18
  812. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/0.CKD9Qja6.js +0 -23
  813. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/1.Dbck5ct8.js +0 -18
  814. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/10.BfmGpmC1.js +0 -19
  815. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/11.C7l9HPom.js +0 -18
  816. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/12.Iu9bcGdC.js +0 -19
  817. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/2.BqQhRvYh.js +0 -18
  818. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/3.BZRTKadS.js +0 -18
  819. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/4.BfKoPKdM.js +0 -18
  820. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/5.B4a2uCWn.js +0 -18
  821. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/6.CI508CMS.js +0 -18
  822. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/7.3x_eiof1.js +0 -18
  823. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/8.BfUuob4H.js +0 -29
  824. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/9.BZhCKRJe.js +0 -18
  825. package/frontend/.svelte-kit/output/server/_app/immutable/assets/ConfirmModal.CdhOYVBb.css +0 -18
  826. package/frontend/.svelte-kit/output/server/_app/immutable/assets/EmptyState.BdO1q9cJ.css +0 -18
  827. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BJ-I1gHO.css +0 -18
  828. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.Bhof07Eg.css +0 -18
  829. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.CrXpMrqh.css +0 -18
  830. package/frontend/.svelte-kit/output/server/chunks/Button.js +0 -33
  831. package/frontend/build/client/_app/immutable/assets/11.BJ-I1gHO.css +0 -18
  832. package/frontend/build/client/_app/immutable/assets/11.BJ-I1gHO.css.br +0 -0
  833. package/frontend/build/client/_app/immutable/assets/11.BJ-I1gHO.css.gz +0 -0
  834. package/frontend/build/client/_app/immutable/assets/2.CrXpMrqh.css +0 -18
  835. package/frontend/build/client/_app/immutable/assets/2.CrXpMrqh.css.br +0 -0
  836. package/frontend/build/client/_app/immutable/assets/2.CrXpMrqh.css.gz +0 -0
  837. package/frontend/build/client/_app/immutable/assets/8.Bhof07Eg.css +0 -18
  838. package/frontend/build/client/_app/immutable/assets/8.Bhof07Eg.css.br +0 -0
  839. package/frontend/build/client/_app/immutable/assets/8.Bhof07Eg.css.gz +0 -0
  840. package/frontend/build/client/_app/immutable/assets/ConfirmModal.CdhOYVBb.css +0 -18
  841. package/frontend/build/client/_app/immutable/assets/ConfirmModal.CdhOYVBb.css.br +0 -0
  842. package/frontend/build/client/_app/immutable/assets/ConfirmModal.CdhOYVBb.css.gz +0 -0
  843. package/frontend/build/client/_app/immutable/assets/ConfirmModal.DmxkcwXv.css +0 -18
  844. package/frontend/build/client/_app/immutable/assets/ConfirmModal.DmxkcwXv.css.br +0 -0
  845. package/frontend/build/client/_app/immutable/assets/ConfirmModal.DmxkcwXv.css.gz +0 -0
  846. package/frontend/build/client/_app/immutable/assets/EmptyState.BdO1q9cJ.css +0 -18
  847. package/frontend/build/client/_app/immutable/assets/EmptyState.BdO1q9cJ.css.br +0 -0
  848. package/frontend/build/client/_app/immutable/assets/EmptyState.BdO1q9cJ.css.gz +0 -0
  849. package/frontend/build/client/_app/immutable/assets/_page.BJ-I1gHO.css +0 -18
  850. package/frontend/build/client/_app/immutable/assets/_page.BJ-I1gHO.css.br +0 -0
  851. package/frontend/build/client/_app/immutable/assets/_page.BJ-I1gHO.css.gz +0 -0
  852. package/frontend/build/client/_app/immutable/assets/_page.Bhof07Eg.css +0 -18
  853. package/frontend/build/client/_app/immutable/assets/_page.Bhof07Eg.css.br +0 -0
  854. package/frontend/build/client/_app/immutable/assets/_page.Bhof07Eg.css.gz +0 -0
  855. package/frontend/build/client/_app/immutable/assets/_page.CrXpMrqh.css +0 -18
  856. package/frontend/build/client/_app/immutable/assets/_page.CrXpMrqh.css.br +0 -0
  857. package/frontend/build/client/_app/immutable/assets/_page.CrXpMrqh.css.gz +0 -0
  858. package/frontend/build/client/_app/immutable/chunks/B0pefNHY.js.br +0 -0
  859. package/frontend/build/client/_app/immutable/chunks/B0pefNHY.js.gz +0 -0
  860. package/frontend/build/client/_app/immutable/chunks/BFEiffAL.js.br +0 -0
  861. package/frontend/build/client/_app/immutable/chunks/BFEiffAL.js.gz +0 -0
  862. package/frontend/build/client/_app/immutable/chunks/BFgtfHj2.js +0 -18
  863. package/frontend/build/client/_app/immutable/chunks/BFgtfHj2.js.br +0 -0
  864. package/frontend/build/client/_app/immutable/chunks/BFgtfHj2.js.gz +0 -0
  865. package/frontend/build/client/_app/immutable/chunks/BIRVeCLU.js +0 -18
  866. package/frontend/build/client/_app/immutable/chunks/BIRVeCLU.js.br +0 -20
  867. package/frontend/build/client/_app/immutable/chunks/BIRVeCLU.js.gz +0 -0
  868. package/frontend/build/client/_app/immutable/chunks/BKCNyxZ2.js +0 -18
  869. package/frontend/build/client/_app/immutable/chunks/BKCNyxZ2.js.br +0 -0
  870. package/frontend/build/client/_app/immutable/chunks/BKCNyxZ2.js.gz +0 -0
  871. package/frontend/build/client/_app/immutable/chunks/BLAiBE__.js +0 -18
  872. package/frontend/build/client/_app/immutable/chunks/BLAiBE__.js.br +0 -18
  873. package/frontend/build/client/_app/immutable/chunks/BLAiBE__.js.gz +0 -0
  874. package/frontend/build/client/_app/immutable/chunks/BVMec-1T.js.br +0 -0
  875. package/frontend/build/client/_app/immutable/chunks/BVMec-1T.js.gz +0 -0
  876. package/frontend/build/client/_app/immutable/chunks/BeO8veBd.js +0 -18
  877. package/frontend/build/client/_app/immutable/chunks/BeO8veBd.js.br +0 -0
  878. package/frontend/build/client/_app/immutable/chunks/BeO8veBd.js.gz +0 -0
  879. package/frontend/build/client/_app/immutable/chunks/BgNaeXAp.js +0 -18
  880. package/frontend/build/client/_app/immutable/chunks/BgNaeXAp.js.br +0 -0
  881. package/frontend/build/client/_app/immutable/chunks/BgNaeXAp.js.gz +0 -0
  882. package/frontend/build/client/_app/immutable/chunks/BkKmeUbA.js.br +0 -0
  883. package/frontend/build/client/_app/immutable/chunks/BkKmeUbA.js.gz +0 -0
  884. package/frontend/build/client/_app/immutable/chunks/C3SY6-sX.js +0 -19
  885. package/frontend/build/client/_app/immutable/chunks/C3SY6-sX.js.br +0 -0
  886. package/frontend/build/client/_app/immutable/chunks/C3SY6-sX.js.gz +0 -0
  887. package/frontend/build/client/_app/immutable/chunks/C4eeChIU.js +0 -18
  888. package/frontend/build/client/_app/immutable/chunks/C4eeChIU.js.br +0 -0
  889. package/frontend/build/client/_app/immutable/chunks/C4eeChIU.js.gz +0 -0
  890. package/frontend/build/client/_app/immutable/chunks/C67QNx7Z.js.br +0 -0
  891. package/frontend/build/client/_app/immutable/chunks/C67QNx7Z.js.gz +0 -0
  892. package/frontend/build/client/_app/immutable/chunks/CVV6HrFb.js +0 -18
  893. package/frontend/build/client/_app/immutable/chunks/CVV6HrFb.js.br +0 -0
  894. package/frontend/build/client/_app/immutable/chunks/CVV6HrFb.js.gz +0 -0
  895. package/frontend/build/client/_app/immutable/chunks/CstKKb9b.js +0 -18
  896. package/frontend/build/client/_app/immutable/chunks/CstKKb9b.js.br +0 -0
  897. package/frontend/build/client/_app/immutable/chunks/CstKKb9b.js.gz +0 -0
  898. package/frontend/build/client/_app/immutable/chunks/CxTX_lpP.js.br +0 -0
  899. package/frontend/build/client/_app/immutable/chunks/CxTX_lpP.js.gz +0 -0
  900. package/frontend/build/client/_app/immutable/chunks/CyQ_oBw2.js +0 -18
  901. package/frontend/build/client/_app/immutable/chunks/CyQ_oBw2.js.br +0 -0
  902. package/frontend/build/client/_app/immutable/chunks/CyQ_oBw2.js.gz +0 -0
  903. package/frontend/build/client/_app/immutable/chunks/DGryW1Vp.js +0 -18
  904. package/frontend/build/client/_app/immutable/chunks/DGryW1Vp.js.br +0 -0
  905. package/frontend/build/client/_app/immutable/chunks/DGryW1Vp.js.gz +0 -0
  906. package/frontend/build/client/_app/immutable/chunks/DIx44H9N.js +0 -18
  907. package/frontend/build/client/_app/immutable/chunks/DIx44H9N.js.br +0 -0
  908. package/frontend/build/client/_app/immutable/chunks/DIx44H9N.js.gz +0 -0
  909. package/frontend/build/client/_app/immutable/chunks/DP6QP4L6.js +0 -18
  910. package/frontend/build/client/_app/immutable/chunks/DP6QP4L6.js.br +0 -0
  911. package/frontend/build/client/_app/immutable/chunks/DP6QP4L6.js.gz +0 -0
  912. package/frontend/build/client/_app/immutable/chunks/DmRbbcS3.js +0 -23
  913. package/frontend/build/client/_app/immutable/chunks/DmRbbcS3.js.br +0 -0
  914. package/frontend/build/client/_app/immutable/chunks/DmRbbcS3.js.gz +0 -0
  915. package/frontend/build/client/_app/immutable/chunks/IFIFk6zi.js +0 -18
  916. package/frontend/build/client/_app/immutable/chunks/IFIFk6zi.js.br +0 -0
  917. package/frontend/build/client/_app/immutable/chunks/IFIFk6zi.js.gz +0 -0
  918. package/frontend/build/client/_app/immutable/chunks/KJdjlibc.js +0 -20
  919. package/frontend/build/client/_app/immutable/chunks/KJdjlibc.js.br +0 -0
  920. package/frontend/build/client/_app/immutable/chunks/KJdjlibc.js.gz +0 -0
  921. package/frontend/build/client/_app/immutable/chunks/ll-VsEGv.js +0 -18
  922. package/frontend/build/client/_app/immutable/chunks/ll-VsEGv.js.br +0 -0
  923. package/frontend/build/client/_app/immutable/chunks/ll-VsEGv.js.gz +0 -0
  924. package/frontend/build/client/_app/immutable/chunks/raHbXn_9.js +0 -18
  925. package/frontend/build/client/_app/immutable/chunks/raHbXn_9.js.br +0 -0
  926. package/frontend/build/client/_app/immutable/chunks/raHbXn_9.js.gz +0 -0
  927. package/frontend/build/client/_app/immutable/chunks/uFRI_bmR.js +0 -18
  928. package/frontend/build/client/_app/immutable/chunks/uFRI_bmR.js.br +0 -0
  929. package/frontend/build/client/_app/immutable/chunks/uFRI_bmR.js.gz +0 -0
  930. package/frontend/build/client/_app/immutable/entry/app.Dz_CBZcR.js +0 -19
  931. package/frontend/build/client/_app/immutable/entry/app.Dz_CBZcR.js.br +0 -0
  932. package/frontend/build/client/_app/immutable/entry/app.Dz_CBZcR.js.gz +0 -0
  933. package/frontend/build/client/_app/immutable/entry/start.MMlC62np.js +0 -18
  934. package/frontend/build/client/_app/immutable/entry/start.MMlC62np.js.br +0 -18
  935. package/frontend/build/client/_app/immutable/entry/start.MMlC62np.js.gz +0 -0
  936. package/frontend/build/client/_app/immutable/nodes/0.CKD9Qja6.js +0 -23
  937. package/frontend/build/client/_app/immutable/nodes/0.CKD9Qja6.js.br +0 -0
  938. package/frontend/build/client/_app/immutable/nodes/0.CKD9Qja6.js.gz +0 -0
  939. package/frontend/build/client/_app/immutable/nodes/1.Dbck5ct8.js +0 -18
  940. package/frontend/build/client/_app/immutable/nodes/1.Dbck5ct8.js.br +0 -0
  941. package/frontend/build/client/_app/immutable/nodes/1.Dbck5ct8.js.gz +0 -0
  942. package/frontend/build/client/_app/immutable/nodes/10.BfmGpmC1.js +0 -19
  943. package/frontend/build/client/_app/immutable/nodes/10.BfmGpmC1.js.br +0 -0
  944. package/frontend/build/client/_app/immutable/nodes/10.BfmGpmC1.js.gz +0 -0
  945. package/frontend/build/client/_app/immutable/nodes/11.C7l9HPom.js +0 -18
  946. package/frontend/build/client/_app/immutable/nodes/11.C7l9HPom.js.br +0 -0
  947. package/frontend/build/client/_app/immutable/nodes/11.C7l9HPom.js.gz +0 -0
  948. package/frontend/build/client/_app/immutable/nodes/12.Iu9bcGdC.js +0 -19
  949. package/frontend/build/client/_app/immutable/nodes/12.Iu9bcGdC.js.br +0 -0
  950. package/frontend/build/client/_app/immutable/nodes/12.Iu9bcGdC.js.gz +0 -0
  951. package/frontend/build/client/_app/immutable/nodes/2.BqQhRvYh.js +0 -18
  952. package/frontend/build/client/_app/immutable/nodes/2.BqQhRvYh.js.br +0 -0
  953. package/frontend/build/client/_app/immutable/nodes/2.BqQhRvYh.js.gz +0 -0
  954. package/frontend/build/client/_app/immutable/nodes/3.BZRTKadS.js +0 -18
  955. package/frontend/build/client/_app/immutable/nodes/3.BZRTKadS.js.br +0 -0
  956. package/frontend/build/client/_app/immutable/nodes/3.BZRTKadS.js.gz +0 -0
  957. package/frontend/build/client/_app/immutable/nodes/4.BfKoPKdM.js +0 -18
  958. package/frontend/build/client/_app/immutable/nodes/4.BfKoPKdM.js.br +0 -0
  959. package/frontend/build/client/_app/immutable/nodes/4.BfKoPKdM.js.gz +0 -0
  960. package/frontend/build/client/_app/immutable/nodes/5.B4a2uCWn.js +0 -18
  961. package/frontend/build/client/_app/immutable/nodes/5.B4a2uCWn.js.br +0 -0
  962. package/frontend/build/client/_app/immutable/nodes/5.B4a2uCWn.js.gz +0 -0
  963. package/frontend/build/client/_app/immutable/nodes/6.CI508CMS.js +0 -18
  964. package/frontend/build/client/_app/immutable/nodes/6.CI508CMS.js.br +0 -0
  965. package/frontend/build/client/_app/immutable/nodes/6.CI508CMS.js.gz +0 -0
  966. package/frontend/build/client/_app/immutable/nodes/7.3x_eiof1.js +0 -18
  967. package/frontend/build/client/_app/immutable/nodes/7.3x_eiof1.js.br +0 -0
  968. package/frontend/build/client/_app/immutable/nodes/7.3x_eiof1.js.gz +0 -0
  969. package/frontend/build/client/_app/immutable/nodes/8.BfUuob4H.js +0 -29
  970. package/frontend/build/client/_app/immutable/nodes/8.BfUuob4H.js.br +0 -0
  971. package/frontend/build/client/_app/immutable/nodes/8.BfUuob4H.js.gz +0 -0
  972. package/frontend/build/client/_app/immutable/nodes/9.BZhCKRJe.js +0 -18
  973. package/frontend/build/client/_app/immutable/nodes/9.BZhCKRJe.js.br +0 -0
  974. package/frontend/build/client/_app/immutable/nodes/9.BZhCKRJe.js.gz +0 -0
  975. package/frontend/build/server/chunks/0-Dzas6zkl.js +0 -34
  976. package/frontend/build/server/chunks/0-Dzas6zkl.js.map +0 -17
  977. package/frontend/build/server/chunks/1-B4EsP8yr.js +0 -26
  978. package/frontend/build/server/chunks/1-B4EsP8yr.js.map +0 -17
  979. package/frontend/build/server/chunks/10-UhDQZ5BY.js +0 -26
  980. package/frontend/build/server/chunks/10-UhDQZ5BY.js.map +0 -17
  981. package/frontend/build/server/chunks/11-mTH3nQlX.js +0 -26
  982. package/frontend/build/server/chunks/11-mTH3nQlX.js.map +0 -17
  983. package/frontend/build/server/chunks/12-9mg6kp53.js +0 -26
  984. package/frontend/build/server/chunks/12-9mg6kp53.js.map +0 -17
  985. package/frontend/build/server/chunks/2-Bkz8H7CT.js +0 -26
  986. package/frontend/build/server/chunks/2-Bkz8H7CT.js.map +0 -17
  987. package/frontend/build/server/chunks/3-DDtaiqu7.js +0 -26
  988. package/frontend/build/server/chunks/3-DDtaiqu7.js.map +0 -17
  989. package/frontend/build/server/chunks/4-DbdkTAvS.js +0 -26
  990. package/frontend/build/server/chunks/4-DbdkTAvS.js.map +0 -17
  991. package/frontend/build/server/chunks/5-CK5hY2WF.js +0 -26
  992. package/frontend/build/server/chunks/5-CK5hY2WF.js.map +0 -17
  993. package/frontend/build/server/chunks/6-Cps9fL3Z.js +0 -26
  994. package/frontend/build/server/chunks/6-Cps9fL3Z.js.map +0 -17
  995. package/frontend/build/server/chunks/7-CgUpbaJD.js +0 -26
  996. package/frontend/build/server/chunks/7-CgUpbaJD.js.map +0 -17
  997. package/frontend/build/server/chunks/8-dilaVKYo.js +0 -26
  998. package/frontend/build/server/chunks/8-dilaVKYo.js.map +0 -17
  999. package/frontend/build/server/chunks/9-CUJxgoIN.js +0 -26
  1000. package/frontend/build/server/chunks/9-CUJxgoIN.js.map +0 -17
  1001. package/frontend/build/server/chunks/BackLink-KxZNqsaq.js +0 -30
  1002. package/frontend/build/server/chunks/Badge-B5V-z6pI.js +0 -30
  1003. package/frontend/build/server/chunks/Button-CuacyA7Y.js +0 -33
  1004. package/frontend/build/server/chunks/Button-CuacyA7Y.js.map +0 -17
  1005. package/frontend/build/server/chunks/ConfirmModal-DBtnLLsU.js +0 -73
  1006. package/frontend/build/server/chunks/ConfirmModal-DBtnLLsU.js.map +0 -17
  1007. package/frontend/build/server/chunks/EmptyState-B74-VZ15.js +0 -34
  1008. package/frontend/build/server/chunks/EmptyState-B74-VZ15.js.map +0 -17
  1009. package/frontend/build/server/chunks/Toast-DDF2wi_5.js +0 -37
  1010. package/frontend/build/server/chunks/Toast-DDF2wi_5.js.map +0 -17
  1011. package/frontend/build/server/chunks/_layout.svelte-DoJXDbP1.js +0 -39
  1012. package/frontend/build/server/chunks/_layout.svelte-DoJXDbP1.js.map +0 -17
  1013. package/frontend/build/server/chunks/_page.svelte-BETENC2e.js.map +0 -17
  1014. package/frontend/build/server/chunks/_page.svelte-C0vstY93.js.map +0 -17
  1015. package/frontend/build/server/chunks/_page.svelte-CC27sZag.js.map +0 -17
  1016. package/frontend/build/server/chunks/_page.svelte-CYkOPxn2.js +0 -183
  1017. package/frontend/build/server/chunks/_page.svelte-CYkOPxn2.js.map +0 -17
  1018. package/frontend/build/server/chunks/_page.svelte-CperUuP9.js +0 -564
  1019. package/frontend/build/server/chunks/_page.svelte-CperUuP9.js.map +0 -17
  1020. package/frontend/build/server/chunks/_page.svelte-CwrCf0C8.js +0 -65
  1021. package/frontend/build/server/chunks/_page.svelte-CwrCf0C8.js.map +0 -17
  1022. package/frontend/build/server/chunks/_page.svelte-DALHRFEX.js +0 -43
  1023. package/frontend/build/server/chunks/_page.svelte-DALHRFEX.js.map +0 -17
  1024. package/frontend/build/server/chunks/_page.svelte-DNNyBx4y.js +0 -43
  1025. package/frontend/build/server/chunks/_page.svelte-DNNyBx4y.js.map +0 -17
  1026. package/frontend/build/server/chunks/_page.svelte-DqWsUJRp.js.map +0 -17
  1027. package/frontend/build/server/chunks/_page.svelte-LcJmR5du.js.map +0 -17
  1028. package/frontend/build/server/chunks/_page.svelte-gnktnXKP.js.map +0 -17
  1029. package/frontend/build/server/chunks/constants-Drz-Vo39.js +0 -35
  1030. package/frontend/build/server/chunks/constants-Drz-Vo39.js.map +0 -17
  1031. package/frontend/build/server/chunks/error.svelte-BDW3iP1O.js +0 -45
  1032. package/frontend/build/server/chunks/index-server-Dr2Nvcmu.js +0 -31
  1033. package/frontend/build/server/chunks/index-server-Dr2Nvcmu.js.map +0 -17
  1034. package/frontend/build/server/chunks/reports-Bgi7V5N7.js +0 -40
  1035. package/frontend/build/server/chunks/runner-D18Ml_vF.js +0 -42
  1036. package/frontend/build/server/chunks/runner-D18Ml_vF.js.map +0 -17
  1037. package/frontend/build/server/chunks/stores-DlkXV308.js +0 -44
  1038. package/frontend/build/server/chunks/theme-D_NKm6iI.js +0 -27
  1039. package/frontend/build/server/chunks/theme-D_NKm6iI.js.map +0 -17
  1040. package/resources/gpl-3.0-license.txt +0 -14
@@ -1,38 +1,185 @@
1
- /*
2
- * This file is part of Plum.
3
- *
4
- * Plum is free software: you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License as published by
6
- * the Free Software Foundation, either version 3 of the License, or
7
- * (at your option) any later version.
8
- *
9
- * Plum is distributed in the hope that it will be useful,
10
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- * GNU General Public License for more details.
13
- *
14
- * You should have received a copy of the GNU General Public License
15
- * along with Plum. If not, see https://www.gnu.org/licenses/.
16
- */
17
-
18
- import { X as store_get, a2 as copy_payload, a3 as assign_payload, $ as unsubscribe_stores, p as pop, a as push, Z as ensure_array_like, Y as head, _ as stringify } from "../../../chunks/index.js";
1
+ 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";
19
2
  import "../../../chunks/client.js";
20
- import { B as BROWSERS, A as API_BASE } from "../../../chunks/constants.js";
3
+ import { A as API_BASE, M as MAX_TEST_RETRIES, B as BROWSERS } from "../../../chunks/constants.js";
21
4
  import { a as auth } from "../../../chunks/auth.js";
22
5
  import { c as builtInEnabled } from "../../../chunks/runner.js";
23
6
  import { t as theme } from "../../../chunks/theme.js";
24
- import { B as Button } from "../../../chunks/Button.js";
25
- import { T as Toast } from "../../../chunks/Toast.js";
7
+ import { T as Toast, B as Button } from "../../../chunks/Toast.js";
26
8
  import { C as ConfirmModal } from "../../../chunks/ConfirmModal.js";
27
9
  import { B as Badge } from "../../../chunks/Badge.js";
28
- import { a as attr } from "../../../chunks/attributes.js";
10
+ import { a as SAVE_LABEL, b as CANCEL_LABEL, E as EDIT_LABEL, c as EMAIL_LABEL } from "../../../chunks/common.js";
29
11
  import { e as escape_html } from "../../../chunks/escaping.js";
12
+ import { a as attr } from "../../../chunks/attributes.js";
13
+ const PAGE_TITLE = "Settings — Plum";
14
+ const HEADING = "Settings";
15
+ const NAME_LABEL = "Name";
16
+ const PROJECT_LABEL = "Project";
17
+ const RUNNERS_LABEL = "Runners";
18
+ const REPOSITORY_NAV_LABEL = "Repository";
19
+ const REPOSITORY_HEADING = "Test Repository";
20
+ const INTEGRATIONS_LABEL = "Integrations";
21
+ const MCP_NAV_LABEL = "MCP";
22
+ const MCP_HEADING = "MCP Integration";
23
+ const ACCOUNT_LABEL = "Account";
24
+ const USERS_LABEL = "Users";
25
+ const BACKUP_LABEL = "Backup";
26
+ const PROJECT_DESC = "Identity information shown across the UI";
27
+ const RUNNERS_DESC = "Register self-hosted runner nodes to distribute tests across machines.";
28
+ const REPOSITORY_DESC = "Configure ID prefixes for test suites and cases.";
29
+ const INTEGRATIONS_DESC = "Connect Discord and Slack to receive run notifications with pass/fail results and report links.";
30
+ const MCP_DESC = "Generate an API key for any MCP-compatible AI client — Claude, Cursor, Windsurf, and others.";
31
+ const ACCOUNT_DESC = "Manage your profile, credentials and session.";
32
+ const USERS_DESC = "Add and manage who can access Plum.";
33
+ const BACKUP_DESC = "Export your test cases, schedules, users, and project settings. Automate uploads to any S3-compatible storage — Cloudflare R2, Backblaze B2, AWS S3, or MinIO.";
34
+ const PROJECT_NAME_LABEL = "Project Name";
35
+ const PROJECT_NAME_PLACEHOLDER = "My Test Suite";
36
+ const LOGO_URL_LABEL = "Logo URL";
37
+ const LOGO_URL_HINT = "Direct link to an image (PNG, SVG, JPG)";
38
+ const LOGO_URL_PLACEHOLDER = "https://example.com/logo.png";
39
+ const TIMEZONE_LABEL = "Timezone";
40
+ const TIMEZONE_HINT = "Used to schedule cron jobs and backups";
41
+ const RETRY_FAILED_TESTS_LABEL = "Retry failed tests";
42
+ const RETRY_FAILED_TESTS_HINT = "Automatically re-run failed scenarios up to this many times before finalizing the report. 0 disables retries.";
43
+ const DARK_MODE_LABEL = "Dark mode";
44
+ const DARK_MODE_DESC = "Switch between light and dark appearance";
45
+ const saveProjectLabel = (saving) => "Save Project";
46
+ const BUILTIN_RUNNER_TOGGLE_LABEL = "Built-in runner";
47
+ const BUILTIN_RUNNER_TOGGLE_DESC = "Use this server to run tests locally. Disable to route all runs to external nodes.";
48
+ const RUNNER_URL_LABEL = "URL";
49
+ const RUNNER_URL_HINT_PREFIX = "Use";
50
+ const RUNNER_URL_HINT_SUFFIX = "for local nodes";
51
+ const RUNNER_URL_PLACEHOLDER = "http://host.docker.internal:3002";
52
+ const TOKEN_LABEL = "Token";
53
+ const KEEP_TOKEN_PLACEHOLDER = "Leave blank to keep current token";
54
+ const BROWSER_LABEL = "Browser";
55
+ const RUNNER_NAME_PLACEHOLDER = "staging-node";
56
+ const RUNNER_UNREACHABLE_LABEL = "unreachable";
57
+ const RUNNER_PINGING_LABEL = "pinging…";
58
+ const REMOVE_LABEL = "Remove";
59
+ const OPEN_ADD_RUNNER_LABEL = "+ Add Runner";
60
+ const RESTART_LABEL = "Restart";
61
+ const RESTARTING_LABEL = "Restarting…";
62
+ const STOP_LABEL = "Stop";
63
+ const STOPPING_LABEL = "Stopping…";
64
+ const editRunnerSubmitLabel = (saving) => SAVE_LABEL;
65
+ const restartRunnerLabel = (restarting) => restarting ? RESTARTING_LABEL : RESTART_LABEL;
66
+ const stopRunnerLabel = (stopping) => stopping ? STOPPING_LABEL : STOP_LABEL;
67
+ const CASE_PREFIX_LABEL = "Test Case prefix";
68
+ const CASE_PREFIX_PLACEHOLDER = "TC";
69
+ const SUITE_PREFIX_LABEL = "Test Suite prefix";
70
+ const SUITE_PREFIX_PLACEHOLDER = "TS";
71
+ const EXAMPLES_LABEL = "Examples:";
72
+ const MIGRATE_IDS_HEADING = "Migrate IDs";
73
+ const MIGRATE_DESC_PREFIX = "Rename all existing test IDs to use a new prefix. Cucumber tags in code are";
74
+ const MIGRATE_DESC_STRONG = "not";
75
+ const MIGRATE_DESC_SUFFIX = "affected — you manage those separately.";
76
+ const NEW_CASE_PREFIX_LABEL = "New case prefix";
77
+ const NEW_SUITE_PREFIX_LABEL = "New suite prefix";
78
+ const savePrefixesLabel = (saving) => "Save Prefixes";
79
+ const runMigrationLabel = (migrating) => "Run Migration";
80
+ const WEBHOOKS_CARD_TITLE = "Webhooks";
81
+ const DISCORD_WEBHOOK_LABEL = "Discord Webhook URL";
82
+ const DISCORD_WEBHOOK_HINT = "Leave blank to disable Discord notifications";
83
+ const DISCORD_WEBHOOK_PLACEHOLDER = "https://discord.com/api/webhooks/…";
84
+ const SLACK_WEBHOOK_LABEL = "Slack Webhook URL";
85
+ const SLACK_WEBHOOK_HINT = "Leave blank to disable Slack notifications";
86
+ const SLACK_WEBHOOK_PLACEHOLDER = "https://hooks.slack.com/services/…";
87
+ const PUBLIC_URL_LABEL = "Public URL";
88
+ const PUBLIC_URL_HINT = "Base URL of this Plum instance, used to link reports in notifications";
89
+ const PUBLIC_URL_PLACEHOLDER = "https://plum.yourcompany.com";
90
+ const CI_TRIGGERS_CARD_TITLE = "CI / External Triggers";
91
+ 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";
92
+ const CI_DESC_PART2 = "with an";
93
+ const CI_DESC_PART3 = "header. Generate a key on the";
94
+ const MCP_TAB_LINK_LABEL = "MCP tab";
95
+ const CI_DESC_PART4 = "and store it as a repo secret — never commit it directly. Runs triggered this way show up in Reports tagged";
96
+ const EXTERNAL_BADGE_LABEL = "External";
97
+ const COPY_WORKFLOW_STEP_LABEL = "Copy Workflow Step";
98
+ const saveIntegrationsLabel = (saving) => "Save Integrations";
99
+ const copyCiSnippetLabel = (copied) => COPY_WORKFLOW_STEP_LABEL;
100
+ const API_KEY_CARD_TITLE = "API Key";
101
+ const NO_KEY_GENERATED_MESSAGE = "No key generated yet.";
102
+ const generateKeyLabel = (generating) => "Generate Key";
103
+ const PROFILE_CARD_TITLE = "Profile";
104
+ const CHANGE_PASSWORD_CARD_TITLE = "Change password";
105
+ const CURRENT_PASSWORD_LABEL = "Current password";
106
+ const NEW_PASSWORD_LABEL = "New password";
107
+ const CONFIRM_NEW_PASSWORD_LABEL = "Confirm new password";
108
+ const SIGN_OUT_LABEL = "Sign out";
109
+ const saveProfileLabel = (saving) => "Save Profile";
110
+ const changePasswordLabel = (saving) => "Change Password";
111
+ const REMOVE_USER_MODAL_TITLE = "Remove User";
112
+ const REMOVE_USER_LABEL = "Remove";
113
+ const ADD_USER_CARD_TITLE = "Add User";
114
+ const USER_NAME_PLACEHOLDER = "Jane Smith";
115
+ const USER_EMAIL_PLACEHOLDER = "jane@example.com";
116
+ const PASSWORD_LABEL = "Password";
117
+ const ROLE_LABEL = "Role";
118
+ const USER_ROLE_OPTION = "User";
119
+ const ADMIN_ROLE_OPTION = "Admin";
120
+ const REMOVE_USER_ICON_TITLE = "Remove user";
121
+ const YOU_CHIP_LABEL = "you";
122
+ const addUserLabel = (saving) => "Add User";
123
+ const MANUAL_BACKUP_CARD_TITLE = "Manual Backup";
124
+ const EXPORT_BLOCK_TITLE = "Export";
125
+ const EXPORT_BLOCK_DESC_PREFIX = "Downloads a";
126
+ const EXPORT_BLOCK_DESC_SUFFIX = "file with all cron jobs, test cases, test runs, users, runners, and project settings.";
127
+ const IMPORT_BLOCK_TITLE = "Import";
128
+ const IMPORT_BLOCK_DESC = "Restores all data from a previously exported backup. Existing records are overwritten. Cron jobs are re-scheduled after import.";
129
+ const CHOOSE_FILE_LABEL = "Choose file…";
130
+ const BACKUP_DISCLAIMER_PREFIX = "Reports are not included in backups. To back up report history, run";
131
+ const BACKUP_DISCLAIMER_SUFFIX = "directly on the PostgreSQL volume.";
132
+ const S3_STORAGE_CARD_TITLE = "S3 Storage";
133
+ const S3_STORAGE_DESC_PREFIX = "Works with any S3-compatible provider — Cloudflare R2, Backblaze B2, AWS S3, or MinIO. Leave";
134
+ const ENDPOINT_URL_LABEL = "Endpoint URL";
135
+ const S3_STORAGE_DESC_SUFFIX = "empty for AWS S3.";
136
+ const ENDPOINT_URL_HINT = "Leave blank for AWS S3";
137
+ const ENDPOINT_URL_PLACEHOLDER = "https://account.r2.cloudflarestorage.com";
138
+ const REGION_LABEL = "Region";
139
+ const REGION_HINT_PREFIX = "Use";
140
+ const REGION_HINT_SUFFIX = "for Cloudflare R2";
141
+ const REGION_PLACEHOLDER = "us-east-1";
142
+ const BUCKET_LABEL = "Bucket";
143
+ const BUCKET_PLACEHOLDER = "my-plum-backups";
144
+ const PATH_PREFIX_LABEL = "Path Prefix";
145
+ const PATH_PREFIX_HINT = "Optional folder inside the bucket";
146
+ const PATH_PREFIX_PLACEHOLDER = "plum/";
147
+ const ACCESS_KEY_LABEL = "Access Key ID";
148
+ const ACCESS_KEY_PLACEHOLDER = "AKIAIOSFODNN7EXAMPLE";
149
+ const SECRET_KEY_LABEL = "Secret Access Key";
150
+ const TEST_CONNECTION_LABEL = "Test Connection";
151
+ const SAVE_S3_CONFIG_LABEL = "Save S3 Config";
152
+ const SECRET_KEY_REQUIRED_HINT = "Required";
153
+ const SECRET_KEY_SET_PLACEHOLDER = "••••••••";
154
+ const SECRET_KEY_UNSET_PLACEHOLDER = "Enter secret key";
155
+ const SCHEDULED_BACKUP_CARD_TITLE = "Scheduled Backup";
156
+ const CONFIGURE_S3_FIRST_MESSAGE = "Configure S3 storage above to enable scheduled backups.";
157
+ const ENABLE_SCHEDULED_BACKUP_LABEL = "Enable scheduled backup";
158
+ const CRON_EXPRESSION_LABEL = "Cron Expression";
159
+ const CRON_HINT_PREFIX = "5-field cron — e.g.";
160
+ const CRON_HINT_SUFFIX = "= daily at 2 AM.";
161
+ const CRONTAB_LINK_LABEL = "Test at crontab.guru ↗";
162
+ const CRON_PLACEHOLDER = "0 2 * * *";
163
+ const UPLOAD_TO_S3_NOW_LABEL = "Upload to S3 Now";
164
+ const SAVE_SCHEDULE_LABEL = "Save Schedule";
165
+ const exportLabel = (exporting) => "Export JSON";
166
+ const importLabel = (importing) => "Import";
167
+ const secretKeyHint = (isSet) => SECRET_KEY_REQUIRED_HINT;
168
+ const secretKeyPlaceholder = (isSet) => isSet ? SECRET_KEY_SET_PLACEHOLDER : SECRET_KEY_UNSET_PLACEHOLDER;
169
+ const testConnectionLabel = (testing) => TEST_CONNECTION_LABEL;
170
+ const saveS3ConfigLabel = (saving) => SAVE_S3_CONFIG_LABEL;
171
+ const uploadS3NowLabel = (running) => UPLOAD_TO_S3_NOW_LABEL;
172
+ const saveScheduleLabel = (saving) => SAVE_SCHEDULE_LABEL;
30
173
  function _page($$payload, $$props) {
31
174
  push();
32
175
  var $$store_subs;
33
176
  let s3Configured, ciWorkflowSnippet, navItems;
34
177
  let section = typeof sessionStorage !== "undefined" && sessionStorage.getItem("plum:settings:section") || "project";
35
- let project = { name: "", logoUrl: "" };
178
+ let project = {
179
+ name: "",
180
+ logoUrl: "",
181
+ maxRetries: 0
182
+ };
36
183
  let projectSaving = false;
37
184
  let toast = null;
38
185
  const TIMEZONES = (() => {
@@ -80,10 +227,13 @@ function _page($$payload, $$props) {
80
227
  backupS3Prefix: ""
81
228
  };
82
229
  let backupConfigSaving = false;
230
+ let backupS3SecretKeySet = false;
83
231
  let backupTestingS3 = false;
84
232
  let backupRunningNow = false;
85
233
  let runners = [];
86
234
  let pingResults = {};
235
+ let stoppingId = null;
236
+ let restartingId = null;
87
237
  let editingId = null;
88
238
  let editForm = {
89
239
  name: "",
@@ -110,10 +260,7 @@ function _page($$payload, $$props) {
110
260
  plum: {
111
261
  command: "plum",
112
262
  args: ["mcp"],
113
- env: {
114
- PLUM_API_URL: "http://localhost:3001",
115
- PLUM_API_KEY: mcpKey
116
- }
263
+ env: { PLUM_API_URL: API_BASE, PLUM_API_KEY: mcpKey }
117
264
  }
118
265
  }
119
266
  },
@@ -129,48 +276,48 @@ function _page($$payload, $$props) {
129
276
  ` -d '{"tag": "@smoke", "baseUrl": "https://your-pr-preview-url"}'`
130
277
  ].join("\n");
131
278
  navItems = store_get($$store_subs ??= {}, "$auth", auth).user?.role === "admin" ? [
132
- { id: "project", label: "Project" },
133
- { id: "runners", label: "Runners" },
134
- { id: "repository", label: "Repository" },
135
- { id: "integrations", label: "Integrations" },
136
- { id: "mcp", label: "MCP" },
137
- { id: "account", label: "Account" },
138
- { id: "users", label: "Users" },
139
- { id: "backup", label: "Backup" }
140
- ] : [{ id: "account", label: "Account" }];
279
+ { id: "project", label: PROJECT_LABEL },
280
+ { id: "runners", label: RUNNERS_LABEL },
281
+ { id: "repository", label: REPOSITORY_NAV_LABEL },
282
+ { id: "integrations", label: INTEGRATIONS_LABEL },
283
+ { id: "mcp", label: MCP_NAV_LABEL },
284
+ { id: "account", label: ACCOUNT_LABEL },
285
+ { id: "users", label: USERS_LABEL },
286
+ { id: "backup", label: BACKUP_LABEL }
287
+ ] : [{ id: "account", label: ACCOUNT_LABEL }];
141
288
  let $$settled = true;
142
289
  let $$inner_payload;
143
290
  function $$render_inner($$payload2) {
144
291
  const each_array = ensure_array_like(navItems);
145
292
  head($$payload2, ($$payload3) => {
146
- $$payload3.title = `<title>Settings — Plum</title>`;
293
+ $$payload3.title = `<title>${escape_html(PAGE_TITLE)}</title>`;
147
294
  });
148
295
  Toast($$payload2, { toast });
149
- $$payload2.out += `<!----> <div class="page-header svelte-9l533f"><h1 class="svelte-9l533f">Settings</h1></div> <div class="settings-layout svelte-9l533f"><aside class="settings-sidebar svelte-9l533f"><nav class="svelte-9l533f"><!--[-->`;
296
+ $$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"><!--[-->`;
150
297
  for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
151
298
  let item = each_array[$$index];
152
- $$payload2.out += `<button${attr("class", `sidebar-item svelte-9l533f ${stringify([section === item.id ? "active" : ""].filter(Boolean).join(" "))}`)}>${escape_html(item.label)}</button>`;
299
+ $$payload2.out += `<button${attr("class", `sidebar-item svelte-bpb2i4 ${stringify([section === item.id ? "active" : ""].filter(Boolean).join(" "))}`)}>${escape_html(item.label)}</button>`;
153
300
  }
154
- $$payload2.out += `<!--]--></nav></aside> <div class="settings-content svelte-9l533f">`;
301
+ $$payload2.out += `<!--]--></nav></aside> <div class="settings-content svelte-bpb2i4">`;
155
302
  if (section === "project") {
156
303
  $$payload2.out += "<!--[-->";
157
304
  const each_array_1 = ensure_array_like(TIMEZONES);
158
- $$payload2.out += `<div class="content-section svelte-9l533f"><div class="content-header svelte-9l533f"><h2 class="svelte-9l533f">Project</h2> <p class="content-desc svelte-9l533f">Identity information shown across the UI</p></div> <div class="card settings-card svelte-9l533f"><div class="field"><label class="field-label svelte-9l533f" for="project-name">Project Name</label> <input id="project-name" type="text" class="field-input"${attr("value", project.name)} placeholder="My Test Suite"></div> <div class="field"><label class="field-label svelte-9l533f" for="project-logo"><span>Logo URL</span> <span class="field-hint svelte-9l533f">Direct link to an image (PNG, SVG, JPG)</span></label> <input id="project-logo" type="url" class="field-input"${attr("value", project.logoUrl)} placeholder="https://example.com/logo.png"></div> `;
305
+ $$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> `;
159
306
  {
160
307
  $$payload2.out += "<!--[!-->";
161
308
  }
162
- $$payload2.out += `<!--]--> <div class="field"><label class="field-label svelte-9l533f" for="project-timezone"><span>Timezone</span> <span class="field-hint svelte-9l533f">Used to schedule cron jobs and backups</span></label> <select id="project-timezone" class="field-input"><!--[-->`;
309
+ $$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"><!--[-->`;
163
310
  for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
164
311
  let tz = each_array_1[$$index_1];
165
312
  $$payload2.out += `<option${attr("value", tz)}>${escape_html(tz)}</option>`;
166
313
  }
167
- $$payload2.out += `<!--]--></select></div> <div class="toggle-row svelte-9l533f"><div class="toggle-info svelte-9l533f"><span class="toggle-label svelte-9l533f">Dark mode</span> <span class="toggle-desc svelte-9l533f">Switch between light and dark appearance</span></div> <button${attr("class", `toggle-switch svelte-9l533f ${stringify([
314
+ $$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([
168
315
  store_get($$store_subs ??= {}, "$theme", theme) === "dark" ? "on" : ""
169
- ].filter(Boolean).join(" "))}`)} role="switch"${attr("aria-checked", store_get($$store_subs ??= {}, "$theme", theme) === "dark")}><span class="toggle-thumb svelte-9l533f"></span></button></div> <div class="card-footer svelte-9l533f">`;
316
+ ].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">`;
170
317
  Button($$payload2, {
171
318
  disabled: projectSaving,
172
319
  children: ($$payload3) => {
173
- $$payload3.out += `<!---->${escape_html("Save Project")}`;
320
+ $$payload3.out += `<!---->${escape_html(saveProjectLabel())}`;
174
321
  },
175
322
  $$slots: { default: true }
176
323
  });
@@ -179,20 +326,20 @@ function _page($$payload, $$props) {
179
326
  $$payload2.out += "<!--[!-->";
180
327
  if (section === "runners") {
181
328
  $$payload2.out += "<!--[-->";
182
- $$payload2.out += `<div class="content-section svelte-9l533f"><div class="content-header svelte-9l533f"><h2 class="svelte-9l533f">Runners</h2> <p class="content-desc svelte-9l533f">Register self-hosted runner nodes to distribute tests across machines.</p></div> <div class="card settings-card svelte-9l533f"><div class="toggle-row svelte-9l533f"><div class="toggle-info svelte-9l533f"><span class="toggle-label svelte-9l533f">Built-in runner</span> <span class="toggle-desc svelte-9l533f">Use this server to run tests locally. Disable to route all runs to external nodes.</span></div> <button${attr("class", `toggle-switch svelte-9l533f ${stringify([
329
+ $$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([
183
330
  store_get($$store_subs ??= {}, "$builtInEnabled", builtInEnabled) ? "on" : ""
184
- ].filter(Boolean).join(" "))}`)} role="switch"${attr("aria-checked", store_get($$store_subs ??= {}, "$builtInEnabled", builtInEnabled))}><span class="toggle-thumb svelte-9l533f"></span></button></div> `;
331
+ ].filter(Boolean).join(" "))}`)} role="switch"${attr("aria-checked", store_get($$store_subs ??= {}, "$builtInEnabled", builtInEnabled))}><span class="toggle-thumb svelte-bpb2i4"></span></button></div> `;
185
332
  if (runners.length > 0) {
186
333
  $$payload2.out += "<!--[-->";
187
334
  const each_array_2 = ensure_array_like(runners);
188
- $$payload2.out += `<div class="runner-cards svelte-9l533f"><!--[-->`;
335
+ $$payload2.out += `<div class="runner-cards svelte-bpb2i4"><!--[-->`;
189
336
  for (let $$index_3 = 0, $$length = each_array_2.length; $$index_3 < $$length; $$index_3++) {
190
337
  let r = each_array_2[$$index_3];
191
338
  const ping = pingResults[r.id];
192
339
  if (editingId === r.id) {
193
340
  $$payload2.out += "<!--[-->";
194
341
  const each_array_3 = ensure_array_like(BROWSERS);
195
- $$payload2.out += `<div class="runner-card editing svelte-9l533f"><div class="runner-form-fields svelte-9l533f"><div class="field"><label class="field-label svelte-9l533f"${attr("for", `edit-name-${stringify(r.id)}`)}>Name</label> <input${attr("id", `edit-name-${stringify(r.id)}`)} type="text" class="field-input"${attr("value", editForm.name)} placeholder="staging-node"></div> <div class="field"><label class="field-label svelte-9l533f"${attr("for", `edit-url-${stringify(r.id)}`)}>URL <span class="field-hint svelte-9l533f">Use <code>host.docker.internal</code> for local nodes</span></label> <input${attr("id", `edit-url-${stringify(r.id)}`)} type="url" class="field-input"${attr("value", editForm.url)} placeholder="http://host.docker.internal:3002"></div> <div class="field"><label class="field-label svelte-9l533f"${attr("for", `edit-token-${stringify(r.id)}`)}>Token</label> <input${attr("id", `edit-token-${stringify(r.id)}`)} type="text" class="field-input"${attr("value", editForm.token)} placeholder="secret-token" spellcheck="false" autocomplete="off"></div> <div class="field"><label class="field-label svelte-9l533f"${attr("for", `edit-browser-${stringify(r.id)}`)}>Browser</label> <select${attr("id", `edit-browser-${stringify(r.id)}`)} class="field-input"><!--[-->`;
342
+ $$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"><!--[-->`;
196
343
  for (let $$index_2 = 0, $$length2 = each_array_3.length; $$index_2 < $$length2; $$index_2++) {
197
344
  let b = each_array_3[$$index_2];
198
345
  $$payload2.out += `<option${attr("value", b.id)}>${escape_html(b.label)}</option>`;
@@ -201,11 +348,11 @@ function _page($$payload, $$props) {
201
348
  {
202
349
  $$payload2.out += "<!--[!-->";
203
350
  }
204
- $$payload2.out += `<!--]--> <div class="runner-form-actions svelte-9l533f">`;
351
+ $$payload2.out += `<!--]--> <div class="runner-form-actions svelte-bpb2i4">`;
205
352
  Button($$payload2, {
206
353
  disabled: editFormSaving,
207
354
  children: ($$payload3) => {
208
- $$payload3.out += `<!---->${escape_html("Save")}`;
355
+ $$payload3.out += `<!---->${escape_html(editRunnerSubmitLabel())}`;
209
356
  },
210
357
  $$slots: { default: true }
211
358
  });
@@ -214,40 +361,60 @@ function _page($$payload, $$props) {
214
361
  variant: "ghost",
215
362
  disabled: editFormSaving,
216
363
  children: ($$payload3) => {
217
- $$payload3.out += `<!---->Cancel`;
364
+ $$payload3.out += `<!---->${escape_html(CANCEL_LABEL)}`;
218
365
  },
219
366
  $$slots: { default: true }
220
367
  });
221
368
  $$payload2.out += `<!----></div></div>`;
222
369
  } else {
223
370
  $$payload2.out += "<!--[!-->";
224
- $$payload2.out += `<div class="runner-card svelte-9l533f"><div class="runner-card-header svelte-9l533f"><svg class="runner-card-icon svelte-9l533f" 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-9l533f">${escape_html(r.name)}</span> <span class="runner-browser-pill svelte-9l533f">${escape_html(r.browser)}</span> `;
371
+ $$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> `;
225
372
  if (ping && !ping.loading) {
226
373
  $$payload2.out += "<!--[-->";
227
374
  if (ping.ok) {
228
375
  $$payload2.out += "<!--[-->";
229
- $$payload2.out += `<span class="ping-badge ok svelte-9l533f">${escape_html(ping.latency)}ms</span>`;
376
+ $$payload2.out += `<span class="ping-badge ok svelte-bpb2i4">${escape_html(ping.latency)}ms</span>`;
230
377
  } else {
231
378
  $$payload2.out += "<!--[!-->";
232
- $$payload2.out += `<span class="ping-badge fail svelte-9l533f"${attr("title", ping.error)}>unreachable</span>`;
379
+ $$payload2.out += `<span class="ping-badge fail svelte-bpb2i4"${attr("title", ping.error)}>${escape_html(RUNNER_UNREACHABLE_LABEL)}</span>`;
233
380
  }
234
381
  $$payload2.out += `<!--]-->`;
235
382
  } else {
236
383
  $$payload2.out += "<!--[!-->";
237
384
  if (ping?.loading) {
238
385
  $$payload2.out += "<!--[-->";
239
- $$payload2.out += `<span class="ping-badge pinging svelte-9l533f">pinging…</span>`;
386
+ $$payload2.out += `<span class="ping-badge pinging svelte-bpb2i4">${escape_html(RUNNER_PINGING_LABEL)}</span>`;
240
387
  } else {
241
388
  $$payload2.out += "<!--[!-->";
242
389
  }
243
390
  $$payload2.out += `<!--]-->`;
244
391
  }
245
- $$payload2.out += `<!--]--></div> <p class="runner-card-url svelte-9l533f">${escape_html(r.url)}</p> <div class="runner-card-actions svelte-9l533f">`;
392
+ $$payload2.out += `<!--]--></div> <p class="runner-card-url svelte-bpb2i4">${escape_html(r.url)}</p> <div class="runner-card-actions svelte-bpb2i4">`;
393
+ Button($$payload2, {
394
+ variant: "ghost",
395
+ size: "sm",
396
+ children: ($$payload3) => {
397
+ $$payload3.out += `<!---->${escape_html(EDIT_LABEL)}`;
398
+ },
399
+ $$slots: { default: true }
400
+ });
401
+ $$payload2.out += `<!----> `;
402
+ Button($$payload2, {
403
+ variant: "ghost",
404
+ size: "sm",
405
+ disabled: restartingId === r.id,
406
+ children: ($$payload3) => {
407
+ $$payload3.out += `<!---->${escape_html(restartRunnerLabel(restartingId === r.id))}`;
408
+ },
409
+ $$slots: { default: true }
410
+ });
411
+ $$payload2.out += `<!----> `;
246
412
  Button($$payload2, {
247
413
  variant: "ghost",
248
414
  size: "sm",
415
+ disabled: stoppingId === r.id,
249
416
  children: ($$payload3) => {
250
- $$payload3.out += `<!---->Edit`;
417
+ $$payload3.out += `<!---->${escape_html(stopRunnerLabel(stoppingId === r.id))}`;
251
418
  },
252
419
  $$slots: { default: true }
253
420
  });
@@ -256,7 +423,7 @@ function _page($$payload, $$props) {
256
423
  variant: "danger",
257
424
  size: "sm",
258
425
  children: ($$payload3) => {
259
- $$payload3.out += `<!---->Remove`;
426
+ $$payload3.out += `<!---->${escape_html(REMOVE_LABEL)}`;
260
427
  },
261
428
  $$slots: { default: true }
262
429
  });
@@ -271,11 +438,11 @@ function _page($$payload, $$props) {
271
438
  $$payload2.out += `<!--]--> `;
272
439
  {
273
440
  $$payload2.out += "<!--[!-->";
274
- $$payload2.out += `<div class="card-footer svelte-9l533f">`;
441
+ $$payload2.out += `<div class="card-footer svelte-bpb2i4">`;
275
442
  Button($$payload2, {
276
443
  variant: "ghost",
277
444
  children: ($$payload3) => {
278
- $$payload3.out += `<!---->+ Add Runner`;
445
+ $$payload3.out += `<!---->${escape_html(OPEN_ADD_RUNNER_LABEL)}`;
279
446
  },
280
447
  $$slots: { default: true }
281
448
  });
@@ -286,20 +453,20 @@ function _page($$payload, $$props) {
286
453
  $$payload2.out += "<!--[!-->";
287
454
  if (section === "repository") {
288
455
  $$payload2.out += "<!--[-->";
289
- $$payload2.out += `<div class="content-section svelte-9l533f"><div class="content-header svelte-9l533f"><h2 class="svelte-9l533f">Test Repository</h2> <p class="content-desc svelte-9l533f">Configure ID prefixes for test suites and cases.</p></div> <div class="card settings-card svelte-9l533f"><div class="field-row svelte-9l533f"><div class="field"><label class="field-label svelte-9l533f" for="tc-prefix">Test Case prefix</label> <input id="tc-prefix" type="text" class="field-input mono svelte-9l533f"${attr("value", prefixes.testCasePrefix)} placeholder="TC" maxlength="10"></div> <div class="field"><label class="field-label svelte-9l533f" for="ts-prefix">Test Suite prefix</label> <input id="ts-prefix" type="text" class="field-input mono svelte-9l533f"${attr("value", prefixes.testSuitePrefix)} placeholder="TS" maxlength="10"></div></div> <p class="content-desc svelte-9l533f">Examples: <code class="code-sample svelte-9l533f">${escape_html(prefixes.testCasePrefix)}-001</code>, <code class="code-sample svelte-9l533f">${escape_html(prefixes.testSuitePrefix)}-001</code></p> <div class="card-footer svelte-9l533f">`;
456
+ $$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">`;
290
457
  Button($$payload2, {
291
458
  disabled: prefixesSaving,
292
459
  children: ($$payload3) => {
293
- $$payload3.out += `<!---->${escape_html("Save Prefixes")}`;
460
+ $$payload3.out += `<!---->${escape_html(savePrefixesLabel())}`;
294
461
  },
295
462
  $$slots: { default: true }
296
463
  });
297
- $$payload2.out += `<!----></div></div> <div class="content-header svelte-9l533f" style="margin-top: 1rem"><h2 class="svelte-9l533f">Migrate IDs</h2> <p class="content-desc svelte-9l533f">Rename all existing test IDs to use a new prefix. Cucumber tags in code are <strong>not</strong> affected — you manage those separately.</p></div> <div class="card settings-card svelte-9l533f"><div class="field-row svelte-9l533f"><div class="field"><label class="field-label svelte-9l533f" for="mig-tc">New case prefix</label> <input id="mig-tc" type="text" class="field-input mono svelte-9l533f"${attr("value", migrateForm.testCasePrefix)}${attr("placeholder", prefixes.testCasePrefix)} maxlength="10"></div> <div class="field"><label class="field-label svelte-9l533f" for="mig-ts">New suite prefix</label> <input id="mig-ts" type="text" class="field-input mono svelte-9l533f"${attr("value", migrateForm.testSuitePrefix)}${attr("placeholder", prefixes.testSuitePrefix)} maxlength="10"></div></div> <div class="card-footer svelte-9l533f">`;
464
+ $$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">`;
298
465
  Button($$payload2, {
299
466
  variant: "ghost",
300
467
  disabled: migrating,
301
468
  children: ($$payload3) => {
302
- $$payload3.out += `<!---->${escape_html("Run Migration")}`;
469
+ $$payload3.out += `<!---->${escape_html(runMigrationLabel())}`;
303
470
  },
304
471
  $$slots: { default: true }
305
472
  });
@@ -308,30 +475,27 @@ function _page($$payload, $$props) {
308
475
  $$payload2.out += "<!--[!-->";
309
476
  if (section === "integrations") {
310
477
  $$payload2.out += "<!--[-->";
311
- $$payload2.out += `<div class="content-section svelte-9l533f"><div class="content-header svelte-9l533f"><h2 class="svelte-9l533f">Integrations</h2> <p class="content-desc svelte-9l533f">Connect Discord and Slack to receive run notifications with pass/fail results and report
312
- links.</p></div> <div class="card settings-card svelte-9l533f"><p class="card-title">Webhooks</p> <div class="field"><label class="field-label svelte-9l533f" for="discord-url"><span>Discord Webhook URL</span> <span class="field-hint svelte-9l533f">Leave blank to disable Discord notifications</span></label> <input id="discord-url" type="url" class="field-input"${attr("value", integrations.discordWebhookUrl)} placeholder="https://discord.com/api/webhooks/…"></div> <div class="field"><label class="field-label svelte-9l533f" for="slack-url"><span>Slack Webhook URL</span> <span class="field-hint svelte-9l533f">Leave blank to disable Slack notifications</span></label> <input id="slack-url" type="url" class="field-input"${attr("value", integrations.slackWebhookUrl)} placeholder="https://hooks.slack.com/services/…"></div> <div class="field"><label class="field-label svelte-9l533f" for="public-url"><span>Public URL</span> <span class="field-hint svelte-9l533f">Base URL of this Plum instance, used to link reports in notifications</span></label> <input id="public-url" type="url" class="field-input"${attr("value", integrations.notifyPublicUrl)} placeholder="https://plum.yourcompany.com"></div> `;
478
+ $$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> `;
313
479
  Button($$payload2, {
314
480
  disabled: integrationsSaving,
315
481
  children: ($$payload3) => {
316
- $$payload3.out += `<!---->${escape_html("Save Integrations")}`;
482
+ $$payload3.out += `<!---->${escape_html(saveIntegrationsLabel())}`;
317
483
  },
318
484
  $$slots: { default: true }
319
485
  });
320
- $$payload2.out += `<!----></div> <div class="card settings-card svelte-9l533f"><p class="card-title">CI / External Triggers</p> <p class="content-desc svelte-9l533f">Trigger a Plum run from GitHub Actions (e.g. on a pull request, against its preview
321
- deployment) or any other external script by calling <code class="code-sample svelte-9l533f">POST ${escape_html(API_BASE)}/trigger</code> with an <code class="code-sample svelte-9l533f">Authorization: ApiKey …</code> header. Generate a key on the <button class="link-btn svelte-9l533f">MCP tab</button> and store it as a repo secret — never commit it directly. Runs triggered this way show up
322
- in Reports tagged `;
486
+ $$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)} `;
323
487
  Badge($$payload2, {
324
488
  variant: "external",
325
489
  children: ($$payload3) => {
326
- $$payload3.out += `<!---->External`;
490
+ $$payload3.out += `<!---->${escape_html(EXTERNAL_BADGE_LABEL)}`;
327
491
  },
328
492
  $$slots: { default: true }
329
493
  });
330
- $$payload2.out += `<!---->.</p> <pre class="mcp-snippet svelte-9l533f">${escape_html(ciWorkflowSnippet)}</pre> <div class="card-footer svelte-9l533f">`;
494
+ $$payload2.out += `<!---->.</p> <pre class="mcp-snippet svelte-bpb2i4">${escape_html(ciWorkflowSnippet)}</pre> <div class="card-footer svelte-bpb2i4">`;
331
495
  Button($$payload2, {
332
496
  variant: "ghost",
333
497
  children: ($$payload3) => {
334
- $$payload3.out += `<!---->${escape_html("Copy Workflow Step")}`;
498
+ $$payload3.out += `<!---->${escape_html(copyCiSnippetLabel())}`;
335
499
  },
336
500
  $$slots: { default: true }
337
501
  });
@@ -340,15 +504,14 @@ function _page($$payload, $$props) {
340
504
  $$payload2.out += "<!--[!-->";
341
505
  if (section === "mcp") {
342
506
  $$payload2.out += "<!--[-->";
343
- $$payload2.out += `<div class="content-section svelte-9l533f"><div class="content-header svelte-9l533f"><h2 class="svelte-9l533f">MCP Integration</h2> <p class="content-desc svelte-9l533f">Generate an API key for any MCP-compatible AI client — Claude, Cursor, Windsurf, and
344
- others.</p></div> <div class="card settings-card svelte-9l533f"><p class="card-title">API Key</p> `;
507
+ $$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> `;
345
508
  {
346
509
  $$payload2.out += "<!--[-->";
347
- $$payload2.out += `<p class="content-desc svelte-9l533f">No key generated yet.</p> <div class="card-footer svelte-9l533f">`;
510
+ $$payload2.out += `<p class="content-desc svelte-bpb2i4">${escape_html(NO_KEY_GENERATED_MESSAGE)}</p> <div class="card-footer svelte-bpb2i4">`;
348
511
  Button($$payload2, {
349
512
  disabled: mcpGenerating,
350
513
  children: ($$payload3) => {
351
- $$payload3.out += `<!---->${escape_html("Generate Key")}`;
514
+ $$payload3.out += `<!---->${escape_html(generateKeyLabel())}`;
352
515
  },
353
516
  $$slots: { default: true }
354
517
  });
@@ -363,36 +526,36 @@ function _page($$payload, $$props) {
363
526
  $$payload2.out += "<!--[!-->";
364
527
  if (section === "account") {
365
528
  $$payload2.out += "<!--[-->";
366
- $$payload2.out += `<div class="content-section svelte-9l533f"><div class="content-header svelte-9l533f"><h2 class="svelte-9l533f">Account</h2> <p class="content-desc svelte-9l533f">Manage your profile, credentials and session.</p></div> <div class="card settings-card svelte-9l533f"><p class="card-title">Profile</p> <div class="field"><label class="field-label svelte-9l533f" for="profile-name">Name</label> <input id="profile-name" type="text" class="field-input"${attr("value", profileForm.name)}></div> <div class="field"><label class="field-label svelte-9l533f" for="profile-email">Email</label> <input id="profile-email" type="email" class="field-input"${attr("value", profileForm.email)}></div> `;
529
+ $$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> `;
367
530
  {
368
531
  $$payload2.out += "<!--[!-->";
369
532
  }
370
- $$payload2.out += `<!--]--> <div class="card-footer svelte-9l533f">`;
533
+ $$payload2.out += `<!--]--> <div class="card-footer svelte-bpb2i4">`;
371
534
  Button($$payload2, {
372
535
  disabled: true,
373
536
  children: ($$payload3) => {
374
- $$payload3.out += `<!---->${escape_html("Save Profile")}`;
537
+ $$payload3.out += `<!---->${escape_html(saveProfileLabel())}`;
375
538
  },
376
539
  $$slots: { default: true }
377
540
  });
378
- $$payload2.out += `<!----></div></div> <div class="card settings-card svelte-9l533f"><p class="card-title">Change password</p> <div class="field"><label class="field-label svelte-9l533f" for="pw-current">Current password</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-9l533f" for="pw-new">New password</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-9l533f" for="pw-confirm">Confirm new password</label> <input id="pw-confirm" type="password" class="field-input"${attr("value", pwForm.confirmPassword)} autocomplete="new-password"></div> `;
541
+ $$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> `;
379
542
  {
380
543
  $$payload2.out += "<!--[!-->";
381
544
  }
382
- $$payload2.out += `<!--]--> <div class="card-footer svelte-9l533f">`;
545
+ $$payload2.out += `<!--]--> <div class="card-footer svelte-bpb2i4">`;
383
546
  Button($$payload2, {
384
547
  disabled: true,
385
548
  children: ($$payload3) => {
386
- $$payload3.out += `<!---->${escape_html("Change Password")}`;
549
+ $$payload3.out += `<!---->${escape_html(changePasswordLabel())}`;
387
550
  },
388
551
  $$slots: { default: true }
389
552
  });
390
- $$payload2.out += `<!----></div></div> <div class="card settings-card svelte-9l533f"><div class="card-footer svelte-9l533f">`;
553
+ $$payload2.out += `<!----></div></div> <div class="card settings-card svelte-bpb2i4"><div class="card-footer svelte-bpb2i4">`;
391
554
  Button($$payload2, {
392
555
  variant: "danger",
393
556
  size: "sm",
394
557
  children: ($$payload3) => {
395
- $$payload3.out += `<!---->Sign out`;
558
+ $$payload3.out += `<!---->${escape_html(SIGN_OUT_LABEL)}`;
396
559
  },
397
560
  $$slots: { default: true }
398
561
  });
@@ -401,10 +564,10 @@ function _page($$payload, $$props) {
401
564
  $$payload2.out += "<!--[!-->";
402
565
  if (section === "users") {
403
566
  $$payload2.out += "<!--[-->";
404
- $$payload2.out += `<div class="content-section svelte-9l533f"><div class="content-header svelte-9l533f"><h2 class="svelte-9l533f">Users</h2> <p class="content-desc svelte-9l533f">Add and manage who can access Plum.</p></div> `;
567
+ $$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> `;
405
568
  ConfirmModal($$payload2, {
406
- title: "Remove User",
407
- confirmLabel: "Remove",
569
+ title: REMOVE_USER_MODAL_TITLE,
570
+ confirmLabel: REMOVE_USER_LABEL,
408
571
  get open() {
409
572
  return confirmDeleteUserOpen;
410
573
  },
@@ -420,15 +583,15 @@ function _page($$payload, $$props) {
420
583
  },
421
584
  $$slots: { default: true }
422
585
  });
423
- $$payload2.out += `<!----> <div class="card settings-card svelte-9l533f"><p class="card-title">Add User</p> <div class="field-row svelte-9l533f"><div class="field"><label class="field-label svelte-9l533f" for="u-name">Name</label> <input id="u-name" type="text" class="field-input"${attr("value", userForm.name)} placeholder="Jane Smith"></div> <div class="field"><label class="field-label svelte-9l533f" for="u-email">Email</label> <input id="u-email" type="email" class="field-input"${attr("value", userForm.email)} placeholder="jane@example.com"></div></div> <div class="field-row svelte-9l533f"><div class="field"><label class="field-label svelte-9l533f" for="u-pw">Password</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-9l533f" for="u-role">Role</label> <select id="u-role" class="field-input"><option value="user">User</option><option value="admin">Admin</option></select></div></div> `;
586
+ $$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> `;
424
587
  {
425
588
  $$payload2.out += "<!--[!-->";
426
589
  }
427
- $$payload2.out += `<!--]--> <div class="card-footer svelte-9l533f">`;
590
+ $$payload2.out += `<!--]--> <div class="card-footer svelte-bpb2i4">`;
428
591
  Button($$payload2, {
429
592
  disabled: userFormSaving,
430
593
  children: ($$payload3) => {
431
- $$payload3.out += `<!---->${escape_html("Add User")}`;
594
+ $$payload3.out += `<!---->${escape_html(addUserLabel())}`;
432
595
  },
433
596
  $$slots: { default: true }
434
597
  });
@@ -436,16 +599,16 @@ function _page($$payload, $$props) {
436
599
  if (allUsers.length > 0) {
437
600
  $$payload2.out += "<!--[-->";
438
601
  const each_array_5 = ensure_array_like(allUsers);
439
- $$payload2.out += `<div class="users-table svelte-9l533f"><!--[-->`;
602
+ $$payload2.out += `<div class="users-table svelte-bpb2i4"><!--[-->`;
440
603
  for (let $$index_5 = 0, $$length = each_array_5.length; $$index_5 < $$length; $$index_5++) {
441
604
  let u = each_array_5[$$index_5];
442
- $$payload2.out += `<div class="user-row svelte-9l533f"><div class="user-info svelte-9l533f"><span class="user-name svelte-9l533f">${escape_html(u.name)}</span> <span class="user-email svelte-9l533f">${escape_html(u.email)}</span></div> <span${attr("class", `role-chip ${stringify(u.role)} svelte-9l533f`)}>${escape_html(u.role)}</span> `;
605
+ $$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> `;
443
606
  if (u.id !== store_get($$store_subs ??= {}, "$auth", auth).user?.id) {
444
607
  $$payload2.out += "<!--[-->";
445
- $$payload2.out += `<button class="icon-btn danger svelte-9l533f" title="Remove user"><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>`;
608
+ $$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>`;
446
609
  } else {
447
610
  $$payload2.out += "<!--[!-->";
448
- $$payload2.out += `<span class="you-chip svelte-9l533f">you</span>`;
611
+ $$payload2.out += `<span class="you-chip svelte-bpb2i4">${escape_html(YOU_CHIP_LABEL)}</span>`;
449
612
  }
450
613
  $$payload2.out += `<!--]--></div>`;
451
614
  }
@@ -458,32 +621,28 @@ function _page($$payload, $$props) {
458
621
  $$payload2.out += "<!--[!-->";
459
622
  if (section === "backup") {
460
623
  $$payload2.out += "<!--[-->";
461
- $$payload2.out += `<div class="content-section svelte-9l533f"><div class="content-header svelte-9l533f"><h2 class="svelte-9l533f">Backup</h2> <p class="content-desc svelte-9l533f">Export your test cases, schedules, users, and project settings. Automate uploads to any
462
- S3-compatible storage — Cloudflare R2, Backblaze B2, AWS S3, or MinIO.</p></div> <div class="card settings-card svelte-9l533f"><p class="card-title">Manual Backup</p> <div class="backup-row svelte-9l533f"><div class="backup-block svelte-9l533f"><p class="backup-block-title svelte-9l533f">Export</p> <p class="backup-block-desc svelte-9l533f">Downloads a <code class="svelte-9l533f">.json</code> file with all cron jobs, test cases, test runs, users,
463
- runners, and project settings.</p> `;
624
+ $$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> `;
464
625
  Button($$payload2, {
465
626
  disabled: exporting,
466
627
  children: ($$payload3) => {
467
- $$payload3.out += `<!---->${escape_html("Export JSON")}`;
628
+ $$payload3.out += `<!---->${escape_html(exportLabel())}`;
468
629
  },
469
630
  $$slots: { default: true }
470
631
  });
471
- $$payload2.out += `<!----></div> <div class="backup-divider svelte-9l533f"></div> <div class="backup-block svelte-9l533f"><p class="backup-block-title svelte-9l533f">Import</p> <p class="backup-block-desc svelte-9l533f">Restores all data from a previously exported backup. Existing records are
472
- overwritten. Cron jobs are re-scheduled after import.</p> <div class="import-row svelte-9l533f"><label class="file-label svelte-9l533f"><input type="file" accept=".json" class="file-input-hidden svelte-9l533f"> <span class="file-btn svelte-9l533f">${escape_html("Choose file…")}</span></label> `;
632
+ $$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> `;
473
633
  Button($$payload2, {
474
634
  disabled: true,
475
635
  children: ($$payload3) => {
476
- $$payload3.out += `<!---->${escape_html("Import")}`;
636
+ $$payload3.out += `<!---->${escape_html(importLabel())}`;
477
637
  },
478
638
  $$slots: { default: true }
479
639
  });
480
- $$payload2.out += `<!----></div></div></div> <p class="backup-disclaimer svelte-9l533f">Reports are not included in backups. To back up report history, run <code>pg_dump</code> directly on the PostgreSQL volume.</p></div> <div class="card settings-card svelte-9l533f"><p class="card-title">S3 Storage</p> <p class="backup-block-desc svelte-9l533f" style="margin-bottom: 1.25rem;">Works with any S3-compatible provider Cloudflare R2, Backblaze B2, AWS S3, or MinIO.
481
- Leave <strong>Endpoint URL</strong> empty for AWS S3.</p> <div class="field-row svelte-9l533f"><div class="field"><label class="field-label svelte-9l533f" for="s3-endpoint"><span>Endpoint URL</span> <span class="field-hint svelte-9l533f">Leave blank for AWS S3</span></label> <input id="s3-endpoint" type="url" class="field-input"${attr("value", backupConfig.backupS3Endpoint)} placeholder="https://account.r2.cloudflarestorage.com"></div> <div class="field"><label class="field-label svelte-9l533f" for="s3-region"><span>Region</span> <span class="field-hint svelte-9l533f">Use <code>auto</code> for Cloudflare R2</span></label> <input id="s3-region" type="text" class="field-input"${attr("value", backupConfig.backupS3Region)} placeholder="us-east-1"></div></div> <div class="field-row svelte-9l533f"><div class="field"><label class="field-label svelte-9l533f" for="s3-bucket"><span>Bucket</span></label> <input id="s3-bucket" type="text" class="field-input"${attr("value", backupConfig.backupS3Bucket)} placeholder="my-plum-backups"></div> <div class="field"><label class="field-label svelte-9l533f" for="s3-prefix"><span>Path Prefix</span> <span class="field-hint svelte-9l533f">Optional folder inside the bucket</span></label> <input id="s3-prefix" type="text" class="field-input"${attr("value", backupConfig.backupS3Prefix)} placeholder="plum/"></div></div> <div class="field-row svelte-9l533f"><div class="field"><label class="field-label svelte-9l533f" for="s3-access-key"><span>Access Key ID</span></label> <input id="s3-access-key" type="text" class="field-input"${attr("value", backupConfig.backupS3AccessKey)} placeholder="AKIAIOSFODNN7EXAMPLE" autocomplete="off"></div> <div class="field"><label class="field-label svelte-9l533f" for="s3-secret-key"><span>Secret Access Key</span> <span class="field-hint svelte-9l533f">${escape_html("Required")}</span></label> <input id="s3-secret-key" type="password" class="field-input"${attr("value", backupConfig.backupS3SecretKey)}${attr("placeholder", "Enter secret key")} autocomplete="new-password"></div></div> <div class="backup-actions svelte-9l533f">`;
640
+ $$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">`;
482
641
  Button($$payload2, {
483
642
  variant: "ghost",
484
643
  disabled: backupTestingS3,
485
644
  children: ($$payload3) => {
486
- $$payload3.out += `<!---->${escape_html("Test Connection")}`;
645
+ $$payload3.out += `<!---->${escape_html(testConnectionLabel())}`;
487
646
  },
488
647
  $$slots: { default: true }
489
648
  });
@@ -491,7 +650,7 @@ function _page($$payload, $$props) {
491
650
  Button($$payload2, {
492
651
  disabled: backupConfigSaving,
493
652
  children: ($$payload3) => {
494
- $$payload3.out += `<!---->${escape_html("Save S3 Config")}`;
653
+ $$payload3.out += `<!---->${escape_html(saveS3ConfigLabel())}`;
495
654
  },
496
655
  $$slots: { default: true }
497
656
  });
@@ -499,22 +658,22 @@ function _page($$payload, $$props) {
499
658
  {
500
659
  $$payload2.out += "<!--[!-->";
501
660
  }
502
- $$payload2.out += `<!--]--></div> <div${attr("class", `card settings-card svelte-9l533f ${stringify([!s3Configured ? "card-disabled" : ""].filter(Boolean).join(" "))}`)}><p class="card-title">Scheduled Backup</p> `;
661
+ $$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> `;
503
662
  if (!s3Configured) {
504
663
  $$payload2.out += "<!--[-->";
505
- $$payload2.out += `<p class="backup-block-desc svelte-9l533f">Configure S3 storage above to enable scheduled backups.</p>`;
664
+ $$payload2.out += `<p class="backup-block-desc svelte-bpb2i4">${escape_html(CONFIGURE_S3_FIRST_MESSAGE)}</p>`;
506
665
  } else {
507
666
  $$payload2.out += "<!--[!-->";
508
- $$payload2.out += `<div class="field"><label class="field-label backup-toggle-label svelte-9l533f" for="backup-enabled"><span>Enable scheduled backup</span> <button id="backup-enabled"${attr("class", `toggle-btn svelte-9l533f ${stringify([""].filter(Boolean).join(" "))}`)} role="switch"${attr("aria-checked", backupConfig.backupEnabled)}><span class="toggle-thumb svelte-9l533f"></span></button></label></div> <div class="field"><label class="field-label svelte-9l533f" for="backup-cron"><span>Cron Expression</span> <span class="field-hint svelte-9l533f">5-field cron — e.g. <code>0 2 * * *</code> = daily at 2 AM. <a href="https://crontab.guru" target="_blank" rel="noopener noreferrer">Test at crontab.guru ↗</a></span></label> <input id="backup-cron" type="text" class="field-input field-input-mono svelte-9l533f"${attr("value", backupConfig.backupCron)} placeholder="0 2 * * *"></div> `;
667
+ $$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> `;
509
668
  {
510
669
  $$payload2.out += "<!--[!-->";
511
670
  }
512
- $$payload2.out += `<!--]--> <div class="backup-actions svelte-9l533f">`;
671
+ $$payload2.out += `<!--]--> <div class="backup-actions svelte-bpb2i4">`;
513
672
  Button($$payload2, {
514
673
  variant: "ghost",
515
674
  disabled: backupRunningNow,
516
675
  children: ($$payload3) => {
517
- $$payload3.out += `<!---->${escape_html("Upload to S3 Now")}`;
676
+ $$payload3.out += `<!---->${escape_html(uploadS3NowLabel())}`;
518
677
  },
519
678
  $$slots: { default: true }
520
679
  });
@@ -522,7 +681,7 @@ function _page($$payload, $$props) {
522
681
  Button($$payload2, {
523
682
  disabled: backupConfigSaving,
524
683
  children: ($$payload3) => {
525
- $$payload3.out += `<!---->${escape_html("Save Schedule")}`;
684
+ $$payload3.out += `<!---->${escape_html(saveScheduleLabel())}`;
526
685
  },
527
686
  $$slots: { default: true }
528
687
  });