hazo_collab_forms 3.1.7 → 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.
Files changed (284) hide show
  1. package/CHANGE_LOG.md +201 -0
  2. package/README.md +3 -0
  3. package/dist/components/clarification/clarification_item_body.d.ts +19 -1
  4. package/dist/components/clarification/clarification_item_body.d.ts.map +1 -1
  5. package/dist/components/clarification/clarification_item_body.js +114 -6
  6. package/dist/components/clarification/clarification_item_body.js.map +1 -1
  7. package/dist/components/clarification/clarification_thread.js +1 -1
  8. package/dist/components/clarification/clarification_thread.js.map +1 -1
  9. package/dist/components/clarification/index.d.ts +2 -0
  10. package/dist/components/clarification/index.d.ts.map +1 -1
  11. package/dist/components/clarification/index.js +1 -0
  12. package/dist/components/clarification/index.js.map +1 -1
  13. package/dist/components/clarification/resolution_status_strip.d.ts +18 -0
  14. package/dist/components/clarification/resolution_status_strip.d.ts.map +1 -0
  15. package/dist/components/clarification/resolution_status_strip.js +20 -0
  16. package/dist/components/clarification/resolution_status_strip.js.map +1 -0
  17. package/dist/components/hazo_fb_form/context.d.ts +1 -1
  18. package/dist/components/hazo_fb_form/context.d.ts.map +1 -1
  19. package/dist/components/hazo_fb_form/hazo_fb_form.d.ts.map +1 -1
  20. package/dist/components/hazo_fb_form/hazo_fb_form.js +330 -113
  21. package/dist/components/hazo_fb_form/hazo_fb_form.js.map +1 -1
  22. package/dist/components/hazo_fb_form/hooks/use_fb_form_state.d.ts +3 -3
  23. package/dist/components/hazo_fb_form/hooks/use_fb_form_state.d.ts.map +1 -1
  24. package/dist/components/hazo_fb_form/hooks/use_fb_form_state.js +339 -46
  25. package/dist/components/hazo_fb_form/hooks/use_fb_form_state.js.map +1 -1
  26. package/dist/components/hazo_fb_form/hooks/use_llm_run.d.ts +3 -1
  27. package/dist/components/hazo_fb_form/hooks/use_llm_run.d.ts.map +1 -1
  28. package/dist/components/hazo_fb_form/hooks/use_llm_run.js +89 -11
  29. package/dist/components/hazo_fb_form/hooks/use_llm_run.js.map +1 -1
  30. package/dist/components/hazo_fb_form/shared/agent_stepper.js +1 -1
  31. package/dist/components/hazo_fb_form/shared/agent_stepper.js.map +1 -1
  32. package/dist/components/hazo_fb_form/shared/file_status_accordion.d.ts +9 -0
  33. package/dist/components/hazo_fb_form/shared/file_status_accordion.d.ts.map +1 -0
  34. package/dist/components/hazo_fb_form/shared/file_status_accordion.js +39 -0
  35. package/dist/components/hazo_fb_form/shared/file_status_accordion.js.map +1 -0
  36. package/dist/components/hazo_fb_form/shared/format.d.ts.map +1 -1
  37. package/dist/components/hazo_fb_form/shared/format.js +8 -3
  38. package/dist/components/hazo_fb_form/shared/format.js.map +1 -1
  39. package/dist/components/hazo_fb_form/shared/send_back_item_card.d.ts +7 -1
  40. package/dist/components/hazo_fb_form/shared/send_back_item_card.d.ts.map +1 -1
  41. package/dist/components/hazo_fb_form/shared/send_back_item_card.js +6 -3
  42. package/dist/components/hazo_fb_form/shared/send_back_item_card.js.map +1 -1
  43. package/dist/components/hazo_fb_form/types.d.ts +3 -1
  44. package/dist/components/hazo_fb_form/types.d.ts.map +1 -1
  45. package/dist/components/hazo_fb_form/views/back_office_view.js +1 -1
  46. package/dist/components/hazo_fb_form/views/back_office_view.js.map +1 -1
  47. package/dist/components/hazo_fb_form/views/clarifications_view.js +2 -2
  48. package/dist/components/hazo_fb_form/views/clarifications_view.js.map +1 -1
  49. package/dist/components/hazo_fb_form/views/front_office_view.d.ts.map +1 -1
  50. package/dist/components/hazo_fb_form/views/front_office_view.js +62 -41
  51. package/dist/components/hazo_fb_form/views/front_office_view.js.map +1 -1
  52. package/dist/components/hazo_fb_form/views/interim_view.js +3 -3
  53. package/dist/components/hazo_fb_form/views/interim_view.js.map +1 -1
  54. package/dist/components/hazo_fb_form/views/review_queue_view.d.ts.map +1 -1
  55. package/dist/components/hazo_fb_form/views/review_queue_view.js +22 -9
  56. package/dist/components/hazo_fb_form/views/review_queue_view.js.map +1 -1
  57. package/dist/components/hazo_validation_rule_editor/components/rule_editor.d.ts.map +1 -1
  58. package/dist/components/hazo_validation_rule_editor/components/rule_editor.js +32 -3
  59. package/dist/components/hazo_validation_rule_editor/components/rule_editor.js.map +1 -1
  60. package/dist/components/hazo_validation_rule_editor/components/variable_chain_input.d.ts +20 -0
  61. package/dist/components/hazo_validation_rule_editor/components/variable_chain_input.d.ts.map +1 -0
  62. package/dist/components/hazo_validation_rule_editor/components/variable_chain_input.js +34 -0
  63. package/dist/components/hazo_validation_rule_editor/components/variable_chain_input.js.map +1 -0
  64. package/dist/components/hazo_validation_rule_editor/context.d.ts +3 -2
  65. package/dist/components/hazo_validation_rule_editor/context.d.ts.map +1 -1
  66. package/dist/components/hazo_validation_rule_editor/context.js +15 -3
  67. package/dist/components/hazo_validation_rule_editor/context.js.map +1 -1
  68. package/dist/components/hazo_validation_rule_editor/types.d.ts +7 -1
  69. package/dist/components/hazo_validation_rule_editor/types.d.ts.map +1 -1
  70. package/dist/components/hazo_validation_rule_editor/validation_rule_editor.d.ts +1 -1
  71. package/dist/components/hazo_validation_rule_editor/validation_rule_editor.d.ts.map +1 -1
  72. package/dist/components/hazo_validation_rule_editor/validation_rule_editor.js +2 -2
  73. package/dist/components/hazo_validation_rule_editor/validation_rule_editor.js.map +1 -1
  74. package/dist/components/index.d.ts +2 -0
  75. package/dist/components/index.d.ts.map +1 -1
  76. package/dist/components/index.js +2 -0
  77. package/dist/components/index.js.map +1 -1
  78. package/dist/components/shared/document_type_editor.d.ts +31 -0
  79. package/dist/components/shared/document_type_editor.d.ts.map +1 -0
  80. package/dist/components/shared/document_type_editor.js +60 -0
  81. package/dist/components/shared/document_type_editor.js.map +1 -0
  82. package/dist/components/shared/file_bar/file_bar.d.ts +7 -1
  83. package/dist/components/shared/file_bar/file_bar.d.ts.map +1 -1
  84. package/dist/components/shared/file_bar/file_bar.js +5 -3
  85. package/dist/components/shared/file_bar/file_bar.js.map +1 -1
  86. package/dist/components/shared/file_bar/file_bar_validation_dialog.js +4 -4
  87. package/dist/components/shared/file_bar/file_bar_validation_dialog.js.map +1 -1
  88. package/dist/components/shared/file_status_icon.d.ts +23 -0
  89. package/dist/components/shared/file_status_icon.d.ts.map +1 -0
  90. package/dist/components/shared/file_status_icon.js +38 -0
  91. package/dist/components/shared/file_status_icon.js.map +1 -0
  92. package/dist/components/shared/json_data_panel/json_data_panel.d.ts +1 -1
  93. package/dist/components/shared/json_data_panel/json_data_panel.d.ts.map +1 -1
  94. package/dist/components/shared/json_data_panel/json_data_panel.js +27 -2
  95. package/dist/components/shared/json_data_panel/json_data_panel.js.map +1 -1
  96. package/dist/components/shared/rule_result_card.d.ts.map +1 -1
  97. package/dist/components/shared/rule_result_card.js +5 -4
  98. package/dist/components/shared/rule_result_card.js.map +1 -1
  99. package/dist/components/thread_form/components/add_question_dialog.d.ts +12 -0
  100. package/dist/components/thread_form/components/add_question_dialog.d.ts.map +1 -0
  101. package/dist/components/thread_form/components/add_question_dialog.js +36 -0
  102. package/dist/components/thread_form/components/add_question_dialog.js.map +1 -0
  103. package/dist/components/thread_form/components/agent_compose_dialog.d.ts +30 -0
  104. package/dist/components/thread_form/components/agent_compose_dialog.d.ts.map +1 -0
  105. package/dist/components/thread_form/components/agent_compose_dialog.js +45 -0
  106. package/dist/components/thread_form/components/agent_compose_dialog.js.map +1 -0
  107. package/dist/components/thread_form/components/clarification.d.ts +14 -0
  108. package/dist/components/thread_form/components/clarification.d.ts.map +1 -0
  109. package/dist/components/thread_form/components/clarification.js +12 -0
  110. package/dist/components/thread_form/components/clarification.js.map +1 -0
  111. package/dist/components/thread_form/components/collected_data_view.d.ts +15 -0
  112. package/dist/components/thread_form/components/collected_data_view.d.ts.map +1 -0
  113. package/dist/components/thread_form/components/collected_data_view.js +121 -0
  114. package/dist/components/thread_form/components/collected_data_view.js.map +1 -0
  115. package/dist/components/thread_form/components/coverage_card.d.ts +11 -0
  116. package/dist/components/thread_form/components/coverage_card.d.ts.map +1 -0
  117. package/dist/components/thread_form/components/coverage_card.js +60 -0
  118. package/dist/components/thread_form/components/coverage_card.js.map +1 -0
  119. package/dist/components/thread_form/components/file_bar.d.ts +93 -0
  120. package/dist/components/thread_form/components/file_bar.d.ts.map +1 -0
  121. package/dist/components/thread_form/components/file_bar.js +251 -0
  122. package/dist/components/thread_form/components/file_bar.js.map +1 -0
  123. package/dist/components/thread_form/components/file_info_dialog.d.ts +15 -0
  124. package/dist/components/thread_form/components/file_info_dialog.d.ts.map +1 -0
  125. package/dist/components/thread_form/components/file_info_dialog.js +64 -0
  126. package/dist/components/thread_form/components/file_info_dialog.js.map +1 -0
  127. package/dist/components/thread_form/components/issue_group_tree.d.ts +20 -0
  128. package/dist/components/thread_form/components/issue_group_tree.d.ts.map +1 -0
  129. package/dist/components/thread_form/components/issue_group_tree.js +164 -0
  130. package/dist/components/thread_form/components/issue_group_tree.js.map +1 -0
  131. package/dist/components/thread_form/components/pdf_side_panel.d.ts +20 -0
  132. package/dist/components/thread_form/components/pdf_side_panel.d.ts.map +1 -0
  133. package/dist/components/thread_form/components/pdf_side_panel.js +63 -0
  134. package/dist/components/thread_form/components/pdf_side_panel.js.map +1 -0
  135. package/dist/components/thread_form/components/rule_decision_row.d.ts +31 -0
  136. package/dist/components/thread_form/components/rule_decision_row.d.ts.map +1 -0
  137. package/dist/components/thread_form/components/rule_decision_row.js +20 -0
  138. package/dist/components/thread_form/components/rule_decision_row.js.map +1 -0
  139. package/dist/components/thread_form/components/send_back_message.d.ts +32 -0
  140. package/dist/components/thread_form/components/send_back_message.d.ts.map +1 -0
  141. package/dist/components/thread_form/components/send_back_message.js +82 -0
  142. package/dist/components/thread_form/components/send_back_message.js.map +1 -0
  143. package/dist/components/thread_form/components/shared.d.ts +54 -0
  144. package/dist/components/thread_form/components/shared.d.ts.map +1 -0
  145. package/dist/components/thread_form/components/shared.js +136 -0
  146. package/dist/components/thread_form/components/shared.js.map +1 -0
  147. package/dist/components/thread_form/components/task_card.d.ts +90 -0
  148. package/dist/components/thread_form/components/task_card.d.ts.map +1 -0
  149. package/dist/components/thread_form/components/task_card.js +63 -0
  150. package/dist/components/thread_form/components/task_card.js.map +1 -0
  151. package/dist/components/thread_form/components/text_doc_check.d.ts +15 -0
  152. package/dist/components/thread_form/components/text_doc_check.d.ts.map +1 -0
  153. package/dist/components/thread_form/components/text_doc_check.js +16 -0
  154. package/dist/components/thread_form/components/text_doc_check.js.map +1 -0
  155. package/dist/components/thread_form/components/text_extraction.d.ts +14 -0
  156. package/dist/components/thread_form/components/text_extraction.d.ts.map +1 -0
  157. package/dist/components/thread_form/components/text_extraction.js +16 -0
  158. package/dist/components/thread_form/components/text_extraction.js.map +1 -0
  159. package/dist/components/thread_form/components/thread_composer.d.ts +15 -0
  160. package/dist/components/thread_form/components/thread_composer.d.ts.map +1 -0
  161. package/dist/components/thread_form/components/thread_composer.js +93 -0
  162. package/dist/components/thread_form/components/thread_composer.js.map +1 -0
  163. package/dist/components/thread_form/components/thread_timeline.d.ts +65 -0
  164. package/dist/components/thread_form/components/thread_timeline.d.ts.map +1 -0
  165. package/dist/components/thread_form/components/thread_timeline.js +225 -0
  166. package/dist/components/thread_form/components/thread_timeline.js.map +1 -0
  167. package/dist/components/thread_form/hooks/use_file_pipeline.d.ts +126 -0
  168. package/dist/components/thread_form/hooks/use_file_pipeline.d.ts.map +1 -0
  169. package/dist/components/thread_form/hooks/use_file_pipeline.js +760 -0
  170. package/dist/components/thread_form/hooks/use_file_pipeline.js.map +1 -0
  171. package/dist/components/thread_form/hooks/use_thread_form.d.ts +36 -0
  172. package/dist/components/thread_form/hooks/use_thread_form.d.ts.map +1 -0
  173. package/dist/components/thread_form/hooks/use_thread_form.js +126 -0
  174. package/dist/components/thread_form/hooks/use_thread_form.js.map +1 -0
  175. package/dist/components/thread_form/index.d.ts +33 -0
  176. package/dist/components/thread_form/index.d.ts.map +1 -0
  177. package/dist/components/thread_form/index.js +30 -0
  178. package/dist/components/thread_form/index.js.map +1 -0
  179. package/dist/components/thread_form/sample_data.d.ts +8 -0
  180. package/dist/components/thread_form/sample_data.d.ts.map +1 -0
  181. package/dist/components/thread_form/sample_data.js +658 -0
  182. package/dist/components/thread_form/sample_data.js.map +1 -0
  183. package/dist/components/thread_form/thread_form.d.ts +7 -0
  184. package/dist/components/thread_form/thread_form.d.ts.map +1 -0
  185. package/dist/components/thread_form/thread_form.js +1385 -0
  186. package/dist/components/thread_form/thread_form.js.map +1 -0
  187. package/dist/components/thread_form/types.d.ts +402 -0
  188. package/dist/components/thread_form/types.d.ts.map +1 -0
  189. package/dist/components/thread_form/types.js +23 -0
  190. package/dist/components/thread_form/types.js.map +1 -0
  191. package/dist/components/thread_form/utils/file_decision_state.d.ts +22 -0
  192. package/dist/components/thread_form/utils/file_decision_state.d.ts.map +1 -0
  193. package/dist/components/thread_form/utils/file_decision_state.js +37 -0
  194. package/dist/components/thread_form/utils/file_decision_state.js.map +1 -0
  195. package/dist/components/thread_form/utils/merge_send_back.d.ts +13 -0
  196. package/dist/components/thread_form/utils/merge_send_back.d.ts.map +1 -0
  197. package/dist/components/thread_form/utils/merge_send_back.js +23 -0
  198. package/dist/components/thread_form/utils/merge_send_back.js.map +1 -0
  199. package/dist/lib/autofill_handler.d.ts.map +1 -1
  200. package/dist/lib/autofill_handler.js +5 -44
  201. package/dist/lib/autofill_handler.js.map +1 -1
  202. package/dist/lib/classification_handler.d.ts +105 -0
  203. package/dist/lib/classification_handler.d.ts.map +1 -0
  204. package/dist/lib/classification_handler.js +342 -0
  205. package/dist/lib/classification_handler.js.map +1 -0
  206. package/dist/lib/content_gate_handler.d.ts +37 -0
  207. package/dist/lib/content_gate_handler.d.ts.map +1 -0
  208. package/dist/lib/content_gate_handler.js +126 -0
  209. package/dist/lib/content_gate_handler.js.map +1 -0
  210. package/dist/lib/index.d.ts +10 -0
  211. package/dist/lib/index.d.ts.map +1 -1
  212. package/dist/lib/index.js +5 -0
  213. package/dist/lib/index.js.map +1 -1
  214. package/dist/lib/periodic_coverage_runner.d.ts +24 -0
  215. package/dist/lib/periodic_coverage_runner.d.ts.map +1 -0
  216. package/dist/lib/periodic_coverage_runner.js +121 -0
  217. package/dist/lib/periodic_coverage_runner.js.map +1 -0
  218. package/dist/lib/resolution_handler.d.ts +150 -0
  219. package/dist/lib/resolution_handler.d.ts.map +1 -0
  220. package/dist/lib/resolution_handler.js +597 -0
  221. package/dist/lib/resolution_handler.js.map +1 -0
  222. package/dist/lib/resolve_variable.d.ts +25 -0
  223. package/dist/lib/resolve_variable.d.ts.map +1 -0
  224. package/dist/lib/resolve_variable.js +77 -0
  225. package/dist/lib/resolve_variable.js.map +1 -0
  226. package/dist/lib/validation_handler.d.ts +27 -3
  227. package/dist/lib/validation_handler.d.ts.map +1 -1
  228. package/dist/lib/validation_handler.js +338 -288
  229. package/dist/lib/validation_handler.js.map +1 -1
  230. package/dist/types/clarification.d.ts +54 -0
  231. package/dist/types/clarification.d.ts.map +1 -1
  232. package/dist/types/fb_form_data.d.ts +273 -123
  233. package/dist/types/fb_form_data.d.ts.map +1 -1
  234. package/dist/types/fb_form_data.js +44 -58
  235. package/dist/types/fb_form_data.js.map +1 -1
  236. package/dist/types/fb_form_data_v1.d.ts +250 -0
  237. package/dist/types/fb_form_data_v1.d.ts.map +1 -0
  238. package/dist/types/fb_form_data_v1.js +117 -0
  239. package/dist/types/fb_form_data_v1.js.map +1 -0
  240. package/dist/types/fb_form_instance.d.ts +1 -1
  241. package/dist/types/fb_form_instance.d.ts.map +1 -1
  242. package/dist/types/index.d.ts +5 -3
  243. package/dist/types/index.d.ts.map +1 -1
  244. package/dist/types/index.js +2 -1
  245. package/dist/types/index.js.map +1 -1
  246. package/dist/types/validation.d.ts +134 -12
  247. package/dist/types/validation.d.ts.map +1 -1
  248. package/dist/utils/expectation_extractor.d.ts +31 -0
  249. package/dist/utils/expectation_extractor.d.ts.map +1 -0
  250. package/dist/utils/expectation_extractor.js +142 -0
  251. package/dist/utils/expectation_extractor.js.map +1 -0
  252. package/dist/utils/fb_data_adapter.d.ts +7 -2
  253. package/dist/utils/fb_data_adapter.d.ts.map +1 -1
  254. package/dist/utils/fb_data_adapter.js +58 -7
  255. package/dist/utils/fb_data_adapter.js.map +1 -1
  256. package/dist/utils/fb_data_adapter_v2.d.ts +17 -0
  257. package/dist/utils/fb_data_adapter_v2.d.ts.map +1 -0
  258. package/dist/utils/fb_data_adapter_v2.js +483 -0
  259. package/dist/utils/fb_data_adapter_v2.js.map +1 -0
  260. package/dist/utils/fb_data_helpers.d.ts +1 -1
  261. package/dist/utils/fb_data_helpers.d.ts.map +1 -1
  262. package/dist/utils/fb_data_mutations.d.ts +1 -1
  263. package/dist/utils/fb_data_mutations.d.ts.map +1 -1
  264. package/dist/utils/fb_data_mutations_v2.d.ts +46 -0
  265. package/dist/utils/fb_data_mutations_v2.d.ts.map +1 -0
  266. package/dist/utils/fb_data_mutations_v2.js +341 -0
  267. package/dist/utils/fb_data_mutations_v2.js.map +1 -0
  268. package/dist/utils/fb_data_queries.d.ts +81 -0
  269. package/dist/utils/fb_data_queries.d.ts.map +1 -0
  270. package/dist/utils/fb_data_queries.js +354 -0
  271. package/dist/utils/fb_data_queries.js.map +1 -0
  272. package/dist/utils/index.d.ts +4 -0
  273. package/dist/utils/index.d.ts.map +1 -1
  274. package/dist/utils/index.js +6 -0
  275. package/dist/utils/index.js.map +1 -1
  276. package/dist/utils/issue_bucketing.d.ts +36 -0
  277. package/dist/utils/issue_bucketing.d.ts.map +1 -0
  278. package/dist/utils/issue_bucketing.js +107 -0
  279. package/dist/utils/issue_bucketing.js.map +1 -0
  280. package/dist/utils/validation_result.d.ts +32 -0
  281. package/dist/utils/validation_result.d.ts.map +1 -0
  282. package/dist/utils/validation_result.js +55 -0
  283. package/dist/utils/validation_result.js.map +1 -0
  284. package/package.json +16 -4
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Shared primitives for ThreadForm components.
3
+ * Utility functions, avatar, status badge, icons, and constants.
4
+ */
5
+ import type { ThreadMessage, AiContentResult, DocCheckData } from '../types.js';
6
+ export declare function cn(...classes: (string | false | undefined | null)[]): string;
7
+ export declare function format_time(iso: string): string;
8
+ export declare function format_date(iso: string): string;
9
+ export declare function format_relative(iso: string): string;
10
+ export declare const MSG_BG: Record<string, string>;
11
+ export declare const STATUS_CONFIG: Record<string, {
12
+ label: string;
13
+ color: string;
14
+ bg: string;
15
+ }>;
16
+ export declare function RoleAvatar({ role, name, size }: {
17
+ role: string;
18
+ name?: string;
19
+ size?: 'sm' | 'md';
20
+ }): import("react/jsx-runtime").JSX.Element;
21
+ export declare function StatusBadge({ status }: {
22
+ status: string;
23
+ }): import("react/jsx-runtime").JSX.Element;
24
+ export declare function PdfIcon({ className }: {
25
+ className?: string;
26
+ }): import("react/jsx-runtime").JSX.Element;
27
+ export declare function WarningIcon({ className }: {
28
+ className?: string;
29
+ }): import("react/jsx-runtime").JSX.Element;
30
+ export declare function DocumentIcon({ className }: {
31
+ className?: string;
32
+ }): import("react/jsx-runtime").JSX.Element;
33
+ export declare function LightbulbIcon({ className }: {
34
+ className?: string;
35
+ }): import("react/jsx-runtime").JSX.Element;
36
+ /** Build lookup: content_id → AiContentResult from all ai_analysis messages */
37
+ export declare function build_ai_lookup(messages: ThreadMessage[]): Map<string, AiContentResult>;
38
+ /**
39
+ * Find the latest doc check for a content_id (file-based). Walks the messages
40
+ * in reverse so a later verdict (e.g. the aggregate sum_match resolver)
41
+ * overrides an earlier per-file "passed" emitted by the upload pipeline.
42
+ */
43
+ export declare function find_doc_check(messages: ThreadMessage[], content_id: string): DocCheckData | null;
44
+ /** Find text-based doc checks that reference a message_id */
45
+ export declare function find_text_doc_checks(messages: ThreadMessage[], message_id: string): ThreadMessage[];
46
+ /**
47
+ * Group messages for timeline rendering.
48
+ * Each user message (comment, content) is its own group/panel.
49
+ * Consecutive send_back messages that share the same source_content_id are
50
+ * merged into a single group so the file row renders once with N stacked
51
+ * ACTION REQUIRED boxes (one per rule) — avoids N separate panels.
52
+ */
53
+ export declare function group_messages(messages: ThreadMessage[], role: 'agent' | 'client'): ThreadMessage[][];
54
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/components/thread_form/components/shared.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhF,wBAAgB,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,UAEnE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,UAItC;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,UAEtC;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,UAS1C;AAMD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIzC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAKtF,CAAC;AAYF,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAW,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,2CAQ1G;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,2CAGzD;AAED,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAM5D;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAMhE;AAED,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAMjE;AAED,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAMlE;AAMD,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAUvF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAQjG;AAED,6DAA6D;AAC7D,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,EAAE,CAInG;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,aAAa,EAAE,EAAE,CAkBrG"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Shared primitives for ThreadForm components.
3
+ * Utility functions, avatar, status badge, icons, and constants.
4
+ */
5
+ 'use client';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ // ============================================================================
8
+ // Utility
9
+ // ============================================================================
10
+ export function cn(...classes) {
11
+ return classes.filter(Boolean).join(' ');
12
+ }
13
+ export function format_time(iso) {
14
+ const d = new Date(iso);
15
+ return d.toLocaleDateString('en-AU', { month: 'short', day: 'numeric' }) +
16
+ ', ' + d.toLocaleTimeString('en-AU', { hour: 'numeric', minute: '2-digit', hour12: true });
17
+ }
18
+ export function format_date(iso) {
19
+ return new Date(iso).toLocaleDateString('en-AU', { month: 'short', day: 'numeric' });
20
+ }
21
+ export function format_relative(iso) {
22
+ const d = new Date(iso);
23
+ const now = new Date();
24
+ const diff = now.getTime() - d.getTime();
25
+ const days = Math.floor(diff / 86400000);
26
+ if (days === 0)
27
+ return 'Today';
28
+ if (days === 1)
29
+ return 'Yesterday';
30
+ if (days < 7)
31
+ return `${days}d ago`;
32
+ return d.toLocaleDateString('en-AU', { month: 'short', day: 'numeric' });
33
+ }
34
+ // ============================================================================
35
+ // Constants
36
+ // ============================================================================
37
+ export const MSG_BG = {
38
+ agent: 'bg-[#F0F4FF] border-[#DDE4F0]',
39
+ client: 'bg-[#F0FAF4] border-[#D5EBE0]',
40
+ system: 'bg-[#F8F8F8] border-[#EBEBEB]',
41
+ };
42
+ export const STATUS_CONFIG = {
43
+ pending: { label: 'Pending', color: 'text-gray-500', bg: 'bg-gray-100' },
44
+ in_progress: { label: 'In Progress', color: 'text-blue-600', bg: 'bg-blue-50' },
45
+ completed: { label: 'Completed', color: 'text-green-600', bg: 'bg-green-50' },
46
+ needs_attention: { label: 'Needs Attention', color: 'text-amber-600', bg: 'bg-amber-50' },
47
+ };
48
+ const ROLE_AVATAR_BG = {
49
+ agent: 'bg-[#1E3A5F]',
50
+ client: 'bg-[#059669]',
51
+ system: 'bg-[#94A3B8]',
52
+ };
53
+ // ============================================================================
54
+ // Components
55
+ // ============================================================================
56
+ export function RoleAvatar({ role, name, size = 'sm' }) {
57
+ const initial = name ? name[0].toUpperCase() : '?';
58
+ const sz = size === 'sm' ? 'w-6 h-6 text-[10px]' : 'w-8 h-8 text-xs';
59
+ return (_jsx("div", { className: cn('rounded-full flex items-center justify-center text-white font-bold flex-shrink-0', sz, ROLE_AVATAR_BG[role] || 'bg-[#94A3B8]'), children: initial }));
60
+ }
61
+ export function StatusBadge({ status }) {
62
+ const cfg = STATUS_CONFIG[status] || STATUS_CONFIG.pending;
63
+ return _jsx("span", { className: cn('text-xs font-medium px-2 py-0.5 rounded-full', cfg.color, cfg.bg), children: cfg.label });
64
+ }
65
+ export function PdfIcon({ className }) {
66
+ return (_jsx("svg", { className: cn('w-4 h-4 text-red-500 flex-shrink-0', className), fill: "currentColor", viewBox: "0 0 20 20", children: _jsx("path", { d: "M4 18h12a2 2 0 002-2V6l-4-4H4a2 2 0 00-2 2v12a2 2 0 002 2zm8-14l4 4h-4V4z" }) }));
67
+ }
68
+ export function WarningIcon({ className }) {
69
+ return (_jsx("svg", { className: cn('w-4 h-4 text-amber-500 flex-shrink-0', className), fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z" }) }));
70
+ }
71
+ export function DocumentIcon({ className }) {
72
+ return (_jsx("svg", { className: cn('w-3.5 h-3.5 text-[#64748B]', className), fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" }) }));
73
+ }
74
+ export function LightbulbIcon({ className }) {
75
+ return (_jsx("svg", { className: cn('w-3 h-3 text-[#6366F1]', className), fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z" }) }));
76
+ }
77
+ // ============================================================================
78
+ // Data lookup helpers
79
+ // ============================================================================
80
+ /** Build lookup: content_id → AiContentResult from all ai_analysis messages */
81
+ export function build_ai_lookup(messages) {
82
+ const map = new Map();
83
+ for (const msg of messages) {
84
+ if (msg.type === 'ai_analysis' && msg.ai_analysis) {
85
+ for (const item of msg.ai_analysis.items) {
86
+ map.set(item.content_ref, item);
87
+ }
88
+ }
89
+ }
90
+ return map;
91
+ }
92
+ /**
93
+ * Find the latest doc check for a content_id (file-based). Walks the messages
94
+ * in reverse so a later verdict (e.g. the aggregate sum_match resolver)
95
+ * overrides an earlier per-file "passed" emitted by the upload pipeline.
96
+ */
97
+ export function find_doc_check(messages, content_id) {
98
+ for (let i = messages.length - 1; i >= 0; i--) {
99
+ const m = messages[i];
100
+ if (m.type === 'doc_check' && m.doc_check?.content_ref === content_id) {
101
+ return m.doc_check;
102
+ }
103
+ }
104
+ return null;
105
+ }
106
+ /** Find text-based doc checks that reference a message_id */
107
+ export function find_text_doc_checks(messages, message_id) {
108
+ return messages.filter(m => m.type === 'doc_check' && m.doc_check?.content_ref === message_id && m.doc_check?.source_type === 'text');
109
+ }
110
+ /**
111
+ * Group messages for timeline rendering.
112
+ * Each user message (comment, content) is its own group/panel.
113
+ * Consecutive send_back messages that share the same source_content_id are
114
+ * merged into a single group so the file row renders once with N stacked
115
+ * ACTION REQUIRED boxes (one per rule) — avoids N separate panels.
116
+ */
117
+ export function group_messages(messages, role) {
118
+ const visible = messages.filter(m => !(role === 'client' && m.visibility === 'agent_only'));
119
+ const groups = [];
120
+ for (const msg of visible) {
121
+ const last = groups[groups.length - 1];
122
+ const last_msg = last?.[last.length - 1];
123
+ const can_merge = last_msg &&
124
+ last_msg.type === 'send_back' &&
125
+ msg.type === 'send_back' &&
126
+ last_msg.send_back?.source_content_id === msg.send_back?.source_content_id;
127
+ if (can_merge) {
128
+ last.push(msg);
129
+ }
130
+ else {
131
+ groups.push([msg]);
132
+ }
133
+ }
134
+ return groups;
135
+ }
136
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/components/thread_form/components/shared.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Task card — expandable card with checkbox, title, status, thread timeline.
3
+ */
4
+ import type { ThreadTask } from '../types.js';
5
+ /**
6
+ * Back-reference from a spawned clarification task to the file+issue it came
7
+ * from. Rendered as an inline chip under the child task title; click scrolls
8
+ * to and expands the parent task.
9
+ */
10
+ export interface TaskParentRef {
11
+ parent_task_id: string;
12
+ parent_question_number: number;
13
+ file_name?: string;
14
+ /** One rule name per issue; the chip shows the first and counts the rest. */
15
+ rule_names: string[];
16
+ }
17
+ export interface TaskCardProps {
18
+ task: ThreadTask;
19
+ role: 'agent' | 'client';
20
+ expanded: boolean;
21
+ /** 1-based number shown as a Q{n} pill before the title. */
22
+ question_number?: number;
23
+ /** When set, renders a back-reference chip under the title. */
24
+ parent_ref?: TaskParentRef | null;
25
+ /** Called when the parent-ref chip is clicked — consumer expands + scrolls. */
26
+ on_navigate_to_task?: (task_id: string) => void;
27
+ user_name?: string;
28
+ user_id?: string;
29
+ on_toggle: () => void;
30
+ on_toggle_complete?: (task_id: string) => void;
31
+ on_delete_task?: (task_id: string) => void;
32
+ on_approve_task?: (task_id: string) => void;
33
+ on_reopen_task?: (task_id: string) => void;
34
+ /** Agent-only: rename the task title. Omit to hide the edit affordance. */
35
+ on_rename_task?: (task_id: string, title: string) => void;
36
+ on_send?: (task_id: string, text: string, files: File[]) => void;
37
+ on_send_comment?: (task_id: string, text: string) => void;
38
+ on_upload_files?: (task_id: string, files: File[]) => void;
39
+ on_add_question?: (task_id: string) => void;
40
+ on_view_file?: (item: import('../types.js').ContentItem) => void;
41
+ on_remove_file?: (item: import('../types.js').ContentItem) => void;
42
+ on_accept?: (content_ref: string) => void;
43
+ on_dismiss?: (content_ref: string) => void;
44
+ on_send_to_client?: (content_ref: string) => void;
45
+ on_edit_message?: (task_id: string, message_id: string, updated: {
46
+ content_text?: string;
47
+ content_items?: import('../types.js').ContentItem[];
48
+ }) => void;
49
+ on_delete_message?: (task_id: string, message_id: string) => void;
50
+ /** Upload a file via file_manager, returns ContentItem with real file_id */
51
+ upload_file?: (file: File) => Promise<import('../types.js').ContentItem>;
52
+ /** Agent sends back selected issues as a new task */
53
+ on_send_back_issues?: (item: import('../types.js').ContentItem, issues: import('../types.js').SendBackIssue[], accepted_issue_keys: string[]) => void;
54
+ /** Agent submits batch decisions from the Pending Review panel */
55
+ on_submit_decisions?: (item: import('../types.js').ContentItem, decisions: import('../types.js').RuleDecision[]) => void;
56
+ /** Persist updates to a ContentItem */
57
+ on_update_content_item?: (content_id: string, updates: Partial<import('../types.js').ContentItem>) => void;
58
+ /** Pipeline file statuses */
59
+ file_statuses?: Map<string, 'queued' | 'classifying' | 'validating' | 'done' | 'error'>;
60
+ /** Classification results per content_id */
61
+ classification_results?: Map<string, import('../types.js').ClassificationResult>;
62
+ /** Validation results per content_id */
63
+ validation_results?: Map<string, import('../../../types/validation.js').ValidationRuleResult[]>;
64
+ /** File manager callbacks for upload in clarification response dropzone */
65
+ file_manager?: import('../../../types/file_manager.js').FileManagerCallbacks;
66
+ /** Callback when replacement files are submitted from a clarification response */
67
+ on_replacement_files?: (source_content_id: string, files: import('../../../types/file_attachment.js').FormFileAttachment[]) => void;
68
+ /** View action rendering — 'icon' (default) or 'text'. Forwarded to FileBar. */
69
+ view_button_variant?: 'icon' | 'text';
70
+ /** Override info-icon visibility. When omitted, defaults to agent-only. Forwarded to FileBar. */
71
+ show_info_icon?: boolean;
72
+ /**
73
+ * Set of source_content_ids whose spawned send-back task is now resolved.
74
+ * Used by FileBar to suppress the "Sent Back" pill on the parent file once
75
+ * the child question has been completed.
76
+ */
77
+ sent_back_resolved_ids?: Set<string>;
78
+ /** True while the aggregate resolver is in-flight for this task. */
79
+ resolving?: boolean;
80
+ /** Available document types — forwarded to FileBar's hover-pencil editor. */
81
+ available_document_types?: import('../../shared/document_type_editor.js').DocumentTypeOption[];
82
+ /** Called when the agent edits a file's document type — parent re-runs validation. */
83
+ on_change_document_type?: (item: import('../types.js').ContentItem, new_type_id: string) => Promise<void> | void;
84
+ /** Map of content_id → effective Keep state. Forwarded to ThreadTimeline → FileBar. */
85
+ keep_selections?: Record<string, boolean>;
86
+ /** Toggle handler for the Keep checkbox. */
87
+ on_keep_change?: (selections: Record<string, boolean>) => void;
88
+ }
89
+ export declare function TaskCard({ task, role, expanded, question_number, parent_ref, on_navigate_to_task, user_name, user_id, on_toggle, on_toggle_complete, on_delete_task, on_approve_task, on_reopen_task, on_rename_task, on_send, on_send_comment, on_upload_files, on_add_question, 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, 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, }: TaskCardProps): import("react/jsx-runtime").JSX.Element;
90
+ //# sourceMappingURL=task_card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task_card.d.ts","sourceRoot":"","sources":["../../../../src/components/thread_form/components/task_card.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Task card — expandable card with checkbox, title, status, thread timeline.
3
+ */
4
+ 'use client';
5
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
6
+ import { useState } from 'react';
7
+ import { cn, format_date } from './shared.js';
8
+ import { ThreadTimeline } from './thread_timeline.js';
9
+ import { ThreadComposer } from './thread_composer.js';
10
+ import { CoverageCard } from './coverage_card.js';
11
+ /**
12
+ * Shorten a filename for the back-reference chip so it doesn't dominate the
13
+ * row. Keeps the head and extension, elides the middle.
14
+ */
15
+ function format_ref_file_name(name, max = 32) {
16
+ if (name.length <= max)
17
+ return name;
18
+ const dot = name.lastIndexOf('.');
19
+ if (dot <= 0 || dot > name.length - 2)
20
+ return name.slice(0, max - 1) + '…';
21
+ const ext = name.slice(dot);
22
+ const head = name.slice(0, Math.max(1, max - ext.length - 1));
23
+ return `${head}…${ext}`;
24
+ }
25
+ export function TaskCard({ task, role, expanded, question_number, parent_ref, on_navigate_to_task, user_name, user_id, on_toggle, on_toggle_complete, on_delete_task, on_approve_task, on_reopen_task, on_rename_task, on_send, on_send_comment, on_upload_files, on_add_question, 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, 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, }) {
26
+ const file_count = task.thread.reduce((acc, m) => acc + (m.content_items?.filter(i => i.type === 'file').length || 0), 0);
27
+ const msg_count = task.thread.filter(m => m.type === 'comment' || m.type === 'clarification').length;
28
+ const [editing_title, set_editing_title] = useState(false);
29
+ const [draft_title, set_draft_title] = useState(task.title);
30
+ const can_rename = role === 'agent' && !!on_rename_task && task.status !== 'completed';
31
+ const start_rename = () => {
32
+ set_draft_title(task.title);
33
+ set_editing_title(true);
34
+ };
35
+ const commit_rename = () => {
36
+ const trimmed = draft_title.trim();
37
+ if (trimmed && trimmed !== task.title)
38
+ on_rename_task?.(task.task_id, trimmed);
39
+ set_editing_title(false);
40
+ };
41
+ const cancel_rename = () => {
42
+ set_draft_title(task.title);
43
+ set_editing_title(false);
44
+ };
45
+ return (_jsxs("div", { id: `task-${task.task_id}`, className: cn('transition-all border-b border-[#E2E8F0] group/task rounded'), children: [_jsxs("button", { onClick: on_toggle, className: "w-full flex items-center gap-3 text-left py-3", children: [_jsx("div", { onClick: (e) => { e.stopPropagation(); on_toggle_complete?.(task.task_id); }, className: cn('w-5 h-5 rounded-sm flex items-center justify-center flex-shrink-0 cursor-pointer', task.status === 'completed' ? 'bg-[#059669] text-white' : 'border border-[#CBD5E1]'), children: task.status === 'completed' && _jsx("span", { className: "text-xs", children: "\u2713" }) }), _jsx("div", { className: "flex-1 min-w-0 flex items-center gap-2 group/title", children: editing_title ? (_jsxs(_Fragment, { children: [_jsx("input", { autoFocus: true, value: draft_title, onChange: (e) => set_draft_title(e.target.value), onClick: (e) => e.stopPropagation(), onMouseDown: (e) => e.stopPropagation(), onKeyDown: (e) => {
46
+ e.stopPropagation();
47
+ if (e.key === 'Enter') {
48
+ e.preventDefault();
49
+ commit_rename();
50
+ }
51
+ if (e.key === 'Escape') {
52
+ e.preventDefault();
53
+ cancel_rename();
54
+ }
55
+ }, onBlur: commit_rename, className: "flex-1 min-w-0 text-[13px] font-medium text-gray-900 border border-[#2563EB] rounded px-2 py-0.5 outline-none focus:ring-2 focus:ring-[#2563EB]/20" }), _jsx("div", { role: "button", tabIndex: 0, onClick: (e) => { e.stopPropagation(); commit_rename(); }, onMouseDown: (e) => e.stopPropagation(), className: "p-1 text-[#059669] hover:bg-green-50 rounded cursor-pointer flex-shrink-0", title: "Save", 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: "M5 13l4 4L19 7" }) }) }), _jsx("div", { role: "button", tabIndex: 0, onClick: (e) => { e.stopPropagation(); cancel_rename(); }, onMouseDown: (e) => e.stopPropagation(), className: "p-1 text-[#EF4444] hover:bg-red-50 rounded cursor-pointer flex-shrink-0", title: "Cancel", 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" }) }) })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2", children: [typeof question_number === 'number' && (_jsxs("span", { className: "inline-flex items-center text-[10px] font-semibold text-[#64748B] bg-[#F1F5F9] px-1.5 py-0.5 rounded flex-shrink-0", "aria-label": `Question ${question_number}`, children: ["Q", question_number] })), _jsx("span", { className: cn('text-[13px] font-medium truncate', task.status === 'completed' ? 'line-through text-gray-400' : 'text-gray-900'), children: task.title })] }), parent_ref && (_jsxs("span", { role: "button", tabIndex: 0, onClick: (e) => { e.stopPropagation(); on_navigate_to_task?.(parent_ref.parent_task_id); }, onMouseDown: (e) => e.stopPropagation(), onKeyDown: (e) => {
56
+ if (e.key === 'Enter' || e.key === ' ') {
57
+ e.preventDefault();
58
+ e.stopPropagation();
59
+ on_navigate_to_task?.(parent_ref.parent_task_id);
60
+ }
61
+ }, className: "mt-1 inline-flex items-center gap-1.5 max-w-full text-[11px] text-[#64748B] hover:text-[#0369A1] transition-colors cursor-pointer", title: `Go to Q${parent_ref.parent_question_number}`, children: [_jsxs("svg", { className: "w-3 h-3 flex-shrink-0", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" }), _jsx("path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" })] }), _jsxs("span", { className: "truncate", children: ["From ", _jsxs("span", { className: "font-medium text-[#334155]", children: ["Q", parent_ref.parent_question_number] }), parent_ref.file_name && (_jsxs(_Fragment, { children: [" \u00B7 ", _jsx("span", { className: "truncate", children: format_ref_file_name(parent_ref.file_name) })] })), parent_ref.rule_names.length > 0 && (_jsxs(_Fragment, { children: [" \u00B7 ", _jsx("span", { className: "font-medium text-[#334155]", children: parent_ref.rule_names[0] }), parent_ref.rule_names.length > 1 && _jsxs("span", { className: "text-[#94A3B8]", children: [" +", parent_ref.rule_names.length - 1] })] }))] })] })), !expanded && !parent_ref && (_jsxs("p", { className: "text-xs text-gray-400 truncate mt-0.5", children: [msg_count > 0 && _jsxs("span", { className: "mr-2", children: [msg_count, " comment", msg_count !== 1 ? 's' : ''] }), file_count > 0 && _jsxs("span", { className: "mr-2", children: ["\u00B7 ", file_count, " file", file_count !== 1 ? 's' : ''] })] }))] }), can_rename && (_jsx("div", { role: "button", tabIndex: 0, onClick: (e) => { e.stopPropagation(); start_rename(); }, onMouseDown: (e) => e.stopPropagation(), className: "p-1 text-[#94A3B8] hover:text-[#2563EB] hover:bg-blue-50 rounded cursor-pointer flex-shrink-0 opacity-0 group-hover/task:opacity-100 transition-opacity", title: "Rename task", 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" }) }) }))] })) }), task.completed_at && _jsx("span", { className: "text-xs text-gray-400 hidden sm:inline", children: format_date(task.completed_at) }), task.status === 'needs_attention' && (_jsx("span", { className: "text-xs font-medium text-amber-600 bg-amber-50 px-2 py-0.5 rounded-full", children: "Needs attention" })), role === 'agent' && task.status === 'completed' && task.agent_review !== 'approved' && task.agent_review !== 'reopened' && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[9px] font-medium text-amber-600 bg-amber-50 px-1.5 py-0.5 rounded", children: "Needs Review" }), _jsx("div", { onClick: (e) => { e.stopPropagation(); on_approve_task?.(task.task_id); }, className: "text-[10px] font-medium text-[#059669] border border-[#059669]/30 bg-green-50 px-2 py-0.5 rounded hover:bg-green-100 cursor-pointer", title: "Approve this task", children: "\u2713 Approve" }), _jsx("div", { onClick: (e) => { e.stopPropagation(); on_reopen_task?.(task.task_id); }, className: "text-[10px] font-medium text-[#EF4444] border border-[#EF4444]/30 bg-red-50 px-2 py-0.5 rounded hover:bg-red-100 cursor-pointer", title: "Reopen this task", children: "Reopen" })] })), role === 'agent' && task.agent_review === 'approved' && (_jsx("span", { className: "text-[9px] font-medium text-[#059669] bg-[#ECFDF5] px-1.5 py-0.5 rounded", children: "\u2713 Approved" })), task.agent_review === 'reopened' && (_jsx("span", { className: "text-[9px] font-medium text-[#EF4444] bg-[#FEF2F2] px-1.5 py-0.5 rounded", children: "Reopened by agent" })), role === 'agent' && on_delete_task && (_jsx("div", { onClick: (e) => { e.stopPropagation(); on_delete_task(task.task_id); }, className: "p-1 text-[#94A3B8] hover:text-[#EF4444] rounded hover:bg-[#FEF2F2] cursor-pointer opacity-0 group-hover/task:opacity-100 transition-opacity", title: "Delete task", 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" }) }) })), _jsx("svg", { className: cn('w-4 h-4 text-gray-300 transition-transform flex-shrink-0', expanded && 'rotate-180'), fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M19 9l-7 7-7-7" }) })] }), expanded && (_jsxs("div", { className: "pb-4", children: [task.description && (_jsx("p", { className: "text-[13px] text-gray-500 my-3 leading-relaxed", children: task.description })), task.due_date && _jsxs("p", { className: "text-xs text-amber-600 mb-3", children: ["Due ", format_date(task.due_date)] }), task.coverage_results && task.coverage_results.length > 0 && (_jsx(CoverageCard, { results: task.coverage_results })), task.thread.length > 0 ? (_jsx(ThreadTimeline, { messages: task.thread, role: role, current_user_id: user_id, on_view_file: on_view_file, on_remove_file: on_remove_file, on_accept: on_accept, on_dismiss: on_dismiss, on_send_to_client: on_send_to_client, on_edit_message: (msg_id, updated) => on_edit_message?.(task.task_id, msg_id, updated), on_delete_message: (msg_id) => on_delete_message?.(task.task_id, msg_id), upload_file: upload_file, on_send_back_issues: on_send_back_issues, on_submit_decisions: on_submit_decisions, on_update_content_item: on_update_content_item, task_status: task.status, file_statuses: file_statuses, classification_results: classification_results, validation_results: validation_results, file_manager: file_manager, on_replacement_files: on_replacement_files, view_button_variant: view_button_variant, show_info_icon: show_info_icon, sent_back_resolved_ids: sent_back_resolved_ids, resolving: resolving, available_document_types: available_document_types, on_change_document_type: on_change_document_type, keep_selections: keep_selections, on_keep_change: on_keep_change })) : (_jsx("p", { className: "text-[13px] text-gray-400 py-6 text-center", children: "No activity yet" })), _jsx(ThreadComposer, { role: role, user_name: user_name, on_send: (text, files) => on_send?.(task.task_id, text, files), on_send_comment: (text) => on_send_comment?.(task.task_id, text), on_upload_files: (files) => on_upload_files?.(task.task_id, files), on_add_question: () => on_add_question?.(task.task_id) })] }))] }));
62
+ }
63
+ //# sourceMappingURL=task_card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task_card.js","sourceRoot":"","sources":["../../../../src/components/thread_form/components/task_card.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Text-based doc check — shows quoted snippet + issue + response mechanism.
3
+ * Used when AI finds issues in client's text input.
4
+ */
5
+ import type { ThreadMessage } from '../types.js';
6
+ export interface TextDocCheckProps {
7
+ doc_check_msg: ThreadMessage;
8
+ role: 'agent' | 'client';
9
+ on_respond?: (issue_index: number, response: {
10
+ comment?: string;
11
+ file?: File;
12
+ }) => void;
13
+ }
14
+ export declare function TextDocCheck({ doc_check_msg, role, on_respond }: TextDocCheckProps): import("react/jsx-runtime").JSX.Element | null;
15
+ //# sourceMappingURL=text_doc_check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text_doc_check.d.ts","sourceRoot":"","sources":["../../../../src/components/thread_form/components/text_doc_check.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,IAAI,CAAA;KAAE,KAAK,IAAI,CAAC;CACzF;AAED,wBAAgB,YAAY,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,iBAAiB,kDAiElF"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Text-based doc check — shows quoted snippet + issue + response mechanism.
3
+ * Used when AI finds issues in client's text input.
4
+ */
5
+ 'use client';
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ import { useState } from 'react';
8
+ import { cn, WarningIcon } from './shared.js';
9
+ export function TextDocCheck({ doc_check_msg, role, on_respond }) {
10
+ const [responding_to, set_responding_to] = useState(null);
11
+ const check = doc_check_msg.doc_check;
12
+ if (!check || !check.issues || check.issues.length === 0)
13
+ return null;
14
+ return (_jsxs("div", { className: "rounded-md border border-amber-200 overflow-hidden mt-2", children: [_jsxs("div", { className: "px-3 py-2 bg-amber-50/60 flex items-center gap-2 border-b border-amber-200", children: [_jsx(WarningIcon, {}), _jsx("span", { className: "text-[12px] font-medium text-amber-800", children: check.summary })] }), check.issues.map((issue, i) => (_jsxs("div", { className: cn('px-3 py-3', i > 0 && 'border-t border-amber-100'), children: [issue.text_snippet && (_jsxs("div", { className: "flex items-start gap-2 mb-2", children: [_jsx("div", { className: "w-1 self-stretch bg-amber-300 rounded-full flex-shrink-0" }), _jsxs("p", { className: "text-[12px] text-[#64748B] italic leading-relaxed", children: ["\u201C", issue.text_snippet, "\u201D"] })] })), _jsx("p", { className: "text-[12px] text-amber-800 leading-relaxed", children: issue.description }), role === 'client' && responding_to !== i && (_jsxs("div", { className: "flex gap-2 mt-2", children: [_jsx("button", { onClick: () => set_responding_to(i), className: "text-[11px] font-medium text-[#2563EB] border border-[#2563EB] rounded px-2.5 py-1 hover:bg-[#2563EB] hover:text-white transition-colors cursor-pointer", children: "Provide details" }), _jsx("button", { onClick: () => set_responding_to(i), className: "text-[11px] text-[#64748B] border border-[#CBD5E1] rounded px-2.5 py-1 hover:bg-white transition-colors cursor-pointer", children: "Upload receipt" })] })), role === 'client' && responding_to === i && (_jsxs("div", { className: "mt-2 bg-white border border-[#E2E8F0] rounded-md p-2.5", children: [_jsxs("div", { className: "flex items-center gap-2 mb-2", children: [_jsx("button", { className: "text-[11px] font-medium text-[#2563EB] border border-[#2563EB]/30 bg-[#EFF6FF] rounded px-2 py-0.5 cursor-pointer", children: "\uD83D\uDCCE Attach receipt" }), _jsx("span", { className: "text-[11px] text-[#94A3B8]", children: "or drag & drop" })] }), _jsx("textarea", { className: "w-full border border-[#E2E8F0] rounded px-2.5 py-1.5 text-[12px] resize-none focus:outline-none focus:ring-1 focus:ring-[#2563EB] placeholder:text-[#CBD5E1]", rows: 2, placeholder: "Explain or provide corrected details..." }), _jsxs("div", { className: "flex justify-end gap-2 mt-1.5", children: [_jsx("button", { onClick: () => set_responding_to(null), className: "text-[11px] text-[#94A3B8] cursor-pointer", children: "Cancel" }), _jsx("button", { className: "text-[11px] font-medium text-white bg-[#2563EB] px-3 py-1 rounded hover:bg-[#1D4ED8] cursor-pointer", children: "Submit" })] })] }))] }, i)))] }));
15
+ }
16
+ //# sourceMappingURL=text_doc_check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text_doc_check.js","sourceRoot":"","sources":["../../../../src/components/thread_form/components/text_doc_check.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ9C,MAAM,UAAU,YAAY,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAqB;IACjF,MAAM,CAAC,aAAa,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC;IACtC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtE,OAAO,CACL,eAAK,SAAS,EAAC,yDAAyD,aAEtE,eAAK,SAAS,EAAC,4EAA4E,aACzF,KAAC,WAAW,KAAG,EACf,eAAM,SAAS,EAAC,wCAAwC,YAAE,KAAK,CAAC,OAAO,GAAQ,IAC3E,EAGL,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAC9B,eAAa,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,2BAA2B,CAAC,aAE1E,KAAK,CAAC,YAAY,IAAI,CACrB,eAAK,SAAS,EAAC,6BAA6B,aAC1C,cAAK,SAAS,EAAC,0DAA0D,GAAG,EAC5E,aAAG,SAAS,EAAC,mDAAmD,uBAAS,KAAK,CAAC,YAAY,cAAY,IACnG,CACP,EAGD,YAAG,SAAS,EAAC,4CAA4C,YAAE,KAAK,CAAC,WAAW,GAAK,EAGhF,IAAI,KAAK,QAAQ,IAAI,aAAa,KAAK,CAAC,IAAI,CAC3C,eAAK,SAAS,EAAC,iBAAiB,aAC9B,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,EACnC,SAAS,EAAC,yJAAyJ,gCAG5J,EACT,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,EACnC,SAAS,EAAC,wHAAwH,+BAG3H,IACL,CACP,EACA,IAAI,KAAK,QAAQ,IAAI,aAAa,KAAK,CAAC,IAAI,CAC3C,eAAK,SAAS,EAAC,wDAAwD,aACrE,eAAK,SAAS,EAAC,8BAA8B,aAC3C,iBAAQ,SAAS,EAAC,mHAAmH,4CAA2B,EAChK,eAAM,SAAS,EAAC,4BAA4B,+BAAsB,IAC9D,EACN,mBACE,SAAS,EAAC,8JAA8J,EACxK,IAAI,EAAE,CAAC,EACP,WAAW,EAAC,yCAAyC,GACrD,EACF,eAAK,SAAS,EAAC,+BAA+B,aAC5C,iBAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAC,2CAA2C,uBAAgB,EACrH,iBAAQ,SAAS,EAAC,qGAAqG,uBAAgB,IACnI,IACF,CACP,KA7CO,CAAC,CA8CL,CACP,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Text extraction table — displays AI-extracted structured data from text input.
3
+ * Agent-only. Read-only with edit toggle. Shows categories, fields, issues.
4
+ */
5
+ import type { AiContentResult } from '../types.js';
6
+ export interface TextExtractionProps {
7
+ result: AiContentResult;
8
+ on_accept?: (content_ref: string) => void;
9
+ on_send_to_client?: (content_ref: string) => void;
10
+ on_dismiss?: (content_ref: string) => void;
11
+ on_edit?: (content_ref: string, data: AiContentResult['extracted_data']) => void;
12
+ }
13
+ export declare function TextExtraction({ result, on_accept, on_send_to_client, on_dismiss }: TextExtractionProps): import("react/jsx-runtime").JSX.Element | null;
14
+ //# sourceMappingURL=text_extraction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text_extraction.d.ts","sourceRoot":"","sources":["../../../../src/components/thread_form/components/text_extraction.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;CAClF;AAED,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,EAAE,mBAAmB,kDAkEvG"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Text extraction table — displays AI-extracted structured data from text input.
3
+ * Agent-only. Read-only with edit toggle. Shows categories, fields, issues.
4
+ */
5
+ 'use client';
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ import { useState } from 'react';
8
+ import { cn, DocumentIcon } from './shared.js';
9
+ export function TextExtraction({ result, on_accept, on_send_to_client, on_dismiss }) {
10
+ const [editing, set_editing] = useState(false);
11
+ if (!result.extracted_data || result.extracted_data.length === 0)
12
+ return null;
13
+ const issue_count = result.extracted_data.reduce((n, g) => n + g.fields.filter(f => f.issue).length, 0);
14
+ return (_jsxs("div", { className: "rounded-md border border-[#E2E8F0] overflow-hidden", children: [_jsxs("div", { className: "px-3 py-2 bg-[#F1F5F9] flex items-center justify-between border-b border-[#E2E8F0]", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(DocumentIcon, {}), _jsx("span", { className: "text-[12px] font-medium text-[#334155]", children: "Extracted Data" }), issue_count > 0 && (_jsxs("span", { className: "text-[10px] text-amber-600 bg-amber-50 px-1.5 py-0.5 rounded-full font-medium", children: [issue_count, " issue", issue_count !== 1 ? 's' : ''] }))] }), _jsx("button", { onClick: () => set_editing(!editing), className: "text-[11px] text-[#2563EB] font-medium hover:underline cursor-pointer", children: editing ? 'Done' : 'Edit' })] }), result.extracted_data.map(group => (_jsxs("div", { children: [_jsx("div", { className: "px-3 py-1.5 bg-[#FAFBFC] text-[10px] text-[#64748B] uppercase tracking-wider font-medium border-b border-[#F1F5F9]", children: group.category }), group.fields.map(field => (_jsxs("div", { className: cn('flex items-center gap-3 px-3 py-2 text-[13px] border-b border-[#F1F5F9] last:border-b-0', field.issue && 'bg-amber-50/30'), children: [_jsx("span", { className: "text-[#64748B] w-28 flex-shrink-0 text-[12px]", children: field.label }), editing ? (_jsx("input", { className: "flex-1 text-[13px] font-medium text-[#0F172A] border-b border-[#E2E8F0] bg-transparent focus:outline-none focus:border-[#2563EB] py-0.5", defaultValue: field.value })) : (_jsx("span", { className: "text-[#0F172A] font-medium flex-1", children: field.value })), field.issue ? (_jsxs("span", { className: "text-amber-600 text-[11px] flex items-center gap-1 flex-shrink-0 max-w-48 truncate", title: field.issue, children: [_jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-amber-400 flex-shrink-0" }), field.issue] })) : (_jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-[#059669] flex-shrink-0" }))] }, field.key)))] }, group.category))), result.review_status === 'pending' && (_jsxs("div", { className: "px-3 py-2 bg-[#F8FAFC] flex gap-2 border-t border-[#E2E8F0]", children: [_jsx("button", { onClick: () => on_accept?.(result.content_ref), className: "text-[11px] font-medium text-[#2563EB] hover:underline cursor-pointer", children: "Accept" }), _jsx("button", { onClick: () => on_send_to_client?.(result.content_ref), className: "text-[11px] font-medium text-[#2563EB] hover:underline cursor-pointer", children: "Send issues to Client" }), _jsx("button", { onClick: () => on_dismiss?.(result.content_ref), className: "text-[11px] text-[#94A3B8] hover:underline cursor-pointer", children: "Dismiss" })] }))] }));
15
+ }
16
+ //# sourceMappingURL=text_extraction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text_extraction.js","sourceRoot":"","sources":["../../../../src/components/thread_form/components/text_extraction.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
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
+ export interface ThreadComposerProps {
7
+ role: 'agent' | 'client';
8
+ user_name?: string;
9
+ on_send?: (text: string, files: File[]) => void;
10
+ on_send_comment?: (text: string) => void;
11
+ on_upload_files?: (files: File[]) => void;
12
+ on_add_question?: () => void;
13
+ }
14
+ export declare function ThreadComposer({ role, user_name, on_send, on_send_comment, on_upload_files, on_add_question }: ThreadComposerProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=thread_composer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread_composer.d.ts","sourceRoot":"","sources":["../../../../src/components/thread_form/components/thread_composer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAChD,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAC1C,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,EAAE,mBAAmB,2CAkMlI"}