@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.
Files changed (128) hide show
  1. package/lib/components/AutoBeChatMain.d.ts +6 -4
  2. package/lib/components/AutoBeChatMain.js +204 -56
  3. package/lib/components/AutoBeChatMain.js.map +1 -1
  4. package/lib/components/AutoBeChatSidebar.d.ts +36 -0
  5. package/lib/components/AutoBeChatSidebar.js +227 -0
  6. package/lib/components/AutoBeChatSidebar.js.map +1 -0
  7. package/lib/components/AutoBeConfigButton.d.ts +15 -0
  8. package/lib/components/AutoBeConfigButton.js +33 -0
  9. package/lib/components/AutoBeConfigButton.js.map +1 -0
  10. package/lib/components/AutoBeConfigModal.d.ts +59 -0
  11. package/lib/components/AutoBeConfigModal.js +294 -0
  12. package/lib/components/AutoBeConfigModal.js.map +1 -0
  13. package/lib/components/AutoBeStatusButton.d.ts +12 -0
  14. package/lib/components/AutoBeStatusButton.js +29 -0
  15. package/lib/components/AutoBeStatusButton.js.map +1 -0
  16. package/lib/components/AutoBeStatusModal.js +35 -15
  17. package/lib/components/AutoBeStatusModal.js.map +1 -1
  18. package/lib/components/common/ActionButton.d.ts +16 -0
  19. package/lib/components/common/ActionButton.js +115 -0
  20. package/lib/components/common/ActionButton.js.map +1 -0
  21. package/lib/components/common/ActionButtonGroup.d.ts +13 -0
  22. package/lib/components/common/ActionButtonGroup.js +37 -0
  23. package/lib/components/common/ActionButtonGroup.js.map +1 -0
  24. package/lib/components/common/AutoBeConfigInput.d.ts +24 -0
  25. package/lib/components/common/AutoBeConfigInput.js +90 -0
  26. package/lib/components/common/AutoBeConfigInput.js.map +1 -0
  27. package/lib/components/common/CompactSessionIndicator.d.ts +16 -0
  28. package/lib/components/common/CompactSessionIndicator.js +46 -0
  29. package/lib/components/common/CompactSessionIndicator.js.map +1 -0
  30. package/lib/components/common/CompactSessionList.d.ts +22 -0
  31. package/lib/components/common/CompactSessionList.js +40 -0
  32. package/lib/components/common/CompactSessionList.js.map +1 -0
  33. package/lib/components/common/index.d.ts +6 -0
  34. package/lib/components/common/index.js +6 -0
  35. package/lib/components/common/index.js.map +1 -1
  36. package/lib/components/events/AutoBeEventGroupMovie.d.ts +6 -0
  37. package/lib/components/events/AutoBeEventGroupMovie.js +11 -0
  38. package/lib/components/events/AutoBeEventGroupMovie.js.map +1 -0
  39. package/lib/components/events/AutoBeEventMovie.js +5 -0
  40. package/lib/components/events/AutoBeEventMovie.js.map +1 -1
  41. package/lib/components/events/AutoBeValidateEventMovie.js +1 -3
  42. package/lib/components/events/AutoBeValidateEventMovie.js.map +1 -1
  43. package/lib/components/events/common/CollapsibleEventGroup.d.ts +1 -1
  44. package/lib/components/events/groups/ValidateEventGroup.d.ts +1 -1
  45. package/lib/components/events/utils/eventGrouper.js.map +1 -1
  46. package/lib/components/index.d.ts +6 -0
  47. package/lib/components/index.js +7 -0
  48. package/lib/components/index.js.map +1 -1
  49. package/lib/components/upload/AutoBeChatUploadBox.js +75 -33
  50. package/lib/components/upload/AutoBeChatUploadBox.js.map +1 -1
  51. package/lib/context/AutoBeAgentContext.d.ts +22 -11
  52. package/lib/context/AutoBeAgentContext.js +127 -11
  53. package/lib/context/AutoBeAgentContext.js.map +1 -1
  54. package/lib/context/AutoBeAgentSessionList.d.ts +12 -0
  55. package/lib/context/AutoBeAgentSessionList.js +37 -0
  56. package/lib/context/AutoBeAgentSessionList.js.map +1 -0
  57. package/lib/context/SearchParamsContext.d.ts +10 -0
  58. package/lib/context/SearchParamsContext.js +29 -0
  59. package/lib/context/SearchParamsContext.js.map +1 -0
  60. package/lib/index.d.ts +4 -0
  61. package/lib/index.js +4 -0
  62. package/lib/index.js.map +1 -1
  63. package/lib/structure/AutoBeListener.d.ts +6 -0
  64. package/lib/structure/AutoBeListener.js +21 -4
  65. package/lib/structure/AutoBeListener.js.map +1 -1
  66. package/lib/structure/IAutoBeAgentSessionStorageStrategy.d.ts +35 -0
  67. package/lib/structure/IAutoBeAgentSessionStorageStrategy.js +30 -0
  68. package/lib/structure/IAutoBeAgentSessionStorageStrategy.js.map +1 -0
  69. package/lib/structure/index.d.ts +1 -0
  70. package/lib/structure/index.js +1 -0
  71. package/lib/structure/index.js.map +1 -1
  72. package/lib/types/config.d.ts +26 -0
  73. package/lib/types/config.js +14 -0
  74. package/lib/types/config.js.map +1 -0
  75. package/lib/types/index.d.ts +1 -0
  76. package/lib/types/index.js +18 -0
  77. package/lib/types/index.js.map +1 -0
  78. package/lib/utils/__tests__/crypto.test.d.ts +1 -0
  79. package/lib/utils/__tests__/crypto.test.js +222 -0
  80. package/lib/utils/__tests__/crypto.test.js.map +1 -0
  81. package/lib/utils/__tests__/storage.test.d.ts +1 -0
  82. package/lib/utils/__tests__/storage.test.js +174 -0
  83. package/lib/utils/__tests__/storage.test.js.map +1 -0
  84. package/lib/utils/crypto.d.ts +18 -0
  85. package/lib/utils/crypto.js +84 -0
  86. package/lib/utils/crypto.js.map +1 -0
  87. package/lib/utils/index.d.ts +2 -0
  88. package/lib/utils/index.js +2 -0
  89. package/lib/utils/index.js.map +1 -1
  90. package/lib/utils/storage.d.ts +29 -0
  91. package/lib/utils/storage.js +93 -0
  92. package/lib/utils/storage.js.map +1 -0
  93. package/package.json +11 -3
  94. package/src/components/AutoBeChatMain.tsx +329 -131
  95. package/src/components/AutoBeChatSidebar.tsx +414 -0
  96. package/src/components/AutoBeConfigButton.tsx +83 -0
  97. package/src/components/AutoBeConfigModal.tsx +444 -0
  98. package/src/components/AutoBeStatusButton.tsx +75 -0
  99. package/src/components/AutoBeStatusModal.tsx +55 -54
  100. package/src/components/common/ActionButton.tsx +205 -0
  101. package/src/components/common/ActionButtonGroup.tsx +80 -0
  102. package/src/components/common/AutoBeConfigInput.tsx +185 -0
  103. package/src/components/common/CompactSessionIndicator.tsx +73 -0
  104. package/src/components/common/CompactSessionList.tsx +82 -0
  105. package/src/components/common/index.ts +6 -0
  106. package/src/components/events/AutoBeEventGroupMovie.tsx +18 -0
  107. package/src/components/events/AutoBeEventMovie.tsx +5 -0
  108. package/src/components/events/AutoBeValidateEventMovie.tsx +7 -9
  109. package/src/components/events/common/CollapsibleEventGroup.tsx +1 -1
  110. package/src/components/events/groups/ValidateEventGroup.tsx +1 -1
  111. package/src/components/events/utils/eventGrouper.tsx +2 -1
  112. package/src/components/index.ts +6 -0
  113. package/src/components/upload/AutoBeChatUploadBox.tsx +94 -44
  114. package/src/context/AutoBeAgentContext.tsx +201 -22
  115. package/src/context/AutoBeAgentSessionList.tsx +58 -0
  116. package/src/context/SearchParamsContext.tsx +49 -0
  117. package/src/index.ts +4 -0
  118. package/src/structure/AutoBeListener.ts +32 -6
  119. package/src/structure/IAutoBeAgentSessionStorageStrategy.ts +87 -0
  120. package/src/structure/index.ts +1 -0
  121. package/src/types/config.ts +44 -0
  122. package/src/types/index.ts +1 -0
  123. package/src/utils/__tests__/crypto.test.ts +286 -0
  124. package/src/utils/__tests__/storage.test.ts +229 -0
  125. package/src/utils/crypto.ts +95 -0
  126. package/src/utils/index.ts +2 -0
  127. package/src/utils/storage.ts +96 -0
  128. package/vitest.config.ts +15 -0
