@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,352 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import Link from 'next/link';
4
+ import { usePathname, useRouter, useSearchParams } from 'next/navigation';
5
+ import { useEffect, useMemo, useState } from 'react';
6
+ import { Cable, Check, CopyPlus, DollarSign, Download, Edit3, Grid2X2, List, MoreHorizontal, Power, Plus, Search, SlidersHorizontal, Timer, Trash2, X, } from 'lucide-react';
7
+ import { Button, Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, Input, ListRowsSkeleton, PlatformLoaderOverlay, ModalityIconGroup, Progress, formatProgressLabel, ResourcePaginationFooter, SlidingViewToggle, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, TABLE_ACTION_ICON_BUTTON_CLASS, TableActionIconButton, TableActionTooltip, cn, } from '@proofhound/ui';
8
+ import { Main } from '@proofhound/ui/layout';
9
+ import { useI18n } from '../../i18n';
10
+ import { getApiErrorMessage } from '../../lib';
11
+ import { useDateTimeFormatter, useDeleteProjectModel, useProbeProjectModel, useProjectModels, useUpdateProjectModel, } from '../../hooks';
12
+ import { useDelayedLoading } from '../../hooks';
13
+ import { dtoToProjectModel } from './project-model-adapter';
14
+ import { MODEL_SOURCE_LABEL_KEYS, MODEL_STATUS_CLASSES, MODEL_STATUS_LABEL_KEYS, getProjectModelSource, isProjectModelEditable, } from './model-view-model';
15
+ function resolveViewMode(value) {
16
+ return value === 'cards' ? 'cards' : 'table';
17
+ }
18
+ const MODELS_COLUMNS = [
19
+ { key: 'select', width: 'narrow', sticky: 'left' },
20
+ { key: 'name', width: 'wide', sticky: 'left' },
21
+ { key: 'capability', width: 'compact' },
22
+ { key: 'status', width: 'compact' },
23
+ { key: 'rpm', width: 'normal' },
24
+ { key: 'tpm', width: 'normal' },
25
+ { key: 'concurrency', width: 'normal' },
26
+ { key: 'pricing', width: 'normal' },
27
+ { key: 'probe', width: 'normal' },
28
+ { key: 'actions', width: 'normal', sticky: 'right' },
29
+ ];
30
+ const SOURCE_CLASS_NAMES = {
31
+ local: 'status-running',
32
+ };
33
+ const FILTERS = [
34
+ { key: 'all', labelKey: 'models.filter.all' },
35
+ { key: 'local', labelKey: 'models.filter.local' },
36
+ { key: 'enabled', labelKey: 'models.filter.enabled' },
37
+ { key: 'vision', labelKey: 'models.filter.vision' },
38
+ ];
39
+ const CONNECTIVITY_STATUS_LABEL_KEYS = {
40
+ success: 'models.connectivity.status.success',
41
+ testing: 'models.connectivity.status.testing',
42
+ failed: 'models.connectivity.status.failed',
43
+ };
44
+ const CONNECTIVITY_STATUS_CLASSES = {
45
+ success: 'border-[color-mix(in_srgb,var(--src-prod)_30%,var(--border))] bg-[var(--src-prod-soft)] text-[var(--src-prod-fg)]',
46
+ testing: 'border-[color-mix(in_srgb,var(--src-canary)_30%,var(--border))] bg-[var(--src-canary-soft)] text-[var(--src-canary-fg)]',
47
+ failed: 'border-[var(--field-expected-no-bd)] bg-[var(--field-expected-no-bg)] text-[var(--field-expected-no-fg)]',
48
+ };
49
+ const CONNECTIVITY_STATUS_DOT_CLASSES = {
50
+ success: 'bg-[var(--src-prod)]',
51
+ testing: 'bg-[var(--src-canary)]',
52
+ failed: 'bg-[var(--field-expected-no-fg)]',
53
+ };
54
+ const DEFAULT_PAGE_SIZE = 10;
55
+ const PAGE_SIZE_OPTIONS = [10, 20, 50, 100];
56
+ function formatProbeDuration(durationMs) {
57
+ if (durationMs == null)
58
+ return '--';
59
+ const roundedMs = Math.max(0, Math.round(durationMs));
60
+ if (roundedMs < 1000)
61
+ return `${roundedMs} ms`;
62
+ const seconds = roundedMs / 1000;
63
+ return `${seconds < 10 ? seconds.toFixed(1) : seconds.toFixed(0)} s`;
64
+ }
65
+ function matchesFilter(model, filter) {
66
+ const source = getProjectModelSource(model);
67
+ if (filter === 'local')
68
+ return source === 'local';
69
+ if (filter === 'enabled')
70
+ return model.status === 'enabled';
71
+ if (filter === 'vision')
72
+ return model.imageCapability !== 'none';
73
+ return true;
74
+ }
75
+ function getSearchText(model) {
76
+ return [model.name, model.provider, model.providerModelId, model.owner].filter(Boolean).join(' ').toLowerCase();
77
+ }
78
+ function getFilterCount(models, filter) {
79
+ return models.filter((model) => matchesFilter(model, filter)).length;
80
+ }
81
+ function FilterChip({ active, count, label, onClick, }) {
82
+ return (_jsxs("button", { type: "button", onClick: onClick, className: cn('inline-flex h-8 items-center gap-1.5 rounded-full border px-3 text-xs font-medium transition-colors', active
83
+ ? 'border-primary bg-primary text-primary-foreground'
84
+ : 'border-border bg-background text-muted-foreground hover:bg-accent hover:text-foreground'), children: [label, _jsx("span", { className: cn('font-mono text-[11px]', active ? 'opacity-75' : 'text-muted-foreground'), children: count })] }));
85
+ }
86
+ function ViewToggle({ value, onChange }) {
87
+ const { t } = useI18n();
88
+ return (_jsx(SlidingViewToggle, { value: value, ariaLabel: t('models.viewMode'), onChange: onChange, options: [
89
+ { value: 'table', label: t('models.viewTable'), icon: List },
90
+ { value: 'cards', label: t('models.viewCards'), icon: Grid2X2 },
91
+ ] }));
92
+ }
93
+ function SourcePill({ source }) {
94
+ const { t } = useI18n();
95
+ return (_jsx("span", { className: cn('inline-flex rounded-full border px-2 py-0.5 text-[11px] font-medium', SOURCE_CLASS_NAMES[source]), children: t(MODEL_SOURCE_LABEL_KEYS[source]) }));
96
+ }
97
+ function StatusBadge({ status }) {
98
+ const { t } = useI18n();
99
+ const config = MODEL_STATUS_CLASSES[status];
100
+ return (_jsxs("span", { className: cn('inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-[11px] font-medium', config.pill), children: [_jsx("span", { className: cn('size-1.5 rounded-full', config.dot) }), t(MODEL_STATUS_LABEL_KEYS[status])] }));
101
+ }
102
+ function ProbeBadge({ status, testing }) {
103
+ const { t } = useI18n();
104
+ const connectivityStatus = testing ? 'testing' : status === 'pending' ? null : status;
105
+ const className = connectivityStatus ? CONNECTIVITY_STATUS_CLASSES[connectivityStatus] : 'status-archived';
106
+ const dotClassName = connectivityStatus ? CONNECTIVITY_STATUS_DOT_CLASSES[connectivityStatus] : 'dot-archived';
107
+ const label = connectivityStatus ? t(CONNECTIVITY_STATUS_LABEL_KEYS[connectivityStatus]) : t('models.probe.pending');
108
+ return (_jsxs("span", { className: cn('inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border px-2 py-0.5 text-[11px] font-medium', className), children: [_jsx("span", { className: cn('size-1.5 rounded-full', dotClassName) }), label] }));
109
+ }
110
+ function SelectionBox({ checked, onClick }) {
111
+ return (_jsx("button", { type: "button", onClick: (event) => {
112
+ event.stopPropagation();
113
+ onClick();
114
+ }, className: cn('inline-flex size-4 items-center justify-center rounded-[3px] border transition-colors', checked ? 'border-primary bg-primary text-primary-foreground' : 'border-foreground/50 bg-background'), "aria-pressed": checked, children: checked && _jsx(Check, { className: "size-3" }) }));
115
+ }
116
+ function QuotaMeter({ label, limit, current, usage, compact = false, }) {
117
+ const meterLabel = formatProgressLabel({
118
+ value: usage,
119
+ max: 100,
120
+ percent: usage,
121
+ valueLabel: current,
122
+ maxLabel: limit,
123
+ });
124
+ return (_jsxs("div", { className: cn(compact ? 'space-y-1' : 'min-w-[132px] space-y-1 text-right'), children: [label && _jsx("div", { className: "font-mono text-[10px] uppercase text-muted-foreground", children: label }), _jsx(Progress, { value: usage, label: meterLabel })] }));
125
+ }
126
+ function CapabilityIcons({ capability }) {
127
+ const { t } = useI18n();
128
+ const supportsImage = capability !== 'none';
129
+ const imageTitle = capability === 'both'
130
+ ? t('models.capability.imageBoth')
131
+ : capability === 'url'
132
+ ? t('models.capability.imageUrl')
133
+ : t('models.capability.imageBase64');
134
+ const textTitle = t('models.capability.text');
135
+ const kinds = supportsImage ? ['text', 'image'] : ['text'];
136
+ const tooltips = supportsImage ? { text: textTitle, image: imageTitle } : { text: textTitle };
137
+ const ariaLabels = tooltips;
138
+ return _jsx(ModalityIconGroup, { kinds: kinds, tooltips: tooltips, ariaLabels: ariaLabels });
139
+ }
140
+ function PricingCell({ model, compact = false }) {
141
+ const { t } = useI18n();
142
+ return (_jsxs("div", { className: cn('font-mono', compact ? 'text-[11px]' : 'text-right text-[12px]'), children: [_jsxs("div", { className: "font-medium text-foreground", children: ["$", model.pricing.inputPerMillion, " / $", model.pricing.outputPerMillion] }), _jsx("div", { className: "mt-0.5 text-[10px] text-muted-foreground", children: t('models.table.pricingDirection') }), _jsx("div", { className: "text-[10px] text-muted-foreground", children: t('models.table.pricingUnit') })] }));
143
+ }
144
+ function ModelActions({ model, onDelete, onCopy, onToggleStatus, onTestConnectivity, testing, }) {
145
+ const { t } = useI18n();
146
+ const editable = isProjectModelEditable(model);
147
+ return (_jsxs("div", { className: "inline-flex items-center gap-1", children: [_jsx(TableActionIconButton, { label: t('models.action.test'), disabled: testing, onClick: (event) => {
148
+ event.stopPropagation();
149
+ onTestConnectivity(model);
150
+ }, children: _jsx(Cable, { className: "size-3.5" }) }), _jsx(TableActionIconButton, { label: t('models.action.copy'), onClick: (event) => {
151
+ event.stopPropagation();
152
+ onCopy(model);
153
+ }, children: _jsx(CopyPlus, { className: "size-3.5" }) }), _jsxs(DropdownMenu, { children: [_jsx(TableActionTooltip, { label: t('models.action.more'), children: _jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { type: "button", variant: "ghost", size: "icon", className: TABLE_ACTION_ICON_BUTTON_CLASS, "aria-label": t('models.action.more'), onClick: (event) => event.stopPropagation(), children: _jsx(MoreHorizontal, { className: "size-3.5" }) }) }) }), _jsxs(DropdownMenuContent, { align: "end", className: "w-36", children: [_jsx(DropdownMenuItem, { asChild: true, children: _jsxs(Link, { href: `/models/${model.id}/edit`, children: [_jsx(Edit3, { className: "size-4" }), t('models.action.edit')] }) }), _jsxs(DropdownMenuItem, { disabled: !editable, onClick: (event) => {
154
+ event.stopPropagation();
155
+ onToggleStatus(model);
156
+ }, children: [_jsx(Power, { className: "size-4" }), model.status === 'disabled' ? t('models.action.enable') : t('models.action.disable')] }), _jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuItem, { disabled: !editable, className: "text-destructive focus:text-destructive", onClick: (event) => {
157
+ event.stopPropagation();
158
+ onDelete(model);
159
+ }, children: [_jsx(Trash2, { className: "size-4" }), t('models.action.delete')] })] })] })] }));
160
+ }
161
+ function ModelTable({ models, selectedIds, onToggleSelected, onDelete, onCopy, onToggleStatus, onTestConnectivity, testingIds, }) {
162
+ const { t } = useI18n();
163
+ const { formatDateTime } = useDateTimeFormatter();
164
+ const router = useRouter();
165
+ return (_jsxs(Table, { columns: MODELS_COLUMNS, containerTestId: "models-table-view", children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { column: "select", children: _jsx("span", { className: "sr-only", children: t('models.select') }) }), _jsx(TableHead, { column: "name", children: t('models.table.name') }), _jsx(TableHead, { column: "capability", children: t('models.table.capability') }), _jsx(TableHead, { column: "status", children: t('models.table.status') }), _jsx(TableHead, { column: "rpm", children: t('models.table.rpm') }), _jsx(TableHead, { column: "tpm", children: t('models.table.tpm') }), _jsx(TableHead, { column: "concurrency", children: t('models.table.concurrency') }), _jsx(TableHead, { column: "pricing", children: t('models.table.pricing') }), _jsx(TableHead, { column: "probe", children: t('models.table.lastProbe') }), _jsx(TableHead, { column: "actions", className: "text-right", children: t('common.actions') })] }) }), _jsx(TableBody, { children: models.map((model) => {
166
+ const selected = selectedIds.includes(model.id);
167
+ return (_jsxs(TableRow, { selected: selected, onClick: () => router.push(`/models/${model.id}/edit`), className: cn(model.status === 'disabled' && 'opacity-70'), children: [_jsx(TableCell, { column: "select", children: _jsx(SelectionBox, { checked: selected, onClick: () => onToggleSelected(model.id) }) }), _jsxs(TableCell, { column: "name", children: [_jsx("div", { className: "truncate font-semibold", children: model.name }), _jsx("div", { className: "mt-0.5 truncate font-mono text-[11px] text-muted-foreground", children: model.providerModelId })] }), _jsx(TableCell, { column: "capability", children: _jsx(CapabilityIcons, { capability: model.imageCapability }) }), _jsx(TableCell, { column: "status", children: _jsx(StatusBadge, { status: model.status }) }), _jsx(TableCell, { column: "rpm", children: _jsx(QuotaMeter, { limit: model.rpm.limit, current: model.rpm.current, usage: model.rpm.usage }) }), _jsx(TableCell, { column: "tpm", children: _jsx(QuotaMeter, { limit: model.tpm.limit, current: model.tpm.current, usage: model.tpm.usage }) }), _jsx(TableCell, { column: "concurrency", children: _jsx(QuotaMeter, { limit: model.concurrency.limit, current: model.concurrency.current, usage: model.concurrency.usage }) }), _jsx(TableCell, { column: "pricing", children: _jsx(PricingCell, { model: model }) }), _jsx(TableCell, { column: "probe", children: _jsxs("div", { className: "space-y-1", children: [_jsx(ProbeBadge, { status: model.probeStatus ?? 'pending', testing: testingIds.includes(model.id) }), _jsx("div", { className: "font-mono text-[10px] text-muted-foreground", children: model.lastProbedAt ? formatDateTime(model.lastProbedAt) : '--' })] }) }), _jsx(TableCell, { column: "actions", className: "text-right", children: _jsx(ModelActions, { model: model, onDelete: onDelete, onCopy: onCopy, onToggleStatus: onToggleStatus, onTestConnectivity: onTestConnectivity, testing: testingIds.includes(model.id) }) })] }, model.id));
168
+ }) })] }));
169
+ }
170
+ function ModelCards({ models, selectedIds, onToggleSelected, onDelete, onCopy, onToggleStatus, onTestConnectivity, testingIds, }) {
171
+ const { t } = useI18n();
172
+ const router = useRouter();
173
+ return (_jsx("div", { className: "grid grid-cols-1 gap-3 p-4 md:grid-cols-2 2xl:grid-cols-3", "data-testid": "models-card-view", children: models.map((model) => {
174
+ const selected = selectedIds.includes(model.id);
175
+ return (_jsxs("article", { className: cn('relative rounded-lg border bg-card p-4 transition-colors hover:border-ring/50', model.status === 'disabled' && 'opacity-70'), onClick: () => router.push(`/models/${model.id}/edit`), children: [_jsx("div", { className: "absolute left-3 top-3", children: _jsx(SelectionBox, { checked: selected, onClick: () => onToggleSelected(model.id) }) }), _jsxs("div", { className: "min-w-0 pl-6", children: [_jsxs("div", { className: "flex min-w-0 items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h2", { className: "truncate text-[15px] font-semibold", children: model.name }), _jsxs("div", { className: "mt-1 truncate font-mono text-[11px] text-muted-foreground", children: [model.provider, " \u00B7 ", model.providerModelId] })] }), _jsx(ModelActions, { model: model, onDelete: onDelete, onCopy: onCopy, onToggleStatus: onToggleStatus, onTestConnectivity: onTestConnectivity, testing: testingIds.includes(model.id) })] }), _jsxs("div", { className: "mt-3 flex flex-wrap items-center gap-1.5", children: [_jsx(SourcePill, { source: getProjectModelSource(model) }), _jsx(StatusBadge, { status: model.status }), _jsx(CapabilityIcons, { capability: model.imageCapability })] })] }), _jsxs("div", { className: "mt-4 grid grid-cols-3 gap-2 border-y py-3", children: [_jsx(QuotaMeter, { compact: true, label: "RPM", limit: model.rpm.limit, current: model.rpm.current, usage: model.rpm.usage }), _jsx(QuotaMeter, { compact: true, label: "TPM", limit: model.tpm.limit, current: model.tpm.current, usage: model.tpm.usage }), _jsx(QuotaMeter, { compact: true, label: t('models.table.concurrency'), limit: model.concurrency.limit, current: model.concurrency.current, usage: model.concurrency.usage })] }), _jsxs("div", { className: "mt-3 flex items-center gap-2 rounded-md bg-muted/45 px-3 py-2", children: [_jsx(DollarSign, { className: "size-3.5 text-[var(--status-canary-fg)]" }), _jsx(PricingCell, { model: model, compact: true })] }), _jsxs("div", { className: "mt-3 flex items-center justify-between gap-2 text-[11px] text-muted-foreground", children: [_jsx("span", { children: !isProjectModelEditable(model)
176
+ ? t('models.card.readonlySource')
177
+ : `${t('models.card.references')} ${model.references}` }), _jsx(Button, { asChild: true, size: "sm", variant: "outline", className: "h-7 px-2 text-xs", onClick: (event) => event.stopPropagation(), children: _jsx(Link, { href: `/models/${model.id}/edit`, children: t('models.action.edit') }) })] })] }, model.id));
178
+ }) }));
179
+ }
180
+ function ConnectivityDialog({ model, testing, durationMs, onOpenChange, }) {
181
+ const { t } = useI18n();
182
+ if (!model)
183
+ return null;
184
+ const probeStatus = model.probeStatus ?? (testing ? 'pending' : 'success');
185
+ const connectivityStatus = testing ? 'testing' : probeStatus === 'failed' ? 'failed' : 'success';
186
+ const statusText = t(CONNECTIVITY_STATUS_LABEL_KEYS[connectivityStatus]);
187
+ const errorMessage = !testing && probeStatus === 'failed' ? (model.lastProbeError ?? t('models.connectivity.failedDetail')) : null;
188
+ const durationLabel = testing ? t('models.connectivity.elapsed') : t('models.connectivity.duration');
189
+ return (_jsx(Dialog, { open: model !== null, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: t('models.connectivity.title') }), _jsx(DialogDescription, { children: model.name })] }), _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-3 rounded-md border bg-muted/30 px-3 py-3", children: [_jsxs("div", { children: [_jsx("div", { className: "text-sm font-medium", children: testing ? t('models.connectivity.running') : t('models.connectivity.done') }), _jsxs("div", { className: "mt-1 font-mono text-[11px] text-muted-foreground", children: [model.provider, " \u00B7 ", model.providerModelId] })] }), _jsxs("div", { className: cn('inline-flex items-center gap-1.5 rounded-full border px-2 py-1 text-xs font-medium', CONNECTIVITY_STATUS_CLASSES[connectivityStatus]), children: [_jsx("span", { className: cn('size-1.5 rounded-full', CONNECTIVITY_STATUS_DOT_CLASSES[connectivityStatus]) }), statusText] })] }), _jsxs("div", { className: "flex items-center justify-between gap-3 rounded-md border bg-card px-3 py-2.5", children: [_jsxs("div", { className: "flex items-center gap-2 text-sm font-medium", children: [_jsx(Timer, { className: "size-4 text-muted-foreground" }), durationLabel] }), _jsx("div", { className: "font-mono text-sm", children: formatProbeDuration(durationMs) })] }), errorMessage && (_jsx("div", { role: "alert", className: "rounded-md border border-destructive/35 bg-destructive/10 p-3 text-[12.5px] leading-relaxed text-destructive", children: errorMessage }))] }), _jsx("div", { className: "flex justify-end", children: _jsx(Button, { type: "button", variant: "outline", onClick: () => onOpenChange(false), children: t('common.close') }) })] }) }));
190
+ }
191
+ export function ModelsListPage({ projectId }) {
192
+ const { t } = useI18n();
193
+ const router = useRouter();
194
+ const pathname = usePathname();
195
+ const searchParams = useSearchParams();
196
+ const viewMode = resolveViewMode(searchParams.get('view'));
197
+ const [activeFilter, setActiveFilter] = useState('all');
198
+ const [searchQuery, setSearchQuery] = useState('');
199
+ const projectQuery = useProjectModels(projectId);
200
+ const updateMutation = useUpdateProjectModel(projectId);
201
+ const deleteMutation = useDeleteProjectModel(projectId);
202
+ const probeMutation = useProbeProjectModel(projectId);
203
+ const queryModels = useMemo(() => (projectQuery.data?.data ?? []).map(dtoToProjectModel), [projectQuery.data]);
204
+ const [models, setModels] = useState([]);
205
+ useEffect(() => {
206
+ // eslint-disable-next-line react-hooks/set-state-in-effect -- sync server query into local state used for optimistic mutation updates
207
+ setModels(queryModels);
208
+ }, [queryModels]);
209
+ const [selectedIds, setSelectedIds] = useState([]);
210
+ const [pageIndex, setPageIndex] = useState(0);
211
+ const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE);
212
+ const [filterPanelOpen, setFilterPanelOpen] = useState(false);
213
+ const [onlyEditable, setOnlyEditable] = useState(false);
214
+ const [onlyNearLimit, setOnlyNearLimit] = useState(false);
215
+ const [deleteTarget, setDeleteTarget] = useState(null);
216
+ const [connectivityTarget, setConnectivityTarget] = useState(null);
217
+ const [connectivityStartedAt, setConnectivityStartedAt] = useState(null);
218
+ const [connectivityElapsedMs, setConnectivityElapsedMs] = useState(0);
219
+ const [connectivityDurationMs, setConnectivityDurationMs] = useState(null);
220
+ const [testingIds, setTestingIds] = useState([]);
221
+ useEffect(() => {
222
+ if (connectivityStartedAt == null)
223
+ return undefined;
224
+ const updateElapsed = () => setConnectivityElapsedMs(Date.now() - connectivityStartedAt);
225
+ updateElapsed();
226
+ const interval = window.setInterval(updateElapsed, 100);
227
+ return () => window.clearInterval(interval);
228
+ }, [connectivityStartedAt]);
229
+ const filteredModels = useMemo(() => {
230
+ const query = searchQuery.trim().toLowerCase();
231
+ return models
232
+ .filter((model) => matchesFilter(model, activeFilter))
233
+ .filter((model) => !onlyEditable || isProjectModelEditable(model))
234
+ .filter((model) => !onlyNearLimit || Math.max(model.rpm.usage, model.tpm.usage, model.concurrency.usage) >= 80)
235
+ .filter((model) => {
236
+ if (!query)
237
+ return true;
238
+ return getSearchText(model).includes(query);
239
+ });
240
+ }, [activeFilter, models, onlyEditable, onlyNearLimit, searchQuery]);
241
+ const pageCount = Math.max(1, Math.ceil(filteredModels.length / pageSize));
242
+ const safePageIndex = Math.min(pageIndex, pageCount - 1);
243
+ const pagedModels = filteredModels.slice(safePageIndex * pageSize, safePageIndex * pageSize + pageSize);
244
+ const modelsLoading = useDelayedLoading(projectQuery.isLoading && !projectQuery.data);
245
+ const toggleSelected = (modelId) => {
246
+ setSelectedIds((current) => current.includes(modelId) ? current.filter((item) => item !== modelId) : [...current, modelId]);
247
+ };
248
+ const testConnectivity = (model) => {
249
+ const pendingModel = { ...model, probeStatus: 'pending' };
250
+ const startedAt = Date.now();
251
+ setConnectivityTarget(pendingModel);
252
+ setConnectivityStartedAt(startedAt);
253
+ setConnectivityElapsedMs(0);
254
+ setConnectivityDurationMs(null);
255
+ setTestingIds((current) => (current.includes(model.id) ? current : [...current, model.id]));
256
+ setModels((current) => current.map((item) => (item.id === model.id ? pendingModel : item)));
257
+ probeMutation.mutate(model.id, {
258
+ onSuccess: (result) => {
259
+ const status = result.status === 'success' ? 'success' : 'failed';
260
+ const testedModel = {
261
+ ...pendingModel,
262
+ probeStatus: status,
263
+ lastProbedAt: result.probedAt,
264
+ lastProbeError: result.error,
265
+ };
266
+ setConnectivityDurationMs(result.durationMs);
267
+ setModels((current) => current.map((item) => (item.id === model.id ? testedModel : item)));
268
+ setConnectivityTarget((current) => (current?.id === model.id ? testedModel : current));
269
+ },
270
+ onError: (error) => {
271
+ const failedModel = {
272
+ ...pendingModel,
273
+ probeStatus: 'failed',
274
+ lastProbeError: getApiErrorMessage(error) ?? t('models.connectivity.failedDetail'),
275
+ };
276
+ setConnectivityDurationMs(Date.now() - startedAt);
277
+ setModels((current) => current.map((item) => (item.id === model.id ? failedModel : item)));
278
+ setConnectivityTarget((current) => (current?.id === model.id ? failedModel : current));
279
+ },
280
+ onSettled: () => {
281
+ setConnectivityStartedAt(null);
282
+ setTestingIds((current) => current.filter((item) => item !== model.id));
283
+ },
284
+ });
285
+ };
286
+ const toggleStatus = (model) => {
287
+ if (!isProjectModelEditable(model))
288
+ return;
289
+ const next = model.status === 'disabled' ? 'enabled' : 'disabled';
290
+ setModels((current) => current.map((item) => (item.id === model.id ? { ...item, status: next } : item)));
291
+ updateMutation.mutate({ modelId: model.id, body: { status: next } });
292
+ };
293
+ const copyModel = (model) => {
294
+ router.push(`/models/new?copyFrom=${model.id}`);
295
+ };
296
+ const updateViewMode = (nextViewMode) => {
297
+ const params = new URLSearchParams(searchParams.toString());
298
+ if (nextViewMode === 'cards')
299
+ params.set('view', 'cards');
300
+ else
301
+ params.delete('view');
302
+ const query = params.toString();
303
+ router.replace(query ? `${pathname}?${query}` : pathname, { scroll: false });
304
+ };
305
+ const requestDeleteModel = (model) => {
306
+ if (!isProjectModelEditable(model))
307
+ return;
308
+ setDeleteTarget(model);
309
+ };
310
+ const confirmDeleteModel = () => {
311
+ if (!deleteTarget || deleteTarget.references > 0)
312
+ return;
313
+ const target = deleteTarget;
314
+ setModels((current) => current.filter((item) => item.id !== target.id));
315
+ setSelectedIds((current) => current.filter((item) => item !== target.id));
316
+ setDeleteTarget(null);
317
+ deleteMutation.mutate({ modelId: target.id });
318
+ };
319
+ const deleteBlocked = Boolean(deleteTarget && deleteTarget.references > 0);
320
+ 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": "models-page", children: [_jsxs("div", { className: "mb-5 flex flex-col gap-4 xl:flex-row xl:items-start xl:justify-between", children: [_jsx("div", { className: "min-w-0", children: _jsx("h1", { className: "text-[26px] font-semibold", children: t('models.title') }) }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [selectedIds.length > 0 && (_jsxs("div", { className: "flex flex-wrap items-center gap-2 border-r pr-3", children: [_jsxs("span", { className: "text-xs text-muted-foreground", children: [t('models.selected'), " ", _jsx("b", { className: "font-mono text-foreground", children: selectedIds.length })] }), _jsxs(Button, { type: "button", variant: "outline", size: "sm", className: "h-8", children: [_jsx(Download, { className: "size-3.5" }), t('models.action.exportCsv')] }), _jsxs(Button, { type: "button", variant: "outline", size: "sm", className: "h-8", children: [_jsx(Cable, { className: "size-3.5" }), t('models.action.bulkTest')] }), _jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "size-8", onClick: () => setSelectedIds([]), "aria-label": t('models.clearSelection'), children: _jsx(X, { className: "size-3.5" }) })] })), _jsx(Button, { asChild: true, size: "sm", className: "h-9", children: _jsxs(Link, { href: `/models/new`, children: [_jsx(Plus, { className: "size-4" }), t('models.create')] }) })] })] }), _jsxs("section", { className: "rounded-lg border bg-card", "aria-label": t('models.listSurface'), children: [_jsxs("div", { className: "relative flex flex-col gap-3 border-b p-4 xl:flex-row xl:items-center xl:justify-between", children: [_jsxs("div", { className: "flex flex-1 flex-wrap items-center gap-2", children: [_jsxs("div", { className: "relative w-full sm:w-[280px]", children: [_jsx(Search, { className: "pointer-events-none absolute left-2.5 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" }), _jsx(Input, { type: "search", value: searchQuery, onChange: (event) => {
321
+ setSearchQuery(event.target.value);
322
+ setPageIndex(0);
323
+ }, placeholder: t('models.searchPlaceholder'), className: "h-9 pl-8 text-sm" })] }), FILTERS.map((filter) => (_jsx(FilterChip, { active: activeFilter === filter.key, count: getFilterCount(models, filter.key), label: t(filter.labelKey), onClick: () => {
324
+ setActiveFilter(filter.key);
325
+ setPageIndex(0);
326
+ } }, filter.key)))] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(ViewToggle, { value: viewMode, onChange: updateViewMode }), _jsx(Button, { type: "button", variant: filterPanelOpen ? 'secondary' : 'outline', size: "icon", className: "size-9", "aria-label": t('models.filterSettings'), onClick: () => setFilterPanelOpen((open) => !open), children: _jsx(SlidersHorizontal, { className: "size-4" }) })] }), filterPanelOpen && (_jsxs("div", { className: "absolute right-4 top-[calc(100%-8px)] z-40 w-60 rounded-md border bg-popover p-2 text-sm shadow-lg", children: [_jsx("div", { className: "px-2 pb-2 text-xs font-medium text-muted-foreground", children: t('models.filterSettings') }), _jsxs("label", { className: "flex cursor-pointer items-center gap-2 rounded px-2 py-1.5 hover:bg-accent", children: [_jsx("input", { type: "checkbox", checked: onlyEditable, onChange: (event) => {
327
+ setOnlyEditable(event.target.checked);
328
+ setPageIndex(0);
329
+ }, className: "size-4 accent-primary" }), _jsx("span", { children: t('models.filter.editableOnly') })] }), _jsxs("label", { className: "flex cursor-pointer items-center gap-2 rounded px-2 py-1.5 hover:bg-accent", children: [_jsx("input", { type: "checkbox", checked: onlyNearLimit, onChange: (event) => {
330
+ setOnlyNearLimit(event.target.checked);
331
+ setPageIndex(0);
332
+ }, className: "size-4 accent-primary" }), _jsx("span", { children: t('models.filter.nearLimitOnly') })] }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "mt-1 h-8 w-full justify-start", onClick: () => {
333
+ setActiveFilter('all');
334
+ setOnlyEditable(false);
335
+ setOnlyNearLimit(false);
336
+ setSearchQuery('');
337
+ setPageIndex(0);
338
+ }, children: t('models.filter.reset') })] }))] }), modelsLoading ? (_jsxs("div", { className: "relative", children: [_jsx(ListRowsSkeleton, { rows: 8 }), _jsx(PlatformLoaderOverlay, {})] })) : viewMode === 'table' ? (_jsx(ModelTable, { models: pagedModels, selectedIds: selectedIds, onToggleSelected: toggleSelected, onDelete: requestDeleteModel, onCopy: copyModel, onToggleStatus: toggleStatus, onTestConnectivity: testConnectivity, testingIds: testingIds })) : (_jsx(ModelCards, { models: pagedModels, selectedIds: selectedIds, onToggleSelected: toggleSelected, onDelete: requestDeleteModel, onCopy: copyModel, onToggleStatus: toggleStatus, onTestConnectivity: testConnectivity, testingIds: testingIds })), !modelsLoading && (_jsx(ResourcePaginationFooter, { summary: _jsxs(_Fragment, { children: [t('models.totalPrefix'), ' ', _jsx("span", { className: "font-mono font-medium text-foreground", children: filteredModels.length }), ' ', t('models.totalSuffix'), " \u00B7 ", t('models.selected'), ' ', _jsx("span", { className: "font-mono font-medium text-foreground", children: selectedIds.length })] }), pageIndex: safePageIndex, pageCount: pageCount, pageSize: pageSize, pageSizeOptions: PAGE_SIZE_OPTIONS, previousPageLabel: t('models.previousPage'), nextPageLabel: t('models.nextPage'), onPageChange: setPageIndex, onPageSizeChange: (nextPageSize) => {
339
+ setPageSize(nextPageSize);
340
+ setPageIndex(0);
341
+ } }))] })] }), _jsx(ConnectivityDialog, { model: connectivityTarget, testing: connectivityTarget ? testingIds.includes(connectivityTarget.id) : false, durationMs: connectivityTarget && testingIds.includes(connectivityTarget.id)
342
+ ? connectivityElapsedMs
343
+ : connectivityDurationMs, onOpenChange: (open) => {
344
+ if (!open) {
345
+ setConnectivityTarget(null);
346
+ setConnectivityStartedAt(null);
347
+ setConnectivityElapsedMs(0);
348
+ setConnectivityDurationMs(null);
349
+ }
350
+ } }), _jsx(Dialog, { open: deleteTarget !== null, onOpenChange: (open) => !open && setDeleteTarget(null), children: _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: deleteBlocked ? t('models.form.deleteBlockedTitle') : t('models.deleteDialogTitle') }), _jsx(DialogDescription, { children: deleteBlocked ? t('models.form.deleteBlockedDescription') : t('models.deleteDialogDescription') })] }), _jsxs("div", { className: cn('rounded-md border p-3 text-sm', deleteBlocked ? 'border-destructive/30 bg-destructive/5 text-destructive' : 'bg-muted/45'), children: [_jsx("div", { className: "text-xs font-medium text-muted-foreground", children: deleteBlocked ? t('models.form.deleteBlockedTitle') : t('models.deleteDialogTarget') }), _jsx("div", { className: "mt-1 font-medium", children: deleteTarget?.name }), deleteBlocked && _jsx("div", { className: "mt-1 text-xs", children: t('models.form.deleteBlockedHelp') })] }), _jsxs("div", { className: "flex justify-end gap-2", children: [_jsx(Button, { type: "button", variant: "outline", onClick: () => setDeleteTarget(null), children: deleteBlocked ? t('common.close') : t('common.cancel') }), !deleteBlocked && (_jsx(Button, { type: "button", variant: "destructive", onClick: confirmDeleteModel, children: t('models.deleteDialogConfirm') }))] })] }) })] }));
351
+ }
352
+ //# sourceMappingURL=models-list-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models-list-page.js","sourceRoot":"","sources":["../../../src/screens/models/models-list-page.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ProjectModelListItemDto } from '@proofhound/shared';
2
+ import type { ProjectModel } from './model-view-model';
3
+ export declare function formatLargeNumber(value: number): string;
4
+ export declare function dtoToProjectModel(dto: ProjectModelListItemDto): ProjectModel;
5
+ //# sourceMappingURL=project-model-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-model-adapter.d.ts","sourceRoot":"","sources":["../../../src/screens/models/project-model-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAA6C,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASvD;AAOD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,uBAAuB,GAAG,YAAY,CA+C5E"}
@@ -0,0 +1,63 @@
1
+ export function formatLargeNumber(value) {
2
+ if (value >= 1_000_000) {
3
+ const m = value / 1_000_000;
4
+ return `${m >= 10 ? m.toFixed(1) : m.toFixed(2)} M`;
5
+ }
6
+ if (value >= 1_000) {
7
+ return `${(value / 1_000).toLocaleString('en-US', { maximumFractionDigits: 1 })} k`;
8
+ }
9
+ return String(value);
10
+ }
11
+ function formatJsonInput(value) {
12
+ const entries = Object.keys(value ?? {});
13
+ return entries.length > 0 ? JSON.stringify(value, null, 2) : '';
14
+ }
15
+ export function dtoToProjectModel(dto) {
16
+ return {
17
+ id: dto.id,
18
+ name: dto.name,
19
+ provider: dto.providerType,
20
+ providerModelId: dto.providerModelId,
21
+ endpoint: dto.endpoint,
22
+ source: 'local',
23
+ status: dto.status,
24
+ probeStatus: dto.probeStatus,
25
+ lastProbedAt: dto.lastProbedAt ?? '',
26
+ lastProbeError: dto.lastProbeError,
27
+ owner: dto.createdByDisplayName ?? undefined,
28
+ apiKey: '',
29
+ credentialTail: dto.credentialTail,
30
+ contextWindow: dto.contextWindowTokens != null ? formatLargeNumber(dto.contextWindowTokens) : '',
31
+ contextWindowInput: dto.contextWindowTokens != null ? String(dto.contextWindowTokens) : '',
32
+ extraBodyInput: formatJsonInput(dto.extraBody),
33
+ rpm: {
34
+ limit: formatLargeNumber(dto.rpm.limit),
35
+ limitInput: String(dto.rpm.limit),
36
+ usage: dto.rpm.usage,
37
+ current: formatLargeNumber(dto.rpm.current),
38
+ },
39
+ tpm: {
40
+ limit: formatLargeNumber(dto.tpm.limit),
41
+ limitInput: String(dto.tpm.limit),
42
+ usage: dto.tpm.usage,
43
+ current: formatLargeNumber(dto.tpm.current),
44
+ },
45
+ concurrency: {
46
+ limit: String(dto.concurrency.limit),
47
+ limitInput: String(dto.concurrency.limit),
48
+ usage: dto.concurrency.usage,
49
+ current: String(dto.concurrency.current),
50
+ effective: dto.concurrency.effective != null ? String(dto.concurrency.effective) : undefined,
51
+ },
52
+ autoConcurrency: dto.autoConcurrency,
53
+ pricing: {
54
+ inputPerMillion: dto.pricing.inputPerMillion.toFixed(2),
55
+ outputPerMillion: dto.pricing.outputPerMillion.toFixed(2),
56
+ },
57
+ imageCapability: dto.capabilities.image,
58
+ references: dto.references,
59
+ readonly: false,
60
+ lastUpdated: dto.updatedAt,
61
+ };
62
+ }
63
+ //# sourceMappingURL=project-model-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-model-adapter.js","sourceRoot":"","sources":["../../../src/screens/models/project-model-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { SourceBucket } from '@proofhound/shared';
3
+ import { type SourceStackedBarDatum, type SourceStackedBarSource } from '../../components';
4
+ export type DeltaTone = 'up' | 'down' | 'warn' | 'neutral';
5
+ export declare function BigChartCard({ title, icon, iconBg, iconFg, total, unit, comparison, delta, subtitle, data, yTickFormatter, legendFormatter, bySource, sourceLabels, sourceKeys, sourceDistributionLabel, totalLabel, threshold, }: {
6
+ title: string;
7
+ icon: ReactNode;
8
+ iconBg: string;
9
+ iconFg: string;
10
+ total: string;
11
+ unit?: string;
12
+ comparison?: {
13
+ value: string;
14
+ unit?: string;
15
+ label: string;
16
+ tone?: DeltaTone;
17
+ } | null;
18
+ delta?: {
19
+ text: string;
20
+ tone: DeltaTone;
21
+ } | null;
22
+ subtitle?: string;
23
+ data: ReadonlyArray<SourceStackedBarDatum>;
24
+ yTickFormatter?: (v: number) => string;
25
+ legendFormatter: (value: number) => string;
26
+ bySource: Record<SourceBucket, number>;
27
+ sourceLabels: Record<SourceBucket, string>;
28
+ sourceKeys?: ReadonlyArray<SourceStackedBarSource>;
29
+ sourceDistributionLabel: string;
30
+ totalLabel: string;
31
+ threshold?: {
32
+ value: number;
33
+ label: string;
34
+ } | null;
35
+ }): import("react/jsx-runtime").JSX.Element;
36
+ //# sourceMappingURL=big-chart-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"big-chart-card.d.ts","sourceRoot":"","sources":["../../../src/screens/monitoring/big-chart-card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAkC,KAAK,qBAAqB,EAAE,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAG3H,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAE3D,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,IAAI,EACJ,MAAM,EACN,MAAM,EACN,KAAK,EACL,IAAI,EACJ,UAAU,EACV,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,cAAc,EACd,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,uBAAuB,EACvB,UAAU,EACV,SAAS,GACV,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI,CAAC;IACtF,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3C,UAAU,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IACnD,uBAAuB,EAAE,MAAM,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACrD,2CAoEA"}
@@ -0,0 +1,32 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { TrendingDown, TrendingUp } from 'lucide-react';
4
+ import { SourceLegend, SourceStackedBar } from '../../components';
5
+ import { cn } from '@proofhound/ui';
6
+ export function BigChartCard({ title, icon, iconBg, iconFg, total, unit, comparison, delta, subtitle, data, yTickFormatter, legendFormatter, bySource, sourceLabels, sourceKeys, sourceDistributionLabel, totalLabel, threshold, }) {
7
+ return (_jsxs("section", { className: "flex flex-col rounded-lg border bg-card p-4 transition-shadow hover:shadow-md", "aria-label": title, children: [_jsx("div", { className: "flex items-start justify-between gap-3", children: _jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2 text-[12.5px] font-medium text-muted-foreground", children: [_jsx("span", { className: "inline-flex size-7 items-center justify-center rounded-md", style: { background: iconBg, color: iconFg }, children: icon }), title] }), _jsxs("div", { className: "mt-1.5 flex flex-wrap items-end gap-x-3 gap-y-1", children: [_jsxs("div", { className: "text-[28px] font-bold leading-[1.1] text-foreground", children: [total, unit && _jsx("span", { className: "ml-0.5 text-[14px] font-medium text-muted-foreground", children: unit })] }), comparison && (_jsxs("div", { className: "pb-0.5", "data-comparison-tone": comparison.tone ?? 'neutral', children: [_jsxs("div", { className: cn('flex items-center gap-0.5 font-mono text-[13px] font-semibold leading-none', comparisonToneClass(comparison.tone ?? 'neutral')), children: [_jsx(ComparisonIcon, { tone: comparison.tone ?? 'neutral' }), comparison.value, comparison.unit && _jsx("span", { className: "ml-0.5 text-[10.5px] font-medium", children: comparison.unit })] }), _jsx("div", { className: "mt-0.5 text-[10.5px] leading-none text-muted-foreground", children: comparison.label })] }))] }), (!comparison && delta) || subtitle ? (_jsxs("div", { className: "mt-1.5 flex flex-wrap items-center gap-x-1.5 gap-y-1 text-[11.5px] text-muted-foreground", children: [!comparison && delta && _jsx(DeltaPill, { ...delta }), subtitle] })) : null] }) }), _jsx("div", { className: "mt-3.5", children: _jsx(SourceStackedBar, { data: data, yTickFormatter: yTickFormatter, sourceLabels: sourceLabels, sourceKeys: sourceKeys, totalLabel: totalLabel, threshold: threshold }) }), _jsx(SourceLegend, { values: bySource, format: legendFormatter, labels: sourceLabels, sourceKeys: sourceKeys, ariaLabel: sourceDistributionLabel, className: "mt-3" })] }));
8
+ }
9
+ function DeltaPill({ text, tone }) {
10
+ const palette = {
11
+ up: 'bg-[var(--trend-up-bg)] text-[var(--trend-up-fg)]',
12
+ down: 'bg-[var(--trend-down-bg)] text-[var(--trend-down-fg)]',
13
+ warn: 'bg-[var(--trend-up-bg)] text-[var(--trend-up-fg)]',
14
+ neutral: 'bg-muted text-muted-foreground',
15
+ };
16
+ const Icon = tone === 'up' ? TrendingUp : tone === 'down' ? TrendingDown : null;
17
+ return (_jsxs("span", { className: cn('inline-flex items-center gap-0.5 rounded-md px-1.5 py-0.5 font-mono text-[11px] font-semibold', palette[tone]), children: [Icon && _jsx(Icon, { className: "size-3" }), text] }));
18
+ }
19
+ function comparisonToneClass(tone) {
20
+ const palette = {
21
+ up: 'text-[var(--trend-up-fg)]',
22
+ down: 'text-[var(--trend-down-fg)]',
23
+ warn: 'text-[var(--trend-up-fg)]',
24
+ neutral: 'text-muted-foreground',
25
+ };
26
+ return palette[tone];
27
+ }
28
+ function ComparisonIcon({ tone }) {
29
+ const Icon = tone === 'up' ? TrendingUp : tone === 'down' ? TrendingDown : null;
30
+ return Icon ? _jsx(Icon, { className: "size-3", strokeWidth: 2.4 }) : null;
31
+ }
32
+ //# sourceMappingURL=big-chart-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"big-chart-card.js","sourceRoot":"","sources":["../../../src/screens/monitoring/big-chart-card.tsx"],"names":[],"mappings":"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"}