vdb-ai-chat 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/dist/10.chat-widget.js +2 -0
  2. package/dist/10.chat-widget.js.LICENSE.txt +1 -0
  3. package/dist/104.chat-widget.js +1 -0
  4. package/dist/50.chat-widget.js +1 -0
  5. package/dist/521.chat-widget.js +1 -0
  6. package/dist/538.chat-widget.js +1 -1
  7. package/dist/572.chat-widget.js +1 -0
  8. package/dist/694.chat-widget.js +1 -0
  9. package/dist/chat-widget.js +1 -1
  10. package/lib/commonjs/api.js +4 -3
  11. package/lib/commonjs/api.js.map +1 -1
  12. package/lib/commonjs/components/BetaNotice.js +38 -0
  13. package/lib/commonjs/components/BetaNotice.js.map +1 -0
  14. package/lib/commonjs/components/ChatHeader.js +27 -20
  15. package/lib/commonjs/components/ChatHeader.js.map +1 -1
  16. package/lib/commonjs/components/ChatInput.js +21 -21
  17. package/lib/commonjs/components/ChatInput.js.map +1 -1
  18. package/lib/commonjs/components/ChatWidget.js +119 -72
  19. package/lib/commonjs/components/ChatWidget.js.map +1 -1
  20. package/lib/commonjs/components/MessageBubble.js +26 -90
  21. package/lib/commonjs/components/MessageBubble.js.map +1 -1
  22. package/lib/commonjs/components/MessageMetaRow.js +135 -0
  23. package/lib/commonjs/components/MessageMetaRow.js.map +1 -0
  24. package/lib/commonjs/components/ProductsGrid.js +139 -0
  25. package/lib/commonjs/components/ProductsGrid.js.map +1 -0
  26. package/lib/commonjs/components/ProductsList.js +22 -126
  27. package/lib/commonjs/components/ProductsList.js.map +1 -1
  28. package/lib/commonjs/components/ProductsListView.js +139 -0
  29. package/lib/commonjs/components/ProductsListView.js.map +1 -0
  30. package/lib/commonjs/components/SuggestionsRow.js +41 -23
  31. package/lib/commonjs/components/SuggestionsRow.js.map +1 -1
  32. package/lib/commonjs/components/utils.js +4 -3
  33. package/lib/commonjs/components/utils.js.map +1 -1
  34. package/lib/commonjs/index.web.js +86 -29
  35. package/lib/commonjs/index.web.js.map +1 -1
  36. package/lib/commonjs/theme.js +4 -4
  37. package/lib/commonjs/theme.js.map +1 -1
  38. package/lib/module/api.js +4 -3
  39. package/lib/module/api.js.map +1 -1
  40. package/lib/module/components/BetaNotice.js +30 -0
  41. package/lib/module/components/BetaNotice.js.map +1 -0
  42. package/lib/module/components/ChatHeader.js +27 -20
  43. package/lib/module/components/ChatHeader.js.map +1 -1
  44. package/lib/module/components/ChatInput.js +21 -21
  45. package/lib/module/components/ChatInput.js.map +1 -1
  46. package/lib/module/components/ChatWidget.js +120 -73
  47. package/lib/module/components/ChatWidget.js.map +1 -1
  48. package/lib/module/components/MessageBubble.js +26 -92
  49. package/lib/module/components/MessageBubble.js.map +1 -1
  50. package/lib/module/components/MessageMetaRow.js +127 -0
  51. package/lib/module/components/MessageMetaRow.js.map +1 -0
  52. package/lib/module/components/ProductsGrid.js +133 -0
  53. package/lib/module/components/ProductsGrid.js.map +1 -0
  54. package/lib/module/components/ProductsList.js +21 -126
  55. package/lib/module/components/ProductsList.js.map +1 -1
  56. package/lib/module/components/ProductsListView.js +132 -0
  57. package/lib/module/components/ProductsListView.js.map +1 -0
  58. package/lib/module/components/SuggestionsRow.js +41 -23
  59. package/lib/module/components/SuggestionsRow.js.map +1 -1
  60. package/lib/module/components/utils.js +4 -3
  61. package/lib/module/components/utils.js.map +1 -1
  62. package/lib/module/index.web.js +86 -29
  63. package/lib/module/index.web.js.map +1 -1
  64. package/lib/module/theme.js +4 -4
  65. package/lib/module/theme.js.map +1 -1
  66. package/lib/typescript/api.d.ts.map +1 -1
  67. package/lib/typescript/components/BetaNotice.d.ts +5 -0
  68. package/lib/typescript/components/BetaNotice.d.ts.map +1 -0
  69. package/lib/typescript/components/ChatHeader.d.ts +5 -2
  70. package/lib/typescript/components/ChatHeader.d.ts.map +1 -1
  71. package/lib/typescript/components/ChatInput.d.ts.map +1 -1
  72. package/lib/typescript/components/ChatWidget.d.ts.map +1 -1
  73. package/lib/typescript/components/MessageBubble.d.ts +7 -3
  74. package/lib/typescript/components/MessageBubble.d.ts.map +1 -1
  75. package/lib/typescript/components/MessageMetaRow.d.ts +14 -0
  76. package/lib/typescript/components/MessageMetaRow.d.ts.map +1 -0
  77. package/lib/typescript/components/ProductsGrid.d.ts +10 -0
  78. package/lib/typescript/components/ProductsGrid.d.ts.map +1 -0
  79. package/lib/typescript/components/ProductsList.d.ts +4 -2
  80. package/lib/typescript/components/ProductsList.d.ts.map +1 -1
  81. package/lib/typescript/components/ProductsListView.d.ts +10 -0
  82. package/lib/typescript/components/ProductsListView.d.ts.map +1 -0
  83. package/lib/typescript/components/SuggestionsRow.d.ts +2 -0
  84. package/lib/typescript/components/SuggestionsRow.d.ts.map +1 -1
  85. package/lib/typescript/components/utils.d.ts +1 -0
  86. package/lib/typescript/components/utils.d.ts.map +1 -1
  87. package/lib/typescript/index.web.d.ts +1 -1
  88. package/lib/typescript/index.web.d.ts.map +1 -1
  89. package/lib/typescript/types.d.ts +3 -1
  90. package/lib/typescript/types.d.ts.map +1 -1
  91. package/package.json +1 -1
  92. package/src/api.ts +4 -3
  93. package/src/components/BetaNotice.tsx +32 -0
  94. package/src/components/ChatHeader.tsx +32 -18
  95. package/src/components/ChatInput.tsx +20 -21
  96. package/src/components/ChatWidget.tsx +258 -220
  97. package/src/components/MessageBubble.tsx +44 -149
  98. package/src/components/MessageMetaRow.tsx +199 -0
  99. package/src/components/ProductsGrid.tsx +163 -0
  100. package/src/components/ProductsList.tsx +20 -146
  101. package/src/components/ProductsListView.tsx +149 -0
  102. package/src/components/SuggestionsRow.tsx +45 -21
  103. package/src/components/utils.ts +6 -4
  104. package/src/index.web.tsx +87 -32
  105. package/src/theme.ts +4 -4
  106. package/src/types.ts +3 -2
  107. package/dist/751.chat-widget.js +0 -1
  108. package/lib/commonjs/contexts/SegmentClientContext.js +0 -19
  109. package/lib/commonjs/contexts/SegmentClientContext.js.map +0 -1
  110. package/lib/module/contexts/SegmentClientContext.js +0 -10
  111. package/lib/module/contexts/SegmentClientContext.js.map +0 -1
  112. package/lib/typescript/contexts/SegmentClientContext.d.ts +0 -9
  113. package/lib/typescript/contexts/SegmentClientContext.d.ts.map +0 -1
  114. package/src/contexts/SegmentClientContext.tsx +0 -20
