@memori.ai/memori-react 7.28.0 → 7.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/dist/components/AccountForm/AccountForm.d.ts +1 -0
  3. package/dist/components/AgeVerificationModal/AgeVerificationModal.d.ts +1 -0
  4. package/dist/components/AttachmentLinkModal/AttachmentLinkModal.d.ts +1 -0
  5. package/dist/components/Auth/Auth.d.ts +1 -0
  6. package/dist/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.d.ts +1 -0
  7. package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.d.ts +1 -0
  8. package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/AnimationController.d.ts +38 -0
  9. package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/AnimationController.js +181 -0
  10. package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/AnimationController.js.map +1 -0
  11. package/dist/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.d.ts +1 -0
  12. package/dist/components/Avatar/AvatarView/AvatarComponent/components/loader.d.ts +1 -0
  13. package/dist/components/Blob/Blob.d.ts +1 -0
  14. package/dist/components/BlockedMemoriBadge/BlockedMemoriBadge.d.ts +1 -0
  15. package/dist/components/Chat/Chat.d.ts +1 -0
  16. package/dist/components/Chat/Chat.js +5 -3
  17. package/dist/components/Chat/Chat.js.map +1 -1
  18. package/dist/components/ChatBubble/VirtualizedContent/VirtualizedContent.d.ts +7 -0
  19. package/dist/components/ChatBubble/VirtualizedContent/VirtualizedContent.js +69 -0
  20. package/dist/components/ChatBubble/VirtualizedContent/VirtualizedContent.js.map +1 -0
  21. package/dist/components/ChatHistoryDrawer/ChatHistory.css +321 -0
  22. package/dist/components/ChatHistoryDrawer/ChatHistory.d.ts +15 -0
  23. package/dist/components/ChatHistoryDrawer/ChatHistory.js +109 -0
  24. package/dist/components/ChatHistoryDrawer/ChatHistory.js.map +1 -0
  25. package/dist/components/CompletionProviderStatus/CompletionProviderStatus.d.ts +1 -0
  26. package/dist/components/CustomGLBModelViewer/ModelViewer.d.ts +1 -0
  27. package/dist/components/ExpertsDrawer/ExpertsDrawer.d.ts +1 -0
  28. package/dist/components/FeedbackButtons/FeedbackButtons.d.ts +1 -0
  29. package/dist/components/FilePreview/FilePreview.d.ts +1 -0
  30. package/dist/components/Header/Header.d.ts +2 -0
  31. package/dist/components/Header/Header.js +4 -3
  32. package/dist/components/Header/Header.js.map +1 -1
  33. package/dist/components/KnownFacts/KnownFacts.d.ts +1 -0
  34. package/dist/components/LoginDrawer/LoginDrawer.d.ts +1 -0
  35. package/dist/components/MemoriWidget/MemoriWidget.d.ts +2 -1
  36. package/dist/components/MemoriWidget/MemoriWidget.js +173 -21
  37. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  38. package/dist/components/MicrophoneButton/MicrophoneButton.d.ts +1 -0
  39. package/dist/components/PositionDrawer/PositionDrawer.d.ts +1 -0
  40. package/dist/components/PoweredBy/PoweredBy.d.ts +1 -0
  41. package/dist/components/SettingsDrawer/SettingsDrawer.d.ts +1 -0
  42. package/dist/components/SignupForm/SignupForm.d.ts +1 -0
  43. package/dist/components/Snippet/Snippet.d.ts +1 -0
  44. package/dist/components/StartPanel/StartPanel.css +20 -21
  45. package/dist/components/StartPanel/StartPanel.js.map +1 -1
  46. package/dist/components/Typing/Typing.d.ts +1 -0
  47. package/dist/components/VenueWidget/VenueWidget.css +7 -0
  48. package/dist/components/VenueWidget/VenueWidget.d.ts +1 -0
  49. package/dist/components/VenueWidget/VenueWidget.js +1 -1
  50. package/dist/components/VenueWidget/VenueWidget.js.map +1 -1
  51. package/dist/components/WhyThisAnswer/WhyThisAnswer.d.ts +1 -0
  52. package/dist/components/icons/AI.d.ts +1 -0
  53. package/dist/components/icons/Alert.d.ts +1 -0
  54. package/dist/components/icons/Bug.d.ts +1 -0
  55. package/dist/components/icons/Chat.d.ts +6 -0
  56. package/dist/components/icons/Chat.js +6 -0
  57. package/dist/components/icons/Chat.js.map +1 -0
  58. package/dist/components/icons/ChevronLeft.d.ts +1 -0
  59. package/dist/components/icons/ChevronRight.d.ts +1 -0
  60. package/dist/components/icons/Clear.d.ts +1 -0
  61. package/dist/components/icons/Close.d.ts +1 -0
  62. package/dist/components/icons/Code.d.ts +1 -0
  63. package/dist/components/icons/Copy.d.ts +1 -0
  64. package/dist/components/icons/DeepThought.d.ts +1 -0
  65. package/dist/components/icons/Delete.d.ts +1 -0
  66. package/dist/components/icons/Download.d.ts +1 -0
  67. package/dist/components/icons/Edit.d.ts +1 -0
  68. package/dist/components/icons/Expand.d.ts +1 -0
  69. package/dist/components/icons/Eye.d.ts +1 -0
  70. package/dist/components/icons/EyeInvisible.d.ts +1 -0
  71. package/dist/components/icons/Facebook.d.ts +1 -0
  72. package/dist/components/icons/Feedback.d.ts +1 -0
  73. package/dist/components/icons/File.d.ts +1 -0
  74. package/dist/components/icons/FileExcel.d.ts +1 -0
  75. package/dist/components/icons/FilePdf.d.ts +1 -0
  76. package/dist/components/icons/FileWord.d.ts +1 -0
  77. package/dist/components/icons/Fullscreen.d.ts +1 -0
  78. package/dist/components/icons/FullscreenExit.d.ts +1 -0
  79. package/dist/components/icons/Group.d.ts +1 -0
  80. package/dist/components/icons/History.d.ts +7 -0
  81. package/dist/components/icons/History.js +6 -0
  82. package/dist/components/icons/History.js.map +1 -0
  83. package/dist/components/icons/Info.d.ts +1 -0
  84. package/dist/components/icons/Link.d.ts +1 -0
  85. package/dist/components/icons/Linkedin.d.ts +1 -0
  86. package/dist/components/icons/Loading.d.ts +1 -0
  87. package/dist/components/icons/Mail.d.ts +1 -0
  88. package/dist/components/icons/MapMarker.d.ts +1 -0
  89. package/dist/components/icons/Message.d.ts +1 -0
  90. package/dist/components/icons/Microphone.d.ts +1 -0
  91. package/dist/components/icons/Minus.d.ts +1 -0
  92. package/dist/components/icons/MinusCircle.d.ts +1 -0
  93. package/dist/components/icons/PaperClip.d.ts +1 -0
  94. package/dist/components/icons/Picture.d.ts +1 -0
  95. package/dist/components/icons/Plus.d.ts +1 -0
  96. package/dist/components/icons/QuestionHelp.d.ts +1 -0
  97. package/dist/components/icons/Refresh.d.ts +1 -0
  98. package/dist/components/icons/SelectIcon.d.ts +1 -0
  99. package/dist/components/icons/Send.d.ts +1 -0
  100. package/dist/components/icons/Setting.d.ts +1 -0
  101. package/dist/components/icons/Share.d.ts +1 -0
  102. package/dist/components/icons/Sound.d.ts +1 -0
  103. package/dist/components/icons/SoundDeactivated.d.ts +1 -0
  104. package/dist/components/icons/Telegram.d.ts +1 -0
  105. package/dist/components/icons/ThumbDown.d.ts +1 -0
  106. package/dist/components/icons/ThumbUp.d.ts +1 -0
  107. package/dist/components/icons/Translation.d.ts +1 -0
  108. package/dist/components/icons/Twitter.d.ts +1 -0
  109. package/dist/components/icons/User.d.ts +1 -0
  110. package/dist/components/icons/Warning.d.ts +1 -0
  111. package/dist/components/icons/WhatsApp.d.ts +1 -0
  112. package/dist/components/ui/Card.css +4 -0
  113. package/dist/components/ui/Card.js +3 -2
  114. package/dist/components/ui/Card.js.map +1 -1
  115. package/dist/components/ui/Select.d.ts +1 -0
  116. package/dist/helpers/message.js +1 -4
  117. package/dist/helpers/message.js.map +1 -1
  118. package/dist/helpers/utils.d.ts +1 -0
  119. package/dist/helpers/utils.js +18 -1
  120. package/dist/helpers/utils.js.map +1 -1
  121. package/dist/index.d.ts +1 -0
  122. package/dist/index.js +2 -2
  123. package/dist/index.js.map +1 -1
  124. package/dist/locales/de.json +11 -1
  125. package/dist/locales/en.json +11 -1
  126. package/dist/locales/es.json +11 -1
  127. package/dist/locales/fr.json +14 -2
  128. package/dist/locales/it.json +11 -1
  129. package/dist/styles.css +1 -0
  130. package/esm/components/AccountForm/AccountForm.d.ts +1 -0
  131. package/esm/components/AgeVerificationModal/AgeVerificationModal.d.ts +1 -0
  132. package/esm/components/AttachmentLinkModal/AttachmentLinkModal.d.ts +1 -0
  133. package/esm/components/Auth/Auth.d.ts +1 -0
  134. package/esm/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.d.ts +1 -0
  135. package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.d.ts +1 -0
  136. package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/AnimationController.d.ts +38 -0
  137. package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/AnimationController.js +177 -0
  138. package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/AnimationController.js.map +1 -0
  139. package/esm/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.d.ts +1 -0
  140. package/esm/components/Avatar/AvatarView/AvatarComponent/components/loader.d.ts +1 -0
  141. package/esm/components/Blob/Blob.d.ts +1 -0
  142. package/esm/components/BlockedMemoriBadge/BlockedMemoriBadge.d.ts +1 -0
  143. package/esm/components/Chat/Chat.d.ts +1 -0
  144. package/esm/components/Chat/Chat.js +5 -3
  145. package/esm/components/Chat/Chat.js.map +1 -1
  146. package/esm/components/ChatBubble/VirtualizedContent/VirtualizedContent.d.ts +7 -0
  147. package/esm/components/ChatBubble/VirtualizedContent/VirtualizedContent.js +67 -0
  148. package/esm/components/ChatBubble/VirtualizedContent/VirtualizedContent.js.map +1 -0
  149. package/esm/components/ChatHistoryDrawer/ChatHistory.css +321 -0
  150. package/esm/components/ChatHistoryDrawer/ChatHistory.d.ts +15 -0
  151. package/esm/components/ChatHistoryDrawer/ChatHistory.js +106 -0
  152. package/esm/components/ChatHistoryDrawer/ChatHistory.js.map +1 -0
  153. package/esm/components/CompletionProviderStatus/CompletionProviderStatus.d.ts +1 -0
  154. package/esm/components/CustomGLBModelViewer/ModelViewer.d.ts +1 -0
  155. package/esm/components/ExpertsDrawer/ExpertsDrawer.d.ts +1 -0
  156. package/esm/components/FeedbackButtons/FeedbackButtons.d.ts +1 -0
  157. package/esm/components/FilePreview/FilePreview.d.ts +1 -0
  158. package/esm/components/Header/Header.d.ts +2 -0
  159. package/esm/components/Header/Header.js +4 -3
  160. package/esm/components/Header/Header.js.map +1 -1
  161. package/esm/components/KnownFacts/KnownFacts.d.ts +1 -0
  162. package/esm/components/LoginDrawer/LoginDrawer.d.ts +1 -0
  163. package/esm/components/MemoriWidget/MemoriWidget.d.ts +2 -1
  164. package/esm/components/MemoriWidget/MemoriWidget.js +173 -21
  165. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  166. package/esm/components/MicrophoneButton/MicrophoneButton.d.ts +1 -0
  167. package/esm/components/PositionDrawer/PositionDrawer.d.ts +1 -0
  168. package/esm/components/PoweredBy/PoweredBy.d.ts +1 -0
  169. package/esm/components/SettingsDrawer/SettingsDrawer.d.ts +1 -0
  170. package/esm/components/SignupForm/SignupForm.d.ts +1 -0
  171. package/esm/components/Snippet/Snippet.d.ts +1 -0
  172. package/esm/components/StartPanel/StartPanel.css +20 -21
  173. package/esm/components/StartPanel/StartPanel.js.map +1 -1
  174. package/esm/components/Typing/Typing.d.ts +1 -0
  175. package/esm/components/VenueWidget/VenueWidget.css +7 -0
  176. package/esm/components/VenueWidget/VenueWidget.d.ts +1 -0
  177. package/esm/components/VenueWidget/VenueWidget.js +1 -1
  178. package/esm/components/VenueWidget/VenueWidget.js.map +1 -1
  179. package/esm/components/WhyThisAnswer/WhyThisAnswer.d.ts +1 -0
  180. package/esm/components/icons/AI.d.ts +1 -0
  181. package/esm/components/icons/Alert.d.ts +1 -0
  182. package/esm/components/icons/Bug.d.ts +1 -0
  183. package/esm/components/icons/Chat.d.ts +6 -0
  184. package/esm/components/icons/Chat.js +4 -0
  185. package/esm/components/icons/Chat.js.map +1 -0
  186. package/esm/components/icons/ChevronLeft.d.ts +1 -0
  187. package/esm/components/icons/ChevronRight.d.ts +1 -0
  188. package/esm/components/icons/Clear.d.ts +1 -0
  189. package/esm/components/icons/Close.d.ts +1 -0
  190. package/esm/components/icons/Code.d.ts +1 -0
  191. package/esm/components/icons/Copy.d.ts +1 -0
  192. package/esm/components/icons/DeepThought.d.ts +1 -0
  193. package/esm/components/icons/Delete.d.ts +1 -0
  194. package/esm/components/icons/Download.d.ts +1 -0
  195. package/esm/components/icons/Edit.d.ts +1 -0
  196. package/esm/components/icons/Expand.d.ts +1 -0
  197. package/esm/components/icons/Eye.d.ts +1 -0
  198. package/esm/components/icons/EyeInvisible.d.ts +1 -0
  199. package/esm/components/icons/Facebook.d.ts +1 -0
  200. package/esm/components/icons/Feedback.d.ts +1 -0
  201. package/esm/components/icons/File.d.ts +1 -0
  202. package/esm/components/icons/FileExcel.d.ts +1 -0
  203. package/esm/components/icons/FilePdf.d.ts +1 -0
  204. package/esm/components/icons/FileWord.d.ts +1 -0
  205. package/esm/components/icons/Fullscreen.d.ts +1 -0
  206. package/esm/components/icons/FullscreenExit.d.ts +1 -0
  207. package/esm/components/icons/Group.d.ts +1 -0
  208. package/esm/components/icons/History.d.ts +7 -0
  209. package/esm/components/icons/History.js +4 -0
  210. package/esm/components/icons/History.js.map +1 -0
  211. package/esm/components/icons/Info.d.ts +1 -0
  212. package/esm/components/icons/Link.d.ts +1 -0
  213. package/esm/components/icons/Linkedin.d.ts +1 -0
  214. package/esm/components/icons/Loading.d.ts +1 -0
  215. package/esm/components/icons/Mail.d.ts +1 -0
  216. package/esm/components/icons/MapMarker.d.ts +1 -0
  217. package/esm/components/icons/Message.d.ts +1 -0
  218. package/esm/components/icons/Microphone.d.ts +1 -0
  219. package/esm/components/icons/Minus.d.ts +1 -0
  220. package/esm/components/icons/MinusCircle.d.ts +1 -0
  221. package/esm/components/icons/PaperClip.d.ts +1 -0
  222. package/esm/components/icons/Picture.d.ts +1 -0
  223. package/esm/components/icons/Plus.d.ts +1 -0
  224. package/esm/components/icons/QuestionHelp.d.ts +1 -0
  225. package/esm/components/icons/Refresh.d.ts +1 -0
  226. package/esm/components/icons/SelectIcon.d.ts +1 -0
  227. package/esm/components/icons/Send.d.ts +1 -0
  228. package/esm/components/icons/Setting.d.ts +1 -0
  229. package/esm/components/icons/Share.d.ts +1 -0
  230. package/esm/components/icons/Sound.d.ts +1 -0
  231. package/esm/components/icons/SoundDeactivated.d.ts +1 -0
  232. package/esm/components/icons/Telegram.d.ts +1 -0
  233. package/esm/components/icons/ThumbDown.d.ts +1 -0
  234. package/esm/components/icons/ThumbUp.d.ts +1 -0
  235. package/esm/components/icons/Translation.d.ts +1 -0
  236. package/esm/components/icons/Twitter.d.ts +1 -0
  237. package/esm/components/icons/User.d.ts +1 -0
  238. package/esm/components/icons/Warning.d.ts +1 -0
  239. package/esm/components/icons/WhatsApp.d.ts +1 -0
  240. package/esm/components/ui/Card.css +4 -0
  241. package/esm/components/ui/Card.js +3 -2
  242. package/esm/components/ui/Card.js.map +1 -1
  243. package/esm/components/ui/Select.d.ts +1 -0
  244. package/esm/helpers/message.js +1 -4
  245. package/esm/helpers/message.js.map +1 -1
  246. package/esm/helpers/utils.d.ts +1 -0
  247. package/esm/helpers/utils.js +16 -0
  248. package/esm/helpers/utils.js.map +1 -1
  249. package/esm/index.d.ts +1 -0
  250. package/esm/index.js +2 -2
  251. package/esm/index.js.map +1 -1
  252. package/esm/locales/de.json +11 -1
  253. package/esm/locales/en.json +11 -1
  254. package/esm/locales/es.json +11 -1
  255. package/esm/locales/fr.json +14 -2
  256. package/esm/locales/it.json +11 -1
  257. package/esm/styles.css +1 -0
  258. package/package.json +1 -1
  259. package/src/components/Chat/Chat.tsx +5 -2
  260. package/src/components/ChatHistoryDrawer/ChatHistory.css +321 -0
  261. package/src/components/ChatHistoryDrawer/ChatHistory.stories.tsx +290 -0
  262. package/src/components/ChatHistoryDrawer/ChatHistory.test.tsx +91 -0
  263. package/src/components/ChatHistoryDrawer/ChatHistory.tsx +369 -0
  264. package/src/components/ChatHistoryDrawer/__snapshots__/ChatHistory.test.tsx.snap +27 -0
  265. package/src/components/Header/Header.test.tsx +16 -1
  266. package/src/components/Header/Header.tsx +20 -0
  267. package/src/components/Header/__snapshots__/Header.test.tsx.snap +140 -0
  268. package/src/components/MemoriWidget/MemoriWidget.tsx +249 -16
  269. package/src/components/StartPanel/StartPanel.css +20 -21
  270. package/src/components/StartPanel/StartPanel.tsx +1 -0
  271. package/src/components/VenueWidget/VenueWidget.css +7 -0
  272. package/src/components/VenueWidget/VenueWidget.tsx +4 -4
  273. package/src/components/icons/Chat.tsx +30 -0
  274. package/src/components/icons/History.tsx +33 -0
  275. package/src/components/ui/Card.css +4 -0
  276. package/src/components/ui/Card.tsx +2 -1
  277. package/src/helpers/message.ts +0 -2
  278. package/src/helpers/utils.ts +23 -0
  279. package/src/index.stories.tsx +36 -9
  280. package/src/index.tsx +3 -0
  281. package/src/locales/de.json +11 -1
  282. package/src/locales/en.json +11 -1
  283. package/src/locales/es.json +11 -1
  284. package/src/locales/fr.json +14 -2
  285. package/src/locales/it.json +11 -1
  286. package/src/styles.css +1 -0
