@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,84 @@
1
+ import { getDisplayValue } from './dataset-upload-parser';
2
+ export function getImageReferences(value) {
3
+ if (Array.isArray(value)) {
4
+ return value
5
+ .filter((item) => typeof item === 'string')
6
+ .map((item) => item.trim())
7
+ .filter(Boolean);
8
+ }
9
+ if (typeof value !== 'string')
10
+ return [];
11
+ const trimmed = value.trim();
12
+ if (trimmed.startsWith('[')) {
13
+ try {
14
+ const parsed = JSON.parse(trimmed);
15
+ if (Array.isArray(parsed))
16
+ return getImageReferences(parsed);
17
+ }
18
+ catch {
19
+ // Fall back to treating the original string as a single image reference.
20
+ }
21
+ }
22
+ return trimmed ? [trimmed] : [];
23
+ }
24
+ export function parseImageReferenceArrayInput(value) {
25
+ const trimmed = value.trim();
26
+ if (!trimmed.startsWith('['))
27
+ return null;
28
+ try {
29
+ const parsed = JSON.parse(trimmed);
30
+ if (!Array.isArray(parsed))
31
+ return null;
32
+ return getImageReferences(parsed);
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ export function getPrimaryImageReference(value) {
39
+ return getImageReferences(value)[0] ?? getDisplayValue(value);
40
+ }
41
+ export function getImageSourceType(value) {
42
+ const trimmed = getPrimaryImageReference(value).trim();
43
+ if (!trimmed)
44
+ return 'empty';
45
+ if (/^https?:\/\//iu.test(trimmed))
46
+ return 'url';
47
+ if (/^data:image\//iu.test(trimmed))
48
+ return 'base64';
49
+ return 'file';
50
+ }
51
+ export function inferMissingFieldRole(fieldName) {
52
+ const normalized = fieldName.toLowerCase();
53
+ if (normalized === 'id' || normalized === 'sample_id')
54
+ return 'id';
55
+ return 'metadata';
56
+ }
57
+ export function mergeFieldsWithSampleData(fields, samples) {
58
+ const knownFields = new Set(fields.map((field) => field.name));
59
+ const extraFields = [];
60
+ for (const sample of samples) {
61
+ for (const [fieldName, value] of Object.entries(sample.data)) {
62
+ if (knownFields.has(fieldName))
63
+ continue;
64
+ knownFields.add(fieldName);
65
+ extraFields.push({
66
+ name: fieldName,
67
+ role: inferMissingFieldRole(fieldName),
68
+ preview: getDisplayValue(value) || '-',
69
+ });
70
+ }
71
+ }
72
+ return [...fields, ...extraFields];
73
+ }
74
+ export function normalizeExpectedRoles(fields, preferredName) {
75
+ let kept = preferredName && fields.some((field) => field.name === preferredName && field.role === 'expected')
76
+ ? preferredName
77
+ : null;
78
+ if (!kept)
79
+ kept = fields.find((field) => field.role === 'expected')?.name ?? null;
80
+ if (!kept)
81
+ return fields;
82
+ return fields.map((field) => field.role === 'expected' && field.name !== kept ? { ...field, role: 'metadata' } : field);
83
+ }
84
+ //# sourceMappingURL=dataset-detail-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset-detail-helpers.js","sourceRoot":"","sources":["../../../src/screens/datasets/dataset-detail-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type ProjectDataset } from './dataset-types';
2
+ export declare function DatasetDetailPage({ projectId, dataset, }: {
3
+ projectId: string;
4
+ dataset: ProjectDataset;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=dataset-detail-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset-detail-page.d.ts","sourceRoot":"","sources":["../../../src/screens/datasets/dataset-detail-page.tsx"],"names":[],"mappings":"AAmCA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAC;AAyjBzB,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,OAAO,GACR,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;CACzB,2CAgVA"}
@@ -0,0 +1,379 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import Link from 'next/link';
4
+ import { useEffect, useMemo, useState } from 'react';
5
+ import { AlertTriangle, ChevronDown, ChevronUp, Edit3, FlaskConical, Search, Sparkles, Trash2, } from 'lucide-react';
6
+ import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, Input, Popover, PopoverContent, PopoverTrigger, cn, } from '@proofhound/ui';
7
+ import { Main } from '@proofhound/ui/layout';
8
+ import { useDatasetSamples, useDeleteDatasetSamples, useDownloadDataset } from '../../hooks';
9
+ import { useI18n } from '../../i18n';
10
+ import { getReferenceCount, } from './dataset-types';
11
+ import { DatasetTransferProgressPanel, useDatasetTransferProgress } from './dataset-transfer-progress';
12
+ import { ExportFormatMenu, ImageCell, ImagePreviewDialog, ImageThumb, ModalityBadge, ReferenceText, RolePill, formatCount, saveBlobAsFile, } from './dataset-ui';
13
+ import { getImageReferences, getImageSourceType, getPrimaryImageReference, mergeFieldsWithSampleData, normalizeExpectedRoles, parseImageReferenceArrayInput, } from './dataset-detail-helpers';
14
+ import { DatasetSamplesTable } from './dataset-samples-table';
15
+ import { getDisplayValue } from './dataset-upload-parser';
16
+ const FIELD_ROLE_OPTIONS = ['id', 'text', 'image', 'expected', 'metadata'];
17
+ const FIELD_ROLE_ORDER = {
18
+ id: 0,
19
+ text: 1,
20
+ image: 2,
21
+ expected: 3,
22
+ metadata: 4,
23
+ };
24
+ const DEFAULT_HIDDEN_FIELDS = new Set(['created_at', 'createdAt', 'updated_at', 'updatedAt']);
25
+ function getDatasetQuery(dataset) {
26
+ return new URLSearchParams({
27
+ datasetId: dataset.id,
28
+ datasetName: dataset.name,
29
+ sampleCount: String(dataset.sampleCount),
30
+ }).toString();
31
+ }
32
+ function getExperimentNewHref(projectId, dataset) {
33
+ return `/experiments/new?${getDatasetQuery(dataset)}`;
34
+ }
35
+ function getOptimizationNewHref(projectId, dataset) {
36
+ return `/optimizations/new?origin=dataset&${getDatasetQuery(dataset)}`;
37
+ }
38
+ function cloneFields(fields) {
39
+ return fields.map((field) => ({ ...field }));
40
+ }
41
+ function isDefaultHiddenField(fieldName) {
42
+ return DEFAULT_HIDDEN_FIELDS.has(fieldName);
43
+ }
44
+ function getOrderedFields(fields) {
45
+ return fields
46
+ .map((field, index) => ({ field, index }))
47
+ .filter(({ field }) => !isDefaultHiddenField(field.name))
48
+ .sort((left, right) => FIELD_ROLE_ORDER[left.field.role] - FIELD_ROLE_ORDER[right.field.role] || left.index - right.index)
49
+ .map(({ field }) => field);
50
+ }
51
+ function getSampleDisplayId(sample, fields) {
52
+ const idField = fields.find((field) => field.role === 'id') ??
53
+ fields.find((field) => {
54
+ const normalized = field.name.toLowerCase();
55
+ return normalized === 'id' || normalized === 'sample_id';
56
+ });
57
+ const value = idField ? getDisplayValue(sample.data[idField.name]) : '';
58
+ return value || sample.id;
59
+ }
60
+ function getSampleFieldDisplayValue(sample, field) {
61
+ return getDisplayValue(sample.data[field.name]);
62
+ }
63
+ function getEditableValue(value) {
64
+ if (value && typeof value === 'object')
65
+ return JSON.stringify(value, null, 2);
66
+ return getDisplayValue(value);
67
+ }
68
+ function sampleToDraft(sample, fields) {
69
+ return Object.fromEntries(fields.map((field) => [field.name, getEditableValue(sample.data[field.name])]));
70
+ }
71
+ function toDatasetSamples(samplesData) {
72
+ if (!samplesData || samplesData.length === 0)
73
+ return [];
74
+ return samplesData.map((sample) => ({
75
+ id: sample.externalId ?? sample.id,
76
+ data: sample.data,
77
+ createdAt: sample.createdAt,
78
+ updatedAt: sample.updatedAt,
79
+ }));
80
+ }
81
+ function getImageMeta(value) {
82
+ const extension = value.split('.').at(-1);
83
+ return extension && extension !== value ? extension.toUpperCase() : '';
84
+ }
85
+ function getValueType(value) {
86
+ if (value === null)
87
+ return 'null';
88
+ if (Array.isArray(value))
89
+ return 'array';
90
+ return typeof value;
91
+ }
92
+ function parseExpectedOutputObject(value) {
93
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
94
+ return value;
95
+ }
96
+ if (typeof value !== 'string')
97
+ return null;
98
+ const trimmed = value.trim();
99
+ if (!trimmed.startsWith('{'))
100
+ return null;
101
+ try {
102
+ const parsed = JSON.parse(trimmed);
103
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
104
+ return parsed;
105
+ }
106
+ }
107
+ catch {
108
+ return null;
109
+ }
110
+ return null;
111
+ }
112
+ function getExpectedField(fields) {
113
+ return fields.find((field) => field.role === 'expected') ?? null;
114
+ }
115
+ function toEnumKey(value) {
116
+ if (value === null)
117
+ return 'null';
118
+ if (value === undefined)
119
+ return 'undefined';
120
+ if (typeof value === 'string')
121
+ return `s:${value}`;
122
+ if (typeof value === 'number')
123
+ return `n:${value}`;
124
+ if (typeof value === 'boolean')
125
+ return `b:${value}`;
126
+ return `j:${JSON.stringify(value)}`;
127
+ }
128
+ function deriveOutputSchemaFields(samples, fields) {
129
+ const expectedField = getExpectedField(fields);
130
+ if (!expectedField)
131
+ return [];
132
+ const fieldStats = new Map();
133
+ const recordValue = (name, type, value) => {
134
+ const enumKey = toEnumKey(value);
135
+ const current = fieldStats.get(name);
136
+ if (current) {
137
+ current.count += 1;
138
+ current.enumValues.add(enumKey);
139
+ }
140
+ else {
141
+ fieldStats.set(name, { name, type, count: 1, enumValues: new Set([enumKey]) });
142
+ }
143
+ };
144
+ for (const sample of samples) {
145
+ if (sample.deletedAt)
146
+ continue;
147
+ const rawExpectedValue = sample.data[expectedField.name];
148
+ const expectedValue = parseExpectedOutputObject(rawExpectedValue);
149
+ if (!expectedValue) {
150
+ if (rawExpectedValue !== undefined && rawExpectedValue !== null && getDisplayValue(rawExpectedValue).length > 0) {
151
+ recordValue(expectedField.name, getValueType(rawExpectedValue), rawExpectedValue);
152
+ }
153
+ continue;
154
+ }
155
+ for (const [fieldName, value] of Object.entries(expectedValue)) {
156
+ recordValue(fieldName, getValueType(value), value);
157
+ }
158
+ }
159
+ return Array.from(fieldStats.values())
160
+ .map((stat) => ({ name: stat.name, type: stat.type, count: stat.count, enumCount: stat.enumValues.size }))
161
+ .sort((left, right) => left.name.localeCompare(right.name));
162
+ }
163
+ function getOutputSchemaExtraFields(value, outputSchemaFields) {
164
+ const expectedValue = parseExpectedOutputObject(value);
165
+ if (!expectedValue)
166
+ return [];
167
+ const schemaNames = new Set(outputSchemaFields.map((field) => field.name));
168
+ return Object.keys(expectedValue).filter((fieldName) => !schemaNames.has(fieldName));
169
+ }
170
+ function upsertExpectedOutputField(value, fieldName) {
171
+ const expectedValue = parseExpectedOutputObject(value) ?? (value.trim().length > 0 ? { [fieldName]: value } : {});
172
+ if (!(fieldName in expectedValue))
173
+ expectedValue[fieldName] = '';
174
+ return JSON.stringify(expectedValue, null, 2);
175
+ }
176
+ function getDraftData(fields, draft) {
177
+ return Object.fromEntries(fields.map((field) => {
178
+ const value = draft[field.name] ?? '';
179
+ const expectedValue = field.role === 'expected' ? parseExpectedOutputObject(value) : null;
180
+ const imageReferences = field.role === 'image' ? parseImageReferenceArrayInput(value) : null;
181
+ return [field.name, imageReferences ?? expectedValue ?? value];
182
+ }));
183
+ }
184
+ function applyFieldRoleChange(fields, fieldName, nextRole) {
185
+ return fields.map((field) => {
186
+ if (field.name === fieldName)
187
+ return { ...field, role: nextRole };
188
+ if (nextRole === 'expected' && field.role === 'expected') {
189
+ return { ...field, role: 'metadata' };
190
+ }
191
+ return field;
192
+ });
193
+ }
194
+ function FieldRoleBadgeButton({ field, onRoleChange, size = 'default', }) {
195
+ const { t } = useI18n();
196
+ const [open, setOpen] = useState(false);
197
+ return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "inline-flex items-center rounded-sm transition hover:opacity-80 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background", "aria-label": `${t('datasets.detail.fieldRolePopover.title')}: ${field.name}`, children: _jsx(RolePill, { role: field.role, size: size }) }) }), _jsx(PopoverContent, { align: "start", sideOffset: 6, className: "w-60 p-3", children: _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx("div", { className: "text-xs font-semibold", children: t('datasets.detail.fieldRolePopover.title') }), _jsx("div", { className: "truncate font-mono text-[11px] text-muted-foreground", children: field.name })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx("div", { className: "text-[11px] text-muted-foreground", children: t('datasets.detail.fieldRolePopover.changeRoleLabel') }), _jsx("div", { className: "flex flex-wrap gap-1.5", children: FIELD_ROLE_OPTIONS.map((role) => (_jsx("button", { type: "button", onClick: () => {
198
+ if (role !== field.role)
199
+ onRoleChange(role);
200
+ setOpen(false);
201
+ }, className: cn('inline-flex items-center rounded-md border px-2 py-1 transition hover:bg-accent', field.role === role && 'border-primary bg-accent'), "aria-pressed": field.role === role, children: _jsx(RolePill, { role: role, className: "border-0 bg-transparent px-0" }) }, role))) })] })] }) })] }));
202
+ }
203
+ function CurrentSamplePanel({ sample, fields, outputSchemaFields, onPrevious, onNext, onSave, onDelete, }) {
204
+ const { t } = useI18n();
205
+ const [draft, setDraft] = useState(() => sampleToDraft(sample, fields));
206
+ const [preview, setPreview] = useState(null);
207
+ const dirty = fields.some((field) => draft[field.name] !== getSampleFieldDisplayValue(sample, field));
208
+ const displayId = getSampleDisplayId(sample, fields);
209
+ const updateDraftField = (fieldName, value) => {
210
+ setDraft((current) => ({ ...current, [fieldName]: value }));
211
+ };
212
+ return (_jsxs("section", { className: "rounded-lg border bg-card", "data-testid": "dataset-output-schema-panel", children: [_jsxs("div", { className: "flex items-center justify-between gap-3 border-b px-4 py-3", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx(Edit3, { className: "size-4 text-[var(--status-canary-fg)]" }), _jsxs("h2", { className: "truncate text-sm font-semibold", children: [t('datasets.detail.currentSample'), " \u00B7 ", _jsx("span", { className: "font-mono", children: displayId })] })] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "size-7", "aria-label": t('datasets.detail.previousSample'), onClick: onPrevious, children: _jsx(ChevronUp, { className: "size-3.5" }) }), _jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "size-7", "aria-label": t('datasets.detail.nextSample'), onClick: onNext, children: _jsx(ChevronDown, { className: "size-3.5" }) })] })] }), _jsxs("div", { className: "space-y-3 p-4", children: [fields.map((field) => {
213
+ const value = draft[field.name] ?? '';
214
+ const isImage = field.role === 'image';
215
+ const imageReferences = isImage ? getImageReferences(value) : [];
216
+ const imagePreviewValue = isImage ? getPrimaryImageReference(value) : value;
217
+ const isImageArrayValue = isImage && value.trim().startsWith('[');
218
+ const isMultiImage = isImageArrayValue || imageReferences.length > 1;
219
+ const imageSource = isImage ? getImageSourceType(value) : null;
220
+ const sourceLabelKey = imageSource === null ? null : imageSource === 'empty' ? 'file' : imageSource;
221
+ const shouldUseTextarea = !isImage && (field.role === 'text' || field.role === 'expected' || value.length > 80);
222
+ const extraOutputFields = field.role === 'expected' ? getOutputSchemaExtraFields(value, outputSchemaFields) : [];
223
+ return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1.5 flex items-center justify-between gap-2 text-xs font-medium", children: [_jsx("span", { className: "min-w-0 truncate font-mono", children: field.name }), _jsxs("span", { className: "inline-flex shrink-0 items-center gap-1.5", children: [field.role === 'expected' && (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: "inline-flex h-7 items-center gap-1.5 rounded-md border bg-background px-2 text-[11px] font-medium hover:bg-accent", "aria-label": `${t('datasets.detail.fillExpectedField')}: ${field.name}`, children: [t('datasets.detail.fillExpectedField'), _jsx(ChevronDown, { className: "size-3 text-muted-foreground" })] }) }), _jsx(DropdownMenuContent, { align: "end", children: outputSchemaFields.length === 0 ? (_jsx(DropdownMenuItem, { disabled: true, children: t('datasets.detail.emptyOutputSchema') })) : (outputSchemaFields.map((schemaField) => (_jsxs(DropdownMenuItem, { onSelect: () => updateDraftField(field.name, upsertExpectedOutputField(value, schemaField.name)), children: [_jsx("span", { className: "font-mono", children: schemaField.name }), _jsx("span", { className: "ml-2 text-[11px] text-muted-foreground", children: schemaField.type })] }, schemaField.name)))) })] })), sourceLabelKey && (_jsx("span", { className: "inline-flex items-center rounded-[4px] border border-border bg-muted/40 px-1.5 py-0 font-mono text-[10px] uppercase text-muted-foreground", "data-testid": `image-source-chip-${field.name}`, children: t(`datasets.detail.imageSourceType.${sourceLabelKey}`) })), _jsx(RolePill, { role: field.role })] })] }), isMultiImage && (_jsxs("div", { className: "space-y-1.5", children: [_jsx("div", { className: "flex items-start gap-2 rounded-lg border bg-muted/30 p-2", children: _jsx(ImageCell, { value: imagePreviewValue, fieldName: field.name, imageCount: Math.max(imageReferences.length, 1), onPreview: () => setPreview({ field: field.name, value: imagePreviewValue }), size: "inline" }) }), _jsx("textarea", { value: value, onChange: (event) => updateDraftField(field.name, event.target.value), wrap: "off", spellCheck: false, className: "block max-h-40 min-h-20 w-full overflow-auto rounded-md border border-input bg-background px-3 py-2 font-mono text-[11px] outline-none focus-visible:ring-2 focus-visible:ring-ring", "aria-label": `${t('datasets.action.replaceImage')}: ${field.name}` })] })), !isMultiImage && imageSource === 'url' && (_jsxs("div", { className: "space-y-1.5", children: [_jsx("div", { className: "flex items-start gap-2 rounded-lg border bg-muted/30 p-2", children: _jsx(ImageCell, { value: imagePreviewValue, fieldName: field.name, onPreview: () => setPreview({ field: field.name, value: imagePreviewValue }), size: "inline" }) }), _jsx(Input, { type: "url", value: value, onChange: (event) => updateDraftField(field.name, event.target.value), placeholder: "https://", className: "h-9 font-mono text-sm", "aria-label": `${t('datasets.action.replaceImageUrl')}: ${field.name}` })] })), !isMultiImage && imageSource === 'base64' && (_jsxs("div", { className: "space-y-1.5", children: [_jsx("div", { className: "flex items-start gap-2 rounded-lg border bg-muted/30 p-2", children: _jsx(ImageCell, { value: imagePreviewValue, fieldName: field.name, onPreview: () => setPreview({ field: field.name, value: imagePreviewValue }), size: "inline" }) }), _jsx("textarea", { value: value, onChange: (event) => updateDraftField(field.name, event.target.value), wrap: "off", spellCheck: false, className: "block max-h-40 min-h-20 w-full overflow-auto rounded-md border border-input bg-background px-3 py-2 font-mono text-[11px] outline-none focus-visible:ring-2 focus-visible:ring-ring", "aria-label": `${t('datasets.action.replaceImageBase64')}: ${field.name}` })] })), !isMultiImage && (imageSource === 'file' || imageSource === 'empty') && (_jsxs("div", { className: "flex items-center gap-3 rounded-lg border bg-muted/30 p-2", children: [_jsx(ImageThumb, { large: true }), _jsxs("div", { className: "min-w-0 flex-1 text-[11.5px] text-muted-foreground", children: [_jsx("div", { className: "truncate font-mono", children: value || '-' }), _jsx("div", { className: "font-mono", children: getImageMeta(value) || field.preview }), _jsxs("label", { className: "mt-1.5 inline-flex cursor-pointer text-xs font-medium text-[var(--status-canary-fg)] hover:underline", children: [t('datasets.action.replaceImage'), _jsx("input", { type: "file", accept: "image/*", className: "sr-only", onChange: (event) => {
224
+ const file = event.target.files?.[0];
225
+ if (!file)
226
+ return;
227
+ updateDraftField(field.name, file.name);
228
+ event.target.value = '';
229
+ } })] })] })] })), !isImage && shouldUseTextarea && (_jsx("textarea", { value: value, onChange: (event) => updateDraftField(field.name, event.target.value), className: "min-h-20 w-full rounded-md border border-input bg-background px-3 py-2 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring" })), !isImage && !shouldUseTextarea && (_jsx(Input, { value: value, onChange: (event) => updateDraftField(field.name, event.target.value), className: "h-9 font-mono text-sm" })), extraOutputFields.length > 0 && (_jsxs("div", { className: "mt-1 flex items-start gap-1.5 rounded-md border border-[var(--status-pending-bd)] bg-[var(--status-pending-bg)] px-2 py-1.5 text-[11px] text-[var(--status-pending-fg)]", children: [_jsx(AlertTriangle, { className: "mt-0.5 size-3 shrink-0" }), _jsx("span", { children: t('datasets.detail.outputSchemaExtraWarning').replace('{fields}', extraOutputFields.join(', ')) })] }))] }, field.name));
230
+ }), _jsxs("div", { className: "flex flex-col gap-2 pt-1 sm:flex-row sm:items-center sm:justify-between", children: [_jsxs(Button, { type: "button", variant: "ghost", size: "sm", className: "h-8 justify-start text-destructive hover:text-destructive", onClick: () => onDelete(sample.id), children: [_jsx(Trash2, { className: "size-3.5" }), t('datasets.detail.deleteSample')] }), _jsxs("div", { className: "flex justify-end gap-2", children: [_jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "h-8", disabled: !dirty, onClick: () => setDraft(sampleToDraft(sample, fields)), children: t('common.cancel') }), _jsx(Button, { type: "button", size: "sm", className: "h-8", disabled: !dirty, onClick: () => onSave({ ...sample, data: { ...sample.data, ...getDraftData(fields, draft) } }), children: t('datasets.action.saveChanges') })] })] })] }), _jsx(ImagePreviewDialog, { open: preview !== null, onOpenChange: (next) => {
231
+ if (!next)
232
+ setPreview(null);
233
+ }, fieldName: preview?.field ?? '', value: preview?.value ?? '' })] }));
234
+ }
235
+ export function DatasetDetailPage({ projectId, dataset, }) {
236
+ const { t } = useI18n();
237
+ const downloadDatasetMutation = useDownloadDataset(projectId);
238
+ const deleteSamplesMutation = useDeleteDatasetSamples(projectId, dataset.id);
239
+ const downloadProgress = useDatasetTransferProgress();
240
+ const [fields, setFields] = useState(() => cloneFields(dataset.fields));
241
+ // Server-side pagination + search: only the current page of samples is ever loaded into the browser.
242
+ const [pageIndex, setPageIndex] = useState(0);
243
+ const [pageSize, setPageSize] = useState(50);
244
+ const [searchInput, setSearchInput] = useState('');
245
+ const [search, setSearch] = useState('');
246
+ const samplesQuery = useDatasetSamples(projectId, dataset.id, { page: pageIndex + 1, pageSize, search });
247
+ const total = samplesQuery.data?.total ?? 0;
248
+ const pageSamples = useMemo(() => toDatasetSamples(samplesQuery.data?.data), [samplesQuery.data]);
249
+ const [samples, setSamples] = useState(pageSamples);
250
+ const [selectedSampleId, setSelectedSampleId] = useState('');
251
+ const [selectedSampleIds, setSelectedSampleIds] = useState([]);
252
+ const [pendingDeleteSampleIds, setPendingDeleteSampleIds] = useState(null);
253
+ const [deleteBlocked, setDeleteBlocked] = useState(false);
254
+ // Debounce the search box; reset to the first page when the term changes.
255
+ useEffect(() => {
256
+ const handle = window.setTimeout(() => {
257
+ setSearch(searchInput.trim());
258
+ setPageIndex(0);
259
+ }, 300);
260
+ return () => window.clearTimeout(handle);
261
+ }, [searchInput]);
262
+ // Re-sync the editable working copy + selection whenever the server page changes (page / search / refetch).
263
+ // React-recommended "adjust state during render" pattern — avoids the setState-in-effect cascading render
264
+ // flagged by react-hooks/set-state-in-effect. pageSamples is a useMemo keyed on the query data, so the
265
+ // guard only fires when the page data actually changes (no render loop).
266
+ const [syncedPageSamples, setSyncedPageSamples] = useState(pageSamples);
267
+ if (syncedPageSamples !== pageSamples) {
268
+ setSyncedPageSamples(pageSamples);
269
+ setSamples(pageSamples);
270
+ setSelectedSampleIds([]);
271
+ setSelectedSampleId(pageSamples[0]?.id ?? '');
272
+ }
273
+ const displayFields = useMemo(() => {
274
+ const merged = mergeFieldsWithSampleData(fields, samples);
275
+ const preferred = fields.find((field) => field.role === 'expected')?.name ?? null;
276
+ return normalizeExpectedRoles(merged, preferred);
277
+ }, [fields, samples]);
278
+ const orderedFields = useMemo(() => getOrderedFields(displayFields), [displayFields]);
279
+ const outputSchemaFields = useMemo(() => deriveOutputSchemaFields(samples, orderedFields), [orderedFields, samples]);
280
+ const displayDataset = useMemo(() => ({
281
+ ...dataset,
282
+ fields: displayFields,
283
+ fieldCount: displayFields.length,
284
+ }), [dataset, displayFields]);
285
+ const handleFieldRoleChange = (fieldName, nextRole) => {
286
+ setFields(applyFieldRoleChange(displayFields, fieldName, nextRole));
287
+ };
288
+ // The server already applied search + pagination; show the page rows minus any locally-deleted ones.
289
+ const visibleSamples = useMemo(() => samples.filter((sample) => !sample.deletedAt), [samples]);
290
+ const selectedSample = visibleSamples.find((sample) => sample.id === selectedSampleId) ?? visibleSamples[0] ?? null;
291
+ const selectRelativeSample = (direction) => {
292
+ if (!selectedSample)
293
+ return;
294
+ const index = visibleSamples.findIndex((sample) => sample.id === selectedSample.id);
295
+ const next = visibleSamples[Math.min(visibleSamples.length - 1, Math.max(0, index + direction))];
296
+ if (next)
297
+ setSelectedSampleId(next.id);
298
+ };
299
+ const toggleSampleSelected = (sampleId) => {
300
+ setSelectedSampleIds((current) => current.includes(sampleId) ? current.filter((item) => item !== sampleId) : [...current, sampleId]);
301
+ };
302
+ const filteredSampleIds = useMemo(() => visibleSamples.map((sample) => sample.id), [visibleSamples]);
303
+ const sampleHeadState = useMemo(() => {
304
+ if (selectedSampleIds.length === 0 || filteredSampleIds.length === 0)
305
+ return 'off';
306
+ if (filteredSampleIds.every((id) => selectedSampleIds.includes(id)))
307
+ return 'all';
308
+ return 'some';
309
+ }, [filteredSampleIds, selectedSampleIds]);
310
+ const toggleAllFilteredSamples = () => {
311
+ if (filteredSampleIds.length === 0)
312
+ return;
313
+ setSelectedSampleIds((current) => {
314
+ const visibleSet = new Set(filteredSampleIds);
315
+ const allSelected = filteredSampleIds.every((id) => current.includes(id));
316
+ if (allSelected) {
317
+ return current.filter((id) => !visibleSet.has(id));
318
+ }
319
+ const merged = new Set(current);
320
+ for (const id of filteredSampleIds)
321
+ merged.add(id);
322
+ return Array.from(merged);
323
+ });
324
+ };
325
+ const saveSample = (nextSample) => {
326
+ setSamples((current) => current.map((sample) => (sample.id === nextSample.id ? nextSample : sample)));
327
+ };
328
+ const requestDeleteSamples = (sampleIds) => {
329
+ if (sampleIds.length === 0)
330
+ return;
331
+ if (getReferenceCount(displayDataset) > 0) {
332
+ setDeleteBlocked(true);
333
+ return;
334
+ }
335
+ setPendingDeleteSampleIds(sampleIds);
336
+ };
337
+ const confirmDeleteSamples = async () => {
338
+ if (!pendingDeleteSampleIds || pendingDeleteSampleIds.length === 0)
339
+ return;
340
+ const sampleIds = pendingDeleteSampleIds;
341
+ try {
342
+ await deleteSamplesMutation.mutateAsync({ sampleIds });
343
+ }
344
+ catch {
345
+ return;
346
+ }
347
+ const deleteIds = new Set(sampleIds);
348
+ const activeSamples = samples.filter((sample) => !sample.deletedAt);
349
+ const currentIndex = activeSamples.findIndex((sample) => sample.id === selectedSampleId);
350
+ const remainingSamples = activeSamples.filter((sample) => !deleteIds.has(sample.id));
351
+ const nextSample = remainingSamples[Math.min(Math.max(currentIndex, 0), remainingSamples.length - 1)] ?? remainingSamples[0];
352
+ setSamples((current) => current.filter((sample) => !deleteIds.has(sample.id)));
353
+ setSelectedSampleIds((current) => current.filter((sampleId) => !deleteIds.has(sampleId)));
354
+ if (deleteIds.has(selectedSampleId) || !remainingSamples.some((sample) => sample.id === selectedSampleId)) {
355
+ setSelectedSampleId(nextSample?.id ?? '');
356
+ }
357
+ setPendingDeleteSampleIds(null);
358
+ };
359
+ const downloadDataset = async (format) => {
360
+ downloadProgress.start(`${t('datasets.transfer.downloadTitle')}: ${displayDataset.name}`, null);
361
+ try {
362
+ const file = await downloadDatasetMutation.mutateAsync({
363
+ datasetId: displayDataset.id,
364
+ format,
365
+ onProgress: downloadProgress.update,
366
+ });
367
+ downloadProgress.complete(file.blob.size);
368
+ saveBlobAsFile(file.blob, file.fileName);
369
+ }
370
+ catch {
371
+ downloadProgress.fail();
372
+ }
373
+ };
374
+ return (_jsxs(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": "dataset-detail-page", children: [_jsxs("div", { className: "mb-1 font-mono text-[11.5px] text-muted-foreground", children: [_jsx(Link, { className: "hover:text-foreground", href: `/datasets`, children: t('datasets.title') }), _jsx("span", { className: "px-1.5", children: "/" }), _jsx("span", { className: "text-foreground", children: displayDataset.name })] }), _jsxs("div", { className: "mb-4 flex flex-col gap-4 xl:flex-row xl:items-start xl:justify-between", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h1", { className: "truncate text-[26px] font-semibold", children: displayDataset.name }), _jsxs("div", { className: "mt-2 flex flex-wrap items-center gap-2 text-[12.5px] text-muted-foreground", children: [_jsx(ModalityBadge, { modalities: displayDataset.modalities }), _jsxs("span", { children: [formatCount(displayDataset.sampleCount), " ", t('datasets.samples'), " \u00B7 ", displayDataset.fieldCount, ' ', t('datasets.detail.fields')] }), _jsx("span", { children: "\u00B7" }), _jsx(ReferenceText, { dataset: displayDataset }), _jsx("span", { children: "\u00B7" }), _jsxs("span", { children: [t('datasets.detail.uploadedBy'), " ", displayDataset.owner] })] })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(ExportFormatMenu, { disabled: downloadDatasetMutation.isPending, onExport: (format) => void downloadDataset(format) }), _jsx(Button, { asChild: true, variant: "outline", size: "sm", className: "h-9", children: _jsxs(Link, { href: getExperimentNewHref(projectId, displayDataset), children: [_jsx(FlaskConical, { className: "size-4" }), t('datasets.action.startExperiment')] }) }), _jsx(Button, { asChild: true, variant: "outline", size: "sm", className: "h-9", children: _jsxs(Link, { href: getOptimizationNewHref(projectId, displayDataset), children: [_jsx(Sparkles, { className: "size-4" }), t('datasets.action.startOptimization')] }) })] })] }), _jsx(DatasetTransferProgressPanel, { progress: downloadProgress.progress, className: "mb-4" }), _jsxs("div", { className: "grid gap-4 xl:grid-cols-[minmax(0,1fr)_360px]", children: [_jsxs("section", { className: "min-w-0 rounded-lg border bg-card", children: [_jsxs("div", { className: "flex flex-col gap-3 border-b p-4 lg:flex-row lg:items-center lg:justify-between", children: [_jsx("div", { className: "flex flex-1 flex-wrap items-center gap-2", children: _jsxs("div", { className: "relative w-full sm:w-[360px]", 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: searchInput, onChange: (event) => setSearchInput(event.target.value), placeholder: t('datasets.detail.sampleSearchPlaceholder'), className: "h-9 pl-8 text-sm" })] }) }), _jsx("div", { className: "flex flex-wrap items-center gap-2", children: selectedSampleIds.length > 0 ? (_jsxs(Button, { type: "button", variant: "outline", size: "sm", className: "h-9 text-destructive hover:text-destructive", onClick: () => requestDeleteSamples(selectedSampleIds), "data-testid": "dataset-detail-delete-selected", children: [_jsx(Trash2, { className: "size-4" }), t('datasets.detail.deleteSelected'), " ", selectedSampleIds.length, " ", t('datasets.header.items')] })) : null })] }), _jsx(DatasetSamplesTable, { data: visibleSamples, fields: orderedFields, selectedSampleId: selectedSample?.id ?? '', selectedIds: selectedSampleIds, headState: sampleHeadState, total: total, pageIndex: pageIndex, pageSize: pageSize, onPageIndexChange: setPageIndex, onPageSizeChange: setPageSize, onSelectSample: setSelectedSampleId, onToggleSelected: toggleSampleSelected, onToggleAll: toggleAllFilteredSamples, onDeleteSample: (sampleId) => requestDeleteSamples([sampleId]), renderFieldHeaderTrailing: (field) => (_jsx(FieldRoleBadgeButton, { field: field, size: "micro", onRoleChange: (role) => handleFieldRoleChange(field.name, role) })) })] }), _jsx("aside", { className: "space-y-4", "data-testid": "dataset-detail-side-rail", children: selectedSample ? (_jsx(CurrentSamplePanel, { sample: selectedSample, fields: orderedFields, outputSchemaFields: outputSchemaFields, onPrevious: () => selectRelativeSample(-1), onNext: () => selectRelativeSample(1), onSave: saveSample, onDelete: (sampleId) => requestDeleteSamples([sampleId]) }, `${selectedSample.id}-${orderedFields.map((field) => `${field.name}:${field.role}`).join('|')}`)) : (_jsx("section", { className: "rounded-lg border border-dashed bg-card p-6 text-center text-sm text-muted-foreground", children: t('datasets.detail.emptySamples') })) })] })] }), _jsx(Dialog, { open: pendingDeleteSampleIds !== null, onOpenChange: (open) => {
375
+ if (!open && !deleteSamplesMutation.isPending)
376
+ setPendingDeleteSampleIds(null);
377
+ }, children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: t('datasets.detail.confirmDeleteTitle').replace('{count}', String(pendingDeleteSampleIds?.length ?? 0)) }), _jsx(DialogDescription, { children: t('datasets.detail.confirmDeleteDescription') })] }), _jsxs("div", { className: "flex justify-end gap-2", children: [_jsx(Button, { type: "button", variant: "outline", disabled: deleteSamplesMutation.isPending, onClick: () => setPendingDeleteSampleIds(null), children: t('common.cancel') }), _jsx(Button, { type: "button", variant: "destructive", disabled: deleteSamplesMutation.isPending, onClick: () => void confirmDeleteSamples(), "data-testid": "dataset-detail-confirm-delete", children: t('datasets.detail.confirmDeleteButton') })] })] }) }), _jsx(Dialog, { open: deleteBlocked, onOpenChange: (open) => !open && setDeleteBlocked(false), children: _jsxs(DialogContent, { "data-testid": "dataset-detail-delete-blocked", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: t('datasets.detail.deleteBlockedTitle') }), _jsx(DialogDescription, { children: t('datasets.detail.deleteBlockedDescription') })] }), _jsx("div", { className: "rounded-md border border-destructive/30 bg-destructive/5 p-3 text-sm text-destructive", children: _jsx(ReferenceText, { dataset: displayDataset }) }), _jsx("div", { className: "flex justify-end", children: _jsx(Button, { type: "button", variant: "outline", onClick: () => setDeleteBlocked(false), children: t('common.close') }) })] }) })] }));
378
+ }
379
+ //# sourceMappingURL=dataset-detail-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset-detail-page.js","sourceRoot":"","sources":["../../../src/screens/datasets/dataset-detail-page.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type DatasetImportClient } from '@proofhound/api-client';
2
+ import type { CompleteDatasetImportResponseDto, CreateDatasetImportDto } from '@proofhound/shared';
3
+ export interface DatasetImportProgress {
4
+ phase: 'uploading' | 'completing';
5
+ receivedRows: number;
6
+ }
7
+ export interface RunDatasetImportOptions {
8
+ projectId: string;
9
+ createBody: CreateDatasetImportDto;
10
+ batches: AsyncIterable<Array<Record<string, unknown>>>;
11
+ signal?: AbortSignal;
12
+ onCreated?: (importId: string) => void;
13
+ onProgress?: (progress: DatasetImportProgress) => void;
14
+ client?: DatasetImportClient;
15
+ }
16
+ export declare function runDatasetImport(options: RunDatasetImportOptions): Promise<CompleteDatasetImportResponseDto>;
17
+ //# sourceMappingURL=dataset-import-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset-import-runner.d.ts","sourceRoot":"","sources":["../../../src/screens/datasets/dataset-import-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,KAAK,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEnG,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,WAAW,GAAG,YAAY,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,sBAAsB,CAAC;IAEnC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAEvD,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAID,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,gCAAgC,CAAC,CA0BlH"}
@@ -0,0 +1,33 @@
1
+ import { datasetImportClient } from '@proofhound/api-client';
2
+ // Orchestrates a large-file import: create session -> append batches in order -> complete (atomic promote).
3
+ // Any failure or abort before complete deletes the session + staging (best-effort), per "中断即删干净".
4
+ export async function runDatasetImport(options) {
5
+ const client = options.client ?? datasetImportClient;
6
+ const { projectId, createBody, batches, signal } = options;
7
+ const session = await client.createDatasetImport(projectId, createBody);
8
+ options.onCreated?.(session.id);
9
+ try {
10
+ let batchStartIndex = 0;
11
+ for await (const batch of batches) {
12
+ if (signal?.aborted)
13
+ throw new DOMException('aborted', 'AbortError');
14
+ if (batch.length === 0)
15
+ continue;
16
+ const { receivedRows } = await client.appendDatasetImportBatch(projectId, session.id, {
17
+ batchStartIndex,
18
+ samples: batch,
19
+ });
20
+ batchStartIndex += batch.length;
21
+ options.onProgress?.({ phase: 'uploading', receivedRows });
22
+ }
23
+ if (signal?.aborted)
24
+ throw new DOMException('aborted', 'AbortError');
25
+ options.onProgress?.({ phase: 'completing', receivedRows: batchStartIndex });
26
+ return await client.completeDatasetImport(projectId, session.id);
27
+ }
28
+ catch (error) {
29
+ await client.abortDatasetImport(projectId, session.id).catch(() => undefined);
30
+ throw error;
31
+ }
32
+ }
33
+ //# sourceMappingURL=dataset-import-runner.js.map