@messenger-box/platform-mobile 10.0.3-alpha.22 → 10.0.3-alpha.226
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/messages-container-ui/BuildModeView.js +428 -0
- package/lib/components/messages-container-ui/BuildModeView.js.map +1 -0
- package/lib/components/messages-container-ui/MessagesContainerUI.js +55 -0
- package/lib/components/messages-container-ui/MessagesContainerUI.js.map +1 -0
- package/lib/components/messages-container-ui/PlanModeView.js +336 -0
- package/lib/components/messages-container-ui/PlanModeView.js.map +1 -0
- package/lib/compute.js +2 -3
- package/lib/compute.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/module.js.map +1 -1
- package/lib/queries/inboxQueries.js +62 -0
- package/lib/queries/inboxQueries.js.map +1 -0
- package/lib/routes.json +2 -3
- package/lib/screens/inbox/DialogMessages.js +8 -3
- package/lib/screens/inbox/DialogMessages.js.map +1 -1
- package/lib/screens/inbox/DialogThreadMessages.js +6 -11
- package/lib/screens/inbox/DialogThreadMessages.js.map +1 -1
- package/lib/screens/inbox/DialogThreads.js +58 -20
- package/lib/screens/inbox/DialogThreads.js.map +1 -1
- package/lib/screens/inbox/Inbox.js.map +1 -1
- package/lib/screens/inbox/components/CachedImage/consts.js +1 -1
- package/lib/screens/inbox/components/CachedImage/consts.js.map +1 -1
- package/lib/screens/inbox/components/CachedImage/index.js +125 -96
- package/lib/screens/inbox/components/CachedImage/index.js.map +1 -1
- package/lib/screens/inbox/components/DialogItem.js +160 -0
- package/lib/screens/inbox/components/DialogItem.js.map +1 -0
- package/lib/screens/inbox/components/GiftedChatInboxComponent.js +315 -0
- package/lib/screens/inbox/components/GiftedChatInboxComponent.js.map +1 -0
- package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js +3 -1
- package/lib/screens/inbox/components/SlackMessageContainer/ImageViewerModal.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/PaymentMessage.js +194 -0
- package/lib/screens/inbox/components/SlackMessageContainer/PaymentMessage.js.map +1 -0
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js +149 -36
- package/lib/screens/inbox/components/SlackMessageContainer/SlackBubble.js.map +1 -1
- package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js +4 -5
- package/lib/screens/inbox/components/SlackMessageContainer/SlackMessage.js.map +1 -1
- package/lib/screens/inbox/components/SubscriptionHandler.js +22 -0
- package/lib/screens/inbox/components/SubscriptionHandler.js.map +1 -0
- package/lib/screens/inbox/components/ThreadsViewItem.js +67 -47
- package/lib/screens/inbox/components/ThreadsViewItem.js.map +1 -1
- package/lib/screens/inbox/config/config.js +4 -2
- package/lib/screens/inbox/config/config.js.map +1 -1
- package/lib/screens/inbox/containers/ConversationView.js +1099 -1094
- package/lib/screens/inbox/containers/ConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/Dialogs.js +132 -534
- package/lib/screens/inbox/containers/Dialogs.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadConversationView.js +876 -1357
- package/lib/screens/inbox/containers/ThreadConversationView.js.map +1 -1
- package/lib/screens/inbox/containers/ThreadsView.js +81 -54
- package/lib/screens/inbox/containers/ThreadsView.js.map +1 -1
- package/lib/screens/inbox/hooks/useInboxMessages.js +31 -0
- package/lib/screens/inbox/hooks/useInboxMessages.js.map +1 -0
- package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js +108 -0
- package/lib/screens/inbox/hooks/useSafeDialogThreadsMachine.js.map +1 -0
- package/lib/screens/inbox/workflow/dialog-threads-xstate.js +151 -0
- package/lib/screens/inbox/workflow/dialog-threads-xstate.js.map +1 -0
- package/package.json +9 -7
- package/CHANGELOG.md +0 -168
- package/jest.config.js +0 -24
- package/lib/screens/inbox/components/DialogsListItem.js +0 -548
- package/lib/screens/inbox/components/DialogsListItem.js.map +0 -1
- package/lib/screens/inbox/components/ServiceDialogsListItem.js +0 -489
- package/lib/screens/inbox/components/ServiceDialogsListItem.js.map +0 -1
- package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js +0 -175
- package/lib/screens/inbox/components/workflow/dialogs-list-item-xstate.js.map +0 -1
- package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js +0 -191
- package/lib/screens/inbox/components/workflow/service-dialogs-list-item-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/conversation-xstate.js +0 -380
- package/lib/screens/inbox/containers/workflow/conversation-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js +0 -211
- package/lib/screens/inbox/containers/workflow/dialogs-xstate.js.map +0 -1
- package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js +0 -438
- package/lib/screens/inbox/containers/workflow/thread-conversation-xstate.js.map +0 -1
- package/rollup.config.mjs +0 -45
- package/src/components/index.ts +0 -0
- package/src/compute.ts +0 -63
- package/src/index.ts +0 -7
- package/src/module.ts +0 -10
- package/src/navigation/InboxNavigation.tsx +0 -102
- package/src/navigation/index.ts +0 -1
- package/src/screens/inbox/DialogMessages.tsx +0 -21
- package/src/screens/inbox/DialogThreadMessages.tsx +0 -97
- package/src/screens/inbox/DialogThreads.tsx +0 -129
- package/src/screens/inbox/Inbox.tsx +0 -17
- package/src/screens/inbox/components/CachedImage/consts.ts +0 -6
- package/src/screens/inbox/components/CachedImage/index.tsx +0 -223
- package/src/screens/inbox/components/DialogsHeader.tsx +0 -30
- package/src/screens/inbox/components/DialogsListItem.tsx +0 -819
- package/src/screens/inbox/components/ServiceDialogsListItem.tsx +0 -679
- package/src/screens/inbox/components/SlackMessageContainer/ImageViewerModal.tsx +0 -113
- package/src/screens/inbox/components/SlackMessageContainer/SlackBubble.tsx +0 -313
- package/src/screens/inbox/components/SlackMessageContainer/SlackMessage.tsx +0 -145
- package/src/screens/inbox/components/SlackMessageContainer/index.ts +0 -3
- package/src/screens/inbox/components/SupportServiceDialogsListItem.tsx +0 -301
- package/src/screens/inbox/components/ThreadsViewItem.tsx +0 -321
- package/src/screens/inbox/components/workflow/dialogs-list-item-xstate.ts +0 -145
- package/src/screens/inbox/components/workflow/service-dialogs-list-item-xstate.ts +0 -159
- package/src/screens/inbox/config/config.ts +0 -15
- package/src/screens/inbox/config/index.ts +0 -1
- package/src/screens/inbox/containers/ConversationView.tsx +0 -1782
- package/src/screens/inbox/containers/Dialogs.tsx +0 -794
- package/src/screens/inbox/containers/SupportServiceDialogs.tsx +0 -119
- package/src/screens/inbox/containers/ThreadConversationView.tsx +0 -2312
- package/src/screens/inbox/containers/ThreadsView.tsx +0 -305
- package/src/screens/inbox/containers/workflow/apollo/handleResult.ts +0 -20
- package/src/screens/inbox/containers/workflow/conversation-xstate.ts +0 -313
- package/src/screens/inbox/containers/workflow/dialogs-xstate.ts +0 -196
- package/src/screens/inbox/containers/workflow/thread-conversation-xstate.ts +0 -401
- package/src/screens/index.ts +0 -4
- package/tsconfig.json +0 -13
- package/webpack.config.js +0 -58
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
import React__default,{useRef,useState,useCallback,useMemo}from'react';import {StyleSheet,View,KeyboardAvoidingView,Platform,TouchableOpacity,Text}from'react-native';import {Bubble,GiftedChat}from'react-native-gifted-chat';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
|
+
const BUBBLE_BG = "#f3f4f6";
|
|
21
|
+
const USER_BUBBLE_BG = "#2563eb";
|
|
22
|
+
const BORDER_COLOR = "#e5e7eb";
|
|
23
|
+
const GREEN_DOT = "#22c55e";
|
|
24
|
+
function buildMessageToGifted(msg, currentUserId, index, total) {
|
|
25
|
+
const isUser = msg.role === "user";
|
|
26
|
+
return {
|
|
27
|
+
_id: msg.id,
|
|
28
|
+
text: msg.content,
|
|
29
|
+
createdAt: new Date(Date.now() - (total - 1 - index) * 6e4),
|
|
30
|
+
user: {
|
|
31
|
+
_id: isUser ? currentUserId : "assistant",
|
|
32
|
+
name: isUser ? "You" : "Agent"
|
|
33
|
+
},
|
|
34
|
+
buildMessage: msg
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function TaskStatusBubble({
|
|
38
|
+
status,
|
|
39
|
+
taskTitle,
|
|
40
|
+
onExpand
|
|
41
|
+
}) {
|
|
42
|
+
return /* @__PURE__ */ React__default.createElement(View, { style: [styles.taskBubble, status === "completed" && styles.taskBubbleCompleted] }, /* @__PURE__ */ React__default.createElement(View, { style: styles.taskBubbleRow }, /* @__PURE__ */ React__default.createElement(View, { style: [styles.greenDot, status === "executing" && styles.greenDotPulse] }), /* @__PURE__ */ React__default.createElement(Text, { style: styles.taskBubbleTitle }, status === "executing" ? "Executing task..." : "Task completed"), onExpand && /* @__PURE__ */ React__default.createElement(TouchableOpacity, { style: styles.expandButton, onPress: onExpand }, /* @__PURE__ */ React__default.createElement(Text, { style: styles.expandIcon }, "\u2922"))), taskTitle ? /* @__PURE__ */ React__default.createElement(Text, { style: styles.taskBubbleSubtitle }, taskTitle) : null);
|
|
43
|
+
}
|
|
44
|
+
function NextStepsBlock({
|
|
45
|
+
steps
|
|
46
|
+
}) {
|
|
47
|
+
return /* @__PURE__ */ React__default.createElement(View, { style: styles.nextStepsBlock }, /* @__PURE__ */ React__default.createElement(Text, { style: styles.nextStepsTitle }, "Next steps:"), steps.map((s, i) => /* @__PURE__ */ React__default.createElement(Text, { key: i, style: styles.nextStepsItem }, "\u2022 ", s)));
|
|
48
|
+
}
|
|
49
|
+
function ActionCardsRow({
|
|
50
|
+
cards
|
|
51
|
+
}) {
|
|
52
|
+
if (!(cards == null ? void 0 : cards.length)) return null;
|
|
53
|
+
return /* @__PURE__ */ React__default.createElement(View, { style: styles.actionCardsRow }, cards.map((c) => /* @__PURE__ */ React__default.createElement(TouchableOpacity, { key: c.id, style: styles.actionCard, onPress: c.onPress }, /* @__PURE__ */ React__default.createElement(Text, { style: styles.actionCardIcon }, c.icon === "globe" ? "\u{1F310}" : c.icon === "folder" ? "\u{1F4C1}" : "\u2022"), /* @__PURE__ */ React__default.createElement(View, { style: styles.actionCardText }, /* @__PURE__ */ React__default.createElement(Text, { style: styles.actionCardTitle }, c.title, " ", c.badge ? ` ${c.badge}` : ""), c.subtitle ? /* @__PURE__ */ React__default.createElement(Text, { style: styles.actionCardSubtitle }, c.subtitle) : null))));
|
|
54
|
+
}
|
|
55
|
+
function AgentStepsInline({
|
|
56
|
+
steps
|
|
57
|
+
}) {
|
|
58
|
+
if (!(steps == null ? void 0 : steps.length)) return null;
|
|
59
|
+
return /* @__PURE__ */ React__default.createElement(View, { style: styles.agentStepsInline }, steps.map((s) => /* @__PURE__ */ React__default.createElement(TouchableOpacity, { key: s.id, style: styles.agentStepChip, onPress: s.onPress }, /* @__PURE__ */ React__default.createElement(Text, { style: styles.agentStepLabel }, s.label))));
|
|
60
|
+
}
|
|
61
|
+
function BuildMessageBubble({
|
|
62
|
+
message,
|
|
63
|
+
isLeft,
|
|
64
|
+
showBorder
|
|
65
|
+
}) {
|
|
66
|
+
const taskStatus = message.taskStatus === "executing" || message.taskStatus === "completed" ? message.taskStatus : null;
|
|
67
|
+
const showContent = message.content.trim().length > 0;
|
|
68
|
+
return /* @__PURE__ */ React__default.createElement(View, { style: [styles.buildBubble, isLeft ? styles.buildBubbleLeft : styles.buildBubbleRight, isLeft && !showBorder && styles.buildBubbleLeftNoBorder] }, taskStatus && /* @__PURE__ */ React__default.createElement(TaskStatusBubble, { status: taskStatus, taskTitle: message.taskTitle, onExpand: () => {
|
|
69
|
+
} }), showContent && /* @__PURE__ */ React__default.createElement(Text, { style: [styles.buildBubbleText, !isLeft && styles.buildBubbleTextUser] }, message.content), message.steps && message.steps.length > 0 && /* @__PURE__ */ React__default.createElement(AgentStepsInline, { steps: message.steps }), message.nextSteps && message.nextSteps.length > 0 && /* @__PURE__ */ React__default.createElement(NextStepsBlock, { steps: message.nextSteps }), message.actionCards && message.actionCards.length > 0 && /* @__PURE__ */ React__default.createElement(ActionCardsRow, { cards: message.actionCards }), /* @__PURE__ */ React__default.createElement(View, { style: styles.feedbackRow }, /* @__PURE__ */ React__default.createElement(TouchableOpacity, { style: styles.feedbackIcon }, /* @__PURE__ */ React__default.createElement(Text, null, "\u{1F50A}")), /* @__PURE__ */ React__default.createElement(TouchableOpacity, { style: styles.feedbackIcon }, /* @__PURE__ */ React__default.createElement(Text, null, "\u{1F4CB}")), /* @__PURE__ */ React__default.createElement(TouchableOpacity, { style: styles.feedbackIcon }, /* @__PURE__ */ React__default.createElement(Text, null, "\u{1F44D}")), /* @__PURE__ */ React__default.createElement(TouchableOpacity, { style: styles.feedbackIcon }, /* @__PURE__ */ React__default.createElement(Text, null, "\u{1F44E}")), /* @__PURE__ */ React__default.createElement(TouchableOpacity, { style: styles.feedbackIcon }, /* @__PURE__ */ React__default.createElement(Text, null, "\u2197"))));
|
|
70
|
+
}
|
|
71
|
+
function BuildModeView({
|
|
72
|
+
messages,
|
|
73
|
+
streamingContent,
|
|
74
|
+
currentUser,
|
|
75
|
+
onSend,
|
|
76
|
+
disabled = false,
|
|
77
|
+
isLoading = false,
|
|
78
|
+
showDate = false,
|
|
79
|
+
showAvatar = false,
|
|
80
|
+
showMessageBubbleBorder = false,
|
|
81
|
+
renderInputToolbar
|
|
82
|
+
}) {
|
|
83
|
+
var _a;
|
|
84
|
+
const [inputValue, setInputValue] = React__default.useState("");
|
|
85
|
+
const messageListRef = useRef(null);
|
|
86
|
+
const [scrollFlags, setScrollFlags] = useState({
|
|
87
|
+
showScrollToBottom: false,
|
|
88
|
+
showScrollToTop: false
|
|
89
|
+
});
|
|
90
|
+
const SCROLL_THRESHOLD = 60;
|
|
91
|
+
const handleScroll = useCallback((e) => {
|
|
92
|
+
var _a2, _b;
|
|
93
|
+
const {
|
|
94
|
+
contentOffset,
|
|
95
|
+
contentSize,
|
|
96
|
+
layoutMeasurement
|
|
97
|
+
} = e.nativeEvent;
|
|
98
|
+
const {
|
|
99
|
+
y: offsetY
|
|
100
|
+
} = contentOffset;
|
|
101
|
+
const contentHeight = (_a2 = contentSize == null ? void 0 : contentSize.height) != null ? _a2 : 0;
|
|
102
|
+
const layoutHeight = (_b = layoutMeasurement == null ? void 0 : layoutMeasurement.height) != null ? _b : 0;
|
|
103
|
+
const maxOffset = Math.max(0, contentHeight - layoutHeight);
|
|
104
|
+
setScrollFlags({
|
|
105
|
+
showScrollToBottom: maxOffset > SCROLL_THRESHOLD && offsetY > SCROLL_THRESHOLD,
|
|
106
|
+
showScrollToTop: maxOffset > SCROLL_THRESHOLD && offsetY < maxOffset - SCROLL_THRESHOLD
|
|
107
|
+
});
|
|
108
|
+
}, []);
|
|
109
|
+
const scrollToBottom = useCallback(() => {
|
|
110
|
+
var _a2, _b;
|
|
111
|
+
(_b = (_a2 = messageListRef.current) == null ? void 0 : _a2.scrollToOffset) == null ? void 0 : _b.call(_a2, {
|
|
112
|
+
offset: 0,
|
|
113
|
+
animated: true
|
|
114
|
+
});
|
|
115
|
+
}, []);
|
|
116
|
+
const scrollToTop = useCallback(() => {
|
|
117
|
+
var _a2, _b;
|
|
118
|
+
(_b = (_a2 = messageListRef.current) == null ? void 0 : _a2.scrollToEnd) == null ? void 0 : _b.call(_a2, {
|
|
119
|
+
animated: true
|
|
120
|
+
});
|
|
121
|
+
}, []);
|
|
122
|
+
const giftedMessages = useMemo(() => {
|
|
123
|
+
const list = messages.map((m, i) => buildMessageToGifted(m, currentUser.id, i, messages.length));
|
|
124
|
+
return [...list].reverse();
|
|
125
|
+
}, [messages, currentUser.id]);
|
|
126
|
+
const messagesWithStreaming = useMemo(() => {
|
|
127
|
+
if (!(streamingContent == null ? void 0 : streamingContent.trim())) return giftedMessages;
|
|
128
|
+
const streamMsg = {
|
|
129
|
+
_id: "__streaming__",
|
|
130
|
+
text: streamingContent,
|
|
131
|
+
createdAt: new Date(Date.now() + 6e4),
|
|
132
|
+
user: {
|
|
133
|
+
_id: "assistant",
|
|
134
|
+
name: "Agent"
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
return [streamMsg, ...giftedMessages];
|
|
138
|
+
}, [giftedMessages, streamingContent]);
|
|
139
|
+
const onSendFromInput = useCallback(() => {
|
|
140
|
+
const t = inputValue.trim();
|
|
141
|
+
if (!t) return;
|
|
142
|
+
onSend(t);
|
|
143
|
+
setInputValue("");
|
|
144
|
+
}, [inputValue, onSend]);
|
|
145
|
+
const renderMessage = useCallback((props) => {
|
|
146
|
+
var _a2, _b, _c;
|
|
147
|
+
const buildMsg = (_a2 = props.currentMessage) == null ? void 0 : _a2.buildMessage;
|
|
148
|
+
if (buildMsg) {
|
|
149
|
+
const isLeft = props.currentMessage.user._id !== currentUser.id;
|
|
150
|
+
return /* @__PURE__ */ React__default.createElement(BuildMessageBubble, { message: buildMsg, isLeft, showBorder: showMessageBubbleBorder });
|
|
151
|
+
}
|
|
152
|
+
((_c = (_b = props.currentMessage) == null ? void 0 : _b.user) == null ? void 0 : _c._id) === currentUser.id;
|
|
153
|
+
return /* @__PURE__ */ React__default.createElement(Bubble, __spreadProps(__spreadValues({}, props), { renderTime: showDate ? void 0 : () => null, wrapperStyle: {
|
|
154
|
+
right: {
|
|
155
|
+
backgroundColor: USER_BUBBLE_BG,
|
|
156
|
+
borderRadius: 16,
|
|
157
|
+
padding: 12,
|
|
158
|
+
maxWidth: "92%",
|
|
159
|
+
marginHorizontal: 8
|
|
160
|
+
},
|
|
161
|
+
left: __spreadValues({
|
|
162
|
+
backgroundColor: BUBBLE_BG,
|
|
163
|
+
borderRadius: 16,
|
|
164
|
+
padding: 12,
|
|
165
|
+
width: "100%",
|
|
166
|
+
maxWidth: "100%",
|
|
167
|
+
alignSelf: "stretch",
|
|
168
|
+
marginHorizontal: 0
|
|
169
|
+
}, showMessageBubbleBorder && {
|
|
170
|
+
borderWidth: 1,
|
|
171
|
+
borderColor: BORDER_COLOR
|
|
172
|
+
})
|
|
173
|
+
}, textStyle: {
|
|
174
|
+
right: {
|
|
175
|
+
color: "#ffffff",
|
|
176
|
+
fontSize: 15
|
|
177
|
+
},
|
|
178
|
+
left: {
|
|
179
|
+
color: "#111827",
|
|
180
|
+
fontSize: 15
|
|
181
|
+
}
|
|
182
|
+
} }));
|
|
183
|
+
}, [currentUser.id, showDate, showMessageBubbleBorder]);
|
|
184
|
+
const renderInputToolbarCallback = useCallback(() => /* @__PURE__ */ React__default.createElement(View, { style: styles.inputToolbarWrap }, renderInputToolbar({
|
|
185
|
+
value: inputValue,
|
|
186
|
+
onChange: setInputValue,
|
|
187
|
+
onSend: onSendFromInput,
|
|
188
|
+
disabled: disabled || isLoading
|
|
189
|
+
})), [inputValue, disabled, isLoading, onSendFromInput, renderInputToolbar]);
|
|
190
|
+
return /* @__PURE__ */ React__default.createElement(KeyboardAvoidingView, { style: styles.container, behavior: Platform.OS === "ios" ? "padding" : void 0, keyboardVerticalOffset: Platform.OS === "ios" ? 64 : 0 }, /* @__PURE__ */ React__default.createElement(View, { style: styles.chatArea }, /* @__PURE__ */ React__default.createElement(GiftedChat, { messageContainerRef: messageListRef, messages: messagesWithStreaming, onSend: (msgs) => {
|
|
191
|
+
var _a2, _b;
|
|
192
|
+
const t = (_b = (_a2 = msgs[0]) == null ? void 0 : _a2.text) == null ? void 0 : _b.trim();
|
|
193
|
+
if (t) onSend(t);
|
|
194
|
+
}, user: {
|
|
195
|
+
_id: currentUser.id,
|
|
196
|
+
name: (_a = currentUser.name) != null ? _a : "You",
|
|
197
|
+
avatar: currentUser.avatar
|
|
198
|
+
}, renderMessage, renderInputToolbar: renderInputToolbarCallback, renderComposer: () => null, renderSend: () => null, renderAvatar: showAvatar ? void 0 : () => null, showUserAvatar: showAvatar, renderTime: showDate ? void 0 : () => null, renderDay: showDate ? void 0 : () => null, listViewProps: {
|
|
199
|
+
style: styles.list,
|
|
200
|
+
contentContainerStyle: [styles.listContent, {
|
|
201
|
+
paddingHorizontal: 0
|
|
202
|
+
}],
|
|
203
|
+
onScroll: handleScroll,
|
|
204
|
+
scrollEventThrottle: 100
|
|
205
|
+
}, messagesContainerStyle: [styles.messagesContainer, styles.messagesContainerFullWidth], scrollToBottom: false, minInputToolbarHeight: 56 }), scrollFlags.showScrollToBottom && /* @__PURE__ */ React__default.createElement(TouchableOpacity, { style: styles.scrollFabBottom, onPress: scrollToBottom, activeOpacity: 0.8, accessibilityLabel: "Scroll to bottom" }, /* @__PURE__ */ React__default.createElement(Text, { style: styles.scrollFabText }, "\u2193")), scrollFlags.showScrollToTop && /* @__PURE__ */ React__default.createElement(TouchableOpacity, { style: styles.scrollFabTop, onPress: scrollToTop, activeOpacity: 0.8, accessibilityLabel: "Scroll to top" }, /* @__PURE__ */ React__default.createElement(Text, { style: styles.scrollFabText }, "\u2191"))));
|
|
206
|
+
}
|
|
207
|
+
const styles = StyleSheet.create({
|
|
208
|
+
container: {
|
|
209
|
+
flex: 1
|
|
210
|
+
},
|
|
211
|
+
chatArea: {
|
|
212
|
+
flex: 1
|
|
213
|
+
},
|
|
214
|
+
list: {
|
|
215
|
+
flex: 1
|
|
216
|
+
},
|
|
217
|
+
listContent: {
|
|
218
|
+
flexGrow: 1,
|
|
219
|
+
justifyContent: "flex-end",
|
|
220
|
+
paddingTop: 0,
|
|
221
|
+
paddingBottom: 8,
|
|
222
|
+
paddingHorizontal: 0
|
|
223
|
+
},
|
|
224
|
+
messagesContainer: {
|
|
225
|
+
paddingTop: 0,
|
|
226
|
+
paddingBottom: 8
|
|
227
|
+
},
|
|
228
|
+
messagesContainerFullWidth: {
|
|
229
|
+
paddingHorizontal: 0,
|
|
230
|
+
paddingLeft: 0,
|
|
231
|
+
paddingRight: 0,
|
|
232
|
+
marginHorizontal: 0
|
|
233
|
+
},
|
|
234
|
+
scrollToBottom: {
|
|
235
|
+
width: 32,
|
|
236
|
+
height: 32,
|
|
237
|
+
borderRadius: 16,
|
|
238
|
+
backgroundColor: "#fff",
|
|
239
|
+
marginBottom: 8
|
|
240
|
+
},
|
|
241
|
+
scrollFabBottom: {
|
|
242
|
+
position: "absolute",
|
|
243
|
+
right: 12,
|
|
244
|
+
bottom: 120,
|
|
245
|
+
width: 40,
|
|
246
|
+
height: 40,
|
|
247
|
+
borderRadius: 20,
|
|
248
|
+
backgroundColor: "#fff",
|
|
249
|
+
alignItems: "center",
|
|
250
|
+
justifyContent: "center",
|
|
251
|
+
shadowColor: "#000",
|
|
252
|
+
shadowOffset: {
|
|
253
|
+
width: 0,
|
|
254
|
+
height: 1
|
|
255
|
+
},
|
|
256
|
+
shadowOpacity: 0.2,
|
|
257
|
+
shadowRadius: 2,
|
|
258
|
+
elevation: 3
|
|
259
|
+
},
|
|
260
|
+
scrollFabTop: {
|
|
261
|
+
position: "absolute",
|
|
262
|
+
right: 12,
|
|
263
|
+
top: 12,
|
|
264
|
+
width: 40,
|
|
265
|
+
height: 40,
|
|
266
|
+
borderRadius: 20,
|
|
267
|
+
backgroundColor: "#fff",
|
|
268
|
+
alignItems: "center",
|
|
269
|
+
justifyContent: "center",
|
|
270
|
+
shadowColor: "#000",
|
|
271
|
+
shadowOffset: {
|
|
272
|
+
width: 0,
|
|
273
|
+
height: 1
|
|
274
|
+
},
|
|
275
|
+
shadowOpacity: 0.2,
|
|
276
|
+
shadowRadius: 2,
|
|
277
|
+
elevation: 3
|
|
278
|
+
},
|
|
279
|
+
scrollFabText: {
|
|
280
|
+
fontSize: 20,
|
|
281
|
+
color: "#2563eb",
|
|
282
|
+
fontWeight: "600"
|
|
283
|
+
},
|
|
284
|
+
inputToolbarWrap: {
|
|
285
|
+
paddingHorizontal: 8,
|
|
286
|
+
paddingVertical: 8,
|
|
287
|
+
backgroundColor: "#fff",
|
|
288
|
+
borderTopWidth: 1,
|
|
289
|
+
borderTopColor: BORDER_COLOR
|
|
290
|
+
},
|
|
291
|
+
taskBubble: {
|
|
292
|
+
backgroundColor: BUBBLE_BG,
|
|
293
|
+
borderRadius: 12,
|
|
294
|
+
padding: 12,
|
|
295
|
+
marginBottom: 8,
|
|
296
|
+
borderWidth: 1,
|
|
297
|
+
borderColor: BORDER_COLOR
|
|
298
|
+
},
|
|
299
|
+
taskBubbleCompleted: {},
|
|
300
|
+
taskBubbleRow: {
|
|
301
|
+
flexDirection: "row",
|
|
302
|
+
alignItems: "center"
|
|
303
|
+
},
|
|
304
|
+
greenDot: {
|
|
305
|
+
width: 8,
|
|
306
|
+
height: 8,
|
|
307
|
+
borderRadius: 4,
|
|
308
|
+
backgroundColor: GREEN_DOT,
|
|
309
|
+
marginRight: 8
|
|
310
|
+
},
|
|
311
|
+
greenDotPulse: {
|
|
312
|
+
opacity: 0.8
|
|
313
|
+
},
|
|
314
|
+
taskBubbleTitle: {
|
|
315
|
+
flex: 1,
|
|
316
|
+
fontWeight: "600",
|
|
317
|
+
color: "#111827",
|
|
318
|
+
fontSize: 14
|
|
319
|
+
},
|
|
320
|
+
expandButton: {
|
|
321
|
+
padding: 4
|
|
322
|
+
},
|
|
323
|
+
expandIcon: {
|
|
324
|
+
fontSize: 14,
|
|
325
|
+
color: "#6b7280"
|
|
326
|
+
},
|
|
327
|
+
taskBubbleSubtitle: {
|
|
328
|
+
marginTop: 4,
|
|
329
|
+
marginLeft: 16,
|
|
330
|
+
color: "#6b7280",
|
|
331
|
+
fontSize: 13
|
|
332
|
+
},
|
|
333
|
+
nextStepsBlock: {
|
|
334
|
+
marginTop: 8
|
|
335
|
+
},
|
|
336
|
+
nextStepsTitle: {
|
|
337
|
+
fontWeight: "700",
|
|
338
|
+
color: "#111827",
|
|
339
|
+
marginBottom: 4,
|
|
340
|
+
fontSize: 14
|
|
341
|
+
},
|
|
342
|
+
nextStepsItem: {
|
|
343
|
+
color: "#374151",
|
|
344
|
+
fontSize: 13,
|
|
345
|
+
marginBottom: 2
|
|
346
|
+
},
|
|
347
|
+
actionCardsRow: {
|
|
348
|
+
marginTop: 12,
|
|
349
|
+
gap: 8
|
|
350
|
+
},
|
|
351
|
+
actionCard: {
|
|
352
|
+
flexDirection: "row",
|
|
353
|
+
alignItems: "center",
|
|
354
|
+
backgroundColor: BUBBLE_BG,
|
|
355
|
+
borderRadius: 12,
|
|
356
|
+
padding: 12,
|
|
357
|
+
marginBottom: 8,
|
|
358
|
+
borderWidth: 1,
|
|
359
|
+
borderColor: BORDER_COLOR
|
|
360
|
+
},
|
|
361
|
+
actionCardIcon: {
|
|
362
|
+
marginRight: 10,
|
|
363
|
+
fontSize: 18
|
|
364
|
+
},
|
|
365
|
+
actionCardText: {
|
|
366
|
+
flex: 1
|
|
367
|
+
},
|
|
368
|
+
actionCardTitle: {
|
|
369
|
+
fontWeight: "600",
|
|
370
|
+
color: "#111827",
|
|
371
|
+
fontSize: 14
|
|
372
|
+
},
|
|
373
|
+
actionCardSubtitle: {
|
|
374
|
+
marginTop: 2,
|
|
375
|
+
color: "#6b7280",
|
|
376
|
+
fontSize: 12
|
|
377
|
+
},
|
|
378
|
+
agentStepsInline: {
|
|
379
|
+
flexDirection: "row",
|
|
380
|
+
flexWrap: "wrap",
|
|
381
|
+
marginTop: 8,
|
|
382
|
+
gap: 6
|
|
383
|
+
},
|
|
384
|
+
agentStepChip: {
|
|
385
|
+
backgroundColor: "#e5e7eb",
|
|
386
|
+
paddingHorizontal: 10,
|
|
387
|
+
paddingVertical: 6,
|
|
388
|
+
borderRadius: 8
|
|
389
|
+
},
|
|
390
|
+
agentStepLabel: {
|
|
391
|
+
color: "#374151",
|
|
392
|
+
fontSize: 13
|
|
393
|
+
},
|
|
394
|
+
buildBubble: {
|
|
395
|
+
maxWidth: "100%",
|
|
396
|
+
marginVertical: 4,
|
|
397
|
+
padding: 12,
|
|
398
|
+
borderRadius: 16
|
|
399
|
+
},
|
|
400
|
+
buildBubbleLeft: {
|
|
401
|
+
alignSelf: "flex-start",
|
|
402
|
+
backgroundColor: BUBBLE_BG,
|
|
403
|
+
borderWidth: 1,
|
|
404
|
+
borderColor: BORDER_COLOR
|
|
405
|
+
},
|
|
406
|
+
buildBubbleLeftNoBorder: {
|
|
407
|
+
borderWidth: 0
|
|
408
|
+
},
|
|
409
|
+
buildBubbleRight: {
|
|
410
|
+
alignSelf: "flex-end",
|
|
411
|
+
backgroundColor: USER_BUBBLE_BG
|
|
412
|
+
},
|
|
413
|
+
buildBubbleText: {
|
|
414
|
+
color: "#111827",
|
|
415
|
+
fontSize: 15
|
|
416
|
+
},
|
|
417
|
+
buildBubbleTextUser: {
|
|
418
|
+
color: "#ffffff"
|
|
419
|
+
},
|
|
420
|
+
feedbackRow: {
|
|
421
|
+
flexDirection: "row",
|
|
422
|
+
marginTop: 8,
|
|
423
|
+
gap: 12
|
|
424
|
+
},
|
|
425
|
+
feedbackIcon: {
|
|
426
|
+
padding: 4
|
|
427
|
+
}
|
|
428
|
+
});export{BuildModeView};//# sourceMappingURL=BuildModeView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuildModeView.js","sources":["../../../src/components/messages-container-ui/BuildModeView.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { View, Text, StyleSheet, TouchableOpacity, Platform, KeyboardAvoidingView } from 'react-native';\nimport { GiftedChat, IMessage, Bubble } from 'react-native-gifted-chat';\nimport type { BuildMessage } from './types';\n\nconst BUBBLE_BG = '#f3f4f6';\nconst USER_BUBBLE_BG = '#2563eb';\nconst BORDER_COLOR = '#e5e7eb';\nconst GREEN_DOT = '#22c55e';\n\nexport interface BuildModeViewInputToolbarProps {\n value: string;\n onChange: (text: string) => void;\n onSend: () => void;\n disabled?: boolean;\n}\n\nexport interface BuildModeViewProps {\n messages: BuildMessage[];\n streamingContent?: string;\n currentUser: { id: string; name?: string; avatar?: string };\n onSend: (text: string) => void;\n disabled?: boolean;\n isLoading?: boolean;\n onStop?: () => void;\n /** Show date/timestamp on messages. Default false (Kimi-style: hide). */\n showDate?: boolean;\n /** Show avatar/icon next to messages. Default false (Kimi-style: hide). */\n showAvatar?: boolean;\n /** Show border around assistant/left message bubbles. Default false (hide). */\n showMessageBubbleBorder?: boolean;\n /** Input component is passed from outside; receives value, onChange, onSend, disabled */\n renderInputToolbar: (props: BuildModeViewInputToolbarProps) => React.ReactNode;\n}\n\nfunction buildMessageToGifted(\n msg: BuildMessage,\n currentUserId: string,\n index: number,\n total: number,\n): IMessage & { buildMessage?: BuildMessage } {\n const isUser = msg.role === 'user';\n return {\n _id: msg.id,\n text: msg.content,\n createdAt: new Date(Date.now() - (total - 1 - index) * 60000),\n user: { _id: isUser ? currentUserId : 'assistant', name: isUser ? 'You' : 'Agent' },\n buildMessage: msg,\n };\n}\n\nfunction TaskStatusBubble({\n status,\n taskTitle,\n onExpand,\n}: {\n status: 'executing' | 'completed';\n taskTitle?: string;\n onExpand?: () => void;\n}) {\n return (\n <View style={[styles.taskBubble, status === 'completed' && styles.taskBubbleCompleted]}>\n <View style={styles.taskBubbleRow}>\n <View style={[styles.greenDot, status === 'executing' && styles.greenDotPulse]} />\n <Text style={styles.taskBubbleTitle}>\n {status === 'executing' ? 'Executing task...' : 'Task completed'}\n </Text>\n {onExpand && (\n <TouchableOpacity style={styles.expandButton} onPress={onExpand}>\n <Text style={styles.expandIcon}>⤢</Text>\n </TouchableOpacity>\n )}\n </View>\n {taskTitle ? <Text style={styles.taskBubbleSubtitle}>{taskTitle}</Text> : null}\n </View>\n );\n}\n\nfunction NextStepsBlock({ steps }: { steps: string[] }) {\n return (\n <View style={styles.nextStepsBlock}>\n <Text style={styles.nextStepsTitle}>Next steps:</Text>\n {steps.map((s, i) => (\n <Text key={i} style={styles.nextStepsItem}>\n • {s}\n </Text>\n ))}\n </View>\n );\n}\n\nfunction ActionCardsRow({ cards }: { cards: BuildMessage['actionCards'] }) {\n if (!cards?.length) return null;\n return (\n <View style={styles.actionCardsRow}>\n {cards.map((c) => (\n <TouchableOpacity key={c.id} style={styles.actionCard} onPress={c.onPress}>\n <Text style={styles.actionCardIcon}>\n {c.icon === 'globe' ? '🌐' : c.icon === 'folder' ? '📁' : '•'}\n </Text>\n <View style={styles.actionCardText}>\n <Text style={styles.actionCardTitle}>\n {c.title} {c.badge ? ` ${c.badge}` : ''}\n </Text>\n {c.subtitle ? <Text style={styles.actionCardSubtitle}>{c.subtitle}</Text> : null}\n </View>\n </TouchableOpacity>\n ))}\n </View>\n );\n}\n\nfunction AgentStepsInline({ steps }: { steps: BuildMessage['steps'] }) {\n if (!steps?.length) return null;\n return (\n <View style={styles.agentStepsInline}>\n {steps.map((s) => (\n <TouchableOpacity key={s.id} style={styles.agentStepChip} onPress={s.onPress}>\n <Text style={styles.agentStepLabel}>{s.label}</Text>\n </TouchableOpacity>\n ))}\n </View>\n );\n}\n\nfunction BuildMessageBubble({\n message,\n isLeft,\n showBorder,\n}: {\n message: BuildMessage;\n isLeft: boolean;\n showBorder: boolean;\n}) {\n const taskStatus =\n message.taskStatus === 'executing' || message.taskStatus === 'completed' ? message.taskStatus : null;\n const showContent = message.content.trim().length > 0;\n\n return (\n <View\n style={[\n styles.buildBubble,\n isLeft ? styles.buildBubbleLeft : styles.buildBubbleRight,\n isLeft && !showBorder && styles.buildBubbleLeftNoBorder,\n ]}\n >\n {taskStatus && <TaskStatusBubble status={taskStatus} taskTitle={message.taskTitle} onExpand={() => {}} />}\n {showContent && (\n <Text style={[styles.buildBubbleText, !isLeft && styles.buildBubbleTextUser]}>{message.content}</Text>\n )}\n {message.steps && message.steps.length > 0 && <AgentStepsInline steps={message.steps} />}\n {message.nextSteps && message.nextSteps.length > 0 && <NextStepsBlock steps={message.nextSteps} />}\n {message.actionCards && message.actionCards.length > 0 && <ActionCardsRow cards={message.actionCards} />}\n <View style={styles.feedbackRow}>\n <TouchableOpacity style={styles.feedbackIcon}>\n <Text>🔊</Text>\n </TouchableOpacity>\n <TouchableOpacity style={styles.feedbackIcon}>\n <Text>📋</Text>\n </TouchableOpacity>\n <TouchableOpacity style={styles.feedbackIcon}>\n <Text>👍</Text>\n </TouchableOpacity>\n <TouchableOpacity style={styles.feedbackIcon}>\n <Text>👎</Text>\n </TouchableOpacity>\n <TouchableOpacity style={styles.feedbackIcon}>\n <Text>↗</Text>\n </TouchableOpacity>\n </View>\n </View>\n );\n}\n\nexport function BuildModeView({\n messages,\n streamingContent,\n currentUser,\n onSend,\n disabled = false,\n isLoading = false,\n showDate = false,\n showAvatar = false,\n showMessageBubbleBorder = false,\n renderInputToolbar,\n}: BuildModeViewProps) {\n const [inputValue, setInputValue] = React.useState('');\n const messageListRef = useRef<any>(null);\n const [scrollFlags, setScrollFlags] = useState({ showScrollToBottom: false, showScrollToTop: false });\n\n const SCROLL_THRESHOLD = 60;\n const handleScroll = useCallback((e: any) => {\n const { contentOffset, contentSize, layoutMeasurement } = e.nativeEvent;\n const { y: offsetY } = contentOffset;\n const contentHeight = contentSize?.height ?? 0;\n const layoutHeight = layoutMeasurement?.height ?? 0;\n const maxOffset = Math.max(0, contentHeight - layoutHeight);\n setScrollFlags({\n showScrollToBottom: maxOffset > SCROLL_THRESHOLD && offsetY > SCROLL_THRESHOLD,\n showScrollToTop: maxOffset > SCROLL_THRESHOLD && offsetY < maxOffset - SCROLL_THRESHOLD,\n });\n }, []);\n\n const scrollToBottom = useCallback(() => {\n messageListRef.current?.scrollToOffset?.({ offset: 0, animated: true });\n }, []);\n const scrollToTop = useCallback(() => {\n messageListRef.current?.scrollToEnd?.({ animated: true });\n }, []);\n\n const giftedMessages: (IMessage & { buildMessage?: BuildMessage })[] = useMemo(() => {\n const list = messages.map((m, i) => buildMessageToGifted(m, currentUser.id, i, messages.length));\n return [...list].reverse();\n }, [messages, currentUser.id]);\n\n const messagesWithStreaming = useMemo(() => {\n if (!streamingContent?.trim()) return giftedMessages;\n const streamMsg: IMessage & { buildMessage?: BuildMessage } = {\n _id: '__streaming__',\n text: streamingContent,\n createdAt: new Date(Date.now() + 60000),\n user: { _id: 'assistant', name: 'Agent' },\n };\n return [streamMsg, ...giftedMessages];\n }, [giftedMessages, streamingContent]);\n\n const onSendFromInput = useCallback(() => {\n const t = inputValue.trim();\n if (!t) return;\n onSend(t);\n setInputValue('');\n }, [inputValue, onSend]);\n\n const renderMessage = useCallback(\n (props: any) => {\n const buildMsg = (props.currentMessage as IMessage & { buildMessage?: BuildMessage })?.buildMessage;\n if (buildMsg) {\n const isLeft = props.currentMessage.user._id !== currentUser.id;\n return <BuildMessageBubble message={buildMsg} isLeft={isLeft} showBorder={showMessageBubbleBorder} />;\n }\n const isUser = props.currentMessage?.user?._id === currentUser.id;\n return (\n <Bubble\n {...props}\n renderTime={showDate ? undefined : () => null}\n wrapperStyle={{\n right: {\n backgroundColor: USER_BUBBLE_BG,\n borderRadius: 16,\n padding: 12,\n maxWidth: '92%',\n marginHorizontal: 8,\n },\n left: {\n backgroundColor: BUBBLE_BG,\n borderRadius: 16,\n padding: 12,\n width: '100%',\n maxWidth: '100%',\n alignSelf: 'stretch',\n marginHorizontal: 0,\n ...(showMessageBubbleBorder && { borderWidth: 1, borderColor: BORDER_COLOR }),\n },\n }}\n textStyle={{\n right: { color: '#ffffff', fontSize: 15 },\n left: { color: '#111827', fontSize: 15 },\n }}\n />\n );\n },\n [currentUser.id, showDate, showMessageBubbleBorder],\n );\n\n const renderInputToolbarCallback = useCallback(\n () => (\n <View style={styles.inputToolbarWrap}>\n {renderInputToolbar({\n value: inputValue,\n onChange: setInputValue,\n onSend: onSendFromInput,\n disabled: disabled || isLoading,\n })}\n </View>\n ),\n [inputValue, disabled, isLoading, onSendFromInput, renderInputToolbar],\n );\n\n return (\n <KeyboardAvoidingView\n style={styles.container}\n behavior={Platform.OS === 'ios' ? 'padding' : undefined}\n keyboardVerticalOffset={Platform.OS === 'ios' ? 64 : 0}\n >\n <View style={styles.chatArea}>\n <GiftedChat\n messageContainerRef={messageListRef}\n messages={messagesWithStreaming}\n onSend={(msgs) => {\n const t = msgs[0]?.text?.trim();\n if (t) onSend(t);\n }}\n user={{ _id: currentUser.id, name: currentUser.name ?? 'You', avatar: currentUser.avatar }}\n renderMessage={renderMessage}\n renderInputToolbar={renderInputToolbarCallback}\n renderComposer={() => null}\n renderSend={() => null}\n renderAvatar={showAvatar ? undefined : () => null}\n showUserAvatar={showAvatar}\n renderTime={showDate ? undefined : () => null}\n renderDay={showDate ? undefined : () => null}\n listViewProps={{\n style: styles.list,\n contentContainerStyle: [styles.listContent, { paddingHorizontal: 0 }],\n onScroll: handleScroll,\n scrollEventThrottle: 100,\n }}\n messagesContainerStyle={[styles.messagesContainer, styles.messagesContainerFullWidth]}\n scrollToBottom={false}\n minInputToolbarHeight={56}\n />\n {scrollFlags.showScrollToBottom && (\n <TouchableOpacity\n style={styles.scrollFabBottom}\n onPress={scrollToBottom}\n activeOpacity={0.8}\n accessibilityLabel=\"Scroll to bottom\"\n >\n <Text style={styles.scrollFabText}>↓</Text>\n </TouchableOpacity>\n )}\n {scrollFlags.showScrollToTop && (\n <TouchableOpacity\n style={styles.scrollFabTop}\n onPress={scrollToTop}\n activeOpacity={0.8}\n accessibilityLabel=\"Scroll to top\"\n >\n <Text style={styles.scrollFabText}>↑</Text>\n </TouchableOpacity>\n )}\n </View>\n </KeyboardAvoidingView>\n );\n}\n\nconst styles = StyleSheet.create({\n container: { flex: 1 },\n chatArea: { flex: 1 },\n list: { flex: 1 },\n listContent: { flexGrow: 1, justifyContent: 'flex-end', paddingTop: 0, paddingBottom: 8, paddingHorizontal: 0 },\n messagesContainer: { paddingTop: 0, paddingBottom: 8 },\n messagesContainerFullWidth: { paddingHorizontal: 0, paddingLeft: 0, paddingRight: 0, marginHorizontal: 0 },\n scrollToBottom: { width: 32, height: 32, borderRadius: 16, backgroundColor: '#fff', marginBottom: 8 },\n scrollFabBottom: {\n position: 'absolute',\n right: 12,\n bottom: 120,\n width: 40,\n height: 40,\n borderRadius: 20,\n backgroundColor: '#fff',\n alignItems: 'center',\n justifyContent: 'center',\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 1 },\n shadowOpacity: 0.2,\n shadowRadius: 2,\n elevation: 3,\n },\n scrollFabTop: {\n position: 'absolute',\n right: 12,\n top: 12,\n width: 40,\n height: 40,\n borderRadius: 20,\n backgroundColor: '#fff',\n alignItems: 'center',\n justifyContent: 'center',\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 1 },\n shadowOpacity: 0.2,\n shadowRadius: 2,\n elevation: 3,\n },\n scrollFabText: { fontSize: 20, color: '#2563eb', fontWeight: '600' },\n inputToolbarWrap: {\n paddingHorizontal: 8,\n paddingVertical: 8,\n backgroundColor: '#fff',\n borderTopWidth: 1,\n borderTopColor: BORDER_COLOR,\n },\n taskBubble: {\n backgroundColor: BUBBLE_BG,\n borderRadius: 12,\n padding: 12,\n marginBottom: 8,\n borderWidth: 1,\n borderColor: BORDER_COLOR,\n },\n taskBubbleCompleted: {},\n taskBubbleRow: { flexDirection: 'row', alignItems: 'center' },\n greenDot: { width: 8, height: 8, borderRadius: 4, backgroundColor: GREEN_DOT, marginRight: 8 },\n greenDotPulse: { opacity: 0.8 },\n taskBubbleTitle: { flex: 1, fontWeight: '600', color: '#111827', fontSize: 14 },\n expandButton: { padding: 4 },\n expandIcon: { fontSize: 14, color: '#6b7280' },\n taskBubbleSubtitle: { marginTop: 4, marginLeft: 16, color: '#6b7280', fontSize: 13 },\n nextStepsBlock: { marginTop: 8 },\n nextStepsTitle: { fontWeight: '700', color: '#111827', marginBottom: 4, fontSize: 14 },\n nextStepsItem: { color: '#374151', fontSize: 13, marginBottom: 2 },\n actionCardsRow: { marginTop: 12, gap: 8 },\n actionCard: {\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: BUBBLE_BG,\n borderRadius: 12,\n padding: 12,\n marginBottom: 8,\n borderWidth: 1,\n borderColor: BORDER_COLOR,\n },\n actionCardIcon: { marginRight: 10, fontSize: 18 },\n actionCardText: { flex: 1 },\n actionCardTitle: { fontWeight: '600', color: '#111827', fontSize: 14 },\n actionCardSubtitle: { marginTop: 2, color: '#6b7280', fontSize: 12 },\n agentStepsInline: { flexDirection: 'row', flexWrap: 'wrap', marginTop: 8, gap: 6 },\n agentStepChip: { backgroundColor: '#e5e7eb', paddingHorizontal: 10, paddingVertical: 6, borderRadius: 8 },\n agentStepLabel: { color: '#374151', fontSize: 13 },\n buildBubble: { maxWidth: '100%', marginVertical: 4, padding: 12, borderRadius: 16 },\n buildBubbleLeft: { alignSelf: 'flex-start', backgroundColor: BUBBLE_BG, borderWidth: 1, borderColor: BORDER_COLOR },\n buildBubbleLeftNoBorder: { borderWidth: 0 },\n buildBubbleRight: { alignSelf: 'flex-end', backgroundColor: USER_BUBBLE_BG },\n buildBubbleText: { color: '#111827', fontSize: 15 },\n buildBubbleTextUser: { color: '#ffffff' },\n feedbackRow: { flexDirection: 'row', marginTop: 8, gap: 12 },\n feedbackIcon: { padding: 4 },\n});\n"],"names":["React","_a"],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React__default from'react';import {StyleSheet,View,TouchableOpacity,Text}from'react-native';import {useSafeAreaInsets}from'react-native-safe-area-context';import {PlanModeView}from'./PlanModeView.js';import {BuildModeView}from'./BuildModeView.js';function MessagesContainerUI({
|
|
2
|
+
mode,
|
|
3
|
+
messages,
|
|
4
|
+
streamingContent,
|
|
5
|
+
currentUser,
|
|
6
|
+
onSend,
|
|
7
|
+
disabled = false,
|
|
8
|
+
isLoading = false,
|
|
9
|
+
onStop,
|
|
10
|
+
messagesContainerStyle,
|
|
11
|
+
listContentStyle,
|
|
12
|
+
showDate = false,
|
|
13
|
+
showAvatar = false,
|
|
14
|
+
showBackButton = false,
|
|
15
|
+
onBackPress,
|
|
16
|
+
compactTop = false,
|
|
17
|
+
showMessageBubbleBorder = false,
|
|
18
|
+
renderPlanInputToolbar,
|
|
19
|
+
renderBuildInputToolbar
|
|
20
|
+
}) {
|
|
21
|
+
const insets = useSafeAreaInsets();
|
|
22
|
+
const containerStyle = compactTop ? {
|
|
23
|
+
marginTop: -insets.top
|
|
24
|
+
} : void 0;
|
|
25
|
+
const content = mode === "build" ? /* @__PURE__ */ React__default.createElement(BuildModeView, { messages, streamingContent, currentUser, onSend, disabled, isLoading, onStop, showDate, showAvatar, showMessageBubbleBorder, renderInputToolbar: renderBuildInputToolbar }) : /* @__PURE__ */ React__default.createElement(PlanModeView, { messages, streamingContent, currentUser, onSend, disabled, isLoading, onStop, messagesContainerStyle, listContentStyle, showDate, showAvatar, showMessageBubbleBorder, renderInputToolbar: renderPlanInputToolbar });
|
|
26
|
+
return /* @__PURE__ */ React__default.createElement(View, { style: [styles.container, containerStyle] }, showBackButton && /* @__PURE__ */ React__default.createElement(View, { style: styles.backHeader }, /* @__PURE__ */ React__default.createElement(TouchableOpacity, { style: styles.backButton, onPress: onBackPress, activeOpacity: 0.7, accessibilityLabel: "Go back" }, /* @__PURE__ */ React__default.createElement(Text, { style: styles.backButtonText }, "\u2190 Back"))), /* @__PURE__ */ React__default.createElement(View, { style: styles.content }, content));
|
|
27
|
+
}
|
|
28
|
+
const styles = StyleSheet.create({
|
|
29
|
+
container: {
|
|
30
|
+
flex: 1,
|
|
31
|
+
marginTop: 0,
|
|
32
|
+
paddingTop: 0
|
|
33
|
+
},
|
|
34
|
+
backHeader: {
|
|
35
|
+
flexDirection: "row",
|
|
36
|
+
alignItems: "center",
|
|
37
|
+
paddingHorizontal: 12,
|
|
38
|
+
paddingVertical: 12,
|
|
39
|
+
borderBottomWidth: 1,
|
|
40
|
+
borderBottomColor: "#e5e7eb",
|
|
41
|
+
backgroundColor: "#fff"
|
|
42
|
+
},
|
|
43
|
+
backButton: {
|
|
44
|
+
paddingVertical: 4,
|
|
45
|
+
paddingRight: 8
|
|
46
|
+
},
|
|
47
|
+
backButtonText: {
|
|
48
|
+
fontSize: 17,
|
|
49
|
+
color: "#2563eb",
|
|
50
|
+
fontWeight: "500"
|
|
51
|
+
},
|
|
52
|
+
content: {
|
|
53
|
+
flex: 1
|
|
54
|
+
}
|
|
55
|
+
});export{MessagesContainerUI};//# sourceMappingURL=MessagesContainerUI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessagesContainerUI.js","sources":["../../../src/components/messages-container-ui/MessagesContainerUI.tsx"],"sourcesContent":["import React from 'react';\nimport { View, Text, TouchableOpacity, StyleSheet, type StyleProp, type ViewStyle } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { PlanModeView } from './PlanModeView';\nimport { BuildModeView } from './BuildModeView';\nimport type { DisplayMode, PlanMessage, BuildMessage } from './types';\nimport type { PlanModeViewInputToolbarProps } from './PlanModeView';\nimport type { BuildModeViewInputToolbarProps } from './BuildModeView';\n\nexport interface MessagesContainerUIProps {\n mode: DisplayMode;\n /** Messages in shared shape; for build mode use BuildMessage with taskStatus, nextSteps, actionCards, etc. */\n messages: PlanMessage[] | BuildMessage[];\n streamingContent?: string;\n currentUser: { id: string; name?: string; avatar?: string };\n onSend: (text: string) => void;\n disabled?: boolean;\n isLoading?: boolean;\n onStop?: () => void;\n /** Optional: override message list container style */\n messagesContainerStyle?: StyleProp<ViewStyle>;\n /** Optional: override list content style */\n listContentStyle?: StyleProp<ViewStyle>;\n /** Show date/timestamp on messages. Default false (Kimi-style: hide). */\n showDate?: boolean;\n /** Show avatar/icon next to messages. Default false (Kimi-style: hide). */\n showAvatar?: boolean;\n /** Show back button in header. Default false (hidden). */\n showBackButton?: boolean;\n /** Called when back button is pressed. Use when showBackButton is true. */\n onBackPress?: () => void;\n /** When true, removes top safe area so content sits under app header (use when screen already has a header). Default false. */\n compactTop?: boolean;\n /** Show border around assistant/left message bubbles. Default false (hide). */\n showMessageBubbleBorder?: boolean;\n /** Input component for plan mode (chat/search/research). Pass your Input from outside. */\n renderPlanInputToolbar: (props: PlanModeViewInputToolbarProps) => React.ReactNode;\n /** Input component for build mode. Pass your Input from outside. */\n renderBuildInputToolbar: (props: BuildModeViewInputToolbarProps) => React.ReactNode;\n}\n\n/**\n * Messages container UI: plan mode (simple chat/search/research) or build mode (agent tasks, status, cards).\n * Kimi-style message display. Use with messages from HomeScreen-style chat/search/research or build flows.\n */\nexport function MessagesContainerUI({\n mode,\n messages,\n streamingContent,\n currentUser,\n onSend,\n disabled = false,\n isLoading = false,\n onStop,\n messagesContainerStyle,\n listContentStyle,\n showDate = false,\n showAvatar = false,\n showBackButton = false,\n onBackPress,\n compactTop = false,\n showMessageBubbleBorder = false,\n renderPlanInputToolbar,\n renderBuildInputToolbar,\n}: MessagesContainerUIProps) {\n const insets = useSafeAreaInsets();\n const containerStyle = compactTop ? { marginTop: -insets.top } : undefined;\n\n const content =\n mode === 'build' ? (\n <BuildModeView\n messages={messages as BuildMessage[]}\n streamingContent={streamingContent}\n currentUser={currentUser}\n onSend={onSend}\n disabled={disabled}\n isLoading={isLoading}\n onStop={onStop}\n showDate={showDate}\n showAvatar={showAvatar}\n showMessageBubbleBorder={showMessageBubbleBorder}\n renderInputToolbar={renderBuildInputToolbar}\n />\n ) : (\n <PlanModeView\n messages={messages as PlanMessage[]}\n streamingContent={streamingContent}\n currentUser={currentUser}\n onSend={onSend}\n disabled={disabled}\n isLoading={isLoading}\n onStop={onStop}\n messagesContainerStyle={messagesContainerStyle}\n listContentStyle={listContentStyle}\n showDate={showDate}\n showAvatar={showAvatar}\n showMessageBubbleBorder={showMessageBubbleBorder}\n renderInputToolbar={renderPlanInputToolbar}\n />\n );\n\n return (\n <View style={[styles.container, containerStyle]}>\n {showBackButton && (\n <View style={styles.backHeader}>\n <TouchableOpacity\n style={styles.backButton}\n onPress={onBackPress}\n activeOpacity={0.7}\n accessibilityLabel=\"Go back\"\n >\n <Text style={styles.backButtonText}>← Back</Text>\n </TouchableOpacity>\n </View>\n )}\n <View style={styles.content}>{content}</View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: { flex: 1, marginTop: 0, paddingTop: 0 },\n backHeader: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 12,\n paddingVertical: 12,\n borderBottomWidth: 1,\n borderBottomColor: '#e5e7eb',\n backgroundColor: '#fff',\n },\n backButton: { paddingVertical: 4, paddingRight: 8 },\n backButtonText: { fontSize: 17, color: '#2563eb', fontWeight: '500' },\n content: { flex: 1 },\n});\n\nexport default MessagesContainerUI;\n"],"names":["React"],"mappings":"8PAgDO,SAAS,mBAAA,CAAoB;AAAA,EAClC,IAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,SAAA,GAAY,KAAA;AAAA,EACZ,MAAA;AAAA,EACA,sBAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,UAAA,GAAa,KAAA;AAAA,EACb,cAAA,GAAiB,KAAA;AAAA,EACjB,WAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,uBAAA,GAA0B,KAAA;AAAA,EAC1B,sBAAA;AAAA,EACA;AACF,CAAA,EAA6B;AAC3B,EAAA,MAAM,SAAS,iBAAA,EAAkB;AACjC,EAAA,MAAM,iBAAiB,UAAA,GAAa;AAAA,IAClC,SAAA,EAAW,CAAC,MAAA,CAAO;AAAA,GACrB,GAAI,MAAA;AACJ,EAAA,MAAM,OAAA,GAAU,IAAA,KAAS,OAAA,mBAAUA,cAAA,CAAA,aAAA,CAAC,iBAAc,QAAA,EAAsC,gBAAA,EAAoC,WAAA,EAA0B,MAAA,EAAgB,QAAA,EAAoB,SAAA,EAAsB,MAAA,EAAgB,QAAA,EAAoB,YAAwB,uBAAA,EAAkD,kBAAA,EAAoB,uBAAA,EAAyB,CAAA,mBAAKA,cAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAqC,gBAAA,EAAoC,aAA0B,MAAA,EAAgB,QAAA,EAAoB,SAAA,EAAsB,MAAA,EAAgB,wBAAgD,gBAAA,EAAoC,QAAA,EAAoB,UAAA,EAAwB,uBAAA,EAAkD,oBAAoB,sBAAA,EAAwB,CAAA;AACzwB,EAAA,oDAAQ,IAAA,EAAA,EAAK,KAAA,EAAO,CAAC,MAAA,CAAO,SAAA,EAAW,cAAc,CAAA,EAAA,EAC1C,cAAA,oBAAkBA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,OAAO,MAAA,CAAO,UAAA,EAAA,+CAC9B,gBAAA,EAAA,EAAiB,KAAA,EAAO,OAAO,UAAA,EAAY,OAAA,EAAS,WAAA,EAAa,aAAA,EAAe,KAAK,kBAAA,EAAmB,SAAA,EAAA,+CACpG,IAAA,EAAA,EAAK,KAAA,EAAO,OAAO,cAAA,EAAA,EAAgB,aAAM,CAC9C,CACJ,mBACJA,cAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAK,OAAO,MAAA,CAAO,OAAA,EAAA,EAAU,OAAQ,CAC1C,CAAA;AACR;AACA,MAAM,MAAA,GAAS,WAAW,MAAA,CAAO;AAAA,EAC/B,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,EAAW,CAAA;AAAA,IACX,UAAA,EAAY;AAAA,GACd;AAAA,EACA,UAAA,EAAY;AAAA,IACV,aAAA,EAAe,KAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,iBAAA,EAAmB,EAAA;AAAA,IACnB,eAAA,EAAiB,EAAA;AAAA,IACjB,iBAAA,EAAmB,CAAA;AAAA,IACnB,iBAAA,EAAmB,SAAA;AAAA,IACnB,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA,UAAA,EAAY;AAAA,IACV,eAAA,EAAiB,CAAA;AAAA,IACjB,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,QAAA,EAAU,EAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACd;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA"}
|