quickblox-react-ui-kit 0.2.3 → 0.2.4

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 (68) hide show
  1. package/dist/CommonTypes/FunctionResult.d.ts +5 -1
  2. package/dist/Data/DefaultConfigurations.d.ts +2 -2
  3. package/dist/Domain/use_cases/ai/AIAnswerAssistUseCase.d.ts +13 -0
  4. package/dist/Domain/use_cases/ai/AIAnswerAssistWithProxyUseCase.d.ts +13 -0
  5. package/dist/Domain/use_cases/ai/AITranslateUseCase.d.ts +14 -0
  6. package/dist/Domain/use_cases/ai/AITranslateWithProxyUseCase.d.ts +14 -0
  7. package/dist/Presentation/Views/Base/BaseViewModel.d.ts +2 -0
  8. package/dist/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/AIMessageWidget.d.ts +4 -1
  9. package/dist/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/AIWidgetActions/AIWidgetActions.d.ts +3 -2
  10. package/dist/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/Tone.d.ts +5 -13
  11. package/dist/Presentation/components/UI/Dialogs/MessagesView/DefaultAttachmentComponent/DefaultAttachmentComponent.d.ts +7 -0
  12. package/dist/Presentation/components/UI/Dialogs/MessagesView/ErrorToast/ErrorToast.d.ts +7 -0
  13. package/dist/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.d.ts +3 -1
  14. package/dist/Presentation/components/UI/Dialogs/PreviewDialog/PreviewAudioFile/PreviewAudioFile.d.ts +7 -0
  15. package/dist/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDefaultFile/PreviewDefaultFile.d.ts +7 -0
  16. package/dist/Presentation/components/UI/Dialogs/PreviewDialog/PreviewImageFile/PreviewImageFile.d.ts +8 -0
  17. package/dist/Presentation/components/UI/Dialogs/PreviewDialog/PreviewVideoFile/PreviewVideoFile.d.ts +7 -0
  18. package/dist/Presentation/components/UI/svgs/Icons/AIWidgets/BotIcon/BotIcon.d.ts +4 -0
  19. package/dist/QBconfig.d.ts +14 -3
  20. package/dist/index-ui.js +316 -33
  21. package/dist/utils/utils.d.ts +9 -0
  22. package/global.d.ts +12 -4
  23. package/package.json +5 -1
  24. package/src/CommonTypes/FunctionResult.ts +6 -1
  25. package/src/Data/DefaultConfigurations.ts +155 -19
  26. package/src/Domain/use_cases/ai/AIAnswerAssistUseCase.ts +69 -0
  27. package/src/Domain/use_cases/ai/AIAnswerAssistWithProxyUseCase.ts +71 -0
  28. package/src/Domain/use_cases/ai/AIRephraseUseCase.ts +38 -36
  29. package/src/Domain/use_cases/ai/AIRephraseWithProxyUseCase.ts +25 -21
  30. package/src/Domain/use_cases/ai/AITranslateUseCase.ts +76 -0
  31. package/src/Domain/use_cases/ai/AITranslateWithProxyUseCase.ts +79 -0
  32. package/src/Presentation/Views/Base/BaseViewModel.ts +2 -0
  33. package/src/Presentation/Views/Dialogs/Dialogs.tsx +1 -1
  34. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/AIMessageWidget.ts +7 -2
  35. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/AIWidgetActions/AIWidgetActions.tsx +10 -4
  36. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/Tone.ts +29 -15
  37. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAIAssistAnswerWidget.tsx +10 -6
  38. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAIAssistAnswerWidgetWithProxy.tsx +10 -6
  39. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAIRephraseMessageWidget.tsx +17 -0
  40. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAIRephraseMessageWidgetWithProxy.tsx +16 -0
  41. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAITranslateWidget.tsx +13 -12
  42. package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAITranslateWidgetWithProxy.tsx +13 -12
  43. package/src/Presentation/components/UI/Dialogs/MessagesView/DefaultAttachmentComponent/DefaultAttachmentComponent.scss +76 -0
  44. package/src/Presentation/components/UI/Dialogs/MessagesView/DefaultAttachmentComponent/DefaultAttachmentComponent.tsx +34 -0
  45. package/src/Presentation/components/UI/Dialogs/MessagesView/ErrorToast/ErrorToast.scss +26 -0
  46. package/src/Presentation/components/UI/Dialogs/MessagesView/ErrorToast/ErrorToast.tsx +25 -0
  47. package/src/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.scss +4 -6
  48. package/src/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.tsx +93 -405
  49. package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesView.scss +2 -3
  50. package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesView.tsx +561 -400
  51. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewAudioFile/PreviewAudioFile.scss +62 -0
  52. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewAudioFile/PreviewAudioFile.tsx +25 -0
  53. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDefaultFile/PreviewDefaultFile.scss +61 -0
  54. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDefaultFile/PreviewDefaultFile.tsx +32 -0
  55. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialog.scss +2 -2
  56. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialog.tsx +50 -2
  57. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewImageFile/PreviewImageFile.scss +40 -0
  58. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewImageFile/PreviewImageFile.tsx +26 -0
  59. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewVideoFile/PreviewVideoFile.scss +62 -0
  60. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewVideoFile/PreviewVideoFile.tsx +25 -0
  61. package/src/Presentation/components/UI/svgs/Icons/AIWidgets/BotIcon/BotIcon.svg +5 -0
  62. package/src/Presentation/components/UI/svgs/Icons/AIWidgets/BotIcon/BotIcon.tsx +50 -0
  63. package/src/Presentation/components/layouts/Desktop/QuickBloxUIKitDesktopLayout.tsx +3 -15
  64. package/src/Presentation/components/providers/QuickBloxUIKitProvider/useQbInitializedDataContext.ts +15 -14
  65. package/src/QBconfig.ts +156 -10
  66. package/src/package_artan_react_ui.json +13 -9
  67. package/src/package_original.json +5 -1
  68. package/src/utils/utils.ts +63 -0
