@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
package/esm/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "9.0.0-alpha.10";
1
+ export declare const version = "9.0.0-alpha.13";
package/esm/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '9.0.0-alpha.10';
1
+ export const version = '9.0.0-alpha.13';
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "9.0.0-alpha.10",
2
+ "version": "9.0.0-alpha.13",
3
3
  "name": "@memori.ai/memori-react",
4
4
  "author": "Memori Srl",
5
5
  "main": "dist/index.js",
@@ -308,7 +308,7 @@
308
308
  "@react-three/drei": "8.20.2",
309
309
  "@react-three/fiber": "7.0.25",
310
310
  "classnames": "2.5.1",
311
- "dompurify": "^3.4.12",
311
+ "dompurify": "^3.4.13",
312
312
  "ellipsed": "1.6.0",
313
313
  "i18next": "22.0.6",
314
314
  "katex": "^0.16.11",
@@ -2,16 +2,6 @@
2
2
 
3
3
  exports[`renders client 1`] = `
4
4
  <div>
5
- <div
6
- aria-atomic="false"
7
- aria-label="Notifications"
8
- aria-live="polite"
9
- aria-relevant="additions text"
10
- class="memori-alert-viewport memori-alert-viewport--top-end"
11
- role="region"
12
- style="z-index: 10002; top: 30px; right: 30px; position: fixed;"
13
- tabindex="-1"
14
- />
15
5
  <div
16
6
  style="display: flex; align-items: center; justify-content: center;"
17
7
  >
@@ -27,16 +17,6 @@ exports[`renders client 1`] = `
27
17
 
28
18
  exports[`renders client with all the props 1`] = `
29
19
  <div>
30
- <div
31
- aria-atomic="false"
32
- aria-label="Notifications"
33
- aria-live="polite"
34
- aria-relevant="additions text"
35
- class="memori-alert-viewport memori-alert-viewport--top-end"
36
- role="region"
37
- style="z-index: 10002; top: 30px; right: 30px; position: fixed;"
38
- tabindex="-1"
39
- />
40
20
  <div
41
21
  style="display: flex; align-items: center; justify-content: center;"
42
22
  >
@@ -52,16 +32,6 @@ exports[`renders client with all the props 1`] = `
52
32
 
53
33
  exports[`renders client with audio disabled 1`] = `
54
34
  <div>
55
- <div
56
- aria-atomic="false"
57
- aria-label="Notifications"
58
- aria-live="polite"
59
- aria-relevant="additions text"
60
- class="memori-alert-viewport memori-alert-viewport--top-end"
61
- role="region"
62
- style="z-index: 10002; top: 30px; right: 30px; position: fixed;"
63
- tabindex="-1"
64
- />
65
35
  <div
66
36
  style="display: flex; align-items: center; justify-content: center;"
67
37
  >
@@ -77,16 +47,6 @@ exports[`renders client with audio disabled 1`] = `
77
47
 
78
48
  exports[`renders client with whiteListedDomains on allowed domains 1`] = `
79
49
  <div>
80
- <div
81
- aria-atomic="false"
82
- aria-label="Notifications"
83
- aria-live="polite"
84
- aria-relevant="additions text"
85
- class="memori-alert-viewport memori-alert-viewport--top-end"
86
- role="region"
87
- style="z-index: 10002; top: 30px; right: 30px; position: fixed;"
88
- tabindex="-1"
89
- />
90
50
  <div
91
51
  style="display: flex; align-items: center; justify-content: center;"
92
52
  >
@@ -102,16 +62,6 @@ exports[`renders client with whiteListedDomains on allowed domains 1`] = `
102
62
 
