@memori.ai/memori-react 9.0.0-alpha.23 → 9.0.0-alpha.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/CHANGELOG.md +300 -1100
  2. package/dist/components/AgeVerificationModal/AgeVerificationModal.js +1 -3
  3. package/dist/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
  4. package/dist/components/Auth/Auth.js +1 -3
  5. package/dist/components/Auth/Auth.js.map +1 -1
  6. package/dist/components/Chat/Chat.css +10 -1
  7. package/dist/components/Chat/Chat.js +1 -3
  8. package/dist/components/Chat/Chat.js.map +1 -1
  9. package/dist/components/ChatBubble/ChatBubble.css +103 -5
  10. package/dist/components/ChatBubble/ChatBubble.js +48 -8
  11. package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
  12. package/dist/components/ChatHistoryDrawer/ChatHistory.js +1 -3
  13. package/dist/components/ChatHistoryDrawer/ChatHistory.js.map +1 -1
  14. package/dist/components/ChatHistoryDrawer/ChatResumeDrawer.css +33 -10
  15. package/dist/components/ChatHistoryDrawer/ChatResumeDrawer.js +2 -4
  16. package/dist/components/ChatHistoryDrawer/ChatResumeDrawer.js.map +1 -1
  17. package/dist/components/ChatInputs/ChatInputs.css +17 -52
  18. package/dist/components/ChatInputs/ChatInputs.js +1 -3
  19. package/dist/components/ChatInputs/ChatInputs.js.map +1 -1
  20. package/dist/components/ContentPreviewModal/ContentPreviewModal.css +3 -3
  21. package/dist/components/ContentPreviewModal/ContentPreviewModal.js +1 -3
  22. package/dist/components/ContentPreviewModal/ContentPreviewModal.js.map +1 -1
  23. package/dist/components/DateSelector/DateSelector.css +66 -3
  24. package/dist/components/DateSelector/DateSelector.js +5 -1
  25. package/dist/components/DateSelector/DateSelector.js.map +1 -1
  26. package/dist/components/ExpertsDrawer/ExpertsDrawer.js +1 -3
  27. package/dist/components/ExpertsDrawer/ExpertsDrawer.js.map +1 -1
  28. package/dist/components/FilePreview/FilePreview.css +94 -220
  29. package/dist/components/FilePreview/FilePreview.js +25 -71
  30. package/dist/components/FilePreview/FilePreview.js.map +1 -1
  31. package/dist/components/IconButton/IconButton.css +2 -11
  32. package/dist/components/KnownFacts/KnownFacts.css +3 -4
  33. package/dist/components/KnownFacts/KnownFacts.js +3 -5
  34. package/dist/components/KnownFacts/KnownFacts.js.map +1 -1
  35. package/dist/components/LoginDrawer/LoginDrawer.css +3 -7
  36. package/dist/components/LoginDrawer/LoginDrawer.js +51 -9
  37. package/dist/components/LoginDrawer/LoginDrawer.js.map +1 -1
  38. package/dist/components/MediaWidget/MediaItemWidget.css +77 -57
  39. package/dist/components/MediaWidget/MediaItemWidget.js +4 -4
  40. package/dist/components/MediaWidget/MediaItemWidget.js.map +1 -1
  41. package/dist/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +1 -1
  42. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +2 -5
  43. package/dist/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  44. package/dist/components/MemoriWidget/MemoriWidget.css +0 -55
  45. package/dist/components/MemoriWidget/MemoriWidget.js +115 -117
  46. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  47. package/dist/components/MobileSessionPanel/MobileSessionPanel.css +20 -0
  48. package/dist/components/MobileSessionPanel/MobileSessionPanel.js +77 -117
  49. package/dist/components/MobileSessionPanel/MobileSessionPanel.js.map +1 -1
  50. package/dist/components/PositionPopover/PositionPopover.css +1 -1
  51. package/dist/components/SettingsDrawer/SettingsDrawer.js +1 -3
  52. package/dist/components/SettingsDrawer/SettingsDrawer.js.map +1 -1
  53. package/dist/components/StartPanel/StartPanel.css +12 -1
  54. package/dist/components/StartPanel/StartPanel.js +30 -7
  55. package/dist/components/StartPanel/StartPanel.js.map +1 -1
  56. package/dist/components/UploadButton/UploadButton.css +7 -7
  57. package/dist/components/UploadButton/UploadButton.js +3 -0
  58. package/dist/components/UploadButton/UploadButton.js.map +1 -1
  59. package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js +15 -5
  60. package/dist/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
  61. package/dist/components/UploadButton/UploadImages/UploadImages.js +1 -3
  62. package/dist/components/UploadButton/UploadImages/UploadImages.js.map +1 -1
  63. package/dist/components/WhyThisAnswer/WhyThisAnswer.js +1 -3
  64. package/dist/components/WhyThisAnswer/WhyThisAnswer.js.map +1 -1
  65. package/dist/components/layouts/HiddenChat.js +9 -1
  66. package/dist/components/layouts/HiddenChat.js.map +1 -1
  67. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js +84 -5
  68. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
  69. package/dist/components/layouts/WebsiteAssistant/website-assistant.css +36 -12
  70. package/dist/components/layouts/fullpage.css +1 -0
  71. package/dist/components/layouts/hidden-chat.css +29 -5
  72. package/dist/helpers/constants.d.ts +3 -2
  73. package/dist/helpers/constants.js +19 -20
  74. package/dist/helpers/constants.js.map +1 -1
  75. package/dist/helpers/error.js +2 -1
  76. package/dist/helpers/error.js.map +1 -1
  77. package/dist/helpers/positionPopover.d.ts +1 -0
  78. package/dist/helpers/positionPopover.js +7 -0
  79. package/dist/helpers/positionPopover.js.map +1 -1
  80. package/dist/helpers/usePressTooltip.d.ts +6 -1
  81. package/dist/helpers/usePressTooltip.js +16 -1
  82. package/dist/helpers/usePressTooltip.js.map +1 -1
  83. package/dist/helpers/utils.d.ts +2 -1
  84. package/dist/helpers/utils.js +7 -1
  85. package/dist/helpers/utils.js.map +1 -1
  86. package/dist/locales/de.json +8 -2
  87. package/dist/locales/en.json +6 -3
  88. package/dist/locales/es.json +6 -3
  89. package/dist/locales/fr.json +6 -3
  90. package/dist/locales/it.json +6 -3
  91. package/dist/styles.css +1 -1
  92. package/dist/version.d.ts +1 -1
  93. package/dist/version.js +1 -1
  94. package/esm/components/AgeVerificationModal/AgeVerificationModal.js +1 -3
  95. package/esm/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -1
  96. package/esm/components/Auth/Auth.js +1 -3
  97. package/esm/components/Auth/Auth.js.map +1 -1
  98. package/esm/components/Chat/Chat.css +10 -1
  99. package/esm/components/Chat/Chat.js +1 -3
  100. package/esm/components/Chat/Chat.js.map +1 -1
  101. package/esm/components/ChatBubble/ChatBubble.css +103 -5
  102. package/esm/components/ChatBubble/ChatBubble.js +48 -8
  103. package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
  104. package/esm/components/ChatHistoryDrawer/ChatHistory.js +1 -3
  105. package/esm/components/ChatHistoryDrawer/ChatHistory.js.map +1 -1
  106. package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.css +33 -10
  107. package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.js +2 -4
  108. package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.js.map +1 -1
  109. package/esm/components/ChatInputs/ChatInputs.css +17 -52
  110. package/esm/components/ChatInputs/ChatInputs.js +1 -3
  111. package/esm/components/ChatInputs/ChatInputs.js.map +1 -1
  112. package/esm/components/ContentPreviewModal/ContentPreviewModal.css +3 -3
  113. package/esm/components/ContentPreviewModal/ContentPreviewModal.js +1 -3
  114. package/esm/components/ContentPreviewModal/ContentPreviewModal.js.map +1 -1
  115. package/esm/components/DateSelector/DateSelector.css +66 -3
  116. package/esm/components/DateSelector/DateSelector.js +5 -1
  117. package/esm/components/DateSelector/DateSelector.js.map +1 -1
  118. package/esm/components/ExpertsDrawer/ExpertsDrawer.js +1 -3
  119. package/esm/components/ExpertsDrawer/ExpertsDrawer.js.map +1 -1
  120. package/esm/components/FilePreview/FilePreview.css +94 -220
  121. package/esm/components/FilePreview/FilePreview.js +25 -71
  122. package/esm/components/FilePreview/FilePreview.js.map +1 -1
  123. package/esm/components/IconButton/IconButton.css +2 -11
  124. package/esm/components/KnownFacts/KnownFacts.css +3 -4
  125. package/esm/components/KnownFacts/KnownFacts.js +3 -5
  126. package/esm/components/KnownFacts/KnownFacts.js.map +1 -1
  127. package/esm/components/LoginDrawer/LoginDrawer.css +3 -7
  128. package/esm/components/LoginDrawer/LoginDrawer.js +51 -9
  129. package/esm/components/LoginDrawer/LoginDrawer.js.map +1 -1
  130. package/esm/components/MediaWidget/MediaItemWidget.css +77 -57
  131. package/esm/components/MediaWidget/MediaItemWidget.js +5 -5
  132. package/esm/components/MediaWidget/MediaItemWidget.js.map +1 -1
  133. package/esm/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +1 -1
  134. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js +2 -5
  135. package/esm/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.js.map +1 -1
  136. package/esm/components/MemoriWidget/MemoriWidget.css +0 -55
  137. package/esm/components/MemoriWidget/MemoriWidget.js +115 -117
  138. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  139. package/esm/components/MobileSessionPanel/MobileSessionPanel.css +20 -0
  140. package/esm/components/MobileSessionPanel/MobileSessionPanel.js +78 -118
  141. package/esm/components/MobileSessionPanel/MobileSessionPanel.js.map +1 -1
  142. package/esm/components/PositionPopover/PositionPopover.css +1 -1
  143. package/esm/components/SettingsDrawer/SettingsDrawer.js +1 -3
  144. package/esm/components/SettingsDrawer/SettingsDrawer.js.map +1 -1
  145. package/esm/components/StartPanel/StartPanel.css +12 -1
  146. package/esm/components/StartPanel/StartPanel.js +30 -7
  147. package/esm/components/StartPanel/StartPanel.js.map +1 -1
  148. package/esm/components/UploadButton/UploadButton.css +7 -7
  149. package/esm/components/UploadButton/UploadButton.js +4 -1
  150. package/esm/components/UploadButton/UploadButton.js.map +1 -1
  151. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js +17 -7
  152. package/esm/components/UploadButton/UploadDocuments/UploadDocuments.js.map +1 -1
  153. package/esm/components/UploadButton/UploadImages/UploadImages.js +1 -3
  154. package/esm/components/UploadButton/UploadImages/UploadImages.js.map +1 -1
  155. package/esm/components/WhyThisAnswer/WhyThisAnswer.js +1 -3
  156. package/esm/components/WhyThisAnswer/WhyThisAnswer.js.map +1 -1
  157. package/esm/components/layouts/HiddenChat.js +9 -1
  158. package/esm/components/layouts/HiddenChat.js.map +1 -1
  159. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js +85 -6
  160. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +1 -1
  161. package/esm/components/layouts/WebsiteAssistant/website-assistant.css +36 -12
  162. package/esm/components/layouts/fullpage.css +1 -0
  163. package/esm/components/layouts/hidden-chat.css +29 -5
  164. package/esm/helpers/constants.d.ts +3 -2
  165. package/esm/helpers/constants.js +18 -19
  166. package/esm/helpers/constants.js.map +1 -1
  167. package/esm/helpers/error.js +2 -1
  168. package/esm/helpers/error.js.map +1 -1
  169. package/esm/helpers/positionPopover.d.ts +1 -0
  170. package/esm/helpers/positionPopover.js +6 -0
  171. package/esm/helpers/positionPopover.js.map +1 -1
  172. package/esm/helpers/usePressTooltip.d.ts +6 -1
  173. package/esm/helpers/usePressTooltip.js +17 -2
  174. package/esm/helpers/usePressTooltip.js.map +1 -1
  175. package/esm/helpers/utils.d.ts +2 -1
  176. package/esm/helpers/utils.js +6 -1
  177. package/esm/helpers/utils.js.map +1 -1
  178. package/esm/locales/de.json +8 -2
  179. package/esm/locales/en.json +6 -3
  180. package/esm/locales/es.json +6 -3
  181. package/esm/locales/fr.json +6 -3
  182. package/esm/locales/it.json +6 -3
  183. package/esm/styles.css +1 -1
  184. package/esm/version.d.ts +1 -1
  185. package/esm/version.js +1 -1
  186. package/package.json +4 -46
  187. package/src/components/AgeVerificationModal/AgeVerificationModal.tsx +0 -3
  188. package/src/components/Auth/Auth.tsx +0 -3
  189. package/src/components/Auth/__snapshots__/Auth.test.tsx.snap +1 -0
  190. package/src/components/BlockedMemoriBadge/__snapshots__/BlockedMemoriBadge.test.tsx.snap +5 -0
  191. package/src/components/Chat/Chat.css +10 -1
  192. package/src/components/Chat/Chat.tsx +0 -3
  193. package/src/components/Chat/__snapshots__/Chat.test.tsx.snap +1735 -1765
  194. package/src/components/ChatBubble/ChatBubble.css +103 -5
  195. package/src/components/ChatBubble/ChatBubble.test.tsx +33 -0
  196. package/src/components/ChatBubble/ChatBubble.tsx +524 -273
  197. package/src/components/ChatBubble/__snapshots__/ChatBubble.test.tsx.snap +655 -684
  198. package/src/components/ChatHistoryDrawer/ChatHistory.tsx +0 -3
  199. package/src/components/ChatHistoryDrawer/ChatResumeDrawer.css +33 -10
  200. package/src/components/ChatHistoryDrawer/ChatResumeDrawer.tsx +3 -6
  201. package/src/components/ChatInputs/ChatInputs.css +17 -52
  202. package/src/components/ChatInputs/ChatInputs.tsx +2 -4
  203. package/src/components/CompletionProviderStatus/__snapshots__/CompletionProviderStatus.test.tsx.snap +3 -0
  204. package/src/components/ContentPreviewModal/ContentPreviewModal.css +3 -3
  205. package/src/components/ContentPreviewModal/ContentPreviewModal.tsx +0 -3
  206. package/src/components/DateSelector/DateSelector.css +66 -3
  207. package/src/components/DateSelector/DateSelector.test.tsx +33 -4
  208. package/src/components/DateSelector/DateSelector.tsx +37 -11
  209. package/src/components/ExpertsDrawer/ExpertsDrawer.tsx +0 -3
  210. package/src/components/FeedbackButtons/__snapshots__/FeedbackButtons.test.tsx.snap +2 -1
  211. package/src/components/FilePreview/FilePreview.css +94 -220
  212. package/src/components/FilePreview/FilePreview.tsx +77 -124
  213. package/src/components/FilePreview/__snapshots__/FilePreview.test.tsx.snap +33 -81
  214. package/src/components/Header/ChatConsumptionDropdown.test.tsx +53 -86
  215. package/src/components/Header/__snapshots__/Header.test.tsx.snap +60 -44
  216. package/src/components/IconButton/IconButton.css +2 -11
  217. package/src/components/KnownFacts/KnownFacts.css +3 -4
  218. package/src/components/KnownFacts/KnownFacts.tsx +0 -5
  219. package/src/components/KnownFacts/__snapshots__/KnownFacts.test.tsx.snap +2 -6
  220. package/src/components/LoginDrawer/LoginDrawer.css +3 -7
  221. package/src/components/LoginDrawer/LoginDrawer.tsx +101 -54
  222. package/src/components/LoginDrawer/__snapshots__/LoginDrawer.test.tsx.snap +11 -33
  223. package/src/components/MediaWidget/MediaItemWidget.css +77 -57
  224. package/src/components/MediaWidget/MediaItemWidget.test.tsx +33 -0
  225. package/src/components/MediaWidget/MediaItemWidget.tsx +6 -12
  226. package/src/components/MediaWidget/__snapshots__/MediaItemWidget.test.tsx.snap +2 -0
  227. package/src/components/MediaWidget/__snapshots__/MediaWidget.test.tsx.snap +1 -1
  228. package/src/components/MemoriArtifactSystem/components/ArtifactActions/styles.css +1 -1
  229. package/src/components/MemoriArtifactSystem/components/ArtifactDrawer/ArtifactDrawer.tsx +0 -5
  230. package/src/components/MemoriWidget/MemoriUIProvider.contract.test.tsx +25 -7
  231. package/src/components/MemoriWidget/MemoriWidget.css +0 -55
  232. package/src/components/MemoriWidget/MemoriWidget.tsx +18 -12
  233. package/src/components/MobileSessionPanel/MobileSessionPanel.css +20 -0
  234. package/src/components/MobileSessionPanel/MobileSessionPanel.tsx +29 -68
  235. package/src/components/PositionPopover/PositionPopover.css +1 -1
  236. package/src/components/SettingsDrawer/SettingsDrawer.tsx +0 -3
  237. package/src/components/ShareButton/__snapshots__/ShareButton.test.tsx.snap +9 -9
  238. package/src/components/Snippet/__snapshots__/Snippet.test.tsx.snap +8 -0
  239. package/src/components/StartPanel/StartPanel.css +12 -1
  240. package/src/components/StartPanel/StartPanel.test.tsx +57 -0
  241. package/src/components/StartPanel/StartPanel.tsx +41 -4
  242. package/src/components/StartPanel/__snapshots__/StartPanel.test.tsx.snap +41 -6
  243. package/src/components/UploadButton/UploadButton.css +7 -7
  244. package/src/components/UploadButton/UploadButton.tsx +4 -0
  245. package/src/components/UploadButton/UploadDocuments/UploadDocuments.tsx +21 -8
  246. package/src/components/UploadButton/UploadImages/UploadImages.tsx +0 -3
  247. package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +10 -12
  248. package/src/components/WhyThisAnswer/WhyThisAnswer.tsx +0 -3
  249. package/src/components/WhyThisAnswer/__snapshots__/WhyThisAnswer.test.tsx.snap +3 -9
  250. package/src/components/layouts/HiddenChat.tsx +9 -1
  251. package/src/components/layouts/WebsiteAssistant/WebsiteAssistant.tsx +103 -6
  252. package/src/components/layouts/WebsiteAssistant/__snapshots__/WebsiteAssistant.test.tsx.snap +63 -57
  253. package/src/components/layouts/WebsiteAssistant/website-assistant.css +36 -12
  254. package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +7 -4
  255. package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +12 -8
  256. package/src/components/layouts/__snapshots__/HiddenChat.test.tsx.snap +7 -4
  257. package/src/components/layouts/__snapshots__/Totem.test.tsx.snap +10 -5
  258. package/src/components/layouts/__snapshots__/ZoomedFullBody.test.tsx.snap +6 -4
  259. package/src/components/layouts/fullpage.css +1 -0
  260. package/src/components/layouts/hidden-chat.css +29 -5
  261. package/src/components/layouts/layouts.stories.tsx +2 -2
  262. package/src/helpers/constants.ts +21 -20
  263. package/src/helpers/error.ts +2 -1
  264. package/src/helpers/positionPopover.test.ts +15 -0
  265. package/src/helpers/positionPopover.ts +16 -0
  266. package/src/helpers/usePressTooltip.test.ts +30 -0
  267. package/src/helpers/usePressTooltip.ts +31 -1
  268. package/src/helpers/utils.test.ts +14 -4
  269. package/src/helpers/utils.ts +6 -1
  270. package/src/index.tsx +1 -1
  271. package/src/locales/de.json +8 -2
  272. package/src/locales/en.json +6 -3
  273. package/src/locales/es.json +6 -3
  274. package/src/locales/fr.json +6 -3
  275. package/src/locales/it.json +6 -3
  276. package/src/styles.brandTokens.test.js +52 -0
  277. package/src/styles.css +27 -2
  278. package/src/version.ts +1 -1
  279. package/dist/context/widgetSurfaceContext.d.ts +0 -3
  280. package/dist/context/widgetSurfaceContext.js +0 -11
  281. package/dist/context/widgetSurfaceContext.js.map +0 -1
  282. package/esm/context/widgetSurfaceContext.d.ts +0 -3
  283. package/esm/context/widgetSurfaceContext.js +0 -7
  284. package/esm/context/widgetSurfaceContext.js.map +0 -1
  285. package/src/context/widgetSurfaceContext.tsx +0 -14
