@memori.ai/memori-react 7.25.1 → 7.26.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/components/Chat/Chat.d.ts +5 -10
  3. package/dist/components/Chat/Chat.js +3 -3
  4. package/dist/components/Chat/Chat.js.map +1 -1
  5. package/dist/components/ChatBubble/ChatBubble.css +10 -0
  6. package/dist/components/ChatBubble/ChatBubble.d.ts +1 -0
  7. package/dist/components/ChatBubble/ChatBubble.js +24 -20
  8. package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
  9. package/dist/components/ChatBubble/VirtualizedContent/VirtualizedContent.d.ts +7 -0
  10. package/dist/components/ChatBubble/VirtualizedContent/VirtualizedContent.js +69 -0
  11. package/dist/components/ChatBubble/VirtualizedContent/VirtualizedContent.js.map +1 -0
  12. package/dist/components/ChatInputs/ChatInputs.d.ts +6 -10
  13. package/dist/components/ChatInputs/ChatInputs.js +37 -30
  14. package/dist/components/ChatInputs/ChatInputs.js.map +1 -1
  15. package/dist/components/FilePreview/FilePreview.css +169 -140
  16. package/dist/components/FilePreview/FilePreview.d.ts +2 -6
  17. package/dist/components/FilePreview/FilePreview.js +58 -5
  18. package/dist/components/FilePreview/FilePreview.js.map +1 -1
  19. package/dist/components/MediaWidget/LinkItemWidget.css +1 -0
  20. package/dist/components/MediaWidget/MediaItemWidget.css +10 -0
  21. package/dist/components/MediaWidget/MediaItemWidget.d.ts +6 -2
  22. package/dist/components/MediaWidget/MediaItemWidget.js +49 -11
  23. package/dist/components/MediaWidget/MediaItemWidget.js.map +1 -1
  24. package/dist/components/MediaWidget/MediaWidget.d.ts +3 -1
  25. package/dist/components/MemoriWidget/MemoriWidget.d.ts +2 -1
  26. package/dist/components/MemoriWidget/MemoriWidget.js +10 -18
  27. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  28. package/dist/components/UploadButton/UploadButton.css +506 -27
  29. package/dist/components/UploadButton/UploadButton.d.ts +14 -11
  30. package/dist/components/UploadButton/UploadButton.js +121 -288
  31. package/dist/components/UploadButton/UploadButton.js.map +1 -1
  32. package/dist/components/UploadButton/UploadDocuments/UploadDocuments.d.ts +19 -0
  33. package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js +211 -0
  34. package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -0
  35. package/dist/components/UploadButton/UploadImages/UploadImages.d.ts +13 -0
  36. package/dist/components/UploadButton/UploadImages/UploadImages.js +198 -0
  37. package/dist/components/UploadButton/UploadImages/UploadImages.js.map +1 -0
  38. package/dist/components/icons/Bug.d.ts +5 -0
  39. package/dist/components/icons/Bug.js +6 -0
  40. package/dist/components/icons/Bug.js.map +1 -0
  41. package/dist/components/icons/Document.d.ts +5 -0
  42. package/dist/components/icons/Document.js +10 -0
  43. package/dist/components/icons/Document.js.map +1 -0
  44. package/dist/components/icons/Image.d.ts +4 -0
  45. package/dist/components/icons/Image.js +9 -0
  46. package/dist/components/icons/Image.js.map +1 -0
  47. package/dist/components/icons/Preview.d.ts +4 -5
  48. package/dist/components/icons/Preview.js +5 -2
  49. package/dist/components/icons/Preview.js.map +1 -1
  50. package/dist/components/icons/Upload.d.ts +4 -5
  51. package/dist/components/icons/Upload.js +5 -2
  52. package/dist/components/icons/Upload.js.map +1 -1
  53. package/dist/components/layouts/HiddenChat.js +100 -10
  54. package/dist/components/layouts/HiddenChat.js.map +1 -1
  55. package/dist/components/layouts/hidden-chat.css +189 -119
  56. package/dist/components/ui/Card.d.ts +1 -0
  57. package/dist/components/ui/Card.js +2 -2
  58. package/dist/components/ui/Card.js.map +1 -1
  59. package/dist/locales/de.json +16 -0
  60. package/dist/locales/en.json +24 -0
  61. package/dist/locales/es.json +16 -0
  62. package/dist/locales/fr.json +16 -0
  63. package/dist/locales/it.json +22 -0
  64. package/esm/components/Chat/Chat.d.ts +5 -10
  65. package/esm/components/Chat/Chat.js +3 -3
  66. package/esm/components/Chat/Chat.js.map +1 -1
  67. package/esm/components/ChatBubble/ChatBubble.css +10 -0
  68. package/esm/components/ChatBubble/ChatBubble.d.ts +1 -0
  69. package/esm/components/ChatBubble/ChatBubble.js +24 -20
  70. package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
  71. package/esm/components/ChatBubble/VirtualizedContent/VirtualizedContent.d.ts +7 -0
  72. package/esm/components/ChatBubble/VirtualizedContent/VirtualizedContent.js +67 -0
  73. package/esm/components/ChatBubble/VirtualizedContent/VirtualizedContent.js.map +1 -0
  74. package/esm/components/ChatInputs/ChatInputs.d.ts +6 -10
  75. package/esm/components/ChatInputs/ChatInputs.js +37 -30
  76. package/esm/components/ChatInputs/ChatInputs.js.map +1 -1
  77. package/esm/components/FilePreview/FilePreview.css +169 -140
  78. package/esm/components/FilePreview/FilePreview.d.ts +2 -6
  79. package/esm/components/FilePreview/FilePreview.js +58 -5
  80. package/esm/components/FilePreview/FilePreview.js.map +1 -1
  81. package/esm/components/MediaWidget/LinkItemWidget.css +1 -0
  82. package/esm/components/MediaWidget/MediaItemWidget.css +10 -0
  83. package/esm/components/MediaWidget/MediaItemWidget.d.ts +6 -2
  84. package/esm/components/MediaWidget/MediaItemWidget.js +50 -12
  85. package/esm/components/MediaWidget/MediaItemWidget.js.map +1 -1
  86. package/esm/components/MediaWidget/MediaWidget.d.ts +3 -1
  87. package/esm/components/MemoriWidget/MemoriWidget.d.ts +2 -1
  88. package/esm/components/MemoriWidget/MemoriWidget.js +10 -18
  89. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  90. package/esm/components/UploadButton/UploadButton.css +506 -27
  91. package/esm/components/UploadButton/UploadButton.d.ts +14 -11
  92. package/esm/components/UploadButton/UploadButton.js +122 -289
  93. package/esm/components/UploadButton/UploadButton.js.map +1 -1
  94. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.d.ts +19 -0
  95. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js +208 -0
  96. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -0
  97. package/esm/components/UploadButton/UploadImages/UploadImages.d.ts +13 -0
  98. package/esm/components/UploadButton/UploadImages/UploadImages.js +195 -0
  99. package/esm/components/UploadButton/UploadImages/UploadImages.js.map +1 -0
  100. package/esm/components/icons/Bug.d.ts +5 -0
  101. package/esm/components/icons/Bug.js +4 -0
  102. package/esm/components/icons/Bug.js.map +1 -0
  103. package/esm/components/icons/Document.d.ts +5 -0
  104. package/esm/components/icons/Document.js +6 -0
  105. package/esm/components/icons/Document.js.map +1 -0
  106. package/esm/components/icons/Image.d.ts +4 -0
  107. package/esm/components/icons/Image.js +5 -0
  108. package/esm/components/icons/Image.js.map +1 -0
  109. package/esm/components/icons/Preview.d.ts +4 -5
  110. package/esm/components/icons/Preview.js +4 -3
  111. package/esm/components/icons/Preview.js.map +1 -1
  112. package/esm/components/icons/Upload.d.ts +4 -5
  113. package/esm/components/icons/Upload.js +4 -3
  114. package/esm/components/icons/Upload.js.map +1 -1
  115. package/esm/components/layouts/HiddenChat.js +101 -11
  116. package/esm/components/layouts/HiddenChat.js.map +1 -1
  117. package/esm/components/layouts/hidden-chat.css +189 -119
  118. package/esm/components/ui/Card.d.ts +1 -0
  119. package/esm/components/ui/Card.js +2 -2
  120. package/esm/components/ui/Card.js.map +1 -1
  121. package/esm/locales/de.json +16 -0
  122. package/esm/locales/en.json +24 -0
  123. package/esm/locales/es.json +16 -0
  124. package/esm/locales/fr.json +16 -0
  125. package/esm/locales/it.json +22 -0
  126. package/package.json +1 -1
  127. package/src/components/Chat/Chat.stories.tsx +12 -0
  128. package/src/components/Chat/Chat.tsx +8 -8
  129. package/src/components/ChatBubble/ChatBubble.css +10 -0
  130. package/src/components/ChatBubble/ChatBubble.stories.tsx +203 -1
  131. package/src/components/ChatBubble/ChatBubble.tsx +49 -22
  132. package/src/components/ChatInputs/ChatInputs.tsx +92 -43
  133. package/src/components/FilePreview/FilePreview.css +169 -140
  134. package/src/components/FilePreview/FilePreview.tsx +106 -14
  135. package/src/components/FilePreview/__snapshots__/FilePreview.test.tsx.snap +146 -29
  136. package/src/components/MediaWidget/LinkItemWidget.css +1 -0
  137. package/src/components/MediaWidget/MediaItemWidget.css +10 -0
  138. package/src/components/MediaWidget/MediaItemWidget.tsx +136 -118
  139. package/src/components/MediaWidget/MediaWidget.test.tsx +2 -1
  140. package/src/components/MediaWidget/MediaWidget.tsx +1 -1
  141. package/src/components/MemoriWidget/MemoriWidget.tsx +7 -19
  142. package/src/components/UploadButton/UploadButton.css +506 -27
  143. package/src/components/UploadButton/UploadButton.stories.tsx +122 -20
  144. package/src/components/UploadButton/UploadButton.test.tsx +1 -1
  145. package/src/components/UploadButton/UploadButton.tsx +282 -451
  146. package/src/components/UploadButton/UploadDocuments/UploadDocuments.tsx +352 -0
  147. package/src/components/UploadButton/UploadImages/UploadImages.tsx +417 -0
  148. package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +139 -13
  149. package/src/components/icons/Bug.tsx +81 -0
  150. package/src/components/icons/Document.tsx +50 -0
  151. package/src/components/icons/Image.tsx +37 -0
  152. package/src/components/icons/Preview.tsx +28 -22
  153. package/src/components/icons/Upload.tsx +33 -22
  154. package/src/components/layouts/HiddenChat.tsx +143 -7
  155. package/src/components/layouts/__snapshots__/HiddenChat.test.tsx.snap +1 -1
  156. package/src/components/layouts/hidden-chat.css +189 -119
  157. package/src/components/ui/Card.tsx +3 -0
  158. package/src/index.stories.tsx +19 -19
  159. package/src/locales/de.json +16 -0
  160. package/src/locales/en.json +24 -0
  161. package/src/locales/es.json +16 -0
  162. package/src/locales/fr.json +16 -0
  163. package/src/locales/it.json +22 -0