103
63
  exports[`renders client with whiteListedDomains on not allowed domains 1`] = `
104
64
  <div>
105
- <div
106
- aria-atomic="false"
107
- aria-label="Notifications"
108
- aria-live="polite"
109
- aria-relevant="additions text"
110
- class="memori-alert-viewport memori-alert-viewport--top-end"
111
- role="region"
112
- style="z-index: 10002; top: 30px; right: 30px; position: fixed;"
113
- tabindex="-1"
114
- />
115
65
  <div
116
66
  style="display: flex; align-items: center; justify-content: center;"
117
67
  >
@@ -67,6 +67,25 @@
67
67
  /* mask-image: linear-gradient(transparent, black 5%, black 95%, transparent 100%); */
68
68
  overflow-y: auto;
69
69
  scroll-behavior: smooth;
70
+ scrollbar-color: color-mix(in oklch, var(--memori-neutral, #6b7280) 55%, transparent) transparent;
71
+ scrollbar-width: thin;
72
+ }
73
+
74
+ .memori-chat--content::-webkit-scrollbar {
75
+ width: 8px;
76
+ }
77
+
78
+ .memori-chat--content::-webkit-scrollbar-track {
79
+ background: transparent;
80
+ }
81
+
82
+ .memori-chat--content::-webkit-scrollbar-thumb {
83
+ border-radius: 999px;
84
+ background-color: color-mix(in oklch, var(--memori-neutral, #6b7280) 45%, transparent);
85
+ }
86
+
87
+ .memori-chat--content::-webkit-scrollbar-thumb:hover {
88
+ background-color: color-mix(in oklch, var(--memori-neutral, #6b7280) 60%, transparent);
70
89
  }
71
90
 
72
91
  /* Conversation-column overrides sit between base and layout-scoped rules. */
@@ -506,7 +506,7 @@ exports[`renders Chat unchanged 1`] = `
506
506
  >
507
507
  <a
508
508
  class="memori-media-item--link memori-media-item--document-link"
509
- href="https://memori.ai/131165be-9d1a-42fb-a3ce-e8f86d40c88f"
509
+ href="https://memori.ai"
510
510
  rel="noopener noreferrer"
511
511
  target="_blank"
512
512
  title="Link"
@@ -1494,7 +1494,7 @@ exports[`renders Chat with context vars unchanged 1`] = `
1494
1494
  >
1495
1495
  <a
1496
1496
  class="memori-media-item--link memori-media-item--document-link"
1497
- href="https://memori.ai/131165be-9d1a-42fb-a3ce-e8f86d40c88f"
1497
+ href="https://memori.ai"
1498
1498
  rel="noopener noreferrer"
1499
1499
  target="_blank"
1500
1500
  title="Link"
@@ -2476,7 +2476,7 @@ exports[`renders Chat with custom user avatar as react element unchanged 1`] = `
2476
2476
  >
2477
2477
  <a
2478
2478
  class="memori-media-item--link memori-media-item--document-link"
2479
- href="https://memori.ai/131165be-9d1a-42fb-a3ce-e8f86d40c88f"
2479
+ href="https://memori.ai"
2480
2480
  rel="noopener noreferrer"
2481
2481
  target="_blank"
2482
2482
  title="Link"
@@ -3414,7 +3414,7 @@ exports[`renders Chat with custom user avatar unchanged 1`] = `
3414
3414
  >
3415
3415
  <a
3416
3416
  class="memori-media-item--link memori-media-item--document-link"
3417
- href="https://memori.ai/131165be-9d1a-42fb-a3ce-e8f86d40c88f"
3417
+ href="https://memori.ai"
3418
3418
  rel="noopener noreferrer"
3419
3419
  target="_blank"
3420
3420
  title="Link"
@@ -4396,7 +4396,7 @@ exports[`renders Chat with dates unchanged 1`] = `
4396
4396
  >
4397
4397
  <a
4398
4398
  class="memori-media-item--link memori-media-item--document-link"
4399
- href="https://memori.ai/131165be-9d1a-42fb-a3ce-e8f86d40c88f"
4399
+ href="https://memori.ai"
4400
4400
  rel="noopener noreferrer"
4401
4401
  target="_blank"
4402
4402
  title="Link"
