@memori.ai/memori-react 9.0.0-alpha.6 → 9.0.0-alpha.8

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 (145) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/components/AgeVerificationModal/AgeVerificationModal.js +3 -1
  3. package/dist/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
  4. package/dist/components/Auth/Auth.js +3 -1
  5. package/dist/components/Auth/Auth.js.map +1 -1
  6. package/dist/components/Chat/Chat.js +3 -1
  7. package/dist/components/Chat/Chat.js.map +1 -1
  8. package/dist/components/ChatBubble/ChatBubble.js +3 -1
  9. package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
  10. package/dist/components/ChatHistoryDrawer/ChatHistory.js +3 -1
  11. package/dist/components/ChatHistoryDrawer/ChatHistory.js.map +1 -1
  12. package/dist/components/ContentPreviewModal/ContentPreviewModal.js +3 -1
  13. package/dist/components/ContentPreviewModal/ContentPreviewModal.js.map +1 -1
  14. package/dist/components/ExpertsDrawer/ExpertsDrawer.js +3 -1
  15. package/dist/components/ExpertsDrawer/ExpertsDrawer.js.map +1 -1
  16. package/dist/components/KnownFacts/KnownFacts.js +5 -3
  17. package/dist/components/KnownFacts/KnownFacts.js.map +1 -1
  18. package/dist/components/LoginDrawer/LoginDrawer.js +3 -1
  19. package/dist/components/LoginDrawer/LoginDrawer.js.map +1 -1
  20. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +19 -5
  21. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +4 -1
  22. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  23. package/dist/components/MemoriWidget/MemoriWidget.css +4 -2
  24. package/dist/components/MemoriWidget/MemoriWidget.js +139 -130
  25. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  26. package/dist/components/SettingsDrawer/SettingsDrawer.js +3 -1
  27. package/dist/components/SettingsDrawer/SettingsDrawer.js.map +1 -1
  28. package/dist/components/StartPanel/StartPanel.js +3 -1
  29. package/dist/components/StartPanel/StartPanel.js.map +1 -1
  30. package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js +3 -1
  31. package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
  32. package/dist/components/UploadButton/UploadImages/UploadImages.js +3 -1
  33. package/dist/components/UploadButton/UploadImages/UploadImages.js.map +1 -1
  34. package/dist/components/WhyThisAnswer/WhyThisAnswer.js +3 -1
  35. package/dist/components/WhyThisAnswer/WhyThisAnswer.js.map +1 -1
  36. package/dist/components/layouts/HiddenChat.js +4 -223
  37. package/dist/components/layouts/HiddenChat.js.map +1 -1
  38. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js +3 -1
  39. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
  40. package/dist/components/layouts/WebsiteAssistant/website-assistant.css +19 -0
  41. package/dist/components/layouts/chat.css +2 -1
  42. package/dist/components/layouts/fullpage.css +31 -8
  43. package/dist/components/layouts/hidden-chat.css +1 -6
  44. package/dist/components/layouts/totem.css +2 -1
  45. package/dist/components/layouts/zoomed-full-body.css +32 -7
  46. package/dist/context/widgetSurfaceContext.d.ts +3 -0
  47. package/dist/context/widgetSurfaceContext.js +11 -0
  48. package/dist/context/widgetSurfaceContext.js.map +1 -0
  49. package/dist/helpers/positionPopover.d.ts +1 -0
  50. package/dist/helpers/positionPopover.js +7 -0
  51. package/dist/helpers/positionPopover.js.map +1 -0
  52. package/dist/styles.css +1 -1
  53. package/dist/version.d.ts +1 -1
  54. package/dist/version.js +1 -1
  55. package/esm/components/AgeVerificationModal/AgeVerificationModal.js +3 -1
  56. package/esm/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
  57. package/esm/components/Auth/Auth.js +3 -1
  58. package/esm/components/Auth/Auth.js.map +1 -1
  59. package/esm/components/Chat/Chat.js +3 -1
  60. package/esm/components/Chat/Chat.js.map +1 -1
  61. package/esm/components/ChatBubble/ChatBubble.js +3 -1
  62. package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
  63. package/esm/components/ChatHistoryDrawer/ChatHistory.js +3 -1
  64. package/esm/components/ChatHistoryDrawer/ChatHistory.js.map +1 -1
  65. package/esm/components/ContentPreviewModal/ContentPreviewModal.js +3 -1
  66. package/esm/components/ContentPreviewModal/ContentPreviewModal.js.map +1 -1
  67. package/esm/components/ExpertsDrawer/ExpertsDrawer.js +3 -1
  68. package/esm/components/ExpertsDrawer/ExpertsDrawer.js.map +1 -1
  69. package/esm/components/KnownFacts/KnownFacts.js +5 -3
  70. package/esm/components/KnownFacts/KnownFacts.js.map +1 -1
  71. package/esm/components/LoginDrawer/LoginDrawer.js +3 -1
  72. package/esm/components/LoginDrawer/LoginDrawer.js.map +1 -1
  73. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +19 -5
  74. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +4 -1
  75. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  76. package/esm/components/MemoriWidget/MemoriWidget.css +4 -2
  77. package/esm/components/MemoriWidget/MemoriWidget.js +139 -130
  78. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  79. package/esm/components/SettingsDrawer/SettingsDrawer.js +3 -1
  80. package/esm/components/SettingsDrawer/SettingsDrawer.js.map +1 -1
  81. package/esm/components/StartPanel/StartPanel.js +3 -1
  82. package/esm/components/StartPanel/StartPanel.js.map +1 -1
  83. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js +3 -1
  84. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
  85. package/esm/components/UploadButton/UploadImages/UploadImages.js +3 -1
  86. package/esm/components/UploadButton/UploadImages/UploadImages.js.map +1 -1
  87. package/esm/components/WhyThisAnswer/WhyThisAnswer.js +3 -1
  88. package/esm/components/WhyThisAnswer/WhyThisAnswer.js.map +1 -1
  89. package/esm/components/layouts/HiddenChat.js +6 -225
  90. package/esm/components/layouts/HiddenChat.js.map +1 -1
  91. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js +3 -1
  92. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
  93. package/esm/components/layouts/WebsiteAssistant/website-assistant.css +19 -0
  94. package/esm/components/layouts/chat.css +2 -1
  95. package/esm/components/layouts/fullpage.css +31 -8
  96. package/esm/components/layouts/hidden-chat.css +1 -6
  97. package/esm/components/layouts/totem.css +2 -1
  98. package/esm/components/layouts/zoomed-full-body.css +32 -7
  99. package/esm/context/widgetSurfaceContext.d.ts +3 -0
  100. package/esm/context/widgetSurfaceContext.js +7 -0
  101. package/esm/context/widgetSurfaceContext.js.map +1 -0
  102. package/esm/helpers/positionPopover.d.ts +1 -0
  103. package/esm/helpers/positionPopover.js +4 -0
  104. package/esm/helpers/positionPopover.js.map +1 -0
  105. package/esm/styles.css +1 -1
  106. package/esm/version.d.ts +1 -1
  107. package/esm/version.js +1 -1
  108. package/package.json +1 -1
  109. package/src/components/AgeVerificationModal/AgeVerificationModal.tsx +3 -0
  110. package/src/components/Auth/Auth.tsx +3 -0
  111. package/src/components/Chat/Chat.tsx +3 -0
  112. package/src/components/ChatBubble/ChatBubble.tsx +3 -0
  113. package/src/components/ChatHistoryDrawer/ChatHistory.tsx +3 -0
  114. package/src/components/ContentPreviewModal/ContentPreviewModal.tsx +3 -0
  115. package/src/components/ExpertsDrawer/ExpertsDrawer.tsx +3 -0
  116. package/src/components/KnownFacts/KnownFacts.tsx +5 -0
  117. package/src/components/LoginDrawer/LoginDrawer.tsx +3 -0
  118. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +19 -5
  119. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +4 -0
  120. package/src/components/MemoriWidget/MemoriWidget.css +4 -2
  121. package/src/components/MemoriWidget/MemoriWidget.tsx +45 -22
  122. package/src/components/SettingsDrawer/SettingsDrawer.tsx +3 -0
  123. package/src/components/StartPanel/StartPanel.tsx +3 -0
  124. package/src/components/UploadButton/UploadDocuments/UploadDocuments.tsx +3 -0
  125. package/src/components/UploadButton/UploadImages/UploadImages.tsx +3 -0
  126. package/src/components/WhyThisAnswer/WhyThisAnswer.tsx +3 -0
  127. package/src/components/layouts/HiddenChat.tsx +3 -389
  128. package/src/components/layouts/WebsiteAssistant/WebsiteAssistant.tsx +4 -0
  129. package/src/components/layouts/WebsiteAssistant/__snapshots__/WebsiteAssistant.test.tsx.snap +48 -44
  130. package/src/components/layouts/WebsiteAssistant/website-assistant.css +19 -0
  131. package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +533 -529
  132. package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +1058 -1050
  133. package/src/components/layouts/__snapshots__/HiddenChat.test.tsx.snap +406 -441
  134. package/src/components/layouts/__snapshots__/Totem.test.tsx.snap +584 -580
  135. package/src/components/layouts/__snapshots__/ZoomedFullBody.test.tsx.snap +528 -524
  136. package/src/components/layouts/chat.css +2 -1
  137. package/src/components/layouts/fullpage.css +31 -8
  138. package/src/components/layouts/hidden-chat.css +1 -6
  139. package/src/components/layouts/totem.css +2 -1
  140. package/src/components/layouts/zoomed-full-body.css +32 -7
  141. package/src/context/widgetSurfaceContext.tsx +14 -0
  142. package/src/helpers/positionPopover.test.ts +33 -0
  143. package/src/helpers/positionPopover.ts +13 -0
  144. package/src/styles.css +61 -1
  145. package/src/version.ts +1 -1