@@ -12,9 +12,10 @@ import FilePdf from '../icons/FilePdf';
12
12
  import FileExcel from '../icons/FileExcel';
13
13
  import FileWord from '../icons/FileWord';
14
14
  import { Transition } from '@headlessui/react';
15
+ import { stripHTML } from '../../helpers/utils';
15
16
 
16
17
  export interface Props {
17
- items: Medium[];
18
+ items: (Medium & { type?: string })[];
18
19
  sessionID?: string;
19
20
  tenantID?: string;
20
21
  translateTo?: string;
@@ -35,7 +36,7 @@ export const RenderMediaItem = ({
35
36
  customMediaRenderer,
36
37
  }: {
37
38
  isChild?: boolean;
38
- item: Medium;
39
+ item: Medium & { type: string };
39
40
  sessionID?: string;
40
41
  tenantID?: string;
41
42
  preview?: boolean;
@@ -44,6 +45,8 @@ export const RenderMediaItem = ({
44
45
  onClick?: (mediumID: string) => void;
45
46
  customMediaRenderer?: (mimeType: string) => JSX.Element | null;
46
47
  }) => {
48
+ const [modalOpen, setModalOpen] = useState(false);
49
+
47
50
  const url = getResourceUrl({
48
51
  resourceURI: item.url,
49
52
  sessionID,
@@ -58,6 +61,128 @@ export const RenderMediaItem = ({
58
61
  return customRenderer;
59
62
  }
60
63
 
64
+ const renderMediaContent = (item: Medium) => {
65
+ switch (item.mimeType) {
66
+ case 'image/jpeg':
67
+ case 'image/png':
68
+ case 'image/jpg':
69
+ case 'image/gif':
70
+ return isImageRGB ? (
71
+ <picture className="memori-media-item--figure">
72
+ <div
73
+ className="memori-media-item--rgb-item"
74
+ style={{
75
+ backgroundColor: item.url,
76
+ }}
77
+ />
78
+ {item.title && (
79
+ <figcaption className="memori-media-item--figure-caption">
80
+ {item.title}
81
+ </figcaption>
82
+ )}
83
+ </picture>
84
+ ) : (
85
+ <picture className="memori-media-item--figure">
86
+ {!preview && (
87
+ <source
88
+ srcSet={[url, item.url, item.content].join(', ')}
89
+ type={item.mimeType}
90
+ />
91
+ )}
92
+ <img
93
+ alt={item.title}
94
+ src="data:image/png;base64,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"
95
+ />
96
+ {item.title && (
97
+ <figcaption className="memori-media-item--figure-caption">
98
+ {item.title}
99
+ </figcaption>
100
+ )}
101
+ </picture>
102
+ );
103
+
104
+ case 'application/msword':
105
+ case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
106
+ return <FileWord className="memori-media-item--icon" />;
107
+
108
+ case 'application/vnd.ms-excel':
109
+ case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
110
+ return <FileExcel className="memori-media-item--icon" />;
111
+
112
+ case 'application/pdf':
113
+ return <FilePdf className="memori-media-item--icon" />;
114
+
115
+ case 'video/mp4':
116
+ case 'video/quicktime':
117
+ case 'video/avi':
118
+ case 'video/mpeg':
119
+ return (
120
+ <video
121
+ style={{ width: '100%', height: '100%' }}
122
+ controls
123
+ src={url}
124
+ title={item.title}
125
+ >
126
+ {item.mimeType === 'video/quicktime' && (
127
+ <source src={item.url} type="video/mp4" />
128
+ )}
129
+ <source src={item.url} type={item.mimeType} />
130
+ Your browser does not support this video format.
131
+ <br />
132
+ <a href={item.url} target="_blank" rel="noopener noreferrer">
133
+ Download the video
134
+ </a>
135
+ </video>
136
+ );
137
+
138
+ case 'audio/mpeg3':
139
+ case 'audio/wav':
140
+ case 'audio/mpeg':
141
+ return (
142
+ <audio style={{ width: '100%', height: '100%' }} controls src={url} />
143
+ );
144
+
145
+ case 'model/gltf-binary':
146
+ return (
147
+ <ModelViewer
148
+ src={url}
149
+ alt=""
150
+ poster="data:image/png;base64,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"
151
+ />
152
+ );
153
+
154
+ default:
155
+ return <File className="memori-media-item--icon" />;
156
+ }
157
+ };
158
+
159
+ if (!item.url && item?.type === 'document' && item.content) {
160
+ return (
161
+ <>
162
+ <a
163
+ className="memori-media-item--link"
164
+ href="#"
165
+ onClick={e => {
166
+ e.preventDefault();
167
+ setModalOpen(true);
168
+ }}
169
+ title={item.title}
170
+ >
171
+ <Card hoverable cover={renderMediaContent(item)} title={item.title} />
172
+ </a>
173
+
174
+ <Modal
175
+ open={modalOpen}
176
+ onClose={() => setModalOpen(false)}
177
+ title={item.title}
178
+ className="memori-media-item-preview--modal"
179
+ >
180
+ <pre>{stripHTML(item.content)}</pre>
181
+ </Modal>
182
+ </>
183
+ );
184
+ }
185
+
61
186
  const isImageRGB =
62
187
  item.url?.startsWith('rgb(') || item.url?.startsWith('rgba(');
63
188
 
@@ -70,21 +195,7 @@ export const RenderMediaItem = ({
70
195
  <Card
71
196
  hoverable
72
197
  className="memori-media-item--card memori-media-item--image"
73
- cover={
74
- <picture className="memori-media-item--figure">
75
- <div
76
- className="memori-media-item--rgb-item"
77
- style={{
78
- backgroundColor: item.url,
79
- }}
80
- />
81
- {item.title && (
82
- <figcaption className="memori-media-item--figure-caption">
83
- {item.title}
84
- </figcaption>
85
- )}
86
- </picture>
87
- }
198
+ cover={renderMediaContent(item)}
88
199
  />
89
200
  ) : (
90
201
  <a
@@ -106,65 +217,15 @@ export const RenderMediaItem = ({
106
217
  <Card
107
218
  hoverable
108
219
  className="memori-media-item--card memori-media-item--image"
109
- cover={
110
- <picture className="memori-media-item--figure">
111
- {!preview && (
112
- <source
113
- srcSet={[url, item.url, item.content].join(', ')}
114
- type={item.mimeType}
115
- />
116
- )}
117
- <img
118
- alt={item.title}
119
- src="data:image/png;base64,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"
120
- />
121
- {item.title && (
122
- <figcaption className="memori-media-item--figure-caption">
123
- {item.title}
124
- </figcaption>
125
- )}
126
- </picture>
127
- }
220
+ cover={renderMediaContent(item)}
128
221
  />
129
222
  </a>
130
223
  );
131
224
 
132
225
  case 'application/msword':
133
226
  case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
134
- return (
135
- <a
136
- className="memori-media-item--link"
137
- href={url}
138
- target="_blank"
139
- rel="noopener noreferrer"
140
- title={item.title}
141
- >
142
- <Card
143
- hoverable
144
- cover={<FileWord className="memori-media-item--icon" />}
145
- title={item.title}
146
- />
147
- </a>
148
- );
149
-
150
227
  case 'application/vnd.ms-excel':
151
228
  case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
152
- return (
153
- <a
154
- className="memori-media-item--link"
155
- href={url}
156
- target="_blank"
157
- rel="noopener noreferrer"
158
- title={item.title}
159
- >
160
- <Card
161
- hoverable
162
- cover={<FileExcel className="memori-media-item--icon" />}
163
- title={item.title}
164
- />
165
- </a>
166
- );
167
-
168
229
  case 'application/pdf':
169
230
  return (
170
231
  <a
@@ -174,11 +235,7 @@ export const RenderMediaItem = ({
174
235
  rel="noopener noreferrer"
175
236
  title={item.title}
176
237
  >
177
- <Card
178
- hoverable
179
- cover={<FilePdf className="memori-media-item--icon" />}
180
- title={item.title}
181
- />
238
+ <Card hoverable cover={renderMediaContent(item)} title={item.title} />
182
239
  </a>
183
240
  );
184
241
 
@@ -203,28 +260,7 @@ export const RenderMediaItem = ({
203
260
  rel="noopener noreferrer"
204
261
  title={item.title}
205
262
  >
206
- <Card
207
- hoverable
208
- cover={
209
- <video
210
- style={{ width: '100%', height: '100%' }}
211
- controls
212
- src={url}
213
- title={item.title}
214
- >
215
- {item.mimeType === 'video/quicktime' && (
216
- <source src={item.url} type="video/mp4" />
217
- )}
218
- <source src={item.url} type={item.mimeType} />
219
- Your browser does not support this video format.
220
- <br />
221
- <a href={item.url} target="_blank" rel="noopener noreferrer">
222
- Download the video
223
- </a>
224
- </video>
225
- }
226
- title={item.title}
227
- />
263
+ <Card hoverable cover={renderMediaContent(item)} title={item.title} />
228
264
  </a>
229
265
  );
230
266
 
@@ -239,28 +275,12 @@ export const RenderMediaItem = ({
239
275
  rel="noopener noreferrer"
240
276
  title={item.title}
241
277
  >
242
- <Card
243
- hoverable
244
- cover={
245
- <audio
246
- style={{ width: '100%', height: '100%' }}
247
- controls
248
- src={url}
249
- />
250
- }
251
- title={item.title}
252
- />
278
+ <Card hoverable cover={renderMediaContent(item)} title={item.title} />
253
279
  </a>
254
280
  );
255
281
 
256
282
  case 'model/gltf-binary':
257
- return (
258
- <ModelViewer
259
- src={url}
260
- alt=""
261
- poster="data:image/png;base64,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"
262
- />
263
- );
283
+ return <Card hoverable cover={renderMediaContent(item)} />;
264
284
 
265
285
  default:
266
286
  return (
@@ -271,11 +291,7 @@ export const RenderMediaItem = ({
271
291
  rel="noopener noreferrer"
272
292
  title={item.title}
273
293
  >
274
- <Card
275
- hoverable
276
- cover={<File className="memori-media-item--icon" />}
277
- title={item.title}
278
- />
294
+ <Card hoverable cover={renderMediaContent(item)} title={item.title} />
279
295
  </a>
280
296
  );
281
297
  }
@@ -373,6 +389,7 @@ const MediaItemWidget: React.FC<Props> = ({
373
389
  title: item.title,
374
390
  url: item.url,
375
391
  content: item.content,
392
+ type: 'document',
376
393
  }}
377
394
  customMediaRenderer={customMediaRenderer}
378
395
  />
@@ -422,6 +439,7 @@ const MediaItemWidget: React.FC<Props> = ({
422
439
  title: openModalMedium.title,
423
440
  url: openModalMedium.url,
424
441
  content: openModalMedium.content,
442
+ type: 'document',
425
443
  }}
426
444
  customMediaRenderer={customMediaRenderer}
427
445
  />
@@ -7,11 +7,12 @@ import { render } from '@testing-library/react';
7
7
  import { medium } from '../../mocks/data';
8
8
  import MediaWidget from './MediaWidget';
9
9
 
10
- const linkMedium: Medium = {
10
+ const linkMedium: Medium & { type?: string } = {
11
11
  mediumID: '95226d7e-7bae-465e-8b80-995587bb5971',
12
12
  mimeType: 'text/html',
13
13
  title: 'Memori Srl',
14
14
  url: 'https://memori.ai/en',
15
+ type: 'document',
15
16
  };
16
17
 
17
18
  const hint: TranslatedHint = {
@@ -13,7 +13,7 @@ import { useTranslation } from 'react-i18next';
13
13
  export interface Props {
14
14
  hints?: TranslatedHint[];
15
15
  links?: Medium[];
16
- media?: Medium[];
16
+ media?: (Medium & { type?: string })[];
17
17
  simulateUserPrompt?: (item: string, translatedItem?: string) => void;
18
18
  sessionID?: string;
19
19
  baseUrl?: string;
@@ -414,6 +414,7 @@ export interface Props {
414
414
  useMathFormatting?: boolean;
415
415
  autoStart?: boolean;
416
416
  applyVarsToRoot?: boolean;
417
+ showFunctionCache?: boolean;
417
418
  }
418
419
 
419
420
  const MemoriWidget = ({
@@ -465,6 +466,7 @@ const MemoriWidget = ({
465
466
  useMathFormatting = false,
466
467
  autoStart = false,
467
468
  applyVarsToRoot = false,
469
+ showFunctionCache = false,
468
470
  }: Props) => {
469
471
  const { t, i18n } = useTranslation();
470
472
 
@@ -808,8 +810,9 @@ const MemoriWidget = ({
808
810
  msg = translation.text;
809
811
  }
810
812
 
811
- if (media?.length && media[0]?.properties?.isAttachedFile) {
812
- msg = msg + ' ' + media[0].content;
813
+ const findMediaDocument = media?.find(m => !m.mediumID && m.properties?.isAttachedFile);
814
+ if (findMediaDocument) {
815
+ msg = msg + ' ' + findMediaDocument.content;
813
816
  }
814
817
 
815
818
  const { currentState, ...response } = await postTextEnteredEvent({
@@ -3535,33 +3538,18 @@ const MemoriWidget = ({
3535
3538
  setAttachmentsMenuOpen,
3536
3539
  showInputs,
3537
3540
  showMicrophone: !!AZURE_COGNITIVE_SERVICES_TTS_KEY,
3541
+ showFunctionCache,
3538
3542
  userMessage,
3539
3543
  onChangeUserMessage,
3540
3544
  sendMessage: (
3541
3545
  msg: string,
3542
- media?: {
3543
- mediumID: string;
3544
- mimeType: string;
3545
- content: string;
3546
- title?: string;
3547
- properties?: { [key: string]: any };
3548
- }
3546
+ media?: (Medium & { type: string })[]
3549
3547
  ) => {
3550
3548
  stopAudio();
3551
3549
  stopListening();
3552
3550
  sendMessage(
3553
3551
  msg,
3554
3552
  media
3555
- ? [
3556
- {
3557
- mediumID: media.mediumID,
3558
- mimeType: media.mimeType,
3559
- content: media.content,
3560
- title: media.title,
3561
- properties: media.properties,
3562
- },
3563
- ]
3564
- : undefined
3565
3553
  );
3566
3554
  setUserMessage('');
3567
3555
  resetTranscript();