plum-e2e 2.6.9 → 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 (899) hide show
  1. package/CLAUDE.md +17 -2
  2. package/LICENSE +21 -677
  3. package/README.md +1 -1
  4. package/backend/Dockerfile +1 -13
  5. package/backend/app.js +4 -14
  6. package/backend/config/scripts/create-step.mjs +1 -13
  7. package/backend/config/scripts/create-test.mjs +1 -13
  8. package/backend/config/scripts/generate-report.js +5 -15
  9. package/backend/config/scripts/run-tests.js +5 -16
  10. package/backend/constants/defaults.js +8 -0
  11. package/backend/constants/env.js +16 -0
  12. package/backend/constants/jobStatus.js +21 -0
  13. package/backend/constants/socketEvents.js +40 -0
  14. package/backend/constants/triggers.js +6 -14
  15. package/backend/entrypoint.sh +1 -13
  16. package/backend/lib/authHeader.js +16 -0
  17. package/backend/lib/globalRegistry.js +1 -13
  18. package/backend/lib/nodeRegister.js +1 -13
  19. package/backend/lib/reportFilename.js +1 -13
  20. package/backend/lib/retryRunner.js +1 -13
  21. package/backend/lib/runnerProcess.js +5 -16
  22. package/backend/lib/screenshotPoller.js +1 -13
  23. package/backend/lib/serverBootstrap.js +189 -0
  24. package/backend/lib/serverConfig.js +1 -13
  25. package/backend/lib/testChunker.js +1 -13
  26. package/backend/lib/testEnv.js +1 -13
  27. package/backend/mcp/server.js +5 -15
  28. package/backend/middleware/auth.js +4 -14
  29. package/backend/middleware/jwtAuth.js +5 -16
  30. package/backend/middleware/requireAdmin.js +1 -13
  31. package/backend/package.json +3 -3
  32. package/backend/playwright.config.js +1 -13
  33. package/backend/routes/active-runs.routes.js +18 -0
  34. package/backend/routes/auth.routes.js +1 -13
  35. package/backend/routes/backup.routes.js +10 -21
  36. package/backend/routes/cron.routes.js +1 -13
  37. package/backend/routes/node.routes.js +11 -148
  38. package/backend/routes/reports.routes.js +1 -13
  39. package/backend/routes/runners.routes.js +11 -21
  40. package/backend/routes/settings.routes.js +6 -17
  41. package/backend/routes/test-cases.routes.js +1 -13
  42. package/backend/routes/test-runs.routes.js +1 -13
  43. package/backend/routes/test-suites.routes.js +1 -13
  44. package/backend/routes/tests.routes.js +1 -13
  45. package/backend/routes/trigger.routes.js +23 -165
  46. package/backend/routes/users.routes.js +1 -13
  47. package/backend/scripts/manage-runners.mjs +1 -13
  48. package/backend/server.js +34 -151
  49. package/backend/services/activeRunsService.js +55 -0
  50. package/backend/services/backupCronService.js +1 -13
  51. package/backend/services/backupService.js +7 -17
  52. package/backend/services/cronService.js +57 -39
  53. package/backend/services/envService.js +1 -13
  54. package/backend/services/nodeExecutionService.js +140 -0
  55. package/backend/services/notificationService.js +7 -17
  56. package/backend/services/prisma.js +1 -13
  57. package/backend/services/reportService.js +21 -17
  58. package/backend/services/runnerService.js +46 -27
  59. package/backend/services/settingsService.js +19 -19
  60. package/backend/services/testCaseService.js +1 -13
  61. package/backend/services/testRunService.js +1 -13
  62. package/backend/services/testService.js +1 -13
  63. package/backend/services/testSuiteService.js +1 -13
  64. package/backend/services/triggerService.js +246 -0
  65. package/backend/services/userService.js +1 -13
  66. package/backend/websockets/socketHandler.js +99 -48
  67. package/bin/plum.js +1 -13
  68. package/bin/postinstall.js +1 -13
  69. package/bin/scaffold-tests.js +1 -13
  70. package/docker-compose.node.yml +1 -13
  71. package/docker-compose.yml +1 -13
  72. package/frontend/.svelte-kit/adapter-node/.vite/manifest.json +3 -3
  73. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -22
  74. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/Badge.D1SV0Gv7.css +0 -22
  75. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css +0 -22
  76. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/EmptyState.DUDM4P19.css +0 -22
  77. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/Modal.BuaCfdLj.css +0 -22
  78. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/Pagination.DZmi2Po-.css +0 -22
  79. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/Toast.DENwYn3g.css +0 -22
  80. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_layout.BuhMvMUj.css +0 -22
  81. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.0Eln51hV.css +0 -22
  82. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.5IJAEAjc.css +0 -22
  83. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BR3wgXcZ.css +0 -22
  84. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BWAH0Beh.css +0 -22
  85. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BZfe6nWe.css +0 -22
  86. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.Bj_a_5lv.css +0 -22
  87. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BwgOqeMo.css +0 -22
  88. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.CBHi6pzT.css +0 -22
  89. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.CFnbmY-D.css +0 -22
  90. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.DvMkmYA-.css +1 -0
  91. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page._h2o67kg.css +0 -22
  92. package/frontend/.svelte-kit/adapter-node/chunks/BackLink.js +0 -22
  93. package/frontend/.svelte-kit/adapter-node/chunks/Badge.js +1 -23
  94. package/frontend/.svelte-kit/adapter-node/chunks/ConfirmModal.js +1 -23
  95. package/frontend/.svelte-kit/adapter-node/chunks/EmptyState.js +2 -24
  96. package/frontend/.svelte-kit/adapter-node/chunks/Modal.js +0 -22
  97. package/frontend/.svelte-kit/adapter-node/chunks/Toast.js +1 -23
  98. package/frontend/.svelte-kit/adapter-node/chunks/attributes.js +0 -22
  99. package/frontend/.svelte-kit/adapter-node/chunks/auth.js +0 -22
  100. package/frontend/.svelte-kit/adapter-node/chunks/auth2.js +0 -22
  101. package/frontend/.svelte-kit/adapter-node/chunks/client.js +0 -22
  102. package/frontend/.svelte-kit/adapter-node/chunks/common.js +9 -29
  103. package/frontend/.svelte-kit/adapter-node/chunks/constants.js +4 -23
  104. package/frontend/.svelte-kit/adapter-node/chunks/escaping.js +0 -22
  105. package/frontend/.svelte-kit/adapter-node/chunks/exports.js +0 -22
  106. package/frontend/.svelte-kit/adapter-node/chunks/format.js +0 -22
  107. package/frontend/.svelte-kit/adapter-node/chunks/index-server.js +0 -22
  108. package/frontend/.svelte-kit/adapter-node/chunks/index.js +4 -26
  109. package/frontend/.svelte-kit/adapter-node/chunks/index2.js +0 -22
  110. package/frontend/.svelte-kit/adapter-node/chunks/internal.js +1 -23
  111. package/frontend/.svelte-kit/adapter-node/chunks/reports.js +0 -22
  112. package/frontend/.svelte-kit/adapter-node/chunks/reports2.js +0 -22
  113. package/frontend/.svelte-kit/adapter-node/chunks/repository.js +10 -34
  114. package/frontend/.svelte-kit/adapter-node/chunks/runner.js +2 -25
  115. package/frontend/.svelte-kit/adapter-node/chunks/stores.js +0 -22
  116. package/frontend/.svelte-kit/adapter-node/chunks/theme.js +0 -22
  117. package/frontend/.svelte-kit/adapter-node/entries/fallbacks/error.svelte.js +0 -22
  118. package/frontend/.svelte-kit/adapter-node/entries/pages/_layout.js +0 -22
  119. package/frontend/.svelte-kit/adapter-node/entries/pages/_layout.svelte.js +0 -22
  120. package/frontend/.svelte-kit/adapter-node/entries/pages/_page.svelte.js +114 -103
  121. package/frontend/.svelte-kit/adapter-node/entries/pages/login/_page.svelte.js +1 -23
  122. package/frontend/.svelte-kit/adapter-node/entries/pages/reports/_id_/_page.svelte.js +1 -23
  123. package/frontend/.svelte-kit/adapter-node/entries/pages/reports/_page.svelte.js +1 -23
  124. package/frontend/.svelte-kit/adapter-node/entries/pages/reports/live/_page.svelte.js +1 -23
  125. package/frontend/.svelte-kit/adapter-node/entries/pages/scheduled-tests/_page.svelte.js +1 -23
  126. package/frontend/.svelte-kit/adapter-node/entries/pages/settings/_page.svelte.js +2 -24
  127. package/frontend/.svelte-kit/adapter-node/entries/pages/setup/_page.svelte.js +1 -23
  128. package/frontend/.svelte-kit/adapter-node/entries/pages/test-repository/_page.svelte.js +3 -25
  129. package/frontend/.svelte-kit/adapter-node/entries/pages/test-repository/runs/_id_/_page.svelte.js +3 -25
  130. package/frontend/.svelte-kit/adapter-node/entries/pages/test-repository/suites/_id_/_page.svelte.js +3 -25
  131. package/frontend/.svelte-kit/adapter-node/index.js +0 -22
  132. package/frontend/.svelte-kit/adapter-node/internal.js +0 -22
  133. package/frontend/.svelte-kit/adapter-node/manifest-full.js +1 -23
  134. package/frontend/.svelte-kit/adapter-node/manifest.js +1 -23
  135. package/frontend/.svelte-kit/adapter-node/nodes/0.js +1 -23
  136. package/frontend/.svelte-kit/adapter-node/nodes/1.js +1 -23
  137. package/frontend/.svelte-kit/adapter-node/nodes/10.js +1 -23
  138. package/frontend/.svelte-kit/adapter-node/nodes/11.js +1 -23
  139. package/frontend/.svelte-kit/adapter-node/nodes/12.js +1 -23
  140. package/frontend/.svelte-kit/adapter-node/nodes/2.js +2 -24
  141. package/frontend/.svelte-kit/adapter-node/nodes/3.js +1 -23
  142. package/frontend/.svelte-kit/adapter-node/nodes/4.js +1 -23
  143. package/frontend/.svelte-kit/adapter-node/nodes/5.js +1 -23
  144. package/frontend/.svelte-kit/adapter-node/nodes/6.js +1 -23
  145. package/frontend/.svelte-kit/adapter-node/nodes/7.js +1 -23
  146. package/frontend/.svelte-kit/adapter-node/nodes/8.js +1 -23
  147. package/frontend/.svelte-kit/adapter-node/nodes/9.js +1 -23
  148. package/frontend/.svelte-kit/ambient.d.ts +2 -22
  149. package/frontend/.svelte-kit/generated/client/app.js +0 -22
  150. package/frontend/.svelte-kit/generated/client/matchers.js +0 -22
  151. package/frontend/.svelte-kit/generated/client/nodes/0.js +0 -22
  152. package/frontend/.svelte-kit/generated/client/nodes/1.js +0 -22
  153. package/frontend/.svelte-kit/generated/client/nodes/10.js +0 -22
  154. package/frontend/.svelte-kit/generated/client/nodes/11.js +0 -22
  155. package/frontend/.svelte-kit/generated/client/nodes/12.js +0 -22
  156. package/frontend/.svelte-kit/generated/client/nodes/2.js +0 -22
  157. package/frontend/.svelte-kit/generated/client/nodes/3.js +0 -22
  158. package/frontend/.svelte-kit/generated/client/nodes/4.js +0 -22
  159. package/frontend/.svelte-kit/generated/client/nodes/5.js +0 -22
  160. package/frontend/.svelte-kit/generated/client/nodes/6.js +0 -22
  161. package/frontend/.svelte-kit/generated/client/nodes/7.js +0 -22
  162. package/frontend/.svelte-kit/generated/client/nodes/8.js +0 -22
  163. package/frontend/.svelte-kit/generated/client/nodes/9.js +0 -22
  164. package/frontend/.svelte-kit/generated/client-optimized/app.js +0 -22
  165. package/frontend/.svelte-kit/generated/client-optimized/matchers.js +0 -22
  166. package/frontend/.svelte-kit/generated/client-optimized/nodes/0.js +0 -22
  167. package/frontend/.svelte-kit/generated/client-optimized/nodes/1.js +0 -22
  168. package/frontend/.svelte-kit/generated/client-optimized/nodes/10.js +0 -22
  169. package/frontend/.svelte-kit/generated/client-optimized/nodes/11.js +0 -22
  170. package/frontend/.svelte-kit/generated/client-optimized/nodes/12.js +0 -22
  171. package/frontend/.svelte-kit/generated/client-optimized/nodes/2.js +0 -22
  172. package/frontend/.svelte-kit/generated/client-optimized/nodes/3.js +0 -22
  173. package/frontend/.svelte-kit/generated/client-optimized/nodes/4.js +0 -22
  174. package/frontend/.svelte-kit/generated/client-optimized/nodes/5.js +0 -22
  175. package/frontend/.svelte-kit/generated/client-optimized/nodes/6.js +0 -22
  176. package/frontend/.svelte-kit/generated/client-optimized/nodes/7.js +0 -22
  177. package/frontend/.svelte-kit/generated/client-optimized/nodes/8.js +0 -22
  178. package/frontend/.svelte-kit/generated/client-optimized/nodes/9.js +0 -22
  179. package/frontend/.svelte-kit/generated/root.js +0 -22
  180. package/frontend/.svelte-kit/generated/root.svelte +0 -22
  181. package/frontend/.svelte-kit/generated/server/internal.js +1 -23
  182. package/frontend/.svelte-kit/non-ambient.d.ts +0 -22
  183. package/frontend/.svelte-kit/output/client/.vite/manifest.json +225 -224
  184. package/frontend/.svelte-kit/output/client/_app/immutable/assets/0.BhSG-jZH.css +0 -22
  185. package/frontend/.svelte-kit/output/client/_app/immutable/assets/10.CdaQUS6U.css +0 -22
  186. package/frontend/.svelte-kit/output/client/_app/immutable/assets/11.BWAH0Beh.css +0 -22
  187. package/frontend/.svelte-kit/output/client/_app/immutable/assets/12.Bj_a_5lv.css +0 -22
  188. package/frontend/.svelte-kit/output/client/_app/immutable/assets/2.DvMkmYA-.css +1 -0
  189. package/frontend/.svelte-kit/output/client/_app/immutable/assets/3.BR3wgXcZ.css +0 -22
  190. package/frontend/.svelte-kit/output/client/_app/immutable/assets/4.0Eln51hV.css +0 -22
  191. package/frontend/.svelte-kit/output/client/_app/immutable/assets/5.DFV9OgAu.css +0 -22
  192. package/frontend/.svelte-kit/output/client/_app/immutable/assets/6.CFnbmY-D.css +0 -22
  193. package/frontend/.svelte-kit/output/client/_app/immutable/assets/7.CBHi6pzT.css +0 -22
  194. package/frontend/.svelte-kit/output/client/_app/immutable/assets/8.BwgOqeMo.css +0 -22
  195. package/frontend/.svelte-kit/output/client/_app/immutable/assets/9._h2o67kg.css +0 -22
  196. package/frontend/.svelte-kit/output/client/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -22
  197. package/frontend/.svelte-kit/output/client/_app/immutable/assets/Badge.D1SV0Gv7.css +0 -22
  198. package/frontend/.svelte-kit/output/client/_app/immutable/assets/Button.FOWXxvc7.css +0 -22
  199. package/frontend/.svelte-kit/output/client/_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css +0 -22
  200. package/frontend/.svelte-kit/output/client/_app/immutable/assets/EmptyState.DUDM4P19.css +0 -22
  201. package/frontend/.svelte-kit/output/client/_app/immutable/assets/Modal.BZpm0HP8.css +0 -22
  202. package/frontend/.svelte-kit/output/client/_app/immutable/assets/Modal.BuaCfdLj.css +0 -22
  203. package/frontend/.svelte-kit/output/client/_app/immutable/assets/Pagination.DZmi2Po-.css +0 -22
  204. package/frontend/.svelte-kit/output/client/_app/immutable/assets/Toast.DENwYn3g.css +0 -22
  205. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_layout.BuhMvMUj.css +0 -22
  206. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.0Eln51hV.css +0 -22
  207. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.5IJAEAjc.css +0 -22
  208. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BR3wgXcZ.css +0 -22
  209. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BWAH0Beh.css +0 -22
  210. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BZfe6nWe.css +0 -22
  211. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.Bj_a_5lv.css +0 -22
  212. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BwgOqeMo.css +0 -22
  213. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.CBHi6pzT.css +0 -22
  214. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.CFnbmY-D.css +0 -22
  215. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.DvMkmYA-.css +1 -0
  216. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page._h2o67kg.css +0 -22
  217. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/2zMvi6fR.js +0 -22
  218. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{D2cvzNT9.js → 3InFPLvE.js} +1 -23
  219. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BAACMRH5.js +0 -22
  220. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BAMUGSh7.js +1 -0
  221. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BKuh57WU.js +1 -0
  222. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{DkNBSlo2.js → BUwxRmHf.js} +1 -23
  223. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Bfc47y5P.js +0 -22
  224. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{DYlaQsvN.js → BmZ9upwL.js} +1 -23
  225. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/C1Vid6wz.js +0 -22
  226. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/C8OURRSs.js +0 -22
  227. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CGeZlCaI.js +1 -0
  228. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CKDtmZUQ.js +0 -22
  229. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CMBQQ9RZ.js +0 -22
  230. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{BjUpWNbl.js → CMEtqUfQ.js} +1 -23
  231. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CNdcuGR0.js +0 -22
  232. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CUC98kMZ.js +1 -0
  233. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CgnwuKKO.js +0 -22
  234. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{B98sHkeB.js → Co3xKhEp.js} +1 -23
  235. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CuqnZUex.js +0 -22
  236. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{DlNYZJ7K.js → CzlPaHY9.js} +1 -23
  237. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DCgHuuvs.js +0 -22
  238. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DHM6H-es.js +2 -0
  239. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{3IV-uqHa.js → DMZwI8Cj.js} +1 -23
  240. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DMyTUV-Y.js +3 -0
  241. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{D2gYTmAA.js → DSLBMEpr.js} +1 -23
  242. package/frontend/{build/client/_app/immutable/chunks/DDblTLLE.js → .svelte-kit/output/client/_app/immutable/chunks/DbgD7JLa.js} +1 -23
  243. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Dlnxgs49.js +0 -22
  244. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/TOCyHP97.js +0 -22
  245. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/nURnIknV.js +1 -0
  246. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/t-La0hgu.js +0 -22
  247. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/w0D4Uzlq.js +0 -22
  248. package/frontend/.svelte-kit/output/client/_app/immutable/entry/{app.BCWbw5zZ.js → app.BkBD0hgA.js} +2 -24
  249. package/frontend/.svelte-kit/output/client/_app/immutable/entry/start.BxeX1Uxs.js +1 -0
  250. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/0.ChjDHxSJ.js +6 -0
  251. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/1.DBSWa36f.js +1 -0
  252. package/frontend/{build/client/_app/immutable/nodes/10.Bn4Ma-MU.js → .svelte-kit/output/client/_app/immutable/nodes/10.DEbnxfND.js} +1 -23
  253. package/frontend/{build/client/_app/immutable/nodes/11.BacEu7sW.js → .svelte-kit/output/client/_app/immutable/nodes/11.O4cjXCg4.js} +1 -23
  254. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/12.BWQdeRdX.js +1 -0
  255. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/2.BnHalSCi.js +1 -0
  256. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{3.DHx0kho3.js → 3._S1vrLVF.js} +1 -23
  257. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{4.CnaMiirx.js → 4.D-YT_JJe.js} +1 -23
  258. package/frontend/{build/client/_app/immutable/nodes/5.B6m-zTVe.js → .svelte-kit/output/client/_app/immutable/nodes/5.BiFBiWcW.js} +1 -23
  259. package/frontend/{build/client/_app/immutable/nodes/6.BPDag1zv.js → .svelte-kit/output/client/_app/immutable/nodes/6.BNS-W0R_.js} +1 -23
  260. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{7.D7LwxSvT.js → 7.C-pKvVZy.js} +1 -23
  261. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{8.CCkNX20G.js → 8.BEUdazrw.js} +1 -23
  262. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{9.HDerA6JV.js → 9.CrLHYPEJ.js} +1 -23
  263. package/frontend/.svelte-kit/output/client/_app/version.json +1 -1
  264. package/frontend/.svelte-kit/output/server/.vite/manifest.json +3 -3
  265. package/frontend/.svelte-kit/output/server/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -22
  266. package/frontend/.svelte-kit/output/server/_app/immutable/assets/Badge.D1SV0Gv7.css +0 -22
  267. package/frontend/.svelte-kit/output/server/_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css +0 -22
  268. package/frontend/.svelte-kit/output/server/_app/immutable/assets/EmptyState.DUDM4P19.css +0 -22
  269. package/frontend/.svelte-kit/output/server/_app/immutable/assets/Modal.BuaCfdLj.css +0 -22
  270. package/frontend/.svelte-kit/output/server/_app/immutable/assets/Pagination.DZmi2Po-.css +0 -22
  271. package/frontend/.svelte-kit/output/server/_app/immutable/assets/Toast.DENwYn3g.css +0 -22
  272. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_layout.BuhMvMUj.css +0 -22
  273. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.0Eln51hV.css +0 -22
  274. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.5IJAEAjc.css +0 -22
  275. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BR3wgXcZ.css +0 -22
  276. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BWAH0Beh.css +0 -22
  277. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BZfe6nWe.css +0 -22
  278. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.Bj_a_5lv.css +0 -22
  279. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BwgOqeMo.css +0 -22
  280. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.CBHi6pzT.css +0 -22
  281. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.CFnbmY-D.css +0 -22
  282. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.DvMkmYA-.css +1 -0
  283. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page._h2o67kg.css +0 -22
  284. package/frontend/.svelte-kit/output/server/chunks/BackLink.js +0 -22
  285. package/frontend/.svelte-kit/output/server/chunks/Badge.js +1 -23
  286. package/frontend/.svelte-kit/output/server/chunks/ConfirmModal.js +1 -23
  287. package/frontend/.svelte-kit/output/server/chunks/EmptyState.js +2 -24
  288. package/frontend/.svelte-kit/output/server/chunks/Modal.js +0 -22
  289. package/frontend/.svelte-kit/output/server/chunks/Toast.js +1 -23
  290. package/frontend/.svelte-kit/output/server/chunks/attributes.js +0 -22
  291. package/frontend/.svelte-kit/output/server/chunks/auth.js +0 -22
  292. package/frontend/.svelte-kit/output/server/chunks/auth2.js +0 -22
  293. package/frontend/.svelte-kit/output/server/chunks/client.js +0 -22
  294. package/frontend/.svelte-kit/output/server/chunks/common.js +9 -29
  295. package/frontend/.svelte-kit/output/server/chunks/constants.js +4 -23
  296. package/frontend/.svelte-kit/output/server/chunks/escaping.js +0 -22
  297. package/frontend/.svelte-kit/output/server/chunks/exports.js +0 -22
  298. package/frontend/.svelte-kit/output/server/chunks/format.js +0 -22
  299. package/frontend/.svelte-kit/output/server/chunks/index-server.js +0 -22
  300. package/frontend/.svelte-kit/output/server/chunks/index.js +4 -26
  301. package/frontend/.svelte-kit/output/server/chunks/index2.js +0 -22
  302. package/frontend/.svelte-kit/output/server/chunks/internal.js +1 -23
  303. package/frontend/.svelte-kit/output/server/chunks/reports.js +0 -22
  304. package/frontend/.svelte-kit/output/server/chunks/reports2.js +0 -22
  305. package/frontend/.svelte-kit/output/server/chunks/repository.js +10 -34
  306. package/frontend/.svelte-kit/output/server/chunks/runner.js +2 -25
  307. package/frontend/.svelte-kit/output/server/chunks/stores.js +0 -22
  308. package/frontend/.svelte-kit/output/server/chunks/theme.js +0 -22
  309. package/frontend/.svelte-kit/output/server/entries/fallbacks/error.svelte.js +0 -22
  310. package/frontend/.svelte-kit/output/server/entries/pages/_layout.js +0 -22
  311. package/frontend/.svelte-kit/output/server/entries/pages/_layout.svelte.js +0 -22
  312. package/frontend/.svelte-kit/output/server/entries/pages/_page.svelte.js +114 -103
  313. package/frontend/.svelte-kit/output/server/entries/pages/login/_page.svelte.js +1 -23
  314. package/frontend/.svelte-kit/output/server/entries/pages/reports/_id_/_page.svelte.js +1 -23
  315. package/frontend/.svelte-kit/output/server/entries/pages/reports/_page.svelte.js +1 -23
  316. package/frontend/.svelte-kit/output/server/entries/pages/reports/live/_page.svelte.js +1 -23
  317. package/frontend/.svelte-kit/output/server/entries/pages/scheduled-tests/_page.svelte.js +1 -23
  318. package/frontend/.svelte-kit/output/server/entries/pages/settings/_page.svelte.js +2 -24
  319. package/frontend/.svelte-kit/output/server/entries/pages/setup/_page.svelte.js +1 -23
  320. package/frontend/.svelte-kit/output/server/entries/pages/test-repository/_page.svelte.js +3 -25
  321. package/frontend/.svelte-kit/output/server/entries/pages/test-repository/runs/_id_/_page.svelte.js +3 -25
  322. package/frontend/.svelte-kit/output/server/entries/pages/test-repository/suites/_id_/_page.svelte.js +3 -25
  323. package/frontend/.svelte-kit/output/server/index.js +0 -22
  324. package/frontend/.svelte-kit/output/server/internal.js +0 -22
  325. package/frontend/.svelte-kit/output/server/manifest-full.js +1 -23
  326. package/frontend/.svelte-kit/output/server/manifest.js +1 -23
  327. package/frontend/.svelte-kit/output/server/nodes/0.js +1 -23
  328. package/frontend/.svelte-kit/output/server/nodes/1.js +1 -23
  329. package/frontend/.svelte-kit/output/server/nodes/10.js +1 -23
  330. package/frontend/.svelte-kit/output/server/nodes/11.js +1 -23
  331. package/frontend/.svelte-kit/output/server/nodes/12.js +1 -23
  332. package/frontend/.svelte-kit/output/server/nodes/2.js +2 -24
  333. package/frontend/.svelte-kit/output/server/nodes/3.js +1 -23
  334. package/frontend/.svelte-kit/output/server/nodes/4.js +1 -23
  335. package/frontend/.svelte-kit/output/server/nodes/5.js +1 -23
  336. package/frontend/.svelte-kit/output/server/nodes/6.js +1 -23
  337. package/frontend/.svelte-kit/output/server/nodes/7.js +1 -23
  338. package/frontend/.svelte-kit/output/server/nodes/8.js +1 -23
  339. package/frontend/.svelte-kit/output/server/nodes/9.js +1 -23
  340. package/frontend/Dockerfile +1 -13
  341. package/frontend/build/client/_app/immutable/assets/0.BhSG-jZH.css +0 -22
  342. package/frontend/build/client/_app/immutable/assets/0.BhSG-jZH.css.br +0 -0
  343. package/frontend/build/client/_app/immutable/assets/0.BhSG-jZH.css.gz +0 -0
  344. package/frontend/build/client/_app/immutable/assets/10.CdaQUS6U.css +0 -22
  345. package/frontend/build/client/_app/immutable/assets/10.CdaQUS6U.css.br +0 -0
  346. package/frontend/build/client/_app/immutable/assets/10.CdaQUS6U.css.gz +0 -0
  347. package/frontend/build/client/_app/immutable/assets/11.BWAH0Beh.css +0 -22
  348. package/frontend/build/client/_app/immutable/assets/11.BWAH0Beh.css.br +0 -0
  349. package/frontend/build/client/_app/immutable/assets/11.BWAH0Beh.css.gz +0 -0
  350. package/frontend/build/client/_app/immutable/assets/12.Bj_a_5lv.css +0 -22
  351. package/frontend/build/client/_app/immutable/assets/12.Bj_a_5lv.css.br +0 -0
  352. package/frontend/build/client/_app/immutable/assets/12.Bj_a_5lv.css.gz +0 -0
  353. package/frontend/build/client/_app/immutable/assets/2.DvMkmYA-.css +1 -0
  354. package/frontend/build/client/_app/immutable/assets/2.DvMkmYA-.css.br +0 -0
  355. package/frontend/build/client/_app/immutable/assets/2.DvMkmYA-.css.gz +0 -0
  356. package/frontend/build/client/_app/immutable/assets/3.BR3wgXcZ.css +0 -22
  357. package/frontend/build/client/_app/immutable/assets/3.BR3wgXcZ.css.br +0 -0
  358. package/frontend/build/client/_app/immutable/assets/3.BR3wgXcZ.css.gz +0 -0
  359. package/frontend/build/client/_app/immutable/assets/4.0Eln51hV.css +0 -22
  360. package/frontend/build/client/_app/immutable/assets/4.0Eln51hV.css.br +0 -0
  361. package/frontend/build/client/_app/immutable/assets/4.0Eln51hV.css.gz +0 -0
  362. package/frontend/build/client/_app/immutable/assets/5.DFV9OgAu.css +0 -22
  363. package/frontend/build/client/_app/immutable/assets/5.DFV9OgAu.css.br +0 -0
  364. package/frontend/build/client/_app/immutable/assets/5.DFV9OgAu.css.gz +0 -0
  365. package/frontend/build/client/_app/immutable/assets/6.CFnbmY-D.css +0 -22
  366. package/frontend/build/client/_app/immutable/assets/6.CFnbmY-D.css.br +0 -0
  367. package/frontend/build/client/_app/immutable/assets/6.CFnbmY-D.css.gz +0 -0
  368. package/frontend/build/client/_app/immutable/assets/7.CBHi6pzT.css +0 -22
  369. package/frontend/build/client/_app/immutable/assets/7.CBHi6pzT.css.br +0 -0
  370. package/frontend/build/client/_app/immutable/assets/7.CBHi6pzT.css.gz +0 -0
  371. package/frontend/build/client/_app/immutable/assets/8.BwgOqeMo.css +0 -22
  372. package/frontend/build/client/_app/immutable/assets/8.BwgOqeMo.css.br +0 -0
  373. package/frontend/build/client/_app/immutable/assets/8.BwgOqeMo.css.gz +0 -0
  374. package/frontend/build/client/_app/immutable/assets/9._h2o67kg.css +0 -22
  375. package/frontend/build/client/_app/immutable/assets/9._h2o67kg.css.br +0 -0
  376. package/frontend/build/client/_app/immutable/assets/9._h2o67kg.css.gz +0 -0
  377. package/frontend/build/client/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -22
  378. package/frontend/build/client/_app/immutable/assets/BackLink.CvWWuO3h.css.br +0 -0
  379. package/frontend/build/client/_app/immutable/assets/BackLink.CvWWuO3h.css.gz +0 -0
  380. package/frontend/build/client/_app/immutable/assets/Badge.D1SV0Gv7.css +0 -22
  381. package/frontend/build/client/_app/immutable/assets/Badge.D1SV0Gv7.css.br +0 -0
  382. package/frontend/build/client/_app/immutable/assets/Badge.D1SV0Gv7.css.gz +0 -0
  383. package/frontend/build/client/_app/immutable/assets/Button.FOWXxvc7.css +0 -22
  384. package/frontend/build/client/_app/immutable/assets/Button.FOWXxvc7.css.br +0 -0
  385. package/frontend/build/client/_app/immutable/assets/Button.FOWXxvc7.css.gz +0 -0
  386. package/frontend/build/client/_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css +0 -22
  387. package/frontend/build/client/_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css.br +0 -0
  388. package/frontend/build/client/_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css.gz +0 -0
  389. package/frontend/build/client/_app/immutable/assets/EmptyState.DUDM4P19.css +0 -22
  390. package/frontend/build/client/_app/immutable/assets/EmptyState.DUDM4P19.css.br +0 -0
  391. package/frontend/build/client/_app/immutable/assets/EmptyState.DUDM4P19.css.gz +0 -0
  392. package/frontend/build/client/_app/immutable/assets/Modal.BZpm0HP8.css +0 -22
  393. package/frontend/build/client/_app/immutable/assets/Modal.BZpm0HP8.css.br +0 -0
  394. package/frontend/build/client/_app/immutable/assets/Modal.BZpm0HP8.css.gz +0 -0
  395. package/frontend/build/client/_app/immutable/assets/Modal.BuaCfdLj.css +0 -22
  396. package/frontend/build/client/_app/immutable/assets/Modal.BuaCfdLj.css.br +0 -0
  397. package/frontend/build/client/_app/immutable/assets/Modal.BuaCfdLj.css.gz +0 -0
  398. package/frontend/build/client/_app/immutable/assets/Pagination.DZmi2Po-.css +0 -22
  399. package/frontend/build/client/_app/immutable/assets/Pagination.DZmi2Po-.css.br +0 -0
  400. package/frontend/build/client/_app/immutable/assets/Pagination.DZmi2Po-.css.gz +0 -0
  401. package/frontend/build/client/_app/immutable/assets/Toast.DENwYn3g.css +0 -22
  402. package/frontend/build/client/_app/immutable/assets/Toast.DENwYn3g.css.br +0 -0
  403. package/frontend/build/client/_app/immutable/assets/Toast.DENwYn3g.css.gz +0 -0
  404. package/frontend/build/client/_app/immutable/assets/_layout.BuhMvMUj.css +0 -22
  405. package/frontend/build/client/_app/immutable/assets/_layout.BuhMvMUj.css.br +0 -0
  406. package/frontend/build/client/_app/immutable/assets/_layout.BuhMvMUj.css.gz +0 -0
  407. package/frontend/build/client/_app/immutable/assets/_page.0Eln51hV.css +0 -22
  408. package/frontend/build/client/_app/immutable/assets/_page.0Eln51hV.css.br +0 -0
  409. package/frontend/build/client/_app/immutable/assets/_page.0Eln51hV.css.gz +0 -0
  410. package/frontend/build/client/_app/immutable/assets/_page.5IJAEAjc.css +0 -22
  411. package/frontend/build/client/_app/immutable/assets/_page.5IJAEAjc.css.br +0 -0
  412. package/frontend/build/client/_app/immutable/assets/_page.5IJAEAjc.css.gz +0 -0
  413. package/frontend/build/client/_app/immutable/assets/_page.BR3wgXcZ.css +0 -22
  414. package/frontend/build/client/_app/immutable/assets/_page.BR3wgXcZ.css.br +0 -0
  415. package/frontend/build/client/_app/immutable/assets/_page.BR3wgXcZ.css.gz +0 -0
  416. package/frontend/build/client/_app/immutable/assets/_page.BWAH0Beh.css +0 -22
  417. package/frontend/build/client/_app/immutable/assets/_page.BWAH0Beh.css.br +0 -0
  418. package/frontend/build/client/_app/immutable/assets/_page.BWAH0Beh.css.gz +0 -0
  419. package/frontend/build/client/_app/immutable/assets/_page.BZfe6nWe.css +0 -22
  420. package/frontend/build/client/_app/immutable/assets/_page.BZfe6nWe.css.br +0 -0
  421. package/frontend/build/client/_app/immutable/assets/_page.BZfe6nWe.css.gz +0 -0
  422. package/frontend/build/client/_app/immutable/assets/_page.Bj_a_5lv.css +0 -22
  423. package/frontend/build/client/_app/immutable/assets/_page.Bj_a_5lv.css.br +0 -0
  424. package/frontend/build/client/_app/immutable/assets/_page.Bj_a_5lv.css.gz +0 -0
  425. package/frontend/build/client/_app/immutable/assets/_page.BwgOqeMo.css +0 -22
  426. package/frontend/build/client/_app/immutable/assets/_page.BwgOqeMo.css.br +0 -0
  427. package/frontend/build/client/_app/immutable/assets/_page.BwgOqeMo.css.gz +0 -0
  428. package/frontend/build/client/_app/immutable/assets/_page.CBHi6pzT.css +0 -22
  429. package/frontend/build/client/_app/immutable/assets/_page.CBHi6pzT.css.br +0 -0
  430. package/frontend/build/client/_app/immutable/assets/_page.CBHi6pzT.css.gz +0 -0
  431. package/frontend/build/client/_app/immutable/assets/_page.CFnbmY-D.css +0 -22
  432. package/frontend/build/client/_app/immutable/assets/_page.CFnbmY-D.css.br +0 -0
  433. package/frontend/build/client/_app/immutable/assets/_page.CFnbmY-D.css.gz +0 -0
  434. package/frontend/build/client/_app/immutable/assets/_page.DvMkmYA-.css +1 -0
  435. package/frontend/build/client/_app/immutable/assets/_page.DvMkmYA-.css.br +0 -0
  436. package/frontend/build/client/_app/immutable/assets/_page.DvMkmYA-.css.gz +0 -0
  437. package/frontend/build/client/_app/immutable/assets/_page._h2o67kg.css +0 -22
  438. package/frontend/build/client/_app/immutable/assets/_page._h2o67kg.css.br +0 -0
  439. package/frontend/build/client/_app/immutable/assets/_page._h2o67kg.css.gz +0 -0
  440. package/frontend/build/client/_app/immutable/chunks/2zMvi6fR.js +0 -22
  441. package/frontend/build/client/_app/immutable/chunks/2zMvi6fR.js.br +0 -0
  442. package/frontend/build/client/_app/immutable/chunks/2zMvi6fR.js.gz +0 -0
  443. package/frontend/build/client/_app/immutable/chunks/{D2cvzNT9.js → 3InFPLvE.js} +1 -23
  444. package/frontend/build/client/_app/immutable/chunks/3InFPLvE.js.br +0 -0
  445. package/frontend/build/client/_app/immutable/chunks/3InFPLvE.js.gz +0 -0
  446. package/frontend/build/client/_app/immutable/chunks/BAACMRH5.js +0 -22
  447. package/frontend/build/client/_app/immutable/chunks/BAACMRH5.js.br +0 -0
  448. package/frontend/build/client/_app/immutable/chunks/BAACMRH5.js.gz +0 -0
  449. package/frontend/build/client/_app/immutable/chunks/BAMUGSh7.js +1 -0
  450. package/frontend/build/client/_app/immutable/chunks/BAMUGSh7.js.br +0 -0
  451. package/frontend/build/client/_app/immutable/chunks/BAMUGSh7.js.gz +0 -0
  452. package/frontend/build/client/_app/immutable/chunks/BKuh57WU.js +1 -0
  453. package/frontend/build/client/_app/immutable/chunks/BKuh57WU.js.br +0 -0
  454. package/frontend/build/client/_app/immutable/chunks/BKuh57WU.js.gz +0 -0
  455. package/frontend/build/client/_app/immutable/chunks/{DkNBSlo2.js → BUwxRmHf.js} +1 -23
  456. package/frontend/build/client/_app/immutable/chunks/BUwxRmHf.js.br +0 -0
  457. package/frontend/build/client/_app/immutable/chunks/BUwxRmHf.js.gz +0 -0
  458. package/frontend/build/client/_app/immutable/chunks/Bfc47y5P.js +0 -22
  459. package/frontend/build/client/_app/immutable/chunks/Bfc47y5P.js.br +0 -0
  460. package/frontend/build/client/_app/immutable/chunks/Bfc47y5P.js.gz +0 -0
  461. package/frontend/build/client/_app/immutable/chunks/{DYlaQsvN.js → BmZ9upwL.js} +1 -23
  462. package/frontend/build/client/_app/immutable/chunks/BmZ9upwL.js.br +0 -0
  463. package/frontend/build/client/_app/immutable/chunks/BmZ9upwL.js.gz +0 -0
  464. package/frontend/build/client/_app/immutable/chunks/C1Vid6wz.js +0 -22
  465. package/frontend/build/client/_app/immutable/chunks/C1Vid6wz.js.br +0 -0
  466. package/frontend/build/client/_app/immutable/chunks/C1Vid6wz.js.gz +0 -0
  467. package/frontend/build/client/_app/immutable/chunks/C8OURRSs.js +0 -22
  468. package/frontend/build/client/_app/immutable/chunks/C8OURRSs.js.br +0 -0
  469. package/frontend/build/client/_app/immutable/chunks/C8OURRSs.js.gz +0 -0
  470. package/frontend/build/client/_app/immutable/chunks/CGeZlCaI.js +1 -0
  471. package/frontend/build/client/_app/immutable/chunks/CGeZlCaI.js.br +0 -0
  472. package/frontend/build/client/_app/immutable/chunks/CGeZlCaI.js.gz +0 -0
  473. package/frontend/build/client/_app/immutable/chunks/CKDtmZUQ.js +0 -22
  474. package/frontend/build/client/_app/immutable/chunks/CKDtmZUQ.js.br +0 -0
  475. package/frontend/build/client/_app/immutable/chunks/CKDtmZUQ.js.gz +0 -0
  476. package/frontend/build/client/_app/immutable/chunks/CMBQQ9RZ.js +0 -22
  477. package/frontend/build/client/_app/immutable/chunks/CMBQQ9RZ.js.br +0 -0
  478. package/frontend/build/client/_app/immutable/chunks/CMBQQ9RZ.js.gz +0 -0
  479. package/frontend/build/client/_app/immutable/chunks/{BjUpWNbl.js → CMEtqUfQ.js} +1 -23
  480. package/frontend/build/client/_app/immutable/chunks/CMEtqUfQ.js.br +0 -0
  481. package/frontend/build/client/_app/immutable/chunks/CMEtqUfQ.js.gz +0 -0
  482. package/frontend/build/client/_app/immutable/chunks/CNdcuGR0.js +0 -22
  483. package/frontend/build/client/_app/immutable/chunks/CNdcuGR0.js.br +0 -0
  484. package/frontend/build/client/_app/immutable/chunks/CNdcuGR0.js.gz +0 -0
  485. package/frontend/build/client/_app/immutable/chunks/CUC98kMZ.js +1 -0
  486. package/frontend/build/client/_app/immutable/chunks/CUC98kMZ.js.br +0 -0
  487. package/frontend/build/client/_app/immutable/chunks/CUC98kMZ.js.gz +0 -0
  488. package/frontend/build/client/_app/immutable/chunks/CgnwuKKO.js +0 -22
  489. package/frontend/build/client/_app/immutable/chunks/CgnwuKKO.js.br +0 -0
  490. package/frontend/build/client/_app/immutable/chunks/CgnwuKKO.js.gz +0 -0
  491. package/frontend/build/client/_app/immutable/chunks/{B98sHkeB.js → Co3xKhEp.js} +1 -23
  492. package/frontend/build/client/_app/immutable/chunks/Co3xKhEp.js.br +0 -0
  493. package/frontend/build/client/_app/immutable/chunks/Co3xKhEp.js.gz +0 -0
  494. package/frontend/build/client/_app/immutable/chunks/CuqnZUex.js +0 -22
  495. package/frontend/build/client/_app/immutable/chunks/CuqnZUex.js.br +1 -21
  496. package/frontend/build/client/_app/immutable/chunks/CuqnZUex.js.gz +0 -0
  497. package/frontend/build/client/_app/immutable/chunks/{DlNYZJ7K.js → CzlPaHY9.js} +1 -23
  498. package/frontend/build/client/_app/immutable/chunks/CzlPaHY9.js.br +0 -0
  499. package/frontend/build/client/_app/immutable/chunks/CzlPaHY9.js.gz +0 -0
  500. package/frontend/build/client/_app/immutable/chunks/DCgHuuvs.js +0 -22
  501. package/frontend/build/client/_app/immutable/chunks/DCgHuuvs.js.br +0 -0
  502. package/frontend/build/client/_app/immutable/chunks/DCgHuuvs.js.gz +0 -0
  503. package/frontend/build/client/_app/immutable/chunks/DHM6H-es.js +2 -0
  504. package/frontend/build/client/_app/immutable/chunks/DHM6H-es.js.br +0 -0
  505. package/frontend/build/client/_app/immutable/chunks/DHM6H-es.js.gz +0 -0
  506. package/frontend/build/client/_app/immutable/chunks/{3IV-uqHa.js → DMZwI8Cj.js} +1 -23
  507. package/frontend/build/client/_app/immutable/chunks/DMZwI8Cj.js.br +0 -0
  508. package/frontend/build/client/_app/immutable/chunks/DMZwI8Cj.js.gz +0 -0
  509. package/frontend/build/client/_app/immutable/chunks/DMyTUV-Y.js +3 -0
  510. package/frontend/build/client/_app/immutable/chunks/DMyTUV-Y.js.br +0 -0
  511. package/frontend/build/client/_app/immutable/chunks/DMyTUV-Y.js.gz +0 -0
  512. package/frontend/build/client/_app/immutable/chunks/{D2gYTmAA.js → DSLBMEpr.js} +1 -23
  513. package/frontend/build/client/_app/immutable/chunks/DSLBMEpr.js.br +0 -0
  514. package/frontend/build/client/_app/immutable/chunks/DSLBMEpr.js.gz +0 -0
  515. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/DDblTLLE.js → build/client/_app/immutable/chunks/DbgD7JLa.js} +1 -23
  516. package/frontend/build/client/_app/immutable/chunks/DbgD7JLa.js.br +0 -0
  517. package/frontend/build/client/_app/immutable/chunks/DbgD7JLa.js.gz +0 -0
  518. package/frontend/build/client/_app/immutable/chunks/Dlnxgs49.js +0 -22
  519. package/frontend/build/client/_app/immutable/chunks/Dlnxgs49.js.br +0 -0
  520. package/frontend/build/client/_app/immutable/chunks/Dlnxgs49.js.gz +0 -0
  521. package/frontend/build/client/_app/immutable/chunks/TOCyHP97.js +0 -22
  522. package/frontend/build/client/_app/immutable/chunks/TOCyHP97.js.br +0 -0
  523. package/frontend/build/client/_app/immutable/chunks/TOCyHP97.js.gz +0 -0
  524. package/frontend/build/client/_app/immutable/chunks/nURnIknV.js +1 -0
  525. package/frontend/build/client/_app/immutable/chunks/nURnIknV.js.br +0 -0
  526. package/frontend/build/client/_app/immutable/chunks/nURnIknV.js.gz +0 -0
  527. package/frontend/build/client/_app/immutable/chunks/t-La0hgu.js +0 -22
  528. package/frontend/build/client/_app/immutable/chunks/t-La0hgu.js.br +0 -0
  529. package/frontend/build/client/_app/immutable/chunks/t-La0hgu.js.gz +0 -0
  530. package/frontend/build/client/_app/immutable/chunks/w0D4Uzlq.js +0 -22
  531. package/frontend/build/client/_app/immutable/chunks/w0D4Uzlq.js.br +0 -0
  532. package/frontend/build/client/_app/immutable/chunks/w0D4Uzlq.js.gz +0 -0
  533. package/frontend/build/client/_app/immutable/entry/{app.BCWbw5zZ.js → app.BkBD0hgA.js} +2 -24
  534. package/frontend/build/client/_app/immutable/entry/app.BkBD0hgA.js.br +0 -0
  535. package/frontend/build/client/_app/immutable/entry/app.BkBD0hgA.js.gz +0 -0
  536. package/frontend/build/client/_app/immutable/entry/start.BxeX1Uxs.js +1 -0
  537. package/frontend/build/client/_app/immutable/entry/start.BxeX1Uxs.js.br +2 -0
  538. package/frontend/build/client/_app/immutable/entry/start.BxeX1Uxs.js.gz +0 -0
  539. package/frontend/build/client/_app/immutable/nodes/0.ChjDHxSJ.js +6 -0
  540. package/frontend/build/client/_app/immutable/nodes/0.ChjDHxSJ.js.br +0 -0
  541. package/frontend/build/client/_app/immutable/nodes/0.ChjDHxSJ.js.gz +0 -0
  542. package/frontend/build/client/_app/immutable/nodes/1.DBSWa36f.js +1 -0
  543. package/frontend/build/client/_app/immutable/nodes/1.DBSWa36f.js.br +0 -0
  544. package/frontend/build/client/_app/immutable/nodes/1.DBSWa36f.js.gz +0 -0
  545. package/frontend/{.svelte-kit/output/client/_app/immutable/nodes/10.Bn4Ma-MU.js → build/client/_app/immutable/nodes/10.DEbnxfND.js} +1 -23
  546. package/frontend/build/client/_app/immutable/nodes/10.DEbnxfND.js.br +0 -0
  547. package/frontend/build/client/_app/immutable/nodes/10.DEbnxfND.js.gz +0 -0
  548. package/frontend/{.svelte-kit/output/client/_app/immutable/nodes/11.BacEu7sW.js → build/client/_app/immutable/nodes/11.O4cjXCg4.js} +1 -23
  549. package/frontend/build/client/_app/immutable/nodes/11.O4cjXCg4.js.br +0 -0
  550. package/frontend/build/client/_app/immutable/nodes/11.O4cjXCg4.js.gz +0 -0
  551. package/frontend/build/client/_app/immutable/nodes/12.BWQdeRdX.js +1 -0
  552. package/frontend/build/client/_app/immutable/nodes/12.BWQdeRdX.js.br +0 -0
  553. package/frontend/build/client/_app/immutable/nodes/12.BWQdeRdX.js.gz +0 -0
  554. package/frontend/build/client/_app/immutable/nodes/2.BnHalSCi.js +1 -0
  555. package/frontend/build/client/_app/immutable/nodes/2.BnHalSCi.js.br +0 -0
  556. package/frontend/build/client/_app/immutable/nodes/2.BnHalSCi.js.gz +0 -0
  557. package/frontend/build/client/_app/immutable/nodes/{3.DHx0kho3.js → 3._S1vrLVF.js} +1 -23
  558. package/frontend/build/client/_app/immutable/nodes/3._S1vrLVF.js.br +0 -0
  559. package/frontend/build/client/_app/immutable/nodes/3._S1vrLVF.js.gz +0 -0
  560. package/frontend/build/client/_app/immutable/nodes/{4.CnaMiirx.js → 4.D-YT_JJe.js} +1 -23
  561. package/frontend/build/client/_app/immutable/nodes/4.D-YT_JJe.js.br +0 -0
  562. package/frontend/build/client/_app/immutable/nodes/4.D-YT_JJe.js.gz +0 -0
  563. package/frontend/{.svelte-kit/output/client/_app/immutable/nodes/5.B6m-zTVe.js → build/client/_app/immutable/nodes/5.BiFBiWcW.js} +1 -23
  564. package/frontend/build/client/_app/immutable/nodes/5.BiFBiWcW.js.br +0 -0
  565. package/frontend/build/client/_app/immutable/nodes/5.BiFBiWcW.js.gz +0 -0
  566. package/frontend/{.svelte-kit/output/client/_app/immutable/nodes/6.BPDag1zv.js → build/client/_app/immutable/nodes/6.BNS-W0R_.js} +1 -23
  567. package/frontend/build/client/_app/immutable/nodes/6.BNS-W0R_.js.br +0 -0
  568. package/frontend/build/client/_app/immutable/nodes/6.BNS-W0R_.js.gz +0 -0
  569. package/frontend/build/client/_app/immutable/nodes/{7.D7LwxSvT.js → 7.C-pKvVZy.js} +1 -23
  570. package/frontend/build/client/_app/immutable/nodes/7.C-pKvVZy.js.br +0 -0
  571. package/frontend/build/client/_app/immutable/nodes/7.C-pKvVZy.js.gz +0 -0
  572. package/frontend/build/client/_app/immutable/nodes/{8.CCkNX20G.js → 8.BEUdazrw.js} +1 -23
  573. package/frontend/build/client/_app/immutable/nodes/8.BEUdazrw.js.br +0 -0
  574. package/frontend/build/client/_app/immutable/nodes/8.BEUdazrw.js.gz +0 -0
  575. package/frontend/build/client/_app/immutable/nodes/{9.HDerA6JV.js → 9.CrLHYPEJ.js} +1 -23
  576. package/frontend/build/client/_app/immutable/nodes/9.CrLHYPEJ.js.br +0 -0
  577. package/frontend/build/client/_app/immutable/nodes/9.CrLHYPEJ.js.gz +0 -0
  578. package/frontend/build/client/_app/version.json +1 -1
  579. package/frontend/build/client/_app/version.json.br +0 -0
  580. package/frontend/build/client/_app/version.json.gz +0 -0
  581. package/frontend/build/env.js +0 -22
  582. package/frontend/build/handler.js +0 -22
  583. package/frontend/build/index.js +0 -22
  584. package/frontend/build/server/chunks/0-Cn_2hzqk.js +17 -0
  585. package/frontend/build/server/chunks/0-Cn_2hzqk.js.map +1 -0
  586. package/frontend/build/server/chunks/1-BrRGJFSB.js +9 -0
  587. package/frontend/build/server/chunks/1-BrRGJFSB.js.map +1 -0
  588. package/frontend/build/server/chunks/10-l6_ikL_D.js +9 -0
  589. package/frontend/build/server/chunks/10-l6_ikL_D.js.map +1 -0
  590. package/frontend/build/server/chunks/11-BLPbHJqB.js +9 -0
  591. package/frontend/build/server/chunks/11-BLPbHJqB.js.map +1 -0
  592. package/frontend/build/server/chunks/12-S1ujUrHy.js +9 -0
  593. package/frontend/build/server/chunks/12-S1ujUrHy.js.map +1 -0
  594. package/frontend/build/server/chunks/2-Cte30Dgy.js +9 -0
  595. package/frontend/build/server/chunks/2-Cte30Dgy.js.map +1 -0
  596. package/frontend/build/server/chunks/3-BHkXVoNI.js +9 -0
  597. package/frontend/build/server/chunks/3-BHkXVoNI.js.map +1 -0
  598. package/frontend/build/server/chunks/4-Bo04DC5Z.js +9 -0
  599. package/frontend/build/server/chunks/4-Bo04DC5Z.js.map +1 -0
  600. package/frontend/build/server/chunks/5-F1ZsXMt2.js +9 -0
  601. package/frontend/build/server/chunks/5-F1ZsXMt2.js.map +1 -0
  602. package/frontend/build/server/chunks/6-FlZLnYJ6.js +9 -0
  603. package/frontend/build/server/chunks/6-FlZLnYJ6.js.map +1 -0
  604. package/frontend/build/server/chunks/7-DiQJZEF_.js +9 -0
  605. package/frontend/build/server/chunks/{7-DekQfQHu.js.map → 7-DiQJZEF_.js.map} +1 -21
  606. package/frontend/build/server/chunks/8-DXReUGxi.js +9 -0
  607. package/frontend/build/server/chunks/8-DXReUGxi.js.map +1 -0
  608. package/frontend/build/server/chunks/9-Cy_mGmt4.js +9 -0
  609. package/frontend/build/server/chunks/9-Cy_mGmt4.js.map +1 -0
  610. package/frontend/build/server/chunks/BackLink-BJ8NaemM.js +13 -0
  611. package/frontend/build/server/chunks/{BackLink-KxZNqsaq.js.map → BackLink-BJ8NaemM.js.map} +1 -21
  612. package/frontend/build/server/chunks/Badge-44ZTDx0V.js +13 -0
  613. package/frontend/build/server/chunks/{Badge-B5V-z6pI.js.map → Badge-44ZTDx0V.js.map} +1 -21
  614. package/frontend/build/server/chunks/{ConfirmModal-Ckkt99Pn.js → ConfirmModal-C0EAXcq_.js} +4 -26
  615. package/frontend/build/server/chunks/{ConfirmModal-Ckkt99Pn.js.map → ConfirmModal-C0EAXcq_.js.map} +1 -21
  616. package/frontend/build/server/chunks/{EmptyState-BwwbShnX.js → EmptyState-BA_eXaeR.js} +3 -25
  617. package/frontend/build/server/chunks/{EmptyState-BwwbShnX.js.map → EmptyState-BA_eXaeR.js.map} +1 -21
  618. package/frontend/build/server/chunks/{Modal-DG-6c5si.js → Modal-DChG187n.js} +2 -24
  619. package/frontend/build/server/chunks/{Modal-DG-6c5si.js.map → Modal-DChG187n.js.map} +1 -21
  620. package/frontend/build/server/chunks/{Toast-CIG4edEp.js → Toast-v-q4ZnYq.js} +2 -24
  621. package/frontend/build/server/chunks/{Toast-CIG4edEp.js.map → Toast-v-q4ZnYq.js.map} +1 -21
  622. package/frontend/build/server/chunks/_layout.svelte-CHVI3Prt.js +24 -0
  623. package/frontend/build/server/chunks/{_layout.svelte-BjPrZpoG.js.map → _layout.svelte-CHVI3Prt.js.map} +1 -21
  624. package/frontend/build/server/chunks/{_page.svelte-BbZNxvCl.js → _page.svelte-1as75nPc.js} +14 -35
  625. package/frontend/build/server/chunks/{_page.svelte-BbZNxvCl.js.map → _page.svelte-1as75nPc.js.map} +1 -21
  626. package/frontend/build/server/chunks/{_page.svelte-CLFpft5D.js → _page.svelte-1jo8MapI.js} +11 -33
  627. package/frontend/build/server/chunks/{_page.svelte-CLFpft5D.js.map → _page.svelte-1jo8MapI.js.map} +1 -21
  628. package/frontend/build/server/chunks/{_page.svelte-BHw14GPR.js → _page.svelte-BuFusRK1.js} +12 -34
  629. package/frontend/build/server/chunks/{_page.svelte-BHw14GPR.js.map → _page.svelte-BuFusRK1.js.map} +1 -21
  630. package/frontend/build/server/chunks/{_page.svelte-D78qaBDN.js → _page.svelte-CAVyp70V.js} +14 -35
  631. package/frontend/build/server/chunks/{_page.svelte-D78qaBDN.js.map → _page.svelte-CAVyp70V.js.map} +1 -21
  632. package/frontend/build/server/chunks/{_page.svelte-D2oF79cT.js → _page.svelte-CB8-QBNg.js} +11 -33
  633. package/frontend/build/server/chunks/{_page.svelte-D2oF79cT.js.map → _page.svelte-CB8-QBNg.js.map} +1 -21
  634. package/frontend/build/server/chunks/{_page.svelte-DyyuZN_3.js → _page.svelte-CWWeZuid.js} +11 -33
  635. package/frontend/build/server/chunks/{_page.svelte-DyyuZN_3.js.map → _page.svelte-CWWeZuid.js.map} +1 -21
  636. package/frontend/build/server/chunks/_page.svelte-CpB-fgJl.js +219 -0
  637. package/frontend/build/server/chunks/_page.svelte-CpB-fgJl.js.map +1 -0
  638. package/frontend/build/server/chunks/_page.svelte-D3E6Eojd.js +27 -0
  639. package/frontend/build/server/chunks/{_page.svelte-B9rjnZWE.js.map → _page.svelte-D3E6Eojd.js.map} +1 -21
  640. package/frontend/build/server/chunks/_page.svelte-Kg69DDaM.js +27 -0
  641. package/frontend/build/server/chunks/{_page.svelte-D1aYn1PL.js.map → _page.svelte-Kg69DDaM.js.map} +1 -21
  642. package/frontend/build/server/chunks/{_page.svelte-ubW5EUCf.js → _page.svelte-L9fuiN_q.js} +10 -32
  643. package/frontend/build/server/chunks/{_page.svelte-ubW5EUCf.js.map → _page.svelte-L9fuiN_q.js.map} +1 -21
  644. package/frontend/build/server/chunks/{_page.svelte-Cr16HubD.js → _page.svelte-wKyUmA2e.js} +12 -34
  645. package/frontend/build/server/chunks/{_page.svelte-Cr16HubD.js.map → _page.svelte-wKyUmA2e.js.map} +1 -21
  646. package/frontend/build/server/chunks/attributes-BeaNKpgU.js +0 -22
  647. package/frontend/build/server/chunks/attributes-BeaNKpgU.js.map +0 -20
  648. package/frontend/build/server/chunks/{auth-rlH-cIzn.js → auth-Chw-wBpI.js} +2 -24
  649. package/frontend/build/server/chunks/{auth-rlH-cIzn.js.map → auth-Chw-wBpI.js.map} +1 -21
  650. package/frontend/build/server/chunks/auth2-C02yYDpz.js +0 -22
  651. package/frontend/build/server/chunks/auth2-C02yYDpz.js.map +0 -20
  652. package/frontend/build/server/chunks/client-DEmxR_a-.js +40 -0
  653. package/frontend/build/server/chunks/{client-DyII78e0.js.map → client-DEmxR_a-.js.map} +1 -21
  654. package/frontend/build/server/chunks/common-DYYTVHPw.js +21 -0
  655. package/frontend/build/server/chunks/common-DYYTVHPw.js.map +1 -0
  656. package/frontend/build/server/chunks/constants-CXTaQaB6.js +22 -0
  657. package/frontend/build/server/chunks/constants-CXTaQaB6.js.map +1 -0
  658. package/frontend/build/server/chunks/error.svelte-BD3xNemk.js +28 -0
  659. package/frontend/build/server/chunks/{error.svelte-BDW3iP1O.js.map → error.svelte-BD3xNemk.js.map} +1 -21
  660. package/frontend/build/server/chunks/escaping-CqgfEcN3.js +0 -22
  661. package/frontend/build/server/chunks/escaping-CqgfEcN3.js.map +0 -20
  662. package/frontend/build/server/chunks/exports-D0QHgeSL.js +0 -22
  663. package/frontend/build/server/chunks/exports-D0QHgeSL.js.map +0 -20
  664. package/frontend/build/server/chunks/{format-0SSB1oGG.js → format-CiNRMfHu.js} +2 -24
  665. package/frontend/build/server/chunks/{format-0SSB1oGG.js.map → format-CiNRMfHu.js.map} +1 -21
  666. package/frontend/build/server/chunks/index-server-B3M9vyh2.js +14 -0
  667. package/frontend/build/server/chunks/index-server-B3M9vyh2.js.map +1 -0
  668. package/frontend/build/server/chunks/{index2-DG8XHU5D.js → index2-5R1tbrep.js} +2 -24
  669. package/frontend/build/server/chunks/{index2-DG8XHU5D.js.map → index2-5R1tbrep.js.map} +1 -21
  670. package/frontend/build/server/chunks/reports-D_ApeeNh.js +23 -0
  671. package/frontend/build/server/chunks/{reports-DnYbvluH.js.map → reports-D_ApeeNh.js.map} +1 -21
  672. package/frontend/build/server/chunks/{reports2-DR4XlcJg.js → reports2-BtElN_53.js} +2 -24
  673. package/frontend/build/server/chunks/{reports2-DR4XlcJg.js.map → reports2-BtElN_53.js.map} +1 -21
  674. package/frontend/build/server/chunks/{repository-D9Derhnk.js → repository-FYYV_vKE.js} +3 -26
  675. package/frontend/build/server/chunks/repository-FYYV_vKE.js.map +1 -0
  676. package/frontend/build/server/chunks/runner-DC7hXbnY.js +32 -0
  677. package/frontend/build/server/chunks/runner-DC7hXbnY.js.map +1 -0
  678. package/frontend/build/server/chunks/stores-BLenR3c1.js +27 -0
  679. package/frontend/build/server/chunks/{stores-DlkXV308.js.map → stores-BLenR3c1.js.map} +1 -21
  680. package/frontend/build/server/chunks/theme-nAx-GvX_.js +10 -0
  681. package/frontend/build/server/chunks/theme-nAx-GvX_.js.map +1 -0
  682. package/frontend/build/server/index.js +2 -24
  683. package/frontend/build/server/index.js.map +1 -21
  684. package/frontend/build/server/manifest.js +14 -36
  685. package/frontend/build/server/manifest.js.map +1 -21
  686. package/frontend/build/shims.js +0 -22
  687. package/frontend/package.json +1 -0
  688. package/frontend/src/app.css +1 -13
  689. package/frontend/src/app.html +1 -13
  690. package/frontend/src/lib/api/activeRuns.js +18 -0
  691. package/frontend/src/lib/api/auth.js +1 -13
  692. package/frontend/src/lib/api/reports.js +1 -13
  693. package/frontend/src/lib/api/repository.js +1 -13
  694. package/frontend/src/lib/api/runners.js +26 -21
  695. package/frontend/src/lib/api/schedules.js +1 -13
  696. package/frontend/src/lib/api/settings.js +11 -23
  697. package/frontend/src/lib/api/tests.js +1 -13
  698. package/frontend/src/lib/api/users.js +1 -13
  699. package/frontend/src/lib/components/icons/BrowserIcon.svelte +1 -13
  700. package/frontend/src/lib/components/layout/Nav.svelte +1 -13
  701. package/frontend/src/lib/components/layout/PageShell.svelte +1 -13
  702. package/frontend/src/lib/components/layout/RunnerPanel.svelte +146 -105
  703. package/frontend/src/lib/components/ui/AutomatedBadge.svelte +2 -31
  704. package/frontend/src/lib/components/ui/BackLink.svelte +1 -30
  705. package/frontend/src/lib/components/ui/Badge.svelte +1 -13
  706. package/frontend/src/lib/components/ui/Button.svelte +1 -13
  707. package/frontend/src/lib/components/ui/CaseIdChip.svelte +1 -30
  708. package/frontend/src/lib/components/ui/ConfirmModal.svelte +8 -17
  709. package/frontend/src/lib/components/ui/EmptyState.svelte +26 -15
  710. package/frontend/src/lib/components/ui/Modal.svelte +1 -13
  711. package/frontend/src/lib/components/ui/Pagination.svelte +1 -13
  712. package/frontend/src/lib/components/ui/PriorityBadge.svelte +1 -30
  713. package/frontend/src/lib/components/ui/ResultChip.svelte +1 -30
  714. package/frontend/src/lib/components/ui/StatusDot.svelte +1 -30
  715. package/frontend/src/lib/components/ui/StepKeyword.svelte +1 -30
  716. package/frontend/src/lib/components/ui/StepStatusIcon.svelte +1 -30
  717. package/frontend/src/lib/components/ui/TagChip.svelte +1 -30
  718. package/frontend/src/lib/components/ui/Terminal.svelte +1 -13
  719. package/frontend/src/lib/components/ui/Toast.svelte +1 -13
  720. package/frontend/src/lib/constants.js +5 -17
  721. package/frontend/src/lib/copy/auth.js +29 -0
  722. package/frontend/src/lib/copy/common.js +39 -0
  723. package/frontend/src/lib/copy/dashboard.js +28 -0
  724. package/frontend/src/lib/copy/reports.js +83 -0
  725. package/frontend/src/lib/copy/repository.js +153 -0
  726. package/frontend/src/lib/copy/runners.js +59 -0
  727. package/frontend/src/lib/copy/schedules.js +96 -0
  728. package/frontend/src/lib/copy/settings.js +295 -0
  729. package/frontend/src/lib/index.js +1 -13
  730. package/frontend/src/lib/socketEvents.js +36 -0
  731. package/frontend/src/lib/stores/auth.js +1 -13
  732. package/frontend/src/lib/stores/runner.js +10 -18
  733. package/frontend/src/lib/stores/theme.js +1 -13
  734. package/frontend/src/lib/styles/global.css +1 -13
  735. package/frontend/src/lib/styles/reset.css +1 -13
  736. package/frontend/src/lib/styles/tokens.css +1 -13
  737. package/frontend/src/lib/utils/format.js +1 -13
  738. package/frontend/src/routes/+layout.js +1 -13
  739. package/frontend/src/routes/+layout.svelte +1 -13
  740. package/frontend/src/routes/+page.svelte +296 -115
  741. package/frontend/src/routes/login/+page.svelte +22 -23
  742. package/frontend/src/routes/reports/+page.svelte +37 -38
  743. package/frontend/src/routes/reports/[id]/+page.svelte +54 -43
  744. package/frontend/src/routes/reports/live/+page.svelte +57 -42
  745. package/frontend/src/routes/scheduled-tests/+page.svelte +134 -117
  746. package/frontend/src/routes/settings/+page.svelte +490 -267
  747. package/frontend/src/routes/setup/+page.svelte +30 -27
  748. package/frontend/src/routes/test-repository/+page.svelte +120 -91
  749. package/frontend/src/routes/test-repository/runs/[id]/+page.svelte +95 -60
  750. package/frontend/src/routes/test-repository/suites/[id]/+page.svelte +145 -91
  751. package/frontend/svelte.config.js +1 -13
  752. package/frontend/vite.config.js +1 -13
  753. package/package.json +2 -2
  754. package/resources/mit-license.txt +2 -0
  755. package/backend/scripts/create-test.js +0 -149
  756. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.CrXpMrqh.css +0 -23
  757. package/frontend/.svelte-kit/output/client/_app/immutable/assets/2.CrXpMrqh.css +0 -23
  758. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.CrXpMrqh.css +0 -23
  759. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/4N1zIH8t.js +0 -23
  760. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BhvHtTRh.js +0 -23
  761. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/C1sukchk.js +0 -23
  762. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DW85KPAh.js +0 -24
  763. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DW_iTTZe.js +0 -23
  764. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DtGXv8RA.js +0 -25
  765. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/oN0Z3NSF.js +0 -23
  766. package/frontend/.svelte-kit/output/client/_app/immutable/entry/start.2_AF42wj.js +0 -23
  767. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/0.BAqq2UTE.js +0 -28
  768. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/1.D5VvLtGP.js +0 -23
  769. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/12.0YGtl1uj.js +0 -23
  770. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/2.C2jjMA-Z.js +0 -23
  771. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.CrXpMrqh.css +0 -23
  772. package/frontend/build/client/_app/immutable/assets/2.CrXpMrqh.css +0 -23
  773. package/frontend/build/client/_app/immutable/assets/2.CrXpMrqh.css.br +0 -0
  774. package/frontend/build/client/_app/immutable/assets/2.CrXpMrqh.css.gz +0 -0
  775. package/frontend/build/client/_app/immutable/assets/_page.CrXpMrqh.css +0 -23
  776. package/frontend/build/client/_app/immutable/assets/_page.CrXpMrqh.css.br +0 -0
  777. package/frontend/build/client/_app/immutable/assets/_page.CrXpMrqh.css.gz +0 -0
  778. package/frontend/build/client/_app/immutable/chunks/3IV-uqHa.js.br +0 -0
  779. package/frontend/build/client/_app/immutable/chunks/3IV-uqHa.js.gz +0 -0
  780. package/frontend/build/client/_app/immutable/chunks/4N1zIH8t.js +0 -23
  781. package/frontend/build/client/_app/immutable/chunks/4N1zIH8t.js.br +0 -0
  782. package/frontend/build/client/_app/immutable/chunks/4N1zIH8t.js.gz +0 -0
  783. package/frontend/build/client/_app/immutable/chunks/B98sHkeB.js.br +0 -0
  784. package/frontend/build/client/_app/immutable/chunks/B98sHkeB.js.gz +0 -0
  785. package/frontend/build/client/_app/immutable/chunks/BhvHtTRh.js +0 -23
  786. package/frontend/build/client/_app/immutable/chunks/BhvHtTRh.js.br +0 -0
  787. package/frontend/build/client/_app/immutable/chunks/BhvHtTRh.js.gz +0 -0
  788. package/frontend/build/client/_app/immutable/chunks/BjUpWNbl.js.br +0 -0
  789. package/frontend/build/client/_app/immutable/chunks/BjUpWNbl.js.gz +0 -0
  790. package/frontend/build/client/_app/immutable/chunks/C1sukchk.js +0 -23
  791. package/frontend/build/client/_app/immutable/chunks/C1sukchk.js.br +0 -0
  792. package/frontend/build/client/_app/immutable/chunks/C1sukchk.js.gz +0 -0
  793. package/frontend/build/client/_app/immutable/chunks/D2cvzNT9.js.br +0 -0
  794. package/frontend/build/client/_app/immutable/chunks/D2cvzNT9.js.gz +0 -0
  795. package/frontend/build/client/_app/immutable/chunks/D2gYTmAA.js.br +0 -0
  796. package/frontend/build/client/_app/immutable/chunks/D2gYTmAA.js.gz +0 -0
  797. package/frontend/build/client/_app/immutable/chunks/DDblTLLE.js.br +0 -0
  798. package/frontend/build/client/_app/immutable/chunks/DDblTLLE.js.gz +0 -0
  799. package/frontend/build/client/_app/immutable/chunks/DW85KPAh.js +0 -24
  800. package/frontend/build/client/_app/immutable/chunks/DW85KPAh.js.br +0 -0
  801. package/frontend/build/client/_app/immutable/chunks/DW85KPAh.js.gz +0 -0
  802. package/frontend/build/client/_app/immutable/chunks/DW_iTTZe.js +0 -23
  803. package/frontend/build/client/_app/immutable/chunks/DW_iTTZe.js.br +0 -0
  804. package/frontend/build/client/_app/immutable/chunks/DW_iTTZe.js.gz +0 -0
  805. package/frontend/build/client/_app/immutable/chunks/DYlaQsvN.js.br +0 -0
  806. package/frontend/build/client/_app/immutable/chunks/DYlaQsvN.js.gz +0 -0
  807. package/frontend/build/client/_app/immutable/chunks/DkNBSlo2.js.br +0 -0
  808. package/frontend/build/client/_app/immutable/chunks/DkNBSlo2.js.gz +0 -0
  809. package/frontend/build/client/_app/immutable/chunks/DlNYZJ7K.js.br +0 -0
  810. package/frontend/build/client/_app/immutable/chunks/DlNYZJ7K.js.gz +0 -0
  811. package/frontend/build/client/_app/immutable/chunks/DtGXv8RA.js +0 -25
  812. package/frontend/build/client/_app/immutable/chunks/DtGXv8RA.js.br +0 -0
  813. package/frontend/build/client/_app/immutable/chunks/DtGXv8RA.js.gz +0 -0
  814. package/frontend/build/client/_app/immutable/chunks/oN0Z3NSF.js +0 -23
  815. package/frontend/build/client/_app/immutable/chunks/oN0Z3NSF.js.br +0 -0
  816. package/frontend/build/client/_app/immutable/chunks/oN0Z3NSF.js.gz +0 -0
  817. package/frontend/build/client/_app/immutable/entry/app.BCWbw5zZ.js.br +0 -0
  818. package/frontend/build/client/_app/immutable/entry/app.BCWbw5zZ.js.gz +0 -0
  819. package/frontend/build/client/_app/immutable/entry/start.2_AF42wj.js +0 -23
  820. package/frontend/build/client/_app/immutable/entry/start.2_AF42wj.js.br +0 -22
  821. package/frontend/build/client/_app/immutable/entry/start.2_AF42wj.js.gz +0 -0
  822. package/frontend/build/client/_app/immutable/nodes/0.BAqq2UTE.js +0 -28
  823. package/frontend/build/client/_app/immutable/nodes/0.BAqq2UTE.js.br +0 -0
  824. package/frontend/build/client/_app/immutable/nodes/0.BAqq2UTE.js.gz +0 -0
  825. package/frontend/build/client/_app/immutable/nodes/1.D5VvLtGP.js +0 -23
  826. package/frontend/build/client/_app/immutable/nodes/1.D5VvLtGP.js.br +0 -0
  827. package/frontend/build/client/_app/immutable/nodes/1.D5VvLtGP.js.gz +0 -0
  828. package/frontend/build/client/_app/immutable/nodes/10.Bn4Ma-MU.js.br +0 -0
  829. package/frontend/build/client/_app/immutable/nodes/10.Bn4Ma-MU.js.gz +0 -0
  830. package/frontend/build/client/_app/immutable/nodes/11.BacEu7sW.js.br +0 -0
  831. package/frontend/build/client/_app/immutable/nodes/11.BacEu7sW.js.gz +0 -0
  832. package/frontend/build/client/_app/immutable/nodes/12.0YGtl1uj.js +0 -23
  833. package/frontend/build/client/_app/immutable/nodes/12.0YGtl1uj.js.br +0 -0
  834. package/frontend/build/client/_app/immutable/nodes/12.0YGtl1uj.js.gz +0 -0
  835. package/frontend/build/client/_app/immutable/nodes/2.C2jjMA-Z.js +0 -23
  836. package/frontend/build/client/_app/immutable/nodes/2.C2jjMA-Z.js.br +0 -0
  837. package/frontend/build/client/_app/immutable/nodes/2.C2jjMA-Z.js.gz +0 -0
  838. package/frontend/build/client/_app/immutable/nodes/3.DHx0kho3.js.br +0 -0
  839. package/frontend/build/client/_app/immutable/nodes/3.DHx0kho3.js.gz +0 -0
  840. package/frontend/build/client/_app/immutable/nodes/4.CnaMiirx.js.br +0 -0
  841. package/frontend/build/client/_app/immutable/nodes/4.CnaMiirx.js.gz +0 -0
  842. package/frontend/build/client/_app/immutable/nodes/5.B6m-zTVe.js.br +0 -0
  843. package/frontend/build/client/_app/immutable/nodes/5.B6m-zTVe.js.gz +0 -0
  844. package/frontend/build/client/_app/immutable/nodes/6.BPDag1zv.js.br +0 -0
  845. package/frontend/build/client/_app/immutable/nodes/6.BPDag1zv.js.gz +0 -0
  846. package/frontend/build/client/_app/immutable/nodes/7.D7LwxSvT.js.br +0 -0
  847. package/frontend/build/client/_app/immutable/nodes/7.D7LwxSvT.js.gz +0 -0
  848. package/frontend/build/client/_app/immutable/nodes/8.CCkNX20G.js.br +0 -0
  849. package/frontend/build/client/_app/immutable/nodes/8.CCkNX20G.js.gz +0 -0
  850. package/frontend/build/client/_app/immutable/nodes/9.HDerA6JV.js.br +0 -0
  851. package/frontend/build/client/_app/immutable/nodes/9.HDerA6JV.js.gz +0 -0
  852. package/frontend/build/server/chunks/0-Di4jNU9J.js +0 -39
  853. package/frontend/build/server/chunks/0-Di4jNU9J.js.map +0 -21
  854. package/frontend/build/server/chunks/1-DR5YRUTa.js +0 -31
  855. package/frontend/build/server/chunks/1-DR5YRUTa.js.map +0 -21
  856. package/frontend/build/server/chunks/10-Bhe409bL.js +0 -31
  857. package/frontend/build/server/chunks/10-Bhe409bL.js.map +0 -21
  858. package/frontend/build/server/chunks/11-DqyXW7n1.js +0 -31
  859. package/frontend/build/server/chunks/11-DqyXW7n1.js.map +0 -21
  860. package/frontend/build/server/chunks/12-BCpjMUbs.js +0 -31
  861. package/frontend/build/server/chunks/12-BCpjMUbs.js.map +0 -21
  862. package/frontend/build/server/chunks/2-D-0buH5i.js +0 -31
  863. package/frontend/build/server/chunks/2-D-0buH5i.js.map +0 -21
  864. package/frontend/build/server/chunks/3-y2kzPO2X.js +0 -31
  865. package/frontend/build/server/chunks/3-y2kzPO2X.js.map +0 -21
  866. package/frontend/build/server/chunks/4-CFrK8HST.js +0 -31
  867. package/frontend/build/server/chunks/4-CFrK8HST.js.map +0 -21
  868. package/frontend/build/server/chunks/5-B0lJu5bT.js +0 -31
  869. package/frontend/build/server/chunks/5-B0lJu5bT.js.map +0 -21
  870. package/frontend/build/server/chunks/6-BD4CEJ3Z.js +0 -31
  871. package/frontend/build/server/chunks/6-BD4CEJ3Z.js.map +0 -21
  872. package/frontend/build/server/chunks/7-DekQfQHu.js +0 -31
  873. package/frontend/build/server/chunks/8-BMqmu7WF.js +0 -31
  874. package/frontend/build/server/chunks/8-BMqmu7WF.js.map +0 -21
  875. package/frontend/build/server/chunks/9-C5sKo9aY.js +0 -31
  876. package/frontend/build/server/chunks/9-C5sKo9aY.js.map +0 -21
  877. package/frontend/build/server/chunks/BackLink-KxZNqsaq.js +0 -35
  878. package/frontend/build/server/chunks/Badge-B5V-z6pI.js +0 -35
  879. package/frontend/build/server/chunks/_layout.svelte-BjPrZpoG.js +0 -46
  880. package/frontend/build/server/chunks/_page.svelte-B9rjnZWE.js +0 -49
  881. package/frontend/build/server/chunks/_page.svelte-D1aYn1PL.js +0 -49
  882. package/frontend/build/server/chunks/_page.svelte-sbqebZYx.js +0 -206
  883. package/frontend/build/server/chunks/_page.svelte-sbqebZYx.js.map +0 -21
  884. package/frontend/build/server/chunks/client-DyII78e0.js +0 -62
  885. package/frontend/build/server/chunks/common-Db-bgKYG.js +0 -42
  886. package/frontend/build/server/chunks/common-Db-bgKYG.js.map +0 -21
  887. package/frontend/build/server/chunks/constants-cZ2kUwWa.js +0 -41
  888. package/frontend/build/server/chunks/constants-cZ2kUwWa.js.map +0 -21
  889. package/frontend/build/server/chunks/error.svelte-BDW3iP1O.js +0 -50
  890. package/frontend/build/server/chunks/index-server-Dr2Nvcmu.js +0 -36
  891. package/frontend/build/server/chunks/index-server-Dr2Nvcmu.js.map +0 -21
  892. package/frontend/build/server/chunks/reports-DnYbvluH.js +0 -45
  893. package/frontend/build/server/chunks/repository-D9Derhnk.js.map +0 -21
  894. package/frontend/build/server/chunks/runner-DE5sufZH.js +0 -54
  895. package/frontend/build/server/chunks/runner-DE5sufZH.js.map +0 -21
  896. package/frontend/build/server/chunks/stores-DlkXV308.js +0 -49
  897. package/frontend/build/server/chunks/theme-D_NKm6iI.js +0 -32
  898. package/frontend/build/server/chunks/theme-D_NKm6iI.js.map +0 -21
  899. package/resources/gpl-3.0-license.txt +0 -14
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
1
  .page.svelte-1fbs494{min-height:100vh;background:var(--bg);display:flex;align-items:center;justify-content:center;padding:1rem}.checking.svelte-1fbs494{color:var(--text-muted);font-size:.875rem}.card.svelte-1fbs494{width:100%;max-width:400px;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-lg);padding:2.5rem 2rem;display:flex;flex-direction:column;gap:1.25rem}.brand.svelte-1fbs494{font-size:1.5rem;letter-spacing:-.02em;margin-bottom:-.25rem}.brand-serif.svelte-1fbs494{font-family:var(--font-display);font-weight:400;color:var(--accent)}.brand-sans.svelte-1fbs494{font-family:var(--font-body);font-weight:400;color:var(--text)}.heading.svelte-1fbs494{display:flex;flex-direction:column;gap:.25rem}.title.svelte-1fbs494{font-size:1.4rem;font-weight:600;color:var(--text);margin:0}.subtitle.svelte-1fbs494{font-size:.875rem;color:var(--text-muted);margin:0}.fields.svelte-1fbs494{display:flex;flex-direction:column;gap:.875rem}.field.svelte-1fbs494{display:flex;flex-direction:column;gap:.375rem}.label.svelte-1fbs494{font-size:.8125rem;font-weight:500;color:var(--text)}.input.svelte-1fbs494{height:38px;padding:0 .75rem;font-family:var(--font-body);font-size:.875rem;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);outline:none;transition:border-color var(--duration-fast)}.input.svelte-1fbs494:focus{border-color:var(--accent)}.error.svelte-1fbs494{font-size:.8125rem;color:var(--fail);margin:-.25rem 0 0}.submit-btn.svelte-1fbs494{height:40px;background:var(--accent);color:var(--white);border:none;border-radius:var(--radius-sm);font-family:var(--font-body);font-size:.875rem;font-weight:500;cursor:pointer;transition:opacity var(--duration-fast)}.submit-btn.svelte-1fbs494:disabled{opacity:.5;cursor:not-allowed}.submit-btn.svelte-1fbs494:not(:disabled):hover{opacity:.88}
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
1
  import{e as S,r as h,u as k,q,S as T}from"./BAACMRH5.js";function t(r,i){return r===i||(r==null?void 0:r[T])===i}function A(r={},i,a,c){return S(()=>{var f,s;return h(()=>{f=s,s=[],k(()=>{r!==a(...s)&&(i(r,...s),f&&t(a(...f),r)&&i(null,...f))})}),()=>{q(()=>{s&&t(a(...s),r)&&i(null,...s)})}}),r}export{A as b};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
