@adminide-stack/yantra-mobile 12.0.51 → 12.0.52-alpha.1
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/lib/components/KeyboardComposerDock.js +4 -3
- package/lib/components/KeyboardComposerDock.js.map +1 -1
- package/lib/features/attachments/buildGatewayMedia.js +22 -15
- package/lib/features/attachments/buildGatewayMedia.js.map +1 -1
- package/lib/features/attachments/uploadChatAttachments.js +6 -4
- package/lib/features/attachments/uploadChatAttachments.js.map +1 -1
- package/lib/features/attachments/useImageAttachments.js +63 -17
- package/lib/features/attachments/useImageAttachments.js.map +1 -1
- package/lib/features/chat/AskUserCard.js +367 -0
- package/lib/features/chat/AskUserCard.js.map +1 -0
- package/lib/features/chat/ChatTranscript.js +203 -98
- package/lib/features/chat/ChatTranscript.js.map +1 -1
- package/lib/features/chat/ToolTimeline.js +118 -0
- package/lib/features/chat/ToolTimeline.js.map +1 -0
- package/lib/features/chat/askUser.js +136 -0
- package/lib/features/chat/askUser.js.map +1 -0
- package/lib/features/chat/streamingMarkdown.js +7 -0
- package/lib/features/chat/streamingMarkdown.js.map +1 -0
- package/lib/features/chat/toolActivity.js +77 -0
- package/lib/features/chat/toolActivity.js.map +1 -0
- package/lib/features/chat/transcriptGroups.js +29 -0
- package/lib/features/chat/transcriptGroups.js.map +1 -0
- package/lib/hooks/mintSurfaceSystemToken.js +28 -14
- package/lib/hooks/mintSurfaceSystemToken.js.map +1 -1
- package/lib/hooks/systemTokenJwt.js +75 -0
- package/lib/hooks/systemTokenJwt.js.map +1 -0
- package/lib/hooks/useCdecliAutoConnect.js +116 -138
- package/lib/hooks/useCdecliAutoConnect.js.map +1 -1
- package/lib/hooks/useChatApi.js +43 -17
- package/lib/hooks/useChatApi.js.map +1 -1
- package/lib/hooks/useChatStream.js +61 -13
- package/lib/hooks/useChatStream.js.map +1 -1
- package/lib/hooks/useObtainSystemToken.js +121 -36
- package/lib/hooks/useObtainSystemToken.js.map +1 -1
- package/lib/screens/Chat/index.js +29 -5
- package/lib/screens/Chat/index.js.map +1 -1
- package/lib/screens/Home/HomeScreen.js +21 -6
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/lib/screens/Home/components/ChatHistoryLanding.js +46 -16
- package/lib/screens/Home/components/ChatHistoryLanding.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {memo,useState,useRef,useMemo,useEffect}from'react';import {View,StyleSheet,Text,Pressable,TextInput}from'react-native';import {formatAskUserAnswers}from'./askUser.js';var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
var __restKey = (key) => typeof key === "symbol" ? key : key + "";
|
|
21
|
+
var __objRest = (source, exclude) => {
|
|
22
|
+
var target = {};
|
|
23
|
+
for (var prop in source)
|
|
24
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
25
|
+
target[prop] = source[prop];
|
|
26
|
+
if (source != null && __getOwnPropSymbols)
|
|
27
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
28
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
29
|
+
target[prop] = source[prop];
|
|
30
|
+
}
|
|
31
|
+
return target;
|
|
32
|
+
};
|
|
33
|
+
const ACCENT = "#2563eb";
|
|
34
|
+
const AskUserCard = memo(function AskUserCard2({
|
|
35
|
+
payload,
|
|
36
|
+
isDark = false,
|
|
37
|
+
disabled = false,
|
|
38
|
+
onAnswer,
|
|
39
|
+
onDismiss
|
|
40
|
+
}) {
|
|
41
|
+
var _a, _b, _c;
|
|
42
|
+
const questions = payload.questions;
|
|
43
|
+
const [index, setIndex] = useState(0);
|
|
44
|
+
const [answers, setAnswers] = useState({});
|
|
45
|
+
const [textDraft, setTextDraft] = useState("");
|
|
46
|
+
const inputRef = useRef(null);
|
|
47
|
+
const total = questions.length;
|
|
48
|
+
const question = questions[Math.min(index, Math.max(total - 1, 0))];
|
|
49
|
+
const isLast = index >= total - 1;
|
|
50
|
+
const allowText = (question == null ? void 0 : question.allowText) !== false;
|
|
51
|
+
const multiSelect = (question == null ? void 0 : question.multiSelect) === true;
|
|
52
|
+
const palette = useMemo(() => ({
|
|
53
|
+
card: isDark ? "#111827" : "#ffffff",
|
|
54
|
+
border: isDark ? "#1f2937" : "#e5e7eb",
|
|
55
|
+
title: isDark ? "#f1f5f9" : "#111827",
|
|
56
|
+
muted: isDark ? "#94a3b8" : "#6b7280",
|
|
57
|
+
optionBg: isDark ? "#0b1220" : "#f9fafb",
|
|
58
|
+
optionBorder: isDark ? "#243045" : "#e5e7eb",
|
|
59
|
+
chip: isDark ? "#1e293b" : "#f3f4f6",
|
|
60
|
+
chipOn: ACCENT
|
|
61
|
+
}), [isDark]);
|
|
62
|
+
const selectedLabels = useMemo(() => {
|
|
63
|
+
var _a2, _b2;
|
|
64
|
+
const raw = (_b2 = answers[(_a2 = question == null ? void 0 : question.id) != null ? _a2 : ""]) != null ? _b2 : "";
|
|
65
|
+
if (!raw.trim()) return [];
|
|
66
|
+
if (!multiSelect) return [raw];
|
|
67
|
+
return raw.split(",").map((v) => v.trim()).filter(Boolean);
|
|
68
|
+
}, [answers, question, multiSelect]);
|
|
69
|
+
const lastQuestionIdRef = useRef(null);
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
var _a2;
|
|
72
|
+
const q = questions[index];
|
|
73
|
+
if (!q || lastQuestionIdRef.current === q.id) return;
|
|
74
|
+
lastQuestionIdRef.current = q.id;
|
|
75
|
+
const existing = (_a2 = answers[q.id]) != null ? _a2 : "";
|
|
76
|
+
const parts = q.multiSelect ? existing.split(",").map((v) => v.trim()) : [existing];
|
|
77
|
+
const isOptionAnswer = existing !== "" && parts.every((part) => {
|
|
78
|
+
var _a3;
|
|
79
|
+
return (_a3 = q.options) == null ? void 0 : _a3.some((o) => o.label === part);
|
|
80
|
+
});
|
|
81
|
+
setTextDraft(isOptionAnswer ? "" : existing);
|
|
82
|
+
}, [index, questions]);
|
|
83
|
+
const record = (value, advance) => {
|
|
84
|
+
if (!question) return;
|
|
85
|
+
setAnswers((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
86
|
+
[question.id]: value
|
|
87
|
+
}));
|
|
88
|
+
if (!advance) return;
|
|
89
|
+
if (isLast) {
|
|
90
|
+
const formatted = formatAskUserAnswers(questions, __spreadProps(__spreadValues({}, answers), {
|
|
91
|
+
[question.id]: value
|
|
92
|
+
}));
|
|
93
|
+
if (formatted) onAnswer(formatted);
|
|
94
|
+
else onDismiss();
|
|
95
|
+
} else {
|
|
96
|
+
setIndex((i) => i + 1);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const chooseOption = (option) => {
|
|
100
|
+
var _a2;
|
|
101
|
+
if (!question || disabled) return;
|
|
102
|
+
if (option.other) {
|
|
103
|
+
(_a2 = inputRef.current) == null ? void 0 : _a2.focus();
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (multiSelect) {
|
|
107
|
+
const next2 = selectedLabels.includes(option.label) ? selectedLabels.filter((l) => l !== option.label) : [...selectedLabels, option.label];
|
|
108
|
+
record(next2.join(", "), false);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
record(option.label, true);
|
|
112
|
+
};
|
|
113
|
+
const currentAnswer = textDraft.trim() || answers[(_a = question == null ? void 0 : question.id) != null ? _a : ""] || "";
|
|
114
|
+
const next = () => {
|
|
115
|
+
if (disabled || !currentAnswer) return;
|
|
116
|
+
record(currentAnswer, true);
|
|
117
|
+
};
|
|
118
|
+
const skip = () => {
|
|
119
|
+
var _a2;
|
|
120
|
+
if (disabled || !question) return;
|
|
121
|
+
setAnswers((prev) => {
|
|
122
|
+
var _a3;
|
|
123
|
+
const _b3 = prev, {
|
|
124
|
+
[_a3 = question.id]: _dropped
|
|
125
|
+
} = _b3, rest = __objRest(_b3, [
|
|
126
|
+
__restKey(_a3)
|
|
127
|
+
]);
|
|
128
|
+
return rest;
|
|
129
|
+
});
|
|
130
|
+
if (isLast) {
|
|
131
|
+
const _b2 = answers, {
|
|
132
|
+
[_a2 = question.id]: _dropped
|
|
133
|
+
} = _b2, rest = __objRest(_b2, [
|
|
134
|
+
__restKey(_a2)
|
|
135
|
+
]);
|
|
136
|
+
const formatted = formatAskUserAnswers(questions, rest);
|
|
137
|
+
if (formatted) onAnswer(formatted);
|
|
138
|
+
else onDismiss();
|
|
139
|
+
} else {
|
|
140
|
+
setIndex((i) => i + 1);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
if (!question) return null;
|
|
144
|
+
return /* @__PURE__ */ jsxs(View, { style: [styles.card, {
|
|
145
|
+
backgroundColor: palette.card,
|
|
146
|
+
borderColor: palette.border
|
|
147
|
+
}], children: [
|
|
148
|
+
/* @__PURE__ */ jsxs(View, { style: styles.header, children: [
|
|
149
|
+
/* @__PURE__ */ jsxs(Text, { style: [styles.kicker, {
|
|
150
|
+
color: palette.muted
|
|
151
|
+
}], children: [
|
|
152
|
+
"Question ",
|
|
153
|
+
index + 1,
|
|
154
|
+
" of ",
|
|
155
|
+
total
|
|
156
|
+
] }),
|
|
157
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", accessibilityLabel: "Dismiss", hitSlop: 10, onPress: onDismiss, disabled, style: styles.dismiss, children: /* @__PURE__ */ jsx(Text, { style: [styles.dismissMark, {
|
|
158
|
+
color: palette.muted
|
|
159
|
+
}], children: "\xD7" }) })
|
|
160
|
+
] }),
|
|
161
|
+
question.header ? /* @__PURE__ */ jsx(Text, { style: [styles.eyebrow, {
|
|
162
|
+
color: palette.muted
|
|
163
|
+
}], children: question.header.toUpperCase() }) : null,
|
|
164
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.title, {
|
|
165
|
+
color: palette.title
|
|
166
|
+
}], children: question.title }),
|
|
167
|
+
multiSelect ? /* @__PURE__ */ jsx(Text, { style: [styles.hint, {
|
|
168
|
+
color: palette.muted
|
|
169
|
+
}], children: "Pick as many as apply." }) : null,
|
|
170
|
+
((_b = question.options) != null ? _b : []).map((o, i) => {
|
|
171
|
+
const active = selectedLabels.includes(o.label);
|
|
172
|
+
return /* @__PURE__ */ jsxs(Pressable, { accessibilityRole: "button", accessibilityState: {
|
|
173
|
+
selected: active,
|
|
174
|
+
disabled
|
|
175
|
+
}, accessibilityLabel: o.detail ? `${o.label}. ${o.detail}` : o.label, disabled, onPress: () => chooseOption(o), style: ({
|
|
176
|
+
pressed
|
|
177
|
+
}) => [styles.option, {
|
|
178
|
+
backgroundColor: active ? `${ACCENT}14` : palette.optionBg,
|
|
179
|
+
borderColor: active ? ACCENT : palette.optionBorder,
|
|
180
|
+
opacity: pressed && !disabled ? 0.75 : 1
|
|
181
|
+
}], children: [
|
|
182
|
+
/* @__PURE__ */ jsx(View, { style: [styles.indexChip, {
|
|
183
|
+
backgroundColor: active ? ACCENT : palette.chip
|
|
184
|
+
}], children: /* @__PURE__ */ jsx(Text, { style: [styles.indexChipText, {
|
|
185
|
+
color: active ? "#ffffff" : palette.muted
|
|
186
|
+
}], children: active && multiSelect ? "\u2713" : String(i + 1) }) }),
|
|
187
|
+
/* @__PURE__ */ jsxs(View, { style: styles.optionBody, children: [
|
|
188
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.optionLabel, {
|
|
189
|
+
color: palette.title
|
|
190
|
+
}], children: o.label }),
|
|
191
|
+
o.detail ? /* @__PURE__ */ jsx(Text, { style: [styles.optionDetail, {
|
|
192
|
+
color: palette.muted
|
|
193
|
+
}], children: o.detail }) : null
|
|
194
|
+
] })
|
|
195
|
+
] }, o.id);
|
|
196
|
+
}),
|
|
197
|
+
allowText ? /* @__PURE__ */ jsx(TextInput, { ref: inputRef, value: textDraft, onChangeText: setTextDraft, editable: !disabled, placeholder: (_c = question.textPlaceholder) != null ? _c : "Type your answer", placeholderTextColor: palette.muted, returnKeyType: isLast ? "send" : "next", onSubmitEditing: next, style: [styles.input, {
|
|
198
|
+
backgroundColor: palette.optionBg,
|
|
199
|
+
borderColor: palette.optionBorder,
|
|
200
|
+
color: palette.title
|
|
201
|
+
}] }) : null,
|
|
202
|
+
/* @__PURE__ */ jsxs(View, { style: styles.actions, children: [
|
|
203
|
+
index > 0 ? /* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: () => {
|
|
204
|
+
if (question && textDraft.trim()) record(textDraft.trim(), false);
|
|
205
|
+
setIndex((i) => i - 1);
|
|
206
|
+
}, disabled, style: styles.skip, children: /* @__PURE__ */ jsx(Text, { style: [styles.skipText, {
|
|
207
|
+
color: palette.muted
|
|
208
|
+
}], children: "Previous" }) }) : /* @__PURE__ */ jsx(View, {}),
|
|
209
|
+
/* @__PURE__ */ jsx(View, { style: styles.dots, pointerEvents: "none", children: total > 1 ? questions.map((q, i) => /* @__PURE__ */ jsx(View, { style: [styles.dot, i === index ? styles.dotOn : {
|
|
210
|
+
backgroundColor: palette.optionBorder
|
|
211
|
+
}] }, q.id)) : null }),
|
|
212
|
+
/* @__PURE__ */ jsxs(View, { style: styles.actionRight, children: [
|
|
213
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", onPress: skip, disabled, style: styles.skip, children: /* @__PURE__ */ jsx(Text, { style: [styles.skipText, {
|
|
214
|
+
color: palette.muted
|
|
215
|
+
}], children: "Skip" }) }),
|
|
216
|
+
/* @__PURE__ */ jsx(Pressable, { accessibilityRole: "button", accessibilityState: {
|
|
217
|
+
disabled: disabled || !currentAnswer
|
|
218
|
+
}, onPress: next, disabled: disabled || !currentAnswer, style: [styles.send, {
|
|
219
|
+
backgroundColor: currentAnswer && !disabled ? ACCENT : palette.optionBorder
|
|
220
|
+
}], children: /* @__PURE__ */ jsx(Text, { style: [styles.sendText, {
|
|
221
|
+
color: currentAnswer && !disabled ? "#ffffff" : palette.muted
|
|
222
|
+
}], children: isLast ? "Send" : "Next" }) })
|
|
223
|
+
] })
|
|
224
|
+
] })
|
|
225
|
+
] });
|
|
226
|
+
});
|
|
227
|
+
const styles = StyleSheet.create({
|
|
228
|
+
card: {
|
|
229
|
+
width: "100%",
|
|
230
|
+
borderWidth: 1,
|
|
231
|
+
borderRadius: 16,
|
|
232
|
+
padding: 14,
|
|
233
|
+
marginTop: 4,
|
|
234
|
+
marginBottom: 8
|
|
235
|
+
},
|
|
236
|
+
header: {
|
|
237
|
+
flexDirection: "row",
|
|
238
|
+
alignItems: "center",
|
|
239
|
+
justifyContent: "space-between"
|
|
240
|
+
},
|
|
241
|
+
kicker: {
|
|
242
|
+
fontSize: 10.5,
|
|
243
|
+
fontWeight: "600",
|
|
244
|
+
letterSpacing: 1.2,
|
|
245
|
+
textTransform: "uppercase"
|
|
246
|
+
},
|
|
247
|
+
dismiss: {
|
|
248
|
+
padding: 4,
|
|
249
|
+
minWidth: 32,
|
|
250
|
+
minHeight: 32,
|
|
251
|
+
alignItems: "center",
|
|
252
|
+
justifyContent: "center"
|
|
253
|
+
},
|
|
254
|
+
dismissMark: {
|
|
255
|
+
fontSize: 22,
|
|
256
|
+
lineHeight: 24,
|
|
257
|
+
fontWeight: "400"
|
|
258
|
+
},
|
|
259
|
+
eyebrow: {
|
|
260
|
+
fontSize: 11,
|
|
261
|
+
fontWeight: "600",
|
|
262
|
+
letterSpacing: 1,
|
|
263
|
+
marginTop: 6
|
|
264
|
+
},
|
|
265
|
+
title: {
|
|
266
|
+
fontSize: 15.5,
|
|
267
|
+
fontWeight: "700",
|
|
268
|
+
lineHeight: 21,
|
|
269
|
+
marginTop: 4,
|
|
270
|
+
marginBottom: 4
|
|
271
|
+
},
|
|
272
|
+
hint: {
|
|
273
|
+
fontSize: 12,
|
|
274
|
+
marginBottom: 6
|
|
275
|
+
},
|
|
276
|
+
option: {
|
|
277
|
+
flexDirection: "row",
|
|
278
|
+
alignItems: "center",
|
|
279
|
+
borderWidth: 1,
|
|
280
|
+
borderRadius: 12,
|
|
281
|
+
paddingHorizontal: 10,
|
|
282
|
+
paddingVertical: 10,
|
|
283
|
+
marginTop: 6,
|
|
284
|
+
minHeight: 44,
|
|
285
|
+
gap: 10
|
|
286
|
+
},
|
|
287
|
+
indexChip: {
|
|
288
|
+
width: 24,
|
|
289
|
+
height: 24,
|
|
290
|
+
borderRadius: 6,
|
|
291
|
+
alignItems: "center",
|
|
292
|
+
justifyContent: "center"
|
|
293
|
+
},
|
|
294
|
+
indexChipText: {
|
|
295
|
+
fontSize: 11,
|
|
296
|
+
fontWeight: "700"
|
|
297
|
+
},
|
|
298
|
+
optionBody: {
|
|
299
|
+
flex: 1
|
|
300
|
+
},
|
|
301
|
+
optionLabel: {
|
|
302
|
+
fontSize: 13.5,
|
|
303
|
+
fontWeight: "600"
|
|
304
|
+
},
|
|
305
|
+
optionDetail: {
|
|
306
|
+
fontSize: 12,
|
|
307
|
+
marginTop: 2,
|
|
308
|
+
lineHeight: 16
|
|
309
|
+
},
|
|
310
|
+
input: {
|
|
311
|
+
borderWidth: 1,
|
|
312
|
+
borderRadius: 12,
|
|
313
|
+
paddingHorizontal: 12,
|
|
314
|
+
paddingVertical: 10,
|
|
315
|
+
marginTop: 10,
|
|
316
|
+
fontSize: 14,
|
|
317
|
+
minHeight: 44
|
|
318
|
+
},
|
|
319
|
+
actions: {
|
|
320
|
+
flexDirection: "row",
|
|
321
|
+
alignItems: "center",
|
|
322
|
+
justifyContent: "space-between",
|
|
323
|
+
marginTop: 8,
|
|
324
|
+
gap: 8
|
|
325
|
+
},
|
|
326
|
+
dots: {
|
|
327
|
+
flexDirection: "row",
|
|
328
|
+
alignItems: "center",
|
|
329
|
+
gap: 5,
|
|
330
|
+
flex: 1,
|
|
331
|
+
justifyContent: "center"
|
|
332
|
+
},
|
|
333
|
+
dot: {
|
|
334
|
+
width: 6,
|
|
335
|
+
height: 6,
|
|
336
|
+
borderRadius: 3
|
|
337
|
+
},
|
|
338
|
+
dotOn: {
|
|
339
|
+
width: 16,
|
|
340
|
+
backgroundColor: ACCENT
|
|
341
|
+
},
|
|
342
|
+
actionRight: {
|
|
343
|
+
flexDirection: "row",
|
|
344
|
+
alignItems: "center"
|
|
345
|
+
},
|
|
346
|
+
skip: {
|
|
347
|
+
paddingHorizontal: 12,
|
|
348
|
+
paddingVertical: 10,
|
|
349
|
+
minHeight: 44,
|
|
350
|
+
justifyContent: "center"
|
|
351
|
+
},
|
|
352
|
+
skipText: {
|
|
353
|
+
fontSize: 13,
|
|
354
|
+
fontWeight: "600"
|
|
355
|
+
},
|
|
356
|
+
send: {
|
|
357
|
+
paddingHorizontal: 16,
|
|
358
|
+
paddingVertical: 10,
|
|
359
|
+
borderRadius: 12,
|
|
360
|
+
minHeight: 44,
|
|
361
|
+
justifyContent: "center"
|
|
362
|
+
},
|
|
363
|
+
sendText: {
|
|
364
|
+
fontSize: 14,
|
|
365
|
+
fontWeight: "700"
|
|
366
|
+
}
|
|
367
|
+
});export{AskUserCard};//# sourceMappingURL=AskUserCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AskUserCard.js","sources":["../../../src/features/chat/AskUserCard.tsx"],"sourcesContent":["/**\n * <AskUserCard> — the `[ASK_USER]` clarifying question, as a touch card.\n *\n * Phone twin of the web ResponsePromptCard: Question N of M, numbered options,\n * free-text row, Skip / Previous / Next / Send. Answers still travel as one\n * formatted `**Title:** answer` message so cdecli's parked turn is released.\n *\n * The reply goes out through the ordinary send path (onAnswer -> sendMessage),\n * which is what releases cdecli's parked turn.\n */\nimport React, { memo, useEffect, useMemo, useRef, useState } from 'react';\nimport { Pressable, StyleSheet, Text, TextInput, View } from 'react-native';\nimport { formatAskUserAnswers, type AskUserPayload } from './askUser';\n\nconst ACCENT = '#2563eb';\n\nexport const AskUserCard = memo(function AskUserCard({\n payload,\n isDark = false,\n disabled = false,\n onAnswer,\n onDismiss,\n}: {\n payload: AskUserPayload;\n isDark?: boolean;\n disabled?: boolean;\n onAnswer: (formatted: string) => void;\n onDismiss: () => void;\n}) {\n const questions = payload.questions;\n const [index, setIndex] = useState(0);\n const [answers, setAnswers] = useState<Record<string, string>>({});\n const [textDraft, setTextDraft] = useState('');\n const inputRef = useRef<TextInput>(null);\n\n const total = questions.length;\n const question = questions[Math.min(index, Math.max(total - 1, 0))];\n const isLast = index >= total - 1;\n const allowText = question?.allowText !== false;\n const multiSelect = question?.multiSelect === true;\n\n const palette = useMemo(\n () => ({\n card: isDark ? '#111827' : '#ffffff',\n border: isDark ? '#1f2937' : '#e5e7eb',\n title: isDark ? '#f1f5f9' : '#111827',\n muted: isDark ? '#94a3b8' : '#6b7280',\n optionBg: isDark ? '#0b1220' : '#f9fafb',\n optionBorder: isDark ? '#243045' : '#e5e7eb',\n chip: isDark ? '#1e293b' : '#f3f4f6',\n chipOn: ACCENT,\n }),\n [isDark],\n );\n\n const selectedLabels = useMemo(() => {\n const raw = answers[question?.id ?? ''] ?? '';\n if (!raw.trim()) return [] as string[];\n if (!multiSelect) return [raw];\n return raw\n .split(',')\n .map((v) => v.trim())\n .filter(Boolean);\n }, [answers, question, multiSelect]);\n\n const lastQuestionIdRef = useRef<string | null>(null);\n useEffect(() => {\n const q = questions[index];\n if (!q || lastQuestionIdRef.current === q.id) return;\n lastQuestionIdRef.current = q.id;\n const existing = answers[q.id] ?? '';\n const parts = q.multiSelect ? existing.split(',').map((v) => v.trim()) : [existing];\n const isOptionAnswer = existing !== '' && parts.every((part) => q.options?.some((o) => o.label === part));\n setTextDraft(isOptionAnswer ? '' : existing);\n // answers omitted: re-running on every keystroke would clobber the draft.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [index, questions]);\n\n const record = (value: string, advance: boolean) => {\n if (!question) return;\n setAnswers((prev) => ({ ...prev, [question.id]: value }));\n if (!advance) return;\n if (isLast) {\n const formatted = formatAskUserAnswers(questions, { ...answers, [question.id]: value });\n if (formatted) onAnswer(formatted);\n else onDismiss();\n } else {\n setIndex((i) => i + 1);\n }\n };\n\n const chooseOption = (option: { label: string; other?: boolean }) => {\n if (!question || disabled) return;\n if (option.other) {\n inputRef.current?.focus();\n return;\n }\n if (multiSelect) {\n const next = selectedLabels.includes(option.label)\n ? selectedLabels.filter((l) => l !== option.label)\n : [...selectedLabels, option.label];\n record(next.join(', '), false);\n return;\n }\n record(option.label, true);\n };\n\n const currentAnswer = textDraft.trim() || answers[question?.id ?? ''] || '';\n\n const next = () => {\n if (disabled || !currentAnswer) return;\n record(currentAnswer, true);\n };\n\n const skip = () => {\n if (disabled || !question) return;\n setAnswers((prev) => {\n const { [question.id]: _dropped, ...rest } = prev;\n return rest;\n });\n if (isLast) {\n const { [question.id]: _dropped, ...rest } = answers;\n const formatted = formatAskUserAnswers(questions, rest);\n if (formatted) onAnswer(formatted);\n else onDismiss();\n } else {\n setIndex((i) => i + 1);\n }\n };\n\n if (!question) return null;\n\n return (\n <View style={[styles.card, { backgroundColor: palette.card, borderColor: palette.border }]}>\n <View style={styles.header}>\n <Text style={[styles.kicker, { color: palette.muted }]}>\n Question {index + 1} of {total}\n </Text>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Dismiss\"\n hitSlop={10}\n onPress={onDismiss}\n disabled={disabled}\n style={styles.dismiss}\n >\n <Text style={[styles.dismissMark, { color: palette.muted }]}>×</Text>\n </Pressable>\n </View>\n\n {question.header ? (\n <Text style={[styles.eyebrow, { color: palette.muted }]}>{question.header.toUpperCase()}</Text>\n ) : null}\n <Text style={[styles.title, { color: palette.title }]}>{question.title}</Text>\n {multiSelect ? <Text style={[styles.hint, { color: palette.muted }]}>Pick as many as apply.</Text> : null}\n\n {(question.options ?? []).map((o, i) => {\n const active = selectedLabels.includes(o.label);\n return (\n <Pressable\n key={o.id}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: active, disabled }}\n accessibilityLabel={o.detail ? `${o.label}. ${o.detail}` : o.label}\n disabled={disabled}\n onPress={() => chooseOption(o)}\n style={({ pressed }) => [\n styles.option,\n {\n backgroundColor: active ? `${ACCENT}14` : palette.optionBg,\n borderColor: active ? ACCENT : palette.optionBorder,\n opacity: pressed && !disabled ? 0.75 : 1,\n },\n ]}\n >\n <View style={[styles.indexChip, { backgroundColor: active ? ACCENT : palette.chip }]}>\n <Text style={[styles.indexChipText, { color: active ? '#ffffff' : palette.muted }]}>\n {active && multiSelect ? '✓' : String(i + 1)}\n </Text>\n </View>\n <View style={styles.optionBody}>\n <Text style={[styles.optionLabel, { color: palette.title }]}>{o.label}</Text>\n {o.detail ? (\n <Text style={[styles.optionDetail, { color: palette.muted }]}>{o.detail}</Text>\n ) : null}\n </View>\n </Pressable>\n );\n })}\n\n {allowText ? (\n <TextInput\n ref={inputRef}\n value={textDraft}\n onChangeText={setTextDraft}\n editable={!disabled}\n placeholder={question.textPlaceholder ?? 'Type your answer'}\n placeholderTextColor={palette.muted}\n returnKeyType={isLast ? 'send' : 'next'}\n onSubmitEditing={next}\n style={[\n styles.input,\n {\n backgroundColor: palette.optionBg,\n borderColor: palette.optionBorder,\n color: palette.title,\n },\n ]}\n />\n ) : null}\n\n <View style={styles.actions}>\n {index > 0 ? (\n <Pressable\n accessibilityRole=\"button\"\n onPress={() => {\n if (question && textDraft.trim()) record(textDraft.trim(), false);\n setIndex((i) => i - 1);\n }}\n disabled={disabled}\n style={styles.skip}\n >\n <Text style={[styles.skipText, { color: palette.muted }]}>Previous</Text>\n </Pressable>\n ) : (\n <View />\n )}\n <View style={styles.dots} pointerEvents=\"none\">\n {total > 1\n ? questions.map((q, i) => (\n <View\n key={q.id}\n style={[\n styles.dot,\n i === index ? styles.dotOn : { backgroundColor: palette.optionBorder },\n ]}\n />\n ))\n : null}\n </View>\n <View style={styles.actionRight}>\n <Pressable accessibilityRole=\"button\" onPress={skip} disabled={disabled} style={styles.skip}>\n <Text style={[styles.skipText, { color: palette.muted }]}>Skip</Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ disabled: disabled || !currentAnswer }}\n onPress={next}\n disabled={disabled || !currentAnswer}\n style={[\n styles.send,\n { backgroundColor: currentAnswer && !disabled ? ACCENT : palette.optionBorder },\n ]}\n >\n <Text\n style={[styles.sendText, { color: currentAnswer && !disabled ? '#ffffff' : palette.muted }]}\n >\n {isLast ? 'Send' : 'Next'}\n </Text>\n </Pressable>\n </View>\n </View>\n </View>\n );\n});\n\nconst styles = StyleSheet.create({\n card: {\n width: '100%',\n borderWidth: 1,\n borderRadius: 16,\n padding: 14,\n marginTop: 4,\n marginBottom: 8,\n },\n header: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between' },\n kicker: { fontSize: 10.5, fontWeight: '600', letterSpacing: 1.2, textTransform: 'uppercase' },\n dismiss: { padding: 4, minWidth: 32, minHeight: 32, alignItems: 'center', justifyContent: 'center' },\n dismissMark: { fontSize: 22, lineHeight: 24, fontWeight: '400' },\n eyebrow: { fontSize: 11, fontWeight: '600', letterSpacing: 1, marginTop: 6 },\n title: { fontSize: 15.5, fontWeight: '700', lineHeight: 21, marginTop: 4, marginBottom: 4 },\n hint: { fontSize: 12, marginBottom: 6 },\n option: {\n flexDirection: 'row',\n alignItems: 'center',\n borderWidth: 1,\n borderRadius: 12,\n paddingHorizontal: 10,\n paddingVertical: 10,\n marginTop: 6,\n minHeight: 44,\n gap: 10,\n },\n indexChip: {\n width: 24,\n height: 24,\n borderRadius: 6,\n alignItems: 'center',\n justifyContent: 'center',\n },\n indexChipText: { fontSize: 11, fontWeight: '700' },\n optionBody: { flex: 1 },\n optionLabel: { fontSize: 13.5, fontWeight: '600' },\n optionDetail: { fontSize: 12, marginTop: 2, lineHeight: 16 },\n input: {\n borderWidth: 1,\n borderRadius: 12,\n paddingHorizontal: 12,\n paddingVertical: 10,\n marginTop: 10,\n fontSize: 14,\n minHeight: 44,\n },\n actions: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginTop: 8,\n gap: 8,\n },\n dots: { flexDirection: 'row', alignItems: 'center', gap: 5, flex: 1, justifyContent: 'center' },\n dot: { width: 6, height: 6, borderRadius: 3 },\n dotOn: { width: 16, backgroundColor: ACCENT },\n actionRight: { flexDirection: 'row', alignItems: 'center' },\n skip: { paddingHorizontal: 12, paddingVertical: 10, minHeight: 44, justifyContent: 'center' },\n skipText: { fontSize: 13, fontWeight: '600' },\n send: {\n paddingHorizontal: 16,\n paddingVertical: 10,\n borderRadius: 12,\n minHeight: 44,\n justifyContent: 'center',\n },\n sendText: { fontSize: 14, fontWeight: '700' },\n});\n"],"names":["AskUserCard","_a","_b","next"],"mappings":"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"}
|