@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,379 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useMemo, useState } from 'react';
4
+ import Link from 'next/link';
5
+ import { useRouter, useSearchParams } from 'next/navigation';
6
+ import { formatClassificationAnnotationValue, normalizeClassificationAnnotationValue } from '@proofhound/shared';
7
+ import { ArrowLeft, ChevronDown, ExternalLink, ListChecks, PanelLeftClose, PanelLeftOpen, RotateCcw, Save, } from 'lucide-react';
8
+ import { AnnotationClaimDialog } from '../../components';
9
+ import { Main } from '@proofhound/ui/layout';
10
+ import { Button, Label, DetailPageSkeleton, Progress, formatProgressLabel, Segmented, Table, TableBody, TableCell, TableEmpty, TableHead, TableHeader, TableRow, TableSkeletonRows, cn, } from '@proofhound/ui';
11
+ import { useAnnotationSamples, useAnnotationTask, useDateTimeFormatter, useClaimAnnotationSamples, useReleaseAnnotationSample, useSubmitAnnotationSample, } from '../../hooks';
12
+ import { useDelayedLoading } from '../../hooks';
13
+ import { useI18n } from '../../i18n';
14
+ import { getApiErrorMessage } from '../../lib';
15
+ import { buildAnnotationTasks } from './annotation-task-model';
16
+ import { AnnotationMetricCard, AnnotationScopeBadge, AnnotationTaskStatusBadge, formatCount, formatDateTimeOrDash, formatPercent, } from './annotation-ui';
17
+ const SAMPLE_COLUMNS = [
18
+ { key: 'sample', width: 'flex', minPx: 220 },
19
+ { key: 'status', width: 'compact' },
20
+ { key: 'result', width: 'compact' },
21
+ { key: 'judgment', width: 'compact' },
22
+ { key: 'createdAt', width: 'compact' },
23
+ ];
24
+ function normalizeStatusParam(value) {
25
+ if (value === 'pending' || value === 'claimed' || value === 'submitted')
26
+ return value;
27
+ return 'all';
28
+ }
29
+ function getAnnotationStatus(annotation) {
30
+ if (annotation.submittedAt)
31
+ return 'submitted';
32
+ if (!annotation.lockedBy)
33
+ return 'pending';
34
+ if (!annotation.lockHeartbeatAt)
35
+ return 'claimed';
36
+ const heartbeat = Date.parse(annotation.lockHeartbeatAt);
37
+ if (!Number.isFinite(heartbeat))
38
+ return 'claimed';
39
+ return Date.now() - heartbeat <= 5 * 60_000 ? 'claimed' : 'pending';
40
+ }
41
+ function statusKey(status) {
42
+ switch (status) {
43
+ case 'pending':
44
+ return 'annotations.sample.status.pending';
45
+ case 'claimed':
46
+ return 'annotations.sample.status.claimed';
47
+ case 'submitted':
48
+ return 'annotations.sample.status.submitted';
49
+ }
50
+ }
51
+ function compactValue(value, maxLength = 80) {
52
+ if (!value)
53
+ return '-';
54
+ return value.length > maxLength ? `${value.slice(0, maxLength)}...` : value;
55
+ }
56
+ function isTextEditingTarget(target) {
57
+ if (!(target instanceof HTMLElement))
58
+ return false;
59
+ return (target.isContentEditable ||
60
+ target instanceof HTMLInputElement ||
61
+ target instanceof HTMLTextAreaElement ||
62
+ target instanceof HTMLSelectElement);
63
+ }
64
+ function getCategoryShortcutIndex(event) {
65
+ if (/^[1-9]$/.test(event.key))
66
+ return Number(event.key) - 1;
67
+ if (event.key === '0')
68
+ return 9;
69
+ return null;
70
+ }
71
+ function isSubmitShortcut(event) {
72
+ return (event.key === 'Enter' ||
73
+ event.key === 'Return' ||
74
+ event.key === 'NumpadEnter' ||
75
+ event.code === 'Enter' ||
76
+ event.code === 'NumpadEnter');
77
+ }
78
+ export function AnnotationDetailPage({ projectId, annotationTaskId }) {
79
+ const router = useRouter();
80
+ const searchParams = useSearchParams();
81
+ const { t } = useI18n();
82
+ const { formatDateTime } = useDateTimeFormatter();
83
+ const taskQuery = useAnnotationTask(projectId, annotationTaskId);
84
+ const task = useMemo(() => (taskQuery.data ? (buildAnnotationTasks([taskQuery.data])[0] ?? null) : null), [taskQuery.data]);
85
+ const [sampleFilter, setSampleFilter] = useState(() => normalizeStatusParam(searchParams.get('status')));
86
+ const [claimOpen, setClaimOpen] = useState(false);
87
+ const [queueCollapsed, setQueueCollapsed] = useState(false);
88
+ const [selectedAnnotationId, setSelectedAnnotationId] = useState(null);
89
+ const query = useMemo(() => ({
90
+ status: sampleFilter === 'all' ? undefined : sampleFilter,
91
+ limit: 80,
92
+ offset: 0,
93
+ }), [sampleFilter]);
94
+ const annotationsQuery = useAnnotationSamples(projectId, annotationTaskId, query);
95
+ const annotationsLoading = useDelayedLoading(annotationsQuery.isLoading);
96
+ const claimMutation = useClaimAnnotationSamples(projectId, annotationTaskId);
97
+ const submitMutation = useSubmitAnnotationSample(projectId, annotationTaskId);
98
+ const releaseMutation = useReleaseAnnotationSample(projectId, annotationTaskId);
99
+ const annotations = useMemo(() => annotationsQuery.data?.data ?? [], [annotationsQuery.data]);
100
+ const selectedAnnotation = annotations.find((annotation) => annotation.id === selectedAnnotationId) ?? annotations[0] ?? null;
101
+ function selectFilter(next) {
102
+ setSampleFilter(next);
103
+ const params = new URLSearchParams(searchParams.toString());
104
+ if (next === 'all')
105
+ params.delete('status');
106
+ else
107
+ params.set('status', next);
108
+ const queryString = params.toString();
109
+ router.replace(queryString
110
+ ? `/annotations/${encodeURIComponent(annotationTaskId)}?${queryString}`
111
+ : `/annotations/${encodeURIComponent(annotationTaskId)}`, { scroll: false });
112
+ }
113
+ function handleClaim(batchSize) {
114
+ claimMutation.mutate({ batchSize }, {
115
+ onSuccess: (response) => {
116
+ setClaimOpen(false);
117
+ selectFilter('claimed');
118
+ setSelectedAnnotationId(response.data[0]?.id ?? null);
119
+ },
120
+ });
121
+ }
122
+ const detailLoading = useDelayedLoading(taskQuery.isLoading && !taskQuery.data);
123
+ if (detailLoading) {
124
+ return (_jsx(Main, { fixed: true, className: "bg-muted/35", children: _jsx("div", { className: "mx-auto w-full max-w-[1760px]", "data-testid": "annotation-detail-page", children: _jsx(DetailPageSkeleton, {}) }) }));
125
+ }
126
+ if (!task) {
127
+ return (_jsx(Main, { fixed: true, className: "bg-muted/35", children: _jsx("div", { className: "mx-auto flex w-full max-w-[960px] flex-col gap-4", "data-testid": "annotation-detail-page", children: _jsxs("div", { className: "rounded-lg border bg-card p-10 text-center", children: [_jsx("div", { className: "text-[15px] font-semibold", children: t('annotations.detail.notFound') }), _jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: annotationTaskId }), _jsx(Button, { className: "mt-5", asChild: true, children: _jsxs(Link, { href: "/annotations", children: [_jsx(ArrowLeft, { className: "size-4" }), t('annotations.action.back')] }) })] }) }) }));
128
+ }
129
+ return (_jsxs(Main, { fixed: true, className: "gap-5 overflow-auto bg-muted/35 pb-8", children: [_jsxs("div", { className: "mx-auto flex w-full max-w-[1760px] flex-col gap-5", "data-testid": "annotation-detail-page", children: [_jsxs("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-2", children: [_jsx("h1", { className: "truncate text-[22px] font-semibold leading-tight", children: task.name }), _jsx(AnnotationTaskStatusBadge, { status: task.status }), _jsx(AnnotationScopeBadge, { scope: task.scope })] }), _jsxs("p", { className: "mt-1 max-w-3xl text-[12.5px] text-muted-foreground", children: [task.promptName, " \u00B7 ", task.releaseVariantLabel, " \u00B7 ", task.promptVersionLabel ?? '-', " \u00B7", ' ', task.modelName ?? '-'] })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(Button, { variant: "outline", asChild: true, children: _jsxs(Link, { href: "/annotations", children: [_jsx(ArrowLeft, { className: "size-4" }), t('annotations.action.back')] }) }), _jsx(Button, { variant: "outline", asChild: true, children: _jsxs(Link, { href: `/releases/${encodeURIComponent(task.releaseLineId)}?tab=quality`, children: [_jsx(ExternalLink, { className: "size-4" }), t('annotations.action.openRelease')] }) }), _jsxs(Button, { onClick: () => setClaimOpen(true), disabled: task.open < 1, children: [_jsx(ListChecks, { className: "size-4" }), t('annotations.action.claim')] })] })] }), _jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-5", children: [_jsx(AnnotationMetricCard, { label: t('annotations.detail.metric.open'), value: formatCount(task.open), detail: t('annotations.detail.metric.openHint'), tone: "active" }), _jsx(AnnotationMetricCard, { label: t('annotations.detail.metric.claimed'), value: formatCount(task.claimed), detail: t('annotations.detail.metric.claimedHint') }), _jsx(AnnotationMetricCard, { label: t('annotations.detail.metric.submitted'), value: formatCount(task.submitted), detail: `${formatCount(task.submitted)} / ${formatCount(task.total)}`, tone: "success", testId: "annotation-detail-metric-submitted" }), _jsx(AnnotationMetricCard, { label: t('annotations.detail.metric.quality'), value: formatPercent(task.qualityScore, 1), detail: t('annotations.detail.metric.qualityHint') }), _jsxs("div", { className: "rounded-lg border bg-card px-4 py-3", children: [_jsx("div", { className: "text-[11.5px] font-medium text-muted-foreground", children: t('annotations.detail.metric.progress') }), _jsx("div", { className: "mt-3", children: _jsx(Progress, { value: task.submitted, max: Math.max(1, task.total), label: formatProgressLabel({
130
+ value: task.submitted,
131
+ max: Math.max(1, task.total),
132
+ }) }) })] })] }), _jsxs("div", { className: cn('grid gap-4', queueCollapsed ? 'xl:grid-cols-[52px_minmax(0,1fr)]' : 'xl:grid-cols-[520px_minmax(0,1fr)]'), children: [_jsx("section", { className: cn('min-w-0 overflow-hidden rounded-lg border bg-card', queueCollapsed && 'min-h-12 xl:min-h-[520px]'), children: queueCollapsed ? (_jsx("div", { className: "flex h-full items-start justify-center p-1", children: _jsx(Button, { type: "button", variant: "ghost", size: "icon", "aria-label": t('annotations.detail.queue.expand'), onClick: () => setQueueCollapsed(false), children: _jsx(PanelLeftOpen, { className: "size-4" }) }) })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2 border-b px-4 py-3", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-[14px] font-semibold", children: t('annotations.detail.queue') }), _jsx("p", { className: "mt-1 text-[11.5px] text-muted-foreground", children: t('annotations.detail.queueHint') })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx(Segmented, { value: sampleFilter, onChange: selectFilter, ariaLabel: t('annotations.detail.filter.label'), size: "sm", options: [
133
+ { value: 'all', label: t('annotations.detail.filter.all') },
134
+ { value: 'pending', label: t('annotations.sample.status.pending') },
135
+ { value: 'claimed', label: t('annotations.sample.status.claimed') },
136
+ { value: 'submitted', label: t('annotations.sample.status.submitted') },
137
+ ] }), _jsx(Button, { type: "button", variant: "ghost", size: "icon", "aria-label": t('annotations.detail.queue.collapse'), onClick: () => setQueueCollapsed(true), children: _jsx(PanelLeftClose, { className: "size-4" }) })] })] }), _jsxs(Table, { columns: SAMPLE_COLUMNS, children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { column: "sample", children: t('annotations.detail.samples.sample') }), _jsx(TableHead, { column: "status", children: t('annotations.detail.samples.status') }), _jsx(TableHead, { column: "result", children: t('annotations.detail.samples.result') }), _jsx(TableHead, { column: "judgment", children: t('annotations.detail.samples.judgment') }), _jsx(TableHead, { column: "createdAt", children: t('annotations.detail.samples.createdAt') })] }) }), _jsx(TableBody, { children: annotationsLoading ? (_jsx(TableSkeletonRows, {})) : annotations.length === 0 ? (_jsx(TableEmpty, { children: t('annotations.detail.empty') })) : (annotations.map((annotation) => (_jsxs(TableRow, { selected: annotation.id === selectedAnnotation?.id, selectedTone: "canary", onClick: () => setSelectedAnnotationId(annotation.id), children: [_jsx(TableCell, { column: "sample", children: _jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "truncate font-mono text-[12.5px]", children: annotation.externalId ?? annotation.runResultId.slice(0, 8) }), _jsx("div", { className: "mt-1 line-clamp-2 text-[11.5px] text-muted-foreground", children: annotation.outputPreview ?? annotation.inputPreview ?? '-' })] }) }), _jsx(TableCell, { column: "status", children: _jsx(SampleStatusBadge, { status: getAnnotationStatus(annotation) }) }), _jsx(TableCell, { column: "result", children: _jsx(ExpectedOutputPill, { value: annotation.annotatedExpectedOutput }) }), _jsx(TableCell, { column: "judgment", children: _jsx(JudgmentPill, { annotation: annotation }) }), _jsx(TableCell, { column: "createdAt", children: _jsx("span", { className: "font-mono text-[11px] text-muted-foreground", children: formatDateTimeOrDash(annotation.createdAt, formatDateTime) }) })] }, annotation.id)))) })] })] })) }), _jsx(AnnotationWorkspace, { annotation: selectedAnnotation, categoryOptions: task.raw.categoryOptions, submitPending: submitMutation.isPending, releasePending: releaseMutation.isPending, submitError: getApiErrorMessage(submitMutation.error), releaseError: getApiErrorMessage(releaseMutation.error), onSubmit: (payload) => {
138
+ if (!selectedAnnotation)
139
+ return;
140
+ const selectedIndex = annotations.findIndex((annotation) => annotation.id === selectedAnnotation.id);
141
+ const nextAnnotation = selectedIndex >= 0
142
+ ? [...annotations.slice(selectedIndex + 1), ...annotations.slice(0, selectedIndex)].find((annotation) => getAnnotationStatus(annotation) !== 'submitted')
143
+ : null;
144
+ submitMutation.mutate({
145
+ annotationId: selectedAnnotation.id,
146
+ expectedOutput: payload.expectedOutput.trim(),
147
+ notes: payload.notes.trim() ? payload.notes.trim() : null,
148
+ }, {
149
+ onSuccess: () => setSelectedAnnotationId(nextAnnotation?.id ?? null),
150
+ });
151
+ }, onRelease: () => {
152
+ if (!selectedAnnotation)
153
+ return;
154
+ releaseMutation.mutate({ annotationId: selectedAnnotation.id }, {
155
+ onSuccess: () => setSelectedAnnotationId(null),
156
+ });
157
+ } })] })] }), _jsx(AnnotationClaimDialog, { open: claimOpen, onOpenChange: setClaimOpen, inputId: "annotation-detail-claim-size", maxClaimable: task.open, isPending: claimMutation.isPending, onSubmit: handleClaim, onCancel: () => setClaimOpen(false) })] }));
158
+ }
159
+ function SampleStatusBadge({ status }) {
160
+ const { t } = useI18n();
161
+ const token = status === 'submitted'
162
+ ? {
163
+ bg: 'var(--status-running-bg)',
164
+ fg: 'var(--status-running-fg)',
165
+ bd: 'var(--status-running-bd)',
166
+ }
167
+ : status === 'claimed'
168
+ ? {
169
+ bg: 'var(--status-canary-bg)',
170
+ fg: 'var(--status-canary-fg)',
171
+ bd: 'var(--status-canary-bd)',
172
+ }
173
+ : {
174
+ bg: 'var(--status-pending-bg)',
175
+ fg: 'var(--status-pending-fg)',
176
+ bd: 'var(--status-pending-bd)',
177
+ };
178
+ return (_jsx("span", { className: "inline-flex rounded-full border px-2 py-0.5 text-[11px] font-medium", style: { background: token.bg, color: token.fg, borderColor: token.bd }, children: t(statusKey(status)) }));
179
+ }
180
+ function ExpectedOutputPill({ value }) {
181
+ const { t } = useI18n();
182
+ if (!value) {
183
+ return _jsx("span", { className: "text-[12px] text-muted-foreground", children: t('annotations.expectedOutput.pending') });
184
+ }
185
+ return (_jsx("span", { className: "inline-flex max-w-[180px] rounded-full border px-2 py-0.5 font-mono text-[11px] font-medium", style: {
186
+ background: 'var(--status-running-bg)',
187
+ color: 'var(--status-running-fg)',
188
+ borderColor: 'var(--status-running-bd)',
189
+ }, title: value, children: _jsx("span", { className: "truncate", children: compactValue(value) }) }));
190
+ }
191
+ function getAnnotationJudgment(annotation) {
192
+ if (annotation.isCorrect === true)
193
+ return 'correct';
194
+ if (annotation.isCorrect === false)
195
+ return 'incorrect';
196
+ if (!annotation.submittedAt || !annotation.annotatedExpectedOutput)
197
+ return null;
198
+ return annotation.decisionOutput === annotation.annotatedExpectedOutput ? 'correct' : 'incorrect';
199
+ }
200
+ function JudgmentPill({ annotation }) {
201
+ const { t } = useI18n();
202
+ const judgment = getAnnotationJudgment(annotation);
203
+ if (!judgment) {
204
+ return _jsx("span", { className: "text-[12px] text-muted-foreground", children: t('annotations.judgment.pending') });
205
+ }
206
+ if (judgment === 'correct') {
207
+ return (_jsx("span", { className: "inline-flex rounded-full border px-2 py-0.5 text-[11px] font-medium", style: {
208
+ background: 'var(--status-running-bg)',
209
+ color: 'var(--status-running-fg)',
210
+ borderColor: 'var(--status-running-bd)',
211
+ }, children: t('annotations.judgment.correct') }));
212
+ }
213
+ return (_jsx("span", { className: "inline-flex rounded-full border border-destructive/30 bg-destructive/10 px-2 py-0.5 text-[11px] font-medium text-destructive", children: t('annotations.judgment.incorrect') }));
214
+ }
215
+ function AnnotationWorkspace({ annotation, categoryOptions, submitPending, releasePending, submitError, releaseError, onSubmit, onRelease, }) {
216
+ const { t } = useI18n();
217
+ if (!annotation) {
218
+ return (_jsx("section", { className: "rounded-lg border bg-card p-10 text-center text-sm text-muted-foreground", children: t('annotations.detail.workspace.empty') }));
219
+ }
220
+ return (_jsx(AnnotationWorkspaceForm, { annotation: annotation, categoryOptions: categoryOptions, submitPending: submitPending, releasePending: releasePending, submitError: submitError, releaseError: releaseError, onSubmit: onSubmit, onRelease: onRelease }, annotation.id));
221
+ }
222
+ function AnnotationWorkspaceForm({ annotation, categoryOptions, submitPending, releasePending, submitError, releaseError, onSubmit, onRelease, }) {
223
+ const { t } = useI18n();
224
+ const [selectedCategory, setSelectedCategory] = useState(() => normalizeClassificationAnnotationValue(annotation.annotatedExpectedOutput ?? annotation.expectedOutput ?? '', categoryOptions) ?? '');
225
+ const [notes, setNotes] = useState(() => annotation.notes ?? '');
226
+ const sampleStatus = getAnnotationStatus(annotation);
227
+ const canEdit = sampleStatus !== 'submitted' && !submitPending && !releasePending && categoryOptions.length > 0;
228
+ const canSubmit = canEdit && selectedCategory.length > 0;
229
+ const expectedOutput = formatClassificationAnnotationValue(selectedCategory);
230
+ const selectCategory = useCallback((category) => {
231
+ if (!canEdit)
232
+ return;
233
+ setSelectedCategory(category);
234
+ }, [canEdit]);
235
+ const submitCurrent = useCallback(() => {
236
+ if (!canSubmit)
237
+ return;
238
+ onSubmit({ expectedOutput, notes });
239
+ }, [canSubmit, expectedOutput, notes, onSubmit]);
240
+ useEffect(() => {
241
+ function handleKeyDown(event) {
242
+ if (event.isComposing || event.metaKey || event.ctrlKey || event.altKey || isTextEditingTarget(event.target)) {
243
+ return;
244
+ }
245
+ const categoryIndex = getCategoryShortcutIndex(event);
246
+ if (categoryIndex !== null && categoryIndex < categoryOptions.length) {
247
+ event.preventDefault();
248
+ const category = categoryOptions[categoryIndex];
249
+ if (category)
250
+ selectCategory(category);
251
+ return;
252
+ }
253
+ if (isSubmitShortcut(event)) {
254
+ event.preventDefault();
255
+ submitCurrent();
256
+ }
257
+ }
258
+ window.addEventListener('keydown', handleKeyDown);
259
+ return () => window.removeEventListener('keydown', handleKeyDown);
260
+ }, [categoryOptions, selectCategory, submitCurrent]);
261
+ return (_jsxs("section", { className: "grid min-w-0 gap-4 xl:grid-cols-[minmax(0,1fr)_340px]", children: [_jsxs("div", { className: "flex min-w-0 flex-col gap-4", children: [_jsxs("div", { className: "grid gap-4 lg:grid-cols-2", children: [_jsx(ReadableDataPanel, { title: t('annotations.workspace.inputVariables'), value: annotation.inputVariables }), _jsx(ReadableDataPanel, { title: t('annotations.workspace.modelOutput'), value: annotation.decisionOutput ?? annotation.parsedOutput ?? annotation.rawResponse })] }), _jsx(CollapsibleReadablePanel, { title: t('annotations.workspace.fullPrompt'), value: annotation.renderedPrompt }), _jsx(ReadableEntryPanel, { title: t('annotations.workspace.runMeta'), entries: [
262
+ { label: t('annotations.workspace.runResultId'), value: annotation.runResultId },
263
+ { label: t('annotations.workspace.externalId'), value: annotation.externalId },
264
+ {
265
+ label: t('annotations.workspace.latency'),
266
+ value: annotation.latencyMs ? `${annotation.latencyMs}ms` : null,
267
+ },
268
+ {
269
+ label: t('annotations.workspace.tokens'),
270
+ value: (annotation.inputTokens ?? 0) + (annotation.outputTokens ?? 0),
271
+ },
272
+ ] })] }), _jsxs("aside", { className: "rounded-lg border bg-card", children: [_jsxs("div", { className: "border-b px-4 py-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx("h2", { className: "text-[14px] font-semibold", children: t('annotations.form.title') }), _jsx(SampleStatusBadge, { status: sampleStatus })] }), _jsx("p", { className: "mt-1 text-[11.5px] text-muted-foreground", children: t('annotations.form.subtitle') })] }), _jsxs("div", { className: "space-y-4 p-4", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { children: t('annotations.form.expectedOutput') }), categoryOptions.length === 0 ? (_jsx("div", { className: "rounded-md border border-dashed bg-muted/35 px-3 py-5 text-center text-[12px] text-muted-foreground", children: t('annotations.form.noCategoryOptions') })) : (_jsx("div", { className: "grid gap-2", role: "radiogroup", "aria-label": t('annotations.form.expectedOutput'), children: categoryOptions.map((category, index) => {
273
+ const selected = selectedCategory === category;
274
+ const shortcut = index < 9 ? String(index + 1) : index === 9 ? '0' : undefined;
275
+ return (_jsxs("button", { type: "button", role: "radio", "data-testid": `annotation-sample-category-${category}`, "aria-checked": selected, "aria-keyshortcuts": shortcut, disabled: !canEdit, onClick: () => selectCategory(category), className: cn('flex min-h-9 w-full items-center gap-2 rounded-md border bg-background px-3 py-2 text-left text-sm transition-colors', canEdit && 'hover:bg-accent', selected && 'border-primary bg-primary/5 text-primary', !canEdit && 'cursor-not-allowed opacity-70'), children: [_jsx("span", { className: cn('inline-flex size-4 shrink-0 items-center justify-center rounded-full border', selected ? 'border-primary' : 'border-muted-foreground/50'), children: selected ? _jsx("span", { className: "size-2 rounded-full bg-primary" }) : null }), _jsx("span", { className: "min-w-0 break-words font-mono", children: category })] }, category));
276
+ }) })), canEdit && selectedCategory.length === 0 ? (_jsx("p", { className: "text-[11.5px] text-muted-foreground", children: t('annotations.form.expectedOutputRequired') })) : null] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { children: t('annotations.form.notes') }), _jsx("textarea", { value: notes, onChange: (event) => setNotes(event.target.value), rows: 5, className: "min-h-[120px] w-full resize-y rounded-md border border-input bg-background px-3 py-2 text-sm outline-none ring-offset-background placeholder:text-muted-foreground focus:ring-2 focus:ring-ring focus:ring-offset-2", placeholder: t('annotations.form.notesPlaceholder') })] }), submitError ? _jsx(FormError, { children: submitError }) : null, releaseError ? _jsx(FormError, { children: releaseError }) : null, _jsxs("div", { className: "flex flex-wrap items-center justify-end gap-2 border-t pt-4", children: [_jsxs(Button, { type: "button", variant: "outline", onClick: onRelease, disabled: sampleStatus !== 'claimed' || submitPending || releasePending, children: [_jsx(RotateCcw, { className: "size-4" }), releasePending ? t('annotations.form.releasing') : t('annotations.form.release')] }), _jsxs(Button, { type: "button", "data-testid": "annotation-save", onClick: submitCurrent, "aria-keyshortcuts": "Enter", disabled: !canSubmit, children: [_jsx(Save, { className: "size-4" }), submitPending ? t('annotations.form.submitting') : t('annotations.form.submit')] })] })] })] })] }));
277
+ }
278
+ function ReadableDataPanel({ title, value }) {
279
+ const normalized = normalizeReadableValue(value);
280
+ if (isRecord(normalized)) {
281
+ return (_jsx(ReadableEntryPanel, { title: title, entries: Object.entries(normalized).map(([label, entryValue]) => ({
282
+ label: formatReadableLabel(label),
283
+ value: entryValue,
284
+ })) }));
285
+ }
286
+ return (_jsxs("div", { className: "min-w-0 rounded-lg border bg-card", children: [_jsx("div", { className: "border-b px-4 py-3 text-[13px] font-semibold", children: title }), _jsx("div", { className: "max-h-[360px] overflow-auto p-4", children: _jsx(ReadableValue, { value: normalized }) })] }));
287
+ }
288
+ function ReadableEntryPanel({ title, entries }) {
289
+ return (_jsxs("div", { className: "min-w-0 rounded-lg border bg-card", children: [_jsx("div", { className: "border-b px-4 py-3 text-[13px] font-semibold", children: title }), _jsx("div", { className: "max-h-[360px] overflow-auto p-4", children: entries.length === 0 ? (_jsx(ReadableValue, { value: null })) : (_jsx("dl", { className: "space-y-3", children: entries.map((entry, index) => (_jsxs("div", { className: "min-w-0", children: [_jsx("dt", { className: "text-[11.5px] font-medium text-muted-foreground", children: entry.label }), _jsx("dd", { className: "mt-1 text-[12.5px] leading-5", children: _jsx(ReadableValue, { value: entry.value }) })] }, index))) })) })] }));
290
+ }
291
+ function CollapsibleReadablePanel({ title, value }) {
292
+ return (_jsxs("details", { className: "group min-w-0 rounded-lg border bg-card", children: [_jsxs("summary", { className: "flex cursor-pointer list-none items-center justify-between gap-3 border-b px-4 py-3 text-[13px] font-semibold [&::-webkit-details-marker]:hidden", children: [_jsx("span", { children: title }), _jsx(ChevronDown, { className: "size-4 shrink-0 text-muted-foreground transition-transform group-open:rotate-180" })] }), _jsx("div", { className: "max-h-[420px] overflow-auto p-4", children: _jsx(ReadableValue, { value: formatPromptText(value) }) })] }));
293
+ }
294
+ function ReadableValue({ value }) {
295
+ const text = formatReadableValue(value);
296
+ if (text === '-') {
297
+ return _jsx("span", { className: "text-[12.5px] text-muted-foreground", children: "-" });
298
+ }
299
+ return _jsx("span", { className: "whitespace-pre-wrap break-words text-[12.5px] leading-5", children: text });
300
+ }
301
+ function normalizeReadableValue(value) {
302
+ if (typeof value !== 'string')
303
+ return value;
304
+ const trimmed = value.trim();
305
+ if (!trimmed)
306
+ return value;
307
+ if (!trimmed.startsWith('{') && !trimmed.startsWith('['))
308
+ return value;
309
+ try {
310
+ return JSON.parse(trimmed);
311
+ }
312
+ catch {
313
+ return value;
314
+ }
315
+ }
316
+ function isRecord(value) {
317
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
318
+ }
319
+ function formatReadableLabel(label) {
320
+ const withSpaces = label
321
+ .replace(/[_-]+/g, ' ')
322
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
323
+ .trim();
324
+ return withSpaces ? `${withSpaces.charAt(0).toUpperCase()}${withSpaces.slice(1)}` : label;
325
+ }
326
+ function formatReadableValue(value) {
327
+ const normalized = normalizeReadableValue(value);
328
+ if (normalized === null || normalized === undefined || normalized === '')
329
+ return '-';
330
+ if (typeof normalized === 'string')
331
+ return normalized;
332
+ if (typeof normalized === 'number' || typeof normalized === 'boolean' || typeof normalized === 'bigint') {
333
+ return String(normalized);
334
+ }
335
+ if (Array.isArray(normalized)) {
336
+ if (normalized.length === 0)
337
+ return '-';
338
+ return normalized.map((item) => formatReadableValue(item)).join('\n\n');
339
+ }
340
+ if (isRecord(normalized)) {
341
+ const entries = Object.entries(normalized);
342
+ if (entries.length === 0)
343
+ return '-';
344
+ return entries
345
+ .map(([label, entryValue]) => `${formatReadableLabel(label)}: ${formatReadableValue(entryValue)}`)
346
+ .join('\n');
347
+ }
348
+ return String(normalized);
349
+ }
350
+ function formatPromptText(value) {
351
+ const normalized = normalizeReadableValue(value);
352
+ if (normalized === null || normalized === undefined || normalized === '')
353
+ return '-';
354
+ if (typeof normalized === 'string')
355
+ return normalized;
356
+ if (Array.isArray(normalized))
357
+ return normalized.map(formatPromptMessage).join('\n\n');
358
+ if (isRecord(normalized)) {
359
+ const directPrompt = normalized['prompt'] ?? normalized['renderedPrompt'] ?? normalized['text'];
360
+ if (typeof directPrompt === 'string')
361
+ return directPrompt;
362
+ const messages = normalized['messages'];
363
+ if (Array.isArray(messages))
364
+ return messages.map(formatPromptMessage).join('\n\n');
365
+ }
366
+ return formatReadableValue(normalized);
367
+ }
368
+ function formatPromptMessage(message, index) {
369
+ const normalized = normalizeReadableValue(message);
370
+ if (!isRecord(normalized))
371
+ return formatReadableValue(normalized);
372
+ const role = typeof normalized['role'] === 'string' ? normalized['role'] : `Message ${index + 1}`;
373
+ const content = normalized['content'] ?? normalized['text'] ?? normalized['message'] ?? normalized;
374
+ return `${formatReadableLabel(role)}\n${formatReadableValue(content)}`;
375
+ }
376
+ function FormError({ children }) {
377
+ return (_jsx("div", { className: "rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-[12px] text-destructive", children: children }));
378
+ }
379
+ //# sourceMappingURL=annotation-detail-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation-detail-page.js","sourceRoot":"","sources":["../../../src/screens/annotations/annotation-detail-page.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function AnnotationNewPage({ projectId }: {
2
+ projectId: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=annotation-new-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation-new-page.d.ts","sourceRoot":"","sources":["../../../src/screens/annotations/annotation-new-page.tsx"],"names":[],"mappings":"AA8BA,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,2CAiRrE"}
@@ -0,0 +1,125 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useMemo, useState } from 'react';
4
+ import Link from 'next/link';
5
+ import { useRouter, useSearchParams } from 'next/navigation';
6
+ import { ClipboardCheck, Database, GitBranch, RadioTower } from 'lucide-react';
7
+ import { Main } from '@proofhound/ui/layout';
8
+ import { Button, Input, Label, DetailPageSkeleton, Segmented, cn, } from '@proofhound/ui';
9
+ import { useAnnotationTaskOptions, useCreateAnnotationTask } from '../../hooks';
10
+ import { useDelayedLoading } from '../../hooks';
11
+ import { useI18n } from '../../i18n';
12
+ import { getApiErrorMessage } from '../../lib';
13
+ import { formatCount } from './annotation-ui';
14
+ function buildDefaultTaskName() {
15
+ const now = new Date();
16
+ const yyyy = now.getFullYear();
17
+ const mm = String(now.getMonth() + 1).padStart(2, '0');
18
+ const dd = String(now.getDate()).padStart(2, '0');
19
+ return `annotation-${yyyy}${mm}${dd}`;
20
+ }
21
+ export function AnnotationNewPage({ projectId }) {
22
+ const router = useRouter();
23
+ const { t } = useI18n();
24
+ const searchParams = useSearchParams();
25
+ const optionsQuery = useAnnotationTaskOptions(projectId);
26
+ const createMutation = useCreateAnnotationTask(projectId);
27
+ const requestedReleaseLineId = searchParams.get('line') ?? '';
28
+ const requestedReleaseVariantId = searchParams.get('variant') ?? '';
29
+ const releaseLines = useMemo(() => optionsQuery.data?.data ?? [], [optionsQuery.data]);
30
+ const [explicitLineId, setExplicitLineId] = useState('');
31
+ const [explicitVariantId, setExplicitVariantId] = useState('');
32
+ const [scope, setScope] = useState('canary');
33
+ const [taskName, setTaskName] = useState(buildDefaultTaskName);
34
+ const [sampleSizeDraft, setSampleSizeDraft] = useState(null);
35
+ const selectedLineId = useMemo(() => {
36
+ if (explicitLineId && releaseLines.some((line) => line.id === explicitLineId))
37
+ return explicitLineId;
38
+ const requested = releaseLines.find((line) => line.id === requestedReleaseLineId);
39
+ const requestedByVariant = releaseLines.find((line) => line.variants.some((variant) => variant.id === requestedReleaseVariantId));
40
+ return (requested ?? requestedByVariant ?? releaseLines[0])?.id ?? '';
41
+ }, [explicitLineId, releaseLines, requestedReleaseLineId, requestedReleaseVariantId]);
42
+ const selectedLine = useMemo(() => releaseLines.find((line) => line.id === selectedLineId) ?? null, [releaseLines, selectedLineId]);
43
+ const selectedVariantId = useMemo(() => {
44
+ if (!selectedLine)
45
+ return '';
46
+ if (explicitVariantId && selectedLine.variants.some((variant) => variant.id === explicitVariantId)) {
47
+ return explicitVariantId;
48
+ }
49
+ if (requestedReleaseVariantId && selectedLine.variants.some((variant) => variant.id === requestedReleaseVariantId)) {
50
+ return requestedReleaseVariantId;
51
+ }
52
+ return selectedLine.variants[0]?.id ?? '';
53
+ }, [explicitVariantId, requestedReleaseVariantId, selectedLine]);
54
+ const selectedVariant = useMemo(() => selectedLine?.variants.find((variant) => variant.id === selectedVariantId) ?? null, [selectedLine, selectedVariantId]);
55
+ const maxSamples = selectedVariant ? getMaxSamples(selectedVariant, scope) : 0;
56
+ const sampleSize = sampleSizeDraft ?? (maxSamples > 0 ? String(maxSamples) : '');
57
+ const parsedSampleSize = Number(sampleSize);
58
+ const normalizedSampleSize = Number.isFinite(parsedSampleSize) && parsedSampleSize > 0 ? Math.trunc(parsedSampleSize) : 0;
59
+ const canCreate = Boolean(selectedLine && selectedVariant && taskName.trim()) &&
60
+ Boolean(selectedVariant && selectedVariant.categoryOptions.length > 0) &&
61
+ normalizedSampleSize >= 1 &&
62
+ normalizedSampleSize <= maxSamples &&
63
+ !createMutation.isPending;
64
+ const submitHint = selectedVariant && selectedVariant.categoryOptions.length === 0
65
+ ? t('annotations.new.categoryOptionsRequired')
66
+ : canCreate
67
+ ? t('annotations.new.submitReady')
68
+ : t('annotations.new.submitDisabled');
69
+ function submit() {
70
+ if (!selectedLine || !selectedVariant || !canCreate)
71
+ return;
72
+ createMutation.mutate({
73
+ name: taskName.trim(),
74
+ releaseLineId: selectedLine.id,
75
+ releaseVariantId: selectedVariant.id,
76
+ scope,
77
+ sampleSize: normalizedSampleSize,
78
+ }, {
79
+ onSuccess: (task) => {
80
+ router.push(`/annotations/${encodeURIComponent(task.id)}`);
81
+ },
82
+ });
83
+ }
84
+ const optionsLoading = useDelayedLoading(optionsQuery.isLoading && !optionsQuery.data);
85
+ if (optionsLoading) {
86
+ return (_jsx(Main, { fixed: true, className: "bg-muted/35", children: _jsx("div", { className: "mx-auto w-full max-w-[1280px]", "data-testid": "annotation-new-page", children: _jsx(DetailPageSkeleton, {}) }) }));
87
+ }
88
+ return (_jsx(Main, { fixed: true, className: "gap-5 overflow-auto bg-muted/35 pb-8", children: _jsxs("div", { className: "mx-auto flex w-full max-w-[1280px] flex-col gap-5", "data-testid": "annotation-new-page", children: [_jsxs("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-[22px] font-semibold leading-tight", children: t('annotations.new.title') }), _jsx("p", { className: "mt-1 max-w-3xl text-[12.5px] text-muted-foreground", children: t('annotations.new.subtitle') })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { variant: "outline", asChild: true, children: _jsx(Link, { href: "/annotations", children: t('common.cancel') }) }), _jsxs(Button, { "data-testid": "annotation-new-submit", onClick: submit, disabled: !canCreate, children: [_jsx(ClipboardCheck, { className: "size-4" }), createMutation.isPending ? t('annotations.new.action.creating') : t('annotations.new.action.create')] })] })] }), _jsxs("div", { className: "grid gap-4 xl:grid-cols-[minmax(0,1fr)_340px]", children: [_jsxs("div", { className: "flex min-w-0 flex-col gap-4", children: [_jsxs("section", { className: "rounded-lg border bg-card", children: [_jsx(SectionHeader, { icon: _jsx(RadioTower, { className: "size-3" }), title: t('annotations.new.section.release'), detail: t('annotations.new.section.releaseDetail') }), _jsx("div", { className: "space-y-4 p-5", children: releaseLines.length === 0 ? (_jsx("div", { className: "rounded-md border border-dashed bg-muted/35 p-6 text-center text-sm text-muted-foreground", children: t('annotations.new.emptyRelease') })) : (_jsx("select", { "data-testid": "annotation-new-release-line-select", value: selectedLineId, onChange: (event) => {
89
+ setExplicitLineId(event.target.value);
90
+ setExplicitVariantId('');
91
+ setSampleSizeDraft(null);
92
+ }, className: "h-10 w-full rounded-md border border-input bg-background px-3 text-sm outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", children: releaseLines.map((line) => (_jsx("option", { value: line.id, children: line.name }, line.id))) })) })] }), _jsxs("section", { className: "rounded-lg border bg-card", children: [_jsx(SectionHeader, { icon: _jsx(GitBranch, { className: "size-3" }), title: t('annotations.new.section.variant'), detail: t('annotations.new.section.variantDetail') }), _jsx("div", { className: "p-5", children: !selectedLine ? (_jsx("div", { className: "rounded-md border border-dashed bg-muted/35 p-6 text-center text-sm text-muted-foreground", children: t('annotations.new.selectReleaseFirst') })) : selectedLine.variants.length === 0 ? (_jsx("div", { className: "rounded-md border border-dashed bg-muted/35 p-6 text-center text-sm text-muted-foreground", children: t('annotations.new.emptyVariant') })) : (_jsx("div", { className: "grid grid-cols-1 gap-3 lg:grid-cols-2", "data-testid": "annotation-new-release-variant-select", children: selectedLine.variants.map((variant) => (_jsx(VariantOption, { variant: variant, selected: variant.id === selectedVariantId, testId: `annotation-new-release-variant-option-${variant.id}`, onSelect: () => {
93
+ setExplicitVariantId(variant.id);
94
+ setSampleSizeDraft(null);
95
+ } }, variant.id))) })) })] }), _jsxs("section", { className: "rounded-lg border bg-card", children: [_jsx(SectionHeader, { icon: _jsx(Database, { className: "size-3" }), title: t('annotations.new.section.sample'), detail: t('annotations.new.section.sampleDetail') }), _jsxs("div", { className: "space-y-5 p-5", children: [_jsx("div", { "data-testid": "annotation-new-scope", children: _jsx(Segmented, { value: scope, onChange: (next) => {
96
+ setScope(next);
97
+ setSampleSizeDraft(null);
98
+ }, ariaLabel: t('annotations.new.scope.label'), options: [
99
+ { value: 'canary', label: t('annotations.scope.canary') },
100
+ { value: 'online', label: t('annotations.scope.online') },
101
+ ] }) }), _jsxs("div", { className: "grid grid-cols-1 gap-3 md:grid-cols-2", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { className: "text-[12.5px]", children: t('annotations.new.field.name') }), _jsx(Input, { "data-testid": "annotation-new-task-name", value: taskName, onChange: (event) => setTaskName(event.target.value), placeholder: t('annotations.new.field.namePlaceholder'), className: "font-mono text-[13px]" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { className: "text-[12.5px]", children: t('annotations.new.field.sampleLimit') }), _jsx(Input, { "data-testid": "annotation-new-sample-size", type: "number", min: 1, max: Math.max(1, maxSamples), value: sampleSize, onChange: (event) => setSampleSizeDraft(event.target.value), className: "font-mono text-[13px]" }), _jsx("p", { className: "text-[11.5px] text-muted-foreground", children: t('annotations.new.maxSamples').replace('{count}', formatCount(maxSamples)) })] })] }), _jsx("div", { className: "rounded-md border bg-muted/35 px-3 py-2 text-[12px] text-muted-foreground", children: t('annotations.new.expectedOutputOnly') }), getApiErrorMessage(createMutation.error) ? (_jsx("div", { className: "rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-[12px] text-destructive", children: getApiErrorMessage(createMutation.error) })) : null] })] })] }), _jsx("aside", { className: "xl:sticky xl:top-4 xl:self-start", children: _jsxs("div", { className: "rounded-lg border bg-card p-4", children: [_jsx("h2", { className: "text-[14px] font-semibold", children: t('annotations.new.summary.title') }), _jsxs("div", { className: "mt-4 space-y-3", children: [_jsx(SummaryRow, { label: t('annotations.new.field.name'), value: taskName.trim() || '-' }), _jsx(SummaryRow, { label: t('annotations.new.summary.release'), value: selectedLine?.name ?? '-' }), _jsx(SummaryRow, { label: t('annotations.new.summary.variant'), value: selectedVariant ? formatVariant(selectedVariant) : '-' }), _jsx(SummaryRow, { label: t('annotations.new.summary.scope'), value: scope === 'canary' ? t('annotations.scope.canary') : t('annotations.scope.online') }), _jsx(SummaryRow, { label: t('annotations.new.summary.samples'), value: `${formatCount(normalizedSampleSize)} / ${formatCount(maxSamples)}` }), _jsx(SummaryRow, { label: t('annotations.new.summary.field'), value: "expected_output" }), _jsx(SummaryRow, { label: t('annotations.new.summary.categories'), value: selectedVariant ? formatCategoryOptions(selectedVariant.categoryOptions) : '-' })] }), _jsx("div", { className: "mt-4 rounded-md border bg-muted/35 px-3 py-2 text-[12px] text-muted-foreground", children: submitHint })] }) })] })] }) }));
102
+ }
103
+ function SectionHeader({ icon, title, detail }) {
104
+ return (_jsxs("div", { className: "flex flex-wrap items-center gap-2 border-b px-5 py-3", children: [_jsx("span", { className: "inline-flex size-5 items-center justify-center rounded-full border border-[var(--status-canary-bd)] bg-[var(--status-canary-bg)] text-[var(--status-canary-fg)]", children: icon }), _jsx("h2", { className: "text-[14px] font-semibold", children: title }), _jsx("span", { className: "text-[12px] text-muted-foreground", children: detail })] }));
105
+ }
106
+ function VariantOption({ variant, selected, onSelect, testId, }) {
107
+ const { t } = useI18n();
108
+ return (_jsxs("button", { type: "button", "data-testid": testId, onClick: onSelect, className: cn('min-w-0 rounded-md border bg-background p-3 text-left transition-colors hover:bg-accent', selected && 'border-primary bg-primary/5'), children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "font-mono text-[12.5px] font-semibold", children: formatVariant(variant) }), _jsx("div", { className: "mt-1 truncate text-[11.5px] text-muted-foreground", children: variant.id })] }), _jsx("span", { className: "rounded-full border px-2 py-0.5 font-mono text-[10.5px] text-muted-foreground", children: variant.label })] }), _jsxs("div", { className: "mt-3 grid grid-cols-2 gap-2 font-mono text-[11px] text-muted-foreground", children: [_jsxs("span", { children: [t('annotations.scope.canary'), " ", formatCount(variant.canaryCount)] }), _jsxs("span", { children: [t('annotations.scope.online'), " ", formatCount(variant.onlineCount)] })] }), _jsx("div", { className: "mt-3 flex flex-wrap gap-1", children: variant.categoryOptions.length > 0 ? (_jsxs(_Fragment, { children: [variant.categoryOptions.slice(0, 4).map((category) => (_jsx("span", { className: "rounded-full border bg-muted/35 px-2 py-0.5 text-[10.5px]", children: category }, category))), variant.categoryOptions.length > 4 ? (_jsxs("span", { className: "rounded-full border bg-muted/35 px-2 py-0.5 font-mono text-[10.5px] text-muted-foreground", children: ["+", variant.categoryOptions.length - 4] })) : null] })) : (_jsx("span", { className: "text-[11px] text-destructive", children: t('annotations.new.noCategoryOptions') })) })] }));
109
+ }
110
+ function SummaryRow({ label, value }) {
111
+ return (_jsxs("div", { className: "grid grid-cols-[96px_minmax(0,1fr)] gap-3 text-[12px]", children: [_jsx("div", { className: "text-muted-foreground", children: label }), _jsx("div", { className: "min-w-0 truncate font-mono text-foreground", title: value, children: value })] }));
112
+ }
113
+ function getMaxSamples(variant, scope) {
114
+ return scope === 'online' ? variant.onlineCount : variant.canaryCount;
115
+ }
116
+ function formatVariant(variant) {
117
+ return `${variant.label} · ${variant.promptVersionLabel ?? variant.promptVersionId.slice(0, 8)} · ${variant.modelName ?? variant.modelId.slice(0, 8)}`;
118
+ }
119
+ function formatCategoryOptions(options) {
120
+ if (options.length === 0)
121
+ return '-';
122
+ const preview = options.slice(0, 3).join(' / ');
123
+ return options.length > 3 ? `${preview} / +${options.length - 3}` : preview;
124
+ }
125
+ //# sourceMappingURL=annotation-new-page.js.map