@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
@@ -10,7 +10,7 @@ exports[`renders FullPage layout unchanged 1`] = `
10
10
  data-memori-name="Memori"
11
11
  data-memori-secondary-id="25ced51c-3520-41af-8bbe-222d861b8e32"
12
12
  data-theme="light"
13
- style="height: 100vh;"
13
+ style="height: 100vh; --memori-z-index-base: 0;"
14
14
  >
15
15
  <div
16
16
  aria-atomic="false"
@@ -20,11 +20,11 @@ exports[`renders FullPage layout unchanged 1`] = `
20
20
  class="memori-alert-viewport memori-alert-viewport--top-end"
21
21
  data-theme="light"
22
22
  role="region"
23
- style="z-index: 10002;"
24
23
  tabindex="-1"
25
24
  />
26
25
  <div
27
26
  class="memori-widget__surface"
27
+ style="--memori-z-index-base: 0;"
28
28
  >
29
29
  <style>
30
30
  @layer memori.overrides {
@@ -92,7 +92,7 @@ exports[`renders FullPage layout unchanged 1`] = `
92
92
  >
93
93
  <svg
94
94
  aria-hidden="true"
95
- class="lucide lucide-volume2"
95
+ class="lucide lucide-volume2 lucide-volume-2"
96
96
  fill="none"
97
97
  height="20"
98
98
  stroke="currentColor"
@@ -143,7 +143,7 @@ exports[`renders FullPage layout unchanged 1`] = `
143
143
  >
144
144
  <svg
145
145
  aria-hidden="true"
146
- class="lucide lucide-share2"
146
+ class="lucide lucide-share2 lucide-share-2"
147
147
  fill="none"
148
148
  height="24"
149
149
  stroke="currentColor"
@@ -456,6 +456,7 @@ exports[`renders FullPage layout unchanged 1`] = `
456
456
  class="memori--settings-section__icon-box memori--settings-section__icon-box--neutral"
457
457
  >
458
458
  <svg
459
+ aria-hidden="true"
459
460
  class="lucide lucide-eye memori--settings-section__icon"
460
461
  fill="none"
461
462
  height="24"
@@ -512,6 +513,7 @@ exports[`renders FullPage layout unchanged 1`] = `
512
513
  class="memori-button__content"
513
514
  >
514
515
  <svg
516
+ aria-hidden="true"
515
517
  class="lucide lucide-info memori--settings-section__inline-info-icon"
516
518
  fill="none"
517
519
  height="24"
@@ -745,7 +747,7 @@ exports[`renders FullPage layout with root css properties unchanged 1`] = `
745
747
  data-memori-name="Memori"
746
748
  data-memori-secondary-id="25ced51c-3520-41af-8bbe-222d861b8e32"
747
749
  data-theme="light"
748
- style="height: 100vh;"
750
+ style="height: 100vh; --memori-z-index-base: 0;"
749
751
  >
750
752
  <div
751
753
  aria-atomic="false"
@@ -755,11 +757,11 @@ exports[`renders FullPage layout with root css properties unchanged 1`] = `
755
757
  class="memori-alert-viewport memori-alert-viewport--top-end"
756
758
  data-theme="light"
757
759
  role="region"
758
- style="z-index: 10002;"
759
760
  tabindex="-1"
760
761
  />
761
762
  <div
762
763
  class="memori-widget__surface"
764
+ style="--memori-z-index-base: 0;"
763
765
  >
764
766
  <style>
765
767
  @layer memori.overrides {
@@ -827,7 +829,7 @@ exports[`renders FullPage layout with root css properties unchanged 1`] = `
827
829
  >
828
830
  <svg
829
831
  aria-hidden="true"
830
- class="lucide lucide-volume2"
832
+ class="lucide lucide-volume2 lucide-volume-2"
831
833
  fill="none"
832
834
  height="20"
833
835
  stroke="currentColor"
@@ -878,7 +880,7 @@ exports[`renders FullPage layout with root css properties unchanged 1`] = `
878
880
  >
879
881
  <svg
880
882
  aria-hidden="true"
881
- class="lucide lucide-share2"
883
+ class="lucide lucide-share2 lucide-share-2"
882
884
  fill="none"
883
885
  height="24"
884
886
  stroke="currentColor"
@@ -1191,6 +1193,7 @@ exports[`renders FullPage layout with root css properties unchanged 1`] = `
1191
1193
  class="memori--settings-section__icon-box memori--settings-section__icon-box--neutral"
1192
1194
  >
1193
1195
  <svg
1196
+ aria-hidden="true"
1194
1197
  class="lucide lucide-eye memori--settings-section__icon"
1195
1198
  fill="none"
1196
1199
  height="24"
@@ -1247,6 +1250,7 @@ exports[`renders FullPage layout with root css properties unchanged 1`] = `
1247
1250
  class="memori-button__content"
1248
1251
  >
1249
1252
  <svg
1253
+ aria-hidden="true"
1250
1254
  class="lucide lucide-info memori--settings-section__inline-info-icon"
1251
1255
  fill="none"
1252
1256
  height="24"
@@ -10,7 +10,7 @@ exports[`renders HIDDEN_CHAT layout unchanged 1`] = `
10
10
  data-memori-name="Memori"
11
11
  data-memori-secondary-id="25ced51c-3520-41af-8bbe-222d861b8e32"
12
12
  data-theme="light"
13
- style="height: 100vh;"
13
+ style="height: 100vh; --memori-z-index-base: 0;"
14
14
  >
15
15
  <div
16
16
  aria-atomic="false"
@@ -20,11 +20,11 @@ exports[`renders HIDDEN_CHAT layout unchanged 1`] = `
20
20
  class="memori-alert-viewport memori-alert-viewport--top-end"
21
21
  data-theme="light"
22
22
  role="region"
23
- style="z-index: 10002;"
24
23
  tabindex="-1"
25
24
  />
26
25
  <div
27
26
  class="memori-widget__surface"
27
+ style="--memori-z-index-base: 0;"
28
28
  >
29
29
  <input
30
30
  class="memori-sidebar-toggle "
@@ -40,7 +40,7 @@ exports[`renders HIDDEN_CHAT layout unchanged 1`] = `
40
40
  >
41
41
  <svg
42
42
  aria-label="expand"
43
- class="lucide lucide-circle-help memori-icon"
43
+ class="lucide lucide-circle-question-mark memori-icon"
44
44
  fill="none"
45
45
  height="24"
46
46
  stroke="currentColor"
@@ -117,7 +117,7 @@ exports[`renders HIDDEN_CHAT layout unchanged 1`] = `
117
117
  >
118
118
  <svg
119
119
  aria-hidden="true"
120
- class="lucide lucide-volume2"
120
+ class="lucide lucide-volume2 lucide-volume-2"
121
121
  fill="none"
122
122
  height="20"
123
123
  stroke="currentColor"
@@ -347,6 +347,7 @@ exports[`renders HIDDEN_CHAT layout unchanged 1`] = `
347
347
  class="memori--settings-section__icon-box memori--settings-section__icon-box--neutral"
348
348
  >
349
349
  <svg
350
+ aria-hidden="true"
350
351
  class="lucide lucide-eye memori--settings-section__icon"
351
352
  fill="none"
352
353
  height="24"
@@ -403,6 +404,7 @@ exports[`renders HIDDEN_CHAT layout unchanged 1`] = `
403
404
  class="memori-button__content"
404
405
  >
405
406
  <svg
407
+ aria-hidden="true"
406
408
  class="lucide lucide-info memori--settings-section__inline-info-icon"
407
409
  fill="none"
408
410
  height="24"
@@ -519,6 +521,7 @@ exports[`renders HIDDEN_CHAT layout unchanged 1`] = `
519
521
  class="memori-button__content"
520
522
  >
521
523
  <svg
524
+ aria-hidden="true"
522
525
  class="lucide lucide-send icon"
523
526
  fill="none"
524
527
  height="24"
@@ -10,7 +10,7 @@ exports[`renders Totem layout unchanged 1`] = `
10
10
  data-memori-name="Memori"
11
11
  data-memori-secondary-id="25ced51c-3520-41af-8bbe-222d861b8e32"
12
12
  data-theme="light"
13
- style="height: 100vh;"
13
+ style="height: 100vh; --memori-z-index-base: 0;"
14
14
  >
15
15
  <div
16
16
  aria-atomic="false"
@@ -20,11 +20,11 @@ exports[`renders Totem layout unchanged 1`] = `
20
20
  class="memori-alert-viewport memori-alert-viewport--top-end"
21
21
  data-theme="light"
22
22
  role="region"
23
- style="z-index: 10002;"
24
23
  tabindex="-1"
25
24
  />
26
25
  <div
27
26
  class="memori-widget__surface"
27
+ style="--memori-z-index-base: 0;"
28
28
  >
29
29
  <style>
30
30
  @layer memori.overrides {
@@ -225,7 +225,7 @@ exports[`renders Totem layout unchanged 1`] = `
225
225
  >
226
226
  <svg
227
227
  aria-hidden="true"
228
- class="lucide lucide-volume2"
228
+ class="lucide lucide-volume2 lucide-volume-2"
229
229
  fill="none"
230
230
  height="20"
231
231
  stroke="currentColor"
@@ -276,7 +276,7 @@ exports[`renders Totem layout unchanged 1`] = `
276
276
  >
277
277
  <svg
278
278
  aria-hidden="true"
279
- class="lucide lucide-share2"
279
+ class="lucide lucide-share2 lucide-share-2"
280
280
  fill="none"
281
281
  height="24"
282
282
  stroke="currentColor"
@@ -341,6 +341,7 @@ exports[`renders Totem layout unchanged 1`] = `
341
341
  class="memori-button__icon"
342
342
  >
343
343
  <svg
344
+ aria-hidden="true"
344
345
  class="lucide lucide-refresh-cw"
345
346
  fill="none"
346
347
  height="24"
@@ -391,6 +392,7 @@ exports[`renders Totem layout unchanged 1`] = `
391
392
  class="memori-button__icon"
392
393
  >
393
394
  <svg
395
+ aria-hidden="true"
394
396
  class="lucide lucide-settings"
395
397
  fill="none"
396
398
  height="24"
@@ -403,7 +405,7 @@ exports[`renders Totem layout unchanged 1`] = `
403
405
  xmlns="http://www.w3.org/2000/svg"
404
406
  >
405
407
  <path
406
- d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"
408
+ d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"
407
409
  />
408
410
  <circle
409
411
  cx="12"
@@ -452,6 +454,7 @@ exports[`renders Totem layout unchanged 1`] = `
452
454
  class="memori-button__icon"
453
455
  >
454
456
  <svg
457
+ aria-hidden="true"
455
458
  class="lucide lucide-user"
456
459
  fill="none"
457
460
  height="24"
@@ -732,6 +735,7 @@ exports[`renders Totem layout unchanged 1`] = `
732
735
  class="memori--settings-section__icon-box memori--settings-section__icon-box--neutral"
733
736
  >
734
737
  <svg
738
+ aria-hidden="true"
735
739
  class="lucide lucide-eye memori--settings-section__icon"
736
740
  fill="none"
737
741
  height="24"
@@ -788,6 +792,7 @@ exports[`renders Totem layout unchanged 1`] = `
788
792
  class="memori-button__content"
789
793
  >
790
794
  <svg
795
+ aria-hidden="true"
791
796
  class="lucide lucide-info memori--settings-section__inline-info-icon"
792
797
  fill="none"
793
798
  height="24"
@@ -10,7 +10,7 @@ exports[`renders ZOOMED_FULL_BODY layout unchanged 1`] = `
10
10
  data-memori-name="Memori"
11
11
  data-memori-secondary-id="25ced51c-3520-41af-8bbe-222d861b8e32"
12
12
  data-theme="light"
13
- style="height: 100vh;"
13
+ style="height: 100vh; --memori-z-index-base: 0;"
14
14
  >
15
15
  <div
16
16
  aria-atomic="false"
@@ -20,11 +20,11 @@ exports[`renders ZOOMED_FULL_BODY layout unchanged 1`] = `
20
20
  class="memori-alert-viewport memori-alert-viewport--top-end"
21
21
  data-theme="light"
22
22
  role="region"
23
- style="z-index: 10002;"
24
23
  tabindex="-1"
25
24
  />
26
25
  <div
27
26
  class="memori-widget__surface"
27
+ style="--memori-z-index-base: 0;"
28
28
  >
29
29
  <style>
30
30
  @layer memori.overrides {
@@ -92,7 +92,7 @@ exports[`renders ZOOMED_FULL_BODY layout unchanged 1`] = `
92
92
  >
93
93
  <svg
94
94
  aria-hidden="true"
95
- class="lucide lucide-volume2"
95
+ class="lucide lucide-volume2 lucide-volume-2"
96
96
  fill="none"
97
97
  height="20"
98
98
  stroke="currentColor"
@@ -143,7 +143,7 @@ exports[`renders ZOOMED_FULL_BODY layout unchanged 1`] = `
143
143
  >
144
144
  <svg
145
145
  aria-hidden="true"
146
- class="lucide lucide-share2"
146
+ class="lucide lucide-share2 lucide-share-2"
147
147
  fill="none"
148
148
  height="24"
149
149
  stroke="currentColor"
@@ -456,6 +456,7 @@ exports[`renders ZOOMED_FULL_BODY layout unchanged 1`] = `
456
456
  class="memori--settings-section__icon-box memori--settings-section__icon-box--neutral"
457
457
  >
458
458
  <svg
459
+ aria-hidden="true"
459
460
  class="lucide lucide-eye memori--settings-section__icon"
460
461
  fill="none"
461
462
  height="24"
@@ -512,6 +513,7 @@ exports[`renders ZOOMED_FULL_BODY layout unchanged 1`] = `
512
513
  class="memori-button__content"
513
514
  >
514
515
  <svg
516
+ aria-hidden="true"
515
517
  class="lucide lucide-info memori--settings-section__inline-info-icon"
516
518
  fill="none"
517
519
  height="24"
@@ -423,6 +423,7 @@
423
423
  .memori-widget.memori-layout-fullpage .memori-chat-layout--controls .memori-chat-inputs-wrapper {
424
424
  width: 100%;
425
425
  flex-shrink: 0;
426
+ padding: 16px 4px;
426
427
  border: none;
427
428
  border-radius: 0;
428
429
  background: var(--memori-secondary-background);
@@ -190,12 +190,17 @@
190
190
  flex-shrink: 0;
191
191
  }
192
192
 
193
- /* Fullscreen styles */
194
- .memori-sidebar-fullscreen {
193
+ /* Fullscreen styles — cover the full window width (browser FS or class toggle) */
194
+ .memori-sidebar-fullscreen,
195
+ .memori-sidebar:fullscreen,
196
+ .memori-sidebar:-webkit-full-screen {
197
+ top: 0 !important;
195
198
  right: 0 !important;
199
+ left: 0 !important;
196
200
  width: 100% !important;
197
- max-width: 100% !important;
201
+ max-width: none !important;
198
202
  height: 100% !important;
203
+ border-radius: 0;
199
204
  box-shadow: none;
200
205
  }
201
206
 
@@ -287,6 +292,19 @@
287
292
  right: 55%;
288
293
  }
289
294
 
295
+ /* Fullscreen must win over the artifact split offset */
296
+ .memori-sidebar-toggle-artifact:checked
297
+ ~ .memori-sidebar-container
298
+ .memori-sidebar.memori-sidebar-fullscreen,
299
+ .memori-sidebar-toggle-artifact:checked
300
+ ~ .memori-sidebar-container
301
+ .memori-sidebar:fullscreen,
302
+ .memori-sidebar-toggle-artifact:checked
303
+ ~ .memori-sidebar-container
304
+ .memori-sidebar:-webkit-full-screen {
305
+ right: 0 !important;
306
+ }
307
+
290
308
  .memori-sidebar-toggle:checked ~ .memori-sidebar-container .memori-open-label {
291
309
  opacity: 0;
292
310
  pointer-events: none;
@@ -554,16 +572,22 @@
554
572
  }
555
573
 
556
574
  /* Mobile fullscreen styles */
557
- .memori-sidebar-fullscreen {
575
+ .memori-sidebar-fullscreen,
576
+ .memori-sidebar:fullscreen,
577
+ .memori-sidebar:-webkit-full-screen {
558
578
  display: block;
559
579
  }
560
580
 
561
- .memori-sidebar-container .memori-sidebar-fullscreen {
581
+ .memori-sidebar-container .memori-sidebar-fullscreen,
582
+ .memori-sidebar-container .memori-sidebar:fullscreen,
583
+ .memori-sidebar-container .memori-sidebar:-webkit-full-screen {
562
584
  position: fixed;
563
585
  top: 0;
586
+ right: 0 !important;
564
587
  left: 0;
565
588
  display: block;
566
589
  width: 100% !important;
590
+ max-width: none !important;
567
591
  height: 100% !important;
568
592
  }
569
593
  }
@@ -94,10 +94,10 @@ export const WebsiteAssistant: Story = {
94
94
  },
95
95
  };
96
96
 
97
- export const WebsiteAssistantWithout3DAvatar: Story = {
97
+ export const WebsiteAssistantWith3DAvatar: Story = {
98
98
  args: {
99
99
  ...WebsiteAssistant.args,
100
- avatar3dHidden: true,
100
+ avatar3dHidden: false,
101
101
  },
102
102
  };
103
103
 
@@ -45,36 +45,37 @@ export const getGroupedChatLanguages = () => {
45
45
  export const uiLanguages = ['en', 'it', 'fr', 'es', 'de'];
46
46
 
47
47
  /** Extensions uploaded as original Office binaries (no text extraction) */
48
- export const officeNativeExtensions = [
49
- '.doc',
50
- '.docx',
51
- '.dotx',
52
- '.xltx',
53
- '.potx',
48
+ export const officeNativeExtensions = [] as const;
49
+
50
+ /** Extensions read as UTF-8 in the browser, without calling the conversion API */
51
+ export const localTextExtensions = [
52
+ '.txt',
53
+ '.csv',
54
+ '.tsv',
55
+ '.html',
56
+ '.xhtml',
57
+ '.htm',
58
+ '.xml',
59
+ '.json',
60
+ '.md',
61
+ '.log',
62
+ '.yml',
63
+ '.yaml',
54
64
  ] as const;
55
65
 
56
66
  export const documentConversionExtensions = [
57
67
  '.pdf',
68
+ '.docx',
58
69
  '.docm',
70
+ '.dotx',
59
71
  '.xlsx',
60
72
  '.xlsm',
61
73
  '.xls',
74
+ '.xltx',
62
75
  '.ods',
63
76
  '.pptx',
64
77
  '.pptm',
65
- '.html',
66
- '.htm',
67
- '.xhtml',
68
- '.csv',
69
- '.tsv',
70
- '.txt',
71
- '.md',
72
- '.markdown',
73
- '.json',
74
- '.xml',
75
- '.log',
76
- '.yml',
77
- '.yaml',
78
+ '.potx',
78
79
  ] as const;
79
80
 
80
81
  export const allowedMediaTypes = [
@@ -265,4 +266,4 @@ export const MAX_MSG_WORDS = 300;
265
266
  export const maxDocumentsPerMessage = 10;
266
267
  export const maxDocumentContentLength = 300000;
267
268
  export const pasteAsCardLineThreshold = 100;
268
- export const pasteAsCardCharThreshold = 4200;
269
+ export const pasteAsCardCharThreshold = 4200;
@@ -52,7 +52,8 @@ const errors = {
52
52
  SESSION_EXPIRED: -103,
53
53
  SESSION_OTP_NOT_FOUND: -107,
54
54
  SESSION_OTP_EXPIRED: -108,
55
- SESSION_MISSING_TEMPORARY_TOKEN: -109,
55
+ SESSION_OTP_INVALID: -109,
56
+ SESSION_OTP_ATTEMPTS_EXCEEDED: -110,
56
57
 
57
58
  MEMORI_MISSING_CONFIGURATION: -201,
58
59
  MEMORI_CONFIGURATION_NOT_FOUND: -202,
@@ -1,8 +1,23 @@
1
1
  import {
2
+ isHeaderPositionPopoverAvailable,
2
3
  shouldHoldAutoStartForPosition,
3
4
  shouldRestartSessionOnPositionPopoverClose,
4
5
  } from './positionPopover';
5
6
 
7
+ describe('isHeaderPositionPopoverAvailable', () => {
8
+ it('is unavailable on mobile when the layout strips needsPosition', () => {
9
+ expect(isHeaderPositionPopoverAvailable(true, true)).toBe(false);
10
+ });
11
+
12
+ it('is available on desktop even when the layout strips on mobile', () => {
13
+ expect(isHeaderPositionPopoverAvailable(false, true)).toBe(true);
14
+ });
15
+
16
+ it('is available on mobile when the layout keeps needsPosition', () => {
17
+ expect(isHeaderPositionPopoverAvailable(true, false)).toBe(true);
18
+ });
19
+ });
20
+
6
21
  describe('shouldHoldAutoStartForPosition', () => {
7
22
  it('holds auto-start when position is required and none is stored', () => {
8
23
  expect(shouldHoldAutoStartForPosition(true, false)).toBe(true);
@@ -10,6 +10,22 @@ export function shouldHoldAutoStartForPosition(
10
10
  return !!needsPosition && !hasPosition;
11
11
  }
12
12
 
13
+ /**
14
+ * Whether Header exposes the position popover for the current layout.
15
+ * Mobile FullPage/Chat/ZoomedFullBody strip `needsPosition` from Header, so
16
+ * PositionPopover is not mounted and StartPanel must not rely on
17
+ * openPositionPopover + autoStartGeolocation alone.
18
+ */
19
+ export function isHeaderPositionPopoverAvailable(
20
+ isMobile: boolean,
21
+ layoutStripsNeedsPositionOnMobile: boolean
22
+ ): boolean {
23
+ if (isMobile && layoutStripsNeedsPositionOnMobile) {
24
+ return false;
25
+ }
26
+ return true;
27
+ }
28
+
13
29
  /**
14
30
  * Whether closing the position popover should re-run autoStart (`onClickStart`).
15
31
  * Only true on a real open → closed transition when a session has not started yet
@@ -0,0 +1,30 @@
1
+ import { renderHook, act } from '@testing-library/react';
2
+ import type { MouseEvent } from 'react';
3
+ import { usePressTooltip } from './usePressTooltip';
4
+
5
+ describe('usePressTooltip', () => {
6
+ it('toggles open on press trigger click and exposes a fixed anchor positioner', () => {
7
+ const { result } = renderHook(() => usePressTooltip());
8
+
9
+ expect(result.current.open).toBe(false);
10
+ expect(result.current.positionerProps.positionMethod).toBe('fixed');
11
+
12
+ const anchor = document.createElement('button');
13
+ act(() => {
14
+ result.current.anchorRef(anchor);
15
+ });
16
+ expect(result.current.positionerProps.anchor.current).toBe(anchor);
17
+
18
+ const clickEvent = {
19
+ stopPropagation: jest.fn(),
20
+ } as unknown as MouseEvent;
21
+
22
+ act(() => {
23
+ result.current.pressTriggerProps.onClick(clickEvent);
24
+ });
25
+
26
+ expect(clickEvent.stopPropagation).toHaveBeenCalled();
27
+ expect(result.current.open).toBe(true);
28
+ expect(result.current.tooltipProps.open).toBe(true);
29
+ });
30
+ });
@@ -1,18 +1,36 @@
1
1
  import {
2
2
  useCallback,
3
+ useRef,
3
4
  useState,
4
5
  type MouseEvent,
5
6
  type PointerEvent,
7
+ type RefCallback,
6
8
  } from 'react';
7
9
 
10
+ /**
11
+ * Click-to-toggle for Base UI tooltips (touch / explicit open).
12
+ *
13
+ * Hover opens through Base UI with the trigger attached synchronously
14
+ * (`flushSync`). A controlled `open` flip from a nested button click does
15
+ * not — `stopPropagation` also blocks `referencePress` dismiss, so Floating UI
16
+ * can mount the positioner with no reference and stick at viewport 0,0.
17
+ *
18
+ * Attach `anchorRef` to the press target and merge `positionerProps` into
19
+ * Tooltip `slotProps.positioner` so click-open stays aligned with the control.
20
+ */
8
21
  export function usePressTooltip(defaultOpen = false) {
9
22
  const [open, setOpen] = useState(defaultOpen);
23
+ const anchorRef = useRef<HTMLElement | null>(null);
10
24
 
11
25
  const toggleOpen = useCallback((e: MouseEvent | PointerEvent) => {
12
26
  e.stopPropagation();
13
27
  setOpen(prev => !prev);
14
28
  }, []);
15
29
 
30
+ const setAnchorRef = useCallback<RefCallback<HTMLElement>>(node => {
31
+ anchorRef.current = node;
32
+ }, []);
33
+
16
34
  const pressTriggerProps = {
17
35
  onPointerDown: (e: PointerEvent) => {
18
36
  e.stopPropagation();
@@ -20,10 +38,22 @@ export function usePressTooltip(defaultOpen = false) {
20
38
  onClick: toggleOpen,
21
39
  } as const;
22
40
 
41
+ const positionerProps = {
42
+ anchor: anchorRef,
43
+ positionMethod: 'fixed' as const,
44
+ };
45
+
23
46
  const tooltipProps = {
24
47
  open,
25
48
  onOpenChange: setOpen,
26
49
  } as const;
27
50
 
28
- return { open, setOpen, pressTriggerProps, tooltipProps };
51
+ return {
52
+ open,
53
+ setOpen,
54
+ anchorRef: setAnchorRef,
55
+ pressTriggerProps,
56
+ positionerProps,
57
+ tooltipProps,
58
+ };
29
59
  }
@@ -8,6 +8,7 @@ import {
8
8
  extractAttachmentLinks,
9
9
  extractAttachmentLink,
10
10
  isAssetOnlyDocumentAttachment,
11
+ isLocalTextFilename,
11
12
  isOfficeNativeFilename,
12
13
  parseDocumentAttachmentsFromMessage,
13
14
  } from './utils';
@@ -176,15 +177,24 @@ describe('utils/attachment helpers', () => {
176
177
  });
177
178
 
178
179
  it('detects office native filenames', () => {
179
- expect(isOfficeNativeFilename('report.doc')).toBe(true);
180
- expect(isOfficeNativeFilename('report.docx')).toBe(true);
180
+ expect(isOfficeNativeFilename('report.doc')).toBe(false);
181
+ expect(isOfficeNativeFilename('report.docx')).toBe(false);
181
182
  expect(isOfficeNativeFilename('budget.xls')).toBe(false);
182
- expect(isOfficeNativeFilename('template.XLTX')).toBe(true);
183
- expect(isOfficeNativeFilename('slides.potx')).toBe(true);
183
+ expect(isOfficeNativeFilename('template.XLTX')).toBe(false);
184
+ expect(isOfficeNativeFilename('slides.potx')).toBe(false);
184
185
  expect(isOfficeNativeFilename('notes.pdf')).toBe(false);
185
186
  expect(isOfficeNativeFilename('data.xlsx')).toBe(false);
186
187
  });
187
188
 
189
+ it('detects filenames read locally instead of converted', () => {
190
+ expect(isLocalTextFilename('notes.txt')).toBe(true);
191
+ expect(isLocalTextFilename('export.CSV')).toBe(true);
192
+ expect(isLocalTextFilename('readme.md')).toBe(true);
193
+ expect(isLocalTextFilename('readme.markdown')).toBe(false);
194
+ expect(isLocalTextFilename('report.docx')).toBe(false);
195
+ expect(isLocalTextFilename('notes.pdf')).toBe(false);
196
+ });
197
+
188
198
  it('detects asset-only document attachments', () => {
189
199
  expect(
190
200
  isAssetOnlyDocumentAttachment({