hazo_collab_forms 3.0.8 → 3.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -0
- package/dist/components/clarification/clarification_card.d.ts +4 -0
- package/dist/components/clarification/clarification_card.d.ts.map +1 -1
- package/dist/components/clarification/clarification_card.js +19 -3
- package/dist/components/clarification/clarification_card.js.map +1 -1
- package/dist/components/clarification/clarification_group_card.d.ts +4 -0
- package/dist/components/clarification/clarification_group_card.d.ts.map +1 -1
- package/dist/components/clarification/clarification_group_card.js +30 -6
- package/dist/components/clarification/clarification_group_card.js.map +1 -1
- package/dist/components/clarification/clarification_section.d.ts +6 -0
- package/dist/components/clarification/clarification_section.d.ts.map +1 -1
- package/dist/components/clarification/clarification_section.js +7 -4
- package/dist/components/clarification/clarification_section.js.map +1 -1
- package/dist/components/hazo_collab_form_base.d.ts.map +1 -1
- package/dist/components/hazo_collab_form_base.js +1 -26
- package/dist/components/hazo_collab_form_base.js.map +1 -1
- package/dist/components/hazo_fb_form/components/backoffice_run_button.d.ts +1 -1
- package/dist/components/hazo_fb_form/components/backoffice_run_button.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/components/backoffice_run_button.js +1 -1
- package/dist/components/hazo_fb_form/components/backoffice_run_button.js.map +1 -1
- package/dist/components/hazo_fb_form/components/draft_clarification_card.js +1 -1
- package/dist/components/hazo_fb_form/components/draft_clarification_card.js.map +1 -1
- package/dist/components/hazo_fb_form/components/sent_clarification_group.d.ts +29 -0
- package/dist/components/hazo_fb_form/components/sent_clarification_group.d.ts.map +1 -0
- package/dist/components/hazo_fb_form/components/sent_clarification_group.js +77 -0
- package/dist/components/hazo_fb_form/components/sent_clarification_group.js.map +1 -0
- package/dist/components/hazo_fb_form/hazo_fb_form.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/hazo_fb_form.js +7 -1
- package/dist/components/hazo_fb_form/hazo_fb_form.js.map +1 -1
- package/dist/components/hazo_fb_form/shared/use_pdf_viewer.d.ts +3 -1
- package/dist/components/hazo_fb_form/shared/use_pdf_viewer.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/shared/use_pdf_viewer.js +8 -4
- package/dist/components/hazo_fb_form/shared/use_pdf_viewer.js.map +1 -1
- package/dist/components/hazo_fb_form/types.d.ts +11 -1
- package/dist/components/hazo_fb_form/types.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/views/back_office_view.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/views/back_office_view.js +3 -2
- package/dist/components/hazo_fb_form/views/back_office_view.js.map +1 -1
- package/dist/components/hazo_fb_form/views/clarifications_view.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/views/clarifications_view.js +26 -13
- package/dist/components/hazo_fb_form/views/clarifications_view.js.map +1 -1
- package/dist/components/hazo_fb_form/views/client_data_view.js +1 -1
- package/dist/components/hazo_fb_form/views/client_data_view.js.map +1 -1
- package/dist/components/hazo_fb_form/views/front_office_view.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/views/front_office_view.js +54 -47
- package/dist/components/hazo_fb_form/views/front_office_view.js.map +1 -1
- package/dist/components/hazo_fb_form/views/summary_review_view.d.ts.map +1 -1
- package/dist/components/hazo_fb_form/views/summary_review_view.js +73 -58
- package/dist/components/hazo_fb_form/views/summary_review_view.js.map +1 -1
- package/dist/components/shared/ihelp_icon.d.ts +22 -0
- package/dist/components/shared/ihelp_icon.d.ts.map +1 -0
- package/dist/components/shared/ihelp_icon.js +42 -0
- package/dist/components/shared/ihelp_icon.js.map +1 -0
- package/package.json +1 -1
|
@@ -14,7 +14,7 @@ import { VIRTUAL_INSTANCE_ID } from '../hazo_fb_form.js';
|
|
|
14
14
|
import { is_fb_terminal_status } from '../../../types/fb_form_instance.js';
|
|
15
15
|
export function SummaryReviewView({ on_file_view, on_submitted }) {
|
|
16
16
|
const ctx = useFbFormContext();
|
|
17
|
-
const { props, classification_results, sent_clarifications, active_instance_id, active_instance, all_clarifications, is_multi_instance, pending_clarification_responses,
|
|
17
|
+
const { props, classification_results, sent_clarifications, active_instance_id, active_instance, all_clarifications, is_multi_instance, pending_clarification_responses, batch_update_clarification_responses, set_manual_review_file_ids } = ctx;
|
|
18
18
|
const { front_sections, front_form_data } = props;
|
|
19
19
|
const is_past_instance = active_instance ? is_fb_terminal_status(active_instance.status) : false;
|
|
20
20
|
const [submitting, set_submitting] = useState(false);
|
|
@@ -22,43 +22,28 @@ export function SummaryReviewView({ on_file_view, on_submitted }) {
|
|
|
22
22
|
const show_submit = !!props.on_submit && !is_past_instance;
|
|
23
23
|
/**
|
|
24
24
|
* Collect files from clarification responses (e.g. "Provide a new document")
|
|
25
|
-
* and
|
|
26
|
-
*
|
|
25
|
+
* and compute patches for front_form_data. Returns patches so handle_submit
|
|
26
|
+
* can build the payload in-memory without depending on async state updates.
|
|
27
|
+
* Also fires on_front_change as a side effect for persistence if available.
|
|
27
28
|
*/
|
|
28
|
-
const inject_clarification_files = useCallback(() => {
|
|
29
|
-
if (!props.
|
|
30
|
-
return;
|
|
31
|
-
//
|
|
32
|
-
const sourced_ids = new Set(active_instance?.sourced_clarification_ids ?? []);
|
|
33
|
-
const direct_items = Array.isArray(active_instance?.front_form_data?.['__clarifications'])
|
|
34
|
-
? active_instance.front_form_data['__clarifications']
|
|
35
|
-
: [];
|
|
36
|
-
const sourced_items = direct_items.length > 0
|
|
37
|
-
? direct_items
|
|
38
|
-
: (sourced_ids.size > 0 ? all_clarifications.filter((c) => sourced_ids.has(c.id)) : []);
|
|
39
|
-
// Also check sent_clarifications for single-instance mode
|
|
40
|
-
const items_to_check = is_multi_instance ? sourced_items : sent_clarifications;
|
|
41
|
-
// Collect response files from already-flushed clarification items
|
|
29
|
+
const inject_clarification_files = useCallback((merged_clarifications, working_front_data) => {
|
|
30
|
+
if (!props.field_textbox_configs)
|
|
31
|
+
return {};
|
|
32
|
+
// Collect response files from merged clarifications (already includes flushed responses)
|
|
42
33
|
const response_files = [];
|
|
43
|
-
for (const item of
|
|
34
|
+
for (const item of merged_clarifications) {
|
|
44
35
|
if (item.response_files && item.response_files.length > 0) {
|
|
45
36
|
response_files.push(...item.response_files);
|
|
46
37
|
}
|
|
47
38
|
}
|
|
48
|
-
// Also collect from pending responses (not yet flushed to clarification items)
|
|
49
|
-
for (const [, response] of pending_clarification_responses) {
|
|
50
|
-
if (response.response_files && response.response_files.length > 0) {
|
|
51
|
-
response_files.push(...response.response_files);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
39
|
if (response_files.length === 0)
|
|
55
|
-
return;
|
|
40
|
+
return {};
|
|
56
41
|
// Find the first field_textbox_config field to inject files into
|
|
57
42
|
const first_field_id = Object.keys(props.field_textbox_configs)[0];
|
|
58
43
|
if (!first_field_id)
|
|
59
|
-
return;
|
|
60
|
-
// Get existing blocks from this field
|
|
61
|
-
const existing_value =
|
|
44
|
+
return {};
|
|
45
|
+
// Get existing blocks from this field (uses working_front_data, not closure)
|
|
46
|
+
const existing_value = working_front_data[first_field_id];
|
|
62
47
|
const existing_blocks = Array.isArray(existing_value) ? existing_value : [];
|
|
63
48
|
// Add response files as file blocks (skip duplicates)
|
|
64
49
|
const existing_file_ids = new Set(existing_blocks.filter((b) => b.type === 'file')
|
|
@@ -69,24 +54,20 @@ export function SummaryReviewView({ on_file_view, on_submitted }) {
|
|
|
69
54
|
new_blocks.push({ type: 'file', attachment: file });
|
|
70
55
|
}
|
|
71
56
|
}
|
|
72
|
-
if (new_blocks.length
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
57
|
+
if (new_blocks.length <= existing_blocks.length)
|
|
58
|
+
return {};
|
|
59
|
+
// Side effect: persist via on_front_change if available
|
|
60
|
+
props.on_front_change?.(first_field_id, new_blocks);
|
|
61
|
+
return { [first_field_id]: new_blocks };
|
|
62
|
+
}, [props]);
|
|
76
63
|
/**
|
|
77
64
|
* Flush pending clarification responses to back_form_data and remove files
|
|
78
65
|
* from front_form_data for clarifications where user chose "ignore".
|
|
66
|
+
* Returns merged clarifications and ignored file IDs so handle_submit can
|
|
67
|
+
* build the payload in-memory without depending on async state updates.
|
|
79
68
|
*/
|
|
80
69
|
const flush_pending_responses = useCallback(() => {
|
|
81
|
-
|
|
82
|
-
return;
|
|
83
|
-
// 1. Batch-flush all pending responses in a single write (avoids stale-state overwrites)
|
|
84
|
-
batch_update_clarification_responses(pending_clarification_responses);
|
|
85
|
-
// 2. Remove files referenced by "ignore" clarifications from front_form_data
|
|
86
|
-
// and collect files for "manual review" responses (skip validation)
|
|
87
|
-
const ignored_file_ids = new Set();
|
|
88
|
-
const manual_review_ids = new Set();
|
|
89
|
-
// Gather sourced clarifications for this instance
|
|
70
|
+
// Resolve the clarification items source (multi-instance vs single-instance)
|
|
90
71
|
const direct_items = Array.isArray(active_instance?.front_form_data?.['__clarifications'])
|
|
91
72
|
? active_instance.front_form_data['__clarifications']
|
|
92
73
|
: [];
|
|
@@ -95,22 +76,39 @@ export function SummaryReviewView({ on_file_view, on_submitted }) {
|
|
|
95
76
|
? direct_items
|
|
96
77
|
: (sourced_ids.size > 0 ? all_clarifications.filter((c) => sourced_ids.has(c.id)) : []);
|
|
97
78
|
const items_to_check = is_multi_instance ? sourced_items : sent_clarifications;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
79
|
+
if (pending_clarification_responses.size === 0) {
|
|
80
|
+
return { merged_clarifications: [...items_to_check], ignored_file_ids: new Set() };
|
|
81
|
+
}
|
|
82
|
+
// 1. Side effect: batch-flush all pending responses for persistence
|
|
83
|
+
batch_update_clarification_responses(pending_clarification_responses);
|
|
84
|
+
// 2. Compute merged clarifications in-memory (same merge logic as batch_update)
|
|
85
|
+
const now = new Date().toISOString();
|
|
86
|
+
const ignored_file_ids = new Set();
|
|
87
|
+
const manual_review_ids = new Set();
|
|
88
|
+
const merged_clarifications = items_to_check.map((item) => {
|
|
89
|
+
const response = pending_clarification_responses.get(item.id);
|
|
90
|
+
if (!response)
|
|
91
|
+
return item;
|
|
92
|
+
// Collect ignored / manual-review file IDs
|
|
102
93
|
if (response.response_choice === 'ignore') {
|
|
103
94
|
item.doc_references?.forEach((ref) => ignored_file_ids.add(ref.file_id));
|
|
104
95
|
}
|
|
105
96
|
else if (response.response_choice) {
|
|
106
|
-
// Check if the selected option has marks_manual_review flag
|
|
107
97
|
const selected_option = item.response_options?.find((o) => o.value === response.response_choice);
|
|
108
98
|
if (selected_option?.marks_manual_review) {
|
|
109
99
|
item.doc_references?.forEach((ref) => manual_review_ids.add(ref.file_id));
|
|
110
100
|
}
|
|
111
101
|
}
|
|
112
|
-
|
|
113
|
-
|
|
102
|
+
return {
|
|
103
|
+
...item,
|
|
104
|
+
status: 'responded',
|
|
105
|
+
response_choice: response.response_choice,
|
|
106
|
+
user_comment: response.user_comment,
|
|
107
|
+
response_files: response.response_files ?? [],
|
|
108
|
+
updated_at: now,
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
// 3. Side effect: store manual review file IDs for the pipeline
|
|
114
112
|
if (manual_review_ids.size > 0) {
|
|
115
113
|
set_manual_review_file_ids((prev) => {
|
|
116
114
|
const next = new Set(prev);
|
|
@@ -119,7 +117,7 @@ export function SummaryReviewView({ on_file_view, on_submitted }) {
|
|
|
119
117
|
return next;
|
|
120
118
|
});
|
|
121
119
|
}
|
|
122
|
-
//
|
|
120
|
+
// 4. Side effect: remove ignored files via on_front_change for real-time UI updates
|
|
123
121
|
if (ignored_file_ids.size > 0 && props.on_front_change && props.field_textbox_configs) {
|
|
124
122
|
for (const field_id of Object.keys(props.field_textbox_configs)) {
|
|
125
123
|
const blocks = front_form_data[field_id];
|
|
@@ -131,22 +129,39 @@ export function SummaryReviewView({ on_file_view, on_submitted }) {
|
|
|
131
129
|
}
|
|
132
130
|
}
|
|
133
131
|
}
|
|
134
|
-
|
|
132
|
+
return { merged_clarifications, ignored_file_ids };
|
|
133
|
+
}, [pending_clarification_responses, batch_update_clarification_responses, active_instance, all_clarifications, sent_clarifications, is_multi_instance, props, front_form_data, set_manual_review_file_ids]);
|
|
135
134
|
const handle_submit = useCallback(async () => {
|
|
136
135
|
if (!props.on_submit || submitting)
|
|
137
136
|
return;
|
|
138
137
|
set_submitting(true);
|
|
139
|
-
// Flush pending
|
|
140
|
-
flush_pending_responses();
|
|
141
|
-
//
|
|
142
|
-
|
|
143
|
-
|
|
138
|
+
// 1. Flush pending responses — returns in-memory merged data (side effects also fire)
|
|
139
|
+
const { merged_clarifications, ignored_file_ids } = flush_pending_responses();
|
|
140
|
+
// 2. Build working front_form_data with ignored files removed in-memory
|
|
141
|
+
const patched_front = { ...front_form_data };
|
|
142
|
+
if (ignored_file_ids.size > 0 && props.field_textbox_configs) {
|
|
143
|
+
for (const field_id of Object.keys(props.field_textbox_configs)) {
|
|
144
|
+
const blocks = patched_front[field_id];
|
|
145
|
+
if (!Array.isArray(blocks))
|
|
146
|
+
continue;
|
|
147
|
+
const filtered = blocks.filter((b) => b.type !== 'file' || !ignored_file_ids.has(b.attachment?.file_id));
|
|
148
|
+
if (filtered.length !== blocks.length) {
|
|
149
|
+
patched_front[field_id] = filtered;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// 3. Inject clarification response files in-memory (side effect also fires)
|
|
154
|
+
const inject_patches = inject_clarification_files(merged_clarifications, patched_front);
|
|
155
|
+
for (const [field_id, blocks] of Object.entries(inject_patches)) {
|
|
156
|
+
patched_front[field_id] = blocks;
|
|
157
|
+
}
|
|
158
|
+
// 4. Submit with in-memory data — not dependent on async state updates
|
|
144
159
|
try {
|
|
145
160
|
const data = {
|
|
146
|
-
front_form_data:
|
|
161
|
+
front_form_data: patched_front,
|
|
147
162
|
back_form_data: { ...props.back_form_data },
|
|
148
163
|
classification_results: [...classification_results],
|
|
149
|
-
clarifications:
|
|
164
|
+
clarifications: merged_clarifications,
|
|
150
165
|
instance_id: active_instance_id !== VIRTUAL_INSTANCE_ID ? active_instance_id : undefined,
|
|
151
166
|
};
|
|
152
167
|
await props.on_submit(data);
|
|
@@ -156,7 +171,7 @@ export function SummaryReviewView({ on_file_view, on_submitted }) {
|
|
|
156
171
|
finally {
|
|
157
172
|
set_submitting(false);
|
|
158
173
|
}
|
|
159
|
-
}, [props, front_form_data, classification_results,
|
|
174
|
+
}, [props, front_form_data, classification_results, active_instance_id, submitting, inject_clarification_files, flush_pending_responses]);
|
|
160
175
|
const submit_label = submitting
|
|
161
176
|
? 'Submitting...'
|
|
162
177
|
: (props.submit_label ?? 'Submit');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary_review_view.js","sourceRoot":"","sources":["../../../../src/components/hazo_fb_form/views/summary_review_view.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,CAAC;;AAEb,OAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"summary_review_view.js","sourceRoot":"","sources":["../../../../src/components/hazo_fb_form/views/summary_review_view.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IhelpIcon — Shared dynamic loader for hazo_ihelp inline help icons.
|
|
3
|
+
*
|
|
4
|
+
* Lazily imports hazo_ihelp (optional peer dependency) and renders
|
|
5
|
+
* an IhelpIcon next to labels. Module-level cache ensures the import
|
|
6
|
+
* only runs once across the entire app.
|
|
7
|
+
*
|
|
8
|
+
* Consumers can bypass dynamic import by calling register_ihelp_icon()
|
|
9
|
+
* or by passing ihelp_icon prop to HazoFbForm.
|
|
10
|
+
*/
|
|
11
|
+
import React from 'react';
|
|
12
|
+
/** Register an externally provided IhelpIcon component, bypassing dynamic import. */
|
|
13
|
+
export declare function register_ihelp_icon(Icon: React.ComponentType<{
|
|
14
|
+
context_key: string;
|
|
15
|
+
size?: number;
|
|
16
|
+
className?: string;
|
|
17
|
+
}>): void;
|
|
18
|
+
export declare function IhelpIcon({ context_key, size }: {
|
|
19
|
+
context_key: string;
|
|
20
|
+
size?: number;
|
|
21
|
+
}): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null;
|
|
22
|
+
//# sourceMappingURL=ihelp_icon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ihelp_icon.d.ts","sourceRoot":"","sources":["../../../src/components/shared/ihelp_icon.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,QAIxH;AAED,wBAAgB,SAAS,CAAC,EAAE,WAAW,EAAE,IAAS,EAAE,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,6EAkB3F"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IhelpIcon — Shared dynamic loader for hazo_ihelp inline help icons.
|
|
3
|
+
*
|
|
4
|
+
* Lazily imports hazo_ihelp (optional peer dependency) and renders
|
|
5
|
+
* an IhelpIcon next to labels. Module-level cache ensures the import
|
|
6
|
+
* only runs once across the entire app.
|
|
7
|
+
*
|
|
8
|
+
* Consumers can bypass dynamic import by calling register_ihelp_icon()
|
|
9
|
+
* or by passing ihelp_icon prop to HazoFbForm.
|
|
10
|
+
*/
|
|
11
|
+
'use client';
|
|
12
|
+
import React from 'react';
|
|
13
|
+
import { optional_import } from '../../utils/optional_import.js';
|
|
14
|
+
// Module-level cache: prevents multiple dynamic imports
|
|
15
|
+
let _ihelp_load_state = 'pending';
|
|
16
|
+
let _ihelp_icon_render = null;
|
|
17
|
+
/** Register an externally provided IhelpIcon component, bypassing dynamic import. */
|
|
18
|
+
export function register_ihelp_icon(Icon) {
|
|
19
|
+
_ihelp_icon_render = (p) => React.createElement(Icon, { context_key: p.context_key, size: p.size ?? 14, className: 'flex-shrink-0' });
|
|
20
|
+
_ihelp_load_state = 'loaded';
|
|
21
|
+
}
|
|
22
|
+
export function IhelpIcon({ context_key, size = 14 }) {
|
|
23
|
+
const [, force_update] = React.useState(0);
|
|
24
|
+
React.useEffect(() => {
|
|
25
|
+
if (_ihelp_load_state !== 'pending')
|
|
26
|
+
return;
|
|
27
|
+
_ihelp_load_state = 'loaded'; // prevent concurrent loads
|
|
28
|
+
optional_import('hazo_ihelp').then((mod) => {
|
|
29
|
+
if (mod?.IhelpIcon) {
|
|
30
|
+
register_ihelp_icon(mod.IhelpIcon);
|
|
31
|
+
force_update(n => n + 1);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
_ihelp_load_state = 'failed';
|
|
35
|
+
}
|
|
36
|
+
}).catch(() => { _ihelp_load_state = 'failed'; });
|
|
37
|
+
}, []);
|
|
38
|
+
if (!_ihelp_icon_render)
|
|
39
|
+
return null;
|
|
40
|
+
return _ihelp_icon_render({ context_key, size });
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=ihelp_icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ihelp_icon.js","sourceRoot":"","sources":["../../../src/components/shared/ihelp_icon.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,YAAY,CAAC;AAEb,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,wDAAwD;AACxD,IAAI,iBAAiB,GAAoC,SAAS,CAAC;AACnE,IAAI,kBAAkB,GAA0F,IAAI,CAAC;AAErH,qFAAqF;AACrF,MAAM,UAAU,mBAAmB,CAAC,IAAqF;IACvH,kBAAkB,GAAG,CAAC,CAAC,EAAE,EAAE,CACzB,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;IAC5G,iBAAiB,GAAG,QAAQ,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,EAA0C;IAC1F,MAAM,CAAC,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE3C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,iBAAiB,KAAK,SAAS;YAAE,OAAO;QAC5C,iBAAiB,GAAG,QAAQ,CAAC,CAAC,2BAA2B;QACzD,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,GAAQ,EAAE,EAAE;YAC9C,IAAI,GAAG,EAAE,SAAS,EAAE,CAAC;gBACnB,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACnC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,iBAAiB,GAAG,QAAQ,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,iBAAiB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,kBAAkB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC"}
|