hazo_collab_forms 1.12.0 → 2.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 (212) hide show
  1. package/CHANGE_LOG.md +49 -0
  2. package/README.md +406 -0
  3. package/dist/components/_internal_form_set.d.ts +13 -0
  4. package/dist/components/_internal_form_set.d.ts.map +1 -1
  5. package/dist/components/_internal_form_set.js +49 -3
  6. package/dist/components/_internal_form_set.js.map +1 -1
  7. package/dist/components/clarification/clarification_badge.d.ts +16 -0
  8. package/dist/components/clarification/clarification_badge.d.ts.map +1 -0
  9. package/dist/components/clarification/clarification_badge.js +15 -0
  10. package/dist/components/clarification/clarification_badge.js.map +1 -0
  11. package/dist/components/clarification/clarification_card.d.ts +48 -0
  12. package/dist/components/clarification/clarification_card.d.ts.map +1 -0
  13. package/dist/components/clarification/clarification_card.js +46 -0
  14. package/dist/components/clarification/clarification_card.js.map +1 -0
  15. package/dist/components/clarification/clarification_dialog.d.ts +32 -0
  16. package/dist/components/clarification/clarification_dialog.d.ts.map +1 -0
  17. package/dist/components/clarification/clarification_dialog.js +63 -0
  18. package/dist/components/clarification/clarification_dialog.js.map +1 -0
  19. package/dist/components/clarification/clarification_doc_reference.d.ts +18 -0
  20. package/dist/components/clarification/clarification_doc_reference.d.ts.map +1 -0
  21. package/dist/components/clarification/clarification_doc_reference.js +22 -0
  22. package/dist/components/clarification/clarification_doc_reference.js.map +1 -0
  23. package/dist/components/clarification/clarification_response_form.d.ts +32 -0
  24. package/dist/components/clarification/clarification_response_form.d.ts.map +1 -0
  25. package/dist/components/clarification/clarification_response_form.js +38 -0
  26. package/dist/components/clarification/clarification_response_form.js.map +1 -0
  27. package/dist/components/clarification/clarification_section.d.ts +26 -0
  28. package/dist/components/clarification/clarification_section.d.ts.map +1 -0
  29. package/dist/components/clarification/clarification_section.js +46 -0
  30. package/dist/components/clarification/clarification_section.js.map +1 -0
  31. package/dist/components/clarification/index.d.ts +18 -0
  32. package/dist/components/clarification/index.d.ts.map +1 -0
  33. package/dist/components/clarification/index.js +13 -0
  34. package/dist/components/clarification/index.js.map +1 -0
  35. package/dist/components/clarification/use_clarifications.d.ts +49 -0
  36. package/dist/components/clarification/use_clarifications.d.ts.map +1 -0
  37. package/dist/components/clarification/use_clarifications.js +160 -0
  38. package/dist/components/clarification/use_clarifications.js.map +1 -0
  39. package/dist/components/collab_form_file_upload.d.ts +16 -1
  40. package/dist/components/collab_form_file_upload.d.ts.map +1 -1
  41. package/dist/components/collab_form_file_upload.js +44 -10
  42. package/dist/components/collab_form_file_upload.js.map +1 -1
  43. package/dist/components/hazo_collab_form_base.d.ts +32 -2
  44. package/dist/components/hazo_collab_form_base.d.ts.map +1 -1
  45. package/dist/components/hazo_collab_form_base.js +11 -5
  46. package/dist/components/hazo_collab_form_base.js.map +1 -1
  47. package/dist/components/hazo_collab_form_group.d.ts +12 -0
  48. package/dist/components/hazo_collab_form_group.d.ts.map +1 -1
  49. package/dist/components/hazo_collab_form_group.js +27 -4
  50. package/dist/components/hazo_collab_form_group.js.map +1 -1
  51. package/dist/components/hazo_collab_form_view/context.d.ts.map +1 -1
  52. package/dist/components/hazo_collab_form_view/context.js +19 -1
  53. package/dist/components/hazo_collab_form_view/context.js.map +1 -1
  54. package/dist/components/hazo_collab_form_view/index.d.ts +1 -1
  55. package/dist/components/hazo_collab_form_view/index.d.ts.map +1 -1
  56. package/dist/components/hazo_collab_form_view/index.js +8 -0
  57. package/dist/components/hazo_collab_form_view/index.js.map +1 -1
  58. package/dist/components/hazo_collab_form_view/types.d.ts +32 -2
  59. package/dist/components/hazo_collab_form_view/types.d.ts.map +1 -1
  60. package/dist/components/hazo_collab_form_view/views/edit_view.d.ts.map +1 -1
  61. package/dist/components/hazo_collab_form_view/views/edit_view.js +74 -8
  62. package/dist/components/hazo_collab_form_view/views/edit_view.js.map +1 -1
  63. package/dist/components/hazo_collab_form_view/views/summary_view.d.ts.map +1 -1
  64. package/dist/components/hazo_collab_form_view/views/summary_view.js +187 -10
  65. package/dist/components/hazo_collab_form_view/views/summary_view.js.map +1 -1
  66. package/dist/components/hazo_data_form/field_renderers/index.d.ts +6 -0
  67. package/dist/components/hazo_data_form/field_renderers/index.d.ts.map +1 -1
  68. package/dist/components/hazo_data_form/field_renderers/index.js +22 -1
  69. package/dist/components/hazo_data_form/field_renderers/index.js.map +1 -1
  70. package/dist/components/hazo_data_form/group_renderer.d.ts.map +1 -1
  71. package/dist/components/hazo_data_form/group_renderer.js +2 -1
  72. package/dist/components/hazo_data_form/group_renderer.js.map +1 -1
  73. package/dist/components/hazo_data_form/shared/data_form_field_layout.d.ts +1 -1
  74. package/dist/components/hazo_data_form/shared/data_form_field_layout.d.ts.map +1 -1
  75. package/dist/components/hazo_data_form/shared/data_form_field_layout.js +3 -3
  76. package/dist/components/hazo_data_form/shared/data_form_field_layout.js.map +1 -1
  77. package/dist/components/hazo_data_form/shared/data_form_reference_value.d.ts +3 -1
  78. package/dist/components/hazo_data_form/shared/data_form_reference_value.d.ts.map +1 -1
  79. package/dist/components/hazo_data_form/shared/data_form_reference_value.js +5 -2
  80. package/dist/components/hazo_data_form/shared/data_form_reference_value.js.map +1 -1
  81. package/dist/components/hazo_data_form/types.d.ts +2 -0
  82. package/dist/components/hazo_data_form/types.d.ts.map +1 -1
  83. package/dist/components/hazo_validation_rule_editor/components/clarification_settings.d.ts +10 -0
  84. package/dist/components/hazo_validation_rule_editor/components/clarification_settings.d.ts.map +1 -0
  85. package/dist/components/hazo_validation_rule_editor/components/clarification_settings.js +57 -0
  86. package/dist/components/hazo_validation_rule_editor/components/clarification_settings.js.map +1 -0
  87. package/dist/components/hazo_validation_rule_editor/components/prompt_editor.d.ts +11 -0
  88. package/dist/components/hazo_validation_rule_editor/components/prompt_editor.d.ts.map +1 -0
  89. package/dist/components/hazo_validation_rule_editor/components/prompt_editor.js +145 -0
  90. package/dist/components/hazo_validation_rule_editor/components/prompt_editor.js.map +1 -0
  91. package/dist/components/hazo_validation_rule_editor/components/rule_editor.d.ts +6 -0
  92. package/dist/components/hazo_validation_rule_editor/components/rule_editor.d.ts.map +1 -0
  93. package/dist/components/hazo_validation_rule_editor/components/rule_editor.js +149 -0
  94. package/dist/components/hazo_validation_rule_editor/components/rule_editor.js.map +1 -0
  95. package/dist/components/hazo_validation_rule_editor/components/rule_list.d.ts +6 -0
  96. package/dist/components/hazo_validation_rule_editor/components/rule_list.d.ts.map +1 -0
  97. package/dist/components/hazo_validation_rule_editor/components/rule_list.js +57 -0
  98. package/dist/components/hazo_validation_rule_editor/components/rule_list.js.map +1 -0
  99. package/dist/components/hazo_validation_rule_editor/context.d.ts +19 -0
  100. package/dist/components/hazo_validation_rule_editor/context.d.ts.map +1 -0
  101. package/dist/components/hazo_validation_rule_editor/context.js +95 -0
  102. package/dist/components/hazo_validation_rule_editor/context.js.map +1 -0
  103. package/dist/components/hazo_validation_rule_editor/hooks/use_file_validation.d.ts +20 -0
  104. package/dist/components/hazo_validation_rule_editor/hooks/use_file_validation.d.ts.map +1 -0
  105. package/dist/components/hazo_validation_rule_editor/hooks/use_file_validation.js +127 -0
  106. package/dist/components/hazo_validation_rule_editor/hooks/use_file_validation.js.map +1 -0
  107. package/dist/components/hazo_validation_rule_editor/hooks/use_validation_rules.d.ts +30 -0
  108. package/dist/components/hazo_validation_rule_editor/hooks/use_validation_rules.d.ts.map +1 -0
  109. package/dist/components/hazo_validation_rule_editor/hooks/use_validation_rules.js +216 -0
  110. package/dist/components/hazo_validation_rule_editor/hooks/use_validation_rules.js.map +1 -0
  111. package/dist/components/hazo_validation_rule_editor/index.d.ts +14 -0
  112. package/dist/components/hazo_validation_rule_editor/index.d.ts.map +1 -0
  113. package/dist/components/hazo_validation_rule_editor/index.js +12 -0
  114. package/dist/components/hazo_validation_rule_editor/index.js.map +1 -0
  115. package/dist/components/hazo_validation_rule_editor/types.d.ts +53 -0
  116. package/dist/components/hazo_validation_rule_editor/types.d.ts.map +1 -0
  117. package/dist/components/hazo_validation_rule_editor/types.js +5 -0
  118. package/dist/components/hazo_validation_rule_editor/types.js.map +1 -0
  119. package/dist/components/hazo_validation_rule_editor/validation_rule_editor.d.ts +3 -0
  120. package/dist/components/hazo_validation_rule_editor/validation_rule_editor.d.ts.map +1 -0
  121. package/dist/components/hazo_validation_rule_editor/validation_rule_editor.js +14 -0
  122. package/dist/components/hazo_validation_rule_editor/validation_rule_editor.js.map +1 -0
  123. package/dist/components/index.d.ts +9 -2
  124. package/dist/components/index.d.ts.map +1 -1
  125. package/dist/components/index.js +9 -1
  126. package/dist/components/index.js.map +1 -1
  127. package/dist/components/shared/field_state/normalize.d.ts.map +1 -1
  128. package/dist/components/shared/field_state/normalize.js +1 -0
  129. package/dist/components/shared/field_state/normalize.js.map +1 -1
  130. package/dist/components/shared/field_state/types.d.ts +6 -0
  131. package/dist/components/shared/field_state/types.d.ts.map +1 -1
  132. package/dist/components/shared/field_utils/types.d.ts +1 -1
  133. package/dist/components/shared/field_utils/types.d.ts.map +1 -1
  134. package/dist/components/shared/strip_base_props.d.ts.map +1 -1
  135. package/dist/components/shared/strip_base_props.js +2 -0
  136. package/dist/components/shared/strip_base_props.js.map +1 -1
  137. package/dist/components/shared/summary_files/summary_files.d.ts +9 -1
  138. package/dist/components/shared/summary_files/summary_files.d.ts.map +1 -1
  139. package/dist/components/shared/summary_files/summary_files.js +11 -5
  140. package/dist/components/shared/summary_files/summary_files.js.map +1 -1
  141. package/dist/components/shared/unified_field_controls/types.d.ts +8 -0
  142. package/dist/components/shared/unified_field_controls/types.d.ts.map +1 -1
  143. package/dist/components/shared/unified_field_controls/unified_field_controls.d.ts +1 -1
  144. package/dist/components/shared/unified_field_controls/unified_field_controls.d.ts.map +1 -1
  145. package/dist/components/shared/unified_field_controls/unified_field_controls.js +3 -2
  146. package/dist/components/shared/unified_field_controls/unified_field_controls.js.map +1 -1
  147. package/dist/components/shared/use_base_form_field.d.ts +14 -0
  148. package/dist/components/shared/use_base_form_field.d.ts.map +1 -1
  149. package/dist/components/shared/use_base_form_field.js +41 -2
  150. package/dist/components/shared/use_base_form_field.js.map +1 -1
  151. package/dist/components/status_badges.d.ts +33 -0
  152. package/dist/components/status_badges.d.ts.map +1 -1
  153. package/dist/components/status_badges.js +27 -2
  154. package/dist/components/status_badges.js.map +1 -1
  155. package/dist/config/clarification_templates.d.ts +24 -0
  156. package/dist/config/clarification_templates.d.ts.map +1 -0
  157. package/dist/config/clarification_templates.js +66 -0
  158. package/dist/config/clarification_templates.js.map +1 -0
  159. package/dist/config/defaults.d.ts +4 -0
  160. package/dist/config/defaults.d.ts.map +1 -1
  161. package/dist/config/defaults.js +4 -0
  162. package/dist/config/defaults.js.map +1 -1
  163. package/dist/config/index.d.ts +3 -1
  164. package/dist/config/index.d.ts.map +1 -1
  165. package/dist/config/index.js +3 -1
  166. package/dist/config/index.js.map +1 -1
  167. package/dist/config/validation_rule_commands.d.ts +12 -0
  168. package/dist/config/validation_rule_commands.d.ts.map +1 -0
  169. package/dist/config/validation_rule_commands.js +106 -0
  170. package/dist/config/validation_rule_commands.js.map +1 -0
  171. package/dist/lib/autofill_handler.d.ts +34 -0
  172. package/dist/lib/autofill_handler.d.ts.map +1 -0
  173. package/dist/lib/autofill_handler.js +330 -0
  174. package/dist/lib/autofill_handler.js.map +1 -0
  175. package/dist/lib/index.d.ts +9 -0
  176. package/dist/lib/index.d.ts.map +1 -1
  177. package/dist/lib/index.js +5 -0
  178. package/dist/lib/index.js.map +1 -1
  179. package/dist/lib/validation_handler.d.ts +27 -0
  180. package/dist/lib/validation_handler.d.ts.map +1 -0
  181. package/dist/lib/validation_handler.js +341 -0
  182. package/dist/lib/validation_handler.js.map +1 -0
  183. package/dist/types/clarification.d.ts +126 -0
  184. package/dist/types/clarification.d.ts.map +1 -0
  185. package/dist/types/clarification.js +8 -0
  186. package/dist/types/clarification.js.map +1 -0
  187. package/dist/types/file_attachment.d.ts +2 -0
  188. package/dist/types/file_attachment.d.ts.map +1 -1
  189. package/dist/types/file_attachment.js.map +1 -1
  190. package/dist/types/file_manager.d.ts +36 -0
  191. package/dist/types/file_manager.d.ts.map +1 -1
  192. package/dist/types/index.d.ts +3 -1
  193. package/dist/types/index.d.ts.map +1 -1
  194. package/dist/types/index.js.map +1 -1
  195. package/dist/types/validation.d.ts +192 -0
  196. package/dist/types/validation.d.ts.map +1 -0
  197. package/dist/types/validation.js +9 -0
  198. package/dist/types/validation.js.map +1 -0
  199. package/dist/utils/build_rule_field_map.d.ts +31 -0
  200. package/dist/utils/build_rule_field_map.d.ts.map +1 -0
  201. package/dist/utils/build_rule_field_map.js +53 -0
  202. package/dist/utils/build_rule_field_map.js.map +1 -0
  203. package/dist/utils/index.d.ts +3 -0
  204. package/dist/utils/index.d.ts.map +1 -1
  205. package/dist/utils/index.js +4 -0
  206. package/dist/utils/index.js.map +1 -1
  207. package/dist/utils/slugify.d.ts +10 -0
  208. package/dist/utils/slugify.d.ts.map +1 -0
  209. package/dist/utils/slugify.js +17 -0
  210. package/dist/utils/slugify.js.map +1 -0
  211. package/package.json +15 -3
  212. package/templates/config/hazo_collab_forms_config.ini +7 -0
