hazo_collab_forms 3.1.6 → 5.0.0
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/CHANGE_LOG.md +207 -0
- package/README.md +3 -0
- package/dist/components/clarification/clarification_item_body.d.ts +19 -1
- package/dist/components/clarification/clarification_item_body.d.ts.map +1 -1
- package/dist/components/clarification/clarification_item_body.js +114 -6
- package/dist/components/clarification/clarification_item_body.js.map +1 -1
- package/dist/components/clarification/clarification_thread.js +1 -1
- package/dist/components/clarification/clarification_thread.js.map +1 -1
- package/dist/components/clarification/index.d.ts +2 -0
- package/dist/components/clarification/index.d.ts.map +1 -1
- package/dist/components/clarification/index.js +1 -0
- package/dist/components/clarification/index.js.map +1 -1
- package/dist/components/clarification/resolution_status_strip.d.ts +18 -0
- package/dist/components/clarification/resolution_status_strip.d.ts.map +1 -0
- package/dist/components/clarification/resolution_status_strip.js +20 -0
- package/dist/components/clarification/resolution_status_strip.js.map +1 -0
- package/dist/components/hazo_fb_form/context.d.ts +1 -1
- package/dist/components/hazo_fb_form/context.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/hazo_fb_form.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/hazo_fb_form.js +330 -113
- package/dist/components/hazo_fb_form/hazo_fb_form.js.map +1 -1
- package/dist/components/hazo_fb_form/hooks/use_fb_form_state.d.ts +3 -3
- package/dist/components/hazo_fb_form/hooks/use_fb_form_state.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/hooks/use_fb_form_state.js +340 -61
- package/dist/components/hazo_fb_form/hooks/use_fb_form_state.js.map +1 -1
- package/dist/components/hazo_fb_form/hooks/use_llm_run.d.ts +3 -1
- package/dist/components/hazo_fb_form/hooks/use_llm_run.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/hooks/use_llm_run.js +89 -11
- package/dist/components/hazo_fb_form/hooks/use_llm_run.js.map +1 -1
- package/dist/components/hazo_fb_form/shared/agent_stepper.js +1 -1
- package/dist/components/hazo_fb_form/shared/agent_stepper.js.map +1 -1
- package/dist/components/hazo_fb_form/shared/file_status_accordion.d.ts +9 -0
- package/dist/components/hazo_fb_form/shared/file_status_accordion.d.ts.map +1 -0
- package/dist/components/hazo_fb_form/shared/file_status_accordion.js +39 -0
- package/dist/components/hazo_fb_form/shared/file_status_accordion.js.map +1 -0
- package/dist/components/hazo_fb_form/shared/format.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/shared/format.js +8 -3
- package/dist/components/hazo_fb_form/shared/format.js.map +1 -1
- package/dist/components/hazo_fb_form/shared/send_back_item_card.d.ts +7 -1
- package/dist/components/hazo_fb_form/shared/send_back_item_card.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/shared/send_back_item_card.js +6 -3
- package/dist/components/hazo_fb_form/shared/send_back_item_card.js.map +1 -1
- package/dist/components/hazo_fb_form/types.d.ts +3 -1
- package/dist/components/hazo_fb_form/types.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/views/back_office_view.js +1 -1
- package/dist/components/hazo_fb_form/views/back_office_view.js.map +1 -1
- package/dist/components/hazo_fb_form/views/clarifications_view.js +2 -2
- package/dist/components/hazo_fb_form/views/clarifications_view.js.map +1 -1
- package/dist/components/hazo_fb_form/views/front_office_view.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/views/front_office_view.js +62 -41
- package/dist/components/hazo_fb_form/views/front_office_view.js.map +1 -1
- package/dist/components/hazo_fb_form/views/interim_view.js +3 -3
- package/dist/components/hazo_fb_form/views/interim_view.js.map +1 -1
- package/dist/components/hazo_fb_form/views/review_queue_view.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/views/review_queue_view.js +22 -9
- package/dist/components/hazo_fb_form/views/review_queue_view.js.map +1 -1
- package/dist/components/hazo_validation_rule_editor/components/rule_editor.d.ts.map +1 -1
- package/dist/components/hazo_validation_rule_editor/components/rule_editor.js +32 -3
- package/dist/components/hazo_validation_rule_editor/components/rule_editor.js.map +1 -1
- package/dist/components/hazo_validation_rule_editor/components/variable_chain_input.d.ts +20 -0
- package/dist/components/hazo_validation_rule_editor/components/variable_chain_input.d.ts.map +1 -0
- package/dist/components/hazo_validation_rule_editor/components/variable_chain_input.js +34 -0
- package/dist/components/hazo_validation_rule_editor/components/variable_chain_input.js.map +1 -0
- package/dist/components/hazo_validation_rule_editor/context.d.ts +3 -2
- package/dist/components/hazo_validation_rule_editor/context.d.ts.map +1 -1
- package/dist/components/hazo_validation_rule_editor/context.js +15 -3
- package/dist/components/hazo_validation_rule_editor/context.js.map +1 -1
- package/dist/components/hazo_validation_rule_editor/types.d.ts +7 -1
- package/dist/components/hazo_validation_rule_editor/types.d.ts.map +1 -1
- package/dist/components/hazo_validation_rule_editor/validation_rule_editor.d.ts +1 -1
- package/dist/components/hazo_validation_rule_editor/validation_rule_editor.d.ts.map +1 -1
- package/dist/components/hazo_validation_rule_editor/validation_rule_editor.js +2 -2
- package/dist/components/hazo_validation_rule_editor/validation_rule_editor.js.map +1 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/shared/document_type_editor.d.ts +31 -0
- package/dist/components/shared/document_type_editor.d.ts.map +1 -0
- package/dist/components/shared/document_type_editor.js +60 -0
- package/dist/components/shared/document_type_editor.js.map +1 -0
- package/dist/components/shared/file_bar/file_bar.d.ts +7 -1
- package/dist/components/shared/file_bar/file_bar.d.ts.map +1 -1
- package/dist/components/shared/file_bar/file_bar.js +5 -3
- package/dist/components/shared/file_bar/file_bar.js.map +1 -1
- package/dist/components/shared/file_bar/file_bar_validation_dialog.js +4 -4
- package/dist/components/shared/file_bar/file_bar_validation_dialog.js.map +1 -1
- package/dist/components/shared/file_status_icon.d.ts +23 -0
- package/dist/components/shared/file_status_icon.d.ts.map +1 -0
- package/dist/components/shared/file_status_icon.js +38 -0
- package/dist/components/shared/file_status_icon.js.map +1 -0
- package/dist/components/shared/json_data_panel/json_data_panel.d.ts +1 -1
- package/dist/components/shared/json_data_panel/json_data_panel.d.ts.map +1 -1
- package/dist/components/shared/json_data_panel/json_data_panel.js +27 -2
- package/dist/components/shared/json_data_panel/json_data_panel.js.map +1 -1
- package/dist/components/shared/rule_result_card.d.ts.map +1 -1
- package/dist/components/shared/rule_result_card.js +5 -4
- package/dist/components/shared/rule_result_card.js.map +1 -1
- package/dist/components/thread_form/components/add_question_dialog.d.ts +12 -0
- package/dist/components/thread_form/components/add_question_dialog.d.ts.map +1 -0
- package/dist/components/thread_form/components/add_question_dialog.js +36 -0
- package/dist/components/thread_form/components/add_question_dialog.js.map +1 -0
- package/dist/components/thread_form/components/agent_compose_dialog.d.ts +30 -0
- package/dist/components/thread_form/components/agent_compose_dialog.d.ts.map +1 -0
- package/dist/components/thread_form/components/agent_compose_dialog.js +45 -0
- package/dist/components/thread_form/components/agent_compose_dialog.js.map +1 -0
- package/dist/components/thread_form/components/clarification.d.ts +14 -0
- package/dist/components/thread_form/components/clarification.d.ts.map +1 -0
- package/dist/components/thread_form/components/clarification.js +12 -0
- package/dist/components/thread_form/components/clarification.js.map +1 -0
- package/dist/components/thread_form/components/collected_data_view.d.ts +15 -0
- package/dist/components/thread_form/components/collected_data_view.d.ts.map +1 -0
- package/dist/components/thread_form/components/collected_data_view.js +121 -0
- package/dist/components/thread_form/components/collected_data_view.js.map +1 -0
- package/dist/components/thread_form/components/coverage_card.d.ts +11 -0
- package/dist/components/thread_form/components/coverage_card.d.ts.map +1 -0
- package/dist/components/thread_form/components/coverage_card.js +60 -0
- package/dist/components/thread_form/components/coverage_card.js.map +1 -0
- package/dist/components/thread_form/components/file_bar.d.ts +93 -0
- package/dist/components/thread_form/components/file_bar.d.ts.map +1 -0
- package/dist/components/thread_form/components/file_bar.js +251 -0
- package/dist/components/thread_form/components/file_bar.js.map +1 -0
- package/dist/components/thread_form/components/file_info_dialog.d.ts +15 -0
- package/dist/components/thread_form/components/file_info_dialog.d.ts.map +1 -0
- package/dist/components/thread_form/components/file_info_dialog.js +64 -0
- package/dist/components/thread_form/components/file_info_dialog.js.map +1 -0
- package/dist/components/thread_form/components/issue_group_tree.d.ts +20 -0
- package/dist/components/thread_form/components/issue_group_tree.d.ts.map +1 -0
- package/dist/components/thread_form/components/issue_group_tree.js +164 -0
- package/dist/components/thread_form/components/issue_group_tree.js.map +1 -0
- package/dist/components/thread_form/components/pdf_side_panel.d.ts +20 -0
- package/dist/components/thread_form/components/pdf_side_panel.d.ts.map +1 -0
- package/dist/components/thread_form/components/pdf_side_panel.js +63 -0
- package/dist/components/thread_form/components/pdf_side_panel.js.map +1 -0
- package/dist/components/thread_form/components/rule_decision_row.d.ts +31 -0
- package/dist/components/thread_form/components/rule_decision_row.d.ts.map +1 -0
- package/dist/components/thread_form/components/rule_decision_row.js +20 -0
- package/dist/components/thread_form/components/rule_decision_row.js.map +1 -0
- package/dist/components/thread_form/components/send_back_message.d.ts +32 -0
- package/dist/components/thread_form/components/send_back_message.d.ts.map +1 -0
- package/dist/components/thread_form/components/send_back_message.js +82 -0
- package/dist/components/thread_form/components/send_back_message.js.map +1 -0
- package/dist/components/thread_form/components/shared.d.ts +54 -0
- package/dist/components/thread_form/components/shared.d.ts.map +1 -0
- package/dist/components/thread_form/components/shared.js +136 -0
- package/dist/components/thread_form/components/shared.js.map +1 -0
- package/dist/components/thread_form/components/task_card.d.ts +90 -0
- package/dist/components/thread_form/components/task_card.d.ts.map +1 -0
- package/dist/components/thread_form/components/task_card.js +63 -0
- package/dist/components/thread_form/components/task_card.js.map +1 -0
- package/dist/components/thread_form/components/text_doc_check.d.ts +15 -0
- package/dist/components/thread_form/components/text_doc_check.d.ts.map +1 -0
- package/dist/components/thread_form/components/text_doc_check.js +16 -0
- package/dist/components/thread_form/components/text_doc_check.js.map +1 -0
- package/dist/components/thread_form/components/text_extraction.d.ts +14 -0
- package/dist/components/thread_form/components/text_extraction.d.ts.map +1 -0
- package/dist/components/thread_form/components/text_extraction.js +16 -0
- package/dist/components/thread_form/components/text_extraction.js.map +1 -0
- package/dist/components/thread_form/components/thread_composer.d.ts +15 -0
- package/dist/components/thread_form/components/thread_composer.d.ts.map +1 -0
- package/dist/components/thread_form/components/thread_composer.js +93 -0
- package/dist/components/thread_form/components/thread_composer.js.map +1 -0
- package/dist/components/thread_form/components/thread_timeline.d.ts +65 -0
- package/dist/components/thread_form/components/thread_timeline.d.ts.map +1 -0
- package/dist/components/thread_form/components/thread_timeline.js +225 -0
- package/dist/components/thread_form/components/thread_timeline.js.map +1 -0
- package/dist/components/thread_form/hooks/use_file_pipeline.d.ts +126 -0
- package/dist/components/thread_form/hooks/use_file_pipeline.d.ts.map +1 -0
- package/dist/components/thread_form/hooks/use_file_pipeline.js +760 -0
- package/dist/components/thread_form/hooks/use_file_pipeline.js.map +1 -0
- package/dist/components/thread_form/hooks/use_thread_form.d.ts +36 -0
- package/dist/components/thread_form/hooks/use_thread_form.d.ts.map +1 -0
- package/dist/components/thread_form/hooks/use_thread_form.js +126 -0
- package/dist/components/thread_form/hooks/use_thread_form.js.map +1 -0
- package/dist/components/thread_form/index.d.ts +33 -0
- package/dist/components/thread_form/index.d.ts.map +1 -0
- package/dist/components/thread_form/index.js +30 -0
- package/dist/components/thread_form/index.js.map +1 -0
- package/dist/components/thread_form/sample_data.d.ts +8 -0
- package/dist/components/thread_form/sample_data.d.ts.map +1 -0
- package/dist/components/thread_form/sample_data.js +658 -0
- package/dist/components/thread_form/sample_data.js.map +1 -0
- package/dist/components/thread_form/thread_form.d.ts +7 -0
- package/dist/components/thread_form/thread_form.d.ts.map +1 -0
- package/dist/components/thread_form/thread_form.js +1385 -0
- package/dist/components/thread_form/thread_form.js.map +1 -0
- package/dist/components/thread_form/types.d.ts +402 -0
- package/dist/components/thread_form/types.d.ts.map +1 -0
- package/dist/components/thread_form/types.js +23 -0
- package/dist/components/thread_form/types.js.map +1 -0
- package/dist/components/thread_form/utils/file_decision_state.d.ts +22 -0
- package/dist/components/thread_form/utils/file_decision_state.d.ts.map +1 -0
- package/dist/components/thread_form/utils/file_decision_state.js +37 -0
- package/dist/components/thread_form/utils/file_decision_state.js.map +1 -0
- package/dist/components/thread_form/utils/merge_send_back.d.ts +13 -0
- package/dist/components/thread_form/utils/merge_send_back.d.ts.map +1 -0
- package/dist/components/thread_form/utils/merge_send_back.js +23 -0
- package/dist/components/thread_form/utils/merge_send_back.js.map +1 -0
- package/dist/lib/autofill_handler.d.ts.map +1 -1
- package/dist/lib/autofill_handler.js +5 -44
- package/dist/lib/autofill_handler.js.map +1 -1
- package/dist/lib/classification_handler.d.ts +105 -0
- package/dist/lib/classification_handler.d.ts.map +1 -0
- package/dist/lib/classification_handler.js +342 -0
- package/dist/lib/classification_handler.js.map +1 -0
- package/dist/lib/content_gate_handler.d.ts +37 -0
- package/dist/lib/content_gate_handler.d.ts.map +1 -0
- package/dist/lib/content_gate_handler.js +126 -0
- package/dist/lib/content_gate_handler.js.map +1 -0
- package/dist/lib/index.d.ts +10 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +5 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/periodic_coverage_runner.d.ts +24 -0
- package/dist/lib/periodic_coverage_runner.d.ts.map +1 -0
- package/dist/lib/periodic_coverage_runner.js +121 -0
- package/dist/lib/periodic_coverage_runner.js.map +1 -0
- package/dist/lib/resolution_handler.d.ts +150 -0
- package/dist/lib/resolution_handler.d.ts.map +1 -0
- package/dist/lib/resolution_handler.js +597 -0
- package/dist/lib/resolution_handler.js.map +1 -0
- package/dist/lib/resolve_variable.d.ts +25 -0
- package/dist/lib/resolve_variable.d.ts.map +1 -0
- package/dist/lib/resolve_variable.js +77 -0
- package/dist/lib/resolve_variable.js.map +1 -0
- package/dist/lib/validation_handler.d.ts +27 -3
- package/dist/lib/validation_handler.d.ts.map +1 -1
- package/dist/lib/validation_handler.js +338 -288
- package/dist/lib/validation_handler.js.map +1 -1
- package/dist/types/clarification.d.ts +54 -0
- package/dist/types/clarification.d.ts.map +1 -1
- package/dist/types/fb_form_data.d.ts +273 -123
- package/dist/types/fb_form_data.d.ts.map +1 -1
- package/dist/types/fb_form_data.js +44 -58
- package/dist/types/fb_form_data.js.map +1 -1
- package/dist/types/fb_form_data_v1.d.ts +250 -0
- package/dist/types/fb_form_data_v1.d.ts.map +1 -0
- package/dist/types/fb_form_data_v1.js +117 -0
- package/dist/types/fb_form_data_v1.js.map +1 -0
- package/dist/types/fb_form_instance.d.ts +1 -1
- package/dist/types/fb_form_instance.d.ts.map +1 -1
- package/dist/types/index.d.ts +5 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/validation.d.ts +134 -12
- package/dist/types/validation.d.ts.map +1 -1
- package/dist/utils/expectation_extractor.d.ts +31 -0
- package/dist/utils/expectation_extractor.d.ts.map +1 -0
- package/dist/utils/expectation_extractor.js +142 -0
- package/dist/utils/expectation_extractor.js.map +1 -0
- package/dist/utils/fb_data_adapter.d.ts +7 -2
- package/dist/utils/fb_data_adapter.d.ts.map +1 -1
- package/dist/utils/fb_data_adapter.js +58 -7
- package/dist/utils/fb_data_adapter.js.map +1 -1
- package/dist/utils/fb_data_adapter_v2.d.ts +17 -0
- package/dist/utils/fb_data_adapter_v2.d.ts.map +1 -0
- package/dist/utils/fb_data_adapter_v2.js +483 -0
- package/dist/utils/fb_data_adapter_v2.js.map +1 -0
- package/dist/utils/fb_data_helpers.d.ts +1 -1
- package/dist/utils/fb_data_helpers.d.ts.map +1 -1
- package/dist/utils/fb_data_mutations.d.ts +1 -1
- package/dist/utils/fb_data_mutations.d.ts.map +1 -1
- package/dist/utils/fb_data_mutations_v2.d.ts +46 -0
- package/dist/utils/fb_data_mutations_v2.d.ts.map +1 -0
- package/dist/utils/fb_data_mutations_v2.js +341 -0
- package/dist/utils/fb_data_mutations_v2.js.map +1 -0
- package/dist/utils/fb_data_queries.d.ts +81 -0
- package/dist/utils/fb_data_queries.d.ts.map +1 -0
- package/dist/utils/fb_data_queries.js +354 -0
- package/dist/utils/fb_data_queries.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/issue_bucketing.d.ts +36 -0
- package/dist/utils/issue_bucketing.d.ts.map +1 -0
- package/dist/utils/issue_bucketing.js +107 -0
- package/dist/utils/issue_bucketing.js.map +1 -0
- package/dist/utils/validation_result.d.ts +32 -0
- package/dist/utils/validation_result.d.ts.map +1 -0
- package/dist/utils/validation_result.js +55 -0
- package/dist/utils/validation_result.js.map +1 -0
- package/package.json +16 -4
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thread composer — combined text + file dropzone.
|
|
3
|
+
* Always-visible textarea that also accepts file drops.
|
|
4
|
+
* Attached files shown as chips below the text area.
|
|
5
|
+
*/
|
|
6
|
+
'use client';
|
|
7
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { useState, useCallback, useRef } from 'react';
|
|
9
|
+
import { cn, RoleAvatar, PdfIcon } from './shared.js';
|
|
10
|
+
export function ThreadComposer({ role, user_name, on_send, on_send_comment, on_upload_files, on_add_question }) {
|
|
11
|
+
const [text, set_text] = useState('');
|
|
12
|
+
const [files, set_files] = useState([]);
|
|
13
|
+
const [dragging, set_dragging] = useState(false);
|
|
14
|
+
const [focused, set_focused] = useState(false);
|
|
15
|
+
const file_input_ref = useRef(null);
|
|
16
|
+
const drag_counter = useRef(0);
|
|
17
|
+
const has_content = text.trim().length > 0 || files.length > 0;
|
|
18
|
+
const handle_send = useCallback(() => {
|
|
19
|
+
const trimmed = text.trim();
|
|
20
|
+
if (!trimmed && files.length === 0)
|
|
21
|
+
return;
|
|
22
|
+
if (on_send) {
|
|
23
|
+
on_send(trimmed, files);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
if (trimmed)
|
|
27
|
+
on_send_comment?.(trimmed);
|
|
28
|
+
if (files.length > 0)
|
|
29
|
+
on_upload_files?.(files);
|
|
30
|
+
}
|
|
31
|
+
set_text('');
|
|
32
|
+
set_files([]);
|
|
33
|
+
}, [text, files, on_send, on_send_comment, on_upload_files]);
|
|
34
|
+
const handle_key_down = useCallback((e) => {
|
|
35
|
+
if (e.key === 'Enter' && !e.shiftKey) {
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
handle_send();
|
|
38
|
+
}
|
|
39
|
+
}, [handle_send]);
|
|
40
|
+
const add_files = useCallback((new_files) => {
|
|
41
|
+
set_files(prev => [...prev, ...new_files]);
|
|
42
|
+
}, []);
|
|
43
|
+
const remove_file = useCallback((index) => {
|
|
44
|
+
set_files(prev => prev.filter((_, i) => i !== index));
|
|
45
|
+
}, []);
|
|
46
|
+
// ── Drag & Drop ──
|
|
47
|
+
const handle_drag_enter = useCallback((e) => {
|
|
48
|
+
e.preventDefault();
|
|
49
|
+
e.stopPropagation();
|
|
50
|
+
drag_counter.current++;
|
|
51
|
+
if (e.dataTransfer.types.includes('Files')) {
|
|
52
|
+
set_dragging(true);
|
|
53
|
+
}
|
|
54
|
+
}, []);
|
|
55
|
+
const handle_drag_leave = useCallback((e) => {
|
|
56
|
+
e.preventDefault();
|
|
57
|
+
e.stopPropagation();
|
|
58
|
+
drag_counter.current--;
|
|
59
|
+
if (drag_counter.current === 0) {
|
|
60
|
+
set_dragging(false);
|
|
61
|
+
}
|
|
62
|
+
}, []);
|
|
63
|
+
const handle_drag_over = useCallback((e) => {
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
e.stopPropagation();
|
|
66
|
+
}, []);
|
|
67
|
+
const handle_drop = useCallback((e) => {
|
|
68
|
+
e.preventDefault();
|
|
69
|
+
e.stopPropagation();
|
|
70
|
+
set_dragging(false);
|
|
71
|
+
drag_counter.current = 0;
|
|
72
|
+
const dropped = Array.from(e.dataTransfer.files);
|
|
73
|
+
if (dropped.length > 0) {
|
|
74
|
+
add_files(dropped);
|
|
75
|
+
}
|
|
76
|
+
}, [add_files]);
|
|
77
|
+
const handle_file_input = useCallback((e) => {
|
|
78
|
+
const selected = e.target.files;
|
|
79
|
+
if (selected && selected.length > 0) {
|
|
80
|
+
add_files(Array.from(selected));
|
|
81
|
+
}
|
|
82
|
+
e.target.value = '';
|
|
83
|
+
}, [add_files]);
|
|
84
|
+
const format_size = (bytes) => {
|
|
85
|
+
if (bytes < 1024)
|
|
86
|
+
return `${bytes}B`;
|
|
87
|
+
if (bytes < 1048576)
|
|
88
|
+
return `${Math.round(bytes / 1024)}KB`;
|
|
89
|
+
return `${(bytes / 1048576).toFixed(1)}MB`;
|
|
90
|
+
};
|
|
91
|
+
return (_jsxs("div", { className: "pt-3 mt-4 border-t border-[#E2E8F0]", children: [_jsxs("div", { onDragEnter: handle_drag_enter, onDragLeave: handle_drag_leave, onDragOver: handle_drag_over, onDrop: handle_drop, className: cn('relative rounded-md border transition-colors', dragging ? 'border-[#2563EB] bg-[#EFF6FF] border-dashed' : focused ? 'border-[#2563EB] ring-1 ring-[#2563EB]' : 'border-[#E2E8F0]'), children: [dragging && (_jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-[#EFF6FF]/80 rounded-md z-10 pointer-events-none", children: _jsxs("div", { className: "text-[13px] text-[#2563EB] font-medium flex items-center gap-2", children: [_jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12" }) }), "Drop files here"] }) })), _jsx("textarea", { value: text, onChange: (e) => set_text(e.target.value), onKeyDown: handle_key_down, onFocus: () => set_focused(true), onBlur: () => set_focused(false), className: "w-full px-3 py-2.5 text-[13px] resize-none focus:outline-none placeholder:text-[#CBD5E1] bg-white rounded-md", rows: files.length > 0 ? 2 : 3, placeholder: "Write your message or drop files here..." }), files.length > 0 && (_jsx("div", { className: "px-3 pb-2.5 flex flex-wrap gap-1.5", children: files.map((file, i) => (_jsxs("div", { className: "inline-flex items-center gap-1.5 bg-[#F1F5F9] border border-[#E2E8F0] rounded px-2 py-1 text-[12px] text-[#334155] group", children: [_jsx(PdfIcon, { className: "w-3 h-3" }), _jsx("span", { className: "truncate max-w-40", children: file.name }), _jsx("span", { className: "text-[#94A3B8] text-[10px]", children: format_size(file.size) }), _jsx("button", { onClick: () => remove_file(i), className: "text-[#94A3B8] hover:text-[#EF4444] ml-0.5 cursor-pointer opacity-0 group-hover:opacity-100 transition-opacity", children: _jsx("svg", { className: "w-3 h-3", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })] }, `${file.name}-${i}`))) }))] }), _jsxs("div", { className: "flex items-center gap-2 mt-2", children: [_jsx(RoleAvatar, { role: role, name: user_name, size: "sm" }), _jsxs("button", { onClick: () => file_input_ref.current?.click(), className: "flex items-center gap-1.5 text-[13px] border border-[#E2E8F0] text-[#64748B] rounded-md px-3 py-1.5 hover:bg-[#F8FAFC] hover:text-[#334155] transition-colors cursor-pointer", children: [_jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M15.172 7l-6.586 6.586a2 2 0 102.828 2.828l6.414-6.586a4 4 0 00-5.656-5.656l-6.415 6.585a6 6 0 108.486 8.486L20.5 13" }) }), "Attach Files"] }), _jsx("div", { className: "flex-1" }), role === 'agent' && (_jsx("button", { onClick: on_add_question, className: "flex items-center gap-1.5 text-[13px] border border-[#2563EB]/30 text-[#2563EB] rounded-md px-3 py-1.5 hover:bg-[#EFF6FF] transition-colors cursor-pointer", children: "+ Question" })), _jsx("button", { onClick: handle_send, disabled: !has_content, className: cn('text-[13px] font-medium px-4 py-1.5 rounded-md cursor-pointer transition-colors', has_content ? 'bg-[#2563EB] text-white hover:bg-[#1D4ED8]' : 'bg-[#F1F5F9] text-[#CBD5E1] cursor-not-allowed'), children: "Send" }), _jsx("input", { ref: file_input_ref, type: "file", multiple: true, onChange: handle_file_input, className: "hidden" })] })] }));
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=thread_composer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread_composer.js","sourceRoot":"","sources":["../../../../src/components/thread_form/components/thread_composer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thread timeline — groups messages, filters by visibility,
|
|
3
|
+
* dispatches to message components. Each message is its own panel.
|
|
4
|
+
* Supports inline edit and delete on user messages.
|
|
5
|
+
*/
|
|
6
|
+
import type { ThreadMessage, ContentItem, SendBackIssue, RuleDecision } from '../types.js';
|
|
7
|
+
export interface ThreadTimelineProps {
|
|
8
|
+
messages: ThreadMessage[];
|
|
9
|
+
role: 'agent' | 'client';
|
|
10
|
+
current_user_id?: string;
|
|
11
|
+
on_view_file?: (item: ContentItem) => void;
|
|
12
|
+
on_remove_file?: (item: ContentItem) => void;
|
|
13
|
+
on_accept?: (content_ref: string) => void;
|
|
14
|
+
on_dismiss?: (content_ref: string) => void;
|
|
15
|
+
on_send_to_client?: (content_ref: string) => void;
|
|
16
|
+
on_edit_message?: (message_id: string, updated: {
|
|
17
|
+
content_text?: string;
|
|
18
|
+
content_items?: ContentItem[];
|
|
19
|
+
}) => void;
|
|
20
|
+
on_delete_message?: (message_id: string) => void;
|
|
21
|
+
/** Upload a file via file_manager, returns ContentItem with real file_id */
|
|
22
|
+
upload_file?: (file: File) => Promise<ContentItem>;
|
|
23
|
+
/** Agent sends back selected issues as a new task */
|
|
24
|
+
on_send_back_issues?: (item: ContentItem, issues: SendBackIssue[], accepted_issue_keys: string[]) => void;
|
|
25
|
+
/** Agent submits batch decisions from the Pending Review panel */
|
|
26
|
+
on_submit_decisions?: (item: ContentItem, decisions: RuleDecision[]) => void;
|
|
27
|
+
/** Persist updates to a ContentItem */
|
|
28
|
+
on_update_content_item?: (content_id: string, updates: Partial<ContentItem>) => void;
|
|
29
|
+
/** Parent task status — used to show resolved state on send_back messages */
|
|
30
|
+
task_status?: string;
|
|
31
|
+
/** Pipeline file statuses */
|
|
32
|
+
file_statuses?: Map<string, 'queued' | 'classifying' | 'validating' | 'done' | 'error'>;
|
|
33
|
+
/** Classification results per content_id */
|
|
34
|
+
classification_results?: Map<string, import('../types.js').ClassificationResult>;
|
|
35
|
+
/** Validation results per content_id */
|
|
36
|
+
validation_results?: Map<string, import('../../../types/validation.js').ValidationRuleResult[]>;
|
|
37
|
+
/** File manager callbacks for upload in clarification response dropzone */
|
|
38
|
+
file_manager?: import('../../../types/file_manager.js').FileManagerCallbacks;
|
|
39
|
+
/** Callback when replacement files are submitted from a clarification response */
|
|
40
|
+
on_replacement_files?: (source_content_id: string, files: import('../../../types/file_attachment.js').FormFileAttachment[]) => void;
|
|
41
|
+
/** View action rendering — 'icon' (default) or 'text'. Forwarded to FileBar. */
|
|
42
|
+
view_button_variant?: 'icon' | 'text';
|
|
43
|
+
/** Override info-icon visibility. When omitted, defaults to agent-only. Forwarded to FileBar. */
|
|
44
|
+
show_info_icon?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Set of source_content_ids whose spawned send-back task is now resolved.
|
|
47
|
+
* Forwarded to FileBar so the parent file's "Sent Back" pill disappears
|
|
48
|
+
* once the child question is completed.
|
|
49
|
+
*/
|
|
50
|
+
sent_back_resolved_ids?: Set<string>;
|
|
51
|
+
/** True while the aggregate resolver is in-flight — drives the spinner badge in SendBackMessage. */
|
|
52
|
+
resolving?: boolean;
|
|
53
|
+
/** Available document types for the FileBar's document-type editor. */
|
|
54
|
+
available_document_types?: import('../../shared/document_type_editor.js').DocumentTypeOption[];
|
|
55
|
+
/** Called when the agent picks a new document type — parent re-runs validation. */
|
|
56
|
+
on_change_document_type?: (item: ContentItem, new_type_id: string) => Promise<void> | void;
|
|
57
|
+
/** Map of content_id → effective "kept for collected data" state. When provided,
|
|
58
|
+
* FileBar renders a Keep checkbox; toggling fires on_keep_change. */
|
|
59
|
+
keep_selections?: Record<string, boolean>;
|
|
60
|
+
/** Called when the agent toggles a Keep checkbox on a file row. Same shape as
|
|
61
|
+
* the Collected Data tab's on_selection_change. */
|
|
62
|
+
on_keep_change?: (selections: Record<string, boolean>) => void;
|
|
63
|
+
}
|
|
64
|
+
export declare function ThreadTimeline({ messages, role, current_user_id, on_view_file, on_remove_file, on_accept, on_dismiss, on_send_to_client, on_edit_message, on_delete_message, upload_file, on_send_back_issues, on_submit_decisions, on_update_content_item, task_status, file_statuses, classification_results, validation_results, file_manager, on_replacement_files, view_button_variant, show_info_icon, sent_back_resolved_ids, resolving, available_document_types, on_change_document_type, keep_selections, on_keep_change }: ThreadTimelineProps): import("react/jsx-runtime").JSX.Element;
|
|
65
|
+
//# sourceMappingURL=thread_timeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread_timeline.d.ts","sourceRoot":"","sources":["../../../../src/components/thread_form/components/thread_timeline.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAmB,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ5G,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IAC7C,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IAClH,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,4EAA4E;IAC5E,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACnD,qDAAqD;IACrD,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,mBAAmB,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1G,kEAAkE;IAClE,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IAC7E,uCAAuC;IACvC,sBAAsB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACrF,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,GAAG,aAAa,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACxF,4CAA4C;IAC5C,sBAAsB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,oBAAoB,CAAC,CAAC;IACjF,wCAAwC;IACxC,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,8BAA8B,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAChG,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,gCAAgC,EAAE,oBAAoB,CAAC;IAC7E,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,mCAAmC,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAC;IACpI,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,iGAAiG;IACjG,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,oGAAoG;IACpG,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uEAAuE;IACvE,wBAAwB,CAAC,EAAE,OAAO,sCAAsC,EAAE,kBAAkB,EAAE,CAAC;IAC/F,mFAAmF;IACnF,uBAAuB,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3F;0EACsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C;wDACoD;IACpD,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAChE;AAmMD,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,WAAW,EAAE,aAAa,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,sBAAsB,EAAE,SAAS,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,mBAAmB,2CA4PzhB"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thread timeline — groups messages, filters by visibility,
|
|
3
|
+
* dispatches to message components. Each message is its own panel.
|
|
4
|
+
* Supports inline edit and delete on user messages.
|
|
5
|
+
*/
|
|
6
|
+
'use client';
|
|
7
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { useState, useRef } from 'react';
|
|
9
|
+
import { cn, RoleAvatar, PdfIcon, LightbulbIcon, MSG_BG, format_time, format_relative, group_messages, build_ai_lookup, find_doc_check, find_text_doc_checks } from './shared.js';
|
|
10
|
+
import { FileBar } from './file_bar.js';
|
|
11
|
+
import { TextDocCheck } from './text_doc_check.js';
|
|
12
|
+
import { TextExtraction } from './text_extraction.js';
|
|
13
|
+
import { Clarification } from './clarification.js';
|
|
14
|
+
import { SendBackMessage } from './send_back_message.js';
|
|
15
|
+
/** Inline edit/delete icons for a message header */
|
|
16
|
+
function MessageActions({ msg, current_user_id, on_edit, on_delete }) {
|
|
17
|
+
// Show on user messages (comment, content) — not on system/AI/status messages
|
|
18
|
+
const is_editable = msg.type === 'comment' || msg.type === 'content';
|
|
19
|
+
if (!is_editable)
|
|
20
|
+
return null;
|
|
21
|
+
const [confirming, set_confirming] = useState(false);
|
|
22
|
+
if (confirming) {
|
|
23
|
+
return (_jsxs("div", { className: "flex items-center gap-1 ml-auto", children: [_jsx("span", { className: "text-[11px] text-[#EF4444]", children: "Delete?" }), _jsx("button", { onClick: on_delete, className: "text-[11px] text-[#EF4444] font-medium hover:underline cursor-pointer", children: "Yes" }), _jsx("button", { onClick: () => set_confirming(false), className: "text-[11px] text-[#94A3B8] hover:underline cursor-pointer", children: "No" })] }));
|
|
24
|
+
}
|
|
25
|
+
return (_jsxs("div", { className: "flex items-center gap-1 ml-auto opacity-0 group-hover/card:opacity-100 transition-opacity", children: [_jsx("button", { onClick: on_edit, className: "p-1 text-[#94A3B8] hover:text-[#2563EB] rounded hover:bg-[#F1F5F9] cursor-pointer", title: "Edit", children: _jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" }) }) }), _jsx("button", { onClick: () => set_confirming(true), className: "p-1 text-[#94A3B8] hover:text-[#EF4444] rounded hover:bg-[#FEF2F2] cursor-pointer", title: "Delete", children: _jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" }) }) })] }));
|
|
26
|
+
}
|
|
27
|
+
/** Inline editor for a message — edit text, remove/add files via drag-and-drop */
|
|
28
|
+
function MessageEditor({ msg, on_save, on_cancel, upload_file }) {
|
|
29
|
+
const [text, set_text] = useState(msg.content_text || '');
|
|
30
|
+
const [items, set_items] = useState(msg.content_items || []);
|
|
31
|
+
const [dragging, set_dragging] = useState(false);
|
|
32
|
+
const [uploading, set_uploading] = useState(false);
|
|
33
|
+
const drag_counter = useRef(0);
|
|
34
|
+
const file_input_ref = useRef(null);
|
|
35
|
+
const remove_file = (content_id) => {
|
|
36
|
+
set_items(prev => prev.filter(i => i.content_id !== content_id));
|
|
37
|
+
};
|
|
38
|
+
const format_size = (bytes) => {
|
|
39
|
+
if (bytes < 1024)
|
|
40
|
+
return `${bytes}B`;
|
|
41
|
+
if (bytes < 1048576)
|
|
42
|
+
return `${Math.round(bytes / 1024)}KB`;
|
|
43
|
+
return `${(bytes / 1048576).toFixed(1)}MB`;
|
|
44
|
+
};
|
|
45
|
+
const add_files = async (file_list) => {
|
|
46
|
+
if (upload_file) {
|
|
47
|
+
set_uploading(true);
|
|
48
|
+
try {
|
|
49
|
+
const uploaded = [];
|
|
50
|
+
for (const file of file_list) {
|
|
51
|
+
const item = await upload_file(file);
|
|
52
|
+
uploaded.push(item);
|
|
53
|
+
}
|
|
54
|
+
set_items(prev => [...prev, ...uploaded]);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
console.error('[MessageEditor] Upload failed:', err);
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
set_uploading(false);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
const new_items = file_list.map(file => ({
|
|
65
|
+
content_id: `ct_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`,
|
|
66
|
+
type: 'file',
|
|
67
|
+
file: {
|
|
68
|
+
file_id: `f_${Date.now()}_${Math.random().toString(36).slice(2, 7)}`,
|
|
69
|
+
file_name: file.name,
|
|
70
|
+
file_size: format_size(file.size),
|
|
71
|
+
mime_type: file.type || 'application/octet-stream',
|
|
72
|
+
},
|
|
73
|
+
}));
|
|
74
|
+
set_items(prev => [...prev, ...new_items]);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const handle_drag_enter = (e) => { e.preventDefault(); e.stopPropagation(); drag_counter.current++; if (e.dataTransfer.types.includes('Files'))
|
|
78
|
+
set_dragging(true); };
|
|
79
|
+
const handle_drag_leave = (e) => { e.preventDefault(); e.stopPropagation(); drag_counter.current--; if (drag_counter.current === 0)
|
|
80
|
+
set_dragging(false); };
|
|
81
|
+
const handle_drag_over = (e) => { e.preventDefault(); e.stopPropagation(); };
|
|
82
|
+
const handle_drop = (e) => {
|
|
83
|
+
e.preventDefault();
|
|
84
|
+
e.stopPropagation();
|
|
85
|
+
set_dragging(false);
|
|
86
|
+
drag_counter.current = 0;
|
|
87
|
+
const dropped = Array.from(e.dataTransfer.files);
|
|
88
|
+
if (dropped.length > 0)
|
|
89
|
+
void add_files(dropped);
|
|
90
|
+
};
|
|
91
|
+
const handle_file_input = (e) => {
|
|
92
|
+
if (e.target.files && e.target.files.length > 0)
|
|
93
|
+
void add_files(Array.from(e.target.files));
|
|
94
|
+
e.target.value = '';
|
|
95
|
+
};
|
|
96
|
+
const handle_save = () => {
|
|
97
|
+
on_save(text.trim(), items);
|
|
98
|
+
};
|
|
99
|
+
const file_items = items.filter(i => i.type === 'file');
|
|
100
|
+
return (_jsxs("div", { onDragEnter: handle_drag_enter, onDragLeave: handle_drag_leave, onDragOver: handle_drag_over, onDrop: handle_drop, className: cn('relative rounded-md border transition-colors', dragging ? 'border-[#2563EB] border-dashed bg-[#EFF6FF]' : 'border-[#2563EB]'), children: [dragging && (_jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-[#EFF6FF]/80 rounded-md z-10 pointer-events-none", children: _jsxs("div", { className: "text-[13px] text-[#2563EB] font-medium flex items-center gap-2", children: [_jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12" }) }), "Drop files to add"] }) })), _jsx("textarea", { value: text, onChange: (e) => set_text(e.target.value), className: "w-full px-3 py-2.5 text-[13px] resize-none focus:outline-none bg-transparent rounded-t-md", rows: Math.max(2, text.split('\n').length), placeholder: "Edit your message...", autoFocus: true }), file_items.length > 0 && (_jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-2 px-3 pb-2 mt-2", children: file_items.map(item => (_jsxs("div", { className: "flex items-center gap-2 px-3 py-1.5 rounded-md border border-[#E2E8F0] bg-white text-[12px]", children: [_jsx(PdfIcon, { className: "w-3.5 h-3.5 text-[#94A3B8] flex-shrink-0" }), _jsx("span", { className: "flex-1 truncate text-[#1E293B]", children: item.file?.file_name || 'File' }), item.file?.file_size !== undefined && (_jsx("span", { className: "text-[10px] text-[#94A3B8]", children: item.file.file_size })), _jsx("button", { type: "button", onClick: () => remove_file(item.content_id), className: "p-0.5 rounded text-[#94A3B8] hover:text-[#EF4444] cursor-pointer", title: "Remove file", children: _jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })] }, item.content_id))) })), _jsxs("div", { className: "flex items-center gap-2 px-3 pb-2.5", children: [_jsxs("button", { onClick: () => file_input_ref.current?.click(), className: "flex items-center gap-1.5 text-[12px] border border-[#E2E8F0] text-[#64748B] rounded px-2.5 py-1 hover:bg-[#F8FAFC] cursor-pointer", children: [_jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M15.172 7l-6.586 6.586a2 2 0 102.828 2.828l6.414-6.586a4 4 0 00-5.656-5.656l-6.415 6.585a6 6 0 108.486 8.486L20.5 13" }) }), "Attach Files"] }), _jsx("div", { className: "flex-1" }), _jsx("button", { onClick: on_cancel, className: "text-[12px] text-[#94A3B8] px-3 py-1 cursor-pointer", children: "Cancel" }), _jsx("button", { onClick: handle_save, className: "text-[12px] font-medium bg-[#2563EB] text-white px-4 py-1.5 rounded hover:bg-[#1D4ED8] cursor-pointer", children: "Save" })] }), _jsx("input", { ref: file_input_ref, type: "file", multiple: true, onChange: handle_file_input, className: "hidden" })] }));
|
|
101
|
+
}
|
|
102
|
+
export function ThreadTimeline({ messages, role, current_user_id, on_view_file, on_remove_file, on_accept, on_dismiss, on_send_to_client, on_edit_message, on_delete_message, upload_file, on_send_back_issues, on_submit_decisions, on_update_content_item, task_status, file_statuses, classification_results, validation_results, file_manager, on_replacement_files, view_button_variant, show_info_icon, sent_back_resolved_ids, resolving, available_document_types, on_change_document_type, keep_selections, on_keep_change }) {
|
|
103
|
+
const groups = group_messages(messages, role);
|
|
104
|
+
const all_messages = messages;
|
|
105
|
+
const ai_lookup = build_ai_lookup(messages);
|
|
106
|
+
const [editing_id, set_editing_id] = useState(null);
|
|
107
|
+
return (_jsx("div", { className: "space-y-3", children: groups.map((group, gi) => {
|
|
108
|
+
const first = group[0];
|
|
109
|
+
// ── Status changes — hidden (noisy, no useful info) ──
|
|
110
|
+
if (first.type === 'status_change')
|
|
111
|
+
return null;
|
|
112
|
+
// ── AI analysis — text extraction (agent only) ──
|
|
113
|
+
if (first.type === 'ai_analysis') {
|
|
114
|
+
if (role === 'agent' && first.ai_analysis) {
|
|
115
|
+
const text_results = first.ai_analysis.items.filter(item => item.extracted_data && item.extracted_data.length > 0);
|
|
116
|
+
if (text_results.length > 0) {
|
|
117
|
+
return (_jsxs("div", { className: cn('rounded-lg border p-4', MSG_BG.system), children: [_jsxs("div", { className: "flex items-center gap-2 mb-3", children: [_jsx("div", { className: "w-6 h-6 rounded-full bg-[#EEF2FF] flex items-center justify-center flex-shrink-0", children: _jsx(LightbulbIcon, {}) }), _jsx("span", { className: "text-[13px] font-semibold text-[#334155]", children: "Text Analysis" }), _jsx("span", { className: "text-[11px] text-[#94A3B8]", children: format_relative(first.time) }), _jsx("span", { className: "text-[10px] bg-[#EEF2FF] text-[#6366F1] px-1.5 py-0.5 rounded font-medium", children: "Agent only" })] }), _jsx("div", { className: "space-y-3", children: text_results.map(result => (_jsx(TextExtraction, { result: result, on_accept: on_accept, on_send_to_client: on_send_to_client, on_dismiss: on_dismiss }, result.content_ref))) })] }, gi));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
// ── Doc checks — rendered inline, skip standalone ──
|
|
123
|
+
if (first.type === 'doc_check')
|
|
124
|
+
return null;
|
|
125
|
+
// ── Resolution verdict — rendered INSIDE the SendBackMessage panel, never inline ──
|
|
126
|
+
if (first.type === 'resolution_verdict')
|
|
127
|
+
return null;
|
|
128
|
+
// ── Send-back message ──
|
|
129
|
+
if (first.type === 'send_back' && first.send_back) {
|
|
130
|
+
// Walk the timeline reverse to find the latest resolution_verdict so
|
|
131
|
+
// the panel inside SendBackMessage always reflects the most recent
|
|
132
|
+
// resolver run (per-instance / per-round).
|
|
133
|
+
const latest_resolution = find_latest_resolution_verdict(all_messages);
|
|
134
|
+
// Collect all send_back payloads in the group (consecutive messages
|
|
135
|
+
// with the same source_content_id are merged by group_messages).
|
|
136
|
+
const send_back_data_list = group
|
|
137
|
+
.filter(m => m.type === 'send_back' && m.send_back)
|
|
138
|
+
.map(m => m.send_back);
|
|
139
|
+
return (_jsxs("div", { className: cn('rounded-lg border p-4', role === 'client' ? 'bg-[#FFF4E6] border-[#FED7AA]' : MSG_BG.agent), children: [_jsxs("div", { className: "flex items-center gap-2 mb-3", children: [_jsx(RoleAvatar, { role: "agent", name: first.user_name, size: "sm" }), _jsx("span", { className: "text-[13px] font-semibold text-[#0F172A]", children: first.user_name || 'Agent' }), _jsx("span", { className: "text-[11px] text-[#94A3B8]", children: format_time(first.time) })] }), first.content_text && (_jsx("p", { className: "text-[13px] text-[#334155] mb-3", children: first.content_text })), _jsx(SendBackMessage, { data: send_back_data_list, resolved: task_status === 'completed', resolution: latest_resolution, resolving: !!resolving, on_view_file: on_view_file, source_keep_selected: keep_selections ? (keep_selections[first.send_back.source_content_id] ?? true) : undefined, on_keep_change: on_keep_change, show_keep_checkbox: role === 'agent' })] }, gi));
|
|
140
|
+
}
|
|
141
|
+
// ── Message card ──
|
|
142
|
+
const msg = first;
|
|
143
|
+
// When the client is viewing, agent messages take an orange tint to
|
|
144
|
+
// match the rest of the client-mode chrome — saves them from a jarring
|
|
145
|
+
// blue island in an otherwise warm theme.
|
|
146
|
+
const msg_bg = role === 'client' && msg.role === 'agent'
|
|
147
|
+
? 'bg-[#FFF4E6] border-[#FED7AA]'
|
|
148
|
+
: (MSG_BG[msg.role] || MSG_BG.system);
|
|
149
|
+
const is_editing = editing_id === msg.message_id;
|
|
150
|
+
const text_checks = (msg.type === 'comment' && msg.content_text)
|
|
151
|
+
? find_text_doc_checks(all_messages, msg.message_id)
|
|
152
|
+
: [];
|
|
153
|
+
return (_jsxs("div", { className: cn('rounded-lg border p-4 group/card', msg_bg), children: [_jsxs("div", { className: "flex items-center gap-2 mb-2.5", children: [_jsx(RoleAvatar, { role: msg.role, name: msg.user_name, size: "sm" }), _jsx("span", { className: "text-[13px] font-semibold text-[#0F172A]", children: msg.user_name }), _jsx("span", { className: "text-[11px] text-[#94A3B8]", children: format_time(msg.time) }), task_status !== 'completed' && (_jsx(MessageActions, { msg: msg, current_user_id: current_user_id, on_edit: () => set_editing_id(msg.message_id), on_delete: () => {
|
|
154
|
+
on_delete_message?.(msg.message_id);
|
|
155
|
+
set_editing_id(null);
|
|
156
|
+
} }))] }), is_editing ? (_jsx(MessageEditor, { msg: msg, upload_file: upload_file, on_save: (text, items) => {
|
|
157
|
+
on_edit_message?.(msg.message_id, {
|
|
158
|
+
content_text: text || undefined,
|
|
159
|
+
content_items: items.length > 0 ? items : undefined,
|
|
160
|
+
});
|
|
161
|
+
set_editing_id(null);
|
|
162
|
+
}, on_cancel: () => set_editing_id(null) })) : (_jsxs("div", { children: [msg.content_text && msg.type !== 'clarification' && (_jsx("p", { className: "text-[13px] text-[#334155] leading-relaxed whitespace-pre-wrap", children: msg.content_text })), text_checks.map(tc => (_jsx(TextDocCheck, { doc_check_msg: tc, role: role }, tc.message_id))), msg.content_items && msg.content_items.filter(i => i.type === 'file').length > 0 && (() => {
|
|
163
|
+
// Sort files so replacement chains appear nested: A → B → C
|
|
164
|
+
const file_items = msg.content_items.filter(i => i.type === 'file');
|
|
165
|
+
const sorted = [];
|
|
166
|
+
const has_parent = new Set(file_items.filter(i => i.replaces_content_id).map(i => i.content_id));
|
|
167
|
+
// Recursively insert an item and all its replacements
|
|
168
|
+
const insert_chain = (item) => {
|
|
169
|
+
sorted.push(item);
|
|
170
|
+
for (const r of file_items) {
|
|
171
|
+
if (r.replaces_content_id === item.content_id)
|
|
172
|
+
insert_chain(r);
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
// Start from root items (those that don't replace anything)
|
|
176
|
+
for (const item of file_items) {
|
|
177
|
+
if (!has_parent.has(item.content_id) && !item.replaces_content_id)
|
|
178
|
+
insert_chain(item);
|
|
179
|
+
}
|
|
180
|
+
// Build a lookup for depth calculation
|
|
181
|
+
const items_by_id = new Map(file_items.map(i => [i.content_id, i]));
|
|
182
|
+
const get_depth = (it) => {
|
|
183
|
+
let depth = 0;
|
|
184
|
+
let cur = it;
|
|
185
|
+
while (cur.replaces_content_id) {
|
|
186
|
+
depth++;
|
|
187
|
+
const parent = items_by_id.get(cur.replaces_content_id);
|
|
188
|
+
if (!parent)
|
|
189
|
+
break;
|
|
190
|
+
cur = parent;
|
|
191
|
+
}
|
|
192
|
+
return depth;
|
|
193
|
+
};
|
|
194
|
+
// Two-column grid when none of the files in this message
|
|
195
|
+
// are part of a replacement chain. Chained replacements
|
|
196
|
+
// need single-column to keep parent → child indentation
|
|
197
|
+
// visually clear.
|
|
198
|
+
const has_replacement_chain = file_items.some(i => i.replaces_content_id || i.replaced_by_content_id);
|
|
199
|
+
return (_jsx("div", { className: cn('mt-2', has_replacement_chain ? 'space-y-2' : 'grid grid-cols-1 sm:grid-cols-2 gap-2 items-start'), children: sorted.map(item => {
|
|
200
|
+
const dc = find_doc_check(all_messages, item.content_id);
|
|
201
|
+
const ai = ai_lookup.get(item.content_id);
|
|
202
|
+
// Resolve replacement link names from sibling items
|
|
203
|
+
const replaced_by_name = item.replaced_by_content_id
|
|
204
|
+
? msg.content_items?.find(ci => ci.content_id === item.replaced_by_content_id)?.file?.file_name
|
|
205
|
+
: undefined;
|
|
206
|
+
const replaces_name = item.replaces_content_id
|
|
207
|
+
? msg.content_items?.find(ci => ci.content_id === item.replaces_content_id)?.file?.file_name
|
|
208
|
+
: undefined;
|
|
209
|
+
const nesting_depth = get_depth(item);
|
|
210
|
+
return (_jsx(FileBar, { item: item, doc_check: dc, ai_result: ai, role: role, on_view: on_view_file, on_remove: on_remove_file, on_accept: on_accept, on_dismiss: on_dismiss, on_send_to_client: on_send_to_client, on_send_back_issues: on_send_back_issues, on_submit_decisions: on_submit_decisions, on_update_content_item: on_update_content_item, pipeline_status: file_statuses?.get(item.content_id) || null, classification_result: classification_results?.get(item.content_id) || null, validation_rule_results: validation_results?.get(item.content_id) || [], file_manager: file_manager, on_replacement_files: on_replacement_files, replaced_by_name: replaced_by_name, replaces_name: replaces_name, nesting_depth: nesting_depth, view_button_variant: view_button_variant, show_info_icon: show_info_icon, task_resolved: task_status === 'completed', sent_back_resolved: sent_back_resolved_ids?.has(item.content_id), available_document_types: available_document_types, on_change_document_type: on_change_document_type, keep_selected: keep_selections ? (keep_selections[item.content_id] ?? !item.replaced_by_content_id) : undefined, on_keep_change: on_keep_change, show_keep_checkbox: role === 'agent' }, item.content_id));
|
|
211
|
+
}) }));
|
|
212
|
+
})(), msg.type === 'clarification' && _jsx(Clarification, { msg: msg, role: role })] }))] }, gi));
|
|
213
|
+
}) }));
|
|
214
|
+
}
|
|
215
|
+
/** Find the most recent resolution_verdict in a message list. */
|
|
216
|
+
function find_latest_resolution_verdict(messages) {
|
|
217
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
218
|
+
const m = messages[i];
|
|
219
|
+
if (m.type === 'resolution_verdict' && m.resolution_verdict) {
|
|
220
|
+
return m.resolution_verdict;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=thread_timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread_timeline.js","sourceRoot":"","sources":["../../../../src/components/thread_form/components/thread_timeline.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* use_file_pipeline — orchestrates classification → validation for uploaded files.
|
|
3
|
+
*
|
|
4
|
+
* Phase 1 (client upload): classify → fetch immediate rules → validate
|
|
5
|
+
* Phase 2 (agent review): fetch backoffice rules → validate
|
|
6
|
+
*/
|
|
7
|
+
import type { ContentItem, ClassificationResult } from '../types.js';
|
|
8
|
+
import type { DocCheckData, AiContentResult } from '../types.js';
|
|
9
|
+
import type { ValidationRuleResult, ValidationGap } from '../../../types/validation.js';
|
|
10
|
+
import type { ExtractedResponseFields } from '../../../types/fb_form_data.js';
|
|
11
|
+
export type FileStatus = 'queued' | 'classifying' | 'validating' | 'done' | 'error';
|
|
12
|
+
/**
|
|
13
|
+
* Result of a per-group periodic_coverage rule execution. One entry per
|
|
14
|
+
* (group_key, rule) pair. Consumer is responsible for surfacing these as
|
|
15
|
+
* user-visible validations / clarifications.
|
|
16
|
+
*/
|
|
17
|
+
export interface GroupCoverageResult {
|
|
18
|
+
/** Tag/group key files were grouped by */
|
|
19
|
+
group_key: string;
|
|
20
|
+
/** Document type that the rule matched on */
|
|
21
|
+
document_type: string;
|
|
22
|
+
/** Rule that produced these gaps */
|
|
23
|
+
rule_id: string;
|
|
24
|
+
/** Rule's display name (for UI) */
|
|
25
|
+
rule_name: string;
|
|
26
|
+
/** Custom message template from rule (consumer renders gaps with substitution).
|
|
27
|
+
* When undefined, consumer should use a default like:
|
|
28
|
+
* "Missing {{document_type}} for the period {{gap.start}} to {{gap.end}}." */
|
|
29
|
+
custom_issue_description?: string;
|
|
30
|
+
/** Detected gaps for this rule on this group */
|
|
31
|
+
gaps: ValidationGap[];
|
|
32
|
+
/** True when rule was skipped because period bounds did not resolve */
|
|
33
|
+
skipped?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface UseFilePipelineOptions {
|
|
36
|
+
classification_api_url?: string;
|
|
37
|
+
validation_api_url?: string;
|
|
38
|
+
validation_rules_api_url?: string;
|
|
39
|
+
content_gate_api_url?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Optional endpoint that extracts structured fields (total, date, vendor)
|
|
42
|
+
* from a response file — used by the sum_match resolver. When omitted, the
|
|
43
|
+
* extract_response_fields method returns null and the resolver falls back to
|
|
44
|
+
* "No total extracted" reporting.
|
|
45
|
+
*/
|
|
46
|
+
response_extraction_api_url?: string;
|
|
47
|
+
/**
|
|
48
|
+
* Document-type allow-list passed to the classification API. When provided,
|
|
49
|
+
* the LLM must pick a type_id from this list (or 'unknown'). Sourced from
|
|
50
|
+
* the Document Types editor in the consuming app.
|
|
51
|
+
*/
|
|
52
|
+
document_types?: Array<{
|
|
53
|
+
type_id: string;
|
|
54
|
+
type_label: string;
|
|
55
|
+
description?: string;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* Classification-tag allow-list passed to the classification API. When
|
|
59
|
+
* provided, the LLM must pick tag_ids from this list. Sourced from the Tag
|
|
60
|
+
* Editor in the consuming app.
|
|
61
|
+
*/
|
|
62
|
+
available_tags?: Array<{
|
|
63
|
+
tag_id: string;
|
|
64
|
+
tag_label: string;
|
|
65
|
+
description?: string;
|
|
66
|
+
}>;
|
|
67
|
+
/**
|
|
68
|
+
* File manager callbacks used by run_backoffice_validation to resolve a
|
|
69
|
+
* download URL for each file. Required when the agent triggers backoffice
|
|
70
|
+
* validation; can be omitted if that phase is never invoked.
|
|
71
|
+
*/
|
|
72
|
+
file_manager?: import('../../../types/file_manager.js').FileManagerCallbacks;
|
|
73
|
+
/** Activity log callback — receives short, human-readable pipeline events. */
|
|
74
|
+
on_log?: (message: string) => void;
|
|
75
|
+
}
|
|
76
|
+
export interface UseFilePipelineReturn {
|
|
77
|
+
/** Run classification + immediate validation on a file */
|
|
78
|
+
process_file: (item: ContentItem, file_b64: string) => Promise<{
|
|
79
|
+
classification: ClassificationResult | null;
|
|
80
|
+
validation_results: ValidationRuleResult[];
|
|
81
|
+
doc_check: DocCheckData | null;
|
|
82
|
+
ai_result: AiContentResult | null;
|
|
83
|
+
}>;
|
|
84
|
+
/**
|
|
85
|
+
* Extract structured monetary fields (total/date/vendor) from a response
|
|
86
|
+
* file. Returns null when no extraction endpoint is configured or extraction
|
|
87
|
+
* yields nothing — caller treats null as "no fields available". `file_b64`
|
|
88
|
+
* is optional: pass it for fresh uploads where bytes are still in memory;
|
|
89
|
+
* omit it for already-uploaded files (the server resolves bytes by file_id).
|
|
90
|
+
*/
|
|
91
|
+
extract_response_fields: (file_id: string, file_b64: string | null, file_name: string, mime_type: string) => Promise<ExtractedResponseFields | null>;
|
|
92
|
+
/** Run validation rules against text content */
|
|
93
|
+
process_text: (message_id: string, text: string) => Promise<{
|
|
94
|
+
validation_results: ValidationRuleResult[];
|
|
95
|
+
doc_check: DocCheckData | null;
|
|
96
|
+
}>;
|
|
97
|
+
/**
|
|
98
|
+
* Quick heuristic + LLM gate: decides whether a text message is worth
|
|
99
|
+
* running through validation. Returns has_content=false for short or
|
|
100
|
+
* conversational replies (so validation noise stays away from the client).
|
|
101
|
+
*/
|
|
102
|
+
gate_text_content: (text: string) => Promise<{
|
|
103
|
+
has_content: boolean;
|
|
104
|
+
reason: string;
|
|
105
|
+
}>;
|
|
106
|
+
/** Run back-office validation on already-classified files */
|
|
107
|
+
run_backoffice_validation: (items: ContentItem[]) => Promise<Map<string, {
|
|
108
|
+
validation_results: ValidationRuleResult[];
|
|
109
|
+
ai_result: AiContentResult;
|
|
110
|
+
}>>;
|
|
111
|
+
/**
|
|
112
|
+
* Run per-group periodic_coverage rules across already-classified +
|
|
113
|
+
* per-file-validated files. Groups files by classification primary tag
|
|
114
|
+
* (or document_type) and detects coverage gaps against the rule's
|
|
115
|
+
* cadence/alignment using each file's extracted period_start/period_end.
|
|
116
|
+
*/
|
|
117
|
+
run_periodic_coverage_pass: (items: ContentItem[], ctx: import('../../../lib/resolve_variable.js').ResolveContext) => Promise<GroupCoverageResult[]>;
|
|
118
|
+
/** Pipeline status per content_id */
|
|
119
|
+
file_statuses: Map<string, FileStatus>;
|
|
120
|
+
/** Classification results per content_id */
|
|
121
|
+
classification_results: Map<string, ClassificationResult>;
|
|
122
|
+
/** Validation results per content_id */
|
|
123
|
+
validation_results: Map<string, ValidationRuleResult[]>;
|
|
124
|
+
}
|
|
125
|
+
export declare function use_file_pipeline({ classification_api_url, validation_api_url, validation_rules_api_url, content_gate_api_url, response_extraction_api_url, document_types, available_tags, file_manager, on_log, }: UseFilePipelineOptions): UseFilePipelineReturn;
|
|
126
|
+
//# sourceMappingURL=use_file_pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use_file_pipeline.d.ts","sourceRoot":"","sources":["../../../../src/components/thread_form/hooks/use_file_pipeline.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAW,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACxF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAU9E,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,aAAa,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpF;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB;;mFAE+E;IAC/E,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,gDAAgD;IAChD,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC;;;;OAIG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtF;;;;OAIG;IACH,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,gCAAgC,EAAE,oBAAoB,CAAC;IAC7E,8EAA8E;IAC9E,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,YAAY,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;QAC7D,cAAc,EAAE,oBAAoB,GAAG,IAAI,CAAC;QAC5C,kBAAkB,EAAE,oBAAoB,EAAE,CAAC;QAC3C,SAAS,EAAE,YAAY,GAAG,IAAI,CAAC;QAC/B,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;KACnC,CAAC,CAAC;IACH;;;;;;OAMG;IACH,uBAAuB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;IACrJ,gDAAgD;IAChD,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAC1D,kBAAkB,EAAE,oBAAoB,EAAE,CAAC;QAC3C,SAAS,EAAE,YAAY,GAAG,IAAI,CAAC;KAChC,CAAC,CAAC;IACH;;;;OAIG;IACH,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvF,6DAA6D;IAC7D,yBAAyB,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;QACvE,kBAAkB,EAAE,oBAAoB,EAAE,CAAC;QAC3C,SAAS,EAAE,eAAe,CAAC;KAC5B,CAAC,CAAC,CAAC;IACJ;;;;;OAKG;IACH,0BAA0B,EAAE,CAC1B,KAAK,EAAE,WAAW,EAAE,EACpB,GAAG,EAAE,OAAO,kCAAkC,EAAE,cAAc,KAC3D,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACpC,qCAAqC;IACrC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,4CAA4C;IAC5C,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC1D,wCAAwC;IACxC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;CACzD;AAMD,wBAAgB,iBAAiB,CAAC,EAChC,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,cAAc,EACd,cAAc,EACd,YAAY,EACZ,MAAM,GACP,EAAE,sBAAsB,GAAG,qBAAqB,CAizBhD"}
|