@@ -5394,7 +5394,7 @@ exports[`renders Chat with hints unchanged 1`] = `
5394
5394
  >
5395
5395
  <a
5396
5396
  class="memori-media-item--link memori-media-item--document-link"
5397
- href="https://memori.ai/131165be-9d1a-42fb-a3ce-e8f86d40c88f"
5397
+ href="https://memori.ai"
5398
5398
  rel="noopener noreferrer"
5399
5399
  target="_blank"
5400
5400
  title="Link"
@@ -6539,7 +6539,7 @@ exports[`renders Chat with media unchanged 1`] = `
6539
6539
  >
6540
6540
  <a
6541
6541
  class="memori-media-item--link memori-media-item--document-link"
6542
- href="https://memori.ai/en/131165be-9d1a-42fb-a3ce-e8f86d40c88f"
6542
+ href="https://memori.ai/en"
6543
6543
  rel="noopener noreferrer"
6544
6544
  target="_blank"
6545
6545
  title="Link Memori Srl"
@@ -7617,7 +7617,7 @@ exports[`renders Chat with memori typing unchanged 1`] = `
7617
7617
  >
7618
7618
  <a
7619
7619
  class="memori-media-item--link memori-media-item--document-link"
7620
- href="https://memori.ai/131165be-9d1a-42fb-a3ce-e8f86d40c88f"
7620
+ href="https://memori.ai"
7621
7621
  rel="noopener noreferrer"
7622
7622
  target="_blank"
7623
7623
  title="Link"
@@ -8628,7 +8628,7 @@ exports[`renders Chat with message consumption unchanged 1`] = `
8628
8628
  >
8629
8629
  <a
8630
8630
  class="memori-media-item--link memori-media-item--document-link"
8631
- href="https://memori.ai/131165be-9d1a-42fb-a3ce-e8f86d40c88f"
8631
+ href="https://memori.ai"
8632
8632
  rel="noopener noreferrer"
8633
8633
  target="_blank"
8634
8634
  title="Link"
