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

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 (268) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/dist/components/AgeVerificationModal/AgeVerificationModal.js +5 -2
  3. package/dist/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
  4. package/dist/components/Avatar/Avatar.js +5 -10
  5. package/dist/components/Avatar/Avatar.js.map +1 -1
  6. package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js +8 -1
  7. package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js.map +1 -1
  8. package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js +1 -1
  9. package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js.map +1 -1
  10. package/dist/components/Avatar/AvatarView/AvatarComponent/constants.d.ts +2 -0
  11. package/dist/components/Avatar/AvatarView/AvatarComponent/constants.js +14 -5
  12. package/dist/components/Avatar/AvatarView/AvatarComponent/constants.js.map +1 -1
  13. package/dist/components/ChatBubble/ChatBubble.js +22 -16
  14. package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
  15. package/dist/components/CompletionProviderStatus/CompletionProviderStatus.js +6 -3
  16. package/dist/components/CompletionProviderStatus/CompletionProviderStatus.js.map +1 -1
  17. package/dist/components/DateSelector/DateSelector.d.ts +2 -1
  18. package/dist/components/DateSelector/DateSelector.js +17 -7
  19. package/dist/components/DateSelector/DateSelector.js.map +1 -1
  20. package/dist/components/FilePreview/FilePreview.js +22 -5
  21. package/dist/components/FilePreview/FilePreview.js.map +1 -1
  22. package/dist/components/Header/ChatConsumptionDropdown.js +1 -1
  23. package/dist/components/Header/ChatConsumptionDropdown.js.map +1 -1
  24. package/dist/components/Header/Header.css +2 -1
  25. package/dist/components/Header/Header.js +1 -1
  26. package/dist/components/Header/Header.js.map +1 -1
  27. package/dist/components/MediaWidget/MediaItemWidget.js +14 -12
  28. package/dist/components/MediaWidget/MediaItemWidget.js.map +1 -1
  29. package/dist/components/MediaWidget/MediaItemWidget.utils.d.ts +3 -2
  30. package/dist/components/MediaWidget/MediaItemWidget.utils.js +28 -6
  31. package/dist/components/MediaWidget/MediaItemWidget.utils.js.map +1 -1
  32. package/dist/components/MediaWidget/MediaPreviewModal.js +6 -7
  33. package/dist/components/MediaWidget/MediaPreviewModal.js.map +1 -1
  34. package/dist/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +5 -4
  35. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +90 -38
  36. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.d.ts +1 -0
  37. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +14 -9
  38. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  39. package/dist/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js +2 -2
  40. package/dist/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js.map +1 -1
  41. package/dist/components/MemoriWidget/MemoriWidget.js +632 -280
  42. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  43. package/dist/components/StartPanel/StartPanel.js +10 -5
  44. package/dist/components/StartPanel/StartPanel.js.map +1 -1
  45. package/dist/components/UploadButton/UploadButton.js +21 -5
  46. package/dist/components/UploadButton/UploadButton.js.map +1 -1
  47. package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js +123 -59
  48. package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
  49. package/dist/components/layouts/Chat.js +25 -30
  50. package/dist/components/layouts/Chat.js.map +1 -1
  51. package/dist/components/layouts/FullPage.js +5 -8
  52. package/dist/components/layouts/FullPage.js.map +1 -1
  53. package/dist/components/layouts/HiddenChat.js +2 -1
  54. package/dist/components/layouts/HiddenChat.js.map +1 -1
  55. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js +5 -1
  56. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
  57. package/dist/components/layouts/WebsiteAssistant/website-assistant.css +3 -4
  58. package/dist/components/layouts/ZoomedFullBody.js +4 -7
  59. package/dist/components/layouts/ZoomedFullBody.js.map +1 -1
  60. package/dist/components/layouts/chat.css +19 -31
  61. package/dist/components/layouts/fullpage.css +52 -19
  62. package/dist/components/layouts/zoomed-full-body.css +40 -1
  63. package/dist/helpers/constants.d.ts +3 -0
  64. package/dist/helpers/constants.js +27 -1
  65. package/dist/helpers/constants.js.map +1 -1
  66. package/dist/helpers/credits.d.ts +5 -2
  67. package/dist/helpers/credits.js +5 -1
  68. package/dist/helpers/credits.js.map +1 -1
  69. package/dist/helpers/message.d.ts +1 -1
  70. package/dist/helpers/message.js +4 -4
  71. package/dist/helpers/message.js.map +1 -1
  72. package/dist/helpers/nats/getNatsConfig.d.ts +9 -0
  73. package/dist/helpers/nats/getNatsConfig.js +65 -0
  74. package/dist/helpers/nats/getNatsConfig.js.map +1 -0
  75. package/dist/helpers/nats/isSessionExpiredError.d.ts +3 -0
  76. package/dist/helpers/nats/isSessionExpiredError.js +36 -0
  77. package/dist/helpers/nats/isSessionExpiredError.js.map +1 -0
  78. package/dist/helpers/nats/useNats.d.ts +12 -0
  79. package/dist/helpers/nats/useNats.js +75 -0
  80. package/dist/helpers/nats/useNats.js.map +1 -0
  81. package/dist/helpers/nats/useNatsSession.d.ts +28 -0
  82. package/dist/helpers/nats/useNatsSession.js +212 -0
  83. package/dist/helpers/nats/useNatsSession.js.map +1 -0
  84. package/dist/helpers/usePressTooltip.d.ts +13 -0
  85. package/dist/helpers/usePressTooltip.js +23 -0
  86. package/dist/helpers/usePressTooltip.js.map +1 -0
  87. package/dist/helpers/utils.d.ts +21 -0
  88. package/dist/helpers/utils.js +75 -4
  89. package/dist/helpers/utils.js.map +1 -1
  90. package/dist/locales/de.json +1 -0
  91. package/dist/locales/en.json +1 -0
  92. package/dist/locales/es.json +1 -0
  93. package/dist/locales/fr.json +1 -0
  94. package/dist/locales/it.json +1 -0
  95. package/dist/styles.css +1 -1
  96. package/dist/types/integration.d.ts +3 -0
  97. package/dist/types/integration.js +16 -0
  98. package/dist/types/integration.js.map +1 -0
  99. package/dist/version.d.ts +1 -1
  100. package/dist/version.js +1 -1
  101. package/esm/components/AgeVerificationModal/AgeVerificationModal.js +5 -2
  102. package/esm/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
  103. package/esm/components/Avatar/Avatar.js +5 -10
  104. package/esm/components/Avatar/Avatar.js.map +1 -1
  105. package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js +9 -2
  106. package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js.map +1 -1
  107. package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js +2 -2
  108. package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js.map +1 -1
  109. package/esm/components/Avatar/AvatarView/AvatarComponent/constants.d.ts +2 -0
  110. package/esm/components/Avatar/AvatarView/AvatarComponent/constants.js +13 -4
  111. package/esm/components/Avatar/AvatarView/AvatarComponent/constants.js.map +1 -1
  112. package/esm/components/ChatBubble/ChatBubble.js +22 -16
  113. package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
  114. package/esm/components/CompletionProviderStatus/CompletionProviderStatus.js +6 -3
  115. package/esm/components/CompletionProviderStatus/CompletionProviderStatus.js.map +1 -1
  116. package/esm/components/DateSelector/DateSelector.d.ts +2 -1
  117. package/esm/components/DateSelector/DateSelector.js +17 -7
  118. package/esm/components/DateSelector/DateSelector.js.map +1 -1
  119. package/esm/components/FilePreview/FilePreview.js +24 -7
  120. package/esm/components/FilePreview/FilePreview.js.map +1 -1
  121. package/esm/components/Header/ChatConsumptionDropdown.js +1 -1
  122. package/esm/components/Header/ChatConsumptionDropdown.js.map +1 -1
  123. package/esm/components/Header/Header.css +2 -1
  124. package/esm/components/Header/Header.js +1 -1
  125. package/esm/components/Header/Header.js.map +1 -1
  126. package/esm/components/MediaWidget/MediaItemWidget.js +16 -14
  127. package/esm/components/MediaWidget/MediaItemWidget.js.map +1 -1
  128. package/esm/components/MediaWidget/MediaItemWidget.utils.d.ts +3 -2
  129. package/esm/components/MediaWidget/MediaItemWidget.utils.js +27 -6
  130. package/esm/components/MediaWidget/MediaItemWidget.utils.js.map +1 -1
  131. package/esm/components/MediaWidget/MediaPreviewModal.js +6 -7
  132. package/esm/components/MediaWidget/MediaPreviewModal.js.map +1 -1
  133. package/esm/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +5 -4
  134. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +90 -38
  135. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.d.ts +1 -0
  136. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +14 -9
  137. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  138. package/esm/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js +2 -2
  139. package/esm/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.js.map +1 -1
  140. package/esm/components/MemoriWidget/MemoriWidget.js +632 -280
  141. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  142. package/esm/components/StartPanel/StartPanel.js +10 -5
  143. package/esm/components/StartPanel/StartPanel.js.map +1 -1
  144. package/esm/components/UploadButton/UploadButton.js +21 -5
  145. package/esm/components/UploadButton/UploadButton.js.map +1 -1
  146. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js +123 -59
  147. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
  148. package/esm/components/layouts/Chat.js +25 -30
  149. package/esm/components/layouts/Chat.js.map +1 -1
  150. package/esm/components/layouts/FullPage.js +5 -8
  151. package/esm/components/layouts/FullPage.js.map +1 -1
  152. package/esm/components/layouts/HiddenChat.js +2 -1
  153. package/esm/components/layouts/HiddenChat.js.map +1 -1
  154. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js +5 -1
  155. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
  156. package/esm/components/layouts/WebsiteAssistant/website-assistant.css +3 -4
  157. package/esm/components/layouts/ZoomedFullBody.js +4 -7
  158. package/esm/components/layouts/ZoomedFullBody.js.map +1 -1
  159. package/esm/components/layouts/chat.css +19 -31
  160. package/esm/components/layouts/fullpage.css +52 -19
  161. package/esm/components/layouts/zoomed-full-body.css +40 -1
  162. package/esm/helpers/constants.d.ts +3 -0
  163. package/esm/helpers/constants.js +26 -0
  164. package/esm/helpers/constants.js.map +1 -1
  165. package/esm/helpers/credits.d.ts +5 -2
  166. package/esm/helpers/credits.js +5 -1
  167. package/esm/helpers/credits.js.map +1 -1
  168. package/esm/helpers/message.d.ts +1 -1
  169. package/esm/helpers/message.js +2 -2
  170. package/esm/helpers/message.js.map +1 -1
  171. package/esm/helpers/nats/getNatsConfig.d.ts +9 -0
  172. package/esm/helpers/nats/getNatsConfig.js +61 -0
  173. package/esm/helpers/nats/getNatsConfig.js.map +1 -0
  174. package/esm/helpers/nats/isSessionExpiredError.d.ts +3 -0
  175. package/esm/helpers/nats/isSessionExpiredError.js +32 -0
  176. package/esm/helpers/nats/isSessionExpiredError.js.map +1 -0
  177. package/esm/helpers/nats/useNats.d.ts +12 -0
  178. package/esm/helpers/nats/useNats.js +72 -0
  179. package/esm/helpers/nats/useNats.js.map +1 -0
  180. package/esm/helpers/nats/useNatsSession.d.ts +28 -0
  181. package/esm/helpers/nats/useNatsSession.js +208 -0
  182. package/esm/helpers/nats/useNatsSession.js.map +1 -0
  183. package/esm/helpers/usePressTooltip.d.ts +13 -0
  184. package/esm/helpers/usePressTooltip.js +20 -0
  185. package/esm/helpers/usePressTooltip.js.map +1 -0
  186. package/esm/helpers/utils.d.ts +21 -0
  187. package/esm/helpers/utils.js +68 -3
  188. package/esm/helpers/utils.js.map +1 -1
  189. package/esm/locales/de.json +1 -0
  190. package/esm/locales/en.json +1 -0
  191. package/esm/locales/es.json +1 -0
  192. package/esm/locales/fr.json +1 -0
  193. package/esm/locales/it.json +1 -0
  194. package/esm/styles.css +1 -1
  195. package/esm/types/integration.d.ts +3 -0
  196. package/esm/types/integration.js +11 -0
  197. package/esm/types/integration.js.map +1 -0
  198. package/esm/version.d.ts +1 -1
  199. package/esm/version.js +1 -1
  200. package/package.json +6 -4
  201. package/src/components/AgeVerificationModal/AgeVerificationModal.tsx +6 -1
  202. package/src/components/Avatar/Avatar.stories.tsx +45 -28
  203. package/src/components/Avatar/Avatar.test.tsx +54 -0
  204. package/src/components/Avatar/Avatar.tsx +8 -12
  205. package/src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.tsx +12 -5
  206. package/src/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.ts +2 -1
  207. package/src/components/Avatar/AvatarView/AvatarComponent/constants.ts +16 -4
  208. package/src/components/Avatar/__snapshots__/Avatar.test.tsx.snap +164 -0
  209. package/src/components/ChatBubble/ChatBubble.tsx +41 -12
  210. package/src/components/CompletionProviderStatus/CompletionProviderStatus.tsx +8 -4
  211. package/src/components/DateSelector/DateSelector.stories.tsx +11 -2
  212. package/src/components/DateSelector/DateSelector.tsx +28 -9
  213. package/src/components/FilePreview/FilePreview.tsx +28 -7
  214. package/src/components/Header/ChatConsumptionDropdown.tsx +5 -1
  215. package/src/components/Header/Header.css +2 -1
  216. package/src/components/Header/Header.tsx +1 -0
  217. package/src/components/MediaWidget/MediaItemWidget.tsx +26 -13
  218. package/src/components/MediaWidget/MediaItemWidget.utils.test.ts +45 -2
  219. package/src/components/MediaWidget/MediaItemWidget.utils.ts +39 -6
  220. package/src/components/MediaWidget/MediaPreviewModal.tsx +9 -7
  221. package/src/components/MemoriArtifactSystem/ArtifactDrawer.stories.tsx +218 -2252
  222. package/src/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +5 -4
  223. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.css +90 -38
  224. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +31 -14
  225. package/src/components/MemoriArtifactSystem/components/ArtifactHandler/ArtifactHandler.tsx +4 -3
  226. package/src/components/MemoriWidget/MemoriWidget.tsx +785 -331
  227. package/src/components/StartPanel/StartPanel.stories.tsx +22 -0
  228. package/src/components/StartPanel/StartPanel.test.tsx +64 -1
  229. package/src/components/StartPanel/StartPanel.tsx +26 -3
  230. package/src/components/StartPanel/__snapshots__/StartPanel.test.tsx.snap +261 -0
  231. package/src/components/UploadButton/UploadButton.tsx +30 -11
  232. package/src/components/UploadButton/UploadDocuments/UploadDocuments.tsx +148 -61
  233. package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +2 -2
  234. package/src/components/layouts/Chat.tsx +16 -19
  235. package/src/components/layouts/FullPage.tsx +32 -25
  236. package/src/components/layouts/HiddenChat.tsx +4 -0
  237. package/src/components/layouts/WebsiteAssistant/WebsiteAssistant.tsx +8 -0
  238. package/src/components/layouts/WebsiteAssistant/website-assistant.css +3 -4
  239. package/src/components/layouts/ZoomedFullBody.tsx +30 -24
  240. package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +6 -3
  241. package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +824 -810
  242. package/src/components/layouts/__snapshots__/ZoomedFullBody.test.tsx.snap +280 -273
  243. package/src/components/layouts/chat.css +19 -31
  244. package/src/components/layouts/fullpage.css +52 -19
  245. package/src/components/layouts/layouts.stories.tsx +131 -12
  246. package/src/components/layouts/zoomed-full-body.css +40 -1
  247. package/src/helpers/constants.ts +32 -1
  248. package/src/helpers/credits.ts +16 -1
  249. package/src/helpers/message.test.ts +28 -1
  250. package/src/helpers/message.ts +4 -4
  251. package/src/helpers/nats/getNatsConfig.ts +145 -0
  252. package/src/helpers/nats/isSessionExpiredError.test.ts +38 -0
  253. package/src/helpers/nats/isSessionExpiredError.ts +51 -0
  254. package/src/helpers/nats/useNats.ts +124 -0
  255. package/src/helpers/nats/useNatsSession.ts +394 -0
  256. package/src/helpers/usePressTooltip.ts +29 -0
  257. package/src/helpers/utils.test.ts +162 -0
  258. package/src/helpers/utils.ts +108 -3
  259. package/src/index.stories.tsx +32 -0
  260. package/src/locales/de.json +1 -0
  261. package/src/locales/en.json +1 -0
  262. package/src/locales/es.json +1 -0
  263. package/src/locales/fr.json +1 -0
  264. package/src/locales/it.json +1 -0
  265. package/src/styles.css +4 -7
  266. package/src/types/integration.test.ts +32 -0
  267. package/src/types/integration.ts +31 -0
  268. package/src/version.ts +1 -1