@@ -1,7 +1,7 @@
1
1
  import { useState, useEffect, useRef, useMemo } from 'react';
2
2
  import { Material, MeshStandardMaterial, SkinnedMesh } from 'three';
3
3
  import * as THREE from 'three';
4
- import { officeNativeExtensions } from './constants';
4
+ import { localTextExtensions, officeNativeExtensions } from './constants';
5
5
 
6
6
  export const hasTouchscreen = (): boolean => {
7
7
  let hasTouchScreen = false;
@@ -245,6 +245,11 @@ export const isOfficeNativeFilename = (filename: string): boolean => {
245
245
  return (officeNativeExtensions as readonly string[]).includes(ext);
246
246
  };
247
247
 
248
+ export const isLocalTextFilename = (filename: string): boolean => {
249
+ const ext = `.${filename.split('.').pop()?.toLowerCase() || ''}`;
250
+ return (localTextExtensions as readonly string[]).includes(ext);
251
+ };
252
+
248
253
  export type ParsedDocumentAttachment = {
249
254
  filename: string;
250
255
  type: string;
package/src/index.tsx CHANGED
@@ -51,7 +51,7 @@ export interface Props {
51
51
  showLogin?: boolean;
52
52
  showUpload?: boolean;
53
53
  showReasoning?: boolean;
54
- /** When true and layout is WEBSITE_ASSISTANT, hide the 3D avatar in the expanded panel. */
54
+ /** When true (default for WEBSITE_ASSISTANT), hide the 3D avatar in the expanded panel. Set false to show it. */
55
55
  avatar3dHidden?: boolean;
56
56
  height?: number | string;
57
57
  baseURL?: string;
@@ -406,16 +406,18 @@
406
406
  "otpTitle": "Bestätigungscode eingeben",
407
407
  "otpDescription": "Geben Sie den 4-stelligen Code ein, den Sie in Ihrem Konto generiert haben",
408
408
  "otpStep1": "Klicken Sie auf die Schaltfläche unten, um Ihr Konto zu öffnen",
409
- "otpStep2": "Generieren Sie einen 4-stelligen Bestätigungscode (60 Sekunden gültig)",
409
+ "otpStep2": "Generieren Sie einen 4-stelligen Bestätigungscode (5 Minuten gültig)",
410
410
  "otpStep3": "Kehren Sie hierher zurück und geben Sie den Code ein",
411
411
  "startOtpLogin": "Verifizierung starten",
412
412
  "generateOtp": "Code generieren",
413
- "otpTimer": "Code läuft in {{seconds}} Sekunden ab",
413
+ "otpTimer": "Code läuft in {{time}} ab",
414
414
  "otpInvalidFormat": "Bitte geben Sie einen gültigen 4-stelligen Code ein",
415
415
  "otpInvalid": "Ungültiger Bestätigungscode",
416
416
  "otpExpired": "Der Bestätigungscode ist abgelaufen",
417
417
  "otpError": "Fehler bei der Code-Validierung. Bitte versuchen Sie es erneut.",
418
418
  "otpSuccess": "Anmeldung erfolgreich!",
419
+ "otpAttemptsExceeded": "Zu viele Versuche. Fordern Sie einen neuen Bestätigungscode an.",
420
+ "resendOtpIn": "Erneut senden in {{seconds}}s",
419
421
  "password": "Passwort",
420
422
  "newPassword": "Neues Passwort",
421
423
  "confirmPassword": "Passwort bestätigen",
@@ -551,6 +553,10 @@
551
553
  "SESSION_NOT_FOUND": "Sitzung nicht gefunden",
552
554
  "SESSION_IS_NOT_ADMINISTRATIVE": "Nicht-administrative Sitzung",
553
555
  "SESSION_EXPIRED": "Sitzung abgelaufen",
556
+ "SESSION_OTP_NOT_FOUND": "Bestätigungscode nicht gefunden",
557
+ "SESSION_OTP_EXPIRED": "Der Bestätigungscode ist abgelaufen",
558
+ "SESSION_OTP_INVALID": "Ungültiger Bestätigungscode",
559
+ "SESSION_OTP_ATTEMPTS_EXCEEDED": "Zu viele Versuche. Fordern Sie einen neuen Bestätigungscode an.",
554
560
 
555
561
  "MEMORI_MISSING_CONFIGURATION": "Zwilling: fehlende Konfiguration",
556
562
  "MEMORI_CONFIGURATION_NOT_FOUND": "Zwilling: Konfiguration nicht gefunden",
@@ -433,11 +433,11 @@
433
433
  "otpTitle": "Enter verification code",
434
434
  "otpDescription": "Enter the 4-digit code you generated in your account",
435
435
  "otpStep1": "Click the button below to open your account",
436
- "otpStep2": "Generate a 4-digit verification code (valid for 60 seconds)",
436
+ "otpStep2": "Generate a 4-digit verification code (valid for 5 minutes)",
437
437
  "otpStep3": "Return here and enter the code",
438
438
  "startOtpLogin": "Start verification",
439
439
  "generateOtp": "Generate code",
440
- "otpTimer": "Code expires in {{seconds}} seconds",
440
+ "otpTimer": "Code expires in {{time}}",
441
441
  "otpInvalidFormat": "Please enter a valid 4-digit code",
442
442
  "otpInvalid": "Invalid verification code",
443
443
  "otpError": "Error validating code. Please try again.",
@@ -448,6 +448,7 @@
448
448
  "emailPlaceholder": "Enter your email",
449
449
  "sendOtp": "Send code",
450
450
  "resendOtp": "Resend code",
451
+ "resendOtpIn": "Resend in {{seconds}}s",
451
452
  "resending": "Resending...",
452
453
  "backToEmail": "Back to email",
453
454
  "otpSent": "Verification code sent!",
@@ -458,6 +459,7 @@
458
459
  "otpNotFound": "Verification code not found",
459
460
  "otpExpired": "Verification code has expired",
460
461
  "otpMissing": "Verification code is required",
462
+ "otpAttemptsExceeded": "Too many attempts. Request a new verification code.",
461
463
  "otpSuccessMessage": "Verification successful! Redirecting...",
462
464
  "otpSuccessDescription": "Your account has been verified successfully. You will be redirected shortly.",
463
465
  "otpHelp": "Enter the 4-digit code from your email",
@@ -623,7 +625,8 @@
623
625
  "SESSION_EXPIRED": "Session expired",
624
626
  "SESSION_OTP_NOT_FOUND": "Verification code not found",
625
627
  "SESSION_OTP_EXPIRED": "Verification code has expired",
626
- "SESSION_MISSING_TEMPORARY_TOKEN": "Verification code is required",
628
+ "SESSION_OTP_INVALID": "Invalid verification code",
629
+ "SESSION_OTP_ATTEMPTS_EXCEEDED": "Too many attempts. Request a new verification code.",
627
630
 
628
631
  "MEMORI_MISSING_CONFIGURATION": "Agent: missing configuration",
629
632
  "MEMORI_CONFIGURATION_NOT_FOUND": "Agent: configuration not found",
@@ -405,11 +405,11 @@
405
405
  "otpTitle": "Ingresa el código de verificación",
406
406
  "otpDescription": "Ingresa el código de 4 dígitos que generaste en tu cuenta",
407
407
  "otpStep1": "Haz clic en el botón de abajo para abrir tu cuenta",
408
- "otpStep2": "Genera un código de verificación de 4 dígitos (válido por 60 segundos)",
408
+ "otpStep2": "Genera un código de verificación de 4 dígitos (válido por 5 minutos)",
409
409
  "otpStep3": "Regresa aquí e ingresa el código",
410
410
  "startOtpLogin": "Iniciar verificación",
411
411
  "generateOtp": "Generar código",
412
- "otpTimer": "El código expira en {{seconds}} segundos",
412
+ "otpTimer": "El código expira en {{time}}",
413
413
  "otpInvalidFormat": "Por favor ingresa un código válido de 4 dígitos",
414
414
  "otpInvalid": "Código de verificación inválido",
415
415
  "otpError": "Error al validar el código. Por favor intenta de nuevo.",
@@ -420,6 +420,7 @@
420
420
  "emailPlaceholder": "Ingresa tu email",
421
421
  "sendOtp": "Enviar código",
422
422
  "resendOtp": "Reenviar código",
423
+ "resendOtpIn": "Reenviar en {{seconds}}s",
423
424
  "resending": "Reenviando...",
424
425
  "backToEmail": "Volver al email",
425
426
  "otpSent": "¡Código de verificación enviado!",
@@ -430,6 +431,7 @@
430
431
  "otpNotFound": "Código de verificación no encontrado",
431
432
  "otpExpired": "El código de verificación ha expirado",
432
433
  "otpMissing": "El código de verificación es requerido",
434
+ "otpAttemptsExceeded": "Demasiados intentos. Solicita un nuevo código de verificación.",
433
435
  "otpSuccessMessage": "¡Verificación exitosa! Redirigiendo...",
434
436
  "otpSuccessDescription": "Tu cuenta ha sido verificada exitosamente. Serás redirigido en breve.",
435
437
  "otpHelp": "Ingresa el código de 4 dígitos de tu email",
@@ -574,7 +576,8 @@
574
576
  "SESSION_EXPIRED": "La sesión expiró",
575
577
  "SESSION_OTP_NOT_FOUND": "Código de verificación no encontrado",
576
578
  "SESSION_OTP_EXPIRED": "El código de verificación ha expirado",
577
- "SESSION_MISSING_TEMPORARY_TOKEN": "El código de verificación es requerido",
579
+ "SESSION_OTP_INVALID": "Código de verificación inválido",
580
+ "SESSION_OTP_ATTEMPTS_EXCEEDED": "Demasiados intentos. Solicita un nuevo código de verificación.",
578
581
  "MEMORI_MISSING_CONFIGURATION": "Gemelo: falta configuración",
579
582
  "MEMORI_CONFIGURATION_NOT_FOUND": "Gemelo: configuración no encontrada",
580
583
  "MEMORI_INVALID_PRIVACY_TYPE": "Gemelo: tipo de privacidad no válido",
@@ -405,11 +405,11 @@
405
405
  "otpTitle": "Entrez le code de vérification",
406
406
  "otpDescription": "Entrez le code à 4 chiffres que vous avez généré dans votre compte",
407
407
  "otpStep1": "Cliquez sur le bouton ci-dessous pour ouvrir votre compte",
408
- "otpStep2": "Générez un code de vérification à 4 chiffres (valide pendant 60 secondes)",
408
+ "otpStep2": "Générez un code de vérification à 4 chiffres (valide pendant 5 minutes)",
409
409
  "otpStep3": "Revenez ici et entrez le code",
410
410
  "startOtpLogin": "Commencer la vérification",
411
411
  "generateOtp": "Générer le code",
412
- "otpTimer": "Le code expire dans {{seconds}} secondes",
412
+ "otpTimer": "Le code expire dans {{time}}",
413
413
  "otpInvalidFormat": "Veuillez entrer un code valide à 4 chiffres",
414
414
  "otpInvalid": "Code de vérification invalide",
415
415
  "otpError": "Erreur lors de la validation du code. Veuillez réessayer.",
@@ -420,6 +420,7 @@
420
420
  "emailPlaceholder": "Entrez votre email",
421
421
  "sendOtp": "Envoyer le code",
422
422
  "resendOtp": "Renvoyer le code",
423
+ "resendOtpIn": "Renvoyer dans {{seconds}}s",
423
424
  "resending": "Envoi en cours...",
424
425
  "backToEmail": "Retour à l'email",
425
426
  "otpSent": "Code de vérification envoyé !",
@@ -430,6 +431,7 @@
430
431
  "otpNotFound": "Code de vérification introuvable",
431
432
  "otpExpired": "Le code de vérification a expiré",
432
433
  "otpMissing": "Le code de vérification est requis",
434
+ "otpAttemptsExceeded": "Trop de tentatives. Demandez un nouveau code de vérification.",
433
435
  "otpSuccessMessage": "Vérification réussie ! Redirection...",
434
436
  "otpSuccessDescription": "Votre compte a été vérifié avec succès. Vous allez être redirigé sous peu.",
435
437
  "otpHelp": "Entrez le code à 4 chiffres de votre email",
@@ -574,7 +576,8 @@
574
576
  "SESSION_EXPIRED": "Session expirée",
575
577
  "SESSION_OTP_NOT_FOUND": "Code de vérification introuvable",
576
578
  "SESSION_OTP_EXPIRED": "Le code de vérification a expiré",
577
- "SESSION_MISSING_TEMPORARY_TOKEN": "Le code de vérification est requis",
579
+ "SESSION_OTP_INVALID": "Code de vérification invalide",
580
+ "SESSION_OTP_ATTEMPTS_EXCEEDED": "Trop de tentatives. Demandez un nouveau code de vérification.",
578
581
  "MEMORI_MISSING_CONFIGURATION": "Agent : configuration manquante",
579
582
  "MEMORI_CONFIGURATION_NOT_FOUND": "Agent : configuration introuvable",
580
583
  "MEMORI_INVALID_PRIVACY_TYPE": "Agent : type de confidentialité non valide",
@@ -432,11 +432,11 @@
432
432
  "otpTitle": "Inserisci il codice di verifica",
433
433
  "otpDescription": "Inserisci il codice a 4 cifre che hai generato nel tuo account",
434
434
  "otpStep1": "Clicca il pulsante qui sotto per aprire il tuo account",
435
- "otpStep2": "Genera un codice di verifica a 4 cifre (valido per 60 secondi)",
435
+ "otpStep2": "Genera un codice di verifica a 4 cifre (valido per 5 minuti)",
436
436
  "otpStep3": "Torna qui e inserisci il codice",
437
437
  "startOtpLogin": "Inizia verifica",
438
438
  "generateOtp": "Genera codice",
439
- "otpTimer": "Il codice scade tra {{seconds}} secondi",
439
+ "otpTimer": "Il codice scade tra {{time}}",
440
440
  "otpInvalidFormat": "Inserisci un codice valido a 4 cifre",
441
441
  "otpInvalid": "Codice di verifica non valido",
442
442
  "otpError": "Errore nella validazione del codice. Riprova.",
@@ -447,6 +447,7 @@
447
447
  "emailPlaceholder": "Inserisci la tua email",
448
448
  "sendOtp": "Invia codice",
449
449
  "resendOtp": "Invia di nuovo",
450
+ "resendOtpIn": "Reinvia tra {{seconds}}s",
450
451
  "resending": "Invio in corso...",
451
452
  "backToEmail": "Torna all'email",
452
453
  "otpSent": "Codice di verifica inviato!",
@@ -457,6 +458,7 @@
457
458
  "otpNotFound": "Codice di verifica non trovato",
458
459
  "otpExpired": "Il codice di verifica è scaduto",
459
460
  "otpMissing": "Il codice di verifica è richiesto",
461
+ "otpAttemptsExceeded": "Troppi tentativi. Richiedi un nuovo codice di verifica.",
460
462
  "otpSuccessMessage": "Verifica completata! Reindirizzamento...",
461
463
  "otpSuccessDescription": "Il tuo account è stato verificato con successo. Sarai reindirizzato a breve.",
462
464
  "otpHelp": "Inserisci il codice a 4 cifre dalla tua email",
@@ -619,7 +621,8 @@
619
621
  "SESSION_EXPIRED": "Sessione scaduta",
620
622
  "SESSION_OTP_NOT_FOUND": "Codice di verifica non trovato",
621
623
  "SESSION_OTP_EXPIRED": "Il codice di verifica è scaduto",
622
- "SESSION_MISSING_TEMPORARY_TOKEN": "Il codice di verifica è richiesto",
624
+ "SESSION_OTP_INVALID": "Codice di verifica non valido",
625
+ "SESSION_OTP_ATTEMPTS_EXCEEDED": "Troppi tentativi. Richiedi un nuovo codice di verifica.",
623
626
 
624
627
  "MEMORI_MISSING_CONFIGURATION": "Agente: configurazione mancante",
625
628
  "MEMORI_CONFIGURATION_NOT_FOUND": "Agente: configurazione non trovata",
@@ -0,0 +1,52 @@
1
+ /* eslint-env node */
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+
5
+ /**
6
+ * Embeds set `--memori-primary-color` on `.memori-widget`, not always on `:root`.
7
+ * CSS custom properties resolve `var()` when the custom property itself is
8
+ * computed, so derived tokens defined only on `:root` stay frozen to the
9
+ * default brand. Disabled / soft / subtle UI uses those derived tokens
10
+ * (`--memori-primary-disabled`, etc.), so the host must rebind them on the
11
+ * same scopes as `--memori-primary`.
12
+ */
13
+ describe('brand token cascade (styles.css)', () => {
14
+ const css = fs.readFileSync(path.join(__dirname, 'styles.css'), 'utf8');
15
+
16
+ const overridesBlocks = [
17
+ ...css.matchAll(/@layer\s+memori\.overrides\s*\{([\s\S]*?)\n\}/g),
18
+ ].map(match => match[1]);
19
+
20
+ it('rebinds primary-derived tokens next to --memori-primary on host scopes', () => {
21
+ const lightBlock = overridesBlocks.find(
22
+ block =>
23
+ block.includes('.memori-widget') &&
24
+ block.includes('--memori-primary:') &&
25
+ !block.includes("data-theme='dark'")
26
+ );
27
+
28
+ expect(lightBlock).toBeDefined();
29
+ expect(lightBlock).toMatch(/--memori-primary-disabled\s*:/);
30
+ expect(lightBlock).toMatch(/--memori-primary-hover\s*:/);
31
+ expect(lightBlock).toMatch(/--memori-primary-subtle\s*:/);
32
+ expect(lightBlock).toMatch(/--memori-border-primary\s*:/);
33
+ expect(lightBlock).toMatch(
34
+ /--memori-primary-disabled\s*:\s*color-mix\(in oklch,\s*var\(--memori-primary\)/
35
+ );
36
+ });
37
+
38
+ it('rebinds dark primary-derived tokens on dark host scopes', () => {
39
+ const darkBlock = overridesBlocks.find(
40
+ block =>
41
+ block.includes("data-theme='dark'") &&
42
+ block.includes('.memori-widget')
43
+ );
44
+
45
+ expect(darkBlock).toBeDefined();
46
+ expect(darkBlock).toMatch(/--memori-primary-disabled\s*:/);
47
+ expect(darkBlock).toMatch(/--memori-primary-hover\s*:/);
48
+ expect(darkBlock).toMatch(
49
+ /--memori-primary-disabled\s*:\s*color-mix\(in oklch,\s*var\(--memori-primary\)/
50
+ );
51
+ });
52
+ });
package/src/styles.css CHANGED
@@ -148,7 +148,11 @@
148
148
  flex-shrink: 0;
149
149
  }
150
150
 
151
- /* --- 6. Base: brand e tema di default (in layer così overrides possono sovrascrivere --memori-primary) --- */
151
+ /* --- 6. Base: brand e tema di default (in layer così overrides possono sovrascrivere --memori-primary) ---
152
+ * Rebind primary-derived tokens on host scopes (not only :root). Embeds set
153
+ * --memori-primary-color on .memori-widget; tokens computed only on :root stay
154
+ * frozen to the default brand, so disabled/soft/subtle UI would ignore the
155
+ * integration color. Formulas match @memori.ai/ui theme tokens. */
152
156
  @layer memori.overrides {
153
157
  :root,
154
158
  body,
@@ -161,6 +165,17 @@
161
165
  body.sb-show-main #root {
162
166
  --memori-primary-color: rgb(var(--memori-primary-rgb, 130 70 175));
163
167
  --memori-primary: var(--memori-primary-color);
168
+ --memori-primary-hover: color-mix(in oklch, var(--memori-primary), black 15%);
169
+ --memori-primary-active: color-mix(in oklch, var(--memori-primary), black 20%);
170
+ --memori-primary-disabled: color-mix(in oklch, var(--memori-primary), transparent 60%);
171
+ --memori-primary-subtle: color-mix(in oklch, var(--memori-primary), white 88%);
172
+ --memori-primary-subtle-hover: color-mix(in oklch, var(--memori-primary), white 78%);
173
+ --memori-primary-alpha: color-mix(in oklch, var(--memori-primary) 15%, transparent);
174
+ --memori-border-primary: color-mix(in oklch, var(--memori-primary), transparent 70%);
175
+ --memori-border-primary-hover: color-mix(in oklch, var(--memori-primary), transparent 50%);
176
+ --memori-focus-ring-color: color-mix(in oklch, var(--memori-primary), transparent 55%);
177
+ --memori-focus-ring: 0 0 0 3px var(--memori-focus-ring-color);
178
+ --memori-shadow-primary: 0 8px 16px -4px color-mix(in oklch, var(--memori-primary), transparent 70%);
164
179
  --memori-layout-max-width: 1280px;
165
180
  /* Shared conversation axis (message list, empty state, input) */
166
181
  --memori-conversation-max-width: 48rem; /* 768px */
@@ -178,7 +193,7 @@
178
193
  background-color: var(--memori-secondary-background);
179
194
  }
180
195
 
181
- /* --- 8. Dark mode: surface contrast only — keep --memori-primary on the brand hook --- */
196
+ /* --- 8. Dark mode: surface contrast + primary-derived rebinds (keep brand on --memori-primary-color) --- */
182
197
  @layer memori.overrides {
183
198
  [data-theme='dark'] memori-client,
184
199
  [data-theme='dark'] memori-client #root,
@@ -189,6 +204,16 @@
189
204
  /* Align with @memori.ai/ui: contrast = ink, inverse = surface */
190
205
  --memori-surface-contrast: #fff;
191
206
  --memori-surface-contrast-inverse: #000;
207
+ --memori-primary-hover: color-mix(in oklch, var(--memori-primary), white 12%);
208
+ --memori-primary-active: color-mix(in oklch, var(--memori-primary), white 22%);
209
+ --memori-primary-disabled: color-mix(in oklch, var(--memori-primary), transparent 55%);
210
+ --memori-primary-subtle: color-mix(in oklch, var(--memori-primary), black 72%);
211
+ --memori-primary-subtle-hover: color-mix(in oklch, var(--memori-primary), black 62%);
212
+ --memori-primary-alpha: color-mix(in oklch, var(--memori-primary) 22%, transparent);
213
+ --memori-border-primary: color-mix(in oklch, var(--memori-primary), transparent 45%);
214
+ --memori-border-primary-hover: color-mix(in oklch, var(--memori-primary), transparent 30%);
215
+ --memori-focus-ring-color: color-mix(in oklch, var(--memori-primary), transparent 40%);
216
+ --memori-shadow-primary: 0 8px 16px -4px color-mix(in oklch, var(--memori-primary), transparent 55%);
192
217
  }
193
218
  }
194
219
 
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.23';
2
+ export const version = '9.0.0-alpha.25';
@@ -1,3 +0,0 @@
1
- import React from 'react';
2
- export declare const WidgetSurfaceProvider: React.Provider<HTMLElement | null>;
3
- export declare function useWidgetSurfaceEl(): HTMLElement | null;
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WidgetSurfaceProvider = void 0;
4
- exports.useWidgetSurfaceEl = useWidgetSurfaceEl;
5
- const react_1 = require("react");
6
- const WidgetSurfaceContext = (0, react_1.createContext)(null);
7
- exports.WidgetSurfaceProvider = WidgetSurfaceContext.Provider;
8
- function useWidgetSurfaceEl() {
9
- return (0, react_1.useContext)(WidgetSurfaceContext);
10
- }
11
- //# sourceMappingURL=widgetSurfaceContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widgetSurfaceContext.js","sourceRoot":"","sources":["../../src/context/widgetSurfaceContext.tsx"],"names":[],"mappings":";;;AAWA,gDAEC;AAbD,iCAAyD;AAOzD,MAAM,oBAAoB,GAAG,IAAA,qBAAa,EAAqB,IAAI,CAAC,CAAC;AAExD,QAAA,qBAAqB,GAAG,oBAAoB,CAAC,QAAQ,CAAC;AAEnE,SAAgB,kBAAkB;IAChC,OAAO,IAAA,kBAAU,EAAC,oBAAoB,CAAC,CAAC;AAC1C,CAAC"}
@@ -1,3 +0,0 @@
1
- import React from 'react';
2
- export declare const WidgetSurfaceProvider: React.Provider<HTMLElement | null>;
3
- export declare function useWidgetSurfaceEl(): HTMLElement | null;
@@ -1,7 +0,0 @@
1
- import { createContext, useContext } from 'react';
2
- const WidgetSurfaceContext = createContext(null);
3
- export const WidgetSurfaceProvider = WidgetSurfaceContext.Provider;
4
- export function useWidgetSurfaceEl() {
5
- return useContext(WidgetSurfaceContext);
6
- }
7
- //# sourceMappingURL=widgetSurfaceContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widgetSurfaceContext.js","sourceRoot":"","sources":["../../src/context/widgetSurfaceContext.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAOzD,MAAM,oBAAoB,GAAG,aAAa,CAAqB,IAAI,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,QAAQ,CAAC;AAEnE,MAAM,UAAU,kBAAkB;IAChC,OAAO,UAAU,CAAC,oBAAoB,CAAC,CAAC;AAC1C,CAAC"}
@@ -1,14 +0,0 @@
1
- import React, { createContext, useContext } from 'react';
2
-
3
- /**
4
- * Portal target for fixed overlays (Drawer/Modal) that must stay clipped to the
5
- * chat widget. Kept separate from MemoriUIProvider's container so Floating UI
6
- * menus (Select/Popover) can portal to the widget root *outside* `contain: layout`.
7
- */
8
- const WidgetSurfaceContext = createContext<HTMLElement | null>(null);
9
-
10
- export const WidgetSurfaceProvider = WidgetSurfaceContext.Provider;
11
-
12
- export function useWidgetSurfaceEl(): HTMLElement | null {
13
- return useContext(WidgetSurfaceContext);
14
- }