@memori.ai/memori-react 9.0.0-alpha.24 → 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 (265) hide show
  1. package/CHANGELOG.md +28 -0
  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/UploadDocuments/UploadDocuments.js +1 -3
  58. package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
  59. package/dist/components/UploadButton/UploadImages/UploadImages.js +1 -3
  60. package/dist/components/UploadButton/UploadImages/UploadImages.js.map +1 -1
  61. package/dist/components/WhyThisAnswer/WhyThisAnswer.js +1 -3
  62. package/dist/components/WhyThisAnswer/WhyThisAnswer.js.map +1 -1
  63. package/dist/components/layouts/HiddenChat.js +9 -1
  64. package/dist/components/layouts/HiddenChat.js.map +1 -1
  65. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js +84 -5
  66. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
  67. package/dist/components/layouts/WebsiteAssistant/website-assistant.css +36 -12
  68. package/dist/components/layouts/fullpage.css +1 -0
  69. package/dist/components/layouts/hidden-chat.css +29 -5
  70. package/dist/helpers/error.js +2 -1
  71. package/dist/helpers/error.js.map +1 -1
  72. package/dist/helpers/positionPopover.d.ts +1 -0
  73. package/dist/helpers/positionPopover.js +7 -0
  74. package/dist/helpers/positionPopover.js.map +1 -1
  75. package/dist/helpers/usePressTooltip.d.ts +6 -1
  76. package/dist/helpers/usePressTooltip.js +16 -1
  77. package/dist/helpers/usePressTooltip.js.map +1 -1
  78. package/dist/locales/de.json +8 -2
  79. package/dist/locales/en.json +6 -3
  80. package/dist/locales/es.json +6 -3
  81. package/dist/locales/fr.json +6 -3
  82. package/dist/locales/it.json +6 -3
  83. package/dist/styles.css +1 -1
  84. package/dist/version.d.ts +1 -1
  85. package/dist/version.js +1 -1
  86. package/esm/components/AgeVerificationModal/AgeVerificationModal.js +1 -3
  87. package/esm/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
  88. package/esm/components/Auth/Auth.js +1 -3
  89. package/esm/components/Auth/Auth.js.map +1 -1
  90. package/esm/components/Chat/Chat.css +10 -1
  91. package/esm/components/Chat/Chat.js +1 -3
  92. package/esm/components/Chat/Chat.js.map +1 -1
  93. package/esm/components/ChatBubble/ChatBubble.css +103 -5
  94. package/esm/components/ChatBubble/ChatBubble.js +48 -8
  95. package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
  96. package/esm/components/ChatHistoryDrawer/ChatHistory.js +1 -3
  97. package/esm/components/ChatHistoryDrawer/ChatHistory.js.map +1 -1
  98. package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.css +33 -10
  99. package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.js +2 -4
  100. package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.js.map +1 -1
  101. package/esm/components/ChatInputs/ChatInputs.css +17 -52
  102. package/esm/components/ChatInputs/ChatInputs.js +1 -3
  103. package/esm/components/ChatInputs/ChatInputs.js.map +1 -1
  104. package/esm/components/ContentPreviewModal/ContentPreviewModal.css +3 -3
  105. package/esm/components/ContentPreviewModal/ContentPreviewModal.js +1 -3
  106. package/esm/components/ContentPreviewModal/ContentPreviewModal.js.map +1 -1
  107. package/esm/components/DateSelector/DateSelector.css +66 -3
  108. package/esm/components/DateSelector/DateSelector.js +5 -1
  109. package/esm/components/DateSelector/DateSelector.js.map +1 -1
  110. package/esm/components/ExpertsDrawer/ExpertsDrawer.js +1 -3
  111. package/esm/components/ExpertsDrawer/ExpertsDrawer.js.map +1 -1
  112. package/esm/components/FilePreview/FilePreview.css +94 -220
  113. package/esm/components/FilePreview/FilePreview.js +25 -71
  114. package/esm/components/FilePreview/FilePreview.js.map +1 -1
  115. package/esm/components/IconButton/IconButton.css +2 -11
  116. package/esm/components/KnownFacts/KnownFacts.css +3 -4
  117. package/esm/components/KnownFacts/KnownFacts.js +3 -5
  118. package/esm/components/KnownFacts/KnownFacts.js.map +1 -1
  119. package/esm/components/LoginDrawer/LoginDrawer.css +3 -7
  120. package/esm/components/LoginDrawer/LoginDrawer.js +51 -9
  121. package/esm/components/LoginDrawer/LoginDrawer.js.map +1 -1
  122. package/esm/components/MediaWidget/MediaItemWidget.css +77 -57
  123. package/esm/components/MediaWidget/MediaItemWidget.js +5 -5
  124. package/esm/components/MediaWidget/MediaItemWidget.js.map +1 -1
  125. package/esm/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +1 -1
  126. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +2 -5
  127. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  128. package/esm/components/MemoriWidget/MemoriWidget.css +0 -55
  129. package/esm/components/MemoriWidget/MemoriWidget.js +115 -117
  130. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  131. package/esm/components/MobileSessionPanel/MobileSessionPanel.css +20 -0
  132. package/esm/components/MobileSessionPanel/MobileSessionPanel.js +78 -118
  133. package/esm/components/MobileSessionPanel/MobileSessionPanel.js.map +1 -1
  134. package/esm/components/PositionPopover/PositionPopover.css +1 -1
  135. package/esm/components/SettingsDrawer/SettingsDrawer.js +1 -3
  136. package/esm/components/SettingsDrawer/SettingsDrawer.js.map +1 -1
  137. package/esm/components/StartPanel/StartPanel.css +12 -1
  138. package/esm/components/StartPanel/StartPanel.js +30 -7
  139. package/esm/components/StartPanel/StartPanel.js.map +1 -1
  140. package/esm/components/UploadButton/UploadButton.css +7 -7
  141. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js +1 -3
  142. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
  143. package/esm/components/UploadButton/UploadImages/UploadImages.js +1 -3
  144. package/esm/components/UploadButton/UploadImages/UploadImages.js.map +1 -1
  145. package/esm/components/WhyThisAnswer/WhyThisAnswer.js +1 -3
  146. package/esm/components/WhyThisAnswer/WhyThisAnswer.js.map +1 -1
  147. package/esm/components/layouts/HiddenChat.js +9 -1
  148. package/esm/components/layouts/HiddenChat.js.map +1 -1
  149. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js +85 -6
  150. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
  151. package/esm/components/layouts/WebsiteAssistant/website-assistant.css +36 -12
  152. package/esm/components/layouts/fullpage.css +1 -0
  153. package/esm/components/layouts/hidden-chat.css +29 -5
  154. package/esm/helpers/error.js +2 -1
  155. package/esm/helpers/error.js.map +1 -1
  156. package/esm/helpers/positionPopover.d.ts +1 -0
  157. package/esm/helpers/positionPopover.js +6 -0
  158. package/esm/helpers/positionPopover.js.map +1 -1
  159. package/esm/helpers/usePressTooltip.d.ts +6 -1
  160. package/esm/helpers/usePressTooltip.js +17 -2
  161. package/esm/helpers/usePressTooltip.js.map +1 -1
  162. package/esm/locales/de.json +8 -2
  163. package/esm/locales/en.json +6 -3
  164. package/esm/locales/es.json +6 -3
  165. package/esm/locales/fr.json +6 -3
  166. package/esm/locales/it.json +6 -3
  167. package/esm/styles.css +1 -1
  168. package/esm/version.d.ts +1 -1
  169. package/esm/version.js +1 -1
  170. package/package.json +4 -3
  171. package/src/components/AgeVerificationModal/AgeVerificationModal.tsx +0 -3
  172. package/src/components/Auth/Auth.tsx +0 -3
  173. package/src/components/Auth/__snapshots__/Auth.test.tsx.snap +1 -0
  174. package/src/components/BlockedMemoriBadge/__snapshots__/BlockedMemoriBadge.test.tsx.snap +5 -0
  175. package/src/components/Chat/Chat.css +10 -1
  176. package/src/components/Chat/Chat.tsx +0 -3
  177. package/src/components/Chat/__snapshots__/Chat.test.tsx.snap +1735 -1765
  178. package/src/components/ChatBubble/ChatBubble.css +103 -5
  179. package/src/components/ChatBubble/ChatBubble.test.tsx +33 -0
  180. package/src/components/ChatBubble/ChatBubble.tsx +524 -273
  181. package/src/components/ChatBubble/__snapshots__/ChatBubble.test.tsx.snap +655 -684
  182. package/src/components/ChatHistoryDrawer/ChatHistory.tsx +0 -3
  183. package/src/components/ChatHistoryDrawer/ChatResumeDrawer.css +33 -10
  184. package/src/components/ChatHistoryDrawer/ChatResumeDrawer.tsx +3 -6
  185. package/src/components/ChatInputs/ChatInputs.css +17 -52
  186. package/src/components/ChatInputs/ChatInputs.tsx +2 -4
  187. package/src/components/CompletionProviderStatus/__snapshots__/CompletionProviderStatus.test.tsx.snap +3 -0
  188. package/src/components/ContentPreviewModal/ContentPreviewModal.css +3 -3
  189. package/src/components/ContentPreviewModal/ContentPreviewModal.tsx +0 -3
  190. package/src/components/DateSelector/DateSelector.css +66 -3
  191. package/src/components/DateSelector/DateSelector.test.tsx +33 -4
  192. package/src/components/DateSelector/DateSelector.tsx +37 -11
  193. package/src/components/ExpertsDrawer/ExpertsDrawer.tsx +0 -3
  194. package/src/components/FeedbackButtons/__snapshots__/FeedbackButtons.test.tsx.snap +2 -1
  195. package/src/components/FilePreview/FilePreview.css +94 -220
  196. package/src/components/FilePreview/FilePreview.tsx +77 -124
  197. package/src/components/FilePreview/__snapshots__/FilePreview.test.tsx.snap +33 -81
  198. package/src/components/Header/ChatConsumptionDropdown.test.tsx +53 -86
  199. package/src/components/Header/__snapshots__/Header.test.tsx.snap +60 -44
  200. package/src/components/IconButton/IconButton.css +2 -11
  201. package/src/components/KnownFacts/KnownFacts.css +3 -4
  202. package/src/components/KnownFacts/KnownFacts.tsx +0 -5
  203. package/src/components/KnownFacts/__snapshots__/KnownFacts.test.tsx.snap +2 -6
  204. package/src/components/LoginDrawer/LoginDrawer.css +3 -7
  205. package/src/components/LoginDrawer/LoginDrawer.tsx +101 -54
  206. package/src/components/LoginDrawer/__snapshots__/LoginDrawer.test.tsx.snap +11 -33
  207. package/src/components/MediaWidget/MediaItemWidget.css +77 -57
  208. package/src/components/MediaWidget/MediaItemWidget.test.tsx +33 -0
  209. package/src/components/MediaWidget/MediaItemWidget.tsx +6 -12
  210. package/src/components/MediaWidget/__snapshots__/MediaItemWidget.test.tsx.snap +2 -0
  211. package/src/components/MediaWidget/__snapshots__/MediaWidget.test.tsx.snap +1 -1
  212. package/src/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +1 -1
  213. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +0 -5
  214. package/src/components/MemoriWidget/MemoriUIProvider.contract.test.tsx +25 -7
  215. package/src/components/MemoriWidget/MemoriWidget.css +0 -55
  216. package/src/components/MemoriWidget/MemoriWidget.tsx +18 -12
  217. package/src/components/MobileSessionPanel/MobileSessionPanel.css +20 -0
  218. package/src/components/MobileSessionPanel/MobileSessionPanel.tsx +29 -68
  219. package/src/components/PositionPopover/PositionPopover.css +1 -1
  220. package/src/components/SettingsDrawer/SettingsDrawer.tsx +0 -3
  221. package/src/components/ShareButton/__snapshots__/ShareButton.test.tsx.snap +9 -9
  222. package/src/components/Snippet/__snapshots__/Snippet.test.tsx.snap +8 -0
  223. package/src/components/StartPanel/StartPanel.css +12 -1
  224. package/src/components/StartPanel/StartPanel.test.tsx +57 -0
  225. package/src/components/StartPanel/StartPanel.tsx +41 -4
  226. package/src/components/StartPanel/__snapshots__/StartPanel.test.tsx.snap +41 -6
  227. package/src/components/UploadButton/UploadButton.css +7 -7
  228. package/src/components/UploadButton/UploadDocuments/UploadDocuments.tsx +0 -3
  229. package/src/components/UploadButton/UploadImages/UploadImages.tsx +0 -3
  230. package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +8 -10
  231. package/src/components/WhyThisAnswer/WhyThisAnswer.tsx +0 -3
  232. package/src/components/WhyThisAnswer/__snapshots__/WhyThisAnswer.test.tsx.snap +3 -9
  233. package/src/components/layouts/HiddenChat.tsx +9 -1
  234. package/src/components/layouts/WebsiteAssistant/WebsiteAssistant.tsx +103 -6
  235. package/src/components/layouts/WebsiteAssistant/__snapshots__/WebsiteAssistant.test.tsx.snap +63 -57
  236. package/src/components/layouts/WebsiteAssistant/website-assistant.css +36 -12
  237. package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +7 -4
  238. package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +12 -8
  239. package/src/components/layouts/__snapshots__/HiddenChat.test.tsx.snap +7 -4
  240. package/src/components/layouts/__snapshots__/Totem.test.tsx.snap +10 -5
  241. package/src/components/layouts/__snapshots__/ZoomedFullBody.test.tsx.snap +6 -4
  242. package/src/components/layouts/fullpage.css +1 -0
  243. package/src/components/layouts/hidden-chat.css +29 -5
  244. package/src/components/layouts/layouts.stories.tsx +2 -2
  245. package/src/helpers/error.ts +2 -1
  246. package/src/helpers/positionPopover.test.ts +15 -0
  247. package/src/helpers/positionPopover.ts +16 -0
  248. package/src/helpers/usePressTooltip.test.ts +30 -0
  249. package/src/helpers/usePressTooltip.ts +31 -1
  250. package/src/index.tsx +1 -1
  251. package/src/locales/de.json +8 -2
  252. package/src/locales/en.json +6 -3
  253. package/src/locales/es.json +6 -3
  254. package/src/locales/fr.json +6 -3
  255. package/src/locales/it.json +6 -3
  256. package/src/styles.brandTokens.test.js +52 -0
  257. package/src/styles.css +27 -2
  258. package/src/version.ts +1 -1
  259. package/dist/context/widgetSurfaceContext.d.ts +0 -3
  260. package/dist/context/widgetSurfaceContext.js +0 -11
  261. package/dist/context/widgetSurfaceContext.js.map +0 -1
  262. package/esm/context/widgetSurfaceContext.d.ts +0 -3
  263. package/esm/context/widgetSurfaceContext.js +0 -7
  264. package/esm/context/widgetSurfaceContext.js.map +0 -1
  265. package/src/context/widgetSurfaceContext.tsx +0 -14
