@memori.ai/memori-react 2.16.0 → 2.17.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 +25 -0
- package/README.md +18 -16
- package/dist/components/Chat/Chat.js +1 -1
- package/dist/components/Chat/Chat.js.map +1 -1
- package/dist/components/ChatBubble/ChatBubble.d.ts +1 -0
- package/dist/components/ChatBubble/ChatBubble.js +2 -2
- package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
- package/dist/components/MemoriWidget/MemoriWidget.d.ts +4 -3
- package/dist/components/MemoriWidget/MemoriWidget.js +41 -25
- package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/dist/components/layouts/WebsiteAssistant.d.ts +4 -0
- package/dist/components/layouts/WebsiteAssistant.js +31 -0
- package/dist/components/layouts/WebsiteAssistant.js.map +1 -0
- package/dist/components/layouts/WebsiteAssistant.test.d.ts +1 -0
- package/dist/components/layouts/WebsiteAssistant.test.js +25 -0
- package/dist/components/layouts/WebsiteAssistant.test.js.map +1 -0
- package/dist/components/layouts/chat.css +2 -2
- package/dist/components/layouts/totem.css +2 -2
- package/dist/components/layouts/website-assistant.css +353 -0
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/styles.css +2 -1
- package/esm/components/Chat/Chat.js +1 -1
- package/esm/components/Chat/Chat.js.map +1 -1
- package/esm/components/ChatBubble/ChatBubble.d.ts +1 -0
- package/esm/components/ChatBubble/ChatBubble.js +2 -2
- package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
- package/esm/components/MemoriWidget/MemoriWidget.d.ts +4 -3
- package/esm/components/MemoriWidget/MemoriWidget.js +41 -25
- package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/esm/components/layouts/WebsiteAssistant.d.ts +4 -0
- package/esm/components/layouts/WebsiteAssistant.js +28 -0
- package/esm/components/layouts/WebsiteAssistant.js.map +1 -0
- package/esm/components/layouts/WebsiteAssistant.test.d.ts +1 -0
- package/esm/components/layouts/WebsiteAssistant.test.js +22 -0
- package/esm/components/layouts/WebsiteAssistant.test.js.map +1 -0
- package/esm/components/layouts/chat.css +2 -2
- package/esm/components/layouts/totem.css +2 -2
- package/esm/components/layouts/website-assistant.css +353 -0
- package/esm/index.js +7 -1
- package/esm/index.js.map +1 -1
- package/esm/styles.css +2 -1
- package/package.json +1 -1
- package/src/components/Chat/Chat.tsx +1 -0
- package/src/components/Chat/__snapshots__/Chat.test.tsx.snap +24 -0
- package/src/components/ChatBubble/ChatBubble.tsx +5 -1
- package/src/components/MemoriWidget/MemoriWidget.tsx +68 -34
- package/src/components/layouts/WebsiteAssistant.test.tsx +31 -0
- package/src/components/layouts/WebsiteAssistant.tsx +124 -0
- package/src/components/layouts/__snapshots__/WebsiteAssistant.test.tsx.snap +60 -0
- package/src/components/layouts/chat.css +2 -2
- package/src/components/layouts/layouts.stories.tsx +109 -0
- package/src/components/layouts/totem.css +2 -2
- package/src/components/layouts/website-assistant.css +353 -0
- package/src/index.tsx +7 -1
- package/src/styles.css +2 -1
|
@@ -56,6 +56,7 @@ import PoweredBy from '../PoweredBy/PoweredBy';
|
|
|
56
56
|
import FullPageLayout from '../layouts/FullPage';
|
|
57
57
|
import TotemLayout from '../layouts/Totem';
|
|
58
58
|
import ChatLayout from '../layouts/Chat';
|
|
59
|
+
import WebsiteAssistantLayout from '../layouts/WebsiteAssistant';
|
|
59
60
|
|
|
60
61
|
// Helpers / Utils
|
|
61
62
|
import { getTranslation } from '../../helpers/translations';
|
|
@@ -100,6 +101,7 @@ type MemoriTextEnteredEvent = CustomEvent<{
|
|
|
100
101
|
hidden?: boolean;
|
|
101
102
|
typingText?: string;
|
|
102
103
|
useLoaderTextAsMsg?: boolean;
|
|
104
|
+
hasBatchQueued?: boolean;
|
|
103
105
|
}>;
|
|
104
106
|
|
|
105
107
|
const typeMessage = (
|
|
@@ -107,7 +109,8 @@ const typeMessage = (
|
|
|
107
109
|
waitForPrevious = true,
|
|
108
110
|
hidden = false,
|
|
109
111
|
typingText?: string,
|
|
110
|
-
useLoaderTextAsMsg = false
|
|
112
|
+
useLoaderTextAsMsg = false,
|
|
113
|
+
hasBatchQueued = false
|
|
111
114
|
) => {
|
|
112
115
|
const e: MemoriTextEnteredEvent = new CustomEvent('MemoriTextEntered', {
|
|
113
116
|
detail: {
|
|
@@ -116,6 +119,7 @@ const typeMessage = (
|
|
|
116
119
|
hidden,
|
|
117
120
|
typingText,
|
|
118
121
|
useLoaderTextAsMsg,
|
|
122
|
+
hasBatchQueued,
|
|
119
123
|
},
|
|
120
124
|
});
|
|
121
125
|
|
|
@@ -125,9 +129,17 @@ const typeMessageHidden = (
|
|
|
125
129
|
message: string,
|
|
126
130
|
waitForPrevious = true,
|
|
127
131
|
typingText?: string,
|
|
128
|
-
useLoaderTextAsMsg = false
|
|
132
|
+
useLoaderTextAsMsg = false,
|
|
133
|
+
hasBatchQueued = false
|
|
129
134
|
) =>
|
|
130
|
-
typeMessage(
|
|
135
|
+
typeMessage(
|
|
136
|
+
message,
|
|
137
|
+
waitForPrevious,
|
|
138
|
+
true,
|
|
139
|
+
typingText,
|
|
140
|
+
useLoaderTextAsMsg,
|
|
141
|
+
hasBatchQueued
|
|
142
|
+
);
|
|
131
143
|
|
|
132
144
|
const typeBatchMessages = (
|
|
133
145
|
messages: {
|
|
@@ -193,7 +205,8 @@ const typeBatchMessages = (
|
|
|
193
205
|
step.waitForPrevious,
|
|
194
206
|
step.hidden,
|
|
195
207
|
step.typingText,
|
|
196
|
-
step.useLoaderTextAsMsg
|
|
208
|
+
step.useLoaderTextAsMsg,
|
|
209
|
+
!next.done
|
|
197
210
|
);
|
|
198
211
|
} else if (areInputsDisabled()) {
|
|
199
212
|
reEnableInputs();
|
|
@@ -277,7 +290,7 @@ export interface Props {
|
|
|
277
290
|
memoriLang?: string;
|
|
278
291
|
multilingual?: boolean;
|
|
279
292
|
integration?: Integration;
|
|
280
|
-
layout?: 'DEFAULT' | 'FULLPAGE' | 'TOTEM' | 'CHAT';
|
|
293
|
+
layout?: 'DEFAULT' | 'FULLPAGE' | 'TOTEM' | 'CHAT' | 'WEBSITE_ASSISTANT';
|
|
281
294
|
customLayout?: React.FC<LayoutProps>;
|
|
282
295
|
showShare?: boolean;
|
|
283
296
|
showInstruct?: boolean;
|
|
@@ -519,7 +532,8 @@ const MemoriWidget = ({
|
|
|
519
532
|
translatedText?: string,
|
|
520
533
|
hidden: boolean = false,
|
|
521
534
|
typingText?: string,
|
|
522
|
-
useLoaderTextAsMsg = false
|
|
535
|
+
useLoaderTextAsMsg = false,
|
|
536
|
+
hasBatchQueued = false
|
|
523
537
|
) => {
|
|
524
538
|
const sessionID =
|
|
525
539
|
newSessionId ||
|
|
@@ -673,9 +687,9 @@ const MemoriWidget = ({
|
|
|
673
687
|
});
|
|
674
688
|
}
|
|
675
689
|
|
|
676
|
-
if (
|
|
677
|
-
setMemoriTyping(false);
|
|
690
|
+
if (!hasBatchQueued) {
|
|
678
691
|
setTypingText(undefined);
|
|
692
|
+
setMemoriTyping(false);
|
|
679
693
|
}
|
|
680
694
|
};
|
|
681
695
|
|
|
@@ -815,15 +829,6 @@ const MemoriWidget = ({
|
|
|
815
829
|
dialogState: DialogState;
|
|
816
830
|
sessionID: string;
|
|
817
831
|
} | void> => {
|
|
818
|
-
if (
|
|
819
|
-
memori.privacyType !== 'PUBLIC' &&
|
|
820
|
-
!memori.secretToken &&
|
|
821
|
-
!memoriPwd &&
|
|
822
|
-
!memoriTokens
|
|
823
|
-
) {
|
|
824
|
-
setAuthModalState('password');
|
|
825
|
-
return;
|
|
826
|
-
}
|
|
827
832
|
let storageBirthDate = getLocalConfig<string | undefined>(
|
|
828
833
|
'birthDate',
|
|
829
834
|
undefined
|
|
@@ -833,6 +838,15 @@ const MemoriWidget = ({
|
|
|
833
838
|
return;
|
|
834
839
|
}
|
|
835
840
|
|
|
841
|
+
if (
|
|
842
|
+
memori.privacyType !== 'PUBLIC' &&
|
|
843
|
+
!memori.secretToken &&
|
|
844
|
+
!memoriPwd &&
|
|
845
|
+
!memoriTokens
|
|
846
|
+
) {
|
|
847
|
+
setAuthModalState('password');
|
|
848
|
+
return;
|
|
849
|
+
}
|
|
836
850
|
setLoading(true);
|
|
837
851
|
try {
|
|
838
852
|
if (!memori.giverTag && !!memori.receivedInvitations?.length) {
|
|
@@ -884,6 +898,9 @@ const MemoriWidget = ({
|
|
|
884
898
|
console.error(session);
|
|
885
899
|
message.error(t('underageTwinSession', { age: minAge }));
|
|
886
900
|
setGotErrorInOpening(true);
|
|
901
|
+
} else if (session?.resultCode === 403) {
|
|
902
|
+
setMemoriPwd(undefined);
|
|
903
|
+
setAuthModalState('password');
|
|
887
904
|
} else {
|
|
888
905
|
console.error(session);
|
|
889
906
|
message.error(t(getErrori18nKey(session?.resultCode)));
|
|
@@ -906,6 +923,15 @@ const MemoriWidget = ({
|
|
|
906
923
|
) => {
|
|
907
924
|
setLoading(true);
|
|
908
925
|
try {
|
|
926
|
+
let storageBirthDate = getLocalConfig<string | undefined>(
|
|
927
|
+
'birthDate',
|
|
928
|
+
undefined
|
|
929
|
+
);
|
|
930
|
+
if (!(birthDate || storageBirthDate) && !!minAge) {
|
|
931
|
+
setShowAgeVerification(true);
|
|
932
|
+
return;
|
|
933
|
+
}
|
|
934
|
+
|
|
909
935
|
if (
|
|
910
936
|
memori.privacyType !== 'PUBLIC' &&
|
|
911
937
|
!password &&
|
|
@@ -918,15 +944,6 @@ const MemoriWidget = ({
|
|
|
918
944
|
return;
|
|
919
945
|
}
|
|
920
946
|
|
|
921
|
-
let storageBirthDate = getLocalConfig<string | undefined>(
|
|
922
|
-
'birthDate',
|
|
923
|
-
undefined
|
|
924
|
-
);
|
|
925
|
-
if (!(birthDate || storageBirthDate) && !!minAge) {
|
|
926
|
-
setShowAgeVerification(true);
|
|
927
|
-
return;
|
|
928
|
-
}
|
|
929
|
-
|
|
930
947
|
let referral;
|
|
931
948
|
try {
|
|
932
949
|
referral = (() => {
|
|
@@ -965,12 +982,14 @@ const MemoriWidget = ({
|
|
|
965
982
|
text: currentState.emission,
|
|
966
983
|
media: currentState.media,
|
|
967
984
|
fromUser: false,
|
|
985
|
+
initial: true,
|
|
968
986
|
},
|
|
969
987
|
])
|
|
970
988
|
: pushMessage({
|
|
971
989
|
text: currentState.emission,
|
|
972
990
|
media: currentState.media,
|
|
973
991
|
fromUser: false,
|
|
992
|
+
initial: true,
|
|
974
993
|
});
|
|
975
994
|
}
|
|
976
995
|
}
|
|
@@ -988,6 +1007,9 @@ const MemoriWidget = ({
|
|
|
988
1007
|
console.error(response);
|
|
989
1008
|
message.error(t('underageTwinSession', { age: minAge }));
|
|
990
1009
|
setGotErrorInOpening(true);
|
|
1010
|
+
} else if (response?.resultCode === 403) {
|
|
1011
|
+
setMemoriPwd(undefined);
|
|
1012
|
+
setAuthModalState('password');
|
|
991
1013
|
} else {
|
|
992
1014
|
console.error(response);
|
|
993
1015
|
message.error(t(getErrori18nKey(response.resultCode)));
|
|
@@ -1471,7 +1493,10 @@ const MemoriWidget = ({
|
|
|
1471
1493
|
};
|
|
1472
1494
|
|
|
1473
1495
|
const speak = (text: string): void => {
|
|
1474
|
-
if (!AZURE_COGNITIVE_SERVICES_TTS_KEY)
|
|
1496
|
+
if (!AZURE_COGNITIVE_SERVICES_TTS_KEY || preview) {
|
|
1497
|
+
emitEndSpeakEvent();
|
|
1498
|
+
return;
|
|
1499
|
+
}
|
|
1475
1500
|
stopListening();
|
|
1476
1501
|
// stopAudio();
|
|
1477
1502
|
|
|
@@ -2118,8 +2143,14 @@ const MemoriWidget = ({
|
|
|
2118
2143
|
// to use in integrations or snippets
|
|
2119
2144
|
const memoriTextEnteredHandler = useCallback(
|
|
2120
2145
|
(e: MemoriTextEnteredEvent) => {
|
|
2121
|
-
const {
|
|
2122
|
-
|
|
2146
|
+
const {
|
|
2147
|
+
text,
|
|
2148
|
+
waitForPrevious,
|
|
2149
|
+
hidden,
|
|
2150
|
+
typingText,
|
|
2151
|
+
useLoaderTextAsMsg,
|
|
2152
|
+
hasBatchQueued,
|
|
2153
|
+
} = e.detail;
|
|
2123
2154
|
|
|
2124
2155
|
if (text) {
|
|
2125
2156
|
// wait to finish reading previous emission
|
|
@@ -2142,7 +2173,8 @@ const MemoriWidget = ({
|
|
|
2142
2173
|
undefined,
|
|
2143
2174
|
hidden,
|
|
2144
2175
|
typingText,
|
|
2145
|
-
useLoaderTextAsMsg
|
|
2176
|
+
useLoaderTextAsMsg,
|
|
2177
|
+
hasBatchQueued
|
|
2146
2178
|
);
|
|
2147
2179
|
}
|
|
2148
2180
|
}
|
|
@@ -2185,7 +2217,10 @@ const MemoriWidget = ({
|
|
|
2185
2217
|
);
|
|
2186
2218
|
let birth = birthDate || storageBirthDate || undefined;
|
|
2187
2219
|
|
|
2188
|
-
if (
|
|
2220
|
+
if (!sessionID && !!minAge && !birth) {
|
|
2221
|
+
setShowAgeVerification(true);
|
|
2222
|
+
setClickedStart(false);
|
|
2223
|
+
} else if (
|
|
2189
2224
|
(!sessionID &&
|
|
2190
2225
|
memori.privacyType !== 'PUBLIC' &&
|
|
2191
2226
|
!memori.secretToken &&
|
|
@@ -2196,9 +2231,6 @@ const MemoriWidget = ({
|
|
|
2196
2231
|
setAuthModalState('password');
|
|
2197
2232
|
setClickedStart(false);
|
|
2198
2233
|
return;
|
|
2199
|
-
} else if (!sessionID && !!minAge && !birth) {
|
|
2200
|
-
setShowAgeVerification(true);
|
|
2201
|
-
setClickedStart(false);
|
|
2202
2234
|
} else if (!sessionID) {
|
|
2203
2235
|
setClickedStart(false);
|
|
2204
2236
|
setGotErrorInOpening(false);
|
|
@@ -2617,6 +2649,8 @@ const MemoriWidget = ({
|
|
|
2617
2649
|
? ChatLayout
|
|
2618
2650
|
: selectedLayout === 'FULLPAGE'
|
|
2619
2651
|
? FullPageLayout
|
|
2652
|
+
: selectedLayout === 'WEBSITE_ASSISTANT'
|
|
2653
|
+
? WebsiteAssistantLayout
|
|
2620
2654
|
: FullPageLayout;
|
|
2621
2655
|
|
|
2622
2656
|
return (
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { render } from '@testing-library/react';
|
|
2
|
+
import Memori from '../MemoriWidget/MemoriWidget';
|
|
3
|
+
import { integration, memori, tenant } from '../../mocks/data';
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(window, 'matchMedia', {
|
|
6
|
+
writable: true,
|
|
7
|
+
value: jest.fn().mockImplementation(query => ({
|
|
8
|
+
matches: false,
|
|
9
|
+
media: query,
|
|
10
|
+
onchange: null,
|
|
11
|
+
addListener: jest.fn(), // Deprecated
|
|
12
|
+
removeListener: jest.fn(), // Deprecated
|
|
13
|
+
addEventListener: jest.fn(),
|
|
14
|
+
removeEventListener: jest.fn(),
|
|
15
|
+
dispatchEvent: jest.fn(),
|
|
16
|
+
})),
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('renders WEBSITE_ASSISTANT layout unchanged', () => {
|
|
20
|
+
const { container } = render(
|
|
21
|
+
<Memori
|
|
22
|
+
showShare={true}
|
|
23
|
+
showSettings={true}
|
|
24
|
+
memori={memori}
|
|
25
|
+
tenant={tenant}
|
|
26
|
+
integration={integration}
|
|
27
|
+
layout="WEBSITE_ASSISTANT"
|
|
28
|
+
/>
|
|
29
|
+
);
|
|
30
|
+
expect(container).toMatchSnapshot();
|
|
31
|
+
});
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import Spin from '../ui/Spin';
|
|
3
|
+
import { LayoutProps } from '../MemoriWidget/MemoriWidget';
|
|
4
|
+
import Button from '../ui/Button';
|
|
5
|
+
import Blob from '../Blob/Blob';
|
|
6
|
+
import Close from '../icons/Close';
|
|
7
|
+
import { useTranslation } from 'react-i18next';
|
|
8
|
+
|
|
9
|
+
const WebsiteAssistantLayout: React.FC<LayoutProps> = ({
|
|
10
|
+
Header,
|
|
11
|
+
headerProps,
|
|
12
|
+
Avatar,
|
|
13
|
+
avatarProps,
|
|
14
|
+
Chat,
|
|
15
|
+
chatProps,
|
|
16
|
+
StartPanel,
|
|
17
|
+
startPanelProps,
|
|
18
|
+
integrationStyle,
|
|
19
|
+
ChangeMode,
|
|
20
|
+
changeModeProps,
|
|
21
|
+
sessionId,
|
|
22
|
+
hasUserActivatedSpeak,
|
|
23
|
+
showInstruct = false,
|
|
24
|
+
loading = false,
|
|
25
|
+
poweredBy,
|
|
26
|
+
}) => {
|
|
27
|
+
const { t } = useTranslation();
|
|
28
|
+
const [collapsed, _setCollapsed] = useState(true);
|
|
29
|
+
const [expandedKey, setExpandedKey] = useState<string>();
|
|
30
|
+
const setCollapsed = (collapsed: boolean) => {
|
|
31
|
+
_setCollapsed(collapsed);
|
|
32
|
+
setExpandedKey(collapsed ? undefined : new Date().toISOString());
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<div
|
|
37
|
+
className={`memori-website_assistant--${
|
|
38
|
+
collapsed ? 'collapsed' : 'expanded'
|
|
39
|
+
}`}
|
|
40
|
+
>
|
|
41
|
+
{collapsed ? (
|
|
42
|
+
<div className="memori-website_assistant--trigger">
|
|
43
|
+
<Button
|
|
44
|
+
className="memori-website_assistant--trigger-button"
|
|
45
|
+
ghost
|
|
46
|
+
shape="circle"
|
|
47
|
+
onClick={() => setCollapsed(false)}
|
|
48
|
+
title={t('expand') || 'Expand'}
|
|
49
|
+
>
|
|
50
|
+
<Blob avatar={avatarProps?.memori.avatarURL} />
|
|
51
|
+
</Button>
|
|
52
|
+
</div>
|
|
53
|
+
) : (
|
|
54
|
+
<>
|
|
55
|
+
{integrationStyle}
|
|
56
|
+
|
|
57
|
+
<Spin spinning={loading} className="memori-website_assistant-layout">
|
|
58
|
+
{poweredBy}
|
|
59
|
+
|
|
60
|
+
<div className="memori-website_assistant--close-button-wrapper">
|
|
61
|
+
<Button
|
|
62
|
+
className="memori-website_assistant--close-button"
|
|
63
|
+
primary
|
|
64
|
+
shape="circle"
|
|
65
|
+
onClick={() => setCollapsed(true)}
|
|
66
|
+
icon={<Close />}
|
|
67
|
+
title={t('close') || 'Close'}
|
|
68
|
+
/>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
{showInstruct && ChangeMode && changeModeProps && (
|
|
72
|
+
<ChangeMode {...changeModeProps} />
|
|
73
|
+
)}
|
|
74
|
+
|
|
75
|
+
<div className="memori-website_assistant-layout--header">
|
|
76
|
+
{Header && headerProps && (
|
|
77
|
+
<Header
|
|
78
|
+
{...headerProps}
|
|
79
|
+
showSettings={false}
|
|
80
|
+
showReload={false}
|
|
81
|
+
/>
|
|
82
|
+
)}
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<div className="memori-website_assistant-layout--avatar">
|
|
86
|
+
{Avatar && avatarProps && (
|
|
87
|
+
<Avatar
|
|
88
|
+
{...avatarProps}
|
|
89
|
+
integrationConfig={
|
|
90
|
+
avatarProps.integrationConfig
|
|
91
|
+
? {
|
|
92
|
+
...avatarProps.integrationConfig,
|
|
93
|
+
avatarURL: avatarProps.integrationConfig?.avatarURL
|
|
94
|
+
? `${
|
|
95
|
+
avatarProps.integrationConfig?.avatarURL.split(
|
|
96
|
+
'#'
|
|
97
|
+
)[0]
|
|
98
|
+
}#${expandedKey}`
|
|
99
|
+
: undefined,
|
|
100
|
+
}
|
|
101
|
+
: {}
|
|
102
|
+
}
|
|
103
|
+
key={expandedKey}
|
|
104
|
+
/>
|
|
105
|
+
)}
|
|
106
|
+
</div>
|
|
107
|
+
|
|
108
|
+
<div id="extension" />
|
|
109
|
+
|
|
110
|
+
<div className="memori-website_assistant-layout--controls">
|
|
111
|
+
{sessionId && hasUserActivatedSpeak && Chat && chatProps ? (
|
|
112
|
+
<Chat {...chatProps} />
|
|
113
|
+
) : startPanelProps ? (
|
|
114
|
+
<StartPanel {...startPanelProps} />
|
|
115
|
+
) : null}
|
|
116
|
+
</div>
|
|
117
|
+
</Spin>
|
|
118
|
+
</>
|
|
119
|
+
)}
|
|
120
|
+
</div>
|
|
121
|
+
);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
export default WebsiteAssistantLayout;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`renders WEBSITE_ASSISTANT layout unchanged 1`] = `
|
|
4
|
+
<div>
|
|
5
|
+
<div
|
|
6
|
+
class="memori memori-widget memori-layout-website_assistant memori-controls-bottom memori--with-integration"
|
|
7
|
+
data-memori-engine-state="{}"
|
|
8
|
+
data-memori-id="66b4e161-2431-4b21-9b70-d8c27de730ca"
|
|
9
|
+
data-memori-integration="cb3c4776-7f0b-4f97-a773-c32a5d7a3bf1"
|
|
10
|
+
data-memori-name="Memori"
|
|
11
|
+
data-memori-secondary-id="25ced51c-3520-41af-8bbe-222d861b8e32"
|
|
12
|
+
style="height: 100vh;"
|
|
13
|
+
>
|
|
14
|
+
<div
|
|
15
|
+
class="memori-website_assistant--collapsed"
|
|
16
|
+
>
|
|
17
|
+
<div
|
|
18
|
+
class="memori-website_assistant--trigger"
|
|
19
|
+
>
|
|
20
|
+
<button
|
|
21
|
+
class="memori-button memori-button--ghost memori-button--circle memori-button--padded memori-website_assistant--trigger-button"
|
|
22
|
+
title="expand"
|
|
23
|
+
>
|
|
24
|
+
<div
|
|
25
|
+
class="memori-blob"
|
|
26
|
+
>
|
|
27
|
+
<figure>
|
|
28
|
+
<img
|
|
29
|
+
alt=""
|
|
30
|
+
role="presentation"
|
|
31
|
+
src="https://app.twincreator.com/images/twincreator/square_logo.png"
|
|
32
|
+
/>
|
|
33
|
+
</figure>
|
|
34
|
+
<div
|
|
35
|
+
class="mainDiv"
|
|
36
|
+
/>
|
|
37
|
+
<div
|
|
38
|
+
class="mainDiv"
|
|
39
|
+
/>
|
|
40
|
+
<div
|
|
41
|
+
class="mainDiv"
|
|
42
|
+
/>
|
|
43
|
+
<div
|
|
44
|
+
class="mainDiv"
|
|
45
|
+
/>
|
|
46
|
+
<div
|
|
47
|
+
class="mainDiv"
|
|
48
|
+
/>
|
|
49
|
+
</div>
|
|
50
|
+
</button>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
<audio
|
|
54
|
+
id="memori-audio"
|
|
55
|
+
src="https://app.twincreator.com/intro.mp3"
|
|
56
|
+
style="display: none;"
|
|
57
|
+
/>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
`;
|
|
@@ -84,11 +84,11 @@
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
@media (max-width: 480px) {
|
|
87
|
-
.memori-send-on-enter-menu {
|
|
87
|
+
.memori-chat-layout .memori-send-on-enter-menu {
|
|
88
88
|
display: none;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
.memori-header--button-settings {
|
|
91
|
+
.memori-chat-layout .memori-header--button-settings {
|
|
92
92
|
display: none;
|
|
93
93
|
}
|
|
94
94
|
}
|
|
@@ -312,3 +312,112 @@ Custom.args = {
|
|
|
312
312
|
layout: 'FULLPAGE',
|
|
313
313
|
customLayout: CustomLayout,
|
|
314
314
|
};
|
|
315
|
+
|
|
316
|
+
export const WebsiteAssistant = Template.bind({});
|
|
317
|
+
WebsiteAssistant.args = {
|
|
318
|
+
uiLang: 'it',
|
|
319
|
+
showShare: true,
|
|
320
|
+
showSettings: true,
|
|
321
|
+
memori: {
|
|
322
|
+
memoriID: '6573844d-a7cd-47ef-9e78-840d82020c21',
|
|
323
|
+
name: 'Nicola',
|
|
324
|
+
password: null,
|
|
325
|
+
recoveryTokens: null,
|
|
326
|
+
newPassword: null,
|
|
327
|
+
ownerUserID: null,
|
|
328
|
+
ownerUserName: 'nzambello',
|
|
329
|
+
ownerTenantName: 'app.memorytwin.com',
|
|
330
|
+
memoriConfigurationID: 'fd10bb42-98d9-4c08-8e02-2b08bd4e4975',
|
|
331
|
+
description:
|
|
332
|
+
'Sono Nicola Zambello, sviluppatore e attivista per un web etico e sostenibile',
|
|
333
|
+
completionDescription: null,
|
|
334
|
+
engineMemoriID: '9b0a2913-d3d8-4e98-a49d-6e1c99479e1b',
|
|
335
|
+
isOwner: false,
|
|
336
|
+
isGiver: false,
|
|
337
|
+
isReceiver: false,
|
|
338
|
+
giverTag: null,
|
|
339
|
+
giverPIN: null,
|
|
340
|
+
privacyType: 'PUBLIC',
|
|
341
|
+
secretToken: null,
|
|
342
|
+
minimumNumberOfRecoveryTokens: null,
|
|
343
|
+
totalNumberOfRecoveryTokens: null,
|
|
344
|
+
sentInvitations: [],
|
|
345
|
+
receivedInvitations: [],
|
|
346
|
+
integrations: [
|
|
347
|
+
{
|
|
348
|
+
integrationID: '62de8c99-0ac2-4cbe-bd95-a39ad7dc6b32',
|
|
349
|
+
memoriID: '6573844d-a7cd-47ef-9e78-840d82020c21',
|
|
350
|
+
type: 'LANDING_EXPERIENCE',
|
|
351
|
+
state: 'NEW',
|
|
352
|
+
deviceEmails: null,
|
|
353
|
+
invocationText: null,
|
|
354
|
+
jobID: null,
|
|
355
|
+
customData:
|
|
356
|
+
'{"textColor":"#000000","buttonBgColor":"#007eb6","buttonTextColor":"#ffffff","globalBackground":"https://assets.memori.ai/api/v2/asset/cade3b9c-0437-4342-b2bd-8db9c2a3a20e.png","blurBackground":true,"innerBgColor":"light","multilanguage":true,"avatar":"readyplayerme","avatarURL":"https://assets.memori.ai/api/v2/asset/893c41df-7619-436d-9e86-fe1d406fc933.glb#1681736752156","name":"Pagina pubblica","contextVars":"ANIMALE:CANE","personTag":"☠️","personPIN":"666666","personName":"Pirata","showShare":true,"avatarFullBodyURL":"https://models.readyplayer.me/63b55751f17e295642bf07a2.glb"}',
|
|
357
|
+
resources: [],
|
|
358
|
+
publish: true,
|
|
359
|
+
creationTimestamp: '2022-06-13T14:44:52.833573Z',
|
|
360
|
+
lastChangeTimestamp: '2022-06-13T14:44:52.833573Z',
|
|
361
|
+
},
|
|
362
|
+
],
|
|
363
|
+
avatarURL:
|
|
364
|
+
'https://assets.memori.ai/api/v2/asset/3049582f-db5f-452c-913d-e4340d4afd0a.png',
|
|
365
|
+
coverURL:
|
|
366
|
+
'https://assets.memori.ai/api/v2/asset/e9bb9f6d-8f34-45ab-af9e-6d630d9a51a8.png',
|
|
367
|
+
avatar3DURL:
|
|
368
|
+
'https://assets.memori.ai/api/v2/asset/893c41df-7619-436d-9e86-fe1d406fc933.glb',
|
|
369
|
+
avatarOriginal3DURL:
|
|
370
|
+
'https://d1a370nemizbjq.cloudfront.net/c7c80a1d-deda-4fe1-96c6-fabad0771aa2.glb',
|
|
371
|
+
needsPosition: false,
|
|
372
|
+
voiceType: 'MALE',
|
|
373
|
+
culture: 'it-IT',
|
|
374
|
+
categories: [
|
|
375
|
+
'biografico',
|
|
376
|
+
'tecnologia',
|
|
377
|
+
'web',
|
|
378
|
+
'open-source',
|
|
379
|
+
'green',
|
|
380
|
+
'privacy',
|
|
381
|
+
],
|
|
382
|
+
exposed: true,
|
|
383
|
+
disableR2R3Loop: null,
|
|
384
|
+
disableR4Loop: null,
|
|
385
|
+
disableR5Loop: null,
|
|
386
|
+
enableCompletions: true,
|
|
387
|
+
completionModel: null,
|
|
388
|
+
chainingMemoriID: null,
|
|
389
|
+
chainingBaseURL: null,
|
|
390
|
+
chainingPassword: null,
|
|
391
|
+
contentQualityIndex: 210.8,
|
|
392
|
+
contentQualityIndexTimestamp: '2023-04-17T00:01:32.194744Z',
|
|
393
|
+
publishedInTheMetaverse: true,
|
|
394
|
+
metaverseEnvironment: 'apartment',
|
|
395
|
+
blockedUntil: null,
|
|
396
|
+
creationTimestamp: '2022-06-13T14:21:55.793034Z',
|
|
397
|
+
lastChangeTimestamp: '2023-04-15T08:15:36.403546Z',
|
|
398
|
+
},
|
|
399
|
+
integration: {
|
|
400
|
+
integrationID: '62de8c99-0ac2-4cbe-bd95-a39ad7dc6b32',
|
|
401
|
+
memoriID: '6573844d-a7cd-47ef-9e78-840d82020c21',
|
|
402
|
+
type: 'LANDING_EXPERIENCE',
|
|
403
|
+
state: 'NEW',
|
|
404
|
+
deviceEmails: null,
|
|
405
|
+
invocationText: null,
|
|
406
|
+
jobID: null,
|
|
407
|
+
publish: true,
|
|
408
|
+
creationTimestamp: '2022-06-13T14:44:52.833573Z',
|
|
409
|
+
lastChangeTimestamp: '2022-06-13T14:44:52.833573Z',
|
|
410
|
+
customData: JSON.stringify({
|
|
411
|
+
...JSON.parse(
|
|
412
|
+
'{"textColor":"#000000","buttonBgColor":"#007eb6","buttonTextColor":"#ffffff","globalBackground":"https://assets.memori.ai/api/v2/asset/cade3b9c-0437-4342-b2bd-8db9c2a3a20e.png","blurBackground":true,"innerBgColor":"light","multilanguage":true,"avatar":"readyplayerme","avatarURL":"https://assets.memori.ai/api/v2/asset/893c41df-7619-436d-9e86-fe1d406fc933.glb#1681736752156","name":"Pagina pubblica","contextVars":"ANIMALE:CANE","personTag":"☠️","personPIN":"666666","personName":"Pirata","showShare":true,"avatarFullBodyURL":"https://models.readyplayer.me/63b55751f17e295642bf07a2.glb"}'
|
|
413
|
+
),
|
|
414
|
+
avatar: 'readyplayerme-full',
|
|
415
|
+
avatarURL:
|
|
416
|
+
'https://models.readyplayer.me/63b55751f17e295642bf07a2.glb#' +
|
|
417
|
+
// 'https://models.readyplayer.me/63b558263858282637c54115.glb#' +
|
|
418
|
+
new Date(Date.now()).getTime(),
|
|
419
|
+
}),
|
|
420
|
+
},
|
|
421
|
+
tenant,
|
|
422
|
+
layout: 'WEBSITE_ASSISTANT',
|
|
423
|
+
};
|
|
@@ -124,11 +124,11 @@
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
@media (max-width: 480px) {
|
|
127
|
-
.memori-send-on-enter-menu {
|
|
127
|
+
.memori-totem-layou .memori-send-on-enter-menu {
|
|
128
128
|
display: none;
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
.memori-header--button-settings {
|
|
131
|
+
.memori-totem-layou .memori-header--button-settings {
|
|
132
132
|
display: none;
|
|
133
133
|
}
|
|
134
134
|
}
|