@memori.ai/memori-react 7.4.6 → 7.5.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 (153) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +1 -1
  3. package/dist/components/Avatar/Avatar.d.ts +1 -0
  4. package/dist/components/Avatar/Avatar.js +64 -60
  5. package/dist/components/Avatar/Avatar.js.map +1 -1
  6. package/dist/components/Avatar/AvatarView/components/controls.d.ts +23 -0
  7. package/dist/components/Avatar/AvatarView/components/controls.js +55 -0
  8. package/dist/components/Avatar/AvatarView/components/controls.js.map +1 -0
  9. package/dist/components/Avatar/AvatarView/components/fullbodyAvatar.d.ts +18 -0
  10. package/dist/components/Avatar/AvatarView/components/fullbodyAvatar.js +60 -0
  11. package/dist/components/Avatar/AvatarView/components/fullbodyAvatar.js.map +1 -0
  12. package/dist/components/Avatar/AvatarView/components/halfbodyAvatar.d.ts +9 -0
  13. package/dist/components/Avatar/AvatarView/components/halfbodyAvatar.js +39 -0
  14. package/dist/components/Avatar/AvatarView/components/halfbodyAvatar.js.map +1 -0
  15. package/dist/components/Avatar/AvatarView/components/loader.d.ts +5 -0
  16. package/dist/components/Avatar/AvatarView/components/loader.js +12 -0
  17. package/dist/components/Avatar/AvatarView/components/loader.js.map +1 -0
  18. package/dist/components/Avatar/AvatarView/index.d.ts +18 -0
  19. package/dist/components/Avatar/AvatarView/index.js +109 -0
  20. package/dist/components/Avatar/AvatarView/index.js.map +1 -0
  21. package/dist/components/Avatar/AvatarView/utils/useEyeBlink.d.ts +2 -0
  22. package/dist/components/Avatar/AvatarView/utils/useEyeBlink.js +47 -0
  23. package/dist/components/Avatar/AvatarView/utils/useEyeBlink.js.map +1 -0
  24. package/dist/components/Avatar/AvatarView/utils/useHeadMovement.d.ts +2 -0
  25. package/dist/components/Avatar/AvatarView/utils/useHeadMovement.js +53 -0
  26. package/dist/components/Avatar/AvatarView/utils/useHeadMovement.js.map +1 -0
  27. package/dist/components/Avatar/AvatarView/utils/useLoadingMorphAnim.d.ts +2 -0
  28. package/dist/components/Avatar/AvatarView/utils/useLoadingMorphAnim.js +34 -0
  29. package/dist/components/Avatar/AvatarView/utils/useLoadingMorphAnim.js.map +1 -0
  30. package/dist/components/Avatar/AvatarView/utils/useMouthSpeaking.d.ts +2 -0
  31. package/dist/components/Avatar/AvatarView/utils/useMouthSpeaking.js +68 -0
  32. package/dist/components/Avatar/AvatarView/utils/useMouthSpeaking.js.map +1 -0
  33. package/dist/components/Avatar/AvatarView/utils/useSmile.d.ts +2 -0
  34. package/dist/components/Avatar/AvatarView/utils/useSmile.js +28 -0
  35. package/dist/components/Avatar/AvatarView/utils/useSmile.js.map +1 -0
  36. package/dist/components/Avatar/AvatarView/utils/utils.d.ts +13 -0
  37. package/dist/components/Avatar/AvatarView/utils/utils.js +42 -0
  38. package/dist/components/Avatar/AvatarView/utils/utils.js.map +1 -0
  39. package/dist/components/MemoriWidget/MemoriWidget.js +5 -0
  40. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  41. package/dist/components/StartPanel/StartPanel.js +3 -2
  42. package/dist/components/StartPanel/StartPanel.js.map +1 -1
  43. package/dist/helpers/constants.d.ts +1 -0
  44. package/dist/helpers/constants.js +2 -1
  45. package/dist/helpers/constants.js.map +1 -1
  46. package/dist/helpers/error.js +5 -0
  47. package/dist/helpers/error.js.map +1 -1
  48. package/dist/i18n.js +13 -1
  49. package/dist/i18n.js.map +1 -1
  50. package/dist/index.d.ts +1 -1
  51. package/dist/index.js +12 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/locales/de.json +426 -0
  54. package/dist/locales/en.json +5 -0
  55. package/dist/locales/es.json +426 -0
  56. package/dist/locales/fr.json +426 -0
  57. package/dist/locales/it.json +5 -0
  58. package/esm/components/Avatar/Avatar.d.ts +1 -0
  59. package/esm/components/Avatar/Avatar.js +66 -62
  60. package/esm/components/Avatar/Avatar.js.map +1 -1
  61. package/esm/components/Avatar/AvatarView/components/controls.d.ts +23 -0
  62. package/esm/components/Avatar/AvatarView/components/controls.js +52 -0
  63. package/esm/components/Avatar/AvatarView/components/controls.js.map +1 -0
  64. package/esm/components/Avatar/AvatarView/components/fullbodyAvatar.d.ts +18 -0
  65. package/esm/components/Avatar/AvatarView/components/fullbodyAvatar.js +56 -0
  66. package/esm/components/Avatar/AvatarView/components/fullbodyAvatar.js.map +1 -0
  67. package/esm/components/Avatar/AvatarView/components/halfbodyAvatar.d.ts +9 -0
  68. package/esm/components/Avatar/AvatarView/components/halfbodyAvatar.js +35 -0
  69. package/esm/components/Avatar/AvatarView/components/halfbodyAvatar.js.map +1 -0
  70. package/esm/components/Avatar/AvatarView/components/loader.d.ts +5 -0
  71. package/esm/components/Avatar/AvatarView/components/loader.js +9 -0
  72. package/esm/components/Avatar/AvatarView/components/loader.js.map +1 -0
  73. package/esm/components/Avatar/AvatarView/index.d.ts +18 -0
  74. package/esm/components/Avatar/AvatarView/index.js +105 -0
  75. package/esm/components/Avatar/AvatarView/index.js.map +1 -0
  76. package/esm/components/Avatar/AvatarView/utils/useEyeBlink.d.ts +2 -0
  77. package/esm/components/Avatar/AvatarView/utils/useEyeBlink.js +44 -0
  78. package/esm/components/Avatar/AvatarView/utils/useEyeBlink.js.map +1 -0
  79. package/esm/components/Avatar/AvatarView/utils/useHeadMovement.d.ts +2 -0
  80. package/esm/components/Avatar/AvatarView/utils/useHeadMovement.js +50 -0
  81. package/esm/components/Avatar/AvatarView/utils/useHeadMovement.js.map +1 -0
  82. package/esm/components/Avatar/AvatarView/utils/useLoadingMorphAnim.d.ts +2 -0
  83. package/esm/components/Avatar/AvatarView/utils/useLoadingMorphAnim.js +31 -0
  84. package/esm/components/Avatar/AvatarView/utils/useLoadingMorphAnim.js.map +1 -0
  85. package/esm/components/Avatar/AvatarView/utils/useMouthSpeaking.d.ts +2 -0
  86. package/esm/components/Avatar/AvatarView/utils/useMouthSpeaking.js +65 -0
  87. package/esm/components/Avatar/AvatarView/utils/useMouthSpeaking.js.map +1 -0
  88. package/esm/components/Avatar/AvatarView/utils/useSmile.d.ts +2 -0
  89. package/esm/components/Avatar/AvatarView/utils/useSmile.js +25 -0
  90. package/esm/components/Avatar/AvatarView/utils/useSmile.js.map +1 -0
  91. package/esm/components/Avatar/AvatarView/utils/utils.d.ts +13 -0
  92. package/esm/components/Avatar/AvatarView/utils/utils.js +33 -0
  93. package/esm/components/Avatar/AvatarView/utils/utils.js.map +1 -0
  94. package/esm/components/MemoriWidget/MemoriWidget.js +6 -1
  95. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  96. package/esm/components/StartPanel/StartPanel.js +3 -2
  97. package/esm/components/StartPanel/StartPanel.js.map +1 -1
  98. package/esm/helpers/constants.d.ts +1 -0
  99. package/esm/helpers/constants.js +1 -0
  100. package/esm/helpers/constants.js.map +1 -1
  101. package/esm/helpers/error.js +5 -0
  102. package/esm/helpers/error.js.map +1 -1
  103. package/esm/i18n.js +13 -1
  104. package/esm/i18n.js.map +1 -1
  105. package/esm/index.d.ts +1 -1
  106. package/esm/index.js +12 -1
  107. package/esm/index.js.map +1 -1
  108. package/esm/locales/de.json +426 -0
  109. package/esm/locales/en.json +5 -0
  110. package/esm/locales/es.json +426 -0
  111. package/esm/locales/fr.json +426 -0
  112. package/esm/locales/it.json +5 -0
  113. package/package.json +2 -1
  114. package/src/components/Avatar/Avatar.tsx +149 -144
  115. package/src/components/{AvatarView → Avatar/AvatarView}/AvatarView.stories.tsx +9 -2
  116. package/src/components/Avatar/AvatarView/components/controls.tsx +94 -0
  117. package/src/components/Avatar/AvatarView/components/fullbodyAvatar.tsx +120 -0
  118. package/src/components/Avatar/AvatarView/components/halfbodyAvatar.tsx +69 -0
  119. package/src/components/{AvatarView → Avatar/AvatarView}/components/loader.tsx +1 -1
  120. package/src/components/Avatar/AvatarView/index.tsx +251 -0
  121. package/src/components/Avatar/AvatarView/utils/useEyeBlink.ts +59 -0
  122. package/src/components/Avatar/AvatarView/utils/useMouthSpeaking.ts +87 -0
  123. package/src/components/Avatar/AvatarView/utils/useSmile.ts +39 -0
  124. package/src/components/Avatar/__snapshots__/Avatar.test.tsx.snap +1 -1
  125. package/src/components/MemoriWidget/MemoriWidget.tsx +11 -1
  126. package/src/components/StartPanel/StartPanel.tsx +3 -2
  127. package/src/components/layouts/Chat.test.tsx +12 -9
  128. package/src/components/layouts/FullPage.test.tsx +12 -9
  129. package/src/components/layouts/Totem.test.tsx +12 -9
  130. package/src/components/layouts/WebsiteAssistant.test.tsx +12 -9
  131. package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +13 -8
  132. package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +14 -9
  133. package/src/components/layouts/__snapshots__/Totem.test.tsx.snap +14 -9
  134. package/src/components/layouts/__snapshots__/WebsiteAssistant.test.tsx.snap +6 -1
  135. package/src/helpers/constants.ts +2 -0
  136. package/src/helpers/error.ts +5 -0
  137. package/src/i18n.ts +13 -1
  138. package/src/index.stories.tsx +29 -0
  139. package/src/index.tsx +14 -3
  140. package/src/locales/de.json +454 -0
  141. package/src/locales/en.json +5 -0
  142. package/src/locales/es.json +426 -0
  143. package/src/locales/fr.json +426 -0
  144. package/src/locales/it.json +5 -0
  145. package/src/components/AvatarView/components/avatar.tsx +0 -57
  146. package/src/components/AvatarView/components/fullbodyAvatar.tsx +0 -99
  147. package/src/components/AvatarView/index.tsx +0 -101
  148. package/src/components/AvatarView/utils/useEyeBlink.ts +0 -48
  149. package/src/components/AvatarView/utils/useMouthSpeaking.ts +0 -70
  150. package/src/components/AvatarView/utils/useSmile.ts +0 -31
  151. /package/src/components/{AvatarView → Avatar/AvatarView}/utils/useHeadMovement.ts +0 -0
  152. /package/src/components/{AvatarView → Avatar/AvatarView}/utils/useLoadingMorphAnim.ts +0 -0
  153. /package/src/components/{AvatarView → Avatar/AvatarView}/utils/utils.ts +0 -0
