@proofhound/web-ui 0.1.6

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 (483) hide show
  1. package/LICENSE +190 -0
  2. package/dist/components/annotations/annotation-claim-dialog.d.ts +13 -0
  3. package/dist/components/annotations/annotation-claim-dialog.d.ts.map +1 -0
  4. package/dist/components/annotations/annotation-claim-dialog.js +60 -0
  5. package/dist/components/annotations/annotation-claim-dialog.js.map +1 -0
  6. package/dist/components/charts/source-legend.d.ts +10 -0
  7. package/dist/components/charts/source-legend.d.ts.map +1 -0
  8. package/dist/components/charts/source-legend.js +15 -0
  9. package/dist/components/charts/source-legend.js.map +1 -0
  10. package/dist/components/charts/source-stacked-bar.d.ts +22 -0
  11. package/dist/components/charts/source-stacked-bar.d.ts.map +1 -0
  12. package/dist/components/charts/source-stacked-bar.js +43 -0
  13. package/dist/components/charts/source-stacked-bar.js.map +1 -0
  14. package/dist/components/index.d.ts +15 -0
  15. package/dist/components/index.d.ts.map +1 -0
  16. package/dist/components/index.js +17 -0
  17. package/dist/components/index.js.map +1 -0
  18. package/dist/components/json-object-textarea.d.ts +11 -0
  19. package/dist/components/json-object-textarea.d.ts.map +1 -0
  20. package/dist/components/json-object-textarea.js +82 -0
  21. package/dist/components/json-object-textarea.js.map +1 -0
  22. package/dist/components/model-context-window-input.d.ts +15 -0
  23. package/dist/components/model-context-window-input.d.ts.map +1 -0
  24. package/dist/components/model-context-window-input.js +57 -0
  25. package/dist/components/model-context-window-input.js.map +1 -0
  26. package/dist/components/model-probe-status.d.ts +11 -0
  27. package/dist/components/model-probe-status.d.ts.map +1 -0
  28. package/dist/components/model-probe-status.js +34 -0
  29. package/dist/components/model-probe-status.js.map +1 -0
  30. package/dist/components/prompt-diff/prompt-diff-split-view.d.ts +28 -0
  31. package/dist/components/prompt-diff/prompt-diff-split-view.d.ts.map +1 -0
  32. package/dist/components/prompt-diff/prompt-diff-split-view.js +101 -0
  33. package/dist/components/prompt-diff/prompt-diff-split-view.js.map +1 -0
  34. package/dist/components/prompt-language-select.d.ts +13 -0
  35. package/dist/components/prompt-language-select.d.ts.map +1 -0
  36. package/dist/components/prompt-language-select.js +14 -0
  37. package/dist/components/prompt-language-select.js.map +1 -0
  38. package/dist/components/prompt-version-picker-row.d.ts +27 -0
  39. package/dist/components/prompt-version-picker-row.d.ts.map +1 -0
  40. package/dist/components/prompt-version-picker-row.js +50 -0
  41. package/dist/components/prompt-version-picker-row.js.map +1 -0
  42. package/dist/components/prompt-version-status-badge.d.ts +8 -0
  43. package/dist/components/prompt-version-status-badge.d.ts.map +1 -0
  44. package/dist/components/prompt-version-status-badge.js +31 -0
  45. package/dist/components/prompt-version-status-badge.js.map +1 -0
  46. package/dist/components/quick-fill/quick-fill-picker.d.ts +42 -0
  47. package/dist/components/quick-fill/quick-fill-picker.d.ts.map +1 -0
  48. package/dist/components/quick-fill/quick-fill-picker.js +46 -0
  49. package/dist/components/quick-fill/quick-fill-picker.js.map +1 -0
  50. package/dist/components/time-zone-preference-menu.d.ts +10 -0
  51. package/dist/components/time-zone-preference-menu.d.ts.map +1 -0
  52. package/dist/components/time-zone-preference-menu.js +33 -0
  53. package/dist/components/time-zone-preference-menu.js.map +1 -0
  54. package/dist/contracts/index.d.ts +13 -0
  55. package/dist/contracts/index.d.ts.map +1 -0
  56. package/dist/contracts/index.js +7 -0
  57. package/dist/contracts/index.js.map +1 -0
  58. package/dist/features/index.d.ts +3 -0
  59. package/dist/features/index.d.ts.map +1 -0
  60. package/dist/features/index.js +4 -0
  61. package/dist/features/index.js.map +1 -0
  62. package/dist/features/model-quick-fill/model-preset-draft.d.ts +19 -0
  63. package/dist/features/model-quick-fill/model-preset-draft.d.ts.map +1 -0
  64. package/dist/features/model-quick-fill/model-preset-draft.js +22 -0
  65. package/dist/features/model-quick-fill/model-preset-draft.js.map +1 -0
  66. package/dist/features/model-quick-fill/model-preset-quick-fill.d.ts +7 -0
  67. package/dist/features/model-quick-fill/model-preset-quick-fill.d.ts.map +1 -0
  68. package/dist/features/model-quick-fill/model-preset-quick-fill.js +73 -0
  69. package/dist/features/model-quick-fill/model-preset-quick-fill.js.map +1 -0
  70. package/dist/hooks/annotation.d.ts +253 -0
  71. package/dist/hooks/annotation.d.ts.map +1 -0
  72. package/dist/hooks/annotation.js +79 -0
  73. package/dist/hooks/annotation.js.map +1 -0
  74. package/dist/hooks/canary-release.d.ts +674 -0
  75. package/dist/hooks/canary-release.d.ts.map +1 -0
  76. package/dist/hooks/canary-release.js +142 -0
  77. package/dist/hooks/canary-release.js.map +1 -0
  78. package/dist/hooks/connector.d.ts +585 -0
  79. package/dist/hooks/connector.d.ts.map +1 -0
  80. package/dist/hooks/connector.js +157 -0
  81. package/dist/hooks/connector.js.map +1 -0
  82. package/dist/hooks/dataset.d.ts +138 -0
  83. package/dist/hooks/dataset.d.ts.map +1 -0
  84. package/dist/hooks/dataset.js +84 -0
  85. package/dist/hooks/dataset.js.map +1 -0
  86. package/dist/hooks/experiment.d.ts +376 -0
  87. package/dist/hooks/experiment.d.ts.map +1 -0
  88. package/dist/hooks/experiment.js +58 -0
  89. package/dist/hooks/experiment.js.map +1 -0
  90. package/dist/hooks/index.d.ts +18 -0
  91. package/dist/hooks/index.d.ts.map +1 -0
  92. package/dist/hooks/index.js +18 -0
  93. package/dist/hooks/index.js.map +1 -0
  94. package/dist/hooks/model.d.ts +327 -0
  95. package/dist/hooks/model.d.ts.map +1 -0
  96. package/dist/hooks/model.js +103 -0
  97. package/dist/hooks/model.js.map +1 -0
  98. package/dist/hooks/optimization.d.ts +557 -0
  99. package/dist/hooks/optimization.d.ts.map +1 -0
  100. package/dist/hooks/optimization.js +94 -0
  101. package/dist/hooks/optimization.js.map +1 -0
  102. package/dist/hooks/production-release.d.ts +141 -0
  103. package/dist/hooks/production-release.d.ts.map +1 -0
  104. package/dist/hooks/production-release.js +51 -0
  105. package/dist/hooks/production-release.js.map +1 -0
  106. package/dist/hooks/project-monitoring.d.ts +199 -0
  107. package/dist/hooks/project-monitoring.d.ts.map +1 -0
  108. package/dist/hooks/project-monitoring.js +55 -0
  109. package/dist/hooks/project-monitoring.js.map +1 -0
  110. package/dist/hooks/prompt.d.ts +509 -0
  111. package/dist/hooks/prompt.d.ts.map +1 -0
  112. package/dist/hooks/prompt.js +127 -0
  113. package/dist/hooks/prompt.js.map +1 -0
  114. package/dist/hooks/quick-start.d.ts +219 -0
  115. package/dist/hooks/quick-start.d.ts.map +1 -0
  116. package/dist/hooks/quick-start.js +35 -0
  117. package/dist/hooks/quick-start.js.map +1 -0
  118. package/dist/hooks/release-line.d.ts +819 -0
  119. package/dist/hooks/release-line.d.ts.map +1 -0
  120. package/dist/hooks/release-line.js +52 -0
  121. package/dist/hooks/release-line.js.map +1 -0
  122. package/dist/hooks/run-result.d.ts +118 -0
  123. package/dist/hooks/run-result.d.ts.map +1 -0
  124. package/dist/hooks/run-result.js +56 -0
  125. package/dist/hooks/run-result.js.map +1 -0
  126. package/dist/hooks/token.d.ts +58 -0
  127. package/dist/hooks/token.d.ts.map +1 -0
  128. package/dist/hooks/token.js +39 -0
  129. package/dist/hooks/token.js.map +1 -0
  130. package/dist/hooks/use-auto-refresh.d.ts +30 -0
  131. package/dist/hooks/use-auto-refresh.d.ts.map +1 -0
  132. package/dist/hooks/use-auto-refresh.js +175 -0
  133. package/dist/hooks/use-auto-refresh.js.map +1 -0
  134. package/dist/hooks/use-date-time-formatter.d.ts +11 -0
  135. package/dist/hooks/use-date-time-formatter.d.ts.map +1 -0
  136. package/dist/hooks/use-date-time-formatter.js +24 -0
  137. package/dist/hooks/use-date-time-formatter.js.map +1 -0
  138. package/dist/hooks/use-delayed-loading.d.ts +25 -0
  139. package/dist/hooks/use-delayed-loading.d.ts.map +1 -0
  140. package/dist/hooks/use-delayed-loading.js +95 -0
  141. package/dist/hooks/use-delayed-loading.js.map +1 -0
  142. package/dist/i18n/index.d.ts +5678 -0
  143. package/dist/i18n/index.d.ts.map +1 -0
  144. package/dist/i18n/index.js +5712 -0
  145. package/dist/i18n/index.js.map +1 -0
  146. package/dist/i18n/language.d.ts +17 -0
  147. package/dist/i18n/language.d.ts.map +1 -0
  148. package/dist/i18n/language.js +43 -0
  149. package/dist/i18n/language.js.map +1 -0
  150. package/dist/index.d.ts +2 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +2 -0
  153. package/dist/index.js.map +1 -0
  154. package/dist/lib/api-error.d.ts +2 -0
  155. package/dist/lib/api-error.d.ts.map +1 -0
  156. package/dist/lib/api-error.js +38 -0
  157. package/dist/lib/api-error.js.map +1 -0
  158. package/dist/lib/format.d.ts +30 -0
  159. package/dist/lib/format.d.ts.map +1 -0
  160. package/dist/lib/format.js +157 -0
  161. package/dist/lib/format.js.map +1 -0
  162. package/dist/lib/index.d.ts +8 -0
  163. package/dist/lib/index.d.ts.map +1 -0
  164. package/dist/lib/index.js +8 -0
  165. package/dist/lib/index.js.map +1 -0
  166. package/dist/lib/model-number.d.ts +2 -0
  167. package/dist/lib/model-number.d.ts.map +1 -0
  168. package/dist/lib/model-number.js +18 -0
  169. package/dist/lib/model-number.js.map +1 -0
  170. package/dist/lib/model-provider-type.d.ts +7 -0
  171. package/dist/lib/model-provider-type.d.ts.map +1 -0
  172. package/dist/lib/model-provider-type.js +28 -0
  173. package/dist/lib/model-provider-type.js.map +1 -0
  174. package/dist/lib/project-name.d.ts +7 -0
  175. package/dist/lib/project-name.d.ts.map +1 -0
  176. package/dist/lib/project-name.js +14 -0
  177. package/dist/lib/project-name.js.map +1 -0
  178. package/dist/lib/releases/release-line-model.d.ts +55 -0
  179. package/dist/lib/releases/release-line-model.d.ts.map +1 -0
  180. package/dist/lib/releases/release-line-model.js +476 -0
  181. package/dist/lib/releases/release-line-model.js.map +1 -0
  182. package/dist/lib/time-zone.d.ts +14 -0
  183. package/dist/lib/time-zone.d.ts.map +1 -0
  184. package/dist/lib/time-zone.js +118 -0
  185. package/dist/lib/time-zone.js.map +1 -0
  186. package/dist/lib/uuid.d.ts +2 -0
  187. package/dist/lib/uuid.d.ts.map +1 -0
  188. package/dist/lib/uuid.js +5 -0
  189. package/dist/lib/uuid.js.map +1 -0
  190. package/dist/providers/display-preferences-provider.d.ts +18 -0
  191. package/dist/providers/display-preferences-provider.d.ts.map +1 -0
  192. package/dist/providers/display-preferences-provider.js +46 -0
  193. package/dist/providers/display-preferences-provider.js.map +1 -0
  194. package/dist/providers/index.d.ts +5 -0
  195. package/dist/providers/index.d.ts.map +1 -0
  196. package/dist/providers/index.js +5 -0
  197. package/dist/providers/index.js.map +1 -0
  198. package/dist/providers/project-context-provider.d.ts +8 -0
  199. package/dist/providers/project-context-provider.d.ts.map +1 -0
  200. package/dist/providers/project-context-provider.js +15 -0
  201. package/dist/providers/project-context-provider.js.map +1 -0
  202. package/dist/providers/proofhound-web-provider.d.ts +9 -0
  203. package/dist/providers/proofhound-web-provider.d.ts.map +1 -0
  204. package/dist/providers/proofhound-web-provider.js +44 -0
  205. package/dist/providers/proofhound-web-provider.js.map +1 -0
  206. package/dist/providers/refine-provider.d.ts +5 -0
  207. package/dist/providers/refine-provider.d.ts.map +1 -0
  208. package/dist/providers/refine-provider.js +23 -0
  209. package/dist/providers/refine-provider.js.map +1 -0
  210. package/dist/screens/annotations/annotation-detail-page.d.ts +5 -0
  211. package/dist/screens/annotations/annotation-detail-page.d.ts.map +1 -0
  212. package/dist/screens/annotations/annotation-detail-page.js +379 -0
  213. package/dist/screens/annotations/annotation-detail-page.js.map +1 -0
  214. package/dist/screens/annotations/annotation-new-page.d.ts +4 -0
  215. package/dist/screens/annotations/annotation-new-page.d.ts.map +1 -0
  216. package/dist/screens/annotations/annotation-new-page.js +125 -0
  217. package/dist/screens/annotations/annotation-new-page.js.map +1 -0
  218. package/dist/screens/annotations/annotation-task-model.d.ts +39 -0
  219. package/dist/screens/annotations/annotation-task-model.d.ts.map +1 -0
  220. package/dist/screens/annotations/annotation-task-model.js +88 -0
  221. package/dist/screens/annotations/annotation-task-model.js.map +1 -0
  222. package/dist/screens/annotations/annotation-ui.d.ts +33 -0
  223. package/dist/screens/annotations/annotation-ui.d.ts.map +1 -0
  224. package/dist/screens/annotations/annotation-ui.js +92 -0
  225. package/dist/screens/annotations/annotation-ui.js.map +1 -0
  226. package/dist/screens/annotations/annotations-list-page.d.ts +4 -0
  227. package/dist/screens/annotations/annotations-list-page.d.ts.map +1 -0
  228. package/dist/screens/annotations/annotations-list-page.js +82 -0
  229. package/dist/screens/annotations/annotations-list-page.js.map +1 -0
  230. package/dist/screens/connectors/connector-detail-page.d.ts +5 -0
  231. package/dist/screens/connectors/connector-detail-page.d.ts.map +1 -0
  232. package/dist/screens/connectors/connector-detail-page.js +838 -0
  233. package/dist/screens/connectors/connector-detail-page.js.map +1 -0
  234. package/dist/screens/connectors/connector-form-page.d.ts +8 -0
  235. package/dist/screens/connectors/connector-form-page.d.ts.map +1 -0
  236. package/dist/screens/connectors/connector-form-page.js +328 -0
  237. package/dist/screens/connectors/connector-form-page.js.map +1 -0
  238. package/dist/screens/connectors/connector-peek-dialog.d.ts +8 -0
  239. package/dist/screens/connectors/connector-peek-dialog.d.ts.map +1 -0
  240. package/dist/screens/connectors/connector-peek-dialog.js +24 -0
  241. package/dist/screens/connectors/connector-peek-dialog.js.map +1 -0
  242. package/dist/screens/connectors/connector-types.d.ts +36 -0
  243. package/dist/screens/connectors/connector-types.d.ts.map +1 -0
  244. package/dist/screens/connectors/connector-types.js +48 -0
  245. package/dist/screens/connectors/connector-types.js.map +1 -0
  246. package/dist/screens/connectors/connector-ui.d.ts +14 -0
  247. package/dist/screens/connectors/connector-ui.d.ts.map +1 -0
  248. package/dist/screens/connectors/connector-ui.js +40 -0
  249. package/dist/screens/connectors/connector-ui.js.map +1 -0
  250. package/dist/screens/connectors/connectors-list-page.d.ts +4 -0
  251. package/dist/screens/connectors/connectors-list-page.d.ts.map +1 -0
  252. package/dist/screens/connectors/connectors-list-page.js +220 -0
  253. package/dist/screens/connectors/connectors-list-page.js.map +1 -0
  254. package/dist/screens/dashboard/dashboard-screen.d.ts +5 -0
  255. package/dist/screens/dashboard/dashboard-screen.d.ts.map +1 -0
  256. package/dist/screens/dashboard/dashboard-screen.js +524 -0
  257. package/dist/screens/dashboard/dashboard-screen.js.map +1 -0
  258. package/dist/screens/datasets/dataset-detail-helpers.d.ts +10 -0
  259. package/dist/screens/datasets/dataset-detail-helpers.d.ts.map +1 -0
  260. package/dist/screens/datasets/dataset-detail-helpers.js +84 -0
  261. package/dist/screens/datasets/dataset-detail-helpers.js.map +1 -0
  262. package/dist/screens/datasets/dataset-detail-page.d.ts +6 -0
  263. package/dist/screens/datasets/dataset-detail-page.d.ts.map +1 -0
  264. package/dist/screens/datasets/dataset-detail-page.js +379 -0
  265. package/dist/screens/datasets/dataset-detail-page.js.map +1 -0
  266. package/dist/screens/datasets/dataset-import-runner.d.ts +17 -0
  267. package/dist/screens/datasets/dataset-import-runner.d.ts.map +1 -0
  268. package/dist/screens/datasets/dataset-import-runner.js +33 -0
  269. package/dist/screens/datasets/dataset-import-runner.js.map +1 -0
  270. package/dist/screens/datasets/dataset-mappers.d.ts +5 -0
  271. package/dist/screens/datasets/dataset-mappers.d.ts.map +1 -0
  272. package/dist/screens/datasets/dataset-mappers.js +79 -0
  273. package/dist/screens/datasets/dataset-mappers.js.map +1 -0
  274. package/dist/screens/datasets/dataset-samples-table.d.ts +21 -0
  275. package/dist/screens/datasets/dataset-samples-table.d.ts.map +1 -0
  276. package/dist/screens/datasets/dataset-samples-table.js +59 -0
  277. package/dist/screens/datasets/dataset-samples-table.js.map +1 -0
  278. package/dist/screens/datasets/dataset-transfer-progress.d.ts +30 -0
  279. package/dist/screens/datasets/dataset-transfer-progress.d.ts.map +1 -0
  280. package/dist/screens/datasets/dataset-transfer-progress.js +157 -0
  281. package/dist/screens/datasets/dataset-transfer-progress.js.map +1 -0
  282. package/dist/screens/datasets/dataset-types.d.ts +59 -0
  283. package/dist/screens/datasets/dataset-types.d.ts.map +1 -0
  284. package/dist/screens/datasets/dataset-types.js +15 -0
  285. package/dist/screens/datasets/dataset-types.js.map +1 -0
  286. package/dist/screens/datasets/dataset-ui.d.ts +49 -0
  287. package/dist/screens/datasets/dataset-ui.d.ts.map +1 -0
  288. package/dist/screens/datasets/dataset-ui.js +163 -0
  289. package/dist/screens/datasets/dataset-ui.js.map +1 -0
  290. package/dist/screens/datasets/dataset-upload-page.d.ts +4 -0
  291. package/dist/screens/datasets/dataset-upload-page.d.ts.map +1 -0
  292. package/dist/screens/datasets/dataset-upload-page.js +425 -0
  293. package/dist/screens/datasets/dataset-upload-page.js.map +1 -0
  294. package/dist/screens/datasets/dataset-upload-parser.d.ts +21 -0
  295. package/dist/screens/datasets/dataset-upload-parser.d.ts.map +1 -0
  296. package/dist/screens/datasets/dataset-upload-parser.js +536 -0
  297. package/dist/screens/datasets/dataset-upload-parser.js.map +1 -0
  298. package/dist/screens/datasets/datasets-list-page.d.ts +4 -0
  299. package/dist/screens/datasets/datasets-list-page.d.ts.map +1 -0
  300. package/dist/screens/datasets/datasets-list-page.js +249 -0
  301. package/dist/screens/datasets/datasets-list-page.js.map +1 -0
  302. package/dist/screens/experiments/experiment-detail-page.d.ts +5 -0
  303. package/dist/screens/experiments/experiment-detail-page.d.ts.map +1 -0
  304. package/dist/screens/experiments/experiment-detail-page.js +460 -0
  305. package/dist/screens/experiments/experiment-detail-page.js.map +1 -0
  306. package/dist/screens/experiments/experiment-new-page.d.ts +21 -0
  307. package/dist/screens/experiments/experiment-new-page.d.ts.map +1 -0
  308. package/dist/screens/experiments/experiment-new-page.js +427 -0
  309. package/dist/screens/experiments/experiment-new-page.js.map +1 -0
  310. package/dist/screens/experiments/experiment-option-adapter.d.ts +68 -0
  311. package/dist/screens/experiments/experiment-option-adapter.d.ts.map +1 -0
  312. package/dist/screens/experiments/experiment-option-adapter.js +225 -0
  313. package/dist/screens/experiments/experiment-option-adapter.js.map +1 -0
  314. package/dist/screens/experiments/experiment-progress.d.ts +5 -0
  315. package/dist/screens/experiments/experiment-progress.d.ts.map +1 -0
  316. package/dist/screens/experiments/experiment-progress.js +15 -0
  317. package/dist/screens/experiments/experiment-progress.js.map +1 -0
  318. package/dist/screens/experiments/experiment-repeat-href.d.ts +17 -0
  319. package/dist/screens/experiments/experiment-repeat-href.d.ts.map +1 -0
  320. package/dist/screens/experiments/experiment-repeat-href.js +32 -0
  321. package/dist/screens/experiments/experiment-repeat-href.js.map +1 -0
  322. package/dist/screens/experiments/experiment-theme.d.ts +43 -0
  323. package/dist/screens/experiments/experiment-theme.d.ts.map +1 -0
  324. package/dist/screens/experiments/experiment-theme.js +43 -0
  325. package/dist/screens/experiments/experiment-theme.js.map +1 -0
  326. package/dist/screens/experiments/experiment-ui.d.ts +36 -0
  327. package/dist/screens/experiments/experiment-ui.d.ts.map +1 -0
  328. package/dist/screens/experiments/experiment-ui.js +46 -0
  329. package/dist/screens/experiments/experiment-ui.js.map +1 -0
  330. package/dist/screens/experiments/experiment-view-model.d.ts +118 -0
  331. package/dist/screens/experiments/experiment-view-model.d.ts.map +1 -0
  332. package/dist/screens/experiments/experiment-view-model.js +114 -0
  333. package/dist/screens/experiments/experiment-view-model.js.map +1 -0
  334. package/dist/screens/experiments/experiments-comparison-view.d.ts +10 -0
  335. package/dist/screens/experiments/experiments-comparison-view.d.ts.map +1 -0
  336. package/dist/screens/experiments/experiments-comparison-view.js +215 -0
  337. package/dist/screens/experiments/experiments-comparison-view.js.map +1 -0
  338. package/dist/screens/experiments/experiments-list-page.d.ts +4 -0
  339. package/dist/screens/experiments/experiments-list-page.d.ts.map +1 -0
  340. package/dist/screens/experiments/experiments-list-page.js +364 -0
  341. package/dist/screens/experiments/experiments-list-page.js.map +1 -0
  342. package/dist/screens/experiments/experiments-table.d.ts +18 -0
  343. package/dist/screens/experiments/experiments-table.d.ts.map +1 -0
  344. package/dist/screens/experiments/experiments-table.js +97 -0
  345. package/dist/screens/experiments/experiments-table.js.map +1 -0
  346. package/dist/screens/experiments/run-result-detail-sheet.d.ts +9 -0
  347. package/dist/screens/experiments/run-result-detail-sheet.d.ts.map +1 -0
  348. package/dist/screens/experiments/run-result-detail-sheet.js +89 -0
  349. package/dist/screens/experiments/run-result-detail-sheet.js.map +1 -0
  350. package/dist/screens/experiments/run-result-display.d.ts +28 -0
  351. package/dist/screens/experiments/run-result-display.d.ts.map +1 -0
  352. package/dist/screens/experiments/run-result-display.js +124 -0
  353. package/dist/screens/experiments/run-result-display.js.map +1 -0
  354. package/dist/screens/experiments/run-result-labels.d.ts +16 -0
  355. package/dist/screens/experiments/run-result-labels.d.ts.map +1 -0
  356. package/dist/screens/experiments/run-result-labels.js +52 -0
  357. package/dist/screens/experiments/run-result-labels.js.map +1 -0
  358. package/dist/screens/index.d.ts +29 -0
  359. package/dist/screens/index.d.ts.map +1 -0
  360. package/dist/screens/index.js +43 -0
  361. package/dist/screens/index.js.map +1 -0
  362. package/dist/screens/models/model-form-page.d.ts +9 -0
  363. package/dist/screens/models/model-form-page.d.ts.map +1 -0
  364. package/dist/screens/models/model-form-page.js +876 -0
  365. package/dist/screens/models/model-form-page.js.map +1 -0
  366. package/dist/screens/models/model-view-model.d.ts +66 -0
  367. package/dist/screens/models/model-view-model.d.ts.map +1 -0
  368. package/dist/screens/models/model-view-model.js +36 -0
  369. package/dist/screens/models/model-view-model.js.map +1 -0
  370. package/dist/screens/models/models-list-page.d.ts +4 -0
  371. package/dist/screens/models/models-list-page.d.ts.map +1 -0
  372. package/dist/screens/models/models-list-page.js +352 -0
  373. package/dist/screens/models/models-list-page.js.map +1 -0
  374. package/dist/screens/models/project-model-adapter.d.ts +5 -0
  375. package/dist/screens/models/project-model-adapter.d.ts.map +1 -0
  376. package/dist/screens/models/project-model-adapter.js +63 -0
  377. package/dist/screens/models/project-model-adapter.js.map +1 -0
  378. package/dist/screens/monitoring/big-chart-card.d.ts +36 -0
  379. package/dist/screens/monitoring/big-chart-card.d.ts.map +1 -0
  380. package/dist/screens/monitoring/big-chart-card.js +32 -0
  381. package/dist/screens/monitoring/big-chart-card.js.map +1 -0
  382. package/dist/screens/monitoring/monitoring-filter-strip.d.ts +14 -0
  383. package/dist/screens/monitoring/monitoring-filter-strip.d.ts.map +1 -0
  384. package/dist/screens/monitoring/monitoring-filter-strip.js +36 -0
  385. package/dist/screens/monitoring/monitoring-filter-strip.js.map +1 -0
  386. package/dist/screens/monitoring/project-monitoring-page.d.ts +9 -0
  387. package/dist/screens/monitoring/project-monitoring-page.d.ts.map +1 -0
  388. package/dist/screens/monitoring/project-monitoring-page.js +240 -0
  389. package/dist/screens/monitoring/project-monitoring-page.js.map +1 -0
  390. package/dist/screens/monitoring/ranking-cards.d.ts +23 -0
  391. package/dist/screens/monitoring/ranking-cards.d.ts.map +1 -0
  392. package/dist/screens/monitoring/ranking-cards.js +78 -0
  393. package/dist/screens/monitoring/ranking-cards.js.map +1 -0
  394. package/dist/screens/optimizations/optimization-detail-page.d.ts +5 -0
  395. package/dist/screens/optimizations/optimization-detail-page.d.ts.map +1 -0
  396. package/dist/screens/optimizations/optimization-detail-page.js +934 -0
  397. package/dist/screens/optimizations/optimization-detail-page.js.map +1 -0
  398. package/dist/screens/optimizations/optimization-mappers.d.ts +56 -0
  399. package/dist/screens/optimizations/optimization-mappers.d.ts.map +1 -0
  400. package/dist/screens/optimizations/optimization-mappers.js +142 -0
  401. package/dist/screens/optimizations/optimization-mappers.js.map +1 -0
  402. package/dist/screens/optimizations/optimization-new-page.d.ts +8 -0
  403. package/dist/screens/optimizations/optimization-new-page.d.ts.map +1 -0
  404. package/dist/screens/optimizations/optimization-new-page.js +732 -0
  405. package/dist/screens/optimizations/optimization-new-page.js.map +1 -0
  406. package/dist/screens/optimizations/optimization-theme.d.ts +43 -0
  407. package/dist/screens/optimizations/optimization-theme.d.ts.map +1 -0
  408. package/dist/screens/optimizations/optimization-theme.js +46 -0
  409. package/dist/screens/optimizations/optimization-theme.js.map +1 -0
  410. package/dist/screens/optimizations/optimization-ui.d.ts +60 -0
  411. package/dist/screens/optimizations/optimization-ui.d.ts.map +1 -0
  412. package/dist/screens/optimizations/optimization-ui.js +164 -0
  413. package/dist/screens/optimizations/optimization-ui.js.map +1 -0
  414. package/dist/screens/optimizations/optimizations-list-page.d.ts +4 -0
  415. package/dist/screens/optimizations/optimizations-list-page.d.ts.map +1 -0
  416. package/dist/screens/optimizations/optimizations-list-page.js +358 -0
  417. package/dist/screens/optimizations/optimizations-list-page.js.map +1 -0
  418. package/dist/screens/prompts/prompt-body-editor.d.ts +15 -0
  419. package/dist/screens/prompts/prompt-body-editor.d.ts.map +1 -0
  420. package/dist/screens/prompts/prompt-body-editor.js +165 -0
  421. package/dist/screens/prompts/prompt-body-editor.js.map +1 -0
  422. package/dist/screens/prompts/prompt-dataset-variables.d.ts +4 -0
  423. package/dist/screens/prompts/prompt-dataset-variables.d.ts.map +1 -0
  424. package/dist/screens/prompts/prompt-dataset-variables.js +27 -0
  425. package/dist/screens/prompts/prompt-dataset-variables.js.map +1 -0
  426. package/dist/screens/prompts/prompt-detail-page.d.ts +5 -0
  427. package/dist/screens/prompts/prompt-detail-page.d.ts.map +1 -0
  428. package/dist/screens/prompts/prompt-detail-page.js +1013 -0
  429. package/dist/screens/prompts/prompt-detail-page.js.map +1 -0
  430. package/dist/screens/prompts/prompt-model.d.ts +77 -0
  431. package/dist/screens/prompts/prompt-model.d.ts.map +1 -0
  432. package/dist/screens/prompts/prompt-model.js +152 -0
  433. package/dist/screens/prompts/prompt-model.js.map +1 -0
  434. package/dist/screens/prompts/prompt-preview-parts.d.ts +12 -0
  435. package/dist/screens/prompts/prompt-preview-parts.d.ts.map +1 -0
  436. package/dist/screens/prompts/prompt-preview-parts.js +32 -0
  437. package/dist/screens/prompts/prompt-preview-parts.js.map +1 -0
  438. package/dist/screens/prompts/prompt-preview.d.ts +10 -0
  439. package/dist/screens/prompts/prompt-preview.d.ts.map +1 -0
  440. package/dist/screens/prompts/prompt-preview.js +16 -0
  441. package/dist/screens/prompts/prompt-preview.js.map +1 -0
  442. package/dist/screens/prompts/prompt-ui.d.ts +30 -0
  443. package/dist/screens/prompts/prompt-ui.d.ts.map +1 -0
  444. package/dist/screens/prompts/prompt-ui.js +51 -0
  445. package/dist/screens/prompts/prompt-ui.js.map +1 -0
  446. package/dist/screens/prompts/prompts-list-page.d.ts +5 -0
  447. package/dist/screens/prompts/prompts-list-page.d.ts.map +1 -0
  448. package/dist/screens/prompts/prompts-list-page.js +208 -0
  449. package/dist/screens/prompts/prompts-list-page.js.map +1 -0
  450. package/dist/screens/quick-start/quick-start-screen.d.ts +2 -0
  451. package/dist/screens/quick-start/quick-start-screen.d.ts.map +1 -0
  452. package/dist/screens/quick-start/quick-start-screen.js +486 -0
  453. package/dist/screens/quick-start/quick-start-screen.js.map +1 -0
  454. package/dist/screens/releases/release-line-detail-page.d.ts +5 -0
  455. package/dist/screens/releases/release-line-detail-page.d.ts.map +1 -0
  456. package/dist/screens/releases/release-line-detail-page.js +973 -0
  457. package/dist/screens/releases/release-line-detail-page.js.map +1 -0
  458. package/dist/screens/releases/release-line-ui.d.ts +30 -0
  459. package/dist/screens/releases/release-line-ui.d.ts.map +1 -0
  460. package/dist/screens/releases/release-line-ui.js +197 -0
  461. package/dist/screens/releases/release-line-ui.js.map +1 -0
  462. package/dist/screens/releases/release-new-model.d.ts +5 -0
  463. package/dist/screens/releases/release-new-model.d.ts.map +1 -0
  464. package/dist/screens/releases/release-new-model.js +18 -0
  465. package/dist/screens/releases/release-new-model.js.map +1 -0
  466. package/dist/screens/releases/release-new-page.d.ts +6 -0
  467. package/dist/screens/releases/release-new-page.d.ts.map +1 -0
  468. package/dist/screens/releases/release-new-page.js +816 -0
  469. package/dist/screens/releases/release-new-page.js.map +1 -0
  470. package/dist/screens/releases/release-topology-canvas.d.ts +13 -0
  471. package/dist/screens/releases/release-topology-canvas.d.ts.map +1 -0
  472. package/dist/screens/releases/release-topology-canvas.js +856 -0
  473. package/dist/screens/releases/release-topology-canvas.js.map +1 -0
  474. package/dist/screens/releases/releases-list-page.d.ts +4 -0
  475. package/dist/screens/releases/releases-list-page.d.ts.map +1 -0
  476. package/dist/screens/releases/releases-list-page.js +86 -0
  477. package/dist/screens/releases/releases-list-page.js.map +1 -0
  478. package/dist/screens/settings/settings-page.d.ts +2 -0
  479. package/dist/screens/settings/settings-page.d.ts.map +1 -0
  480. package/dist/screens/settings/settings-page.js +250 -0
  481. package/dist/screens/settings/settings-page.js.map +1 -0
  482. package/dist/styles/globals.css +961 -0
  483. package/package.json +84 -0
