@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
@@ -4,6 +4,7 @@ import { memori, history } from '../../mocks/data';
4
4
  import Header, { Props } from './Header';
5
5
 
6
6
  import './Header.css';
7
+ import SettingsDrawer from '../SettingsDrawer/SettingsDrawer';
7
8
 
8
9
  const meta: Meta = {
9
10
  title: 'Widget/Header',
@@ -24,12 +25,29 @@ export default meta;
24
25
 
25
26
  const Template: Story<Props> = args => {
26
27
  const [speakerMuted, setSpeakerMuted] = React.useState(args.speakerMuted);
28
+ const [showSettingsDrawer, setShowSettingsDrawer] = React.useState(false);
29
+ const [continuousSpeech, setContinuousSpeech] = React.useState(true);
30
+ const [continuousSpeechTimeout, setContinuousSpeechTimeout] =
31
+ React.useState(2);
32
+
27
33
  return (
28
- <Header
29
- {...args}
30
- speakerMuted={speakerMuted}
31
- setSpeakerMuted={setSpeakerMuted}
32
- />
34
+ <>
35
+ <Header
36
+ {...args}
37
+ speakerMuted={speakerMuted}
38
+ setSpeakerMuted={setSpeakerMuted}
39
+ showSettings
40
+ setShowSettingsDrawer={() => setShowSettingsDrawer(true)}
41
+ />
42
+ <SettingsDrawer
43
+ open={!!showSettingsDrawer}
44
+ onClose={() => setShowSettingsDrawer(false)}
45
+ continuousSpeech={continuousSpeech}
46
+ continuousSpeechTimeout={continuousSpeechTimeout}
47
+ setContinuousSpeech={setContinuousSpeech}
48
+ setContinuousSpeechTimeout={setContinuousSpeechTimeout}
49
+ />
50
+ </>
33
51
  );
34
52
  };
35
53
 
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { useEffect, useState } from 'react';
2
2
  import cx from 'classnames';
3
3
  import {
4
4
  Memori,
@@ -13,6 +13,9 @@ import { useTranslation } from 'react-i18next';
13
13
  import ExportHistoryButton from '../ExportHistoryButton/ExportHistoryButton';
14
14
  import Setting from '../icons/Setting';
15
15
  import ShareButton from '../ShareButton/ShareButton';
16
+ import FullscreenExit from '../icons/FullscreenExit';
17
+ import Fullscreen from '../icons/Fullscreen';
18
+ import Refresh from '../icons/Refresh';
16
19
 
17
20
  export interface Props {
18
21
  className?: string;
@@ -27,6 +30,7 @@ export interface Props {
27
30
  showShare?: boolean;
28
31
  showSettings?: boolean;
29
32
  showSpeaker?: boolean;
33
+ showReload?: boolean;
30
34
  }
31
35
 
32
36
  const Header: React.FC<Props> = ({
@@ -42,11 +46,31 @@ const Header: React.FC<Props> = ({
42
46
  showShare = true,
43
47
  showSettings = true,
44
48
  showSpeaker = true,
49
+ showReload = false,
45
50
  }) => {
46
51
  const { t } = useTranslation();
52
+ const [fullScreenAvailable, setFullScreenAvailable] = useState(false);
53
+ const [fullScreen, setFullScreen] = useState(false);
54
+ useEffect(() => {
55
+ if (document.fullscreenEnabled) {
56
+ setFullScreenAvailable(true);
57
+ }
58
+ }, []);
47
59
 
48
60
  return (
49
61
  <div className={cx('memori-header', className)}>
62
+ {showReload && (
63
+ <Button
64
+ primary
65
+ shape="circle"
66
+ className="memori-header--button"
67
+ title={t('reload') || 'Reload'}
68
+ icon={<Refresh />}
69
+ onClick={() => {
70
+ window.location.reload();
71
+ }}
72
+ />
73
+ )}
50
74
  {memori.needsPosition && position && (
51
75
  <div className="memori-header--position">
52
76
  <span className="memori-header--position-placeName">
@@ -60,6 +84,28 @@ const Header: React.FC<Props> = ({
60
84
  />
61
85
  </div>
62
86
  )}
87
+ {fullScreenAvailable && (
88
+ <Button
89
+ primary
90
+ shape="circle"
91
+ className="memori-header--button"
92
+ title={
93
+ fullScreen
94
+ ? t('fullscreenExit') || 'Exit fullscreen'
95
+ : t('fullscreenEnter') || 'Enter fullscreen'
96
+ }
97
+ icon={fullScreen ? <FullscreenExit /> : <Fullscreen />}
98
+ onClick={() => {
99
+ if (!document.fullscreenElement) {
100
+ document.documentElement.requestFullscreen();
101
+ setFullScreen(true);
102
+ } else if (document.exitFullscreen) {
103
+ document.exitFullscreen();
104
+ setFullScreen(false);
105
+ }
106
+ }}
107
+ />
108
+ )}
63
109
  {showSpeaker && (
64
110
  <Button
65
111
  primary
@@ -21,6 +21,7 @@ export declare type ILinkPreviewInfo = {
21
21
  };
22
22
 
23
23
  export interface Props {
24
+ isChild?: boolean;
24
25
  items: Medium[];
25
26
  baseUrl?: string;
26
27
  descriptionOneLine?: boolean;
@@ -43,6 +44,7 @@ const getSiteInfo = async (url: string, baseUrl?: string) => {
43
44
  };
44
45
 
45
46
  export const RenderLinkItem = ({
47
+ isChild = false,
46
48
  item,
47
49
  baseUrl,
48
50
  onLinkPreviewInfo,
@@ -97,7 +99,24 @@ export const RenderLinkItem = ({
97
99
  href={normURL}
98
100
  target="_blank"
99
101
  rel="noopener noreferrer"
100
- className="memori-link-item--link"
102
+ className={cx('memori-link-item--link', {
103
+ 'memori-link-item--link--child': isChild,
104
+ })}
105
+ onClick={e => {
106
+ if (!isChild) {
107
+ e.preventDefault();
108
+ e.stopPropagation();
109
+ window.open(
110
+ normURL,
111
+ '_blank',
112
+ `toolbar=yes,top=${window.innerHeight * 0.1},left=${
113
+ window.innerWidth * 0.1
114
+ },width=${window.innerWidth * 0.8},height=${
115
+ window.innerHeight * 0.8
116
+ }`
117
+ );
118
+ }
119
+ }}
101
120
  >
102
121
  <Card
103
122
  hoverable
@@ -63,3 +63,70 @@ a.memori-media-item--link {
63
63
  width: 50%;
64
64
  height: 50%;
65
65
  }
66
+
67
+ .memori-media-item--modal .memori-media-item--figure {
68
+ position: relative;
69
+ z-index: 0;
70
+ width: 100%;
71
+ max-height: 100%;
72
+ flex-direction: row;
73
+ }
74
+
75
+ .memori-media-item--modal .memori-card {
76
+ width: 100%;
77
+ max-width: 100%;
78
+ height: 100%;
79
+ max-height: 100%;
80
+ border-radius: 0;
81
+ margin-bottom: 0;
82
+ box-shadow: none;
83
+ }
84
+
85
+ .memori-media-item--modal .memori-card--content {
86
+ display: none;
87
+ }
88
+
89
+ .memori-media-item--modal .memori-card--cover {
90
+ height: 100%;
91
+ border-radius: 0;
92
+ }
93
+
94
+ .memori-media-item--modal .memori-modal--panel {
95
+ width: 75vw;
96
+ height: 85vh;
97
+ backdrop-filter: blur(var(--memori-blur-background, 10px));
98
+ background: rgba(0, 0, 0, 0.25);
99
+ }
100
+
101
+ .memori-media-item--modal .memori-modal--panel .memori-card {
102
+ background: none;
103
+ }
104
+
105
+ .memori-media-item--modal .memori-modal--panel .memori-spin {
106
+ display: flex;
107
+ height: 100%;
108
+ align-items: center;
109
+ justify-content: center;
110
+ }
111
+
112
+ .memori-media-item--modal a.memori-media-item--link {
113
+ display: flex;
114
+ width: 100%;
115
+ height: 100%;
116
+ align-items: center;
117
+ justify-content: center;
118
+ }
119
+
120
+ .memori-media-item--modal .memori-media-item--figure-caption {
121
+ position: absolute;
122
+ bottom: 0;
123
+ width: 100%;
124
+ backdrop-filter: blur(var(--memori-blur-background, 5px));
125
+ background: rgba(255, 255, 255, 0.5);
126
+ color: #000;
127
+ }
128
+
129
+ .memori-media-item--modal .memori-modal--close button {
130
+ border-color: #fff;
131
+ color: #fff;
132
+ }
@@ -6,6 +6,7 @@ import { prismSyntaxLangs } from '../../helpers/constants';
6
6
  import ModelViewer from '../CustomGLBModelViewer/ModelViewer';
7
7
  import Snippet from '../Snippet/Snippet';
8
8
  import Card from '../ui/Card';
9
+ import Modal from '../ui/Modal';
9
10
  import File from '../icons/File';
10
11
  import FilePdf from '../icons/FilePdf';
11
12
  import FileExcel from '../icons/FileExcel';
@@ -22,20 +23,32 @@ export interface Props {
22
23
  }
23
24
 
24
25
  export const RenderMediaItem = ({
26
+ isChild = false,
25
27
  item,
26
28
  sessionID,
27
29
  tenantID,
28
30
  preview = false,
29
31
  baseURL,
30
32
  apiURL,
33
+ onClick,
31
34
  }: {
35
+ isChild?: boolean;
32
36
  item: Medium;
33
37
  sessionID?: string;
34
38
  tenantID?: string;
35
39
  preview?: boolean;
36
40
  baseURL?: string;
37
41
  apiURL?: string;
42
+ onClick?: (mediumID: string) => void;
38
43
  }) => {
44
+ const url = getResourceUrl({
45
+ resourceURI: item.url,
46
+ sessionID,
47
+ tenantID,
48
+ baseURL,
49
+ apiURL,
50
+ });
51
+
39
52
  switch (item.mimeType) {
40
53
  case 'image/jpeg':
41
54
  case 'image/png':
@@ -44,7 +57,16 @@ export const RenderMediaItem = ({
44
57
  return (
45
58
  <a
46
59
  className="memori-media-item--link"
47
- href={item.url}
60
+ href={url}
61
+ onClick={e => {
62
+ if (isChild) {
63
+ e.preventDefault();
64
+ }
65
+ if (onClick) {
66
+ e.preventDefault();
67
+ onClick(item.mediumID);
68
+ }
69
+ }}
48
70
  target="_blank"
49
71
  rel="noopener noreferrer"
50
72
  title={item.title}
@@ -57,13 +79,7 @@ export const RenderMediaItem = ({
57
79
  {!preview && (
58
80
  <source
59
81
  srcSet={[
60
- getResourceUrl({
61
- resourceURI: item.url,
62
- sessionID,
63
- tenantID,
64
- baseURL,
65
- apiURL,
66
- }),
82
+ url,
67
83
  getResourceUrl({
68
84
  resourceURI: item.content,
69
85
  sessionID,
@@ -97,13 +113,7 @@ export const RenderMediaItem = ({
97
113
  return (
98
114
  <a
99
115
  className="memori-media-item--link"
100
- href={getResourceUrl({
101
- resourceURI: item.url,
102
- sessionID,
103
- tenantID,
104
- baseURL,
105
- apiURL,
106
- })}
116
+ href={url}
107
117
  target="_blank"
108
118
  rel="noopener noreferrer"
109
119
  title={item.title}
@@ -121,13 +131,7 @@ export const RenderMediaItem = ({
121
131
  return (
122
132
  <a
123
133
  className="memori-media-item--link"
124
- href={getResourceUrl({
125
- resourceURI: item.url,
126
- sessionID,
127
- tenantID,
128
- baseURL,
129
- apiURL,
130
- })}
134
+ href={url}
131
135
  target="_blank"
132
136
  rel="noopener noreferrer"
133
137
  title={item.title}
@@ -144,13 +148,7 @@ export const RenderMediaItem = ({
144
148
  return (
145
149
  <a
146
150
  className="memori-media-item--link"
147
- href={getResourceUrl({
148
- resourceURI: item.url,
149
- sessionID,
150
- tenantID,
151
- baseURL,
152
- apiURL,
153
- })}
151
+ href={url}
154
152
  target="_blank"
155
153
  rel="noopener noreferrer"
156
154
  title={item.title}
@@ -169,13 +167,16 @@ export const RenderMediaItem = ({
169
167
  return (
170
168
  <a
171
169
  className="memori-media-item--link"
172
- href={getResourceUrl({
173
- resourceURI: item.url,
174
- sessionID,
175
- tenantID,
176
- baseURL,
177
- apiURL,
178
- })}
170
+ href={url}
171
+ onClick={e => {
172
+ if (isChild) {
173
+ e.preventDefault();
174
+ }
175
+ if (onClick) {
176
+ e.preventDefault();
177
+ onClick(item.mediumID);
178
+ }
179
+ }}
179
180
  target="_blank"
180
181
  rel="noopener noreferrer"
181
182
  title={item.title}
@@ -186,13 +187,7 @@ export const RenderMediaItem = ({
186
187
  <video
187
188
  style={{ width: '100%', height: '100%' }}
188
189
  controls
189
- src={getResourceUrl({
190
- resourceURI: item.url,
191
- sessionID,
192
- tenantID,
193
- baseURL,
194
- apiURL,
195
- })}
190
+ src={url}
196
191
  title={item.title}
197
192
  />
198
193
  }
@@ -207,13 +202,7 @@ export const RenderMediaItem = ({
207
202
  return (
208
203
  <a
209
204
  className="memori-media-item--link"
210
- href={getResourceUrl({
211
- resourceURI: item.url,
212
- sessionID,
213
- tenantID,
214
- baseURL,
215
- apiURL,
216
- })}
205
+ href={url}
217
206
  target="_blank"
218
207
  rel="noopener noreferrer"
219
208
  title={item.title}
@@ -224,13 +213,7 @@ export const RenderMediaItem = ({
224
213
  <audio
225
214
  style={{ width: '100%', height: '100%' }}
226
215
  controls
227
- src={getResourceUrl({
228
- resourceURI: item.url,
229
- sessionID,
230
- tenantID,
231
- baseURL,
232
- apiURL,
233
- })}
216
+ src={url}
234
217
  />
235
218
  }
236
219
  title={item.title}
@@ -241,13 +224,7 @@ export const RenderMediaItem = ({
241
224
  case 'model/gltf-binary':
242
225
  return (
243
226
  <ModelViewer
244
- src={getResourceUrl({
245
- resourceURI: item.url,
246
- sessionID,
247
- tenantID,
248
- baseURL,
249
- apiURL,
250
- })}
227
+ src={url}
251
228
  alt=""
252
229
  poster="data:image/png;base64,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"
253
230
  />
@@ -257,13 +234,7 @@ export const RenderMediaItem = ({
257
234
  return (
258
235
  <a
259
236
  className="memori-media-item--link"
260
- href={getResourceUrl({
261
- resourceURI: item.url,
262
- sessionID,
263
- tenantID,
264
- baseURL,
265
- apiURL,
266
- })}
237
+ href={url}
267
238
  target="_blank"
268
239
  rel="noopener noreferrer"
269
240
  title={item.title}
@@ -287,6 +258,7 @@ const MediaItemWidget: React.FC<Props> = ({
287
258
  apiURL,
288
259
  }: Props) => {
289
260
  const [media, setMedia] = useState(items);
261
+ const [openModalMedium, setOpenModalMedium] = useState<Medium>();
290
262
 
291
263
  const translateMediaCaptions = useCallback(async () => {
292
264
  if (!translateTo) return;
@@ -358,10 +330,14 @@ const MediaItemWidget: React.FC<Props> = ({
358
330
  leaveTo="opacity-0 scale-95"
359
331
  >
360
332
  <RenderMediaItem
333
+ isChild
361
334
  sessionID={sessionID}
362
335
  tenantID={tenantID}
363
336
  baseURL={baseURL}
364
337
  apiURL={apiURL}
338
+ onClick={mediumID => {
339
+ setOpenModalMedium(media.find(m => m.mediumID === mediumID));
340
+ }}
365
341
  item={{
366
342
  ...item,
367
343
  title: item.title,
@@ -401,6 +377,31 @@ const MediaItemWidget: React.FC<Props> = ({
401
377
  dangerouslySetInnerHTML={{ __html: medium.content || '' }}
402
378
  ></style>
403
379
  ))}
380
+
381
+ {openModalMedium?.mediumID && (
382
+ <Modal
383
+ width="100%"
384
+ widthMd="100%"
385
+ className="memori-media-item--modal"
386
+ open={!!openModalMedium}
387
+ onClose={() => setOpenModalMedium(undefined)}
388
+ footer={null}
389
+ >
390
+ <RenderMediaItem
391
+ isChild
392
+ sessionID={sessionID}
393
+ tenantID={tenantID}
394
+ baseURL={baseURL}
395
+ apiURL={apiURL}
396
+ item={{
397
+ ...openModalMedium,
398
+ title: openModalMedium.title,
399
+ url: openModalMedium.url,
400
+ content: openModalMedium.content,
401
+ }}
402
+ />
403
+ </Modal>
404
+ )}
404
405
  </Transition>
405
406
  );
406
407
  };
@@ -119,3 +119,12 @@
119
119
  .delay-1000 {
120
120
  transition-delay: 1000ms;
121
121
  }
122
+
123
+ .memori-hints--show-more {
124
+ text-align: center;
125
+ }
126
+
127
+ .memori-hints--show-more-button {
128
+ border-radius: 5px;
129
+ background: none;
130
+ }
@@ -111,6 +111,14 @@ Hints.args = {
111
111
  hints,
112
112
  };
113
113
 
114
+ export const LongListHints = Template.bind({});
115
+ LongListHints.args = {
116
+ hints: Array.from({ length: 12 }, (_, i) => ({
117
+ text: `Hint ${i + 1}`,
118
+ originalText: `Hint ${i + 1}`,
119
+ })),
120
+ };
121
+
114
122
  export const Combined = Template.bind({});
115
123
  Combined.args = {
116
124
  media,
@@ -8,6 +8,7 @@ import LinkItemWidget from './LinkItemWidget';
8
8
  import MediaItemWidget from './MediaItemWidget';
9
9
  import { Transition } from '@headlessui/react';
10
10
  import cx from 'classnames';
11
+ import { useTranslation } from 'react-i18next';
11
12
 
12
13
  export interface Props {
13
14
  hints?: TranslatedHint[];
@@ -30,7 +31,10 @@ const MediaWidget: React.FC<Props> = ({
30
31
  apiUrl,
31
32
  translateTo,
32
33
  }: Props) => {
34
+ const { t } = useTranslation();
33
35
  const [showHints, setShowHints] = useState(true);
36
+ const [hintsPagination, setHintsPagination] = useState(6);
37
+
34
38
  useEffect(() => {
35
39
  setShowHints(true);
36
40
  }, [hints]);
@@ -48,36 +52,49 @@ const MediaWidget: React.FC<Props> = ({
48
52
  )}
49
53
  {links?.length > 0 && <LinkItemWidget items={links} baseUrl={baseUrl} />}
50
54
  {hints?.length > 0 && showHints && (
51
- <Transition appear show as="ul" className="memori-media--hints">
52
- {hints.map((item, index) => (
53
- <Transition.Child
54
- as="li"
55
- key={item.text + index}
56
- enter="ease-out duration-500"
57
- enterFrom="opacity-0 translate-y-1"
58
- enterTo="opacity-1 translate-y-0"
59
- leave="ease-in duration-300"
60
- leaveFrom="opacity-1"
61
- leaveTo="opacity-0"
62
- >
63
- <Button
55
+ <>
56
+ <Transition appear show as="ul" className="memori-media--hints">
57
+ {hints.slice(0, hintsPagination).map((item, index) => (
58
+ <Transition.Child
59
+ as="li"
64
60
  key={item.text + index}
65
- className={cx('memori-media--hint')}
66
- primary
67
- onClick={() => {
68
- simulateUserPrompt(item.originalText, item.text);
69
- setShowHints(false);
70
- }}
71
- onTouchEnd={() => {
72
- simulateUserPrompt(item.originalText, item.text);
73
- setShowHints(false);
74
- }}
61
+ enter="ease-out duration-500"
62
+ enterFrom="opacity-0 translate-y-1"
63
+ enterTo="opacity-1 translate-y-0"
64
+ leave="ease-in duration-300"
65
+ leaveFrom="opacity-1"
66
+ leaveTo="opacity-0"
67
+ >
68
+ <Button
69
+ key={item.text + index}
70
+ className={cx('memori-media--hint')}
71
+ primary
72
+ onClick={() => {
73
+ simulateUserPrompt(item.originalText, item.text);
74
+ setShowHints(false);
75
+ }}
76
+ onTouchEnd={() => {
77
+ simulateUserPrompt(item.originalText, item.text);
78
+ setShowHints(false);
79
+ }}
80
+ >
81
+ {item.text}
82
+ </Button>
83
+ </Transition.Child>
84
+ ))}
85
+ </Transition>
86
+ {hints.length > hintsPagination && (
87
+ <div className="memori-hints--show-more">
88
+ <Button
89
+ className="memori-hints--show-more-button"
90
+ id="showMoreHints"
91
+ onClick={() => setHintsPagination(hintsPagination + 6)}
75
92
  >
76
- {item.text}
93
+ {t('expand') || 'Expand'}
77
94
  </Button>
78
- </Transition.Child>
79
- ))}
80
- </Transition>
95
+ </div>
96
+ )}
97
+ </>
81
98
  )}
82
99
  </div>
83
100
  );
@@ -241,7 +241,7 @@ exports[`renders MediaItemWidget unchanged with img and sessionID 1`] = `
241
241
  >
242
242
  <a
243
243
  class="memori-media-item--link"
244
- href="https://api.lorem.space/image/game?w=150&h=220&hash=8B7BCDC2"
244
+ href="https://api.lorem.space/image/game?w=150&h=220&hash=8B7BCDC2/131165be-9d1a-42fb-a3ce-e8f86d40c88f"
245
245
  rel="noopener noreferrer"
246
246
  target="_blank"
247
247
  title="Game Cover"
@@ -125,7 +125,7 @@
125
125
  .memori--powered-by {
126
126
  position: absolute;
127
127
  z-index: 1000;
128
- bottom: 1rem;
128
+ bottom: 0;
129
129
  left: 0;
130
130
  display: inline-flex;
131
131
  flex-wrap: wrap;
@@ -19,6 +19,11 @@ const meta: Meta = {
19
19
  type: 'boolean',
20
20
  },
21
21
  },
22
+ showSettings: {
23
+ control: {
24
+ type: 'boolean',
25
+ },
26
+ },
22
27
  },
23
28
  parameters: {
24
29
  controls: { expanded: true },
@@ -96,6 +101,13 @@ ShowShare.args = {
96
101
  showShare: true,
97
102
  };
98
103
 
104
+ export const ShowSettings = Template.bind({});
105
+ ShowSettings.args = {
106
+ memori,
107
+ tenant,
108
+ showSettings: true,
109
+ };
110
+
99
111
  export const WithAzureSpeechKey = Template.bind({});
100
112
  WithAzureSpeechKey.args = {
101
113
  memori,