- import{A as n}from"./4N1zIH8t.js";import{a as c}from"./C1Vid6wz.js";function s(){return{Authorization:`Bearer ${c.getToken()}`}}async function p(){const e=await fetch(`${n}/settings/project`,{headers:s()});return e.ok?e.json():{name:"",logoUrl:"",timezone:"UTC",maxRetries:0}}async function h({name:e,logoUrl:t,timezone:a,maxRetries:o}){return(await fetch(`${n}/settings/project`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({name:e,logoUrl:t,timezone:a,maxRetries:o})})).json()}async function d(){const e=await fetch(`${n}/backup/export`,{headers:s()});if(!e.ok)throw new Error("Export failed");return e.json()}async function y(e){return(await fetch(`${n}/backup/import`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify(e)})).json()}async function k(){const e=await fetch(`${n}/backup/config`,{headers:s()});return e.ok?e.json():{backupEnabled:!1,backupCron:"0 2 * * *",backupS3Endpoint:"",backupS3Region:"",backupS3Bucket:"",backupS3AccessKey:"",backupS3SecretKeySet:!1,backupS3Prefix:"",backupLastRunAt:null,backupLastStatus:""}}async function g(e){return(await fetch(`${n}/backup/config`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify(e)})).json()}async function j(e){return(await fetch(`${n}/backup/test-s3`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify(e)})).json()}async function S(){return(await fetch(`${n}/backup/run-now`,{method:"POST",headers:s()})).json()}async function b(){const e=await fetch(`${n}/settings/integrations`,{headers:s()});return e.ok?e.json():{discordWebhookUrl:"",slackWebhookUrl:"",notifyPublicUrl:""}}async function m({discordWebhookUrl:e,slackWebhookUrl:t,notifyPublicUrl:a}){return(await fetch(`${n}/settings/integrations`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({discordWebhookUrl:e,slackWebhookUrl:t,notifyPublicUrl:a})})).json()}async function $(){const e=await fetch(`${n}/settings/mcp`,{headers:s()});return e.ok?e.json():{mcpKeySet:!1,mcpKey:""}}async function w(){const e=await fetch(`${n}/settings/mcp/generate`,{method:"POST",headers:s()});if(!e.ok)throw new Error("Failed to generate key");return e.json()}function r(){return{Authorization:`Bearer ${c.getToken()}`}}async function l(){const e=await fetch(`${n}/runners`,{headers:r()}),{runners:t}=await e.json();return t}async function T(e){return(await fetch(`${n}/runners`,{method:"POST",headers:{"Content-Type":"application/json",...r()},body:JSON.stringify(e)})).json()}async function O(e){return(await fetch(`${n}/runners/${e}`,{method:"DELETE",headers:r()})).json()}async function P(e,t){return(await fetch(`${n}/runners/${e}`,{method:"PUT",headers:{"Content-Type":"application/json",...r()},body:JSON.stringify(t)})).json()}async function C(e){return(await fetch(`${n}/runners/${e}/ping`,{method:"POST",headers:r()})).json()}async function R(e){return(await fetch(`${n}/runners/${e}/stop`,{method:"POST",headers:r()})).json()}async function B(e){return(await fetch(`${n}/runners/${e}/restart`,{method:"POST",headers:r()})).json()}async function E(e,t){return(await fetch(`${n}/runners/probe`,{method:"POST",headers:{"Content-Type":"application/json",...r()},body:JSON.stringify({url:e,token:t})})).json()}export{b as a,p as b,$ as c,k as d,E as e,l as f,R as g,O as h,T as i,m as j,w as k,d as l,y as m,g as n,S as o,C as p,B as r,h as s,j as t,P as u};
1
+ import{A as n}from"./CUC98kMZ.js";import{a as c}from"./C1Vid6wz.js";function s(){return{Authorization:`Bearer ${c.getToken()}`}}async function p(){const e=await fetch(`${n}/settings/project`,{headers:s()});return e.ok?e.json():{name:"",logoUrl:"",timezone:"UTC",maxRetries:0}}async function h({name:e,logoUrl:t,timezone:a,maxRetries:o}){return(await fetch(`${n}/settings/project`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({name:e,logoUrl:t,timezone:a,maxRetries:o})})).json()}async function d(){const e=await fetch(`${n}/backup/export`,{headers:s()});if(!e.ok)throw new Error("Export failed");return e.json()}async function y(e){return(await fetch(`${n}/backup/import`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify(e)})).json()}async function k(){const e=await fetch(`${n}/backup/config`,{headers:s()});return e.ok?e.json():{backupEnabled:!1,backupCron:"0 2 * * *",backupS3Endpoint:"",backupS3Region:"",backupS3Bucket:"",backupS3AccessKey:"",backupS3SecretKeySet:!1,backupS3Prefix:"",backupLastRunAt:null,backupLastStatus:""}}async function g(e){return(await fetch(`${n}/backup/config`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify(e)})).json()}async function j(e){return(await fetch(`${n}/backup/test-s3`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify(e)})).json()}async function S(){return(await fetch(`${n}/backup/run-now`,{method:"POST",headers:s()})).json()}async function b(){const e=await fetch(`${n}/settings/integrations`,{headers:s()});return e.ok?e.json():{discordWebhookUrl:"",slackWebhookUrl:"",notifyPublicUrl:""}}async function m({discordWebhookUrl:e,slackWebhookUrl:t,notifyPublicUrl:a}){return(await fetch(`${n}/settings/integrations`,{method:"POST",headers:{"Content-Type":"application/json",...s()},body:JSON.stringify({discordWebhookUrl:e,slackWebhookUrl:t,notifyPublicUrl:a})})).json()}async function $(){const e=await fetch(`${n}/settings/mcp`,{headers:s()});return e.ok?e.json():{mcpKeySet:!1,mcpKey:""}}async function w(){const e=await fetch(`${n}/settings/mcp/generate`,{method:"POST",headers:s()});if(!e.ok)throw new Error("Failed to generate key");return e.json()}function r(){return{Authorization:`Bearer ${c.getToken()}`}}async function l(){const e=await fetch(`${n}/runners`,{headers:r()}),{runners:t}=await e.json();return t}async function T(e){return(await fetch(`${n}/runners`,{method:"POST",headers:{"Content-Type":"application/json",...r()},body:JSON.stringify(e)})).json()}async function O(e){return(await fetch(`${n}/runners/${e}`,{method:"DELETE",headers:r()})).json()}async function P(e,t){return(await fetch(`${n}/runners/${e}`,{method:"PUT",headers:{"Content-Type":"application/json",...r()},body:JSON.stringify(t)})).json()}async function C(e){return(await fetch(`${n}/runners/${e}/ping`,{method:"POST",headers:r()})).json()}async function R(e){return(await fetch(`${n}/runners/${e}/stop`,{method:"POST",headers:r()})).json()}async function B(e){return(await fetch(`${n}/runners/${e}/restart`,{method:"POST",headers:r()})).json()}async function E(e,t){return(await fetch(`${n}/runners/probe`,{method:"POST",headers:{"Content-Type":"application/json",...r()},body:JSON.stringify({url:e,token:t})})).json()}export{b as a,p as b,$ as c,k as d,E as e,l as f,R as g,O as h,T as i,m as j,w as k,d as l,y as m,g as n,S as o,C as p,B as r,h as s,j as t,P as u};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
1
  const Pn=16;const Un=8192;const qn=32768,Mn=65536,Hn=131072,Vn=524288;const ct=Symbol("$state"),Wn=Symbol("legacy props"),jn=Symbol(""),tt=!1;var zt=Array.isArray,Zt=Array.prototype.indexOf,$n=Array.from,Gn=Object.defineProperty,Et=Object.getOwnPropertyDescriptor,Xt=Object.getOwnPropertyDescriptors,Kn=Object.prototype,zn=Array.prototype,Jt=Object.getPrototypeOf;function Zn(t){return typeof t=="function"}const U=()=>{};function Xn(t){return t()}function dt(t){for(var n=0;n<t.length;n++)t[n]()}const Qt=typeof requestIdleCallback>"u"?t=>setTimeout(t,1):requestIdleCallback;let H=!1,V=!1,nt=[],et=[];function Dt(){H=!1;const t=nt.slice();nt=[],dt(t)}function Nt(){V=!1;const t=et.slice();et=[],dt(t)}function Jn(t){H||(H=!0,queueMicrotask(Dt)),nt.push(t)}function Qn(t){V||(V=!0,Qt(Nt)),et.push(t)}function tn(){H&&Dt(),V&&Nt()}function Rt(t){return t===this.v}function Ct(t,n){return t!=t?n==n:t!==n||t!==null&&typeof t=="object"||typeof t=="function"}function te(t,n){return t!==n}function At(t){return!Ct(t,this.v)}function nn(t){throw new Error("https://svelte.dev/e/effect_in_teardown")}function en(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function rn(t){throw new Error("https://svelte.dev/e/effect_orphan")}function sn(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function ne(){throw new Error("https://svelte.dev/e/hydration_failed")}function an(t){throw new Error("https://svelte.dev/e/lifecycle_legacy_only")}function ee(t){throw new Error("https://svelte.dev/e/props_invalid_value")}function re(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function se(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function ln(){throw new Error("https://svelte.dev/e/state_unsafe_local_read")}function un(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}let P=!1,on=!1;function ae(){P=!0}const le=1,ue=2,oe=4,fe=8,ie=16,_e=1,ce=2,Ee=4,ve=8,pe=16,he=1,Te=2,de=4,De=1,Ne=2,fn="[",_n="[!",cn="]",yt={},Re=Symbol();function Ft(t){console.warn("https://svelte.dev/e/hydration_mismatch")}function K(t){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}let o=null;function vt(t){o=t}function Ce(t,n=!1,e){o={p:o,c:null,e:null,m:!1,s:t,x:null,l:null},P&&!n&&(o.l={s:null,u:null,r1:[],r2:ut(!1)})}function Ae(t){const n=o;if(n!==null){const l=n.e;if(l!==null){var e=_,r=i;n.e=null;try{for(var s=0;s<l.length;s++){var a=l[s];j(a.effect),W(a.reaction),Ht(a.fn)}}finally{j(e),W(r)}}o=n.p,n.m=!0}return{}}function z(){return!P||o!==null&&o.l===null}function ut(t,n){var e={f:0,v:t,reactions:null,equals:Rt,rv:0,wv:0};return e}function ye(t){return It(ut(t))}function En(t,n=!1){var r;const e=ut(t);return n||(e.equals=At),P&&o!==null&&o.l!==null&&((r=o.l).s??(r.s=[])).push(e),e}function Fe(t,n=!1){return It(En(t,n))}function It(t){return i!==null&&!N&&i.f&2&&(R===null?Dn([t]):R.push(t)),t}function Ie(t,n){return ot(t,m(()=>Q(t))),n}function ot(t,n){return i!==null&&!N&&z()&&i.f&18&&(R===null||!R.includes(t))&&un(),rt(t,n)}function rt(t,n){return t.equals(n)||(t.v,t.v=n,t.wv=xt(),wt(t,2048),z()&&_!==null&&_.f&1024&&!(_.f&96)&&(C===null?Nn([t]):C.push(t))),n}function we(t,n=1){var e=Q(t),r=n===1?e++:e--;return ot(t,e),r}function wt(t,n){var e=t.reactions;if(e!==null)for(var r=z(),s=e.length,a=0;a<s;a++){var l=e[a],u=l.f;u&2048||!r&&l===_||(D(l,n),u&1280&&(u&2?wt(l,4096):J(l)))}}function Ot(t){var n=2050,e=i!==null&&i.f&2?i:null;return _===null||e!==null&&e.f&256?n|=256:_.f|=1048576,{ctx:o,deps:null,effects:null,equals:Rt,f:n,fn:t,reactions:null,rv:0,v:null,wv:0,parent:e??_}}function Oe(t){const n=Ot(t);return n.equals=At,n}function mt(t){var n=t.effects;if(n!==null){t.effects=null;for(var e=0;e<n.length;e+=1)w(n[e])}}function vn(t){for(var n=t.parent;n!==null;){if(!(n.f&2))return n;n=n.parent}return null}function pn(t){var n,e=_;j(vn(t));try{mt(t),n=Bt(t)}finally{j(e)}return n}function gt(t){var n=pn(t),e=(A||t.f&256)&&t.deps!==null?4096:1024;D(t,e),t.equals(n)||(t.v=n,t.wv=xt())}let I=!1;function me(t){I=t}let d;function x(t){if(t===null)throw Ft(),yt;return d=t}function ge(){return x(O(d))}function Se(t){if(I){if(O(d)!==null)throw Ft(),yt;d=t}}function be(t=1){if(I){for(var n=t,e=d;n--;)e=O(e);d=e}}function Ye(){for(var t=0,n=d;;){if(n.nodeType===8){var e=n.data;if(e===cn){if(t===0)return n;t-=1}else(e===fn||e===_n)&&(t+=1)}var r=O(n);n.remove(),n=r}}var pt,hn,Tn,St,bt;function ke(){if(pt===void 0){pt=window,hn=document,Tn=/Firefox/.test(navigator.userAgent);var t=Element.prototype,n=Node.prototype;St=Et(n,"firstChild").get,bt=Et(n,"nextSibling").get,t.__click=void 0,t.__className="",t.__attributes=null,t.__styles=null,t.__e=void 0,Text.prototype.__t=void 0}}function st(t=""){return document.createTextNode(t)}function at(t){return St.call(t)}function O(t){return bt.call(t)}function xe(t,n){if(!I)return at(t);var e=at(d);if(e===null)e=d.appendChild(st());else if(n&&e.nodeType!==3){var r=st();return e==null||e.before(r),x(r),r}return x(e),e}function Le(t,n){if(!I){var e=at(t);return e instanceof Comment&&e.data===""?O(e):e}return d}function Be(t,n=1,e=!1){let r=I?d:t;for(var s;n--;)s=r,r=O(r);if(!I)return r;var a=r==null?void 0:r.nodeType;if(e&&a!==3){var l=st();return r===null?s==null||s.after(l):r.before(l),x(l),l}return x(r),r}function Pe(t){t.textContent=""}const Yt=0,dn=1;let q=!1,M=Yt,L=!1,B=null,S=!1,ft=!1;function ht(t){S=t}function Tt(t){ft=t}let F=[],b=0;let i=null,N=!1;function W(t){i=t}let _=null;function j(t){_=t}let R=null;function Dn(t){R=t}let E=null,T=0,C=null;function Nn(t){C=t}let kt=1,$=0,A=!1,y=null;function xt(){return++kt}function Y(t){var p;var n=t.f;if(n&2048)return!0;if(n&4096){var e=t.deps,r=(n&256)!==0;if(e!==null){var s,a,l=(n&512)!==0,u=r&&_!==null&&!A,c=e.length;if(l||u){var f=t,v=f.parent;for(s=0;s<c;s++)a=e[s],(l||!((p=a==null?void 0:a.reactions)!=null&&p.includes(f)))&&(a.reactions??(a.reactions=[])).push(f);l&&(f.f^=512),u&&v!==null&&!(v.f&256)&&(f.f^=256)}for(s=0;s<c;s++)if(a=e[s],Y(a)&&gt(a),a.wv>t.wv)return!0}(!r||_!==null&&!A)&&D(t,1024)}return!1}function Rn(t,n){for(var e=n;e!==null;){if(e.f&128)try{e.fn(t);return}catch{e.f^=128}e=e.parent}throw q=!1,t}function Cn(t){return(t.f&16384)===0&&(t.parent===null||(t.parent.f&128)===0)}function Z(t,n,e,r){if(q){if(e===null&&(q=!1),Cn(n))throw t;return}e!==null&&(q=!0);{Rn(t,n);return}}function Lt(t,n,e=!0){var r=t.reactions;if(r!==null)for(var s=0;s<r.length;s++){var a=r[s];a.f&2?Lt(a,n,!1):n===a&&(e?D(a,2048):a.f&1024&&D(a,4096),J(a))}}function Bt(t){var _t;var n=E,e=T,r=C,s=i,a=A,l=R,u=o,c=N,f=t.f;E=null,T=0,C=null,i=f&96?null:t,A=(f&256)!==0&&(!S||s===null||c),R=null,vt(t.ctx),N=!1,$++;try{var v=(0,t.fn)(),p=t.deps;if(E!==null){var h;if(G(t,T),p!==null&&T>0)for(p.length=T+E.length,h=0;h<E.length;h++)p[T+h]=E[h];else t.deps=p=E;if(!A)for(h=T;h<p.length;h++)((_t=p[h]).reactions??(_t.reactions=[])).push(t)}else p!==null&&T<p.length&&(G(t,T),p.length=T);if(z()&&C!==null&&!N&&p!==null&&!(t.f&6146))for(h=0;h<C.length;h++)Lt(C[h],t);return s!==null&&$++,v}finally{E=n,T=e,C=r,i=s,A=a,R=l,vt(u),N=c}}function An(t,n){let e=n.reactions;if(e!==null){var r=Zt.call(e,t);if(r!==-1){var s=e.length-1;s===0?e=n.reactions=null:(e[r]=e[s],e.pop())}}e===null&&n.f&2&&(E===null||!E.includes(n))&&(D(n,4096),n.f&768||(n.f^=512),mt(n),G(n,0))}function G(t,n){var e=t.deps;if(e!==null)for(var r=n;r<e.length;r++)An(t,e[r])}function X(t){var n=t.f;if(!(n&16384)){D(t,1024);var e=_,r=o;_=t;try{n&16?bn(t):Wt(t),Vt(t);var s=Bt(t);t.teardown=typeof s=="function"?s:null,t.wv=kt;var a=t.deps,l;tt&&on&&t.f&2048}catch(u){Z(u,t,e,r||t.ctx)}finally{_=e}}}function Pt(){if(b>1e3){b=0;try{sn()}catch(t){if(B!==null)Z(t,B,null);else throw t}}b++}function Ut(t){var n=t.length;if(n!==0){Pt();var e=S;S=!0;try{for(var r=0;r<n;r++){var s=t[r];s.f&1024||(s.f^=1024);var a=In(s);yn(a)}}finally{S=e}}}function yn(t){var n=t.length;if(n!==0)for(var e=0;e<n;e++){var r=t[e];if(!(r.f&24576))try{Y(r)&&(X(r),r.deps===null&&r.first===null&&r.nodes_start===null&&(r.teardown===null?jt(r):r.fn=null))}catch(s){Z(s,r,null,r.ctx)}}}function Fn(){if(L=!1,b>1001)return;const t=F;F=[],Ut(t),L||(b=0,B=null)}function J(t){M===Yt&&(L||(L=!0,queueMicrotask(Fn))),B=t;for(var n=t;n.parent!==null;){n=n.parent;var e=n.f;if(e&96){if(!(e&1024))return;n.f^=1024}}F.push(n)}function In(t){var n=[],e=t.first;t:for(;e!==null;){var r=e.f,s=(r&32)!==0,a=s&&(r&1024)!==0,l=e.next;if(!a&&!(r&8192)){if(r&4)n.push(e);else if(s)e.f^=1024;else{var u=i;try{i=e,Y(e)&&X(e)}catch(v){Z(v,e,null,e.ctx)}finally{i=u}}var c=e.first;if(c!==null){e=c;continue}}if(l===null){let v=e.parent;for(;v!==null;){if(t===v)break t;var f=v.next;if(f!==null){e=f;continue t}v=v.parent}}e=l}return n}function qt(t){var n=M,e=F;try{Pt();const s=[];M=dn,F=s,L=!1,Ut(e);var r=t==null?void 0:t();return tn(),(F.length>0||s.length>0)&&qt(),b=0,B=null,r}finally{M=n,F=e}}async function Ue(){await Promise.resolve(),qt()}function Q(t){var n=t.f,e=(n&2)!==0;if(y!==null&&y.add(t),i!==null&&!N){R!==null&&R.includes(t)&&ln();var r=i.deps;t.rv<$&&(t.rv=$,E===null&&r!==null&&r[T]===t?T++:E===null?E=[t]:(!A||!E.includes(t))&&E.push(t))}else if(e&&t.deps===null&&t.effects===null){var s=t,a=s.parent;a!==null&&!(a.f&256)&&(s.f^=256)}return e&&(s=t,Y(s)&&gt(s)),t.v}function wn(t){var n=y;y=new Set;var e=y,r;try{if(m(t),n!==null)for(r of y)n.add(r)}finally{y=n}return e}function qe(t){var n=wn(()=>m(t));for(var e of n)if(e.f&131072)for(const r of e.deps||[])r.f&2||rt(r,r.v);else rt(e,e.v)}function m(t){var n=N;try{return N=!0,t()}finally{N=n}}const On=-7169;function D(t,n){t.f=t.f&On|n}function Me(t){if(!(typeof t!="object"||!t||t instanceof EventTarget)){if(ct in t)lt(t);else if(!Array.isArray(t))for(let n in t){const e=t[n];typeof e=="object"&&e&&ct in e&&lt(e)}}}function lt(t,n=new Set){if(typeof t=="object"&&t!==null&&!(t instanceof EventTarget)&&!n.has(t)){n.add(t),t instanceof Date&&t.getTime();for(let r in t)try{lt(t[r],n)}catch{}const e=Jt(t);if(e!==Object.prototype&&e!==Array.prototype&&e!==Map.prototype&&e!==Set.prototype&&e!==Date.prototype){const r=Xt(e);for(let s in r){const a=r[s].get;if(a)try{a.call(t)}catch{}}}}}function Mt(t){_===null&&i===null&&rn(),i!==null&&i.f&256&&_===null&&en(),ft&&nn()}function mn(t,n){var e=n.last;e===null?n.last=n.first=t:(e.next=t,t.prev=e,n.last=t)}function k(t,n,e,r=!0){var s=(t&64)!==0,a=_,l={ctx:o,deps:null,nodes_start:null,nodes_end:null,f:t|2048,first:null,fn:n,last:null,next:null,parent:s?null:a,prev:null,teardown:null,transitions:null,wv:0};if(e){var u=S;try{ht(!0),X(l),l.f|=32768}catch(v){throw w(l),v}finally{ht(u)}}else n!==null&&J(l);var c=e&&l.deps===null&&l.first===null&&l.nodes_start===null&&l.teardown===null&&(l.f&1048704)===0;if(!c&&!s&&r&&(a!==null&&mn(l,a),i!==null&&i.f&2)){var f=i;(f.effects??(f.effects=[])).push(l)}return l}function He(t){const n=k(8,null,!1);return D(n,1024),n.teardown=t,n}function gn(t){Mt();var n=_!==null&&(_.f&32)!==0&&o!==null&&!o.m;if(n){var e=o;(e.e??(e.e=[])).push({fn:t,effect:_,reaction:i})}else{var r=Ht(t);return r}}function Ve(t){return Mt(),it(t)}function We(t){const n=k(64,t,!0);return(e={})=>new Promise(r=>{e.outro?Yn(n,()=>{w(n),r(void 0)}):(w(n),r(void 0))})}function Ht(t){return k(4,t,!1)}function je(t,n){var e=o,r={effect:null,ran:!1};e.l.r1.push(r),r.effect=it(()=>{t(),!r.ran&&(r.ran=!0,ot(e.l.r2,!0),m(n))})}function $e(){var t=o;it(()=>{if(Q(t.l.r2)){for(var n of t.l.r1){var e=n.effect;e.f&1024&&D(e,4096),Y(e)&&X(e),n.ran=!1}t.l.r2.v=!1}})}function it(t){return k(8,t,!0)}function Ge(t,n=[],e=Ot){const r=n.map(e);return Sn(()=>t(...r.map(Q)))}function Sn(t,n=0){return k(24|n,t,!0)}function Ke(t,n=!0){return k(40,t,!0,n)}function Vt(t){var n=t.teardown;if(n!==null){const e=ft,r=i;Tt(!0),W(null);try{n.call(null)}finally{Tt(e),W(r)}}}function Wt(t,n=!1){var e=t.first;for(t.first=t.last=null;e!==null;){var r=e.next;w(e,n),e=r}}function bn(t){for(var n=t.first;n!==null;){var e=n.next;n.f&32||w(n),n=e}}function w(t,n=!0){var e=!1;if((n||t.f&524288)&&t.nodes_start!==null){for(var r=t.nodes_start,s=t.nodes_end;r!==null;){var a=r===s?null:O(r);r.remove(),r=a}e=!0}Wt(t,n&&!e),G(t,0),D(t,16384);var l=t.transitions;if(l!==null)for(const c of l)c.stop();Vt(t);var u=t.parent;u!==null&&u.first!==null&&jt(t),t.next=t.prev=t.teardown=t.ctx=t.deps=t.fn=t.nodes_start=t.nodes_end=null}function jt(t){var n=t.parent,e=t.prev,r=t.next;e!==null&&(e.next=r),r!==null&&(r.prev=e),n!==null&&(n.first===t&&(n.first=r),n.last===t&&(n.last=e))}function Yn(t,n){var e=[];$t(t,e,!0),kn(e,()=>{w(t),n&&n()})}function kn(t,n){var e=t.length;if(e>0){var r=()=>--e||n();for(var s of t)s.out(r)}else n()}function $t(t,n,e){if(!(t.f&8192)){if(t.f^=8192,t.transitions!==null)for(const l of t.transitions)(l.is_global||e)&&n.push(l);for(var r=t.first;r!==null;){var s=r.next,a=(r.f&65536)!==0||(r.f&32)!==0;$t(r,n,a?e:!1),r=s}}}function ze(t){Gt(t,!0)}function Gt(t,n){if(t.f&8192){t.f^=8192,t.f&1024||(t.f^=1024),Y(t)&&(D(t,2048),J(t));for(var e=t.first;e!==null;){var r=e.next,s=(e.f&65536)!==0||(e.f&32)!==0;Gt(e,s?n:!1),e=r}if(t.transitions!==null)for(const a of t.transitions)(a.is_global||n)&&a.in()}}function xn(t){o===null&&K(),P&&o.l!==null?Kt(o).m.push(t):gn(()=>{const n=m(t);if(typeof n=="function")return n})}function Ze(t){o===null&&K(),xn(()=>()=>m(t))}function Ln(t,n,{bubbles:e=!1,cancelable:r=!1}={}){return new CustomEvent(t,{detail:n,bubbles:e,cancelable:r})}function Xe(){const t=o;return t===null&&K(),(n,e,r)=>{var a;const s=(a=t.s.$$events)==null?void 0:a[n];if(s){const l=zt(s)?s.slice():[s],u=Ln(n,e,r);for(const c of l)c.call(t.x,u);return!u.defaultPrevented}return!0}}function Je(t){o===null&&K(),o.l===null&&an(),Kt(o).a.push(t)}function Kt(t){var n=t.l;return n.u??(n.u={a:[],b:[],m:[]})}function Bn(t,n,e){if(t==null)return n(void 0),U;const r=m(()=>t.subscribe(n,e));return r.unsubscribe?()=>r.unsubscribe():r}const g=[];function Qe(t,n=U){let e=null;const r=new Set;function s(u){if(Ct(t,u)&&(t=u,e)){const c=!g.length;for(const f of r)f[1](),g.push(f,t);if(c){for(let f=0;f<g.length;f+=2)g[f][0](g[f+1]);g.length=0}}}function a(u){s(u(t))}function l(u,c=U){const f=[u,c];return r.add(f),r.size===1&&(e=n(s,a)||U),u(t),()=>{r.delete(f),r.size===0&&e&&(e(),e=null)}}return{set:s,update:a,subscribe:l}}function tr(t){let n;return Bn(t,e=>n=e)(),n}export{hn as $,Xe as A,tr as B,Kn as C,zn as D,ut as E,se as F,Et as G,_ as H,re as I,Jt as J,ee as K,Hn as L,At as M,ve as N,Wn as O,Ee as P,P as Q,ce as R,ct as S,_e as T,Re as U,Ot as V,En as W,pe as X,y as Y,Sn as Z,ge as _,z as a,Ft as a$,Mn as a0,_n as a1,Ye as a2,x as a3,me as a4,ze as a5,Ke as a6,Yn as a7,d as a8,U as a9,$n as aA,le as aB,rt as aC,ue as aD,fe as aE,$t as aF,Pe as aG,kn as aH,w as aI,ie as aJ,O as aK,Pn as aL,qn as aM,de as aN,Zn as aO,W as aP,j as aQ,i as aR,he as aS,Te as aT,Vn as aU,fn as aV,Tn as aW,De as aX,Ne as aY,ke as aZ,yt as a_,Bn as aa,He as ab,Gn as ac,o as ad,Ve as ae,gn as af,dt as ag,Xn as ah,Me as ai,ae as aj,te as ak,Ct as al,Je as am,Ze as an,we as ao,pt as ap,Xt as aq,Qn as ar,jn as as,qt as at,ye as au,st as av,oe as aw,at as ax,cn as ay,Un as az,$e as b,ne as b0,We as b1,Ae as c,xe as d,Ht as e,Le as f,Q as g,I as h,zt as i,Be as j,Se as k,je as l,Fe as m,be as n,xn as o,Ce as p,Jn as q,it as r,ot as s,Ge as t,m as u,qe as v,Qe as w,Oe as x,Ie as y,Ue as z};
@@ -0,0 +1 @@
1
+ import{p as t}from"./CUC98kMZ.js";const e="Test Repository",E="Name",o="Description",_="Priority",n="Title",T="Name is required.",c="Title is required.",L="Test Repository — Plum",A="Test Repository",S="Manage test suites, cases, and track manual test runs.",i="+ New Suite",D="+ New Run",d="Suites",I="Test Runs",R="Search by ID or name…",N="No results",u="Cases",O="Suites",C="automated",r="Delete suite",l="Delete run",U="Duplicate run",p="No test suites yet",B="Create your first suite to start organising test cases.",P="No test runs yet",b="Create a test run to start executing and tracking manual tests.",F="New Test Suite",M="New Test Run",m="Login flows",h="What this suite covers…",$="Sprint 12 regression",g="Duplicate Run",y="Duplicate",H="? A copy will be added at the top of the list.",G="Failed to load data",f="Failed to delete suite.",k="Failed to duplicate run.",Y="Failed to delete run.",v=s=>`Nothing matches "${s}".`,w=s=>`by ${s}`,x=s=>`${s} ${t(s,"case")}`,W=s=>s?"Creating…":"Create Suite",K=s=>s?"Creating…":"Create Run",X=s=>`Delete ${s==="suite"?"Suite":"Run"}`,V=s=>`Suite "${s}" created.`,q=s=>`Suite "${s}" deleted.`,z=s=>`Duplicated as "${s}".`,Q=s=>`Run "${s}" deleted.`,j="Delete Test Case",J="New Test Case",Z="User can log in with valid credentials",ss="What this case verifies…",ts="Create Case",as="Edit Suite",es="Edit suite",Es="Edit case",os="Test Cases",_s="+ Add Case",ns="Filter by ID or name…",Ts="No cases yet",cs="Add your first test case to this suite.",Ls="No cases match",As="Date",Ss="Step",is="Action",Ds="Test Data",ds="Expected Output",Is="Describe the action…",Rs="Optional",Ns="What should happen…",us='No steps. Click "+ Add step" to begin.',Os="+ Add step",Cs="Edit Steps",rs='No steps defined. Click "Edit Steps" to add them.',ls="Steps",Us="History",ps="No history yet. Results appear after test runs or automated builds.",Bs="Automated run ↗",Ps="Report not found",bs="Run not found",Fs="Failed to load suite",Ms="Failed to load case",ms="Failed to delete case.",hs="Test case updated.",$s="Steps saved.",gs="Suite updated.",ys=s=>`${s?`${s.displayId} — ${s.name}`:"Suite"} — Plum`,Hs=s=>`Created by ${s}`,Gs=s=>`${s} created.`,fs=s=>`${s} deleted.`,ks=s=>`${s} ${t(s,"step")}`,Ys=s=>s?"Saving…":"Save Steps",vs=s=>`${s} ↗`,ws="Edit Run",xs="Edit run",Ws="Reopen",Ks="Start Execution",Xs="Stop Execution",Vs="← Edit Run",qs="Mark Complete",zs="Build",Qs="Execute",js="In this run",Js="locked",Zs="No cases in this run.",st="Unassigned",tt="Suite browser",at="Search cases…",et="No matching cases",Et="No cases in this suite",ot="All cases added",_t="No suites available.",nt="This run is not in progress — start execution to record results.",Tt="Toggle steps",ct="Assign to me",Lt="In Progress",At="Pass",St="Fail",it="Blocked",Dt="Skip",dt="Reset to pending",It="↩ Reset",Rt="Failed to add case.",Nt="Run updated.",ut="Run saved.",Ot="Run marked as complete.",Ct="Run reopened.",rt=s=>`${(s==null?void 0:s.title)??"Test Run"} — Plum`,lt=s=>`${s} passed`,Ut=s=>`${s} failed`,pt=s=>`${s} remaining`,Bt=s=>`Data: ${s}`,Pt=s=>`Expected: ${s}`;export{fs as $,B as A,p as B,r as C,y as D,x as E,G as F,w as G,A as H,b as I,P as J,U as K,l as L,v as M,F as N,u as O,L as P,C as Q,I as R,d as S,n as T,O as U,ys as V,j as W,J as X,Z as Y,ss as Z,as as _,S as a,dt as a$,Fs as a0,ms as a1,ts as a2,Gs as a3,gs as a4,e as a5,es as a6,os as a7,_s as a8,Hs as a9,Ps as aA,vs as aB,bs as aC,rt as aD,ws as aE,Nt as aF,xs as aG,zs as aH,Qs as aI,Ws as aJ,js as aK,Tt as aL,Ct as aM,Js as aN,Zs as aO,st as aP,tt as aQ,at as aR,nt as aS,lt as aT,Ut as aU,pt as aV,Lt as aW,At as aX,St as aY,it as aZ,Dt as a_,ns as aa,As as ab,cs as ac,Ts as ad,Ls as ae,ks as af,Ms as ag,ls as ah,Us as ai,Es as aj,hs as ak,Cs as al,Ys as am,Os as an,ps as ao,Bs as ap,$s as aq,us as ar,Ss as as,Is as at,Ds as au,Rs as av,ds as aw,Ns as ax,is as ay,rs as az,g as b,It as b0,Bt as b1,Pt as b2,ct as b3,ut as b4,Rt as b5,Ks as b6,Xs as b7,Vs as b8,qs as b9,et as ba,Et as bb,ot as bc,_t as bd,Ot as be,H as c,E as d,m as e,o as f,h as g,_ as h,W as i,M as j,$ as k,K as l,R as m,f as n,Y as o,X as p,z as q,Q as r,q as s,k as t,T as u,V as v,c as w,i as x,D as y,N as z};
@@ -0,0 +1 @@
1
+ import{c as M,a as r,s as d,t as n,b as j}from"./CMBQQ9RZ.js";import"./CKDtmZUQ.js";import{f as G,d as v,k as o,j as P,t as m}from"./BAACMRH5.js";import{i as b}from"./CgnwuKKO.js";import{s as g,b as Y}from"./TOCyHP97.js";import{p as l}from"./C8OURRSs.js";import{o as q}from"./CUC98kMZ.js";var w=n('<p class="empty-desc svelte-iaevnx"> </p>'),B=n('<div><p class="empty-title svelte-iaevnx"> </p> <!></div>'),C=n("<p><!></p>");function N(u,a){let c=l(a,"title",8,""),x=l(a,"description",8,""),S=l(a,"message",8,q),E=l(a,"size",8,"md");var y=M(),T=G(y);{var h=e=>{var t=B(),s=v(t),p=v(s,!0);o(s);var i=P(s,2);{var z=f=>{var _=w(),A=v(_,!0);o(_),m(()=>d(A,x())),r(f,_)};b(i,f=>{x()&&f(z)})}o(t),m(()=>{g(t,`empty ${E()??""} svelte-iaevnx`),d(p,c())}),r(e,t)},k=e=>{var t=C(),s=v(t);Y(s,a,"default",{},p=>{var i=j();m(()=>d(i,S())),r(p,i)}),o(t),m(()=>g(t,`empty ${E()??""} svelte-iaevnx`)),r(e,t)};b(T,e=>{c()?e(h):e(k,!1)})}r(u,y)}export{N as E};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
- import{A as n,a as c}from"./4N1zIH8t.js";import{a as d}from"./C1Vid6wz.js";function f(){return d.getToken()}function o(){return{"Content-Type":"application/json",Authorization:`Bearer ${f()}`}}async function y({page:t=1,limit:e=c,sortBy:s,sortOrder:r}={}){const a=new URLSearchParams({page:t,limit:e});s&&a.set("sortBy",s),r&&a.set("sortOrder",r);const i=await fetch(`${n}/test-suites?${a}`,{headers:o()});if(!i.ok)throw new Error("Failed to fetch suites");return i.json()}async function $(){const t=await fetch(`${n}/test-suites?withCases=true`,{headers:o()});if(!t.ok)throw new Error("Failed to fetch suites");return(await t.json()).suites}async function l(t){const e=encodeURIComponent(t),[s,r]=await Promise.all([fetch(`${n}/test-suites?q=${e}`,{headers:o()}),fetch(`${n}/test-runs?q=${e}&limit=50`,{headers:o()})]),{suites:a,cases:i}=await s.json(),{runs:u}=await r.json();return{suites:a,cases:i,runs:u}}async function E(t){const e=await fetch(`${n}/test-suites/${t}`,{headers:o()});if(!e.ok)throw new Error("Suite not found");return(await e.json()).suite}async function m({name:t,description:e,priority:s}){const r=await fetch(`${n}/test-suites`,{method:"POST",headers:o(),body:JSON.stringify({name:t,description:e,priority:s})}),a=await r.json();if(!r.ok)throw new Error(a.error??"Failed to create suite");return a.suite}async function S(t,{name:e,description:s,priority:r}){const a=await fetch(`${n}/test-suites/${t}`,{method:"PUT",headers:o(),body:JSON.stringify({name:e,description:s,priority:r})}),i=await a.json();if(!a.ok)throw new Error(i.error??"Failed to update suite");return i.suite}async function p(t){if(!(await fetch(`${n}/test-suites/${t}`,{method:"DELETE",headers:o()})).ok)throw new Error("Failed to delete suite")}async function j(t){const e=await fetch(`${n}/test-cases/${t}`,{headers:o()});if(!e.ok)throw new Error("Test case not found");return(await e.json()).testCase}async function k({suiteId:t,title:e,description:s,priority:r}){const a=await fetch(`${n}/test-cases`,{method:"POST",headers:o(),body:JSON.stringify({suiteId:t,title:e,description:s,priority:r})}),i=await a.json();if(!a.ok)throw new Error(i.error??"Failed to create test case");return i.testCase}async function T(t,{title:e,description:s,priority:r}){const a=await fetch(`${n}/test-cases/${t}`,{method:"PUT",headers:o(),body:JSON.stringify({title:e,description:s,priority:r})}),i=await a.json();if(!a.ok)throw new Error(i.error??"Failed to update test case");return i.testCase}async function g(t,e){const s=await fetch(`${n}/test-cases/${t}/steps`,{method:"PUT",headers:o(),body:JSON.stringify({steps:e})}),r=await s.json();if(!s.ok)throw new Error(r.error??"Failed to save steps");return r.steps}async function P(t){if(!(await fetch(`${n}/test-cases/${t}`,{method:"DELETE",headers:o()})).ok)throw new Error("Failed to delete test case")}async function O({page:t=1,limit:e=c,sortBy:s,sortOrder:r}={}){const a=new URLSearchParams({page:t,limit:e});s&&a.set("sortBy",s),r&&a.set("sortOrder",r);const i=await fetch(`${n}/test-runs?${a}`,{headers:o()});if(!i.ok)throw new Error("Failed to fetch test runs");return i.json()}async function F(t){const e=await fetch(`${n}/test-runs/${t}`,{headers:o()});if(!e.ok)throw new Error("Test run not found");return(await e.json()).run}async function b({title:t,caseIds:e}){const s=await fetch(`${n}/test-runs`,{method:"POST",headers:o(),body:JSON.stringify({title:t,caseIds:e})}),r=await s.json();if(!s.ok)throw new Error(r.error??"Failed to create test run");return r.run}async function R(t,{title:e,status:s,caseIds:r}){const a=await fetch(`${n}/test-runs/${t}`,{method:"PUT",headers:o(),body:JSON.stringify({title:e,status:s,caseIds:r})}),i=await a.json();if(!a.ok)throw new Error(i.error??"Failed to update test run");return i.run}async function C(t){const e=await fetch(`${n}/test-runs/${t}/duplicate`,{method:"POST",headers:o()}),s=await e.json();if(!e.ok)throw new Error(s.error??"Failed to duplicate run");return s.run}async function J(t){if(!(await fetch(`${n}/test-runs/${t}`,{method:"DELETE",headers:o()})).ok)throw new Error("Failed to delete test run")}async function N(t,{status:e,notes:s}){const r=await fetch(`${n}/test-runs/entries/${t}/result`,{method:"POST",headers:o(),body:JSON.stringify({status:e,notes:s})}),a=await r.json();if(!r.ok)throw new Error(a.error??"Failed to record result");return a.entry}async function x(t,e){const s=await fetch(`${n}/test-runs/entries/${t}/assign`,{method:"PUT",headers:o(),body:JSON.stringify({userId:e??null})}),r=await s.json();if(!s.ok)throw new Error(r.error??"Failed to assign entry");return r.entry}async function U(){const t=await fetch(`${n}/users/members`,{headers:o()});if(!t.ok)throw new Error("Failed to fetch members");return(await t.json()).users}async function A(){const t=await fetch(`${n}/settings/test-prefixes`,{headers:o()});if(!t.ok)throw new Error("Failed to fetch prefixes");return t.json()}async function L({testCasePrefix:t,testSuitePrefix:e}){return(await fetch(`${n}/settings/test-prefixes`,{method:"POST",headers:o(),body:JSON.stringify({testCasePrefix:t,testSuitePrefix:e})})).json()}async function v({testCasePrefix:t,testSuitePrefix:e}){return(await fetch(`${n}/settings/test-prefixes/migrate`,{method:"POST",headers:o(),body:JSON.stringify({testCasePrefix:t,testSuitePrefix:e})})).json()}export{O as a,J as b,C as c,p as d,m as e,y as f,b as g,E as h,P as i,k as j,j as k,T as l,g as m,A as n,L as o,v as p,F as q,$ as r,l as s,U as t,S as u,R as v,x as w,N as x};
1
+ import{A as n,a as c}from"./CUC98kMZ.js";import{a as d}from"./C1Vid6wz.js";function f(){return d.getToken()}function o(){return{"Content-Type":"application/json",Authorization:`Bearer ${f()}`}}async function y({page:t=1,limit:e=c,sortBy:s,sortOrder:r}={}){const a=new URLSearchParams({page:t,limit:e});s&&a.set("sortBy",s),r&&a.set("sortOrder",r);const i=await fetch(`${n}/test-suites?${a}`,{headers:o()});if(!i.ok)throw new Error("Failed to fetch suites");return i.json()}async function $(){const t=await fetch(`${n}/test-suites?withCases=true`,{headers:o()});if(!t.ok)throw new Error("Failed to fetch suites");return(await t.json()).suites}async function l(t){const e=encodeURIComponent(t),[s,r]=await Promise.all([fetch(`${n}/test-suites?q=${e}`,{headers:o()}),fetch(`${n}/test-runs?q=${e}&limit=50`,{headers:o()})]),{suites:a,cases:i}=await s.json(),{runs:u}=await r.json();return{suites:a,cases:i,runs:u}}async function E(t){const e=await fetch(`${n}/test-suites/${t}`,{headers:o()});if(!e.ok)throw new Error("Suite not found");return(await e.json()).suite}async function m({name:t,description:e,priority:s}){const r=await fetch(`${n}/test-suites`,{method:"POST",headers:o(),body:JSON.stringify({name:t,description:e,priority:s})}),a=await r.json();if(!r.ok)throw new Error(a.error??"Failed to create suite");return a.suite}async function S(t,{name:e,description:s,priority:r}){const a=await fetch(`${n}/test-suites/${t}`,{method:"PUT",headers:o(),body:JSON.stringify({name:e,description:s,priority:r})}),i=await a.json();if(!a.ok)throw new Error(i.error??"Failed to update suite");return i.suite}async function p(t){if(!(await fetch(`${n}/test-suites/${t}`,{method:"DELETE",headers:o()})).ok)throw new Error("Failed to delete suite")}async function j(t){const e=await fetch(`${n}/test-cases/${t}`,{headers:o()});if(!e.ok)throw new Error("Test case not found");return(await e.json()).testCase}async function k({suiteId:t,title:e,description:s,priority:r}){const a=await fetch(`${n}/test-cases`,{method:"POST",headers:o(),body:JSON.stringify({suiteId:t,title:e,description:s,priority:r})}),i=await a.json();if(!a.ok)throw new Error(i.error??"Failed to create test case");return i.testCase}async function T(t,{title:e,description:s,priority:r}){const a=await fetch(`${n}/test-cases/${t}`,{method:"PUT",headers:o(),body:JSON.stringify({title:e,description:s,priority:r})}),i=await a.json();if(!a.ok)throw new Error(i.error??"Failed to update test case");return i.testCase}async function g(t,e){const s=await fetch(`${n}/test-cases/${t}/steps`,{method:"PUT",headers:o(),body:JSON.stringify({steps:e})}),r=await s.json();if(!s.ok)throw new Error(r.error??"Failed to save steps");return r.steps}async function P(t){if(!(await fetch(`${n}/test-cases/${t}`,{method:"DELETE",headers:o()})).ok)throw new Error("Failed to delete test case")}async function O({page:t=1,limit:e=c,sortBy:s,sortOrder:r}={}){const a=new URLSearchParams({page:t,limit:e});s&&a.set("sortBy",s),r&&a.set("sortOrder",r);const i=await fetch(`${n}/test-runs?${a}`,{headers:o()});if(!i.ok)throw new Error("Failed to fetch test runs");return i.json()}async function F(t){const e=await fetch(`${n}/test-runs/${t}`,{headers:o()});if(!e.ok)throw new Error("Test run not found");return(await e.json()).run}async function b({title:t,caseIds:e}){const s=await fetch(`${n}/test-runs`,{method:"POST",headers:o(),body:JSON.stringify({title:t,caseIds:e})}),r=await s.json();if(!s.ok)throw new Error(r.error??"Failed to create test run");return r.run}async function R(t,{title:e,status:s,caseIds:r}){const a=await fetch(`${n}/test-runs/${t}`,{method:"PUT",headers:o(),body:JSON.stringify({title:e,status:s,caseIds:r})}),i=await a.json();if(!a.ok)throw new Error(i.error??"Failed to update test run");return i.run}async function C(t){const e=await fetch(`${n}/test-runs/${t}/duplicate`,{method:"POST",headers:o()}),s=await e.json();if(!e.ok)throw new Error(s.error??"Failed to duplicate run");return s.run}async function J(t){if(!(await fetch(`${n}/test-runs/${t}`,{method:"DELETE",headers:o()})).ok)throw new Error("Failed to delete test run")}async function N(t,{status:e,notes:s}){const r=await fetch(`${n}/test-runs/entries/${t}/result`,{method:"POST",headers:o(),body:JSON.stringify({status:e,notes:s})}),a=await r.json();if(!r.ok)throw new Error(a.error??"Failed to record result");return a.entry}async function x(t,e){const s=await fetch(`${n}/test-runs/entries/${t}/assign`,{method:"PUT",headers:o(),body:JSON.stringify({userId:e??null})}),r=await s.json();if(!s.ok)throw new Error(r.error??"Failed to assign entry");return r.entry}async function U(){const t=await fetch(`${n}/users/members`,{headers:o()});if(!t.ok)throw new Error("Failed to fetch members");return(await t.json()).users}async function A(){const t=await fetch(`${n}/settings/test-prefixes`,{headers:o()});if(!t.ok)throw new Error("Failed to fetch prefixes");return t.json()}async function L({testCasePrefix:t,testSuitePrefix:e}){return(await fetch(`${n}/settings/test-prefixes`,{method:"POST",headers:o(),body:JSON.stringify({testCasePrefix:t,testSuitePrefix:e})})).json()}async function v({testCasePrefix:t,testSuitePrefix:e}){return(await fetch(`${n}/settings/test-prefixes/migrate`,{method:"POST",headers:o(),body:JSON.stringify({testCasePrefix:t,testSuitePrefix:e})})).json()}export{O as a,J as b,C as c,p as d,m as e,y as f,b as g,E as h,P as i,k as j,j as k,T as l,g as m,A as n,L as o,v as p,F as q,$ as r,l as s,U as t,S as u,R as v,x as w,N as x};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
1
  function p(t){return function(...e){var r=e[0];return r.stopPropagation(),t==null?void 0:t.apply(this,e)}}function o(t){return function(...e){var r=e[0];return r.preventDefault(),t==null?void 0:t.apply(this,e)}}export{o as p,p as s};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
- import{A as r}from"./4N1zIH8t.js";const i=8e3;async function s(o,e={}){const a=new AbortController,t=setTimeout(()=>a.abort(),i);try{return await fetch(o,{...e,signal:a.signal})}finally{clearTimeout(t)}}async function u(){const o=await s(`${r}/auth/needs-setup`);return o.ok?(await o.json()).needsSetup:!1}async function d({name:o,email:e,password:a}){const t=await s(`${r}/auth/setup`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:o,email:e,password:a})}),n=await t.json();if(!t.ok)throw new Error(n.error??"Setup failed");return n}async function p({email:o,password:e}){const a=await s(`${r}/auth/login`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o,password:e})}),t=await a.json();if(!a.ok)throw new Error(t.error??"Login failed");return t}async function h({token:o,name:e,email:a}){const t=await s(`${r}/auth/update-profile`,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o}`},body:JSON.stringify({name:e,email:a})}),n=await t.json();if(!t.ok)throw new Error(n.error??"Failed to update profile");return n}async function f({token:o,currentPassword:e,newPassword:a}){const t=await s(`${r}/auth/change-password`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o}`},body:JSON.stringify({currentPassword:e,newPassword:a})}),n=await t.json();if(!t.ok)throw new Error(n.error??"Failed to change password");return n}export{f as a,u as c,p as l,d as s,h as u};
1
+ import{A as r}from"./CUC98kMZ.js";const i=8e3;async function s(o,e={}){const a=new AbortController,t=setTimeout(()=>a.abort(),i);try{return await fetch(o,{...e,signal:a.signal})}finally{clearTimeout(t)}}async function u(){const o=await s(`${r}/auth/needs-setup`);return o.ok?(await o.json()).needsSetup:!1}async function d({name:o,email:e,password:a}){const t=await s(`${r}/auth/setup`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:o,email:e,password:a})}),n=await t.json();if(!t.ok)throw new Error(n.error??"Setup failed");return n}async function p({email:o,password:e}){const a=await s(`${r}/auth/login`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o,password:e})}),t=await a.json();if(!a.ok)throw new Error(t.error??"Login failed");return t}async function h({token:o,name:e,email:a}){const t=await s(`${r}/auth/update-profile`,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o}`},body:JSON.stringify({name:e,email:a})}),n=await t.json();if(!t.ok)throw new Error(n.error??"Failed to update profile");return n}async function f({token:o,currentPassword:e,newPassword:a}){const t=await s(`${r}/auth/change-password`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o}`},body:JSON.stringify({currentPassword:e,newPassword:a})}),n=await t.json();if(!t.ok)throw new Error(n.error??"Failed to change password");return n}export{f as a,u as c,p as l,d as s,h as u};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
1
  import{w as u}from"./BAACMRH5.js";const e="plum:token",l="plum:user";function s(){let o=null,r=null;try{o=typeof localStorage<"u"?localStorage.getItem(e):null;const t=typeof localStorage<"u"?localStorage.getItem(l):null;r=t?JSON.parse(t):null}catch{}const{subscribe:c,set:a,update:g}=u({token:o,user:r});return{subscribe:c,login(t,n){try{localStorage.setItem(e,t),localStorage.setItem(l,JSON.stringify(n))}catch{}a({token:t,user:n})},logout(){try{localStorage.removeItem(e),localStorage.removeItem(l)}catch{}a({token:null,user:null})},getToken(){try{return localStorage.getItem(e)}catch{return null}}}}const m=s();export{m as a};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
