@memori.ai/memori-react 8.45.5 → 8.46.0

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 (271) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/components/MemoriWidget/MemoriWidget.js +61 -32
  3. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  4. package/dist/helpers/speech/speechRequest.d.ts +15 -0
  5. package/dist/helpers/speech/speechRequest.js +76 -0
  6. package/dist/helpers/speech/speechRequest.js.map +1 -0
  7. package/dist/helpers/stt/useSTT.d.ts +4 -0
  8. package/dist/helpers/stt/useSTT.js +20 -13
  9. package/dist/helpers/stt/useSTT.js.map +1 -1
  10. package/dist/helpers/tts/useTTS.d.ts +5 -0
  11. package/dist/helpers/tts/useTTS.js +12 -4
  12. package/dist/helpers/tts/useTTS.js.map +1 -1
  13. package/dist/locales/de.json +4 -0
  14. package/dist/locales/en.json +4 -0
  15. package/dist/locales/es.json +4 -0
  16. package/dist/locales/fr.json +4 -0
  17. package/dist/locales/it.json +4 -0
  18. package/dist/version.d.ts +1 -1
  19. package/dist/version.js +1 -1
  20. package/esm/components/MemoriWidget/MemoriWidget.js +61 -32
  21. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  22. package/esm/helpers/speech/speechRequest.d.ts +15 -0
  23. package/esm/helpers/speech/speechRequest.js +68 -0
  24. package/esm/helpers/speech/speechRequest.js.map +1 -0
  25. package/esm/helpers/stt/useSTT.d.ts +4 -0
  26. package/esm/helpers/stt/useSTT.js +20 -13
  27. package/esm/helpers/stt/useSTT.js.map +1 -1
  28. package/esm/helpers/tts/useTTS.d.ts +5 -0
  29. package/esm/helpers/tts/useTTS.js +12 -4
  30. package/esm/helpers/tts/useTTS.js.map +1 -1
  31. package/esm/locales/de.json +4 -0
  32. package/esm/locales/en.json +4 -0
  33. package/esm/locales/es.json +4 -0
  34. package/esm/locales/fr.json +4 -0
  35. package/esm/locales/it.json +4 -0
  36. package/esm/version.d.ts +1 -1
  37. package/esm/version.js +1 -1
  38. package/package.json +1 -1
  39. package/dist/components/ChatHistoryDrawer/ChatResumeDrawer.css +0 -78
  40. package/dist/components/ChatHistoryDrawer/ChatResumeDrawer.d.ts +0 -39
  41. package/dist/components/ChatHistoryDrawer/ChatResumeDrawer.js +0 -43
  42. package/dist/components/ChatHistoryDrawer/ChatResumeDrawer.js.map +0 -1
  43. package/dist/components/ContentPreviewModal/DocumentMarkdown.d.ts +0 -7
  44. package/dist/components/ContentPreviewModal/DocumentMarkdown.js +0 -31
  45. package/dist/components/ContentPreviewModal/DocumentMarkdown.js.map +0 -1
  46. package/dist/components/DrawerFooter/DrawerFooter.css +0 -62
  47. package/dist/components/DrawerFooter/DrawerFooter.d.ts +0 -12
  48. package/dist/components/DrawerFooter/DrawerFooter.js +0 -10
  49. package/dist/components/DrawerFooter/DrawerFooter.js.map +0 -1
  50. package/dist/components/IconButton/IconButton.css +0 -135
  51. package/dist/components/IconButton/IconButton.d.ts +0 -9
  52. package/dist/components/IconButton/IconButton.js +0 -36
  53. package/dist/components/IconButton/IconButton.js.map +0 -1
  54. package/dist/components/LoginModal/LoginModal.css +0 -270
  55. package/dist/components/LoginModal/LoginModal.d.ts +0 -19
  56. package/dist/components/LoginModal/LoginModal.js +0 -355
  57. package/dist/components/LoginModal/LoginModal.js.map +0 -1
  58. package/dist/components/MobileSessionPanel/MobileSessionPanel.css +0 -540
  59. package/dist/components/MobileSessionPanel/MobileSessionPanel.d.ts +0 -65
  60. package/dist/components/MobileSessionPanel/MobileSessionPanel.js +0 -254
  61. package/dist/components/MobileSessionPanel/MobileSessionPanel.js.map +0 -1
  62. package/dist/components/PositionPopover/PositionPopover.css +0 -218
  63. package/dist/components/PositionPopover/PositionPopover.d.ts +0 -22
  64. package/dist/components/PositionPopover/PositionPopover.js +0 -208
  65. package/dist/components/PositionPopover/PositionPopover.js.map +0 -1
  66. package/dist/components/ReasoningBlock/ReasoningBlock.css +0 -156
  67. package/dist/components/ReasoningBlock/ReasoningBlock.d.ts +0 -7
  68. package/dist/components/ReasoningBlock/ReasoningBlock.js +0 -61
  69. package/dist/components/ReasoningBlock/ReasoningBlock.js.map +0 -1
  70. package/dist/components/SideDrawer/SideDrawer.css +0 -112
  71. package/dist/components/SideDrawer/SideDrawer.d.ts +0 -22
  72. package/dist/components/SideDrawer/SideDrawer.js +0 -17
  73. package/dist/components/SideDrawer/SideDrawer.js.map +0 -1
  74. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.d.ts +0 -4
  75. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js +0 -144
  76. package/dist/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +0 -1
  77. package/dist/components/layouts/WebsiteAssistant/website-assistant.css +0 -889
  78. package/dist/components/layouts/fullpage.css +0 -628
  79. package/dist/helpers/artifactPanel.d.ts +0 -6
  80. package/dist/helpers/artifactPanel.js +0 -42
  81. package/dist/helpers/artifactPanel.js.map +0 -1
  82. package/dist/helpers/chatScroll.d.ts +0 -12
  83. package/dist/helpers/chatScroll.js +0 -14
  84. package/dist/helpers/chatScroll.js.map +0 -1
  85. package/dist/helpers/conversationHistory.d.ts +0 -16
  86. package/dist/helpers/conversationHistory.js +0 -89
  87. package/dist/helpers/conversationHistory.js.map +0 -1
  88. package/dist/helpers/conversationTitle.d.ts +0 -8
  89. package/dist/helpers/conversationTitle.js +0 -27
  90. package/dist/helpers/conversationTitle.js.map +0 -1
  91. package/dist/helpers/enhanceBubbleCodeBlocks.d.ts +0 -5
  92. package/dist/helpers/enhanceBubbleCodeBlocks.js +0 -97
  93. package/dist/helpers/enhanceBubbleCodeBlocks.js.map +0 -1
  94. package/dist/helpers/highlightMatches.d.ts +0 -2
  95. package/dist/helpers/highlightMatches.js +0 -54
  96. package/dist/helpers/highlightMatches.js.map +0 -1
  97. package/dist/helpers/positionPopover.d.ts +0 -3
  98. package/dist/helpers/positionPopover.js +0 -22
  99. package/dist/helpers/positionPopover.js.map +0 -1
  100. package/dist/helpers/prism.d.ts +0 -16
  101. package/dist/helpers/prism.js +0 -78
  102. package/dist/helpers/prism.js.map +0 -1
  103. package/dist/helpers/reasoning.d.ts +0 -7
  104. package/dist/helpers/reasoning.js +0 -43
  105. package/dist/helpers/reasoning.js.map +0 -1
  106. package/dist/helpers/relativeTime.d.ts +0 -3
  107. package/dist/helpers/relativeTime.js +0 -56
  108. package/dist/helpers/relativeTime.js.map +0 -1
  109. package/dist/helpers/sourcesCount.d.ts +0 -2
  110. package/dist/helpers/sourcesCount.js +0 -22
  111. package/dist/helpers/sourcesCount.js.map +0 -1
  112. package/dist/helpers/tts/muteSpeaker.d.ts +0 -13
  113. package/dist/helpers/tts/muteSpeaker.js +0 -26
  114. package/dist/helpers/tts/muteSpeaker.js.map +0 -1
  115. package/dist/helpers/usePressTooltip.d.ts +0 -18
  116. package/dist/helpers/usePressTooltip.js +0 -38
  117. package/dist/helpers/usePressTooltip.js.map +0 -1
  118. package/dist/icons/FacebookIcon.d.ts +0 -3
  119. package/dist/icons/FacebookIcon.js +0 -6
  120. package/dist/icons/FacebookIcon.js.map +0 -1
  121. package/dist/icons/LinkedinIcon.d.ts +0 -3
  122. package/dist/icons/LinkedinIcon.js +0 -6
  123. package/dist/icons/LinkedinIcon.js.map +0 -1
  124. package/dist/icons/MemoriIcon.d.ts +0 -3
  125. package/dist/icons/MemoriIcon.js +0 -8
  126. package/dist/icons/MemoriIcon.js.map +0 -1
  127. package/dist/icons/TelegramIcon.d.ts +0 -3
  128. package/dist/icons/TelegramIcon.js +0 -6
  129. package/dist/icons/TelegramIcon.js.map +0 -1
  130. package/dist/icons/TwitterIcon.d.ts +0 -3
  131. package/dist/icons/TwitterIcon.js +0 -6
  132. package/dist/icons/TwitterIcon.js.map +0 -1
  133. package/dist/icons/WhatsappIcon.d.ts +0 -3
  134. package/dist/icons/WhatsappIcon.js +0 -6
  135. package/dist/icons/WhatsappIcon.js.map +0 -1
  136. package/dist/icons/artifacts/DocumentIcon.d.ts +0 -3
  137. package/dist/icons/artifacts/DocumentIcon.js +0 -6
  138. package/dist/icons/artifacts/DocumentIcon.js.map +0 -1
  139. package/dist/icons/artifacts/HtmlIcon.d.ts +0 -3
  140. package/dist/icons/artifacts/HtmlIcon.js +0 -6
  141. package/dist/icons/artifacts/HtmlIcon.js.map +0 -1
  142. package/dist/icons/artifacts/JavascriptIcon.d.ts +0 -3
  143. package/dist/icons/artifacts/JavascriptIcon.js +0 -6
  144. package/dist/icons/artifacts/JavascriptIcon.js.map +0 -1
  145. package/dist/icons/artifacts/MarkdownIcon.d.ts +0 -3
  146. package/dist/icons/artifacts/MarkdownIcon.js +0 -6
  147. package/dist/icons/artifacts/MarkdownIcon.js.map +0 -1
  148. package/dist/icons/artifacts/PythonIcon.d.ts +0 -3
  149. package/dist/icons/artifacts/PythonIcon.js +0 -6
  150. package/dist/icons/artifacts/PythonIcon.js.map +0 -1
  151. package/dist/icons/artifacts/SvgIcon.d.ts +0 -3
  152. package/dist/icons/artifacts/SvgIcon.js +0 -6
  153. package/dist/icons/artifacts/SvgIcon.js.map +0 -1
  154. package/dist/icons/artifacts/XmlIcon.d.ts +0 -3
  155. package/dist/icons/artifacts/XmlIcon.js +0 -6
  156. package/dist/icons/artifacts/XmlIcon.js.map +0 -1
  157. package/dist/icons/artifacts/cssIcon.d.ts +0 -3
  158. package/dist/icons/artifacts/cssIcon.js +0 -6
  159. package/dist/icons/artifacts/cssIcon.js.map +0 -1
  160. package/dist/styles/motion.css +0 -25
  161. package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.d.ts +0 -39
  162. package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.js +0 -40
  163. package/esm/components/ChatHistoryDrawer/ChatResumeDrawer.js.map +0 -1
  164. package/esm/components/ContentPreviewModal/DocumentMarkdown.d.ts +0 -7
  165. package/esm/components/ContentPreviewModal/DocumentMarkdown.js +0 -28
  166. package/esm/components/ContentPreviewModal/DocumentMarkdown.js.map +0 -1
  167. package/esm/components/DrawerFooter/DrawerFooter.d.ts +0 -12
  168. package/esm/components/DrawerFooter/DrawerFooter.js +0 -8
  169. package/esm/components/DrawerFooter/DrawerFooter.js.map +0 -1
  170. package/esm/components/IconButton/IconButton.d.ts +0 -9
  171. package/esm/components/IconButton/IconButton.js +0 -33
  172. package/esm/components/IconButton/IconButton.js.map +0 -1
  173. package/esm/components/LoginModal/LoginModal.d.ts +0 -19
  174. package/esm/components/LoginModal/LoginModal.js +0 -352
  175. package/esm/components/LoginModal/LoginModal.js.map +0 -1
  176. package/esm/components/MobileSessionPanel/MobileSessionPanel.d.ts +0 -65
  177. package/esm/components/MobileSessionPanel/MobileSessionPanel.js +0 -251
  178. package/esm/components/MobileSessionPanel/MobileSessionPanel.js.map +0 -1
  179. package/esm/components/PositionPopover/PositionPopover.d.ts +0 -22
  180. package/esm/components/PositionPopover/PositionPopover.js +0 -203
  181. package/esm/components/PositionPopover/PositionPopover.js.map +0 -1
  182. package/esm/components/ReasoningBlock/ReasoningBlock.d.ts +0 -7
  183. package/esm/components/ReasoningBlock/ReasoningBlock.js +0 -58
  184. package/esm/components/ReasoningBlock/ReasoningBlock.js.map +0 -1
  185. package/esm/components/SideDrawer/SideDrawer.d.ts +0 -22
  186. package/esm/components/SideDrawer/SideDrawer.js +0 -12
  187. package/esm/components/SideDrawer/SideDrawer.js.map +0 -1
  188. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.d.ts +0 -4
  189. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js +0 -141
  190. package/esm/components/layouts/WebsiteAssistant/WebsiteAssistant.js.map +0 -1
  191. package/esm/helpers/artifactPanel.d.ts +0 -6
  192. package/esm/helpers/artifactPanel.js +0 -37
  193. package/esm/helpers/artifactPanel.js.map +0 -1
  194. package/esm/helpers/chatScroll.d.ts +0 -12
  195. package/esm/helpers/chatScroll.js +0 -9
  196. package/esm/helpers/chatScroll.js.map +0 -1
  197. package/esm/helpers/conversationHistory.d.ts +0 -16
  198. package/esm/helpers/conversationHistory.js +0 -82
  199. package/esm/helpers/conversationHistory.js.map +0 -1
  200. package/esm/helpers/conversationTitle.d.ts +0 -8
  201. package/esm/helpers/conversationTitle.js +0 -23
  202. package/esm/helpers/conversationTitle.js.map +0 -1
  203. package/esm/helpers/enhanceBubbleCodeBlocks.d.ts +0 -5
  204. package/esm/helpers/enhanceBubbleCodeBlocks.js +0 -94
  205. package/esm/helpers/enhanceBubbleCodeBlocks.js.map +0 -1
  206. package/esm/helpers/highlightMatches.d.ts +0 -2
  207. package/esm/helpers/highlightMatches.js +0 -49
  208. package/esm/helpers/highlightMatches.js.map +0 -1
  209. package/esm/helpers/positionPopover.d.ts +0 -3
  210. package/esm/helpers/positionPopover.js +0 -17
  211. package/esm/helpers/positionPopover.js.map +0 -1
  212. package/esm/helpers/prism.d.ts +0 -16
  213. package/esm/helpers/prism.js +0 -74
  214. package/esm/helpers/prism.js.map +0 -1
  215. package/esm/helpers/reasoning.d.ts +0 -7
  216. package/esm/helpers/reasoning.js +0 -39
  217. package/esm/helpers/reasoning.js.map +0 -1
  218. package/esm/helpers/relativeTime.d.ts +0 -3
  219. package/esm/helpers/relativeTime.js +0 -50
  220. package/esm/helpers/relativeTime.js.map +0 -1
  221. package/esm/helpers/sourcesCount.d.ts +0 -2
  222. package/esm/helpers/sourcesCount.js +0 -18
  223. package/esm/helpers/sourcesCount.js.map +0 -1
  224. package/esm/helpers/tts/muteSpeaker.d.ts +0 -13
  225. package/esm/helpers/tts/muteSpeaker.js +0 -21
  226. package/esm/helpers/tts/muteSpeaker.js.map +0 -1
  227. package/esm/helpers/usePressTooltip.d.ts +0 -18
  228. package/esm/helpers/usePressTooltip.js +0 -35
  229. package/esm/helpers/usePressTooltip.js.map +0 -1
  230. package/esm/icons/FacebookIcon.d.ts +0 -3
  231. package/esm/icons/FacebookIcon.js +0 -4
  232. package/esm/icons/FacebookIcon.js.map +0 -1
  233. package/esm/icons/LinkedinIcon.d.ts +0 -3
  234. package/esm/icons/LinkedinIcon.js +0 -4
  235. package/esm/icons/LinkedinIcon.js.map +0 -1
  236. package/esm/icons/MemoriIcon.d.ts +0 -3
  237. package/esm/icons/MemoriIcon.js +0 -6
  238. package/esm/icons/MemoriIcon.js.map +0 -1
  239. package/esm/icons/TelegramIcon.d.ts +0 -3
  240. package/esm/icons/TelegramIcon.js +0 -4
  241. package/esm/icons/TelegramIcon.js.map +0 -1
  242. package/esm/icons/TwitterIcon.d.ts +0 -3
  243. package/esm/icons/TwitterIcon.js +0 -4
  244. package/esm/icons/TwitterIcon.js.map +0 -1
  245. package/esm/icons/WhatsappIcon.d.ts +0 -3
  246. package/esm/icons/WhatsappIcon.js +0 -4
  247. package/esm/icons/WhatsappIcon.js.map +0 -1
  248. package/esm/icons/artifacts/DocumentIcon.d.ts +0 -3
  249. package/esm/icons/artifacts/DocumentIcon.js +0 -4
  250. package/esm/icons/artifacts/DocumentIcon.js.map +0 -1
  251. package/esm/icons/artifacts/HtmlIcon.d.ts +0 -3
  252. package/esm/icons/artifacts/HtmlIcon.js +0 -4
  253. package/esm/icons/artifacts/HtmlIcon.js.map +0 -1
  254. package/esm/icons/artifacts/JavascriptIcon.d.ts +0 -3
  255. package/esm/icons/artifacts/JavascriptIcon.js +0 -4
  256. package/esm/icons/artifacts/JavascriptIcon.js.map +0 -1
  257. package/esm/icons/artifacts/MarkdownIcon.d.ts +0 -3
  258. package/esm/icons/artifacts/MarkdownIcon.js +0 -4
  259. package/esm/icons/artifacts/MarkdownIcon.js.map +0 -1
  260. package/esm/icons/artifacts/PythonIcon.d.ts +0 -3
  261. package/esm/icons/artifacts/PythonIcon.js +0 -4
  262. package/esm/icons/artifacts/PythonIcon.js.map +0 -1
  263. package/esm/icons/artifacts/SvgIcon.d.ts +0 -3
  264. package/esm/icons/artifacts/SvgIcon.js +0 -4
  265. package/esm/icons/artifacts/SvgIcon.js.map +0 -1
  266. package/esm/icons/artifacts/XmlIcon.d.ts +0 -3
  267. package/esm/icons/artifacts/XmlIcon.js +0 -4
  268. package/esm/icons/artifacts/XmlIcon.js.map +0 -1
  269. package/esm/icons/artifacts/cssIcon.d.ts +0 -3
  270. package/esm/icons/artifacts/cssIcon.js +0 -4
  271. package/esm/icons/artifacts/cssIcon.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
 