@@ -0,0 +1,364 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import Link from 'next/link';
4
+ import { usePathname, useRouter, useSearchParams } from 'next/navigation';
5
+ import { useCallback, useMemo, useState } from 'react';
6
+ import { useQueryClient } from '@tanstack/react-query';
7
+ import { BarChart3, List, Loader2, Play, Plus, Search, Sliders, Square, Trash2, X } from 'lucide-react';
8
+ import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, Input, ListRowsSkeleton, PlatformLoaderOverlay, Skeleton, ResourcePaginationFooter, SlidingViewToggle, } from '@proofhound/ui';
9
+ import { Main } from '@proofhound/ui/layout';
10
+ import { AUTO_REFRESH_INTERVAL_MS, useAutoRefresh } from '../../hooks';
11
+ import { useDateTimeFormatter } from '../../hooks';
12
+ import { useControlExperiment, useDeleteExperiment, useExperiments } from '../../hooks';
13
+ import { useDelayedLoading } from '../../hooks';
14
+ import { useI18n } from '../../i18n';
15
+ import { getApiErrorMessage } from '../../lib';
16
+ import { ChipFilter } from './experiment-ui';
17
+ import { ExperimentsComparisonView } from './experiments-comparison-view';
18
+ import { ExperimentsTable } from './experiments-table';
19
+ const PAGE_SIZE_OPTIONS = [10, 20, 50, 100];
20
+ const STATUS_FILTERS = [
21
+ { key: 'running', labelKey: 'experiments.status.running' },
22
+ { key: 'success', labelKey: 'experiments.status.success' },
23
+ { key: 'failed', labelKey: 'experiments.status.failed' },
24
+ { key: 'stopped', labelKey: 'experiments.status.stopped' },
25
+ { key: 'cancelled', labelKey: 'experiments.status.cancelled' },
26
+ ];
27
+ const SORT_LABEL_KEYS = {
28
+ accuracy: 'experiments.sort.accuracy',
29
+ updated: 'experiments.sort.updated',
30
+ duration: 'experiments.sort.duration',
31
+ };
32
+ function resolveViewMode(value) {
33
+ return value === 'compare' ? 'compare' : 'table';
34
+ }
35
+ function parseComparisonIds(value) {
36
+ if (!value)
37
+ return [];
38
+ return [
39
+ ...new Set(value
40
+ .split(',')
41
+ .map((id) => id.trim())
42
+ .filter(Boolean)),
43
+ ];
44
+ }
45
+ function HeaderStatCard({ label, value, unit, footer, }) {
46
+ return (_jsxs("div", { className: "flex min-w-0 flex-col", children: [_jsx("span", { className: "font-mono text-[10.5px] uppercase tracking-wide text-muted-foreground", children: label }), _jsxs("span", { className: "mt-1 text-[18px] font-semibold tracking-tight", children: [value, unit && _jsx("span", { className: "ml-1.5 text-[12px] font-normal text-muted-foreground", children: unit })] }), footer && _jsx("span", { className: "mt-0.5 text-[11.5px] text-muted-foreground", children: footer })] }));
47
+ }
48
+ function formatTemplate(template, values) {
49
+ return template.replace(/\{(\w+)\}/g, (_, key) => {
50
+ const value = values[key];
51
+ return value === undefined ? `{${key}}` : String(value);
52
+ });
53
+ }
54
+ function formatDuration(totalSeconds) {
55
+ if (!totalSeconds || totalSeconds <= 0 || !Number.isFinite(totalSeconds))
56
+ return '—';
57
+ const seconds = Math.round(totalSeconds);
58
+ if (seconds < 60)
59
+ return `${seconds}s`;
60
+ const minutes = Math.floor(seconds / 60);
61
+ const restSeconds = seconds % 60;
62
+ if (minutes < 60)
63
+ return restSeconds ? `${minutes}m ${String(restSeconds).padStart(2, '0')}s` : `${minutes}m`;
64
+ const hours = Math.floor(minutes / 60);
65
+ const restMinutes = minutes % 60;
66
+ return restMinutes ? `${hours}h ${restMinutes}m` : `${hours}h`;
67
+ }
68
+ function formatCompactNumber(value) {
69
+ if (!Number.isFinite(value))
70
+ return '—';
71
+ if (value >= 1_000_000)
72
+ return `${(value / 1_000_000).toFixed(1)}M`;
73
+ if (value >= 1_000)
74
+ return `${(value / 1_000).toFixed(1)}K`;
75
+ return String(Math.round(value));
76
+ }
77
+ function formatMoney(value) {
78
+ if (!Number.isFinite(value))
79
+ return '$ 0.00';
80
+ return `$ ${value.toFixed(2)}`;
81
+ }
82
+ function getDurationSeconds(experiment) {
83
+ const startedAt = Date.parse(experiment.startedAt ?? experiment.createdAt);
84
+ const endedAt = experiment.status === 'running' ? Date.now() : Date.parse(experiment.finishedAt ?? experiment.updatedAt);
85
+ if (!Number.isFinite(startedAt) || !Number.isFinite(endedAt) || endedAt < startedAt)
86
+ return 0;
87
+ return Math.round((endedAt - startedAt) / 1000);
88
+ }
89
+ function estimateRemainingSeconds(experiment) {
90
+ if (experiment.status !== 'running' || experiment.processedSamples <= 0)
91
+ return null;
92
+ const remaining = Math.max(0, experiment.totalSamples - experiment.processedSamples);
93
+ if (remaining === 0)
94
+ return 0;
95
+ return Math.round((getDurationSeconds(experiment) / experiment.processedSamples) * remaining);
96
+ }
97
+ function toExperimentSummary(experiment, formatDateTime) {
98
+ const durationSeconds = getDurationSeconds(experiment);
99
+ const remainingSeconds = estimateRemainingSeconds(experiment);
100
+ const ownerHandle = experiment.createdByUsername
101
+ ? `@${experiment.createdByUsername}`
102
+ : (experiment.createdByDisplayName ?? '—');
103
+ return {
104
+ id: experiment.id,
105
+ name: experiment.name,
106
+ description: experiment.description ??
107
+ `${experiment.promptName} ${experiment.promptVersionLabel} · ${experiment.datasetName} · ${experiment.modelName}`,
108
+ ownerHandle,
109
+ optimizationId: experiment.optimizationId ?? undefined,
110
+ roundIndex: experiment.roundIndex ?? undefined,
111
+ promptId: experiment.promptId,
112
+ promptVersionId: experiment.promptVersionId,
113
+ datasetId: experiment.datasetId,
114
+ modelId: experiment.modelId,
115
+ promptName: experiment.promptName,
116
+ promptVersion: experiment.promptVersionLabel,
117
+ promptVariableTypes: experiment.promptVariableTypes,
118
+ datasetName: experiment.datasetName,
119
+ datasetSamples: experiment.datasetSamples,
120
+ datasetHasImages: experiment.datasetHasImages,
121
+ modelName: experiment.modelName,
122
+ modelVariant: experiment.modelVariant,
123
+ status: experiment.status,
124
+ progressDone: experiment.processedSamples,
125
+ progressTotal: experiment.totalSamples,
126
+ elapsedLabel: formatDuration(durationSeconds),
127
+ remainingLabel: remainingSeconds === null ? undefined : formatDuration(remainingSeconds),
128
+ durationLabel: experiment.finishedAt ? formatDuration(durationSeconds) : undefined,
129
+ agoLabel: formatDateTime(experiment.finishedAt ?? experiment.updatedAt, { fallback: '—' }),
130
+ failureReason: experiment.failureReason ?? undefined,
131
+ failureKind: experiment.failureKind ?? undefined,
132
+ failedSamples: experiment.failedSamples,
133
+ accuracy: experiment.metrics?.accuracy ?? undefined,
134
+ precision: experiment.metrics?.precision ?? undefined,
135
+ recall: experiment.metrics?.recall ?? undefined,
136
+ f1: experiment.metrics?.f1 ?? undefined,
137
+ perClassMetrics: experiment.metrics?.perClass ?? undefined,
138
+ inputTokens: experiment.metrics?.inputTokens ?? undefined,
139
+ outputTokens: experiment.metrics?.outputTokens ?? undefined,
140
+ costEstimate: experiment.metrics?.costEstimate ?? undefined,
141
+ averageLatencyMs: experiment.metrics?.averageLatencyMs ?? undefined,
142
+ p50LatencyMs: experiment.metrics?.p50LatencyMs ?? undefined,
143
+ p95LatencyMs: experiment.metrics?.p95LatencyMs ?? undefined,
144
+ startedAt: experiment.startedAt ?? experiment.createdAt,
145
+ runConfig: experiment.runConfig,
146
+ };
147
+ }
148
+ function getExperimentSearchText(experiment) {
149
+ return [
150
+ experiment.name,
151
+ experiment.description,
152
+ experiment.promptName,
153
+ experiment.promptVersion,
154
+ experiment.datasetName,
155
+ experiment.modelName,
156
+ experiment.modelVariant,
157
+ experiment.ownerHandle,
158
+ ]
159
+ .join(' ')
160
+ .toLowerCase();
161
+ }
162
+ function getStatusCount(experiments, status) {
163
+ return experiments.filter((experiment) => experiment.status === status).length;
164
+ }
165
+ function getHeaderStats(stats) {
166
+ return {
167
+ newThisWeek: String(stats?.newThisWeek ?? 0),
168
+ averageDuration: formatDuration(stats?.averageDurationSeconds),
169
+ durationStat: {
170
+ median: formatDuration(stats?.medianDurationSeconds),
171
+ p90: formatDuration(stats?.p90DurationSeconds),
172
+ },
173
+ tokens: formatCompactNumber((stats?.inputTokens ?? 0) + (stats?.outputTokens ?? 0)),
174
+ tokenSplit: {
175
+ input: formatCompactNumber(stats?.inputTokens ?? 0),
176
+ output: formatCompactNumber(stats?.outputTokens ?? 0),
177
+ },
178
+ cost: formatMoney(stats?.costEstimate ?? 0),
179
+ };
180
+ }
181
+ export function ExperimentsListPage({ projectId }) {
182
+ const { t } = useI18n();
183
+ const { formatDateTime } = useDateTimeFormatter();
184
+ const router = useRouter();
185
+ const pathname = usePathname();
186
+ const searchParams = useSearchParams();
187
+ const viewMode = resolveViewMode(searchParams.get('view'));
188
+ const comparisonIds = useMemo(() => parseComparisonIds(searchParams.get('compare')), [searchParams]);
189
+ const [activeFilter, setActiveFilter] = useState('all');
190
+ const [searchQuery, setSearchQuery] = useState('');
191
+ const [selectedIds, setSelectedIds] = useState([]);
192
+ const [pageIndex, setPageIndex] = useState(0);
193
+ const [pageSize, setPageSize] = useState(10);
194
+ const [sortMode, setSortMode] = useState('updated');
195
+ const [actionError, setActionError] = useState(null);
196
+ const [bulkBusy, setBulkBusy] = useState(false);
197
+ const [deleteTarget, setDeleteTarget] = useState(null);
198
+ const experimentsQuery = useExperiments(projectId, { sort: sortMode });
199
+ const controlExperiment = useControlExperiment(projectId);
200
+ const deleteExperiment = useDeleteExperiment(projectId);
201
+ const queryClient = useQueryClient();
202
+ const experiments = useMemo(() => (experimentsQuery.data?.data ?? []).map((item) => toExperimentSummary(item, formatDateTime)), [experimentsQuery.data?.data, formatDateTime]);
203
+ const headerStats = useMemo(() => getHeaderStats(experimentsQuery.data?.stats), [experimentsQuery.data?.stats]);
204
+ const hasLiveExperiments = useMemo(() => experiments.some((experiment) => experiment.status === 'running'), [experiments]);
205
+ const onAutoRefreshTick = useCallback(async () => {
206
+ await queryClient.invalidateQueries({ queryKey: ['experiments', projectId], exact: false });
207
+ }, [queryClient, projectId]);
208
+ useAutoRefresh({
209
+ intervalMs: AUTO_REFRESH_INTERVAL_MS,
210
+ enabled: hasLiveExperiments,
211
+ onTick: onAutoRefreshTick,
212
+ });
213
+ const filteredExperiments = useMemo(() => {
214
+ const query = searchQuery.trim().toLowerCase();
215
+ const list = experiments
216
+ .filter((experiment) => activeFilter === 'all' || experiment.status === activeFilter)
217
+ .filter((experiment) => !query || getExperimentSearchText(experiment).includes(query));
218
+ return [...list].sort((a, b) => {
219
+ if (sortMode === 'accuracy') {
220
+ return (b.accuracy ?? -1) - (a.accuracy ?? -1);
221
+ }
222
+ if (sortMode === 'updated') {
223
+ return b.startedAt.localeCompare(a.startedAt);
224
+ }
225
+ return b.progressDone / Math.max(1, b.progressTotal) - a.progressDone / Math.max(1, a.progressTotal);
226
+ });
227
+ }, [activeFilter, experiments, searchQuery, sortMode]);
228
+ const comparisonSelectedIds = useMemo(() => {
229
+ const existingIds = new Set(experiments.map((experiment) => experiment.id));
230
+ return comparisonIds.filter((id) => existingIds.has(id));
231
+ }, [comparisonIds, experiments]);
232
+ const replaceListUrl = useCallback(({ nextViewMode = viewMode, nextComparisonIds = comparisonIds, }) => {
233
+ const params = new URLSearchParams(searchParams.toString());
234
+ if (nextViewMode === 'compare')
235
+ params.set('view', 'compare');
236
+ else
237
+ params.delete('view');
238
+ const uniqueComparisonIds = [...new Set(nextComparisonIds)];
239
+ if (uniqueComparisonIds.length > 0)
240
+ params.set('compare', uniqueComparisonIds.join(','));
241
+ else
242
+ params.delete('compare');
243
+ const query = params.toString();
244
+ router.replace(query ? `${pathname}?${query}` : pathname, { scroll: false });
245
+ }, [comparisonIds, pathname, router, searchParams, viewMode]);
246
+ const updateViewMode = useCallback((nextViewMode) => {
247
+ replaceListUrl({ nextViewMode });
248
+ }, [replaceListUrl]);
249
+ const updateComparisonIds = useCallback((nextIds) => {
250
+ replaceListUrl({ nextViewMode: 'compare', nextComparisonIds: nextIds });
251
+ }, [replaceListUrl]);
252
+ const pageCount = Math.max(1, Math.ceil(filteredExperiments.length / pageSize));
253
+ const safePageIndex = Math.min(pageIndex, pageCount - 1);
254
+ const pagedExperiments = useMemo(() => filteredExperiments.slice(safePageIndex * pageSize, (safePageIndex + 1) * pageSize), [filteredExperiments, safePageIndex, pageSize]);
255
+ const headState = useMemo(() => {
256
+ if (selectedIds.length === 0 || filteredExperiments.length === 0)
257
+ return 'off';
258
+ if (filteredExperiments.every((experiment) => selectedIds.includes(experiment.id)))
259
+ return 'all';
260
+ return 'some';
261
+ }, [filteredExperiments, selectedIds]);
262
+ const selectedExperiments = experiments.filter((experiment) => selectedIds.includes(experiment.id));
263
+ const pendingExperimentId = controlExperiment.isPending || deleteExperiment.isPending
264
+ ? (controlExperiment.variables?.experimentId ?? deleteExperiment.variables ?? null)
265
+ : null;
266
+ const bulkBreakdown = useMemo(() => {
267
+ if (selectedExperiments.length === 0)
268
+ return null;
269
+ const groups = {};
270
+ selectedExperiments.forEach((experiment) => {
271
+ groups[experiment.status] = (groups[experiment.status] ?? 0) + 1;
272
+ });
273
+ return Object.entries(groups)
274
+ .map(([status, count]) => `${count} ${t(`experiments.status.${status}`)}`)
275
+ .join(' · ');
276
+ }, [selectedExperiments, t]);
277
+ const toggleSelected = (experimentId) => setSelectedIds((current) => current.includes(experimentId) ? current.filter((id) => id !== experimentId) : [...current, experimentId]);
278
+ const toggleAll = () => {
279
+ if (headState === 'all') {
280
+ setSelectedIds((current) => current.filter((id) => !filteredExperiments.some((experiment) => experiment.id === id)));
281
+ }
282
+ else {
283
+ const ids = new Set(selectedIds);
284
+ filteredExperiments.forEach((experiment) => ids.add(experiment.id));
285
+ setSelectedIds([...ids]);
286
+ }
287
+ };
288
+ const openDeleteDialog = (targets) => {
289
+ if (targets.length === 0)
290
+ return;
291
+ setDeleteTarget({
292
+ ids: targets.map((experiment) => experiment.id),
293
+ names: targets.map((experiment) => experiment.name),
294
+ });
295
+ };
296
+ const runBulkControl = async (action) => {
297
+ const targets = selectedExperiments.filter((experiment) => action === 'stop' ? experiment.status === 'running' : experiment.status === 'stopped');
298
+ if (targets.length === 0)
299
+ return;
300
+ setBulkBusy(true);
301
+ setActionError(null);
302
+ try {
303
+ await Promise.all(targets.map((experiment) => controlExperiment.mutateAsync({ experimentId: experiment.id, action })));
304
+ setSelectedIds((current) => current.filter((id) => !targets.some((experiment) => experiment.id === id)));
305
+ }
306
+ catch (error) {
307
+ setActionError(getApiErrorMessage(error) ?? t('common.loadFailedRefresh'));
308
+ }
309
+ finally {
310
+ setBulkBusy(false);
311
+ }
312
+ };
313
+ const confirmDelete = async () => {
314
+ if (!deleteTarget)
315
+ return;
316
+ const targets = [...deleteTarget.ids];
317
+ const isBulkDelete = targets.length > 1;
318
+ if (isBulkDelete)
319
+ setBulkBusy(true);
320
+ setActionError(null);
321
+ try {
322
+ await Promise.all(targets.map((experimentId) => deleteExperiment.mutateAsync(experimentId)));
323
+ setSelectedIds((current) => current.filter((id) => !targets.includes(id)));
324
+ setDeleteTarget(null);
325
+ }
326
+ catch (error) {
327
+ setActionError(getApiErrorMessage(error) ?? t('common.loadFailedRefresh'));
328
+ }
329
+ finally {
330
+ if (isBulkDelete)
331
+ setBulkBusy(false);
332
+ }
333
+ };
334
+ const isBusy = bulkBusy || controlExperiment.isPending || deleteExperiment.isPending;
335
+ const experimentsLoading = useDelayedLoading(experimentsQuery.isLoading && !experimentsQuery.data);
336
+ return (_jsx(Main, { className: "gap-0 bg-muted/35 p-0", children: _jsxs("div", { className: "mx-auto w-full max-w-[1760px] px-4 py-6 sm:px-6 lg:px-8", "data-testid": "experiments-page", children: [_jsxs("div", { className: "mb-5 flex flex-col gap-4 xl:flex-row xl:items-start xl:justify-between", children: [_jsx("div", { className: "flex min-w-0 flex-wrap items-center gap-3", children: _jsx("h1", { className: "text-[26px] font-semibold", children: t('experiments.title') }) }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [selectedIds.length > 0 && (_jsxs("div", { className: "flex flex-wrap items-center gap-2 border-r pr-3", children: [_jsxs("span", { className: "text-xs text-muted-foreground", children: [t('experiments.selected'), " ", _jsx("b", { className: "font-mono text-foreground", children: selectedIds.length }), bulkBreakdown && _jsxs("span", { className: "ml-1.5 text-muted-foreground", children: ["\u00B7 ", bulkBreakdown] })] }), _jsxs(Button, { type: "button", variant: "ghost", size: "sm", className: "h-8 gap-1", disabled: isBusy || !selectedExperiments.some((experiment) => experiment.status === 'stopped'), onClick: () => void runBulkControl('resume'), children: [bulkBusy ? _jsx(Loader2, { className: "size-3.5 animate-spin" }) : _jsx(Play, { className: "size-3.5" }), t('experiments.bulk.resume')] }), _jsxs(Button, { type: "button", variant: "ghost", size: "sm", className: "h-8 gap-1", disabled: isBusy || !selectedExperiments.some((experiment) => experiment.status === 'running'), onClick: () => void runBulkControl('stop'), children: [bulkBusy ? _jsx(Loader2, { className: "size-3.5 animate-spin" }) : _jsx(Square, { className: "size-3.5" }), t('experiments.bulk.stop')] }), _jsxs(Button, { type: "button", variant: "outline", size: "sm", className: "h-8 gap-1 border-destructive/40 text-destructive hover:text-destructive", disabled: isBusy, onClick: () => openDeleteDialog(selectedExperiments), children: [bulkBusy ? _jsx(Loader2, { className: "size-3.5 animate-spin" }) : _jsx(Trash2, { className: "size-3.5" }), t('experiments.bulk.delete')] }), _jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "size-8", disabled: isBusy, onClick: () => setSelectedIds([]), "aria-label": t('experiments.clearSelection'), children: _jsx(X, { className: "size-3.5" }) })] })), _jsx(Button, { asChild: true, size: "sm", className: "h-9", children: _jsxs(Link, { href: `/experiments/new`, children: [_jsx(Plus, { className: "size-4" }), t('experiments.create')] }) })] })] }), (actionError || experimentsQuery.isError) && (_jsx("div", { className: "mb-4 rounded-md border border-destructive/30 bg-destructive/5 px-4 py-3 text-sm text-destructive", children: actionError ?? t('common.loadFailedRefresh') })), experimentsLoading ? (_jsx("section", { className: "mb-5 grid grid-cols-1 gap-4 rounded-lg border bg-card px-5 py-4 shadow-sm sm:grid-cols-2 lg:grid-cols-4", children: Array.from({ length: 4 }).map((_, index) => (_jsxs("div", { className: "space-y-2", children: [_jsx(Skeleton, { className: "h-3 w-24" }), _jsx(Skeleton, { className: "h-7 w-20" }), _jsx(Skeleton, { className: "h-3 w-28" })] }, index))) })) : (_jsxs("section", { className: "mb-5 grid grid-cols-1 gap-4 rounded-lg border bg-card px-5 py-4 shadow-sm sm:grid-cols-2 lg:grid-cols-4", children: [_jsx(HeaderStatCard, { label: t('experiments.headerStat.newThisWeek'), value: headerStats.newThisWeek, footer: `${t('experiments.headerStat.weekDelta')} —` }), _jsx(HeaderStatCard, { label: t('experiments.headerStat.avgDuration'), value: headerStats.averageDuration, unit: t('experiments.headerStat.avgDurationUnit'), footer: formatTemplate(t('experiments.headerStat.durationStat'), {
337
+ median: headerStats.durationStat.median,
338
+ p90: headerStats.durationStat.p90,
339
+ }) }), _jsx(HeaderStatCard, { label: t('experiments.headerStat.tokens'), value: headerStats.tokens, unit: "token", footer: formatTemplate(t('experiments.headerStat.tokensSplit'), headerStats.tokenSplit) }), _jsx(HeaderStatCard, { label: t('experiments.headerStat.cost'), value: headerStats.cost })] })), _jsxs("section", { className: "rounded-lg border bg-card", "aria-label": t('experiments.listSurface'), children: [_jsxs("div", { className: "flex flex-col gap-3 border-b p-4 xl:flex-row xl:items-center xl:justify-between", children: [_jsxs("div", { className: "flex flex-1 flex-wrap items-center gap-2", children: [_jsxs("div", { className: "relative w-full sm:w-[320px]", children: [_jsx(Search, { className: "pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { type: "search", value: searchQuery, onChange: (event) => {
340
+ setSearchQuery(event.target.value);
341
+ setPageIndex(0);
342
+ }, placeholder: t('experiments.searchPlaceholder'), className: "h-9 pl-8 text-sm" })] }), _jsx(ChipFilter, { active: activeFilter === 'all', count: experiments.length, label: t('experiments.filter.all'), onClick: () => {
343
+ setActiveFilter('all');
344
+ setPageIndex(0);
345
+ } }), STATUS_FILTERS.map((filter) => (_jsx(ChipFilter, { active: activeFilter === filter.key, tone: filter.key, count: getStatusCount(experiments, filter.key), label: t(filter.labelKey), onClick: () => {
346
+ setActiveFilter(filter.key);
347
+ setPageIndex(0);
348
+ } }, filter.key)))] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "outline", size: "sm", className: "h-9 gap-1.5", children: [_jsx(Sliders, { className: "size-4" }), formatTemplate(t('experiments.sortLabel'), { field: t(SORT_LABEL_KEYS[sortMode]) })] }) }), _jsx(DropdownMenuContent, { align: "end", children: Object.keys(SORT_LABEL_KEYS).map((mode) => (_jsx(DropdownMenuItem, { onClick: () => setSortMode(mode), children: t(SORT_LABEL_KEYS[mode]) }, mode))) })] }), _jsx("span", { className: "text-xs text-muted-foreground", children: t('experiments.viewMode') }), _jsx(SlidingViewToggle, { value: viewMode, ariaLabel: t('experiments.viewMode'), onChange: updateViewMode, options: [
349
+ { value: 'table', label: t('experiments.viewTable'), icon: List },
350
+ { value: 'compare', label: t('experiments.viewCompare'), icon: BarChart3 },
351
+ ] })] })] }), experimentsLoading ? (_jsxs("div", { className: "relative", children: [_jsx(ListRowsSkeleton, { rows: 8 }), _jsx(PlatformLoaderOverlay, {})] })) : viewMode === 'table' ? (_jsxs(_Fragment, { children: [_jsx(ExperimentsTable, { experiments: pagedExperiments, projectId: projectId, selectedIds: selectedIds, headState: headState, pendingExperimentId: pendingExperimentId, emptyMessage: t('experiments.empty'), onToggleSelected: toggleSelected, onToggleAll: toggleAll, onDelete: (experimentId) => {
352
+ const target = experiments.find((experiment) => experiment.id === experimentId);
353
+ if (target)
354
+ openDeleteDialog([target]);
355
+ }, onRowClick: (experiment) => router.push(`/experiments/${experiment.id}`) }), _jsx(ResourcePaginationFooter, { summary: _jsxs("span", { children: [t('experiments.totalPrefix'), ' ', _jsx("span", { className: "font-mono font-medium text-foreground", children: filteredExperiments.length }), ' ', t('experiments.totalSuffix'), " \u00B7 ", t('experiments.selected'), ' ', _jsx("span", { className: "font-mono font-medium text-foreground", children: selectedIds.length })] }), pageIndex: safePageIndex, pageCount: pageCount, pageSize: pageSize, pageSizeOptions: [...PAGE_SIZE_OPTIONS], previousPageLabel: t('common.previousPage'), nextPageLabel: t('common.nextPage'), onPageChange: setPageIndex, onPageSizeChange: (size) => {
356
+ setPageSize(size);
357
+ setPageIndex(0);
358
+ } })] })) : (_jsx(ExperimentsComparisonView, { projectId: projectId, experiments: experiments, candidateExperiments: filteredExperiments, selectedIds: comparisonSelectedIds, onSelectedIdsChange: updateComparisonIds, onRowClick: (experiment) => router.push(`/experiments/${experiment.id}`) }))] }), _jsx(Dialog, { open: deleteTarget !== null, onOpenChange: (open) => !open && setDeleteTarget(null), children: _jsxs(DialogContent, { "data-testid": "experiments-delete-dialog", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: deleteTarget && deleteTarget.ids.length > 1
359
+ ? formatTemplate(t('experiments.delete.bulkTitle'), { count: deleteTarget.ids.length })
360
+ : t('experiments.delete.title') }), _jsx(DialogDescription, { children: deleteTarget && deleteTarget.ids.length > 1
361
+ ? t('experiments.delete.bulkDescription')
362
+ : t('experiments.delete.description') })] }), deleteTarget && (_jsxs("div", { className: "rounded-md border bg-muted/30 px-3 py-2", children: [_jsx("div", { className: "text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: t('experiments.delete.targetLabel') }), _jsxs("div", { className: "mt-1.5 space-y-1 text-[12.5px]", children: [deleteTarget.names.slice(0, 5).map((name) => (_jsx("div", { className: "truncate font-mono text-foreground", children: name }, name))), deleteTarget.names.length > 5 && (_jsx("div", { className: "text-muted-foreground", children: formatTemplate(t('experiments.delete.more'), { count: deleteTarget.names.length - 5 }) }))] })] })), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "outline", onClick: () => setDeleteTarget(null), disabled: isBusy, children: t('common.cancel') }), _jsx(Button, { type: "button", variant: "destructive", onClick: () => void confirmDelete(), disabled: isBusy || !deleteTarget, "data-testid": "experiments-delete-confirm", children: isBusy ? t('experiments.delete.pending') : t('experiments.delete.confirm') })] })] }) })] }) }));
363
+ }
364
+ //# sourceMappingURL=experiments-list-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"experiments-list-page.js","sourceRoot":"","sources":["../../../src/screens/experiments/experiments-list-page.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { TableColumn } from '@proofhound/ui';
3
+ import { type ExperimentSummary } from './experiment-view-model';
4
+ export declare const EXPERIMENT_TABLE_COLUMNS: TableColumn[];
5
+ export interface ExperimentsTableProps {
6
+ experiments: ExperimentSummary[];
7
+ projectId: string;
8
+ selectedIds: string[];
9
+ headState: 'off' | 'some' | 'all';
10
+ pendingExperimentId: string | null;
11
+ emptyMessage?: ReactNode;
12
+ onToggleSelected: (experimentId: string) => void;
13
+ onToggleAll: () => void;
14
+ onDelete: (experimentId: string) => void;
15
+ onRowClick: (experiment: ExperimentSummary) => void;
16
+ }
17
+ export declare function ExperimentsTable({ experiments, projectId, selectedIds, headState, pendingExperimentId, emptyMessage, onToggleSelected, onToggleAll, onDelete, onRowClick, }: ExperimentsTableProps): import("react/jsx-runtime").JSX.Element;
18
+ //# sourceMappingURL=experiments-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"experiments-table.d.ts","sourceRoot":"","sources":["../../../src/screens/experiments/experiments-table.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAcvC,OAAO,KAAK,EAAE,WAAW,EAAyB,MAAM,gBAAgB,CAAC;AAKzE,OAAO,EAA0B,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAUzF,eAAO,MAAM,wBAAwB,EAAE,WAAW,EASjD,CAAC;AA+EF,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;IAClC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,UAAU,EAAE,CAAC,UAAU,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACrD;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,UAAU,GACX,EAAE,qBAAqB,2CA4GvB"}
@@ -0,0 +1,97 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useRouter } from 'next/navigation';
4
+ import { CopyPlus, Loader2, Rocket, Sparkles, Trash2 } from 'lucide-react';
5
+ import { Table, TableBody, TableCell, TableEmpty, TableHead, TableHeader, TableRow, TableActionRow, UnusedImagesBadge, } from '@proofhound/ui';
6
+ import { useI18n } from '../../i18n';
7
+ import { progressLabel, progressTimingLabel } from './experiment-progress';
8
+ import { appendNumberSearchParam, appendSearchParam, buildRepeatExperimentHref } from './experiment-repeat-href';
9
+ import { hasImagePromptVariable } from './experiment-view-model';
10
+ import { ExperimentStatusBadge, Lineage, ProgressBar, SelectionBox, formatNumber, formatPercent, } from './experiment-ui';
11
+ export const EXPERIMENT_TABLE_COLUMNS = [
12
+ { key: 'select', width: 'narrow', sticky: 'left' },
13
+ { key: 'name', width: 'wide', sticky: 'left' },
14
+ { key: 'prompt', width: 'normal' },
15
+ { key: 'dataset', width: 'normal' },
16
+ { key: 'model', width: 'normal' },
17
+ { key: 'status', width: 'compact' },
18
+ { key: 'progress', width: 'flex', minPx: 220 },
19
+ { key: 'actions', width: 'normal', sticky: 'right' },
20
+ ];
21
+ function getOptimizationNewHref(experiment) {
22
+ const params = new URLSearchParams();
23
+ params.set('origin', 'experiment');
24
+ params.set('sourceExperimentId', experiment.id);
25
+ params.set('sourceExperimentName', experiment.name);
26
+ if (experiment.promptId)
27
+ params.set('promptId', experiment.promptId);
28
+ if (experiment.promptVersionId)
29
+ params.set('promptVersionId', experiment.promptVersionId);
30
+ if (experiment.datasetId)
31
+ params.set('datasetId', experiment.datasetId);
32
+ if (experiment.modelId)
33
+ params.set('modelId', experiment.modelId);
34
+ return `/optimizations/new?${params.toString()}`;
35
+ }
36
+ function getReleaseNewHref(experiment) {
37
+ const params = new URLSearchParams();
38
+ appendSearchParam(params, 'eventType', 'from_experiment');
39
+ appendSearchParam(params, 'sourceExperimentId', experiment.id);
40
+ appendSearchParam(params, 'sourceExperimentName', experiment.name);
41
+ appendSearchParam(params, 'promptId', experiment.promptId);
42
+ appendSearchParam(params, 'promptVersionId', experiment.promptVersionId);
43
+ appendSearchParam(params, 'modelId', experiment.modelId);
44
+ appendNumberSearchParam(params, 'rpmLimit', experiment.runConfig.rpmLimit);
45
+ appendNumberSearchParam(params, 'tpmLimit', experiment.runConfig.tpmLimit);
46
+ appendNumberSearchParam(params, 'concurrency', experiment.runConfig.concurrency);
47
+ appendNumberSearchParam(params, 'temperature', experiment.runConfig.temperature);
48
+ return `/releases/new?${params.toString()}`;
49
+ }
50
+ function ExperimentRowActions({ experiment, projectId, pending, onDelete, }) {
51
+ const { t } = useI18n();
52
+ const router = useRouter();
53
+ const actions = [
54
+ {
55
+ key: 'optimization',
56
+ label: t('experiments.action.startOptimization'),
57
+ icon: Sparkles,
58
+ onClick: () => router.push(getOptimizationNewHref(experiment)),
59
+ disabled: pending,
60
+ },
61
+ {
62
+ key: 'release',
63
+ label: t('experiments.action.publish'),
64
+ icon: Rocket,
65
+ onClick: () => router.push(getReleaseNewHref(experiment)),
66
+ disabled: pending,
67
+ },
68
+ {
69
+ key: 'repeat',
70
+ label: t('experiments.action.copyNew'),
71
+ icon: CopyPlus,
72
+ onClick: () => router.push(buildRepeatExperimentHref(projectId, experiment)),
73
+ disabled: pending,
74
+ },
75
+ {
76
+ key: 'delete',
77
+ label: t('experiments.action.delete'),
78
+ icon: pending ? Loader2 : Trash2,
79
+ onClick: () => onDelete(experiment.id),
80
+ destructive: true,
81
+ disabled: pending,
82
+ loading: pending,
83
+ },
84
+ ];
85
+ return _jsx(TableActionRow, { actions: actions, moreLabel: t('experiments.action.more') });
86
+ }
87
+ export function ExperimentsTable({ experiments, projectId, selectedIds, headState, pendingExperimentId, emptyMessage, onToggleSelected, onToggleAll, onDelete, onRowClick, }) {
88
+ const { t } = useI18n();
89
+ return (_jsxs(Table, { columns: EXPERIMENT_TABLE_COLUMNS, containerTestId: "experiments-table-view", children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { column: "select", children: _jsx(SelectionBox, { checked: headState === 'all', ariaLabel: t('experiments.selectAll'), onClick: onToggleAll }) }), _jsx(TableHead, { column: "name", children: t('experiments.table.name') }), _jsx(TableHead, { column: "prompt", children: t('experiments.table.prompt') }), _jsx(TableHead, { column: "dataset", children: t('experiments.table.dataset') }), _jsx(TableHead, { column: "model", children: t('experiments.table.model') }), _jsx(TableHead, { column: "status", children: t('experiments.table.status') }), _jsx(TableHead, { column: "progress", children: t('experiments.table.progress') }), _jsx(TableHead, { column: "actions", className: "text-right", children: t('common.actions') })] }) }), _jsx(TableBody, { children: experiments.length === 0 ? (_jsx(TableEmpty, { children: emptyMessage })) : (experiments.map((experiment) => {
90
+ const selected = selectedIds.includes(experiment.id);
91
+ const percent = experiment.progressTotal
92
+ ? Number(formatPercent(experiment.progressDone, experiment.progressTotal, 1))
93
+ : 0;
94
+ return (_jsxs(TableRow, { selected: selected, onClick: () => onRowClick(experiment), className: experiment.isArchived ? 'opacity-65' : undefined, children: [_jsx(TableCell, { column: "select", children: _jsx(SelectionBox, { checked: selected, ariaLabel: `${t('experiments.select')} ${experiment.name}`, onClick: () => onToggleSelected(experiment.id) }) }), _jsx(TableCell, { column: "name", children: _jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx("span", { className: "truncate font-mono text-[13.5px] font-semibold", children: experiment.name }), experiment.isArchived ? (_jsx("span", { className: "rounded border border-border bg-muted px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: t('experiments.archived') })) : null] }), _jsx("div", { className: "mt-0.5 truncate text-[12px] text-muted-foreground", children: experiment.description })] }) }), _jsx(TableCell, { column: "prompt", children: _jsx(Lineage, { primary: experiment.promptName, secondary: experiment.promptVersion }) }), _jsx(TableCell, { column: "dataset", children: _jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx(Lineage, { primary: experiment.datasetName, secondary: `${formatNumber(experiment.datasetSamples)} ${t('experiments.sampleSuffix')}` }), experiment.datasetHasImages && !hasImagePromptVariable(experiment.promptVariableTypes ?? []) ? (_jsx(UnusedImagesBadge, { size: "sm", tooltip: t('experiments.unusedImagesTooltip'), "aria-label": t('experiments.unusedImagesTooltip') })) : null] }) }), _jsx(TableCell, { column: "model", children: _jsx("span", { className: "block truncate font-mono text-[12.5px] text-foreground", children: experiment.modelName }) }), _jsx(TableCell, { column: "status", children: _jsx(ExperimentStatusBadge, { status: experiment.status }) }), _jsx(TableCell, { column: "progress", children: _jsxs("div", { className: "flex min-w-0 flex-col gap-1.5", children: [_jsx(ProgressBar, { status: experiment.status, percent: percent, label: progressLabel(experiment, percent) }), _jsx("span", { className: "font-mono text-[11px] text-muted-foreground", children: progressTimingLabel(t, experiment) })] }) }), _jsx(TableCell, { column: "actions", className: "text-right", children: _jsx(ExperimentRowActions, { experiment: experiment, projectId: projectId, pending: pendingExperimentId === experiment.id, onDelete: onDelete }) })] }, experiment.id));
95
+ })) })] }));
96
+ }
97
+ //# sourceMappingURL=experiments-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"experiments-table.js","sourceRoot":"","sources":["../../../src/screens/experiments/experiments-table.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3E,OAAO,EACL,KAAK,EACL,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,WAAW,EACX,QAAQ,EACR,cAAc,EACd,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACjH,OAAO,EAAE,sBAAsB,EAA0B,MAAM,yBAAyB,CAAC;AACzF,OAAO,EACL,qBAAqB,EACrB,OAAO,EACP,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,wBAAwB,GAAkB;IACrD,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;IAClD,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;IAC9C,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;IAClC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;IACnC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;IACjC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;IACnC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;IAC9C,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;CACrD,CAAC;AAEF,SAAS,sBAAsB,CAAC,UAA6B;IAC3D,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,QAAQ;QAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrE,IAAI,UAAU,CAAC,eAAe;QAAE,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IAC1F,IAAI,UAAU,CAAC,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IACxE,IAAI,UAAU,CAAC,OAAO;QAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAClE,OAAO,sBAAsB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,iBAAiB,CAAC,UAA6B;IACtD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAC1D,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/D,iBAAiB,CAAC,MAAM,EAAE,sBAAsB,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IACnE,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC3D,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IACzE,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACzD,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3E,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3E,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACjF,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACjF,OAAO,iBAAiB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,oBAAoB,CAAC,EAC5B,UAAU,EACV,SAAS,EACT,OAAO,EACP,QAAQ,GAMT;IACC,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IACxB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,OAAO,GAA4B;QACvC;YACE,GAAG,EAAE,cAAc;YACnB,KAAK,EAAE,CAAC,CAAC,sCAAsC,CAAC;YAChD,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;YAC9D,QAAQ,EAAE,OAAO;SAClB;QACD;YACE,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,CAAC,CAAC,4BAA4B,CAAC;YACtC,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;YACzD,QAAQ,EAAE,OAAO;SAClB;QACD;YACE,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,CAAC,CAAC,4BAA4B,CAAC;YACtC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAC5E,QAAQ,EAAE,OAAO;SAClB;QACD;YACE,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,CAAC,CAAC,2BAA2B,CAAC;YACrC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YAChC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACtC,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,OAAO;SACjB;KACF,CAAC;IAEF,OAAO,KAAC,cAAc,IAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,yBAAyB,CAAC,GAAI,CAAC;AACvF,CAAC;AAeD,MAAM,UAAU,gBAAgB,CAAC,EAC/B,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,UAAU,GACY;IACtB,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;IAExB,OAAO,CACL,MAAC,KAAK,IAAC,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAC,wBAAwB,aAChF,KAAC,WAAW,cACV,MAAC,QAAQ,eACP,KAAC,SAAS,IAAC,MAAM,EAAC,QAAQ,YACxB,KAAC,YAAY,IAAC,OAAO,EAAE,SAAS,KAAK,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,uBAAuB,CAAC,EAAE,OAAO,EAAE,WAAW,GAAI,GACjG,EACZ,KAAC,SAAS,IAAC,MAAM,EAAC,MAAM,YAAE,CAAC,CAAC,wBAAwB,CAAC,GAAa,EAClE,KAAC,SAAS,IAAC,MAAM,EAAC,QAAQ,YAAE,CAAC,CAAC,0BAA0B,CAAC,GAAa,EACtE,KAAC,SAAS,IAAC,MAAM,EAAC,SAAS,YAAE,CAAC,CAAC,2BAA2B,CAAC,GAAa,EACxE,KAAC,SAAS,IAAC,MAAM,EAAC,OAAO,YAAE,CAAC,CAAC,yBAAyB,CAAC,GAAa,EACpE,KAAC,SAAS,IAAC,MAAM,EAAC,QAAQ,YAAE,CAAC,CAAC,0BAA0B,CAAC,GAAa,EACtE,KAAC,SAAS,IAAC,MAAM,EAAC,UAAU,YAAE,CAAC,CAAC,4BAA4B,CAAC,GAAa,EAC1E,KAAC,SAAS,IAAC,MAAM,EAAC,SAAS,EAAC,SAAS,EAAC,YAAY,YAC/C,CAAC,CAAC,gBAAgB,CAAC,GACV,IACH,GACC,EACd,KAAC,SAAS,cACP,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1B,KAAC,UAAU,cAAE,YAAY,GAAc,CACxC,CAAC,CAAC,CAAC,CACF,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;oBAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;oBACrD,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa;wBACtC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;wBAC7E,CAAC,CAAC,CAAC,CAAC;oBACN,OAAO,CACL,MAAC,QAAQ,IAEP,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EACrC,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,aAE3D,KAAC,SAAS,IAAC,MAAM,EAAC,QAAQ,YACxB,KAAC,YAAY,IACX,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,GAAG,CAAC,CAAC,oBAAoB,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,EAC1D,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC,GAC9C,GACQ,EACZ,KAAC,SAAS,IAAC,MAAM,EAAC,MAAM,YACtB,eAAK,SAAS,EAAC,SAAS,aACtB,eAAK,SAAS,EAAC,iCAAiC,aAC9C,eAAM,SAAS,EAAC,gDAAgD,YAAE,UAAU,CAAC,IAAI,GAAQ,EACxF,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CACvB,eAAM,SAAS,EAAC,iGAAiG,YAC9G,CAAC,CAAC,sBAAsB,CAAC,GACrB,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,EACN,cAAK,SAAS,EAAC,mDAAmD,YAAE,UAAU,CAAC,WAAW,GAAO,IAC7F,GACI,EACZ,KAAC,SAAS,IAAC,MAAM,EAAC,QAAQ,YACxB,KAAC,OAAO,IAAC,OAAO,EAAE,UAAU,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,aAAa,GAAI,GACtE,EACZ,KAAC,SAAS,IAAC,MAAM,EAAC,SAAS,YACzB,eAAK,SAAS,EAAC,iCAAiC,aAC9C,KAAC,OAAO,IACN,OAAO,EAAE,UAAU,CAAC,WAAW,EAC/B,SAAS,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,0BAA0B,CAAC,EAAE,GACxF,EACD,UAAU,CAAC,gBAAgB,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAC9F,KAAC,iBAAiB,IAChB,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,CAAC,CAAC,iCAAiC,CAAC,gBACjC,CAAC,CAAC,iCAAiC,CAAC,GAChD,CACH,CAAC,CAAC,CAAC,IAAI,IACJ,GACI,EACZ,KAAC,SAAS,IAAC,MAAM,EAAC,OAAO,YACvB,eAAM,SAAS,EAAC,wDAAwD,YAAE,UAAU,CAAC,SAAS,GAAQ,GAC5F,EACZ,KAAC,SAAS,IAAC,MAAM,EAAC,QAAQ,YACxB,KAAC,qBAAqB,IAAC,MAAM,EAAE,UAAU,CAAC,MAAM,GAAI,GAC1C,EACZ,KAAC,SAAS,IAAC,MAAM,EAAC,UAAU,YAC1B,eAAK,SAAS,EAAC,+BAA+B,aAC5C,KAAC,WAAW,IACV,MAAM,EAAE,UAAU,CAAC,MAAM,EACzB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,GACzC,EACF,eAAM,SAAS,EAAC,6CAA6C,YAC1D,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,GAC9B,IACH,GACI,EACZ,KAAC,SAAS,IAAC,MAAM,EAAC,SAAS,EAAC,SAAS,EAAC,YAAY,YAChD,KAAC,oBAAoB,IACnB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,mBAAmB,KAAK,UAAU,CAAC,EAAE,EAC9C,QAAQ,EAAE,QAAQ,GAClB,GACQ,KApEP,UAAU,CAAC,EAAE,CAqET,CACZ,CAAC;gBACJ,CAAC,CAAC,CACH,GACS,IACN,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ interface Props {
2
+ projectId: string;
3
+ experimentId: string;
4
+ runResultId: string | null;
5
+ onClose: () => void;
6
+ }
7
+ export declare function RunResultDetailSheet({ projectId, experimentId, runResultId, onClose }: Props): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=run-result-detail-sheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-result-detail-sheet.d.ts","sourceRoot":"","sources":["../../../src/screens/experiments/run-result-detail-sheet.tsx"],"names":[],"mappings":"AAoCA,UAAU,KAAK;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,KAAK,2CAyL5F"}