@memori.ai/memori-react 4.3.0 → 4.4.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 (33) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/components/Chat/Chat.js +7 -2
  3. package/dist/components/Chat/Chat.js.map +1 -1
  4. package/dist/components/KnownFacts/KnownFacts.js +11 -7
  5. package/dist/components/KnownFacts/KnownFacts.js.map +1 -1
  6. package/dist/components/StartPanel/StartPanel.css +5 -0
  7. package/dist/components/Typing/Typing.d.ts +7 -1
  8. package/dist/components/Typing/Typing.js +72 -23
  9. package/dist/components/Typing/Typing.js.map +1 -1
  10. package/dist/helpers/constants.d.ts +6 -0
  11. package/dist/helpers/constants.js +47 -1
  12. package/dist/helpers/constants.js.map +1 -1
  13. package/esm/components/Chat/Chat.js +7 -2
  14. package/esm/components/Chat/Chat.js.map +1 -1
  15. package/esm/components/KnownFacts/KnownFacts.js +11 -7
  16. package/esm/components/KnownFacts/KnownFacts.js.map +1 -1
  17. package/esm/components/StartPanel/StartPanel.css +5 -0
  18. package/esm/components/Typing/Typing.d.ts +7 -1
  19. package/esm/components/Typing/Typing.js +72 -23
  20. package/esm/components/Typing/Typing.js.map +1 -1
  21. package/esm/helpers/constants.d.ts +6 -0
  22. package/esm/helpers/constants.js +46 -0
  23. package/esm/helpers/constants.js.map +1 -1
  24. package/package.json +1 -1
  25. package/src/components/Chat/Chat.tsx +8 -0
  26. package/src/components/KnownFacts/KnownFacts.tsx +14 -8
  27. package/src/components/StartPanel/StartPanel.css +5 -0
  28. package/src/components/Typing/Typing.stories.tsx +34 -5
  29. package/src/components/Typing/Typing.test.tsx +38 -0
  30. package/src/components/Typing/Typing.tsx +94 -22
  31. package/src/components/Typing/__snapshots__/Typing.test.tsx.snap +27 -0
  32. package/src/helpers/constants.ts +58 -0
  33. package/src/index.stories.tsx +15 -0
