@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
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const three_1 = require("three");
|
|
7
|
+
const drei_1 = require("@react-three/drei");
|
|
8
|
+
const utils_1 = require("../../../../../helpers/utils");
|
|
9
|
+
const fiber_1 = require("@react-three/fiber");
|
|
10
|
+
const useEyeBlink_1 = require("../../utils/useEyeBlink");
|
|
11
|
+
const useHeadMovement_1 = tslib_1.__importDefault(require("../../utils/useHeadMovement"));
|
|
12
|
+
const utils_2 = require("../../utils/utils");
|
|
13
|
+
const AVATAR_POSITION = new three_1.Vector3(0, -0.6, 0);
|
|
14
|
+
const lerp = (start, end, alpha) => {
|
|
15
|
+
return start * (1 - alpha) + end * alpha;
|
|
16
|
+
};
|
|
17
|
+
function HalfBodyAvatar({ url, setMorphTargetInfluences, setMorphTargetDictionary, headMovement, eyeBlink, setMeshRef, onLoaded, clearVisemes, morphTargetInfluences, }) {
|
|
18
|
+
const { scene } = (0, drei_1.useGLTF)(url);
|
|
19
|
+
const { nodes, materials } = (0, fiber_1.useGraph)(scene);
|
|
20
|
+
const avatarMeshRef = (0, react_1.useRef)(null);
|
|
21
|
+
(0, useEyeBlink_1.useAvatarBlink)({
|
|
22
|
+
enabled: eyeBlink || false,
|
|
23
|
+
setMorphTargetInfluences,
|
|
24
|
+
config: {
|
|
25
|
+
minInterval: 1500,
|
|
26
|
+
maxInterval: 4000,
|
|
27
|
+
blinkDuration: 120
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
(0, useHeadMovement_1.default)(headMovement, nodes);
|
|
31
|
+
(0, react_1.useEffect)(() => {
|
|
32
|
+
const setupAvatar = () => {
|
|
33
|
+
(0, utils_2.hideHands)(nodes);
|
|
34
|
+
(0, utils_1.correctMaterials)(materials);
|
|
35
|
+
const firstSkinnedMesh = Object.values(nodes).find(utils_1.isSkinnedMesh);
|
|
36
|
+
if (firstSkinnedMesh) {
|
|
37
|
+
setMeshRef(firstSkinnedMesh);
|
|
38
|
+
avatarMeshRef.current = firstSkinnedMesh;
|
|
39
|
+
if (firstSkinnedMesh.morphTargetDictionary && firstSkinnedMesh.morphTargetInfluences) {
|
|
40
|
+
setMorphTargetDictionary(firstSkinnedMesh.morphTargetDictionary);
|
|
41
|
+
const initialInfluences = Object.keys(firstSkinnedMesh.morphTargetDictionary).reduce((acc, key) => ({ ...acc, [key]: 0 }), {});
|
|
42
|
+
setMorphTargetInfluences(initialInfluences);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
onLoaded === null || onLoaded === void 0 ? void 0 : onLoaded();
|
|
46
|
+
};
|
|
47
|
+
setupAvatar();
|
|
48
|
+
return () => {
|
|
49
|
+
const disposeObjects = () => {
|
|
50
|
+
Object.values(materials).forEach(fiber_1.dispose);
|
|
51
|
+
Object.values(nodes).filter(utils_1.isSkinnedMesh).forEach(fiber_1.dispose);
|
|
52
|
+
clearVisemes();
|
|
53
|
+
};
|
|
54
|
+
disposeObjects();
|
|
55
|
+
};
|
|
56
|
+
}, [materials, nodes, url, onLoaded, clearVisemes]);
|
|
57
|
+
const skinnedMeshes = (0, react_1.useMemo)(() => Object.values(nodes).filter(utils_1.isSkinnedMesh), [nodes]);
|
|
58
|
+
(0, fiber_1.useFrame)((_) => {
|
|
59
|
+
if (avatarMeshRef.current && avatarMeshRef.current.morphTargetDictionary) {
|
|
60
|
+
updateMorphTargetInfluences();
|
|
61
|
+
}
|
|
62
|
+
function updateMorphTargetInfluences() {
|
|
63
|
+
Object.entries(morphTargetInfluences).forEach(([key, value]) => {
|
|
64
|
+
const index = avatarMeshRef.current.morphTargetDictionary[key];
|
|
65
|
+
if (typeof index === 'number' &&
|
|
66
|
+
avatarMeshRef.current.morphTargetInfluences) {
|
|
67
|
+
const currentValue = avatarMeshRef.current.morphTargetInfluences[index];
|
|
68
|
+
const smoothValue = lerp(currentValue, value, 0.1);
|
|
69
|
+
avatarMeshRef.current.morphTargetInfluences[index] = smoothValue;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return ((0, jsx_runtime_1.jsxs)("group", { position: AVATAR_POSITION, children: [nodes.Hips && (0, jsx_runtime_1.jsx)("primitive", { object: nodes.Hips }, "armature"), skinnedMeshes.map((node) => node && ((0, jsx_runtime_1.jsx)("primitive", { object: node, receiveShadow: true, castShadow: true }, node.name)))] }));
|
|
75
|
+
}
|
|
76
|
+
exports.default = HalfBodyAvatar;
|
|
77
|
+
//# sourceMappingURL=halfbodyAvatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"halfbodyAvatar.js","sourceRoot":"","sources":["../../../../../../src/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const drei_1 = require("@react-three/drei");
|
|
6
|
+
const Spin_1 = tslib_1.__importDefault(require("../../../../ui/Spin"));
|
|
7
|
+
const Loader = ({ fallbackImg }) => {
|
|
8
|
+
const { progress } = (0, drei_1.useProgress)();
|
|
9
|
+
return ((0, jsx_runtime_1.jsx)(drei_1.Html, { center: true, className: "avatar-loader", children: (0, jsx_runtime_1.jsx)(Spin_1.default, { spinning: true, children: fallbackImg ? ((0, jsx_runtime_1.jsxs)("figure", { children: [(0, jsx_runtime_1.jsx)("img", { src: fallbackImg, alt: `${Math.round(progress)}% loaded`, title: `${Math.round(progress)}% loaded` }), (0, jsx_runtime_1.jsx)("figcaption", { children: `${Math.round(progress)}%` })] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [Math.round(progress), " % loaded"] })) }) }));
|
|
10
|
+
};
|
|
11
|
+
exports.default = Loader;
|
|
12
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../../../src/components/Avatar/AvatarView/AvatarComponent/components/loader.tsx"],"names":[],"mappings":";;;;AACA,4CAAsD;AACtD,uEAAuC;AAMvC,MAAM,MAAM,GAAG,CAAC,EAAE,WAAW,EAAS,EAAE,EAAE;IACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,kBAAW,GAAE,CAAC;IACnC,OAAO,CACL,uBAAC,WAAI,IAAC,MAAM,QAAC,SAAS,EAAC,eAAe,YACpC,uBAAC,cAAI,IAAC,QAAQ,kBACX,WAAW,CAAC,CAAC,CAAC,CACb,+CACE,gCACE,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EACtC,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,GACxC,EACF,iDAAa,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,GAAc,IAC9C,CACV,CAAC,CAAC,CAAC,CACF,6DAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAa,CACrC,GACI,GACF,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,MAAM,CAAC"}
|
|
@@ -14,5 +14,6 @@ export interface FullbodyAvatarProps {
|
|
|
14
14
|
timeScale: number;
|
|
15
15
|
loading?: boolean;
|
|
16
16
|
speaking?: boolean;
|
|
17
|
+
isZoomed?: boolean;
|
|
17
18
|
}
|
|
18
|
-
export default function FullbodyAvatar({ url, sex, onLoaded, currentBaseAction, additiveActions, timeScale }: FullbodyAvatarProps): JSX.Element;
|
|
19
|
+
export default function FullbodyAvatar({ url, sex, onLoaded, currentBaseAction, additiveActions, timeScale, isZoomed, }: FullbodyAvatarProps): JSX.Element;
|
|
@@ -13,11 +13,12 @@ const useHeadMovement_1 = tslib_1.__importDefault(require("../utils/useHeadMovem
|
|
|
13
13
|
const useSmile_1 = tslib_1.__importDefault(require("../utils/useSmile"));
|
|
14
14
|
const AVATAR_POSITION = new three_1.Vector3(0, -1, 0);
|
|
15
15
|
const AVATAR_ROTATION = new three_1.Euler(0.175, 0, 0);
|
|
16
|
+
const AVATAR_POSITION_ZOOMED = new three_1.Vector3(0, -1.53, 0);
|
|
16
17
|
const ANIMATION_URLS = {
|
|
17
18
|
MALE: 'https://assets.memori.ai/api/v2/asset/5de7456f-0cd8-4e29-95a7-0cd0045a5325.glb',
|
|
18
19
|
FEMALE: 'https://assets.memori.ai/api/v2/asset/84487a2b-377c-4565-800a-51459d580ec8.glb',
|
|
19
20
|
};
|
|
20
|
-
function FullbodyAvatar({ url, sex, onLoaded, currentBaseAction, additiveActions, timeScale }) {
|
|
21
|
+
function FullbodyAvatar({ url, sex, onLoaded, currentBaseAction, additiveActions, timeScale, isZoomed, }) {
|
|
21
22
|
const { scene } = (0, drei_1.useGLTF)(url);
|
|
22
23
|
const { animations } = (0, drei_1.useGLTF)(ANIMATION_URLS[sex]);
|
|
23
24
|
const { nodes, materials } = (0, fiber_1.useGraph)(scene);
|
|
@@ -54,7 +55,7 @@ function FullbodyAvatar({ url, sex, onLoaded, currentBaseAction, additiveActions
|
|
|
54
55
|
(0, fiber_1.useFrame)((_, delta) => {
|
|
55
56
|
mixer.update(delta * 0.001);
|
|
56
57
|
});
|
|
57
|
-
return ((0, jsx_runtime_1.jsx)("group", { position: AVATAR_POSITION, rotation: AVATAR_ROTATION, children: (0, jsx_runtime_1.jsx)("primitive", { object: scene }) }));
|
|
58
|
+
return ((0, jsx_runtime_1.jsx)("group", { position: isZoomed ? AVATAR_POSITION_ZOOMED : AVATAR_POSITION, rotation: AVATAR_ROTATION, children: (0, jsx_runtime_1.jsx)("primitive", { object: scene }) }));
|
|
58
59
|
}
|
|
59
60
|
exports.default = FullbodyAvatar;
|
|
60
61
|
//# sourceMappingURL=fullbodyAvatar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fullbodyAvatar.js","sourceRoot":"","sources":["../../../../../src/components/Avatar/AvatarView/components/fullbodyAvatar.tsx"],"names":[],"mappings":";;;;AAAA,iCAAmD;AACnD,iCAMe;AACf,4CAA2D;AAC3D,8CAAiE;AACjE,0CAAiE;AACjE,+EAA+C;AAC/C,yFAAyD;AACzD,uFAAuD;AACvD,yEAAyC;
|
|
1
|
+
{"version":3,"file":"fullbodyAvatar.js","sourceRoot":"","sources":["../../../../../src/components/Avatar/AvatarView/components/fullbodyAvatar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -14,5 +14,10 @@ export interface Props {
|
|
|
14
14
|
loading?: boolean;
|
|
15
15
|
animation?: string;
|
|
16
16
|
showControls?: boolean;
|
|
17
|
+
isZoomed?: boolean;
|
|
18
|
+
chatEmission?: any;
|
|
19
|
+
setMeshRef?: any;
|
|
20
|
+
clearVisemes: () => void;
|
|
21
|
+
setEmotion: (emotion: string) => void;
|
|
17
22
|
}
|
|
18
|
-
export default function ContainerAvatarView({ url, sex, style, rotateAvatar, eyeBlink, headMovement, speaking, halfBody, loading, animation, showControls, }: Props): JSX.Element;
|
|
23
|
+
export default function ContainerAvatarView({ url, sex, style, rotateAvatar, eyeBlink, headMovement, speaking, fallback, fallbackImg, halfBody, loading, animation, showControls, isZoomed, chatEmission, setMeshRef, clearVisemes, setEmotion, }: Props): JSX.Element;
|
|
@@ -2,28 +2,17 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
const
|
|
5
|
+
const react_1 = require("react");
|
|
6
6
|
const fiber_1 = require("@react-three/fiber");
|
|
7
7
|
const drei_1 = require("@react-three/drei");
|
|
8
8
|
const utils_1 = require("../../../helpers/utils");
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const halfbodyAvatar_1 = tslib_1.__importDefault(require("./components/halfbodyAvatar"));
|
|
12
|
-
const baseActions = {
|
|
13
|
-
Idle: { weight: 1 },
|
|
14
|
-
'Idle 1': { weight: 0 },
|
|
15
|
-
'Idle 2': { weight: 0 },
|
|
16
|
-
'Idle 3': { weight: 0 },
|
|
17
|
-
Loading: { weight: 0 },
|
|
18
|
-
Sad: { weight: 0 },
|
|
19
|
-
'Talk 1': { weight: 0 },
|
|
20
|
-
'Talk 2': { weight: 0 },
|
|
21
|
-
'Talk 3': { weight: 0 },
|
|
22
|
-
};
|
|
9
|
+
const avatarComponent_1 = require("./AvatarComponent/avatarComponent");
|
|
10
|
+
const loader_1 = tslib_1.__importDefault(require("./AvatarComponent/components/loader"));
|
|
23
11
|
const defaultStyles = {
|
|
24
12
|
halfBody: {
|
|
25
|
-
width: '
|
|
26
|
-
height: '
|
|
13
|
+
width: '100%',
|
|
14
|
+
height: '100%',
|
|
15
|
+
minHeight: '500px',
|
|
27
16
|
backgroundColor: 'white',
|
|
28
17
|
borderRadius: '100%',
|
|
29
18
|
},
|
|
@@ -33,77 +22,20 @@ const defaultStyles = {
|
|
|
33
22
|
backgroundColor: 'white',
|
|
34
23
|
},
|
|
35
24
|
};
|
|
36
|
-
const getCameraSettings = (halfBody) => halfBody
|
|
25
|
+
const getCameraSettings = (halfBody, isZoomed) => halfBody
|
|
37
26
|
? {
|
|
38
27
|
fov: 40,
|
|
39
28
|
position: [0, 0, 0.6],
|
|
40
29
|
}
|
|
41
|
-
:
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const [currentBaseAction, setCurrentBaseAction] = (0, react_1.useState)({
|
|
46
|
-
action: animation || 'Idle',
|
|
47
|
-
weight: 1,
|
|
48
|
-
});
|
|
49
|
-
const [additiveActions, setAdditiveActions] = (0, react_1.useState)({
|
|
50
|
-
smile: { weight: 0 },
|
|
51
|
-
blink: { weight: eyeBlink ? 1 : 0 },
|
|
52
|
-
speak: { weight: speaking ? 1 : 0 },
|
|
53
|
-
headMovement: { weight: headMovement ? 1 : 0 },
|
|
54
|
-
});
|
|
55
|
-
const [timeScale, setTimeScale] = (0, react_1.useState)(0.8);
|
|
56
|
-
function onBaseActionChange(action) {
|
|
57
|
-
setCurrentBaseAction({
|
|
58
|
-
action,
|
|
59
|
-
weight: 1,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
function onAdditiveActionChange(action, weight) {
|
|
63
|
-
setAdditiveActions({
|
|
64
|
-
...additiveActions,
|
|
65
|
-
[action]: { weight },
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
function modifyTimeScale(value) {
|
|
69
|
-
setTimeScale(value);
|
|
70
|
-
}
|
|
71
|
-
(0, react_1.useEffect)(() => {
|
|
72
|
-
if (loading && currentBaseAction.action !== 'Loading' && !speaking) {
|
|
73
|
-
setCurrentBaseAction({
|
|
74
|
-
action: 'Loading',
|
|
75
|
-
weight: 1,
|
|
76
|
-
});
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
if (speaking) {
|
|
80
|
-
const talkingAnimations = ['Talk 1', 'Talk 2', 'Talk 3'];
|
|
81
|
-
const randomIndex = Math.floor(Math.random() * talkingAnimations.length);
|
|
82
|
-
const randomTalkingAnimation = talkingAnimations[randomIndex];
|
|
83
|
-
setAdditiveActions({
|
|
84
|
-
...additiveActions,
|
|
85
|
-
speak: { weight: 1 },
|
|
86
|
-
});
|
|
87
|
-
setCurrentBaseAction({
|
|
88
|
-
action: randomTalkingAnimation,
|
|
89
|
-
weight: 1,
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
else if (!speaking && additiveActions.speak.weight !== 0) {
|
|
93
|
-
setAdditiveActions({
|
|
94
|
-
...additiveActions,
|
|
95
|
-
speak: { weight: 0 },
|
|
96
|
-
});
|
|
97
|
-
setCurrentBaseAction({
|
|
98
|
-
action: 'Idle',
|
|
99
|
-
weight: 1,
|
|
100
|
-
});
|
|
30
|
+
: !halfBody && isZoomed
|
|
31
|
+
? {
|
|
32
|
+
fov: 44,
|
|
33
|
+
position: [0, 0, 1.25],
|
|
101
34
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return ((0, jsx_runtime_1.jsxs)(fiber_1.Canvas, { style: style || (halfBody ? defaultStyles.halfBody : defaultStyles.fullBody), camera: getCameraSettings(halfBody), children: [getLightingComponent(), rotateAvatar && (0, jsx_runtime_1.jsx)(drei_1.OrbitControls, { enablePan: false, enableZoom: false }), (0, jsx_runtime_1.jsx)(AvatarView, { halfBody: halfBody, url: url, sex: sex, eyeBlink: eyeBlink, headMovement: headMovement, speaking: speaking, loading: loading, animation: animation, showControls: showControls })] }));
|
|
35
|
+
: { fov: 40, position: [0, 0.0000175, 3] };
|
|
36
|
+
const getLightingComponent = () => (0, utils_1.isAndroid)() || (0, utils_1.isiOS)() ? ((0, jsx_runtime_1.jsx)(drei_1.SpotLight, { distance: 100, position: [-0.3, 0.2, 1.25], angle: Math.PI / 2, attenuation: 5, anglePower: 5 })) : ((0, jsx_runtime_1.jsx)(drei_1.Environment, { files: "https://raw.githack.com/pmndrs/drei-assets/456060a26bbeb8fdf79326f224b6d99b8bcce736/hdri/venice_sunset_1k.hdr" }));
|
|
37
|
+
function ContainerAvatarView({ url, sex, style, rotateAvatar, eyeBlink, headMovement, speaking, fallback, fallbackImg, halfBody = true, loading, animation, showControls = false, isZoomed, chatEmission, setMeshRef, clearVisemes, setEmotion, }) {
|
|
38
|
+
return ((0, jsx_runtime_1.jsx)(fiber_1.Canvas, { style: style || (halfBody ? defaultStyles.halfBody : defaultStyles.fullBody), camera: getCameraSettings(halfBody, isZoomed), children: (0, jsx_runtime_1.jsxs)(react_1.Suspense, { fallback: fallback || (0, jsx_runtime_1.jsx)(loader_1.default, { fallbackImg: fallbackImg }), children: [getLightingComponent(), rotateAvatar && (0, jsx_runtime_1.jsx)(drei_1.OrbitControls, { enablePan: false, enableZoom: false }), (0, jsx_runtime_1.jsx)(avatarComponent_1.AvatarView, { url: url, sex: sex, showControls: showControls, loading: loading || false, animation: animation, isZoomed: isZoomed || false, eyeBlink: eyeBlink || false, headMovement: headMovement || false, speaking: speaking || false, halfBody: halfBody || false, chatEmission: chatEmission, setMeshRef: setMeshRef, clearVisemes: clearVisemes, setEmotion: setEmotion })] }) }));
|
|
107
39
|
}
|
|
108
40
|
exports.default = ContainerAvatarView;
|
|
109
41
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/Avatar/AvatarView/index.tsx"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/Avatar/AvatarView/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
interface BlinkConfig {
|
|
2
|
+
minInterval: number;
|
|
3
|
+
maxInterval: number;
|
|
4
|
+
blinkDuration: number;
|
|
5
|
+
}
|
|
6
|
+
interface UseAvatarBlinkProps {
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
setMorphTargetInfluences: (morphTargetInfluences: any) => void;
|
|
9
|
+
config?: Partial<BlinkConfig>;
|
|
10
|
+
}
|
|
11
|
+
export declare function useAvatarBlink({ enabled, setMorphTargetInfluences, config }: UseAvatarBlinkProps): {
|
|
12
|
+
isBlinking: boolean;
|
|
13
|
+
lastBlinkTime: number;
|
|
14
|
+
triggerBlink: () => void;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
@@ -1,47 +1,71 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useAvatarBlink = void 0;
|
|
3
4
|
const react_1 = require("react");
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
(0, react_1.useEffect)(() => {
|
|
20
|
-
if (!enabled)
|
|
5
|
+
const DEFAULT_BLINK_CONFIG = {
|
|
6
|
+
minInterval: 1000,
|
|
7
|
+
maxInterval: 5000,
|
|
8
|
+
blinkDuration: 150,
|
|
9
|
+
};
|
|
10
|
+
function useAvatarBlink({ enabled, setMorphTargetInfluences, config = {} }) {
|
|
11
|
+
const blinkTimeoutRef = (0, react_1.useRef)();
|
|
12
|
+
const isBlinkingRef = (0, react_1.useRef)(false);
|
|
13
|
+
const lastBlinkTime = (0, react_1.useRef)(0);
|
|
14
|
+
const blinkConfig = {
|
|
15
|
+
...DEFAULT_BLINK_CONFIG,
|
|
16
|
+
...config
|
|
17
|
+
};
|
|
18
|
+
const blink = (0, react_1.useCallback)(() => {
|
|
19
|
+
if (!enabled || isBlinkingRef.current)
|
|
21
20
|
return;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
isBlinkingRef.current = true;
|
|
22
|
+
setMorphTargetInfluences((prev) => ({
|
|
23
|
+
...prev,
|
|
24
|
+
eyesClosed: 1
|
|
25
|
+
}));
|
|
26
|
+
setTimeout(() => {
|
|
27
|
+
setMorphTargetInfluences((prev) => ({
|
|
28
|
+
...prev,
|
|
29
|
+
eyesClosed: 0
|
|
30
|
+
}));
|
|
31
|
+
isBlinkingRef.current = false;
|
|
32
|
+
lastBlinkTime.current = Date.now();
|
|
33
|
+
scheduleNextBlink();
|
|
34
|
+
}, blinkConfig.blinkDuration);
|
|
35
|
+
}, [enabled, blinkConfig.blinkDuration, setMorphTargetInfluences]);
|
|
36
|
+
const scheduleNextBlink = (0, react_1.useCallback)(() => {
|
|
37
|
+
if (blinkTimeoutRef.current) {
|
|
38
|
+
clearTimeout(blinkTimeoutRef.current);
|
|
26
39
|
}
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}, [
|
|
32
|
-
(0,
|
|
33
|
-
if (
|
|
34
|
-
|
|
35
|
-
const { blinkTime, headMesh, morphIndex } = blinkStateRef.current;
|
|
36
|
-
if (blinkTime < BLINK_DURATION && (headMesh === null || headMesh === void 0 ? void 0 : headMesh.morphTargetInfluences)) {
|
|
37
|
-
const value = Math.abs(Math.sin((blinkTime * Math.PI) / 2));
|
|
38
|
-
blinkStateRef.current.blinkTime += delta * 10;
|
|
39
|
-
headMesh.morphTargetInfluences[morphIndex] = value;
|
|
40
|
+
const nextBlinkDelay = Math.random() *
|
|
41
|
+
(blinkConfig.maxInterval - blinkConfig.minInterval) +
|
|
42
|
+
blinkConfig.minInterval;
|
|
43
|
+
blinkTimeoutRef.current = setTimeout(blink, nextBlinkDelay);
|
|
44
|
+
}, [blink, blinkConfig.maxInterval, blinkConfig.minInterval]);
|
|
45
|
+
(0, react_1.useEffect)(() => {
|
|
46
|
+
if (enabled) {
|
|
47
|
+
scheduleNextBlink();
|
|
40
48
|
}
|
|
41
|
-
else
|
|
42
|
-
|
|
49
|
+
else {
|
|
50
|
+
if (blinkTimeoutRef.current) {
|
|
51
|
+
clearTimeout(blinkTimeoutRef.current);
|
|
52
|
+
}
|
|
53
|
+
setMorphTargetInfluences((prevInfluences) => ({
|
|
54
|
+
...prevInfluences,
|
|
55
|
+
eyesClosed: 0
|
|
56
|
+
}));
|
|
43
57
|
}
|
|
44
|
-
|
|
58
|
+
return () => {
|
|
59
|
+
if (blinkTimeoutRef.current) {
|
|
60
|
+
clearTimeout(blinkTimeoutRef.current);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}, [enabled, scheduleNextBlink, setMorphTargetInfluences]);
|
|
64
|
+
return {
|
|
65
|
+
isBlinking: isBlinkingRef.current,
|
|
66
|
+
lastBlinkTime: lastBlinkTime.current,
|
|
67
|
+
triggerBlink: blink
|
|
68
|
+
};
|
|
45
69
|
}
|
|
46
|
-
exports.
|
|
70
|
+
exports.useAvatarBlink = useAvatarBlink;
|
|
47
71
|
//# sourceMappingURL=useEyeBlink.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEyeBlink.js","sourceRoot":"","sources":["../../../../../src/components/Avatar/AvatarView/utils/useEyeBlink.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useEyeBlink.js","sourceRoot":"","sources":["../../../../../src/components/Avatar/AvatarView/utils/useEyeBlink.ts"],"names":[],"mappings":";;;AAAA,iCAAuD;AAQvD,MAAM,oBAAoB,GAAgB;IACxC,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE,GAAG;CACnB,CAAC;AAQF,SAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,wBAAwB,EACxB,MAAM,GAAG,EAAE,EACS;IACpB,MAAM,eAAe,GAAG,IAAA,cAAM,GAAkB,CAAC;IACjD,MAAM,aAAa,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,IAAA,cAAM,EAAC,CAAC,CAAC,CAAC;IAEhC,MAAM,WAAW,GAAG;QAClB,GAAG,oBAAoB;QACvB,GAAG,MAAM;KACV,CAAC;IAEF,MAAM,KAAK,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC7B,IAAI,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO;YAAE,OAAO;QAE9C,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;QAE7B,wBAAwB,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;YACvC,GAAG,IAAI;YACP,UAAU,EAAE,CAAC;SACd,CAAC,CAAC,CAAC;QAGJ,UAAU,CAAC,GAAG,EAAE;YACd,wBAAwB,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;gBACvC,GAAG,IAAI;gBACP,UAAU,EAAE,CAAC;aACd,CAAC,CAAC,CAAC;YACJ,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;YAC9B,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAGnC,iBAAiB,EAAE,CAAC;QACtB,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAEnE,MAAM,iBAAiB,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QACzC,IAAI,eAAe,CAAC,OAAO,EAAE;YAC3B,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;SACvC;QAGD,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE;YAClC,CAAC,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;YACnD,WAAW,CAAC,WAAW,CAAC;QAE1B,eAAe,CAAC,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC9D,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;IAG9D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,OAAO,EAAE;YACX,iBAAiB,EAAE,CAAC;SACrB;aAAM;YACL,IAAI,eAAe,CAAC,OAAO,EAAE;gBAC3B,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;aACvC;YAED,wBAAwB,CAAC,CAAC,cAAmB,EAAE,EAAE,CAAC,CAAC;gBACjD,GAAG,cAAc;gBACjB,UAAU,EAAE,CAAC;aACd,CAAC,CAAC,CAAC;SACL;QAGD,OAAO,GAAG,EAAE;YACV,IAAI,eAAe,CAAC,OAAO,EAAE;gBAC3B,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;aACvC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAE3D,OAAO;QACL,UAAU,EAAE,aAAa,CAAC,OAAO;QACjC,aAAa,EAAE,aAAa,CAAC,OAAO;QACpC,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC;AA/ED,wCA+EC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SkinnedMesh } from 'three';
|
|
3
|
+
interface Viseme {
|
|
4
|
+
name: string;
|
|
5
|
+
duration: number;
|
|
6
|
+
weight: number;
|
|
7
|
+
startTime: number;
|
|
8
|
+
}
|
|
9
|
+
interface UseMouthAnimationProps {
|
|
10
|
+
currentVisemes: Viseme[];
|
|
11
|
+
avatarMeshRef: React.RefObject<SkinnedMesh>;
|
|
12
|
+
}
|
|
13
|
+
export declare function useMouthAnimation({ currentVisemes, avatarMeshRef }: UseMouthAnimationProps): {
|
|
14
|
+
handleMouthMovement: (elapsedTime: number) => void;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useMouthAnimation = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const VISEME_SMOOTHING = 0.2;
|
|
6
|
+
const VISEME_SPEED_FACTOR = 0.44;
|
|
7
|
+
const lerp = (start, end, alpha) => {
|
|
8
|
+
return start * (1 - alpha) + end * alpha;
|
|
9
|
+
};
|
|
10
|
+
function useMouthAnimation({ currentVisemes, avatarMeshRef }) {
|
|
11
|
+
const visemeStartTimeRef = (0, react_1.useRef)(0);
|
|
12
|
+
const currentVisemeWeightRef = (0, react_1.useRef)({});
|
|
13
|
+
const getCurrentVisemeInfo = (elapsedTime) => {
|
|
14
|
+
let currentVisemeIndex = 0;
|
|
15
|
+
let accumulatedDuration = 0;
|
|
16
|
+
while (currentVisemeIndex < currentVisemes.length &&
|
|
17
|
+
accumulatedDuration <= elapsedTime) {
|
|
18
|
+
accumulatedDuration += currentVisemes[currentVisemeIndex].duration;
|
|
19
|
+
currentVisemeIndex++;
|
|
20
|
+
}
|
|
21
|
+
return { currentVisemeIndex, accumulatedDuration };
|
|
22
|
+
};
|
|
23
|
+
const applyCurrentViseme = (index, elapsedTime, accumulatedDuration) => {
|
|
24
|
+
var _a, _b, _c;
|
|
25
|
+
const currentViseme = currentVisemes[index - 1];
|
|
26
|
+
const visemeProgress = (elapsedTime - (accumulatedDuration - currentViseme.duration)) / currentViseme.duration;
|
|
27
|
+
const targetWeight = Math.sin(visemeProgress * Math.PI) * currentViseme.weight;
|
|
28
|
+
if (!currentVisemeWeightRef.current[currentViseme.name]) {
|
|
29
|
+
currentVisemeWeightRef.current[currentViseme.name] = 0;
|
|
30
|
+
}
|
|
31
|
+
currentVisemeWeightRef.current[currentViseme.name] = lerp(currentVisemeWeightRef.current[currentViseme.name], targetWeight, VISEME_SMOOTHING);
|
|
32
|
+
const visemeIndex = (_b = (_a = avatarMeshRef.current) === null || _a === void 0 ? void 0 : _a.morphTargetDictionary) === null || _b === void 0 ? void 0 : _b[currentViseme.name];
|
|
33
|
+
if (typeof visemeIndex === 'number' && ((_c = avatarMeshRef.current) === null || _c === void 0 ? void 0 : _c.morphTargetInfluences)) {
|
|
34
|
+
avatarMeshRef.current.morphTargetInfluences[visemeIndex] = currentVisemeWeightRef.current[currentViseme.name];
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const resetVisemeAnimation = (currentTime) => {
|
|
38
|
+
visemeStartTimeRef.current = currentTime;
|
|
39
|
+
currentVisemeWeightRef.current = {};
|
|
40
|
+
};
|
|
41
|
+
const handleMouthMovement = (elapsedTime) => {
|
|
42
|
+
if (currentVisemes.length === 0)
|
|
43
|
+
return;
|
|
44
|
+
const currentTime = elapsedTime * VISEME_SPEED_FACTOR;
|
|
45
|
+
const visemeElapsedTime = currentTime - visemeStartTimeRef.current;
|
|
46
|
+
const { currentVisemeIndex, accumulatedDuration } = getCurrentVisemeInfo(visemeElapsedTime);
|
|
47
|
+
if (currentVisemeIndex > 0) {
|
|
48
|
+
applyCurrentViseme(currentVisemeIndex, visemeElapsedTime, accumulatedDuration);
|
|
49
|
+
}
|
|
50
|
+
if (visemeElapsedTime > accumulatedDuration) {
|
|
51
|
+
resetVisemeAnimation(currentTime);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
return {
|
|
55
|
+
handleMouthMovement,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
exports.useMouthAnimation = useMouthAnimation;
|
|
59
|
+
//# sourceMappingURL=useMouthAnimation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMouthAnimation.js","sourceRoot":"","sources":["../../../../../src/components/Avatar/AvatarView/utils/useMouthAnimation.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ function useSmile(smiling, nodes) {
|
|
|
9
9
|
mouthSmileMorphIndex: 0,
|
|
10
10
|
});
|
|
11
11
|
(0, react_1.useEffect)(() => {
|
|
12
|
-
const headMesh = (nodes.Wolf3D_Head || nodes.
|
|
12
|
+
const headMesh = (nodes.Wolf3D_Head || nodes.Wolf3D_Avatar020 || nodes.Wolf3D_Avatar001);
|
|
13
13
|
smileStateRef.current.headMesh = headMesh;
|
|
14
14
|
if ((headMesh === null || headMesh === void 0 ? void 0 : headMesh.morphTargetDictionary) && (headMesh === null || headMesh === void 0 ? void 0 : headMesh.morphTargetInfluences)) {
|
|
15
15
|
smileStateRef.current.mouthSmileMorphIndex = headMesh.morphTargetDictionary.mouthSmile;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSmile.js","sourceRoot":"","sources":["../../../../../src/components/Avatar/AvatarView/utils/useSmile.ts"],"names":[],"mappings":";;AAEA,iCAA0C;AAC1C,8CAA8C;AAO9C,MAAM,eAAe,GAAG,CAAC,GAAG,CAAC,CAAC;AAE9B,SAAwB,QAAQ,CAAC,OAA4B,EAAE,KAAY;IACzE,MAAM,aAAa,GAAG,IAAA,cAAM,EAAa;QACvC,QAAQ,EAAE,IAAI;QACd,oBAAoB,EAAE,CAAC;KACxB,CAAC,CAAC;IAEH,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"useSmile.js","sourceRoot":"","sources":["../../../../../src/components/Avatar/AvatarView/utils/useSmile.ts"],"names":[],"mappings":";;AAEA,iCAA0C;AAC1C,8CAA8C;AAO9C,MAAM,eAAe,GAAG,CAAC,GAAG,CAAC,CAAC;AAE9B,SAAwB,QAAQ,CAAC,OAA4B,EAAE,KAAY;IACzE,MAAM,aAAa,GAAG,IAAA,cAAM,EAAa;QACvC,QAAQ,EAAE,IAAI;QACd,oBAAoB,EAAE,CAAC;KACxB,CAAC,CAAC;IAEH,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAgB,CAAC;QACxG,aAAa,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAE1C,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,qBAAqB,MAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,qBAAqB,CAAA,EAAE;YACtE,aAAa,CAAC,OAAO,CAAC,oBAAoB,GAAG,QAAQ,CAAC,qBAAqB,CAAC,UAAU,CAAC;SACxF;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,IAAA,gBAAQ,EAAC,GAAG,EAAE;QACZ,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC;QAEjE,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,qBAAqB,CAAA;YAAE,OAAO;QAE7C,MAAM,oBAAoB,GAAG,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,qBAAqB,GAAG,QAAQ,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;QAGnF,QAAQ,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,IAAI,CAAC,oBAAoB,GAAG,qBAAqB,CAAC,GAAG,GAAG,CAAC;IAC/G,CAAC,CAAC,CAAC;AACL,CAAC;AA1BD,2BA0BC"}
|
|
@@ -14,13 +14,12 @@ const FeedbackButtons_1 = tslib_1.__importDefault(require("../FeedbackButtons/Fe
|
|
|
14
14
|
const react_i18next_1 = require("react-i18next");
|
|
15
15
|
const marked_1 = require("marked");
|
|
16
16
|
const dompurify_1 = tslib_1.__importDefault(require("dompurify"));
|
|
17
|
-
const utils_1 = require("../../helpers/utils");
|
|
18
17
|
const Button_1 = tslib_1.__importDefault(require("../ui/Button"));
|
|
19
18
|
const QuestionHelp_1 = tslib_1.__importDefault(require("../icons/QuestionHelp"));
|
|
20
19
|
const Copy_1 = tslib_1.__importDefault(require("../icons/Copy"));
|
|
21
20
|
const Code_1 = tslib_1.__importDefault(require("../icons/Code"));
|
|
22
21
|
const WhyThisAnswer_1 = tslib_1.__importDefault(require("../WhyThisAnswer/WhyThisAnswer"));
|
|
23
|
-
const
|
|
22
|
+
const utils_1 = require("../../helpers/utils");
|
|
24
23
|
const marked_linkify_it_1 = tslib_1.__importDefault(require("marked-linkify-it"));
|
|
25
24
|
const marked_katex_extension_1 = tslib_1.__importDefault(require("marked-katex-extension"));
|
|
26
25
|
const markedExtendedTables_1 = tslib_1.__importDefault(require("../../helpers/markedExtendedTables"));
|
|
@@ -85,7 +84,7 @@ const ChatBubble = ({ message, memori, tenant, baseUrl, apiUrl, sessionID, showF
|
|
|
85
84
|
const renderedText = message.fromUser ? text : renderMsg(text);
|
|
86
85
|
const plainText = message.fromUser
|
|
87
86
|
? text
|
|
88
|
-
: (0,
|
|
87
|
+
: (0, utils_1.stripHTML)((0, utils_1.stripOutputTags)(renderedText));
|
|
89
88
|
(0, react_1.useLayoutEffect)(() => {
|
|
90
89
|
if (typeof window !== 'undefined' && !message.fromUser) {
|
|
91
90
|
if ('MathJax' in window && window.MathJax.typesetPromise)
|