@memori.ai/memori-react 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/README.md +12 -2
  3. package/dist/components/AgeVerificationModal/AgeVerificationModal.d.ts +7 -0
  4. package/dist/components/AgeVerificationModal/AgeVerificationModal.js +39 -0
  5. package/dist/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -0
  6. package/dist/components/AgeVerificationModal/AgeVerificationModal.test.d.ts +1 -0
  7. package/dist/components/AgeVerificationModal/AgeVerificationModal.test.js +27 -0
  8. package/dist/components/AgeVerificationModal/AgeVerificationModal.test.js.map +1 -0
  9. package/dist/components/AttachmentLinkModal/AttachmentLinkModal.stories.d.ts +2 -2
  10. package/dist/components/AttachmentMediaModal/AttachmentMediaModal.stories.d.ts +2 -2
  11. package/dist/components/Auth/Auth.stories.d.ts +5 -5
  12. package/dist/components/Avatar/Avatar.js +2 -2
  13. package/dist/components/Avatar/Avatar.js.map +1 -1
  14. package/dist/components/Avatar/Avatar.stories.d.ts +5 -5
  15. package/dist/components/AvatarView/AvatarView.stories.d.ts +10 -10
  16. package/dist/components/AvatarView/components/fullbodyAvatar.d.ts +2 -1
  17. package/dist/components/AvatarView/components/fullbodyAvatar.js +6 -3
  18. package/dist/components/AvatarView/components/fullbodyAvatar.js.map +1 -1
  19. package/dist/components/AvatarView/components/loader.js +3 -1
  20. package/dist/components/AvatarView/components/loader.js.map +1 -1
  21. package/dist/components/AvatarView/index.d.ts +2 -1
  22. package/dist/components/AvatarView/index.js +2 -2
  23. package/dist/components/AvatarView/index.js.map +1 -1
  24. package/dist/components/AvatarView/utils/useMouthSpeaking.js +3 -1
  25. package/dist/components/AvatarView/utils/useMouthSpeaking.js.map +1 -1
  26. package/dist/components/Blob/Blob.stories.d.ts +4 -4
  27. package/dist/components/BlockedMemoriBadge/BlockedMemoriBadge.stories.d.ts +5 -5
  28. package/dist/components/ChangeMode/ChangeMode.stories.d.ts +3 -3
  29. package/dist/components/Chat/Chat.stories.d.ts +12 -12
  30. package/dist/components/ChatBubble/ChatBubble.stories.d.ts +7 -7
  31. package/dist/components/ChatInputs/ChatInputs.js +2 -1
  32. package/dist/components/ChatInputs/ChatInputs.js.map +1 -1
  33. package/dist/components/ChatInputs/ChatInputs.stories.d.ts +9 -9
  34. package/dist/components/ChatTextArea/ChatTextArea.stories.d.ts +4 -4
  35. package/dist/components/CustomGLBModelViewer/ModelViewer.stories.d.ts +2 -2
  36. package/dist/components/DateSelector/DateSelector.d.ts +9 -0
  37. package/dist/components/DateSelector/DateSelector.js +61 -0
  38. package/dist/components/DateSelector/DateSelector.js.map +1 -0
  39. package/dist/components/DateSelector/DateSelector.test.d.ts +1 -0
  40. package/dist/components/DateSelector/DateSelector.test.js +24 -0
  41. package/dist/components/DateSelector/DateSelector.test.js.map +1 -0
  42. package/dist/components/ExportHistoryButton/ExportHistoryButton.stories.d.ts +5 -5
  43. package/dist/components/FeedbackButtons/FeedbackButtons.stories.d.ts +4 -4
  44. package/dist/components/Header/Header.d.ts +1 -0
  45. package/dist/components/Header/Header.js +26 -2
  46. package/dist/components/Header/Header.js.map +1 -1
  47. package/dist/components/Header/Header.stories.d.ts +7 -7
  48. package/dist/components/ImageUpload/ImageUpload.stories.d.ts +8 -8
  49. package/dist/components/MediaWidget/LinkItemWidget.d.ts +2 -1
  50. package/dist/components/MediaWidget/LinkItemWidget.js +10 -2
  51. package/dist/components/MediaWidget/LinkItemWidget.js.map +1 -1
  52. package/dist/components/MediaWidget/LinkItemWidget.stories.d.ts +2 -2
  53. package/dist/components/MediaWidget/MediaItemWidget.d.ts +3 -1
  54. package/dist/components/MediaWidget/MediaItemWidget.js +44 -72
  55. package/dist/components/MediaWidget/MediaItemWidget.js.map +1 -1
  56. package/dist/components/MediaWidget/MediaItemWidget.stories.d.ts +3 -3
  57. package/dist/components/MediaWidget/MediaWidget.js +10 -7
  58. package/dist/components/MediaWidget/MediaWidget.js.map +1 -1
  59. package/dist/components/MediaWidget/MediaWidget.stories.d.ts +5 -5
  60. package/dist/components/MemoriWidget/MemoriWidget.d.ts +3 -2
  61. package/dist/components/MemoriWidget/MemoriWidget.js +92 -25
  62. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  63. package/dist/components/MemoriWidget/MemoriWidget.stories.d.ts +8 -8
  64. package/dist/components/PoweredBy/PoweredBy.stories.d.ts +4 -4
  65. package/dist/components/SendOnEnterMenu/SendOnEnterMenu.stories.d.ts +3 -3
  66. package/dist/components/SettingsDrawer/SettingsDrawer.d.ts +13 -0
  67. package/dist/components/SettingsDrawer/SettingsDrawer.js +27 -0
  68. package/dist/components/SettingsDrawer/SettingsDrawer.js.map +1 -0
  69. package/dist/components/SettingsDrawer/SettingsDrawer.test.d.ts +1 -0
  70. package/dist/components/SettingsDrawer/SettingsDrawer.test.js +27 -0
  71. package/dist/components/SettingsDrawer/SettingsDrawer.test.js.map +1 -0
  72. package/dist/components/ShareButton/ShareButton.stories.d.ts +4 -4
  73. package/dist/components/Snippet/Snippet.stories.d.ts +15 -15
  74. package/dist/components/StartPanel/StartPanel.d.ts +1 -1
  75. package/dist/components/StartPanel/StartPanel.js +10 -7
  76. package/dist/components/StartPanel/StartPanel.js.map +1 -1
  77. package/dist/components/StartPanel/StartPanel.stories.d.ts +6 -6
  78. package/dist/components/StartPanel/StartPanel.test.js +7 -0
  79. package/dist/components/StartPanel/StartPanel.test.js.map +1 -1
  80. package/dist/components/UploadMenu/UploadMenu.stories.d.ts +4 -4
  81. package/dist/components/icons/Refresh.d.ts +5 -0
  82. package/dist/components/icons/Refresh.js +6 -0
  83. package/dist/components/icons/Refresh.js.map +1 -0
  84. package/dist/components/icons/SelectIcon.d.ts +5 -0
  85. package/dist/components/icons/SelectIcon.js +6 -0
  86. package/dist/components/icons/SelectIcon.js.map +1 -0
  87. package/dist/components/icons/icons.stories.d.ts +2 -2
  88. package/dist/components/layouts/FullPage.d.ts +17 -0
  89. package/dist/components/layouts/FullPage.js +8 -0
  90. package/dist/components/layouts/FullPage.js.map +1 -0
  91. package/dist/components/layouts/FullPage.test.d.ts +1 -0
  92. package/dist/components/layouts/FullPage.test.js +12 -0
  93. package/dist/components/layouts/FullPage.test.js.map +1 -0
  94. package/dist/components/layouts/Totem.d.ts +17 -0
  95. package/dist/components/layouts/Totem.js +8 -0
  96. package/dist/components/layouts/Totem.js.map +1 -0
  97. package/dist/components/layouts/Totem.test.d.ts +1 -0
  98. package/dist/components/layouts/Totem.test.js +12 -0
  99. package/dist/components/layouts/Totem.test.js.map +1 -0
  100. package/dist/components/ui/Button.stories.d.ts +14 -14
  101. package/dist/components/ui/Card.stories.d.ts +7 -7
  102. package/dist/components/ui/Checkbox.d.ts +2 -0
  103. package/dist/components/ui/Checkbox.js +2 -2
  104. package/dist/components/ui/Checkbox.js.map +1 -1
  105. package/dist/components/ui/Checkbox.stories.d.ts +5 -5
  106. package/dist/components/ui/Drawer.stories.d.ts +9 -9
  107. package/dist/components/ui/Modal.stories.d.ts +9 -9
  108. package/dist/components/ui/Select.d.ts +15 -0
  109. package/dist/components/ui/Select.js +17 -0
  110. package/dist/components/ui/Select.js.map +1 -0
  111. package/dist/components/ui/Select.test.d.ts +1 -0
  112. package/dist/components/ui/Select.test.js +47 -0
  113. package/dist/components/ui/Select.test.js.map +1 -0
  114. package/dist/components/ui/Spin.stories.d.ts +4 -4
  115. package/dist/components/ui/Tooltip.stories.d.ts +6 -6
  116. package/dist/components/ui/definitions.stories.d.ts +2 -3
  117. package/dist/helpers/configuration.js +2 -0
  118. package/dist/helpers/configuration.js.map +1 -1
  119. package/dist/helpers/utils.js +1 -1
  120. package/dist/helpers/utils.js.map +1 -1
  121. package/dist/index.d.ts +2 -0
  122. package/dist/index.js +2 -2
  123. package/dist/index.js.map +1 -1
  124. package/dist/index.stories.d.ts +2 -2
  125. package/dist/locales/en.json +17 -0
  126. package/dist/locales/it.json +17 -0
  127. package/dist/mocks/data.js +5 -2
  128. package/dist/mocks/data.js.map +1 -1
  129. package/esm/components/AgeVerificationModal/AgeVerificationModal.d.ts +7 -0
  130. package/esm/components/AgeVerificationModal/AgeVerificationModal.js +36 -0
  131. package/esm/components/AgeVerificationModal/AgeVerificationModal.js.map +1 -0
  132. package/esm/components/AgeVerificationModal/AgeVerificationModal.test.d.ts +1 -0
  133. package/esm/components/AgeVerificationModal/AgeVerificationModal.test.js +24 -0
  134. package/esm/components/AgeVerificationModal/AgeVerificationModal.test.js.map +1 -0
  135. package/esm/components/Avatar/Avatar.js +2 -2
  136. package/esm/components/Avatar/Avatar.js.map +1 -1
  137. package/esm/components/AvatarView/components/fullbodyAvatar.d.ts +2 -1
  138. package/esm/components/AvatarView/components/fullbodyAvatar.js +7 -4
  139. package/esm/components/AvatarView/components/fullbodyAvatar.js.map +1 -1
  140. package/esm/components/AvatarView/components/loader.js +2 -1
  141. package/esm/components/AvatarView/components/loader.js.map +1 -1
  142. package/esm/components/AvatarView/index.d.ts +2 -1
  143. package/esm/components/AvatarView/index.js +2 -2
  144. package/esm/components/AvatarView/index.js.map +1 -1
  145. package/esm/components/AvatarView/utils/useMouthSpeaking.js +3 -1
  146. package/esm/components/AvatarView/utils/useMouthSpeaking.js.map +1 -1
  147. package/esm/components/ChatInputs/ChatInputs.js +2 -1
  148. package/esm/components/ChatInputs/ChatInputs.js.map +1 -1
  149. package/esm/components/DateSelector/DateSelector.d.ts +9 -0
  150. package/esm/components/DateSelector/DateSelector.js +58 -0
  151. package/esm/components/DateSelector/DateSelector.js.map +1 -0
  152. package/esm/components/DateSelector/DateSelector.test.d.ts +1 -0
  153. package/esm/components/DateSelector/DateSelector.test.js +21 -0
  154. package/esm/components/DateSelector/DateSelector.test.js.map +1 -0
  155. package/esm/components/Header/Header.d.ts +1 -0
  156. package/esm/components/Header/Header.js +26 -2
  157. package/esm/components/Header/Header.js.map +1 -1
  158. package/esm/components/MediaWidget/LinkItemWidget.d.ts +2 -1
  159. package/esm/components/MediaWidget/LinkItemWidget.js +10 -2
  160. package/esm/components/MediaWidget/LinkItemWidget.js.map +1 -1
  161. package/esm/components/MediaWidget/MediaItemWidget.d.ts +3 -1
  162. package/esm/components/MediaWidget/MediaItemWidget.js +44 -72
  163. package/esm/components/MediaWidget/MediaItemWidget.js.map +1 -1
  164. package/esm/components/MediaWidget/MediaWidget.js +11 -8
  165. package/esm/components/MediaWidget/MediaWidget.js.map +1 -1
  166. package/esm/components/MemoriWidget/MemoriWidget.d.ts +3 -2
  167. package/esm/components/MemoriWidget/MemoriWidget.js +92 -25
  168. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  169. package/esm/components/SettingsDrawer/SettingsDrawer.d.ts +13 -0
  170. package/esm/components/SettingsDrawer/SettingsDrawer.js +24 -0
  171. package/esm/components/SettingsDrawer/SettingsDrawer.js.map +1 -0
  172. package/esm/components/SettingsDrawer/SettingsDrawer.test.d.ts +1 -0
  173. package/esm/components/SettingsDrawer/SettingsDrawer.test.js +24 -0
  174. package/esm/components/SettingsDrawer/SettingsDrawer.test.js.map +1 -0
  175. package/esm/components/StartPanel/StartPanel.d.ts +1 -1
  176. package/esm/components/StartPanel/StartPanel.js +10 -7
  177. package/esm/components/StartPanel/StartPanel.js.map +1 -1
  178. package/esm/components/StartPanel/StartPanel.test.js +7 -0
  179. package/esm/components/StartPanel/StartPanel.test.js.map +1 -1
  180. package/esm/components/icons/Refresh.d.ts +5 -0
  181. package/esm/components/icons/Refresh.js +4 -0
  182. package/esm/components/icons/Refresh.js.map +1 -0
  183. package/esm/components/icons/SelectIcon.d.ts +5 -0
  184. package/esm/components/icons/SelectIcon.js +4 -0
  185. package/esm/components/icons/SelectIcon.js.map +1 -0
  186. package/esm/components/layouts/FullPage.d.ts +17 -0
  187. package/esm/components/layouts/FullPage.js +5 -0
  188. package/esm/components/layouts/FullPage.js.map +1 -0
  189. package/esm/components/layouts/FullPage.test.d.ts +1 -0
  190. package/esm/components/layouts/FullPage.test.js +9 -0
  191. package/esm/components/layouts/FullPage.test.js.map +1 -0
  192. package/esm/components/layouts/Totem.d.ts +17 -0
  193. package/esm/components/layouts/Totem.js +5 -0
  194. package/esm/components/layouts/Totem.js.map +1 -0
  195. package/esm/components/layouts/Totem.test.d.ts +1 -0
  196. package/esm/components/layouts/Totem.test.js +9 -0
  197. package/esm/components/layouts/Totem.test.js.map +1 -0
  198. package/esm/components/ui/Checkbox.d.ts +2 -0
  199. package/esm/components/ui/Checkbox.js +2 -2
  200. package/esm/components/ui/Checkbox.js.map +1 -1
  201. package/esm/components/ui/Select.d.ts +15 -0
  202. package/esm/components/ui/Select.js +14 -0
  203. package/esm/components/ui/Select.js.map +1 -0
  204. package/esm/components/ui/Select.test.d.ts +1 -0
  205. package/esm/components/ui/Select.test.js +44 -0
  206. package/esm/components/ui/Select.test.js.map +1 -0
  207. package/esm/helpers/configuration.js +2 -0
  208. package/esm/helpers/configuration.js.map +1 -1
  209. package/esm/helpers/utils.js +1 -1
  210. package/esm/helpers/utils.js.map +1 -1
  211. package/esm/index.d.ts +2 -0
  212. package/esm/index.js +2 -2
  213. package/esm/index.js.map +1 -1
  214. package/esm/locales/en.json +17 -0
  215. package/esm/locales/it.json +17 -0
  216. package/esm/mocks/data.js +5 -2
  217. package/esm/mocks/data.js.map +1 -1
  218. package/package.json +20 -16
  219. package/src/components/AgeVerificationModal/AgeVerificationModal.css +63 -0
  220. package/src/components/AgeVerificationModal/AgeVerificationModal.stories.tsx +41 -0
  221. package/src/components/AgeVerificationModal/AgeVerificationModal.test.tsx +33 -0
  222. package/src/components/AgeVerificationModal/AgeVerificationModal.tsx +89 -0
  223. package/src/components/AgeVerificationModal/__snapshots__/AgeVerificationModal.test.tsx.snap +19 -0
  224. package/src/components/Avatar/Avatar.stories.tsx +20 -1
  225. package/src/components/Avatar/Avatar.tsx +2 -1
  226. package/src/components/Avatar/__snapshots__/Avatar.test.tsx.snap +2 -2
  227. package/src/components/AvatarView/AvatarView.stories.tsx +31 -0
  228. package/src/components/AvatarView/components/fullbodyAvatar.tsx +8 -6
  229. package/src/components/AvatarView/components/loader.tsx +15 -12
  230. package/src/components/AvatarView/index.tsx +4 -1
  231. package/src/components/AvatarView/utils/useMouthSpeaking.ts +3 -1
  232. package/src/components/Chat/__snapshots__/Chat.test.tsx.snap +67 -67
  233. package/src/components/ChatBubble/ChatBubble.css +1 -2
  234. package/src/components/ChatBubble/__snapshots__/ChatBubble.test.tsx.snap +4 -4
  235. package/src/components/ChatInputs/ChatInputs.css +14 -3
  236. package/src/components/ChatInputs/ChatInputs.tsx +2 -0
  237. package/src/components/ChatInputs/__snapshots__/ChatInputs.test.tsx.snap +5 -5
  238. package/src/components/DateSelector/DateSelector.css +135 -0
  239. package/src/components/DateSelector/DateSelector.stories.tsx +34 -0
  240. package/src/components/DateSelector/DateSelector.test.tsx +38 -0
  241. package/src/components/DateSelector/DateSelector.tsx +203 -0
  242. package/src/components/DateSelector/__snapshots__/DateSelector.test.tsx.snap +14938 -0
  243. package/src/components/Header/Header.stories.tsx +23 -5
  244. package/src/components/Header/Header.tsx +47 -1
  245. package/src/components/MediaWidget/LinkItemWidget.tsx +20 -1
  246. package/src/components/MediaWidget/MediaItemWidget.css +67 -0
  247. package/src/components/MediaWidget/MediaItemWidget.tsx +72 -71
  248. package/src/components/MediaWidget/MediaWidget.css +9 -0
  249. package/src/components/MediaWidget/MediaWidget.stories.tsx +8 -0
  250. package/src/components/MediaWidget/MediaWidget.tsx +44 -27
  251. package/src/components/MediaWidget/__snapshots__/MediaItemWidget.test.tsx.snap +1 -1
  252. package/src/components/MemoriWidget/MemoriWidget.css +1 -1
  253. package/src/components/MemoriWidget/MemoriWidget.stories.tsx +12 -0
  254. package/src/components/MemoriWidget/MemoriWidget.tsx +178 -33
  255. package/src/components/SettingsDrawer/SettingsDrawer.css +5 -0
  256. package/src/components/SettingsDrawer/SettingsDrawer.stories.tsx +57 -0
  257. package/src/components/SettingsDrawer/SettingsDrawer.test.tsx +61 -0
  258. package/src/components/SettingsDrawer/SettingsDrawer.tsx +108 -0
  259. package/src/components/SettingsDrawer/__snapshots__/SettingsDrawer.test.tsx.snap +19 -0
  260. package/src/components/StartPanel/StartPanel.css +8 -2
  261. package/src/components/StartPanel/StartPanel.stories.tsx +66 -2
  262. package/src/components/StartPanel/StartPanel.test.tsx +21 -0
  263. package/src/components/StartPanel/StartPanel.tsx +28 -23
  264. package/src/components/StartPanel/__snapshots__/StartPanel.test.tsx.snap +420 -67
  265. package/src/components/icons/Refresh.tsx +30 -0
  266. package/src/components/icons/SelectIcon.tsx +28 -0
  267. package/src/components/layouts/FullPage.test.tsx +17 -0
  268. package/src/components/layouts/{Default.tsx → FullPage.tsx} +2 -2
  269. package/src/components/layouts/Totem.test.tsx +17 -0
  270. package/src/components/layouts/Totem.tsx +52 -0
  271. package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +391 -0
  272. package/src/components/layouts/__snapshots__/Totem.test.tsx.snap +422 -0
  273. package/src/components/layouts/layouts.stories.tsx +155 -0
  274. package/src/components/layouts/totem.css +148 -0
  275. package/src/components/ui/Button.css +4 -0
  276. package/src/components/ui/Checkbox.tsx +6 -0
  277. package/src/components/ui/Drawer.css +24 -2
  278. package/src/components/ui/Select.css +135 -0
  279. package/src/components/ui/Select.stories.tsx +79 -0
  280. package/src/components/ui/Select.test.tsx +84 -0
  281. package/src/components/ui/Select.tsx +73 -0
  282. package/src/components/ui/Spin.css +2 -0
  283. package/src/components/ui/__snapshots__/Select.test.tsx.snap +278 -0
  284. package/src/helpers/configuration.ts +4 -2
  285. package/src/helpers/utils.ts +3 -2
  286. package/src/index.stories.tsx +41 -1
  287. package/src/index.tsx +7 -2
  288. package/src/locales/en.json +17 -0
  289. package/src/locales/it.json +17 -0
  290. package/src/mocks/data.ts +5 -2
  291. package/src/styles.css +24 -2