@@ -1,32 +1,13 @@
1
1
  /* eslint-disable react/prop-types */
2
2
  import React, { useState, useEffect, useRef, useMemo } from 'react';
3
- import { Button, Spin } from '@memori.ai/ui';
3
+ import { Spin } from '@memori.ai/ui';
4
4
  import { LayoutProps } from '../MemoriWidget/MemoriWidget';
5
5
  import { useTranslation } from 'react-i18next';
6
6
  import { useArtifact } from '../MemoriArtifactSystem/context/ArtifactContext';
7
- import {
8
- EllipsisVertical,
9
- HelpCircle,
10
- LogIn,
11
- LogOut,
12
- MapPin,
13
- MessageCircle,
14
- RefreshCw,
15
- Settings,
16
- Share2,
17
- Trash2,
18
- User,
19
- Users,
20
- Volume2,
21
- VolumeX,
22
- Maximize,
23
- X,
24
- } from 'lucide-react';
7
+ import { HelpCircle, X } from 'lucide-react';
25
8
  import { getResourceUrl } from '../../helpers/media';
26
9
  import ArtifactDrawer from '../MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer';
27
10
  import ChatInputs from '../ChatInputs/ChatInputs';
28
- import ShareButton from '../ShareButton/ShareButton';
29
- import MobileSessionPanel from '../MobileSessionPanel/MobileSessionPanel';
30
11
  import {
31
12
  maxDocumentsPerMessage,
32
13
  maxDocumentContentLength,
@@ -47,11 +28,10 @@ const HiddenChatLayout: React.FC<LayoutProps> = ({
47
28
  StartPanel,
48
29
  onSidebarToggle,
49
30
  }) => {
50
- const { t, i18n } = useTranslation();
31
+ const { t } = useTranslation();
51
32
  const [isOpen, setIsOpen] = useState(false);
52
33
  const [fullScreen, setFullScreen] = useState(false);
53
34
  const [hasTriggeredAutostart, setHasTriggeredAutostart] = useState(false);
54
- const [sessionPanelOpen, setSessionPanelOpen] = useState(false);
55
35
 
56
36
  const { state, closeArtifact } = useArtifact();
57
37
  const useSideArtifactChrome =
@@ -61,18 +41,6 @@ const HiddenChatLayout: React.FC<LayoutProps> = ({
61
41
  const memori = headerProps?.memori;
62
42
  const tenant = headerProps?.tenant;
63
43
  const baseUrl = headerProps?.baseUrl;
64
- const hasSustainabilityData = useMemo(
65
- () =>
66
- !!headerProps?.history?.some(
67
- line =>
68
- !!(
69
- line as {
70
- llmUsage?: { energyImpact?: unknown };
71
- }
72
- ).llmUsage?.energyImpact
73
- ),
74
- [headerProps?.history]
75
- );
76
44
  const hiddenChatHeaderProps = useMemo(() => {
77
45
  if (!headerProps) return undefined;
78
46
  return {
@@ -95,260 +63,8 @@ const HiddenChatLayout: React.FC<LayoutProps> = ({
95
63
  };
96
64
  }, [headerProps]);
97
65
 
98
- const loggedUser =
99
- headerProps?.loginToken && headerProps?.user ? headerProps.user : undefined;
100
- const sharedUrl = useMemo(() => {
101
- if (!headerProps?.memori || !headerProps?.sessionID) return undefined;
102
- const currentLanguage = i18n.language === 'it' ? 'it' : 'en';
103
- if (headerProps.memori.ownerUserID) {
104
- return `${
105
- headerProps.baseUrl ?? 'https://www.aisuru.com'
106
- }/${currentLanguage}/shared/${headerProps.memori.ownerUserID}/${
107
- headerProps.memori.memoriID
108
- }/${headerProps.sessionID}`;
109
- }
110
- if (headerProps.memori.exposed) {
111
- return `${
112
- headerProps.baseUrl ?? 'https://www.aisuru.com'
113
- }/${currentLanguage}/shared/${headerProps.memori.ownerUserName}/${
114
- headerProps.memori.name
115
- }/${headerProps.sessionID}`;
116
- }
117
- return window.location.href;
118
- }, [headerProps, i18n.language]);
119
- const loggedUserDisplayName = useMemo(() => {
120
- if (!loggedUser) return '';
121
- const enrichedUser = loggedUser as typeof loggedUser & {
122
- name?: string;
123
- surname?: string;
124
- firstName?: string;
125
- lastName?: string;
126
- };
127
- const fullName =
128
- [enrichedUser.name, enrichedUser.surname]
129
- .filter(Boolean)
130
- .join(' ')
131
- .trim() ||
132
- [enrichedUser.firstName, enrichedUser.lastName]
133
- .filter(Boolean)
134
- .join(' ')
135
- .trim();
136
- return fullName || loggedUser.userName || loggedUser.eMail || '';
137
- }, [loggedUser]);
138
- const loggedUserInitial = useMemo(
139
- () => (loggedUserDisplayName || 'U').charAt(0).toUpperCase(),
140
- [loggedUserDisplayName]
141
- );
142
66
  const isSessionStarted = Boolean(sessionId && hasUserActivatedSpeak);
143
67
 
144
- const handleOverflowActionClick = (
145
- action:
146
- | 'reload'
147
- | 'clear'
148
- | 'chatHistory'
149
- | 'fullscreen'
150
- | 'deepThought'
151
- | 'experts'
152
- | 'audio'
153
- | 'settings'
154
- | 'share'
155
- | 'login'
156
- ) => {
157
- if (!headerProps) return;
158
- switch (action) {
159
- case 'reload':
160
- window.location.reload();
161
- break;
162
- case 'clear':
163
- headerProps.clearHistory();
164
- break;
165
- case 'chatHistory':
166
- headerProps.setShowChatHistoryDrawer(true);
167
- break;
168
- case 'fullscreen':
169
- handleFullscreenToggle();
170
- break;
171
- case 'deepThought':
172
- headerProps.setShowKnownFactsDrawer(true);
173
- break;
174
- case 'experts':
175
- headerProps.setShowExpertsDrawer(true);
176
- break;
177
- case 'audio':
178
- headerProps.setSpeakerMuted(!headerProps.speakerMuted);
179
- break;
180
- case 'settings':
181
- headerProps.setShowSettingsDrawer(true);
182
- break;
183
- case 'share': {
184
- const targetUrl = sharedUrl || window.location.href;
185
- if (navigator.share) {
186
- navigator
187
- .share({
188
- title: headerProps.memori?.name,
189
- url: targetUrl,
190
- })
191
- .catch(() => {
192
- // User dismissed share sheet or browser blocked it.
193
- });
194
- break;
195
- }
196
- if (navigator.clipboard?.writeText) {
197
- navigator.clipboard.writeText(targetUrl).catch(() => {
198
- const opened = window.open(targetUrl, '_blank');
199
- if (!opened) window.location.assign(targetUrl);
200
- });
201
- break;
202
- }
203
- {
204
- const opened = window.open(targetUrl, '_blank');
205
- if (!opened) window.location.assign(targetUrl);
206
- }
207
- break;
208
- }
209
- case 'login':
210
- if (loggedUser && headerProps.onLogout) {
211
- headerProps.onLogout();
212
- } else {
213
- headerProps.setShowLoginDrawer(true);
214
- }
215
- break;
216
- default:
217
- break;
218
- }
219
- };
220
-
221
- const handleEnableLocation = () => {
222
- if (!headerProps) return;
223
- if (!navigator.geolocation) {
224
- headerProps.setPositionPopoverOpen(true);
225
- return;
226
- }
227
- navigator.geolocation.getCurrentPosition(
228
- position => {
229
- const latitude = position.coords.latitude;
230
- const longitude = position.coords.longitude;
231
- headerProps.setVenue({
232
- latitude,
233
- longitude,
234
- placeName: `${latitude.toFixed(5)}, ${longitude.toFixed(5)}`,
235
- uncertainty: position.coords.accuracy / 1000,
236
- });
237
- },
238
- () => {
239
- headerProps.setPositionPopoverOpen(true);
240
- },
241
- { enableHighAccuracy: true, timeout: 15000, maximumAge: 0 }
242
- );
243
- };
244
-
245
- const handleDisableLocation = () => {
246
- headerProps?.setVenue({
247
- latitude: 0,
248
- longitude: 0,
249
- placeName: '',
250
- uncertainty: 0,
251
- });
252
- };
253
-
254
- const sessionPanelActions = useMemo(
255
- () => [
256
- {
257
- key: 'fullscreen',
258
- icon: <Maximize size={18} />,
259
- title: t('fullscreenEnter') || 'Full screen',
260
- subtitle: t('widget.expandToImmersive') || 'Expand to immersive view',
261
- onClick: () => {
262
- handleFullscreenToggle();
263
- setSessionPanelOpen(false);
264
- },
265
- },
266
- ...(headerProps?.loginToken
267
- ? [
268
- {
269
- key: 'chatHistory',
270
- icon: <MessageCircle size={18} />,
271
- title: t('write_and_speak.chatHistory') || 'Chat history',
272
- onClick: () => {
273
- handleOverflowActionClick('chatHistory');
274
- setSessionPanelOpen(false);
275
- },
276
- },
277
- ]
278
- : []),
279
- {
280
- key: 'share',
281
- icon: <Share2 size={18} />,
282
- title: t('widget.share') || 'Share chat',
283
- subtitle:
284
- t('widget.mobileSession.copyLinkOrDownload') ||
285
- 'Copy link or download',
286
- view: 'share' as const,
287
- },
288
- {
289
- key: 'location',
290
- icon: <MapPin size={18} />,
291
- title:
292
- t('widget.mobileSession.locationTracking') || 'Location tracking',
293
- subtitle:
294
- headerProps?.position?.placeName ||
295
- t('widget.mobileSession.currentlyOff') ||
296
- 'Currently off',
297
- view: 'location' as const,
298
- trailing: (
299
- <span className="memori-mobile-session-panel--chevron">{'>'}</span>
300
- ),
301
- },
302
- ...(headerProps?.showReload
303
- ? [
304
- {
305
- key: 'reload',
306
- icon: <RefreshCw size={18} />,
307
- title: t('reload') || 'Reload',
308
- onClick: () => handleOverflowActionClick('reload'),
309
- },
310
- ]
311
- : []),
312
- ...(headerProps?.showClear
313
- ? [
314
- {
315
- key: 'clear',
316
- icon: <Trash2 size={18} />,
317
- title: t('clearHistory') || 'Clear chat',
318
- onClick: () => handleOverflowActionClick('clear'),
319
- },
320
- ]
321
- : []),
322
- // ...(headerProps?.memori?.enableBoardOfExperts
323
- // ? [
324
- // {
325
- // key: 'experts',
326
- // icon: <Users size={18} />,
327
- // title:
328
- // t('widget.showExpertsInTheBoard') || 'Experts in this board',
329
- // disabled: !isSessionStarted,
330
- // onClick: () => handleOverflowActionClick('experts'),
331
- // },
332
- // ]
333
- // : []),
334
- // ...(headerProps?.enableAudio
335
- // ? [
336
- // {
337
- // key: 'audio',
338
- // icon: headerProps?.speakerMuted ? (
339
- // <VolumeX size={18} />
340
- // ) : (
341
- // <Volume2 size={18} />
342
- // ),
343
- // title: t('widget.sound') || 'Sound',
344
- // onClick: () => handleOverflowActionClick('audio'),
345
- // },
346
- // ]
347
- // : []),
348
- ],
349
- [t, headerProps, isSessionStarted]
350
- );
351
-
352
68
  const brandAvatarSrc = memori
353
69
  ? memori.avatarURL && memori.avatarURL.length > 0
354
70
  ? getResourceUrl({
@@ -585,21 +301,6 @@ const HiddenChatLayout: React.FC<LayoutProps> = ({
585
301
  {...hiddenChatHeaderProps}
586
302
  buttonVariant="outline"
587
303
  fullScreenHandler={handleFullscreenToggle}
588
- extraActions={
589
- <Button
590
- variant="outline"
591
- className={`memori-hidden-chat-layout--overflow-trigger ${
592
- sessionPanelOpen ? 'memori-button--active' : ''
593
- }`}
594
- aria-label={
595
- t('widget.moreActions') || 'More actions'
596
- }
597
- icon={<EllipsisVertical />}
598
- onClick={() =>
599
- setSessionPanelOpen(currentOpen => !currentOpen)
600
- }
601
- />
602
- }
603
304
  />
604
305
  )}
605
306
  </div>
@@ -607,93 +308,6 @@ const HiddenChatLayout: React.FC<LayoutProps> = ({
607
308
  )}
608
309
  </div>
609
310
  <div className="memori-chat-layout--body">
610
- {headerProps && (
611
- <MobileSessionPanel
612
- open={sessionPanelOpen}
613
- onClose={() => setSessionPanelOpen(false)}
614
- presentation="popover"
615
- title={t('widget.mobileSession.session') || 'Session'}
616
- loginToken={headerProps.loginToken}
617
- user={headerProps.user}
618
- apiClient={headerProps.apiClient}
619
- userName={loggedUserDisplayName || memori?.name || 'User'}
620
- userEmail={loggedUser?.eMail}
621
- userInitial={loggedUserInitial}
622
- avatarURL={loggedUser?.avatarURL}
623
- birthDate={loggedUser?.birthDate}
624
- actions={sessionPanelActions}
625
- knownFactsPageTitle={t('knownFacts.title') || 'Known facts'}
626
- sharePageTitle={t('widget.share') || 'Share'}
627
- locationPageTitle={
628
- t('widget.mobileSession.locationTracking') ||
629
- 'Location tracking'
630
- }
631
- backLabel={t('back') || 'Back'}
632
- locationStatusLabel={
633
- t('widget.mobileSession.locationStatus') || 'Status'
634
- }
635
- locationPlace={headerProps.position?.placeName}
636
- locationUnknownLabel={
637
- t('write_and_speak.unknownPosition') || 'Unknown position'
638
- }
639
- locationEnableLabel={
640
- t('widget.shareLocation') || 'Share location'
641
- }
642
- locationDisableLabel={
643
- t('widget.mobileSession.disableLocationSharing') ||
644
- 'Disable location sharing'
645
- }
646
- knownFactsDescription={
647
- t('knownFacts.description', {
648
- memoriName: memori?.name || '',
649
- }) || ''
650
- }
651
- knownFactsCtaLabel={
652
- t('widget.mobileSession.openKnownFacts') ||
653
- 'Open full known facts'
654
- }
655
- knownFactsCountLabel={
656
- (t('widget.mobileSession.knownFactsMessages', {
657
- count: headerProps.history?.length || 0,
658
- }) as string) || ''
659
- }
660
- shareContent={
661
- <ShareButton
662
- tenant={headerProps?.tenant}
663
- memori={headerProps?.memori}
664
- sessionID={headerProps?.sessionID}
665
- title={headerProps?.memori?.name}
666
- baseUrl={headerProps?.baseUrl}
667
- align="left"
668
- history={headerProps?.history}
669
- renderMode="inline"
670
- />
671
- }
672
- knownFactsDisabled={!isSessionStarted}
673
- showSessionInfo={isSessionStarted}
674
- history={headerProps.history ?? []}
675
- isLoggedIn={!!loggedUser}
676
- loginLabel={t('login.login') || 'Log in'}
677
- onLogin={() => {
678
- headerProps.setShowLoginDrawer(true);
679
- setSessionPanelOpen(false);
680
- }}
681
- onKnownFactsOpen={() => {
682
- if (!isSessionStarted) return;
683
- headerProps.setShowKnownFactsDrawer(true);
684
- setSessionPanelOpen(false);
685
- }}
686
- onLocationEnable={handleEnableLocation}
687
- onLocationDisable={handleDisableLocation}
688
- venue={headerProps.position}
689
- setVenue={headerProps.setVenue}
690
- logoutLabel={t('login.logout') || 'Log out'}
691
- onLogout={() => {
692
- handleOverflowActionClick('login');
693
- setSessionPanelOpen(false);
694
- }}
695
- />
696
- )}
697
311
  {sessionId && hasUserActivatedSpeak && Chat && chatProps ? (
698
312
  <Chat {...chatProps} />
699
313
  ) : !autoStart && startPanelProps ? (
@@ -62,6 +62,10 @@ const WebsiteAssistantLayout: React.FC<LayoutProps> = ({
62
62
  <div
63
63
  className={`memori-website_assistant--${
64
64
  collapsed ? 'collapsed' : 'expanded'
65
+ }${
66
+ useSideArtifactChrome
67
+ ? ' memori-website_assistant--artifact-open'
68
+ : ''
65
69
  }`}
66
70
  >
67
71
  {!collapsed && (
@@ -12,56 +12,60 @@ exports[`renders WEBSITE_ASSISTANT layout unchanged 1`] = `
12
12
  style="height: 100vh;"
13
13
  >
14
14
  <div
15
- class="memori-website_assistant--trigger"
15
+ class="memori-widget__surface"
16
16
  >
17
- <button
18
- aria-expanded="false"
19
- aria-label="expand"
20
- class="memori-button memori-button--ghost memori-button--md memori-button--circle memori-website_assistant--trigger-button"
21
- tabindex="0"
22
- title="expand"
23
- type="button"
17
+ <div
18
+ class="memori-website_assistant--trigger"
24
19
  >
25
- <span
26
- class="memori-button__content"
20
+ <button
21
+ aria-expanded="false"
22
+ aria-label="expand"
23
+ class="memori-button memori-button--ghost memori-button--md memori-button--circle memori-website_assistant--trigger-button"
24
+ tabindex="0"
25
+ title="expand"
26
+ type="button"
27
27
  >
28
- <div
29
- class="memori-blob"
28
+ <span
29
+ class="memori-button__content"
30
30
  >
31
- <figure>
32
- <img
33
- alt=""
34
- role="presentation"
35
- src="https://aisuru.com/images/aisuru/square_logo.png"
36
- />
37
- </figure>
38
- <div
39
- class="mainDiv"
40
- />
41
- <div
42
- class="mainDiv"
43
- />
44
31
  <div
45
- class="mainDiv"
46
- />
47
- <div
48
- class="mainDiv"
49
- />
50
- <div
51
- class="mainDiv"
52
- />
53
- </div>
54
- </span>
55
- </button>
32
+ class="memori-blob"
33
+ >
34
+ <figure>
35
+ <img
36
+ alt=""
37
+ role="presentation"
38
+ src="https://aisuru.com/images/aisuru/square_logo.png"
39
+ />
40
+ </figure>
41
+ <div
42
+ class="mainDiv"
43
+ />
44
+ <div
45
+ class="mainDiv"
46
+ />
47
+ <div
48
+ class="mainDiv"
49
+ />
50
+ <div
51
+ class="mainDiv"
52
+ />
53
+ <div
54
+ class="mainDiv"
55
+ />
56
+ </div>
57
+ </span>
58
+ </button>
59
+ </div>
60
+ <div
61
+ class="memori-website_assistant--collapsed"
62
+ />
63
+ <audio
64
+ id="memori-audio"
65
+ src="https://aisuru.com/intro.mp3"
66
+ style="display: none;"
67
+ />
56
68
  </div>
57
- <div
58
- class="memori-website_assistant--collapsed"
59
- />
60
- <audio
61
- id="memori-audio"
62
- src="https://aisuru.com/intro.mp3"
63
- style="display: none;"
64
- />
65
69
  </div>
66
70
  <div
67
71
  aria-atomic="false"
@@ -195,6 +195,15 @@
195
195
  pointer-events: all;
196
196
  }
197
197
 
198
+ /*
199
+ * Keep in sync with ArtifactDrawer split width (46% / --memori-modal-size-md override).
200
+ * Same pairing as HiddenChat's `.memori-sidebar-toggle-artifact` → `right: 46%`.
201
+ */
202
+ .memori-widget.memori-layout-website_assistant
203
+ .memori-website_assistant--expanded.memori-website_assistant--artifact-open {
204
+ right: 46%;
205
+ }
206
+
198
207
  /* Tablet */
199
208
  @media (min-width: 601px) {
200
209
  .memori-widget.memori-layout-website_assistant .memori-website_assistant--collapsed,
@@ -205,6 +214,11 @@
205
214
  border-radius: var(--memori-radius-box) 0 0 0;
206
215
  }
207
216
 
217
+ .memori-widget.memori-layout-website_assistant
218
+ .memori-website_assistant--expanded.memori-website_assistant--artifact-open {
219
+ right: 46%;
220
+ }
221
+
208
222
  .memori-widget.memori-layout-website_assistant .memori-website_assistant--expanded {
209
223
  height: min(75vh, calc(100vh - var(--memori-spacing-5xl)));
210
224
  }
@@ -218,6 +232,11 @@
218
232
  border-radius: var(--memori-radius-box) 0 0 0;
219
233
  }
220
234
 
235
+ .memori-widget.memori-layout-website_assistant
236
+ .memori-website_assistant--expanded.memori-website_assistant--artifact-open {
237
+ right: 46%;
238
+ }
239
+
221
240
  .memori-widget.memori-layout-website_assistant .memori-website_assistant--expanded {
222
241
  height: 100vh;
223
242
  border-radius: 0;