@@ -0,0 +1,76 @@
1
+ import { AITranslateSettings, QBAITranslate } from 'qb-ai-translate';
2
+ import { IChatMessage } from '../../../Data/source/AISource';
3
+ import { IUseCase } from '../base/IUseCase';
4
+
5
+ export class AITranslateUseCase implements IUseCase<void, string> {
6
+ private textToSend: string;
7
+
8
+ private language: string;
9
+
10
+ private dialogMessages: IChatMessage[];
11
+
12
+ private servername: string;
13
+
14
+ private api: string;
15
+
16
+ private port: string;
17
+
18
+ private sessionToken: string;
19
+
20
+ private openAIModel: string;
21
+
22
+ constructor(
23
+ textToSend: string,
24
+ language: string,
25
+ dialogMessages: IChatMessage[],
26
+ servername: string,
27
+ api: string,
28
+ port: string,
29
+ sessionToken: string,
30
+ openAIModel = 'gpt-3.5-turbo',
31
+ ) {
32
+ console.log('CONSTRUCTOR AIRephraseUseCase');
33
+ this.api = api;
34
+ this.openAIModel = openAIModel;
35
+ this.port = port;
36
+ this.sessionToken = sessionToken;
37
+ this.textToSend = textToSend;
38
+ this.language = language;
39
+ this.servername = servername;
40
+ this.dialogMessages = dialogMessages;
41
+ }
42
+
43
+ async execute(): Promise<string> {
44
+ console.log('execute AIRephraseUseCase');
45
+ const settings: AITranslateSettings =
46
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
47
+ QBAITranslate.createDefaultAITranslateSettings();
48
+
49
+ settings.apiKey = this.sessionToken;
50
+ // settings.organization = 'Quickblox';
51
+ settings.model = this.openAIModel;
52
+ settings.language = this.language;
53
+
54
+ return QBAITranslate.translate(
55
+ this.textToSend,
56
+ this.dialogMessages,
57
+ settings,
58
+ );
59
+
60
+ // const prompt = AIUtils.createTranslatePrompt(
61
+ // this.textToSend,
62
+ // this.language,
63
+ // );
64
+ //
65
+ // return AISource.getData(
66
+ // prompt,
67
+ // // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
68
+ // this.dialogMessages,
69
+ // this.servername,
70
+ // this.api,
71
+ // this.port,
72
+ // this.sessionToken,
73
+ // this.openAIModel,
74
+ // );
75
+ }
76
+ }
@@ -0,0 +1,79 @@
1
+ // eslint-disable-next-line import/extensions
2
+ import { AITranslateSettings, QBAITranslate } from 'qb-ai-translate';
3
+ import { IChatMessage } from '../../../Data/source/AISource';
4
+ import { IUseCase } from '../base/IUseCase';
5
+
6
+ export class AITranslateWithProxyUseCase implements IUseCase<void, string> {
7
+ private textToSend: string;
8
+
9
+ private language: string;
10
+
11
+ private dialogMessages: IChatMessage[];
12
+
13
+ private servername: string;
14
+
15
+ private api: string;
16
+
17
+ private port: string;
18
+
19
+ private sessionToken: string;
20
+
21
+ private openAIModel: string;
22
+
23
+ constructor(
24
+ textToSend: string,
25
+ language: string,
26
+ dialogMessages: IChatMessage[],
27
+ servername: string,
28
+ api: string,
29
+ port: string,
30
+ sessionToken: string,
31
+ openAIModel = 'gpt-3.5-turbo',
32
+ ) {
33
+ console.log('CONSTRUCTOR AIRephraseUseCase');
34
+ this.api = api;
35
+ this.openAIModel = openAIModel;
36
+ this.port = port;
37
+ this.sessionToken = sessionToken;
38
+ this.textToSend = textToSend;
39
+ this.language = language;
40
+ this.servername = servername;
41
+ this.dialogMessages = dialogMessages;
42
+ }
43
+
44
+ async execute(): Promise<string> {
45
+ console.log('execute AIRephraseUseCase');
46
+
47
+ const settings: AITranslateSettings =
48
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
49
+ QBAITranslate.createDefaultAITranslateSettings();
50
+
51
+ settings.token = this.sessionToken;
52
+ // settings.organization = 'Quickblox';
53
+ settings.model = this.openAIModel;
54
+ settings.language = this.language;
55
+ settings.serverPath = `${this.servername}:${this.port}/${this.api}`;
56
+
57
+ return QBAITranslate.translate(
58
+ this.textToSend,
59
+ this.dialogMessages,
60
+ settings,
61
+ );
62
+
63
+ // const prompt = AIUtils.createTranslatePrompt(
64
+ // this.textToSend,
65
+ // this.language,
66
+ // );
67
+ //
68
+ // return AISource.getDataWithProxyServer(
69
+ // prompt,
70
+ // // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
71
+ // this.dialogMessages,
72
+ // this.servername,
73
+ // this.api,
74
+ // this.port,
75
+ // this.sessionToken,
76
+ // this.openAIModel,
77
+ // );
78
+ }
79
+ }
@@ -3,6 +3,7 @@ import { GroupDialogEntity } from '../../../Domain/entity/GroupDialogEntity';
3
3
  import { DialogEntity } from '../../../Domain/entity/DialogEntity';