@@ -1,101 +0,0 @@
1
- import { CSSProperties } from 'react';
2
- import React, { Suspense } from 'react';
3
- import Avatar from './components/avatar';
4
- import FullbodyAvatar, { AvatarProps } from './components/fullbodyAvatar';
5
- import Loader from './components/loader';
6
- import { Canvas } from '@react-three/fiber';
7
- import { OrbitControls, SpotLight, Environment } from '@react-three/drei';
8
- import { isAndroid, isiOS } from '../../helpers/utils';
9
-
10
- export interface Props {
11
- url: string;
12
- sex: 'MALE' | 'FEMALE';
13
- fallbackImg?: string;
14
- eyeBlink?: boolean;
15
- headMovement?: boolean;
16
- rotateAvatar?: boolean;
17
- speaking?: boolean;
18
- style?: CSSProperties;
19
- fallback?: React.ReactNode;
20
- halfBody?: boolean;
21
- animation?: AvatarProps['animation'];
22
- }
23
-
24
- const defaultStylesHalfBody = {
25
- width: '250px',
26
- height: '250px',
27
- backgroundColor: 'white',
28
- borderRadius: '100%',
29
- };
30
-
31
- const defaultStylesFullBody = {
32
- width: '500px',
33
- height: '500px',
34
- backgroundColor: 'white',
35
- };
36
-
37
- export default function AvatarView({
38
- url,
39
- sex,
40
- fallbackImg,
41
- style,
42
- rotateAvatar,
43
- eyeBlink,
44
- headMovement,
45
- speaking,
46
- fallback,
47
- halfBody = true,
48
- animation,
49
- }: Props) {
50
- const defaultStyles = halfBody
51
- ? defaultStylesHalfBody
52
- : defaultStylesFullBody;
53
-
54
- return (
55
- <Canvas
56
- style={style || defaultStyles}
57
- camera={
58
- halfBody
59
- ? {
60
- fov: 40,
61
- position: [0, 0, 0.6],
62
- }
63
- : { fov: 40, position: [0, 0.0000175, 3] }
64
- }
65
- >
66
- <Suspense fallback={fallback || <Loader fallbackImg={fallbackImg} />}>
67
- {isAndroid() || isiOS() ? (
68
- <SpotLight
69
- distance={100}
70
- position={[-0.3, 0.2, 1.25]}
71
- angle={Math.PI / 2}
72
- attenuation={5}
73
- anglePower={5}
74
- />
75
- ) : (
76
- <Environment files="https://raw.githack.com/pmndrs/drei-assets/456060a26bbeb8fdf79326f224b6d99b8bcce736/hdri/venice_sunset_1k.hdr" />
77
- )}
78
- {rotateAvatar && halfBody && (
79
- <OrbitControls enablePan={false} enableZoom={false} />
80
- )}
81
- {halfBody ? (
82
- <Avatar
83
- url={url}
84
- eyeBlink={eyeBlink}
85
- headMovement={headMovement}
86
- speaking={speaking}
87
- />
88
- ) : (
89
- <FullbodyAvatar
90
- url={url}
91
- sex={sex}
92
- eyeBlink={eyeBlink}
93
- headMovement={headMovement}
94
- speaking={speaking}
95
- animation={animation}
96
- />
97
- )}
98
- </Suspense>
99
- </Canvas>
100
- );
101
- }
@@ -1,48 +0,0 @@
1
- import { SkinnedMesh } from 'three';
2
- import { Nodes } from './utils';
3
- import { useEffect } from 'react';
4
- import { useFrame } from '@react-three/fiber';
5
-
6
- let blinkTime: number = 999;
7
- let timeout: NodeJS.Timeout;
8
-
9
- let headMesh: SkinnedMesh;
10
- let morphIndex: number = 0;
11
-
12
- const setNextBlink = () => {
13
- blinkTime = 0;
14
- timeout = setTimeout(setNextBlink, Math.random() * 5000 + 2000);
15
- };
16
-
17
- export default function useEyeBlink(
18
- enabled: boolean | undefined,
19
- nodes: Nodes
20
- ) {
21
- useEffect(() => {
22
- if (!enabled) return;
23
-
24
- headMesh = (nodes.Wolf3D_Head || nodes.Wolf3D_Avatar) as SkinnedMesh;
25
-
26
- if (headMesh?.morphTargetDictionary && headMesh?.morphTargetInfluences) {
27
- morphIndex = headMesh.morphTargetDictionary.eyesClosed;
28
- }
29
-
30
- timeout = setTimeout(setNextBlink, 3000);
31
-
32
- return () => {
33
- clearTimeout(timeout);
34
- };
35
- }, [nodes, enabled]);
36
-
37
- useFrame((_, delta) => {
38
- if (!enabled) return;
39
-
40
- if (blinkTime < 2 && headMesh?.morphTargetInfluences) {
41
- let value = Math.abs(Math.sin((blinkTime * Math.PI) / 2));
42
- blinkTime += delta * 10;
43
- headMesh.morphTargetInfluences[morphIndex] = value;
44
- } else if (headMesh?.morphTargetInfluences) {
45
- headMesh.morphTargetInfluences[morphIndex] = 0;
46
- }
47
- });
48
- }
@@ -1,70 +0,0 @@
1
- import { Nodes } from './utils';
2
- import { SkinnedMesh } from 'three';
3
- import { useEffect } from 'react';
4
- import { useFrame } from '@react-three/fiber';
5
-
6
- let mouthMoveTime: number = 999;
7
- let timeout: NodeJS.Timeout;
8
-
9
- let mouthMesh: SkinnedMesh;
10
- let mouthOpenMorphIndex: number = 0;
11
- let mouthSmileMorphIndex: number = 0;
12
- let mouthFunnerMorphIndex: number = 0;
13
- let mouthPuckerMorphIndex: number = 0;
14
-
15
- const setNextMouthOpen = () => {
16
- mouthMoveTime = 0;
17
- timeout = setTimeout(setNextMouthOpen, Math.random() * 500);
18
- };
19
-
20
- // https://learn.microsoft.com/it-it/azure/cognitive-services/speech-service/how-to-speech-synthesis-viseme?tabs=visemeid&pivots=programming-language-javascript
21
-
22
- export default function useMouthSpeaking(
23
- speaking: boolean | undefined,
24
- nodes: Nodes
25
- ) {
26
- useEffect(() => {
27
- if (!speaking) return;
28
-
29
- mouthMesh = (nodes.Wolf3D_Head ||
30
- nodes.Wolf3D_Avatar ||
31
- nodes.Wolf3D_Avatar001) as SkinnedMesh;
32
-
33
- if (mouthMesh?.morphTargetDictionary && mouthMesh?.morphTargetInfluences) {
34
- mouthOpenMorphIndex = mouthMesh.morphTargetDictionary.mouthOpen;
35
- mouthSmileMorphIndex = mouthMesh.morphTargetDictionary.mouthSmile;
36
- mouthFunnerMorphIndex = mouthMesh.morphTargetDictionary.mouthFunner;
37
- mouthPuckerMorphIndex = mouthMesh.morphTargetDictionary.mouthPucker;
38
- }
39
-
40
- timeout = setTimeout(setNextMouthOpen, 200);
41
- // timeout = setTimeout(visemeDD = 0.4, start - audioOffset);
42
-
43
- return () => {
44
- clearTimeout(timeout);
45
- };
46
- }, [nodes, speaking]);
47
-
48
- useFrame((_, delta) => {
49
- if (!speaking) {
50
- if (mouthMesh?.morphTargetInfluences) {
51
- mouthMesh.morphTargetInfluences[mouthOpenMorphIndex] = 0;
52
- mouthMesh.morphTargetInfluences[mouthSmileMorphIndex] = 0;
53
- mouthMesh.morphTargetInfluences[mouthFunnerMorphIndex] = 0;
54
- mouthMesh.morphTargetInfluences[mouthPuckerMorphIndex] = 0;
55
- }
56
- } else if (mouthMoveTime < 2 && mouthMesh?.morphTargetInfluences) {
57
- let value = Math.abs(Math.sin((mouthMoveTime * Math.PI) / 2));
58
- mouthMoveTime += delta * 10;
59
- mouthMesh.morphTargetInfluences[mouthOpenMorphIndex] = value / 3;
60
- mouthMesh.morphTargetInfluences[mouthSmileMorphIndex] = value / 10;
61
- mouthMesh.morphTargetInfluences[mouthFunnerMorphIndex] = value / 7;
62
- mouthMesh.morphTargetInfluences[mouthPuckerMorphIndex] = value / 5;
63
- } else if (mouthMesh?.morphTargetInfluences) {
64
- mouthMesh.morphTargetInfluences[mouthOpenMorphIndex] = 0;
65
- mouthMesh.morphTargetInfluences[mouthSmileMorphIndex] = 0;
66
- mouthMesh.morphTargetInfluences[mouthFunnerMorphIndex] = 0;
67
- mouthMesh.morphTargetInfluences[mouthPuckerMorphIndex] = 0;
68
- }
69
- });
70
- }
@@ -1,31 +0,0 @@
1
- import { Nodes } from './utils';
2
- import { SkinnedMesh } from 'three';
3
- import { useEffect } from 'react';
4
- import { useFrame } from '@react-three/fiber';
5
-
6
- let headMesh: SkinnedMesh;
7
- let mouthSmileMorphIndex: number = 0;
8
-
9
- export default function useSmile(smiling: boolean | undefined, nodes: Nodes) {
10
- useEffect(() => {
11
- if (!smiling) return;
12
-
13
- headMesh = (nodes.Wolf3D_Head ||
14
- nodes.Wolf3D_Avatar ||
15
- nodes.Wolf3D_Avatar001) as SkinnedMesh;
16
-
17
- if (headMesh?.morphTargetDictionary && headMesh?.morphTargetInfluences) {
18
- mouthSmileMorphIndex = headMesh.morphTargetDictionary.mouthSmile;
19
- }
20
- }, [nodes, smiling]);
21
-
22
- useFrame(() => {
23
- if (!smiling) {
24
- if (headMesh?.morphTargetInfluences) {
25
- headMesh.morphTargetInfluences[mouthSmileMorphIndex] = 0;
26
- }
27
- } else if (headMesh?.morphTargetInfluences) {
28
- headMesh.morphTargetInfluences[mouthSmileMorphIndex] = 1 / 3;
29
- }
30
- });
31
- }