plum-e2e 1.2.0 → 1.2.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 (302) hide show
  1. package/backend/_scaffold/utils/browser.ts +1 -0
  2. package/backend/package-lock.json +2 -2
  3. package/backend/package.json +1 -1
  4. package/bin/plum.js +4 -3
  5. package/frontend/.svelte-kit/adapter-node/.vite/manifest.json +190 -0
  6. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/Badge.DLLowvEA.css +17 -0
  7. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/Button.cBruH0aD.css +17 -0
  8. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_layout.D7eM-6MV.css +17 -0
  9. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BVnUajEa.css +17 -0
  10. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.CGnCsn5q.css +17 -0
  11. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.DBhBrHFz.css +17 -0
  12. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.DOqo0UR4.css +17 -0
  13. package/frontend/.svelte-kit/adapter-node/chunks/Badge.js +30 -0
  14. package/frontend/.svelte-kit/adapter-node/chunks/Button.js +32 -0
  15. package/frontend/.svelte-kit/adapter-node/chunks/attributes.js +34 -0
  16. package/frontend/.svelte-kit/adapter-node/chunks/client.js +59 -0
  17. package/frontend/.svelte-kit/adapter-node/chunks/equality.js +31 -0
  18. package/frontend/.svelte-kit/adapter-node/chunks/escaping.js +36 -0
  19. package/frontend/.svelte-kit/adapter-node/chunks/exports.js +247 -0
  20. package/frontend/.svelte-kit/adapter-node/chunks/index.js +1135 -0
  21. package/frontend/.svelte-kit/adapter-node/chunks/internal.js +695 -0
  22. package/frontend/.svelte-kit/adapter-node/chunks/reports.js +57 -0
  23. package/frontend/.svelte-kit/adapter-node/entries/fallbacks/error.svelte.js +44 -0
  24. package/frontend/.svelte-kit/adapter-node/entries/pages/_layout.svelte.js +181 -0
  25. package/frontend/.svelte-kit/adapter-node/entries/pages/_page.svelte.js +164 -0
  26. package/frontend/.svelte-kit/adapter-node/entries/pages/reports/_page.svelte.js +141 -0
  27. package/frontend/.svelte-kit/adapter-node/entries/pages/reports/_slug_/_page.svelte.js +42 -0
  28. package/frontend/.svelte-kit/adapter-node/entries/pages/scheduled-tests/_page.svelte.js +179 -0
  29. package/frontend/.svelte-kit/adapter-node/index.js +3144 -0
  30. package/frontend/.svelte-kit/adapter-node/internal.js +30 -0
  31. package/frontend/.svelte-kit/adapter-node/manifest-full.js +77 -0
  32. package/frontend/.svelte-kit/adapter-node/manifest.js +81 -0
  33. package/frontend/.svelte-kit/adapter-node/nodes/0.js +25 -0
  34. package/frontend/.svelte-kit/adapter-node/nodes/1.js +25 -0
  35. package/frontend/.svelte-kit/adapter-node/nodes/2.js +25 -0
  36. package/frontend/.svelte-kit/adapter-node/nodes/3.js +25 -0
  37. package/frontend/.svelte-kit/adapter-node/nodes/4.js +25 -0
  38. package/frontend/.svelte-kit/adapter-node/nodes/5.js +25 -0
  39. package/frontend/.svelte-kit/ambient.d.ts +240 -0
  40. package/frontend/.svelte-kit/generated/client/app.js +51 -0
  41. package/frontend/.svelte-kit/generated/client/matchers.js +18 -0
  42. package/frontend/.svelte-kit/generated/client/nodes/0.js +18 -0
  43. package/frontend/.svelte-kit/generated/client/nodes/1.js +18 -0
  44. package/frontend/.svelte-kit/generated/client/nodes/2.js +18 -0
  45. package/frontend/.svelte-kit/generated/client/nodes/3.js +18 -0
  46. package/frontend/.svelte-kit/generated/client/nodes/4.js +18 -0
  47. package/frontend/.svelte-kit/generated/client/nodes/5.js +18 -0
  48. package/frontend/.svelte-kit/generated/client-optimized/app.js +51 -0
  49. package/frontend/.svelte-kit/generated/client-optimized/matchers.js +18 -0
  50. package/frontend/.svelte-kit/generated/client-optimized/nodes/0.js +18 -0
  51. package/frontend/.svelte-kit/generated/client-optimized/nodes/1.js +18 -0
  52. package/frontend/.svelte-kit/generated/client-optimized/nodes/2.js +18 -0
  53. package/frontend/.svelte-kit/generated/client-optimized/nodes/3.js +18 -0
  54. package/frontend/.svelte-kit/generated/client-optimized/nodes/4.js +18 -0
  55. package/frontend/.svelte-kit/generated/client-optimized/nodes/5.js +18 -0
  56. package/frontend/.svelte-kit/generated/root.js +20 -0
  57. package/frontend/.svelte-kit/generated/root.svelte +83 -0
  58. package/frontend/.svelte-kit/generated/server/internal.js +65 -0
  59. package/frontend/.svelte-kit/non-ambient.d.ts +42 -0
  60. package/frontend/.svelte-kit/output/client/.vite/manifest.json +289 -0
  61. package/frontend/.svelte-kit/output/client/_app/immutable/assets/0.CnXRuPt4.css +17 -0
  62. package/frontend/.svelte-kit/output/client/_app/immutable/assets/2.CGnCsn5q.css +17 -0
  63. package/frontend/.svelte-kit/output/client/_app/immutable/assets/3.BVnUajEa.css +17 -0
  64. package/frontend/.svelte-kit/output/client/_app/immutable/assets/4.DBhBrHFz.css +17 -0
  65. package/frontend/.svelte-kit/output/client/_app/immutable/assets/5.D93VAB-w.css +17 -0
  66. package/frontend/.svelte-kit/output/client/_app/immutable/assets/Badge.DLLowvEA.css +17 -0
  67. package/frontend/.svelte-kit/output/client/_app/immutable/assets/Button.cBruH0aD.css +17 -0
  68. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_layout.D7eM-6MV.css +17 -0
  69. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BVnUajEa.css +17 -0
  70. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.CGnCsn5q.css +17 -0
  71. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.DBhBrHFz.css +17 -0
  72. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.DOqo0UR4.css +17 -0
  73. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/B0bn91RF.js +18 -0
  74. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/B1kE5jmt.js +23 -0
  75. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BKz6FZdB.js +18 -0
  76. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Be4iUAB0.js +18 -0
  77. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BpaMqo9O.js +18 -0
  78. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Bt3-Z7H1.js +18 -0
  79. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CHV2KnPr.js +18 -0
  80. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CJ8q7g9Y.js +18 -0
  81. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Cit9MuSg.js +20 -0
  82. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CwBTqcbj.js +18 -0
  83. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DBk3zeq4.js +18 -0
  84. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DFJLQFic.js +18 -0
  85. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DTUE7kkY.js +18 -0
  86. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/IYPwzKs_.js +20 -0
  87. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/oc0we5Us.js +18 -0
  88. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/rVEKg0Ak.js +18 -0
  89. package/frontend/.svelte-kit/output/client/_app/immutable/entry/app.C2MbX06K.js +19 -0
  90. package/frontend/.svelte-kit/output/client/_app/immutable/entry/start.GiBry-lw.js +18 -0
  91. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/0.BsCYK-Tn.js +21 -0
  92. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/1.N4gjrCnX.js +18 -0
  93. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/2.D9yQNzK8.js +18 -0
  94. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/3.CBC5WvNb.js +18 -0
  95. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/4.BU6UZHSE.js +19 -0
  96. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/5.Dzzfrntl.js +18 -0
  97. package/frontend/.svelte-kit/output/client/_app/version.json +1 -0
  98. package/frontend/.svelte-kit/output/client/favicon.png +0 -0
  99. package/frontend/.svelte-kit/output/server/.vite/manifest.json +190 -0
  100. package/frontend/.svelte-kit/output/server/_app/immutable/assets/Badge.DLLowvEA.css +17 -0
  101. package/frontend/.svelte-kit/output/server/_app/immutable/assets/Button.cBruH0aD.css +17 -0
  102. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_layout.D7eM-6MV.css +17 -0
  103. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BVnUajEa.css +17 -0
  104. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.CGnCsn5q.css +17 -0
  105. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.DBhBrHFz.css +17 -0
  106. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.DOqo0UR4.css +17 -0
  107. package/frontend/.svelte-kit/output/server/chunks/Badge.js +30 -0
  108. package/frontend/.svelte-kit/output/server/chunks/Button.js +32 -0
  109. package/frontend/.svelte-kit/output/server/chunks/attributes.js +34 -0
  110. package/frontend/.svelte-kit/output/server/chunks/client.js +59 -0
  111. package/frontend/.svelte-kit/output/server/chunks/equality.js +31 -0
  112. package/frontend/.svelte-kit/output/server/chunks/escaping.js +36 -0
  113. package/frontend/.svelte-kit/output/server/chunks/exports.js +247 -0
  114. package/frontend/.svelte-kit/output/server/chunks/index.js +1135 -0
  115. package/frontend/.svelte-kit/output/server/chunks/internal.js +695 -0
  116. package/frontend/.svelte-kit/output/server/chunks/reports.js +57 -0
  117. package/frontend/.svelte-kit/output/server/entries/fallbacks/error.svelte.js +44 -0
  118. package/frontend/.svelte-kit/output/server/entries/pages/_layout.svelte.js +181 -0
  119. package/frontend/.svelte-kit/output/server/entries/pages/_page.svelte.js +164 -0
  120. package/frontend/.svelte-kit/output/server/entries/pages/reports/_page.svelte.js +141 -0
  121. package/frontend/.svelte-kit/output/server/entries/pages/reports/_slug_/_page.svelte.js +42 -0
  122. package/frontend/.svelte-kit/output/server/entries/pages/scheduled-tests/_page.svelte.js +179 -0
  123. package/frontend/.svelte-kit/output/server/index.js +3144 -0
  124. package/frontend/.svelte-kit/output/server/internal.js +30 -0
  125. package/frontend/.svelte-kit/output/server/manifest-full.js +77 -0
  126. package/frontend/.svelte-kit/output/server/manifest.js +77 -0
  127. package/frontend/.svelte-kit/output/server/nodes/0.js +25 -0
  128. package/frontend/.svelte-kit/output/server/nodes/1.js +25 -0
  129. package/frontend/.svelte-kit/output/server/nodes/2.js +25 -0
  130. package/frontend/.svelte-kit/output/server/nodes/3.js +25 -0
  131. package/frontend/.svelte-kit/output/server/nodes/4.js +25 -0
  132. package/frontend/.svelte-kit/output/server/nodes/5.js +25 -0
  133. package/frontend/.svelte-kit/tsconfig.json +49 -0
  134. package/frontend/build/client/_app/immutable/assets/0.CnXRuPt4.css +17 -0
  135. package/frontend/build/client/_app/immutable/assets/0.CnXRuPt4.css.br +0 -0
  136. package/frontend/build/client/_app/immutable/assets/0.CnXRuPt4.css.gz +0 -0
  137. package/frontend/build/client/_app/immutable/assets/2.CGnCsn5q.css +17 -0
  138. package/frontend/build/client/_app/immutable/assets/2.CGnCsn5q.css.br +0 -0
  139. package/frontend/build/client/_app/immutable/assets/2.CGnCsn5q.css.gz +0 -0
  140. package/frontend/build/client/_app/immutable/assets/3.BVnUajEa.css +17 -0
  141. package/frontend/build/client/_app/immutable/assets/3.BVnUajEa.css.br +0 -0
  142. package/frontend/build/client/_app/immutable/assets/3.BVnUajEa.css.gz +0 -0
  143. package/frontend/build/client/_app/immutable/assets/4.DBhBrHFz.css +17 -0
  144. package/frontend/build/client/_app/immutable/assets/4.DBhBrHFz.css.br +0 -0
  145. package/frontend/build/client/_app/immutable/assets/4.DBhBrHFz.css.gz +0 -0
  146. package/frontend/build/client/_app/immutable/assets/5.D93VAB-w.css +17 -0
  147. package/frontend/build/client/_app/immutable/assets/5.D93VAB-w.css.br +0 -0
  148. package/frontend/build/client/_app/immutable/assets/5.D93VAB-w.css.gz +0 -0
  149. package/frontend/build/client/_app/immutable/assets/Badge.DLLowvEA.css +17 -0
  150. package/frontend/build/client/_app/immutable/assets/Badge.DLLowvEA.css.br +0 -0
  151. package/frontend/build/client/_app/immutable/assets/Badge.DLLowvEA.css.gz +0 -0
  152. package/frontend/build/client/_app/immutable/assets/Button.cBruH0aD.css +17 -0
  153. package/frontend/build/client/_app/immutable/assets/Button.cBruH0aD.css.br +0 -0
  154. package/frontend/build/client/_app/immutable/assets/Button.cBruH0aD.css.gz +0 -0
  155. package/frontend/build/client/_app/immutable/assets/_layout.D7eM-6MV.css +17 -0
  156. package/frontend/build/client/_app/immutable/assets/_layout.D7eM-6MV.css.br +0 -0
  157. package/frontend/build/client/_app/immutable/assets/_layout.D7eM-6MV.css.gz +0 -0
  158. package/frontend/build/client/_app/immutable/assets/_page.BVnUajEa.css +17 -0
  159. package/frontend/build/client/_app/immutable/assets/_page.BVnUajEa.css.br +0 -0
  160. package/frontend/build/client/_app/immutable/assets/_page.BVnUajEa.css.gz +0 -0
  161. package/frontend/build/client/_app/immutable/assets/_page.CGnCsn5q.css +17 -0
  162. package/frontend/build/client/_app/immutable/assets/_page.CGnCsn5q.css.br +0 -0
  163. package/frontend/build/client/_app/immutable/assets/_page.CGnCsn5q.css.gz +0 -0
  164. package/frontend/build/client/_app/immutable/assets/_page.DBhBrHFz.css +17 -0
  165. package/frontend/build/client/_app/immutable/assets/_page.DBhBrHFz.css.br +0 -0
  166. package/frontend/build/client/_app/immutable/assets/_page.DBhBrHFz.css.gz +0 -0
  167. package/frontend/build/client/_app/immutable/assets/_page.DOqo0UR4.css +17 -0
  168. package/frontend/build/client/_app/immutable/assets/_page.DOqo0UR4.css.br +0 -0
  169. package/frontend/build/client/_app/immutable/assets/_page.DOqo0UR4.css.gz +0 -0
  170. package/frontend/build/client/_app/immutable/chunks/B0bn91RF.js +18 -0
  171. package/frontend/build/client/_app/immutable/chunks/B0bn91RF.js.br +0 -0
  172. package/frontend/build/client/_app/immutable/chunks/B0bn91RF.js.gz +0 -0
  173. package/frontend/build/client/_app/immutable/chunks/B1kE5jmt.js +23 -0
  174. package/frontend/build/client/_app/immutable/chunks/B1kE5jmt.js.br +0 -0
  175. package/frontend/build/client/_app/immutable/chunks/B1kE5jmt.js.gz +0 -0
  176. package/frontend/build/client/_app/immutable/chunks/BKz6FZdB.js +18 -0
  177. package/frontend/build/client/_app/immutable/chunks/BKz6FZdB.js.br +0 -0
  178. package/frontend/build/client/_app/immutable/chunks/BKz6FZdB.js.gz +0 -0
  179. package/frontend/build/client/_app/immutable/chunks/Be4iUAB0.js +18 -0
  180. package/frontend/build/client/_app/immutable/chunks/Be4iUAB0.js.br +0 -0
  181. package/frontend/build/client/_app/immutable/chunks/Be4iUAB0.js.gz +0 -0
  182. package/frontend/build/client/_app/immutable/chunks/BpaMqo9O.js +18 -0
  183. package/frontend/build/client/_app/immutable/chunks/BpaMqo9O.js.br +0 -0
  184. package/frontend/build/client/_app/immutable/chunks/BpaMqo9O.js.gz +0 -0
  185. package/frontend/build/client/_app/immutable/chunks/Bt3-Z7H1.js +18 -0
  186. package/frontend/build/client/_app/immutable/chunks/Bt3-Z7H1.js.br +0 -0
  187. package/frontend/build/client/_app/immutable/chunks/Bt3-Z7H1.js.gz +0 -0
  188. package/frontend/build/client/_app/immutable/chunks/CHV2KnPr.js +18 -0
  189. package/frontend/build/client/_app/immutable/chunks/CHV2KnPr.js.br +18 -0
  190. package/frontend/build/client/_app/immutable/chunks/CHV2KnPr.js.gz +0 -0
  191. package/frontend/build/client/_app/immutable/chunks/CJ8q7g9Y.js +18 -0
  192. package/{resources/comments-format.text → frontend/build/client/_app/immutable/chunks/CJ8q7g9Y.js.br} +0 -0
  193. package/frontend/build/client/_app/immutable/chunks/CJ8q7g9Y.js.gz +0 -0
  194. package/frontend/build/client/_app/immutable/chunks/Cit9MuSg.js +20 -0
  195. package/frontend/build/client/_app/immutable/chunks/Cit9MuSg.js.br +0 -0
  196. package/frontend/build/client/_app/immutable/chunks/Cit9MuSg.js.gz +0 -0
  197. package/frontend/build/client/_app/immutable/chunks/CwBTqcbj.js +18 -0
  198. package/frontend/build/client/_app/immutable/chunks/CwBTqcbj.js.br +0 -0
  199. package/frontend/build/client/_app/immutable/chunks/CwBTqcbj.js.gz +0 -0
  200. package/frontend/build/client/_app/immutable/chunks/DBk3zeq4.js +18 -0
  201. package/frontend/build/client/_app/immutable/chunks/DBk3zeq4.js.br +0 -0
  202. package/frontend/build/client/_app/immutable/chunks/DBk3zeq4.js.gz +0 -0
  203. package/frontend/build/client/_app/immutable/chunks/DFJLQFic.js +18 -0
  204. package/frontend/build/client/_app/immutable/chunks/DFJLQFic.js.br +0 -0
  205. package/frontend/build/client/_app/immutable/chunks/DFJLQFic.js.gz +0 -0
  206. package/frontend/build/client/_app/immutable/chunks/DTUE7kkY.js +18 -0
  207. package/frontend/build/client/_app/immutable/chunks/DTUE7kkY.js.br +0 -0
  208. package/frontend/build/client/_app/immutable/chunks/DTUE7kkY.js.gz +0 -0
  209. package/frontend/build/client/_app/immutable/chunks/IYPwzKs_.js +20 -0
  210. package/frontend/build/client/_app/immutable/chunks/IYPwzKs_.js.br +0 -0
  211. package/frontend/build/client/_app/immutable/chunks/IYPwzKs_.js.gz +0 -0
  212. package/frontend/build/client/_app/immutable/chunks/oc0we5Us.js +18 -0
  213. package/frontend/build/client/_app/immutable/chunks/oc0we5Us.js.br +0 -0
  214. package/frontend/build/client/_app/immutable/chunks/oc0we5Us.js.gz +0 -0
  215. package/frontend/build/client/_app/immutable/chunks/rVEKg0Ak.js +18 -0
  216. package/frontend/build/client/_app/immutable/chunks/rVEKg0Ak.js.br +0 -0
  217. package/frontend/build/client/_app/immutable/chunks/rVEKg0Ak.js.gz +0 -0
  218. package/frontend/build/client/_app/immutable/entry/app.C2MbX06K.js +19 -0
  219. package/frontend/build/client/_app/immutable/entry/app.C2MbX06K.js.br +0 -0
  220. package/frontend/build/client/_app/immutable/entry/app.C2MbX06K.js.gz +0 -0
  221. package/frontend/build/client/_app/immutable/entry/start.GiBry-lw.js +18 -0
  222. package/frontend/build/client/_app/immutable/entry/start.GiBry-lw.js.br +18 -0
  223. package/frontend/build/client/_app/immutable/entry/start.GiBry-lw.js.gz +0 -0
  224. package/frontend/build/client/_app/immutable/nodes/0.BsCYK-Tn.js +21 -0
  225. package/frontend/build/client/_app/immutable/nodes/0.BsCYK-Tn.js.br +0 -0
  226. package/frontend/build/client/_app/immutable/nodes/0.BsCYK-Tn.js.gz +0 -0
  227. package/frontend/build/client/_app/immutable/nodes/1.N4gjrCnX.js +18 -0
  228. package/frontend/build/client/_app/immutable/nodes/1.N4gjrCnX.js.br +0 -0
  229. package/frontend/build/client/_app/immutable/nodes/1.N4gjrCnX.js.gz +0 -0
  230. package/frontend/build/client/_app/immutable/nodes/2.D9yQNzK8.js +18 -0
  231. package/frontend/build/client/_app/immutable/nodes/2.D9yQNzK8.js.br +0 -0
  232. package/frontend/build/client/_app/immutable/nodes/2.D9yQNzK8.js.gz +0 -0
  233. package/frontend/build/client/_app/immutable/nodes/3.CBC5WvNb.js +18 -0
  234. package/frontend/build/client/_app/immutable/nodes/3.CBC5WvNb.js.br +0 -0
  235. package/frontend/build/client/_app/immutable/nodes/3.CBC5WvNb.js.gz +0 -0
  236. package/frontend/build/client/_app/immutable/nodes/4.BU6UZHSE.js +19 -0
  237. package/frontend/build/client/_app/immutable/nodes/4.BU6UZHSE.js.br +0 -0
  238. package/frontend/build/client/_app/immutable/nodes/4.BU6UZHSE.js.gz +0 -0
  239. package/frontend/build/client/_app/immutable/nodes/5.Dzzfrntl.js +18 -0
  240. package/frontend/build/client/_app/immutable/nodes/5.Dzzfrntl.js.br +0 -0
  241. package/frontend/build/client/_app/immutable/nodes/5.Dzzfrntl.js.gz +0 -0
  242. package/frontend/build/client/_app/version.json +1 -0
  243. package/frontend/build/client/_app/version.json.br +0 -0
  244. package/frontend/build/client/_app/version.json.gz +0 -0
  245. package/frontend/build/client/favicon.png +0 -0
  246. package/frontend/build/env.js +111 -0
  247. package/frontend/build/handler.js +1511 -0
  248. package/frontend/build/index.js +362 -0
  249. package/frontend/build/server/chunks/0-BFfqmlsS.js +26 -0
  250. package/frontend/build/server/chunks/0-BFfqmlsS.js.map +17 -0
  251. package/frontend/build/server/chunks/1-hso3H4Ax.js +26 -0
  252. package/frontend/build/server/chunks/1-hso3H4Ax.js.map +17 -0
  253. package/frontend/build/server/chunks/2-BSZWXCWp.js +26 -0
  254. package/frontend/build/server/chunks/2-BSZWXCWp.js.map +17 -0
  255. package/frontend/build/server/chunks/3-BYumY9dv.js +26 -0
  256. package/frontend/build/server/chunks/3-BYumY9dv.js.map +17 -0
  257. package/frontend/build/server/chunks/4-2UUrCVtM.js +26 -0
  258. package/frontend/build/server/chunks/4-2UUrCVtM.js.map +17 -0
  259. package/frontend/build/server/chunks/5-C2_y_fwT.js +26 -0
  260. package/frontend/build/server/chunks/5-C2_y_fwT.js.map +17 -0
  261. package/frontend/build/server/chunks/Badge-CC4U7C0c.js +30 -0
  262. package/frontend/build/server/chunks/Badge-CC4U7C0c.js.map +17 -0
  263. package/frontend/build/server/chunks/Button-BLkPicwS.js +33 -0
  264. package/frontend/build/server/chunks/Button-BLkPicwS.js.map +17 -0
  265. package/frontend/build/server/chunks/_layout.svelte-Bfxcj9C6.js +183 -0
  266. package/frontend/build/server/chunks/_layout.svelte-Bfxcj9C6.js.map +17 -0
  267. package/frontend/build/server/chunks/_page.svelte-DEK6UvaI.js +45 -0
  268. package/frontend/build/server/chunks/_page.svelte-DEK6UvaI.js.map +17 -0
  269. package/frontend/build/server/chunks/_page.svelte-DScVdHOq.js +142 -0
  270. package/frontend/build/server/chunks/_page.svelte-DScVdHOq.js.map +17 -0
  271. package/frontend/build/server/chunks/_page.svelte-Ns7w2sZt.js +180 -0
  272. package/frontend/build/server/chunks/_page.svelte-Ns7w2sZt.js.map +17 -0
  273. package/frontend/build/server/chunks/_page.svelte-s6ZIOitT.js +165 -0
  274. package/frontend/build/server/chunks/_page.svelte-s6ZIOitT.js.map +17 -0
  275. package/frontend/build/server/chunks/attributes-BeaNKpgU.js +34 -0
  276. package/frontend/build/server/chunks/attributes-BeaNKpgU.js.map +17 -0
  277. package/frontend/build/server/chunks/client-C9IaEwNo.js +52 -0
  278. package/frontend/build/server/chunks/client-C9IaEwNo.js.map +17 -0
  279. package/frontend/build/server/chunks/error.svelte-HKBv5sQT.js +45 -0
  280. package/frontend/build/server/chunks/error.svelte-HKBv5sQT.js.map +17 -0
  281. package/frontend/build/server/chunks/escaping-CqgfEcN3.js +36 -0
  282. package/frontend/build/server/chunks/escaping-CqgfEcN3.js.map +17 -0
  283. package/frontend/build/server/chunks/exports-OxlCJ8yE.js +192 -0
  284. package/frontend/build/server/chunks/exports-OxlCJ8yE.js.map +17 -0
  285. package/frontend/build/server/chunks/index-CjHlq1kt.js +1076 -0
  286. package/frontend/build/server/chunks/index-CjHlq1kt.js.map +17 -0
  287. package/frontend/build/server/chunks/reports-D3ZeYSmi.js +56 -0
  288. package/frontend/build/server/chunks/reports-D3ZeYSmi.js.map +17 -0
  289. package/frontend/build/server/index.js +5015 -0
  290. package/frontend/build/server/index.js.map +17 -0
  291. package/frontend/build/server/manifest.js +84 -0
  292. package/frontend/build/server/manifest.js.map +17 -0
  293. package/frontend/build/shims.js +49 -0
  294. package/frontend/package-lock.json +2 -2
  295. package/frontend/package.json +1 -1
  296. package/package.json +1 -1
  297. package/.claude/settings.local.json +0 -29
  298. package/.husky/pre-commit +0 -2
  299. package/.prettierignore +0 -21
  300. package/.prettierrc +0 -15
  301. package/.vscode/settings.json +0 -10
  302. package/license-config.json +0 -37