2
2
 
3
+ ## [8.46.0](https://github.com/memori-ai/memori-react/compare/v8.45.6...v8.46.0) (2026-09-29)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **nats:** avoid re-applying stale dialog state on tab resume ([7336d45](https://github.com/memori-ai/memori-react/commit/7336d4517ca0b9e68d348188b3903005bd0356fc))
9
+
10
+ ## [8.45.6](https://github.com/memori-ai/memori-react/compare/v8.45.5...v8.45.6) (2026-09-28)
11
+
12
+
13
+ ### Features
14
+
15
+ * **speech:** implement speech error handling and session management in TTS and STT ([c607801](https://github.com/memori-ai/memori-react/commit/c6078014b6ba1465a89a11632968b5e4d6c62223))
16
+
3
17
  ## [8.45.5](https://github.com/memori-ai/memori-react/compare/v8.45.4...v8.45.5) (2026-09-25)
4
18
 
5
19
 
@@ -40,6 +40,7 @@ const error_1 = require("../../helpers/error");
40
40
  const credits_1 = require("../../helpers/credits");
41
41
  const sanitizer_1 = require("../../helpers/sanitizer");
42
42
  const useTTS_1 = require("../../helpers/tts/useTTS");
43
+ const speechRequest_1 = require("../../helpers/speech/speechRequest");
43
44
  const ChatHistory_1 = tslib_1.__importDefault(require("../ChatHistoryDrawer/ChatHistory"));
44
45
  const useSTT_1 = require("../../helpers/stt/useSTT");
45
46
  const useNats_1 = require("../../helpers/nats/useNats");
@@ -86,6 +87,7 @@ function readCorrelationID(response) {
86
87
  const value = response.correlationID;
87
88
  return typeof value === 'string' && value.length > 0 ? value : undefined;
88
89
  }
90
+ const MAX_WAIT_FOR_PREVIOUS_RETRIES = 30;
89
91
  const typeMessage = (message, waitForPrevious = true, hidden = false, typingText, useLoaderTextAsMsg = false, hasBatchQueued = false) => {
90
92
  const e = new CustomEvent('MemoriTextEntered', {
91
93
  detail: {
@@ -501,7 +503,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
501
503
  if (response.resultCode === 0 && correlationID) {
502
504
  registerPendingEnterText(correlationID, {
503
505
  msg,
504
- stateBeforeRequest: (0, dialogStateCatchUp_1.dialogStateFingerprint)(currentDialogState),
506
+ stateBeforeRequest: engineStateFingerprintRef.current,
505
507
  text,
506
508
  media,
507
509
  translate,
@@ -555,7 +557,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
555
557
  setMemoriTyping(false);
556
558
  }
557
559
  };
558
- const translateDialogState = async (state, userLang, msg, avoidPushingMessage = false) => {
560
+ const translateDialogState = async (state, userLang, msg, avoidPushingMessage = false, engineState = state) => {
559
561
  var _a, _b, _c, _d, _f, _g;
560
562
  const emission = (_a = state === null || state === void 0 ? void 0 : state.emission) !== null && _a !== void 0 ? _a : currentDialogState === null || currentDialogState === void 0 ? void 0 : currentDialogState.emission;
561
563
  let translatedState = { ...state };
@@ -651,7 +653,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
651
653
  };
652
654
  }
653
655
  }
654
- setCurrentDialogState(translatedState);
656
+ setCurrentDialogState(translatedState, engineState);
655
657
  if (!avoidPushingMessage && translatedMsg) {
656
658
  pushMessage(translatedMsg);
657
659
  }
@@ -722,10 +724,17 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
722
724
  }
723
725
  return voice;
724
726
  };
725
- const [sessionId, setSessionId] = (0, react_1.useState)(initialSessionID);
727
+ const [sessionId, setSessionIdState] = (0, react_1.useState)(initialSessionID);
728
+ const sessionIdRef = (0, react_1.useRef)(initialSessionID);
729
+ const setSessionId = (id) => {
730
+ sessionIdRef.current = id;
731
+ setSessionIdState(id);
732
+ };
726
733
  const [currentDialogState, _setCurrentDialogState] = (0, react_1.useState)();
727
- const setCurrentDialogState = (state) => {
734
+ const engineStateFingerprintRef = (0, react_1.useRef)('');
735
+ const setCurrentDialogState = (state, engineState = state) => {
728
736
  var _a, _b;
737
+ engineStateFingerprintRef.current = (0, dialogStateCatchUp_1.dialogStateFingerprint)(engineState);
729
738
  _setCurrentDialogState(state);
730
739
  if (onStateChange) {
731
740
  onStateChange(state);
@@ -1127,20 +1136,44 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
1127
1136
  provider: ttsProvider,
1128
1137
  voice: (0, ttsVoiceUtility_1.getTTSVoice)(userLang || ((_b = (_a = memori.culture) === null || _a === void 0 ? void 0 : _a.split('-')) === null || _b === void 0 ? void 0 : _b[0]) || 'EN', ttsProvider, memori.voiceType),
1129
1138
  tenant: tenantID,
1139
+ sessionId,
1140
+ sessionIdRef,
1130
1141
  region: 'westeurope',
1131
1142
  voiceType: memori.voiceType,
1132
1143
  layout: selectedLayout,
1133
1144
  });
1134
- }, [ttsProvider, userLang, memori.culture, memori.voiceType, selectedLayout]);
1145
+ }, [
1146
+ ttsProvider,
1147
+ userLang,
1148
+ memori.culture,
1149
+ memori.voiceType,
1150
+ selectedLayout,
1151
+ tenantID,
1152
+ sessionId,
1153
+ sessionIdRef,
1154
+ ]);
1135
1155
  const sttConfig = (0, react_1.useMemo)(() => ({
1136
1156
  provider: ttsProvider,
1137
1157
  language: getCultureCodeByLanguage(userLang),
1138
1158
  tenant: tenantID,
1139
- }), [ttsProvider, userLang]);
1159
+ sessionId,
1160
+ sessionIdRef,
1161
+ }), [ttsProvider, userLang, tenantID, sessionId, sessionIdRef]);
1162
+ const reportSpeechError = (0, react_1.useCallback)((error) => {
1163
+ const key = (0, speechRequest_1.speechErrorI18nKey)(error);
1164
+ const message = key ? String(t(key)) : error.message;
1165
+ if (error instanceof speechRequest_1.SpeechRequestError &&
1166
+ error.code === 'rate_limited') {
1167
+ (0, react_hot_toast_1.default)(message);
1168
+ return;
1169
+ }
1170
+ react_hot_toast_1.default.error(message);
1171
+ }, [t]);
1140
1172
  const { speak: ttsSpeak, stop: ttsStop, isPlaying: isPlayingAudio, speakerMuted, toggleMute, hasUserActivatedSpeak, setHasUserActivatedSpeak, } = (0, useTTS_1.useTTS)(ttsConfig, {
1141
1173
  apiUrl: `${baseUrl}/api/tts`,
1142
1174
  continuousSpeech: continuousSpeech,
1143
1175
  preview: preview,
1176
+ onError: reportSpeechError,
1144
1177
  }, autoStart, defaultEnableAudio, (_w = defaultSpeakerActive !== null && defaultSpeakerActive !== void 0 ? defaultSpeakerActive : integrationConfig === null || integrationConfig === void 0 ? void 0 : integrationConfig.defaultSpeakerActive) !== null && _w !== void 0 ? _w : true);
