@memori.ai/memori-react 9.0.0-alpha.23 → 9.0.0-alpha.25

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 (285) hide show
  1. package/CHANGELOG.md +300 -1100
  2. package/dist/components/AgeVerificationModal/AgeVerificationModal.js +1 -3
  3. package/dist/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
  4. package/dist/components/Auth/Auth.js +1 -3
  5. package/dist/components/Auth/Auth.js.map +1 -1
  6. package/dist/components/Chat/Chat.css +10 -1
  7. package/dist/components/Chat/Chat.js +1 -3
  8. package/dist/components/Chat/Chat.js.map +1 -1
  9. package/dist/components/ChatBubble/ChatBubble.css +103 -5
  10. package/dist/components/ChatBubble/ChatBubble.js +48 -8
  11. package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
  12. package/dist/components/ChatHistoryDrawer/ChatHistory.js +1 -3
  13. package/dist/components/ChatHistoryDrawer/ChatHistory.js.map +1 -1
  14. package/dist/components/ChatHistoryDrawer/ChatResumeDrawer.css +33 -10
  15. package/dist/components/ChatHistoryDrawer/ChatResumeDrawer.js +2 -4
  16. package/dist/components/ChatHistoryDrawer/ChatResumeDrawer.js.map +1 -1
  17. package/dist/components/ChatInputs/ChatInputs.css +17 -52
  18. package/dist/components/ChatInputs/ChatInputs.js +1 -3
  19. package/dist/components/ChatInputs/ChatInputs.js.map +1 -1
  20. package/dist/components/ContentPreviewModal/ContentPreviewModal.css +3 -3
  21. package/dist/components/ContentPreviewModal/ContentPreviewModal.js +1 -3
  22. package/dist/components/ContentPreviewModal/ContentPreviewModal.js.map +1 -1
  23. package/dist/components/DateSelector/DateSelector.css +66 -3
  24. package/dist/components/DateSelector/DateSelector.js +5 -1
  25. package/dist/components/DateSelector/DateSelector.js.map +1 -1
  26. package/dist/components/ExpertsDrawer/ExpertsDrawer.js +1 -3
  27. package/dist/components/ExpertsDrawer/ExpertsDrawer.js.map +1 -1
  28. package/dist/components/FilePreview/FilePreview.css +94 -220
  29. package/dist/components/FilePreview/FilePreview.js +25 -71
  30. package/dist/components/FilePreview/FilePreview.js.map +1 -1
  31. package/dist/components/IconButton/IconButton.css +2 -11
  32. package/dist/components/KnownFacts/KnownFacts.css +3 -4
  33. package/dist/components/KnownFacts/KnownFacts.js +3 -5
  34. package/dist/components/KnownFacts/KnownFacts.js.map +1 -1
  35. package/dist/components/LoginDrawer/LoginDrawer.css +3 -7
  36. package/dist/components/LoginDrawer/LoginDrawer.js +51 -9
  37. package/dist/components/LoginDrawer/LoginDrawer.js.map +1 -1
  38. package/dist/components/MediaWidget/MediaItemWidget.css +77 -57
  39. package/dist/components/MediaWidget/MediaItemWidget.js +4 -4
  40. package/dist/components/MediaWidget/MediaItemWidget.js.map +1 -1
  41. package/dist/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +1 -1
  42. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +2 -5
  43. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  44. package/dist/components/MemoriWidget/MemoriWidget.css +0 -55
  45. package/dist/components/MemoriWidget/MemoriWidget.js +115 -117
  46. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  47. package/dist/components/MobileSessionPanel/MobileSessionPanel.css +20 -0
  48. package/dist/components/MobileSessionPanel/MobileSessionPanel.js +77 -117
  49. package/dist/components/MobileSessionPanel/MobileSessionPanel.js.map +1 -1
  50. package/dist/components/PositionPopover/PositionPopover.css +1 -1
  51. package/dist/components/SettingsDrawer/SettingsDrawer.js +1 -3
  52. package/dist/components/SettingsDrawer/SettingsDrawer.js.map +1 -1
  53. package/dist/components/StartPanel/StartPanel.css +12 -1
  54. package/dist/components/StartPanel/StartPanel.js +30 -7
  55. package/dist/components/StartPanel/StartPanel.js.map +1 -1
  56. package/dist/components/UploadButton/UploadButton.css +7 -7
  57. package/dist/components/UploadButton/UploadButton.js +3 -0
  58. package/dist/components/UploadButton/UploadButton.js.map +1 -1
  59. package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js +15 -5
  60. package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
  61. package/dist/components/UploadButton/UploadImages/UploadImages.js +1 -3
  62. package/dist/components/UploadButton/UploadImages/UploadImages.js.map +1 -1
  63. package/dist/components/WhyThisAnswer/WhyThisAnswer.js +1 -3
  64. package/dist/components/WhyThisAnswer/WhyThisAnswer.js.map +1 -1
  65. package/dist/components/layouts/HiddenChat.js +9 -1
  66. package/dist/components/layouts/HiddenChat.js.map +1 -1
  67. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js +84 -5
  68. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
  69. package/dist/components/layouts/WebsiteAssistant/website-assistant.css +36 -12
  70. package/dist/components/layouts/fullpage.css +1 -0
  71. package/dist/components/layouts/hidden-chat.css +29 -5
  72. package/dist/helpers/constants.d.ts +3 -2
  73. package/dist/helpers/constants.js +19 -20
  74. package/dist/helpers/constants.js.map +1 -1
  75. package/dist/helpers/error.js +2 -1
  76. package/dist/helpers/error.js.map +1 -1
  77. package/dist/helpers/positionPopover.d.ts +1 -0
  78. package/dist/helpers/positionPopover.js +7 -0
  79. package/dist/helpers/positionPopover.js.map +1 -1
  80. package/dist/helpers/usePressTooltip.d.ts +6 -1
  81. package/dist/helpers/usePressTooltip.js +16 -1
  82. package/dist/helpers/usePressTooltip.js.map +1 -1
  83. package/dist/helpers/utils.d.ts +2 -1
  84. package/dist/helpers/utils.js +7 -1
  85. package/dist/helpers/utils.js.map +1 -1
  86. package/dist/locales/de.json +8 -2
  87. package/dist/locales/en.json +6 -3
  88. package/dist/locales/es.json +6 -3
  89. package/dist/locales/fr.json +6 -3
  90. package/dist/locales/it.json +6 -3
  91. package/dist/styles.css +1 -1
  92. package/dist/version.d.ts +1 -1
  93. package/dist/version.js +1 -1
  94. package/esm/components/AgeVerificationModal/AgeVerificationModal.js +1 -3
  95. package/esm/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
  96. package/esm/components/Auth/Auth.js +1 -3
  97. package/esm/components/Auth/Auth.js.map +1 -1
  98. package/esm/components/Chat/Chat.css +10 -1
  99. package/esm/components/Chat/Chat.js +1 -3
  100. package/esm/components/Chat/Chat.js.map +1 -1
  101. package/esm/components/ChatBubble/ChatBubble.css +103 -5
  102. package/esm/components/ChatBubble/ChatBubble.js +48 -8
  103. package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
  104. package/esm/components/ChatHistoryDrawer/ChatHistory.js +1 -3
  105. package/esm/components/ChatHistoryDrawer/ChatHistory.js.map +1 -1
  106. package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.css +33 -10
  107. package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.js +2 -4
  108. package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.js.map +1 -1
  109. package/esm/components/ChatInputs/ChatInputs.css +17 -52
  110. package/esm/components/ChatInputs/ChatInputs.js +1 -3
  111. package/esm/components/ChatInputs/ChatInputs.js.map +1 -1
  112. package/esm/components/ContentPreviewModal/ContentPreviewModal.css +3 -3
  113. package/esm/components/ContentPreviewModal/ContentPreviewModal.js +1 -3
  114. package/esm/components/ContentPreviewModal/ContentPreviewModal.js.map +1 -1
  115. package/esm/components/DateSelector/DateSelector.css +66 -3
  116. package/esm/components/DateSelector/DateSelector.js +5 -1
  117. package/esm/components/DateSelector/DateSelector.js.map +1 -1
  118. package/esm/components/ExpertsDrawer/ExpertsDrawer.js +1 -3
  119. package/esm/components/ExpertsDrawer/ExpertsDrawer.js.map +1 -1
  120. package/esm/components/FilePreview/FilePreview.css +94 -220
  121. package/esm/components/FilePreview/FilePreview.js +25 -71
  122. package/esm/components/FilePreview/FilePreview.js.map +1 -1
  123. package/esm/components/IconButton/IconButton.css +2 -11
  124. package/esm/components/KnownFacts/KnownFacts.css +3 -4
  125. package/esm/components/KnownFacts/KnownFacts.js +3 -5
  126. package/esm/components/KnownFacts/KnownFacts.js.map +1 -1
  127. package/esm/components/LoginDrawer/LoginDrawer.css +3 -7
  128. package/esm/components/LoginDrawer/LoginDrawer.js +51 -9
  129. package/esm/components/LoginDrawer/LoginDrawer.js.map +1 -1
  130. package/esm/components/MediaWidget/MediaItemWidget.css +77 -57
  131. package/esm/components/MediaWidget/MediaItemWidget.js +5 -5
  132. package/esm/components/MediaWidget/MediaItemWidget.js.map +1 -1
  133. package/esm/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +1 -1
  134. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +2 -5
  135. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  136. package/esm/components/MemoriWidget/MemoriWidget.css +0 -55
  137. package/esm/components/MemoriWidget/MemoriWidget.js +115 -117
  138. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  139. package/esm/components/MobileSessionPanel/MobileSessionPanel.css +20 -0
  140. package/esm/components/MobileSessionPanel/MobileSessionPanel.js +78 -118
  141. package/esm/components/MobileSessionPanel/MobileSessionPanel.js.map +1 -1
  142. package/esm/components/PositionPopover/PositionPopover.css +1 -1
  143. package/esm/components/SettingsDrawer/SettingsDrawer.js +1 -3
  144. package/esm/components/SettingsDrawer/SettingsDrawer.js.map +1 -1
  145. package/esm/components/StartPanel/StartPanel.css +12 -1
  146. package/esm/components/StartPanel/StartPanel.js +30 -7
  147. package/esm/components/StartPanel/StartPanel.js.map +1 -1
  148. package/esm/components/UploadButton/UploadButton.css +7 -7
  149. package/esm/components/UploadButton/UploadButton.js +4 -1
  150. package/esm/components/UploadButton/UploadButton.js.map +1 -1
  151. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js +17 -7
  152. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
  153. package/esm/components/UploadButton/UploadImages/UploadImages.js +1 -3
  154. package/esm/components/UploadButton/UploadImages/UploadImages.js.map +1 -1
  155. package/esm/components/WhyThisAnswer/WhyThisAnswer.js +1 -3
  156. package/esm/components/WhyThisAnswer/WhyThisAnswer.js.map +1 -1
  157. package/esm/components/layouts/HiddenChat.js +9 -1
  158. package/esm/components/layouts/HiddenChat.js.map +1 -1
  159. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js +85 -6
  160. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
  161. package/esm/components/layouts/WebsiteAssistant/website-assistant.css +36 -12
  162. package/esm/components/layouts/fullpage.css +1 -0
  163. package/esm/components/layouts/hidden-chat.css +29 -5
  164. package/esm/helpers/constants.d.ts +3 -2
  165. package/esm/helpers/constants.js +18 -19
  166. package/esm/helpers/constants.js.map +1 -1
  167. package/esm/helpers/error.js +2 -1
  168. package/esm/helpers/error.js.map +1 -1
  169. package/esm/helpers/positionPopover.d.ts +1 -0
  170. package/esm/helpers/positionPopover.js +6 -0
  171. package/esm/helpers/positionPopover.js.map +1 -1
  172. package/esm/helpers/usePressTooltip.d.ts +6 -1
  173. package/esm/helpers/usePressTooltip.js +17 -2
  174. package/esm/helpers/usePressTooltip.js.map +1 -1
  175. package/esm/helpers/utils.d.ts +2 -1
  176. package/esm/helpers/utils.js +6 -1
  177. package/esm/helpers/utils.js.map +1 -1
  178. package/esm/locales/de.json +8 -2
  179. package/esm/locales/en.json +6 -3
  180. package/esm/locales/es.json +6 -3
  181. package/esm/locales/fr.json +6 -3
  182. package/esm/locales/it.json +6 -3
  183. package/esm/styles.css +1 -1
  184. package/esm/version.d.ts +1 -1
  185. package/esm/version.js +1 -1
  186. package/package.json +4 -46
  187. package/src/components/AgeVerificationModal/AgeVerificationModal.tsx +0 -3
  188. package/src/components/Auth/Auth.tsx +0 -3
  189. package/src/components/Auth/__snapshots__/Auth.test.tsx.snap +1 -0
  190. package/src/components/BlockedMemoriBadge/__snapshots__/BlockedMemoriBadge.test.tsx.snap +5 -0
  191. package/src/components/Chat/Chat.css +10 -1
  192. package/src/components/Chat/Chat.tsx +0 -3
  193. package/src/components/Chat/__snapshots__/Chat.test.tsx.snap +1735 -1765
  194. package/src/components/ChatBubble/ChatBubble.css +103 -5
  195. package/src/components/ChatBubble/ChatBubble.test.tsx +33 -0
  196. package/src/components/ChatBubble/ChatBubble.tsx +524 -273
  197. package/src/components/ChatBubble/__snapshots__/ChatBubble.test.tsx.snap +655 -684
  198. package/src/components/ChatHistoryDrawer/ChatHistory.tsx +0 -3
  199. package/src/components/ChatHistoryDrawer/ChatResumeDrawer.css +33 -10
  200. package/src/components/ChatHistoryDrawer/ChatResumeDrawer.tsx +3 -6
  201. package/src/components/ChatInputs/ChatInputs.css +17 -52
  202. package/src/components/ChatInputs/ChatInputs.tsx +2 -4
  203. package/src/components/CompletionProviderStatus/__snapshots__/CompletionProviderStatus.test.tsx.snap +3 -0
  204. package/src/components/ContentPreviewModal/ContentPreviewModal.css +3 -3
  205. package/src/components/ContentPreviewModal/ContentPreviewModal.tsx +0 -3
  206. package/src/components/DateSelector/DateSelector.css +66 -3
  207. package/src/components/DateSelector/DateSelector.test.tsx +33 -4
  208. package/src/components/DateSelector/DateSelector.tsx +37 -11
  209. package/src/components/ExpertsDrawer/ExpertsDrawer.tsx +0 -3
  210. package/src/components/FeedbackButtons/__snapshots__/FeedbackButtons.test.tsx.snap +2 -1
  211. package/src/components/FilePreview/FilePreview.css +94 -220
  212. package/src/components/FilePreview/FilePreview.tsx +77 -124
  213. package/src/components/FilePreview/__snapshots__/FilePreview.test.tsx.snap +33 -81
  214. package/src/components/Header/ChatConsumptionDropdown.test.tsx +53 -86
  215. package/src/components/Header/__snapshots__/Header.test.tsx.snap +60 -44
  216. package/src/components/IconButton/IconButton.css +2 -11
  217. package/src/components/KnownFacts/KnownFacts.css +3 -4
  218. package/src/components/KnownFacts/KnownFacts.tsx +0 -5
  219. package/src/components/KnownFacts/__snapshots__/KnownFacts.test.tsx.snap +2 -6
  220. package/src/components/LoginDrawer/LoginDrawer.css +3 -7
  221. package/src/components/LoginDrawer/LoginDrawer.tsx +101 -54
  222. package/src/components/LoginDrawer/__snapshots__/LoginDrawer.test.tsx.snap +11 -33
  223. package/src/components/MediaWidget/MediaItemWidget.css +77 -57
  224. package/src/components/MediaWidget/MediaItemWidget.test.tsx +33 -0
  225. package/src/components/MediaWidget/MediaItemWidget.tsx +6 -12
  226. package/src/components/MediaWidget/__snapshots__/MediaItemWidget.test.tsx.snap +2 -0
  227. package/src/components/MediaWidget/__snapshots__/MediaWidget.test.tsx.snap +1 -1
  228. package/src/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +1 -1
  229. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +0 -5
  230. package/src/components/MemoriWidget/MemoriUIProvider.contract.test.tsx +25 -7
  231. package/src/components/MemoriWidget/MemoriWidget.css +0 -55
  232. package/src/components/MemoriWidget/MemoriWidget.tsx +18 -12
  233. package/src/components/MobileSessionPanel/MobileSessionPanel.css +20 -0
  234. package/src/components/MobileSessionPanel/MobileSessionPanel.tsx +29 -68
  235. package/src/components/PositionPopover/PositionPopover.css +1 -1
  236. package/src/components/SettingsDrawer/SettingsDrawer.tsx +0 -3
  237. package/src/components/ShareButton/__snapshots__/ShareButton.test.tsx.snap +9 -9
  238. package/src/components/Snippet/__snapshots__/Snippet.test.tsx.snap +8 -0
  239. package/src/components/StartPanel/StartPanel.css +12 -1
  240. package/src/components/StartPanel/StartPanel.test.tsx +57 -0
  241. package/src/components/StartPanel/StartPanel.tsx +41 -4
  242. package/src/components/StartPanel/__snapshots__/StartPanel.test.tsx.snap +41 -6
  243. package/src/components/UploadButton/UploadButton.css +7 -7
  244. package/src/components/UploadButton/UploadButton.tsx +4 -0
  245. package/src/components/UploadButton/UploadDocuments/UploadDocuments.tsx +21 -8
  246. package/src/components/UploadButton/UploadImages/UploadImages.tsx +0 -3
  247. package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +10 -12
  248. package/src/components/WhyThisAnswer/WhyThisAnswer.tsx +0 -3
  249. package/src/components/WhyThisAnswer/__snapshots__/WhyThisAnswer.test.tsx.snap +3 -9
  250. package/src/components/layouts/HiddenChat.tsx +9 -1
  251. package/src/components/layouts/WebsiteAssistant/WebsiteAssistant.tsx +103 -6
  252. package/src/components/layouts/WebsiteAssistant/__snapshots__/WebsiteAssistant.test.tsx.snap +63 -57
  253. package/src/components/layouts/WebsiteAssistant/website-assistant.css +36 -12
  254. package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +7 -4
  255. package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +12 -8
  256. package/src/components/layouts/__snapshots__/HiddenChat.test.tsx.snap +7 -4
  257. package/src/components/layouts/__snapshots__/Totem.test.tsx.snap +10 -5
  258. package/src/components/layouts/__snapshots__/ZoomedFullBody.test.tsx.snap +6 -4
  259. package/src/components/layouts/fullpage.css +1 -0
  260. package/src/components/layouts/hidden-chat.css +29 -5
  261. package/src/components/layouts/layouts.stories.tsx +2 -2
  262. package/src/helpers/constants.ts +21 -20
  263. package/src/helpers/error.ts +2 -1
  264. package/src/helpers/positionPopover.test.ts +15 -0
  265. package/src/helpers/positionPopover.ts +16 -0
  266. package/src/helpers/usePressTooltip.test.ts +30 -0
  267. package/src/helpers/usePressTooltip.ts +31 -1
  268. package/src/helpers/utils.test.ts +14 -4
  269. package/src/helpers/utils.ts +6 -1
  270. package/src/index.tsx +1 -1
  271. package/src/locales/de.json +8 -2
  272. package/src/locales/en.json +6 -3
  273. package/src/locales/es.json +6 -3
  274. package/src/locales/fr.json +6 -3
  275. package/src/locales/it.json +6 -3
  276. package/src/styles.brandTokens.test.js +52 -0
  277. package/src/styles.css +27 -2
  278. package/src/version.ts +1 -1
  279. package/dist/context/widgetSurfaceContext.d.ts +0 -3
  280. package/dist/context/widgetSurfaceContext.js +0 -11
  281. package/dist/context/widgetSurfaceContext.js.map +0 -1
  282. package/esm/context/widgetSurfaceContext.d.ts +0 -3
  283. package/esm/context/widgetSurfaceContext.js +0 -7
  284. package/esm/context/widgetSurfaceContext.js.map +0 -1
  285. package/src/context/widgetSurfaceContext.tsx +0 -14
