@autobe/ui 0.19.1
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/LICENSE +661 -0
- package/lib/AutoBeAssistantMessageMovie.d.ts +7 -0
- package/lib/AutoBeAssistantMessageMovie.js +13 -0
- package/lib/AutoBeAssistantMessageMovie.js.map +1 -0
- package/lib/AutoBeUserMessageMovie.d.ts +6 -0
- package/lib/AutoBeUserMessageMovie.js +17 -0
- package/lib/AutoBeUserMessageMovie.js.map +1 -0
- package/lib/common/ChatBubble.d.ts +19 -0
- package/lib/common/ChatBubble.js +56 -0
- package/lib/common/ChatBubble.js.map +1 -0
- package/lib/common/openai/OpenAIContent.d.ts +6 -0
- package/lib/common/openai/OpenAIContent.js +37 -0
- package/lib/common/openai/OpenAIContent.js.map +1 -0
- package/lib/common/openai/OpenAIUserAudioContent.d.ts +6 -0
- package/lib/common/openai/OpenAIUserAudioContent.js +39 -0
- package/lib/common/openai/OpenAIUserAudioContent.js.map +1 -0
- package/lib/common/openai/OpenAIUserFileContent.d.ts +6 -0
- package/lib/common/openai/OpenAIUserFileContent.js +45 -0
- package/lib/common/openai/OpenAIUserFileContent.js.map +1 -0
- package/lib/common/openai/OpenAIUserImageContent.d.ts +6 -0
- package/lib/common/openai/OpenAIUserImageContent.js +21 -0
- package/lib/common/openai/OpenAIUserImageContent.js.map +1 -0
- package/lib/common/openai/OpenAIUserTextContent.d.ts +5 -0
- package/lib/common/openai/OpenAIUserTextContent.js +15 -0
- package/lib/common/openai/OpenAIUserTextContent.js.map +1 -0
- package/lib/common/openai/index.d.ts +5 -0
- package/lib/common/openai/index.js +14 -0
- package/lib/common/openai/index.js.map +1 -0
- package/lib/events/AutoBeProgressEventMovie.d.ts +9 -0
- package/lib/events/AutoBeProgressEventMovie.js +163 -0
- package/lib/events/AutoBeProgressEventMovie.js.map +1 -0
- package/lib/events/AutoBeScenarioEventMovie.d.ts +6 -0
- package/lib/events/AutoBeScenarioEventMovie.js +84 -0
- package/lib/events/AutoBeScenarioEventMovie.js.map +1 -0
- package/lib/events/AutoBeStartEventMovie.d.ts +8 -0
- package/lib/events/AutoBeStartEventMovie.js +39 -0
- package/lib/events/AutoBeStartEventMovie.js.map +1 -0
- package/lib/events/index.d.ts +3 -0
- package/lib/events/index.js +13 -0
- package/lib/events/index.js.map +1 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.js +28 -0
- package/lib/index.js.map +1 -0
- package/lib/utils/time.d.ts +7 -0
- package/lib/utils/time.js +19 -0
- package/lib/utils/time.js.map +1 -0
- package/package.json +28 -0
- package/src/AutoBeAssistantMessageMovie.tsx +22 -0
- package/src/AutoBeUserMessageMovie.tsx +25 -0
- package/src/common/ChatBubble.tsx +119 -0
- package/src/common/openai/OpenAIContent.tsx +53 -0
- package/src/common/openai/OpenAIUserAudioContent.tsx +70 -0
- package/src/common/openai/OpenAIUserFileContent.tsx +76 -0
- package/src/common/openai/OpenAIUserImageContent.tsx +34 -0
- package/src/common/openai/OpenAIUserTextContent.tsx +16 -0
- package/src/common/openai/index.ts +5 -0
- package/src/events/AutoBeProgressEventMovie.tsx +250 -0
- package/src/events/AutoBeScenarioEventMovie.tsx +183 -0
- package/src/events/AutoBeStartEventMovie.tsx +82 -0
- package/src/events/index.ts +3 -0
- package/src/index.ts +8 -0
- package/src/utils/time.ts +14 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AutoBeScenarioEventMovie = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const time_1 = require("../utils/time");
|
|
6
|
+
const AutoBeScenarioEventMovie = (props) => {
|
|
7
|
+
const { event } = props;
|
|
8
|
+
const { title, description } = getState(event);
|
|
9
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
10
|
+
backgroundColor: "#f8fafc",
|
|
11
|
+
border: "1px solid #e2e8f0",
|
|
12
|
+
borderRadius: "0.75rem",
|
|
13
|
+
padding: "1.5rem",
|
|
14
|
+
marginBottom: "1rem",
|
|
15
|
+
boxShadow: "0 1px 3px 0 rgb(0 0 0 / 0.1)",
|
|
16
|
+
}, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
|
|
17
|
+
display: "flex",
|
|
18
|
+
alignItems: "center",
|
|
19
|
+
justifyContent: "space-between",
|
|
20
|
+
marginBottom: "1rem",
|
|
21
|
+
}, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
|
|
22
|
+
display: "flex",
|
|
23
|
+
alignItems: "center",
|
|
24
|
+
gap: "0.75rem",
|
|
25
|
+
}, children: [(0, jsx_runtime_1.jsx)("div", { style: {
|
|
26
|
+
width: "2rem",
|
|
27
|
+
height: "2rem",
|
|
28
|
+
backgroundColor: "#3b82f6",
|
|
29
|
+
borderRadius: "50%",
|
|
30
|
+
display: "flex",
|
|
31
|
+
alignItems: "center",
|
|
32
|
+
justifyContent: "center",
|
|
33
|
+
}, children: (0, jsx_runtime_1.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", style: { color: "#ffffff" }, children: (0, jsx_runtime_1.jsx)("path", { d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" }) }) }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("h3", { style: {
|
|
34
|
+
fontSize: "1.125rem",
|
|
35
|
+
fontWeight: "600",
|
|
36
|
+
color: "#1e293b",
|
|
37
|
+
margin: 0,
|
|
38
|
+
marginBottom: "0.25rem",
|
|
39
|
+
}, children: title }) })] }), (0, jsx_runtime_1.jsx)("div", { style: {
|
|
40
|
+
fontSize: "0.75rem",
|
|
41
|
+
color: "#64748b",
|
|
42
|
+
textAlign: "right",
|
|
43
|
+
}, children: (0, time_1.formatTime)(event.created_at) })] }), (0, jsx_runtime_1.jsx)("div", { style: {
|
|
44
|
+
fontSize: "0.875rem",
|
|
45
|
+
lineHeight: "1.5",
|
|
46
|
+
color: "#475569",
|
|
47
|
+
backgroundColor: "#ffffff",
|
|
48
|
+
padding: "1rem",
|
|
49
|
+
borderRadius: "0.5rem",
|
|
50
|
+
border: "1px solid #e2e8f0",
|
|
51
|
+
}, children: description })] }));
|
|
52
|
+
};
|
|
53
|
+
exports.AutoBeScenarioEventMovie = AutoBeScenarioEventMovie;
|
|
54
|
+
exports.default = exports.AutoBeScenarioEventMovie;
|
|
55
|
+
function getState(event) {
|
|
56
|
+
switch (event.type) {
|
|
57
|
+
case "analyzeScenario":
|
|
58
|
+
return {
|
|
59
|
+
title: "Analyze Scenario",
|
|
60
|
+
description: ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Generating analysis report.", (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("br", {}), "Number of documents to write: #", event.files.length] })),
|
|
61
|
+
};
|
|
62
|
+
case "prismaComponents":
|
|
63
|
+
return {
|
|
64
|
+
title: "Prisma Components",
|
|
65
|
+
description: ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Generating Prisma components.", (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("br", {}), "Number of Prisma schemas would be:", (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)("ul", { children: [(0, jsx_runtime_1.jsxs)("li", { children: ["namespaces: #", event.components.length] }), (0, jsx_runtime_1.jsxs)("li", { children: ["tables: #", event.components
|
|
66
|
+
.map((c) => c.tables.length)
|
|
67
|
+
.reduce((a, b) => a + b, 0)] })] })] })),
|
|
68
|
+
};
|
|
69
|
+
case "interfaceGroups":
|
|
70
|
+
return {
|
|
71
|
+
title: "Interface Endpoint Groups",
|
|
72
|
+
description: ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Generating interface endpoint groups.", (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("br", {}), "Number of API operation groups would be #", event.groups.length] })),
|
|
73
|
+
};
|
|
74
|
+
case "realizeTestReset":
|
|
75
|
+
return {
|
|
76
|
+
title: "Realize Test Reset",
|
|
77
|
+
description: "Resetting test environment.",
|
|
78
|
+
};
|
|
79
|
+
default:
|
|
80
|
+
event;
|
|
81
|
+
throw new Error("Unknown event type");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=AutoBeScenarioEventMovie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutoBeScenarioEventMovie.js","sourceRoot":"","sources":["../../src/events/AutoBeScenarioEventMovie.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AutoBeAnalyzeStartEvent, AutoBeInterfaceStartEvent, AutoBePrismaStartEvent, AutoBeRealizeAuthorizationStartEvent, AutoBeRealizeStartEvent, AutoBeRealizeTestStartEvent, AutoBeTestStartEvent } from "@autobe/interface";
|
|
2
|
+
interface IAutoBeStartEventProps {
|
|
3
|
+
event: AutoBeAnalyzeStartEvent | AutoBePrismaStartEvent | AutoBeInterfaceStartEvent | AutoBeTestStartEvent | AutoBeRealizeStartEvent | AutoBeRealizeAuthorizationStartEvent | AutoBeRealizeTestStartEvent;
|
|
4
|
+
style?: React.CSSProperties;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
declare const AutoBeStartEventMovie: (props: IAutoBeStartEventProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default AutoBeStartEventMovie;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
4
|
+
const AutoBeStartEventMovie = (props) => {
|
|
5
|
+
const { event } = props;
|
|
6
|
+
const title = getTitle(event);
|
|
7
|
+
return ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
8
|
+
display: "flex",
|
|
9
|
+
justifyContent: "center",
|
|
10
|
+
marginBottom: "1rem",
|
|
11
|
+
}, children: (0, jsx_runtime_1.jsx)("div", { className: props.className, style: Object.assign({ backgroundColor: "#f0f0f0", border: "1px solid #e0e0e0", borderRadius: "0.5rem", padding: "0.5rem 1rem" }, props.style), children: (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
12
|
+
fontSize: "0.875rem",
|
|
13
|
+
color: "#666",
|
|
14
|
+
fontWeight: "medium",
|
|
15
|
+
}, children: ["\uD83D\uDE80 ", title, " has started."] }) }) }));
|
|
16
|
+
};
|
|
17
|
+
function getTitle(event) {
|
|
18
|
+
switch (event.type) {
|
|
19
|
+
case "analyzeStart":
|
|
20
|
+
return "Analyze";
|
|
21
|
+
case "prismaStart":
|
|
22
|
+
return "Prisma";
|
|
23
|
+
case "interfaceStart":
|
|
24
|
+
return "Interface";
|
|
25
|
+
case "testStart":
|
|
26
|
+
return "Test";
|
|
27
|
+
case "realizeStart":
|
|
28
|
+
return "Realize";
|
|
29
|
+
case "realizeAuthorizationStart":
|
|
30
|
+
return "Realize Authorization";
|
|
31
|
+
case "realizeTestStart":
|
|
32
|
+
return "Final E2E Test";
|
|
33
|
+
default:
|
|
34
|
+
event;
|
|
35
|
+
throw new Error("Unknown event type"); // unreachable
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.default = AutoBeStartEventMovie;
|
|
39
|
+
//# sourceMappingURL=AutoBeStartEventMovie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutoBeStartEventMovie.js","sourceRoot":"","sources":["../../src/events/AutoBeStartEventMovie.tsx"],"names":[],"mappings":";;;AAuBA,MAAM,qBAAqB,GAAG,CAAC,KAA6B,EAAE,EAAE;IAC9D,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9B,OAAO,CACL,gCACE,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,cAAc,EAAE,QAAQ;YACxB,YAAY,EAAE,MAAM;SACrB,YAED,gCACE,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,KAAK,kBACH,eAAe,EAAE,SAAS,EAC1B,MAAM,EAAE,mBAAmB,EAC3B,YAAY,EAAE,QAAQ,EACtB,OAAO,EAAE,aAAa,IACnB,KAAK,CAAC,KAAK,aAGhB,iCACE,KAAK,EAAE;oBACL,QAAQ,EAAE,UAAU;oBACpB,KAAK,EAAE,MAAM;oBACb,UAAU,EAAE,QAAQ;iBACrB,8BAEG,KAAK,qBACL,GACF,GACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAsC;IACtD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,cAAc;YACjB,OAAO,SAAS,CAAC;QACnB,KAAK,aAAa;YAChB,OAAO,QAAQ,CAAC;QAClB,KAAK,gBAAgB;YACnB,OAAO,WAAW,CAAC;QACrB,KAAK,WAAW;YACd,OAAO,MAAM,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,SAAS,CAAC;QACnB,KAAK,2BAA2B;YAC9B,OAAO,uBAAuB,CAAC;QACjC,KAAK,kBAAkB;YACrB,OAAO,gBAAgB,CAAC;QAC1B;YACE,KAAqB,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,cAAc;IACzD,CAAC;AACH,CAAC;AAED,kBAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AutoBeProgressEventMovie = exports.AutoBeScenarioEventMovie = exports.AutoBeStartEventMovie = void 0;
|
|
7
|
+
var AutoBeStartEventMovie_1 = require("./AutoBeStartEventMovie");
|
|
8
|
+
Object.defineProperty(exports, "AutoBeStartEventMovie", { enumerable: true, get: function () { return __importDefault(AutoBeStartEventMovie_1).default; } });
|
|
9
|
+
var AutoBeScenarioEventMovie_1 = require("./AutoBeScenarioEventMovie");
|
|
10
|
+
Object.defineProperty(exports, "AutoBeScenarioEventMovie", { enumerable: true, get: function () { return __importDefault(AutoBeScenarioEventMovie_1).default; } });
|
|
11
|
+
var AutoBeProgressEventMovie_1 = require("./AutoBeProgressEventMovie");
|
|
12
|
+
Object.defineProperty(exports, "AutoBeProgressEventMovie", { enumerable: true, get: function () { return __importDefault(AutoBeProgressEventMovie_1).default; } });
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":";;;;;;AAAA,iEAA2E;AAAlE,+IAAA,OAAO,OAAyB;AACzC,uEAAiF;AAAxE,qJAAA,OAAO,OAA4B;AAC5C,uEAAiF;AAAxE,qJAAA,OAAO,OAA4B"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from "./events";
|
|
2
|
+
export { default as AutoBeAssistantMessageMovie } from "./AutoBeAssistantMessageMovie";
|
|
3
|
+
export { default as AutoBeUserMessageMovie } from "./AutoBeUserMessageMovie";
|
|
4
|
+
export { default as ChatBubble } from "./common/ChatBubble";
|
|
5
|
+
export type { IChatBubbleProps, IContentRendererProps, } from "./common/ChatBubble";
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.ChatBubble = exports.AutoBeUserMessageMovie = exports.AutoBeAssistantMessageMovie = void 0;
|
|
21
|
+
__exportStar(require("./events"), exports);
|
|
22
|
+
var AutoBeAssistantMessageMovie_1 = require("./AutoBeAssistantMessageMovie");
|
|
23
|
+
Object.defineProperty(exports, "AutoBeAssistantMessageMovie", { enumerable: true, get: function () { return __importDefault(AutoBeAssistantMessageMovie_1).default; } });
|
|
24
|
+
var AutoBeUserMessageMovie_1 = require("./AutoBeUserMessageMovie");
|
|
25
|
+
Object.defineProperty(exports, "AutoBeUserMessageMovie", { enumerable: true, get: function () { return __importDefault(AutoBeUserMessageMovie_1).default; } });
|
|
26
|
+
var ChatBubble_1 = require("./common/ChatBubble");
|
|
27
|
+
Object.defineProperty(exports, "ChatBubble", { enumerable: true, get: function () { return __importDefault(ChatBubble_1).default; } });
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,6EAAuF;AAA9E,2JAAA,OAAO,OAA+B;AAC/C,mEAA6E;AAApE,iJAAA,OAAO,OAA0B;AAC1C,kDAA4D;AAAnD,yHAAA,OAAO,OAAc"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatTime = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Formats an ISO timestamp string to display time in Korean locale
|
|
6
|
+
*
|
|
7
|
+
* @param isoString - ISO format timestamp string
|
|
8
|
+
* @returns Formatted time string (HH:mm)
|
|
9
|
+
*/
|
|
10
|
+
const formatTime = (isoString) => {
|
|
11
|
+
const date = new Date(isoString);
|
|
12
|
+
return date.toLocaleTimeString("ko-KR", {
|
|
13
|
+
hour: "2-digit",
|
|
14
|
+
minute: "2-digit",
|
|
15
|
+
hour12: false,
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
exports.formatTime = formatTime;
|
|
19
|
+
//# sourceMappingURL=time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACI,MAAM,UAAU,GAAG,CAAC,SAAiB,EAAU,EAAE;IACtD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;QACtC,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;AACL,CAAC,CAAC;AAPW,QAAA,UAAU,cAOrB"}
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@autobe/ui",
|
|
3
|
+
"type": "commonjs",
|
|
4
|
+
"version": "0.19.1",
|
|
5
|
+
"description": "AutoBE UI",
|
|
6
|
+
"author": "Wrtn Technologies",
|
|
7
|
+
"homepage": "https://wrtnlabs.io/autobe",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/wrtnlabs/autobe.git"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/wrtnlabs/autobe/issues"
|
|
14
|
+
},
|
|
15
|
+
"main": "lib/index.js",
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"@types/react": "^19.1.10",
|
|
18
|
+
"@types/react-dom": "^19.1.5",
|
|
19
|
+
"react": "^19.1.1",
|
|
20
|
+
"react-dom": "^19.1.1",
|
|
21
|
+
"typescript": "~5.9.2",
|
|
22
|
+
"@autobe/interface": "0.19.1"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc",
|
|
26
|
+
"dev": "tsc --watch"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import ChatBubble from "./common/ChatBubble";
|
|
2
|
+
|
|
3
|
+
interface IAssistantMessageProps {
|
|
4
|
+
text: string;
|
|
5
|
+
isoTimestamp?: string; // ISO format: "2025-08-13T04:45:20.341Z"
|
|
6
|
+
assistantName?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const AutoBeAssistantMessageMovie = (props: IAssistantMessageProps) => {
|
|
10
|
+
const { text, isoTimestamp, assistantName = "AutoBe" } = props;
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<ChatBubble
|
|
14
|
+
content={[text]}
|
|
15
|
+
direction="left"
|
|
16
|
+
timestamp={isoTimestamp}
|
|
17
|
+
assistantName={assistantName}
|
|
18
|
+
/>
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default AutoBeAssistantMessageMovie;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AutoBeUserMessageContent } from "@autobe/interface";
|
|
2
|
+
|
|
3
|
+
import ChatBubble from "./common/ChatBubble";
|
|
4
|
+
|
|
5
|
+
interface IAutoBeUserMessageHistoryMovieProps {
|
|
6
|
+
message: Array<AutoBeUserMessageContent>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const AutoBeUserMessageMovie = (props: IAutoBeUserMessageHistoryMovieProps) => {
|
|
10
|
+
const { message } = props;
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<div
|
|
14
|
+
style={{
|
|
15
|
+
display: "flex",
|
|
16
|
+
flexDirection: "column",
|
|
17
|
+
gap: 8,
|
|
18
|
+
}}
|
|
19
|
+
>
|
|
20
|
+
<ChatBubble content={message} direction="right" assistantName="You" />
|
|
21
|
+
</div>
|
|
22
|
+
);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export default AutoBeUserMessageMovie;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { AutoBeUserMessageContent } from "@autobe/interface";
|
|
2
|
+
|
|
3
|
+
import { formatTime } from "../utils/time";
|
|
4
|
+
import { OpenAIContent } from "./openai";
|
|
5
|
+
|
|
6
|
+
/** Props interface for ChatBubble component */
|
|
7
|
+
export interface IChatBubbleProps {
|
|
8
|
+
/** Message content - supports text, audio, file, and image types */
|
|
9
|
+
content: Array<AutoBeUserMessageContent | string>;
|
|
10
|
+
|
|
11
|
+
/** Direction of the chat bubble - left or right */
|
|
12
|
+
direction: "left" | "right";
|
|
13
|
+
/** Timestamp (ISO format) */
|
|
14
|
+
timestamp?: string;
|
|
15
|
+
/** Assistant name (default: "Assistant") */
|
|
16
|
+
assistantName?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Props interface for content renderer functions */
|
|
20
|
+
export interface IContentRendererProps {
|
|
21
|
+
/** Whether the bubble is positioned on the right side */
|
|
22
|
+
isRight: boolean;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const ChatBubble = (props: IChatBubbleProps) => {
|
|
26
|
+
const { content, direction, timestamp, assistantName = "Assistant" } = props;
|
|
27
|
+
|
|
28
|
+
const isRight = direction === "right";
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<div
|
|
32
|
+
style={{
|
|
33
|
+
display: "flex",
|
|
34
|
+
marginBottom: "1rem",
|
|
35
|
+
justifyContent: isRight ? "flex-end" : "flex-start",
|
|
36
|
+
}}
|
|
37
|
+
>
|
|
38
|
+
<div
|
|
39
|
+
style={{
|
|
40
|
+
display: "flex",
|
|
41
|
+
flexDirection: "column",
|
|
42
|
+
maxWidth: "48rem",
|
|
43
|
+
alignItems: isRight ? "flex-end" : "flex-start",
|
|
44
|
+
}}
|
|
45
|
+
>
|
|
46
|
+
{/* User name/time */}
|
|
47
|
+
<div
|
|
48
|
+
style={{
|
|
49
|
+
marginBottom: "0.25rem",
|
|
50
|
+
textAlign: isRight ? "right" : "left",
|
|
51
|
+
}}
|
|
52
|
+
>
|
|
53
|
+
<span
|
|
54
|
+
style={{
|
|
55
|
+
fontSize: "0.75rem",
|
|
56
|
+
lineHeight: "1rem",
|
|
57
|
+
color: "#6b7280",
|
|
58
|
+
}}
|
|
59
|
+
>
|
|
60
|
+
{isRight ? "You" : assistantName}
|
|
61
|
+
{timestamp && (
|
|
62
|
+
<>
|
|
63
|
+
<span
|
|
64
|
+
style={{
|
|
65
|
+
marginLeft: "0.25rem",
|
|
66
|
+
marginRight: "0.25rem",
|
|
67
|
+
}}
|
|
68
|
+
>
|
|
69
|
+
•
|
|
70
|
+
</span>
|
|
71
|
+
{formatTime(timestamp)}
|
|
72
|
+
</>
|
|
73
|
+
)}
|
|
74
|
+
</span>
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
{/* Message bubble */}
|
|
78
|
+
<div
|
|
79
|
+
style={{
|
|
80
|
+
position: "relative",
|
|
81
|
+
maxWidth: "32rem",
|
|
82
|
+
paddingLeft: "1rem",
|
|
83
|
+
paddingRight: "1rem",
|
|
84
|
+
paddingTop: "0.75rem",
|
|
85
|
+
paddingBottom: "0.75rem",
|
|
86
|
+
borderRadius: "1rem",
|
|
87
|
+
boxShadow: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
|
|
88
|
+
backgroundColor: isRight ? "#3b82f6" : "#f3f4f6",
|
|
89
|
+
color: isRight ? "#ffffff" : "#1f2937",
|
|
90
|
+
borderTopRightRadius: isRight ? "0.375rem" : "1rem",
|
|
91
|
+
borderTopLeftRadius: isRight ? "1rem" : "0.375rem",
|
|
92
|
+
border: isRight ? "none" : "1px solid #e5e7eb",
|
|
93
|
+
}}
|
|
94
|
+
>
|
|
95
|
+
{/* Bubble tail */}
|
|
96
|
+
<div
|
|
97
|
+
style={{
|
|
98
|
+
position: "absolute",
|
|
99
|
+
width: "0.75rem",
|
|
100
|
+
height: "0.75rem",
|
|
101
|
+
transform: "rotate(45deg)",
|
|
102
|
+
backgroundColor: isRight ? "#3b82f6" : "#f3f4f6",
|
|
103
|
+
right: isRight ? "-0.25rem" : undefined,
|
|
104
|
+
left: isRight ? undefined : "-0.25rem",
|
|
105
|
+
top: "0.75rem",
|
|
106
|
+
borderLeft: isRight ? "none" : "1px solid #e5e7eb",
|
|
107
|
+
borderBottom: isRight ? "none" : "1px solid #e5e7eb",
|
|
108
|
+
}}
|
|
109
|
+
/>
|
|
110
|
+
|
|
111
|
+
{/* Message content */}
|
|
112
|
+
<OpenAIContent content={content} />
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
);
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
export default ChatBubble;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { AutoBeUserMessageContent } from "@autobe/interface";
|
|
2
|
+
|
|
3
|
+
import { OpenAIUserAudioContent } from "./OpenAIUserAudioContent";
|
|
4
|
+
import { OpenAIUserFileContent } from "./OpenAIUserFileContent";
|
|
5
|
+
import { OpenAIUserImageContent } from "./OpenAIUserImageContent";
|
|
6
|
+
import { OpenAIUserTextContent } from "./OpenAIUserTextContent";
|
|
7
|
+
|
|
8
|
+
export interface IOpenAIUserContentProps {
|
|
9
|
+
content: Array<AutoBeUserMessageContent | string>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const OpenAIContent = (props: IOpenAIUserContentProps) => {
|
|
13
|
+
const { content } = props;
|
|
14
|
+
|
|
15
|
+
/** Renders a single content item */
|
|
16
|
+
const renderSingleContent = (
|
|
17
|
+
item: AutoBeUserMessageContent | string,
|
|
18
|
+
index: number,
|
|
19
|
+
) => {
|
|
20
|
+
if (typeof item === "string") {
|
|
21
|
+
return <OpenAIUserTextContent key={index} text={item} />;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
switch (item.type) {
|
|
25
|
+
case "text":
|
|
26
|
+
return <OpenAIUserTextContent key={index} text={item.text} />;
|
|
27
|
+
case "audio":
|
|
28
|
+
return <OpenAIUserAudioContent key={index} content={item} />;
|
|
29
|
+
case "file":
|
|
30
|
+
return <OpenAIUserFileContent key={index} content={item} />;
|
|
31
|
+
case "image":
|
|
32
|
+
return <OpenAIUserImageContent key={index} content={item} />;
|
|
33
|
+
default:
|
|
34
|
+
return (
|
|
35
|
+
<OpenAIUserTextContent key={index} text="Unsupported content type" />
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<div
|
|
42
|
+
style={{
|
|
43
|
+
display: "flex",
|
|
44
|
+
flexDirection: "column",
|
|
45
|
+
gap: "0.75rem",
|
|
46
|
+
}}
|
|
47
|
+
>
|
|
48
|
+
{content.map((item, index) => renderSingleContent(item, index))}
|
|
49
|
+
</div>
|
|
50
|
+
);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export default OpenAIContent;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { AutoBeUserMessageAudioContent } from "@autobe/interface";
|
|
2
|
+
|
|
3
|
+
/** Audio content renderer component for OpenAI messages */
|
|
4
|
+
export const OpenAIUserAudioContent = ({
|
|
5
|
+
content,
|
|
6
|
+
}: {
|
|
7
|
+
content: AutoBeUserMessageAudioContent;
|
|
8
|
+
}) => {
|
|
9
|
+
const isRight = true; // UserContent는 항상 오른쪽
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<div
|
|
13
|
+
style={{
|
|
14
|
+
display: "flex",
|
|
15
|
+
flexDirection: "column",
|
|
16
|
+
alignItems: "center",
|
|
17
|
+
justifyContent: "center",
|
|
18
|
+
padding: "1rem",
|
|
19
|
+
minWidth: "6rem",
|
|
20
|
+
minHeight: "6rem",
|
|
21
|
+
}}
|
|
22
|
+
>
|
|
23
|
+
{/* Audio Icon */}
|
|
24
|
+
<div
|
|
25
|
+
style={{
|
|
26
|
+
width: "2.5rem",
|
|
27
|
+
height: "2.5rem",
|
|
28
|
+
borderRadius: "50%",
|
|
29
|
+
backgroundColor: isRight ? "rgba(255,255,255,0.2)" : "#3b82f6",
|
|
30
|
+
display: "flex",
|
|
31
|
+
alignItems: "center",
|
|
32
|
+
justifyContent: "center",
|
|
33
|
+
marginBottom: "0.5rem",
|
|
34
|
+
}}
|
|
35
|
+
>
|
|
36
|
+
<svg
|
|
37
|
+
width="20"
|
|
38
|
+
height="20"
|
|
39
|
+
viewBox="0 0 24 24"
|
|
40
|
+
fill="currentColor"
|
|
41
|
+
style={{ color: isRight ? "#ffffff" : "#ffffff" }}
|
|
42
|
+
>
|
|
43
|
+
<path d="M12 3v10.55c-.59-.34-1.27-.55-2-.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6z" />
|
|
44
|
+
</svg>
|
|
45
|
+
</div>
|
|
46
|
+
<div
|
|
47
|
+
style={{
|
|
48
|
+
fontSize: "0.7rem",
|
|
49
|
+
fontWeight: "bold",
|
|
50
|
+
color: isRight ? "rgba(255,255,255,0.9)" : "#6b7280",
|
|
51
|
+
textAlign: "center",
|
|
52
|
+
}}
|
|
53
|
+
>
|
|
54
|
+
AUDIO
|
|
55
|
+
</div>
|
|
56
|
+
<div
|
|
57
|
+
style={{
|
|
58
|
+
fontSize: "0.65rem",
|
|
59
|
+
color: isRight ? "rgba(255,255,255,0.7)" : "#9ca3af",
|
|
60
|
+
textAlign: "center",
|
|
61
|
+
marginTop: "0.25rem",
|
|
62
|
+
}}
|
|
63
|
+
>
|
|
64
|
+
{content.format.toUpperCase()}
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export default OpenAIUserAudioContent;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { AutoBeUserMessageFileContent } from "@autobe/interface";
|
|
2
|
+
|
|
3
|
+
/** File content renderer component for OpenAI messages */
|
|
4
|
+
export const OpenAIUserFileContent = ({
|
|
5
|
+
content,
|
|
6
|
+
}: {
|
|
7
|
+
content: AutoBeUserMessageFileContent;
|
|
8
|
+
}) => {
|
|
9
|
+
const isRight = true; // UserContent는 항상 오른쪽
|
|
10
|
+
const fileName =
|
|
11
|
+
content.file.type === "base64"
|
|
12
|
+
? content.file.name
|
|
13
|
+
: `File ID: ${content.file.id}`;
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<div
|
|
17
|
+
style={{
|
|
18
|
+
display: "flex",
|
|
19
|
+
flexDirection: "column",
|
|
20
|
+
alignItems: "center",
|
|
21
|
+
justifyContent: "center",
|
|
22
|
+
padding: "1rem",
|
|
23
|
+
minWidth: "8rem",
|
|
24
|
+
minHeight: "6rem",
|
|
25
|
+
}}
|
|
26
|
+
>
|
|
27
|
+
{/* File Icon */}
|
|
28
|
+
<div
|
|
29
|
+
style={{
|
|
30
|
+
width: "2.5rem",
|
|
31
|
+
height: "2.5rem",
|
|
32
|
+
borderRadius: "0.5rem",
|
|
33
|
+
backgroundColor: isRight ? "rgba(255,255,255,0.2)" : "#10b981",
|
|
34
|
+
display: "flex",
|
|
35
|
+
alignItems: "center",
|
|
36
|
+
justifyContent: "center",
|
|
37
|
+
marginBottom: "0.5rem",
|
|
38
|
+
}}
|
|
39
|
+
>
|
|
40
|
+
<svg
|
|
41
|
+
width="20"
|
|
42
|
+
height="20"
|
|
43
|
+
viewBox="0 0 24 24"
|
|
44
|
+
fill="currentColor"
|
|
45
|
+
style={{ color: "#ffffff" }}
|
|
46
|
+
>
|
|
47
|
+
<path d="M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z" />
|
|
48
|
+
</svg>
|
|
49
|
+
</div>
|
|
50
|
+
<div
|
|
51
|
+
style={{
|
|
52
|
+
fontSize: "0.7rem",
|
|
53
|
+
fontWeight: "bold",
|
|
54
|
+
color: isRight ? "rgba(255,255,255,0.9)" : "#6b7280",
|
|
55
|
+
textAlign: "center",
|
|
56
|
+
marginBottom: "0.25rem",
|
|
57
|
+
}}
|
|
58
|
+
>
|
|
59
|
+
{fileName.split(".").at(-1)?.toUpperCase()} FILE
|
|
60
|
+
</div>
|
|
61
|
+
<div
|
|
62
|
+
style={{
|
|
63
|
+
fontSize: "0.65rem",
|
|
64
|
+
color: isRight ? "rgba(255,255,255,0.7)" : "#9ca3af",
|
|
65
|
+
textAlign: "center",
|
|
66
|
+
wordBreak: "break-all",
|
|
67
|
+
maxWidth: "8rem",
|
|
68
|
+
}}
|
|
69
|
+
>
|
|
70
|
+
{fileName}
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
);
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export default OpenAIUserFileContent;
|