@memori.ai/memori-react 9.0.0-alpha.10 → 9.0.0-alpha.13

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 (108) hide show
  1. package/CHANGELOG.md +270 -0
  2. package/dist/components/Chat/Chat.css +19 -0
  3. package/dist/components/ChatBubble/ChatBubble.js +11 -23
  4. package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
  5. package/dist/components/ChatInputs/ChatInputs.css +77 -3
  6. package/dist/components/ChatTextArea/ChatTextArea.css +5 -25
  7. package/dist/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.css +7 -2
  8. package/dist/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +31 -15
  9. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +181 -150
  10. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +7 -7
  11. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  12. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/components/TabSwitch.css +11 -2
  13. package/dist/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.css +1 -0
  14. package/dist/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.js +1 -1
  15. package/dist/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.js.map +1 -1
  16. package/dist/components/MemoriWidget/MemoriWidget.js +120 -116
  17. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  18. package/dist/components/MicrophoneButton/MicrophoneButton.css +22 -0
  19. package/dist/components/PoweredBy/PoweredBy.css +1 -8
  20. package/dist/components/StartPanel/StartPanel.js +1 -1
  21. package/dist/components/StartPanel/StartPanel.js.map +1 -1
  22. package/dist/components/layouts/Chat.js +6 -1
  23. package/dist/components/layouts/Chat.js.map +1 -1
  24. package/dist/components/layouts/WebsiteAssistant/website-assistant.css +5 -5
  25. package/dist/components/layouts/chat.css +98 -3
  26. package/dist/components/layouts/fullpage.css +7 -7
  27. package/dist/components/layouts/hidden-chat.css +2 -2
  28. package/dist/components/layouts/zoomed-full-body.css +6 -6
  29. package/dist/helpers/media.js +18 -3
  30. package/dist/helpers/media.js.map +1 -1
  31. package/dist/index.js +16 -16
  32. package/dist/index.js.map +1 -1
  33. package/dist/styles.css +1 -1
  34. package/dist/version.d.ts +1 -1
  35. package/dist/version.js +1 -1
  36. package/esm/components/Chat/Chat.css +19 -0
  37. package/esm/components/ChatBubble/ChatBubble.js +12 -24
  38. package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
  39. package/esm/components/ChatInputs/ChatInputs.css +77 -3
  40. package/esm/components/ChatTextArea/ChatTextArea.css +5 -25
  41. package/esm/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.css +7 -2
  42. package/esm/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +31 -15
  43. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +181 -150
  44. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +8 -8
  45. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  46. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/components/TabSwitch.css +11 -2
  47. package/esm/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.css +1 -0
  48. package/esm/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.js +2 -2
  49. package/esm/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.js.map +1 -1
  50. package/esm/components/MemoriWidget/MemoriWidget.js +121 -117
  51. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  52. package/esm/components/MicrophoneButton/MicrophoneButton.css +22 -0
  53. package/esm/components/PoweredBy/PoweredBy.css +1 -8
  54. package/esm/components/StartPanel/StartPanel.js +1 -1
  55. package/esm/components/StartPanel/StartPanel.js.map +1 -1
  56. package/esm/components/layouts/Chat.js +6 -1
  57. package/esm/components/layouts/Chat.js.map +1 -1
  58. package/esm/components/layouts/WebsiteAssistant/website-assistant.css +5 -5
  59. package/esm/components/layouts/chat.css +98 -3
  60. package/esm/components/layouts/fullpage.css +7 -7
  61. package/esm/components/layouts/hidden-chat.css +2 -2
  62. package/esm/components/layouts/zoomed-full-body.css +6 -6
  63. package/esm/helpers/media.js +18 -3
  64. package/esm/helpers/media.js.map +1 -1
  65. package/esm/index.js +17 -17
  66. package/esm/index.js.map +1 -1
  67. package/esm/styles.css +1 -1
  68. package/esm/version.d.ts +1 -1
  69. package/esm/version.js +1 -1
  70. package/package.json +2 -2
  71. package/src/__snapshots__/index.test.tsx.snap +0 -50
  72. package/src/components/Chat/Chat.css +19 -0
  73. package/src/components/Chat/__snapshots__/Chat.test.tsx.snap +10 -10
  74. package/src/components/ChatBubble/ChatBubble.test.tsx +25 -1
  75. package/src/components/ChatBubble/ChatBubble.tsx +20 -27
  76. package/src/components/ChatInputs/ChatInputs.css +77 -3
  77. package/src/components/ChatTextArea/ChatTextArea.css +5 -25
  78. package/src/components/MemoriArtifactSystem/ArtifactDrawer.stories.tsx +1 -1
  79. package/src/components/MemoriArtifactSystem/components/ArtifactActions/ArtifactActions.css +7 -2
  80. package/src/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +31 -15
  81. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +181 -150
  82. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +63 -74
  83. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/components/TabSwitch.css +11 -2
  84. package/src/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.css +1 -0
  85. package/src/components/MemoriArtifactSystem/components/ArtifactPreview/ArtifactPreview.tsx +2 -2
  86. package/src/components/MemoriWidget/MemoriWidget.tsx +8 -1
  87. package/src/components/MicrophoneButton/MicrophoneButton.css +22 -0
  88. package/src/components/PoweredBy/PoweredBy.css +1 -8
  89. package/src/components/StartPanel/StartPanel.tsx +1 -1
  90. package/src/components/layouts/Chat.tsx +14 -1
  91. package/src/components/layouts/HiddenChat.tsx +1 -1
  92. package/src/components/layouts/WebsiteAssistant/__snapshots__/WebsiteAssistant.test.tsx.snap +10 -0
  93. package/src/components/layouts/WebsiteAssistant/website-assistant.css +5 -5
  94. package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +17 -2
  95. package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +30 -2
  96. package/src/components/layouts/__snapshots__/HiddenChat.test.tsx.snap +10 -0
  97. package/src/components/layouts/__snapshots__/Totem.test.tsx.snap +15 -1
  98. package/src/components/layouts/__snapshots__/ZoomedFullBody.test.tsx.snap +15 -1
  99. package/src/components/layouts/chat.css +98 -3
  100. package/src/components/layouts/fullpage.css +7 -7
  101. package/src/components/layouts/hidden-chat.css +2 -2
  102. package/src/components/layouts/layouts.stories.tsx +8 -8
  103. package/src/components/layouts/zoomed-full-body.css +6 -6
  104. package/src/helpers/media.test.ts +36 -0
  105. package/src/helpers/media.ts +39 -12
  106. package/src/index.tsx +1 -5
  107. package/src/styles.css +18 -5
  108. package/src/version.ts +1 -1
