@memori.ai/memori-react 7.5.0 → 7.6.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.
- package/CHANGELOG.md +52 -0
- package/README.md +10 -2
- package/dist/components/Avatar/Avatar.d.ts +2 -0
- package/dist/components/Avatar/Avatar.js +11 -6
- package/dist/components/Avatar/Avatar.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/avatarComponent.d.ts +20 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js +107 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js.map +1 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/controls.d.ts +26 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/controls.js +59 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/controls.js.map +1 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.d.ts +30 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.js +148 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.js.map +1 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.d.ts +15 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js +77 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js.map +1 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/loader.d.ts +5 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/loader.js +12 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/loader.js.map +1 -0
- package/dist/components/Avatar/AvatarView/components/fullbodyAvatar.d.ts +2 -1
- package/dist/components/Avatar/AvatarView/components/fullbodyAvatar.js +3 -2
- package/dist/components/Avatar/AvatarView/components/fullbodyAvatar.js.map +1 -1
- package/dist/components/Avatar/AvatarView/index.d.ts +6 -1
- package/dist/components/Avatar/AvatarView/index.js +15 -83
- package/dist/components/Avatar/AvatarView/index.js.map +1 -1
- package/dist/components/Avatar/AvatarView/utils/useEyeBlink.d.ts +16 -2
- package/dist/components/Avatar/AvatarView/utils/useEyeBlink.js +62 -38
- package/dist/components/Avatar/AvatarView/utils/useEyeBlink.js.map +1 -1
- package/dist/components/Avatar/AvatarView/utils/useMouthAnimation.d.ts +16 -0
- package/dist/components/Avatar/AvatarView/utils/useMouthAnimation.js +59 -0
- package/dist/components/Avatar/AvatarView/utils/useMouthAnimation.js.map +1 -0
- package/dist/components/Avatar/AvatarView/utils/useSmile.js +1 -1
- package/dist/components/Avatar/AvatarView/utils/useSmile.js.map +1 -1
- package/dist/components/ChatBubble/ChatBubble.js +2 -3
- package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
- package/dist/components/CompletionProviderStatus/CompletionProviderStatus.d.ts +1 -1
- package/dist/components/CompletionProviderStatus/CompletionProviderStatus.js +24 -3
- package/dist/components/CompletionProviderStatus/CompletionProviderStatus.js.map +1 -1
- package/dist/components/MemoriWidget/MemoriWidget.d.ts +1 -1
- package/dist/components/MemoriWidget/MemoriWidget.js +25 -3
- package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/dist/components/StartPanel/StartPanel.js +1 -1
- package/dist/components/StartPanel/StartPanel.js.map +1 -1
- package/dist/components/layouts/HiddenChat.d.ts +4 -0
- package/dist/components/layouts/HiddenChat.js +51 -0
- package/dist/components/layouts/HiddenChat.js.map +1 -0
- package/dist/components/layouts/ZoomedFullBody.d.ts +4 -0
- package/dist/components/layouts/ZoomedFullBody.js +8 -0
- package/dist/components/layouts/ZoomedFullBody.js.map +1 -0
- package/dist/components/layouts/hidden-chat.css +184 -0
- package/dist/context/visemeContext.d.ts +27 -0
- package/dist/context/visemeContext.js +221 -0
- package/dist/context/visemeContext.js.map +1 -0
- package/dist/helpers/utils.d.ts +7 -0
- package/dist/helpers/utils.js +51 -1
- package/dist/helpers/utils.js.map +1 -1
- package/dist/index.js +20 -16
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -0
- package/esm/components/Avatar/Avatar.d.ts +2 -0
- package/esm/components/Avatar/Avatar.js +11 -6
- package/esm/components/Avatar/Avatar.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/avatarComponent.d.ts +20 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js +102 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js.map +1 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/controls.d.ts +26 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/controls.js +56 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/controls.js.map +1 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.d.ts +30 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.js +145 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.js.map +1 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.d.ts +15 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js +73 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js.map +1 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/loader.d.ts +5 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/loader.js +9 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/loader.js.map +1 -0
- package/esm/components/Avatar/AvatarView/components/fullbodyAvatar.d.ts +2 -1
- package/esm/components/Avatar/AvatarView/components/fullbodyAvatar.js +3 -2
- package/esm/components/Avatar/AvatarView/components/fullbodyAvatar.js.map +1 -1
- package/esm/components/Avatar/AvatarView/index.d.ts +6 -1
- package/esm/components/Avatar/AvatarView/index.js +16 -84
- package/esm/components/Avatar/AvatarView/index.js.map +1 -1
- package/esm/components/Avatar/AvatarView/utils/useEyeBlink.d.ts +16 -2
- package/esm/components/Avatar/AvatarView/utils/useEyeBlink.js +61 -38
- package/esm/components/Avatar/AvatarView/utils/useEyeBlink.js.map +1 -1
- package/esm/components/Avatar/AvatarView/utils/useMouthAnimation.d.ts +16 -0
- package/esm/components/Avatar/AvatarView/utils/useMouthAnimation.js +55 -0
- package/esm/components/Avatar/AvatarView/utils/useMouthAnimation.js.map +1 -0
- package/esm/components/Avatar/AvatarView/utils/useSmile.js +1 -1
- package/esm/components/Avatar/AvatarView/utils/useSmile.js.map +1 -1
- package/esm/components/ChatBubble/ChatBubble.js +2 -3
- package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
- package/esm/components/CompletionProviderStatus/CompletionProviderStatus.d.ts +1 -1
- package/esm/components/CompletionProviderStatus/CompletionProviderStatus.js +24 -3
- package/esm/components/CompletionProviderStatus/CompletionProviderStatus.js.map +1 -1
- package/esm/components/MemoriWidget/MemoriWidget.d.ts +1 -1
- package/esm/components/MemoriWidget/MemoriWidget.js +26 -4
- package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/esm/components/StartPanel/StartPanel.js +1 -1
- package/esm/components/StartPanel/StartPanel.js.map +1 -1
- package/esm/components/layouts/HiddenChat.d.ts +4 -0
- package/esm/components/layouts/HiddenChat.js +48 -0
- package/esm/components/layouts/HiddenChat.js.map +1 -0
- package/esm/components/layouts/ZoomedFullBody.d.ts +4 -0
- package/esm/components/layouts/ZoomedFullBody.js +5 -0
- package/esm/components/layouts/ZoomedFullBody.js.map +1 -0
- package/esm/components/layouts/hidden-chat.css +184 -0
- package/esm/context/visemeContext.d.ts +27 -0
- package/esm/context/visemeContext.js +216 -0
- package/esm/context/visemeContext.js.map +1 -0
- package/esm/helpers/utils.d.ts +7 -0
- package/esm/helpers/utils.js +45 -0
- package/esm/helpers/utils.js.map +1 -1
- package/esm/index.js +20 -16
- package/esm/index.js.map +1 -1
- package/esm/styles.css +1 -0
- package/package.json +2 -2
- package/src/components/Avatar/Avatar.test.tsx +28 -20
- package/src/components/Avatar/Avatar.tsx +19 -5
- package/src/components/Avatar/AvatarView/AvatarComponent/avatarComponent.tsx +222 -0
- package/src/components/Avatar/AvatarView/{components → AvatarComponent/components}/controls.tsx +16 -10
- package/src/components/Avatar/AvatarView/AvatarComponent/components/fullbodyAvatar.tsx +234 -0
- package/src/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.tsx +123 -0
- package/src/components/Avatar/AvatarView/{components → AvatarComponent/components}/loader.tsx +1 -1
- package/src/components/Avatar/AvatarView/AvatarView.stories.tsx +47 -8
- package/src/components/Avatar/AvatarView/index.tsx +47 -174
- package/src/components/Avatar/AvatarView/utils/useEyeBlink.ts +89 -48
- package/src/components/Avatar/AvatarView/utils/useMouthAnimation.ts +93 -0
- package/src/components/Avatar/AvatarView/utils/useSmile.ts +1 -1
- package/src/components/ChatBubble/ChatBubble.tsx +3 -4
- package/src/components/CompletionProviderStatus/CompletionProviderStatus.tsx +33 -3
- package/src/components/CompletionProviderStatus/__snapshots__/CompletionProviderStatus.test.tsx.snap +18 -0
- package/src/components/MemoriWidget/MemoriWidget.tsx +60 -5
- package/src/components/StartPanel/StartPanel.tsx +1 -1
- package/src/components/layouts/Chat.test.tsx +7 -5
- package/src/components/layouts/FullPage.test.tsx +11 -8
- package/src/components/layouts/HiddenChat.test.tsx +37 -0
- package/src/components/layouts/HiddenChat.tsx +108 -0
- package/src/components/layouts/Totem.test.tsx +6 -4
- package/src/components/layouts/WebsiteAssistant.test.tsx +7 -5
- package/src/components/layouts/ZoomedFullBody.test.tsx +37 -0
- package/src/components/layouts/ZoomedFullBody.tsx +55 -0
- package/src/components/layouts/__snapshots__/HiddenChat.test.tsx.snap +210 -0
- package/src/components/layouts/__snapshots__/ZoomedFullBody.test.tsx.snap +444 -0
- package/src/components/layouts/hidden-chat.css +184 -0
- package/src/components/layouts/layouts.stories.tsx +135 -19
- package/src/context/visemeContext.tsx +328 -0
- package/src/helpers/utils.test.ts +18 -0
- package/src/helpers/utils.ts +73 -0
- package/src/index.stories.tsx +40 -17
- package/src/index.tsx +82 -78
- package/src/styles.css +1 -0
- package/src/components/Avatar/AvatarView/components/fullbodyAvatar.tsx +0 -120
- package/src/components/Avatar/AvatarView/components/halfbodyAvatar.tsx +0 -69
- package/src/components/Avatar/AvatarView/utils/useMouthSpeaking.ts +0 -87
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,SAAS,MAAM,YAAY,CAAC;AAMnC,OAAO,eAAe,MAAM,8BAA8B,CAAC;AAC3D,OAAO,YAEN,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,WAAW,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
|
package/esm/styles.css
CHANGED
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
|
|
49
49
|
@import url('https://fonts.bunny.net/css?family=lexend-deca:200,400,700');
|
|
50
50
|
|
|
51
|
+
@import url('./components/layouts/hidden-chat.css');
|
|
51
52
|
@import url('./components/layouts/totem.css');
|
|
52
53
|
@import url('./components/layouts/website-assistant.css');
|
|
53
54
|
@import url('./components/layouts/chat.css');
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "7.
|
|
2
|
+
"version": "7.6.0",
|
|
3
3
|
"name": "@memori.ai/memori-react",
|
|
4
4
|
"author": "Memori Srl",
|
|
5
5
|
"main": "dist/index.js",
|
|
@@ -292,7 +292,7 @@
|
|
|
292
292
|
},
|
|
293
293
|
"dependencies": {
|
|
294
294
|
"@headlessui/react": "1.7.4",
|
|
295
|
-
"@memori.ai/memori-api-client": "^5.
|
|
295
|
+
"@memori.ai/memori-api-client": "^5.2.0",
|
|
296
296
|
"@react-three/drei": "8.20.2",
|
|
297
297
|
"@react-three/fiber": "7.0.25",
|
|
298
298
|
"classnames": "2.3.2",
|
|
@@ -2,29 +2,32 @@ import React from 'react';
|
|
|
2
2
|
import { render } from '@testing-library/react';
|
|
3
3
|
import { memori, tenant, integration } from '../../mocks/data';
|
|
4
4
|
import Avatar from './Avatar';
|
|
5
|
-
|
|
5
|
+
import { VisemeProvider } from '../../context/visemeContext';
|
|
6
6
|
const integrationConfig = JSON.parse(integration.customData ?? '{}');
|
|
7
7
|
|
|
8
8
|
it('renders defualt Avatar (blob) unchanged', () => {
|
|
9
9
|
const { container } = render(
|
|
10
|
-
<
|
|
11
|
-
|
|
10
|
+
<VisemeProvider>
|
|
11
|
+
<Avatar
|
|
12
|
+
memori={memori}
|
|
12
13
|
tenant={tenant}
|
|
13
14
|
instruct={false}
|
|
14
15
|
avatar3dVisible={true}
|
|
15
16
|
setAvatar3dVisible={() => {}}
|
|
16
17
|
hasUserActivatedSpeak={false}
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
isPlayingAudio={false}
|
|
19
|
+
/>
|
|
20
|
+
</VisemeProvider>
|
|
19
21
|
);
|
|
20
22
|
expect(container).toMatchSnapshot();
|
|
21
23
|
});
|
|
22
24
|
|
|
23
25
|
it('renders Avatar with blob and avatar in blob unchanged', () => {
|
|
24
26
|
const { container } = render(
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
<VisemeProvider>
|
|
28
|
+
<Avatar
|
|
29
|
+
memori={memori}
|
|
30
|
+
integrationConfig={{
|
|
28
31
|
...integrationConfig,
|
|
29
32
|
avatar: 'userAvatar',
|
|
30
33
|
avatarURL: memori.avatarURL,
|
|
@@ -35,17 +38,19 @@ it('renders Avatar with blob and avatar in blob unchanged', () => {
|
|
|
35
38
|
setAvatar3dVisible={() => {}}
|
|
36
39
|
hasUserActivatedSpeak={false}
|
|
37
40
|
isPlayingAudio={false}
|
|
38
|
-
|
|
41
|
+
/>
|
|
42
|
+
</VisemeProvider>
|
|
39
43
|
);
|
|
40
44
|
expect(container).toMatchSnapshot();
|
|
41
45
|
});
|
|
42
46
|
|
|
43
47
|
it('renders Avatar with custom glb model unchanged', () => {
|
|
44
48
|
const { container } = render(
|
|
45
|
-
<
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
<VisemeProvider>
|
|
50
|
+
<Avatar
|
|
51
|
+
memori={memori}
|
|
52
|
+
integration={integration}
|
|
53
|
+
integrationConfig={{
|
|
49
54
|
...integrationConfig,
|
|
50
55
|
avatar: 'customglb',
|
|
51
56
|
avatarURL:
|
|
@@ -57,15 +62,17 @@ it('renders Avatar with custom glb model unchanged', () => {
|
|
|
57
62
|
setAvatar3dVisible={() => {}}
|
|
58
63
|
hasUserActivatedSpeak={false}
|
|
59
64
|
isPlayingAudio={false}
|
|
60
|
-
|
|
65
|
+
/>
|
|
66
|
+
</VisemeProvider>
|
|
61
67
|
);
|
|
62
68
|
expect(container).toMatchSnapshot();
|
|
63
69
|
});
|
|
64
70
|
|
|
65
71
|
it('renders Avatar with rpm 3d avatar unchanged', () => {
|
|
66
|
-
const { container } = render(
|
|
67
|
-
<
|
|
68
|
-
|
|
72
|
+
const { container } = render(
|
|
73
|
+
<VisemeProvider>
|
|
74
|
+
<Avatar
|
|
75
|
+
memori={memori}
|
|
69
76
|
integration={integration}
|
|
70
77
|
integrationConfig={{
|
|
71
78
|
...integrationConfig,
|
|
@@ -77,9 +84,10 @@ it('renders Avatar with rpm 3d avatar unchanged', () => {
|
|
|
77
84
|
instruct={false}
|
|
78
85
|
avatar3dVisible={true}
|
|
79
86
|
setAvatar3dVisible={() => {}}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
87
|
+
hasUserActivatedSpeak={false}
|
|
88
|
+
isPlayingAudio={false}
|
|
89
|
+
/>
|
|
90
|
+
</VisemeProvider>
|
|
83
91
|
);
|
|
84
92
|
expect(container).toMatchSnapshot();
|
|
85
93
|
});
|
|
@@ -16,6 +16,7 @@ import EyeInvisible from '../icons/EyeInvisible';
|
|
|
16
16
|
import Edit from '../icons/Edit';
|
|
17
17
|
import cx from 'classnames';
|
|
18
18
|
import ContainerAvatarView from './AvatarView';
|
|
19
|
+
import { useViseme } from '../../context/visemeContext';
|
|
19
20
|
|
|
20
21
|
export interface Props {
|
|
21
22
|
memori: Memori;
|
|
@@ -31,6 +32,8 @@ export interface Props {
|
|
|
31
32
|
baseUrl?: string;
|
|
32
33
|
apiUrl?: string;
|
|
33
34
|
animation?: string;
|
|
35
|
+
isZoomed?: boolean;
|
|
36
|
+
chatProps?: any;
|
|
34
37
|
}
|
|
35
38
|
|
|
36
39
|
const Avatar: React.FC<Props> = ({
|
|
@@ -47,10 +50,15 @@ const Avatar: React.FC<Props> = ({
|
|
|
47
50
|
baseUrl,
|
|
48
51
|
apiUrl,
|
|
49
52
|
animation,
|
|
53
|
+
isZoomed = false,
|
|
54
|
+
chatProps,
|
|
50
55
|
}) => {
|
|
56
|
+
|
|
51
57
|
const { t } = useTranslation();
|
|
52
58
|
const [isClient, setIsClient] = useState(false);
|
|
53
59
|
|
|
60
|
+
const { setMeshRef, clearVisemes, setEmotion } = useViseme();
|
|
61
|
+
|
|
54
62
|
useEffect(() => {
|
|
55
63
|
setIsClient(true);
|
|
56
64
|
}, []);
|
|
@@ -73,12 +81,12 @@ const Avatar: React.FC<Props> = ({
|
|
|
73
81
|
return undefined;
|
|
74
82
|
};
|
|
75
83
|
|
|
76
|
-
// Render the avatar, if the avatar is a user avatar, the avatar is rendered, if the avatar is a default avatar, the avatar is rendered
|
|
77
84
|
const renderAvatar = () => {
|
|
78
85
|
if (
|
|
79
86
|
(integrationConfig?.avatar === 'readyplayerme' ||
|
|
80
87
|
integrationConfig?.avatar === 'readyplayerme-full' ||
|
|
81
|
-
integrationConfig?.avatar === 'customglb'
|
|
88
|
+
integrationConfig?.avatar === 'customglb' ||
|
|
89
|
+
integrationConfig?.avatar === 'customrpm') &&
|
|
82
90
|
integrationConfig?.avatarURL
|
|
83
91
|
) {
|
|
84
92
|
return (
|
|
@@ -110,7 +118,8 @@ const Avatar: React.FC<Props> = ({
|
|
|
110
118
|
|
|
111
119
|
if (
|
|
112
120
|
integrationConfig?.avatar === 'readyplayerme' ||
|
|
113
|
-
integrationConfig?.avatar === 'readyplayerme-full'
|
|
121
|
+
integrationConfig?.avatar === 'readyplayerme-full' ||
|
|
122
|
+
integrationConfig?.avatar === 'customrpm'
|
|
114
123
|
) {
|
|
115
124
|
return (
|
|
116
125
|
<ErrorBoundary
|
|
@@ -133,6 +142,11 @@ const Avatar: React.FC<Props> = ({
|
|
|
133
142
|
speaking={isPlayingAudio}
|
|
134
143
|
loading={loading}
|
|
135
144
|
style={getAvatarStyle()}
|
|
145
|
+
clearVisemes={clearVisemes}
|
|
146
|
+
setMeshRef={setMeshRef}
|
|
147
|
+
isZoomed={isZoomed}
|
|
148
|
+
chatEmission={chatProps?.dialogState?.emission}
|
|
149
|
+
setEmotion={setEmotion}
|
|
136
150
|
/>
|
|
137
151
|
</ErrorBoundary>
|
|
138
152
|
);
|
|
@@ -177,8 +191,8 @@ const Avatar: React.FC<Props> = ({
|
|
|
177
191
|
};
|
|
178
192
|
}
|
|
179
193
|
return {
|
|
180
|
-
width: '
|
|
181
|
-
height: '
|
|
194
|
+
width: '100%',
|
|
195
|
+
height: '100%',
|
|
182
196
|
backgroundColor: 'none',
|
|
183
197
|
};
|
|
184
198
|
};
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import React, { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
import AnimationControlPanel from './components/controls';
|
|
3
|
+
import FullbodyAvatar from './components/fullbodyAvatar';
|
|
4
|
+
import HalfBodyAvatar from './components/halfbodyAvatar';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
showControls: boolean;
|
|
8
|
+
animation?: string;
|
|
9
|
+
loading: boolean;
|
|
10
|
+
url: string;
|
|
11
|
+
sex: 'MALE' | 'FEMALE';
|
|
12
|
+
eyeBlink: boolean;
|
|
13
|
+
headMovement: boolean;
|
|
14
|
+
speaking: boolean;
|
|
15
|
+
isZoomed: boolean;
|
|
16
|
+
chatEmission: any;
|
|
17
|
+
setMeshRef: any;
|
|
18
|
+
clearVisemes: () => void;
|
|
19
|
+
setEmotion: (emotion: string) => void;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
interface BaseAction {
|
|
23
|
+
weight: number;
|
|
24
|
+
action?: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const baseActions: Record<string, BaseAction> = {
|
|
28
|
+
Gioia1: { weight: 0 },
|
|
29
|
+
Gioia2: { weight: 0 },
|
|
30
|
+
Gioia3: { weight: 0 },
|
|
31
|
+
Idle1: { weight: 1 },
|
|
32
|
+
Idle2: { weight: 0 },
|
|
33
|
+
Idle3: { weight: 0 },
|
|
34
|
+
Idle4: { weight: 0 },
|
|
35
|
+
Idle5: { weight: 0 },
|
|
36
|
+
Rabbia1: { weight: 0 },
|
|
37
|
+
Rabbia2: { weight: 0 },
|
|
38
|
+
Rabbia3: { weight: 0 },
|
|
39
|
+
Sorpresa1: { weight: 0 },
|
|
40
|
+
Sorpresa2: { weight: 0 },
|
|
41
|
+
Sorpresa3: { weight: 0 },
|
|
42
|
+
Timore1: { weight: 0 },
|
|
43
|
+
Timore2: { weight: 0 },
|
|
44
|
+
Timore3: { weight: 0 },
|
|
45
|
+
Tristezza1: { weight: 0 },
|
|
46
|
+
Tristezza2: { weight: 0 },
|
|
47
|
+
Tristezza3: { weight: 0 },
|
|
48
|
+
Loading1: { weight: 0 },
|
|
49
|
+
Loading2: { weight: 0 },
|
|
50
|
+
Loading3: { weight: 0 },
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const AvatarView: React.FC<Props & { halfBody: boolean }> = ({
|
|
54
|
+
setMeshRef,
|
|
55
|
+
clearVisemes,
|
|
56
|
+
chatEmission,
|
|
57
|
+
showControls,
|
|
58
|
+
animation,
|
|
59
|
+
url,
|
|
60
|
+
sex,
|
|
61
|
+
eyeBlink,
|
|
62
|
+
headMovement,
|
|
63
|
+
speaking,
|
|
64
|
+
halfBody,
|
|
65
|
+
loading,
|
|
66
|
+
isZoomed,
|
|
67
|
+
setEmotion,
|
|
68
|
+
}) => {
|
|
69
|
+
const [currentBaseAction, setCurrentBaseAction] = useState({
|
|
70
|
+
action: animation || 'Idle1',
|
|
71
|
+
weight: 1,
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
const [morphTargetInfluences, setMorphTargetInfluences] = useState<{
|
|
75
|
+
[key: string]: number;
|
|
76
|
+
}>({});
|
|
77
|
+
const [morphTargetDictionary, setMorphTargetDictionary] = useState<{
|
|
78
|
+
[key: string]: number;
|
|
79
|
+
}>({});
|
|
80
|
+
|
|
81
|
+
const [timeScale, setTimeScale] = useState(0.8);
|
|
82
|
+
|
|
83
|
+
// Set the morph target influences for the given emotions
|
|
84
|
+
const setEmotionMorphTargetInfluences = useCallback((action: string) => {
|
|
85
|
+
const emotionMap: Record<string, Record<string, number>> = {
|
|
86
|
+
Gioia: { Gioria: 1 },
|
|
87
|
+
Rabbia: { Rabbia: 1 },
|
|
88
|
+
Sorpresa: { Sorpresa: 1 },
|
|
89
|
+
Tristezza: { Tristezza: 1 },
|
|
90
|
+
Timore: { Timore: 1 },
|
|
91
|
+
Loading: { Loading1: 1, Loading2: 1, Loading3: 1 },
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
//remove the last character from the action
|
|
95
|
+
const newEmotion = action.slice(0, -1);
|
|
96
|
+
setEmotion(newEmotion);
|
|
97
|
+
|
|
98
|
+
const defaultEmotions = Object.keys(emotionMap).reduce((acc, key) => {
|
|
99
|
+
acc[key] = 0;
|
|
100
|
+
return acc;
|
|
101
|
+
}, {} as Record<string, number>);
|
|
102
|
+
|
|
103
|
+
const emotion =
|
|
104
|
+
Object.keys(emotionMap).find(key => action.startsWith(key)) || 'default';
|
|
105
|
+
const emotionValues =
|
|
106
|
+
emotion === 'default' ? defaultEmotions : emotionMap[emotion];
|
|
107
|
+
|
|
108
|
+
setMorphTargetInfluences(prevInfluences => ({
|
|
109
|
+
...prevInfluences,
|
|
110
|
+
...defaultEmotions,
|
|
111
|
+
...emotionValues,
|
|
112
|
+
}));
|
|
113
|
+
}, []);
|
|
114
|
+
|
|
115
|
+
const onBaseActionChange = useCallback((action: string) => {
|
|
116
|
+
setEmotionMorphTargetInfluences(action);
|
|
117
|
+
setCurrentBaseAction({
|
|
118
|
+
action,
|
|
119
|
+
weight: 1,
|
|
120
|
+
});
|
|
121
|
+
}, []);
|
|
122
|
+
|
|
123
|
+
const onMorphTargetInfluencesChange = useCallback(
|
|
124
|
+
(influences: { [key: string]: number }) => {
|
|
125
|
+
setMorphTargetInfluences(prevInfluences => ({
|
|
126
|
+
...prevInfluences,
|
|
127
|
+
...influences,
|
|
128
|
+
}));
|
|
129
|
+
},
|
|
130
|
+
[]
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
const onMorphTargetDictionaryChange = useCallback(
|
|
134
|
+
(dictionary: { [key: string]: number }) => {
|
|
135
|
+
setMorphTargetDictionary(dictionary);
|
|
136
|
+
},
|
|
137
|
+
[]
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
const modifyTimeScale = useCallback((value: number) => {
|
|
141
|
+
setTimeScale(value);
|
|
142
|
+
}, []);
|
|
143
|
+
|
|
144
|
+
// Set the emotion based on the chatEmission
|
|
145
|
+
useEffect(() => {
|
|
146
|
+
//Check if chatEmission has a tag
|
|
147
|
+
const hasOutputTag = chatEmission?.includes(
|
|
148
|
+
'<output class="memori-emotion">'
|
|
149
|
+
);
|
|
150
|
+
const outputContent = hasOutputTag
|
|
151
|
+
? chatEmission
|
|
152
|
+
?.split('<output class="memori-emotion">')[1]
|
|
153
|
+
?.split('</output>')[0]
|
|
154
|
+
?.trim()
|
|
155
|
+
: null;
|
|
156
|
+
|
|
157
|
+
if (outputContent) {
|
|
158
|
+
//Based on the outputContent, set the emotion
|
|
159
|
+
//The outputContent could be: "Gioia", "Sorpresa", "Tristezza", "Rabbia", "Timore"
|
|
160
|
+
//Choose a random number between 1 and 3
|
|
161
|
+
const randomNumber = Math.floor(Math.random() * 3) + 1;
|
|
162
|
+
const emotion = `${outputContent}${randomNumber}`;
|
|
163
|
+
|
|
164
|
+
onBaseActionChange(emotion);
|
|
165
|
+
}
|
|
166
|
+
}, [chatEmission]);
|
|
167
|
+
|
|
168
|
+
useEffect(() => {
|
|
169
|
+
if (loading) {
|
|
170
|
+
//Choose a random number between 1 and 3
|
|
171
|
+
const randomNumber = Math.floor(Math.random() * 3) + 1;
|
|
172
|
+
const animation = `Loading${randomNumber}`;
|
|
173
|
+
onBaseActionChange(animation);
|
|
174
|
+
}
|
|
175
|
+
}, [loading]);
|
|
176
|
+
|
|
177
|
+
return (
|
|
178
|
+
<>
|
|
179
|
+
{showControls && (
|
|
180
|
+
<AnimationControlPanel
|
|
181
|
+
timeScale={timeScale}
|
|
182
|
+
morphTargetDictionary={morphTargetDictionary}
|
|
183
|
+
onBaseActionChange={onBaseActionChange}
|
|
184
|
+
onMorphTargetInfluencesChange={onMorphTargetInfluencesChange}
|
|
185
|
+
onMorphTargetDictionaryChange={onMorphTargetDictionaryChange}
|
|
186
|
+
baseActions={baseActions}
|
|
187
|
+
currentBaseAction={currentBaseAction}
|
|
188
|
+
modifyTimeScale={modifyTimeScale}
|
|
189
|
+
/>
|
|
190
|
+
)}
|
|
191
|
+
{halfBody ? (
|
|
192
|
+
<HalfBodyAvatar
|
|
193
|
+
url={url}
|
|
194
|
+
setMeshRef={setMeshRef}
|
|
195
|
+
setMorphTargetInfluences={setMorphTargetInfluences}
|
|
196
|
+
headMovement={headMovement}
|
|
197
|
+
speaking={speaking}
|
|
198
|
+
eyeBlink={eyeBlink}
|
|
199
|
+
morphTargetInfluences={morphTargetInfluences}
|
|
200
|
+
clearVisemes={clearVisemes}
|
|
201
|
+
setMorphTargetDictionary={setMorphTargetDictionary}
|
|
202
|
+
/>
|
|
203
|
+
) : (
|
|
204
|
+
<FullbodyAvatar
|
|
205
|
+
url={url}
|
|
206
|
+
sex={sex}
|
|
207
|
+
eyeBlink={eyeBlink}
|
|
208
|
+
speaking={speaking}
|
|
209
|
+
currentBaseAction={currentBaseAction}
|
|
210
|
+
timeScale={timeScale}
|
|
211
|
+
setMorphTargetInfluences={setMorphTargetInfluences}
|
|
212
|
+
setMorphTargetDictionary={setMorphTargetDictionary}
|
|
213
|
+
morphTargetInfluences={morphTargetInfluences}
|
|
214
|
+
morphTargetDictionary={morphTargetDictionary}
|
|
215
|
+
isZoomed={isZoomed}
|
|
216
|
+
setMeshRef={setMeshRef}
|
|
217
|
+
clearVisemes={clearVisemes}
|
|
218
|
+
/>
|
|
219
|
+
)}
|
|
220
|
+
</>
|
|
221
|
+
);
|
|
222
|
+
};
|
package/src/components/Avatar/AvatarView/{components → AvatarComponent/components}/controls.tsx
RENAMED
|
@@ -13,23 +13,25 @@ interface AdditiveAction {
|
|
|
13
13
|
|
|
14
14
|
export interface AnimationControlPanelProps {
|
|
15
15
|
baseActions: Record<string, BaseAction>;
|
|
16
|
-
additiveActions: Record<string, AdditiveAction>;
|
|
17
16
|
onBaseActionChange: (action: string) => void;
|
|
18
|
-
onAdditiveActionChange?: (action: string, weight: number) => void;
|
|
19
17
|
currentBaseAction: {
|
|
20
18
|
action: string;
|
|
21
19
|
weight: number;
|
|
22
20
|
};
|
|
21
|
+
onMorphTargetInfluencesChange: (influences: { [key: string]: number }) => void;
|
|
22
|
+
onMorphTargetDictionaryChange: (dictionary: { [key: string]: number }) => void;
|
|
23
|
+
morphTargetDictionary: { [key: string]: number };
|
|
23
24
|
modifyTimeScale: (value: number) => void;
|
|
24
25
|
timeScale: number;
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
const AnimationControlPanel: React.FC<AnimationControlPanelProps> = ({
|
|
28
29
|
onBaseActionChange,
|
|
29
|
-
onAdditiveActionChange,
|
|
30
30
|
baseActions,
|
|
31
|
-
additiveActions,
|
|
32
31
|
modifyTimeScale,
|
|
32
|
+
onMorphTargetInfluencesChange,
|
|
33
|
+
onMorphTargetDictionaryChange,
|
|
34
|
+
morphTargetDictionary,
|
|
33
35
|
timeScale,
|
|
34
36
|
}) => {
|
|
35
37
|
const guiRef = useRef<GUI | null>(null);
|
|
@@ -59,14 +61,13 @@ const AnimationControlPanel: React.FC<AnimationControlPanelProps> = ({
|
|
|
59
61
|
crossFadeControlsRef.current.push(control);
|
|
60
62
|
});
|
|
61
63
|
|
|
62
|
-
Object.entries(
|
|
63
|
-
panelSettingsRef.current[name] = settings
|
|
64
|
+
Object.entries(morphTargetDictionary).forEach(([name, settings]) => {
|
|
65
|
+
panelSettingsRef.current[name] = settings/100;
|
|
64
66
|
folder2
|
|
65
|
-
.add(panelSettingsRef.current, name,
|
|
67
|
+
.add(panelSettingsRef.current, name, -1.0, 1.0, 0.01)
|
|
66
68
|
.listen()
|
|
67
69
|
.onChange((weight: number) => {
|
|
68
|
-
|
|
69
|
-
onAdditiveActionChange?.(name, weight);
|
|
70
|
+
onMorphTargetInfluencesChange({ [name]: weight });
|
|
70
71
|
});
|
|
71
72
|
});
|
|
72
73
|
|
|
@@ -85,7 +86,12 @@ const AnimationControlPanel: React.FC<AnimationControlPanelProps> = ({
|
|
|
85
86
|
};
|
|
86
87
|
}, [
|
|
87
88
|
onBaseActionChange,
|
|
88
|
-
|
|
89
|
+
onMorphTargetInfluencesChange,
|
|
90
|
+
onMorphTargetDictionaryChange,
|
|
91
|
+
modifyTimeScale,
|
|
92
|
+
baseActions,
|
|
93
|
+
morphTargetDictionary,
|
|
94
|
+
timeScale
|
|
89
95
|
]);
|
|
90
96
|
|
|
91
97
|
return null; // This component doesn't render anything itself
|