@@ -1,4 +1,4 @@
1
- /* Updated FilePreview Styles */
1
+ /* FilePreview — matches chat DocumentCard / image media styles */
2
2
 
3
3
  .memori--preview-container {
4
4
  position: relative;
@@ -7,10 +7,8 @@
7
7
  width: 100%;
8
8
  min-width: 0;
9
9
  max-width: 100%;
10
- border-radius: 0.5rem;
11
- animation: slide-in 0.3s ease;
12
- background: var(--memori-main-background);
13
- transition: all 0.3s ease;
10
+ border-radius: var(--memori-radius-box);
11
+ background: transparent;
14
12
  }
15
13
 
16
14
  .memori--preview-list {
@@ -40,9 +38,10 @@
40
38
  right: 8px;
41
39
  padding: calc(var(--memori-spacing-xs) / 4) calc(var(--memori-spacing-xs) + 2px);
42
40
  border-radius: var(--memori-radius-box);
43
- color: var(--memori-text-color);
41
+ color: color-mix(in srgb, var(--memori-text-color) 72%, transparent);
44
42
  font-size: 12px;
45
- font-weight: bold;
43
+ font-weight: 550;
44
+ /* font-weight: bold; */
46
45
  }
47
46
 
48
47
  .memori--document-count-full {
@@ -53,161 +52,91 @@
53
52
  padding-right: 2.75rem;
54
53
  }