@@ -63,14 +63,14 @@
63
63
  }
64
64
 
65
65
  .memori-copy-button--success {
66
- border-color: #22c55e;
67
- background: color-mix(in oklch, var(--memori-main-background) 82%, #22c55e 18%);
66
+ border-color: var(--memori-success-color);
67
+ background: color-mix(in oklch, var(--memori-main-background) 82%, var(--memori-success-color) 18%);
68
68
  color: var(--memori-text-color);
69
69
  }
70
70
 
71
71
  .memori-copy-button--error {
72
- border-color: #ef4444;
73
- background: color-mix(in oklch, var(--memori-main-background) 84%, #ef4444 16%);
72
+ border-color: var(--memori-error-color);
73
+ background: color-mix(in oklch, var(--memori-main-background) 84%, var(--memori-error-color) 16%);
74
74
  color: var(--memori-text-color);
75
75
  }
76
76
 
@@ -180,6 +180,7 @@
180
180
  min-width: 280px;
181
181
  max-width: 320px;
182
182
  border: 1px solid var(--memori-copy-border);
183
+ border: var(--memori-border) solid var(--memori-border-color);
183
184
  border-radius: 0.5rem;
184
185
  margin-top: var(--memori-spacing-xs);
185
186
  background: var(--memori-secondary-background);
@@ -21,8 +21,23 @@
21
21
  .memori-artifact-panel-drawer {
22
22
  --memori-drawer--width-lg: 46%;
23
23
  /* background-color: var(--memori-main-background); */
24
- /* Ensure drawer doesn't block left side chat interaction */
25
- pointer-events: none;
24
+ }
25
+
26
+ /* Hide the Drawer backdrop so the chat remains fully visible on the left
27
+ (applies to the mobile/legacy Drawer-overlay path) */
28
+ body:has(.memori-artifact-panel-drawer) .memori-drawer__backdrop,
29
+ body:has(.memori-artifact-panel-drawer-fullscreen) .memori-drawer__backdrop {
30
+ display: none !important;
31
+ }
32
+
33
+ /* Inline layout column — renders inside the flex grid, not as a fixed overlay */
34
+ .memori-artifact-layout-column {
35
+ display: flex;
36
+ overflow: hidden;
37
+ width: 100%;
38
+ height: 100%;
39
+ min-height: 100vh;
40
+ flex-direction: column;
26
41
  }
27
42
 
28
43
  /* Main Drawer Container (Mobile Only) */
@@ -32,9 +47,6 @@
32
47
  font-family: var(--memori-font-family);
33
48
  }
34
49
 
35
- .memori-artifact-panel-drawer > div > div > div {
36
- pointer-events: auto;
37
- }
38
50
  /* Web Split Panel Container */
39
51
  .memori-artifact-panel {
40
52
  position: relative;
@@ -595,6 +607,7 @@
595
607
  display: flex;
596
608
  flex-flow: row;
597
609
  align-items: center;
610
+ padding: 0 var(--memori-spacing-md);
598
611
  margin-top: var(--memori-spacing-lg);
599
612
  /* justify-content: space-between; */
600
613
  gap: var(--memori-spacing-sm);
@@ -642,14 +655,8 @@
642
655
 
643
656
  .memori-button--more-options {
644
657
  padding: var(--memori-spacing-sm) var(--memori-spacing-md);
645
- border: 1px solid #e1e5e9;
658
+ border: 1px solid var(--memori-border-color, #e1e5e9);
646
659
  border-radius: var(--memori-radius-box);
647
- border-top-color: rgb(225, 229, 233);
648
- border-right-color: rgb(225, 229, 233);
649
- border-bottom-color: rgb(225, 229, 233);
650
- border-left-color: rgb(225, 229, 233);
651
- border-bottom-right-radius: 6px;
652
- border-top-right-radius: 6px;
653
660
  }
654
661
 
655
662
  .memori-artifact-drawer--sidebar {
@@ -658,10 +665,25 @@
658
665
  padding: 1rem;
659
666
  padding-left: 1rem;
660
667
  border-radius: var(--memori-radius-box);
661
- border-left: var(--memori-border) solid var(--memori-border-color);
668
+ border-left: var(--memori-border) solid var(--memori-primary);
662
669
  background: var(--memori-primary-subtle);
663
670
  }
664
671
 
672
+ .memori-artifact-drawer--close-desktop {
673
+ width: 48px;
674
+ min-width: 48px;
675
+ height: 48px;
676
+ min-height: 48px;
677
+ padding: 0;
678
+ border: var(--memori-border) solid var(--memori-border-color);
679
+ margin: 0;
680
+ margin-left: 0 !important;
681
+ }
682
+
683
+ .memori-artifact-drawer--close-desktop:hover {
684
+ color: #fff !important;
685
+ }
686
+
665
687
  /* Mobile Drawer Panel */
666
688
  .memori-artifact-drawer--panel-mobile {
667
689
  position: fixed;
@@ -696,18 +718,64 @@
696
718
  }
697
719
 
698
720
  @media (max-width: 1024px) {
699
- .memori-artifact-panel-drawer > div > div > div {
700
- z-index: 0;
701
- box-shadow: none !important;
702
- }
703
-
704
721
  .memori-artifact-drawer-fullscreen {
705
722
  display: none;
706
723
  }
707
724
  }
708
725
 
709
726
  /* Responsive Design */
710
- @media (max-width: 768px) {
727
+ @media (max-width: 1260px) {
728
+ /* Hide the empty desktop-only action bar on mobile — all actions live in top-right */
729
+ .memori-artifact-drawer-container-actions {
730
+ display: none;
731
+ }
732
+
733
+ /* Mobile header: full-width bar with tabs on left, actions on right */
734
+ .memori-artifact-drawer-top-right {
735
+ width: 100%;
736
+ justify-content: space-between;
737
+ padding: var(--memori-spacing-sm) var(--memori-spacing-md);
738
+ border-bottom: 1px solid var(--memori-border-color);
739
+ margin-bottom: var(--memori-spacing-xs);
740
+ }
741
+
742
+ /* Make mobile action buttons match the tab switch height */
743
+ .memori-artifact-drawer-top-right .memori-button--more-options,
744
+ .memori-artifact-drawer-top-right .memori-artifact-drawer--close {
745
+ display: flex;
746
+ width: 40px;
747
+ min-width: 40px;
748
+ height: 40px;
749
+ min-height: 40px;
750
+ align-items: center;
751
+ justify-content: center;
752
+ padding: 0;
753
+ border: 1px solid var(--memori-border-color);
754
+ border-radius: var(--memori-radius-box);
755
+ }
756
+
757
+ .memori-artifact-drawer-top-right .memori-artifact-drawer--close {
758
+ margin-left: 0;
759
+ }
760
+
761
+ /* Solid opaque dropdown popover on mobile */
762
+ .memori-artifact-drawer-top-right .memori-mobile-dropdown {
763
+ z-index: 1100;
764
+ border: 1px solid var(--memori-border-color);
765
+ backdrop-filter: none;
766
+ background: var(--memori-main-background, #fff);
767
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
768
+ }
769
+
770
+ /* Dropdown icon visibility */
771
+ .memori-artifact-drawer-top-right .memori-mobile-dropdown .memori-artifact-action-icon {
772
+ width: 18px;
773
+ height: 18px;
774
+ color: var(--memori-text-color);
775
+ }
776
+ }
777
+
778
+ @media (max-width: 1260px) {
711
779
  /* Mobile header actions */
712
780
  .memori-artifact-drawer-header-actions {
713
781
  display: none;
@@ -811,8 +879,8 @@
811
879
  }
812
880
  }
813
881
 
814
- @media (min-width: 769px) {
815
- /* Hide mobile drawer on desktop */
882
+ @media (min-width: 1261px) {
883
+ /* Hide mobile drawer on desktop — inline column layout takes over */
816
884
  .memori-artifact-drawer {
817
885
  display: none !important;
818
886
  }
@@ -823,18 +891,6 @@
823
891
  }
824
892
  }
825
893
 
826
- @media (min-width: 769px) and (max-width: 1024px) {
827
- .memori-artifact-drawer--panel {
828
- width: 70%;
829
- }
830
- }
831
-
832
- @media (min-width: 1025px) {
833
- .memori-artifact-drawer--panel {
834
- width: 50%;
835
- }
836
- }
837
-
838
894
  /* Fullscreen Mode */
839
895
  .memori-artifact-drawer--fullscreen .memori-artifact-drawer--panel {
840
896
  width: 100% !important;
@@ -871,10 +927,6 @@
871
927
  justify-content: flex-end;
872
928
  }
873
929
 
874
- .memori-artifact-drawer--close-desktop {
875
- margin-left: 0 !important;
876
- }
877
-
878
930
  .memori-artifact-drawer-container-actions--chatlog {
879
931
  padding: 0rem 1rem;
880
932
  }
@@ -918,7 +970,7 @@
918
970
  }
919
971
 
920
972
  /* Mobile-specific dropdown positioning */
921
- @media (max-width: 768px) {
973
+ @media (max-width: 1260px) {
922
974
  .memori-artifact-drawer--close {
923
975
  margin-left: 0;
924
976
  }
@@ -24,9 +24,13 @@ import cx from 'classnames';
24
24
  import { useCopyArtifact } from '../ArtifactActions/hooks/useCopyArtifact';
25
25
  import TabSwitch from './components/TabSwitch';
26
26
 
27
- const ArtifactDrawer: React.FC<{ isChatLogPanel?: boolean }> = ({
28
- isChatLogPanel = false,
29
- }) => {
27
+ const ArtifactDrawer: React.FC<{
28
+ isChatLogPanel?: boolean;
29
+ /** Render as a plain flex column (no Drawer overlay). Used when the drawer
30
+ * is mounted as a proper flex sibling in the page layout. On mobile the
31
+ * component falls back to the Drawer overlay regardless of this flag. */
32
+ isLayoutColumn?: boolean;
33
+ }> = ({ isChatLogPanel = false, isLayoutColumn = false }) => {
30
34
  const { state, closeArtifact, toggleFullscreen } = useArtifact();
31
35
  const { t } = useTranslation();
32
36
  const [isMobile, setIsMobile] = useState(false);
@@ -59,7 +63,7 @@ const ArtifactDrawer: React.FC<{ isChatLogPanel?: boolean }> = ({
59
63
  // Mobile detection
60
64
  useEffect(() => {
61
65
  const checkMobile = () => {
62
- setIsMobile(window.innerWidth <= 768);
66
+ setIsMobile(window.innerWidth <= 1260);
63
67
  };
64
68
 
65
69
  checkMobile();
@@ -112,13 +116,9 @@ const ArtifactDrawer: React.FC<{ isChatLogPanel?: boolean }> = ({
112
116
  closeArtifact();
113
117
  }, [closeArtifact]);
114
118
 
115
- if (!state.currentArtifact) {
116
- return null;
117
- }
118
-
119
119
  const hasPreview =
120
- state.currentArtifact.mimeType === 'html' ||
121
- state.currentArtifact.mimeType === 'markdown';
120
+ state.currentArtifact?.mimeType === 'html' ||
121
+ state.currentArtifact?.mimeType === 'markdown';
122
122
 
123
123
  const ContentContainer = useCallback(
124
124
  ({ children }: { children: React.ReactNode }) => {
@@ -137,7 +137,11 @@ const ArtifactDrawer: React.FC<{ isChatLogPanel?: boolean }> = ({
137
137
  {children}
138
138
  </div>
139
139
  );
140
+ } else if (isLayoutColumn && !isMobile) {
141
+ // Desktop inline column — rendered as a normal flex child by the layout
142
+ return <div className="memori-artifact-layout-column">{children}</div>;
140
143
  } else {
144
+ // Mobile or legacy: floating Drawer overlay
141
145
  return (
142
146
  <Drawer
143
147
  open={state.isDrawerOpen}
@@ -158,6 +162,7 @@ const ArtifactDrawer: React.FC<{ isChatLogPanel?: boolean }> = ({
158
162
  },
159
163
  [
160
164
  isChatLogPanel,
165
+ isLayoutColumn,
161
166
  handleClose,
162
167
  state.isDrawerOpen,
163
168
  state.isFullscreen,
@@ -217,7 +222,11 @@ const ArtifactDrawer: React.FC<{ isChatLogPanel?: boolean }> = ({
217
222
  } catch (error) {
218
223
  console.error('External open failed:', error);
219
224
  }
220
- }, []);
225
+ }, [getMimeTypeString]);
226
+
227
+ if (!state.currentArtifact) {
228
+ return null;
229
+ }
221
230
 
222
231
  // Render web split panel
223
232
  return (
@@ -249,9 +258,15 @@ const ArtifactDrawer: React.FC<{ isChatLogPanel?: boolean }> = ({
249
258
  {!isChatLogPanel && (
250
259
  <Button
251
260
  onClick={closeArtifact}
252
- variant="ghost"
261
+ variant="outline"
253
262
  aria-label={t('artifact.close') || 'Close'}
254
- icon={<X className="memori-artifact-panel--close-icon" aria-hidden />}
263
+ className="memori-artifact-drawer--close-desktop"
264
+ icon={
265
+ <X
266
+ className="memori-artifact-panel--close-icon"
267
+ aria-hidden
268
+ />
269
+ }
255
270
  title={t('artifact.close') || 'Close'}
256
271
  />
257
272
  )}
@@ -396,7 +411,9 @@ const ArtifactDrawer: React.FC<{ isChatLogPanel?: boolean }> = ({
396
411
  variant="ghost"
397
412
  aria-label={t('artifact.close') || 'Close'}
398
413
  title={t('artifact.close') || 'Close'}
399
- icon={<X className="memori-artifact-panel--close-icon" aria-hidden />}
414
+ icon={
415
+ <X className="memori-artifact-panel--close-icon" aria-hidden />
416
+ }
400
417
  />
401
418
  )}
402
419
  </div>
@@ -361,10 +361,11 @@ const ArtifactHandler: React.FC<ArtifactHandlerProps> = ({
361
361
  </div>
362
362
  </button>
363
363
 
364
- {/* Render ArtifactDrawer inline when in chatlog panel */}
365
- {state.isDrawerOpen &&
364
+ {/* Render inline drawer only for chatlog-panel mode.
365
+ In layout-column mode the drawer is mounted by the page layout. */}
366
+ {isChatlogPanel && state.isDrawerOpen &&
366
367
  state.currentArtifact?.id === artifact.id && (
367
- <ArtifactDrawer isChatLogPanel={isChatlogPanel} />
368
+ <ArtifactDrawer isChatLogPanel={true} />
368
369
  )}
369
370
  </React.Fragment>
370
371
  );