4
4
  import { FileEntity } from '../../../Domain/entity/FileEntity';
5
5
  import { IChatMessage } from '../../../Data/source/AISource';
6
+ import { Tone } from '../../components/UI/Dialogs/MessagesView/AIWidgets/Tone';
6
7
 
7
8
  export default class BaseViewModel<TResult> {
8
9
  get entity(): TResult {
@@ -86,3 +87,4 @@ export type FunctionTypeStringWithContextToString = (
86
87
  context: IChatMessage[],
87
88
  additionalSettings?: { [key: string]: any },
88
89
  ) => Promise<string>;
90
+ export type FunctionTypeVoidToTones = () => Tone[];
@@ -213,7 +213,7 @@ const DialogsComponent: React.FC<DialogsProps> = ({
213
213
  ) {
214
214
  const imagePhoto = (currentDialog.entity as GroupDialogEntity).photo;
215
215
 
216
- console.log('Dialogs: avatar: ', imagePhoto || 'NO FOTO');
216
+ // console.log('Dialogs: avatar: ', imagePhoto || 'NO FOTO');
217
217
  AvatarComponent = imagePhoto ? (
218
218
  <img
219
219
  style={{ width: '55px', height: '55px', borderRadius: '50%' }}
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  FunctionTypeFileWithContextToToVoid,
3
3
  FunctionTypeJSXElement,
4
- FunctionTypeStringWithContextToString,
4
+ FunctionTypeStringWithContextToString, FunctionTypeVoidToTones,
5
5
  } from '../../../../../Views/Base/BaseViewModel';
6
+ import {Tone} from "./Tone";
6
7
 
7
8
  export interface MessageWidgetProps {
8
9
  // https://api.openai.com/v1/chat/completions'
@@ -29,7 +30,11 @@ export interface AIFileWidget extends AIWidget {
29
30
  export interface AIMessageWidget extends AITextWidget {
30
31
  textToWidget: FunctionTypeStringWithContextToString;
31
32
  }
32
-
33
+ //
34
+ export interface AIRephraseWidget extends AIMessageWidget {
35
+ tonesToWidget: FunctionTypeVoidToTones;
36
+ }
37
+ //
33
38
  export interface AIAttachmentWidget extends AIFileWidget {
34
39
  fileToWidget: FunctionTypeFileWithContextToToVoid;
35
40
  }
@@ -2,7 +2,7 @@ import React, { useState, CSSProperties, useRef, useEffect } from 'react';
2
2
  import './AIWidgetActions.scss';
3
3
  import EditDots from '../../../../svgs/Icons/Actions/EditDots';
4
4
 
5
- type MenuItem = {
5
+ export type MenuItem = {
6
6
  title: string;
7
7
  icon?: JSX.Element; // Добавлено поле для иконки пункта меню
8
8
  action: () => void;
@@ -12,6 +12,7 @@ type ContextMenuProps = {
12
12
  widgetToRender?: JSX.Element;
13
13
  items?: MenuItem[];
14
14
  title?: string | null;
15
+ disabled?: boolean;
15
16
  };
16
17
 
17
18
  const ContextMenuStyles: { [key: string]: CSSProperties } = {
@@ -20,7 +21,7 @@ const ContextMenuStyles: { [key: string]: CSSProperties } = {
20
21
  position: 'relative',
21
22
  maxWidth: '42px',
22
23
  maxHeight: '42px',
23
- cursor: 'pointer',
24
+ // cursor: 'pointer',
24
25
  },
25
26
  contextMenuContent: {
26
27
  position: 'absolute',
@@ -50,12 +51,13 @@ function AIWidgetActions({
50
51
  items,
51
52
  widgetToRender,
52
53
  title = null,
54
+ disabled = true,
53
55
  }: ContextMenuProps) {
54
56
  const [menuVisible, setMenuVisible] = useState(false);
55
57
  const contextMenuRef = useRef<HTMLDivElement | null>(null);
56
58
 
57
59
  const handleClick = () => {
58
- setMenuVisible(!menuVisible);
60
+ if (disabled) setMenuVisible(!menuVisible);
59
61
  };
60
62
 
61
63
  const handleMenuItemClick = (action: () => void) => {
@@ -85,7 +87,11 @@ function AIWidgetActions({
85
87
  <div onClick={handleClick}>{widgetToRender || <EditDots />}</div>
86
88
  {menuVisible && (
87
89
  // <div ref={contextMenuRef} style={ContextMenuStyles.contextMenuContent}>
88
- <div ref={contextMenuRef} className="dropdown-context-menu-tone">
90
+ <div
91
+ ref={contextMenuRef}
92
+ className="dropdown-context-menu-tone"
93
+ style={{ cursor: 'pointer' }}
94
+ >
89
95
  {title && <div style={ContextMenuStyles.menuTitle}>{title}</div>}
90
96
  {items?.map((item, index) => (
91
97
  <div
@@ -1,21 +1,35 @@
1
- export enum Tone {
2
- Professional = 'Professional Tone',
3
- Friendly = 'Friendly Tone',
4
- Encouraging = 'Encouraging Tone',
5
- Empathetic = 'Empathetic Tone',
6
- Neutral = 'Neutral Tone',
7
- Assertive = 'Assertive Tone',
8
- Instructive = 'Instructive Tone',
9
- Persuasive = 'Persuasive Tone',
10
- Sarcastic = 'Sarcastic/Ironic Tone',
11
- Poetic = 'Poetic Tone',
12
- Unchanged = 'Unchanged',
1
+ // export enum Tone {
2
+ // Professional = 'Professional Tone',
3
+ // Friendly = 'Friendly Tone',
4
+ // Encouraging = 'Encouraging Tone',
5
+ // Empathetic = 'Empathetic Tone',
6
+ // Neutral = 'Neutral Tone',
7
+ // Assertive = 'Assertive Tone',
8
+ // Instructive = 'Instructive Tone',
9
+ // Persuasive = 'Persuasive Tone',
10
+ // Sarcastic = 'Sarcastic/Ironic Tone',
11
+ // Poetic = 'Poetic Tone',
12
+ // Unchanged = 'Unchanged',
13
+ // }
14
+
15
+ export interface Tone {
16
+ name: string;
17
+ description: string;
18
+ iconEmoji: string;
13
19
  }
14
20
 
15
21
  export const toneToString = (tone: Tone): string => {
16
- return tone;
22
+ return tone.name;
17
23
  };
18
24
 
19
- export const stringToTone = (toneStr: string): Tone | undefined => {
20
- return Tone[toneStr as keyof typeof Tone];
25
+ export const stringToTone = (
26
+ toneStr: string,
27
+ description?: string,
28
+ emoji?: string,
29
+ ): Tone | undefined => {
30
+ return {
31
+ name: toneStr,
32
+ description: description || '',
33
+ iconEmoji: emoji || '',
34
+ };
21
35
  };
@@ -2,7 +2,8 @@ import { useState } from 'react';
2
2
  import { AIMessageWidget, MessageWidgetProps } from './AIMessageWidget';
3
3
  import AIWidgetIcon from '../../../svgs/Icons/AIWidgets/AIWidget';
4
4
  import ErrorMessageIcon from './ErrorMessageIcon';
5
- import { AISource, IChatMessage } from '../../../../../../Data/source/AISource';
5
+ import { IChatMessage } from '../../../../../../Data/source/AISource';
6
+ import { AIAnswerAssistUseCase } from '../../../../../../Domain/use_cases/ai/AIAnswerAssistUseCase';
6
7
 
7
8
  // interface MessageWidgetProps {
8
9
  // // https://api.openai.com/v1/chat/completions'
@@ -50,18 +51,21 @@ export default function UseDefaultAIAssistAnswerWidget({
50
51
  context: IChatMessage[],
51
52
  ): Promise<string> => {
52
53
  if (textToSend && textToSend.length > 0) {
53
- const prompt = `You are a customer support chat operator. Your goal is to provide helpful and informative responses to customer inquiries. Give a response to the next user's query, considering the entire conversation context, and use grammar and vocabulary at the A2-B2 level. Answer in the format of simple sentences. Do not include question in answer. Please, provide answer for this issue:"${textToSend}"`;
54
+ const openAIModel = 'gpt-3.5-turbo';
54
55
 
55
- // eslint-disable-next-line no-return-await
56
- return await AISource.getData(
57
- prompt,
56
+ const useCaseAIAnswerAssist = new AIAnswerAssistUseCase(
57
+ textToSend,
58
58
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
59
59
  context,
60
60
  servername,
61
61
  api,
62
62
  port,
63
63
  apiKeyOrSessionToken,
64
- ).then((data) => {
64
+ openAIModel,
65
+ );
66
+
67
+ // eslint-disable-next-line no-return-await
68
+ return await useCaseAIAnswerAssist.execute().then((data) => {
65
69
  setTextFromWidgetToContent(data);
66
70
 
67
71
  return data;
@@ -2,7 +2,8 @@ import { useState } from 'react';
2
2
  import { AIMessageWidget, MessageWidgetProps } from './AIMessageWidget';
3
3
  import AIWidgetIcon from '../../../svgs/Icons/AIWidgets/AIWidget';
4
4
  import ErrorMessageIcon from './ErrorMessageIcon';
5
- import { AISource, IChatMessage } from '../../../../../../Data/source/AISource';
5
+ import { IChatMessage } from '../../../../../../Data/source/AISource';
6
+ import { AIAnswerAssistWithProxyUseCase } from '../../../../../../Domain/use_cases/ai/AIAnswerAssistWithProxyUseCase';
6
7
 
7
8
  // interface MessageWidgetProps {
8
9
  // // https://api.openai.com/v1/chat/completions'
@@ -50,18 +51,21 @@ export default function UseDefaultAIAssistAnswerWidgetWithProxy({
50
51
  context: IChatMessage[],
51
52
  ): Promise<string> => {
52
53
  if (textToSend && textToSend.length > 0) {
53
- const prompt = `You are a customer support chat operator. Your goal is to provide helpful and informative responses to customer inquiries. Give a response to the next user's query, considering the entire conversation context, and use grammar and vocabulary at the A2-B2 level. Answer in the format of simple sentences. Do not include question in answer. Please, provide answer for this issue:"${textToSend}"`;
54
+ const openAIModel = 'gpt-3.5-turbo';
54
55
 
55
- // eslint-disable-next-line no-return-await
56
- return await AISource.getDataWithProxyServer(
57
- prompt,
56
+ const useCaseAIAnswerAssist = new AIAnswerAssistWithProxyUseCase(
57
+ textToSend,
58
58
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
59
59
  context,
60
60
  servername,
61
61
  api,
62
62
  port,
63
63
  apiKeyOrSessionToken,
64
- ).then((data) => {
64
+ openAIModel,
65
+ );
66
+
67
+ // eslint-disable-next-line no-return-await
68
+ return await useCaseAIAnswerAssist.execute().then((data) => {
65
69
  setTextFromWidgetToContent(data);
66
70
 
67
71
  return data;
@@ -79,9 +79,26 @@ export default function UseDefaultAIRephraseMessageWidget({
79
79
  return '';
80
80
  };
81
81
 
82
+ // const tonesToWidget = (): Tone[] => {
83
+ // return [
84
+ // Tone.Professional,
85
+ // Tone.Friendly,
86
+ // Tone.Encouraging,
87
+ // Tone.Empathetic,
88
+ // Tone.Assertive,
89
+ // Tone.Neutral,
90
+ // Tone.Instructive,
91
+ // Tone.Persuasive,
92
+ // Tone.Sarcastic,
93
+ // Tone.Poetic,
94
+ // Tone.Unchanged,
95
+ // ];
96
+ // };
97
+
82
98
  return {
83
99
  textToContent: textFromWidgetToContent,
84
100
  renderWidget,
85
101
  textToWidget,
102
+ // tonesToWidget,
86
103
  };
87
104
  }
@@ -77,10 +77,26 @@ export default function UseDefaultAIRephraseMessageWidgetWithProxy({
77
77
  //
78
78
  return '';
79
79
  };
80
+ // const tonesToWidget = (): Tone[] => {
81
+ // return [
82
+ // Tone.Professional,
83
+ // Tone.Friendly,
84
+ // Tone.Encouraging,
85
+ // Tone.Empathetic,
86
+ // Tone.Assertive,
87
+ // Tone.Neutral,
88
+ // Tone.Instructive,
89
+ // Tone.Persuasive,
90
+ // Tone.Sarcastic,
91
+ // Tone.Poetic,
92
+ // Tone.Unchanged,
93
+ // ];
94
+ // };
80
95
 
81
96
  return {
82
97
  textToContent: textFromWidgetToContent,
83
98
  renderWidget,
84
99
  textToWidget,
100
+ // tonesToWidget,
85
101
  };
86
102
  }
@@ -2,7 +2,8 @@ import { useState } from 'react';
2
2
  import AIWidgetIcon from '../../../svgs/Icons/AIWidgets/AIWidget';
3
3
  import ErrorMessageIcon from './ErrorMessageIcon';
4
4
  import { AIMessageWidget, MessageWidgetProps } from './AIMessageWidget';
5
- import { AISource, IChatMessage } from '../../../../../../Data/source/AISource';
5
+ import { IChatMessage } from '../../../../../../Data/source/AISource';
6
+ import { AITranslateUseCase } from '../../../../../../Domain/use_cases/ai/AITranslateUseCase';
6
7
 
7
8
  // interface MessageWidgetProps {
8
9
  // // https://api.openai.com/v1/chat/completions'
@@ -52,25 +53,25 @@ export default function UseDefaultAITranslateWidget({
52
53
  ): Promise<string> => {
53
54
  if (textToSend && textToSend.length > 0) {
54
55
  // eslint-disable-next-line no-return-await
55
- let prompt = `Please, translate the next text in english and give me just only translated text. Text to translate is: "${textToSend}"`;
56
56
  const { language } = additionalSettings || {};
57
+ //
58
+ const openAIModel = 'gpt-3.5-turbo';
57
59
 
58
- if (language) {
59
- prompt = `Please, translate the next text in ${
60
- language as string
61
- } and give me just only translated text. Text to translate is: "${textToSend}"`;
62
- }
63
-
64
- // eslint-disable-next-line no-return-await
65
- return await AISource.getData(
66
- prompt,
60
+ // AIRephraseWithProxyUseCase
61
+ const useCaseAITranslate = new AITranslateUseCase(
62
+ textToSend,
67
63
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
64
+ language,
68
65
  context,
69
66
  servername,
70
67
  api,
71
68
  port,
72
69
  apiKeyOrSessionToken,
73
- ).then((data) => {
70
+ openAIModel,
71
+ );
72
+
73
+ // eslint-disable-next-line no-return-await
74
+ return await useCaseAITranslate.execute().then((data) => {
74
75
  setTextFromWidgetToContent(data);
75
76
 
76
77
  return data;
@@ -2,7 +2,8 @@ import { useState } from 'react';
2
2
  import AIWidgetIcon from '../../../svgs/Icons/AIWidgets/AIWidget';
3
3
  import ErrorMessageIcon from './ErrorMessageIcon';
4
4
  import { AIMessageWidget, MessageWidgetProps } from './AIMessageWidget';
5
- import { AISource, IChatMessage } from '../../../../../../Data/source/AISource';
5
+ import { IChatMessage } from '../../../../../../Data/source/AISource';
6
+ import { AITranslateWithProxyUseCase } from '../../../../../../Domain/use_cases/ai/AITranslateWithProxyUseCase';
6
7
 
7
8
  // interface MessageWidgetProps {
8
9
  // // https://api.openai.com/v1/chat/completions'
@@ -52,25 +53,25 @@ export default function UseDefaultAITranslateWidgetWithProxy({
52
53
  ): Promise<string> => {
53
54
  if (textToSend && textToSend.length > 0) {
54
55
  // eslint-disable-next-line no-return-await
55
- let prompt = `Please, translate the next text in english and give me just only translated text. Text to translate is: "${textToSend}"`;
56
56
  const { language } = additionalSettings || {};
57
+ //
58
+ const openAIModel = 'gpt-3.5-turbo';
57
59
 
58
- if (language) {
59
- prompt = `Please, translate the next text in ${
60
- language as string
61
- } and give me just only translated text. Text to translate is: "${textToSend}"`;
62
- }
63
-
64
- // eslint-disable-next-line no-return-await
65
- return await AISource.getDataWithProxyServer(
66
- prompt,
60
+ // AIRephraseWithProxyUseCase
61
+ const useCaseAITranslate = new AITranslateWithProxyUseCase(
62
+ textToSend,
67
63
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
64
+ language,
68
65
  context,
69
66
  servername,
70
67
  api,
71
68
  port,
72
69
  apiKeyOrSessionToken,
73
- ).then((data) => {
70
+ openAIModel,
71
+ );
72
+
73
+ // eslint-disable-next-line no-return-await
74
+ return await useCaseAITranslate.execute().then((data) => {
74
75
  setTextFromWidgetToContent(data);
75
76
 
76
77
  return data;
@@ -0,0 +1,76 @@
1
+ .default-attachment-component-container,
2
+ .default-attachment-component-container * {
3
+ box-sizing: border-box;
4
+ }
5
+ .default-attachment-component-container {
6
+ // background: var(--incoming-background, #e4e6e8);
7
+ border-radius: 22px 22px 22px 0px;
8
+ padding: 8px 16px 8px 1px;
9
+ display: flex;
10
+ flex-direction: row;
11
+ gap: 8px;
12
+ align-items: center;
13
+ justify-content: flex-start;
14
+ flex-shrink: 0;
15
+ position: relative;
16
+
17
+ &--file-wrapper {
18
+ display: flex;
19
+ flex-direction: row;
20
+ gap: 8px;
21
+ align-items: center;
22
+ justify-content: flex-start;
23
+ align-self: stretch;
24
+ flex-shrink: 0;
25
+ position: relative;
26
+
27
+ &--placeholder {
28
+ flex-shrink: 0;
29
+ width: 32px;
30
+ height: 32px;
31
+ position: static;
32
+
33
+ &__bg {
34
+ background: var(--field-border, #90979f);
35
+ border-radius: 8px;
36
+ width: 32px;
37
+ height: 32px;
38
+ position: absolute;
39
+ left: 0px;
40
+ top: 0px;
41
+ }
42
+
43
+ &__icon {
44
+ border-radius: 4px;
45
+ padding: 4px;
46
+ display: flex;
47
+ flex-direction: row;
48
+ gap: 0px;
49
+ align-items: center;
50
+ justify-content: center;
51
+ width: 24px;
52
+ height: 24px;
53
+ position: absolute;
54
+ left: 4px;
55
+ top: 4px;
56
+ }
57
+ }
58
+
59
+ &--file-d {
60
+ color: var(--secondary-elements, #202f3e);
61
+ text-align: left;
62
+ font: 400 14px/20px "Roboto", sans-serif;
63
+ position: relative;
64
+ }
65
+ }
66
+ }
67
+
68
+
69
+
70
+ .media-text-document {
71
+ align-self: stretch;
72
+ flex: 1;
73
+ position: relative;
74
+ overflow: visible;
75
+ }
76
+
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ import './DefaultAttachmentComponent.scss';
3
+ import TextDocument from '../../../svgs/Icons/Media/TextDocument';
4
+
5
+ type DefaultAttachmentComponentProps = {
6
+ fileName: string;
7
+ };
8
+ // eslint-disable-next-line react/function-component-definition
9
+ const DefaultAttachmentComponent: React.FC<DefaultAttachmentComponentProps> = ({
10
+ fileName,
11
+ }: DefaultAttachmentComponentProps) => {
12
+ return (
13
+ <div className="default-attachment-component-container">
14
+ <div className="default-attachment-component-container--file-wrapper">
15
+ <div className="default-attachment-component-container--file-wrapper--placeholder">
16
+ <div className="default-attachment-component-container--file-wrapper--placeholder__bg" />
17
+ <div className="default-attachment-component-container--file-wrapper--placeholder__icon">
18
+ <TextDocument
19
+ width="16"
20
+ height="16"
21
+ applyZoom
22
+ color="var(--incoming-background)"
23
+ />
24
+ </div>
25
+ </div>
26
+ <div className="default-attachment-component-container--file-wrapper__file-d">
27
+ {fileName}
28
+ </div>
29
+ </div>
30
+ </div>
31
+ );
32
+ };
33
+
34
+ export default DefaultAttachmentComponent;
@@ -0,0 +1,26 @@
1
+ .error-toast,
2
+ .error-toast * {
3
+ box-sizing: border-box;
4
+ }
5
+ .error-toast {
6
+ background: var(--color-background-overlay);
7
+ border-radius: 4px;
8
+ opacity: 0.6000000238418579;
9
+ padding: 4px 12px 4px 12px;
10
+ // margin-top: 36px;
11
+ display: flex;
12
+ flex-direction: column;
13
+ gap: 10px;
14
+ align-items: flex-start;
15
+ justify-content: flex-start;
16
+ position: relative;
17
+ }
18
+ .translation-failed-try-again {
19
+ color: var(--color-background);
20
+ text-align: left;
21
+ font: 500 12px/16px "Roboto", sans-serif;
22
+ position: relative;
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: flex-start;
26
+ }