@autobe/ui 0.19.1 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/lib/AutoBeChatMain.d.ts +16 -0
  2. package/lib/AutoBeChatMain.js +51 -0
  3. package/lib/AutoBeChatMain.js.map +1 -0
  4. package/lib/banner/AutoBeAgentInformation.d.ts +15 -0
  5. package/lib/banner/AutoBeAgentInformation.js +41 -0
  6. package/lib/banner/AutoBeAgentInformation.js.map +1 -0
  7. package/lib/banner/AutoBeChatBanner.d.ts +15 -0
  8. package/lib/banner/AutoBeChatBanner.js +29 -0
  9. package/lib/banner/AutoBeChatBanner.js.map +1 -0
  10. package/lib/banner/AutoBeChatState.d.ts +6 -0
  11. package/lib/banner/AutoBeChatState.js +80 -0
  12. package/lib/banner/AutoBeChatState.js.map +1 -0
  13. package/lib/banner/AutoBeTokenUsage.d.ts +14 -0
  14. package/lib/banner/AutoBeTokenUsage.js +60 -0
  15. package/lib/banner/AutoBeTokenUsage.js.map +1 -0
  16. package/lib/banner/index.d.ts +4 -0
  17. package/lib/banner/index.js +21 -0
  18. package/lib/banner/index.js.map +1 -0
  19. package/lib/common/Collapsible.d.ts +15 -0
  20. package/lib/common/Collapsible.js +45 -0
  21. package/lib/common/Collapsible.js.map +1 -0
  22. package/lib/common/index.d.ts +2 -0
  23. package/lib/common/index.js +19 -0
  24. package/lib/common/index.js.map +1 -0
  25. package/lib/constant/color.d.ts +18 -0
  26. package/lib/constant/color.js +25 -0
  27. package/lib/constant/color.js.map +1 -0
  28. package/lib/events/AutoBeCompleteEventMovie.d.ts +7 -0
  29. package/lib/events/AutoBeCompleteEventMovie.js +210 -0
  30. package/lib/events/AutoBeCompleteEventMovie.js.map +1 -0
  31. package/lib/events/AutoBeEventMovie.d.ts +8 -0
  32. package/lib/events/AutoBeEventMovie.js +84 -0
  33. package/lib/events/AutoBeEventMovie.js.map +1 -0
  34. package/lib/events/AutoBeProgressEventMovie.js +2 -61
  35. package/lib/events/AutoBeProgressEventMovie.js.map +1 -1
  36. package/lib/events/AutoBeScenarioEventMovie.js +2 -44
  37. package/lib/events/AutoBeScenarioEventMovie.js.map +1 -1
  38. package/lib/events/AutoBeValidateEventMovie.d.ts +6 -0
  39. package/lib/events/AutoBeValidateEventMovie.js +115 -0
  40. package/lib/events/AutoBeValidateEventMovie.js.map +1 -0
  41. package/lib/events/common/CollapsibleEventGroup.d.ts +28 -0
  42. package/lib/events/common/CollapsibleEventGroup.js +89 -0
  43. package/lib/events/common/CollapsibleEventGroup.js.map +1 -0
  44. package/lib/events/common/EventCard.d.ts +13 -0
  45. package/lib/events/common/EventCard.js +43 -0
  46. package/lib/events/common/EventCard.js.map +1 -0
  47. package/lib/events/common/EventContent.d.ts +11 -0
  48. package/lib/events/common/EventContent.js +14 -0
  49. package/lib/events/common/EventContent.js.map +1 -0
  50. package/lib/events/common/EventHeader.d.ts +15 -0
  51. package/lib/events/common/EventHeader.js +41 -0
  52. package/lib/events/common/EventHeader.js.map +1 -0
  53. package/lib/events/common/EventIcon.d.ts +11 -0
  54. package/lib/events/common/EventIcon.js +50 -0
  55. package/lib/events/common/EventIcon.js.map +1 -0
  56. package/lib/events/common/ProgressBar.d.ts +14 -0
  57. package/lib/events/common/ProgressBar.js +33 -0
  58. package/lib/events/common/ProgressBar.js.map +1 -0
  59. package/lib/events/common/index.d.ts +6 -0
  60. package/lib/events/common/index.js +16 -0
  61. package/lib/events/common/index.js.map +1 -0
  62. package/lib/events/groups/ValidateEventGroup.d.ts +12 -0
  63. package/lib/events/groups/ValidateEventGroup.js +78 -0
  64. package/lib/events/groups/ValidateEventGroup.js.map +1 -0
  65. package/lib/events/groups/index.d.ts +1 -0
  66. package/lib/events/groups/index.js +6 -0
  67. package/lib/events/groups/index.js.map +1 -0
  68. package/lib/events/index.d.ts +6 -0
  69. package/lib/events/index.js +27 -1
  70. package/lib/events/index.js.map +1 -1
  71. package/lib/events/utils/eventGrouper.d.ts +20 -0
  72. package/lib/events/utils/eventGrouper.js +74 -0
  73. package/lib/events/utils/eventGrouper.js.map +1 -0
  74. package/lib/events/utils/index.d.ts +1 -0
  75. package/lib/events/utils/index.js +6 -0
  76. package/lib/events/utils/index.js.map +1 -0
  77. package/lib/hooks/index.d.ts +2 -0
  78. package/lib/hooks/index.js +19 -0
  79. package/lib/hooks/index.js.map +1 -0
  80. package/lib/hooks/useIsomorphicLayoutEffect.d.ts +6 -0
  81. package/lib/hooks/useIsomorphicLayoutEffect.js +10 -0
  82. package/lib/hooks/useIsomorphicLayoutEffect.js.map +1 -0
  83. package/lib/hooks/useMediaQuery.d.ts +11 -0
  84. package/lib/hooks/useMediaQuery.js +52 -0
  85. package/lib/hooks/useMediaQuery.js.map +1 -0
  86. package/lib/index.d.ts +5 -0
  87. package/lib/index.js +8 -1
  88. package/lib/index.js.map +1 -1
  89. package/lib/structure/AutoBeListener.d.ts +17 -0
  90. package/lib/structure/AutoBeListener.js +250 -0
  91. package/lib/structure/AutoBeListener.js.map +1 -0
  92. package/lib/structure/AutoBeListenerState.d.ts +14 -0
  93. package/lib/structure/AutoBeListenerState.js +39 -0
  94. package/lib/structure/AutoBeListenerState.js.map +1 -0
  95. package/lib/structure/IAutoBeEventGroup.d.ts +5 -0
  96. package/lib/structure/IAutoBeEventGroup.js +3 -0
  97. package/lib/structure/IAutoBeEventGroup.js.map +1 -0
  98. package/lib/structure/index.d.ts +3 -0
  99. package/lib/structure/index.js +20 -0
  100. package/lib/structure/index.js.map +1 -0
  101. package/lib/upload/AutoBeChatUploadBox.d.ts +31 -0
  102. package/lib/upload/AutoBeChatUploadBox.js +221 -0
  103. package/lib/upload/AutoBeChatUploadBox.js.map +1 -0
  104. package/lib/upload/AutoBeChatUploadSendButton.d.ts +15 -0
  105. package/lib/upload/AutoBeChatUploadSendButton.js +38 -0
  106. package/lib/upload/AutoBeChatUploadSendButton.js.map +1 -0
  107. package/lib/upload/AutoBeFileUploadBox.d.ts +8 -0
  108. package/lib/upload/AutoBeFileUploadBox.js +68 -0
  109. package/lib/upload/AutoBeFileUploadBox.js.map +1 -0
  110. package/lib/upload/AutoBeUploadConfig.d.ts +9 -0
  111. package/lib/upload/AutoBeUploadConfig.js +3 -0
  112. package/lib/upload/AutoBeUploadConfig.js.map +1 -0
  113. package/lib/upload/AutoBeVoiceRecoderButton.d.ts +11 -0
  114. package/lib/upload/AutoBeVoiceRecoderButton.js +58 -0
  115. package/lib/upload/AutoBeVoiceRecoderButton.js.map +1 -0
  116. package/lib/upload/index.d.ts +5 -0
  117. package/lib/upload/index.js +22 -0
  118. package/lib/upload/index.js.map +1 -0
  119. package/lib/utils/AutoBeFileUploader.d.ts +28 -0
  120. package/lib/utils/AutoBeFileUploader.js +237 -0
  121. package/lib/utils/AutoBeFileUploader.js.map +1 -0
  122. package/lib/utils/AutoBeVoiceRecorder.d.ts +7 -0
  123. package/lib/utils/AutoBeVoiceRecorder.js +94 -0
  124. package/lib/utils/AutoBeVoiceRecorder.js.map +1 -0
  125. package/lib/utils/index.d.ts +4 -0
  126. package/lib/utils/index.js +21 -0
  127. package/lib/utils/index.js.map +1 -0
  128. package/lib/utils/number.d.ts +1 -0
  129. package/lib/utils/number.js +20 -0
  130. package/lib/utils/number.js.map +1 -0
  131. package/package.json +13 -2
  132. package/src/AutoBeChatMain.tsx +123 -0
  133. package/src/banner/AutoBeAgentInformation.tsx +102 -0
  134. package/src/banner/AutoBeChatBanner.tsx +72 -0
  135. package/src/banner/AutoBeChatState.tsx +152 -0
  136. package/src/banner/AutoBeTokenUsage.tsx +152 -0
  137. package/src/banner/index.ts +4 -0
  138. package/src/common/Collapsible.tsx +95 -0
  139. package/src/common/index.ts +2 -0
  140. package/src/constant/color.ts +24 -0
  141. package/src/events/AutoBeCompleteEventMovie.tsx +402 -0
  142. package/src/events/AutoBeEventMovie.tsx +114 -0
  143. package/src/events/AutoBeProgressEventMovie.tsx +12 -125
  144. package/src/events/AutoBeScenarioEventMovie.tsx +5 -93
  145. package/src/events/AutoBeValidateEventMovie.tsx +326 -0
  146. package/src/events/README.md +300 -0
  147. package/src/events/common/CollapsibleEventGroup.tsx +220 -0
  148. package/src/events/common/EventCard.tsx +61 -0
  149. package/src/events/common/EventContent.tsx +31 -0
  150. package/src/events/common/EventHeader.tsx +85 -0
  151. package/src/events/common/EventIcon.tsx +82 -0
  152. package/src/events/common/ProgressBar.tsx +63 -0
  153. package/src/events/common/index.ts +13 -0
  154. package/src/events/groups/ValidateEventGroup.tsx +150 -0
  155. package/src/events/groups/index.ts +4 -0
  156. package/src/events/index.ts +12 -0
  157. package/src/events/utils/eventGrouper.tsx +118 -0
  158. package/src/events/utils/index.ts +1 -0
  159. package/src/hooks/index.ts +2 -0
  160. package/src/hooks/useIsomorphicLayoutEffect.ts +8 -0
  161. package/src/hooks/useMediaQuery.ts +68 -0
  162. package/src/index.ts +5 -0
  163. package/src/structure/AutoBeListener.ts +263 -0
  164. package/src/structure/AutoBeListenerState.ts +53 -0
  165. package/src/structure/IAutoBeEventGroup.ts +6 -0
  166. package/src/structure/index.ts +3 -0
  167. package/src/upload/AutoBeChatUploadBox.tsx +372 -0
  168. package/src/upload/AutoBeChatUploadSendButton.tsx +66 -0
  169. package/src/upload/AutoBeFileUploadBox.tsx +123 -0
  170. package/src/upload/AutoBeUploadConfig.ts +5 -0
  171. package/src/upload/AutoBeVoiceRecoderButton.tsx +100 -0
  172. package/src/upload/index.ts +5 -0
  173. package/src/utils/AutoBeFileUploader.ts +279 -0
  174. package/src/utils/AutoBeVoiceRecorder.ts +95 -0
  175. package/src/utils/index.ts +4 -0
  176. package/src/utils/number.ts +17 -0
  177. package/tsconfig.json +2 -1
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./AutoBeFileUploadBox"), exports);
18
+ __exportStar(require("./AutoBeVoiceRecoderButton"), exports);
19
+ __exportStar(require("./AutoBeChatUploadBox"), exports);
20
+ __exportStar(require("./AutoBeChatUploadSendButton"), exports);
21
+ __exportStar(require("./AutoBeUploadConfig"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/upload/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,6DAA2C;AAC3C,wDAAsC;AACtC,+DAA6C;AAC7C,uDAAqC"}
@@ -0,0 +1,28 @@
1
+ import { AutoBeUserMessageAudioContent, AutoBeUserMessageFileContent, AutoBeUserMessageImageContent } from "@autobe/interface";
2
+ export declare namespace AutoBeFileUploader {
3
+ interface IConfig {
4
+ supportAudio?: boolean;
5
+ file?: (file: File) => Promise<{
6
+ id: string;
7
+ }>;
8
+ image?: (file: File) => Promise<{
9
+ url: string;
10
+ }>;
11
+ }
12
+ export const isValidFileExtension: (filename: string, supportAudio: boolean, hasFileUploadAPI: boolean) => boolean;
13
+ export const getAcceptAttribute: (supportAudio?: boolean, hasFileUploadAPI?: boolean) => string;
14
+ export const getMimeType: (filename: string) => string;
15
+ export const compose: (config: IConfig, file: File) => Promise<{
16
+ file: File;
17
+ content: AutoBeUserMessageImageContent;
18
+ } | {
19
+ file: File;
20
+ content: AutoBeUserMessageAudioContent;
21
+ } | {
22
+ file: File;
23
+ content: AutoBeUserMessageFileContent;
24
+ }>;
25
+ export const convertToBase64: (file: File) => Promise<string>;
26
+ export const readAsText: (file: File) => Promise<string>;
27
+ export {};
28
+ }
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AutoBeFileUploader = void 0;
13
+ var AutoBeFileUploader;
14
+ (function (AutoBeFileUploader) {
15
+ AutoBeFileUploader.isValidFileExtension = (filename, supportAudio, hasFileUploadAPI) => {
16
+ const extension = filename
17
+ .toLowerCase()
18
+ .substring(filename.lastIndexOf("."));
19
+ const format = FORMATS[extension];
20
+ if (format === undefined)
21
+ return false;
22
+ else if (!supportAudio && format.category === "audio")
23
+ return false;
24
+ // Without file upload API, only support images, audio (if enabled), and PDF
25
+ if (!hasFileUploadAPI) {
26
+ if (format.category === "document")
27
+ return extension === ".pdf";
28
+ else if (format.category === "video")
29
+ return false;
30
+ const allowedCategories = ["image"];
31
+ if (supportAudio)
32
+ allowedCategories.push("audio");
33
+ return allowedCategories.includes(format.category);
34
+ }
35
+ return true;
36
+ };
37
+ AutoBeFileUploader.getAcceptAttribute = (supportAudio = false, hasFileUploadAPI = false) => {
38
+ const acceptParts = Object.values(FORMATS)
39
+ .filter((format) => {
40
+ // Audio filter
41
+ if (!supportAudio && format.category === "audio")
42
+ return false;
43
+ // Without file upload API, only allow images, audio (if enabled), and PDF
44
+ if (!hasFileUploadAPI) {
45
+ if (format.category === "image")
46
+ return true;
47
+ if (format.category === "audio" && supportAudio)
48
+ return true;
49
+ if (format.category === "document" && format.extension === ".pdf")
50
+ return true;
51
+ return false;
52
+ }
53
+ return true;
54
+ })
55
+ .map((format) => format.extension);
56
+ return acceptParts.join(",");
57
+ };
58
+ AutoBeFileUploader.getMimeType = (filename) => {
59
+ const extension = filename
60
+ .toLowerCase()
61
+ .substring(filename.lastIndexOf("."));
62
+ const format = FORMATS[extension];
63
+ return (format === null || format === void 0 ? void 0 : format.mimeType) || "application/octet-stream";
64
+ };
65
+ AutoBeFileUploader.compose = (config, file) => __awaiter(this, void 0, void 0, function* () {
66
+ var _a;
67
+ // Validate file extension first
68
+ if (!AutoBeFileUploader.isValidFileExtension(file.name, (_a = config.supportAudio) !== null && _a !== void 0 ? _a : false, !!config.file))
69
+ throw new Error(`Unsupported file format: ${file.name}. ${!config.file ? "Only images, PDF, and audio files (if enabled) are supported without file upload API." : ""}`);
70
+ // Check for image files
71
+ const extension = file.name
72
+ .toLowerCase()
73
+ .substring(file.name.lastIndexOf("."));
74
+ const format = FORMATS[extension];
75
+ if ((format === null || format === void 0 ? void 0 : format.category) === "image")
76
+ return {
77
+ file,
78
+ content: yield composeImageContent(config, file),
79
+ };
80
+ else if (config.supportAudio &&
81
+ (format === null || format === void 0 ? void 0 : format.category) === "audio" &&
82
+ AUDIO_MIME_VARIANTS.includes(file.type))
83
+ return {
84
+ file,
85
+ content: yield composeAudioContent(file),
86
+ };
87
+ return {
88
+ file,
89
+ content: yield composeFileContent(config, file),
90
+ };
91
+ });
92
+ AutoBeFileUploader.convertToBase64 = (file) => new Promise((resolve, reject) => {
93
+ const reader = new FileReader();
94
+ reader.onload = () => {
95
+ let data = reader.result;
96
+ // If browser couldn't determine MIME type properly, replace with correct one
97
+ if (data.startsWith("data:application/octet-stream") ||
98
+ data.startsWith("data:;")) {
99
+ const mimeType = AutoBeFileUploader.getMimeType(file.name);
100
+ data = data.replace(/^data:[^;]*/, `data:${mimeType}`);
101
+ }
102
+ resolve(data);
103
+ };
104
+ reader.onerror = reject;
105
+ reader.readAsDataURL(file);
106
+ });
107
+ AutoBeFileUploader.readAsText = (file) => new Promise((resolve, reject) => {
108
+ const reader = new FileReader();
109
+ reader.onload = () => {
110
+ const text = reader.result;
111
+ // Convert text to base64
112
+ const base64 = btoa(unescape(encodeURIComponent(text)));
113
+ resolve(base64);
114
+ };
115
+ reader.onerror = reject;
116
+ reader.readAsText(file);
117
+ });
118
+ const composeImageContent = (config, file) => __awaiter(this, void 0, void 0, function* () {
119
+ return ({
120
+ type: "image",
121
+ image: config.image
122
+ ? {
123
+ type: "url",
124
+ url: yield config.image(file).then((res) => res.url),
125
+ }
126
+ : {
127
+ type: "base64",
128
+ data: yield AutoBeFileUploader.convertToBase64(file),
129
+ },
130
+ });
131
+ });
132
+ const composeAudioContent = (file) => __awaiter(this, void 0, void 0, function* () {
133
+ return ({
134
+ type: "audio",
135
+ data: (yield AutoBeFileUploader.convertToBase64(file)).split(",")[1],
136
+ format: file.type.includes("wav") ? "wav" : "mp3",
137
+ });
138
+ });
139
+ const composeFileContent = (config, file) => __awaiter(this, void 0, void 0, function* () {
140
+ // Get MIME type for the file
141
+ const mimeType = AutoBeFileUploader.getMimeType(file.name);
142
+ // If file upload API is available, use it
143
+ if (config.file) {
144
+ return {
145
+ type: "file",
146
+ file: {
147
+ type: "id",
148
+ id: yield config.file(file).then((res) => res.id),
149
+ },
150
+ };
151
+ }
152
+ // If MIME type starts with text/, read as text and encode to base64 without data URL
153
+ if (mimeType.startsWith("text/")) {
154
+ return {
155
+ type: "file",
156
+ file: {
157
+ type: "base64",
158
+ name: file.name,
159
+ data: yield AutoBeFileUploader.readAsText(file),
160
+ },
161
+ };
162
+ }
163
+ // For other files, use data URL format
164
+ return {
165
+ type: "file",
166
+ file: {
167
+ type: "base64",
168
+ name: file.name,
169
+ data: yield AutoBeFileUploader.convertToBase64(file),
170
+ },
171
+ };
172
+ });
173
+ })(AutoBeFileUploader || (exports.AutoBeFileUploader = AutoBeFileUploader = {}));
174
+ const FORMATS = {
175
+ // Images
176
+ ".png": { extension: ".png", mimeType: "image/png", category: "image" },
177
+ ".jpg": { extension: ".jpg", mimeType: "image/jpeg", category: "image" },
178
+ ".jpeg": { extension: ".jpeg", mimeType: "image/jpeg", category: "image" },
179
+ ".gif": { extension: ".gif", mimeType: "image/gif", category: "image" },
180
+ ".webp": { extension: ".webp", mimeType: "image/webp", category: "image" },
181
+ // Audio
182
+ ".mp3": { extension: ".mp3", mimeType: "audio/mpeg", category: "audio" },
183
+ ".wav": { extension: ".wav", mimeType: "audio/wav", category: "audio" },
184
+ // Video
185
+ ".mp4": { extension: ".mp4", mimeType: "video/mp4", category: "video" },
186
+ ".mpeg": { extension: ".mpeg", mimeType: "video/mpeg", category: "video" },
187
+ ".mov": { extension: ".mov", mimeType: "video/quicktime", category: "video" },
188
+ ".avi": { extension: ".avi", mimeType: "video/x-msvideo", category: "video" },
189
+ ".webm": { extension: ".webm", mimeType: "video/webm", category: "video" },
190
+ ".flv": { extension: ".flv", mimeType: "video/x-flv", category: "video" },
191
+ ".mkv": {
192
+ extension: ".mkv",
193
+ mimeType: "video/x-matroska",
194
+ category: "video",
195
+ },
196
+ ".wmv": { extension: ".wmv", mimeType: "video/x-ms-wmv", category: "video" },
197
+ // Documents
198
+ ".pdf": {
199
+ extension: ".pdf",
200
+ mimeType: "application/pdf",
201
+ category: "document",
202
+ },
203
+ ".txt": { extension: ".txt", mimeType: "text/plain", category: "document" },
204
+ ".md": { extension: ".md", mimeType: "text/plain", category: "document" },
205
+ ".docx": {
206
+ extension: ".docx",
207
+ mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
208
+ category: "document",
209
+ },
210
+ ".html": { extension: ".html", mimeType: "text/html", category: "document" },
211
+ ".json": {
212
+ extension: ".json",
213
+ mimeType: "application/json",
214
+ category: "document",
215
+ },
216
+ ".csv": { extension: ".csv", mimeType: "text/csv", category: "document" },
217
+ ".xml": {
218
+ extension: ".xml",
219
+ mimeType: "application/xml",
220
+ category: "document",
221
+ },
222
+ ".rtf": {
223
+ extension: ".rtf",
224
+ mimeType: "application/rtf",
225
+ category: "document",
226
+ },
227
+ };
228
+ // Alternative MIME types for audio files that browsers might use
229
+ const AUDIO_MIME_VARIANTS = [
230
+ "audio/mpeg",
231
+ "audio/mp3",
232
+ "audio/wav",
233
+ "audio/x-wav",
234
+ "audio/wave",
235
+ "audio/x-wave",
236
+ ];
237
+ //# sourceMappingURL=AutoBeFileUploader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutoBeFileUploader.js","sourceRoot":"","sources":["../../src/utils/AutoBeFileUploader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { AutoBeUserMessageAudioContent } from "@autobe/interface";
2
+ export declare namespace AutoBeVoiceRecorder {
3
+ const start: (onComplete: (content: {
4
+ file: File;
5
+ content: AutoBeUserMessageAudioContent;
6
+ }) => void) => Promise<MediaRecorder>;
7
+ }
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AutoBeVoiceRecorder = void 0;
13
+ const AutoBeFileUploader_1 = require("./AutoBeFileUploader");
14
+ var AutoBeVoiceRecorder;
15
+ (function (AutoBeVoiceRecorder) {
16
+ AutoBeVoiceRecorder.start = (onComplete) => __awaiter(this, void 0, void 0, function* () {
17
+ const stream = yield navigator.mediaDevices.getUserMedia({
18
+ audio: true,
19
+ });
20
+ const recorder = new MediaRecorder(stream);
21
+ const chunks = [];
22
+ recorder.ondataavailable = (event) => {
23
+ if (event.data.size > 0)
24
+ chunks.push(event.data);
25
+ };
26
+ recorder.onstop = () => __awaiter(this, void 0, void 0, function* () {
27
+ try {
28
+ const audioBlob = new Blob(chunks, { type: "audio/webm" });
29
+ const wavBlob = yield convertToWav(audioBlob);
30
+ const audioFile = new File([wavBlob], `recording-${Date.now()}.wav`, {
31
+ type: "audio/wav",
32
+ });
33
+ const base64 = yield AutoBeFileUploader_1.AutoBeFileUploader.convertToBase64(audioFile);
34
+ const content = {
35
+ type: "audio",
36
+ data: base64,
37
+ format: "wav",
38
+ };
39
+ onComplete({
40
+ file: audioFile,
41
+ content,
42
+ });
43
+ }
44
+ finally {
45
+ stream.getTracks().forEach((track) => track.stop());
46
+ }
47
+ });
48
+ return recorder;
49
+ });
50
+ })(AutoBeVoiceRecorder || (exports.AutoBeVoiceRecorder = AutoBeVoiceRecorder = {}));
51
+ const convertToWav = (audioBlob) => __awaiter(void 0, void 0, void 0, function* () {
52
+ const audioContext = new AudioContext();
53
+ const arrayBuffer = yield audioBlob.arrayBuffer();
54
+ const audioBuffer = yield audioContext.decodeAudioData(arrayBuffer);
55
+ // Create WAV file
56
+ const length = audioBuffer.length;
57
+ const sampleRate = audioBuffer.sampleRate;
58
+ const numberOfChannels = audioBuffer.numberOfChannels;
59
+ // Calculate WAV file size
60
+ const wavLength = 44 + length * numberOfChannels * 2;
61
+ const buffer = new ArrayBuffer(wavLength);
62
+ const view = new DataView(buffer);
63
+ // WAV file header
64
+ const writeString = (offset, string) => {
65
+ for (let i = 0; i < string.length; i++) {
66
+ view.setUint8(offset + i, string.charCodeAt(i));
67
+ }
68
+ };
69
+ writeString(0, "RIFF");
70
+ view.setUint32(4, wavLength - 8, true);
71
+ writeString(8, "WAVE");
72
+ writeString(12, "fmt ");
73
+ view.setUint32(16, 16, true); // fmt chunk size
74
+ view.setUint16(20, 1, true); // PCM format
75
+ view.setUint16(22, numberOfChannels, true);
76
+ view.setUint32(24, sampleRate, true);
77
+ view.setUint32(28, sampleRate * numberOfChannels * 2, true); // byte rate
78
+ view.setUint16(32, numberOfChannels * 2, true); // block align
79
+ view.setUint16(34, 16, true); // bits per sample
80
+ writeString(36, "data");
81
+ view.setUint32(40, length * numberOfChannels * 2, true);
82
+ // Write audio data
83
+ let offset = 44;
84
+ for (let i = 0; i < length; i++) {
85
+ for (let channel = 0; channel < numberOfChannels; channel++) {
86
+ const sample = audioBuffer.getChannelData(channel)[i];
87
+ const value = Math.max(-1, Math.min(1, sample));
88
+ view.setInt16(offset, value * 0x7fff, true);
89
+ offset += 2;
90
+ }
91
+ }
92
+ return new Blob([buffer], { type: "audio/wav" });
93
+ });
94
+ //# sourceMappingURL=AutoBeVoiceRecorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutoBeVoiceRecorder.js","sourceRoot":"","sources":["../../src/utils/AutoBeVoiceRecorder.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,6DAA0D;AAE1D,IAAiB,mBAAmB,CAwCnC;AAxCD,WAAiB,mBAAmB;IACrB,yBAAK,GAAG,CACnB,UAGU,EACc,EAAE;QAC1B,MAAM,MAAM,GAAgB,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC;YACpE,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,MAAM,QAAQ,GAAkB,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAW,EAAE,CAAC;QAE1B,QAAQ,CAAC,eAAe,GAAG,CAAC,KAAK,EAAE,EAAE;YACnC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC,CAAC;QACF,QAAQ,CAAC,MAAM,GAAG,GAAS,EAAE;YAC3B,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBAC3D,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC9C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE;oBACnE,IAAI,EAAE,WAAW;iBAClB,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,uCAAkB,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;gBACnE,MAAM,OAAO,GAAkC;oBAC7C,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,KAAK;iBACd,CAAC;gBACF,UAAU,CAAC;oBACT,IAAI,EAAE,SAAS;oBACf,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAA,CAAC;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAA,CAAC;AACJ,CAAC,EAxCgB,mBAAmB,mCAAnB,mBAAmB,QAwCnC;AAED,MAAM,YAAY,GAAG,CAAO,SAAe,EAAiB,EAAE;IAC5D,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IACxC,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAEpE,kBAAkB;IAClB,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAClC,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;IAC1C,MAAM,gBAAgB,GAAG,WAAW,CAAC,gBAAgB,CAAC;IAEtD,0BAA0B;IAC1B,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,GAAG,gBAAgB,GAAG,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAElC,kBAAkB;IAClB,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC;IAEF,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACvB,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACvC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACvB,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACxB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB;IAC/C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa;IAC1C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,GAAG,gBAAgB,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY;IACzE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,gBAAgB,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc;IAC9D,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB;IAChD,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACxB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAExD,mBAAmB;IACnB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AACnD,CAAC,CAAA,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./AutoBeFileUploader";
2
+ export * from "./AutoBeVoiceRecorder";
3
+ export * from "./time";
4
+ export * from "./number";
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./AutoBeFileUploader"), exports);
18
+ __exportStar(require("./AutoBeVoiceRecorder"), exports);
19
+ __exportStar(require("./time"), exports);
20
+ __exportStar(require("./number"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,wDAAsC;AACtC,yCAAuB;AACvB,2CAAyB"}
@@ -0,0 +1 @@
1
+ export declare const toCompactNumberFormat: (value: number) => string;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toCompactNumberFormat = void 0;
4
+ const toCompactNumberFormat = (value) => {
5
+ const units = [
6
+ { value: 1000000000000000, symbol: "Q" },
7
+ { value: 1000000000000, symbol: "T" },
8
+ { value: 1000000000, symbol: "B" },
9
+ { value: 1000000, symbol: "M" },
10
+ { value: 1000, symbol: "K" },
11
+ ];
12
+ for (const unit of units) {
13
+ if (value >= unit.value) {
14
+ return (value / unit.value).toFixed(1) + unit.symbol;
15
+ }
16
+ }
17
+ return value.toString();
18
+ };
19
+ exports.toCompactNumberFormat = toCompactNumberFormat;
20
+ //# sourceMappingURL=number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number.js","sourceRoot":"","sources":["../../src/utils/number.ts"],"names":[],"mappings":";;;AAAO,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAE,EAAE;IACrD,MAAM,KAAK,GAAG;QACZ,EAAE,KAAK,EAAE,gBAAqB,EAAE,MAAM,EAAE,GAAG,EAAE;QAC7C,EAAE,KAAK,EAAE,aAAiB,EAAE,MAAM,EAAE,GAAG,EAAE;QACzC,EAAE,KAAK,EAAE,UAAa,EAAE,MAAM,EAAE,GAAG,EAAE;QACrC,EAAE,KAAK,EAAE,OAAS,EAAE,MAAM,EAAE,GAAG,EAAE;QACjC,EAAE,KAAK,EAAE,IAAK,EAAE,MAAM,EAAE,GAAG,EAAE;KAC9B,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACvD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC,CAAC;AAhBW,QAAA,qBAAqB,yBAgBhC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@autobe/ui",
3
3
  "type": "commonjs",
4
- "version": "0.19.1",
4
+ "version": "0.21.0",
5
5
  "description": "AutoBE UI",
6
6
  "author": "Wrtn Technologies",
7
7
  "homepage": "https://wrtnlabs.io/autobe",
@@ -13,13 +13,24 @@
13
13
  "url": "https://github.com/wrtnlabs/autobe/issues"
14
14
  },
15
15
  "main": "lib/index.js",
16
+ "exports": {
17
+ ".": "./lib/index.js",
18
+ "./utils": "./lib/utils/index.js",
19
+ "./hooks": "./lib/hooks/index.js"
20
+ },
16
21
  "devDependencies": {
22
+ "@samchon/openapi": "^4.7.1",
17
23
  "@types/react": "^19.1.10",
18
24
  "@types/react-dom": "^19.1.5",
19
25
  "react": "^19.1.1",
20
26
  "react-dom": "^19.1.1",
21
27
  "typescript": "~5.9.2",
22
- "@autobe/interface": "0.19.1"
28
+ "@autobe/interface": "0.21.0"
29
+ },
30
+ "dependencies": {
31
+ "@stackblitz/sdk": "^1.11.0",
32
+ "jszip": "^3.10.1",
33
+ "tstl": "^3.0.0"
23
34
  },
24
35
  "scripts": {
25
36
  "build": "tsc",
@@ -0,0 +1,123 @@
1
+ import {
2
+ AutoBeUserMessageContent,
3
+ IAutoBePlaygroundHeader,
4
+ IAutoBeRpcService,
5
+ IAutoBeTokenUsageJson,
6
+ } from "@autobe/interface";
7
+ import { ILlmSchema } from "@samchon/openapi";
8
+ import { RefObject, useEffect, useRef } from "react";
9
+
10
+ import {
11
+ AutoBeChatBanner,
12
+ AutoBeChatUploadBox,
13
+ AutoBeEventMovie,
14
+ AutoBeListenerState,
15
+ IAutoBeEventGroup,
16
+ IAutoBeUploadConfig,
17
+ } from ".";
18
+ import { useMediaQuery } from "./hooks";
19
+
20
+ export interface IAutoBeChatMainProps {
21
+ isMobile: boolean;
22
+ eventGroups: IAutoBeEventGroup[];
23
+ service: IAutoBeRpcService;
24
+ conversate: (messages: AutoBeUserMessageContent[]) => Promise<void>;
25
+ setError: (error: Error) => void;
26
+ uploadConfig?: IAutoBeUploadConfig;
27
+ tokenUsage: IAutoBeTokenUsageJson | null;
28
+ header: IAutoBePlaygroundHeader<ILlmSchema.Model>;
29
+ state: AutoBeListenerState;
30
+ }
31
+
32
+ export const AutoBeChatMain = (props: IAutoBeChatMainProps) => {
33
+ const bodyContainerRef = useRef<HTMLDivElement>(null);
34
+ const scrollAnchorRef = useRef<HTMLDivElement>(null);
35
+
36
+ const listener: RefObject<AutoBeChatUploadBox.IListener> = useRef({
37
+ handleDragEnter: () => {},
38
+ handleDragLeave: () => {},
39
+ handleDrop: () => {},
40
+ handleDragOver: () => {},
41
+ });
42
+
43
+ useEffect(() => {
44
+ if (props.eventGroups.length === 0) return;
45
+ scrollAnchorRef.current?.scrollIntoView({
46
+ behavior: "smooth",
47
+ });
48
+ }, [bodyContainerRef.current?.scrollHeight]);
49
+
50
+ const isMinWidthLg = useMediaQuery(useMediaQuery.MIN_WIDTH_LG);
51
+ return (
52
+ <div
53
+ onDragEnter={(e) => listener.current.handleDragEnter(e)}
54
+ onDragLeave={(e) => listener.current.handleDragLeave(e)}
55
+ onDragOver={(e) => listener.current.handleDragOver(e)}
56
+ onDrop={(e) => listener.current.handleDrop(e)}
57
+ style={{
58
+ position: "relative",
59
+ overflowY: "auto",
60
+ margin: 0,
61
+ backgroundColor: "lightblue",
62
+ flexGrow: 1,
63
+ display: "flex",
64
+ flexDirection: "column",
65
+ }}
66
+ ref={bodyContainerRef}
67
+ >
68
+ {!isMinWidthLg && (
69
+ <AutoBeChatBanner
70
+ header={props.header}
71
+ tokenUsage={props.tokenUsage}
72
+ state={props.state}
73
+ />
74
+ )}
75
+
76
+ <div
77
+ style={{
78
+ backgroundColor: "lightblue",
79
+ padding: "2rem",
80
+ gap: 16,
81
+ display: "flex",
82
+ flexDirection: "column",
83
+ }}
84
+ >
85
+ {props.eventGroups.map((e, index) => (
86
+ <AutoBeEventMovie
87
+ key={index}
88
+ getFiles={props.service.getFiles}
89
+ events={e.events}
90
+ last={index === props.eventGroups.length - 1}
91
+ />
92
+ ))}
93
+ </div>
94
+
95
+ {/*
96
+ * Prompt input area
97
+ * this flexGrow: 1 means that the prompt input area will take up the remaining space
98
+ * so that the upload box will be at the bottom of the screen
99
+ */}
100
+ <div
101
+ style={{ flexGrow: 1, minHeight: "1rem" }}
102
+ ref={scrollAnchorRef}
103
+ ></div>
104
+ <div
105
+ style={{
106
+ position: "sticky",
107
+ bottom: 16,
108
+ left: 0,
109
+ right: 0,
110
+ zIndex: 1000,
111
+ }}
112
+ >
113
+ <AutoBeChatUploadBox
114
+ listener={listener}
115
+ uploadConfig={props.uploadConfig}
116
+ conversate={props.conversate}
117
+ setError={props.setError}
118
+ />
119
+ </div>
120
+ </div>
121
+ );
122
+ };
123
+ export default AutoBeChatMain;