@@ -9747,7 +9747,7 @@ exports[`renders Chat with user unchanged 1`] = `
9747
9747
  >
9748
9748
  <a
9749
9749
  class="memori-media-item--link memori-media-item--document-link"
9750
- href="https://memori.ai/131165be-9d1a-42fb-a3ce-e8f86d40c88f"
9750
+ href="https://memori.ai"
9751
9751
  rel="noopener noreferrer"
9752
9752
  target="_blank"
9753
9753
  title="Link"
@@ -483,4 +483,28 @@ it('renders ChatBubble with reasoning and output and markdown unchanged', () =>
483
483
  />
484
484
  );
485
485
  expect(container).toMatchSnapshot();
486
- });
486
+ });
487
+
488
+ it('uses the adjacent attachment link for document media', () => {
489
+ const attachmentUrl = 'https://assets.example.com/report.docx';
490
+ const { container } = render(
491
+ <ChatBubble
492
+ memori={memori}
493
+ tenant={tenant}
494
+ sessionID={sessionID}
495
+ message={{
496
+ fromUser: false,
497
+ initial: false,
498
+ text: [
499
+ '<document_attachment filename="report.docx" type="application/vnd.openxmlformats-officedocument.wordprocessingml.document">',
500
+ '</document_attachment>',
501
+ `<attachment_link>${attachmentUrl}</attachment_link>`,
502
+ ].join('\n'),
503
+ }}
504
+ />
505
+ );
506
+
507
+ expect(
508
+ container.querySelector(`a[href="${attachmentUrl}"]`)
509
+ ).toBeInTheDocument();
510
+ });
@@ -25,7 +25,11 @@ import FeedbackButtons from '../FeedbackButtons/FeedbackButtons';
25
25
  import { useTranslation } from 'react-i18next';
26
26
  import { Button } from '@memori.ai/ui';
27
27
  import WhyThisAnswer from '../WhyThisAnswer/WhyThisAnswer';
28
- import { stripHTML, stripOutputTags } from '../../helpers/utils';
28
+ import {
29
+ parseDocumentAttachmentsFromMessage,
30
+ stripHTML,
31
+ stripOutputTags,
32
+ } from '../../helpers/utils';
29
33
  import {
30
34
  renderMsg,
31
35
  sanitizeMsg,
@@ -454,32 +458,21 @@ const ChatBubble: React.FC<Props> = ({
454
458
  (m.mimeType === 'text/html' && !!m.url)
455
459
  )
456
460
  ) || []),
457
- ...(() => {
458
- const text = message.translatedText || message.text;
459
- const documentAttachmentRegex =
460
- /<document_attachment filename="([^"]+)" type="([^"]+)">([\s\S]*?)<\/document_attachment>/g;
461
- const attachments: (Medium & { type?: string })[] = [];
462
- let match;
463
- let attachmentIndex = 0;
464
-
465
- while ((match = documentAttachmentRegex.exec(text)) !== null) {
466
- const [, filename, type, content] = match;
467
- attachments.push({
468
- mediumID: `doc_${Date.now()}_${attachmentIndex}_${Math.random()
469
- .toString(36)
470
- .substr(2, 9)}`,
471
- url: '',
472
- mimeType: type,
473
- title: filename,
474
- content: content.trim(),
475
- properties: { isDocumentAttachment: true },
476
- type: 'document',
477
- });
478
- attachmentIndex++;
479
- }
480
-
481
- return attachments;
482
- })(),
461
+ ...parseDocumentAttachmentsFromMessage(
462
+ message.translatedText || message.text
463
+ ).map(
464
+ (attachment, attachmentIndex): Medium & { type?: string } => ({
465
+ mediumID: `doc_${Date.now()}_${attachmentIndex}_${Math.random()
466
+ .toString(36)
467
+ .substr(2, 9)}`,
468
+ url: attachment.url,
469
+ mimeType: attachment.type,
470
+ title: attachment.filename,
471
+ content: attachment.content,
472
+ properties: { isDocumentAttachment: true },
473
+ type: 'document',
474
+ })
475
+ ),
483
476
  ];
484
477
 
485
478
  const codeMediaWidgetMedia =
@@ -278,6 +278,15 @@
278
278
  color: inherit;
279
279
  }
280
280
 
281
+ /* Light hover surface (#f2eef5) — keep the icon black in dark mode for contrast */
282
+ .memori-widget[data-theme='dark'] .memori-chat-inputs--mic-btn:hover,
283
+ .memori-widget[data-theme='dark'] .memori-chat-inputs--mic-btn:hover svg,
284
+ .memori-widget[data-theme='dark'] .memori-chat-inputs--trailing .memori-chat-inputs--mic:hover,
285
+ .memori-widget[data-theme='dark'] .memori-chat-inputs--trailing .memori-chat-inputs--mic:hover .memori-button,
286
+ .memori-widget[data-theme='dark'] .memori-chat-inputs--trailing .memori-chat-inputs--mic:hover svg {
287
+ color: #000 !important;
288
+ }
289
+
281
290
  /* Send button — solid brand fill, high-contrast icon (all layouts) */
282
291
  .memori-chat-inputs--send-btn,
283
292
  .memori-chat-inputs--send-btn.memori-button {
@@ -360,41 +369,52 @@
360
369
  }
361
370
 
362
371
  .memori-chat-inputs--ai-note {
363
- max-width: var(--memori-conversation-max-width, 48rem);
372
+ max-width: 100%;
364
373
  margin: 0;
365
374
  background: transparent;
366
375
  color: color-mix(in srgb, var(--memori-text-color) 72%, transparent);
367
376
  font-size: 0.75rem;
368
377
  line-height: 1.3;
378
+ overflow-wrap: anywhere;
369
379
  text-align: left;
380
+ word-break: break-word;
370
381
  }
371
382
 
372
383
  .memori-conversation-footer {
384
+ position: relative;
373
385
  display: flex;
374
386
  width: 100%;
387
+ max-width: var(--memori-conversation-max-width, 48rem);
375
388
  box-sizing: border-box;
389
+ flex-shrink: 0;
390
+ flex-wrap: nowrap;
376
391
  align-items: center;
377
392
  justify-content: space-between;
378
393
  padding: var(--memori-spacing-sm) 0 0;
379
394
  border-top: 1px solid var(--memori-border-color);
380
395
  margin-top: var(--memori-spacing-sm);
396
+ margin-right: auto;
397
+ margin-left: auto;
381
398
  color: color-mix(in srgb, var(--memori-text-color) 72%, transparent);
382
399
  gap: var(--memori-spacing-md);
383
400
  }
384
401
 
385
402
  .memori-conversation-footer .memori-chat-inputs--ai-note {
403
+ overflow: hidden;
386
404
  min-width: 0;
387
405
  flex: 1 1 auto;
388
406
  margin: 0;
389
407
  text-align: left;
408
+ text-overflow: ellipsis;
409
+ white-space: nowrap;
390
410
  }
391
411
 
392
412
  .memori-conversation-footer .memori--powered-by {
393
- position: static;
413
+ position: static !important;
394
414
  z-index: auto;
395
415
  bottom: auto;
396
416
  left: auto;
397
- display: inline-flex;
417
+ display: inline-flex !important;
398
418
  flex-shrink: 0;
399
419
  padding: 0;
400
420
  border-radius: 0;
@@ -402,6 +422,7 @@
402
422
  background: transparent;
403
423
  color: inherit;
404
424
  transform: none;
425
+ white-space: nowrap;
405
426
  }
406
427
 
407
428
  .memori-conversation-footer .memori--powered-by-icon {
@@ -501,6 +522,59 @@
501
522
  color: color-mix(in srgb, var(--memori-text-color) 72%, transparent);
502
523
  }
503
524
 
525
+ /* Keep disclaimer + brand on the same axis as the input pill */
526
+ .memori-widget.memori-layout-fullpage .memori-conversation-footer,
527
+ .memori-widget.memori-layout-zoomed_full_body .memori-conversation-footer {
528
+ max-width: 100%;
529
+ }
530
+
531
+ /* FULLPAGE + ZOOMED: border-top only after chat has started (under ChatInputs).
532
+ Start-panel footer is a direct child of the conversation column. */
533
+ .memori-widget.memori-layout-fullpage
534
+ .memori-conversation-column
535
+ > .memori-conversation-footer,
536
+ .memori-widget.memori-layout-zoomed_full_body
537
+ .memori-conversation-column
538
+ > .memori-conversation-footer {
539
+ border-top: none;
540
+ }
541
+
542
+ .memori-widget.memori-layout-fullpage
543
+ .memori-chat-inputs-wrapper
544
+ > .memori-conversation-footer,
545
+ .memori-widget.memori-layout-zoomed_full_body
546
+ .memori-chat-inputs-wrapper
547
+ > .memori-conversation-footer {
548
+ border-top: 1px solid var(--memori-border-color);
549
+ }
550
+
551
+ @media (max-width: 768px) {
552
+ .memori-conversation-footer,
553
+ .memori-widget.memori-layout-fullpage
554
+ .memori-chat-inputs-wrapper
555
+ > .memori-conversation-footer,
556
+ .memori-widget.memori-layout-zoomed_full_body
557
+ .memori-chat-inputs-wrapper
558
+ > .memori-conversation-footer {
559
+ justify-content: center;
560
+ border-top: none;
561
+ gap: 0;
562
+ }
563
+
564
+ .memori-conversation-footer .memori--powered-by,
565
+ .memori-widget.memori-layout-chat .memori-conversation-footer > .memori--powered-by {
566
+ display: none !important;
567
+ }
568
+
569
+ .memori-conversation-footer .memori-chat-inputs--ai-note {
570
+ overflow: visible;
571
+ flex: 0 1 auto;
572
+ text-align: center;
573
+ text-overflow: unset;
574
+ white-space: normal;
575
+ }
576
+ }
577
+
504
578
  /* =============================================================================
505
579
  HIDDEN_CHAT + WEBSITE_ASSISTANT + CHAT — bottom-anchored white pill
506
580
  ============================================================================= */
@@ -102,9 +102,10 @@ textarea.memori-chat-textarea--input {
102
102
  font-size: 14.5px;
103
103
  line-height: var(--memori-text-line-normal);
104
104
  outline: none;
105
+ -ms-overflow-style: none; /* IE/Edge */
105
106
  overflow-y: auto;
106
107
  resize: none;
107
- scrollbar-width: thin;
108
+ scrollbar-width: none; /* Firefox */
108
109
  transition: height 0.2s ease-in-out;
109
110
  }
110
111
 
@@ -114,22 +115,10 @@ textarea.memori-chat-textarea--input::placeholder {
114
115
  opacity: 1;
115
116
  }
116
117
 
117
- /* Scrollbar styling */
118
+ /* Hide vertical scrollbar (scroll still works) */
118
119
  textarea.memori-chat-textarea--input::-webkit-scrollbar {
119
- width: 6px;
120
- }
121
-
122
- textarea.memori-chat-textarea--input::-webkit-scrollbar-track {
123
- background: transparent;
124
- }
125
-
126
- textarea.memori-chat-textarea--input::-webkit-scrollbar-thumb {
127
- border-radius: var(--memori-radius-box);
128
- background: rgba(0, 0, 0, 0.2);
129
- }
130
-
131
- textarea.memori-chat-textarea--input::-webkit-scrollbar-thumb:hover {
132
- background: rgba(0, 0, 0, 0.3);
120
+ display: none;
121
+ width: 0;
133
122
  }
134
123
 
135
124
  /* Responsive adjustments for textarea input */
@@ -195,7 +184,6 @@ button.memori-chat-textarea--expand-button:focus {
195
184
 
196
185
  [data-theme='dark'] textarea.memori-chat-textarea--input {
197
186
  color: var(--memori-text-color, rgba(255, 255, 255, 0.92));
198
- scrollbar-color: rgba(255, 255, 255, 0.25) transparent;
199
187
  }
200
188
 
201
189
  [data-theme='dark'] textarea.memori-chat-textarea--input::placeholder {
@@ -222,14 +210,6 @@ button.memori-chat-textarea--expand-button:focus {
222
210
  color: #7d7a86;
223
211
  }
224
212
 
225
- [data-theme='dark'] textarea.memori-chat-textarea--input::-webkit-scrollbar-thumb {
226
- background: rgba(255, 255, 255, 0.25);
227
- }
228
-
229
- [data-theme='dark'] textarea.memori-chat-textarea--input::-webkit-scrollbar-thumb:hover {
230
- background: rgba(255, 255, 255, 0.4);
231
- }
232
-
233
213
  [data-theme='dark'] button.memori-chat-textarea--expand-button {
234
214
  color: var(--memori-text-color, rgba(255, 255, 255, 0.85));
235
215
  }
@@ -182,7 +182,7 @@ const DrawerModeDemo: React.FC = () => (
182
182
  message={htmlArtifactMessage}
183
183
  />
184
184
  </div>
185
- <div style={{ width: '46%', minWidth: 360 }}>
185
+ <div style={{ width: '55%', minWidth: 360 }}>
186
186
  <ArtifactDrawer isLayoutColumn />
187
187
  </div>
188
188
  </div>
@@ -23,10 +23,13 @@
23
23
  .memori-artifact-action-icon-fullscreen {
24
24
  width: 16px;
25
25
  height: 16px;
26
+ color: inherit;
27
+ fill: none;
28
+ stroke: currentColor;
26
29
  }
27
30
 
28
31
  .memori-artifact-action-icon {
29
- fill: #000;
32
+ color: var(--memori-text-color);
30
33
  }
31
34
 
32
35
  .memori-artifact-action-btn:disabled {
@@ -122,7 +125,9 @@
122
125
  /* Remove unused styles */
123
126
 
124
127
  .memori-artifact-action-icon-fullscreen {
125
- fill: #fff;
128
+ color: #fff;
129
+ fill: none;
130
+ stroke: currentColor;
126
131
  }
127
132
 
128
133
  /* Animation for Copy Feedback */
@@ -27,11 +27,15 @@
27
27
  position: relative;
28
28
  display: inline-flex;
29
29
  overflow: hidden;
30
- min-height: 48px;
30
+ width: auto;
31
+ min-width: 38px;
32
+ height: 38px;
33
+ min-height: 38px;
31
34
  align-items: center;
32
- padding: var(--memori-spacing-sm) var(--memori-spacing-md);
33
- border: 1px solid var(--memori-copy-border);
34
- border-radius: 0.5rem;
35
+ padding: 8px 12px;
36
+ border: 1px solid color-mix(in srgb, var(--memori-text-color, #111827) 16%, transparent);
37
+ border-radius: var(--memori-radius-box, 8px);
38
+ background: transparent;
35
39
  border-bottom-right-radius: 0px;
36
40
  border-top-right-radius: 0px;
37
41
  color: var(--memori-text-color);
@@ -40,7 +44,7 @@
40
44
  font-weight: var(--memori-text-weight-medium);
41
45
  gap: var(--memori-spacing-sm);
42
46
  line-height: 1.4;
43
- transition: all 0.2s ease;
47
+ transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
44
48
  }
45
49
 
46
50
  .memori-copy-button:disabled {
@@ -54,12 +58,13 @@
54
58
  }
55
59
 
56
60
  .memori-copy-button:hover:not(:disabled) {
57
- border-color: color-mix(in oklch, var(--memori-primary) 28%, var(--memori-border-color));
61
+ border-color: color-mix(in srgb, var(--memori-text-color, #111827) 16%, transparent);
62
+ background: color-mix(in srgb, var(--memori-text-color, #111827) 8%, transparent);
58
63
  }
59
64
 
60
65
  .memori-copy-button:active:not(:disabled) {
61
- border-color: color-mix(in oklch, var(--memori-primary) 40%, var(--memori-border-color));
62
- background: var(--memori-copy-surface-pressed);
66
+ border-color: color-mix(in srgb, var(--memori-text-color, #111827) 22%, transparent);
67
+ background: color-mix(in srgb, var(--memori-text-color, #111827) 12%, transparent);
63
68
  }
64
69
 
65
70
  .memori-copy-button--success {
@@ -87,12 +92,16 @@
87
92
  position: relative;
88
93
  display: inline-flex;
89
94
  overflow: hidden;
90
- min-height: 48px;
95
+ width: 38px;
96
+ min-width: 38px;
97
+ height: 38px;
98
+ min-height: 38px;
91
99
  align-items: center;
92
- padding: var(--memori-spacing-sm) var(--memori-spacing-md);
93
- padding-right: calc(var(--memori-spacing-sm) + var(--memori-spacing-xs));
94
- border: 1px solid var(--memori-copy-border);
95
- border-radius: 0.5rem;
100
+ justify-content: center;
101
+ padding: 8px;
102
+ border: 1px solid color-mix(in srgb, var(--memori-text-color, #111827) 16%, transparent);
103
+ border-radius: var(--memori-radius-box, 8px);
104
+ background: transparent;
96
105
  border-bottom-left-radius: 0px !important;
97
106
  border-top-left-radius: 0px !important;
98
107
  color: var(--memori-text-color);
@@ -101,7 +110,12 @@
101
110
  font-weight: var(--memori-text-weight-medium);
102
111
  gap: var(--memori-spacing-sm);
103
112
  line-height: 1.4;
104
- transition: all 0.2s ease;
113
+ transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
114
+ }
115
+
116
+ .memori-copy-button--dropdown:hover:not(:disabled) {
117
+ border-color: color-mix(in srgb, var(--memori-text-color, #111827) 16%, transparent);
118
+ background: color-mix(in srgb, var(--memori-text-color, #111827) 8%, transparent);
105
119
  }
106
120
 
107
121
  /* Button Icons */
@@ -440,7 +454,9 @@
440
454
 
441
455
  .memori-copy-button,
442
456
  .memori-copy-button--dropdown {
443
- padding: calc(var(--memori-spacing-xs) + 2px) calc(var(--memori-spacing-sm) + var(--memori-spacing-xs));
457
+ height: 38px;
458
+ min-height: 38px;
459
+ padding: 8px;
444
460
  font-size: 13px;
445
461
  }
446
462