@@ -1,12 +1,14 @@
1
- import { AutoBeUserMessageContent } from "@autobe/interface";
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 AutoBeStatusModal_1 = __importDefault(require("./AutoBeStatusModal"));
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 [isTokenModalOpen, setIsTokenModalOpen] = (0, react_1.useState)(false);
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 === 0)
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
- (_a = scrollAnchorRef.current) === null || _a === void 0 ? void 0 : _a.scrollIntoView({
30
- behavior: "smooth",
31
- });
32
- }, [(_a = bodyContainerRef.current) === null || _a === void 0 ? void 0 : _a.scrollHeight]);
33
- return ((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.jsx)("div", { style: {
34
- position: "sticky",
35
- top: "1rem",
36
- zIndex: 1001,
37
- display: "flex",
38
- justifyContent: "flex-end",
39
- marginBottom: "-3rem",
40
- paddingRight: "1.5rem",
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
- justifyContent: "center",
57
- }, onMouseOver: (e) => {
58
- e.currentTarget.style.transform = "translateY(-1px)";
59
- e.currentTarget.style.boxShadow = "0 4px 8px rgba(0, 0, 0, 0.15)";
60
- e.currentTarget.style.background = "#e9ecef";
61
- e.currentTarget.style.borderColor = "#adb5bd";
62
- }, onMouseOut: (e) => {
63
- e.currentTarget.style.transform = "translateY(0)";
64
- e.currentTarget.style.boxShadow = "0 2px 4px rgba(0, 0, 0, 0.1)";
65
- e.currentTarget.style.background = "#f8f9fa";
66
- e.currentTarget.style.borderColor = "#dee2e6";
67
- }, title: "View System Status", children: (0, jsx_runtime_1.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [(0, jsx_runtime_1.jsx)("circle", { cx: "12", cy: "12", r: "10" }), (0, jsx_runtime_1.jsx)("path", { d: "M12 16v-4" }), (0, jsx_runtime_1.jsx)("path", { d: "M12 8h.01" })] }) }) }), (0, jsx_runtime_1.jsx)("div", { style: {
68
- display: "flex",
69
- flexDirection: "column",
70
- maxWidth: hooks_1.useMediaQuery.WIDTH_MD,
71
- width: "100%",
72
- margin: "0 auto",
73
- }, children: (0, jsx_runtime_1.jsx)("div", { style: {
74
- padding: "2rem",
75
- gap: 16,
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
- }, children: eventGroups.map((e, index) => ((0, jsx_runtime_1.jsx)(__1.AutoBeEventMovie, { events: e.events, last: index === eventGroups.length - 1 }, index))) }) }), (0, jsx_runtime_1.jsx)("div", { style: { flexGrow: 1, minHeight: "1rem" }, ref: scrollAnchorRef }), (0, jsx_runtime_1.jsx)("div", { style: {
79
- position: "sticky",
80
- bottom: 16,
81
- left: 0,
82
- right: 0,
83
- zIndex: 1000,
84
- }, children: (0, jsx_runtime_1.jsx)(__1.AutoBeChatUploadBox, { listener: listener, uploadConfig: props.uploadConfig, conversate: props.conversate, setError: props.setError }) }), (0, jsx_runtime_1.jsx)(AutoBeStatusModal_1.default, { isOpen: isTokenModalOpen, onClose: () => setIsTokenModalOpen(false) })] }));
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":"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"}
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