1145
1178
  const shouldPlayAudio = (text) => {
1146
1179
  const currentSpeakerMuted = (0, configuration_1.getLocalConfig)('muteSpeaker', !defaultEnableAudio);
@@ -1166,6 +1199,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
1166
1199
  };
1167
1200
  const { isListening, startRecording, stopRecording, } = (0, useSTT_1.useSTT)(sttConfig, processSpeechAndSendMessage, {
1168
1201
  apiUrl: `${baseUrl}/api/stt`,
1202
+ onError: reportSpeechError,
1169
1203
  }, defaultEnableAudio);
1170
1204
  const handleSpeak = async (text) => {
1171
1205
  if (!shouldPlayAudio(text)) {
@@ -1255,8 +1289,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
1255
1289
  if (userLang.toLowerCase() !== language.toLowerCase() &&
1256
1290
  emission &&
1257
1291
  isMultilanguageEnabled) {
1258
- currentState.emission = emission;
1259
- translateDialogState(currentState, userLang, msg).then(ts => {
1292
+ translateDialogState({ ...currentState, emission }, userLang, msg, false, currentState).then(ts => {
1260
1293
  const text = ts.translatedEmission || ts.emission;
1261
1294
  if (text && shouldPlayAudio(text)) {
1262
1295
  handleSpeak(text);
@@ -1267,7 +1300,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
1267
1300
  setCurrentDialogState({
1268
1301
  ...currentState,
1269
1302
  emission,
1270
- });
1303
+ }, currentState);
1271
1304
  if (emission) {
1272
1305
  pushMessage({
1273
1306
  text: emission,
@@ -1390,7 +1423,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
1390
1423
  reject(new Error('NATS enter-text response timeout'));
1391
1424
  }, timeoutMs);
1392
1425
  registerPendingEnterText(correlationID, {
1393
- stateBeforeRequest: (0, dialogStateCatchUp_1.dialogStateFingerprint)(currentDialogState),
1426
+ stateBeforeRequest: engineStateFingerprintRef.current,
1394
1427
  waitForResponse: {
1395
1428
  resolve: event => {
1396
1429
  clearTimeout(timeoutId);
@@ -1403,7 +1436,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
1403
1436
  timeoutId,
1404
1437
  },
1405
1438
  });
1406
- }), [registerPendingEnterText, clearEnterTextPending, currentDialogState]);
1439
+ }), [registerPendingEnterText, clearEnterTextPending]);
1407
1440
  const catchUpPendingEnterText = (0, react_1.useCallback)(async () => {
1408
1441
  if (!sessionId || pendingEnterTextRef.current.size === 0)
1409
1442
  return;
@@ -1424,7 +1457,9 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
1424
1457
  });
1425
1458
  return;
1426
1459
  }
1427
- if (!(0, dialogStateCatchUp_1.isEnterTextCatchUpReady)(pending.stateBeforeRequest, currentState)) {
1460
+ if (!(0, dialogStateCatchUp_1.isEnterTextCatchUpReady)(pending.stateBeforeRequest, currentState) ||
1461
+ (0, dialogStateCatchUp_1.dialogStateFingerprint)(currentState) ===
1462
+ engineStateFingerprintRef.current) {
1428
1463
  console.info('[NATS] catch-up: pending turn has not completed yet');
1429
1464
  return;
1430
1465
  }
@@ -1619,7 +1654,7 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
1619
1654
  ttsStop();
1620
1655
  sendMessage(text, undefined, undefined, false, translatedText);
1621
1656
  };
1622
- const memoriTextEnteredHandler = (0, react_1.useCallback)((e) => {
1657
+ const memoriTextEnteredHandler = (e, retries = 0) => {
1623
1658
  if (disableTextEnteredEvents) {
1624
1659
  return;
1625
1660
  }
@@ -1627,9 +1662,10 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
1627
1662
  if (text) {
1628
1663
  if (waitForPrevious &&
1629
1664
  !speakerMuted &&
1630
- (memoriSpeaking || !!memoriTyping)) {
1665
+ (memoriSpeaking || pendingEnterTextRef.current.size > 0) &&
1666
+ retries < MAX_WAIT_FOR_PREVIOUS_RETRIES) {
1631
1667
  setTimeout(() => {
1632
- memoriTextEnteredHandler(e);
1668
+ memoriTextEnteredHandlerRef.current(e, retries + 1);
1633
1669
  }, 1000);
1634
1670
  }
1635
1671
  else {
@@ -1637,25 +1673,18 @@ const MemoriWidget = ({ memori, memoriConfigs, ownerUserID, ownerUserName, tenan
1637
1673
  sendMessage(text, undefined, undefined, undefined, undefined, hidden, typingText, useLoaderTextAsMsg, hasBatchQueued);
1638
1674
  }
1639
1675
  }
1640
- }, [
1641
- sessionId,
1642
- isPlayingAudio,
1643
- memoriTyping,
1644
- userLang,
1645
- disableTextEnteredEvents,
1646
- speakerMuted,
1647
- ]);
1676
+ };
1677
+ const memoriTextEnteredHandlerRef = (0, react_1.useRef)(memoriTextEnteredHandler);
1678
+ memoriTextEnteredHandlerRef.current = memoriTextEnteredHandler;
1648
1679
  (0, react_1.useEffect)(() => {
1649
- if (!disableTextEnteredEvents) {
1650
- document.addEventListener('MemoriTextEntered', memoriTextEnteredHandler);
1651
- }
1652
- else {
1653
- document.removeEventListener('MemoriTextEntered', memoriTextEnteredHandler);
1654
- }
1680
+ if (disableTextEnteredEvents)
1681
+ return;
1682
+ const listener = (e) => memoriTextEnteredHandlerRef.current(e);
1683
+ document.addEventListener('MemoriTextEntered', listener);
1655
1684
  return () => {
1656
- document.removeEventListener('MemoriTextEntered', memoriTextEnteredHandler);
1685
+ document.removeEventListener('MemoriTextEntered', listener);
1657
1686
  };
1658
- }, [sessionId, userLang, disableTextEnteredEvents]);
1687
+ }, [disableTextEnteredEvents]);
1659
1688
  const onClickStart = (0, react_1.useCallback)(async (session, initialSessionExpired = false, chatLog, targetSessionID) => {
1660
1689
  var _a, _b, _c, _d, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
1661
1690
  const sessionID = chatLog ? undefined : (session === null || session === void 0 ? void 0 : session.sessionID) || sessionId;