1
  import{S as h,C as B,D as C,E as o,F as G,g as c,U as l,s as b,G as A,H as K,I as V,J as Z,i as $,K as z,L as F,P as H,M as J,u as U,N as Q,O as W,Q as X,R as k,T as p,V as Y,W as ee,X as re,x as ne,Y as te}from"./BAACMRH5.js";import{c as ae}from"./CgnwuKKO.js";function O(n,v=null,R){if(typeof n!="object"||n===null||h in n)return n;const P=Z(n);if(P!==B&&P!==C)return n;var f=new Map,g=$(n),y=o(0);g&&f.set("length",o(n.length));var m;return new Proxy(n,{defineProperty(i,e,r){(!("value"in r)||r.configurable===!1||r.enumerable===!1||r.writable===!1)&&V();var a=f.get(e);return a===void 0?(a=o(r.value),f.set(e,a)):b(a,O(r.value,m)),!0},deleteProperty(i,e){var r=f.get(e);if(r===void 0)e in i&&f.set(e,o(l));else{if(g&&typeof e=="string"){var a=f.get("length"),t=Number(e);Number.isInteger(t)&&t<a.v&&b(a,t)}b(r,l),j(y)}return!0},get(i,e,r){var d;if(e===h)return n;var a=f.get(e),t=e in i;if(a===void 0&&(!t||(d=A(i,e))!=null&&d.writable)&&(a=o(O(t?i[e]:l,m)),f.set(e,a)),a!==void 0){var u=c(a);return u===l?void 0:u}return Reflect.get(i,e,r)},getOwnPropertyDescriptor(i,e){var r=Reflect.getOwnPropertyDescriptor(i,e);if(r&&"value"in r){var a=f.get(e);a&&(r.value=c(a))}else if(r===void 0){var t=f.get(e),u=t==null?void 0:t.v;if(t!==void 0&&u!==l)return{enumerable:!0,configurable:!0,value:u,writable:!0}}return r},has(i,e){var u;if(e===h)return!0;var r=f.get(e),a=r!==void 0&&r.v!==l||Reflect.has(i,e);if(r!==void 0||K!==null&&(!a||(u=A(i,e))!=null&&u.writable)){r===void 0&&(r=o(a?O(i[e],m):l),f.set(e,r));var t=c(r);if(t===l)return!1}return a},set(i,e,r,a){var w;var t=f.get(e),u=e in i;if(g&&e==="length")for(var d=r;d<t.v;d+=1){var I=f.get(d+"");I!==void 0?b(I,l):d in i&&(I=o(l),f.set(d+"",I))}t===void 0?(!u||(w=A(i,e))!=null&&w.writable)&&(t=o(void 0),b(t,O(r,m)),f.set(e,t)):(u=t.v!==l,b(t,O(r,m)));var _=Reflect.getOwnPropertyDescriptor(i,e);if(_!=null&&_.set&&_.set.call(a,r),!u){if(g&&typeof e=="string"){var E=f.get("length"),D=Number(e);Number.isInteger(D)&&D>=E.v&&b(E,D+1)}j(y)}return!0},ownKeys(i){c(y);var e=Reflect.ownKeys(i).filter(t=>{var u=f.get(t);return u===void 0||u.v!==l});for(var[r,a]of f)a.v!==l&&!(r in i)&&e.push(r);return e},setPrototypeOf(){G()}})}function j(n,v=1){b(n,n.v+v)}function q(n){return n!==null&&typeof n=="object"&&h in n?n[h]:n}function ue(n,v){return Object.is(q(n),q(v))}function se(n,v,R,P){var M;var f=(R&p)!==0,g=!X||(R&k)!==0,y=(R&Q)!==0,m=(R&re)!==0,i=!1,e;y?[e,i]=ae(()=>n[v]):e=n[v];var r=h in n||W in n,a=y&&(((M=A(n,v))==null?void 0:M.set)??(r&&v in n&&(s=>n[v]=s)))||void 0,t=P,u=!0,d=!1,I=()=>(d=!0,u&&(u=!1,m?t=U(P):t=P),t);e===void 0&&P!==void 0&&(a&&g&&z(),e=I(),a&&a(e));var _;if(g)_=()=>{var s=n[v];return s===void 0?I():(u=!0,d=!1,s)};else{var E=(f?Y:ne)(()=>n[v]);E.f|=F,_=()=>{var s=c(E);return s!==void 0&&(t=void 0),s===void 0?t:s}}if(!(R&H))return _;if(a){var D=n.$$legacy;return function(s,S){return arguments.length>0?((!g||!S||D||i)&&a(S?_():s),s):_()}}var w=!1,L=!1,x=ee(e),N=Y(()=>{var s=_(),S=c(x);return w?(w=!1,L=!0,S):(L=!1,x.v=s)});return f||(N.equals=J),function(s,S){if(te!==null&&(w=L,_(),c(x)),arguments.length>0){const T=S?c(N):g&&y?O(s):s;return N.equals(T)||(w=!0,b(x,T),d&&t!==void 0&&(t=T),U(()=>c(N))),s}return c(N)}}export{O as a,ue as i,se as p};