@@ -51,7 +51,7 @@ const HiddenChatLayout: React.FC<LayoutProps> = ({
51
51
  showShare: false,
52
52
  showLogin: false,
53
53
  showMessageConsumption: false,
54
- showFullscreen: false,
54
+ showFullscreen: true,
55
55
  memori: {
56
56
  ...headerProps.memori,
57
57
  needsPosition: false,
@@ -84,8 +84,10 @@ const HiddenChatLayout: React.FC<LayoutProps> = ({
84
84
 
85
85
  // Use refs to store original sidebar properties to restore them later
86
86
  const originalSidebarStyles = useRef({
87
+ left: '',
87
88
  right: '',
88
89
  width: '',
90
+ maxWidth: '',
89
91
  backgroundColor: '',
90
92
  });
91
93
 
@@ -170,8 +172,10 @@ const HiddenChatLayout: React.FC<LayoutProps> = ({
170
172
  if (sidebarElement) {
171
173
  // Restore original styles
172
174
  const sidebar = sidebarElement as HTMLElement;
175
+ sidebar.style.left = originalSidebarStyles.current.left;
173
176
  sidebar.style.right = originalSidebarStyles.current.right;
174
177
  sidebar.style.width = originalSidebarStyles.current.width;
178
+ sidebar.style.maxWidth = originalSidebarStyles.current.maxWidth;
175
179
  sidebar.style.backgroundColor =
176
180
  originalSidebarStyles.current.backgroundColor;
177
181
 
@@ -190,14 +194,18 @@ const HiddenChatLayout: React.FC<LayoutProps> = ({
190
194
 
191
195
  // Store original styles before modifying
192
196
  originalSidebarStyles.current = {
197
+ left: sidebar.style.left,
193
198
  right: sidebar.style.right,
194
199
  width: sidebar.style.width,
200
+ maxWidth: sidebar.style.maxWidth,
195
201
  backgroundColor: sidebar.style.backgroundColor,
196
202
  };
197
203
 
198
204
  // Set styles for fullscreen — keep --memori-secondary-background via CSS, clear inline white
205
+ sidebar.style.left = '0';
199
206
  sidebar.style.right = '0';
200
207
  sidebar.style.width = '100%';
208
+ sidebar.style.maxWidth = 'none';
201
209
  sidebar.style.backgroundColor = '';
202
210
  sidebar.classList.add('memori-sidebar-fullscreen');
203
211
 
@@ -1,4 +1,4 @@
1
- import React, { useState, useMemo } from 'react';
1
+ import React, { useState, useMemo, useEffect, useRef } from 'react';
2
2
  import { Spin, Button } from '@memori.ai/ui';
3
3
  import { LayoutProps } from '../../MemoriWidget/MemoriWidget';
4
4
  import Blob from '../../Blob/Blob';
@@ -8,6 +8,9 @@ import { useArtifact } from '../../MemoriArtifactSystem/context/ArtifactContext'
8
8
  import ArtifactDrawer from '../../MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer';
9
9
  import { getResourceUrl } from '../../../helpers/media';
10
10
 
11
+ const PANEL_SELECTOR = '.memori-website_assistant--expanded';
12
+ const FULLSCREEN_CLASS = 'memori-website_assistant--fullscreen';
13
+
11
14
  const WebsiteAssistantLayout: React.FC<LayoutProps> = ({
12
15
  Header,
13
16
  headerProps,
@@ -21,7 +24,7 @@ const WebsiteAssistantLayout: React.FC<LayoutProps> = ({
21
24
  sessionId,
22
25
  hasUserActivatedSpeak,
23
26
  loading = false,
24
- avatar3dHidden,
27
+ avatar3dHidden = true,
25
28
  }) => {
26
29
  const { t } = useTranslation();
27
30
  const { state: artifactState } = useArtifact();
@@ -29,6 +32,16 @@ const WebsiteAssistantLayout: React.FC<LayoutProps> = ({
29
32
  artifactState.isDrawerOpen && !artifactState.isChatLogPanelPresentation;
30
33
  const [collapsed, _setCollapsed] = useState(true);
31
34
  const [expandedKey, setExpandedKey] = useState<string>();
35
+ const [fullScreen, setFullScreen] = useState(false);
36
+
37
+ const originalPanelStyles = useRef({
38
+ left: '',
39
+ right: '',
40
+ width: '',
41
+ maxWidth: '',
42
+ height: '',
43
+ backgroundColor: '',
44
+ });
32
45
 
33
46
  const stopAudio = useMemo(() => chatProps?.stopAudio, [chatProps?.stopAudio]);
34
47
 
@@ -54,9 +67,92 @@ const WebsiteAssistantLayout: React.FC<LayoutProps> = ({
54
67
  })
55
68
  : undefined;
56
69
 
57
- const setCollapsed = (collapsed: boolean) => {
58
- _setCollapsed(collapsed);
59
- setExpandedKey(collapsed ? undefined : new Date().toISOString());
70
+ const restoreFromFullscreen = () => {
71
+ const panelElement = document.querySelector(PANEL_SELECTOR);
72
+ if (panelElement) {
73
+ const panel = panelElement as HTMLElement;
74
+ panel.style.left = originalPanelStyles.current.left;
75
+ panel.style.right = originalPanelStyles.current.right;
76
+ panel.style.width = originalPanelStyles.current.width;
77
+ panel.style.maxWidth = originalPanelStyles.current.maxWidth;
78
+ panel.style.height = originalPanelStyles.current.height;
79
+ panel.style.backgroundColor = originalPanelStyles.current.backgroundColor;
80
+ panel.classList.remove(FULLSCREEN_CLASS);
81
+ }
82
+ setFullScreen(false);
83
+ };
84
+
85
+ useEffect(() => {
86
+ const handleFullscreenChange = () => {
87
+ if (!document.fullscreenElement && fullScreen) {
88
+ restoreFromFullscreen();
89
+ }
90
+ };
91
+
92
+ document.addEventListener('fullscreenchange', handleFullscreenChange);
93
+ return () => {
94
+ document.removeEventListener('fullscreenchange', handleFullscreenChange);
95
+ };
96
+ }, [fullScreen]);
97
+
98
+ const handleFullscreenToggle = () => {
99
+ if (!document.fullscreenElement) {
100
+ const panelElement = document.querySelector(PANEL_SELECTOR);
101
+ if (panelElement) {
102
+ const panel = panelElement as HTMLElement;
103
+
104
+ originalPanelStyles.current = {
105
+ left: panel.style.left,
106
+ right: panel.style.right,
107
+ width: panel.style.width,
108
+ maxWidth: panel.style.maxWidth,
109
+ height: panel.style.height,
110
+ backgroundColor: panel.style.backgroundColor,
111
+ };
112
+
113
+ panel.style.left = '0';
114
+ panel.style.right = '0';
115
+ panel.style.width = '100%';
116
+ panel.style.maxWidth = 'none';
117
+ panel.style.height = '100%';
118
+ panel.style.backgroundColor = '';
119
+ panel.classList.add(FULLSCREEN_CLASS);
120
+
121
+ panel.requestFullscreen().catch(err => {
122
+ console.warn(
123
+ '[WebsiteAssistantLayout] Error enabling fullscreen:',
124
+ err
125
+ );
126
+ });
127
+ }
128
+ setFullScreen(true);
129
+ } else {
130
+ if (document.exitFullscreen) {
131
+ document.exitFullscreen().catch(err => {
132
+ console.warn(
133
+ '[WebsiteAssistantLayout] Error exiting fullscreen:',
134
+ err
135
+ );
136
+ });
137
+ }
138
+ restoreFromFullscreen();
139
+ }
140
+ };
141
+
142
+ const setCollapsed = (nextCollapsed: boolean) => {
143
+ if (nextCollapsed && fullScreen) {
144
+ if (document.fullscreenElement) {
145
+ document.exitFullscreen().catch(err => {
146
+ console.warn(
147
+ '[WebsiteAssistantLayout] Error exiting fullscreen:',
148
+ err
149
+ );
150
+ });
151
+ }
152
+ restoreFromFullscreen();
153
+ }
154
+ _setCollapsed(nextCollapsed);
155
+ setExpandedKey(nextCollapsed ? undefined : new Date().toISOString());
60
156
  try {
61
157
  stopAudio?.();
62
158
  } catch (e) {
@@ -88,7 +184,7 @@ const WebsiteAssistantLayout: React.FC<LayoutProps> = ({
88
184
  useSideArtifactChrome
89
185
  ? ' memori-website_assistant--artifact-open'
90
186
  : ''
91
- }`}
187
+ }${fullScreen ? ` ${FULLSCREEN_CLASS}` : ''}`}
92
188
  >
93
189
  {!collapsed && (
94
190
  <>
@@ -127,6 +223,7 @@ const WebsiteAssistantLayout: React.FC<LayoutProps> = ({
127
223
  showSettings={false}
128
224
  showReload={false}
129
225
  showChatHistory={false}
226
+ fullScreenHandler={handleFullscreenToggle}
130
227
  />
131
228
  )}
132
229
  <button
@@ -10,73 +10,79 @@ exports[`renders WEBSITE_ASSISTANT 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: 10000;"
14
14
  >
15
15
  <div
16
- aria-atomic="false"
17
- aria-label="Notifications"
18
- aria-live="polite"
19
- aria-relevant="additions text"
20
- class="memori-alert-viewport memori-alert-viewport--top-end"
21
- data-theme="light"
22
- role="region"
23
- style="z-index: 10002;"
24
- tabindex="-1"
25
- />
26
- <div
27
- class="memori-widget__surface"
16
+ class="memori-ui-provider"
17
+ data-memori-ui-provider=""
18
+ style="--memori-z-index-base: 10000;"
28
19
  >
29
20
  <div
30
- class="memori-website_assistant--trigger"
21
+ aria-atomic="false"
22
+ aria-label="Notifications"
23
+ aria-live="polite"
24
+ aria-relevant="additions text"
25
+ class="memori-alert-viewport memori-alert-viewport--top-end"
26
+ data-theme="light"
27
+ role="region"
28
+ tabindex="-1"
29
+ />
30
+ <div
31
+ class="memori-widget__surface"
32
+ style="--memori-z-index-base: 10000;"
31
33
  >
32
- <button
33
- aria-expanded="false"
34
- aria-label="expand"
35
- class="memori-button memori-button--ghost memori-button--md memori-button--circle memori-website_assistant--trigger-button"
36
- tabindex="0"
37
- title="expand"
38
- type="button"
34
+ <div
35
+ class="memori-website_assistant--trigger"
39
36
  >
40
- <span
41
- class="memori-button__content"
37
+ <button
38
+ aria-expanded="false"
39
+ aria-label="expand"
40
+ class="memori-button memori-button--ghost memori-button--md memori-button--circle memori-website_assistant--trigger-button"
41
+ tabindex="0"
42
+ title="expand"
43
+ type="button"
42
44
  >
43
- <div
44
- class="memori-blob"
45
+ <span
46
+ class="memori-button__content"
45
47
  >
46
- <figure>
47
- <img
48
- alt=""
49
- role="presentation"
50
- src="https://aisuru.com/images/aisuru/square_logo.png"
51
- />
52
- </figure>
53
- <div
54
- class="mainDiv"
55
- />
56
- <div
57
- class="mainDiv"
58
- />
59
- <div
60
- class="mainDiv"
61
- />
62
- <div
63
- class="mainDiv"
64
- />
65
48
  <div
66
- class="mainDiv"
67
- />
68
- </div>
69
- </span>
70
- </button>
49
+ class="memori-blob"
50
+ >
51
+ <figure>
52
+ <img
53
+ alt=""
54
+ role="presentation"
55
+ src="https://aisuru.com/images/aisuru/square_logo.png"
56
+ />
57
+ </figure>
58
+ <div
59
+ class="mainDiv"
60
+ />
61
+ <div
62
+ class="mainDiv"
63
+ />
64
+ <div
65
+ class="mainDiv"
66
+ />
67
+ <div
68
+ class="mainDiv"
69
+ />
70
+ <div
71
+ class="mainDiv"
72
+ />
73
+ </div>
74
+ </span>
75
+ </button>
76
+ </div>
77
+ <div
78
+ class="memori-website_assistant--collapsed"
79
+ />
80
+ <audio
81
+ id="memori-audio"
82
+ src="https://aisuru.com/intro.mp3"
83
+ style="display: none;"
84
+ />
71
85
  </div>
72
- <div
73
- class="memori-website_assistant--collapsed"
74
- />
75
- <audio
76
- id="memori-audio"
77
- src="https://aisuru.com/intro.mp3"
78
- style="display: none;"
79
- />
80
86
  </div>
81
87
  </div>
82
88
  <div
@@ -9,7 +9,7 @@
9
9
 
10
10
  .memori-website_assistant--trigger {
11
11
  position: fixed;
12
- z-index: 2147483647;
12
+ z-index: calc(var(--memori-z-index-base, 0) + 1800);
13
13
  right: 0px;
14
14
  bottom: 0px;
15
15
  display: flex;
@@ -199,6 +199,26 @@
199
199
  pointer-events: all;
200
200
  }
201
201
 
202
+ /*
203
+ * Fullscreen: same approach as HiddenChat — class + inline styles expand the
204
+ * docked panel to the full window; browser Fullscreen API is requested on the panel.
205
+ */
206
+ .memori-widget.memori-layout-website_assistant .memori-website_assistant--expanded.memori-website_assistant--fullscreen,
207
+ .memori-widget.memori-layout-website_assistant .memori-website_assistant--expanded:fullscreen,
208
+ .memori-widget.memori-layout-website_assistant .memori-website_assistant--expanded:-webkit-full-screen {
209
+ top: 0 !important;
210
+ right: 0 !important;
211
+ bottom: 0 !important;
212
+ left: 0 !important;
213
+ width: 100% !important;
214
+ max-width: none !important;
215
+ height: 100% !important;
216
+ padding: 0.5rem 0;
217
+ border-radius: 0 !important;
218
+ margin-bottom: 0;
219
+ box-shadow: none;
220
+ }
221
+
202
222
  /*
203
223
  * Keep in sync with ArtifactDrawer split width (55% / --memori-modal-size-md override).
204
224
  * Same pairing as HiddenChat's `.memori-sidebar-toggle-artifact` → `right: 55%`.
@@ -208,6 +228,16 @@
208
228
  right: 55%;
209
229
  }
210
230
 
231
+ /* Fullscreen must win over the artifact split offset */
232
+ .memori-widget.memori-layout-website_assistant
233
+ .memori-website_assistant--expanded.memori-website_assistant--fullscreen.memori-website_assistant--artifact-open,
234
+ .memori-widget.memori-layout-website_assistant
235
+ .memori-website_assistant--expanded:fullscreen.memori-website_assistant--artifact-open,
236
+ .memori-widget.memori-layout-website_assistant
237
+ .memori-website_assistant--expanded:-webkit-full-screen.memori-website_assistant--artifact-open {
238
+ right: 0 !important;
239
+ }
240
+
211
241
  /* Tablet */
212
242
  @media (min-width: 601px) {
213
243
  .memori-widget.memori-layout-website_assistant .memori-website_assistant--collapsed,
@@ -309,9 +339,7 @@
309
339
  justify-content: center;
310
340
  }
311
341
 
312
- .memori-widget.memori-layout-website_assistant
313
- .memori-conversation-footer
314
- .memori-chat-inputs--ai-note {
342
+ .memori-widget.memori-layout-website_assistant .memori-conversation-footer .memori-chat-inputs--ai-note {
315
343
  overflow: visible;
316
344
  flex: 1 1 100%;
317
345
  text-align: center;
@@ -319,9 +347,7 @@
319
347
  white-space: normal;
320
348
  }
321
349
 
322
- .memori-widget.memori--active.memori-layout-website_assistant
323
- .memori-conversation-footer
324
- .memori-chat-inputs--ai-note {
350
+ .memori-widget.memori--active.memori-layout-website_assistant .memori-conversation-footer .memori-chat-inputs--ai-note {
325
351
  text-align: left;
326
352
  }
327
353
 
@@ -607,10 +633,8 @@
607
633
  }
608
634
 
609
635
  .memori-website_assistant-layout--controls .memori-chat--content--has-global-background,
610
- .memori-website_assistant-layout--controls
611
- .memori-chat--history:has(.memori-chat--content--has-global-background),
612
- .memori-website_assistant-layout--controls
613
- .memori-chat--wrapper:has(.memori-chat--content--has-global-background) {
636
+ .memori-website_assistant-layout--controls .memori-chat--history:has(.memori-chat--content--has-global-background),
637
+ .memori-website_assistant-layout--controls .memori-chat--wrapper:has(.memori-chat--content--has-global-background) {
614
638
  background: transparent;
615
639
  }
616
640
 
@@ -643,7 +667,7 @@
643
667
  }
644
668
 
645
669
  .memori-website_assistant-layout--controls .memori-chat--wrapper {
646
- padding: 1rem;
670
+ padding: 0;
647
671
  }
648
672
 
649
673
  .memori-website_assistant-layout--controls .memori--start-panel {
@@ -10,7 +10,7 @@ exports[`renders 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 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
  <style>
30
30
  @layer memori.overrides {
@@ -92,7 +92,7 @@ exports[`renders Chat 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 Chat 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"
@@ -376,6 +376,7 @@ exports[`renders Chat layout unchanged 1`] = `
376
376
  class="memori--settings-section__icon-box memori--settings-section__icon-box--neutral"
377
377
  >
378
378
  <svg
379
+ aria-hidden="true"
379
380
  class="lucide lucide-eye memori--settings-section__icon"
380
381
  fill="none"
381
382
  height="24"
@@ -432,6 +433,7 @@ exports[`renders Chat layout unchanged 1`] = `
432
433
  class="memori-button__content"
433
434
  >
434
435
  <svg
436
+ aria-hidden="true"
435
437
  class="lucide lucide-info memori--settings-section__inline-info-icon"
436
438
  fill="none"
437
439
  height="24"
@@ -547,6 +549,7 @@ exports[`renders Chat layout unchanged 1`] = `
547
549
  class="memori-button__content"
548
550
  >
549
551
  <svg
552
+ aria-hidden="true"
550
553
  class="lucide lucide-send icon"
551
554
  fill="none"
552
555
  height="24"
@@ -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"