@@ -0,0 +1,30 @@
1
+ /*
2
+ * This file is part of Plum.
3
+ *
4
+ * Plum is free software: you can redistribute it and/or modify
5
+ * it under the terms of the GNU General Public License as published by
6
+ * the Free Software Foundation, either version 3 of the License, or
7
+ * (at your option) any later version.
8
+ *
9
+ * Plum is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ * GNU General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU General Public License
15
+ * along with Plum. If not, see https://www.gnu.org/licenses/.
16
+ */
17
+
18
+ import { Z as fallback, V as stringify, Y as slot, _ as bind_props } from './index-CjHlq1kt.js';
19
+ import { a as attr } from './attributes-BeaNKpgU.js';
20
+
21
+ function Badge($$payload, $$props) {
22
+ let variant = fallback($$props["variant"], "neutral");
23
+ $$payload.out += `<span${attr("class", `badge ${stringify(variant)} svelte-imjoo5`)}><!---->`;
24
+ slot($$payload, $$props, "default", {});
25
+ $$payload.out += `<!----></span>`;
26
+ bind_props($$props, { variant });
27
+ }
28
+
29
+ export { Badge as B };
30
+ //# sourceMappingURL=Badge-CC4U7C0c.js.map
@@ -0,0 +1,17 @@
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
+ {"version":3,"file":"Badge-CC4U7C0c.js","sources":["../../../.svelte-kit/adapter-node/chunks/Badge.js"],"sourcesContent":["import { _ as fallback, Z as slot, $ as bind_props, W as stringify } from \"./index.js\";\n/* empty css */\nimport { a as attr } from \"./attributes.js\";\nfunction Badge($$payload, $$props) {\n let variant = fallback($$props[\"variant\"], \"neutral\");\n $$payload.out += `<span${attr(\"class\", `badge ${stringify(variant)} svelte-imjoo5`)}><!---->`;\n slot($$payload, $$props, \"default\", {});\n $$payload.out += `<!----></span>`;\n bind_props($$props, { variant });\n}\nexport {\n Badge as B\n};\n"],"names":[],"mappings":";;;AAGA,SAAS,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE;AACnC,EAAE,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;AACvD,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC/F,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC;AACzC,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;AACnC,EAAE,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC;AAClC;;;;"}
@@ -0,0 +1,33 @@
1
+ /*
2
+ * This file is part of Plum.
3
+ *
4
+ * Plum is free software: you can redistribute it and/or modify
5
+ * it under the terms of the GNU General Public License as published by
6
+ * the Free Software Foundation, either version 3 of the License, or
7
+ * (at your option) any later version.
8
+ *
9
+ * Plum is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ * GNU General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU General Public License
15
+ * along with Plum. If not, see https://www.gnu.org/licenses/.
16
+ */
17
+
18
+ import { Z as fallback, V as stringify, Y as slot, _ as bind_props } from './index-CjHlq1kt.js';
19
+ import { a as attr } from './attributes-BeaNKpgU.js';
20
+
21
+ function Button($$payload, $$props) {
22
+ let variant = fallback($$props["variant"], "primary");
23
+ let size = fallback($$props["size"], "md");
24
+ let type = fallback($$props["type"], "button");
25
+ let disabled = fallback($$props["disabled"], false);
26
+ $$payload.out += `<button${attr("type", type)}${attr("disabled", disabled, true)}${attr("class", `btn ${stringify(variant)} ${stringify(size)} svelte-1mw9qtj`)}><!---->`;
27
+ slot($$payload, $$props, "default", {});
28
+ $$payload.out += `<!----></button>`;
29
+ bind_props($$props, { variant, size, type, disabled });
30
+ }
31
+
32
+ export { Button as B };
33
+ //# sourceMappingURL=Button-BLkPicwS.js.map
@@ -0,0 +1,17 @@
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
+ {"version":3,"file":"Button-BLkPicwS.js","sources":["../../../.svelte-kit/adapter-node/chunks/Button.js"],"sourcesContent":["import { _ as fallback, Z as slot, $ as bind_props, W as stringify } from \"./index.js\";\nimport { a as attr } from \"./attributes.js\";\nfunction Button($$payload, $$props) {\n let variant = fallback($$props[\"variant\"], \"primary\");\n let size = fallback($$props[\"size\"], \"md\");\n let type = fallback($$props[\"type\"], \"button\");\n let disabled = fallback($$props[\"disabled\"], false);\n $$payload.out += `<button${attr(\"type\", type)}${attr(\"disabled\", disabled, true)}${attr(\"class\", `btn ${stringify(variant)} ${stringify(size)} svelte-1mw9qtj`)}><!---->`;\n slot($$payload, $$props, \"default\", {});\n $$payload.out += `<!----></button>`;\n bind_props($$props, { variant, size, type, disabled });\n}\nexport {\n Button as B\n};\n"],"names":[],"mappings":";;;AAEA,SAAS,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE;AACpC,EAAE,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;AACvD,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;AAC5C,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;AAChD,EAAE,IAAI,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;AACrD,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC3K,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC;AACzC,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACrC,EAAE,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACxD;;;;"}
@@ -0,0 +1,183 @@
1
+ /*
2
+ * This file is part of Plum.
3
+ *
4
+ * Plum is free software: you can redistribute it and/or modify
5
+ * it under the terms of the GNU General Public License as published by
6
+ * the Free Software Foundation, either version 3 of the License, or
7
+ * (at your option) any later version.
8
+ *
9
+ * Plum is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ * GNU General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU General Public License
15
+ * along with Plum. If not, see https://www.gnu.org/licenses/.
16
+ */
17
+
18
+ import { J as push, T as ensure_array_like, V as stringify, W as store_get, X as unsubscribe_stores, N as pop, Y as slot, Z as fallback, _ as bind_props } from './index-CjHlq1kt.js';
19
+ import { r as reportUrl, p as page } from './reports-D3ZeYSmi.js';
20
+ import { w as writable } from './exports-OxlCJ8yE.js';
21
+ import { a as attr } from './attributes-BeaNKpgU.js';
22
+ import { e as escape_html } from './escaping-CqgfEcN3.js';
23
+ import 'socket.io-client';
24
+ import { B as Button } from './Button-BLkPicwS.js';
25
+ import './client-C9IaEwNo.js';
26
+
27
+ const initial = "light";
28
+ const theme = writable(initial);
29
+ theme.subscribe((val) => {
30
+ return;
31
+ });
32
+ function Nav($$payload, $$props) {
33
+ push();
34
+ var $$store_subs;
35
+ let menuOpen = false;
36
+ const links = [
37
+ { href: "/", label: "Run Tests" },
38
+ { href: "/reports", label: "Reports" },
39
+ { href: "/scheduled-tests", label: "Scheduled" }
40
+ ];
41
+ const each_array = ensure_array_like(links);
42
+ $$payload.out += `<nav class="nav svelte-6bgush"><div class="inner svelte-6bgush"><a href="/" class="brand svelte-6bgush"><span class="brand-serif svelte-6bgush">Pl</span><span class="brand-sans svelte-6bgush">um</span></a> <div class="links svelte-6bgush"><!--[-->`;
43
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
44
+ let link = each_array[$$index];
45
+ $$payload.out += `<a${attr("href", link.href)}${attr("class", `link svelte-6bgush ${stringify([
46
+ store_get($$store_subs ??= {}, "$page", page).url.pathname === link.href ? "active" : ""
47
+ ].filter(Boolean).join(" "))}`)}>${escape_html(link.label)}</a>`;
48
+ }
49
+ $$payload.out += `<!--]--></div> <div class="actions svelte-6bgush"><button class="theme-btn svelte-6bgush" aria-label="Toggle theme">`;
50
+ if (store_get($$store_subs ??= {}, "$theme", theme) === "light") {
51
+ $$payload.out += "<!--[-->";
52
+ $$payload.out += `<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg>`;
53
+ } else {
54
+ $$payload.out += "<!--[!-->";
55
+ $$payload.out += `<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg>`;
56
+ }
57
+ $$payload.out += `<!--]--></button> <button class="hamburger svelte-6bgush"${attr("aria-label", "Open menu")}${attr("aria-expanded", menuOpen)}><span${attr("class", `svelte-6bgush ${stringify([""].filter(Boolean).join(" "))}`)}></span> <span${attr("class", `svelte-6bgush ${stringify([""].filter(Boolean).join(" "))}`)}></span> <span${attr("class", `svelte-6bgush ${stringify([""].filter(Boolean).join(" "))}`)}></span></button></div></div> `;
58
+ {
59
+ $$payload.out += "<!--[!-->";
60
+ }
61
+ $$payload.out += `<!--]--></nav>`;
62
+ if ($$store_subs) unsubscribe_stores($$store_subs);
63
+ pop();
64
+ }
65
+ function PageShell($$payload, $$props) {
66
+ $$payload.out += `<main class="shell svelte-28zx1m"><!---->`;
67
+ slot($$payload, $$props, "default", {});
68
+ $$payload.out += `<!----></main>`;
69
+ }
70
+ const runnerState = writable({
71
+ output: "Ready — select a test from the list.\n",
72
+ running: false,
73
+ testCompleted: false,
74
+ latestReport: null,
75
+ status: "idle",
76
+ // 'idle' | 'running' | 'pass' | 'fail'
77
+ lastRunId: ""
78
+ });
79
+ const runnerConfig = writable({
80
+ workers: 1,
81
+ testID: ""
82
+ });
83
+ const panelExpanded = writable(true);
84
+ function Terminal($$payload, $$props) {
85
+ push();
86
+ let output = fallback($$props["output"], "");
87
+ $$payload.out += `<div class="terminal-wrap svelte-olniy1"><div class="terminal-bar svelte-olniy1"><span class="dot red svelte-olniy1"></span> <span class="dot yellow svelte-olniy1"></span> <span class="dot green svelte-olniy1"></span></div> <pre class="terminal svelte-olniy1">${escape_html(output)}</pre></div>`;
88
+ bind_props($$props, { output });
89
+ pop();
90
+ }
91
+ function RunnerPanel($$payload, $$props) {
92
+ push();
93
+ var $$store_subs;
94
+ let state, cfg, workerCount, dots, statusColor, statusLabel;
95
+ const WORKER_OPTIONS = [1, 2, 4, 8];
96
+ state = store_get($$store_subs ??= {}, "$runnerState", runnerState);
97
+ cfg = store_get($$store_subs ??= {}, "$runnerConfig", runnerConfig);
98
+ workerCount = Math.min(cfg.workers, 4);
99
+ dots = Array.from({ length: workerCount });
100
+ statusColor = state.status === "pass" ? "var(--pass)" : state.status === "fail" ? "var(--fail)" : state.status === "running" ? "var(--accent)" : "var(--border)";
101
+ statusLabel = state.status === "running" ? "running" : state.status === "pass" ? "passed" : state.status === "fail" ? "failed" : "ready";
102
+ const each_array = ensure_array_like(dots);
103
+ $$payload.out += `<div${attr("class", `panel svelte-ynu3lh ${stringify([
104
+ store_get($$store_subs ??= {}, "$panelExpanded", panelExpanded) ? "expanded" : ""
105
+ ].filter(Boolean).join(" "))}`)}><div class="bar svelte-ynu3lh"><div class="bar-left svelte-ynu3lh"><span${attr("class", `status-dot svelte-ynu3lh ${stringify([state.running ? "pulse" : ""].filter(Boolean).join(" "))}`)}${attr("style", `background: ${stringify(statusColor)}`)}></span> <span class="status-label svelte-ynu3lh">${escape_html(statusLabel)}</span> `;
106
+ if (state.lastRunId) {
107
+ $$payload.out += "<!--[-->";
108
+ $$payload.out += `<span class="run-id svelte-ynu3lh">${escape_html(state.lastRunId || "(all)")}</span>`;
109
+ } else {
110
+ $$payload.out += "<!--[!-->";
111
+ }
112
+ $$payload.out += `<!--]--></div> <div class="bar-dots svelte-ynu3lh"${attr("title", `${stringify(cfg.workers)} worker${stringify(cfg.workers !== 1 ? "s" : "")}`)}><!--[-->`;
113
+ for (let i = 0, $$length = each_array.length; i < $$length; i++) {
114
+ each_array[i];
115
+ $$payload.out += `<span${attr("class", `dot svelte-ynu3lh ${stringify([
116
+ state.running ? "running" : "",
117
+ state.status === "pass" ? "pass" : "",
118
+ state.status === "fail" ? "fail" : ""
119
+ ].filter(Boolean).join(" "))}`)}${attr("style", `animation-delay: ${stringify(i * 180)}ms`)}></span>`;
120
+ }
121
+ $$payload.out += `<!--]--></div> <button class="expand-btn svelte-ynu3lh"${attr("aria-label", store_get($$store_subs ??= {}, "$panelExpanded", panelExpanded) ? "Collapse panel" : "Expand panel")}><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"${attr("class", `svelte-ynu3lh ${stringify([
122
+ store_get($$store_subs ??= {}, "$panelExpanded", panelExpanded) ? "rotated" : ""
123
+ ].filter(Boolean).join(" "))}`)}><polyline points="18 15 12 9 6 15" class="svelte-ynu3lh"></polyline></svg></button></div> `;
124
+ if (store_get($$store_subs ??= {}, "$panelExpanded", panelExpanded)) {
125
+ $$payload.out += "<!--[-->";
126
+ const each_array_1 = ensure_array_like(WORKER_OPTIONS);
127
+ $$payload.out += `<div class="body svelte-ynu3lh"><div class="controls svelte-ynu3lh"><input type="text" class="field-input run-input svelte-ynu3lh"${attr("value", store_get($$store_subs ??= {}, "$runnerConfig", runnerConfig).testID)} placeholder="@test-1 or @suite-login or blank for all"${attr("disabled", state.running, true)}> <div class="workers-control svelte-ynu3lh"><!--[-->`;
128
+ for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
129
+ let n = each_array_1[$$index_1];
130
+ $$payload.out += `<button${attr("class", `worker-btn svelte-ynu3lh ${stringify([cfg.workers === n ? "active" : ""].filter(Boolean).join(" "))}`)}>${escape_html(n === 1 ? "Off" : n)}</button>`;
131
+ }
132
+ $$payload.out += `<!--]--></div> `;
133
+ Button($$payload, {
134
+ disabled: state.running,
135
+ children: ($$payload2) => {
136
+ $$payload2.out += `<!---->${escape_html(state.running ? "Running…" : "Run")}`;
137
+ },
138
+ $$slots: { default: true }
139
+ });
140
+ $$payload.out += `<!----></div> `;
141
+ Terminal($$payload, { output: state.output });
142
+ $$payload.out += `<!----> `;
143
+ if (state.testCompleted && state.latestReport) {
144
+ $$payload.out += "<!--[-->";
145
+ $$payload.out += `<div class="report-row svelte-ynu3lh"><a${attr("href", reportUrl(state.latestReport))} target="_blank" rel="noopener noreferrer" class="svelte-ynu3lh">`;
146
+ Button($$payload, {
147
+ variant: "outline",
148
+ size: "sm",
149
+ children: ($$payload2) => {
150
+ $$payload2.out += `<!---->View Report →`;
151
+ },
152
+ $$slots: { default: true }
153
+ });
154
+ $$payload.out += `<!----></a></div>`;
155
+ } else {
156
+ $$payload.out += "<!--[!-->";
157
+ }
158
+ $$payload.out += `<!--]--></div>`;
159
+ } else {
160
+ $$payload.out += "<!--[!-->";
161
+ }
162
+ $$payload.out += `<!--]--></div>`;
163
+ if ($$store_subs) unsubscribe_stores($$store_subs);
164
+ pop();
165
+ }
166
+ function _layout($$payload, $$props) {
167
+ Nav($$payload);
168
+ $$payload.out += `<!----> `;
169
+ PageShell($$payload, {
170
+ children: ($$payload2) => {
171
+ $$payload2.out += `<!---->`;
172
+ slot($$payload2, $$props, "default", {});
173
+ $$payload2.out += `<!---->`;
174
+ },
175
+ $$slots: { default: true }
176
+ });
177
+ $$payload.out += `<!----> `;
178
+ RunnerPanel($$payload);
179
+ $$payload.out += `<!---->`;
180
+ }
181
+
182
+ export { _layout as default };
183
+ //# sourceMappingURL=_layout.svelte-Bfxcj9C6.js.map
@@ -0,0 +1,17 @@
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
+ {"version":3,"file":"_layout.svelte-Bfxcj9C6.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/_layout.svelte.js"],"sourcesContent":["import { V as ensure_array_like, W as stringify, X as store_get, Y as unsubscribe_stores, p as pop, a as push, Z as slot, _ as fallback, $ as bind_props } from \"../../chunks/index.js\";\nimport { p as page, r as reportUrl } from \"../../chunks/reports.js\";\nimport { w as writable } from \"../../chunks/exports.js\";\nimport { a as attr } from \"../../chunks/attributes.js\";\nimport { e as escape_html } from \"../../chunks/escaping.js\";\nimport \"socket.io-client\";\nimport { B as Button } from \"../../chunks/Button.js\";\nconst initial = \"light\";\nconst theme = writable(initial);\ntheme.subscribe((val) => {\n return;\n});\nfunction Nav($$payload, $$props) {\n push();\n var $$store_subs;\n let menuOpen = false;\n const links = [\n { href: \"/\", label: \"Run Tests\" },\n { href: \"/reports\", label: \"Reports\" },\n { href: \"/scheduled-tests\", label: \"Scheduled\" }\n ];\n const each_array = ensure_array_like(links);\n $$payload.out += `<nav class=\"nav svelte-6bgush\"><div class=\"inner svelte-6bgush\"><a href=\"/\" class=\"brand svelte-6bgush\"><span class=\"brand-serif svelte-6bgush\">Pl</span><span class=\"brand-sans svelte-6bgush\">um</span></a> <div class=\"links svelte-6bgush\"><!--[-->`;\n for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n let link = each_array[$$index];\n $$payload.out += `<a${attr(\"href\", link.href)}${attr(\"class\", `link svelte-6bgush ${stringify([\n store_get($$store_subs ??= {}, \"$page\", page).url.pathname === link.href ? \"active\" : \"\"\n ].filter(Boolean).join(\" \"))}`)}>${escape_html(link.label)}</a>`;\n }\n $$payload.out += `<!--]--></div> <div class=\"actions svelte-6bgush\"><button class=\"theme-btn svelte-6bgush\" aria-label=\"Toggle theme\">`;\n if (store_get($$store_subs ??= {}, \"$theme\", theme) === \"light\") {\n $$payload.out += \"<!--[-->\";\n $$payload.out += `<svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\"></path></svg>`;\n } else {\n $$payload.out += \"<!--[!-->\";\n $$payload.out += `<svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"5\"></circle><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\"></line><line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\"></line><line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\"></line><line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\"></line><line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\"></line><line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\"></line><line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\"></line><line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\"></line></svg>`;\n }\n $$payload.out += `<!--]--></button> <button class=\"hamburger svelte-6bgush\"${attr(\"aria-label\", \"Open menu\")}${attr(\"aria-expanded\", menuOpen)}><span${attr(\"class\", `svelte-6bgush ${stringify([\"\"].filter(Boolean).join(\" \"))}`)}></span> <span${attr(\"class\", `svelte-6bgush ${stringify([\"\"].filter(Boolean).join(\" \"))}`)}></span> <span${attr(\"class\", `svelte-6bgush ${stringify([\"\"].filter(Boolean).join(\" \"))}`)}></span></button></div></div> `;\n {\n $$payload.out += \"<!--[!-->\";\n }\n $$payload.out += `<!--]--></nav>`;\n if ($$store_subs) unsubscribe_stores($$store_subs);\n pop();\n}\nfunction PageShell($$payload, $$props) {\n $$payload.out += `<main class=\"shell svelte-28zx1m\"><!---->`;\n slot($$payload, $$props, \"default\", {});\n $$payload.out += `<!----></main>`;\n}\nconst runnerState = writable({\n output: \"Ready — select a test from the list.\\n\",\n running: false,\n testCompleted: false,\n latestReport: null,\n status: \"idle\",\n // 'idle' | 'running' | 'pass' | 'fail'\n lastRunId: \"\"\n});\nconst runnerConfig = writable({\n workers: 1,\n testID: \"\"\n});\nconst panelExpanded = writable(true);\nfunction Terminal($$payload, $$props) {\n push();\n let output = fallback($$props[\"output\"], \"\");\n $$payload.out += `<div class=\"terminal-wrap svelte-olniy1\"><div class=\"terminal-bar svelte-olniy1\"><span class=\"dot red svelte-olniy1\"></span> <span class=\"dot yellow svelte-olniy1\"></span> <span class=\"dot green svelte-olniy1\"></span></div> <pre class=\"terminal svelte-olniy1\">${escape_html(output)}</pre></div>`;\n bind_props($$props, { output });\n pop();\n}\nfunction RunnerPanel($$payload, $$props) {\n push();\n var $$store_subs;\n let state, cfg, workerCount, dots, statusColor, statusLabel;\n const WORKER_OPTIONS = [1, 2, 4, 8];\n state = store_get($$store_subs ??= {}, \"$runnerState\", runnerState);\n cfg = store_get($$store_subs ??= {}, \"$runnerConfig\", runnerConfig);\n workerCount = Math.min(cfg.workers, 4);\n dots = Array.from({ length: workerCount });\n statusColor = state.status === \"pass\" ? \"var(--pass)\" : state.status === \"fail\" ? \"var(--fail)\" : state.status === \"running\" ? \"var(--accent)\" : \"var(--border)\";\n statusLabel = state.status === \"running\" ? \"running\" : state.status === \"pass\" ? \"passed\" : state.status === \"fail\" ? \"failed\" : \"ready\";\n const each_array = ensure_array_like(dots);\n $$payload.out += `<div${attr(\"class\", `panel svelte-ynu3lh ${stringify([\n store_get($$store_subs ??= {}, \"$panelExpanded\", panelExpanded) ? \"expanded\" : \"\"\n ].filter(Boolean).join(\" \"))}`)}><div class=\"bar svelte-ynu3lh\"><div class=\"bar-left svelte-ynu3lh\"><span${attr(\"class\", `status-dot svelte-ynu3lh ${stringify([state.running ? \"pulse\" : \"\"].filter(Boolean).join(\" \"))}`)}${attr(\"style\", `background: ${stringify(statusColor)}`)}></span> <span class=\"status-label svelte-ynu3lh\">${escape_html(statusLabel)}</span> `;\n if (state.lastRunId) {\n $$payload.out += \"<!--[-->\";\n $$payload.out += `<span class=\"run-id svelte-ynu3lh\">${escape_html(state.lastRunId || \"(all)\")}</span>`;\n } else {\n $$payload.out += \"<!--[!-->\";\n }\n $$payload.out += `<!--]--></div> <div class=\"bar-dots svelte-ynu3lh\"${attr(\"title\", `${stringify(cfg.workers)} worker${stringify(cfg.workers !== 1 ? \"s\" : \"\")}`)}><!--[-->`;\n for (let i = 0, $$length = each_array.length; i < $$length; i++) {\n each_array[i];\n $$payload.out += `<span${attr(\"class\", `dot svelte-ynu3lh ${stringify([\n state.running ? \"running\" : \"\",\n state.status === \"pass\" ? \"pass\" : \"\",\n state.status === \"fail\" ? \"fail\" : \"\"\n ].filter(Boolean).join(\" \"))}`)}${attr(\"style\", `animation-delay: ${stringify(i * 180)}ms`)}></span>`;\n }\n $$payload.out += `<!--]--></div> <button class=\"expand-btn svelte-ynu3lh\"${attr(\"aria-label\", store_get($$store_subs ??= {}, \"$panelExpanded\", panelExpanded) ? \"Collapse panel\" : \"Expand panel\")}><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"${attr(\"class\", `svelte-ynu3lh ${stringify([\n store_get($$store_subs ??= {}, \"$panelExpanded\", panelExpanded) ? \"rotated\" : \"\"\n ].filter(Boolean).join(\" \"))}`)}><polyline points=\"18 15 12 9 6 15\" class=\"svelte-ynu3lh\"></polyline></svg></button></div> `;\n if (store_get($$store_subs ??= {}, \"$panelExpanded\", panelExpanded)) {\n $$payload.out += \"<!--[-->\";\n const each_array_1 = ensure_array_like(WORKER_OPTIONS);\n $$payload.out += `<div class=\"body svelte-ynu3lh\"><div class=\"controls svelte-ynu3lh\"><input type=\"text\" class=\"field-input run-input svelte-ynu3lh\"${attr(\"value\", store_get($$store_subs ??= {}, \"$runnerConfig\", runnerConfig).testID)} placeholder=\"@test-1 or @suite-login or blank for all\"${attr(\"disabled\", state.running, true)}> <div class=\"workers-control svelte-ynu3lh\"><!--[-->`;\n for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {\n let n = each_array_1[$$index_1];\n $$payload.out += `<button${attr(\"class\", `worker-btn svelte-ynu3lh ${stringify([cfg.workers === n ? \"active\" : \"\"].filter(Boolean).join(\" \"))}`)}>${escape_html(n === 1 ? \"Off\" : n)}</button>`;\n }\n $$payload.out += `<!--]--></div> `;\n Button($$payload, {\n disabled: state.running,\n children: ($$payload2) => {\n $$payload2.out += `<!---->${escape_html(state.running ? \"Running…\" : \"Run\")}`;\n },\n $$slots: { default: true }\n });\n $$payload.out += `<!----></div> `;\n Terminal($$payload, { output: state.output });\n $$payload.out += `<!----> `;\n if (state.testCompleted && state.latestReport) {\n $$payload.out += \"<!--[-->\";\n $$payload.out += `<div class=\"report-row svelte-ynu3lh\"><a${attr(\"href\", reportUrl(state.latestReport))} target=\"_blank\" rel=\"noopener noreferrer\" class=\"svelte-ynu3lh\">`;\n Button($$payload, {\n variant: \"outline\",\n size: \"sm\",\n children: ($$payload2) => {\n $$payload2.out += `<!---->View Report →`;\n },\n $$slots: { default: true }\n });\n $$payload.out += `<!----></a></div>`;\n } else {\n $$payload.out += \"<!--[!-->\";\n }\n $$payload.out += `<!--]--></div>`;\n } else {\n $$payload.out += \"<!--[!-->\";\n }\n $$payload.out += `<!--]--></div>`;\n if ($$store_subs) unsubscribe_stores($$store_subs);\n pop();\n}\nfunction _layout($$payload, $$props) {\n Nav($$payload);\n $$payload.out += `<!----> `;\n PageShell($$payload, {\n children: ($$payload2) => {\n $$payload2.out += `<!---->`;\n slot($$payload2, $$props, \"default\", {});\n $$payload2.out += `<!---->`;\n },\n $$slots: { default: true }\n });\n $$payload.out += `<!----> `;\n RunnerPanel($$payload);\n $$payload.out += `<!---->`;\n}\nexport {\n _layout as default\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /*
2
+ * This file is part of Plum.
3
+ *
4
+ * Plum is free software: you can redistribute it and/or modify
5
+ * it under the terms of the GNU General Public License as published by
6
+ * the Free Software Foundation, either version 3 of the License, or
7
+ * (at your option) any later version.
8
+ *
9
+ * Plum is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ * GNU General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU General Public License
15
+ * along with Plum. If not, see https://www.gnu.org/licenses/.
16
+ */
17
+
18
+ import { J as push, W as store_get, X as unsubscribe_stores, N as pop } from './index-CjHlq1kt.js';
19
+ import { a as parseReport, p as page } from './reports-D3ZeYSmi.js';
20
+ import './client-C9IaEwNo.js';
21
+ import './exports-OxlCJ8yE.js';
22
+
23
+ /* empty css */
24
+ function _page($$payload, $$props) {
25
+ push();
26
+ var $$store_subs;
27
+ const fileName = decodeURIComponent(store_get($$store_subs ??= {}, "$page", page).params.slug);
28
+ const meta = parseReport(fileName);
29
+ meta?.status === "PASS";
30
+ $$payload.out += `<div class="back-row svelte-pys2u"><a href="/reports" class="back-link svelte-pys2u"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" class="svelte-pys2u"><line x1="19" y1="12" x2="5" y2="12" class="svelte-pys2u"></line><polyline points="12 19 5 12 12 5" class="svelte-pys2u"></polyline></svg> Reports</a></div> `;
31
+ {
32
+ $$payload.out += "<!--[!-->";
33
+ {
34
+ $$payload.out += "<!--[-->";
35
+ $$payload.out += `<div class="loading-state svelte-pys2u"><div class="loading-dots svelte-pys2u"><span class="svelte-pys2u"></span><span class="svelte-pys2u"></span><span class="svelte-pys2u"></span></div></div>`;
36
+ }
37
+ $$payload.out += `<!--]-->`;
38
+ }
39
+ $$payload.out += `<!--]-->`;
40
+ if ($$store_subs) unsubscribe_stores($$store_subs);
41
+ pop();
42
+ }
43
+
44
+ export { _page as default };
45
+ //# sourceMappingURL=_page.svelte-DEK6UvaI.js.map
@@ -0,0 +1,17 @@
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
+ {"version":3,"file":"_page.svelte-DEK6UvaI.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/reports/_slug_/_page.svelte.js"],"sourcesContent":["import { X as store_get, Y as unsubscribe_stores, p as pop, a as push } from \"../../../../chunks/index.js\";\nimport { a as parseReport, p as page } from \"../../../../chunks/reports.js\";\n/* empty css */\nfunction _page($$payload, $$props) {\n push();\n var $$store_subs;\n const fileName = decodeURIComponent(store_get($$store_subs ??= {}, \"$page\", page).params.slug);\n const meta = parseReport(fileName);\n meta?.status === \"PASS\";\n $$payload.out += `<div class=\"back-row svelte-pys2u\"><a href=\"/reports\" class=\"back-link svelte-pys2u\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" class=\"svelte-pys2u\"><line x1=\"19\" y1=\"12\" x2=\"5\" y2=\"12\" class=\"svelte-pys2u\"></line><polyline points=\"12 19 5 12 12 5\" class=\"svelte-pys2u\"></polyline></svg> Reports</a></div> `;\n {\n $$payload.out += \"<!--[!-->\";\n {\n $$payload.out += \"<!--[-->\";\n $$payload.out += `<div class=\"loading-state svelte-pys2u\"><div class=\"loading-dots svelte-pys2u\"><span class=\"svelte-pys2u\"></span><span class=\"svelte-pys2u\"></span><span class=\"svelte-pys2u\"></span></div></div>`;\n }\n $$payload.out += `<!--]-->`;\n }\n $$payload.out += `<!--]-->`;\n if ($$store_subs) unsubscribe_stores($$store_subs);\n pop();\n}\nexport {\n _page as default\n};\n"],"names":[],"mappings":";;;;;AAEA;AACA,SAAS,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE;AACnC,EAAE,IAAI,EAAE;AACR,EAAE,IAAI,YAAY;AAClB,EAAE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,YAAY,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;AAChG,EAAE,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC;AACpC,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM;AACzB,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,iYAAiY,CAAC;AACtZ,EAAE;AACF,IAAI,SAAS,CAAC,GAAG,IAAI,WAAW;AAChC,IAAI;AACJ,MAAM,SAAS,CAAC,GAAG,IAAI,UAAU;AACjC,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,iMAAiM,CAAC;AAC1N,IAAI;AACJ,IAAI,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,EAAE;AACF,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC7B,EAAE,IAAI,YAAY,EAAE,kBAAkB,CAAC,YAAY,CAAC;AACpD,EAAE,GAAG,EAAE;AACP;;;;"}
@@ -0,0 +1,142 @@
1
+ /*
2
+ * This file is part of Plum.
3
+ *
4
+ * Plum is free software: you can redistribute it and/or modify
5
+ * it under the terms of the GNU General Public License as published by
6
+ * the Free Software Foundation, either version 3 of the License, or
7
+ * (at your option) any later version.
8
+ *
9
+ * Plum is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ * GNU General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU General Public License
15
+ * along with Plum. If not, see https://www.gnu.org/licenses/.
16
+ */
17
+
18
+ import { J as push, T as ensure_array_like, V as stringify, N as pop, Z as fallback, _ as bind_props } from './index-CjHlq1kt.js';
19
+ import { B as Badge } from './Badge-CC4U7C0c.js';
20
+ import { a as attr } from './attributes-BeaNKpgU.js';
21
+ import { e as escape_html } from './escaping-CqgfEcN3.js';
22
+
23
+ function Pagination($$payload, $$props) {
24
+ push();
25
+ let current = fallback($$props["current"], 1);
26
+ let total = fallback($$props["total"], 1);
27
+ if (total > 1) {
28
+ $$payload.out += "<!--[-->";
29
+ const each_array = ensure_array_like(Array(total));
30
+ $$payload.out += `<div class="pagination svelte-tsubiy"><button class="arrow svelte-tsubiy"${attr("disabled", current === 1, true)} aria-label="Previous">←</button> <!--[-->`;
31
+ for (let i = 0, $$length = each_array.length; i < $$length; i++) {
32
+ each_array[i];
33
+ $$payload.out += `<button${attr("class", `page svelte-tsubiy ${stringify([current === i + 1 ? "active" : ""].filter(Boolean).join(" "))}`)}>${escape_html(i + 1)}</button>`;
34
+ }
35
+ $$payload.out += `<!--]--> <button class="arrow svelte-tsubiy"${attr("disabled", current === total, true)} aria-label="Next">→</button></div>`;
36
+ } else {
37
+ $$payload.out += "<!--[!-->";
38
+ }
39
+ $$payload.out += `<!--]-->`;
40
+ bind_props($$props, { current, total });
41
+ pop();
42
+ }
43
+ function _page($$payload, $$props) {
44
+ push();
45
+ let totalPages, paginated, passCount, failCount, passRate, trend;
46
+ let reports = [];
47
+ let currentPage = 1;
48
+ const PER_PAGE = 15;
49
+ function triggerLabel(type) {
50
+ if (type === "manual-trigger") return "Manual";
51
+ if (type === "command-line-trigger" || type === "undefined") return "CLI";
52
+ return "Scheduled";
53
+ }
54
+ function triggerVariant(type) {
55
+ if (type === "manual-trigger") return "tag";
56
+ if (type === "command-line-trigger" || type === "undefined") return "neutral";
57
+ return "schedule";
58
+ }
59
+ totalPages = Math.ceil(reports.length / PER_PAGE);
60
+ paginated = reports.slice((currentPage - 1) * PER_PAGE, currentPage * PER_PAGE);
61
+ passCount = reports.filter((r) => r.status === "PASS").length;
62
+ failCount = reports.length - passCount;
63
+ passRate = reports.length ? Math.round(passCount / reports.length * 100) : 0;
64
+ trend = reports.slice(0, 12).reverse();
65
+ $$payload.out += `<div class="page-header svelte-wxbf05"><div class="header-top svelte-wxbf05"><div><h1 class="svelte-wxbf05">Reports</h1> <p class="subtitle svelte-wxbf05">${escape_html(reports.length)} run${escape_html(reports.length !== 1 ? "s" : "")} recorded</p></div> `;
66
+ if (reports.length > 0) {
67
+ $$payload.out += "<!--[-->";
68
+ $$payload.out += `<div class="rate-display svelte-wxbf05"><span${attr("class", `rate-number svelte-wxbf05 ${stringify([
69
+ passRate >= 80 ? "pass" : "",
70
+ passRate < 80 && passRate >= 50 ? "warn" : "",
71
+ passRate < 50 ? "fail" : ""
72
+ ].filter(Boolean).join(" "))}`)}>${escape_html(passRate)}%</span> <span class="rate-label svelte-wxbf05">passing</span></div>`;
73
+ } else {
74
+ $$payload.out += "<!--[!-->";
75
+ }
76
+ $$payload.out += `<!--]--></div> `;
77
+ if (reports.length > 0) {
78
+ $$payload.out += "<!--[-->";
79
+ const each_array = ensure_array_like(trend);
80
+ $$payload.out += `<div class="stats-bar svelte-wxbf05"><div class="pass-bar-track svelte-wxbf05"><div class="pass-bar-fill svelte-wxbf05"${attr("style", `width: ${stringify("0")}`)}></div></div> <div class="bar-legend svelte-wxbf05"><span class="legend-pass svelte-wxbf05">${escape_html(passCount)} passed</span> <span class="legend-fail svelte-wxbf05">${escape_html(failCount)} failed</span></div></div> <div class="trend-row svelte-wxbf05"><span class="trend-label svelte-wxbf05">Recent</span> <div class="trend-dots svelte-wxbf05"><!--[-->`;
81
+ for (let i = 0, $$length = each_array.length; i < $$length; i++) {
82
+ let r = each_array[i];
83
+ $$payload.out += `<span${attr("class", `trend-dot svelte-wxbf05 ${stringify([
84
+ r.status === "PASS" ? "pass" : "",
85
+ r.status !== "PASS" ? "fail" : ""
86
+ ].filter(Boolean).join(" "))}`)}${attr("style", `animation-delay: ${stringify(i * 35)}ms`)}${attr("title", `${stringify(r.status)} · ${stringify(r.tags)} · ${stringify(r.date)}`)}></span>`;
87
+ }
88
+ $$payload.out += `<!--]--></div> <span class="trend-hint svelte-wxbf05">← older · newer →</span></div>`;
89
+ } else {
90
+ $$payload.out += "<!--[!-->";
91
+ }
92
+ $$payload.out += `<!--]--></div> `;
93
+ if (reports.length === 0) {
94
+ $$payload.out += "<!--[-->";
95
+ $$payload.out += `<p class="empty svelte-wxbf05">No reports yet. Run a test to generate one.</p>`;
96
+ } else {
97
+ $$payload.out += "<!--[!-->";
98
+ const each_array_1 = ensure_array_like(paginated);
99
+ $$payload.out += `<div class="report-list svelte-wxbf05"><!--[-->`;
100
+ for (let i = 0, $$length = each_array_1.length; i < $$length; i++) {
101
+ let report = each_array_1[i];
102
+ $$payload.out += `<a${attr("class", `report-item svelte-wxbf05 ${stringify([
103
+ report.status === "PASS" ? "is-pass" : "",
104
+ report.status !== "PASS" ? "is-fail" : ""
105
+ ].filter(Boolean).join(" "))}`)}${attr("href", `/reports/${stringify(encodeURIComponent(report.fileName))}`)}${attr("style", `animation-delay: ${stringify(i * 45)}ms`)}><div class="item-left svelte-wxbf05"><span${attr("class", `status-mark svelte-wxbf05 ${stringify([
106
+ report.status === "PASS" ? "pass" : "",
107
+ report.status !== "PASS" ? "fail" : ""
108
+ ].filter(Boolean).join(" "))}`)}>${escape_html(report.status === "PASS" ? "✓" : "✗")}</span> <div class="item-meta svelte-wxbf05"><span class="item-tags svelte-wxbf05">${escape_html(report.tags)}</span> <div class="item-badges svelte-wxbf05">`;
109
+ Badge($$payload, {
110
+ variant: triggerVariant(report.triggerType),
111
+ children: ($$payload2) => {
112
+ $$payload2.out += `<!---->${escape_html(triggerLabel(report.triggerType))}`;
113
+ },
114
+ $$slots: { default: true }
115
+ });
116
+ $$payload.out += `<!----> `;
117
+ Badge($$payload, {
118
+ variant: "neutral",
119
+ children: ($$payload2) => {
120
+ $$payload2.out += `<!---->${escape_html(report.runners)} runner${escape_html(report.runners !== 1 ? "s" : "")}`;
121
+ },
122
+ $$slots: { default: true }
123
+ });
124
+ $$payload.out += `<!----></div></div></div> <div class="item-right svelte-wxbf05"><span class="item-date svelte-wxbf05">${escape_html(report.date)}</span> <svg class="item-arrow svelte-wxbf05" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg></div></a>`;
125
+ }
126
+ $$payload.out += `<!--]--></div> `;
127
+ if (totalPages > 1) {
128
+ $$payload.out += "<!--[-->";
129
+ $$payload.out += `<div class="pagination-wrap svelte-wxbf05">`;
130
+ Pagination($$payload, { current: currentPage, total: totalPages });
131
+ $$payload.out += `<!----></div>`;
132
+ } else {
133
+ $$payload.out += "<!--[!-->";
134
+ }
135
+ $$payload.out += `<!--]-->`;
136
+ }
137
+ $$payload.out += `<!--]-->`;
138
+ pop();
139
+ }
140
+
141
+ export { _page as default };
142
+ //# sourceMappingURL=_page.svelte-DScVdHOq.js.map
@@ -0,0 +1,17 @@
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
+ {"version":3,"file":"_page.svelte-DScVdHOq.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/reports/_page.svelte.js"],"sourcesContent":["import { _ as fallback, V as ensure_array_like, $ as bind_props, p as pop, a as push, W as stringify } from \"../../../chunks/index.js\";\nimport { B as Badge } from \"../../../chunks/Badge.js\";\nimport { a as attr } from \"../../../chunks/attributes.js\";\nimport { e as escape_html } from \"../../../chunks/escaping.js\";\nfunction Pagination($$payload, $$props) {\n push();\n let current = fallback($$props[\"current\"], 1);\n let total = fallback($$props[\"total\"], 1);\n if (total > 1) {\n $$payload.out += \"<!--[-->\";\n const each_array = ensure_array_like(Array(total));\n $$payload.out += `<div class=\"pagination svelte-tsubiy\"><button class=\"arrow svelte-tsubiy\"${attr(\"disabled\", current === 1, true)} aria-label=\"Previous\">←</button> <!--[-->`;\n for (let i = 0, $$length = each_array.length; i < $$length; i++) {\n each_array[i];\n $$payload.out += `<button${attr(\"class\", `page svelte-tsubiy ${stringify([current === i + 1 ? \"active\" : \"\"].filter(Boolean).join(\" \"))}`)}>${escape_html(i + 1)}</button>`;\n }\n $$payload.out += `<!--]--> <button class=\"arrow svelte-tsubiy\"${attr(\"disabled\", current === total, true)} aria-label=\"Next\">→</button></div>`;\n } else {\n $$payload.out += \"<!--[!-->\";\n }\n $$payload.out += `<!--]-->`;\n bind_props($$props, { current, total });\n pop();\n}\nfunction _page($$payload, $$props) {\n push();\n let totalPages, paginated, passCount, failCount, passRate, trend;\n let reports = [];\n let currentPage = 1;\n const PER_PAGE = 15;\n function triggerLabel(type) {\n if (type === \"manual-trigger\") return \"Manual\";\n if (type === \"command-line-trigger\" || type === \"undefined\") return \"CLI\";\n return \"Scheduled\";\n }\n function triggerVariant(type) {\n if (type === \"manual-trigger\") return \"tag\";\n if (type === \"command-line-trigger\" || type === \"undefined\") return \"neutral\";\n return \"schedule\";\n }\n totalPages = Math.ceil(reports.length / PER_PAGE);\n paginated = reports.slice((currentPage - 1) * PER_PAGE, currentPage * PER_PAGE);\n passCount = reports.filter((r) => r.status === \"PASS\").length;\n failCount = reports.length - passCount;\n passRate = reports.length ? Math.round(passCount / reports.length * 100) : 0;\n trend = reports.slice(0, 12).reverse();\n $$payload.out += `<div class=\"page-header svelte-wxbf05\"><div class=\"header-top svelte-wxbf05\"><div><h1 class=\"svelte-wxbf05\">Reports</h1> <p class=\"subtitle svelte-wxbf05\">${escape_html(reports.length)} run${escape_html(reports.length !== 1 ? \"s\" : \"\")} recorded</p></div> `;\n if (reports.length > 0) {\n $$payload.out += \"<!--[-->\";\n $$payload.out += `<div class=\"rate-display svelte-wxbf05\"><span${attr(\"class\", `rate-number svelte-wxbf05 ${stringify([\n passRate >= 80 ? \"pass\" : \"\",\n passRate < 80 && passRate >= 50 ? \"warn\" : \"\",\n passRate < 50 ? \"fail\" : \"\"\n ].filter(Boolean).join(\" \"))}`)}>${escape_html(passRate)}%</span> <span class=\"rate-label svelte-wxbf05\">passing</span></div>`;\n } else {\n $$payload.out += \"<!--[!-->\";\n }\n $$payload.out += `<!--]--></div> `;\n if (reports.length > 0) {\n $$payload.out += \"<!--[-->\";\n const each_array = ensure_array_like(trend);\n $$payload.out += `<div class=\"stats-bar svelte-wxbf05\"><div class=\"pass-bar-track svelte-wxbf05\"><div class=\"pass-bar-fill svelte-wxbf05\"${attr(\"style\", `width: ${stringify(\"0\")}`)}></div></div> <div class=\"bar-legend svelte-wxbf05\"><span class=\"legend-pass svelte-wxbf05\">${escape_html(passCount)} passed</span> <span class=\"legend-fail svelte-wxbf05\">${escape_html(failCount)} failed</span></div></div> <div class=\"trend-row svelte-wxbf05\"><span class=\"trend-label svelte-wxbf05\">Recent</span> <div class=\"trend-dots svelte-wxbf05\"><!--[-->`;\n for (let i = 0, $$length = each_array.length; i < $$length; i++) {\n let r = each_array[i];\n $$payload.out += `<span${attr(\"class\", `trend-dot svelte-wxbf05 ${stringify([\n r.status === \"PASS\" ? \"pass\" : \"\",\n r.status !== \"PASS\" ? \"fail\" : \"\"\n ].filter(Boolean).join(\" \"))}`)}${attr(\"style\", `animation-delay: ${stringify(i * 35)}ms`)}${attr(\"title\", `${stringify(r.status)} · ${stringify(r.tags)} · ${stringify(r.date)}`)}></span>`;\n }\n $$payload.out += `<!--]--></div> <span class=\"trend-hint svelte-wxbf05\">← older · newer →</span></div>`;\n } else {\n $$payload.out += \"<!--[!-->\";\n }\n $$payload.out += `<!--]--></div> `;\n if (reports.length === 0) {\n $$payload.out += \"<!--[-->\";\n $$payload.out += `<p class=\"empty svelte-wxbf05\">No reports yet. Run a test to generate one.</p>`;\n } else {\n $$payload.out += \"<!--[!-->\";\n const each_array_1 = ensure_array_like(paginated);\n $$payload.out += `<div class=\"report-list svelte-wxbf05\"><!--[-->`;\n for (let i = 0, $$length = each_array_1.length; i < $$length; i++) {\n let report = each_array_1[i];\n $$payload.out += `<a${attr(\"class\", `report-item svelte-wxbf05 ${stringify([\n report.status === \"PASS\" ? \"is-pass\" : \"\",\n report.status !== \"PASS\" ? \"is-fail\" : \"\"\n ].filter(Boolean).join(\" \"))}`)}${attr(\"href\", `/reports/${stringify(encodeURIComponent(report.fileName))}`)}${attr(\"style\", `animation-delay: ${stringify(i * 45)}ms`)}><div class=\"item-left svelte-wxbf05\"><span${attr(\"class\", `status-mark svelte-wxbf05 ${stringify([\n report.status === \"PASS\" ? \"pass\" : \"\",\n report.status !== \"PASS\" ? \"fail\" : \"\"\n ].filter(Boolean).join(\" \"))}`)}>${escape_html(report.status === \"PASS\" ? \"✓\" : \"✗\")}</span> <div class=\"item-meta svelte-wxbf05\"><span class=\"item-tags svelte-wxbf05\">${escape_html(report.tags)}</span> <div class=\"item-badges svelte-wxbf05\">`;\n Badge($$payload, {\n variant: triggerVariant(report.triggerType),\n children: ($$payload2) => {\n $$payload2.out += `<!---->${escape_html(triggerLabel(report.triggerType))}`;\n },\n $$slots: { default: true }\n });\n $$payload.out += `<!----> `;\n Badge($$payload, {\n variant: \"neutral\",\n children: ($$payload2) => {\n $$payload2.out += `<!---->${escape_html(report.runners)} runner${escape_html(report.runners !== 1 ? \"s\" : \"\")}`;\n },\n $$slots: { default: true }\n });\n $$payload.out += `<!----></div></div></div> <div class=\"item-right svelte-wxbf05\"><span class=\"item-date svelte-wxbf05\">${escape_html(report.date)}</span> <svg class=\"item-arrow svelte-wxbf05\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line><polyline points=\"12 5 19 12 12 19\"></polyline></svg></div></a>`;\n }\n $$payload.out += `<!--]--></div> `;\n if (totalPages > 1) {\n $$payload.out += \"<!--[-->\";\n $$payload.out += `<div class=\"pagination-wrap svelte-wxbf05\">`;\n Pagination($$payload, { current: currentPage, total: totalPages });\n $$payload.out += `<!----></div>`;\n } else {\n $$payload.out += \"<!--[!-->\";\n }\n $$payload.out += `<!--]-->`;\n }\n $$payload.out += `<!--]-->`;\n pop();\n}\nexport {\n _page as default\n};\n"],"names":[],"mappings":"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"}