@@ -54,8 +54,8 @@
54
54
  align-items: center;
55
55
  justify-content: space-between;
56
56
  padding: var(--memori-spacing-md);
57
- padding-right: 0;
58
- padding-left: 0;
57
+ padding-right: var(--memori-spacing-md);
58
+ padding-left: var(--memori-spacing-md);
59
59
  border-bottom: 1px solid var(--memori-border-color);
60
60
  margin-right: auto;
61
61
  margin-left: auto;
@@ -199,7 +199,7 @@
199
199
  flex: 1 1 0%;
200
200
  align-items: stretch;
201
201
  justify-content: center;
202
- padding: var(--memori-spacing-md) 0;
202
+ padding: var(--memori-spacing-md);
203
203
  border: none;
204
204
  margin: 0 auto;
205
205
  background: var(--memori-secondary-background);
@@ -307,7 +307,7 @@
307
307
  }
308
308
 
309
309
  .memori-widget.memori-layout-zoomed_full_body .memori--grid-column-artifact--open {
310
- width: 480px;
310
+ width: 560px;
311
311
  border-left: 1px solid color-mix(in srgb, var(--memori-text-color, #111827) 10%, transparent);
312
312
  background: var(--memori-secondary-background);
313
313
  }
@@ -412,7 +412,7 @@
412
412
  }
413
413
 
414
414
  .memori-widget.memori-layout-zoomed_full_body .memori--grid {
415
- padding: var(--memori-spacing-sm) 0;
415
+ padding: var(--memori-spacing-sm);
416
416
  gap: var(--memori-spacing-sm);
417
417
  }
418
418
 
@@ -435,7 +435,7 @@
435
435
  }
436
436
 
437
437
  .memori-widget.memori-layout-zoomed_full_body .memori--grid {
438
- padding: var(--memori-spacing-xs) 0;
438
+ padding: var(--memori-spacing-xs) var(--memori-spacing-sm);
439
439
  }
