@autobe/ui 0.22.1 → 0.23.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/lib/components/AutoBeChatMain.d.ts +6 -4
- package/lib/components/AutoBeChatMain.js +204 -56
- package/lib/components/AutoBeChatMain.js.map +1 -1
- package/lib/components/AutoBeChatSidebar.d.ts +36 -0
- package/lib/components/AutoBeChatSidebar.js +227 -0
- package/lib/components/AutoBeChatSidebar.js.map +1 -0
- package/lib/components/AutoBeConfigButton.d.ts +15 -0
- package/lib/components/AutoBeConfigButton.js +33 -0
- package/lib/components/AutoBeConfigButton.js.map +1 -0
- package/lib/components/AutoBeConfigModal.d.ts +59 -0
- package/lib/components/AutoBeConfigModal.js +294 -0
- package/lib/components/AutoBeConfigModal.js.map +1 -0
- package/lib/components/AutoBeStatusButton.d.ts +12 -0
- package/lib/components/AutoBeStatusButton.js +29 -0
- package/lib/components/AutoBeStatusButton.js.map +1 -0
- package/lib/components/AutoBeStatusModal.js +35 -15
- package/lib/components/AutoBeStatusModal.js.map +1 -1
- package/lib/components/common/ActionButton.d.ts +16 -0
- package/lib/components/common/ActionButton.js +115 -0
- package/lib/components/common/ActionButton.js.map +1 -0
- package/lib/components/common/ActionButtonGroup.d.ts +13 -0
- package/lib/components/common/ActionButtonGroup.js +37 -0
- package/lib/components/common/ActionButtonGroup.js.map +1 -0
- package/lib/components/common/AutoBeConfigInput.d.ts +24 -0
- package/lib/components/common/AutoBeConfigInput.js +90 -0
- package/lib/components/common/AutoBeConfigInput.js.map +1 -0
- package/lib/components/common/CompactSessionIndicator.d.ts +16 -0
- package/lib/components/common/CompactSessionIndicator.js +46 -0
- package/lib/components/common/CompactSessionIndicator.js.map +1 -0
- package/lib/components/common/CompactSessionList.d.ts +22 -0
- package/lib/components/common/CompactSessionList.js +40 -0
- package/lib/components/common/CompactSessionList.js.map +1 -0
- package/lib/components/common/index.d.ts +6 -0
- package/lib/components/common/index.js +6 -0
- package/lib/components/common/index.js.map +1 -1
- package/lib/components/events/AutoBeEventGroupMovie.d.ts +6 -0
- package/lib/components/events/AutoBeEventGroupMovie.js +11 -0
- package/lib/components/events/AutoBeEventGroupMovie.js.map +1 -0
- package/lib/components/events/AutoBeEventMovie.js +5 -0
- package/lib/components/events/AutoBeEventMovie.js.map +1 -1
- package/lib/components/events/AutoBeValidateEventMovie.js +1 -3
- package/lib/components/events/AutoBeValidateEventMovie.js.map +1 -1
- package/lib/components/events/common/CollapsibleEventGroup.d.ts +1 -1
- package/lib/components/events/groups/ValidateEventGroup.d.ts +1 -1
- package/lib/components/events/utils/eventGrouper.js.map +1 -1
- package/lib/components/index.d.ts +6 -0
- package/lib/components/index.js +7 -0
- package/lib/components/index.js.map +1 -1
- package/lib/components/upload/AutoBeChatUploadBox.js +75 -33
- package/lib/components/upload/AutoBeChatUploadBox.js.map +1 -1
- package/lib/context/AutoBeAgentContext.d.ts +22 -11
- package/lib/context/AutoBeAgentContext.js +127 -11
- package/lib/context/AutoBeAgentContext.js.map +1 -1
- package/lib/context/AutoBeAgentSessionList.d.ts +12 -0
- package/lib/context/AutoBeAgentSessionList.js +37 -0
- package/lib/context/AutoBeAgentSessionList.js.map +1 -0
- package/lib/context/SearchParamsContext.d.ts +10 -0
- package/lib/context/SearchParamsContext.js +29 -0
- package/lib/context/SearchParamsContext.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -1
- package/lib/structure/AutoBeListener.d.ts +6 -0
- package/lib/structure/AutoBeListener.js +21 -4
- package/lib/structure/AutoBeListener.js.map +1 -1
- package/lib/structure/IAutoBeAgentSessionStorageStrategy.d.ts +35 -0
- package/lib/structure/IAutoBeAgentSessionStorageStrategy.js +30 -0
- package/lib/structure/IAutoBeAgentSessionStorageStrategy.js.map +1 -0
- package/lib/structure/index.d.ts +1 -0
- package/lib/structure/index.js +1 -0
- package/lib/structure/index.js.map +1 -1
- package/lib/types/config.d.ts +26 -0
- package/lib/types/config.js +14 -0
- package/lib/types/config.js.map +1 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.js +18 -0
- package/lib/types/index.js.map +1 -0
- package/lib/utils/__tests__/crypto.test.d.ts +1 -0
- package/lib/utils/__tests__/crypto.test.js +222 -0
- package/lib/utils/__tests__/crypto.test.js.map +1 -0
- package/lib/utils/__tests__/storage.test.d.ts +1 -0
- package/lib/utils/__tests__/storage.test.js +174 -0
- package/lib/utils/__tests__/storage.test.js.map +1 -0
- package/lib/utils/crypto.d.ts +18 -0
- package/lib/utils/crypto.js +84 -0
- package/lib/utils/crypto.js.map +1 -0
- package/lib/utils/index.d.ts +2 -0
- package/lib/utils/index.js +2 -0
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/storage.d.ts +29 -0
- package/lib/utils/storage.js +93 -0
- package/lib/utils/storage.js.map +1 -0
- package/package.json +11 -3
- package/src/components/AutoBeChatMain.tsx +329 -131
- package/src/components/AutoBeChatSidebar.tsx +414 -0
- package/src/components/AutoBeConfigButton.tsx +83 -0
- package/src/components/AutoBeConfigModal.tsx +444 -0
- package/src/components/AutoBeStatusButton.tsx +75 -0
- package/src/components/AutoBeStatusModal.tsx +55 -54
- package/src/components/common/ActionButton.tsx +205 -0
- package/src/components/common/ActionButtonGroup.tsx +80 -0
- package/src/components/common/AutoBeConfigInput.tsx +185 -0
- package/src/components/common/CompactSessionIndicator.tsx +73 -0
- package/src/components/common/CompactSessionList.tsx +82 -0
- package/src/components/common/index.ts +6 -0
- package/src/components/events/AutoBeEventGroupMovie.tsx +18 -0
- package/src/components/events/AutoBeEventMovie.tsx +5 -0
- package/src/components/events/AutoBeValidateEventMovie.tsx +7 -9
- package/src/components/events/common/CollapsibleEventGroup.tsx +1 -1
- package/src/components/events/groups/ValidateEventGroup.tsx +1 -1
- package/src/components/events/utils/eventGrouper.tsx +2 -1
- package/src/components/index.ts +6 -0
- package/src/components/upload/AutoBeChatUploadBox.tsx +94 -44
- package/src/context/AutoBeAgentContext.tsx +201 -22
- package/src/context/AutoBeAgentSessionList.tsx +58 -0
- package/src/context/SearchParamsContext.tsx +49 -0
- package/src/index.ts +4 -0
- package/src/structure/AutoBeListener.ts +32 -6
- package/src/structure/IAutoBeAgentSessionStorageStrategy.ts +87 -0
- package/src/structure/index.ts +1 -0
- package/src/types/config.ts +44 -0
- package/src/types/index.ts +1 -0
- package/src/utils/__tests__/crypto.test.ts +286 -0
- package/src/utils/__tests__/storage.test.ts +229 -0
- package/src/utils/crypto.ts +95 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/storage.ts +96 -0
- package/vitest.config.ts +15 -0
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { IAutoBeUploadConfig } from "..";
|
|
1
|
+
import { IConfigField } from "./AutoBeConfigModal";
|
|
3
2
|
export interface IAutoBeChatMainProps {
|
|
3
|
+
isUnusedConfig?: boolean;
|
|
4
|
+
isReplay?: boolean;
|
|
4
5
|
isMobile: boolean;
|
|
5
|
-
conversate: (messages: AutoBeUserMessageContent[]) => Promise<void>;
|
|
6
6
|
setError: (error: Error) => void;
|
|
7
|
-
uploadConfig?: IAutoBeUploadConfig;
|
|
8
7
|
className?: string;
|
|
9
8
|
style?: React.CSSProperties;
|
|
9
|
+
configFields?: IConfigField[];
|
|
10
|
+
/** Additional required config fields beyond openApiKey */
|
|
11
|
+
requiredFields?: string[];
|
|
10
12
|
}
|
|
11
13
|
export declare const AutoBeChatMain: (props: IAutoBeChatMainProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
14
|
export default AutoBeChatMain;
|
|
@@ -1,87 +1,235 @@
|
|
|
1
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
|
+
};
|
|
2
11
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
13
|
};
|
|
5
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
15
|
exports.AutoBeChatMain = void 0;
|
|
7
16
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
17
|
+
const overlay_kit_1 = require("overlay-kit");
|
|
8
18
|
const react_1 = require("react");
|
|
9
19
|
const __1 = require("..");
|
|
10
20
|
const AutoBeAgentContext_1 = require("../context/AutoBeAgentContext");
|
|
11
21
|
const hooks_1 = require("../hooks");
|
|
12
|
-
const
|
|
22
|
+
const config_1 = require("../types/config");
|
|
23
|
+
const storage_1 = require("../utils/storage");
|
|
24
|
+
const AutoBeConfigButton_1 = __importDefault(require("./AutoBeConfigButton"));
|
|
25
|
+
const AutoBeConfigModal_1 = __importDefault(require("./AutoBeConfigModal"));
|
|
26
|
+
const AutoBeStatusButton_1 = __importDefault(require("./AutoBeStatusButton"));
|
|
27
|
+
const AutoBeEventGroupMovie_1 = __importDefault(require("./events/AutoBeEventGroupMovie"));
|
|
13
28
|
const AutoBeChatMain = (props) => {
|
|
14
29
|
var _a;
|
|
15
30
|
const bodyContainerRef = (0, react_1.useRef)(null);
|
|
16
31
|
const scrollAnchorRef = (0, react_1.useRef)(null);
|
|
17
|
-
const { eventGroups } = (0, AutoBeAgentContext_1.useAutoBeAgent)();
|
|
18
|
-
const
|
|
32
|
+
const { eventGroups, getAutoBeService, connectionStatus } = (0, AutoBeAgentContext_1.useAutoBeAgent)();
|
|
33
|
+
const { refreshSessionList } = (0, __1.useAutoBeAgentSessionList)();
|
|
19
34
|
const listener = (0, react_1.useRef)({
|
|
20
35
|
handleDragEnter: () => { },
|
|
21
36
|
handleDragLeave: () => { },
|
|
22
37
|
handleDrop: () => { },
|
|
23
38
|
handleDragOver: () => { },
|
|
24
39
|
});
|
|
40
|
+
// Simplified config reader
|
|
41
|
+
const getCurrentConfig = () => {
|
|
42
|
+
var _a;
|
|
43
|
+
const config = {};
|
|
44
|
+
(_a = props.configFields) === null || _a === void 0 ? void 0 : _a.forEach((field) => {
|
|
45
|
+
const value = field.encrypted
|
|
46
|
+
? (0, storage_1.getEncryptedSessionStorage)(field.storageKey)
|
|
47
|
+
: localStorage.getItem(field.storageKey) || "";
|
|
48
|
+
if (field.type === "checkbox") {
|
|
49
|
+
config[field.key] = String(value) === "true";
|
|
50
|
+
}
|
|
51
|
+
else if (field.type === "number") {
|
|
52
|
+
config[field.key] = parseInt(String(value)) || 0;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
config[field.key] = String(value);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return Object.assign(Object.assign({}, config_1.DEFAULT_CONFIG), config);
|
|
59
|
+
};
|
|
60
|
+
// Check if required config is available
|
|
61
|
+
const hasRequiredConfig = () => {
|
|
62
|
+
const config = getCurrentConfig();
|
|
63
|
+
// Check additional required fields from props
|
|
64
|
+
if (props.requiredFields) {
|
|
65
|
+
for (const field of props.requiredFields) {
|
|
66
|
+
if (!config[field]) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return true;
|
|
72
|
+
};
|
|
73
|
+
// Unified service connection handler
|
|
74
|
+
const conversate = (messages) => __awaiter(void 0, void 0, void 0, function* () {
|
|
75
|
+
// Check if we have required config
|
|
76
|
+
if (props.isUnusedConfig === false && !hasRequiredConfig()) {
|
|
77
|
+
overlay_kit_1.overlay.open(({ isOpen, close }) => ((0, jsx_runtime_1.jsx)(AutoBeConfigModal_1.default, { isOpen: isOpen, onClose: close, title: "Server Connection Required", fields: props.configFields || [], onSave: () => {
|
|
78
|
+
conversate(messages);
|
|
79
|
+
} })));
|
|
80
|
+
}
|
|
81
|
+
// Connect to service
|
|
82
|
+
try {
|
|
83
|
+
const config = getCurrentConfig();
|
|
84
|
+
const serviceData = yield getAutoBeService(config);
|
|
85
|
+
if (messages.length !== 0) {
|
|
86
|
+
yield new Promise((resolve) => {
|
|
87
|
+
if (serviceData.listener.getEnable() === true) {
|
|
88
|
+
resolve(void 0);
|
|
89
|
+
}
|
|
90
|
+
serviceData.listener.onEnable((value) => __awaiter(void 0, void 0, void 0, function* () {
|
|
91
|
+
if (value === true) {
|
|
92
|
+
resolve(void 0);
|
|
93
|
+
}
|
|
94
|
+
}));
|
|
95
|
+
});
|
|
96
|
+
yield serviceData.service.conversate(messages);
|
|
97
|
+
}
|
|
98
|
+
if (eventGroups.length === 0) {
|
|
99
|
+
refreshSessionList();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
console.error("Failed to connect:", error);
|
|
104
|
+
props.setError(error);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
// Auto-scroll when new events arrive
|
|
25
108
|
(0, react_1.useEffect)(() => {
|
|
26
109
|
var _a;
|
|
27
|
-
if (eventGroups.length
|
|
110
|
+
if (eventGroups.length > 0) {
|
|
111
|
+
(_a = scrollAnchorRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ behavior: "smooth" });
|
|
112
|
+
}
|
|
113
|
+
}, [eventGroups.length]);
|
|
114
|
+
// Auto-connect if there are existing conversations and config is ready
|
|
115
|
+
(0, react_1.useEffect)(() => {
|
|
116
|
+
if (props.isReplay === true) {
|
|
117
|
+
conversate([]);
|
|
28
118
|
return;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}, children: (0, jsx_runtime_1.jsx)("button", { onClick: () => setIsTokenModalOpen(!isTokenModalOpen), style: {
|
|
42
|
-
background: "#f8f9fa",
|
|
43
|
-
color: "#495057",
|
|
44
|
-
border: "1px solid #dee2e6",
|
|
45
|
-
borderRadius: "50%",
|
|
46
|
-
padding: "0.5rem",
|
|
47
|
-
width: "2rem",
|
|
48
|
-
height: "2rem",
|
|
49
|
-
cursor: "pointer",
|
|
50
|
-
fontSize: "0.85rem",
|
|
51
|
-
fontWeight: "400",
|
|
52
|
-
boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)",
|
|
53
|
-
transition: "all 0.2s ease",
|
|
119
|
+
}
|
|
120
|
+
if (eventGroups.length > 0 &&
|
|
121
|
+
hasRequiredConfig() &&
|
|
122
|
+
connectionStatus === "disconnected") {
|
|
123
|
+
conversate([]);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
}, [connectionStatus, eventGroups.length]);
|
|
127
|
+
return ((0, jsx_runtime_1.jsx)(overlay_kit_1.OverlayProvider, { children: (0, jsx_runtime_1.jsxs)("div", { onDragEnter: (e) => listener.current.handleDragEnter(e), onDragLeave: (e) => listener.current.handleDragLeave(e), onDragOver: (e) => listener.current.handleDragOver(e), onDrop: (e) => listener.current.handleDrop(e), style: Object.assign({ position: "relative", overflowY: "auto", margin: 0, flexGrow: 1, display: "flex", flexDirection: "column" }, props.style), className: props.className, ref: bodyContainerRef, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
|
|
128
|
+
position: "sticky",
|
|
129
|
+
top: "1rem",
|
|
130
|
+
zIndex: 1001,
|
|
54
131
|
display: "flex",
|
|
132
|
+
justifyContent: "flex-end",
|
|
55
133
|
alignItems: "center",
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
134
|
+
gap: "0.5rem",
|
|
135
|
+
marginBottom: "-3rem",
|
|
136
|
+
paddingRight: "1.5rem",
|
|
137
|
+
}, children: [connectionStatus === "disconnected" && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
138
|
+
background: "#f8d7da",
|
|
139
|
+
color: "#721c24",
|
|
140
|
+
border: "1px solid #f5c6cb",
|
|
141
|
+
borderRadius: "50px",
|
|
142
|
+
padding: "0.4rem 0.8rem",
|
|
143
|
+
fontSize: "0.8rem",
|
|
144
|
+
fontWeight: "500",
|
|
145
|
+
display: "flex",
|
|
146
|
+
alignItems: "center",
|
|
147
|
+
gap: "0.4rem",
|
|
148
|
+
boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)",
|
|
149
|
+
}, children: [(0, jsx_runtime_1.jsx)("div", { style: {
|
|
150
|
+
width: "6px",
|
|
151
|
+
height: "6px",
|
|
152
|
+
backgroundColor: "#dc3545",
|
|
153
|
+
borderRadius: "50%",
|
|
154
|
+
animation: "pulse 2s infinite",
|
|
155
|
+
} }), "Disconnected"] })), connectionStatus === "connecting" && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
156
|
+
background: "#fff3cd",
|
|
157
|
+
color: "#856404",
|
|
158
|
+
border: "1px solid #ffeaa7",
|
|
159
|
+
borderRadius: "50px",
|
|
160
|
+
padding: "0.4rem 0.8rem",
|
|
161
|
+
fontSize: "0.8rem",
|
|
162
|
+
fontWeight: "500",
|
|
163
|
+
display: "flex",
|
|
164
|
+
alignItems: "center",
|
|
165
|
+
gap: "0.4rem",
|
|
166
|
+
boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)",
|
|
167
|
+
}, children: [(0, jsx_runtime_1.jsx)("div", { style: {
|
|
168
|
+
width: "6px",
|
|
169
|
+
height: "6px",
|
|
170
|
+
backgroundColor: "#f39c12",
|
|
171
|
+
borderRadius: "50%",
|
|
172
|
+
animation: "pulse 1.5s infinite",
|
|
173
|
+
} }), "Connecting..."] })), connectionStatus === "connected" && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
174
|
+
background: "#d4edda",
|
|
175
|
+
color: "#155724",
|
|
176
|
+
border: "1px solid #c3e6cb",
|
|
177
|
+
borderRadius: "50px",
|
|
178
|
+
padding: "0.4rem 0.8rem",
|
|
179
|
+
fontSize: "0.8rem",
|
|
180
|
+
fontWeight: "500",
|
|
181
|
+
display: "flex",
|
|
182
|
+
alignItems: "center",
|
|
183
|
+
gap: "0.4rem",
|
|
184
|
+
boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)",
|
|
185
|
+
}, children: [(0, jsx_runtime_1.jsx)("div", { style: {
|
|
186
|
+
width: "6px",
|
|
187
|
+
height: "6px",
|
|
188
|
+
backgroundColor: "#28a745",
|
|
189
|
+
borderRadius: "50%",
|
|
190
|
+
animation: "pulse 1.5s infinite",
|
|
191
|
+
} }), "Connected"] })), (0, jsx_runtime_1.jsx)("style", { children: `
|
|
192
|
+
@keyframes pulse {
|
|
193
|
+
0%, 100% { opacity: 1; }
|
|
194
|
+
50% { opacity: 0.5; }
|
|
195
|
+
}
|
|
196
|
+
` }), props.isUnusedConfig === false &&
|
|
197
|
+
((_a = props.configFields) === null || _a === void 0 ? void 0 : _a.length) != null &&
|
|
198
|
+
props.configFields.length > 0 && ((0, jsx_runtime_1.jsx)(AutoBeConfigButton_1.default, { fields: props.configFields || [] })), (0, jsx_runtime_1.jsx)(AutoBeStatusButton_1.default, {})] }), (0, jsx_runtime_1.jsx)("div", { style: {
|
|
76
199
|
display: "flex",
|
|
77
200
|
flexDirection: "column",
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
201
|
+
maxWidth: hooks_1.useMediaQuery.WIDTH_MD,
|
|
202
|
+
width: "100%",
|
|
203
|
+
margin: "0 auto",
|
|
204
|
+
}, children: (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
205
|
+
padding: "2rem",
|
|
206
|
+
gap: 16,
|
|
207
|
+
display: "flex",
|
|
208
|
+
flexDirection: "column",
|
|
209
|
+
}, children: [connectionStatus === "disconnected" && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
210
|
+
display: "flex",
|
|
211
|
+
flexDirection: "column",
|
|
212
|
+
justifyContent: "center",
|
|
213
|
+
alignItems: "center",
|
|
214
|
+
padding: "3rem",
|
|
215
|
+
color: "#666",
|
|
216
|
+
textAlign: "center",
|
|
217
|
+
gap: "1rem",
|
|
218
|
+
}, children: [(0, jsx_runtime_1.jsx)("div", { style: { fontSize: "3rem" }, children: "\u2699\uFE0F" }), (0, jsx_runtime_1.jsx)("div", { style: { fontSize: "1.25rem", fontWeight: "600" }, children: "Configuration Required" }), (0, jsx_runtime_1.jsx)("div", { style: {
|
|
219
|
+
fontSize: "1rem",
|
|
220
|
+
maxWidth: "400px",
|
|
221
|
+
lineHeight: "1.5",
|
|
222
|
+
}, children: "Please click the settings button \u2699\uFE0F to configure your server connection and API credentials, or start typing to begin setup." })] })), connectionStatus === "connected" && ((0, jsx_runtime_1.jsx)(AutoBeEventGroupMovie_1.default, { eventGroups: eventGroups }))] }) }), (0, jsx_runtime_1.jsx)("div", { style: { flexGrow: 1, minHeight: "1rem" }, ref: scrollAnchorRef }), (0, jsx_runtime_1.jsx)("div", { style: {
|
|
223
|
+
position: "sticky",
|
|
224
|
+
bottom: 16,
|
|
225
|
+
left: 0,
|
|
226
|
+
right: 0,
|
|
227
|
+
zIndex: 1000,
|
|
228
|
+
}, children: (0, jsx_runtime_1.jsx)(__1.AutoBeChatUploadBox, { listener: listener, uploadConfig: getCurrentConfig().supportAudioEnable
|
|
229
|
+
? {
|
|
230
|
+
supportAudio: true,
|
|
231
|
+
}
|
|
232
|
+
: undefined, conversate: conversate, setError: props.setError }) })] }) }));
|
|
85
233
|
};
|
|
86
234
|
exports.AutoBeChatMain = AutoBeChatMain;
|
|
87
235
|
exports.default = exports.AutoBeChatMain;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoBeChatMain.js","sourceRoot":"","sources":["../../src/components/AutoBeChatMain.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AutoBeChatMain.js","sourceRoot":"","sources":["../../src/components/AutoBeChatMain.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,6CAAuD;AACvD,iCAAqD;AAErD,0BAAoE;AACpE,sEAA+D;AAC/D,oCAAyC;AACzC,4CAIyB;AACzB,8CAA8D;AAC9D,8EAAsD;AACtD,4EAAsE;AACtE,8EAAsD;AACtD,2FAAmE;AAe5D,MAAM,cAAc,GAAG,CAAC,KAA2B,EAAE,EAAE;;IAC5D,MAAM,gBAAgB,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IACrD,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,IAAA,mCAAc,GAAE,CAAC;IAC7E,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAA,6BAAyB,GAAE,CAAC;IAC3D,MAAM,QAAQ,GAA6C,IAAA,cAAM,EAAC;QAChE,eAAe,EAAE,GAAG,EAAE,GAAE,CAAC;QACzB,eAAe,EAAE,GAAG,EAAE,GAAE,CAAC;QACzB,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;QACpB,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;KACzB,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,gBAAgB,GAAG,GAAkB,EAAE;;QAC3C,MAAM,MAAM,GAAyB,EAAE,CAAC;QAExC,MAAA,KAAK,CAAC,YAAY,0CAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS;gBAC3B,CAAC,CAAC,IAAA,oCAA0B,EAAC,KAAK,CAAC,UAAU,CAAC;gBAC9C,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAEjD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC;YAC/C,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACnC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,uCAAY,uBAAc,GAAK,MAAM,EAAG;IAC1C,CAAC,CAAC;IAEF,wCAAwC;IACxC,MAAM,iBAAiB,GAAG,GAAY,EAAE;QACtC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAElC,8CAA8C;QAC9C,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnB,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,qCAAqC;IACrC,MAAM,UAAU,GAAG,CACjB,QAAoC,EACrB,EAAE;QACjB,mCAAmC;QACnC,IAAI,KAAK,CAAC,cAAc,KAAK,KAAK,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAC3D,qBAAO,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAClC,uBAAC,2BAAiB,IAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,KAAK,EACd,KAAK,EAAC,4BAA4B,EAClC,MAAM,EAAE,KAAK,CAAC,YAAY,IAAI,EAAE,EAChC,MAAM,EAAE,GAAG,EAAE;oBACX,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC,GACD,CACH,CAAC,CAAC;QACL,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBAC5B,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC;wBAC9C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;oBAClB,CAAC;oBACD,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAO,KAAK,EAAE,EAAE;wBAC5C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;4BACnB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;wBAClB,CAAC;oBACH,CAAC,CAAA,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,MAAM,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,kBAAkB,EAAE,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YAC3C,KAAK,CAAC,QAAQ,CAAC,KAAc,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAA,CAAC;IAEF,qCAAqC;IACrC,IAAA,iBAAS,EAAC,GAAG,EAAE;;QACb,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAA,eAAe,CAAC,OAAO,0CAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAEzB,uEAAuE;IACvE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC5B,UAAU,CAAC,EAAE,CAAC,CAAC;YACf,OAAO;QACT,CAAC;QAED,IACE,WAAW,CAAC,MAAM,GAAG,CAAC;YACtB,iBAAiB,EAAE;YACnB,gBAAgB,KAAK,cAAc,EACnC,CAAC;YACD,UAAU,CAAC,EAAE,CAAC,CAAC;YACf,OAAO;QACT,CAAC;IACH,CAAC,EAAE,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAE3C,OAAO,CACL,uBAAC,6BAAe,cACd,iCACE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EACvD,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EACvD,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EACrD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAC7C,KAAK,kBACH,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,CAAC,EACT,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,QAAQ,IACpB,KAAK,CAAC,KAAK,GAEhB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,GAAG,EAAE,gBAAgB,aAGrB,iCACE,KAAK,EAAE;wBACL,QAAQ,EAAE,QAAQ;wBAClB,GAAG,EAAE,MAAM;wBACX,MAAM,EAAE,IAAI;wBACZ,OAAO,EAAE,MAAM;wBACf,cAAc,EAAE,UAAU;wBAC1B,UAAU,EAAE,QAAQ;wBACpB,GAAG,EAAE,QAAQ;wBACb,YAAY,EAAE,OAAO;wBACrB,YAAY,EAAE,QAAQ;qBACvB,aAGA,gBAAgB,KAAK,cAAc,IAAI,CACtC,iCACE,KAAK,EAAE;gCACL,UAAU,EAAE,SAAS;gCACrB,KAAK,EAAE,SAAS;gCAChB,MAAM,EAAE,mBAAmB;gCAC3B,YAAY,EAAE,MAAM;gCACpB,OAAO,EAAE,eAAe;gCACxB,QAAQ,EAAE,QAAQ;gCAClB,UAAU,EAAE,KAAK;gCACjB,OAAO,EAAE,MAAM;gCACf,UAAU,EAAE,QAAQ;gCACpB,GAAG,EAAE,QAAQ;gCACb,SAAS,EAAE,8BAA8B;6BAC1C,aAED,gCACE,KAAK,EAAE;wCACL,KAAK,EAAE,KAAK;wCACZ,MAAM,EAAE,KAAK;wCACb,eAAe,EAAE,SAAS;wCAC1B,YAAY,EAAE,KAAK;wCACnB,SAAS,EAAE,mBAAmB;qCAC/B,GACI,oBAEH,CACP,EAEA,gBAAgB,KAAK,YAAY,IAAI,CACpC,iCACE,KAAK,EAAE;gCACL,UAAU,EAAE,SAAS;gCACrB,KAAK,EAAE,SAAS;gCAChB,MAAM,EAAE,mBAAmB;gCAC3B,YAAY,EAAE,MAAM;gCACpB,OAAO,EAAE,eAAe;gCACxB,QAAQ,EAAE,QAAQ;gCAClB,UAAU,EAAE,KAAK;gCACjB,OAAO,EAAE,MAAM;gCACf,UAAU,EAAE,QAAQ;gCACpB,GAAG,EAAE,QAAQ;gCACb,SAAS,EAAE,8BAA8B;6BAC1C,aAED,gCACE,KAAK,EAAE;wCACL,KAAK,EAAE,KAAK;wCACZ,MAAM,EAAE,KAAK;wCACb,eAAe,EAAE,SAAS;wCAC1B,YAAY,EAAE,KAAK;wCACnB,SAAS,EAAE,qBAAqB;qCACjC,GACI,qBAEH,CACP,EAEA,gBAAgB,KAAK,WAAW,IAAI,CACnC,iCACE,KAAK,EAAE;gCACL,UAAU,EAAE,SAAS;gCACrB,KAAK,EAAE,SAAS;gCAChB,MAAM,EAAE,mBAAmB;gCAC3B,YAAY,EAAE,MAAM;gCACpB,OAAO,EAAE,eAAe;gCACxB,QAAQ,EAAE,QAAQ;gCAClB,UAAU,EAAE,KAAK;gCACjB,OAAO,EAAE,MAAM;gCACf,UAAU,EAAE,QAAQ;gCACpB,GAAG,EAAE,QAAQ;gCACb,SAAS,EAAE,8BAA8B;6BAC1C,aAED,gCACE,KAAK,EAAE;wCACL,KAAK,EAAE,KAAK;wCACZ,MAAM,EAAE,KAAK;wCACb,eAAe,EAAE,SAAS;wCAC1B,YAAY,EAAE,KAAK;wCACnB,SAAS,EAAE,qBAAqB;qCACjC,GACI,iBAEH,CACP,EAED,4CACG;;;;;aAKA,GACK,EAEP,KAAK,CAAC,cAAc,KAAK,KAAK;4BAC7B,CAAA,MAAA,KAAK,CAAC,YAAY,0CAAE,MAAM,KAAI,IAAI;4BAClC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAC/B,uBAAC,4BAAkB,IAAC,MAAM,EAAE,KAAK,CAAC,YAAY,IAAI,EAAE,GAAI,CACzD,EACH,uBAAC,4BAAkB,KAAG,IAClB,EACN,gCACE,KAAK,EAAE;wBACL,OAAO,EAAE,MAAM;wBACf,aAAa,EAAE,QAAQ;wBACvB,QAAQ,EAAE,qBAAa,CAAC,QAAQ;wBAChC,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,QAAQ;qBACjB,YAED,iCACE,KAAK,EAAE;4BACL,OAAO,EAAE,MAAM;4BACf,GAAG,EAAE,EAAE;4BACP,OAAO,EAAE,MAAM;4BACf,aAAa,EAAE,QAAQ;yBACxB,aAEA,gBAAgB,KAAK,cAAc,IAAI,CACtC,iCACE,KAAK,EAAE;oCACL,OAAO,EAAE,MAAM;oCACf,aAAa,EAAE,QAAQ;oCACvB,cAAc,EAAE,QAAQ;oCACxB,UAAU,EAAE,QAAQ;oCACpB,OAAO,EAAE,MAAM;oCACf,KAAK,EAAE,MAAM;oCACb,SAAS,EAAE,QAAQ;oCACnB,GAAG,EAAE,MAAM;iCACZ,aAED,gCAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,6BAAU,EAC1C,gCAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,uCAEhD,EACN,gCACE,KAAK,EAAE;4CACL,QAAQ,EAAE,MAAM;4CAChB,QAAQ,EAAE,OAAO;4CACjB,UAAU,EAAE,KAAK;yCAClB,uJAKG,IACF,CACP,EAEA,gBAAgB,KAAK,WAAW,IAAI,CACnC,uBAAC,+BAAqB,IAAC,WAAW,EAAE,WAAW,GAAI,CACpD,IACG,GACF,EAON,gCACE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EACzC,GAAG,EAAE,eAAe,GACf,EACP,gCACE,KAAK,EAAE;wBACL,QAAQ,EAAE,QAAQ;wBAClB,MAAM,EAAE,EAAE;wBACV,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,CAAC;wBACR,MAAM,EAAE,IAAI;qBACb,YAED,uBAAC,uBAAmB,IAClB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EACV,gBAAgB,EAAE,CAAC,kBAAkB;4BACnC,CAAC,CAAC;gCACE,YAAY,EAAE,IAAI;6BACnB;4BACH,CAAC,CAAC,SAAS,EAEf,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ,GACxB,GACE,IACF,GACU,CACnB,CAAC;AACJ,CAAC,CAAC;AAvVW,QAAA,cAAc,kBAuVzB;AACF,kBAAe,sBAAc,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { IAutoBeAgentSession, IAutoBeAgentSessionStorageStrategy } from "../structure";
|
|
2
|
+
/** Props interface for AutoBeChatSidebar component */
|
|
3
|
+
export interface IAutoBeChatSidebarProps {
|
|
4
|
+
storageStrategy: IAutoBeAgentSessionStorageStrategy;
|
|
5
|
+
/** Whether the sidebar is collapsed (true) or expanded (false) */
|
|
6
|
+
isCollapsed: boolean;
|
|
7
|
+
/** Function to toggle sidebar collapsed/expanded */
|
|
8
|
+
onToggle: () => void;
|
|
9
|
+
/** Custom className */
|
|
10
|
+
className?: string;
|
|
11
|
+
/** Function to select a session */
|
|
12
|
+
onSessionSelect?: (id: string) => Promise<void> | void;
|
|
13
|
+
/** Function to delete a session */
|
|
14
|
+
onDeleteSession?: (id: string) => Promise<void> | void;
|
|
15
|
+
}
|
|
16
|
+
/** Beautiful and modern chat sidebar component as part of layout */
|
|
17
|
+
export declare const AutoBeChatSidebar: (props: IAutoBeChatSidebarProps) => import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export default AutoBeChatSidebar;
|
|
19
|
+
/** Props for ConversationListItem component */
|
|
20
|
+
export interface IConversationListItemProps {
|
|
21
|
+
/** Conversation session data */
|
|
22
|
+
session: IAutoBeAgentSession;
|
|
23
|
+
/** Whether this conversation is currently active */
|
|
24
|
+
isActive: boolean;
|
|
25
|
+
/** Callback when conversation is selected */
|
|
26
|
+
onSelect: (sessionId: string) => void;
|
|
27
|
+
/** Callback when conversation should be deleted */
|
|
28
|
+
onDelete: (sessionId: string) => void;
|
|
29
|
+
/** Callback when conversation should be edited */
|
|
30
|
+
onEditTitle: (sessionId: string, title: string) => void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Individual conversation list item component Displays conversation title,
|
|
34
|
+
* metadata, and actions
|
|
35
|
+
*/
|
|
36
|
+
export declare const SessionListItem: (props: IConversationListItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,227 @@
|
|
|
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.SessionListItem = exports.AutoBeChatSidebar = void 0;
|
|
13
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
14
|
+
const react_1 = require("react");
|
|
15
|
+
const AutoBeAgentSessionList_1 = require("../context/AutoBeAgentSessionList");
|
|
16
|
+
const SearchParamsContext_1 = require("../context/SearchParamsContext");
|
|
17
|
+
const ActionButtonGroup_1 = require("./common/ActionButtonGroup");
|
|
18
|
+
const CompactSessionList_1 = require("./common/CompactSessionList");
|
|
19
|
+
const collapsedWidth = "60px";
|
|
20
|
+
const expandedWidth = "320px";
|
|
21
|
+
/** Beautiful and modern chat sidebar component as part of layout */
|
|
22
|
+
const AutoBeChatSidebar = (props) => {
|
|
23
|
+
var _a;
|
|
24
|
+
const { sessionList, refreshSessionList } = (0, AutoBeAgentSessionList_1.useAutoBeAgentSessionList)();
|
|
25
|
+
const { searchParams, setSearchParams } = (0, SearchParamsContext_1.useSearchParams)();
|
|
26
|
+
const activeSessionId = (_a = searchParams.get("session-id")) !== null && _a !== void 0 ? _a : null;
|
|
27
|
+
const [currentSessionId, setCurrentSessionId] = (0, react_1.useState)(Array.isArray(activeSessionId) ? activeSessionId.at(0) : activeSessionId);
|
|
28
|
+
const handleOnSessionSelect = (0, react_1.useCallback)((sessionId) => {
|
|
29
|
+
var _a;
|
|
30
|
+
(_a = props.onSessionSelect) === null || _a === void 0 ? void 0 : _a.call(props, sessionId);
|
|
31
|
+
setCurrentSessionId(sessionId);
|
|
32
|
+
}, [props.onSessionSelect, setSearchParams]);
|
|
33
|
+
(0, react_1.useEffect)(() => {
|
|
34
|
+
setCurrentSessionId(activeSessionId);
|
|
35
|
+
}, [searchParams]);
|
|
36
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: props.className, style: {
|
|
37
|
+
position: "relative",
|
|
38
|
+
height: "100%",
|
|
39
|
+
width: props.isCollapsed ? collapsedWidth : expandedWidth,
|
|
40
|
+
backgroundColor: "#ffffff",
|
|
41
|
+
borderRight: "1px solid #e5e7eb",
|
|
42
|
+
boxShadow: "2px 0 4px rgba(0, 0, 0, 0.05)",
|
|
43
|
+
transition: "width 0.3s ease",
|
|
44
|
+
display: "flex",
|
|
45
|
+
flexDirection: "column",
|
|
46
|
+
overflow: "hidden",
|
|
47
|
+
flexShrink: 0,
|
|
48
|
+
}, children: [(0, jsx_runtime_1.jsx)("div", { style: {
|
|
49
|
+
padding: props.isCollapsed ? "1rem 0.75rem" : "1.5rem 1.25rem 1rem",
|
|
50
|
+
borderBottom: "1px solid #f3f4f6",
|
|
51
|
+
backgroundColor: "#fafafa",
|
|
52
|
+
transition: "padding 0.3s ease",
|
|
53
|
+
}, children: (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
54
|
+
display: "flex",
|
|
55
|
+
justifyContent: props.isCollapsed ? "center" : "space-between",
|
|
56
|
+
alignItems: "center",
|
|
57
|
+
marginBottom: props.isCollapsed ? "0" : "1rem",
|
|
58
|
+
transition: "all 0.3s ease",
|
|
59
|
+
}, children: [!props.isCollapsed && ((0, jsx_runtime_1.jsx)("h2", { style: {
|
|
60
|
+
fontSize: "1.25rem",
|
|
61
|
+
fontWeight: "600",
|
|
62
|
+
color: "#1f2937",
|
|
63
|
+
margin: 0,
|
|
64
|
+
opacity: props.isCollapsed ? 0 : 1,
|
|
65
|
+
transition: "opacity 0.3s ease",
|
|
66
|
+
}, children: "Chat History" })), (0, jsx_runtime_1.jsx)("button", { onClick: props.onToggle, style: {
|
|
67
|
+
background: "none",
|
|
68
|
+
border: "none",
|
|
69
|
+
cursor: "pointer",
|
|
70
|
+
padding: "0.5rem",
|
|
71
|
+
borderRadius: "0.5rem",
|
|
72
|
+
display: "flex",
|
|
73
|
+
alignItems: "center",
|
|
74
|
+
justifyContent: "center",
|
|
75
|
+
transition: "background-color 0.2s ease",
|
|
76
|
+
}, onMouseEnter: (e) => {
|
|
77
|
+
e.currentTarget.style.backgroundColor = "#f3f4f6";
|
|
78
|
+
}, onMouseLeave: (e) => {
|
|
79
|
+
e.currentTarget.style.backgroundColor = "transparent";
|
|
80
|
+
}, title: props.isCollapsed ? "Expand sidebar" : "Collapse sidebar", children: (0, jsx_runtime_1.jsx)("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", style: {
|
|
81
|
+
transform: props.isCollapsed
|
|
82
|
+
? "rotate(0deg)"
|
|
83
|
+
: "rotate(180deg)",
|
|
84
|
+
transition: "transform 0.3s ease",
|
|
85
|
+
}, children: (0, jsx_runtime_1.jsx)("path", { d: "M15 18l-6-6 6-6" }) }) })] }) }), (0, jsx_runtime_1.jsx)("div", { style: {
|
|
86
|
+
flex: 1,
|
|
87
|
+
overflowY: props.isCollapsed ? "visible" : "auto",
|
|
88
|
+
padding: props.isCollapsed ? "0.25rem" : "0.5rem",
|
|
89
|
+
transition: "padding 0.3s ease",
|
|
90
|
+
}, children: props.isCollapsed ? (
|
|
91
|
+
// Collapsed state - show compact conversation indicators
|
|
92
|
+
(0, jsx_runtime_1.jsx)(CompactSessionList_1.CompactSessionList, { sessions: sessionList, activeSessionId: currentSessionId, maxItems: 8, onSessionSelect: handleOnSessionSelect })) : (
|
|
93
|
+
// Expanded state - show full conversation list
|
|
94
|
+
(0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: sessionList.length === 0 ? ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
95
|
+
padding: "2rem 1rem",
|
|
96
|
+
textAlign: "center",
|
|
97
|
+
color: "#6b7280",
|
|
98
|
+
fontSize: "0.875rem",
|
|
99
|
+
}, children: [(0, jsx_runtime_1.jsx)("div", { style: { marginBottom: "0.5rem" }, children: (0, jsx_runtime_1.jsx)("svg", { width: "48", height: "48", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", style: { margin: "0 auto", opacity: 0.5 }, children: (0, jsx_runtime_1.jsx)("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" }) }) }), (0, jsx_runtime_1.jsx)("p", { style: { margin: 0 }, children: "No conversations yet" }), (0, jsx_runtime_1.jsx)("p", { style: { margin: "0.25rem 0 0 0", fontSize: "0.75rem" }, children: "Start a new chat to see your history here" })] })) : (sessionList.map((session) => ((0, jsx_runtime_1.jsx)(exports.SessionListItem, { session: session, isActive: currentSessionId === session.id, onSelect: handleOnSessionSelect, onDelete: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
100
|
+
var _a;
|
|
101
|
+
yield ((_a = props.onDeleteSession) === null || _a === void 0 ? void 0 : _a.call(props, session.id));
|
|
102
|
+
refreshSessionList();
|
|
103
|
+
if (session.id === currentSessionId) {
|
|
104
|
+
setSearchParams((sp) => {
|
|
105
|
+
const newSp = new URLSearchParams(sp);
|
|
106
|
+
newSp.delete("session-id");
|
|
107
|
+
return newSp;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}), onEditTitle: (_, newTitle) => __awaiter(void 0, void 0, void 0, function* () {
|
|
111
|
+
// Update the session title through storage strategy
|
|
112
|
+
yield props.storageStrategy.editSessionTitle({
|
|
113
|
+
id: session.id,
|
|
114
|
+
title: newTitle,
|
|
115
|
+
});
|
|
116
|
+
refreshSessionList();
|
|
117
|
+
}) }, session.id)))) })) })] }));
|
|
118
|
+
};
|
|
119
|
+
exports.AutoBeChatSidebar = AutoBeChatSidebar;
|
|
120
|
+
exports.default = exports.AutoBeChatSidebar;
|
|
121
|
+
/**
|
|
122
|
+
* Individual conversation list item component Displays conversation title,
|
|
123
|
+
* metadata, and actions
|
|
124
|
+
*/
|
|
125
|
+
const SessionListItem = (props) => {
|
|
126
|
+
var _a, _b;
|
|
127
|
+
const { session, isActive, onSelect, onDelete, onEditTitle } = props;
|
|
128
|
+
const [isHovered, setIsHovered] = (0, react_1.useState)(false);
|
|
129
|
+
const [isEditing, setIsEditing] = (0, react_1.useState)(false);
|
|
130
|
+
const [editingTitle, setEditingTitle] = (0, react_1.useState)((_a = session.title) !== null && _a !== void 0 ? _a : "");
|
|
131
|
+
const lastMessage = session.history.at(-1);
|
|
132
|
+
//----
|
|
133
|
+
// EVENT HANDLERS
|
|
134
|
+
//----
|
|
135
|
+
const handleStartEditing = () => {
|
|
136
|
+
var _a;
|
|
137
|
+
setIsEditing(true);
|
|
138
|
+
setEditingTitle((_a = session.title) !== null && _a !== void 0 ? _a : "Untitled");
|
|
139
|
+
};
|
|
140
|
+
const handleSaveTitle = () => {
|
|
141
|
+
const trimmedTitle = editingTitle.trim();
|
|
142
|
+
if (trimmedTitle && trimmedTitle !== session.title) {
|
|
143
|
+
onEditTitle === null || onEditTitle === void 0 ? void 0 : onEditTitle(session.id, trimmedTitle);
|
|
144
|
+
}
|
|
145
|
+
setIsEditing(false);
|
|
146
|
+
};
|
|
147
|
+
const handleCancelEditing = () => {
|
|
148
|
+
var _a;
|
|
149
|
+
setIsEditing(false);
|
|
150
|
+
setEditingTitle((_a = session.title) !== null && _a !== void 0 ? _a : "Untitled");
|
|
151
|
+
};
|
|
152
|
+
const handleKeyPress = (e) => {
|
|
153
|
+
if (e.key === "Enter") {
|
|
154
|
+
handleSaveTitle();
|
|
155
|
+
}
|
|
156
|
+
else if (e.key === "Escape") {
|
|
157
|
+
handleCancelEditing();
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
161
|
+
marginBottom: "0.5rem",
|
|
162
|
+
borderRadius: "0.75rem",
|
|
163
|
+
padding: "0.75rem",
|
|
164
|
+
cursor: "pointer",
|
|
165
|
+
backgroundColor: isActive
|
|
166
|
+
? "#eff6ff"
|
|
167
|
+
: isHovered
|
|
168
|
+
? "#f9fafb"
|
|
169
|
+
: "transparent",
|
|
170
|
+
border: isActive ? "1px solid #dbeafe" : "1px solid transparent",
|
|
171
|
+
transition: "all 0.2s ease",
|
|
172
|
+
display: "flex",
|
|
173
|
+
flexDirection: "column",
|
|
174
|
+
gap: "0.25rem",
|
|
175
|
+
position: "relative",
|
|
176
|
+
}, onClick: () => onSelect(session.id), onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), children: [(0, jsx_runtime_1.jsxs)("div", { style: {
|
|
177
|
+
display: "flex",
|
|
178
|
+
alignItems: "center",
|
|
179
|
+
justifyContent: "space-between",
|
|
180
|
+
gap: "0.5rem",
|
|
181
|
+
fontSize: "0.875rem",
|
|
182
|
+
fontWeight: "500",
|
|
183
|
+
color: isActive ? "#1d4ed8" : "#1f2937",
|
|
184
|
+
lineHeight: "1.25",
|
|
185
|
+
paddingRight: "0.5rem", // Space for buttons
|
|
186
|
+
}, children: [(0, jsx_runtime_1.jsx)("div", { style: {
|
|
187
|
+
flex: 1,
|
|
188
|
+
display: "flex",
|
|
189
|
+
alignItems: "center",
|
|
190
|
+
minWidth: 0, // Allow shrinking
|
|
191
|
+
}, children: isEditing ? ((0, jsx_runtime_1.jsx)("input", { type: "text", value: editingTitle, onChange: (e) => setEditingTitle(e.target.value), onKeyDown: handleKeyPress, onBlur: handleSaveTitle, style: {
|
|
192
|
+
flex: 1,
|
|
193
|
+
border: "1px solid #d1d5db",
|
|
194
|
+
borderRadius: "0.25rem",
|
|
195
|
+
padding: "0.25rem 0.5rem",
|
|
196
|
+
fontSize: "0.875rem",
|
|
197
|
+
fontWeight: "500",
|
|
198
|
+
color: isActive ? "#1d4ed8" : "#1f2937",
|
|
199
|
+
backgroundColor: "#ffffff",
|
|
200
|
+
outline: "none",
|
|
201
|
+
boxShadow: "0 0 0 2px rgba(59, 130, 246, 0.25)",
|
|
202
|
+
}, autoFocus: true, onClick: (e) => e.stopPropagation() })) : ((0, jsx_runtime_1.jsx)("span", { style: {
|
|
203
|
+
overflow: "hidden",
|
|
204
|
+
textOverflow: "ellipsis",
|
|
205
|
+
whiteSpace: "nowrap",
|
|
206
|
+
flex: 1,
|
|
207
|
+
}, children: (_b = session.title) !== null && _b !== void 0 ? _b : "Untitled" })) }), !isEditing ? ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
208
|
+
visibility: isHovered ? "visible" : "hidden",
|
|
209
|
+
opacity: isHovered ? 1 : 0,
|
|
210
|
+
transition: "opacity 0.2s ease",
|
|
211
|
+
}, children: (0, jsx_runtime_1.jsx)(ActionButtonGroup_1.ActionButtonGroup, { onEdit: handleStartEditing, onDelete: onDelete ? () => onDelete(session.id) : undefined }) })) : ((0, jsx_runtime_1.jsx)(ActionButtonGroup_1.ActionButtonGroup, { onSave: handleSaveTitle, onCancel: handleCancelEditing }))] }), (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
212
|
+
display: "flex",
|
|
213
|
+
justifyContent: "space-between",
|
|
214
|
+
alignItems: "center",
|
|
215
|
+
fontSize: "0.75rem",
|
|
216
|
+
color: "#6b7280",
|
|
217
|
+
}, children: [(0, jsx_runtime_1.jsx)("span", { children: session.history.length > 0 && lastMessage !== undefined
|
|
218
|
+
? new Date(lastMessage.created_at).toLocaleDateString("en-US", {
|
|
219
|
+
month: "short",
|
|
220
|
+
day: "numeric",
|
|
221
|
+
hour: "2-digit",
|
|
222
|
+
minute: "2-digit",
|
|
223
|
+
})
|
|
224
|
+
: "No messages" }), session.history.length > 0 && ((0, jsx_runtime_1.jsxs)("span", { children: [session.history.length, " messages"] }))] })] }));
|
|
225
|
+
};
|
|
226
|
+
exports.SessionListItem = SessionListItem;
|
|
227
|
+
//# sourceMappingURL=AutoBeChatSidebar.js.map
|