@@ -0,0 +1,341 @@
1
+ /**
2
+ * Server-side validation route handler factory.
3
+ *
4
+ * Creates a POST handler that executes validation rules against uploaded documents
5
+ * using LLM analysis, and returns ClarificationItems for any issues found.
6
+ *
7
+ * Usage:
8
+ * import { create_validation_route } from 'hazo_collab_forms/lib';
9
+ * export const POST = create_validation_route();
10
+ *
11
+ * Uses standard Web API Request/Response for portability.
12
+ * hazo_llm_api is dynamically imported so it's only required at runtime.
13
+ */
14
+ import 'server-only';
15
+ import { DEFAULT_CLARIFICATION_TEMPLATES } from '../config/clarification_templates.js';
16
+ import { DEFAULT_VALIDATION_PROMPT_SUFFIX } from '../config/defaults.js';
17
+ import { get_config } from './config.js';
18
+ // ============================================================================
19
+ // Helpers
20
+ // ============================================================================
21
+ function generate_clarification_id() {
22
+ return `clr_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
23
+ }
24
+ /**
25
+ * Extract has_issue and issue_description from a parsed JSON object.
26
+ * Supports both new format (validation_passed, validation_details) and
27
+ * legacy format (has_issue, issue_description).
28
+ */
29
+ function extract_validation_fields(parsed) {
30
+ // Determine has_issue: prefer new `validation_passed` (inverted), fall back to legacy `has_issue`
31
+ const has_issue = 'validation_passed' in parsed
32
+ ? !parsed.validation_passed
33
+ : !!parsed.has_issue;
34
+ // Determine issue_description: prefer new `validation_details`, fall back to legacy names
35
+ const issue_description = parsed.validation_details ||
36
+ parsed.issue_description ||
37
+ parsed.description ||
38
+ parsed.issue ||
39
+ undefined;
40
+ return {
41
+ has_issue,
42
+ issue_description,
43
+ confidence: typeof parsed.confidence === 'number' ? parsed.confidence : undefined,
44
+ };
45
+ }
46
+ /**
47
+ * Parse LLM response for validation results.
48
+ * Supports new format: { validation_passed, validation_details, confidence }
49
+ * and legacy format: { has_issue, issue_description, confidence }
50
+ */
51
+ function parse_validation_response(text) {
52
+ const cleaned = text.trim();
53
+ // Try direct parse
54
+ try {
55
+ const parsed = JSON.parse(cleaned);
56
+ return extract_validation_fields(parsed);
57
+ }
58
+ catch {
59
+ // Continue
60
+ }
61
+ // Strip markdown code fences
62
+ const fence_match = cleaned.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
63
+ if (fence_match) {
64
+ try {
65
+ const parsed = JSON.parse(fence_match[1].trim());
66
+ return extract_validation_fields(parsed);
67
+ }
68
+ catch {
69
+ // Continue
70
+ }
71
+ }
72
+ // Try to find JSON in text
73
+ const json_match = cleaned.match(/\{[\s\S]*\}/);
74
+ if (json_match) {
75
+ try {
76
+ const parsed = JSON.parse(json_match[0]);
77
+ return extract_validation_fields(parsed);
78
+ }
79
+ catch {
80
+ // Continue
81
+ }
82
+ }
83
+ // Heuristic: if the text mentions "issue", "problem", "invalid", etc., consider it an issue
84
+ const issue_keywords = ['issue', 'problem', 'invalid', 'missing', 'incomplete', 'error', 'incorrect'];
85
+ const lower = cleaned.toLowerCase();
86
+ const has_issue = issue_keywords.some(k => lower.includes(k));
87
+ return {
88
+ has_issue,
89
+ issue_description: has_issue ? cleaned.slice(0, 500) : undefined,
90
+ };
91
+ }
92
+ function is_image_mime(mime_type) {
93
+ return mime_type.startsWith('image/');
94
+ }
95
+ function is_document_mime(mime_type) {
96
+ return mime_type === 'application/pdf';
97
+ }
98
+ /**
99
+ * Substitute {{variable}} placeholders in prompt text.
100
+ */
101
+ function substitute_variables(prompt, variables) {
102
+ return prompt.replace(/\{\{(\w+)\}\}/g, (_, key) => {
103
+ return variables[key] ?? `{{${key}}}`;
104
+ });
105
+ }
106
+ /**
107
+ * Build a validation prompt that wraps the rule prompt with a configurable response format suffix.
108
+ * Reads `[validation] prompt_suffix` from INI config, falling back to DEFAULT_VALIDATION_PROMPT_SUFFIX.
109
+ */
110
+ function build_validation_prompt(rule_prompt) {
111
+ const suffix = get_config('validation', 'prompt_suffix') ?? DEFAULT_VALIDATION_PROMPT_SUFFIX;
112
+ return `You are a document validation assistant. Analyze the provided document according to the following rule and determine if there is an issue.
113
+
114
+ VALIDATION RULE:
115
+ ${rule_prompt}
116
+
117
+ ${suffix}`;
118
+ }
119
+ /**
120
+ * Create a ClarificationItem from a validation rule result.
121
+ */
122
+ function create_clarification_from_result(rule, result, doc_info) {
123
+ const template = rule.clarification_type !== 'none'
124
+ ? DEFAULT_CLARIFICATION_TEMPLATES[rule.clarification_type]
125
+ : null;
126
+ const response_options = rule.custom_response_options ??
127
+ template?.response_options ??
128
+ [];
129
+ return {
130
+ id: generate_clarification_id(),
131
+ type: rule.clarification_type,
132
+ status: 'pending',
133
+ target_field_id: rule.target_field_id,
134
+ target_label: rule.target_label,
135
+ rule_name: rule.name,
136
+ rule_id: rule.rule_id,
137
+ issue_description: rule.custom_issue_description ??
138
+ result.issue_description ??
139
+ template?.default_issue_description ??
140
+ 'A validation issue was detected.',
141
+ validation_details: result.issue_description,
142
+ doc_references: doc_info ? [{
143
+ file_id: '', // Client enriches with actual file_id
144
+ file_name: doc_info.file_name,
145
+ mime_type: doc_info.mime_type,
146
+ }] : [],
147
+ action_description: rule.custom_action_description ??
148
+ template?.default_action_description,
149
+ response_options,
150
+ response_files: [],
151
+ created_at: new Date().toISOString(),
152
+ };
153
+ }
154
+ // ============================================================================
155
+ // Route Handler Factory
156
+ // ============================================================================
157
+ /**
158
+ * Creates a POST route handler for document validation.
159
+ *
160
+ * The handler:
161
+ * 1. Validates the request payload
162
+ * 2. Fetches the file (inline or from URL)
163
+ * 3. Executes each validation rule against the document via LLM
164
+ * 4. Creates ClarificationItems for rules that find issues
165
+ * 5. Returns the results
166
+ */
167
+ export function create_validation_route(options) {
168
+ const sqlite_path = options?.sqlite_path ?? 'data/prompt_library.sqlite';
169
+ const on_error = options?.on_error ?? ((err, ctx) => console.error(`[validation] ${ctx}:`, err));
170
+ // Cache the dynamic import
171
+ let llm_api_module = null;
172
+ let init_promise = null;
173
+ async function get_llm_api() {
174
+ if (!llm_api_module) {
175
+ try {
176
+ const module_id = 'hazo_llm_api/server';
177
+ llm_api_module = await import(/* webpackIgnore: true */ module_id);
178
+ }
179
+ catch {
180
+ throw new Error('hazo_llm_api is required for validation. Install it: npm install hazo_llm_api');
181
+ }
182
+ }
183
+ return llm_api_module;
184
+ }
185
+ async function ensure_initialized() {
186
+ const api = await get_llm_api();
187
+ if (!api.is_initialized()) {
188
+ if (!init_promise) {
189
+ init_promise = api.initialize_llm_api({ sqlite_path }).then(() => { });
190
+ }
191
+ await init_promise;
192
+ }
193
+ }
194
+ /**
195
+ * Execute a single validation rule against a document.
196
+ */
197
+ async function execute_rule(rule, file_b64, mime_type, variables) {
198
+ const api = await get_llm_api();
199
+ // Substitute variables in the prompt
200
+ const resolved_prompt = substitute_variables(rule.prompt, variables);
201
+ const full_prompt = build_validation_prompt(resolved_prompt);
202
+ // Call LLM
203
+ let llm_response;
204
+ if (is_image_mime(mime_type)) {
205
+ llm_response = await api.hazo_llm_image_text({
206
+ prompt: full_prompt,
207
+ image_b64: file_b64,
208
+ image_mime_type: mime_type,
209
+ });
210
+ }
211
+ else if (is_document_mime(mime_type)) {
212
+ llm_response = await api.hazo_llm_document_text({
213
+ prompt: full_prompt,
214
+ document_b64: file_b64,
215
+ document_mime_type: mime_type,
216
+ });
217
+ }
218
+ else {
219
+ // Fallback: treat as image
220
+ llm_response = await api.hazo_llm_image_text({
221
+ prompt: full_prompt,
222
+ image_b64: file_b64,
223
+ image_mime_type: mime_type,
224
+ });
225
+ }
226
+ if (!llm_response.success || !llm_response.text) {
227
+ return {
228
+ rule_id: rule.rule_id,
229
+ has_issue: false,
230
+ raw_response: llm_response.error ?? 'LLM call failed',
231
+ };
232
+ }
233
+ // Parse response
234
+ const parsed = parse_validation_response(llm_response.text);
235
+ return {
236
+ rule_id: rule.rule_id,
237
+ has_issue: parsed.has_issue,
238
+ issue_description: parsed.issue_description,
239
+ confidence: parsed.confidence,
240
+ raw_response: llm_response.text,
241
+ };
242
+ }
243
+ return async function POST(request) {
244
+ try {
245
+ const body = await request.json();
246
+ const { file_name, mime_type, download_url, file_b64: request_file_b64, rules, variables = {}, content_tag, } = body;
247
+ // Validate required fields
248
+ if (!rules?.length) {
249
+ return Response.json({
250
+ success: false,
251
+ clarifications: [],
252
+ rule_results: [],
253
+ errors: [{ rule_id: '', error: 'rules array is required and must not be empty' }],
254
+ }, { status: 400 });
255
+ }
256
+ // Initialize LLM API
257
+ await ensure_initialized();
258
+ // Get file as base64
259
+ let file_b64;
260
+ if (request_file_b64) {
261
+ file_b64 = request_file_b64;
262
+ }
263
+ else if (download_url) {
264
+ try {
265
+ const absolute_url = download_url.startsWith('http')
266
+ ? download_url
267
+ : `${new URL(request.url).origin}${download_url}`;
268
+ const file_response = await fetch(absolute_url);
269
+ if (!file_response.ok) {
270
+ throw new Error(`Failed to fetch file: ${file_response.status}`);
271
+ }
272
+ const buffer = Buffer.from(await file_response.arrayBuffer());
273
+ file_b64 = buffer.toString('base64');
274
+ }
275
+ catch (err) {
276
+ return Response.json({
277
+ success: false,
278
+ clarifications: [],
279
+ rule_results: [],
280
+ errors: [{ rule_id: '', error: `Failed to fetch file "${file_name}": ${err instanceof Error ? err.message : 'Unknown error'}` }],
281
+ }, { status: 500 });
282
+ }
283
+ }
284
+ else {
285
+ return Response.json({
286
+ success: false,
287
+ clarifications: [],
288
+ rule_results: [],
289
+ errors: [{ rule_id: '', error: 'Either file_b64 or download_url is required' }],
290
+ }, { status: 400 });
291
+ }
292
+ // Add file context variables
293
+ const all_variables = {
294
+ ...variables,
295
+ document_name: file_name,
296
+ ...(content_tag ? { document_type: content_tag } : {}),
297
+ };
298
+ // Execute each rule
299
+ const rule_results = [];
300
+ const clarifications = [];
301
+ const errors = [];
302
+ for (const rule of rules) {
303
+ try {
304
+ const result = await execute_rule(rule, file_b64, mime_type, all_variables);
305
+ rule_results.push(result);
306
+ if (result.has_issue && rule.clarification_type !== 'none') {
307
+ const clarification = create_clarification_from_result(rule, result, { file_name, mime_type });
308
+ clarifications.push(clarification);
309
+ }
310
+ }
311
+ catch (err) {
312
+ const message = err instanceof Error ? err.message : 'Unknown error';
313
+ on_error(err, `rule ${rule.rule_id}: ${rule.name}`);
314
+ errors.push({ rule_id: rule.rule_id, error: message });
315
+ rule_results.push({
316
+ rule_id: rule.rule_id,
317
+ has_issue: false,
318
+ raw_response: message,
319
+ });
320
+ }
321
+ }
322
+ const response = {
323
+ success: errors.length === 0,
324
+ clarifications,
325
+ rule_results,
326
+ ...(errors.length > 0 ? { errors } : {}),
327
+ };
328
+ return Response.json(response);
329
+ }
330
+ catch (error) {
331
+ on_error(error, 'unhandled error');
332
+ return Response.json({
333
+ success: false,
334
+ clarifications: [],
335
+ rule_results: [],
336
+ errors: [{ rule_id: '', error: error instanceof Error ? error.message : 'Unknown error' }],
337
+ }, { status: 500 });
338
+ }
339
+ };
340
+ }
341
+ //# sourceMappingURL=validation_handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation_handler.js","sourceRoot":"","sources":["../../src/lib/validation_handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Type definitions for Document Clarifications feature.
3
+ *
4
+ * Clarifications allow reviewers to flag document validation issues,
5
+ * reference relevant documents, and collect structured responses from clients.
6
+ */
7
+ import type { FormFileAttachment } from './file_attachment.js';
8
+ /** Clarification type - maps to templates */
9
+ export type ClarificationType = 'none' | 'invalid_document' | 'additional_info_required';
10
+ /** Lifecycle status of a clarification */
11
+ export type ClarificationStatus = 'pending' | 'responded' | 'resolved' | 'dismissed';
12
+ /** Reference to a document relevant to the clarification */
13
+ export interface ClarificationDocReference {
14
+ /** hazo_files file ID */
15
+ file_id: string;
16
+ /** Display filename */
17
+ file_name: string;
18
+ /** MIME type for icon display */
19
+ mime_type: string;
20
+ /** Why this doc is referenced (optional reviewer comment) */
21
+ comment?: string;
22
+ /** Field this doc was originally uploaded to */
23
+ source_field_id?: string;
24
+ }
25
+ /** A radio option in the response (green) zone */
26
+ export interface ClarificationResponseOption {
27
+ /** Value key for this option */
28
+ value: string;
29
+ /** User-visible label */
30
+ label: string;
31
+ /** Show file upload dropzone when this option is selected */
32
+ shows_file_upload?: boolean;
33
+ /** Show additional text input when this option is selected */
34
+ shows_additional_input?: boolean;
35
+ }
36
+ /** A single clarification item */
37
+ export interface ClarificationItem {
38
+ /** Unique ID, prefixed 'clr_' */
39
+ id: string;
40
+ /** Clarification type (maps to template) */
41
+ type: ClarificationType;
42
+ /** Lifecycle status */
43
+ status: ClarificationStatus;
44
+ /** Field or group this clarification targets */
45
+ target_field_id: string;
46
+ /** Human-readable label for the target */
47
+ target_label: string;
48
+ /** Validation rule that triggered this (Phase 3) */
49
+ rule_name?: string;
50
+ /** Validation rule ID (Phase 3) */
51
+ rule_id?: string;
52
+ /** Description of the issue found */
53
+ issue_description: string;
54
+ /** Detailed validation result from LLM analysis (shown below issue_description) */
55
+ validation_details?: string;
56
+ /** Referenced documents relevant to this clarification */
57
+ doc_references: ClarificationDocReference[];
58
+ /** Description of what action the client should take */
59
+ action_description?: string;
60
+ /** Available response options (radio buttons) */
61
+ response_options: ClarificationResponseOption[];
62
+ /** Client's selected response option value */
63
+ response_choice?: string;
64
+ /** Client's free-text comment */
65
+ user_comment?: string;
66
+ /** Files uploaded as part of the response */
67
+ response_files: FormFileAttachment[];
68
+ /** ISO timestamp when created */
69
+ created_at: string;
70
+ /** ISO timestamp of last update */
71
+ updated_at?: string;
72
+ /** User ID who created this clarification */
73
+ created_by?: string;
74
+ /** User ID who responded */
75
+ responded_by?: string;
76
+ /** User ID who resolved */
77
+ resolved_by?: string;
78
+ }
79
+ /** Template definition for a clarification type */
80
+ export interface ClarificationTemplate {
81
+ /** Template type key */
82
+ type: ClarificationType;
83
+ /** Human-readable name */
84
+ display_name: string;
85
+ /** Default issue description (pre-filled in grey zone) */
86
+ default_issue_description?: string;
87
+ /** Default action description (pre-filled in green zone) */
88
+ default_action_description?: string;
89
+ /** Available response options for this template */
90
+ response_options: ClarificationResponseOption[];
91
+ /** Whether to show the comment textarea */
92
+ enable_comment: boolean;
93
+ /** Whether to show doc reference list */
94
+ show_doc_references: boolean;
95
+ }
96
+ /** Response payload when a client submits a clarification response */
97
+ export interface ClarificationResponse {
98
+ /** Selected response option value */
99
+ response_choice?: string;
100
+ /** Free-text comment */
101
+ user_comment?: string;
102
+ /** Uploaded response files */
103
+ response_files?: FormFileAttachment[];
104
+ }
105
+ /** Consumer-provided callbacks for clarification lifecycle */
106
+ export interface ClarificationCallbacks {
107
+ /** Called when client submits a response to a clarification */
108
+ on_respond?: (clarification_id: string, response: ClarificationResponse) => void;
109
+ /** Called when reviewer resolves a clarification */
110
+ on_resolve?: (clarification_id: string) => void;
111
+ /** Called when reviewer dismisses a clarification */
112
+ on_dismiss?: (clarification_id: string) => void;
113
+ /** Called when reviewer re-opens a resolved/dismissed clarification */
114
+ on_reopen?: (clarification_id: string) => void;
115
+ /** Called when a doc reference is deleted from a clarification */
116
+ on_doc_delete?: (clarification_id: string, file_id: string) => void;
117
+ }
118
+ /** Summary counts for clarifications */
119
+ export interface ClarificationCounts {
120
+ pending: number;
121
+ responded: number;
122
+ resolved: number;
123
+ dismissed: number;
124
+ total: number;
125
+ }
126
+ //# sourceMappingURL=clarification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarification.d.ts","sourceRoot":"","sources":["../../src/types/clarification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Type definitions for Document Clarifications feature.
3
+ *
4
+ * Clarifications allow reviewers to flag document validation issues,
5
+ * reference relevant documents, and collect structured responses from clients.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=clarification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clarification.js","sourceRoot":"","sources":["../../src/types/clarification.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -36,6 +36,8 @@ export interface FormFileAttachment {
36
36
  status?: FileStatus;
37
37
  /** Server file path (for download fallback when get_download_url is unavailable) */
38
38
  file_path?: string;
39
+ /** Content tag classifying the document type (set by LLM via hazo_files content tagging) */
40
+ content_tag?: string | null;
39
41
  }
40
42
  /**
41
43
  * Type guard: checks whether an object is a FormFileAttachment (vs legacy FileData).
@@ -1 +1 @@
1
- {"version":3,"file":"file_attachment.d.ts","sourceRoot":"","sources":["../../src/types/file_attachment.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAEvE,6CAA6C;AAC7C,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;IACjC,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,kBAAkB,CAIjF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,kBAAkB,GAAG,QAAQ,CAUhF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,QAAQ,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,kBAAkB,CAepB"}
1
+ {"version":3,"file":"file_attachment.d.ts","sourceRoot":"","sources":["../../src/types/file_attachment.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAEvE,6CAA6C;AAC7C,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;IACjC,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4FAA4F;IAC5F,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,kBAAkB,CAIjF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,kBAAkB,GAAG,QAAQ,CAUhF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,QAAQ,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,kBAAkB,CAepB"}
@@ -1 +1 @@
1
- {"version":3,"file":"file_attachment.js","sourceRoot":"","sources":["../../src/types/file_attachment.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoCH;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAa;IACnD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpD,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,OAAO,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC;AAC7E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,UAA8B;IACpE,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,EAAE;QACrC,WAAW,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAC7C,UAAU,EAAE,UAAU,CAAC,UAAU;KAClC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,SAAmB,EACnB,MAAe;IAEf,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,MAAM,IAAI,YAAY,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;QAC/D,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,QAAQ;QAC5C,WAAW,EAAE,SAAS,CAAC,WAAW,YAAY,IAAI;YAChD,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE;YACrC,CAAC,CAAC,OAAO,SAAS,CAAC,WAAW,KAAK,QAAQ;gBACzC,CAAC,CAAC,SAAS,CAAC,WAAW;gBACvB,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC9B,SAAS,EAAE,SAAS,CAAC,SAAS;KAC/B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"file_attachment.js","sourceRoot":"","sources":["../../src/types/file_attachment.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsCH;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAa;IACnD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpD,MAAM,GAAG,GAAG,IAA+B,CAAC;IAC5C,OAAO,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC;AAC7E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,UAA8B;IACpE,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,EAAE;QACrC,WAAW,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAC7C,UAAU,EAAE,UAAU,CAAC,UAAU;KAClC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,SAAmB,EACnB,MAAe;IAEf,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,MAAM,IAAI,YAAY,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;QAC/D,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,QAAQ;QAC5C,WAAW,EAAE,SAAS,CAAC,WAAW,YAAY,IAAI;YAChD,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE;YACrC,CAAC,CAAC,OAAO,SAAS,CAAC,WAAW,KAAK,QAAQ;gBACzC,CAAC,CAAC,SAAS,CAAC,WAAW;gBACvB,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC9B,SAAS,EAAE,SAAS,CAAC,SAAS;KAC/B,CAAC;AACJ,CAAC"}
@@ -5,6 +5,24 @@
5
5
  * bridge client-side React components with server-side hazo_files logic.
6
6
  */
7
7
  import type { FormFileAttachment, FileStatus } from './file_attachment.js';
8
+ import type { ClarificationItem, ClarificationCallbacks } from './clarification.js';
9
+ /**
10
+ * Configuration for LLM-based content tagging at upload time.
11
+ * Mirrors hazo_files ContentTagConfig — when enabled, the LLM classifies
12
+ * the uploaded document and writes the result to content_tag.
13
+ */
14
+ export interface ContentTagConfig {
15
+ /** Whether to enable LLM-based content tagging */
16
+ content_tag_set_by_llm: boolean;
17
+ /** Prompt area for hazo_llm_api lookup */
18
+ content_tag_prompt_area: string;
19
+ /** Prompt key within the area */
20
+ content_tag_prompt_key: string;
21
+ /** Field name to extract from the LLM response as the content tag */
22
+ content_tag_prompt_return_fieldname: string;
23
+ /** Optional variables to substitute in the prompt template */
24
+ content_tag_prompt_variables?: Record<string, string>;
25
+ }
8
26
  /**
9
27
  * Options passed to the upload callback.
10
28
  */
@@ -39,6 +57,8 @@ export interface FileManagerCallbacks {
39
57
  get_status?: (file_ids: string[]) => Promise<Record<string, FileStatus>>;
40
58
  /** Re-upload to replace a missing file. Optional — if absent, re-upload is disabled. */
41
59
  reupload?: (file: File, original_file_id: string, options: FileUploadOptions) => Promise<FormFileAttachment>;
60
+ /** Query a file's content_tag after upload (for cases where tagging is async). */
61
+ get_content_tag?: (file_id: string) => Promise<string | null>;
42
62
  }
43
63
  /**
44
64
  * Configuration object passed to form components to enable hazo_files integration.
@@ -56,5 +76,21 @@ export interface FileManagerConfig {
56
76
  scope_id?: string;
57
77
  /** User ID passed to all upload calls */
58
78
  uploaded_by?: string;
79
+ /** Content tag configuration for LLM-based document classification at upload time */
80
+ content_tag_config?: ContentTagConfig;
81
+ /** Set of file IDs currently being validated by LLM (shows spinner overlay on file card) */
82
+ validating_file_ids?: Set<string>;
83
+ /** Set of file IDs that have validation errors (shows error badge on file card) */
84
+ error_file_ids?: Set<string>;
85
+ /** Set of file IDs that passed validation (shows green checkmark badge on file card) */
86
+ passed_file_ids?: Set<string>;
87
+ /** Map of file_id → array of issue descriptions for error popover */
88
+ error_file_details?: Record<string, string[]>;
89
+ /** Clarification items for file-level issue dialogs */
90
+ clarification_items?: ClarificationItem[];
91
+ /** Callbacks for clarification lifecycle (respond, resolve, dismiss, reopen) */
92
+ clarification_callbacks?: ClarificationCallbacks;
93
+ /** Custom className for the private files section background (default: 'bg-muted rounded-md p-3') */
94
+ private_files_class_name?: string;
59
95
  }
60
96
  //# sourceMappingURL=file_manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file_manager.d.ts","sourceRoot":"","sources":["../../src/types/file_manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAClC,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEhF,4FAA4F;IAC5F,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D,qCAAqC;IACrC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,KAAK,MAAM,CAAC;IAEjF,gFAAgF;IAChF,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAEzE,wFAAwF;IACxF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC9G;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,SAAS,EAAE,oBAAoB,CAAC;IAChC,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,wDAAwD;IACxD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sEAAsE;IACtE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"file_manager.d.ts","sourceRoot":"","sources":["../../src/types/file_manager.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,12 @@ export type { ControlName, RoleControlBehaviour, RoleBehaviour, IconsBehaviour,
5
5
  export { DEFAULT_ICON_ORDER, DEFAULT_ROLE_CONTROL_BEHAVIOUR, EDIT_CONTROL_NAMES, CONTROL_ICON_NAMES, get_default_icons_behaviour, } from './icons_behaviour.js';
6
6
  export type { FormFileAttachment, FileStatus, } from './file_attachment.js';
7
7
  export { is_form_file_attachment, attachment_to_file_data, file_data_to_attachment, } from './file_attachment.js';
8
- export type { FileUploadOptions, FileManagerCallbacks, FileManagerConfig, } from './file_manager.js';
8
+ export type { ContentTagConfig, FileUploadOptions, FileManagerCallbacks, FileManagerConfig, } from './file_manager.js';
9
9
  export type { StyleLevel, StyleVariant, StyleTokens, StyleClassDefinition, StylesConfig, ResolvedStyle, } from './style_variant.js';
10
10
  export { DEFAULT_STYLES_CONFIG } from './style_variant.js';
11
11
  export type { BaseFieldType, FieldType, FieldTypeDefinition, FieldTypesConfig, } from './field_type_definition.js';
12
12
  export { DEFAULT_FIELD_TYPES_CONFIG } from './field_type_definition.js';
13
13
  export type { DocLinkType, DocLink, UploadedFile, DocLinkClickEvent, } from './doc_link.js';
14
+ export type { ClarificationType, ClarificationStatus, ClarificationDocReference, ClarificationResponseOption, ClarificationItem, ClarificationTemplate, ClarificationResponse, ClarificationCallbacks, ClarificationCounts, } from './clarification.js';
15
+ export type { ValidationRule, ValidationRuleRecord, PromptCommand, PromptVariable, PromptEditorConfig, ValidationRuleExecution, ValidationRequest, ValidationRuleResult, ValidationResponse, ValidationRouteOptions, UseFileValidationOptions, UseFileValidationReturn, } from './validation.js';
14
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EACV,kBAAkB,EAClB,UAAU,GACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,YAAY,EACV,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAGxE,YAAY,EACV,WAAW,EACX,OAAO,EACP,YAAY,EACZ,iBAAiB,GAClB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EACV,kBAAkB,EAClB,UAAU,GACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,YAAY,EACV,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAGxE,YAAY,EACV,WAAW,EACX,OAAO,EACP,YAAY,EACZ,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAiB9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAS3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAkB9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAS3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC"}