@@ -0,0 +1,108 @@
1
+ import React from 'react';
2
+ import Drawer from '../ui/Drawer';
3
+ import { useTranslation } from 'react-i18next';
4
+ import Checkbox from '../ui/Checkbox';
5
+ import Select from '../ui/Select';
6
+ import { setLocalConfig } from '../../helpers/configuration';
7
+ import { RadioGroup } from '@headlessui/react';
8
+ import Button from '../ui/Button';
9
+
10
+ export interface Props {
11
+ open: boolean;
12
+ layout?: 'FULLPAGE' | 'TOTEM' | 'DEFAULT';
13
+ onClose: () => void;
14
+ continuousSpeech?: boolean;
15
+ continuousSpeechTimeout?: number;
16
+ setContinuousSpeech: (value: boolean) => void;
17
+ setContinuousSpeechTimeout: (value: number) => void;
18
+ controlsPosition?: 'center' | 'bottom';
19
+ setControlsPosition: (value: 'center' | 'bottom') => void;
20
+ }
21
+
22
+ const silenceSeconds = [2, 3, 5, 10, 15, 20, 30, 60];
23
+
24
+ const SettingsDrawer = ({
25
+ open,
26
+ layout = 'DEFAULT',
27
+ onClose,
28
+ continuousSpeech,
29
+ continuousSpeechTimeout,
30
+ setContinuousSpeech,
31
+ setContinuousSpeechTimeout,
32
+ controlsPosition,
33
+ setControlsPosition,
34
+ }: Props) => {
35
+ const { t } = useTranslation();
36
+
37
+ return (
38
+ <Drawer
39
+ className="memori-settings-drawer"
40
+ open={open}
41
+ onClose={onClose}
42
+ title={t('widget.settings') || 'Settings'}
43
+ description={t('write_and_speak.settingsHeaderLabel')}
44
+ >
45
+ <div className="memori-settings-drawer--field">
46
+ <Checkbox
47
+ label={t('write_and_speak.continuousSpeechLabel')}
48
+ checked={continuousSpeech}
49
+ onChange={e => {
50
+ setContinuousSpeech(e.target.checked);
51
+ setLocalConfig('continuousSpeech', e.target.checked);
52
+ }}
53
+ />
54
+ </div>
55
+
56
+ <div className="memori-settings-drawer--field">
57
+ <Select
58
+ label={t('write_and_speak.secondsLabel') || 'Seconds'}
59
+ placeholder={t('write_and_speak.secondsLabel') || 'Seconds'}
60
+ options={silenceSeconds.map(s => ({ value: s, label: s }))}
61
+ value={continuousSpeechTimeout}
62
+ onChange={value => {
63
+ setContinuousSpeechTimeout(value);
64
+ setLocalConfig('continuousSpeechTimeout', value);
65
+ }}
66
+ />
67
+ </div>
68
+
69
+ {layout === 'TOTEM' && (
70
+ <div className="memori-settings-drawer--field controls">
71
+ <label htmlFor="#controlsPosition">
72
+ {t('write_and_speak.controlsPosition') || 'Controls'}:
73
+ </label>
74
+ <RadioGroup
75
+ id="controlsPosition"
76
+ name="controlsPosition"
77
+ value={controlsPosition}
78
+ defaultValue={controlsPosition}
79
+ className="memori-settings-drawer--controlsposition-radio"
80
+ onChange={value => {
81
+ setControlsPosition(value);
82
+ setLocalConfig('controlsPosition', value);
83
+ }}
84
+ >
85
+ <RadioGroup.Option
86
+ value="center"
87
+ className="memori-settings-drawer--controlsposition-radio-button"
88
+ >
89
+ {({ checked }) => (
90
+ <Button primary={checked}>{t('center') || 'Center'}</Button>
91
+ )}
92
+ </RadioGroup.Option>
93
+ <RadioGroup.Option
94
+ value="bottom"
95
+ className="memori-settings-drawer--controlsposition-radio-button"
96
+ >
97
+ {({ checked }) => (
98
+ <Button primary={checked}>{t('bottom') || 'Bottom'}</Button>
99
+ )}
100
+ </RadioGroup.Option>
101
+ </RadioGroup>
102
+ </div>
103
+ )}
104
+ </Drawer>
105
+ );
106
+ };
107
+
108
+ export default SettingsDrawer;
@@ -0,0 +1,19 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`renders SettingsDrawer for totem layout open unchanged 1`] = `
4
+ <div>
5
+ <div
6
+ style="position: fixed; top: 1px; left: 1px; width: 1px; height: 0px; padding: 0px; margin: -1px; overflow: hidden; clip: rect(0px, 0px, 0px, 0px); white-space: nowrap; border-width: 0px; display: none;"
7
+ />
8
+ </div>
9
+ `;
10
+
11
+ exports[`renders SettingsDrawer open unchanged 1`] = `
12
+ <div>
13
+ <div
14
+ style="position: fixed; top: 1px; left: 1px; width: 1px; height: 0px; padding: 0px; margin: -1px; overflow: hidden; clip: rect(0px, 0px, 0px, 0px); white-space: nowrap; border-width: 0px; display: none;"
15
+ />
16
+ </div>
17
+ `;
18
+
19
+ exports[`renders SettingsDrawer unchanged 1`] = `<div />`;
@@ -86,7 +86,7 @@
86
86
 