55
54
 
56
- .memori--preview-container.slide-down {
57
- animation: slide-down 0.3s ease;
58
- }
59
-
60
- /* Responsive adjustments for file preview */
61
- @media (max-width: 768px) {
62
- .memori--absolute-preview {
63
- max-height: 150px;
64
- }
65
-
66
- .memori--preview-container {
67
- padding: var(--memori-spacing-sm);
68
- margin-bottom: var(--memori-spacing-sm);
69
- }
70
-
71
- .memori--preview-filename {
72
- max-width: 150px;
73
- font-size: 12px;
74
- }
75
-
76
- /* Increase card size for easier interaction */
77
- .memori--preview-item {
78
- min-width: 140px;
79
- min-height: 60px;
80
- padding: calc(var(--memori-spacing-sm) + var(--memori-spacing-xs));
81
- }
82
-
83
- .memori--preview-icon {
84
- width: 24px;
85
- height: 24px;
86
- }
87
-
88
- .memori--preview-thumbnail {
89
- min-width: 50px;
90
- min-height: 50px;
91
- }
92
-
93
- .memori--preview-thumbnail img {
94
- width: 50px;
95
- height: 50px;
96
- object-fit: cover;
97
- }
98
- }
99
-
100
- @media (max-width: 480px) {
101
- .memori--absolute-preview {
102
- max-height: 120px;
103
- }
104
-
105
- .memori--preview-container {
106
- padding: calc(var(--memori-spacing-xs) + 2px);
107
- margin-bottom: var(--memori-spacing-sm);
108
- }
109
-
110
- .memori--preview-filename {
111
- max-width: 100px;
112
- font-size: 11px;
113
- }
114
-
115
- /* Make remove button always visible on mobile */
116
- .memori--remove-button {
117
- opacity: 1 !important;
118
- transform: scale(1) !important;
119
- }
120
-
121
- /* Increase card size for easier interaction on small screens */
122
- .memori--preview-item {
123
- min-width: 160px;
124
- min-height: 70px;
125
- padding: calc(var(--memori-spacing-sm) + var(--memori-spacing-xs) + 2px);
126
- }
127
-
128
- .memori--preview-icon {
129
- width: 28px;
130
- height: 28px;
131
- }
132
-
133
- .memori--preview-thumbnail {
134
- min-width: 60px;
135
- min-height: 60px;
136
- }
137
-
138
- .memori--preview-thumbnail img {
139
- width: 60px;
140
- height: 60px;
141
- object-fit: cover;
142
- }
143
- }
144
-
145
- .memori--message-preview {
146
- max-width: 100%;
147
- margin: calc(var(--memori-spacing-sm) + var(--memori-spacing-xs)) 0;
55
+ .memori--preview-retention-notice {
56
+ display: block;
57
+ margin-top: 8px;
58
+ margin-left: 8px;
59
+ color: color-mix(in srgb, var(--memori-text-color) 52%, transparent);
60
+ font-size: var(--memori-text-size-xs);
148
61
  }
149
62
 
150
63
  .memori--preview-item {
151
64
  position: relative;
152
65
  display: flex;
153
- max-width: fit-content;
66
+ width: 120px;
67
+ height: 120px;
154
68
  flex-shrink: 0;
155
- align-items: center;
156
- padding: var(--memori-spacing-sm) var(--memori-spacing-md);
157
- border-radius: 0.5rem;
158
- animation: slide-in 0.3s ease;
159
- background-color: var(--memori-secondary-background);
160
- gap: var(--memori-spacing-sm);
161
- transition: all 0.2s ease;
69
+ align-items: stretch;
162
70
  }
163
71
 
164
72
  .memori--preview-item-trigger {
165
- display: flex;
73
+ display: block;
74
+ overflow: hidden;
75
+ width: 100%;
166
76
  min-width: 0;
167
- flex: 1;
168
- align-items: center;
77
+ height: 100%;
169
78
  padding: 0;
170
79
  border: 0;
171
80
  background: transparent;
172
81
  color: inherit;
173
82
  cursor: pointer;
174
83
  font: inherit;
175
- gap: var(--memori-spacing-sm);
176
84
  text-align: left;
177
85
  }
178
86
 
179
- .memori--preview-item:hover {
180
- background-color: var(--memori-secondary-background);
87
+ .memori--preview-item--document .memori--preview-item-trigger {
88
+ width: 100%;
89
+ min-width: 0;
90
+ max-width: none;
181
91
  }
182
92
 
183
- .memori--preview-icon {
184
- width: 20px;
185
- height: 20px;
186
- flex-shrink: 0;
187
- color: var(--memori-text-color);
188
- fill: #fff;
93
+ .memori--preview-item--document .memori-media-item--document {
94
+ width: 120px;
95
+ min-width: 120px;
96
+ max-width: 120px;
97
+ height: 120px;
98
+ min-height: 120px;
99
+ box-sizing: border-box;
100
+ /* background: transparent; */
189
101
  }
190
102
 
191
- .memori--preview-thumbnail {
103
+ .memori--preview-item--skeleton .memori-media-item--document {
104
+ width: 120px;
105
+ min-width: 120px;
106
+ max-width: 120px;
107
+ height: 120px;
108
+ min-height: 120px;
109
+ /* background: transparent; */
110
+ }
111
+
112
+ .memori--preview-item--document .memori-media-item--document:hover {
113
+ box-shadow: none;
114
+ }
115
+
116
+ .memori--preview-item--image .memori--preview-thumbnail {
192
117
  display: flex;
193
118
  overflow: hidden;
119
+ width: 120px;
120
+ height: 120px;
194
121
  flex-shrink: 0;
195
122
  align-items: center;
196
123
  justify-content: center;
197
- border-radius: 0.5rem;
198
- background-color: white;
124
+ border: 1px solid var(--memori-border-color);
125
+ border-radius: var(--memori-radius-box);
126
+ background: transparent;
199
127
  }
200
128
 
201
- .memori--preview-thumbnail img {
202
- width: 40px;
203
- height: 40px;
204
- border-radius: 0.5rem;
129
+ .memori--preview-item--image .memori--preview-thumbnail img {
130
+ width: 100%;
131
+ height: 100%;
205
132
  object-fit: cover;
206
133
  }
207
134
 
208
135
  .memori--preview-file-info {
209
136
  display: flex;
210
137
  overflow: hidden;
138
+ min-width: 0;
139
+ flex: 1;
211
140
  flex-direction: column;
212
141
  }
213
142
 
@@ -218,22 +147,6 @@
218
147
  white-space: nowrap;
219
148
  }
220
149
 
221
- .memori--preview-filename {
222
- overflow: hidden;
223
- max-width: 100px;
224
- color: var(--memori-text-color);
225
- font-size: var(--memori-text-size-small);
226
- font-weight: var(--memori-text-weight-medium);
227
- text-overflow: ellipsis;
228
- white-space: nowrap;
229
- }
230
-
231
- .memori--preview-filetype {
232
- margin-top: calc(var(--memori-spacing-xs) / 2);
233
- color: var(--memori-text-color);
234
- font-size: 12px;
235
- }
236
-
237
150
  .memori--modal-title-preview {
238
151
  margin-top: 12px;
239
152
  margin-bottom: 12px;
@@ -243,38 +156,45 @@
243
156
 
244
157
  .memori--remove-button {
245
158
  position: absolute;
246
- top: -6px;
247
- right: -6px;
248
- width: 24px !important;
249
- height: 24px !important;
250
- min-height: 24px !important;
251
- padding: 4px;
252
- border: none;
159
+ z-index: 2;
160
+ top: -8px;
161
+ right: -8px;
162
+ width: 28px !important;
163
+ height: 28px !important;
164
+ min-height: 28px !important;
165
+ padding: 0 !important;
166
+ border: 1px solid var(--memori-border-color) !important;
253
167
  border-radius: 50%;
254
- border-top-color: currentcolor;
255
- border-right-color: currentcolor;
256
- border-bottom-color: currentcolor;
257
- border-left-color: currentcolor;
258
- background-color: #e03131;
259
- color: white;
168
+ background: var(--memori-main-background) !important;
169
+ box-shadow: none !important;
170
+ color: var(--memori-text-color) !important;
260
171
  cursor: pointer;
261
172
  opacity: 0;
262
- transform: scale(0.75);
263
- transition: all 0.2s ease;
173
+ pointer-events: none;
174
+ transition: none;
264
175
  }
265
176
 
266
- .memori--remove-button:hover {
267
- background-color: #c92a2a;
177
+ .memori--remove-button:hover,
178
+ .memori--remove-button:focus-visible {
179
+ background: var(--memori-secondary-background) !important;
268
180
  }
269
181
 
270
- /* Show remove button only when user hovers the preview item */
271
- .memori--preview-item:hover .memori--remove-button {
182
+ .memori--preview-item:hover .memori--remove-button,
183
+ .memori--preview-item:focus-within .memori--remove-button {
272
184
  opacity: 1;
185
+ pointer-events: auto;
273
186
  }
274
187
 
275
- .memori--remove-icon {
276
- width: 12px;
277
- height: 12px;
188
+ .memori--remove-button svg {
189
+ width: 14px;
190
+ height: 14px;
191
+ }
192
+
193
+ @media (max-width: 480px) {
194
+ .memori--remove-button {
195
+ opacity: 1;
196
+ pointer-events: auto;
197
+ }
278
198
  }
279
199
 
280
200
  .memori--modal-preview-file {
@@ -285,25 +205,19 @@
285
205
 
286
206
  .memori--preview-content {
287
207
  padding: var(--memori-spacing-md);
288
- border-radius: 0.5rem;
289
- /* background-color: #f8f9fa; */
208
+ border-radius: var(--memori-radius-box);
290
209
  font-family: monospace;
291
210
  font-size: var(--memori-text-size-small);
292
211
  line-height: var(--memori-text-line-normal);
293
212
  }
294
213
 
295
- /* Skeleton loading card */
296
214
  .memori--preview-item--skeleton {
297
- min-width: 140px;
215
+ width: 120px;
216
+ height: 120px;
298
217
  cursor: default;
299
218
  pointer-events: none;
300
219
  }
301
220
 
302
- .memori--preview-item--skeleton:hover {
303
- background-color: #f8f9fa;
304
- transform: none;
305
- }
306
-
307
221
  .memori--skeleton-icon {
308
222
  width: 20px;
309
223
  height: 20px;
@@ -336,60 +250,20 @@
336
250
  0% {
337
251
  background-position: 200% 0;
338
252
  }
253
+
339
254
  100% {
340
255
  background-position: -200% 0;
341
256
  }
342
257
  }
343
258
 
344
- @keyframes fadeIn {
345
- from {
346
- opacity: 0;
347
- }
348
- to {
349
- opacity: 1;
350
- }
351
- }
352
-
353
- @keyframes scaleIn {
354
- from {
355
- opacity: 0;
356
- transform: scale(0.95);
357
- }
358
- to {
359
- opacity: 1;
360
- transform: scale(1);
361
- }
362
- }
363
-
364
- @keyframes slide-up {
365
- from {
366
- opacity: 0;
367
- transform: translateY(10px);
368
- }
369
- to {
370
- opacity: 1;
371
- transform: translateY(0);
372
- }
373
- }
374
-
375
- @keyframes slide-in {
376
- from {
377
- opacity: 0;
378
- transform: translateY(-10px);
379
- }
380
- to {
381
- opacity: 1;
382
- transform: translateY(0);
259
+ @media (max-width: 768px) {
260
+ .memori--preview-container {
261
+ margin-bottom: var(--memori-spacing-sm);
383
262
  }
384
263
  }
385
264
 
386
- @keyframes slide-down {
387
- from {
388
- opacity: 1;
389
- transform: translateY(0);
390
- }
391
- to {
392
- opacity: 0;
393
- transform: translateY(10px);
265
+ @media (max-width: 480px) {
266
+ .memori--preview-container {
267
+ margin-bottom: var(--memori-spacing-sm);
394
268
  }
395
269
  }
@@ -10,6 +10,7 @@ import {
10
10
  getDocumentAttachmentAssetUrl,
11
11
  } from '../../helpers/utils';
12
12
  import { getDocumentBadgeLabel } from '../MediaWidget/MediaItemWidget.utils';
13
+ import { DocumentCard } from '../MediaWidget/DocumentCard';
13
14
  import { useTranslation } from 'react-i18next';
14
15
  import cx from 'classnames';
15
16
  import { maxDocumentsPerMessage as defaultMaxDocumentsPerMessage } from '../../helpers/constants';
@@ -39,61 +40,11 @@ const FilePreview = ({
39
40
  type?: string;
40
41
  } | null>(null);
41
42
 
42
- const getFileType = (filename: string, type?: string) => {
43
- // If type is explicitly provided, use it first
44
- if (type === 'image') {
45
- const extension = filename.split('.').pop()?.toLowerCase();
46
- switch (extension) {
47
- case 'jpg':
48
- case 'jpeg':
49
- return 'JPEG';
50
- case 'png':
51
- return 'PNG';
52
- default:
53
- return 'Image';
54
- }
55
- }
56
-
57
- // Otherwise use extension
58
- const extension = filename.split('.').pop()?.toLowerCase();
59
- switch (extension) {
60
- case 'pdf':
61
- return 'PDF';
62
- case 'txt':
63
- return 'Text';
64
- case 'json':
65
- return 'JSON';
66
- case 'xlsx':
67
- return 'Excel';
68
- case 'csv':
69
- return 'CSV';
70
- case 'html':
71
- return 'HTML';
72
- case 'doc':
73
- case 'docx':
74
- case 'dotx':
75
- return 'Word';
76
- case 'xls':
77
- case 'xltx':
78
- return 'Excel';
79
- case 'potx':
80
- return 'PowerPoint';
81
- case 'jpg':
82
- case 'jpeg':
83
- return 'JPEG';
84
- case 'png':
85
- return 'PNG';
86
- default:
87
- return 'Document';
88
- }
89
- };
90
-
91
43
  useEffect(() => {
92
44
  const chat = document.getElementsByClassName('memori-chat--content');
93
45
  if (chat) {
94
46
  const lastChild = chat[chat.length - 1];
95
47
  if (lastChild) {
96
- //then scroll to the bottom of the chat
97
48
  (chat[0] as HTMLElement).scrollTo({
98
49
  top: (chat[0] as HTMLElement).scrollHeight,
99
50
  behavior: 'smooth',
@@ -101,7 +52,7 @@ const FilePreview = ({
101
52
  }
102
53
  }
103
54
  }, [previewFiles]);
104
- // Detect if the file is HTML (by type or filename)
55
+
105
56
  const isHtmlFile = (
106
57
  file: { name?: string; type?: string; mimeType?: string } | null
107
58
  ): boolean => {
@@ -115,7 +66,6 @@ const FilePreview = ({
115
66
  );
116
67
  };
117
68
 
118
- // Get display content for non-image files (strip document_attachment for HTML, stripHTML for others)
119
69
  const getDisplayContent = (
120
70
  file: {
121
71
  content?: string;
@@ -137,11 +87,9 @@ const FilePreview = ({
137
87
  return stripHTML(stripDocumentAttachmentTags(content));
138
88
  };
139
89
 
140
- // Detect if the content is an image URL
141
90
  const isImageContent = (content: string, type?: string): boolean => {
142
91
  if (type === 'image') return true;
143
92
 
144
- // Check if the content has image file extension or is an image URL
145
93
  const hasImageExtension = /\.(jpg|jpeg|png|gif|webp|svg)$/i.test(content);
146
94
  const isImageUrl =
147
95
  content.startsWith('http') &&
@@ -152,6 +100,15 @@ const FilePreview = ({
152
100
  return isImageUrl || hasImageExtension;
153
101
  };
154
102
 
103
+ const getBadge = (file: {
104
+ name?: string;
105
+ type?: string;
106
+ mimeType?: string;
107
+ }) =>
108
+ file.mimeType
109
+ ? getDocumentBadgeLabel(file.mimeType, file.name)
110
+ : getDocumentBadgeLabel('application/octet-stream', file.name);
111
+
155
112
  return (
156
113
  <>
157
114
  {(previewFiles.length > 0 || uploadingCount > 0) && (
@@ -167,15 +124,7 @@ const FilePreview = ({
167
124
  </div>
168
125
  )}
169
126
  {showAnonymousRetentionNotice && (
170
- <small
171
- style={{
172
- color: 'rgb(138, 138, 138)',
173
- display: 'block',
174
- marginTop: '8px',
175
- marginLeft: '8px',
176
- fontSize: '0.7rem',
177
- }}
178
- >
127
+ <small className="memori--preview-retention-notice">
179
128
  {t('upload.anonymousRetentionNotice', {
180
129
  defaultValue:
181
130
  'Note: uploaded files are retained for a maximum of 24 hours.',
@@ -183,65 +132,65 @@ const FilePreview = ({
183
132
  </small>
184
133
  )}
185
134
  <div className="memori--preview-list">
186
- {previewFiles.map((file: any) => (
187
- <div
188
- key={file.id}
189
- className={`memori--preview-item ${
190
- isImageContent(file.content, file.type)
191
- ? 'memori--preview-item--image'
192
- : 'memori--preview-item--document'
193
- }`}
194
- >
195
- <button
196
- type="button"
197
- className="memori--preview-item-trigger"
198
- onClick={() => {
199
- if (isOfficeNativeFilename(file.name || '')) {
200
- const url = getDocumentAttachmentAssetUrl(file);
201
- if (url) {
202
- window.open(url, '_blank', 'noopener,noreferrer');
203
- }
204
- } else {
205
- setSelectedFile(file);
206
- }
207
- }}
208
- aria-label={file.name}
135
+ {previewFiles.map((file: any) => {
136
+ const isImage = isImageContent(file.content, file.type);
137
+ return (
138
+ <div
139
+ key={file.id}
140
+ className={cx('memori--preview-item', {
141
+ 'memori--preview-item--image': isImage,
142
+ 'memori--preview-item--document': !isImage,
143
+ })}
209
144
  >
210
- {isImageContent(file.content, file.type) ? (
211
- <div className="memori--preview-thumbnail">
212
- <img src={file.content} alt="" />
213
- </div>
214
- ) : (
215
- <File className="memori--preview-icon" aria-hidden />
216
- )}
217
-
218
- <div className="memori--preview-file-info">
219
- <span className="memori--preview-filename">{file.name}</span>
220
- <span className="memori--preview-filetype">
221
- {file.mimeType
222
- ? getDocumentBadgeLabel(file.mimeType, file.name)
223
- : getFileType(file.name, file.type)}
224
- </span>
225
- </div>
226
- </button>
227
-
228
- {allowRemove && (
229
- <Button
230
- shape="circle"
231
- icon={<X aria-hidden />}
232
- danger
233
- className="memori--remove-button"
234
- aria-label={String(
235
- t('upload.removeFile', {
236
- defaultValue: 'Remove {{name}}',
237
- name: file.name,
238
- })
145
+ <button
146
+ type="button"
147
+ className="memori--preview-item-trigger"
148
+ onClick={() => {
149
+ if (isOfficeNativeFilename(file.name || '')) {
150
+ const url = getDocumentAttachmentAssetUrl(file);
151
+ if (url) {
152
+ window.open(url, '_blank', 'noopener,noreferrer');
153
+ }
154
+ } else {
155
+ setSelectedFile(file);
156
+ }
157
+ }}
158
+ aria-label={file.name}
159
+ >
160
+ {isImage ? (
161
+ <div className="memori--preview-thumbnail memori-media-item--image">
162
+ <img src={file.content} alt="" />
163
+ </div>
164
+ ) : (
165
+ <DocumentCard
166
+ title={file.name || 'File'}
167
+ badge={getBadge(file)}
168
+ icon={
169
+ <File className="memori-media-item--document-icon-svg" />
170
+ }
171
+ />
239
172
  )}
240
- onClick={() => removeFile(file.id, file?.mediumID)}
241
- />
242
- )}
243
- </div>
244
- ))}
173
+ </button>
174
+
175
+ {allowRemove && (
176
+ <Button
177
+ shape="circle"
178
+ variant="ghost"
179
+ size="sm"
180
+ icon={<X aria-hidden />}
181
+ className="memori--remove-button"
182
+ aria-label={String(
183
+ t('upload.removeFile', {
184
+ defaultValue: 'Remove {{name}}',
185
+ name: file.name,
186
+ })
187
+ )}
188
+ onClick={() => removeFile(file.id, file?.mediumID)}
189
+ />
190
+ )}
191
+ </div>
192
+ );
193
+ })}
245
194
 
246
195
  {uploadingCount > 0 &&
247
196
  Array.from({ length: uploadingCount }, (_, i) => (
@@ -249,10 +198,14 @@ const FilePreview = ({
249
198
  key={`skeleton-${i}`}
250
199
  className="memori--preview-item memori--preview-item--document memori--preview-item--skeleton"
251
200
  >
252
- <div className="memori--skeleton-icon" />
253
- <div className="memori--preview-file-info">
254
- <div className="memori--skeleton-line memori--skeleton-line--name" />
255
- <div className="memori--skeleton-line memori--skeleton-line--type" />
201
+ <div className="memori-media-item--document">
202
+ <div className="memori-media-item--document-header">
203
+ <div className="memori--skeleton-icon" />
204
+ <div className="memori--preview-file-info">
205
+ <div className="memori--skeleton-line memori--skeleton-line--name" />
206
+ <div className="memori--skeleton-line memori--skeleton-line--type" />
207
+ </div>
208
+ </div>
256
209
  </div>
257
210
  </div>
258
211
  ))}