@@ -16,18 +16,33 @@ if (Platform.OS !== "web") {
16
16
  const CloseIcon = () => {
17
17
  return /*#__PURE__*/React.createElement(ImageComponent, {
18
18
  source: {
19
- uri: "https://cdn.jsdelivr.net/npm/feather-icons/dist/icons/x.svg"
19
+ uri: "http://cdn.vdbapp.com/ai/chat-widget/assets/img/minus-cirlce.svg"
20
20
  },
21
21
  resizeMode: "contain",
22
22
  style: {
23
23
  width: 20,
24
- height: 20
24
+ height: 20,
25
+ tintColor: "#ACACB3"
26
+ }
27
+ });
28
+ };
29
+ const VDBLogo = () => {
30
+ return /*#__PURE__*/React.createElement(ImageComponent, {
31
+ source: {
32
+ uri: "http://cdn.vdbapp.com/ai/chat-widget/assets/img/vdb.svg"
33
+ },
34
+ resizeMode: "contain",
35
+ style: {
36
+ width: 30,
37
+ height: 30,
38
+ marginRight: 10
25
39
  }
26
40
  });
27
41
  };
28
42
  const ChatHeader = ({
29
43
  onClose,
30
- onClearChat
44
+ onClearChat,
45
+ isBetaMode
31
46
  }) => {
32
47
  const {
33
48
  trackEvent
@@ -36,19 +51,9 @@ const ChatHeader = ({
36
51
  style: styles.container
37
52
  }, /*#__PURE__*/React.createElement(View, {
38
53
  style: styles.logoContainer
39
- }, /*#__PURE__*/React.createElement(ImageComponent, {
40
- source: {
41
- uri: "https://getvdb.com/mail_images/web_app_favicon.ico"
42
- },
43
- resizeMode: "contain",
44
- style: {
45
- width: 30,
46
- height: 30,
47
- marginRight: 10
48
- }
49
- }), /*#__PURE__*/React.createElement(Text, {
54
+ }, /*#__PURE__*/React.createElement(VDBLogo, null), /*#__PURE__*/React.createElement(Text, {
50
55
  style: styles.title
51
- }, "AI Search")), /*#__PURE__*/React.createElement(View, {
56
+ }, isBetaMode ? "AI Search Beta" : "AI Search")), /*#__PURE__*/React.createElement(View, {
52
57
  style: styles.buttonContainer
53
58
  }, /*#__PURE__*/React.createElement(TouchableOpacity, {
54
59
  onPress: () => {
@@ -70,19 +75,21 @@ const ChatHeader = ({
70
75
  const styles = StyleSheet.create({
71
76
  container: {
72
77
  padding: 16,
73
- backgroundColor: "#37363F",
78
+ backgroundColor: "#FFFFFF",
74
79
  justifyContent: "space-between",
75
80
  flexDirection: "row",
76
- alignItems: "center"
81
+ alignItems: "center",
82
+ borderBottomWidth: 1,
83
+ borderBottomColor: "#E0E0E0"
77
84
  },
78
85
  logoContainer: {
79
86
  flexDirection: "row",
80
87
  alignItems: "center"
81
88
  },
82
89
  title: {
83
- fontSize: 17,
90
+ fontSize: 16,
84
91
  fontWeight: "500",
85
- color: "#FFF"
92
+ color: "#020001"
86
93
  },
87
94
  closeButton: {
88
95
  backgroundColor: "#FFF",
@@ -103,7 +110,7 @@ const styles = StyleSheet.create({
103
110
  color: "#FFF"
104
111
  },
105
112
  clearChatText: {
106
- color: "#FFF",
113
+ color: "#4F4E57",
107
114
  fontSize: 14,
108
115
  fontWeight: "500",
109
116
  textDecorationLine: "none"
@@ -1 +1 @@
1
- {"version":3,"names":["View","Text","StyleSheet","TouchableOpacity","Platform","Image","React","useUserAnalytics","AnalyticsEventNames","ImageComponent","OS","ExpoImage","require","CloseIcon","createElement","source","uri","resizeMode","style","width","height","ChatHeader","onClose","onClearChat","trackEvent","styles","container","logoContainer","marginRight","title","buttonContainer","onPress","CHAT_CLEARED","console","log","clearChatText","closeButton","WIDGET_CLOSED","create","padding","backgroundColor","justifyContent","flexDirection","alignItems","fontSize","fontWeight","color","borderRadius","closeIconText","textAlign","lineHeight","closeButtonText","textDecorationLine","gap"],"sourceRoot":"../../../src","sources":["components/ChatHeader.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["View","Text","StyleSheet","TouchableOpacity","Platform","Image","React","useUserAnalytics","AnalyticsEventNames","ImageComponent","OS","ExpoImage","require","CloseIcon","createElement","source","uri","resizeMode","style","width","height","tintColor","VDBLogo","marginRight","ChatHeader","onClose","onClearChat","isBetaMode","trackEvent","styles","container","logoContainer","title","buttonContainer","onPress","CHAT_CLEARED","console","log","clearChatText","closeButton","WIDGET_CLOSED","create","padding","backgroundColor","justifyContent","flexDirection","alignItems","borderBottomWidth","borderBottomColor","fontSize","fontWeight","color","borderRadius","closeIconText","textAlign","lineHeight","closeButtonText","textDecorationLine","gap"],"sourceRoot":"../../../src","sources":["components/ChatHeader.tsx"],"mappings":"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","ignoreList":[]}
@@ -17,12 +17,13 @@ const SendIcon = ({
17
17
  const isInactive = disabled || isEmpty;
18
18
  return /*#__PURE__*/React.createElement(ImageComponent, {
19
19
  source: {
20
- uri: "https://cdn.vdbapp.com/ai/chat-widget/assets/img/up.svg"
20
+ uri: "https://cdn.vdbapp.com/ai/chat-widget/assets/img/send.svg"
21
21
  },
22
22
  resizeMode: "contain",
23
23
  style: {
24
24
  ...styles.buttonIcon,
25
- tintColor: isInactive ? "#AAA" : "#FFF"
25
+ tintColor: isInactive ? "#ACACB3" : "#020001",
26
+ cursor: isInactive ? "auto" : "pointer"
26
27
  }
27
28
  });
28
29
  };
@@ -37,7 +38,7 @@ export const ChatInput = ({
37
38
  }) => {
38
39
  const isInactive = disabled || value.trim() === "";
39
40
  return /*#__PURE__*/React.createElement(View, {
40
- style: [styles.container, Platform.OS === "web" ? styles.webShadow : styles.nativeShadow]
41
+ style: [styles.inputContainer, Platform.OS === "web" ? styles.webShadow : styles.nativeShadow]
41
42
  }, /*#__PURE__*/React.createElement(TextInput, {
42
43
  ref: inputRef
43
44
  // @ts-ignore - supported on web via react-native-web
@@ -52,10 +53,7 @@ export const ChatInput = ({
52
53
  editable: !disabled,
53
54
  autoFocus: true
54
55
  }), /*#__PURE__*/React.createElement(TouchableOpacity, {
55
- style: {
56
- ...styles.button,
57
- backgroundColor: isInactive ? "#EDEDF2" : "#C000FF"
58
- },
56
+ style: styles.button,
59
57
  onPress: onSend,
60
58
  disabled: disabled
61
59
  }, /*#__PURE__*/React.createElement(SendIcon, {
@@ -64,17 +62,19 @@ export const ChatInput = ({
64
62
  })));
65
63
  };
66
64
  const styles = StyleSheet.create({
67
- container: {
65
+ inputContainer: {
68
66
  flexDirection: "row",
69
- height: 48,
70
- paddingHorizontal: 16,
71
- paddingVertical: 0,
67
+ paddingHorizontal: 12,
68
+ paddingVertical: 16,
72
69
  justifyContent: "space-between",
73
70
  alignItems: "center",
74
71
  alignSelf: "stretch",
75
- borderRadius: 56,
72
+ flex: 1,
73
+ borderRadius: 8,
76
74
  backgroundColor: "#FFF",
77
- margin: 8
75
+ borderColor: "#ACACB3",
76
+ borderWidth: 1,
77
+ height: 56
78
78
  },
79
79
  webShadow: {
80
80
  ...(Platform.OS === "web" ? {
@@ -101,7 +101,7 @@ const styles = StyleSheet.create({
101
101
  lineHeight: 20,
102
102
  minHeight: 20,
103
103
  maxHeight: 120,
104
- paddingHorizontal: 8,
104
+ paddingHorizontal: 0,
105
105
  paddingVertical: 0,
106
106
  backgroundColor: "transparent",
107
107
  borderWidth: 0
@@ -114,18 +114,18 @@ const styles = StyleSheet.create({
114
114
  } : {})
115
115
  },
116
116
  button: {
117
- marginLeft: 8,
118
- padding: 4,
117
+ marginLeft: 0,
118
+ padding: 0,
119
119
  justifyContent: "center",
120
120
  alignItems: "center",
121
- height: 40,
121
+ height: 24,
122
122
  aspectRatio: 1,
123
- borderRadius: 40,
124
- backgroundColor: "#C000FF"
123
+ borderRadius: 0,
124
+ backgroundColor: "#FFFFFF"
125
125
  },
126
126
  buttonIcon: {
127
- height: 16,
128
- width: 16
127
+ height: 24,
128
+ width: 24
129
129
  },
130
130
  sendIconText: {
131
131
  fontSize: 18,
@@ -1 +1 @@
1
- {"version":3,"names":["React","View","TextInput","TouchableOpacity","StyleSheet","Platform","Image","ImageComponent","OS","ExpoImage","require","SendIcon","disabled","isEmpty","isInactive","createElement","source","uri","resizeMode","style","styles","buttonIcon","tintColor","ChatInput","value","onChangeText","onSend","placeholder","theme","inputRef","trim","container","webShadow","nativeShadow","ref","id","input","inputWeb","placeholderTextColor","onSubmitEditing","editable","autoFocus","button","backgroundColor","onPress","create","flexDirection","height","paddingHorizontal","paddingVertical","justifyContent","alignItems","alignSelf","borderRadius","margin","boxShadow","shadowColor","shadowOffset","width","shadowOpacity","shadowRadius","elevation","flex","color","fontFamily","fontSize","fontStyle","fontWeight","lineHeight","minHeight","maxHeight","borderWidth","outlineStyle","outlineWidth","marginLeft","padding","aspectRatio","sendIconText","textAlign"],"sourceRoot":"../../../src","sources":["components/ChatInput.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","View","TextInput","TouchableOpacity","StyleSheet","Platform","Image","ImageComponent","OS","ExpoImage","require","SendIcon","disabled","isEmpty","isInactive","createElement","source","uri","resizeMode","style","styles","buttonIcon","tintColor","cursor","ChatInput","value","onChangeText","onSend","placeholder","theme","inputRef","trim","inputContainer","webShadow","nativeShadow","ref","id","input","inputWeb","placeholderTextColor","onSubmitEditing","editable","autoFocus","button","onPress","create","flexDirection","paddingHorizontal","paddingVertical","justifyContent","alignItems","alignSelf","flex","borderRadius","backgroundColor","borderColor","borderWidth","height","boxShadow","shadowColor","shadowOffset","width","shadowOpacity","shadowRadius","elevation","color","fontFamily","fontSize","fontStyle","fontWeight","lineHeight","minHeight","maxHeight","outlineStyle","outlineWidth","marginLeft","padding","aspectRatio","sendIconText","textAlign"],"sourceRoot":"../../../src","sources":["components/ChatInput.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,18 +1,18 @@
1
1
  import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
2
- import { View, StyleSheet, ScrollView, Text, DeviceEventEmitter, Platform } from "react-native";
2
+ import { View, StyleSheet, ScrollView, Text, KeyboardAvoidingView, DeviceEventEmitter, Platform } from "react-native";
3
3
  import { ChatInput } from "./ChatInput";
4
4
  import { MessageBubble } from "./MessageBubble";
5
+ import MessageMetaRow from "./MessageMetaRow";
5
6
  import { mergeTheme } from "../theme";
6
7
  import { fetchInitialMessages, getProducts, handleFeedbackActionApi, normaliseMessages, sendUserMessage } from "../api";
7
8
  import ChatHeader from "./ChatHeader";
8
- import SuggestionsRow from "./SuggestionsRow";
9
+ import BetaNotice from "./BetaNotice";
9
10
  import ProductsList from "./ProductsList";
10
11
  import { FeedbackAction, formatToTime, getUserDetails } from "./utils";
11
12
  import { useUserAnalytics } from "../hooks/useAnalytics";
12
13
  import { Storage } from "../storage";
13
14
  export const ChatWidget = /*#__PURE__*/forwardRef(({
14
15
  apiUrl,
15
- userId: userIdProp,
16
16
  userToken: userTokenProp,
17
17
  priceMode: priceModeProp,
18
18
  modalHeight,
@@ -22,7 +22,8 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
22
22
  onClose,
23
23
  onClearChat,
24
24
  onViewAllPress,
25
- onItemPress: onItemPressProp
25
+ onItemPress: onItemPressProp,
26
+ isBetaMode: isBetaModeProp
26
27
  }, ref) => {
27
28
  const [messages, setMessages] = useState(initialMessages);
28
29
  const [input, setInput] = useState("");
@@ -34,8 +35,6 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
34
35
  const [productsByMsg, setProductsByMsg] = useState({});
35
36
  const [reloadLoadingIds, setReloadLoadingIds] = useState(new Set());
36
37
  const [priceMode, setPriceMode] = useState(priceModeProp || null);
37
- const [conversationId, setConversationId] = useState(null);
38
- const [userId, setUserId] = useState(userIdProp || "");
39
38
  const [userToken, setUserToken] = useState(userTokenProp || "");
40
39
  const scrollRef = useRef(null);
41
40
  const inputRef = useRef(null);
@@ -43,16 +42,11 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
43
42
  const {
44
43
  _identify
45
44
  } = useUserAnalytics();
45
+ const betaActive = Boolean(isBetaModeProp);
46
46
  // Load user auth data from storage on mount
47
47
  useEffect(() => {
48
48
  const loadAuthData = async () => {
49
49
  try {
50
- if (!userIdProp) {
51
- const userData = await Storage.getJSON("userData", {});
52
- if (userData?.id) {
53
- setUserId(userData.id);
54
- }
55
- }
56
50
  if (!userTokenProp) {
57
51
  const token = await Storage.getItem("token");
58
52
  if (token) {
@@ -64,7 +58,7 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
64
58
  }
65
59
  };
66
60
  loadAuthData();
67
- }, [userIdProp, userTokenProp]);
61
+ }, [userTokenProp]);
68
62
  const onViewAll = useCallback(() => {
69
63
  const searchPayload = JSON.stringify(assistantResponse?.search_payload);
70
64
  const payload = assistantResponse?.search_payload;
@@ -92,10 +86,10 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
92
86
  window.open(deepLinkUrl, "_parent");
93
87
  }
94
88
  }, [apiUrl, priceMode, onItemPressProp]);
95
- const hasAuth = useMemo(() => Boolean(userId || userToken), [userId, userToken]);
89
+ const hasAuth = useMemo(() => Boolean(userToken), [userToken]);
96
90
  const apiParams = useMemo(() => ({
97
- conversationId: userToken || userId
98
- }), [userId, userToken]);
91
+ conversationId: userToken
92
+ }), [userToken]);
99
93
  const handleFeedbackAction = useCallback(async (action, conversation_id, message_id) => {
100
94
  try {
101
95
  // Use functional update to get current messages without dependency
@@ -128,7 +122,21 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
128
122
  try {
129
123
  const initial = await fetchInitialMessages(apiUrl, apiParams, priceMode);
130
124
  if (!cancelled) {
131
- setMessages(normaliseMessages(initial).reverse());
125
+ const normalised = normaliseMessages(initial).reverse();
126
+ if (normalised.length === 0) {
127
+ const initialAssistant = {
128
+ id: "",
129
+ role: "assistant",
130
+ text: "Hello! How can I help you today?",
131
+ createdAt: Date.now(),
132
+ isLoading: false,
133
+ suggestions: ["Search Natural Diamonds", "Search Lab-Grown Diamonds"],
134
+ reaction: "0"
135
+ };
136
+ setMessages([initialAssistant]);
137
+ } else {
138
+ setMessages(normalised);
139
+ }
132
140
  }
133
141
  } catch (error) {
134
142
  console.error("Failed to fetch initial messages", error);
@@ -156,6 +164,7 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
156
164
  role: "assistant",
157
165
  text: "Thinking",
158
166
  createdAt: Date.now(),
167
+ reaction: "0",
159
168
  isLoading: true
160
169
  };
161
170
  setMessages(prev => [...prev, userMessage, loadingMessage]);
@@ -195,10 +204,10 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
195
204
  inputRef.current?.focus();
196
205
  return;
197
206
  }
198
- setProductsByMsg({
199
- messageId: latestAssistant.id,
200
- data: productsResult
201
- });
207
+ setProductsByMsg(prev => ({
208
+ ...prev,
209
+ [latestAssistant.id]: productsResult
210
+ }));
202
211
  }
203
212
  setLoadingMessageId(null);
204
213
  setMessages(prev => prev.map(msg => msg.id === loadingId ? {
@@ -276,7 +285,7 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
276
285
  useEffect(() => {
277
286
  DeviceEventEmitter.addListener("clearChat", handleClearChat);
278
287
  DeviceEventEmitter.addListener("changePriceMode", data => changePriceMode(data.priceMode));
279
- changePriceMode(undefined);
288
+ changePriceMode();
280
289
  identifySegmentUser();
281
290
  return () => {
282
291
  DeviceEventEmitter.removeAllListeners("clearChat");
@@ -284,37 +293,24 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
284
293
  };
285
294
  }, []);
286
295
  const changePriceMode = async _priceMode => {
287
- // Priority: passed argument > prop > storage
288
296
  if (!_priceMode && priceModeProp) {
289
297
  _priceMode = priceModeProp;
290
298
  }
291
299
  if (!_priceMode) {
292
- const userData = await Storage.getJSON("userData", {});
300
+ let userData = await Storage.getJSON("persist:userInfo", {
301
+ user: undefined
302
+ });
303
+ userData = userData && userData.user ? JSON.parse(userData.user) : {};
293
304
  _priceMode = userData?.price_mode;
294
305
  }
295
- setPriceMode(_priceMode || null);
306
+ setPriceMode(_priceMode === undefined ? null : String(_priceMode));
296
307
  };
297
-
298
- // Update conversationId when priceMode changes
299
- useEffect(() => {
300
- const loadConversationId = async () => {
301
- if (!priceMode) {
302
- setConversationId(null);
303
- return;
304
- }
305
- const conversations = await Storage.getJSON("vdbchat_conversations", {});
306
- const storedId = conversations?.[priceMode]?.conversation_id ?? null;
307
- setConversationId(storedId ? String(storedId) : null);
308
- };
309
- loadConversationId();
310
- }, [priceMode, messages]); // Re-fetch when messages change (new conversation might be created)
311
-
312
308
  const handleClearChat = useCallback(async () => {
313
309
  try {
314
310
  const conversations = await Storage.getJSON("vdbchat_conversations", {});
315
- const storedId = conversations?.[priceMode]?.conversation_id ?? null;
311
+ const storedId = conversations ? conversations[priceMode]?.conversation_id : null;
316
312
  if (storedId && priceMode) {
317
- const updatedConversations = conversations || {};
313
+ const updatedConversations = conversations ?? {};
318
314
  delete updatedConversations[priceMode];
319
315
  await Storage.setJSON("vdbchat_conversations", updatedConversations);
320
316
  }
@@ -327,30 +323,39 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
327
323
  setTypingMessageId(null);
328
324
  setTypingFullText("");
329
325
  const fresh = await fetchInitialMessages(apiUrl, undefined, priceMode);
330
- setMessages(normaliseMessages(fresh).reverse());
326
+ {
327
+ const normalised = normaliseMessages(fresh).reverse();
328
+ if (normalised.length === 0) {
329
+ const initialAssistant = {
330
+ id: "",
331
+ role: "assistant",
332
+ text: "Hello! How can I help you today?",
333
+ createdAt: Date.now(),
334
+ isLoading: false,
335
+ suggestions: ["Search Natural Diamonds", "Search Lab-Grown Diamonds"],
336
+ reaction: "0"
337
+ };
338
+ setMessages([initialAssistant]);
339
+ } else {
340
+ setMessages(normalised);
341
+ }
342
+ }
331
343
  onClearChat?.();
332
344
  } catch (err) {
345
+ // eslint-disable-next-line no-console
333
346
  console.error("Failed to clear chat", err);
334
347
  }
335
- }, [apiUrl, onClearChat, priceMode]);
336
-
337
- // Expose clearChat method via ref for external use (React Native)
338
- useImperativeHandle(ref, () => ({
339
- clearChat: handleClearChat
340
- }), [handleClearChat]);
348
+ }, [apiUrl, priceMode]);
341
349
 
342
350
  // "Thinking..." dot animation while waiting for the API
343
351
  useEffect(() => {
344
- if (!loadingMessageId || typingMessageId) {
345
- return;
346
- }
352
+ if (!loadingMessageId || typingMessageId) return;
347
353
  let step = 0;
348
354
  const base = "Thinking";
349
- const msgId = loadingMessageId;
350
355
  const interval = setInterval(() => {
351
356
  step = (step + 1) % 3;
352
357
  const dots = ".".repeat(step + 1);
353
- setMessages(prev => prev.map(msg => msg.id === msgId && msg.isLoading ? {
358
+ setMessages(prev => prev.map(msg => msg.id === loadingMessageId && msg.isLoading ? {
354
359
  ...msg,
355
360
  text: `${base}${dots}`
356
361
  } : msg));
@@ -360,6 +365,11 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
360
365
  };
361
366
  }, [loadingMessageId, typingMessageId]);
362
367
 
368
+ // Expose clearChat method via ref for external use (React Native)
369
+ useImperativeHandle(ref, () => ({
370
+ clearChat: handleClearChat
371
+ }), [handleClearChat]);
372
+
363
373
  // Typewriter-style animation for assistant reply once it arrives
364
374
  const typingIndexRef = useRef(0);
365
375
  useEffect(() => {
@@ -399,17 +409,25 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
399
409
  }]
400
410
  }, Platform.OS === "web" && /*#__PURE__*/React.createElement(ChatHeader, {
401
411
  onClose: onClose,
402
- onClearChat: handleClearChat
403
- }), /*#__PURE__*/React.createElement(ScrollView, {
412
+ onClearChat: handleClearChat,
413
+ isBetaMode: betaActive
414
+ }), /*#__PURE__*/React.createElement(KeyboardAvoidingView, {
415
+ style: {
416
+ flex: 1
417
+ },
418
+ behavior: Platform.OS === "ios" ? "padding" : "height",
419
+ keyboardVerticalOffset: -16
420
+ }, /*#__PURE__*/React.createElement(ScrollView, {
404
421
  ref: scrollRef,
422
+ keyboardShouldPersistTaps: "handled",
405
423
  style: modalHeight ? {
406
424
  height: modalHeight,
407
- backgroundColor: "#f5f5f5"
425
+ backgroundColor: "#FFFFFF"
408
426
  } : {
409
- backgroundColor: "#f5f5f5"
427
+ backgroundColor: "#FFFFFF"
410
428
  },
411
429
  contentContainerStyle: {
412
- backgroundColor: theme?.listContentBackgroundColor || "#f5f5f5",
430
+ backgroundColor: theme?.listContentBackgroundColor || "#FFFFFF",
413
431
  ...styles.listContent,
414
432
  justifyContent: messages.length === 0 ? "center" : "flex-end",
415
433
  minHeight: modalHeight ? modalHeight : undefined
@@ -427,26 +445,42 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
427
445
  const ordered = [...messages];
428
446
  return ordered.map((item, index) => {
429
447
  const isLatest = index === ordered.length - 1;
448
+ const hasDiamonds = Boolean(productsByMsg[item.id]?.response?.body?.diamonds && productsByMsg[item.id]?.response?.body?.diamonds.length > 0);
430
449
  return /*#__PURE__*/React.createElement(View, {
431
- key: item.id + index
450
+ key: item.id + index,
451
+ style: {
452
+ gap: 12
453
+ }
432
454
  }, /*#__PURE__*/React.createElement(MessageBubble, {
433
455
  message: item,
434
456
  theme: theme,
435
- conversationId: conversationId,
457
+ priceMode: priceMode,
436
458
  handleFeedbackAction: handleFeedbackAction,
437
459
  onReloadResults: handleReloadResults,
438
460
  reloading: reloadLoadingIds.has(item.id),
439
- hasResults: Boolean(productsByMsg[item.id]?.response?.body?.diamonds && productsByMsg[item.id].response.body.diamonds.length > 0)
440
- }), item.role === "assistant" && productsByMsg && productsByMsg.messageId === item.id && /*#__PURE__*/React.createElement(ProductsList, {
441
- data: productsByMsg?.data?.response?.body?.diamonds,
461
+ hasResults: hasDiamonds,
462
+ totalResults: productsByMsg[item.id]?.response?.header?.total_diamonds_found || 0,
463
+ shownResults: productsByMsg[item.id]?.response?.body?.diamonds.length || 0,
464
+ onSuggestionSelect: handleSuggestionSelect,
465
+ isLatest: isLatest,
466
+ isTyping: typingMessageId === item.id
467
+ }), item.role === "assistant" && hasDiamonds && /*#__PURE__*/React.createElement(ProductsList, {
468
+ data: productsByMsg[item.id]?.response?.body?.diamonds || [],
469
+ totalResults: productsByMsg[item.id]?.response?.header?.total_diamonds_found || 0,
442
470
  onViewAll: onViewAll,
443
471
  onItemPress: onItemPress
444
- }), item.role === "assistant" && item.suggestions && item.suggestions.length > 0 && isLatest && /*#__PURE__*/React.createElement(SuggestionsRow, {
445
- suggestions: item.suggestions || [],
446
- onSelect: handleSuggestionSelect
472
+ }), /*#__PURE__*/React.createElement(MessageMetaRow, {
473
+ message: item,
474
+ priceMode: priceMode || "",
475
+ handleFeedbackAction: handleFeedbackAction,
476
+ onReloadResults: handleReloadResults,
477
+ reloading: reloadLoadingIds.has(item.id),
478
+ hasResults: hasDiamonds
447
479
  }));
448
480
  });
449
- })()), /*#__PURE__*/React.createElement(ChatInput, {
481
+ })()), /*#__PURE__*/React.createElement(View, {
482
+ style: styles.bottomContainer
483
+ }, /*#__PURE__*/React.createElement(ChatInput, {
450
484
  value: input,
451
485
  onChangeText: setInput,
452
486
  onSend: handleSend,
@@ -454,7 +488,9 @@ export const ChatWidget = /*#__PURE__*/forwardRef(({
454
488
  placeholder: placeholder,
455
489
  theme: theme,
456
490
  inputRef: inputRef
457
- }));
491
+ }), /*#__PURE__*/React.createElement(BetaNotice, {
492
+ active: betaActive
493
+ }))));
458
494
  });
459
495
  ChatWidget.displayName = "ChatWidget";
460
496
  const styles = StyleSheet.create({
@@ -475,12 +511,23 @@ const styles = StyleSheet.create({
475
511
  padding: 16,
476
512
  alignItems: "center",
477
513
  justifyContent: "center",
478
- backgroundColor: "#f5f5f5"
514
+ backgroundColor: "#FFFFFF"
479
515
  },
480
516
  emptyText: {
481
- fontSize: 14,
482
- fontWeight: "500",
483
- color: "#666666"
517
+ fontSize: 13,
518
+ fontWeight: "400",
519
+ color: "#4F4E57"
520
+ },
521
+ bottomContainer: {
522
+ paddingVertical: 12,
523
+ paddingHorizontal: 16,
524
+ borderTopColor: "#E0E0E0",
525
+ borderTopWidth: 1,
526
+ flexDirection: "column",
527
+ justifyContent: "space-between",
528
+ alignItems: "center",
529
+ alignSelf: "stretch",
530
+ gap: 12
484
531
  }
485
532
  });
486
533
  //# sourceMappingURL=ChatWidget.js.map