@memori.ai/memori-react 7.19.1 → 7.21.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 (145) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/dist/components/Avatar/Avatar.js +3 -3
  3. package/dist/components/Avatar/Avatar.js.map +1 -1
  4. package/dist/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.d.ts +3 -2
  5. package/dist/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.js +13 -6
  6. package/dist/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.js.map +1 -1
  7. package/dist/components/Avatar/AvatarView/AvatarComponent/avatarComponent.d.ts +14 -18
  8. package/dist/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js +19 -77
  9. package/dist/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js.map +1 -1
  10. package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.d.ts +17 -2
  11. package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js +95 -70
  12. package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js.map +1 -1
  13. package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/AvatarAnimator.d.ts +65 -0
  14. package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/AvatarAnimator.js +747 -0
  15. package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/AvatarAnimator.js.map +1 -0
  16. package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.d.ts +9 -2
  17. package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js +60 -2
  18. package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js.map +1 -1
  19. package/dist/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.d.ts +3 -4
  20. package/dist/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js +5 -11
  21. package/dist/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js.map +1 -1
  22. package/dist/components/Avatar/AvatarView/AvatarComponent/constants.d.ts +13 -52
  23. package/dist/components/Avatar/AvatarView/AvatarComponent/constants.js +68 -70
  24. package/dist/components/Avatar/AvatarView/AvatarComponent/constants.js.map +1 -1
  25. package/dist/components/Avatar/AvatarView/index.d.ts +1 -1
  26. package/dist/components/Avatar/AvatarView/index.js +2 -2
  27. package/dist/components/Avatar/AvatarView/index.js.map +1 -1
  28. package/dist/components/Chat/Chat.js +2 -2
  29. package/dist/components/Chat/Chat.js.map +1 -1
  30. package/dist/components/ChatBubble/ChatBubble.js +12 -9
  31. package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
  32. package/dist/components/ExpertsDrawer/ExpertsDrawer.js +1 -1
  33. package/dist/components/ExpertsDrawer/ExpertsDrawer.js.map +1 -1
  34. package/dist/components/LoginDrawer/LoginDrawer.js +6 -6
  35. package/dist/components/LoginDrawer/LoginDrawer.js.map +1 -1
  36. package/dist/components/MemoriWidget/MemoriWidget.js +143 -64
  37. package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
  38. package/dist/components/SignupForm/SignupForm.js +4 -4
  39. package/dist/components/SignupForm/SignupForm.js.map +1 -1
  40. package/dist/components/StartPanel/StartPanel.js +5 -5
  41. package/dist/components/StartPanel/StartPanel.js.map +1 -1
  42. package/dist/components/UploadButton/UploadButton.js +2 -2
  43. package/dist/components/UploadButton/UploadButton.js.map +1 -1
  44. package/dist/components/WhyThisAnswer/WhyThisAnswer.css +43 -0
  45. package/dist/components/WhyThisAnswer/WhyThisAnswer.js +2 -1
  46. package/dist/components/WhyThisAnswer/WhyThisAnswer.js.map +1 -1
  47. package/dist/context/visemeContext.js +0 -39
  48. package/dist/context/visemeContext.js.map +1 -1
  49. package/dist/index.js +4 -3
  50. package/dist/index.js.map +1 -1
  51. package/dist/locales/de.json +1 -0
  52. package/dist/locales/en.json +1 -0
  53. package/dist/locales/es.json +1 -0
  54. package/dist/locales/fr.json +1 -0
  55. package/dist/locales/it.json +1 -0
  56. package/esm/components/Avatar/Avatar.js +3 -3
  57. package/esm/components/Avatar/Avatar.js.map +1 -1
  58. package/esm/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.d.ts +3 -2
  59. package/esm/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.js +13 -6
  60. package/esm/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.js.map +1 -1
  61. package/esm/components/Avatar/AvatarView/AvatarComponent/avatarComponent.d.ts +14 -18
  62. package/esm/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js +20 -78
  63. package/esm/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js.map +1 -1
  64. package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.d.ts +17 -2
  65. package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js +99 -74
  66. package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js.map +1 -1
  67. package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/AvatarAnimator.d.ts +65 -0
  68. package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/AvatarAnimator.js +743 -0
  69. package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/AvatarAnimator.js.map +1 -0
  70. package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.d.ts +9 -2
  71. package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js +61 -3
  72. package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js.map +1 -1
  73. package/esm/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.d.ts +3 -4
  74. package/esm/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js +5 -11
  75. package/esm/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js.map +1 -1
  76. package/esm/components/Avatar/AvatarView/AvatarComponent/constants.d.ts +13 -52
  77. package/esm/components/Avatar/AvatarView/AvatarComponent/constants.js +67 -69
  78. package/esm/components/Avatar/AvatarView/AvatarComponent/constants.js.map +1 -1
  79. package/esm/components/Avatar/AvatarView/index.d.ts +1 -1
  80. package/esm/components/Avatar/AvatarView/index.js +2 -2
  81. package/esm/components/Avatar/AvatarView/index.js.map +1 -1
  82. package/esm/components/Chat/Chat.js +2 -2
  83. package/esm/components/Chat/Chat.js.map +1 -1
  84. package/esm/components/ChatBubble/ChatBubble.js +12 -9
  85. package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
  86. package/esm/components/ExpertsDrawer/ExpertsDrawer.js +1 -1
  87. package/esm/components/ExpertsDrawer/ExpertsDrawer.js.map +1 -1
  88. package/esm/components/LoginDrawer/LoginDrawer.js +6 -6
  89. package/esm/components/LoginDrawer/LoginDrawer.js.map +1 -1
  90. package/esm/components/MemoriWidget/MemoriWidget.js +143 -64
  91. package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
  92. package/esm/components/SignupForm/SignupForm.js +4 -4
  93. package/esm/components/SignupForm/SignupForm.js.map +1 -1
  94. package/esm/components/StartPanel/StartPanel.js +5 -5
  95. package/esm/components/StartPanel/StartPanel.js.map +1 -1
  96. package/esm/components/UploadButton/UploadButton.js +2 -2
  97. package/esm/components/UploadButton/UploadButton.js.map +1 -1
  98. package/esm/components/WhyThisAnswer/WhyThisAnswer.css +43 -0
  99. package/esm/components/WhyThisAnswer/WhyThisAnswer.js +2 -1
  100. package/esm/components/WhyThisAnswer/WhyThisAnswer.js.map +1 -1
  101. package/esm/context/visemeContext.js +0 -39
  102. package/esm/context/visemeContext.js.map +1 -1
  103. package/esm/index.js +4 -3
  104. package/esm/index.js.map +1 -1
  105. package/esm/locales/de.json +1 -0
  106. package/esm/locales/en.json +1 -0
  107. package/esm/locales/es.json +1 -0
  108. package/esm/locales/fr.json +1 -0
  109. package/esm/locales/it.json +1 -0
  110. package/package.json +2 -2
  111. package/src/components/Avatar/Avatar.tsx +3 -3
  112. package/src/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.tsx +15 -8
  113. package/src/components/Avatar/AvatarView/AvatarComponent/avatarComponent.tsx +64 -219
  114. package/src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.tsx +221 -124
  115. package/src/components/Avatar/AvatarView/AvatarComponent/components/controllers/AvatarAnimator.ts +1250 -0
  116. package/src/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.ts +164 -8
  117. package/src/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.tsx +19 -17
  118. package/src/components/Avatar/AvatarView/AvatarComponent/constants.ts +80 -79
  119. package/src/components/Avatar/AvatarView/index.tsx +1 -7
  120. package/src/components/Chat/Chat.tsx +2 -2
  121. package/src/components/ChatBubble/ChatBubble.tsx +37 -26
  122. package/src/components/ExpertsDrawer/ExpertsDrawer.tsx +1 -1
  123. package/src/components/LoginDrawer/LoginDrawer.tsx +6 -6
  124. package/src/components/MemoriWidget/MemoriWidget.tsx +184 -78
  125. package/src/components/SignupForm/SignupForm.tsx +5 -5
  126. package/src/components/StartPanel/StartPanel.tsx +5 -5
  127. package/src/components/UploadButton/UploadButton.tsx +4 -4
  128. package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +1 -1
  129. package/src/components/WhyThisAnswer/WhyThisAnswer.css +43 -0
  130. package/src/components/WhyThisAnswer/WhyThisAnswer.stories.tsx +44 -3
  131. package/src/components/WhyThisAnswer/WhyThisAnswer.test.tsx +128 -8
  132. package/src/components/WhyThisAnswer/WhyThisAnswer.tsx +28 -3
  133. package/src/components/WhyThisAnswer/__snapshots__/WhyThisAnswer.test.tsx.snap +15 -1
  134. package/src/components/layouts/layouts.stories.tsx +0 -8
  135. package/src/context/visemeContext.tsx +40 -41
  136. package/src/index.stories.tsx +63 -65
  137. package/src/index.tsx +5 -3
  138. package/src/locales/de.json +1 -0
  139. package/src/locales/en.json +1 -0
  140. package/src/locales/es.json +1 -0
  141. package/src/locales/fr.json +1 -0
  142. package/src/locales/it.json +1 -0
  143. package/src/mocks/data.ts +3 -9
  144. package/src/components/Avatar/AvatarView/AvatarComponent/components/controllers/AnimationController.ts +0 -308
  145. package/src/helpers/tenant.ts +0 -47