@@ -0,0 +1 @@
1
+ import{a as f,t as c,s as v}from"./CMBQQ9RZ.js";import"./CKDtmZUQ.js";import{t as m,d as a,j as d,k as o}from"./BAACMRH5.js";import{s as k}from"./CUC98kMZ.js";import{p as s}from"./C8OURRSs.js";var h=c('<div class="back-row svelte-1qfuc04"><a class="back-link svelte-1qfuc04"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="19" y1="12" x2="5" y2="12"></line><polyline points="12 19 5 12 12 5"></polyline></svg> </a></div>');function y(i,r){let l=s(r,"href",8,"/reports"),n=s(r,"label",8,"Reports");var e=h(),t=a(e),p=d(a(t));o(t),o(e),m(()=>{k(t,"href",l()),v(p,` ${n()??""}`)}),f(i,e)}export{y as B};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
1
  import{ad as g,ae as d,af as c,ag as i,u as m,ah as b,g as p,ai as h,V as v,aj as k}from"./BAACMRH5.js";function x(t=!1){const a=g,e=a.l.u;if(!e)return;let o=()=>h(a.s);if(t){let n=0,s={};const _=v(()=>{let l=!1;const r=a.s;for(const f in r)r[f]!==s[f]&&(s[f]=r[f],l=!0);return l&&n++,n});o=()=>p(_)}e.b.length&&d(()=>{u(a,o),i(e.b)}),c(()=>{const n=m(()=>e.m.map(b));return()=>{for(const s of n)typeof s=="function"&&s()}}),e.a.length&&c(()=>{u(a,o),i(e.a)})}function u(t,a){if(t.l.s)for(const e of t.l.s)p(e);a()}k();export{x as i};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
