@satek-team-intern/chatbot-widget 0.10.0 → 0.10.2

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 (69) hide show
  1. package/README.md +34 -39
  2. package/dist/chatbot-widget.es.js +4356 -4374
  3. package/dist/chatbot-widget.umd.js +16 -15
  4. package/dist/locales/en.json.d.ts +2 -1
  5. package/dist/locales/vi.json.d.ts +7 -5
  6. package/dist/src/assets/Icons.d.ts +2 -0
  7. package/dist/src/assets/createIcon.d.ts +2 -2
  8. package/dist/src/components/ChatWidget.d.ts +3 -3
  9. package/dist/src/components/ChatWindow.d.ts +3 -3
  10. package/dist/src/components/FloatingButton.d.ts +3 -3
  11. package/dist/src/components/index.d.ts +4 -0
  12. package/dist/src/components/modals/AddChat.d.ts +3 -3
  13. package/dist/src/components/modals/AddGroup.d.ts +6 -0
  14. package/dist/src/components/modals/AddMember.d.ts +3 -3
  15. package/dist/src/components/modals/FileViewer.d.ts +3 -3
  16. package/dist/src/components/modals/ThemeModal.d.ts +2 -2
  17. package/dist/src/components/modals/UpdateGroup.d.ts +3 -3
  18. package/dist/src/components/modals/UserProfileModal.d.ts +3 -3
  19. package/dist/src/components/modals/index.d.ts +2 -1
  20. package/dist/src/components/shared/ChatAvatar.d.ts +1 -1
  21. package/dist/src/components/shared/MemberAvatarFallBack.d.ts +5 -0
  22. package/dist/src/components/shared/ToastContainer.d.ts +2 -3
  23. package/dist/src/components/shared/index.d.ts +3 -0
  24. package/dist/src/components/sidebar/AppSideBar.d.ts +2 -3
  25. package/dist/src/components/sidebar/ChatInfoPanel.d.ts +11 -0
  26. package/dist/src/components/sidebar/ChatList.d.ts +4 -4
  27. package/dist/src/components/sidebar/ChatSearchBar.d.ts +2 -2
  28. package/dist/src/components/sidebar/SideBarInfoChat.d.ts +4 -4
  29. package/dist/src/components/sidebar/index.d.ts +1 -0
  30. package/dist/src/components/view/ChatHeader.d.ts +3 -3
  31. package/dist/src/components/view/ChatInput.d.ts +1 -2
  32. package/dist/src/components/view/ContactList.d.ts +3 -3
  33. package/dist/src/components/view/GroupList.d.ts +3 -3
  34. package/dist/src/components/view/MessageFiles.d.ts +3 -3
  35. package/dist/src/components/view/MessageItem.d.ts +3 -3
  36. package/dist/src/components/view/MessageList.d.ts +2 -2
  37. package/dist/src/components/view/index.d.ts +3 -2
  38. package/dist/src/constants/common.d.ts +1 -0
  39. package/dist/src/constants/file.d.ts +2 -0
  40. package/dist/src/constants/index.d.ts +2 -0
  41. package/dist/src/contexts/FileViewerContext.d.ts +5 -5
  42. package/dist/src/contexts/ToastContext.d.ts +3 -3
  43. package/dist/src/contexts/index.d.ts +2 -1
  44. package/dist/src/hooks/index.d.ts +3 -0
  45. package/dist/src/hooks/useChat.d.ts +2 -2
  46. package/dist/src/hooks/useDragDropFiles.d.ts +5 -4
  47. package/dist/src/hooks/useFileViewer.d.ts +1 -1
  48. package/dist/src/hooks/useSetting.d.ts +1 -1
  49. package/dist/src/hooks/useToast.d.ts +1 -1
  50. package/dist/src/hooks/useTranslation.d.ts +2 -1
  51. package/dist/src/locales/index.d.ts +3 -0
  52. package/dist/src/services/chat.service.d.ts +3 -4
  53. package/dist/src/services/index.d.ts +2 -0
  54. package/dist/src/services/language.service.d.ts +2 -2
  55. package/dist/src/store/index.d.ts +2 -0
  56. package/dist/src/store/selectors/index.d.ts +1 -0
  57. package/dist/src/store/selectors/setting.d.ts +5 -5
  58. package/dist/src/store/slices/chatSlice.d.ts +3 -4
  59. package/dist/src/store/slices/index.d.ts +2 -0
  60. package/dist/src/store/slices/settingSlice.d.ts +2 -3
  61. package/dist/src/store/store.d.ts +2 -2
  62. package/dist/src/styles/index.d.ts +1 -0
  63. package/dist/src/types/chat.type.d.ts +2 -2
  64. package/dist/src/types/types.d.ts +2 -6
  65. package/dist/src/utils/chat.utils.d.ts +1 -2
  66. package/dist/src/utils/file.utils.d.ts +16 -0
  67. package/dist/src/utils/format.utils.d.ts +2 -0
  68. package/dist/src/utils/index.d.ts +4 -0
  69. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
