@memori.ai/memori-react 1.0.0-alpha.1

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 (1117) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +55 -0
  3. package/dist/components/Auth/Auth.css +57 -0
  4. package/dist/components/Auth/Auth.d.ts +16 -0
  5. package/dist/components/Auth/Auth.js +70 -0
  6. package/dist/components/Auth/Auth.js.map +1 -0
  7. package/dist/components/Auth/Auth.stories.d.ts +8 -0
  8. package/dist/components/Auth/Auth.stories.js +60 -0
  9. package/dist/components/Auth/Auth.stories.js.map +1 -0
  10. package/dist/components/Auth/Auth.test.d.ts +1 -0
  11. package/dist/components/Auth/Auth.test.js +23 -0
  12. package/dist/components/Auth/Auth.test.js.map +1 -0
  13. package/dist/components/Avatar/Avatar.css +151 -0
  14. package/dist/components/Avatar/Avatar.d.ts +19 -0
  15. package/dist/components/Avatar/Avatar.js +80 -0
  16. package/dist/components/Avatar/Avatar.js.map +1 -0
  17. package/dist/components/Avatar/Avatar.stories.d.ts +8 -0
  18. package/dist/components/Avatar/Avatar.stories.js +92 -0
  19. package/dist/components/Avatar/Avatar.stories.js.map +1 -0
  20. package/dist/components/Avatar/Avatar.test.d.ts +1 -0
  21. package/dist/components/Avatar/Avatar.test.js +38 -0
  22. package/dist/components/Avatar/Avatar.test.js.map +1 -0
  23. package/dist/components/AvatarView/AvatarView.stories.d.ts +9 -0
  24. package/dist/components/AvatarView/AvatarView.stories.js +94 -0
  25. package/dist/components/AvatarView/AvatarView.stories.js.map +1 -0
  26. package/dist/components/AvatarView/components/avatar.d.ts +10 -0
  27. package/dist/components/AvatarView/components/avatar.js +38 -0
  28. package/dist/components/AvatarView/components/avatar.js.map +1 -0
  29. package/dist/components/AvatarView/components/loader.d.ts +6 -0
  30. package/dist/components/AvatarView/components/loader.js +15 -0
  31. package/dist/components/AvatarView/components/loader.js.map +1 -0
  32. package/dist/components/AvatarView/index.d.ts +13 -0
  33. package/dist/components/AvatarView/index.js +24 -0
  34. package/dist/components/AvatarView/index.js.map +1 -0
  35. package/dist/components/AvatarView/utils/useEyeBlink.d.ts +2 -0
  36. package/dist/components/AvatarView/utils/useEyeBlink.js +40 -0
  37. package/dist/components/AvatarView/utils/useEyeBlink.js.map +1 -0
  38. package/dist/components/AvatarView/utils/useHeadMovement.d.ts +2 -0
  39. package/dist/components/AvatarView/utils/useHeadMovement.js +53 -0
  40. package/dist/components/AvatarView/utils/useHeadMovement.js.map +1 -0
  41. package/dist/components/AvatarView/utils/useMouthSpeaking.d.ts +2 -0
  42. package/dist/components/AvatarView/utils/useMouthSpeaking.js +58 -0
  43. package/dist/components/AvatarView/utils/useMouthSpeaking.js.map +1 -0
  44. package/dist/components/AvatarView/utils/utils.d.ts +13 -0
  45. package/dist/components/AvatarView/utils/utils.js +42 -0
  46. package/dist/components/AvatarView/utils/utils.js.map +1 -0
  47. package/dist/components/Blob/Blob.css +249 -0
  48. package/dist/components/Blob/Blob.d.ts +7 -0
  49. package/dist/components/Blob/Blob.js +17 -0
  50. package/dist/components/Blob/Blob.js.map +1 -0
  51. package/dist/components/Blob/Blob.stories.d.ts +6 -0
  52. package/dist/components/Blob/Blob.stories.js +30 -0
  53. package/dist/components/Blob/Blob.stories.js.map +1 -0
  54. package/dist/components/Blob/Blob.test.d.ts +1 -0
  55. package/dist/components/Blob/Blob.test.js +15 -0
  56. package/dist/components/Blob/Blob.test.js.map +1 -0
  57. package/dist/components/BlockedMemoriBadge/BlockedMemoriBadge.css +40 -0
  58. package/dist/components/BlockedMemoriBadge/BlockedMemoriBadge.d.ts +11 -0
  59. package/dist/components/BlockedMemoriBadge/BlockedMemoriBadge.js +39 -0
  60. package/dist/components/BlockedMemoriBadge/BlockedMemoriBadge.js.map +1 -0
  61. package/dist/components/BlockedMemoriBadge/BlockedMemoriBadge.stories.d.ts +8 -0
  62. package/dist/components/BlockedMemoriBadge/BlockedMemoriBadge.stories.js +40 -0
  63. package/dist/components/BlockedMemoriBadge/BlockedMemoriBadge.stories.js.map +1 -0
  64. package/dist/components/BlockedMemoriBadge/BlockedMemoriBadge.test.d.ts +1 -0
  65. package/dist/components/BlockedMemoriBadge/BlockedMemoriBadge.test.js +23 -0
  66. package/dist/components/BlockedMemoriBadge/BlockedMemoriBadge.test.js.map +1 -0
  67. package/dist/components/ChangeMode/ChangeMode.css +22 -0
  68. package/dist/components/ChangeMode/ChangeMode.d.ts +8 -0
  69. package/dist/components/ChangeMode/ChangeMode.js +17 -0
  70. package/dist/components/ChangeMode/ChangeMode.js.map +1 -0
  71. package/dist/components/ChangeMode/ChangeMode.stories.d.ts +6 -0
  72. package/dist/components/ChangeMode/ChangeMode.stories.js +34 -0
  73. package/dist/components/ChangeMode/ChangeMode.stories.js.map +1 -0
  74. package/dist/components/ChangeMode/ChangeMode.test.d.ts +1 -0
  75. package/dist/components/ChangeMode/ChangeMode.test.js +15 -0
  76. package/dist/components/ChangeMode/ChangeMode.test.js.map +1 -0
  77. package/dist/components/Chat/Chat.css +117 -0
  78. package/dist/components/Chat/Chat.d.ts +35 -0
  79. package/dist/components/Chat/Chat.js +125 -0
  80. package/dist/components/Chat/Chat.js.map +1 -0
  81. package/dist/components/Chat/Chat.stories.d.ts +13 -0
  82. package/dist/components/Chat/Chat.stories.js +162 -0
  83. package/dist/components/Chat/Chat.stories.js.map +1 -0
  84. package/dist/components/Chat/Chat.test.d.ts +1 -0
  85. package/dist/components/Chat/Chat.test.js +52 -0
  86. package/dist/components/Chat/Chat.test.js.map +1 -0
  87. package/dist/components/ChatBubble/ChatBubble.css +159 -0
  88. package/dist/components/ChatBubble/ChatBubble.d.ts +11 -0
  89. package/dist/components/ChatBubble/ChatBubble.js +41 -0
  90. package/dist/components/ChatBubble/ChatBubble.js.map +1 -0
  91. package/dist/components/ChatBubble/ChatBubble.stories.d.ts +6 -0
  92. package/dist/components/ChatBubble/ChatBubble.stories.js +56 -0
  93. package/dist/components/ChatBubble/ChatBubble.stories.js.map +1 -0
  94. package/dist/components/ChatBubble/ChatBubble.test.d.ts +1 -0
  95. package/dist/components/ChatBubble/ChatBubble.test.js +26 -0
  96. package/dist/components/ChatBubble/ChatBubble.test.js.map +1 -0
  97. package/dist/components/ChatInputs/ChatInputs.css +21 -0
  98. package/dist/components/ChatInputs/ChatInputs.d.ts +19 -0
  99. package/dist/components/ChatInputs/ChatInputs.js +21 -0
  100. package/dist/components/ChatInputs/ChatInputs.js.map +1 -0
  101. package/dist/components/ChatInputs/ChatInputs.stories.d.ts +9 -0
  102. package/dist/components/ChatInputs/ChatInputs.stories.js +90 -0
  103. package/dist/components/ChatInputs/ChatInputs.stories.js.map +1 -0
  104. package/dist/components/ChatInputs/ChatInputs.test.d.ts +1 -0
  105. package/dist/components/ChatInputs/ChatInputs.test.js +30 -0
  106. package/dist/components/ChatInputs/ChatInputs.test.js.map +1 -0
  107. package/dist/components/ChatTextArea/ChatTextArea.css +88 -0
  108. package/dist/components/ChatTextArea/ChatTextArea.d.ts +12 -0
  109. package/dist/components/ChatTextArea/ChatTextArea.js +28 -0
  110. package/dist/components/ChatTextArea/ChatTextArea.js.map +1 -0
  111. package/dist/components/ChatTextArea/ChatTextArea.stories.d.ts +7 -0
  112. package/dist/components/ChatTextArea/ChatTextArea.stories.js +42 -0
  113. package/dist/components/ChatTextArea/ChatTextArea.stories.js.map +1 -0
  114. package/dist/components/ChatTextArea/ChatTextArea.test.d.ts +1 -0
  115. package/dist/components/ChatTextArea/ChatTextArea.test.js +24 -0
  116. package/dist/components/ChatTextArea/ChatTextArea.test.js.map +1 -0
  117. package/dist/components/CustomGLBModelViewer/ModelViewer.css +11 -0
  118. package/dist/components/CustomGLBModelViewer/ModelViewer.d.ts +9 -0
  119. package/dist/components/CustomGLBModelViewer/ModelViewer.js +21 -0
  120. package/dist/components/CustomGLBModelViewer/ModelViewer.js.map +1 -0
  121. package/dist/components/CustomGLBModelViewer/ModelViewer.stories.d.ts +5 -0
  122. package/dist/components/CustomGLBModelViewer/ModelViewer.stories.js +45 -0
  123. package/dist/components/CustomGLBModelViewer/ModelViewer.stories.js.map +1 -0
  124. package/dist/components/CustomGLBModelViewer/ModelViewer.test.d.ts +1 -0
  125. package/dist/components/CustomGLBModelViewer/ModelViewer.test.js +11 -0
  126. package/dist/components/CustomGLBModelViewer/ModelViewer.test.js.map +1 -0
  127. package/dist/components/ErrorBoundary/ErrorBoundary.d.ts +9 -0
  128. package/dist/components/ErrorBoundary/ErrorBoundary.js +36 -0
  129. package/dist/components/ErrorBoundary/ErrorBoundary.js.map +1 -0
  130. package/dist/components/ExportHistoryButton/ExportHistoryButton.css +22 -0
  131. package/dist/components/ExportHistoryButton/ExportHistoryButton.d.ts +15 -0
  132. package/dist/components/ExportHistoryButton/ExportHistoryButton.js +45 -0
  133. package/dist/components/ExportHistoryButton/ExportHistoryButton.js.map +1 -0
  134. package/dist/components/ExportHistoryButton/ExportHistoryButton.stories.d.ts +8 -0
  135. package/dist/components/ExportHistoryButton/ExportHistoryButton.stories.js +56 -0
  136. package/dist/components/ExportHistoryButton/ExportHistoryButton.stories.js.map +1 -0
  137. package/dist/components/ExportHistoryButton/ExportHistoryButton.test.d.ts +1 -0
  138. package/dist/components/ExportHistoryButton/ExportHistoryButton.test.js +37 -0
  139. package/dist/components/ExportHistoryButton/ExportHistoryButton.test.js.map +1 -0
  140. package/dist/components/Header/Header.css +58 -0
  141. package/dist/components/Header/Header.d.ts +18 -0
  142. package/dist/components/Header/Header.js +27 -0
  143. package/dist/components/Header/Header.js.map +1 -0
  144. package/dist/components/Header/Header.stories.d.ts +10 -0
  145. package/dist/components/Header/Header.stories.js +101 -0
  146. package/dist/components/Header/Header.stories.js.map +1 -0
  147. package/dist/components/Header/Header.test.d.ts +1 -0
  148. package/dist/components/Header/Header.test.js +39 -0
  149. package/dist/components/Header/Header.test.js.map +1 -0
  150. package/dist/components/MediaWidget/LinkItemWidget.css +35 -0
  151. package/dist/components/MediaWidget/LinkItemWidget.d.ts +27 -0
  152. package/dist/components/MediaWidget/LinkItemWidget.js +71 -0
  153. package/dist/components/MediaWidget/LinkItemWidget.js.map +1 -0
  154. package/dist/components/MediaWidget/LinkItemWidget.stories.d.ts +5 -0
  155. package/dist/components/MediaWidget/LinkItemWidget.stories.js +58 -0
  156. package/dist/components/MediaWidget/LinkItemWidget.stories.js.map +1 -0
  157. package/dist/components/MediaWidget/LinkItemWidget.test.d.ts +1 -0
  158. package/dist/components/MediaWidget/LinkItemWidget.test.js +29 -0
  159. package/dist/components/MediaWidget/LinkItemWidget.test.js.map +1 -0
  160. package/dist/components/MediaWidget/MediaItemWidget.css +62 -0
  161. package/dist/components/MediaWidget/MediaItemWidget.d.ts +17 -0
  162. package/dist/components/MediaWidget/MediaItemWidget.js +144 -0
  163. package/dist/components/MediaWidget/MediaItemWidget.js.map +1 -0
  164. package/dist/components/MediaWidget/MediaItemWidget.stories.d.ts +6 -0
  165. package/dist/components/MediaWidget/MediaItemWidget.stories.js +86 -0
  166. package/dist/components/MediaWidget/MediaItemWidget.stories.js.map +1 -0
  167. package/dist/components/MediaWidget/MediaItemWidget.test.d.ts +1 -0
  168. package/dist/components/MediaWidget/MediaItemWidget.test.js +90 -0
  169. package/dist/components/MediaWidget/MediaItemWidget.test.js.map +1 -0
  170. package/dist/components/MediaWidget/MediaWidget.css +121 -0
  171. package/dist/components/MediaWidget/MediaWidget.d.ts +14 -0
  172. package/dist/components/MediaWidget/MediaWidget.js +29 -0
  173. package/dist/components/MediaWidget/MediaWidget.js.map +1 -0
  174. package/dist/components/MediaWidget/MediaWidget.stories.d.ts +8 -0
  175. package/dist/components/MediaWidget/MediaWidget.stories.js +103 -0
  176. package/dist/components/MediaWidget/MediaWidget.stories.js.map +1 -0
  177. package/dist/components/MediaWidget/MediaWidget.test.d.ts +1 -0
  178. package/dist/components/MediaWidget/MediaWidget.test.js +34 -0
  179. package/dist/components/MediaWidget/MediaWidget.test.js.map +1 -0
  180. package/dist/components/MemoriWidget/MemoriWidget.css +199 -0
  181. package/dist/components/MemoriWidget/MemoriWidget.d.ts +43 -0
  182. package/dist/components/MemoriWidget/MemoriWidget.js +1371 -0
  183. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -0
  184. package/dist/components/MemoriWidget/MemoriWidget.stories.d.ts +9 -0
  185. package/dist/components/MemoriWidget/MemoriWidget.stories.js +67 -0
  186. package/dist/components/MemoriWidget/MemoriWidget.stories.js.map +1 -0
  187. package/dist/components/PositionDrawer/PositionDrawer.d.ts +3 -0
  188. package/dist/components/PositionDrawer/PositionDrawer.js +8 -0
  189. package/dist/components/PositionDrawer/PositionDrawer.js.map +1 -0
  190. package/dist/components/SendOnEnterMenu/SendOnEnterMenu.css +47 -0
  191. package/dist/components/SendOnEnterMenu/SendOnEnterMenu.d.ts +8 -0
  192. package/dist/components/SendOnEnterMenu/SendOnEnterMenu.js +23 -0
  193. package/dist/components/SendOnEnterMenu/SendOnEnterMenu.js.map +1 -0
  194. package/dist/components/SendOnEnterMenu/SendOnEnterMenu.stories.d.ts +6 -0
  195. package/dist/components/SendOnEnterMenu/SendOnEnterMenu.stories.js +40 -0
  196. package/dist/components/SendOnEnterMenu/SendOnEnterMenu.stories.js.map +1 -0
  197. package/dist/components/SendOnEnterMenu/SendOnEnterMenu.test.d.ts +1 -0
  198. package/dist/components/SendOnEnterMenu/SendOnEnterMenu.test.js +15 -0
  199. package/dist/components/SendOnEnterMenu/SendOnEnterMenu.test.js.map +1 -0
  200. package/dist/components/ShareButton/ShareButton.css +57 -0
  201. package/dist/components/ShareButton/ShareButton.d.ts +13 -0
  202. package/dist/components/ShareButton/ShareButton.js +112 -0
  203. package/dist/components/ShareButton/ShareButton.js.map +1 -0
  204. package/dist/components/ShareButton/ShareButton.stories.d.ts +7 -0
  205. package/dist/components/ShareButton/ShareButton.stories.js +47 -0
  206. package/dist/components/ShareButton/ShareButton.stories.js.map +1 -0
  207. package/dist/components/ShareButton/ShareButton.test.d.ts +1 -0
  208. package/dist/components/ShareButton/ShareButton.test.js +31 -0
  209. package/dist/components/ShareButton/ShareButton.test.js.map +1 -0
  210. package/dist/components/Snippet/Snippet.css +35 -0
  211. package/dist/components/Snippet/Snippet.d.ts +10 -0
  212. package/dist/components/Snippet/Snippet.js +40 -0
  213. package/dist/components/Snippet/Snippet.js.map +1 -0
  214. package/dist/components/Snippet/Snippet.stories.d.ts +73 -0
  215. package/dist/components/Snippet/Snippet.stories.js +247 -0
  216. package/dist/components/Snippet/Snippet.stories.js.map +1 -0
  217. package/dist/components/Snippet/Snippet.test.d.ts +1 -0
  218. package/dist/components/Snippet/Snippet.test.js +114 -0
  219. package/dist/components/Snippet/Snippet.test.js.map +1 -0
  220. package/dist/components/StartPanel/StartPanel.css +121 -0
  221. package/dist/components/StartPanel/StartPanel.d.ts +23 -0
  222. package/dist/components/StartPanel/StartPanel.js +95 -0
  223. package/dist/components/StartPanel/StartPanel.js.map +1 -0
  224. package/dist/components/StartPanel/StartPanel.stories.d.ts +10 -0
  225. package/dist/components/StartPanel/StartPanel.stories.js +163 -0
  226. package/dist/components/StartPanel/StartPanel.stories.js.map +1 -0
  227. package/dist/components/StartPanel/StartPanel.test.d.ts +1 -0
  228. package/dist/components/StartPanel/StartPanel.test.js +44 -0
  229. package/dist/components/StartPanel/StartPanel.test.js.map +1 -0
  230. package/dist/components/UploadMenu/UploadMenu.css +46 -0
  231. package/dist/components/UploadMenu/UploadMenu.d.ts +9 -0
  232. package/dist/components/UploadMenu/UploadMenu.js +24 -0
  233. package/dist/components/UploadMenu/UploadMenu.js.map +1 -0
  234. package/dist/components/UploadMenu/UploadMenu.stories.d.ts +6 -0
  235. package/dist/components/UploadMenu/UploadMenu.stories.js +41 -0
  236. package/dist/components/UploadMenu/UploadMenu.stories.js.map +1 -0
  237. package/dist/components/UploadMenu/UploadMenu.test.d.ts +1 -0
  238. package/dist/components/UploadMenu/UploadMenu.test.js +23 -0
  239. package/dist/components/UploadMenu/UploadMenu.test.js.map +1 -0
  240. package/dist/components/icons/Close.d.ts +6 -0
  241. package/dist/components/icons/Close.js +8 -0
  242. package/dist/components/icons/Close.js.map +1 -0
  243. package/dist/components/icons/Copy.d.ts +6 -0
  244. package/dist/components/icons/Copy.js +8 -0
  245. package/dist/components/icons/Copy.js.map +1 -0
  246. package/dist/components/icons/Download.d.ts +6 -0
  247. package/dist/components/icons/Download.js +8 -0
  248. package/dist/components/icons/Download.js.map +1 -0
  249. package/dist/components/icons/Edit.d.ts +6 -0
  250. package/dist/components/icons/Edit.js +8 -0
  251. package/dist/components/icons/Edit.js.map +1 -0
  252. package/dist/components/icons/Expand.d.ts +6 -0
  253. package/dist/components/icons/Expand.js +8 -0
  254. package/dist/components/icons/Expand.js.map +1 -0
  255. package/dist/components/icons/Eye.d.ts +6 -0
  256. package/dist/components/icons/Eye.js +8 -0
  257. package/dist/components/icons/Eye.js.map +1 -0
  258. package/dist/components/icons/EyeInvisible.d.ts +6 -0
  259. package/dist/components/icons/EyeInvisible.js +9 -0
  260. package/dist/components/icons/EyeInvisible.js.map +1 -0
  261. package/dist/components/icons/Facebook.d.ts +6 -0
  262. package/dist/components/icons/Facebook.js +8 -0
  263. package/dist/components/icons/Facebook.js.map +1 -0
  264. package/dist/components/icons/File.d.ts +6 -0
  265. package/dist/components/icons/File.js +8 -0
  266. package/dist/components/icons/File.js.map +1 -0
  267. package/dist/components/icons/FileExcel.d.ts +6 -0
  268. package/dist/components/icons/FileExcel.js +8 -0
  269. package/dist/components/icons/FileExcel.js.map +1 -0
  270. package/dist/components/icons/FilePdf.d.ts +6 -0
  271. package/dist/components/icons/FilePdf.js +8 -0
  272. package/dist/components/icons/FilePdf.js.map +1 -0
  273. package/dist/components/icons/FileWord.d.ts +6 -0
  274. package/dist/components/icons/FileWord.js +8 -0
  275. package/dist/components/icons/FileWord.js.map +1 -0
  276. package/dist/components/icons/Fullscreen.d.ts +6 -0
  277. package/dist/components/icons/Fullscreen.js +8 -0
  278. package/dist/components/icons/Fullscreen.js.map +1 -0
  279. package/dist/components/icons/FullscreenExit.d.ts +6 -0
  280. package/dist/components/icons/FullscreenExit.js +8 -0
  281. package/dist/components/icons/FullscreenExit.js.map +1 -0
  282. package/dist/components/icons/Link.d.ts +6 -0
  283. package/dist/components/icons/Link.js +8 -0
  284. package/dist/components/icons/Link.js.map +1 -0
  285. package/dist/components/icons/Linkedin.d.ts +6 -0
  286. package/dist/components/icons/Linkedin.js +8 -0
  287. package/dist/components/icons/Linkedin.js.map +1 -0
  288. package/dist/components/icons/Loading.d.ts +8 -0
  289. package/dist/components/icons/Loading.js +12 -0
  290. package/dist/components/icons/Loading.js.map +1 -0
  291. package/dist/components/icons/Mail.d.ts +6 -0
  292. package/dist/components/icons/Mail.js +8 -0
  293. package/dist/components/icons/Mail.js.map +1 -0
  294. package/dist/components/icons/MapMarker.d.ts +6 -0
  295. package/dist/components/icons/MapMarker.js +8 -0
  296. package/dist/components/icons/MapMarker.js.map +1 -0
  297. package/dist/components/icons/Message.d.ts +6 -0
  298. package/dist/components/icons/Message.js +8 -0
  299. package/dist/components/icons/Message.js.map +1 -0
  300. package/dist/components/icons/Minus.d.ts +6 -0
  301. package/dist/components/icons/Minus.js +8 -0
  302. package/dist/components/icons/Minus.js.map +1 -0
  303. package/dist/components/icons/MinusCircle.d.ts +6 -0
  304. package/dist/components/icons/MinusCircle.js +9 -0
  305. package/dist/components/icons/MinusCircle.js.map +1 -0
  306. package/dist/components/icons/PaperClip.d.ts +6 -0
  307. package/dist/components/icons/PaperClip.js +8 -0
  308. package/dist/components/icons/PaperClip.js.map +1 -0
  309. package/dist/components/icons/Picture.d.ts +6 -0
  310. package/dist/components/icons/Picture.js +8 -0
  311. package/dist/components/icons/Picture.js.map +1 -0
  312. package/dist/components/icons/Plus.d.ts +6 -0
  313. package/dist/components/icons/Plus.js +9 -0
  314. package/dist/components/icons/Plus.js.map +1 -0
  315. package/dist/components/icons/Send.d.ts +6 -0
  316. package/dist/components/icons/Send.js +8 -0
  317. package/dist/components/icons/Send.js.map +1 -0
  318. package/dist/components/icons/Setting.d.ts +6 -0
  319. package/dist/components/icons/Setting.js +8 -0
  320. package/dist/components/icons/Setting.js.map +1 -0
  321. package/dist/components/icons/Share.d.ts +6 -0
  322. package/dist/components/icons/Share.js +8 -0
  323. package/dist/components/icons/Share.js.map +1 -0
  324. package/dist/components/icons/Sound.d.ts +6 -0
  325. package/dist/components/icons/Sound.js +8 -0
  326. package/dist/components/icons/Sound.js.map +1 -0
  327. package/dist/components/icons/SoundDeactivated.d.ts +6 -0
  328. package/dist/components/icons/SoundDeactivated.js +8 -0
  329. package/dist/components/icons/SoundDeactivated.js.map +1 -0
  330. package/dist/components/icons/Telegram.d.ts +6 -0
  331. package/dist/components/icons/Telegram.js +8 -0
  332. package/dist/components/icons/Telegram.js.map +1 -0
  333. package/dist/components/icons/Translation.d.ts +6 -0
  334. package/dist/components/icons/Translation.js +9 -0
  335. package/dist/components/icons/Translation.js.map +1 -0
  336. package/dist/components/icons/Twitter.d.ts +6 -0
  337. package/dist/components/icons/Twitter.js +8 -0
  338. package/dist/components/icons/Twitter.js.map +1 -0
  339. package/dist/components/icons/User.d.ts +6 -0
  340. package/dist/components/icons/User.js +8 -0
  341. package/dist/components/icons/User.js.map +1 -0
  342. package/dist/components/icons/Warning.d.ts +6 -0
  343. package/dist/components/icons/Warning.js +8 -0
  344. package/dist/components/icons/Warning.js.map +1 -0
  345. package/dist/components/icons/WhatsApp.d.ts +6 -0
  346. package/dist/components/icons/WhatsApp.js +9 -0
  347. package/dist/components/icons/WhatsApp.js.map +1 -0
  348. package/dist/components/icons/icons.stories.d.ts +8 -0
  349. package/dist/components/icons/icons.stories.js +42 -0
  350. package/dist/components/icons/icons.stories.js.map +1 -0
  351. package/dist/components/icons/loading.css +14 -0
  352. package/dist/components/layouts/Default.d.ts +16 -0
  353. package/dist/components/layouts/Default.js +16 -0
  354. package/dist/components/layouts/Default.js.map +1 -0
  355. package/dist/components/ui/Button.css +138 -0
  356. package/dist/components/ui/Button.d.ts +22 -0
  357. package/dist/components/ui/Button.js +27 -0
  358. package/dist/components/ui/Button.js.map +1 -0
  359. package/dist/components/ui/Button.stories.d.ts +17 -0
  360. package/dist/components/ui/Button.stories.js +141 -0
  361. package/dist/components/ui/Button.stories.js.map +1 -0
  362. package/dist/components/ui/Button.test.d.ts +1 -0
  363. package/dist/components/ui/Button.test.js +64 -0
  364. package/dist/components/ui/Button.test.js.map +1 -0
  365. package/dist/components/ui/Card.css +60 -0
  366. package/dist/components/ui/Card.d.ts +13 -0
  367. package/dist/components/ui/Card.js +20 -0
  368. package/dist/components/ui/Card.js.map +1 -0
  369. package/dist/components/ui/Card.stories.d.ts +10 -0
  370. package/dist/components/ui/Card.stories.js +84 -0
  371. package/dist/components/ui/Card.stories.js.map +1 -0
  372. package/dist/components/ui/Card.test.d.ts +1 -0
  373. package/dist/components/ui/Card.test.js +40 -0
  374. package/dist/components/ui/Card.test.js.map +1 -0
  375. package/dist/components/ui/Checkbox.css +111 -0
  376. package/dist/components/ui/Checkbox.d.ts +9 -0
  377. package/dist/components/ui/Checkbox.js +15 -0
  378. package/dist/components/ui/Checkbox.js.map +1 -0
  379. package/dist/components/ui/Checkbox.stories.d.ts +8 -0
  380. package/dist/components/ui/Checkbox.stories.js +53 -0
  381. package/dist/components/ui/Checkbox.stories.js.map +1 -0
  382. package/dist/components/ui/Checkbox.test.d.ts +1 -0
  383. package/dist/components/ui/Checkbox.test.js +23 -0
  384. package/dist/components/ui/Checkbox.test.js.map +1 -0
  385. package/dist/components/ui/Drawer.css +138 -0
  386. package/dist/components/ui/Drawer.d.ts +19 -0
  387. package/dist/components/ui/Drawer.js +39 -0
  388. package/dist/components/ui/Drawer.js.map +1 -0
  389. package/dist/components/ui/Drawer.stories.d.ts +12 -0
  390. package/dist/components/ui/Drawer.stories.js +138 -0
  391. package/dist/components/ui/Drawer.stories.js.map +1 -0
  392. package/dist/components/ui/Drawer.test.d.ts +1 -0
  393. package/dist/components/ui/Drawer.test.js +64 -0
  394. package/dist/components/ui/Drawer.test.js.map +1 -0
  395. package/dist/components/ui/Message.d.ts +18 -0
  396. package/dist/components/ui/Message.js +14 -0
  397. package/dist/components/ui/Message.js.map +1 -0
  398. package/dist/components/ui/Modal.css +98 -0
  399. package/dist/components/ui/Modal.d.ts +17 -0
  400. package/dist/components/ui/Modal.js +35 -0
  401. package/dist/components/ui/Modal.js.map +1 -0
  402. package/dist/components/ui/Modal.stories.d.ts +12 -0
  403. package/dist/components/ui/Modal.stories.js +128 -0
  404. package/dist/components/ui/Modal.stories.js.map +1 -0
  405. package/dist/components/ui/Modal.test.d.ts +1 -0
  406. package/dist/components/ui/Modal.test.js +60 -0
  407. package/dist/components/ui/Modal.test.js.map +1 -0
  408. package/dist/components/ui/Spin.css +29 -0
  409. package/dist/components/ui/Spin.d.ts +10 -0
  410. package/dist/components/ui/Spin.js +16 -0
  411. package/dist/components/ui/Spin.js.map +1 -0
  412. package/dist/components/ui/Spin.stories.d.ts +7 -0
  413. package/dist/components/ui/Spin.stories.js +54 -0
  414. package/dist/components/ui/Spin.stories.js.map +1 -0
  415. package/dist/components/ui/Spin.test.d.ts +1 -0
  416. package/dist/components/ui/Spin.test.js +32 -0
  417. package/dist/components/ui/Spin.test.js.map +1 -0
  418. package/dist/components/ui/Tooltip.css +78 -0
  419. package/dist/components/ui/Tooltip.d.ts +12 -0
  420. package/dist/components/ui/Tooltip.js +15 -0
  421. package/dist/components/ui/Tooltip.js.map +1 -0
  422. package/dist/components/ui/Tooltip.stories.d.ts +8 -0
  423. package/dist/components/ui/Tooltip.stories.js +49 -0
  424. package/dist/components/ui/Tooltip.stories.js.map +1 -0
  425. package/dist/components/ui/Tooltip.test.d.ts +1 -0
  426. package/dist/components/ui/Tooltip.test.js +26 -0
  427. package/dist/components/ui/Tooltip.test.js.map +1 -0
  428. package/dist/helpers/configuration.d.ts +5 -0
  429. package/dist/helpers/configuration.js +28 -0
  430. package/dist/helpers/configuration.js.map +1 -0
  431. package/dist/helpers/constants.d.ts +19 -0
  432. package/dist/helpers/constants.js +112 -0
  433. package/dist/helpers/constants.js.map +1 -0
  434. package/dist/helpers/error.d.ts +2 -0
  435. package/dist/helpers/error.js +131 -0
  436. package/dist/helpers/error.js.map +1 -0
  437. package/dist/helpers/media.d.ts +8 -0
  438. package/dist/helpers/media.js +34 -0
  439. package/dist/helpers/media.js.map +1 -0
  440. package/dist/helpers/statistics.d.ts +13 -0
  441. package/dist/helpers/statistics.js +216 -0
  442. package/dist/helpers/statistics.js.map +1 -0
  443. package/dist/helpers/translations.d.ts +6 -0
  444. package/dist/helpers/translations.js +29 -0
  445. package/dist/helpers/translations.js.map +1 -0
  446. package/dist/helpers/utils.d.ts +23 -0
  447. package/dist/helpers/utils.js +129 -0
  448. package/dist/helpers/utils.js.map +1 -0
  449. package/dist/i18n.d.ts +2 -0
  450. package/dist/i18n.js +27 -0
  451. package/dist/i18n.js.map +1 -0
  452. package/dist/index.d.ts +29 -0
  453. package/dist/index.js +90 -0
  454. package/dist/index.js.map +1 -0
  455. package/dist/locales/en.json +189 -0
  456. package/dist/locales/it.json +189 -0
  457. package/dist/mocks/data.d.ts +9 -0
  458. package/dist/mocks/data.js +197 -0
  459. package/dist/mocks/data.js.map +1 -0
  460. package/esm/components/Auth/Auth.css +57 -0
  461. package/esm/components/Auth/Auth.d.ts +16 -0
  462. package/esm/components/Auth/Auth.js +65 -0
  463. package/esm/components/Auth/Auth.js.map +1 -0
  464. package/esm/components/Auth/Auth.stories.d.ts +8 -0
  465. package/esm/components/Auth/Auth.stories.js +56 -0
  466. package/esm/components/Auth/Auth.stories.js.map +1 -0
  467. package/esm/components/Auth/Auth.test.d.ts +1 -0
  468. package/esm/components/Auth/Auth.test.js +20 -0
  469. package/esm/components/Auth/Auth.test.js.map +1 -0
  470. package/esm/components/Avatar/Avatar.css +151 -0
  471. package/esm/components/Avatar/Avatar.d.ts +19 -0
  472. package/esm/components/Avatar/Avatar.js +77 -0
  473. package/esm/components/Avatar/Avatar.js.map +1 -0
  474. package/esm/components/Avatar/Avatar.stories.d.ts +8 -0
  475. package/esm/components/Avatar/Avatar.stories.js +88 -0
  476. package/esm/components/Avatar/Avatar.stories.js.map +1 -0
  477. package/esm/components/Avatar/Avatar.test.d.ts +1 -0
  478. package/esm/components/Avatar/Avatar.test.js +35 -0
  479. package/esm/components/Avatar/Avatar.test.js.map +1 -0
  480. package/esm/components/AvatarView/AvatarView.stories.d.ts +9 -0
  481. package/esm/components/AvatarView/AvatarView.stories.js +90 -0
  482. package/esm/components/AvatarView/AvatarView.stories.js.map +1 -0
  483. package/esm/components/AvatarView/components/avatar.d.ts +10 -0
  484. package/esm/components/AvatarView/components/avatar.js +34 -0
  485. package/esm/components/AvatarView/components/avatar.js.map +1 -0
  486. package/esm/components/AvatarView/components/loader.d.ts +6 -0
  487. package/esm/components/AvatarView/components/loader.js +12 -0
  488. package/esm/components/AvatarView/components/loader.js.map +1 -0
  489. package/esm/components/AvatarView/index.d.ts +13 -0
  490. package/esm/components/AvatarView/index.js +20 -0
  491. package/esm/components/AvatarView/index.js.map +1 -0
  492. package/esm/components/AvatarView/utils/useEyeBlink.d.ts +2 -0
  493. package/esm/components/AvatarView/utils/useEyeBlink.js +37 -0
  494. package/esm/components/AvatarView/utils/useEyeBlink.js.map +1 -0
  495. package/esm/components/AvatarView/utils/useHeadMovement.d.ts +2 -0
  496. package/esm/components/AvatarView/utils/useHeadMovement.js +50 -0
  497. package/esm/components/AvatarView/utils/useHeadMovement.js.map +1 -0
  498. package/esm/components/AvatarView/utils/useMouthSpeaking.d.ts +2 -0
  499. package/esm/components/AvatarView/utils/useMouthSpeaking.js +55 -0
  500. package/esm/components/AvatarView/utils/useMouthSpeaking.js.map +1 -0
  501. package/esm/components/AvatarView/utils/utils.d.ts +13 -0
  502. package/esm/components/AvatarView/utils/utils.js +33 -0
  503. package/esm/components/AvatarView/utils/utils.js.map +1 -0
  504. package/esm/components/Blob/Blob.css +249 -0
  505. package/esm/components/Blob/Blob.d.ts +7 -0
  506. package/esm/components/Blob/Blob.js +14 -0
  507. package/esm/components/Blob/Blob.js.map +1 -0
  508. package/esm/components/Blob/Blob.stories.d.ts +6 -0
  509. package/esm/components/Blob/Blob.stories.js +26 -0
  510. package/esm/components/Blob/Blob.stories.js.map +1 -0
  511. package/esm/components/Blob/Blob.test.d.ts +1 -0
  512. package/esm/components/Blob/Blob.test.js +12 -0
  513. package/esm/components/Blob/Blob.test.js.map +1 -0
  514. package/esm/components/BlockedMemoriBadge/BlockedMemoriBadge.css +40 -0
  515. package/esm/components/BlockedMemoriBadge/BlockedMemoriBadge.d.ts +11 -0
  516. package/esm/components/BlockedMemoriBadge/BlockedMemoriBadge.js +36 -0
  517. package/esm/components/BlockedMemoriBadge/BlockedMemoriBadge.js.map +1 -0
  518. package/esm/components/BlockedMemoriBadge/BlockedMemoriBadge.stories.d.ts +8 -0
  519. package/esm/components/BlockedMemoriBadge/BlockedMemoriBadge.stories.js +36 -0
  520. package/esm/components/BlockedMemoriBadge/BlockedMemoriBadge.stories.js.map +1 -0
  521. package/esm/components/BlockedMemoriBadge/BlockedMemoriBadge.test.d.ts +1 -0
  522. package/esm/components/BlockedMemoriBadge/BlockedMemoriBadge.test.js +20 -0
  523. package/esm/components/BlockedMemoriBadge/BlockedMemoriBadge.test.js.map +1 -0
  524. package/esm/components/ChangeMode/ChangeMode.css +22 -0
  525. package/esm/components/ChangeMode/ChangeMode.d.ts +8 -0
  526. package/esm/components/ChangeMode/ChangeMode.js +14 -0
  527. package/esm/components/ChangeMode/ChangeMode.js.map +1 -0
  528. package/esm/components/ChangeMode/ChangeMode.stories.d.ts +6 -0
  529. package/esm/components/ChangeMode/ChangeMode.stories.js +30 -0
  530. package/esm/components/ChangeMode/ChangeMode.stories.js.map +1 -0
  531. package/esm/components/ChangeMode/ChangeMode.test.d.ts +1 -0
  532. package/esm/components/ChangeMode/ChangeMode.test.js +12 -0
  533. package/esm/components/ChangeMode/ChangeMode.test.js.map +1 -0
  534. package/esm/components/Chat/Chat.css +117 -0
  535. package/esm/components/Chat/Chat.d.ts +35 -0
  536. package/esm/components/Chat/Chat.js +122 -0
  537. package/esm/components/Chat/Chat.js.map +1 -0
  538. package/esm/components/Chat/Chat.stories.d.ts +13 -0
  539. package/esm/components/Chat/Chat.stories.js +158 -0
  540. package/esm/components/Chat/Chat.stories.js.map +1 -0
  541. package/esm/components/Chat/Chat.test.d.ts +1 -0
  542. package/esm/components/Chat/Chat.test.js +49 -0
  543. package/esm/components/Chat/Chat.test.js.map +1 -0
  544. package/esm/components/ChatBubble/ChatBubble.css +159 -0
  545. package/esm/components/ChatBubble/ChatBubble.d.ts +11 -0
  546. package/esm/components/ChatBubble/ChatBubble.js +38 -0
  547. package/esm/components/ChatBubble/ChatBubble.js.map +1 -0
  548. package/esm/components/ChatBubble/ChatBubble.stories.d.ts +6 -0
  549. package/esm/components/ChatBubble/ChatBubble.stories.js +52 -0
  550. package/esm/components/ChatBubble/ChatBubble.stories.js.map +1 -0
  551. package/esm/components/ChatBubble/ChatBubble.test.d.ts +1 -0
  552. package/esm/components/ChatBubble/ChatBubble.test.js +23 -0
  553. package/esm/components/ChatBubble/ChatBubble.test.js.map +1 -0
  554. package/esm/components/ChatInputs/ChatInputs.css +21 -0
  555. package/esm/components/ChatInputs/ChatInputs.d.ts +19 -0
  556. package/esm/components/ChatInputs/ChatInputs.js +18 -0
  557. package/esm/components/ChatInputs/ChatInputs.js.map +1 -0
  558. package/esm/components/ChatInputs/ChatInputs.stories.d.ts +9 -0
  559. package/esm/components/ChatInputs/ChatInputs.stories.js +86 -0
  560. package/esm/components/ChatInputs/ChatInputs.stories.js.map +1 -0
  561. package/esm/components/ChatInputs/ChatInputs.test.d.ts +1 -0
  562. package/esm/components/ChatInputs/ChatInputs.test.js +27 -0
  563. package/esm/components/ChatInputs/ChatInputs.test.js.map +1 -0
  564. package/esm/components/ChatTextArea/ChatTextArea.css +88 -0
  565. package/esm/components/ChatTextArea/ChatTextArea.d.ts +12 -0
  566. package/esm/components/ChatTextArea/ChatTextArea.js +25 -0
  567. package/esm/components/ChatTextArea/ChatTextArea.js.map +1 -0
  568. package/esm/components/ChatTextArea/ChatTextArea.stories.d.ts +7 -0
  569. package/esm/components/ChatTextArea/ChatTextArea.stories.js +38 -0
  570. package/esm/components/ChatTextArea/ChatTextArea.stories.js.map +1 -0
  571. package/esm/components/ChatTextArea/ChatTextArea.test.d.ts +1 -0
  572. package/esm/components/ChatTextArea/ChatTextArea.test.js +21 -0
  573. package/esm/components/ChatTextArea/ChatTextArea.test.js.map +1 -0
  574. package/esm/components/CustomGLBModelViewer/ModelViewer.css +11 -0
  575. package/esm/components/CustomGLBModelViewer/ModelViewer.d.ts +9 -0
  576. package/esm/components/CustomGLBModelViewer/ModelViewer.js +18 -0
  577. package/esm/components/CustomGLBModelViewer/ModelViewer.js.map +1 -0
  578. package/esm/components/CustomGLBModelViewer/ModelViewer.stories.d.ts +5 -0
  579. package/esm/components/CustomGLBModelViewer/ModelViewer.stories.js +41 -0
  580. package/esm/components/CustomGLBModelViewer/ModelViewer.stories.js.map +1 -0
  581. package/esm/components/CustomGLBModelViewer/ModelViewer.test.d.ts +1 -0
  582. package/esm/components/CustomGLBModelViewer/ModelViewer.test.js +8 -0
  583. package/esm/components/CustomGLBModelViewer/ModelViewer.test.js.map +1 -0
  584. package/esm/components/ErrorBoundary/ErrorBoundary.d.ts +9 -0
  585. package/esm/components/ErrorBoundary/ErrorBoundary.js +33 -0
  586. package/esm/components/ErrorBoundary/ErrorBoundary.js.map +1 -0
  587. package/esm/components/ExportHistoryButton/ExportHistoryButton.css +22 -0
  588. package/esm/components/ExportHistoryButton/ExportHistoryButton.d.ts +15 -0
  589. package/esm/components/ExportHistoryButton/ExportHistoryButton.js +42 -0
  590. package/esm/components/ExportHistoryButton/ExportHistoryButton.js.map +1 -0
  591. package/esm/components/ExportHistoryButton/ExportHistoryButton.stories.d.ts +8 -0
  592. package/esm/components/ExportHistoryButton/ExportHistoryButton.stories.js +52 -0
  593. package/esm/components/ExportHistoryButton/ExportHistoryButton.stories.js.map +1 -0
  594. package/esm/components/ExportHistoryButton/ExportHistoryButton.test.d.ts +1 -0
  595. package/esm/components/ExportHistoryButton/ExportHistoryButton.test.js +34 -0
  596. package/esm/components/ExportHistoryButton/ExportHistoryButton.test.js.map +1 -0
  597. package/esm/components/Header/Header.css +58 -0
  598. package/esm/components/Header/Header.d.ts +18 -0
  599. package/esm/components/Header/Header.js +24 -0
  600. package/esm/components/Header/Header.js.map +1 -0
  601. package/esm/components/Header/Header.stories.d.ts +10 -0
  602. package/esm/components/Header/Header.stories.js +97 -0
  603. package/esm/components/Header/Header.stories.js.map +1 -0
  604. package/esm/components/Header/Header.test.d.ts +1 -0
  605. package/esm/components/Header/Header.test.js +36 -0
  606. package/esm/components/Header/Header.test.js.map +1 -0
  607. package/esm/components/MediaWidget/LinkItemWidget.css +35 -0
  608. package/esm/components/MediaWidget/LinkItemWidget.d.ts +27 -0
  609. package/esm/components/MediaWidget/LinkItemWidget.js +66 -0
  610. package/esm/components/MediaWidget/LinkItemWidget.js.map +1 -0
  611. package/esm/components/MediaWidget/LinkItemWidget.stories.d.ts +5 -0
  612. package/esm/components/MediaWidget/LinkItemWidget.stories.js +54 -0
  613. package/esm/components/MediaWidget/LinkItemWidget.stories.js.map +1 -0
  614. package/esm/components/MediaWidget/LinkItemWidget.test.d.ts +1 -0
  615. package/esm/components/MediaWidget/LinkItemWidget.test.js +26 -0
  616. package/esm/components/MediaWidget/LinkItemWidget.test.js.map +1 -0
  617. package/esm/components/MediaWidget/MediaItemWidget.css +62 -0
  618. package/esm/components/MediaWidget/MediaItemWidget.d.ts +17 -0
  619. package/esm/components/MediaWidget/MediaItemWidget.js +139 -0
  620. package/esm/components/MediaWidget/MediaItemWidget.js.map +1 -0
  621. package/esm/components/MediaWidget/MediaItemWidget.stories.d.ts +6 -0
  622. package/esm/components/MediaWidget/MediaItemWidget.stories.js +82 -0
  623. package/esm/components/MediaWidget/MediaItemWidget.stories.js.map +1 -0
  624. package/esm/components/MediaWidget/MediaItemWidget.test.d.ts +1 -0
  625. package/esm/components/MediaWidget/MediaItemWidget.test.js +87 -0
  626. package/esm/components/MediaWidget/MediaItemWidget.test.js.map +1 -0
  627. package/esm/components/MediaWidget/MediaWidget.css +121 -0
  628. package/esm/components/MediaWidget/MediaWidget.d.ts +14 -0
  629. package/esm/components/MediaWidget/MediaWidget.js +26 -0
  630. package/esm/components/MediaWidget/MediaWidget.js.map +1 -0
  631. package/esm/components/MediaWidget/MediaWidget.stories.d.ts +8 -0
  632. package/esm/components/MediaWidget/MediaWidget.stories.js +99 -0
  633. package/esm/components/MediaWidget/MediaWidget.stories.js.map +1 -0
  634. package/esm/components/MediaWidget/MediaWidget.test.d.ts +1 -0
  635. package/esm/components/MediaWidget/MediaWidget.test.js +31 -0
  636. package/esm/components/MediaWidget/MediaWidget.test.js.map +1 -0
  637. package/esm/components/MemoriWidget/MemoriWidget.css +199 -0
  638. package/esm/components/MemoriWidget/MemoriWidget.d.ts +43 -0
  639. package/esm/components/MemoriWidget/MemoriWidget.js +1368 -0
  640. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -0
  641. package/esm/components/MemoriWidget/MemoriWidget.stories.d.ts +9 -0
  642. package/esm/components/MemoriWidget/MemoriWidget.stories.js +63 -0
  643. package/esm/components/MemoriWidget/MemoriWidget.stories.js.map +1 -0
  644. package/esm/components/PositionDrawer/PositionDrawer.d.ts +3 -0
  645. package/esm/components/PositionDrawer/PositionDrawer.js +5 -0
  646. package/esm/components/PositionDrawer/PositionDrawer.js.map +1 -0
  647. package/esm/components/SendOnEnterMenu/SendOnEnterMenu.css +47 -0
  648. package/esm/components/SendOnEnterMenu/SendOnEnterMenu.d.ts +8 -0
  649. package/esm/components/SendOnEnterMenu/SendOnEnterMenu.js +20 -0
  650. package/esm/components/SendOnEnterMenu/SendOnEnterMenu.js.map +1 -0
  651. package/esm/components/SendOnEnterMenu/SendOnEnterMenu.stories.d.ts +6 -0
  652. package/esm/components/SendOnEnterMenu/SendOnEnterMenu.stories.js +36 -0
  653. package/esm/components/SendOnEnterMenu/SendOnEnterMenu.stories.js.map +1 -0
  654. package/esm/components/SendOnEnterMenu/SendOnEnterMenu.test.d.ts +1 -0
  655. package/esm/components/SendOnEnterMenu/SendOnEnterMenu.test.js +12 -0
  656. package/esm/components/SendOnEnterMenu/SendOnEnterMenu.test.js.map +1 -0
  657. package/esm/components/ShareButton/ShareButton.css +57 -0
  658. package/esm/components/ShareButton/ShareButton.d.ts +13 -0
  659. package/esm/components/ShareButton/ShareButton.js +109 -0
  660. package/esm/components/ShareButton/ShareButton.js.map +1 -0
  661. package/esm/components/ShareButton/ShareButton.stories.d.ts +7 -0
  662. package/esm/components/ShareButton/ShareButton.stories.js +43 -0
  663. package/esm/components/ShareButton/ShareButton.stories.js.map +1 -0
  664. package/esm/components/ShareButton/ShareButton.test.d.ts +1 -0
  665. package/esm/components/ShareButton/ShareButton.test.js +28 -0
  666. package/esm/components/ShareButton/ShareButton.test.js.map +1 -0
  667. package/esm/components/Snippet/Snippet.css +35 -0
  668. package/esm/components/Snippet/Snippet.d.ts +10 -0
  669. package/esm/components/Snippet/Snippet.js +37 -0
  670. package/esm/components/Snippet/Snippet.js.map +1 -0
  671. package/esm/components/Snippet/Snippet.stories.d.ts +73 -0
  672. package/esm/components/Snippet/Snippet.stories.js +243 -0
  673. package/esm/components/Snippet/Snippet.stories.js.map +1 -0
  674. package/esm/components/Snippet/Snippet.test.d.ts +1 -0
  675. package/esm/components/Snippet/Snippet.test.js +111 -0
  676. package/esm/components/Snippet/Snippet.test.js.map +1 -0
  677. package/esm/components/StartPanel/StartPanel.css +121 -0
  678. package/esm/components/StartPanel/StartPanel.d.ts +23 -0
  679. package/esm/components/StartPanel/StartPanel.js +92 -0
  680. package/esm/components/StartPanel/StartPanel.js.map +1 -0
  681. package/esm/components/StartPanel/StartPanel.stories.d.ts +10 -0
  682. package/esm/components/StartPanel/StartPanel.stories.js +159 -0
  683. package/esm/components/StartPanel/StartPanel.stories.js.map +1 -0
  684. package/esm/components/StartPanel/StartPanel.test.d.ts +1 -0
  685. package/esm/components/StartPanel/StartPanel.test.js +41 -0
  686. package/esm/components/StartPanel/StartPanel.test.js.map +1 -0
  687. package/esm/components/UploadMenu/UploadMenu.css +46 -0
  688. package/esm/components/UploadMenu/UploadMenu.d.ts +9 -0
  689. package/esm/components/UploadMenu/UploadMenu.js +21 -0
  690. package/esm/components/UploadMenu/UploadMenu.js.map +1 -0
  691. package/esm/components/UploadMenu/UploadMenu.stories.d.ts +6 -0
  692. package/esm/components/UploadMenu/UploadMenu.stories.js +37 -0
  693. package/esm/components/UploadMenu/UploadMenu.stories.js.map +1 -0
  694. package/esm/components/UploadMenu/UploadMenu.test.d.ts +1 -0
  695. package/esm/components/UploadMenu/UploadMenu.test.js +20 -0
  696. package/esm/components/UploadMenu/UploadMenu.test.js.map +1 -0
  697. package/esm/components/icons/Close.d.ts +6 -0
  698. package/esm/components/icons/Close.js +5 -0
  699. package/esm/components/icons/Close.js.map +1 -0
  700. package/esm/components/icons/Copy.d.ts +6 -0
  701. package/esm/components/icons/Copy.js +5 -0
  702. package/esm/components/icons/Copy.js.map +1 -0
  703. package/esm/components/icons/Download.d.ts +6 -0
  704. package/esm/components/icons/Download.js +5 -0
  705. package/esm/components/icons/Download.js.map +1 -0
  706. package/esm/components/icons/Edit.d.ts +6 -0
  707. package/esm/components/icons/Edit.js +5 -0
  708. package/esm/components/icons/Edit.js.map +1 -0
  709. package/esm/components/icons/Expand.d.ts +6 -0
  710. package/esm/components/icons/Expand.js +5 -0
  711. package/esm/components/icons/Expand.js.map +1 -0
  712. package/esm/components/icons/Eye.d.ts +6 -0
  713. package/esm/components/icons/Eye.js +5 -0
  714. package/esm/components/icons/Eye.js.map +1 -0
  715. package/esm/components/icons/EyeInvisible.d.ts +6 -0
  716. package/esm/components/icons/EyeInvisible.js +6 -0
  717. package/esm/components/icons/EyeInvisible.js.map +1 -0
  718. package/esm/components/icons/Facebook.d.ts +6 -0
  719. package/esm/components/icons/Facebook.js +5 -0
  720. package/esm/components/icons/Facebook.js.map +1 -0
  721. package/esm/components/icons/File.d.ts +6 -0
  722. package/esm/components/icons/File.js +5 -0
  723. package/esm/components/icons/File.js.map +1 -0
  724. package/esm/components/icons/FileExcel.d.ts +6 -0
  725. package/esm/components/icons/FileExcel.js +5 -0
  726. package/esm/components/icons/FileExcel.js.map +1 -0
  727. package/esm/components/icons/FilePdf.d.ts +6 -0
  728. package/esm/components/icons/FilePdf.js +5 -0
  729. package/esm/components/icons/FilePdf.js.map +1 -0
  730. package/esm/components/icons/FileWord.d.ts +6 -0
  731. package/esm/components/icons/FileWord.js +5 -0
  732. package/esm/components/icons/FileWord.js.map +1 -0
  733. package/esm/components/icons/Fullscreen.d.ts +6 -0
  734. package/esm/components/icons/Fullscreen.js +5 -0
  735. package/esm/components/icons/Fullscreen.js.map +1 -0
  736. package/esm/components/icons/FullscreenExit.d.ts +6 -0
  737. package/esm/components/icons/FullscreenExit.js +5 -0
  738. package/esm/components/icons/FullscreenExit.js.map +1 -0
  739. package/esm/components/icons/Link.d.ts +6 -0
  740. package/esm/components/icons/Link.js +5 -0
  741. package/esm/components/icons/Link.js.map +1 -0
  742. package/esm/components/icons/Linkedin.d.ts +6 -0
  743. package/esm/components/icons/Linkedin.js +5 -0
  744. package/esm/components/icons/Linkedin.js.map +1 -0
  745. package/esm/components/icons/Loading.d.ts +8 -0
  746. package/esm/components/icons/Loading.js +9 -0
  747. package/esm/components/icons/Loading.js.map +1 -0
  748. package/esm/components/icons/Mail.d.ts +6 -0
  749. package/esm/components/icons/Mail.js +5 -0
  750. package/esm/components/icons/Mail.js.map +1 -0
  751. package/esm/components/icons/MapMarker.d.ts +6 -0
  752. package/esm/components/icons/MapMarker.js +5 -0
  753. package/esm/components/icons/MapMarker.js.map +1 -0
  754. package/esm/components/icons/Message.d.ts +6 -0
  755. package/esm/components/icons/Message.js +5 -0
  756. package/esm/components/icons/Message.js.map +1 -0
  757. package/esm/components/icons/Minus.d.ts +6 -0
  758. package/esm/components/icons/Minus.js +5 -0
  759. package/esm/components/icons/Minus.js.map +1 -0
  760. package/esm/components/icons/MinusCircle.d.ts +6 -0
  761. package/esm/components/icons/MinusCircle.js +6 -0
  762. package/esm/components/icons/MinusCircle.js.map +1 -0
  763. package/esm/components/icons/PaperClip.d.ts +6 -0
  764. package/esm/components/icons/PaperClip.js +5 -0
  765. package/esm/components/icons/PaperClip.js.map +1 -0
  766. package/esm/components/icons/Picture.d.ts +6 -0
  767. package/esm/components/icons/Picture.js +5 -0
  768. package/esm/components/icons/Picture.js.map +1 -0
  769. package/esm/components/icons/Plus.d.ts +6 -0
  770. package/esm/components/icons/Plus.js +6 -0
  771. package/esm/components/icons/Plus.js.map +1 -0
  772. package/esm/components/icons/Send.d.ts +6 -0
  773. package/esm/components/icons/Send.js +5 -0
  774. package/esm/components/icons/Send.js.map +1 -0
  775. package/esm/components/icons/Setting.d.ts +6 -0
  776. package/esm/components/icons/Setting.js +5 -0
  777. package/esm/components/icons/Setting.js.map +1 -0
  778. package/esm/components/icons/Share.d.ts +6 -0
  779. package/esm/components/icons/Share.js +5 -0
  780. package/esm/components/icons/Share.js.map +1 -0
  781. package/esm/components/icons/Sound.d.ts +6 -0
  782. package/esm/components/icons/Sound.js +5 -0
  783. package/esm/components/icons/Sound.js.map +1 -0
  784. package/esm/components/icons/SoundDeactivated.d.ts +6 -0
  785. package/esm/components/icons/SoundDeactivated.js +5 -0
  786. package/esm/components/icons/SoundDeactivated.js.map +1 -0
  787. package/esm/components/icons/Telegram.d.ts +6 -0
  788. package/esm/components/icons/Telegram.js +5 -0
  789. package/esm/components/icons/Telegram.js.map +1 -0
  790. package/esm/components/icons/Translation.d.ts +6 -0
  791. package/esm/components/icons/Translation.js +6 -0
  792. package/esm/components/icons/Translation.js.map +1 -0
  793. package/esm/components/icons/Twitter.d.ts +6 -0
  794. package/esm/components/icons/Twitter.js +5 -0
  795. package/esm/components/icons/Twitter.js.map +1 -0
  796. package/esm/components/icons/User.d.ts +6 -0
  797. package/esm/components/icons/User.js +5 -0
  798. package/esm/components/icons/User.js.map +1 -0
  799. package/esm/components/icons/Warning.d.ts +6 -0
  800. package/esm/components/icons/Warning.js +5 -0
  801. package/esm/components/icons/Warning.js.map +1 -0
  802. package/esm/components/icons/WhatsApp.d.ts +6 -0
  803. package/esm/components/icons/WhatsApp.js +6 -0
  804. package/esm/components/icons/WhatsApp.js.map +1 -0
  805. package/esm/components/icons/icons.stories.d.ts +8 -0
  806. package/esm/components/icons/icons.stories.js +38 -0
  807. package/esm/components/icons/icons.stories.js.map +1 -0
  808. package/esm/components/icons/loading.css +14 -0
  809. package/esm/components/layouts/Default.d.ts +16 -0
  810. package/esm/components/layouts/Default.js +13 -0
  811. package/esm/components/layouts/Default.js.map +1 -0
  812. package/esm/components/ui/Button.css +138 -0
  813. package/esm/components/ui/Button.d.ts +22 -0
  814. package/esm/components/ui/Button.js +24 -0
  815. package/esm/components/ui/Button.js.map +1 -0
  816. package/esm/components/ui/Button.stories.d.ts +17 -0
  817. package/esm/components/ui/Button.stories.js +137 -0
  818. package/esm/components/ui/Button.stories.js.map +1 -0
  819. package/esm/components/ui/Button.test.d.ts +1 -0
  820. package/esm/components/ui/Button.test.js +61 -0
  821. package/esm/components/ui/Button.test.js.map +1 -0
  822. package/esm/components/ui/Card.css +60 -0
  823. package/esm/components/ui/Card.d.ts +13 -0
  824. package/esm/components/ui/Card.js +17 -0
  825. package/esm/components/ui/Card.js.map +1 -0
  826. package/esm/components/ui/Card.stories.d.ts +10 -0
  827. package/esm/components/ui/Card.stories.js +80 -0
  828. package/esm/components/ui/Card.stories.js.map +1 -0
  829. package/esm/components/ui/Card.test.d.ts +1 -0
  830. package/esm/components/ui/Card.test.js +37 -0
  831. package/esm/components/ui/Card.test.js.map +1 -0
  832. package/esm/components/ui/Checkbox.css +111 -0
  833. package/esm/components/ui/Checkbox.d.ts +9 -0
  834. package/esm/components/ui/Checkbox.js +12 -0
  835. package/esm/components/ui/Checkbox.js.map +1 -0
  836. package/esm/components/ui/Checkbox.stories.d.ts +8 -0
  837. package/esm/components/ui/Checkbox.stories.js +49 -0
  838. package/esm/components/ui/Checkbox.stories.js.map +1 -0
  839. package/esm/components/ui/Checkbox.test.d.ts +1 -0
  840. package/esm/components/ui/Checkbox.test.js +20 -0
  841. package/esm/components/ui/Checkbox.test.js.map +1 -0
  842. package/esm/components/ui/Drawer.css +138 -0
  843. package/esm/components/ui/Drawer.d.ts +19 -0
  844. package/esm/components/ui/Drawer.js +36 -0
  845. package/esm/components/ui/Drawer.js.map +1 -0
  846. package/esm/components/ui/Drawer.stories.d.ts +12 -0
  847. package/esm/components/ui/Drawer.stories.js +134 -0
  848. package/esm/components/ui/Drawer.stories.js.map +1 -0
  849. package/esm/components/ui/Drawer.test.d.ts +1 -0
  850. package/esm/components/ui/Drawer.test.js +61 -0
  851. package/esm/components/ui/Drawer.test.js.map +1 -0
  852. package/esm/components/ui/Message.d.ts +18 -0
  853. package/esm/components/ui/Message.js +10 -0
  854. package/esm/components/ui/Message.js.map +1 -0
  855. package/esm/components/ui/Modal.css +98 -0
  856. package/esm/components/ui/Modal.d.ts +17 -0
  857. package/esm/components/ui/Modal.js +32 -0
  858. package/esm/components/ui/Modal.js.map +1 -0
  859. package/esm/components/ui/Modal.stories.d.ts +12 -0
  860. package/esm/components/ui/Modal.stories.js +124 -0
  861. package/esm/components/ui/Modal.stories.js.map +1 -0
  862. package/esm/components/ui/Modal.test.d.ts +1 -0
  863. package/esm/components/ui/Modal.test.js +57 -0
  864. package/esm/components/ui/Modal.test.js.map +1 -0
  865. package/esm/components/ui/Spin.css +29 -0
  866. package/esm/components/ui/Spin.d.ts +10 -0
  867. package/esm/components/ui/Spin.js +13 -0
  868. package/esm/components/ui/Spin.js.map +1 -0
  869. package/esm/components/ui/Spin.stories.d.ts +7 -0
  870. package/esm/components/ui/Spin.stories.js +50 -0
  871. package/esm/components/ui/Spin.stories.js.map +1 -0
  872. package/esm/components/ui/Spin.test.d.ts +1 -0
  873. package/esm/components/ui/Spin.test.js +29 -0
  874. package/esm/components/ui/Spin.test.js.map +1 -0
  875. package/esm/components/ui/Tooltip.css +78 -0
  876. package/esm/components/ui/Tooltip.d.ts +12 -0
  877. package/esm/components/ui/Tooltip.js +12 -0
  878. package/esm/components/ui/Tooltip.js.map +1 -0
  879. package/esm/components/ui/Tooltip.stories.d.ts +8 -0
  880. package/esm/components/ui/Tooltip.stories.js +45 -0
  881. package/esm/components/ui/Tooltip.stories.js.map +1 -0
  882. package/esm/components/ui/Tooltip.test.d.ts +1 -0
  883. package/esm/components/ui/Tooltip.test.js +23 -0
  884. package/esm/components/ui/Tooltip.test.js.map +1 -0
  885. package/esm/helpers/configuration.d.ts +5 -0
  886. package/esm/helpers/configuration.js +23 -0
  887. package/esm/helpers/configuration.js.map +1 -0
  888. package/esm/helpers/constants.d.ts +19 -0
  889. package/esm/helpers/constants.js +109 -0
  890. package/esm/helpers/constants.js.map +1 -0
  891. package/esm/helpers/error.d.ts +2 -0
  892. package/esm/helpers/error.js +127 -0
  893. package/esm/helpers/error.js.map +1 -0
  894. package/esm/helpers/media.d.ts +8 -0
  895. package/esm/helpers/media.js +30 -0
  896. package/esm/helpers/media.js.map +1 -0
  897. package/esm/helpers/statistics.d.ts +13 -0
  898. package/esm/helpers/statistics.js +204 -0
  899. package/esm/helpers/statistics.js.map +1 -0
  900. package/esm/helpers/translations.d.ts +6 -0
  901. package/esm/helpers/translations.js +25 -0
  902. package/esm/helpers/translations.js.map +1 -0
  903. package/esm/helpers/utils.d.ts +23 -0
  904. package/esm/helpers/utils.js +117 -0
  905. package/esm/helpers/utils.js.map +1 -0
  906. package/esm/i18n.d.ts +2 -0
  907. package/esm/i18n.js +24 -0
  908. package/esm/i18n.js.map +1 -0
  909. package/esm/index.d.ts +29 -0
  910. package/esm/index.js +87 -0
  911. package/esm/index.js.map +1 -0
  912. package/esm/locales/en.json +189 -0
  913. package/esm/locales/it.json +189 -0
  914. package/esm/mocks/data.d.ts +9 -0
  915. package/esm/mocks/data.js +194 -0
  916. package/esm/mocks/data.js.map +1 -0
  917. package/package.json +266 -0
  918. package/src/components/Auth/Auth.css +57 -0
  919. package/src/components/Auth/Auth.stories.tsx +83 -0
  920. package/src/components/Auth/Auth.test.tsx +59 -0
  921. package/src/components/Auth/Auth.tsx +172 -0
  922. package/src/components/Auth/__snapshots__/Auth.test.tsx.snap +143 -0
  923. package/src/components/Avatar/Avatar.css +151 -0
  924. package/src/components/Avatar/Avatar.stories.tsx +116 -0
  925. package/src/components/Avatar/Avatar.test.tsx +85 -0
  926. package/src/components/Avatar/Avatar.tsx +178 -0
  927. package/src/components/Avatar/__snapshots__/Avatar.test.tsx.snap +181 -0
  928. package/src/components/AvatarView/AvatarView.stories.tsx +119 -0
  929. package/src/components/AvatarView/components/avatar.tsx +59 -0
  930. package/src/components/AvatarView/components/loader.tsx +28 -0
  931. package/src/components/AvatarView/index.tsx +64 -0
  932. package/src/components/AvatarView/utils/useEyeBlink.ts +48 -0
  933. package/src/components/AvatarView/utils/useHeadMovement.ts +72 -0
  934. package/src/components/AvatarView/utils/useMouthSpeaking.ts +68 -0
  935. package/src/components/AvatarView/utils/utils.ts +55 -0
  936. package/src/components/Blob/Blob.css +249 -0
  937. package/src/components/Blob/Blob.stories.tsx +36 -0
  938. package/src/components/Blob/Blob.test.tsx +13 -0
  939. package/src/components/Blob/Blob.tsx +25 -0
  940. package/src/components/Blob/__snapshots__/Blob.test.tsx.snap +56 -0
  941. package/src/components/BlockedMemoriBadge/BlockedMemoriBadge.css +40 -0
  942. package/src/components/BlockedMemoriBadge/BlockedMemoriBadge.stories.tsx +45 -0
  943. package/src/components/BlockedMemoriBadge/BlockedMemoriBadge.test.tsx +44 -0
  944. package/src/components/BlockedMemoriBadge/BlockedMemoriBadge.tsx +70 -0
  945. package/src/components/BlockedMemoriBadge/__snapshots__/BlockedMemoriBadge.test.tsx.snap +162 -0
  946. package/src/components/ChangeMode/ChangeMode.css +22 -0
  947. package/src/components/ChangeMode/ChangeMode.stories.tsx +44 -0
  948. package/src/components/ChangeMode/ChangeMode.test.tsx +17 -0
  949. package/src/components/ChangeMode/ChangeMode.tsx +48 -0
  950. package/src/components/ChangeMode/__snapshots__/ChangeMode.test.tsx.snap +105 -0
  951. package/src/components/Chat/Chat.css +117 -0
  952. package/src/components/Chat/Chat.stories.tsx +187 -0
  953. package/src/components/Chat/Chat.test.tsx +230 -0
  954. package/src/components/Chat/Chat.tsx +299 -0
  955. package/src/components/Chat/__snapshots__/Chat.test.tsx.snap +3581 -0
  956. package/src/components/ChatBubble/ChatBubble.css +159 -0
  957. package/src/components/ChatBubble/ChatBubble.stories.tsx +63 -0
  958. package/src/components/ChatBubble/ChatBubble.test.tsx +40 -0
  959. package/src/components/ChatBubble/ChatBubble.tsx +118 -0
  960. package/src/components/ChatBubble/__snapshots__/ChatBubble.test.tsx.snap +60 -0
  961. package/src/components/ChatInputs/ChatInputs.css +21 -0
  962. package/src/components/ChatInputs/ChatInputs.stories.tsx +105 -0
  963. package/src/components/ChatInputs/ChatInputs.test.tsx +79 -0
  964. package/src/components/ChatInputs/ChatInputs.tsx +83 -0
  965. package/src/components/ChatInputs/__snapshots__/ChatInputs.test.tsx.snap +375 -0
  966. package/src/components/ChatTextArea/ChatTextArea.css +88 -0
  967. package/src/components/ChatTextArea/ChatTextArea.stories.tsx +51 -0
  968. package/src/components/ChatTextArea/ChatTextArea.test.tsx +43 -0
  969. package/src/components/ChatTextArea/ChatTextArea.tsx +65 -0
  970. package/src/components/ChatTextArea/__snapshots__/ChatTextArea.test.tsx.snap +125 -0
  971. package/src/components/CustomGLBModelViewer/ModelViewer.css +11 -0
  972. package/src/components/CustomGLBModelViewer/ModelViewer.stories.tsx +58 -0
  973. package/src/components/CustomGLBModelViewer/ModelViewer.test.tsx +13 -0
  974. package/src/components/CustomGLBModelViewer/ModelViewer.tsx +38 -0
  975. package/src/components/CustomGLBModelViewer/__snapshots__/ModelViewer.test.tsx.snap +20 -0
  976. package/src/components/ErrorBoundary/ErrorBoundary.tsx +54 -0
  977. package/src/components/ExportHistoryButton/ExportHistoryButton.css +22 -0
  978. package/src/components/ExportHistoryButton/ExportHistoryButton.stories.tsx +68 -0
  979. package/src/components/ExportHistoryButton/ExportHistoryButton.test.tsx +67 -0
  980. package/src/components/ExportHistoryButton/ExportHistoryButton.tsx +105 -0
  981. package/src/components/ExportHistoryButton/__snapshots__/ExportHistoryButton.test.tsx.snap +239 -0
  982. package/src/components/Header/Header.css +58 -0
  983. package/src/components/Header/Header.stories.tsx +114 -0
  984. package/src/components/Header/Header.test.tsx +114 -0
  985. package/src/components/Header/Header.tsx +99 -0
  986. package/src/components/Header/__snapshots__/Header.test.tsx.snap +430 -0
  987. package/src/components/MediaWidget/LinkItemWidget.css +35 -0
  988. package/src/components/MediaWidget/LinkItemWidget.stories.tsx +60 -0
  989. package/src/components/MediaWidget/LinkItemWidget.test.tsx +33 -0
  990. package/src/components/MediaWidget/LinkItemWidget.tsx +176 -0
  991. package/src/components/MediaWidget/MediaItemWidget.css +62 -0
  992. package/src/components/MediaWidget/MediaItemWidget.stories.tsx +97 -0
  993. package/src/components/MediaWidget/MediaItemWidget.test.tsx +120 -0
  994. package/src/components/MediaWidget/MediaItemWidget.tsx +342 -0
  995. package/src/components/MediaWidget/MediaWidget.css +121 -0
  996. package/src/components/MediaWidget/MediaWidget.stories.tsx +117 -0
  997. package/src/components/MediaWidget/MediaWidget.test.tsx +40 -0
  998. package/src/components/MediaWidget/MediaWidget.tsx +84 -0
  999. package/src/components/MediaWidget/__snapshots__/LinkItemWidget.test.tsx.snap +253 -0
  1000. package/src/components/MediaWidget/__snapshots__/MediaItemWidget.test.tsx.snap +604 -0
  1001. package/src/components/MediaWidget/__snapshots__/MediaWidget.test.tsx.snap +196 -0
  1002. package/src/components/MemoriWidget/MemoriWidget.css +199 -0
  1003. package/src/components/MemoriWidget/MemoriWidget.stories.tsx +73 -0
  1004. package/src/components/MemoriWidget/MemoriWidget.tsx +2037 -0
  1005. package/src/components/PositionDrawer/PositionDrawer.tsx +9 -0
  1006. package/src/components/SendOnEnterMenu/SendOnEnterMenu.css +47 -0
  1007. package/src/components/SendOnEnterMenu/SendOnEnterMenu.stories.tsx +52 -0
  1008. package/src/components/SendOnEnterMenu/SendOnEnterMenu.test.tsx +17 -0
  1009. package/src/components/SendOnEnterMenu/SendOnEnterMenu.tsx +74 -0
  1010. package/src/components/SendOnEnterMenu/__snapshots__/SendOnEnterMenu.test.tsx.snap +49 -0
  1011. package/src/components/ShareButton/ShareButton.css +57 -0
  1012. package/src/components/ShareButton/ShareButton.stories.tsx +52 -0
  1013. package/src/components/ShareButton/ShareButton.test.tsx +33 -0
  1014. package/src/components/ShareButton/ShareButton.tsx +198 -0
  1015. package/src/components/ShareButton/__snapshots__/ShareButton.test.tsx.snap +211 -0
  1016. package/src/components/Snippet/Snippet.css +35 -0
  1017. package/src/components/Snippet/Snippet.stories.tsx +273 -0
  1018. package/src/components/Snippet/Snippet.test.tsx +147 -0
  1019. package/src/components/Snippet/Snippet.tsx +70 -0
  1020. package/src/components/Snippet/__snapshots__/Snippet.test.tsx.snap +2776 -0
  1021. package/src/components/StartPanel/StartPanel.css +121 -0
  1022. package/src/components/StartPanel/StartPanel.stories.tsx +181 -0
  1023. package/src/components/StartPanel/StartPanel.test.tsx +113 -0
  1024. package/src/components/StartPanel/StartPanel.tsx +246 -0
  1025. package/src/components/StartPanel/__snapshots__/StartPanel.test.tsx.snap +369 -0
  1026. package/src/components/UploadMenu/UploadMenu.css +46 -0
  1027. package/src/components/UploadMenu/UploadMenu.stories.tsx +55 -0
  1028. package/src/components/UploadMenu/UploadMenu.test.tsx +34 -0
  1029. package/src/components/UploadMenu/UploadMenu.tsx +66 -0
  1030. package/src/components/UploadMenu/__snapshots__/UploadMenu.test.tsx.snap +137 -0
  1031. package/src/components/icons/Close.tsx +23 -0
  1032. package/src/components/icons/Copy.tsx +17 -0
  1033. package/src/components/icons/Download.tsx +23 -0
  1034. package/src/components/icons/Edit.tsx +17 -0
  1035. package/src/components/icons/Expand.tsx +23 -0
  1036. package/src/components/icons/Eye.tsx +17 -0
  1037. package/src/components/icons/EyeInvisible.tsx +24 -0
  1038. package/src/components/icons/Facebook.tsx +23 -0
  1039. package/src/components/icons/File.tsx +17 -0
  1040. package/src/components/icons/FileExcel.tsx +23 -0
  1041. package/src/components/icons/FilePdf.tsx +23 -0
  1042. package/src/components/icons/FileWord.tsx +23 -0
  1043. package/src/components/icons/Fullscreen.tsx +23 -0
  1044. package/src/components/icons/FullscreenExit.tsx +23 -0
  1045. package/src/components/icons/Link.tsx +17 -0
  1046. package/src/components/icons/Linkedin.tsx +23 -0
  1047. package/src/components/icons/Loading.tsx +29 -0
  1048. package/src/components/icons/Mail.tsx +17 -0
  1049. package/src/components/icons/MapMarker.tsx +26 -0
  1050. package/src/components/icons/Message.tsx +23 -0
  1051. package/src/components/icons/Minus.tsx +23 -0
  1052. package/src/components/icons/MinusCircle.tsx +24 -0
  1053. package/src/components/icons/PaperClip.tsx +23 -0
  1054. package/src/components/icons/Picture.tsx +23 -0
  1055. package/src/components/icons/Plus.tsx +18 -0
  1056. package/src/components/icons/Send.tsx +17 -0
  1057. package/src/components/icons/Setting.tsx +23 -0
  1058. package/src/components/icons/Share.tsx +23 -0
  1059. package/src/components/icons/Sound.tsx +23 -0
  1060. package/src/components/icons/SoundDeactivated.tsx +27 -0
  1061. package/src/components/icons/Telegram.tsx +26 -0
  1062. package/src/components/icons/Translation.tsx +24 -0
  1063. package/src/components/icons/Twitter.tsx +23 -0
  1064. package/src/components/icons/User.tsx +17 -0
  1065. package/src/components/icons/Warning.tsx +23 -0
  1066. package/src/components/icons/WhatsApp.tsx +24 -0
  1067. package/src/components/icons/icons.stories.tsx +65 -0
  1068. package/src/components/icons/loading.css +14 -0
  1069. package/src/components/layouts/Default.tsx +52 -0
  1070. package/src/components/ui/Button.css +138 -0
  1071. package/src/components/ui/Button.stories.tsx +155 -0
  1072. package/src/components/ui/Button.test.tsx +74 -0
  1073. package/src/components/ui/Button.tsx +78 -0
  1074. package/src/components/ui/Card.css +60 -0
  1075. package/src/components/ui/Card.stories.tsx +94 -0
  1076. package/src/components/ui/Card.test.tsx +47 -0
  1077. package/src/components/ui/Card.tsx +45 -0
  1078. package/src/components/ui/Checkbox.css +111 -0
  1079. package/src/components/ui/Checkbox.stories.tsx +58 -0
  1080. package/src/components/ui/Checkbox.test.tsx +23 -0
  1081. package/src/components/ui/Checkbox.tsx +38 -0
  1082. package/src/components/ui/Drawer.css +138 -0
  1083. package/src/components/ui/Drawer.stories.tsx +180 -0
  1084. package/src/components/ui/Drawer.test.tsx +126 -0
  1085. package/src/components/ui/Drawer.tsx +122 -0
  1086. package/src/components/ui/Message.tsx +12 -0
  1087. package/src/components/ui/Modal.css +98 -0
  1088. package/src/components/ui/Modal.stories.tsx +169 -0
  1089. package/src/components/ui/Modal.test.tsx +111 -0
  1090. package/src/components/ui/Modal.tsx +111 -0
  1091. package/src/components/ui/Spin.css +29 -0
  1092. package/src/components/ui/Spin.stories.tsx +62 -0
  1093. package/src/components/ui/Spin.test.tsx +41 -0
  1094. package/src/components/ui/Spin.tsx +32 -0
  1095. package/src/components/ui/Tooltip.css +78 -0
  1096. package/src/components/ui/Tooltip.stories.tsx +59 -0
  1097. package/src/components/ui/Tooltip.test.tsx +50 -0
  1098. package/src/components/ui/Tooltip.tsx +34 -0
  1099. package/src/components/ui/__snapshots__/Button.test.tsx.snap +204 -0
  1100. package/src/components/ui/__snapshots__/Card.test.tsx.snap +321 -0
  1101. package/src/components/ui/__snapshots__/Checkbox.test.tsx.snap +105 -0
  1102. package/src/components/ui/__snapshots__/Drawer.test.tsx.snap +67 -0
  1103. package/src/components/ui/__snapshots__/Modal.test.tsx.snap +59 -0
  1104. package/src/components/ui/__snapshots__/Spin.test.tsx.snap +193 -0
  1105. package/src/components/ui/__snapshots__/Tooltip.test.tsx.snap +87 -0
  1106. package/src/helpers/configuration.ts +21 -0
  1107. package/src/helpers/constants.ts +111 -0
  1108. package/src/helpers/error.ts +142 -0
  1109. package/src/helpers/media.ts +40 -0
  1110. package/src/helpers/statistics.ts +252 -0
  1111. package/src/helpers/translations.ts +41 -0
  1112. package/src/helpers/utils.ts +151 -0
  1113. package/src/i18n.ts +26 -0
  1114. package/src/index.tsx +179 -0
  1115. package/src/locales/en.json +204 -0
  1116. package/src/locales/it.json +204 -0
  1117. package/src/mocks/data.ts +214 -0