@@ -1,94 +1,36 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useEffect, useCallback } from 'react';
3
- import AnimationControlPanel from './components/controls';
2
+ import { useRef, useEffect, useCallback, memo } from 'react';
4
3
  import { FullbodyAvatar } from './components/FullbodyAvatar/fullbodyAvatar';
5
4
  import HalfBodyAvatar from './components/halfbodyAvatar';
6
- import { BASE_ACTIONS, MAPPING_BLEND_SHAPE_TO_EMOTION_CUSTOM_GLB, MAPPING_BLEND_SHAPE_TO_EMOTION_RPM, } from './constants';
7
- export const AvatarView = ({ stopProcessing, chatEmission, showControls, animation, url, sex, eyeBlink, headMovement, halfBody, loading, avatarHeight = 50, avatarDepth = -50, updateCurrentViseme, resetVisemeQueue, setCameraZ, }) => {
8
- const [currentBaseAction, setCurrentBaseAction] = useState({
9
- action: animation || 'Idle1',
10
- weight: 1,
11
- });
12
- const [morphTargetInfluences, setMorphTargetInfluences] = useState({});
13
- const [morphTargetDictionary, setMorphTargetDictionary] = useState({});
14
- const [emotionMorphTargets, setEmotionMorphTargets] = useState({});
15
- const [isRPM, setIsRPM] = useState(false);
16
- const [timeScale, setTimeScale] = useState(0.8);
17
- const emotionMap = {
18
- Joy: { Joy: 1 },
19
- Anger: { Anger: 1 },
20
- Surprise: { Surprise: 1 },
21
- Sadness: { Sadness: 1 },
22
- Fear: { Fear: 1 },
23
- };
24
- const getDefaultEmotions = () => Object.keys(emotionMap).reduce((acc, key) => ({ ...acc, [key]: 0 }), {});
25
- const handleRPMBlendShape = useCallback((outputContent) => MAPPING_BLEND_SHAPE_TO_EMOTION_RPM[outputContent], []);
26
- const handleCustomGLBBlendShape = useCallback((outputContent) => MAPPING_BLEND_SHAPE_TO_EMOTION_CUSTOM_GLB[outputContent], []);
27
- const setEmotionMorphTargetInfluences = useCallback((action, outputContent) => {
28
- if (action.startsWith('Loading'))
29
- return;
30
- const defaultEmotions = getDefaultEmotions();
31
- if (outputContent === 'default') {
32
- setEmotionMorphTargets(defaultEmotions);
33
- return;
34
- }
35
- if (isRPM) {
36
- const emotion = handleRPMBlendShape(outputContent);
37
- setEmotionMorphTargets(_ => ({ ...defaultEmotions, ...emotion }));
38
- }
39
- else {
40
- const emotion = handleCustomGLBBlendShape(outputContent);
41
- const emotionValues = emotion === 'default' ? defaultEmotions : emotionMap[emotion];
42
- setEmotionMorphTargets(_ => ({ ...defaultEmotions, ...emotionValues }));
5
+ const MemoizedFullbodyAvatar = memo(FullbodyAvatar);
6
+ const MemoizedHalfBodyAvatar = memo(HalfBodyAvatar);
7
+ export const AvatarView = ({ chatEmission, url, sex, eyeBlink, halfBody, loading, avatarHeight = 50, avatarDepth = -50, updateCurrentViseme, setCameraZ, headMovement, showControls, }) => {
8
+ const animatorRef = useRef(null);
9
+ const setAnimatorRef = useCallback((animator) => {
10
+ if (animator !== animatorRef.current) {
11
+ console.log('[AvatarView] Animator reference updated');
12
+ animatorRef.current = animator;
43
13
  }
44
- }, [isRPM, handleRPMBlendShape, handleCustomGLBBlendShape]);
45
- const onBaseActionChange = useCallback((action, outputContent) => {
46
- setEmotionMorphTargetInfluences(action, outputContent);
47
- setCurrentBaseAction({ action, weight: 1 });
48
- }, [setEmotionMorphTargetInfluences]);
49
- const onMorphTargetInfluencesChange = useCallback((influences) => {
50
- setMorphTargetInfluences(prev => ({ ...prev, ...influences }));
51
- }, []);
52
- const onMorphTargetDictionaryChange = useCallback((dictionary) => {
53
- setMorphTargetDictionary(dictionary);
54
14
  }, []);
55
15
  useEffect(() => {
56
- var _a, _b, _c, _d;
57
- if (loading) {
58
- const randomNumber = Math.floor(Math.random() * 3) + 1;
59
- onBaseActionChange(`Loading${randomNumber}`, '');
16
+ if (!animatorRef.current)
60
17
  return;
18
+ try {
19
+ animatorRef.current.processChatEmission(chatEmission, loading);
61
20
  }
62
- const hasOutputTagEmotion = chatEmission === null || chatEmission === void 0 ? void 0 : chatEmission.includes('<output class="memori-emotion">');
63
- const outputContentEmotion = hasOutputTagEmotion
64
- ? (_b = (_a = chatEmission === null || chatEmission === void 0 ? void 0 : chatEmission.split('<output class="memori-emotion">')[1]) === null || _a === void 0 ? void 0 : _a.split('</output>')[0]) === null || _b === void 0 ? void 0 : _b.trim()
65
- : null;
66
- const hasOutputTagSequence = chatEmission === null || chatEmission === void 0 ? void 0 : chatEmission.includes('<output class="animation-sequence">');
67
- const outputContentSequence = hasOutputTagSequence
68
- ? (_d = (_c = chatEmission === null || chatEmission === void 0 ? void 0 : chatEmission.split('<output class="animation-sequence">')[1]) === null || _c === void 0 ? void 0 : _c.split('</output>')[0]) === null || _d === void 0 ? void 0 : _d.trim()
69
- : null;
70
- if (outputContentSequence && outputContentSequence.includes('->')) {
71
- onBaseActionChange(outputContentSequence, outputContentSequence);
72
- }
73
- else if (outputContentEmotion) {
74
- console.log('[AvatarView] outputContentEmotion:', outputContentEmotion);
75
- const randomNumber = Math.floor(Math.random() * 3) + 1;
76
- onBaseActionChange(`${outputContentEmotion}${randomNumber}`, outputContentEmotion);
77
- }
78
- else {
79
- const randomNumber = Math.floor(Math.random() * 5) + 1;
80
- onBaseActionChange(`Idle${randomNumber === 3 ? 4 : randomNumber}`, '');
21
+ catch (error) {
22
+ console.error('Error processing chat emission:', error);
81
23
  }
82
- }, [chatEmission, loading, onBaseActionChange]);
83
- const commonAvatarProps = {
24
+ }, [loading, chatEmission]);
25
+ const commonAvatarProps = useCallback(() => ({
84
26
  url,
85
27
  onCameraZChange: setCameraZ,
86
- setMorphTargetInfluences,
87
- setMorphTargetDictionary,
88
28
  updateCurrentViseme,
89
29
  avatarHeight,
90
30
  avatarDepth,
91
- };
92
- return (_jsxs(_Fragment, { children: [showControls && (_jsx(AnimationControlPanel, { timeScale: timeScale, morphTargetDictionary: morphTargetDictionary, onBaseActionChange: onBaseActionChange, onMorphTargetInfluencesChange: onMorphTargetInfluencesChange, onMorphTargetDictionaryChange: onMorphTargetDictionaryChange, baseActions: BASE_ACTIONS, currentBaseAction: currentBaseAction, modifyTimeScale: setTimeScale })), halfBody ? (_jsx(HalfBodyAvatar, { ...commonAvatarProps, headMovement: headMovement })) : (_jsx(FullbodyAvatar, { ...commonAvatarProps, sex: sex, setIsRpm: setIsRPM, resetVisemeQueue: resetVisemeQueue, eyeBlink: eyeBlink, currentBaseAction: currentBaseAction, timeScale: timeScale, morphTargetInfluences: morphTargetInfluences, stopProcessing: stopProcessing, emotionMorphTargets: emotionMorphTargets, halfBody: halfBody }))] }));
31
+ setAnimatorRef,
32
+ }), [url, setCameraZ, updateCurrentViseme, avatarHeight, avatarDepth, setAnimatorRef]);
33
+ return (_jsxs(_Fragment, { children: [halfBody ? (_jsx(MemoizedHalfBodyAvatar, { ...commonAvatarProps(), eyeBlink: eyeBlink, headMovement: headMovement })) : (_jsx(MemoizedFullbodyAvatar, { ...commonAvatarProps(), sex: sex, eyeBlink: eyeBlink, chatEmission: chatEmission, loading: loading })), showControls && animatorRef.current && (_jsx("div", { className: "animation-controls" }))] }));
93
34
  };
35
+ export default memo(AvatarView);
94
36
  //# sourceMappingURL=avatarComponent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"avatarComponent.js","sourceRoot":"","sources":["../../../../../src/components/Avatar/AvatarView/AvatarComponent/avatarComponent.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"avatarComponent.js","sourceRoot":"","sources":["../../../../../src/components/Avatar/AvatarView/AvatarComponent/avatarComponent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,cAAc,MAAM,6BAA6B,CAAC;AAqBzD,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AAGpD,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,YAAY,EACZ,GAAG,EACH,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,YAAY,GAAG,EAAE,EACjB,WAAW,GAAG,CAAC,EAAE,EACjB,mBAAmB,EACnB,UAAU,EACV,YAAY,EAEZ,YAAY,GACI,EAAE,EAAE;IAEpB,MAAM,WAAW,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAGxD,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,QAA+B,EAAE,EAAE;QACrE,IAAI,QAAQ,KAAK,WAAW,CAAC,OAAO,EAAE;YACpC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;SAChC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAIP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO;QAEjC,IAAI;YAEF,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;SAChE;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;SACzD;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAG5B,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3C,GAAG;QACH,eAAe,EAAE,UAAU;QAC3B,mBAAmB;QACnB,YAAY;QACZ,WAAW;QACX,cAAc;KACf,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,mBAAmB,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IAGvF,OAAO,CACL,8BACG,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,sBAAsB,OACjB,iBAAiB,EAAE,EACvB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,GAC1B,CACH,CAAC,CAAC,CAAC,CACF,KAAC,sBAAsB,OACjB,iBAAiB,EAAE,EACvB,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,OAAO,GAChB,CACH,EACA,YAAY,IAAI,WAAW,CAAC,OAAO,IAAI,CACtC,cAAK,SAAS,EAAC,oBAAoB,GAE7B,CACP,IACA,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC,UAAU,CAAC,CAAC"}
@@ -1,2 +1,17 @@
1
- import { FullbodyAvatarProps } from './types';
2
- export declare function FullbodyAvatar({ url, sex, setIsRpm, currentBaseAction, timeScale, eyeBlink, updateCurrentViseme, setMorphTargetDictionary, setMorphTargetInfluences, emotionMorphTargets, avatarHeight, avatarDepth, onCameraZChange, }: FullbodyAvatarProps): JSX.Element;
1
+ import { AvatarAnimator } from '../controllers/AvatarAnimator';
2
+ export interface FullbodyAvatarProps {
3
+ url: string;
4
+ sex: 'MALE' | 'FEMALE';
5
+ eyeBlink: boolean;
6
+ updateCurrentViseme: (currentTime: number) => {
7
+ name: string;
8
+ weight: number;
9
+ } | null;
10
+ avatarHeight?: number;
11
+ avatarDepth?: number;
12
+ onCameraZChange?: (value: number) => void;
13
+ chatEmission: any;
14
+ loading: boolean;
15
+ setAnimatorRef?: (animator: AvatarAnimator | null) => void;
16
+ }
17
+ export declare function FullbodyAvatar({ url, sex, eyeBlink, updateCurrentViseme, avatarHeight, avatarDepth, onCameraZChange, chatEmission, loading, setAnimatorRef, }: FullbodyAvatarProps): JSX.Element;
@@ -1,27 +1,38 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useEffect, useRef, useMemo } from 'react';
3
- import { AnimationMixer, SkinnedMesh } from 'three';
4
- import { useAnimations, useGLTF } from '@react-three/drei';
2
+ import { useEffect, useRef, useMemo, useCallback, useState } from 'react';
3
+ import { SkinnedMesh } from 'three';
4
+ import { useGLTF, useAnimations } from '@react-three/drei';
5
5
  import { useFrame } from '@react-three/fiber';
6
- import { AnimationState } from './types';
7
- import { AnimationController } from '../controllers/AnimationController';
8
6
  import { MorphTargetController } from '../controllers/MorphTargetController';
9
7
  import { AvatarPositionController } from '../controllers/AvatarPositionController';
10
- import { AVATAR_POSITION, AVATAR_ROTATION, ANIMATION_URLS, DEFAULT_CONFIG, SCALE_LERP_FACTOR, } from '../../constants';
8
+ import { AvatarAnimator } from '../controllers/AvatarAnimator';
9
+ import { ANIMATION_URLS, AVATAR_POSITION, AVATAR_ROTATION, SCALE_LERP_FACTOR, } from '../../constants';
11
10
  import DynamicShadow from '../../Shadow/DynamicShadow';
12
- export function FullbodyAvatar({ url, sex, setIsRpm, currentBaseAction, timeScale, eyeBlink, updateCurrentViseme, setMorphTargetDictionary, setMorphTargetInfluences, emotionMorphTargets, avatarHeight = 50, avatarDepth = 0, onCameraZChange, }) {
13
- const { scene } = useGLTF(url);
14
- const { animations: baseAnimations } = useGLTF(url);
11
+ export function FullbodyAvatar({ url, sex, eyeBlink, updateCurrentViseme, avatarHeight = 50, avatarDepth = 0, onCameraZChange, chatEmission, loading, setAnimatorRef, }) {
12
+ const { scene, animations: baseAnimations } = useGLTF(url);
15
13
  const { animations: additionalAnimations } = useGLTF(ANIMATION_URLS[sex]);
16
- const mergedAnimations = useMemo(() => [...baseAnimations, ...additionalAnimations], [baseAnimations, additionalAnimations]);
14
+ const needsAdditionalAnimations = useMemo(() => {
15
+ let found = false;
16
+ scene.traverse((object) => {
17
+ if (object instanceof SkinnedMesh &&
18
+ (object.name === 'GBNL__Head' ||
19
+ object.name === 'Wolf3D_Avatar' ||
20
+ object.name === 'Wolf3D_Avatar006_1')) {
21
+ found = true;
22
+ }
23
+ });
24
+ return found;
25
+ }, [scene]);
26
+ const mergedAnimations = useMemo(() => needsAdditionalAnimations ? [...baseAnimations, ...additionalAnimations] : baseAnimations, [baseAnimations, additionalAnimations, needsAdditionalAnimations]);
17
27
  const { actions } = useAnimations(mergedAnimations, scene);
18
- const animationControllerRef = useRef();
19
- const morphTargetControllerRef = useRef();
20
- const positionControllerRef = useRef();
28
+ const morphTargetControllerRef = useRef(null);
29
+ const positionControllerRef = useRef(null);
30
+ const animatorRef = useRef(null);
31
+ const isInitializedRef = useRef(false);
21
32
  const lastPositionRef = useRef(AVATAR_POSITION.clone());
22
33
  const positionUpdateThrottleRef = useRef(0);
23
34
  const POSITION_UPDATE_INTERVAL = 1;
24
- const POSITION_THRESHOLD = 0.000001;
35
+ const [isRpm, setIsRpm] = useState(false);
25
36
  const blinkStateRef = useRef({
26
37
  isBlinking: false,
27
38
  lastBlinkTime: 0,
@@ -29,27 +40,35 @@ export function FullbodyAvatar({ url, sex, setIsRpm, currentBaseAction, timeScal
29
40
  blinkStartTime: 0,
30
41
  });
31
42
  useEffect(() => {
32
- if (!positionControllerRef.current) {
33
- positionControllerRef.current = new AvatarPositionController(AVATAR_POSITION);
34
- }
35
- if (!actions || !scene)
43
+ if (!scene)
36
44
  return;
37
- const mixer = new AnimationMixer(scene);
38
- animationControllerRef.current = new AnimationController(mixer, actions, { ...DEFAULT_CONFIG });
45
+ let headMesh = null;
46
+ scene.traverse((object) => {
47
+ if (object instanceof SkinnedMesh &&
48
+ (object.name === 'GBNL__Head' ||
49
+ object.name === 'Wolf3D_Avatar' ||
50
+ object.name === 'Wolf3D_Avatar006_1')) {
51
+ if (object.name === 'Wolf3D_Avatar' ||
52
+ object.name === 'Wolf3D_Avatar006_1') {
53
+ setIsRpm(true);
54
+ console.log('RPM avatar detected');
55
+ }
56
+ headMesh = object;
57
+ }
58
+ });
39
59
  if (headMesh) {
40
- morphTargetControllerRef.current = new MorphTargetController(headMesh);
41
- if (headMesh.morphTargetDictionary && headMesh.morphTargetInfluences) {
42
- setMorphTargetDictionary(headMesh.morphTargetDictionary);
43
- const initialInfluences = Object.keys(headMesh.morphTargetDictionary)
44
- .reduce((acc, key) => ({ ...acc, [key]: 0 }), {});
45
- setMorphTargetInfluences(initialInfluences);
60
+ if (!morphTargetControllerRef.current) {
61
+ morphTargetControllerRef.current = new MorphTargetController(headMesh);
46
62
  }
47
63
  }
48
- const initialPosition = AVATAR_POSITION.clone();
49
- initialPosition.setX(Number(initialPosition.x.toFixed(6)));
50
- initialPosition.setY(Number(initialPosition.y.toFixed(6)));
51
- initialPosition.setZ(Number(initialPosition.z.toFixed(6)));
52
- }, [actions, scene]);
64
+ }, [scene]);
65
+ useEffect(() => {
66
+ if (!positionControllerRef.current) {
67
+ positionControllerRef.current = new AvatarPositionController(AVATAR_POSITION);
68
+ }
69
+ return () => {
70
+ };
71
+ }, []);
53
72
  useEffect(() => {
54
73
  if (positionControllerRef.current) {
55
74
  positionControllerRef.current.updateHeight(avatarHeight, false);
@@ -61,69 +80,75 @@ export function FullbodyAvatar({ url, sex, setIsRpm, currentBaseAction, timeScal
61
80
  onCameraZChange(newCameraZ);
62
81
  }
63
82
  }, [avatarDepth, onCameraZChange]);
64
- const headMesh = useMemo(() => {
65
- let foundMesh;
66
- scene === null || scene === void 0 ? void 0 : scene.traverse((object) => {
67
- if (object instanceof SkinnedMesh &&
68
- (object.name === 'GBNL__Head' || object.name === 'Wolf3D_Avatar' || object.name === 'Wolf3D_Avatar006_1')) {
69
- if (object.name === 'GBNL__Head') {
70
- setIsRpm(false);
71
- }
72
- else {
73
- setIsRpm(true);
74
- }
75
- foundMesh = object;
76
- }
77
- });
78
- return foundMesh;
79
- }, [scene]);
80
83
  useEffect(() => {
81
- if (!animationControllerRef.current)
84
+ if (!scene || !actions || isInitializedRef.current) {
82
85
  return;
83
- if (currentBaseAction.action.startsWith('Loading')) {
84
- animationControllerRef.current.updateIsChatAlreadyStarted(true);
85
- animationControllerRef.current.transitionTo(AnimationState.LOADING, currentBaseAction.action);
86
86
  }
87
- else if (currentBaseAction.action.includes('->')) {
88
- animationControllerRef.current.playSequence(currentBaseAction.action);
87
+ console.log('Initializing animator');
88
+ if (!animatorRef.current) {
89
+ animatorRef.current = new AvatarAnimator();
89
90
  }
90
- else if (currentBaseAction.action.startsWith('Idle')) {
91
- animationControllerRef.current.transitionTo(AnimationState.IDLE);
92
- }
93
- else {
94
- animationControllerRef.current.transitionTo(AnimationState.EMOTION, currentBaseAction.action);
95
- }
96
- }, [currentBaseAction]);
97
- useEffect(() => {
98
- var _a;
99
- (_a = animationControllerRef.current) === null || _a === void 0 ? void 0 : _a.setTimeScale(timeScale);
100
- }, [timeScale]);
101
- useFrame((state, delta) => {
102
- var _a;
91
+ const animator = animatorRef.current;
92
+ const initWithPreloadedAnimations = async () => {
93
+ try {
94
+ if (animator.isInitialized()) {
95
+ console.log('Animator already initialized, skipping initialization');
96
+ return;
97
+ }
98
+ await animator.initialize(scene, actions, mergedAnimations, isRpm ? 'RPM' : 'CUSTOM_GLB');
99
+ console.log('AvatarAnimator initialized with', Object.keys(actions).length, 'animations');
100
+ if (setAnimatorRef) {
101
+ setAnimatorRef(animator);
102
+ }
103
+ isInitializedRef.current = true;
104
+ animator.setTimeScale(0.8);
105
+ }
106
+ catch (error) {
107
+ console.error('Error initializing AvatarAnimator:', error);
108
+ }
109
+ };
110
+ initWithPreloadedAnimations();
111
+ return () => {
112
+ if (animatorRef.current && isInitializedRef.current) {
113
+ console.log('Cleaning up animator');
114
+ if ('mixer' in animatorRef.current && animatorRef.current['mixer']) {
115
+ animatorRef.current['mixer'].stopAllAction();
116
+ }
117
+ if (setAnimatorRef) {
118
+ setAnimatorRef(null);
119
+ }
120
+ isInitializedRef.current = false;
121
+ }
122
+ };
123
+ }, [scene, actions, mergedAnimations, sex, setAnimatorRef]);
124
+ const frameCallback = useCallback((state, delta) => {
103
125
  const currentTime = state.clock.elapsedTime * 1000;
104
- (_a = animationControllerRef.current) === null || _a === void 0 ? void 0 : _a.update(delta);
126
+ if (animatorRef.current && isInitializedRef.current) {
127
+ animatorRef.current.update(delta);
128
+ }
105
129
  if (morphTargetControllerRef.current) {
106
130
  const currentViseme = updateCurrentViseme(currentTime / 1000);
107
- morphTargetControllerRef.current.updateMorphTargets(currentTime, emotionMorphTargets, currentViseme, eyeBlink || false, blinkStateRef.current);
131
+ morphTargetControllerRef.current.updateMorphTargets(currentTime, chatEmission, loading, currentViseme, eyeBlink, blinkStateRef.current);
108
132
  }
109
133
  if (scene && positionControllerRef.current) {
110
134
  const newScale = positionControllerRef.current.updateScale(SCALE_LERP_FACTOR);
111
135
  scene.scale.copy(newScale);
112
- if (currentTime - positionUpdateThrottleRef.current >= POSITION_UPDATE_INTERVAL) {
136
+ if (currentTime - positionUpdateThrottleRef.current >=
137
+ POSITION_UPDATE_INTERVAL) {
113
138
  const currentPosition = positionControllerRef.current.getPosition();
114
139
  currentPosition.setX(Number(currentPosition.x.toFixed(6)));
115
140
  currentPosition.setY(Number(currentPosition.y.toFixed(6)));
116
141
  currentPosition.setZ(Number(currentPosition.z.toFixed(6)));
117
- const positionDelta = currentPosition.distanceTo(lastPositionRef.current);
118
142
  lastPositionRef.current.copy(currentPosition);
119
143
  positionUpdateThrottleRef.current = currentTime;
120
144
  }
121
145
  }
122
- });
146
+ }, [scene, updateCurrentViseme, chatEmission, loading, eyeBlink]);
147
+ useFrame(frameCallback);
123
148
  const position = useMemo(() => {
124
149
  var _a;
125
- return ((_a = positionControllerRef.current) === null || _a === void 0 ? void 0 : _a.getPosition()) || AVATAR_POSITION.clone();
126
- }, [positionControllerRef.current]);
127
- return (_jsxs(_Fragment, { children: [_jsx(DynamicShadow, { currentBaseAction: currentBaseAction, avatarPosition: position }), _jsx("group", { position: position, rotation: AVATAR_ROTATION, children: _jsx("primitive", { object: scene }) })] }));
150
+ return (((_a = positionControllerRef.current) === null || _a === void 0 ? void 0 : _a.getPosition()) || AVATAR_POSITION.clone());
151
+ }, []);
152
+ return (_jsxs(_Fragment, { children: [_jsx(DynamicShadow, { animator: animatorRef.current, avatarPosition: position }), _jsx("group", { position: position, rotation: AVATAR_ROTATION, children: _jsx("primitive", { object: scene }) })] }));
128
153
  }
129
154
  //# sourceMappingURL=fullbodyAvatar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fullbodyAvatar.js","sourceRoot":"","sources":["../../../../../../../src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fullbodyAvatar.js","sourceRoot":"","sources":["../../../../../../../src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { AnimationAction, AnimationClip, Scene } from 'three';
2
+ export type AnimationCategory = 'IDLE' | 'LOADING' | 'ACTION';
3
+ export interface AnimationInfo {
4
+ name: string;
5
+ category: AnimationCategory;
6
+ duration: number;
7
+ canLoop: boolean;
8
+ defaultLoopCount: number;
9
+ }
10
+ export interface AnimationPlayOptions {
11
+ fadeInDuration?: number;
12
+ fadeOutDuration?: number;
13
+ timeScale?: number;
14
+ loopCount?: number;
15
+ fallbackToIdle?: boolean;
16
+ }
17
+ export declare class AvatarAnimator {
18
+ private mixer;
19
+ private actions;
20
+ private animations;
21
+ private currentAnimation;
22
+ private currentSequence;
23
+ private sequenceIndex;
24
+ private isTransitioning;
25
+ private timeScale;
26
+ private fadeInDuration;
27
+ private fadeOutDuration;
28
+ private avatarType;
29
+ private eventListeners;
30
+ private initialized;
31
+ private idleRotationCount;
32
+ private currentIdleAnimation;
33
+ private idleRotationLimit;
34
+ private lastAnimationTime;
35
+ initialize(scene: Scene, preloadedActions: Record<string, AnimationAction>, animations?: AnimationClip[], avatarType?: 'RPM' | 'CUSTOM_GLB'): Promise<void>;
36
+ private registerClipsDirectly;
37
+ private registerAnimations;
38
+ private registerAnimation;
39
+ play(animationName: string, options?: AnimationPlayOptions): void;
40
+ execute(command: string): void;
41
+ processChatEmission(chatEmission: string | null | undefined, isLoading: boolean): void;
42
+ private calculateTransitionOptions;
43
+ private executeWithTransition;
44
+ idle(options?: AnimationPlayOptions): void;
45
+ loading(options?: AnimationPlayOptions): void;
46
+ playSequence(sequence: string[], options?: AnimationPlayOptions): void;
47
+ forceIdle(): void;
48
+ update(delta: number): void;
49
+ private isAnimationPlaying;
50
+ private setupMixerEvents;
51
+ private handleSequenceProgressionIfNeeded;
52
+ private handleIdleRotationIfNeeded;
53
+ setTimeScale(timeScale: number): void;
54
+ private getRandomAnimation;
55
+ private getAnimationInfo;
56
+ private getAnimationCategory;
57
+ on(event: 'start' | 'complete' | 'loop' | 'transition' | 'error', callback: (data: any) => void): void;
58
+ off(event: 'start' | 'complete' | 'loop' | 'transition' | 'error', callback: (data: any) => void): void;
59
+ private emit;
60
+ getCurrentAnimationName(): string | null;
61
+ getAvatarType(): 'RPM' | 'CUSTOM_GLB';
62
+ isInitialized(): boolean;
63
+ getAllAnimationNames(): string[];
64
+ getAnimationsByCategory(category: AnimationCategory): AnimationInfo[];
65
+ }