440
440
 
441
441
  .memori-widget.memori-layout-zoomed_full_body .memori-fullpage-header-row {
@@ -43,10 +43,46 @@ describe('Media URL helper', () => {
43
43
  resourceURI:
44
44
  'https://api.lorem.space/image/game?w=150&h=220&hash=8B7BCDC2',
45
45
  apiURL: 'https://backend.memori.ai/api/v2',
46
+ sessionID: sessionID,
46
47
  })
47
48
  ).toBe('https://api.lorem.space/image/game?w=150&h=220&hash=8B7BCDC2');
48
49
  });
49
50
 
51
+ it('appends session ID for aisuru.ai asset URLs', () => {
52
+ expect(
53
+ getResourceUrl({
54
+ resourceURI:
55
+ 'https://backend-ws-bologna.aisuru.ai/api/v2/asset/ad10ce11-914b-4b9b-a033-ba06cb4b4042.pdf',
56
+ sessionID: sessionID,
57
+ })
58
+ ).toBe(
59
+ `https://backend-ws-bologna.aisuru.ai/api/v2/asset/ad10ce11-914b-4b9b-a033-ba06cb4b4042.pdf/${sessionID}`
60
+ );
61
+ });
62
+
63
+ it('appends session ID for /api/v2/asset/ paths on unknown hosts', () => {
64
+ expect(
65
+ getResourceUrl({
66
+ resourceURI:
67
+ 'https://custom-backend.example.com/api/v2/asset/abc123.pdf',
68
+ sessionID: sessionID,
69
+ })
70
+ ).toBe(
71
+ `https://custom-backend.example.com/api/v2/asset/abc123.pdf/${sessionID}`
72
+ );
73
+ });
74
+
75
+ it('appends session ID when resource host matches apiURL host', () => {
76
+ expect(
77
+ getResourceUrl({
78
+ resourceURI: 'https://my-api.example.com/files/doc.pdf',
79
+ sessionID: sessionID,
80
+ apiURL: 'https://my-api.example.com/api/v2',
81
+ })
82
+ ).toBe(`https://my-api.example.com/files/doc.pdf/${sessionID}`);
83
+ });
84
+
85
+
50
86
  it('Get correct URL for old memoriai/memory media', async () => {
51
87
  expect(
52
88
  getResourceUrl({
@@ -6,6 +6,38 @@ export interface ResourceURLParams {
6
6
  apiURL?: string;
7
7
  tenantID?: string;
8
8
  }
9
+
10
+ /**
11
+ * Whether this HTTP(S) URL should get a session ID appended for auth.
12
+ * Matches Memori asset API paths on any host, known Memori/AIsuru hosts,
13
+ * and the configured API host — instead of a hard hostname allowlist only.
14
+ */
15
+ const shouldAppendSessionId = (
16
+ resourceURI: string,
17
+ apiURL?: string
18
+ ): boolean => {
19
+ const url = new URL(resourceURI);
20
+ const { hostname, pathname } = url;
21
+
22
+ // Memori asset endpoints require session auth regardless of host
23
+ // (e.g. backend-ws-bologna.aisuru.ai/api/v2/asset/…)
24
+ if (/\/api\/v\d+\/asset\//i.test(pathname)) {
25
+ return true;
26
+ }
27
+
28
+ if (apiURL) {
29
+ try {
30
+ if (new URL(apiURL).hostname === hostname) {
31
+ return true;
32
+ }
33
+ } catch {
34
+ // ignore invalid apiURL
35
+ }
36
+ }
37
+
38
+ return false;
39
+ };
40
+
9
41
  export const getResourceUrl = ({
10
42
  type,
11
43
  resourceURI,
@@ -30,21 +62,16 @@ export const getResourceUrl = ({
30
62
  } else if (
31
63
  (resourceURI.startsWith('https://') ||
32
64
  resourceURI.startsWith('http://')) &&
33
- (new URL(resourceURI).hostname.includes('memori.ai') ||
34
- new URL(resourceURI).hostname.includes('aclambda.online') ||
35
- new URL(resourceURI).hostname.includes('localhost'))
65
+ shouldAppendSessionId(resourceURI, apiURL)
36
66
  ) {
37
- return `${resourceURI}${
38
- resourceURI.endsWith('/') || !sessionID ? '' : '/'
39
- }${sessionID || ''}`;
67
+ return `${resourceURI}${resourceURI.endsWith('/') || !sessionID ? '' : '/'
68
+ }${sessionID || ''}`;
40
69
  } else if (resourceURI.startsWith('cloud://')) {
41
- return `${
42
- apiURL?.replace(/v2/, 'v1') || ''
43
- }/CloudAsset/${resourceURI.replace('cloud://', '')}`;
70
+ return `${apiURL?.replace(/v2/, 'v1') || ''
71
+ }/CloudAsset/${resourceURI.replace('cloud://', '')}`;
44
72
  } else if (resourceURI.startsWith('guid://')) {
45
- return `${
46
- apiURL?.replace(/v2/, 'v1') || ''
47
- }/GuidAsset/${resourceURI.replace('guid://', '')}`;
73
+ return `${apiURL?.replace(/v2/, 'v1') || ''
74
+ }/GuidAsset/${resourceURI.replace('guid://', '')}`;
48
75
  } else {
49
76
  return resourceURI || defaultUri;
50
77
  }
package/src/index.tsx CHANGED
@@ -13,7 +13,7 @@ import MemoriWidget, {
13
13
  Props as WidgetProps,
14
14
  } from './components/MemoriWidget/MemoriWidget';
15
15
  import { VisemeProvider } from './context/visemeContext';
16
- import { AlertProvider, AlertViewport } from '@memori.ai/ui';
16
+ import { AlertProvider } from '@memori.ai/ui';
17
17
  import { safeParseJSON } from './helpers/utils';
18
18
 
19
19
  import i18n from './i18n';
@@ -442,10 +442,6 @@ const Memori: React.FC<Props> = ({
442
442
  <AlertProvider defaultDuration={5000}>
443
443
  <VisemeProvider>
444
444
  <ArtifactProvider>
445
- <AlertViewport
446
- placement="top-end"
447
- style={{ zIndex: 10002, top: 30, right: 30, position: 'fixed' }}
448
- />
449
445
  {memori ? (
450
446
  <MemoriWidget
451
447
  // General props
package/src/styles.css CHANGED
@@ -231,17 +231,30 @@
231
231
  Fixed width — do not set left+right together (that stretches full-bleed). */
232
232
  .memori-alert-viewport.memori-alert-viewport--top-end {
233
233
  top: 4.75rem !important;
234
+ right: 1.5rem !important;
234
235
  left: auto !important;
235
236
  width: 300px !important;
236
237
  max-width: calc(100vw - 2 * var(--memori-spacing-sm));
237
238
  }
238
239
 
240
+ /* Dark theme: alert copy must stay light (viewport may sit outside themed tokens). */
241
+ .memori-widget[data-theme='dark'] .memori-alert__title,
242
+ .memori-widget[data-theme='dark'] .memori-alert__description,
243
+ .memori-widget[data-theme='dark'] .memori-alert__close,
244
+ [data-theme='dark'] .memori-widget .memori-alert__title,
245
+ [data-theme='dark'] .memori-widget .memori-alert__description,
246
+ [data-theme='dark'] .memori-widget .memori-alert__close,
247
+ body:has(.memori-widget[data-theme='dark']) .memori-alert__title,
248
+ body:has(.memori-widget[data-theme='dark']) .memori-alert__description,
249
+ body:has(.memori-widget[data-theme='dark']) .memori-alert__close,
250
+ body:has([data-theme='dark'] .memori-widget) .memori-alert__title,
251
+ body:has([data-theme='dark'] .memori-widget) .memori-alert__description,
252
+ body:has([data-theme='dark'] .memori-widget) .memori-alert__close {
253
+ color: #fff;
254
+ }
255
+
239
256
  @media (max-width: 768px) {
240
257
  .memori-alert-viewport.memori-alert-viewport--top-end {
241
- top: auto !important;
242
- right: var(--memori-spacing-sm) !important;
243
- bottom: calc(5.5rem + env(safe-area-inset-bottom, 0px)) !important;
244
- left: auto !important;
245
- width: min(300px, calc(100vw - 2 * var(--memori-spacing-sm))) !important;
258
+ display: none !important;
246
259
  }
247
260
  }
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  // This file is auto-generated. Do not edit manually.
2
- export const version = '9.0.0-alpha.10';
2
+ export const version = '9.0.0-alpha.13';