@@ -0,0 +1,2037 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ // FIXME: Remove these lines and work through linting issues
3
+ /* eslint-disable react-hooks/exhaustive-deps */
4
+
5
+ // Typings
6
+ import {
7
+ DialogState,
8
+ Memori,
9
+ Integration,
10
+ Venue,
11
+ Message,
12
+ Medium,
13
+ OpenSession,
14
+ MemoriConfig,
15
+ TranslatedHint,
16
+ Invitation,
17
+ GamificationLevel,
18
+ Tenant,
19
+ } from '@memori.ai/memori-api-client/dist/types';
20
+ import {
21
+ SpeakerAudioDestination,
22
+ SpeechConfig,
23
+ SpeechSynthesizer,
24
+ SpeechRecognizer,
25
+ } from 'microsoft-cognitiveservices-speech-sdk';
26
+
27
+ // Libraries
28
+ import React, {
29
+ useState,
30
+ useEffect,
31
+ useCallback,
32
+ CSSProperties,
33
+ useRef,
34
+ } from 'react';
35
+ import { useTranslation } from 'react-i18next';
36
+ import memoriApiClient from '@memori.ai/memori-api-client';
37
+ import { AudioContext } from 'standardized-audio-context';
38
+ import * as speechSdk from 'microsoft-cognitiveservices-speech-sdk';
39
+ import cx from 'classnames';
40
+
41
+ // UI
42
+ // TODO: Implement this
43
+ import message from '../ui/Message';
44
+
45
+ // Components
46
+ import ErrorBoundary from '../ErrorBoundary/ErrorBoundary';
47
+ import PositionDrawer from '../PositionDrawer/PositionDrawer';
48
+ import MemoriAuth from '../Auth/Auth';
49
+ import Blob from '../Blob/Blob';
50
+ import AvatarView from '../AvatarView';
51
+ import ModelViewer from '../CustomGLBModelViewer/ModelViewer';
52
+ import Chat from '../Chat/Chat';
53
+ import StartPanel from '../StartPanel/StartPanel';
54
+ import Avatar from '../Avatar/Avatar';
55
+ import ChangeMode from '../ChangeMode/ChangeMode';
56
+
57
+ // Layout
58
+ import DefaultLayout from '../layouts/Default';
59
+
60
+ // Helpers / Utils
61
+ import { getTranslation } from '../../helpers/translations';
62
+ import { setLocalConfig, getLocalConfig } from '../../helpers/configuration';
63
+ import { hasTouchscreen, stripDuplicates } from '../../helpers/utils';
64
+ import { getResourceUrl } from '../../helpers/media';
65
+ import { anonTag } from '../../helpers/constants';
66
+ import { getErrori18nKey } from '../../helpers/error';
67
+ import { getGamificationLevel } from '../../helpers/statistics';
68
+
69
+ // Icons
70
+ import Edit from '../icons/Edit';
71
+ import Eye from '../icons/Eye';
72
+ import EyeInvisible from '../icons/EyeInvisible';
73
+ import Header from '../Header/Header';
74
+
75
+ // Styles
76
+ import './MemoriWidget.css';
77
+
78
+ // Widget utilities and helpers
79
+ const getMemoriState = (integrationId?: string): object | null => {
80
+ let widget = integrationId
81
+ ? document.querySelector(
82
+ `.memori-landing-experience[data-memori-integration="${integrationId}"]`
83
+ )
84
+ : document.querySelector('.memori-landing-experience');
85
+
86
+ let widgetInner = (widget ?? document).querySelector(
87
+ 'div[data-memori-engine-state]'
88
+ ) as HTMLElement;
89
+
90
+ if (!widgetInner) return null;
91
+
92
+ let engineState = (widgetInner as HTMLElement).dataset?.memoriEngineState;
93
+ if (!engineState) return null;
94
+
95
+ let dialogState = JSON.parse(engineState);
96
+ return dialogState;
97
+ };
98
+
99
+ function setNativeValue(element: Element, value: string) {
100
+ const valueSetter = Object?.getOwnPropertyDescriptor?.(element, 'value')?.set;
101
+ const prototype = Object.getPrototypeOf(element);
102
+ const prototypeValueSetter = Object?.getOwnPropertyDescriptor?.(
103
+ prototype,
104
+ 'value'
105
+ )?.set;
106
+
107
+ if (
108
+ prototypeValueSetter &&
109
+ valueSetter &&
110
+ valueSetter !== prototypeValueSetter
111
+ ) {
112
+ prototypeValueSetter.call(element, value);
113
+ } else if (valueSetter) {
114
+ valueSetter.call(element, value);
115
+ }
116
+ }
117
+
118
+ const typeMessage = (message: string) => {
119
+ let textarea = document.querySelector('fieldset#chat-fieldset textarea');
120
+ if (!textarea) return;
121
+
122
+ setNativeValue(textarea, message);
123
+ textarea.dispatchEvent(new Event('input', { bubbles: true }));
124
+
125
+ setTimeout(() => {
126
+ let sendButton = document.querySelector(
127
+ 'fieldset#chat-fieldset textarea + button'
128
+ );
129
+ if (!sendButton) return;
130
+ (sendButton as HTMLButtonElement).click();
131
+ }, 100);
132
+ };
133
+
134
+ declare global {
135
+ interface Window {
136
+ getMemoriState: typeof getMemoriState;
137
+ typeMessage: typeof typeMessage;
138
+ }
139
+ }
140
+ window.getMemoriState = getMemoriState;
141
+ window.typeMessage = typeMessage;
142
+
143
+ // Global variables
144
+ const silenceSeconds = [2, 3, 5, 10, 15, 20, 30, 60];
145
+ let recognizer: SpeechRecognizer | null;
146
+ let speechConfig: SpeechConfig;
147
+ let speechSynthesizer: SpeechSynthesizer | null;
148
+ let audioDestination: SpeakerAudioDestination;
149
+
150
+ export interface Props {
151
+ memori: Memori;
152
+ memoriConfigs?: MemoriConfig[];
153
+ memoriLang?: string;
154
+ integration?: Integration;
155
+ showShare?: boolean;
156
+ showInstruct?: boolean;
157
+ showInputs?: boolean;
158
+ showDates?: boolean;
159
+ showContextPerLine?: boolean;
160
+ showSettings?: boolean;
161
+ preview?: boolean;
162
+ embed?: boolean;
163
+ secret?: string;
164
+ baseUrl?: string;
165
+ apiUrl?: string;
166
+ initialContextVars?: { [key: string]: string };
167
+ initialQuestion?: string;
168
+ ogImage?: string;
169
+ sessionID?: string;
170
+ tenant?: Tenant;
171
+ personification?: {
172
+ name?: string;
173
+ tag: string;
174
+ pin: string;
175
+ };
176
+ AZURE_COGNITIVE_SERVICES_TTS_KEY?: string;
177
+ }
178
+
179
+ const MemoriWidget = ({
180
+ memori: initialMemori,
181
+ memoriConfigs,
182
+ memoriLang,
183
+ integration,
184
+ showInstruct = false,
185
+ showShare = true,
186
+ preview = false,
187
+ embed = false,
188
+ showInputs = true,
189
+ showDates = false,
190
+ showContextPerLine = false,
191
+ showSettings = false,
192
+ secret,
193
+ baseUrl = 'https://app.twincreator.com',
194
+ apiUrl = 'https://backend.memori.ai',
195
+ initialContextVars,
196
+ initialQuestion,
197
+ ogImage,
198
+ sessionID: initialSessionID,
199
+ tenant,
200
+ personification,
201
+ AZURE_COGNITIVE_SERVICES_TTS_KEY,
202
+ }: Props) => {
203
+ const { t, i18n } = useTranslation();
204
+
205
+ // API calls methods
206
+ const client = memoriApiClient(apiUrl);
207
+ const {
208
+ initSession,
209
+ postTextEnteredEvent,
210
+ postPlaceChangedEvent,
211
+ postTimeoutEvent,
212
+ postTagChangedEvent,
213
+ getSession,
214
+ getContentQualityIndexes,
215
+ } = client;
216
+
217
+ const [memori, setMemori] = useState(initialMemori);
218
+ const [instruct, setInstruct] = useState(false);
219
+
220
+ const [clickedStart, setClickedStart] = useState(false);
221
+ const [gotErrorInOpening, setGotErrorInOpening] = useState(false);
222
+
223
+ const language = memoriConfigs
224
+ ?.find(c => c.memoriConfigID === memori.memoriConfigurationID)
225
+ ?.culture?.split('-')?.[0]
226
+ ?.toUpperCase();
227
+ // eslint-disable-next-line
228
+ const [userLang, setUserLang] = useState(
229
+ memoriLang ??
230
+ memori?.culture?.split('-')?.[0] ??
231
+ language ??
232
+ i18n.language ??
233
+ 'IT'
234
+ );
235
+ const integrationConfig = integration?.customData
236
+ ? JSON.parse(integration.customData)
237
+ : null;
238
+ const isMultilanguageEnabled = !!integrationConfig?.multilanguage;
239
+
240
+ const [loading, setLoading] = useState(false);
241
+ const [memoriTyping, setMemoriTyping] = useState(false);
242
+
243
+ const [hasUserActivatedSpeak, setHasUserActivatedSpeak] = useState(false);
244
+ const [hasUserActivatedListening, setHasUserActivatedListening] = useState(
245
+ false
246
+ );
247
+ const [showPositionDrawer, setShowPositionDrawer] = useState(false);
248
+ const [showSettingsDrawer, setShowSettingsDrawer] = useState(false);
249
+ const [showChatHistory, setShowChatHistory] = useState(false);
250
+ const [muteSpeaker, setMuteSpeaker] = useState(false);
251
+ const [continuousSpeech, setContinuousSpeech] = useState(false);
252
+ const [continuousSpeechTimeout, setContinuousSpeechTimeout] = useState(3);
253
+ const [isPlayingAudio, setIsPlayingAudio] = useState(false);
254
+ useEffect(() => {
255
+ setIsPlayingAudio(!!speechSynthesizer);
256
+ // eslint-disable-next-line react-hooks/exhaustive-deps
257
+ }, [speechSynthesizer]);
258
+
259
+ useEffect(() => {
260
+ setMuteSpeaker(getLocalConfig('muteSpeaker', false));
261
+ setContinuousSpeech(getLocalConfig('continuousSpeech', false));
262
+ setContinuousSpeechTimeout(getLocalConfig('continuousSpeechTimeout', 3));
263
+ }, []);
264
+
265
+ const [isClient, setIsClient] = useState(false);
266
+ useEffect(() => {
267
+ setIsClient(true);
268
+ }, []);
269
+
270
+ /**
271
+ * Auth for private and secret memori
272
+ */
273
+ const [memoriPwd, setMemoriPwd] = useState<string | undefined>(secret);
274
+ const [memoriTokens, setMemoriTokens] = useState<string[] | undefined>();
275
+ const [authModalState, setAuthModalState] = useState<
276
+ null | 'password' | 'tokens'
277
+ >(null);
278
+
279
+ /**
280
+ * Position drawer
281
+ */
282
+ const [position, _setPosition] = useState<Venue>();
283
+ const applyPosition = async (venue?: Venue, sessionID?: string) => {
284
+ const session = sessionID ?? sessionId;
285
+ if (venue && session) {
286
+ const { currentState, ...response } = await postPlaceChangedEvent({
287
+ sessionId: session,
288
+ placeName: venue.placeName,
289
+ latitude: venue.latitude,
290
+ longitude: venue.longitude,
291
+ uncertaintyKm: venue.uncertainty ?? 0,
292
+ });
293
+
294
+ if (currentState && response.resultCode === 0) {
295
+ setCurrentDialogState({ ...currentDialogState, ...currentState });
296
+ }
297
+ }
298
+ };
299
+
300
+ const setPosition = (venue?: Venue) => {
301
+ _setPosition(venue);
302
+ applyPosition(venue);
303
+ };
304
+
305
+ /**
306
+ * History e gestione invio messaggi
307
+ */
308
+ const [userMessage, setUserMessage] = useState<string>('');
309
+ const onChangeUserMessage = (value: string) => {
310
+ if (!value || value === '\n' || value.trim() === '') {
311
+ setUserMessage('');
312
+ resetInteractionTimeout();
313
+ return;
314
+ }
315
+ setUserMessage(value);
316
+ clearInteractionTimeout();
317
+ };
318
+ const [listening, setListening] = useState(false);
319
+ const [history, setHistory] = useState<Message[]>([]);
320
+ const pushMessage = (message: Message) => {
321
+ setHistory(history => [...history, { ...message }]);
322
+ };
323
+ const sendMessage = async (
324
+ text: string,
325
+ media?: Medium[],
326
+ newSessionId?: string,
327
+ translate: boolean = true,
328
+ translatedText?: string
329
+ ) => {
330
+ if (!sessionId || !text?.length) return;
331
+
332
+ pushMessage({
333
+ text: text,
334
+ translatedText,
335
+ fromUser: true,
336
+ media: media ?? [],
337
+ initial: !!newSessionId,
338
+ });
339
+
340
+ setMemoriTyping(true);
341
+
342
+ const language = memori.culture?.split('-')?.[0] ?? i18n.language ?? 'IT';
343
+ let msg = text;
344
+
345
+ if (
346
+ translate &&
347
+ !instruct &&
348
+ isMultilanguageEnabled &&
349
+ userLang.toUpperCase() !== language.toUpperCase()
350
+ ) {
351
+ const translation = await getTranslation(
352
+ text,
353
+ language,
354
+ userLang,
355
+ baseUrl
356
+ );
357
+ msg = translation.text;
358
+ }
359
+
360
+ const { currentState, ...response } = await postTextEnteredEvent({
361
+ sessionId: newSessionId ?? sessionId,
362
+ text: msg,
363
+ });
364
+ if (response.resultCode === 0 && currentState) {
365
+ const emission = currentState.emission ?? currentDialogState?.emission;
366
+ if (currentState.state === 'X4' && memori.giverTag) {
367
+ const { currentState, ...resp } = await postTagChangedEvent(
368
+ sessionId,
369
+ memori.giverTag
370
+ );
371
+
372
+ if (resp.resultCode === 0) {
373
+ setCurrentDialogState(currentState);
374
+
375
+ if (currentState.emission) {
376
+ pushMessage({
377
+ text: currentState.emission,
378
+ media: currentState.media,
379
+ fromUser: false,
380
+ });
381
+ }
382
+ } else {
383
+ console.error(response, resp);
384
+ message.error(t(getErrori18nKey(resp.resultCode), { ns: 'common' }));
385
+ }
386
+ } else if (currentState.state === 'X2d' && memori.giverTag) {
387
+ const { currentState, ...resp } = await postTextEnteredEvent({
388
+ sessionId: newSessionId ?? sessionId,
389
+ text: Math.random()
390
+ .toString()
391
+ .substring(2, 8),
392
+ });
393
+
394
+ if (resp.resultCode === 0) {
395
+ const { currentState, ...resp } = await postTagChangedEvent(
396
+ sessionId,
397
+ memori.giverTag
398
+ );
399
+
400
+ if (resp.resultCode === 0) {
401
+ setCurrentDialogState(currentState);
402
+
403
+ if (currentState.emission) {
404
+ pushMessage({
405
+ text: currentState.emission,
406
+ media: currentState.media,
407
+ fromUser: false,
408
+ });
409
+ }
410
+ } else {
411
+ console.error(response, resp);
412
+ message.error(
413
+ t(getErrori18nKey(resp.resultCode), { ns: 'common' })
414
+ );
415
+ }
416
+ } else {
417
+ console.error(response, resp);
418
+ message.error(t(getErrori18nKey(resp.resultCode), { ns: 'common' }));
419
+ }
420
+ } else if (
421
+ userLang.toLowerCase() !== language.toLowerCase() &&
422
+ emission &&
423
+ !instruct &&
424
+ isMultilanguageEnabled
425
+ ) {
426
+ translateDialogState(currentState, userLang);
427
+ } else {
428
+ setCurrentDialogState({
429
+ ...currentState,
430
+ emission,
431
+ });
432
+
433
+ if (emission)
434
+ pushMessage({
435
+ text: emission,
436
+ media: currentState.media,
437
+ fromUser: false,
438
+ });
439
+ }
440
+ } else {
441
+ // remove last sent message, will set it as initial
442
+ setHistory(h => [...h.slice(0, h.length - 1)]);
443
+
444
+ // post session timeout -> Z0/A0 -> restart session and re-send msg
445
+ reopenSession(
446
+ false,
447
+ memoriPwd || memori.secretToken,
448
+ memoriTokens,
449
+ instruct && memori.giverTag ? memori.giverTag : undefined,
450
+ instruct && memori.giverPIN ? memori.giverPIN : undefined,
451
+ initialContextVars,
452
+ initialQuestion
453
+ ).then(sessionID => {
454
+ console.info('session timeout');
455
+ if (sessionID) {
456
+ setTimeout(() => {
457
+ sendMessage(text, media, sessionID);
458
+ }, 500);
459
+ }
460
+ });
461
+ }
462
+ setMemoriTyping(false);
463
+ };
464
+
465
+ /**
466
+ * Traduzioni istantanee
467
+ */
468
+ const translateDialogState = async (state: DialogState, userLang: string) => {
469
+ const language = memori.culture?.split('-')?.[0] ?? i18n.language ?? 'IT';
470
+ const emission = state.emission ?? currentDialogState?.emission;
471
+
472
+ let translatedState = { ...state };
473
+ let translatedMsg = null;
474
+
475
+ if (
476
+ !emission ||
477
+ instruct ||
478
+ language.toUpperCase() === userLang.toUpperCase() ||
479
+ !isMultilanguageEnabled
480
+ ) {
481
+ translatedState = { ...state, emission };
482
+ if (emission) {
483
+ translatedMsg = {
484
+ text: emission,
485
+ media: state.media,
486
+ fromUser: false,
487
+ };
488
+ }
489
+ } else {
490
+ const t = await getTranslation(emission, userLang, language, baseUrl);
491
+ if (state.hints && state.hints.length > 0) {
492
+ const translatedHints = await Promise.all(
493
+ (state.hints ?? []).map(async hint => {
494
+ const tHint = await getTranslation(
495
+ hint,
496
+ userLang,
497
+ language,
498
+ baseUrl
499
+ );
500
+ return {
501
+ text: tHint?.text ?? hint,
502
+ originalText: hint,
503
+ } as TranslatedHint;
504
+ })
505
+ );
506
+ translatedState = {
507
+ ...state,
508
+ emission: t.text,
509
+ translatedHints,
510
+ };
511
+ } else {
512
+ translatedState = {
513
+ ...state,
514
+ emission: t.text,
515
+ };
516
+ }
517
+
518
+ if (t.text.length > 0)
519
+ translatedMsg = {
520
+ text: t.text,
521
+ media: state.media,
522
+ fromUser: false,
523
+ };
524
+ }
525
+
526
+ setCurrentDialogState(translatedState);
527
+ if (translatedMsg) {
528
+ pushMessage(translatedMsg);
529
+ }
530
+
531
+ return translatedState;
532
+ };
533
+
534
+ /**
535
+ * Sessione
536
+ */
537
+ const [sessionId, setSessionId] = useState<string | undefined>(
538
+ initialSessionID
539
+ );
540
+ const [currentDialogState, setCurrentDialogState] = useState<DialogState>();
541
+ const fetchSession = async (params: OpenSession): Promise<void> => {
542
+ if (memori.privacyType !== 'PUBLIC' && !memori.secretToken) {
543
+ setAuthModalState('password');
544
+ }
545
+
546
+ setLoading(true);
547
+ try {
548
+ if (!memori.giverTag && !!memori.receivedInvitations?.length) {
549
+ let giverInvitation = memori.receivedInvitations.find(
550
+ (i: Invitation) => i.type === 'GIVER' && i.state === 'ACCEPTED'
551
+ );
552
+
553
+ if (giverInvitation) {
554
+ memori.giverTag = giverInvitation.tag;
555
+ memori.giverPIN = giverInvitation.pin;
556
+ }
557
+ }
558
+
559
+ const session = await initSession(params);
560
+ if (
561
+ session?.sessionID &&
562
+ session?.currentState &&
563
+ session.resultCode === 0
564
+ ) {
565
+ setSessionId(session.sessionID);
566
+ const language =
567
+ memori.culture?.split('-')?.[0] ?? i18n.language ?? 'IT';
568
+
569
+ if (
570
+ !instruct &&
571
+ isMultilanguageEnabled &&
572
+ userLang.toLowerCase() !== language.toLowerCase()
573
+ ) {
574
+ translateDialogState(session.currentState, userLang).then(state => {
575
+ if (state?.emission) {
576
+ history.length <= 1
577
+ ? setHistory([
578
+ {
579
+ text: state.emission,
580
+ media: state.media,
581
+ fromUser: false,
582
+ initial: true,
583
+ },
584
+ ])
585
+ : pushMessage({
586
+ text: state.emission,
587
+ media: state.media,
588
+ fromUser: false,
589
+ initial: true,
590
+ });
591
+ }
592
+ });
593
+ } else {
594
+ setCurrentDialogState(session.currentState);
595
+ if (session.currentState.emission) {
596
+ history.length <= 1
597
+ ? setHistory([
598
+ {
599
+ text: session.currentState.emission,
600
+ media: session.currentState.media,
601
+ fromUser: false,
602
+ initial: true,
603
+ },
604
+ ])
605
+ : pushMessage({
606
+ text: session.currentState.emission,
607
+ media: session.currentState.media,
608
+ fromUser: false,
609
+ initial: true,
610
+ });
611
+ }
612
+ }
613
+
614
+ if (position) applyPosition(position, session.sessionID);
615
+ } else {
616
+ console.error(session);
617
+ message.error(
618
+ t(getErrori18nKey(session?.resultCode), { ns: 'common' })
619
+ );
620
+ setGotErrorInOpening(true);
621
+ }
622
+ } catch (err) {
623
+ console.error(err);
624
+ new Error('Error fetching session');
625
+ }
626
+ setLoading(false);
627
+ };
628
+ const reopenSession = async (
629
+ updateDialogState: boolean = false,
630
+ password?: string,
631
+ recoveryTokens?: string[],
632
+ tag?: string,
633
+ pin?: string,
634
+ initialContextVars?: { [key: string]: string },
635
+ initialQuestion?: string
636
+ ) => {
637
+ setLoading(true);
638
+ try {
639
+ const { sessionID, currentState, ...response } = await initSession({
640
+ memoriID: memori.engineMemoriID ?? '',
641
+ password,
642
+ recoveryTokens,
643
+ tag,
644
+ pin,
645
+ initialContextVars,
646
+ initialQuestion,
647
+ });
648
+
649
+ if (sessionID && currentState && response.resultCode === 0) {
650
+ setSessionId(sessionID);
651
+
652
+ if (updateDialogState) {
653
+ setCurrentDialogState(currentState);
654
+ if (currentState.emission) {
655
+ history.length <= 1
656
+ ? setHistory([
657
+ {
658
+ text: currentState.emission,
659
+ media: currentState.media,
660
+ fromUser: false,
661
+ },
662
+ ])
663
+ : pushMessage({
664
+ text: currentState.emission,
665
+ media: currentState.media,
666
+ fromUser: false,
667
+ });
668
+ }
669
+ }
670
+
671
+ if (position) applyPosition(position, sessionID);
672
+
673
+ setLoading(false);
674
+ return sessionID;
675
+ } else {
676
+ console.error(response);
677
+ message.error(
678
+ t(getErrori18nKey(response.resultCode), { ns: 'common' })
679
+ );
680
+ setGotErrorInOpening(true);
681
+ }
682
+ } catch (err) {
683
+ console.error(err);
684
+ }
685
+ setLoading(false);
686
+
687
+ return null;
688
+ };
689
+ useEffect(() => {
690
+ if (!initialSessionID) {
691
+ fetchSession({
692
+ memoriID: memori.engineMemoriID!,
693
+ initialContextVars: initialContextVars || {},
694
+ initialQuestion,
695
+ });
696
+ }
697
+ // eslint-disable-next-line react-hooks/exhaustive-deps
698
+ }, []);
699
+ const changeTag = async (
700
+ memoriId: string,
701
+ sessionId: string,
702
+ tag?: string,
703
+ pin?: string
704
+ ) => {
705
+ if (!memoriId || !sessionId) {
706
+ console.error('CHANGETAG/Session not found');
707
+ return Promise.reject('Session not found');
708
+ }
709
+
710
+ try {
711
+ const { currentState, resultCode } = await postTagChangedEvent(
712
+ sessionId,
713
+ tag ?? anonTag
714
+ );
715
+
716
+ if (resultCode === 0) {
717
+ let textResult = 0;
718
+ // console.debug('[APPCONTEXT/CHANGETAG]', currentState);
719
+ if (
720
+ tag !== anonTag &&
721
+ pin &&
722
+ (currentState.state === 'X1a' || currentState.state === 'X1b')
723
+ ) {
724
+ const { resultCode: textResultCode } = await postTextEnteredEvent({
725
+ sessionId,
726
+ text: pin ?? '',
727
+ });
728
+ textResult = textResultCode;
729
+ }
730
+
731
+ if (textResult === 0) {
732
+ const { currentState, ...response } = await getSession(sessionId);
733
+
734
+ if (response.resultCode === 0 && !!currentState) {
735
+ return {
736
+ currentState,
737
+ sessionId,
738
+ ...response,
739
+ };
740
+ }
741
+ } else if ([400, 401, 403, 404, 500].includes(resultCode)) {
742
+ console.warn('[APPCONTEXT/CHANGETAG]', resultCode);
743
+ fetchSession({
744
+ memoriID: memori.engineMemoriID ?? '',
745
+ password: memori.secretToken,
746
+ tag: memori.giverTag,
747
+ pin: memori.giverPIN,
748
+ });
749
+ } else if (!!currentState) {
750
+ return {
751
+ currentState,
752
+ sessionId,
753
+ resultCode,
754
+ };
755
+ }
756
+ }
757
+ } catch (_e) {
758
+ let err = _e as Error;
759
+ console.error('[APPCONTEXT/CHANGETAG]', err);
760
+ return Promise.reject(err);
761
+ }
762
+
763
+ return null;
764
+ };
765
+ const restoreGiverTag = async () => {
766
+ if (sessionId && memori.giverTag && memori.giverPIN) {
767
+ setHistory([]);
768
+ await changeTag(
769
+ memori.engineMemoriID!,
770
+ sessionId,
771
+ memori.giverTag,
772
+ memori.giverPIN
773
+ );
774
+ }
775
+ };
776
+ useEffect(() => {
777
+ return () => {
778
+ if (
779
+ !currentDialogState ||
780
+ currentDialogState?.currentTag !== memori.giverTag
781
+ )
782
+ restoreGiverTag();
783
+ };
784
+ // eslint-disable-next-line react-hooks/exhaustive-deps
785
+ }, []);
786
+
787
+ /**
788
+ * Timeout conversazione
789
+ */
790
+ const [userInteractionTimeout, setUserInteractionTimeout] = useState<
791
+ NodeJS.Timeout
792
+ >();
793
+ const timeoutRef = useRef<NodeJS.Timeout>();
794
+ const clearInteractionTimeout = () => {
795
+ if (userInteractionTimeout) {
796
+ clearTimeout(userInteractionTimeout);
797
+ setUserInteractionTimeout(undefined);
798
+ }
799
+ if (timeoutRef?.current) {
800
+ clearTimeout(timeoutRef.current);
801
+ timeoutRef.current = undefined;
802
+ }
803
+ };
804
+ const resetInteractionTimeout = () => {
805
+ clearInteractionTimeout();
806
+ if (
807
+ currentDialogState?.acceptsTimeout &&
808
+ !speechSynthesizer &&
809
+ !isPlayingAudio &&
810
+ !userMessage.length &&
811
+ !listening
812
+ )
813
+ setInteractionTimeout();
814
+ };
815
+ const handleTimeout = async () => {
816
+ if (
817
+ !!speechSynthesizer ||
818
+ isPlayingAudio ||
819
+ !!userMessage.length ||
820
+ listening
821
+ ) {
822
+ resetInteractionTimeout();
823
+ return;
824
+ } else if (
825
+ sessionId &&
826
+ hasUserActivatedSpeak &&
827
+ currentDialogState?.acceptsTimeout
828
+ ) {
829
+ const { currentState, ...response } = await postTimeoutEvent(sessionId);
830
+ if (response.resultCode === 0 && currentState) {
831
+ const emission = currentState.emission;
832
+ if (
833
+ !instruct &&
834
+ isMultilanguageEnabled &&
835
+ userLang !== i18n?.language &&
836
+ emission &&
837
+ emission.length > 0
838
+ ) {
839
+ translateDialogState(
840
+ { ...currentState, emission: emission },
841
+ userLang
842
+ );
843
+ } else if (emission && emission.length > 0) {
844
+ pushMessage({
845
+ text: emission,
846
+ media: currentState.media,
847
+ fromUser: false,
848
+ });
849
+ setCurrentDialogState(currentState);
850
+ } else {
851
+ setCurrentDialogState({
852
+ ...currentState,
853
+ });
854
+ }
855
+ }
856
+ }
857
+ };
858
+ const setInteractionTimeout = () => {
859
+ let timeoutLimit = 40000;
860
+ let timeoutMinLimit = 25000;
861
+ let timeout =
862
+ Math.floor(Math.random() * (timeoutLimit - timeoutMinLimit)) +
863
+ timeoutMinLimit;
864
+
865
+ if (currentDialogState?.emission) {
866
+ let readTime = currentDialogState.emission.length / 26.5;
867
+ timeout = timeout + readTime * 1000;
868
+ }
869
+
870
+ let uiTimeout = setTimeout(handleTimeout, timeout);
871
+ setUserInteractionTimeout(uiTimeout);
872
+ timeoutRef.current = uiTimeout;
873
+ };
874
+ useEffect(() => {
875
+ if (!!userMessage.length || isPlayingAudio) clearInteractionTimeout();
876
+ if (sessionId && !!!userMessage.length) resetInteractionTimeout();
877
+ // eslint-disable-next-line react-hooks/exhaustive-deps
878
+ }, [
879
+ currentDialogState?.acceptsTimeout,
880
+ currentDialogState?.state,
881
+ isPlayingAudio,
882
+ sessionId,
883
+ history,
884
+ userMessage,
885
+ ]);
886
+ useEffect(() => {
887
+ return () => {
888
+ setHasUserActivatedSpeak(false);
889
+ setClickedStart(false);
890
+ clearInteractionTimeout();
891
+ timeoutRef.current = undefined;
892
+ };
893
+ // eslint-disable-next-line react-hooks/exhaustive-deps
894
+ }, []);
895
+
896
+ const initializeTTS = () => {
897
+ if (!AZURE_COGNITIVE_SERVICES_TTS_KEY) return;
898
+
899
+ speechConfig = speechSdk.SpeechConfig.fromSubscription(
900
+ AZURE_COGNITIVE_SERVICES_TTS_KEY,
901
+ 'eastus'
902
+ );
903
+
904
+ speechConfig.speechSynthesisLanguage = getCultureCodeByLanguage(userLang);
905
+ speechConfig.speechSynthesisVoiceName = getTTSVoice(userLang); // https://docs.microsoft.com/it-it/azure/cognitive-services/speech-service/language-support#text-to-speech
906
+
907
+ if (hasTouchscreen())
908
+ speechConfig.speechSynthesisOutputFormat =
909
+ speechSdk.SpeechSynthesisOutputFormat.Audio16Khz32KBitRateMonoMp3;
910
+
911
+ let memoriAudioElement = document.getElementById(
912
+ 'memori-audio'
913
+ ) as HTMLAudioElement;
914
+ if (memoriAudioElement && window.navigator.userAgent.includes('Safari')) {
915
+ memoriAudioElement.muted = false;
916
+ memoriAudioElement
917
+ .play()
918
+ .then(async () => {
919
+ try {
920
+ const context = new AudioContext();
921
+ let buffer = context.createBuffer(1, 1, 22050);
922
+ let source = context.createBufferSource();
923
+ source.buffer = buffer;
924
+ source.connect(context.destination);
925
+ } catch (e) {
926
+ console.error(e);
927
+ }
928
+ })
929
+ .catch((e: any) => {
930
+ console.error('error playing intro audio', e);
931
+ });
932
+ }
933
+ };
934
+ useEffect(() => {
935
+ return () => {
936
+ if (audioDestination) audioDestination.pause();
937
+ if (speechSynthesizer) {
938
+ speechSynthesizer.close();
939
+ speechSynthesizer = null;
940
+ }
941
+ };
942
+ // eslint-disable-next-line react-hooks/exhaustive-deps
943
+ }, []);
944
+
945
+ const getTTSVoice = useCallback(
946
+ (lang?: string): string => {
947
+ let voice = '';
948
+ let voiceLang = (
949
+ lang ??
950
+ memori.culture?.split('-')?.[0] ??
951
+ i18n.language ??
952
+ 'IT'
953
+ ).toUpperCase();
954
+ switch (voiceLang) {
955
+ case 'IT':
956
+ voice = `${
957
+ memori.voiceType === 'MALE'
958
+ ? 'it-IT-DiegoNeural'
959
+ : 'it-IT-ElsaNeural'
960
+ }`;
961
+ break;
962
+ case 'DE':
963
+ voice = `${
964
+ memori.voiceType === 'MALE'
965
+ ? 'de-DE-ConradNeural'
966
+ : 'de-DE-KatjaNeural'
967
+ }`;
968
+ break;
969
+ case 'EN':
970
+ voice = `${
971
+ memori.voiceType === 'MALE'
972
+ ? 'en-GB-RyanNeural'
973
+ : 'en-GB-SoniaNeural'
974
+ }`;
975
+ break;
976
+ case 'ES':
977
+ voice = `${
978
+ memori.voiceType === 'MALE'
979
+ ? 'es-ES-AlvaroNeural'
980
+ : 'es-ES-ElviraNeural'
981
+ }`;
982
+ break;
983
+ case 'FR':
984
+ voice = `${
985
+ memori.voiceType === 'MALE'
986
+ ? 'fr-FR-HenriNeural'
987
+ : 'fr-FR-DeniseNeural'
988
+ }`;
989
+ break;
990
+ case 'PT':
991
+ voice = `${
992
+ memori.voiceType === 'MALE'
993
+ ? 'pt-PT-DuarteNeural'
994
+ : 'pt-PT-RaquelNeural'
995
+ }`;
996
+ break;
997
+ case 'UK':
998
+ voice = `${
999
+ memori.voiceType === 'MALE'
1000
+ ? 'uk-UA-OstapNeural'
1001
+ : 'uk-UA-PolinaNeural'
1002
+ }`;
1003
+ break;
1004
+ case 'RU':
1005
+ voice = `${
1006
+ memori.voiceType === 'MALE'
1007
+ ? 'ru-RU-DmitryNeural'
1008
+ : 'ru-RU-SvetlanaNeural'
1009
+ }`;
1010
+ break;
1011
+ default:
1012
+ voice = `${
1013
+ memori.voiceType === 'MALE'
1014
+ ? 'it-IT-DiegoNeural'
1015
+ : 'it-IT-IsabellaNeural'
1016
+ }`;
1017
+ break;
1018
+ }
1019
+ return voice;
1020
+ },
1021
+ [memori.voiceType, i18n.language, memori.culture]
1022
+ );
1023
+
1024
+ const getCultureCodeByLanguage = (lang?: string): string => {
1025
+ let voice = '';
1026
+ let voiceLang = (lang ?? memori.culture?.split('-')?.[0] ?? i18n.language,
1027
+ 'IT').toUpperCase();
1028
+ switch (voiceLang) {
1029
+ case 'IT':
1030
+ voice = 'it-IT';
1031
+ break;
1032
+ case 'DE':
1033
+ voice = 'de-DE';
1034
+ break;
1035
+ case 'EN':
1036
+ voice = 'en-GB';
1037
+ break;
1038
+ case 'ES':
1039
+ voice = 'es-ES';
1040
+ break;
1041
+ case 'FR':
1042
+ voice = 'fr-FR';
1043
+ break;
1044
+ case 'PT':
1045
+ voice = 'pt-PT';
1046
+ break;
1047
+ case 'UK':
1048
+ voice = 'uk-UK';
1049
+ break;
1050
+ case 'RU':
1051
+ voice = 'ru-RU';
1052
+ break;
1053
+ default:
1054
+ voice = 'it-IT';
1055
+ break;
1056
+ }
1057
+ return voice;
1058
+ };
1059
+
1060
+ const [phonemesMap, setPhonemesMap] = useState<{
1061
+ [ns: 'common' | string]: {
1062
+ [word: string]: { [lang: 'default' | string]: string };
1063
+ };
1064
+ }>();
1065
+ const fetchLexiconJSON = async () => {
1066
+ try {
1067
+ const lexiconReq = await fetch(
1068
+ `${baseUrl || 'https://app.twincreator.com'}/api/lexiconmap`
1069
+ );
1070
+ const lexicon = await lexiconReq.json();
1071
+ return lexicon;
1072
+ } catch (err) {
1073
+ console.error(err);
1074
+ }
1075
+ };
1076
+ useEffect(() => {
1077
+ fetchLexiconJSON().then(lexicon => {
1078
+ setPhonemesMap(lexicon);
1079
+ });
1080
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1081
+ }, []);
1082
+
1083
+ const replaceTextWithPhonemes = (text: string, lang: string) => {
1084
+ if (!phonemesMap) return text;
1085
+
1086
+ const phonemes = {
1087
+ ...(phonemesMap.common ?? {}),
1088
+ ...(tenant?.id && phonemesMap[tenant.id] ? phonemesMap[tenant.id] : {}),
1089
+ };
1090
+ const phonemesPairs = Object.keys(phonemes).map(word => {
1091
+ const phoneme = phonemes[word][lang] ?? phonemes[word].default;
1092
+ return { word, phoneme };
1093
+ });
1094
+ const ssmlText = phonemesPairs.reduce((acc, { word, phoneme }) => {
1095
+ return acc.replace(
1096
+ new RegExp(word, 'gi'),
1097
+ `<phoneme alphabet="ipa" ph="${phoneme}">${word}</phoneme>`
1098
+ );
1099
+ }, text);
1100
+
1101
+ return ssmlText;
1102
+
1103
+ // E.g.:
1104
+ // return text.replace(
1105
+ // /martius/gi,
1106
+ // `<phoneme alphabet="ipa" ph="ˈmaːrːtzius">Martius</phoneme>`,
1107
+ // )
1108
+ // .replace(
1109
+ // /rawmaterial/gi,
1110
+ // `<phoneme alphabet="ipa" ph="ˈpippo">RawMaterial</phoneme>`,
1111
+ // )
1112
+ // .replace(/qfe/gi, `<sub alias="Quota Filo Erba">QFE</sub>`)
1113
+ };
1114
+
1115
+ const speak = (text: string, fireListeningEvent = true): void => {
1116
+ if (!AZURE_COGNITIVE_SERVICES_TTS_KEY) return;
1117
+
1118
+ if (preview || !hasUserActivatedSpeak) return;
1119
+ if (audioDestination) audioDestination.pause();
1120
+ if (speechSynthesizer) {
1121
+ speechSynthesizer.close();
1122
+ speechSynthesizer = null;
1123
+ }
1124
+
1125
+ if (muteSpeaker && fireListeningEvent) {
1126
+ setTimeout(() => {
1127
+ // trigger start continuous listening if set, see MemoriChat
1128
+ document.dispatchEvent(new Event('endSpeakStartListen'));
1129
+ }, 3000);
1130
+ return;
1131
+ } else if (muteSpeaker) {
1132
+ return;
1133
+ }
1134
+
1135
+ audioDestination = new speechSdk.SpeakerAudioDestination();
1136
+ let audioConfig = speechSdk.AudioConfig.fromSpeakerOutput(audioDestination);
1137
+ speechSynthesizer = new speechSdk.SpeechSynthesizer(
1138
+ speechConfig,
1139
+ audioConfig
1140
+ );
1141
+
1142
+ audioDestination.onAudioEnd = () => {
1143
+ setIsPlayingAudio(false);
1144
+
1145
+ if (fireListeningEvent) {
1146
+ // trigger start continuous listening if set, see MemoriChat
1147
+ document.dispatchEvent(new Event('endSpeakStartListen'));
1148
+ }
1149
+ };
1150
+
1151
+ // speechSynthesizer.visemeReceived = function (s, e) {
1152
+ // window.console.log(
1153
+ // '(Viseme), Audio offset: ' +
1154
+ // e.audioOffset / 10000 +
1155
+ // 'ms. Viseme ID: ' +
1156
+ // e.visemeId,
1157
+ // e,
1158
+ // );
1159
+
1160
+ // // `Animation` is an xml string for SVG or a json string for blend shapes
1161
+ // // var animation = e.Animation;
1162
+ // };
1163
+
1164
+ setIsPlayingAudio(true);
1165
+ speechSynthesizer.speakSsmlAsync(
1166
+ `<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xmlns:emo="http://www.w3.org/2009/10/emotionml" xml:lang="${getCultureCodeByLanguage(
1167
+ userLang
1168
+ )}"><voice name="${getTTSVoice(userLang)}"><s>${replaceTextWithPhonemes(
1169
+ text,
1170
+ userLang.toLowerCase()
1171
+ )}</s></voice></speak>`,
1172
+ result => {
1173
+ if (result) {
1174
+ try {
1175
+ if (speechSynthesizer) {
1176
+ speechSynthesizer.close();
1177
+ speechSynthesizer = null;
1178
+ }
1179
+ } catch (e) {
1180
+ console.error('speak error: ', e);
1181
+ window.speechSynthesis.speak(new SpeechSynthesisUtterance(text));
1182
+ setIsPlayingAudio(false);
1183
+ }
1184
+ } else {
1185
+ setIsPlayingAudio(false);
1186
+ }
1187
+ },
1188
+ error => {
1189
+ console.error('speak:', error);
1190
+ window.speechSynthesis.speak(new SpeechSynthesisUtterance(text));
1191
+ setIsPlayingAudio(false);
1192
+ }
1193
+ );
1194
+ };
1195
+
1196
+ /**
1197
+ * Focus on the chat input on mount
1198
+ */
1199
+ useEffect(() => {
1200
+ let textarea = document.querySelector(
1201
+ '#chat-fieldset textarea'
1202
+ ) as HTMLTextAreaElement | null;
1203
+ if (textarea) textarea.focus();
1204
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1205
+ }, [currentDialogState?.emission]);
1206
+
1207
+ /**
1208
+ * Speech recognition and transcript management
1209
+ */
1210
+ const [transcript, setTranscript] = useState('');
1211
+ const resetTranscript = () => setTranscript('');
1212
+
1213
+ /**
1214
+ * Listening transcript timeout
1215
+ */
1216
+ const [
1217
+ transcriptTimeout,
1218
+ setTranscriptTimeout,
1219
+ ] = useState<NodeJS.Timeout | null>(null);
1220
+ const setListeningTimeout = () => {
1221
+ let timeout = setTimeout(async () => {
1222
+ clearListening();
1223
+ const message = stripDuplicates(transcript);
1224
+ if (message.length > 0) {
1225
+ sendMessage(message);
1226
+ resetTranscript();
1227
+ setUserMessage('');
1228
+ } else if (listening) {
1229
+ resetInteractionTimeout();
1230
+ }
1231
+ }, continuousSpeechTimeout * 1000);
1232
+ setTranscriptTimeout(timeout);
1233
+ };
1234
+ const clearListeningTimeout = () => {
1235
+ if (transcriptTimeout) {
1236
+ clearTimeout(transcriptTimeout);
1237
+ setTranscriptTimeout(null);
1238
+ }
1239
+ };
1240
+ const resetListeningTimeout = () => {
1241
+ clearListeningTimeout();
1242
+ if (continuousSpeech) setListeningTimeout();
1243
+ };
1244
+ useEffect(() => {
1245
+ resetListeningTimeout();
1246
+ resetInteractionTimeout();
1247
+ if (transcript?.length > 0) {
1248
+ const transcriptMessage = stripDuplicates(transcript);
1249
+ if (transcriptMessage.length > 0) setUserMessage(transcriptMessage);
1250
+ }
1251
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1252
+ }, [transcript]);
1253
+
1254
+ /**
1255
+ * Listening methods
1256
+ */
1257
+ const startListening = () => {
1258
+ if (!AZURE_COGNITIVE_SERVICES_TTS_KEY) return;
1259
+
1260
+ clearListening();
1261
+ setTranscript('');
1262
+
1263
+ try {
1264
+ navigator.mediaDevices
1265
+ .getUserMedia({ audio: true })
1266
+ .then(function(_stream) {
1267
+ if (!speechConfig) {
1268
+ speechConfig = speechSdk.SpeechConfig.fromSubscription(
1269
+ AZURE_COGNITIVE_SERVICES_TTS_KEY,
1270
+ 'eastus'
1271
+ );
1272
+ speechConfig.speechRecognitionLanguage = getCultureCodeByLanguage(
1273
+ userLang
1274
+ );
1275
+ }
1276
+
1277
+ const audioConfig = speechSdk.AudioConfig.fromDefaultMicrophoneInput();
1278
+ recognizer = new speechSdk.SpeechRecognizer(
1279
+ speechConfig,
1280
+ audioConfig
1281
+ );
1282
+
1283
+ setListening(true);
1284
+ recognizer.recognized = (_s, e) => {
1285
+ if (e.result.reason === speechSdk.ResultReason.RecognizedSpeech) {
1286
+ setTranscript(e.result.text ?? '');
1287
+ } else if (e.result.reason === speechSdk.ResultReason.NoMatch) {
1288
+ console.debug('NOMATCH: Speech could not be recognized.');
1289
+ }
1290
+ };
1291
+ recognizer.canceled = (_s, e) => {
1292
+ if (e.reason === speechSdk.CancellationReason.Error) {
1293
+ console.debug(`"CANCELED: ErrorCode=${e.errorCode}`);
1294
+ console.debug(`"CANCELED: ErrorDetails=${e.errorDetails}`);
1295
+ console.debug(
1296
+ 'CANCELED: Did you set the speech resource key and region values?'
1297
+ );
1298
+ }
1299
+
1300
+ stopListening();
1301
+ };
1302
+
1303
+ recognizer.sessionStopped = (_s, _e) => {
1304
+ if (recognizer) recognizer.stopContinuousRecognitionAsync();
1305
+ };
1306
+ recognizer.startContinuousRecognitionAsync();
1307
+ })
1308
+ .catch(console.error);
1309
+ } catch (error) {
1310
+ console.error(error);
1311
+ }
1312
+ };
1313
+ const stopListening = () => {
1314
+ if (recognizer) {
1315
+ recognizer.stopContinuousRecognitionAsync();
1316
+ recognizer.close();
1317
+ recognizer = null;
1318
+ setListening(false);
1319
+ }
1320
+ };
1321
+ const clearListening = () => {
1322
+ stopListening();
1323
+ clearListeningTimeout();
1324
+ };
1325
+ const resetListening = () => {
1326
+ if (listening) {
1327
+ clearListening();
1328
+ resetTranscript();
1329
+ setUserMessage('');
1330
+ startListening();
1331
+ }
1332
+ };
1333
+ useEffect(() => {
1334
+ return () => clearListening();
1335
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1336
+ }, []);
1337
+ useEffect(() => {
1338
+ if (currentDialogState?.state === 'Z0') clearListening();
1339
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1340
+ }, [currentDialogState?.state]);
1341
+
1342
+ useEffect(() => {
1343
+ if (
1344
+ hasUserActivatedSpeak &&
1345
+ !preview &&
1346
+ !muteSpeaker &&
1347
+ history.length > 0 &&
1348
+ currentDialogState?.emission
1349
+ ) {
1350
+ speak(currentDialogState.emission, currentDialogState.state !== 'Z0');
1351
+ }
1352
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1353
+ }, [currentDialogState, hasUserActivatedSpeak]);
1354
+
1355
+ /**
1356
+ * Speech recognition event handlers
1357
+ */
1358
+ const [requestedListening, setRequestedListening] = useState(false);
1359
+ const onEndSpeakStartListen = useCallback(
1360
+ (_e: Event) => {
1361
+ if (isPlayingAudio && speechSynthesizer) {
1362
+ speechSynthesizer.close();
1363
+ speechSynthesizer = null;
1364
+ }
1365
+ if (
1366
+ continuousSpeech &&
1367
+ (hasUserActivatedListening || !requestedListening)
1368
+ ) {
1369
+ setRequestedListening(true);
1370
+ startListening();
1371
+ }
1372
+ },
1373
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1374
+ [continuousSpeech, hasUserActivatedListening]
1375
+ );
1376
+ useEffect(() => {
1377
+ if (!isPlayingAudio && continuousSpeech && hasUserActivatedListening)
1378
+ startListening();
1379
+ else if (isPlayingAudio && listening) {
1380
+ stopListening();
1381
+ }
1382
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1383
+ }, [isPlayingAudio]);
1384
+ useEffect(() => {
1385
+ document.addEventListener('endSpeakStartListen', onEndSpeakStartListen);
1386
+
1387
+ return () => {
1388
+ document.removeEventListener(
1389
+ 'endSpeakStartListen',
1390
+ onEndSpeakStartListen
1391
+ );
1392
+ };
1393
+ }, [onEndSpeakStartListen]);
1394
+ useEffect(() => {
1395
+ resetListening();
1396
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1397
+ }, [language]);
1398
+
1399
+ /**
1400
+ * Textarea send mode handlers
1401
+ */
1402
+ const [sendOnEnter, setSendOnEnter] = useState<'keypress' | 'click'>(
1403
+ 'keypress'
1404
+ );
1405
+ useEffect(() => {
1406
+ const stored = getLocalConfig<'keypress' | 'click'>(
1407
+ 'sendOnEnter',
1408
+ 'keypress'
1409
+ );
1410
+ setSendOnEnter(stored);
1411
+ }, []);
1412
+ useEffect(() => {
1413
+ setLocalConfig('sendOnEnter', sendOnEnter);
1414
+ }, [sendOnEnter]);
1415
+
1416
+ /**
1417
+ * Attachments
1418
+ */
1419
+ const [attachmentsMenuOpen, setAttachmentsMenuOpen] = useState<
1420
+ 'link' | 'media'
1421
+ >();
1422
+
1423
+ const globalBackground = integrationConfig?.globalBackground;
1424
+ const globalBackgroundUrl = globalBackground
1425
+ ? `url(${globalBackground})`
1426
+ : null;
1427
+
1428
+ const integrationProperties = (integration
1429
+ ? {
1430
+ '--memori-chat-bubble-bg': '#fff',
1431
+ ...(integrationConfig && !showInstruct
1432
+ ? { '--memori-text-color': integrationConfig.textColor ?? '#000' }
1433
+ : {}),
1434
+ ...(integrationConfig?.buttonBgColor
1435
+ ? {
1436
+ '--memori-button-bg': integrationConfig.buttonBgColor,
1437
+ '--memori-button-hover-brightness': '1.2',
1438
+ '--ant-primary-color': integrationConfig.buttonBgColor,
1439
+ '--ant-primary-color-hover': integrationConfig.buttonBgColor,
1440
+ '--ant-primary-4': integrationConfig.buttonBgColor,
1441
+ '--ant-primary-5': integrationConfig.buttonBgColor,
1442
+ '--ant-primary-7': integrationConfig.buttonBgColor,
1443
+ }
1444
+ : {
1445
+ '--memori-button-hover-brightness': '1',
1446
+ }),
1447
+ ...(integrationConfig?.buttonTextColor
1448
+ ? {
1449
+ '--memori-button-text': integrationConfig.buttonTextColor,
1450
+ '--ant-primary-text': integrationConfig.buttonTextColor,
1451
+ }
1452
+ : {}),
1453
+ ...(integrationConfig?.blurBackground
1454
+ ? {
1455
+ '--memori-blur-background': '5px',
1456
+ }
1457
+ : {
1458
+ '--memori-blur-background': '0px',
1459
+ }),
1460
+ ...(integrationConfig?.innerBgColor
1461
+ ? {
1462
+ '--memori-inner-bg': `rgba(${
1463
+ integrationConfig.innerBgColor === 'dark'
1464
+ ? '0, 0, 0'
1465
+ : '255, 255, 255'
1466
+ }, ${integrationConfig.innerBgAlpha ?? 0.4})`,
1467
+ '--memori-inner-content-pad': '1.5rem',
1468
+ '--memori-nav-bg-image': 'none',
1469
+ '--memori-nav-bg': `rgba(${
1470
+ integrationConfig.innerBgColor === 'dark'
1471
+ ? '0, 0, 0'
1472
+ : '255, 255, 255'
1473
+ }, ${integrationConfig?.innerBgAlpha ?? 0.4})`,
1474
+ }
1475
+ : {
1476
+ '--memori-inner-content-pad': '0px',
1477
+ }),
1478
+ }
1479
+ : {}) as CSSProperties;
1480
+
1481
+ const integrationStylesheet = `
1482
+ ${preview ? '#preview' : ':root'} {
1483
+ ${Object.entries(integrationProperties)
1484
+ .map(([key, value]) => `${key}: ${value};`)
1485
+ .join('\n')}
1486
+ }
1487
+ `;
1488
+
1489
+ // eslint-disable-next-line
1490
+ const [avatar3dVisible, setAvatar3dVisible] = useState(true);
1491
+
1492
+ const [gamificationLevel, setGamificationLevel] = useState<
1493
+ GamificationLevel
1494
+ >();
1495
+ const getGamificationPoints = async (
1496
+ memoriID: string
1497
+ ): Promise<{
1498
+ points: number;
1499
+ unansweredQuestions: number;
1500
+ }> => {
1501
+ let gamificationPoints: number | undefined;
1502
+ let unansQuestions: number | undefined;
1503
+ try {
1504
+ const {
1505
+ contentQualityIndex,
1506
+ answerQualityIndex,
1507
+ unansweredQuestions,
1508
+ ...cqResp
1509
+ } = await getContentQualityIndexes(memoriID);
1510
+ if (cqResp.resultCode === 0) {
1511
+ gamificationPoints = contentQualityIndex;
1512
+ unansQuestions = unansweredQuestions;
1513
+ }
1514
+ } catch (_e) {
1515
+ let err = _e as Error;
1516
+ console.error('[APPCONTEXT/QUERYGAMIFICATIONPOINTS]', err);
1517
+ }
1518
+
1519
+ return {
1520
+ points: gamificationPoints ?? 0,
1521
+ unansweredQuestions: unansQuestions ?? 0,
1522
+ };
1523
+ };
1524
+ useEffect(() => {
1525
+ if (memori.engineMemoriID) {
1526
+ getGamificationPoints(memori.engineMemoriID)
1527
+ .then(value => {
1528
+ setGamificationLevel(getGamificationLevel(value.points));
1529
+ })
1530
+ .catch(console.error);
1531
+ }
1532
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1533
+ }, [memori.engineMemoriID]);
1534
+
1535
+ // Put SEO tags in head
1536
+ useEffect(() => {
1537
+ if (integrationConfig?.seoTitle) {
1538
+ let meta = document.createElement('meta');
1539
+ meta.setAttribute('property', 'og:title');
1540
+ meta.setAttribute('content', integrationConfig.seoTitle);
1541
+ document.head.append(meta);
1542
+ }
1543
+ if (integrationConfig?.seoDescription) {
1544
+ let meta = document.createElement('meta');
1545
+ meta.setAttribute('property', 'og:description');
1546
+ meta.setAttribute('content', integrationConfig.seoDescription);
1547
+ document.head.append(meta);
1548
+ }
1549
+ if (integrationConfig?.seoUrl) {
1550
+ let meta = document.createElement('meta');
1551
+ meta.setAttribute('property', 'og:url');
1552
+ meta.setAttribute('content', integrationConfig.seoUrl);
1553
+ document.head.append(meta);
1554
+ }
1555
+ let image = ogImage || memori.avatarURL;
1556
+ if (integrationConfig?.seoImageShowAvatar && image) {
1557
+ let meta = document.createElement('meta');
1558
+ meta.setAttribute('property', 'og:image');
1559
+ meta.setAttribute('content', image);
1560
+ document.head.append(meta);
1561
+ }
1562
+ }, [integrationConfig, memori.avatarURL, ogImage]);
1563
+
1564
+ // X3 state - tag change
1565
+ const selectReceiverTag = async (tag: string) => {
1566
+ if (!sessionId) return;
1567
+
1568
+ try {
1569
+ const { currentState, ...resp } = await postTagChangedEvent(
1570
+ sessionId,
1571
+ tag
1572
+ );
1573
+
1574
+ if (resp.resultCode === 0) {
1575
+ pushMessage({
1576
+ text: tag,
1577
+ fromUser: true,
1578
+ });
1579
+
1580
+ if (currentState.state === 'X4' && memori.giverTag) {
1581
+ const { currentState, ...resp } = await client.postTagChangedEvent(
1582
+ sessionId,
1583
+ memori.giverTag
1584
+ );
1585
+
1586
+ if (resp.resultCode === 0) {
1587
+ setCurrentDialogState(currentState);
1588
+
1589
+ if (currentState.emission) {
1590
+ pushMessage({
1591
+ text: currentState.emission,
1592
+ media: currentState.media,
1593
+ fromUser: false,
1594
+ });
1595
+ }
1596
+ } else {
1597
+ console.error(resp);
1598
+ message.error(
1599
+ t(getErrori18nKey(resp.resultCode), {
1600
+ ns: 'common',
1601
+ })
1602
+ );
1603
+ }
1604
+ } else {
1605
+ setCurrentDialogState(currentState);
1606
+ if (currentState.emission) {
1607
+ pushMessage({
1608
+ text: currentState.emission,
1609
+ media: currentState.media,
1610
+ fromUser: false,
1611
+ });
1612
+ }
1613
+ }
1614
+ } else {
1615
+ console.error(resp, tag, currentDialogState?.knownTags?.[tag]);
1616
+ message.error(t(getErrori18nKey(resp.resultCode), { ns: 'common' }));
1617
+ }
1618
+ } catch (e) {
1619
+ let err = e as Error;
1620
+ console.error(err);
1621
+ message.error(err.message);
1622
+ }
1623
+ };
1624
+
1625
+ const simulateUserPrompt = (text: string, translatedText?: string) => {
1626
+ stopListening();
1627
+ sendMessage(text, undefined, undefined, false, translatedText);
1628
+ };
1629
+
1630
+ const onClickStart = async () => {
1631
+ setClickedStart(true);
1632
+ initializeTTS();
1633
+ if (
1634
+ (!sessionId &&
1635
+ ((memori.privacyType === 'SECRET' && !memori.secretToken) ||
1636
+ (memori.privacyType === 'PRIVATE' && !memori.secretToken))) ||
1637
+ (!sessionId && gotErrorInOpening)
1638
+ ) {
1639
+ setAuthModalState('password');
1640
+ setClickedStart(false);
1641
+ } else if (!sessionId) {
1642
+ console.info('No session ID');
1643
+ setClickedStart(false);
1644
+ setGotErrorInOpening(true);
1645
+ return;
1646
+ } else {
1647
+ // set tag as anonymous for tryme, giver for instruct
1648
+ try {
1649
+ if (!instruct && personification) {
1650
+ try {
1651
+ if (!embed) {
1652
+ setHistory([]);
1653
+ console.debug('change tag #1');
1654
+ await changeTag(memori.engineMemoriID!, sessionId, '-');
1655
+ const session = await changeTag(
1656
+ memori.engineMemoriID!,
1657
+ sessionId,
1658
+ personification.tag,
1659
+ personification.pin
1660
+ );
1661
+
1662
+ if (session && session.resultCode === 0) {
1663
+ translateDialogState(session.currentState, userLang).finally(
1664
+ () => {
1665
+ setHasUserActivatedSpeak(true);
1666
+ }
1667
+ );
1668
+ } else {
1669
+ console.error('session #1', session);
1670
+ throw new Error('No session');
1671
+ }
1672
+ } else {
1673
+ if (currentDialogState) {
1674
+ setHistory([]);
1675
+ translateDialogState(currentDialogState, userLang).finally(
1676
+ () => {
1677
+ setHasUserActivatedSpeak(true);
1678
+ }
1679
+ );
1680
+ } else {
1681
+ setHasUserActivatedSpeak(true);
1682
+ }
1683
+ }
1684
+ } catch (e) {
1685
+ console.error('session #2', e);
1686
+ reopenSession(
1687
+ true,
1688
+ memori?.secretToken,
1689
+ undefined,
1690
+ personification.tag,
1691
+ personification.pin
1692
+ ).then(() => {
1693
+ setHasUserActivatedSpeak(true);
1694
+ });
1695
+ }
1696
+ } else if (!instruct && currentDialogState?.currentTag !== anonTag) {
1697
+ try {
1698
+ if (!embed) {
1699
+ setHistory([]);
1700
+ console.debug('change tag #2');
1701
+ await changeTag(memori.engineMemoriID!, sessionId, '-');
1702
+ const session = await changeTag(
1703
+ memori.engineMemoriID!,
1704
+ sessionId,
1705
+ anonTag
1706
+ );
1707
+
1708
+ if (session && session.resultCode === 0) {
1709
+ translateDialogState(session.currentState, userLang).finally(
1710
+ () => {
1711
+ setHasUserActivatedSpeak(true);
1712
+ }
1713
+ );
1714
+ } else {
1715
+ console.error('session #3', session);
1716
+ throw new Error('No session');
1717
+ }
1718
+ } else {
1719
+ if (currentDialogState) {
1720
+ setHistory([]);
1721
+ translateDialogState(currentDialogState, userLang).finally(
1722
+ () => {
1723
+ setHasUserActivatedSpeak(true);
1724
+ }
1725
+ );
1726
+ } else {
1727
+ setHasUserActivatedSpeak(true);
1728
+ }
1729
+ }
1730
+ } catch (e) {
1731
+ console.error('session #4', e);
1732
+ reopenSession(
1733
+ true,
1734
+ memori?.secretToken,
1735
+ undefined,
1736
+ undefined,
1737
+ undefined,
1738
+ initialContextVars,
1739
+ initialQuestion
1740
+ ).then(() => {
1741
+ setHasUserActivatedSpeak(true);
1742
+ });
1743
+ }
1744
+ } else if (
1745
+ instruct &&
1746
+ memori.giverTag &&
1747
+ currentDialogState?.currentTag !== memori.giverTag
1748
+ ) {
1749
+ try {
1750
+ if (!embed) {
1751
+ setHistory([]);
1752
+ console.debug('change tag #3');
1753
+ await changeTag(memori.engineMemoriID!, sessionId, '-');
1754
+ const session = await changeTag(
1755
+ memori.engineMemoriID!,
1756
+ sessionId,
1757
+ memori.giverTag,
1758
+ memori.giverPIN
1759
+ );
1760
+
1761
+ if (session && session.resultCode === 0) {
1762
+ translateDialogState(session.currentState, userLang).finally(
1763
+ () => {
1764
+ setHasUserActivatedSpeak(true);
1765
+ }
1766
+ );
1767
+ } else {
1768
+ console.error('session #5', session);
1769
+ throw new Error('No session');
1770
+ }
1771
+ } else {
1772
+ if (currentDialogState) {
1773
+ setHistory([]);
1774
+ translateDialogState(currentDialogState, userLang).finally(
1775
+ () => {
1776
+ setHasUserActivatedSpeak(true);
1777
+ }
1778
+ );
1779
+ } else {
1780
+ setHasUserActivatedSpeak(true);
1781
+ }
1782
+ }
1783
+ } catch (e) {
1784
+ console.error('session #6', e);
1785
+ reopenSession(
1786
+ true,
1787
+ memori?.secretToken,
1788
+ undefined,
1789
+ memori?.giverTag,
1790
+ memori?.giverPIN,
1791
+ initialContextVars,
1792
+ initialQuestion
1793
+ ).then(() => {
1794
+ setHasUserActivatedSpeak(true);
1795
+ });
1796
+ }
1797
+ } else {
1798
+ try {
1799
+ // if (!embed) {
1800
+ // setHistory([]);
1801
+ // }
1802
+
1803
+ // const session = await getSession(sessionId);
1804
+
1805
+ // if (session && session.resultCode === 0) {
1806
+ // translateDialogState(
1807
+ // session.currentState,
1808
+ // userLang,
1809
+ // ).finally(() => {
1810
+ // setHasUserActivatedSpeak(true);
1811
+ // });
1812
+ // } else {
1813
+ // console.error('session #7', session);
1814
+ // throw new Error('No session');
1815
+ // }
1816
+ if (!embed) {
1817
+ setHistory([]);
1818
+ console.debug('change tag #4');
1819
+ await changeTag(memori.engineMemoriID!, sessionId, '-');
1820
+ const session = await changeTag(
1821
+ memori.engineMemoriID!,
1822
+ sessionId,
1823
+ instruct
1824
+ ? memori.giverTag
1825
+ : personification
1826
+ ? personification.tag
1827
+ : anonTag,
1828
+ instruct
1829
+ ? memori.giverPIN
1830
+ : personification
1831
+ ? personification.pin
1832
+ : undefined
1833
+ );
1834
+
1835
+ if (session && session.resultCode === 0) {
1836
+ translateDialogState(session.currentState, userLang).finally(
1837
+ () => {
1838
+ setHasUserActivatedSpeak(true);
1839
+ }
1840
+ );
1841
+ } else {
1842
+ console.error('session #7', session);
1843
+ throw new Error('No session');
1844
+ }
1845
+ } else {
1846
+ if (currentDialogState) {
1847
+ setHistory([]);
1848
+ translateDialogState(currentDialogState, userLang).finally(
1849
+ () => {
1850
+ setHasUserActivatedSpeak(true);
1851
+ }
1852
+ );
1853
+ } else {
1854
+ setHasUserActivatedSpeak(true);
1855
+ }
1856
+ }
1857
+ } catch (e) {
1858
+ console.error('session #8', e);
1859
+ reopenSession(
1860
+ true,
1861
+ memori?.secretToken,
1862
+ undefined,
1863
+ memori?.giverTag,
1864
+ memori?.giverPIN,
1865
+ initialContextVars,
1866
+ initialQuestion
1867
+ ).then(() => {
1868
+ setHasUserActivatedSpeak(true);
1869
+ });
1870
+ }
1871
+ }
1872
+ } catch (e) {
1873
+ let err = e as Error;
1874
+ console.error('session #0', err);
1875
+ reopenSession(
1876
+ true,
1877
+ memori.secretToken,
1878
+ undefined,
1879
+ memori.giverTag,
1880
+ memori.giverPIN,
1881
+ initialContextVars,
1882
+ initialQuestion
1883
+ );
1884
+ }
1885
+ }
1886
+ };
1887
+
1888
+ const header = (
1889
+ <Header
1890
+ memori={memori}
1891
+ history={history}
1892
+ showShare={showShare}
1893
+ position={position}
1894
+ setShowPositionDrawer={setShowPositionDrawer}
1895
+ setShowSettingsDrawer={setShowSettingsDrawer}
1896
+ speakerMuted={muteSpeaker}
1897
+ setSpeakerMuted={setMuteSpeaker}
1898
+ showSettings={showSettings}
1899
+ hasUserActivatedSpeak={hasUserActivatedSpeak}
1900
+ />
1901
+ );
1902
+
1903
+ const avatar = (
1904
+ <Avatar
1905
+ memori={memori}
1906
+ integration={integration}
1907
+ integrationConfig={integrationConfig}
1908
+ tenant={tenant}
1909
+ instruct={instruct}
1910
+ avatar3dVisible={avatar3dVisible}
1911
+ setAvatar3dVisible={setAvatar3dVisible}
1912
+ hasUserActivatedSpeak={hasUserActivatedSpeak}
1913
+ isPlayingAudio={isPlayingAudio}
1914
+ baseUrl={baseUrl}
1915
+ />
1916
+ );
1917
+
1918
+ const startPanel = (
1919
+ <StartPanel
1920
+ memori={memori}
1921
+ tenant={tenant}
1922
+ gamificationLevel={gamificationLevel}
1923
+ language={language}
1924
+ userLang={userLang}
1925
+ setUserLang={setUserLang}
1926
+ baseUrl={baseUrl}
1927
+ position={position}
1928
+ openPositionDrawer={() => setShowPositionDrawer(true)}
1929
+ integrationConfig={integrationConfig}
1930
+ instruct={instruct}
1931
+ sessionId={sessionId}
1932
+ clickedStart={clickedStart}
1933
+ onClickStart={onClickStart}
1934
+ />
1935
+ );
1936
+
1937
+ const chat = sessionId ? (
1938
+ <Chat
1939
+ memori={memori}
1940
+ sessionID={sessionId}
1941
+ tenant={tenant}
1942
+ translateTo={
1943
+ isMultilanguageEnabled &&
1944
+ userLang.toUpperCase() !==
1945
+ (
1946
+ memori.culture?.split('-')?.[0] ??
1947
+ i18n.language ??
1948
+ 'IT'
1949
+ )?.toUpperCase()
1950
+ ? userLang
1951
+ : undefined
1952
+ }
1953
+ baseUrl={baseUrl}
1954
+ memoriTyping={memoriTyping}
1955
+ history={history}
1956
+ dialogState={currentDialogState}
1957
+ setDialogState={setCurrentDialogState}
1958
+ pushMessage={pushMessage}
1959
+ simulateUserPrompt={simulateUserPrompt}
1960
+ showDates={showDates}
1961
+ showContextPerLine={showContextPerLine}
1962
+ client={client}
1963
+ selectReceiverTag={selectReceiverTag}
1964
+ preview={preview}
1965
+ sendOnEnter={sendOnEnter}
1966
+ setSendOnEnter={setSendOnEnter}
1967
+ attachmentsMenuOpen={attachmentsMenuOpen}
1968
+ setAttachmentsMenuOpen={setAttachmentsMenuOpen}
1969
+ instruct={instruct}
1970
+ showInputs={showInputs}
1971
+ userMessage={userMessage}
1972
+ onChangeUserMessage={onChangeUserMessage}
1973
+ sendMessage={(msg: string) => {
1974
+ stopListening();
1975
+ sendMessage(msg);
1976
+ setUserMessage('');
1977
+ resetTranscript();
1978
+ }}
1979
+ stopListening={stopListening}
1980
+ resetTranscript={resetTranscript}
1981
+ />
1982
+ ) : null;
1983
+
1984
+ const integrationBackground =
1985
+ integration && globalBackgroundUrl ? (
1986
+ <div className="memori--global-background">
1987
+ <div
1988
+ className="memori--global-background-image"
1989
+ style={{ backgroundImage: globalBackgroundUrl }}
1990
+ />
1991
+ </div>
1992
+ ) : null;
1993
+
1994
+ const integrationStyle = integration ? (
1995
+ <style dangerouslySetInnerHTML={{ __html: integrationStylesheet }} />
1996
+ ) : null;
1997
+
1998
+ const onChangeMode = (mode: 'instruct' | 'test') => {
1999
+ setInstruct(mode === 'instruct');
2000
+ setHasUserActivatedSpeak(false);
2001
+ setClickedStart(false);
2002
+ };
2003
+ const changeMode = (
2004
+ <ChangeMode instruct={instruct} onChangeMode={onChangeMode} />
2005
+ );
2006
+
2007
+ return (
2008
+ <div
2009
+ className={cx('memori', 'memori-widget', {
2010
+ 'memori--preview': preview,
2011
+ 'memori--embed': embed,
2012
+ 'memori--with-integration': integration,
2013
+ 'memori--active': hasUserActivatedSpeak,
2014
+ })}
2015
+ data-memori-engine-state={JSON.stringify({
2016
+ ...currentDialogState,
2017
+ sessionID: sessionId,
2018
+ })}
2019
+ >
2020
+ <DefaultLayout
2021
+ header={header}
2022
+ avatar={avatar}
2023
+ chat={chat}
2024
+ startPanel={startPanel}
2025
+ integrationStyle={integrationStyle}
2026
+ integrationBackground={integrationBackground}
2027
+ changeMode={changeMode}
2028
+ sessionId={sessionId}
2029
+ hasUserActivatedSpeak={hasUserActivatedSpeak}
2030
+ showInstruct={showInstruct}
2031
+ loading={loading}
2032
+ />
2033
+ </div>
2034
+ );
2035
+ };
2036
+
2037
+ export default MemoriWidget;