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