1
  import{h as v,ax as m,aG as $,aP as A,aQ as P,aR as k,H as R,ab as j,q as K,ac as Q,i as X,av as L,Z as z,aU as J,aV as F,aK as D,a4 as E,a3 as N,a8 as u,aW as ee,aX as Y,aY as re,_ as q,aZ as O,a_ as C,ay as te,a$ as ae,b0 as ne,aA as ie,b1 as se,a6 as oe,p as ue,ad as fe,c as de}from"./BAACMRH5.js";function we(e){v&&m(e)!==null&&$(e)}let H=!1;function le(){H||(H=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var r;if(!e.defaultPrevented)for(const t of e.target.elements)(r=t.__on_r)==null||r.call(t)})},{capture:!0}))}function x(e){var r=k,t=R;A(null),P(null);try{return e()}finally{A(r),P(t)}}function Ee(e,r,t,s=t){e.addEventListener(r,()=>x(t));const n=e.__on_r;n?e.__on_r=()=>{n(),s(!0)}:e.__on_r=()=>s(!0),le()}const ce=new Set,V=new Set;function _e(e,r,t,s={}){function n(a){if(s.capture||b.call(r,a),!a.cancelBubble)return x(()=>t==null?void 0:t.call(this,a))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?K(()=>{r.addEventListener(e,n,s)}):r.addEventListener(e,n,s),n}function Te(e,r,t,s,n){var a={capture:s,passive:n},i=_e(e,r,t,a);(r===document.body||r===window||r===document)&&j(()=>{r.removeEventListener(e,i,a)})}function b(e){var I;var r=this,t=r.ownerDocument,s=e.type,n=((I=e.composedPath)==null?void 0:I.call(e))||[],a=n[0]||e.target,i=0,p=e.__root;if(p){var d=n.indexOf(p);if(d!==-1&&(r===document||r===window)){e.__root=r;return}var l=n.indexOf(r);if(l===-1)return;d<=l&&(i=d)}if(a=n[i]||e.target,a!==r){Q(e,"currentTarget",{configurable:!0,get(){return a||t}});var T=k,c=R;A(null),P(null);try{for(var o,f=[];a!==null;){var y=a.assignedSlot||a.parentNode||a.host||null;try{var g=a["__"+s];if(g!==void 0&&(!a.disabled||e.target===a))if(X(g)){var[G,...Z]=g;G.apply(a,[e,...Z])}else g.call(a,e)}catch(S){o?f.push(S):o=S}if(e.cancelBubble||y===r||y===null)break;a=y}if(o){for(let S of f)queueMicrotask(()=>{throw S});throw o}}finally{e.__root=r,delete e.currentTarget,A(T),P(c)}}}let _;function ve(){_=void 0}function be(e){let r=null,t=v;var s;if(v){for(r=u,_===void 0&&(_=m(document.head));_!==null&&(_.nodeType!==8||_.data!==F);)_=D(_);_===null?E(!1):_=N(D(_))}v||(s=document.head.appendChild(L()));try{z(()=>e(s),J)}finally{t&&(E(!0),_=u,N(r))}}function B(e){var r=document.createElement("template");return r.innerHTML=e,r.content}function h(e,r){var t=R;t.nodes_start===null&&(t.nodes_start=e,t.nodes_end=r)}function Le(e,r){var t=(r&Y)!==0,s=(r&re)!==0,n,a=!e.startsWith("<!>");return()=>{if(v)return h(u,null),u;n===void 0&&(n=B(a?e:"<!>"+e),t||(n=m(n)));var i=s||ee?document.importNode(n,!0):n.cloneNode(!0);if(t){var p=m(i),d=i.lastChild;h(p,d)}else h(i,i);return i}}function Ne(e,r,t="svg"){var s=!e.startsWith("<!>"),n=(r&Y)!==0,a=`<${t}>${s?e:"<!>"+e}</${t}>`,i;return()=>{if(v)return h(u,null),u;if(!i){var p=B(a),d=m(p);if(n)for(i=document.createDocumentFragment();m(d);)i.appendChild(m(d));else i=m(d)}var l=i.cloneNode(!0);if(n){var T=m(l),c=l.lastChild;h(T,c)}else h(l,l);return l}}function Re(e=""){if(!v){var r=L(e+"");return h(r,r),r}var t=u;return t.nodeType!==3&&(t.before(t=L()),N(t)),h(t,t),t}function Se(){if(v)return h(u,null),u;var e=document.createDocumentFragment(),r=document.createComment(""),t=L();return e.append(r,t),h(r,t),e}function Ae(e,r){if(v){R.nodes_end=u,q();return}e!==null&&e.before(r)}const he=["touchstart","touchmove"];function pe(e){return he.includes(e)}let W=!0;function Pe(e,r){var t=r==null?"":typeof r=="object"?r+"":r;t!==(e.__t??(e.__t=e.nodeValue))&&(e.__t=t,e.nodeValue=t+"")}function me(e,r){return U(e,r)}function Ce(e,r){O(),r.intro=r.intro??!1;const t=r.target,s=v,n=u;try{for(var a=m(t);a&&(a.nodeType!==8||a.data!==F);)a=D(a);if(!a)throw C;E(!0),N(a),q();const i=U(e,{...r,anchor:a});if(u===null||u.nodeType!==8||u.data!==te)throw ae(),C;return E(!1),i}catch(i){if(i===C)return r.recover===!1&&ne(),O(),$(t),E(!1),me(e,r);throw i}finally{E(s),N(n),ve()}}const w=new Map;function U(e,{target:r,anchor:t,props:s={},events:n,context:a,intro:i=!0}){O();var p=new Set,d=c=>{for(var o=0;o<c.length;o++){var f=c[o];if(!p.has(f)){p.add(f);var y=pe(f);r.addEventListener(f,b,{passive:y});var g=w.get(f);g===void 0?(document.addEventListener(f,b,{passive:y}),w.set(f,1)):w.set(f,g+1)}}};d(ie(ce)),V.add(d);var l=void 0,T=se(()=>{var c=t??r.appendChild(L());return oe(()=>{if(a){ue({});var o=fe;o.c=a}n&&(s.$$events=n),v&&h(c,null),W=i,l=e(c,s)||{},W=!0,v&&(R.nodes_end=u),a&&de()}),()=>{var y;for(var o of p){r.removeEventListener(o,b);var f=w.get(o);--f===0?(document.removeEventListener(o,b),w.delete(o)):w.set(o,f)}V.delete(d),c!==t&&((y=c.parentNode)==null||y.removeChild(c))}});return M.set(l,T),l}let M=new WeakMap;function De(e,r){const t=M.get(e);return t?(M.delete(e),t(r)):Promise.resolve()}const ye="5";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(ye);export{Ae as a,Re as b,Se as c,le as d,Te as e,Ce as f,W as g,be as h,Ee as l,me as m,Ne as n,we as r,Pe as s,Le as t,De as u,x as w};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
- import{c as T,e as o,a as k,s as j,t as K}from"./CMBQQ9RZ.js";import"./CKDtmZUQ.js";import{f as L,ap as q,d as i,k as s,j as b,t as z}from"./BAACMRH5.js";import{i as A}from"./CgnwuKKO.js";import{b as D,a as h,d as F,c as G}from"./TOCyHP97.js";import{s as H}from"./4N1zIH8t.js";import{p as g}from"./C8OURRSs.js";function I(l){const t=l-1;return t*t*t+1}var J=K('<div class="backdrop svelte-v85iae" role="presentation"><div class="panel svelte-v85iae" role="dialog" aria-modal="true"><div class="header svelte-v85iae"><h3 class="title svelte-v85iae"> </h3> <button class="close-btn svelte-v85iae" aria-label="Close"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M1 1l12 12M13 1L1 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg></button></div> <div class="body svelte-v85iae"><!></div></div></div>');function W(l,t){let c=g(t,"open",12,!1),f=g(t,"title",8,""),u=!1;function r(){c(!1)}function w(e){u=e.target===e.currentTarget}function _(e){e.target===e.currentTarget&&u&&r()}function y(e){e.key==="Escape"&&r()}var p=T();o("keydown",q,y);var M=L(p);{var x=e=>{var a=J(),n=i(a),d=i(n),v=i(d),B=i(v,!0);s(v);var C=b(v,2);s(d);var m=b(d,2),E=i(m);D(E,t,"default",{},null),s(m),s(n),s(a),z(()=>{H(n,"aria-label",f()),j(B,f())}),o("click",C,r),h(3,n,()=>F,()=>({start:.96,duration:260,easing:I})),o("mousedown",a,w),o("click",a,_),o("keydown",a,O=>O.key==="Escape"&&r()),h(3,a,()=>G,()=>({duration:200})),k(e,a)};A(M,e=>{c()&&e(x)})}k(l,p)}export{W as M};
1
+ import{c as T,e as o,a as k,s as j,t as K}from"./CMBQQ9RZ.js";import"./CKDtmZUQ.js";import{f as L,ap as q,d as i,k as s,j as b,t as z}from"./BAACMRH5.js";import{i as A}from"./CgnwuKKO.js";import{b as D,a as h,d as F,c as G}from"./TOCyHP97.js";import{s as H}from"./CUC98kMZ.js";import{p as g}from"./C8OURRSs.js";function I(l){const t=l-1;return t*t*t+1}var J=K('<div class="backdrop svelte-v85iae" role="presentation"><div class="panel svelte-v85iae" role="dialog" aria-modal="true"><div class="header svelte-v85iae"><h3 class="title svelte-v85iae"> </h3> <button class="close-btn svelte-v85iae" aria-label="Close"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M1 1l12 12M13 1L1 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg></button></div> <div class="body svelte-v85iae"><!></div></div></div>');function W(l,t){let c=g(t,"open",12,!1),f=g(t,"title",8,""),u=!1;function r(){c(!1)}function w(e){u=e.target===e.currentTarget}function _(e){e.target===e.currentTarget&&u&&r()}function y(e){e.key==="Escape"&&r()}var p=T();o("keydown",q,y);var M=L(p);{var x=e=>{var a=J(),n=i(a),d=i(n),v=i(d),B=i(v,!0);s(v);var C=b(v,2);s(d);var m=b(d,2),E=i(m);D(E,t,"default",{},null),s(m),s(n),s(a),z(()=>{H(n,"aria-label",f()),j(B,f())}),o("click",C,r),h(3,n,()=>F,()=>({start:.96,duration:260,easing:I})),o("mousedown",a,w),o("click",a,_),o("keydown",a,O=>O.key==="Escape"&&r()),h(3,a,()=>G,()=>({duration:200})),k(e,a)};A(M,e=>{c()&&e(x)})}k(l,p)}export{W as M};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
1
  import{i}from"./BAACMRH5.js";function b(l,r){var e;var a=(e=l.$$events)==null?void 0:e[r.type],s=i(a)?a.slice():a==null?[]:[a];for(var t of s)t.call(this,r)}export{b};
@@ -0,0 +1 @@
1
+ import{J as L,h as n,aq as A,ar as i,as as e}from"./BAACMRH5.js";import{d as S}from"./CMBQQ9RZ.js";function d(s){if(n){var a=!1,o=()=>{if(!a){if(a=!0,s.hasAttribute("value")){var _=s.value;c(s,"value",null),s.value=_}if(s.hasAttribute("checked")){var r=s.checked;c(s,"checked",null),s.checked=r}}};s.__on_r=o,i(o),S()}}function I(s,a){var o=s.__attributes??(s.__attributes={});o.value===(o.value=a??void 0)||s.value===a&&(a!==0||s.nodeName!=="PROGRESS")||(s.value=a??"")}function N(s,a){var o=s.__attributes??(s.__attributes={});o.checked!==(o.checked=a??void 0)&&(s.checked=a)}function c(s,a,o,_){var r=s.__attributes??(s.__attributes={});n&&(r[a]=s.getAttribute(a),a==="src"||a==="srcset"||a==="href"&&s.nodeName==="LINK")||r[a]!==(r[a]=o)&&(a==="style"&&"__styles"in s&&(s.__styles={}),a==="loading"&&(s[e]=o),o==null?s.removeAttribute(a):typeof o!="string"&&R(s).includes(a)?s[a]=o:s.setAttribute(a,o))}var E=new Map;function R(s){var a=E.get(s.nodeName);if(a)return a;E.set(s.nodeName,a=[]);for(var o,_=s,r=Element.prototype;r!==_;){o=A(_);for(var t in o)o[t].set&&a.push(t);_=L(_)}return a}const B="http://localhost:3001",C=[{id:"chromium",label:"Chrome"},{id:"firefox",label:"Firefox"}],u=Object.freeze({MANUAL:"manual-trigger",CLI:"command-line-trigger",MCP:"mcp-trigger",EXTERNAL:"external-trigger",CRON:"cron"}),O=15,h=20,g=20,M=1400,v=4e3,P=900,l=3e3,D=1,G=10,U=5,p=200,k=5,y=20,Y="built-in",b="Built-in",K="all tests",W="Automated",F="Confirm",w="Delete",x="Cancel",X="Working…",H="Nothing here yet.",q="Save",z="Edit",j="Close",J="Delete",V="Clear",Z="Discord",$="Slack",Q="Email",m="Password",ss="Clear search",as="Sort by",os="Loading…",_s="Saving…",rs="Creating…",ts="Searching…",cs="? This cannot be undone.";function Es(s,a,o=`${a}s`){return s===1?a:o}export{B as A,C as B,x as C,J as D,Q as E,$ as F,z as G,I as H,P as I,k as J,p as K,os as L,U as M,D as N,G as O,m as P,O as R,as as S,u as T,X as W,h as a,v as b,ss as c,ts as d,g as e,cs as f,rs as g,_s as h,q as i,V as j,W as k,j as l,y as m,N as n,H as o,Es as p,F as q,d as r,c as s,w as t,l as u,K as v,M as w,b as x,Y as y,Z as z};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
1
  import{Z as I,h as o,_ as m,a0 as A,a1 as S,a2 as R,a3 as U,a4 as v,a5 as h,a6 as p,a7 as g,U as D,a8 as x,a9 as y,W as F,aa as L,B as O,g as Z,ab as k,ac as q,s as w}from"./BAACMRH5.js";function C(a,s,n=!1){o&&m();var e=a,r=null,t=null,i=D,T=n?A:0,l=!1;const E=(c,u=!0)=>{l=!0,b(u,c)},b=(c,u)=>{if(i===(i=c))return;let d=!1;if(o){const N=e.data===S;!!i===N&&(e=R(),U(e),v(!1),d=!0)}i?(r?h(r):u&&(r=p(()=>u(e))),t&&g(t,()=>{t=null})):(t?h(t):u&&(t=p(()=>u(e))),r&&g(r,()=>{r=null})),d&&v(!0)};I(()=>{l=!1,s(E),l||b(null,null)},T),o&&(e=x)}let f=!1,_=Symbol();function H(a,s,n){const e=n[s]??(n[s]={store:null,source:F(void 0),unsubscribe:y});if(e.store!==a&&!(_ in n))if(e.unsubscribe(),e.store=a??null,a==null)e.source.v=void 0,e.unsubscribe=y;else{var r=!0;e.unsubscribe=L(a,t=>{r?e.source.v=t:w(e.source,t)}),r=!1}return a&&_ in n?O(a):Z(e.source)}function M(){const a={};function s(){k(()=>{for(var n in a)a[n].unsubscribe();q(a,_,{enumerable:!1,value:!0})})}return[a,s]}function P(a){var s=f;try{return f=!1,[a(),f]}finally{f=s}}export{H as a,P as c,C as i,M as s};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
- import{p as t}from"./4N1zIH8t.js";const n="Reports",r="Passed",E="Failed",c="Reports — Plum",L="Reports",_="passing",T="Recent",l="← older · newer →",A="No reports yet. Run a test to generate one.",S="Select all on this page",i="Select",R="Delete report",p=s=>s===1?"Delete report?":`Delete ${s} reports?`,N=s=>s===1?"This will permanently remove the report and its data file.":`This will permanently remove ${s} reports and their data files.`,I=s=>`${s} ${t(s,"run")} recorded`,d=s=>`${s} passed`,u=s=>`${s} failed`,P=(s,e,a)=>`${s} · ${e} · ${a}`,O=s=>`Delete (${s})`,B="Report — Plum",D="Could not load report.",h="passed",$="failed",C="skipped",m="duration",w="Run Logs",G="Failed and was automatically retried before the final result",g="Watch replay",f="Replay",y="Screenshot",b="Step screenshot",H="No screenshot captured for this step",U=s=>`${s} runners`,W=s=>`${s} cases`,V=s=>`${s} attempts`,v=s=>`Case ${s}`,F=s=>`Step ${s} screenshot`,M=s=>s?"Pause":"Play",k=(s,e)=>`${s} / ${e}`,Y="Live Run — Plum",K="No tests currently running",x="Start a test from the panel below, then come back here to watch it live.",z="View past reports →",j="Select a run above, or wait — the report opens automatically when it finishes.",q="Live",J="Cancel run",Q="All tests passed",X="Some tests failed",Z="View Report Now",ss="Step",es="Live browser view",ts="Awaiting stream...",as="No stream...",os="Runner",ns="Running…",rs="Finished",Es="(waiting for output…)",cs=s=>s===1?"A run in progress":`${s} runs in progress`,Ls=s=>`${s} ${t(s,"worker")}`,_s=s=>`Redirecting in ${s}s…`;export{H as $,Q as A,as as B,J as C,R as D,es as E,rs as F,B as G,L as H,D as I,M as J,k as K,c as L,h as M,A as N,m as O,_ as P,W as Q,T as R,S,l as T,G as U,z as V,Es as W,V as X,g as Y,f as Z,F as _,p as a,$ as a0,C as a1,w as a2,v as a3,y as a4,b as a5,i as b,O as c,N as d,Y as e,u as f,n as g,K as h,x as i,j,cs as k,q as l,Z as m,_s as n,os as o,d as p,ns as q,I as r,r as s,P as t,E as u,U as v,Ls as w,X as x,ss as y,ts as z};
1
+ import{p as t}from"./CUC98kMZ.js";const n="Reports",r="Passed",E="Failed",c="Reports — Plum",L="Reports",_="passing",T="Recent",l="← older · newer →",A="No reports yet. Run a test to generate one.",S="Select all on this page",i="Select",R="Delete report",p=s=>s===1?"Delete report?":`Delete ${s} reports?`,N=s=>s===1?"This will permanently remove the report and its data file.":`This will permanently remove ${s} reports and their data files.`,I=s=>`${s} ${t(s,"run")} recorded`,d=s=>`${s} passed`,u=s=>`${s} failed`,P=(s,e,a)=>`${s} · ${e} · ${a}`,O=s=>`Delete (${s})`,B="Report — Plum",D="Could not load report.",h="passed",$="failed",C="skipped",m="duration",w="Run Logs",G="Failed and was automatically retried before the final result",g="Watch replay",f="Replay",y="Screenshot",b="Step screenshot",H="No screenshot captured for this step",U=s=>`${s} runners`,W=s=>`${s} cases`,V=s=>`${s} attempts`,v=s=>`Case ${s}`,F=s=>`Step ${s} screenshot`,M=s=>s?"Pause":"Play",k=(s,e)=>`${s} / ${e}`,Y="Live Run — Plum",K="No tests currently running",x="Start a test from the panel below, then come back here to watch it live.",z="View past reports →",j="Select a run above, or wait — the report opens automatically when it finishes.",q="Live",J="Cancel run",Q="All tests passed",X="Some tests failed",Z="View Report Now",ss="Step",es="Live browser view",ts="Awaiting stream...",as="No stream...",os="Runner",ns="Running…",rs="Finished",Es="(waiting for output…)",cs=s=>s===1?"A run in progress":`${s} runs in progress`,Ls=s=>`${s} ${t(s,"worker")}`,_s=s=>`Redirecting in ${s}s…`;export{H as $,Q as A,as as B,J as C,R as D,es as E,rs as F,B as G,L as H,D as I,M as J,k as K,c as L,h as M,A as N,m as O,_ as P,W as Q,T as R,S,l as T,G as U,z as V,Es as W,V as X,g as Y,f as Z,F as _,p as a,$ as a0,C as a1,w as a2,v as a3,y as a4,b as a5,i as b,O as c,N as d,Y as e,u as f,n as g,K as h,x as i,j,cs as k,q as l,Z as m,_s as n,os as o,d as p,ns as q,I as r,r as s,P as t,E as u,U as v,Ls as w,X as x,ss as y,ts as z};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
1
  import{a as o,t as p}from"./CMBQQ9RZ.js";import"./CKDtmZUQ.js";import{d as l,k as m,t as n}from"./BAACMRH5.js";import{b as f,s as i}from"./TOCyHP97.js";import{p as d}from"./C8OURRSs.js";var v=p("<span><!></span>");function B(e,t){let r=d(t,"variant",8,"neutral");var a=v(),s=l(a);f(s,t,"default",{},null),m(a),n(()=>i(a,`badge ${r()??""} svelte-f4flx`)),o(e,a)}export{B};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
- import{e as m,u as h,p as k,f as q,c as g,d as c,k as _,t as b}from"./BAACMRH5.js";import{l as x,c as S,a as v,s as z,t as p,e as B}from"./CMBQQ9RZ.js";import{i as O,p as o}from"./C8OURRSs.js";import{i as T}from"./CKDtmZUQ.js";import{i as w}from"./CgnwuKKO.js";import{s as y,a as A,f as F,b as I}from"./TOCyHP97.js";import{s as L}from"./4N1zIH8t.js";import{b as M}from"./CNdcuGR0.js";function d(e,t,a){if(e.multiple)return C(e,t);for(var n of e.options){var r=l(n);if(O(r,t)){n.selected=!0;return}}(!a||t!==void 0)&&(e.selectedIndex=-1)}function j(e,t){let a=!0;m(()=>{t&&d(e,h(t),a),a=!1;var n=new MutationObserver(()=>{var r=e.__value;d(e,r)});return n.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),()=>{n.disconnect()}})}function U(e,t,a=t){var n=!0;x(e,"change",r=>{var u=r?"[selected]":":checked",i;if(e.multiple)i=[].map.call(e.querySelectorAll(u),l);else{var s=e.querySelector(u)??e.querySelector("option:not([disabled])");i=s&&l(s)}a(i)}),m(()=>{var r=t();if(d(e,r,n),n&&r===void 0){var u=e.querySelector(":checked");u!==null&&(r=l(u),a(r))}e.__value=r,n=!1}),j(e)}function C(e,t){for(var a of e.options)a.selected=~t.indexOf(l(a))}function l(e){return"__value"in e?e.__value:e.value}var D=p("<div> </div>");function V(e,t){k(t,!1);let a=o(t,"toast",8,null);T();var n=S(),r=q(n);{var u=i=>{var s=D(),f=c(s,!0);_(s),b(()=>{y(s,`toast alert alert-${a().type??""} svelte-1fg63qf`),z(f,a().message)}),A(3,s,()=>F,()=>({y:-8,duration:240})),v(i,s)};w(r,i=>{a()&&i(u)})}v(e,n),g()}var E=p("<button><!></button>");function W(e,t){let a=o(t,"variant",8,"primary"),n=o(t,"size",8,"md"),r=o(t,"type",8,"button"),u=o(t,"disabled",8,!1);var i=E(),s=c(i);I(s,t,"default",{},null),_(i),b(()=>{L(i,"type",r()),i.disabled=u(),y(i,`btn ${a()??""} ${n()??""} svelte-m1euen`)}),B("click",i,function(f){M.call(this,t,f)}),v(e,i)}export{W as B,V as T,U as b,j as i,d as s};
1
+ import{e as m,u as h,p as k,f as q,c as g,d as c,k as _,t as b}from"./BAACMRH5.js";import{l as x,c as S,a as v,s as z,t as p,e as B}from"./CMBQQ9RZ.js";import{i as O,p as o}from"./C8OURRSs.js";import{i as T}from"./CKDtmZUQ.js";import{i as w}from"./CgnwuKKO.js";import{s as y,a as A,f as F,b as I}from"./TOCyHP97.js";import{s as L}from"./CUC98kMZ.js";import{b as M}from"./CNdcuGR0.js";function d(e,t,a){if(e.multiple)return C(e,t);for(var n of e.options){var r=l(n);if(O(r,t)){n.selected=!0;return}}(!a||t!==void 0)&&(e.selectedIndex=-1)}function j(e,t){let a=!0;m(()=>{t&&d(e,h(t),a),a=!1;var n=new MutationObserver(()=>{var r=e.__value;d(e,r)});return n.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),()=>{n.disconnect()}})}function U(e,t,a=t){var n=!0;x(e,"change",r=>{var u=r?"[selected]":":checked",i;if(e.multiple)i=[].map.call(e.querySelectorAll(u),l);else{var s=e.querySelector(u)??e.querySelector("option:not([disabled])");i=s&&l(s)}a(i)}),m(()=>{var r=t();if(d(e,r,n),n&&r===void 0){var u=e.querySelector(":checked");u!==null&&(r=l(u),a(r))}e.__value=r,n=!1}),j(e)}function C(e,t){for(var a of e.options)a.selected=~t.indexOf(l(a))}function l(e){return"__value"in e?e.__value:e.value}var D=p("<div> </div>");function V(e,t){k(t,!1);let a=o(t,"toast",8,null);T();var n=S(),r=q(n);{var u=i=>{var s=D(),f=c(s,!0);_(s),b(()=>{y(s,`toast alert alert-${a().type??""} svelte-1fg63qf`),z(f,a().message)}),A(3,s,()=>F,()=>({y:-8,duration:240})),v(i,s)};w(r,i=>{a()&&i(u)})}v(e,n),g()}var E=p("<button><!></button>");function W(e,t){let a=o(t,"variant",8,"primary"),n=o(t,"size",8,"md"),r=o(t,"type",8,"button"),u=o(t,"disabled",8,!1);var i=E(),s=c(i);I(s,t,"default",{},null),_(i),b(()=>{L(i,"type",r()),i.disabled=u(),y(i,`btn ${a()??""} ${n()??""} svelte-m1euen`)}),B("click",i,function(f){M.call(this,t,f)}),v(e,i)}export{W as B,V as T,U as b,j as i,d as s};
@@ -1,23 +1 @@
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
- /*
19
- * This file is part of Plum.
20
- * Licensed under the MIT License. See LICENSE file in the project root for details.
21
- */
22
-
23
1
  import{w as o}from"./BAACMRH5.js";const e="plum-theme",m=localStorage.getItem(e)??"light",a=o(m);a.subscribe(t=>{localStorage.setItem(e,t),document.documentElement.setAttribute("data-theme",t)});export{a as t};