@@ -1,41 +1,90 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from 'react';
3
- const separator = ' ';
4
- const sentences = {
3
+ const separator = ' ';
4
+ const defaultDelay = 3;
5
+ const defaultSentences = {
5
6
  en: [
6
- 'Generating an accurate and fancy response...',
7
- 'Generating a response that will blow your mind...',
8
- 'Generating a response that will make you smile...',
9
- 'Thinking of a response...',
10
- 'Thinking of a response that will make you smile...',
11
- 'Gathering my thoughts...',
12
- 'Gathering my thoughts to give you a response...',
7
+ {
8
+ delayAfter: defaultDelay,
9
+ text: 'Generating an accurate and fancy response...',
10
+ },
11
+ {
12
+ delayAfter: defaultDelay,
13
+ text: 'Generating a response that will blow your mind...',
14
+ },
15
+ {
16
+ delayAfter: defaultDelay,
17
+ text: 'Generating a response that will make you smile...',
18
+ },
19
+ { delayAfter: defaultDelay, text: 'Thinking of a response...' },
20
+ {
21
+ delayAfter: defaultDelay,
22
+ text: 'Thinking of a response that will make you smile...',
23
+ },
24
+ { delayAfter: defaultDelay, text: 'Gathering my thoughts...' },
25
+ {
26
+ delayAfter: defaultDelay,
27
+ text: 'Gathering my thoughts to give you a response...',
28
+ },
13
29
  ],
14
30
  it: [
15
- 'Sto generando una risposta accurata e fantasiosa...',
16
- 'Sto generando una risposta che ti farà impazzire...',
17
- 'Sto generando una risposta che ti farà sorridere...',
18
- 'Sto pensando ad una risposta...',
19
- 'Sto pensando ad una risposta che ti farà sorridere...',
20
- 'Sto raccogliendo i miei pensieri...',
21
- 'Sto raccogliendo i miei pensieri per darti una risposta...',
31
+ {
32
+ delayAfter: defaultDelay,
33
+ text: 'Sto generando una risposta accurata e fantasiosa...',
34
+ },
35
+ {
36
+ delayAfter: defaultDelay,
37
+ text: 'Sto generando una risposta che ti farà impazzire...',
38
+ },
39
+ {
40
+ delayAfter: defaultDelay,
41
+ text: 'Sto generando una risposta che ti farà sorridere...',
42
+ },
43
+ { delayAfter: defaultDelay, text: 'Sto pensando ad una risposta...' },
44
+ {
45
+ delayAfter: defaultDelay,
46
+ text: 'Sto pensando ad una risposta che ti farà sorridere...',
47
+ },
48
+ { delayAfter: defaultDelay, text: 'Sto raccogliendo i miei pensieri...' },
49
+ {
50
+ delayAfter: defaultDelay,
51
+ text: 'Sto raccogliendo i miei pensieri per darti una risposta...',
52
+ },
22
53
  ],
23
54
  };
24
- const Typing = ({ useDefaultSentences = false, lang = 'en', sentence, }) => {
25
- const [text, setText] = useState(sentence
26
- ? `${sentence.endsWith('...') ? sentence : `${sentence}...`}${separator}`
27
- : '');
55
+ const getSeparatorString = (seconds = defaultDelay) => new Array(seconds * 20).fill(separator).join('');
56
+ const Typing = ({ useDefaultSentences = false, lang = 'en', sentence, sentences, }) => {
57
+ var _a;
58
+ const [index, setIndex] = useState(0);
59
+ const [text, setText] = useState(((_a = sentences === null || sentences === void 0 ? void 0 : sentences[lang]) === null || _a === void 0 ? void 0 : _a.length)
60
+ ? `${sentences[lang][0].text.endsWith('...')
61
+ ? sentences[lang][0].text
62
+ : `${sentences[lang][0].text}...`}${getSeparatorString(sentences[lang][0].delayAfter)}`
63
+ : sentence
64
+ ? `${sentence.endsWith('...') ? sentence : `${sentence}...`}${getSeparatorString()}`
65
+ : '');
28
66
  const [shownText, setShownText] = useState('');
29
67
  useEffect(() => {
30
68
  const interval = setInterval(() => {
69
+ var _a;
31
70
  const letter = text[shownText.length];
32
71
  if (letter !== undefined && text.length > 0) {
33
72
  setShownText(prev => prev + letter);
34
73
  }
35
- else if (!sentence && useDefaultSentences) {
74
+ else if (((_a = sentences === null || sentences === void 0 ? void 0 : sentences[lang]) === null || _a === void 0 ? void 0 : _a.length) &&
75
+ index < sentences[lang].length - 1) {
76
+ const nextIndex = index + 1;
77
+ const sentence = sentences[lang][nextIndex];
78
+ setText(`${sentence.text.endsWith('...')
79
+ ? sentence.text
80
+ : `${sentence.text}...`}${getSeparatorString(sentence.delayAfter)}`);
81
+ setShownText('');
82
+ setIndex(nextIndex);
83
+ }
84
+ else if (!sentences && !sentence && useDefaultSentences) {
85
+ const sentence = defaultSentences[lang][Math.floor(Math.random() * defaultSentences[lang].length)];
86
+ setText(`${sentence.text}${getSeparatorString(sentence.delayAfter)}`);
36
87
  setShownText('');
37
- setText(sentences[lang][Math.floor(Math.random() * sentences[lang].length)] +
38
- separator);
39
88
  }
40
89
  }, 50);
41
90
  return () => clearInterval(interval);
@@ -1 +1 @@
1
- {"version":3,"file":"Typing.js","sourceRoot":"","sources":["../../../src/components/Typing/Typing.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,SAAS,GAAG,0CAA0C,CAAC;AAC7D,MAAM,SAAS,GAAG;IAChB,EAAE,EAAE;QACF,8CAA8C;QAC9C,mDAAmD;QACnD,mDAAmD;QACnD,2BAA2B;QAC3B,oDAAoD;QACpD,0BAA0B;QAC1B,iDAAiD;KAClD;IACD,EAAE,EAAE;QACF,qDAAqD;QACrD,qDAAqD;QACrD,qDAAqD;QACrD,iCAAiC;QACjC,uDAAuD;QACvD,qCAAqC;QACrC,4DAA4D;KAC7D;CACF,CAAC;AAQF,MAAM,MAAM,GAAG,CAAC,EACd,mBAAmB,GAAG,KAAK,EAC3B,IAAI,GAAG,IAAI,EACX,QAAQ,GACF,EAAE,EAAE;IACV,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAC9B,QAAQ;QACN,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,GAAG,SAAS,EAAE;QACzE,CAAC,CAAC,EAAE,CACP,CAAC;IACF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE/C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3C,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;aACrC;iBAAM,IAAI,CAAC,QAAQ,IAAI,mBAAmB,EAAE;gBAC3C,YAAY,CAAC,EAAE,CAAC,CAAC;gBACjB,OAAO,CACL,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;oBACjE,SAAS,CACZ,CAAC;aACH;QACH,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,cAAK,SAAS,EAAC,qBAAqB,YAClC,eAAK,SAAS,EAAC,4BAA4B,aACzC,eAAK,EAAE,EAAC,MAAM,aACZ,eAAM,SAAS,EAAC,KAAK,GAAQ,EAC7B,eAAM,SAAS,EAAC,KAAK,GAAQ,EAC7B,eAAM,SAAS,EAAC,KAAK,GAAQ,IACzB,EACL,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,sBAAI,SAAS,GAAK,IAClC,GACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Typing.js","sourceRoot":"","sources":["../../../src/components/Typing/Typing.tsx"],"names":[],"mappings":"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"}
@@ -17,3 +17,9 @@ export declare const prismSyntaxLangs: ({
17
17
  monacoLang: string;
18
18
  executable?: undefined;
19
19
  })[];
20
+ export declare const boardOfExpertsLoadingSentences: {
21
+ [lang: string]: {
22
+ text: string;
23
+ delayAfter: number;
24
+ }[];
25
+ };
@@ -108,4 +108,50 @@ export const prismSyntaxLangs = [
108
108
  monacoLang: 'sql',
109
109
  },
110
110
  ];
111
+ export const boardOfExpertsLoadingSentences = {
112
+ it: [
113
+ {
114
+ text: "Cerco l'esperto più adatto",
115
+ delayAfter: 5,
116
+ },
117
+ {
118
+ text: "Contatto l'esperto",
119
+ delayAfter: 3,
120
+ },
121
+ {
122
+ text: "Spiego all'esperto la domanda",
123
+ delayAfter: 2,
124
+ },
125
+ {
126
+ text: "L'esperto sta preparando una risposta",
127
+ delayAfter: 6,
128
+ },
129
+ {
130
+ text: 'Genero una risposta adatta',
131
+ delayAfter: 3,
132
+ },
133
+ ],
134
+ en: [
135
+ {
136
+ text: "I'm looking for the most suitable expert",
137
+ delayAfter: 5,
138
+ },
139
+ {
140
+ text: "I'm contacting the expert",
141
+ delayAfter: 3,
142
+ },
143
+ {
144
+ text: "I'm explaining the question to the expert",
145
+ delayAfter: 2,
146
+ },
147
+ {
148
+ text: 'The expert is preparing an answer',
149
+ delayAfter: 6,
150
+ },
151
+ {
152
+ text: 'I am generating a suitable answer',
153
+ delayAfter: 3,
154
+ },
155
+ ],
156
+ };
111
157
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/helpers/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/helpers/constants.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.3.0",
2
+ "version": "4.4.0",
3
3
  "name": "@memori.ai/memori-react",
4
4
  "author": "Memori Srl",
5
5
  "main": "dist/index.js",
@@ -19,6 +19,7 @@ import { Props as MemoriProps } from '../MemoriWidget/MemoriWidget';
19
19
  import memoriApiClient from '@memori.ai/memori-api-client';
20
20
  import ChatInputs from '../ChatInputs/ChatInputs';
21
21
  import Typing from '../Typing/Typing';
22
+ import { boardOfExpertsLoadingSentences } from '../../helpers/constants';
22
23
 
23
24
  export interface Props {
24
25
  memori: Memori;
@@ -298,9 +299,16 @@ const Chat: React.FC<Props> = ({
298
299
  ? translateTo.toLowerCase() === 'it'
299
300
  ? 'it'
300
301
  : 'en'
302
+ : memori.culture?.split('-')?.[0]?.toLowerCase() === 'it'
303
+ ? 'it'
301
304
  : 'en'
302
305
  }
303
306
  sentence={typingText}
307
+ sentences={
308
+ memori.enableBoardOfExperts
309
+ ? boardOfExpertsLoadingSentences
310
+ : undefined
311
+ }
304
312
  key={typingText}
305
313
  />
306
314
  )}
@@ -267,17 +267,19 @@ const KnownFacts = ({
267
267
  <div className="memori--table--pagination--pages">
268
268
  <Button
269
269
  shape="circle"
270
- disabled={pageIndex === 0}
270
+ disabled={pageIndex === 0 || pageIndex < numberOfResults}
271
271
  padded={false}
272
272
  title={t('previous') || 'Previous'}
273
273
  icon={<ChevronLeft />}
274
274
  onClick={() => {
275
- setPageIndex(pageIndex - 1);
276
- fetchKnownFacts(undefined, pageIndex - 1, numberOfResults);
275
+ let from =
276
+ (pageIndex / numberOfResults - 1) * numberOfResults;
277
+ setPageIndex(from);
278
+ fetchKnownFacts(undefined, from, numberOfResults);
277
279
  }}
278
280
  />
279
281
  <span className="memori--table--pagination--pages--current">
280
- {pageIndex + 1} /{' '}
282
+ {Math.ceil(pageIndex / numberOfResults) + 1} /{' '}
281
283
  {Math.ceil(knownFactsCount / numberOfResults)}
282
284
  </span>
283
285
  <Button
@@ -286,11 +288,14 @@ const KnownFacts = ({
286
288
  title={t('next') || 'Next'}
287
289
  icon={<ChevronRight />}
288
290
  disabled={
289
- (pageIndex + 1) * numberOfResults >= knownFactsCount
291
+ (pageIndex / numberOfResults + 1) * numberOfResults >=
292
+ knownFactsCount
290
293
  }
291
294
  onClick={() => {
292
- setPageIndex(pageIndex + 1);
293
- fetchKnownFacts(undefined, 1, numberOfResults);
295
+ let from =
296
+ (pageIndex / numberOfResults + 1) * numberOfResults;
297
+ setPageIndex(from);
298
+ fetchKnownFacts(undefined, from, numberOfResults);
294
299
  }}
295
300
  />
296
301
  </div>
@@ -306,7 +311,8 @@ const KnownFacts = ({
306
311
  displayValue={`${numberOfResults} / ${t('page') || 'page'}`}
307
312
  onChange={value => {
308
313
  setNumberOfResults(value);
309
- fetchKnownFacts(undefined, undefined, value);
314
+ setPageIndex(0);
315
+ fetchKnownFacts(undefined, 0, value);
310
316
  }}
311
317
  />
312
318
  </nav>
@@ -214,4 +214,9 @@
214
214
  padding: 5px;
215
215
  border: 1px solid #666;
216
216
  border-radius: 50%;
217
+ }
218
+
219
+ .memori--deep-thought-disclaimer a {
220
+ color: inherit;
221
+ text-decoration: underline;
217
222
  }
@@ -18,11 +18,6 @@ const meta: Meta = {
18
18
  options: ['en', 'it'],
19
19
  },
20
20
  },
21
- sentence: {
22
- control: {
23
- type: 'text',
24
- },
25
- },
26
21
  },
27
22
  parameters: {
28
23
  controls: { expanded: false },
@@ -57,3 +52,37 @@ export const WithCustomLoadingText = Template.bind({});
57
52
  WithCustomLoadingText.args = {
58
53
  sentence: 'Chiedo agli unicorni cosa ne pensano...',
59
54
  };
55
+
56
+ export const WithCustomLoadingTextList = Template.bind({});
57
+ WithCustomLoadingTextList.args = {
58
+ sentences: {
59
+ en: [
60
+ {
61
+ text: 'I am asking the unicorns what they think about it',
62
+ delayAfter: 5,
63
+ },
64
+ {
65
+ text: 'I am trying to understand what my cat is saying about it',
66
+ delayAfter: 10,
67
+ },
68
+ {
69
+ text: 'I am collecting the opinions of the people I know',
70
+ delayAfter: 2,
71
+ },
72
+ ],
73
+ it: [
74
+ {
75
+ text: 'Chiedo agli unicorni cosa ne pensano',
76
+ delayAfter: 5,
77
+ },
78
+ {
79
+ text: 'Sto cercando di capire cosa ne pensa il mio gatto',
80
+ delayAfter: 10,
81
+ },
82
+ {
83
+ text: 'Sto raccogliendo le opinioni delle persone che conosco',
84
+ delayAfter: 2,
85
+ },
86
+ ],
87
+ },
88
+ };
@@ -22,3 +22,41 @@ it('renders Typing with custom loading text unchanged', () => {
22
22
  );
23
23
  expect(container).toMatchSnapshot();
24
24
  });
25
+
26
+ it('renders Typing with custom loading text list unchanged', () => {
27
+ const { container } = render(
28
+ <Typing
29
+ sentences={{
30
+ en: [
31
+ {
32
+ text: 'I am asking the unicorns what they think about it',
33
+ delayAfter: 5,
34
+ },
35
+ {
36
+ text: 'I am trying to understand what my cat is saying about it',
37
+ delayAfter: 10,
38
+ },
39
+ {
40
+ text: 'I am collecting the opinions of the people I know',
41
+ delayAfter: 2,
42
+ },
43
+ ],
44
+ it: [
45
+ {
46
+ text: 'Chiedo agli unicorni cosa ne pensano',
47
+ delayAfter: 5,
48
+ },
49
+ {
50
+ text: 'Sto cercando di capire cosa ne pensa il mio gatto',
51
+ delayAfter: 10,
52
+ },
53
+ {
54
+ text: 'Sto raccogliendo le opinioni delle persone che conosco',
55
+ delayAfter: 2,
56
+ },
57
+ ],
58
+ }}
59
+ />
60
+ );
61
+ expect(container).toMatchSnapshot();
62
+ });
@@ -1,24 +1,55 @@
1
1
  import { useEffect, useState } from 'react';
2
2
 
3
- const separator = ' ';
4
- const sentences = {
3
+ const separator = ' ';
4
+ const defaultDelay = 3;
5
+ const defaultSentences = {
5
6
  en: [
6
- 'Generating an accurate and fancy response...',
7
- 'Generating a response that will blow your mind...',
8
- 'Generating a response that will make you smile...',
9
- 'Thinking of a response...',
10
- 'Thinking of a response that will make you smile...',
11
- 'Gathering my thoughts...',
12
- 'Gathering my thoughts to give you a response...',
7
+ {
8
+ delayAfter: defaultDelay,
9
+ text: 'Generating an accurate and fancy response...',
10
+ },
11
+ {
12
+ delayAfter: defaultDelay,
13
+ text: 'Generating a response that will blow your mind...',
14
+ },
15
+ {
16
+ delayAfter: defaultDelay,
17
+ text: 'Generating a response that will make you smile...',
18
+ },
19
+ { delayAfter: defaultDelay, text: 'Thinking of a response...' },
20
+ {
21
+ delayAfter: defaultDelay,
22
+ text: 'Thinking of a response that will make you smile...',
23
+ },
24
+ { delayAfter: defaultDelay, text: 'Gathering my thoughts...' },
25
+ {
26
+ delayAfter: defaultDelay,
27
+ text: 'Gathering my thoughts to give you a response...',
28
+ },
13
29
  ],
14
30
  it: [
15
- 'Sto generando una risposta accurata e fantasiosa...',
16
- 'Sto generando una risposta che ti farà impazzire...',
17
- 'Sto generando una risposta che ti farà sorridere...',
18
- 'Sto pensando ad una risposta...',
19
- 'Sto pensando ad una risposta che ti farà sorridere...',
20
- 'Sto raccogliendo i miei pensieri...',
21
- 'Sto raccogliendo i miei pensieri per darti una risposta...',
31
+ {
32
+ delayAfter: defaultDelay,
33
+ text: 'Sto generando una risposta accurata e fantasiosa...',
34
+ },
35
+ {
36
+ delayAfter: defaultDelay,
37
+ text: 'Sto generando una risposta che ti farà impazzire...',
38
+ },
39
+ {
40
+ delayAfter: defaultDelay,
41
+ text: 'Sto generando una risposta che ti farà sorridere...',
42
+ },
43
+ { delayAfter: defaultDelay, text: 'Sto pensando ad una risposta...' },
44
+ {
45
+ delayAfter: defaultDelay,
46
+ text: 'Sto pensando ad una risposta che ti farà sorridere...',
47
+ },
48
+ { delayAfter: defaultDelay, text: 'Sto raccogliendo i miei pensieri...' },
49
+ {
50
+ delayAfter: defaultDelay,
51
+ text: 'Sto raccogliendo i miei pensieri per darti una risposta...',
52
+ },
22
53
  ],
23
54
  };
24
55
 
@@ -26,16 +57,41 @@ export interface Props {
26
57
  useDefaultSentences?: boolean;
27
58
  lang?: 'en' | 'it';
28
59
  sentence?: string;
60
+ sentences?: {
61
+ [lang: string]: {
62
+ /**
63
+ * Sentence to show
64
+ */
65
+ text: string;
66
+ /**
67
+ * Seconds to wait after the sentence is completed
68
+ */
69
+ delayAfter: number;
70
+ }[];
71
+ };
29
72
  }
30
73
 
74
+ const getSeparatorString = (seconds = defaultDelay) =>
75
+ new Array(seconds * 20).fill(separator).join('');
76
+
31
77
  const Typing = ({
32
78
  useDefaultSentences = false,
33
79
  lang = 'en',
34
80
  sentence,
81
+ sentences,
35
82
  }: Props) => {
83
+ const [index, setIndex] = useState(0);
36
84
  const [text, setText] = useState(
37
- sentence
38
- ? `${sentence.endsWith('...') ? sentence : `${sentence}...`}${separator}`
85
+ sentences?.[lang]?.length
86
+ ? `${
87
+ sentences[lang][0].text.endsWith('...')
88
+ ? sentences[lang][0].text
89
+ : `${sentences[lang][0].text}...`
90
+ }${getSeparatorString(sentences[lang][0].delayAfter)}`
91
+ : sentence
92
+ ? `${
93
+ sentence.endsWith('...') ? sentence : `${sentence}...`
94
+ }${getSeparatorString()}`
39
95
  : ''
40
96
  );
41
97
  const [shownText, setShownText] = useState('');
@@ -45,12 +101,28 @@ const Typing = ({
45
101
  const letter = text[shownText.length];
46
102
  if (letter !== undefined && text.length > 0) {
47
103
  setShownText(prev => prev + letter);
48
- } else if (!sentence && useDefaultSentences) {
49
- setShownText('');
104
+ } else if (
105
+ sentences?.[lang]?.length &&
106
+ index < sentences[lang].length - 1
107
+ ) {
108
+ const nextIndex = index + 1;
109
+ const sentence = sentences[lang][nextIndex];
50
110
  setText(
51
- sentences[lang][Math.floor(Math.random() * sentences[lang].length)] +
52
- separator
111
+ `${
112
+ sentence.text.endsWith('...')
113
+ ? sentence.text
114
+ : `${sentence.text}...`
115
+ }${getSeparatorString(sentence.delayAfter)}`
53
116
  );
117
+ setShownText('');
118
+ setIndex(nextIndex);
119
+ } else if (!sentences && !sentence && useDefaultSentences) {
120
+ const sentence =
121
+ defaultSentences[lang][
122
+ Math.floor(Math.random() * defaultSentences[lang].length)
123
+ ];
124
+ setText(`${sentence.text}${getSeparatorString(sentence.delayAfter)}`);
125
+ setShownText('');
54
126
  }
55
127
  }, 50);
56
128
 
@@ -26,6 +26,33 @@ exports[`renders Typing unchanged 1`] = `
26
26
  </div>
27
27
  `;
28
28
 
29
+ exports[`renders Typing with custom loading text list unchanged 1`] = `
30
+ <div>
31
+ <div
32
+ class="memori-chat--bubble"
33
+ >
34
+ <div
35
+ class="memori-chat--bubble-typing"
36
+ >
37
+ <div
38
+ id="wave"
39
+ >
40
+ <span
41
+ class="dot"
42
+ />
43
+ <span
44
+ class="dot"
45
+ />
46
+ <span
47
+ class="dot"
48
+ />
49
+ </div>
50
+ <p />
51
+ </div>
52
+ </div>
53
+ </div>
54
+ `;
55
+
29
56
  exports[`renders Typing with custom loading text unchanged 1`] = `
30
57
  <div>
31
58
  <div
@@ -111,3 +111,61 @@ export const prismSyntaxLangs = [
111
111
  monacoLang: 'sql',
112
112
  },
113
113
  ];
114
+
115
+ export const boardOfExpertsLoadingSentences: {
116
+ [lang: string]: {
117
+ /**
118
+ * Sentence to show
119
+ */
120
+ text: string;
121
+ /**
122
+ * Seconds to wait after the sentence is completed
123
+ */
124
+ delayAfter: number;
125
+ }[];
126
+ } = {
127
+ it: [
128
+ {
129
+ text: "Cerco l'esperto più adatto",
130
+ delayAfter: 5,
131
+ },
132
+ {
133
+ text: "Contatto l'esperto",
134
+ delayAfter: 3,
135
+ },
136
+ {
137
+ text: "Spiego all'esperto la domanda",
138
+ delayAfter: 2,
139
+ },
140
+ {
141
+ text: "L'esperto sta preparando una risposta",
142
+ delayAfter: 6,
143
+ },
144
+ {
145
+ text: 'Genero una risposta adatta',
146
+ delayAfter: 3,
147
+ },
148
+ ],
149
+ en: [
150
+ {
151
+ text: "I'm looking for the most suitable expert",
152
+ delayAfter: 5,
153
+ },
154
+ {
155
+ text: "I'm contacting the expert",
156
+ delayAfter: 3,
157
+ },
158
+ {
159
+ text: "I'm explaining the question to the expert",
160
+ delayAfter: 2,
161
+ },
162
+ {
163
+ text: 'The expert is preparing an answer',
164
+ delayAfter: 6,
165
+ },
166
+ {
167
+ text: 'I am generating a suitable answer',
168
+ delayAfter: 3,
169
+ },
170
+ ],
171
+ };
@@ -68,6 +68,21 @@ LocalhostBoE.args = {
68
68
  integrationID: '82f017cc-450b-4c47-acf5-47910d336ce9',
69
69
  };
70
70
 
71
+ export const Staging = Template.bind({});
72
+ Staging.args = {
73
+ memoriName: 'Giuseppe Verdi',
74
+ ownerUserName: 'nunziofiore',
75
+ memoriID: 'b996dbb9-3728-44d6-96f7-9b728224698c',
76
+ ownerUserID: 'fbee9aaa-0c46-460e-9800-15e31d7c99c0',
77
+ tenantID: 'twincreator-staging.aclambda.online',
78
+ apiURL: 'https://backend-staging.memori.ai',
79
+ baseURL: 'https://twincreator-staging.aclambda.online',
80
+ uiLang: 'EN',
81
+ lang: 'IT',
82
+ layout: 'FULLPAGE',
83
+ authToken: '00000000-0000-0000-0000-000000000000',
84
+ };
85
+
71
86
  const TemplateWithBatchButton: Story<Props> = args => (
72
87
  <div>
73
88
  <button