87
87
  .memori--description,
88
88
  .memori--needsPosition {
89
- color: rgba(0, 0, 0, 0.85);
89
+ color: var(--memori-text-color, rgba(0, 0, 0, 0.85));
90
90
  font-size: 14px;
91
91
  line-height: 1.6;
92
92
  }
@@ -123,7 +123,8 @@
123
123
  margin-left: 0.5rem;
124
124
  }
125
125
 
126
- .memori--completions-enabled {
126
+ .memori--completions-enabled,
127
+ .memori--nsfw {
127
128
  position: absolute;
128
129
  right: 2.5rem;
129
130
  bottom: -1.25rem;
@@ -136,6 +137,7 @@
136
137
  border-radius: 50%;
137
138
  background: #fff;
138
139
  box-shadow: 0 0 5px 6px rgba(255, 255, 255, 0.5);
140
+ color: #000;
139
141
  }
140
142
 
141
143
  .memori--completions-enabled span {
@@ -147,3 +149,7 @@
147
149
  width: 1rem;
148
150
  height: 1rem;
149
151
  }
152
+
153
+ .memori--completions-enabled + .memori--nsfw {
154
+ right: 4.75rem;
155
+ }
@@ -92,7 +92,10 @@ const Template: Story<Props> = args => (
92
92
  // https://storybook.js.org/docs/react/workflows/unit-testing
93
93
  export const Default = Template.bind({});
94
94
  Default.args = {
95
- memori,
95
+ memori: {
96
+ ...memori,
97
+ enableCompletions: false,
98
+ },
96
99
  tenant,
97
100
  language: 'it',
98
101
  userLang: 'en',
@@ -106,7 +109,10 @@ Default.args = {
106
109
 
107
110
  export const WithGamificationLevel = Template.bind({});
108
111
  WithGamificationLevel.args = {
109
- memori,
112
+ memori: {
113
+ ...memori,
114
+ enableCompletions: false,
115
+ },
110
116
  tenant,
111
117
  gamificationLevel: {
112
118
  points: 61,
@@ -123,6 +129,64 @@ WithGamificationLevel.args = {
123
129
  onClickStart: () => {},
124
130
  };
125
131
 
132
+ export const WithCompletionsEnabled = Template.bind({});
133
+ WithCompletionsEnabled.args = {
134
+ memori: {
135
+ ...memori,
136
+ enableCompletions: true,
137
+ },
138
+ tenant,
139
+ language: 'it',
140
+ userLang: 'en',
141
+ setUserLang: () => {},
142
+ openPositionDrawer: () => {},
143
+ instruct: false,
144
+ sessionId: sessionID,
145
+ clickedStart: false,
146
+ onClickStart: () => {},
147
+ };
148
+
149
+ export const WithNSFWFlag = Template.bind({});
150
+ WithNSFWFlag.args = {
151
+ memori: {
152
+ ...memori,
153
+ nsfw: true,
154
+ enableCompletions: false,
155
+ },
156
+ tenant,
157
+ language: 'it',
158
+ userLang: 'en',
159
+ setUserLang: () => {},
160
+ openPositionDrawer: () => {},
161
+ instruct: false,
162
+ sessionId: sessionID,
163
+ clickedStart: false,
164
+ onClickStart: () => {},
165
+ };
166
+
167
+ export const WithAllTheBadges = Template.bind({});
168
+ WithAllTheBadges.args = {
169
+ memori: {
170
+ ...memori,
171
+ enableCompletions: true,
172
+ nsfw: true,
173
+ },
174
+ gamificationLevel: {
175
+ points: 61,
176
+ pointsForCurrentBadge: 60,
177
+ badge: '🌍',
178
+ },
179
+ tenant,
180
+ language: 'it',
181
+ userLang: 'en',
182
+ setUserLang: () => {},
183
+ openPositionDrawer: () => {},
184
+ instruct: false,
185
+ sessionId: sessionID,
186
+ clickedStart: false,
187
+ onClickStart: () => {},
188
+ };
189
+
126
190
  export const Instruct = Template.bind({});
127
191
  Instruct.args = {
128
192
  memori,
@@ -44,6 +44,27 @@ it('renders StartPanel with gamification level unchanged', () => {
44
44
  expect(container).toMatchSnapshot();
45
45
  });
46
46
 
47
+ it('renders StartPanel with completions enabled unchanged', () => {
48
+ const { container } = render(
49
+ <StartPanel
50
+ memori={{
51
+ ...memori,
52
+ enableCompletions: true,
53
+ }}
54
+ tenant={tenant}
55
+ language="it"
56
+ userLang="en"
57
+ setUserLang={() => {}}
58
+ openPositionDrawer={() => {}}
59
+ instruct={false}
60
+ sessionId={sessionID}
61
+ clickedStart={false}
62
+ onClickStart={() => {}}
63
+ />
64
+ );
65
+ expect(container).toMatchSnapshot();
66
+ });
67
+
47
68
  it('renders StartPanel on instruct unchanged', () => {
48
69
  const { container } = render(
49
70
  <StartPanel
@@ -3,7 +3,7 @@ import {
3
3
  Memori,
4
4
  Tenant,
5
5
  Venue,
6
- } from '@memori.ai/memori-api-client/dist/types';
6
+ } from '@memori.ai/memori-api-client/src/types';
7
7
  import React, { useState, useEffect } from 'react';
8
8
  import { getResourceUrl } from '../../helpers/media';
9
9
  import { useTranslation } from 'react-i18next';
@@ -13,6 +13,7 @@ import Button from '../ui/Button';
13
13
  import Translation from '../icons/Translation';
14
14
  import { chatLanguages } from '../../helpers/constants';
15
15
  import BlockedMemoriBadge from '../BlockedMemoriBadge/BlockedMemoriBadge';
16
+ import Select from '../ui/Select';
16
17
  import AI from '../icons/AI';
17
18
 
18
19
  export interface Props {
@@ -125,6 +126,13 @@ const StartPanel: React.FC<Props> = ({
125
126
  </Tooltip>
126
127
  </div>
127
128
  )}
129
+ {!!memori.nsfw && (
130
+ <div className="memori--nsfw">
131
+ <Tooltip alignLeft content={t('nsfw')}>
132
+ <span title={t('nsfw') || 'NSFW'}>🔞</span>
133
+ </Tooltip>
134
+ </div>
135
+ )}
128
136
  </div>
129
137
  <picture className="memori--avatar">
130
138
  <source
@@ -197,29 +205,26 @@ const StartPanel: React.FC<Props> = ({
197
205
 
198
206
  {integrationConfig?.multilanguage && !instruct && (
199
207
  <div className="memori--language-chooser">
200
- <label id="user-lang-pref-label" htmlFor="user-lang-pref">
201
- {t('write_and_speak.iWantToTalkToIn', {
202
- name: memori.name,
203
- })}
204
- </label>
205
- <select
206
- id="user-lang-pref"
208
+ <Select
209
+ label={
210
+ t('write_and_speak.iWantToTalkToIn', {
211
+ name: memori.name,
212
+ }) || undefined
213
+ }
207
214
  value={(userLang ?? i18n.language).toUpperCase()}
208
- aria-labelledby="user-lang-pref-label"
209
- onChange={e => {
210
- setUserLang(e.target.value);
211
- }}
212
- >
213
- {chatLanguages.map(lang => (
214
- <option
215
- key={lang.value}
216
- value={lang.value}
217
- aria-label={lang.label}
218
- >
219
- {lang.label}
220
- </option>
221
- ))}
222
- </select>
215
+ displayValue={
216
+ chatLanguages.find(
217
+ lang =>
218
+ lang.value.toUpperCase() ===
219
+ (userLang ?? i18n.language).toUpperCase()
220
+ )?.label
221
+ }
222
+ onChange={setUserLang}
223
+ options={chatLanguages.map(lang => ({
224
+ label: lang.label,
225
+ value: lang.value.toUpperCase(),
226
+ }))}
227
+ />
223
228
  </div>
224
229
  )}
225
230