@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.
- package/lib/AutoBeChatMain.d.ts +16 -0
- package/lib/AutoBeChatMain.js +51 -0
- package/lib/AutoBeChatMain.js.map +1 -0
- package/lib/banner/AutoBeAgentInformation.d.ts +15 -0
- package/lib/banner/AutoBeAgentInformation.js +41 -0
- package/lib/banner/AutoBeAgentInformation.js.map +1 -0
- package/lib/banner/AutoBeChatBanner.d.ts +15 -0
- package/lib/banner/AutoBeChatBanner.js +29 -0
- package/lib/banner/AutoBeChatBanner.js.map +1 -0
- package/lib/banner/AutoBeChatState.d.ts +6 -0
- package/lib/banner/AutoBeChatState.js +80 -0
- package/lib/banner/AutoBeChatState.js.map +1 -0
- package/lib/banner/AutoBeTokenUsage.d.ts +14 -0
- package/lib/banner/AutoBeTokenUsage.js +60 -0
- package/lib/banner/AutoBeTokenUsage.js.map +1 -0
- package/lib/banner/index.d.ts +4 -0
- package/lib/banner/index.js +21 -0
- package/lib/banner/index.js.map +1 -0
- package/lib/common/Collapsible.d.ts +15 -0
- package/lib/common/Collapsible.js +45 -0
- package/lib/common/Collapsible.js.map +1 -0
- package/lib/common/index.d.ts +2 -0
- package/lib/common/index.js +19 -0
- package/lib/common/index.js.map +1 -0
- package/lib/constant/color.d.ts +18 -0
- package/lib/constant/color.js +25 -0
- package/lib/constant/color.js.map +1 -0
- package/lib/events/AutoBeCompleteEventMovie.d.ts +7 -0
- package/lib/events/AutoBeCompleteEventMovie.js +210 -0
- package/lib/events/AutoBeCompleteEventMovie.js.map +1 -0
- package/lib/events/AutoBeEventMovie.d.ts +8 -0
- package/lib/events/AutoBeEventMovie.js +84 -0
- package/lib/events/AutoBeEventMovie.js.map +1 -0
- package/lib/events/AutoBeProgressEventMovie.js +2 -61
- package/lib/events/AutoBeProgressEventMovie.js.map +1 -1
- package/lib/events/AutoBeScenarioEventMovie.js +2 -44
- package/lib/events/AutoBeScenarioEventMovie.js.map +1 -1
- package/lib/events/AutoBeValidateEventMovie.d.ts +6 -0
- package/lib/events/AutoBeValidateEventMovie.js +115 -0
- package/lib/events/AutoBeValidateEventMovie.js.map +1 -0
- package/lib/events/common/CollapsibleEventGroup.d.ts +28 -0
- package/lib/events/common/CollapsibleEventGroup.js +89 -0
- package/lib/events/common/CollapsibleEventGroup.js.map +1 -0
- package/lib/events/common/EventCard.d.ts +13 -0
- package/lib/events/common/EventCard.js +43 -0
- package/lib/events/common/EventCard.js.map +1 -0
- package/lib/events/common/EventContent.d.ts +11 -0
- package/lib/events/common/EventContent.js +14 -0
- package/lib/events/common/EventContent.js.map +1 -0
- package/lib/events/common/EventHeader.d.ts +15 -0
- package/lib/events/common/EventHeader.js +41 -0
- package/lib/events/common/EventHeader.js.map +1 -0
- package/lib/events/common/EventIcon.d.ts +11 -0
- package/lib/events/common/EventIcon.js +50 -0
- package/lib/events/common/EventIcon.js.map +1 -0
- package/lib/events/common/ProgressBar.d.ts +14 -0
- package/lib/events/common/ProgressBar.js +33 -0
- package/lib/events/common/ProgressBar.js.map +1 -0
- package/lib/events/common/index.d.ts +6 -0
- package/lib/events/common/index.js +16 -0
- package/lib/events/common/index.js.map +1 -0
- package/lib/events/groups/ValidateEventGroup.d.ts +12 -0
- package/lib/events/groups/ValidateEventGroup.js +78 -0
- package/lib/events/groups/ValidateEventGroup.js.map +1 -0
- package/lib/events/groups/index.d.ts +1 -0
- package/lib/events/groups/index.js +6 -0
- package/lib/events/groups/index.js.map +1 -0
- package/lib/events/index.d.ts +6 -0
- package/lib/events/index.js +27 -1
- package/lib/events/index.js.map +1 -1
- package/lib/events/utils/eventGrouper.d.ts +20 -0
- package/lib/events/utils/eventGrouper.js +74 -0
- package/lib/events/utils/eventGrouper.js.map +1 -0
- package/lib/events/utils/index.d.ts +1 -0
- package/lib/events/utils/index.js +6 -0
- package/lib/events/utils/index.js.map +1 -0
- package/lib/hooks/index.d.ts +2 -0
- package/lib/hooks/index.js +19 -0
- package/lib/hooks/index.js.map +1 -0
- package/lib/hooks/useIsomorphicLayoutEffect.d.ts +6 -0
- package/lib/hooks/useIsomorphicLayoutEffect.js +10 -0
- package/lib/hooks/useIsomorphicLayoutEffect.js.map +1 -0
- package/lib/hooks/useMediaQuery.d.ts +11 -0
- package/lib/hooks/useMediaQuery.js +52 -0
- package/lib/hooks/useMediaQuery.js.map +1 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +8 -1
- package/lib/index.js.map +1 -1
- package/lib/structure/AutoBeListener.d.ts +17 -0
- package/lib/structure/AutoBeListener.js +250 -0
- package/lib/structure/AutoBeListener.js.map +1 -0
- package/lib/structure/AutoBeListenerState.d.ts +14 -0
- package/lib/structure/AutoBeListenerState.js +39 -0
- package/lib/structure/AutoBeListenerState.js.map +1 -0
- package/lib/structure/IAutoBeEventGroup.d.ts +5 -0
- package/lib/structure/IAutoBeEventGroup.js +3 -0
- package/lib/structure/IAutoBeEventGroup.js.map +1 -0
- package/lib/structure/index.d.ts +3 -0
- package/lib/structure/index.js +20 -0
- package/lib/structure/index.js.map +1 -0
- package/lib/upload/AutoBeChatUploadBox.d.ts +31 -0
- package/lib/upload/AutoBeChatUploadBox.js +221 -0
- package/lib/upload/AutoBeChatUploadBox.js.map +1 -0
- package/lib/upload/AutoBeChatUploadSendButton.d.ts +15 -0
- package/lib/upload/AutoBeChatUploadSendButton.js +38 -0
- package/lib/upload/AutoBeChatUploadSendButton.js.map +1 -0
- package/lib/upload/AutoBeFileUploadBox.d.ts +8 -0
- package/lib/upload/AutoBeFileUploadBox.js +68 -0
- package/lib/upload/AutoBeFileUploadBox.js.map +1 -0
- package/lib/upload/AutoBeUploadConfig.d.ts +9 -0
- package/lib/upload/AutoBeUploadConfig.js +3 -0
- package/lib/upload/AutoBeUploadConfig.js.map +1 -0
- package/lib/upload/AutoBeVoiceRecoderButton.d.ts +11 -0
- package/lib/upload/AutoBeVoiceRecoderButton.js +58 -0
- package/lib/upload/AutoBeVoiceRecoderButton.js.map +1 -0
- package/lib/upload/index.d.ts +5 -0
- package/lib/upload/index.js +22 -0
- package/lib/upload/index.js.map +1 -0
- package/lib/utils/AutoBeFileUploader.d.ts +28 -0
- package/lib/utils/AutoBeFileUploader.js +237 -0
- package/lib/utils/AutoBeFileUploader.js.map +1 -0
- package/lib/utils/AutoBeVoiceRecorder.d.ts +7 -0
- package/lib/utils/AutoBeVoiceRecorder.js +94 -0
- package/lib/utils/AutoBeVoiceRecorder.js.map +1 -0
- package/lib/utils/index.d.ts +4 -0
- package/lib/utils/index.js +21 -0
- package/lib/utils/index.js.map +1 -0
- package/lib/utils/number.d.ts +1 -0
- package/lib/utils/number.js +20 -0
- package/lib/utils/number.js.map +1 -0
- package/package.json +13 -2
- package/src/AutoBeChatMain.tsx +123 -0
- package/src/banner/AutoBeAgentInformation.tsx +102 -0
- package/src/banner/AutoBeChatBanner.tsx +72 -0
- package/src/banner/AutoBeChatState.tsx +152 -0
- package/src/banner/AutoBeTokenUsage.tsx +152 -0
- package/src/banner/index.ts +4 -0
- package/src/common/Collapsible.tsx +95 -0
- package/src/common/index.ts +2 -0
- package/src/constant/color.ts +24 -0
- package/src/events/AutoBeCompleteEventMovie.tsx +402 -0
- package/src/events/AutoBeEventMovie.tsx +114 -0
- package/src/events/AutoBeProgressEventMovie.tsx +12 -125
- package/src/events/AutoBeScenarioEventMovie.tsx +5 -93
- package/src/events/AutoBeValidateEventMovie.tsx +326 -0
- package/src/events/README.md +300 -0
- package/src/events/common/CollapsibleEventGroup.tsx +220 -0
- package/src/events/common/EventCard.tsx +61 -0
- package/src/events/common/EventContent.tsx +31 -0
- package/src/events/common/EventHeader.tsx +85 -0
- package/src/events/common/EventIcon.tsx +82 -0
- package/src/events/common/ProgressBar.tsx +63 -0
- package/src/events/common/index.ts +13 -0
- package/src/events/groups/ValidateEventGroup.tsx +150 -0
- package/src/events/groups/index.ts +4 -0
- package/src/events/index.ts +12 -0
- package/src/events/utils/eventGrouper.tsx +118 -0
- package/src/events/utils/index.ts +1 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useIsomorphicLayoutEffect.ts +8 -0
- package/src/hooks/useMediaQuery.ts +68 -0
- package/src/index.ts +5 -0
- package/src/structure/AutoBeListener.ts +263 -0
- package/src/structure/AutoBeListenerState.ts +53 -0
- package/src/structure/IAutoBeEventGroup.ts +6 -0
- package/src/structure/index.ts +3 -0
- package/src/upload/AutoBeChatUploadBox.tsx +372 -0
- package/src/upload/AutoBeChatUploadSendButton.tsx +66 -0
- package/src/upload/AutoBeFileUploadBox.tsx +123 -0
- package/src/upload/AutoBeUploadConfig.ts +5 -0
- package/src/upload/AutoBeVoiceRecoderButton.tsx +100 -0
- package/src/upload/index.ts +5 -0
- package/src/utils/AutoBeFileUploader.ts +279 -0
- package/src/utils/AutoBeVoiceRecorder.ts +95 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/number.ts +17 -0
- 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,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":"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"}
|
|
@@ -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.
|
|
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.
|
|
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;
|