- import { RootState } from '../store';
2
- import { FeatureAnalysis } from '../../utils/chat.utils';
3
- import { WidgetFeature } from '../../types';
1
+ import { RootState } from '../../../store';
2
+ import { FeatureAnalysis } from '../../../utils';
3
+ import { WidgetFeature } from '../../../types';
4
4
  interface WidgetSettings extends FeatureAnalysis {
5
5
  acceptFilter: string;
6
6
  isFileTypeAllowed: (file: File) => boolean;
@@ -9,8 +9,8 @@ interface WidgetSettings extends FeatureAnalysis {
9
9
  allowRevokeMessage: (messageCreatedTime: string) => boolean;
10
10
  }
11
11
  export declare const selectWidgetFeatures: ((state: {
12
- chat: import('../slices/chatSlice').ChatState;
13
- setting: import('../slices/settingSlice').SettingState;
12
+ chat: import('../../../store').ChatState;
13
+ setting: import('../../../store').SettingState;
14
14
  }) => WidgetSettings) & {
15
15
  clearCache: () => void;
16
16
  resultsCount: () => number;
@@ -1,4 +1,4 @@
1
- import { ChatUser, ChatConversation, ChatMessage, PaginationInfo } from '../../types';
1
+ import { ChatUser, ChatConversation, ChatMessage, PaginationInfo } from '../../../types';
2
2
  export interface ChatState {
3
3
  currentUser: ChatUser | null;
4
4
  chats: ChatConversation[];
@@ -11,7 +11,7 @@ export interface ChatState {
11
11
  messagesPagination: PaginationInfo | null;
12
12
  replyingMessage: ChatMessage | null;
13
13
  }
14
- export declare const setCurrentUser: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setCurrentUser">, setChats: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setChats">, setCurrentChat: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setCurrentChat">, setCurrentChatMessages: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setCurrentChatMessages">, setCurrentChatMembers: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setCurrentChatMembers">, setMembers: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setMembers">, setMember: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setMember">, setMemberDisconnect: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setMemberDisconnect">, setMessagesPagination: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setMessagesPagination">, prependMessages: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/prependMessages">, addNewMessage: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/addNewMessage">, removeChat: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/removeChat">, addChat: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/addChat">, updateChat: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/updateChat">, updateChatAvatar: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/updateChatAvatar">, removeMessage: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/removeMessage">, updateMessage: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/updateMessage">, setReplyingMessage: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setReplyingMessage">, setTotalMessagesUnread: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setTotalMessagesUnread">, updateMemberReadStatus: import('@reduxjs/toolkit').ActionCreatorWithPayload<{
14
+ export declare const clearAll: import('@reduxjs/toolkit').ActionCreatorWithoutPayload<"widget-chatslice/clearAll">, setCurrentUser: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setCurrentUser">, setChats: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setChats">, setCurrentChat: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setCurrentChat">, setCurrentChatMessages: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setCurrentChatMessages">, setCurrentChatMembers: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setCurrentChatMembers">, setMembers: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setMembers">, setMember: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setMember">, setMemberDisconnect: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setMemberDisconnect">, setMessagesPagination: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setMessagesPagination">, prependMessages: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/prependMessages">, addNewMessage: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/addNewMessage">, removeChat: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/removeChat">, addChat: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/addChat">, updateChat: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/updateChat">, updateChatAvatar: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/updateChatAvatar">, removeMessage: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/removeMessage">, updateMessage: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/updateMessage">, setReplyingMessage: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setReplyingMessage">, setTotalMessagesUnread: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-chatslice/setTotalMessagesUnread">, updateMemberReadStatus: import('@reduxjs/toolkit').ActionCreatorWithPayload<{
15
15
  chatId: number;
16
16
  memberId: number;
17
17
  lastReadId: number;
@@ -19,5 +19,4 @@ export declare const setCurrentUser: import('@reduxjs/toolkit').ActionCreatorWit
19
19
  chatId: number;
20
20
  setting: "is_muted" | "is_pined";
21
21
  }, "widget-chatslice/toggleChatSetting">;
22
- declare const _default: import('redux').Reducer<ChatState>;
23
- export default _default;
22
+ export declare const chatReducer: import('redux').Reducer<ChatState>;
@@ -0,0 +1,2 @@
1
+ export * from './chatSlice';
2
+ export * from './settingSlice';
@@ -1,4 +1,4 @@
1
- import { LanguageOption, WidgetFeature } from '../../types';
1
+ import { LanguageOption, WidgetFeature } from '../../../types';
2
2
  export interface SettingState {
3
3
  theme: 'light' | 'dark';
4
4
  primaryColor: string;
@@ -6,5 +6,4 @@ export interface SettingState {
6
6
  currentLanguage: LanguageOption;
7
7
  }
8
8
  export declare const setConfig: import('@reduxjs/toolkit').ActionCreatorWithPayload<WidgetFeature, "widget-settingslice/setConfig">, toggleTheme: import('@reduxjs/toolkit').ActionCreatorWithoutPayload<"widget-settingslice/toggleTheme">, setFeatures: import('@reduxjs/toolkit').ActionCreatorWithPayload<WidgetFeature, "widget-settingslice/setFeatures">, setPrimaryColor: import('@reduxjs/toolkit').ActionCreatorWithPayload<any, "widget-settingslice/setPrimaryColor">, setLanguage: import('@reduxjs/toolkit').ActionCreatorWithPayload<LanguageOption, "widget-settingslice/setLanguage">;
9
- declare const _default: import('redux').Reducer<SettingState>;
10
- export default _default;
9
+ export declare const settingReducer: import('redux').Reducer<SettingState>;
@@ -1,6 +1,5 @@
1
1
  import { Tuple, AnyAction, ThunkDispatch, UnknownAction, EnhancedStore, StoreEnhancer } from '@reduxjs/toolkit';
2
- import { ChatState } from './slices/chatSlice';
3
- import { SettingState } from './slices/settingSlice';
2
+ import { ChatState, SettingState } from '../../store/slices';
4
3
  export declare const store: EnhancedStore<{
5
4
  chat: ChatState;
6
5
  setting: SettingState;
@@ -8,6 +7,7 @@ export declare const store: EnhancedStore<{
8
7
  StoreEnhancer<{
9
8
  dispatch: ThunkDispatch<{
10
9
  chat: ChatState;
10
+ setting: SettingState;
11
11
  }, undefined, UnknownAction>;
12
12
  }>,
13
13
  StoreEnhancer
@@ -0,0 +1 @@
1
+ export declare const stylesTagContent: string;
@@ -221,7 +221,7 @@ export interface ChatInstance {
221
221
  * @param userId ID người dùng tạo nhóm (tùy chọn)
222
222
  * @returns Promise trả về object nhóm (ChatConversation)
223
223
  */
224
- addGroup(memberIds: number[], name: string, avatar?: string, userId?: number): Promise<ChatResponse<ChatConversation>>;
224
+ addGroup(memberIds: number[], name: string, avatar?: string | File, userId?: number): Promise<ChatResponse<ChatConversation>>;
225
225
  /**
226
226
  * Cập nhật thông tin nhóm (Tên và Ảnh đại diện).
227
227
  * @param chatId ID nhóm (Number, bắt buộc)
@@ -296,4 +296,4 @@ export interface ChatInstance {
296
296
  */
297
297
  runEvent<K extends keyof ChatEventPayloads>(name: K | string, data?: ChatEventPayloads[K]): void;
298
298
  }
299
- export type ChatConstructor = new () => ChatInstance;
299
+ export type ChatConstructor = new (workspace?: string) => ChatInstance;
@@ -26,15 +26,10 @@ export type WidgetChatMode = 'single' | 'group';
26
26
  * - 'change-color': Người dùng cuối có thể tự chọn màu chủ đạo (Primary Color).
27
27
  * - 'change-theme': Người dùng cuối có thể chuyển đổi giữa các chủ đề (ví dụ: Sáng/Tối).
28
28
  */
29
- export type WidgetCustomizationOptions = 'change-color' | 'change-theme';
29
+ export type WidgetCustomizationOptions = 'change-color' | 'change-theme' | 'multi-language';
30
30
  export interface WidgetFeature {
31
31
  /** Danh sách các loại tập tin cho phép tải lên. Nếu có 'multiple', cho phép chọn nhiều file. */
32
32
  attachments?: AttachmentType[];
33
- /**
34
- * Danh sách ngôn ngữ hỗ trợ. Nếu có từ 2 ngôn ngữ trở lên, widget sẽ hiển thị menu chuyển đổi.
35
- * Nếu không truyền, mặc định là ['english']
36
- */
37
- languages?: LanguageOption[];
38
33
  /** Các tính năng tương tác trực tiếp bằng âm thanh và hình ảnh. */
39
34
  communication?: CommunicationFeature[];
40
35
  /**
@@ -48,6 +43,7 @@ export interface WidgetFeature {
48
43
  export interface ChatWidgetProps {
49
44
  chatKey: string;
50
45
  title?: string;
46
+ workspace?: string;
51
47
  logoUrl?: string;
52
48
  primaryColor?: string;
53
49
  auth: AuthInfo;
@@ -1,8 +1,7 @@
1
- import { AttachmentType, ChatConversation, CommunicationFeature, LanguageOption, WidgetChatMode, WidgetCustomizationOptions, WidgetFeature } from '../types';
1
+ import { AttachmentType, ChatConversation, CommunicationFeature, WidgetChatMode, WidgetCustomizationOptions, WidgetFeature } from '../../types';
2
2
  export declare const getChatName: (chat?: ChatConversation | null, currentUserId?: number, fallback?: string) => string;
3
3
  export interface FeatureSet {
4
4
  attachments: Set<AttachmentType>;
5
- languages: Set<LanguageOption>;
6
5
  communication: Set<CommunicationFeature>;
7
6
  chatModes: Set<WidgetChatMode>;
8
7
  customizations: Set<WidgetCustomizationOptions>;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Lấy icon dựa trên tên file hoặc extension
3
+ * @param fileNameOrExt Có thể là "image.png" hoặc chỉ "png"
4
+ */
5
+ export declare const getFileIcon: (fileNameOrExt: string) => string;
6
+ export declare const getFileKey: (file: File) => string | undefined;
7
+ export declare const formatFileSize: (bytes: number) => string;
8
+ export declare const getFileType: (fileName: string) => "image" | "video" | "audio" | "pdf" | "other";
9
+ export declare const getImagePreview: (file: File) => string;
10
+ export declare const isImageFile: (file: File) => boolean;
11
+ export declare const sortFilesByType: (files: File[]) => File[];
12
+ export declare const sanitizeImage: (file: File) => Promise<File>;
13
+ export declare const getFilesValidationError: (files: File[], hasMultipleAttachments: boolean, isFileTypeAllowed: (file: File) => boolean) => {
14
+ message: string;
15
+ type: 'warning' | 'error';
16
+ } | null;
@@ -0,0 +1,2 @@
1
+ export declare const formatDateLabel: (dateStr: string | Date) => string;
2
+ export declare const formatDuration: (ms: number) => string;
@@ -0,0 +1,4 @@
1
+ export * from './chat.utils';
2
+ export * from './format.utils';
3
+ export * from './voice.utils';
4
+ export * from './file.utils';
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@satek-team-intern/chatbot-widget",
3
- "version": "0.10.0",
3
+ "version": "0.10.2",
4
4
  "description": "A widget chatbot can be integrated into any website, providing a seamless and interactive user experience. It is designed to be easily embedded and customizable, allowing businesses to engage with their customers effectively.",
5
- "author": "Satek Team Intern",
5
+ "author": "Satek Team",
6
6
  "license": "MIT",
7
7
  "type": "module",
8
8
  "main": "./dist/chatbot-widget.umd.js",