@@ -0,0 +1,290 @@
1
+ import React from 'react';
2
+ import { Meta, StoryObj } from '@storybook/react';
3
+ import ChatHistory from './ChatHistory';
4
+ import { ChatLog, Memori } from '@memori.ai/memori-api-client/dist/types';
5
+
6
+ // Mock API client
7
+ const mockApiClient = {
8
+ chatLogs: {
9
+ getChatLogsByUser: () => Promise.resolve({
10
+ chatLogs: mockChatLogs
11
+ })
12
+ }
13
+ };
14
+
15
+ // Sample data
16
+ const mockChatLogs: ChatLog[] = [
17
+ {
18
+ chatLogID: 'chat123456',
19
+ memoriID: 'mem123',
20
+ sessionID: 'session123',
21
+ timestamp: '2023-01-01T10:00:00Z',
22
+ lines: [
23
+ {
24
+ text: 'Hello, how can I help?',
25
+ inbound: true,
26
+ timestamp: '2023-01-01T10:00:00Z',
27
+ contextVars: {},
28
+ media: [],
29
+ memoryID: 'mem123',
30
+ },
31
+ {
32
+ text: 'I need information about your services',
33
+ inbound: false,
34
+ timestamp: '2023-01-01T10:01:00Z',
35
+ contextVars: {},
36
+ media: [],
37
+ memoryID: 'mem123',
38
+ },
39
+ {
40
+ text: 'We offer a range of services including consultation, implementation, and support.',
41
+ inbound: true,
42
+ timestamp: '2023-01-01T10:02:00Z',
43
+ contextVars: {},
44
+ media: [],
45
+ memoryID: 'mem123',
46
+ }
47
+ ],
48
+ boardOfExperts: false
49
+ },
50
+ {
51
+ chatLogID: 'chat456789',
52
+ memoriID: 'mem123',
53
+ sessionID: 'session123',
54
+ timestamp: '2023-01-02T14:00:00Z',
55
+ lines: [
56
+ {
57
+ text: 'What are your business hours?',
58
+ inbound: false,
59
+ timestamp: '2023-01-02T14:00:00Z',
60
+ contextVars: {},
61
+ media: [],
62
+ memoryID: 'mem123',
63
+ },
64
+ {
65
+ text: 'We are open from 9 AM to 5 PM weekdays.',
66
+ inbound: true,
67
+ timestamp: '2023-01-02T14:01:00Z',
68
+ contextVars: {},
69
+ media: [],
70
+ memoryID: 'mem123',
71
+ }
72
+ ],
73
+ boardOfExperts: true
74
+ },
75
+ {
76
+ chatLogID: 'chat789012',
77
+ memoriID: 'mem123',
78
+ sessionID: 'session123',
79
+ timestamp: '2023-01-03T11:00:00Z',
80
+ lines: [
81
+ {
82
+ text: 'Do you offer remote services?',
83
+ inbound: false,
84
+ timestamp: '2023-01-03T11:00:00Z',
85
+ contextVars: {},
86
+ media: [],
87
+ memoryID: 'mem123',
88
+ },
89
+ {
90
+ text: 'Yes, we offer both in-person and remote services to accommodate your needs.',
91
+ inbound: true,
92
+ timestamp: '2023-01-03T11:01:00Z',
93
+ contextVars: {},
94
+ media: [],
95
+ memoryID: 'mem123',
96
+ }
97
+ ],
98
+ boardOfExperts: false
99
+ },
100
+ {
101
+ chatLogID: 'chat345678',
102
+ memoriID: 'mem123',
103
+ sessionID: 'session123',
104
+ timestamp: '2023-01-04T09:30:00Z',
105
+ lines: [
106
+ {
107
+ text: 'What is your pricing structure?',
108
+ inbound: false,
109
+ timestamp: '2023-01-04T09:30:00Z',
110
+ contextVars: {},
111
+ media: [],
112
+ memoryID: 'mem123',
113
+ },
114
+ {
115
+ text: 'Our pricing is based on project scope. We offer packages starting at $499 for basic services, with custom quotes for larger projects.',
116
+ inbound: true,
117
+ timestamp: '2023-01-04T09:31:00Z',
118
+ contextVars: {},
119
+ media: [],
120
+ memoryID: 'mem123',
121
+ },
122
+ {
123
+ text: 'Do you offer any discounts?',
124
+ inbound: false,
125
+ timestamp: '2023-01-04T09:32:00Z',
126
+ contextVars: {},
127
+ media: [],
128
+ memoryID: 'mem123',
129
+ },
130
+ {
131
+ text: 'Yes, we offer discounts for non-profits and educational institutions. We also have loyalty programs for returning customers.',
132
+ inbound: true,
133
+ timestamp: '2023-01-04T09:33:00Z',
134
+ contextVars: {},
135
+ media: [],
136
+ memoryID: 'mem123',
137
+ }
138
+ ],
139
+ boardOfExperts: false
140
+ }
141
+ ];
142
+
143
+ const mockMemori: Memori = {
144
+ memoriID: 'mem123',
145
+ name: 'Test Memori',
146
+ avatar: { url: 'https://example.com/avatar.jpg' },
147
+ description: 'A test memori',
148
+ isPublic: true,
149
+ integrationEnabled: false,
150
+ enableBoardOfExperts: true,
151
+ memoriConfigurationID: 'mem123',
152
+ privacyType: 'PUBLIC',
153
+ voiceType: 'FEMALE'
154
+ } as Memori;
155
+
156
+ // Create a meta object for the component
157
+ const meta: Meta<typeof ChatHistory> = {
158
+ title: 'Widget/Chat History Drawer',
159
+ component: ChatHistory,
160
+ parameters: {
161
+ layout: 'fullscreen',
162
+ },
163
+ // Define common args that apply to all stories
164
+ args: {
165
+ open: true,
166
+ sessionId: 'session123',
167
+ memori: mockMemori,
168
+ apiClient: mockApiClient as any,
169
+ onClose: () => console.log('Close button clicked'),
170
+ resumeSession: (sessionId, lines, questionsAndAnswers) => {
171
+ console.log('Resume session called with:', { sessionId, lines, questionsAndAnswers });
172
+ }
173
+ },
174
+ // Add argTypes to configure controls in Storybook
175
+ argTypes: {
176
+ open: { control: 'boolean', description: 'Whether the drawer is open' },
177
+ layout: {
178
+ control: { type: 'select' },
179
+ options: ['DEFAULT', 'FLOATING', 'FULLPAGE', 'INLINE'],
180
+ description: 'Layout mode for the drawer'
181
+ },
182
+ onClose: { action: 'closed' },
183
+ resumeSession: { action: 'resumed session' }
184
+ }
185
+ };
186
+
187
+ export default meta;
188
+
189
+ // Define types for our stories
190
+ type Story = StoryObj<typeof ChatHistory>;
191
+
192
+ // Default story
193
+ export const Default: Story = {
194
+ args: {}
195
+ };
196
+
197
+ // With preselected chat
198
+ export const WithSelectedChat: Story = {
199
+ args: {},
200
+ play: async ({ canvasElement }) => {
201
+ // We need to use the play function to simulate clicking on a chat
202
+ const canvas = canvasElement.ownerDocument.body;
203
+ setTimeout(() => {
204
+ const chatCard = canvas.querySelector('.memori-chat-history-drawer--card');
205
+ if (chatCard) {
206
+ (chatCard as HTMLElement).click();
207
+ }
208
+ }, 300);
209
+ }
210
+ };
211
+
212
+ // Empty state
213
+ export const EmptyState: Story = {
214
+ args: {
215
+ apiClient: {
216
+ chatLogs: {
217
+ getChatLogsByUser: () => Promise.resolve({ chatLogs: [] })
218
+ }
219
+ } as any
220
+ }
221
+ };
222
+
223
+ // Loading state
224
+ export const LoadingState: Story = {
225
+ args: {
226
+ apiClient: {
227
+ chatLogs: {
228
+ getChatLogsByUser: () => new Promise(resolve => {
229
+ // Simulate a slow network
230
+ setTimeout(() => {
231
+ resolve({ chatLogs: mockChatLogs });
232
+ }, 2000);
233
+ })
234
+ }
235
+ } as any
236
+ }
237
+ };
238
+
239
+ // Search state
240
+ export const WithSearch: Story = {
241
+ args: {},
242
+ play: async ({ canvasElement }) => {
243
+ const canvas = canvasElement.ownerDocument.body;
244
+ setTimeout(() => {
245
+ const searchInput = canvas.querySelector('input[type="text"]');
246
+ if (searchInput) {
247
+ (searchInput as HTMLInputElement).value = 'pricing';
248
+ (searchInput as HTMLInputElement).dispatchEvent(new Event('change', { bubbles: true }));
249
+ }
250
+ }, 300);
251
+ }
252
+ };
253
+
254
+ // With pagination
255
+ export const WithPagination: Story = {
256
+ args: {
257
+ apiClient: {
258
+ chatLogs: {
259
+ getChatLogsByUser: () => {
260
+ // Create 20 mock chat logs to trigger pagination
261
+ const manyLogs = Array.from({ length: 20 }, (_, i) => ({
262
+ chatLogID: `chat${i}`,
263
+ lines: [
264
+ {
265
+ text: `Question ${i}`,
266
+ inbound: false,
267
+ timestamp: `2023-01-0${(i % 9) + 1}T10:00:00Z`,
268
+ contextVars: {},
269
+ media: [],
270
+ memoryID: 'mem123',
271
+ sessionID: 'session123'
272
+ },
273
+ {
274
+ text: `Answer ${i}`,
275
+ inbound: true,
276
+ timestamp: `2023-01-0${(i % 9) + 1}T10:01:00Z`,
277
+ contextVars: {},
278
+ media: [],
279
+ memoryID: 'mem123',
280
+ sessionID: 'session123'
281
+ }
282
+ ],
283
+ boardOfExperts: i % 3 === 0
284
+ }));
285
+ return Promise.resolve({ chatLogs: manyLogs });
286
+ }
287
+ }
288
+ } as any
289
+ }
290
+ };
@@ -0,0 +1,91 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import ChatHistoryDrawer from './ChatHistory';
4
+ import memoriApiClient from '@memori.ai/memori-api-client';
5
+ import { memori } from '../../mocks/data';
6
+
7
+ // Mock IntersectionObserver
8
+ beforeEach(() => {
9
+ window.IntersectionObserver = jest.fn().mockImplementation(() => ({
10
+ observe: jest.fn(),
11
+ unobserve: jest.fn(),
12
+ disconnect: jest.fn(),
13
+ takeRecords: jest.fn(),
14
+ root: null,
15
+ rootMargin: '',
16
+ thresholds: [],
17
+ }));
18
+ });
19
+
20
+ // Mock the translation hook
21
+ jest.mock('react-i18next', () => ({
22
+ useTranslation: () => ({
23
+ t: (key: string) => key,
24
+ }),
25
+ }));
26
+
27
+ const client = memoriApiClient();
28
+
29
+ it('renders ChatHistoryDrawer unchanged', () => {
30
+ const { container } = render(
31
+ <ChatHistoryDrawer
32
+ open={true}
33
+ onClose={jest.fn()}
34
+ apiClient={client}
35
+ sessionId="test-session"
36
+ memori={memori}
37
+ resumeSession={jest.fn()}
38
+ baseUrl="https://www.aisuru.com"
39
+ apiUrl="https://backend.memori.ai"
40
+ />
41
+ );
42
+ expect(container).toMatchSnapshot();
43
+ });
44
+
45
+ it('renders ChatHistoryDrawer with chat logs unchanged', () => {
46
+ const { container } = render(
47
+ <ChatHistoryDrawer
48
+ open={true}
49
+ onClose={jest.fn()}
50
+ apiClient={client}
51
+ sessionId="test-session"
52
+ memori={memori}
53
+ resumeSession={jest.fn()}
54
+ baseUrl="https://www.aisuru.com"
55
+ apiUrl="https://backend.memori.ai"
56
+ />
57
+ );
58
+ expect(container).toMatchSnapshot();
59
+ });
60
+
61
+ it('renders ChatHistoryDrawer with selected chat log unchanged', () => {
62
+ const { container } = render(
63
+ <ChatHistoryDrawer
64
+ open={true}
65
+ onClose={jest.fn()}
66
+ apiClient={client}
67
+ sessionId="test-session"
68
+ memori={memori}
69
+ resumeSession={jest.fn()}
70
+ baseUrl="https://www.aisuru.com"
71
+ apiUrl="https://backend.memori.ai"
72
+ />
73
+ );
74
+ expect(container).toMatchSnapshot();
75
+ });
76
+
77
+ it('renders ChatHistoryDrawer closed unchanged', () => {
78
+ const { container } = render(
79
+ <ChatHistoryDrawer
80
+ open={false}
81
+ onClose={jest.fn()}
82
+ apiClient={client}
83
+ sessionId="test-session"
84
+ memori={memori}
85
+ resumeSession={jest.fn()}
86
+ baseUrl="https://www.aisuru.com"
87
+ apiUrl="https://backend.memori.ai"
88
+ />
89
+ );
90
+ expect(container).toMatchSnapshot();
91
+ });