@axtec/components 0.1.8 → 0.1.10
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/README.md +1 -0
- package/dist/components/AgentChat/AgentChat.d.ts +32 -0
- package/dist/components/AgentChat/index.d.ts +1 -0
- package/dist/components/AgentPanel/AgentPanel.d.ts +44 -0
- package/dist/components/AgentPanel/index.d.ts +1 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/index.css +1 -1
- package/dist/index.js +161 -157
- package/dist/index.js.map +1 -1
- package/dist/index10.js +77 -99
- package/dist/index10.js.map +1 -1
- package/dist/index11.js +91 -36
- package/dist/index11.js.map +1 -1
- package/dist/index12.js +97 -75
- package/dist/index12.js.map +1 -1
- package/dist/index13.js +38 -24
- package/dist/index13.js.map +1 -1
- package/dist/index14.js +76 -16
- package/dist/index14.js.map +1 -1
- package/dist/index15.js +24 -38
- package/dist/index15.js.map +1 -1
- package/dist/index16.js +18 -72
- package/dist/index16.js.map +1 -1
- package/dist/index17.js +36 -47
- package/dist/index17.js.map +1 -1
- package/dist/index18.js +73 -13
- package/dist/index18.js.map +1 -1
- package/dist/index19.js +47 -151
- package/dist/index19.js.map +1 -1
- package/dist/index20.js +12 -17
- package/dist/index20.js.map +1 -1
- package/dist/index21.js +148 -40
- package/dist/index21.js.map +1 -1
- package/dist/index22.js +18 -50
- package/dist/index22.js.map +1 -1
- package/dist/index23.js +41 -74
- package/dist/index23.js.map +1 -1
- package/dist/index24.js +46 -216
- package/dist/index24.js.map +1 -1
- package/dist/index25.js +73 -46
- package/dist/index25.js.map +1 -1
- package/dist/index26.js +212 -70
- package/dist/index26.js.map +1 -1
- package/dist/index27.js +51 -23
- package/dist/index27.js.map +1 -1
- package/dist/index28.js +74 -74
- package/dist/index28.js.map +1 -1
- package/dist/index29.js +19 -28
- package/dist/index29.js.map +1 -1
- package/dist/index3.js +2 -2
- package/dist/index30.js +62 -76
- package/dist/index30.js.map +1 -1
- package/dist/index31.js +28 -55
- package/dist/index31.js.map +1 -1
- package/dist/index32.js +87 -40
- package/dist/index32.js.map +1 -1
- package/dist/index33.js +57 -45
- package/dist/index33.js.map +1 -1
- package/dist/index34.js +40 -47
- package/dist/index34.js.map +1 -1
- package/dist/index35.js +47 -27
- package/dist/index35.js.map +1 -1
- package/dist/index36.js +52 -54
- package/dist/index36.js.map +1 -1
- package/dist/index37.js +28 -49
- package/dist/index37.js.map +1 -1
- package/dist/index38.js +54 -13
- package/dist/index38.js.map +1 -1
- package/dist/index39.js +46 -79
- package/dist/index39.js.map +1 -1
- package/dist/index40.js +13 -49
- package/dist/index40.js.map +1 -1
- package/dist/index41.js +80 -17
- package/dist/index41.js.map +1 -1
- package/dist/index42.js +48 -33
- package/dist/index42.js.map +1 -1
- package/dist/index43.js +18 -17
- package/dist/index43.js.map +1 -1
- package/dist/index44.js +34 -15
- package/dist/index44.js.map +1 -1
- package/dist/index45.js +16 -89
- package/dist/index45.js.map +1 -1
- package/dist/index46.js +15 -69
- package/dist/index46.js.map +1 -1
- package/dist/index47.js +85 -116
- package/dist/index47.js.map +1 -1
- package/dist/index48.js +69 -40
- package/dist/index48.js.map +1 -1
- package/dist/index49.js +120 -42
- package/dist/index49.js.map +1 -1
- package/dist/index5.js +1 -1
- package/dist/index50.js +39 -55
- package/dist/index50.js.map +1 -1
- package/dist/index51.js +39 -11
- package/dist/index51.js.map +1 -1
- package/dist/index52.js +53 -62
- package/dist/index52.js.map +1 -1
- package/dist/index53.js +16 -54
- package/dist/index53.js.map +1 -1
- package/dist/index54.js +64 -36
- package/dist/index54.js.map +1 -1
- package/dist/index55.js +54 -66
- package/dist/index55.js.map +1 -1
- package/dist/index56.js +37 -22
- package/dist/index56.js.map +1 -1
- package/dist/index57.js +63 -101
- package/dist/index57.js.map +1 -1
- package/dist/index58.js +16 -67
- package/dist/index58.js.map +1 -1
- package/dist/index59.js +99 -213
- package/dist/index59.js.map +1 -1
- package/dist/index6.js +1 -1
- package/dist/index60.js +67 -62
- package/dist/index60.js.map +1 -1
- package/dist/index61.js +206 -224
- package/dist/index61.js.map +1 -1
- package/dist/index62.js +62 -96
- package/dist/index62.js.map +1 -1
- package/dist/index63.js +233 -33
- package/dist/index63.js.map +1 -1
- package/dist/index64.js +98 -14
- package/dist/index64.js.map +1 -1
- package/dist/index65.js +35 -59
- package/dist/index65.js.map +1 -1
- package/dist/index66.js +16 -59
- package/dist/index66.js.map +1 -1
- package/dist/index67.js +57 -72
- package/dist/index67.js.map +1 -1
- package/dist/index68.js +58 -106
- package/dist/index68.js.map +1 -1
- package/dist/index69.js +70 -43
- package/dist/index69.js.map +1 -1
- package/dist/index7.js +157 -69
- package/dist/index7.js.map +1 -1
- package/dist/index70.js +101 -40
- package/dist/index70.js.map +1 -1
- package/dist/index71.js +44 -72
- package/dist/index71.js.map +1 -1
- package/dist/index72.js +47 -53
- package/dist/index72.js.map +1 -1
- package/dist/index73.js +70 -62
- package/dist/index73.js.map +1 -1
- package/dist/index74.js +46 -28
- package/dist/index74.js.map +1 -1
- package/dist/index75.js +67 -13
- package/dist/index75.js.map +1 -1
- package/dist/index76.js +35 -2263
- package/dist/index76.js.map +1 -1
- package/dist/index77.js +17 -0
- package/dist/index77.js.map +1 -0
- package/dist/index78.js +2267 -0
- package/dist/index78.js.map +1 -0
- package/dist/index8.js +377 -70
- package/dist/index8.js.map +1 -1
- package/dist/index9.js +60 -77
- package/dist/index9.js.map +1 -1
- package/package.json +1 -1
package/dist/index8.js
CHANGED
|
@@ -1,82 +1,389 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Fragment as
|
|
3
|
-
import { Transition as
|
|
1
|
+
import { jsxs as n, Fragment as w, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { useState as K, useRef as z, useEffect as A, Fragment as g } from "react";
|
|
3
|
+
import { Transition as j, TransitionChild as R, Listbox as V, ListboxButton as O, ListboxOptions as q, ListboxOption as U } from "@headlessui/react";
|
|
4
|
+
import { ChartBarSquareIcon as W, BanknotesIcon as X, WrenchScrewdriverIcon as G, DocumentTextIcon as H, SparklesIcon as D, ArrowPathIcon as J, XMarkIcon as Q, PaperAirplaneIcon as Y, ChevronUpDownIcon as Z, CheckIcon as _ } from "@heroicons/react/24/outline";
|
|
4
5
|
import { cn as i } from "./index3.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
6
|
+
const ee = [
|
|
7
|
+
{
|
|
8
|
+
id: "cma",
|
|
9
|
+
name: "CMA Agent",
|
|
10
|
+
description: "Comparative market analysis",
|
|
11
|
+
icon: W,
|
|
12
|
+
color: "#6366f1"
|
|
13
|
+
// indigo
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "finance",
|
|
17
|
+
name: "Finance Agent",
|
|
18
|
+
description: "Financial calculations & advice",
|
|
19
|
+
icon: X,
|
|
20
|
+
color: "#0ea5e9"
|
|
21
|
+
// sky
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
id: "maintenance",
|
|
25
|
+
name: "Maintenance Agent",
|
|
26
|
+
description: "Property maintenance & repairs",
|
|
27
|
+
icon: G,
|
|
28
|
+
color: "#f59e0b"
|
|
29
|
+
// amber
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: "contracting",
|
|
33
|
+
name: "Contracting Agent",
|
|
34
|
+
description: "Contracts & agreements",
|
|
35
|
+
icon: H,
|
|
36
|
+
color: "#10b981"
|
|
37
|
+
// emerald
|
|
38
|
+
}
|
|
39
|
+
];
|
|
40
|
+
function te({
|
|
41
|
+
agents: a,
|
|
42
|
+
activeAgent: l,
|
|
43
|
+
onChange: o
|
|
44
|
+
}) {
|
|
45
|
+
return /* @__PURE__ */ e(V, { value: l, onChange: o, children: /* @__PURE__ */ n("div", { className: "relative", children: [
|
|
46
|
+
/* @__PURE__ */ n(
|
|
47
|
+
O,
|
|
48
|
+
{
|
|
49
|
+
className: i(
|
|
50
|
+
"flex items-center gap-2.5 w-full rounded-xl px-3 py-2",
|
|
51
|
+
"bg-slate-50 hover:bg-slate-100 border border-slate-200 transition-colors",
|
|
52
|
+
"focus:outline-none focus:ring-2 focus:ring-primary-500 rounded-xl",
|
|
53
|
+
"cursor-pointer"
|
|
54
|
+
),
|
|
55
|
+
children: [
|
|
56
|
+
/* @__PURE__ */ e(m, { agent: l, size: "sm" }),
|
|
57
|
+
/* @__PURE__ */ n("div", { className: "flex-1 text-left min-w-0", children: [
|
|
58
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold text-slate-800 truncate", children: l.name }),
|
|
59
|
+
/* @__PURE__ */ e("div", { className: "text-[11px] text-slate-400 truncate", children: l.description })
|
|
60
|
+
] }),
|
|
61
|
+
/* @__PURE__ */ e(Z, { className: "w-4 h-4 text-slate-400 flex-shrink-0" })
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
),
|
|
65
|
+
/* @__PURE__ */ e(
|
|
66
|
+
j,
|
|
67
|
+
{
|
|
68
|
+
as: g,
|
|
69
|
+
leave: "transition ease-in duration-100",
|
|
70
|
+
leaveFrom: "opacity-100",
|
|
71
|
+
leaveTo: "opacity-0",
|
|
72
|
+
children: /* @__PURE__ */ e(
|
|
73
|
+
q,
|
|
74
|
+
{
|
|
75
|
+
className: i(
|
|
76
|
+
"absolute left-0 right-0 mt-1.5 z-10",
|
|
77
|
+
"rounded-xl bg-white border border-slate-200",
|
|
78
|
+
"shadow-lg shadow-black/8 py-1.5",
|
|
79
|
+
"focus:outline-none"
|
|
80
|
+
),
|
|
81
|
+
children: a.map((s) => /* @__PURE__ */ e(
|
|
82
|
+
U,
|
|
83
|
+
{
|
|
84
|
+
value: s,
|
|
85
|
+
className: i(
|
|
86
|
+
"flex items-center gap-2.5 px-3 py-2.5 cursor-pointer",
|
|
87
|
+
"transition-colors",
|
|
88
|
+
"data-[focus]:bg-slate-50"
|
|
89
|
+
),
|
|
90
|
+
children: ({ selected: c }) => /* @__PURE__ */ n(w, { children: [
|
|
91
|
+
/* @__PURE__ */ e(m, { agent: s, size: "sm" }),
|
|
92
|
+
/* @__PURE__ */ n("div", { className: "flex-1 min-w-0", children: [
|
|
93
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-medium text-slate-800 truncate", children: s.name }),
|
|
94
|
+
/* @__PURE__ */ e("div", { className: "text-[11px] text-slate-400 truncate", children: s.description })
|
|
95
|
+
] }),
|
|
96
|
+
c && /* @__PURE__ */ e(_, { className: "w-4 h-4 text-primary-500 flex-shrink-0" })
|
|
97
|
+
] })
|
|
98
|
+
},
|
|
99
|
+
s.id
|
|
100
|
+
))
|
|
101
|
+
}
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
)
|
|
105
|
+
] }) });
|
|
106
|
+
}
|
|
107
|
+
function m({
|
|
108
|
+
agent: a,
|
|
109
|
+
size: l = "md"
|
|
110
|
+
}) {
|
|
111
|
+
const o = a.icon || D, s = {
|
|
112
|
+
sm: "w-7 h-7",
|
|
113
|
+
md: "w-9 h-9",
|
|
114
|
+
lg: "w-12 h-12"
|
|
115
|
+
}, c = {
|
|
116
|
+
sm: "w-3.5 h-3.5",
|
|
117
|
+
md: "w-4.5 h-4.5",
|
|
118
|
+
lg: "w-6 h-6"
|
|
119
|
+
};
|
|
120
|
+
return /* @__PURE__ */ e(
|
|
121
|
+
"div",
|
|
30
122
|
{
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
children: /* @__PURE__ */ r(
|
|
39
|
-
f,
|
|
123
|
+
className: i(
|
|
124
|
+
"rounded-lg flex items-center justify-center flex-shrink-0",
|
|
125
|
+
s[l]
|
|
126
|
+
),
|
|
127
|
+
style: { backgroundColor: `${a.color || "#6dbf47"}30` },
|
|
128
|
+
children: /* @__PURE__ */ e(
|
|
129
|
+
o,
|
|
40
130
|
{
|
|
41
|
-
className:
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
131
|
+
className: c[l],
|
|
132
|
+
style: { color: a.color || "#6dbf47" }
|
|
133
|
+
}
|
|
134
|
+
)
|
|
135
|
+
}
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
function se({
|
|
139
|
+
open: a,
|
|
140
|
+
onClose: l,
|
|
141
|
+
agents: o = ee,
|
|
142
|
+
activeAgentId: s,
|
|
143
|
+
onAgentChange: c,
|
|
144
|
+
messages: h = [],
|
|
145
|
+
onSendMessage: f,
|
|
146
|
+
isTyping: v = !1,
|
|
147
|
+
placeholder: F = "Message the agent...",
|
|
148
|
+
onNewConversation: N,
|
|
149
|
+
width: p = 440,
|
|
150
|
+
headerContent: T,
|
|
151
|
+
className: L
|
|
152
|
+
}) {
|
|
153
|
+
const [u, y] = K(""), k = z(null), I = z(null), r = o.find((t) => t.id === s) || o[0], S = typeof p == "number" ? `${p}px` : p;
|
|
154
|
+
A(() => {
|
|
155
|
+
var t;
|
|
156
|
+
(t = k.current) == null || t.scrollIntoView({ behavior: "smooth" });
|
|
157
|
+
}, [h, v]), A(() => {
|
|
158
|
+
a && setTimeout(() => {
|
|
159
|
+
var t;
|
|
160
|
+
return (t = I.current) == null ? void 0 : t.focus();
|
|
161
|
+
}, 350);
|
|
162
|
+
}, [a]);
|
|
163
|
+
const C = () => {
|
|
164
|
+
const t = u.trim();
|
|
165
|
+
t && (f == null || f(t), y(""));
|
|
166
|
+
}, M = (t) => {
|
|
167
|
+
t.key === "Enter" && !t.shiftKey && (t.preventDefault(), C());
|
|
168
|
+
}, P = (t) => {
|
|
169
|
+
c == null || c(t.id);
|
|
170
|
+
}, $ = (t) => t ? t.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }) : "", B = (t) => t.role !== "agent" ? null : o.find((x) => x.id === t.agentId) || r;
|
|
171
|
+
return /* @__PURE__ */ n(w, { children: [
|
|
172
|
+
/* @__PURE__ */ e(j, { show: a, as: g, children: /* @__PURE__ */ e("div", { className: "fixed inset-0 z-40", children: /* @__PURE__ */ e(
|
|
173
|
+
R,
|
|
174
|
+
{
|
|
175
|
+
as: g,
|
|
176
|
+
enter: "ease-out duration-300",
|
|
177
|
+
enterFrom: "opacity-0",
|
|
178
|
+
enterTo: "opacity-100",
|
|
179
|
+
leave: "ease-in duration-200",
|
|
180
|
+
leaveFrom: "opacity-100",
|
|
181
|
+
leaveTo: "opacity-0",
|
|
182
|
+
children: /* @__PURE__ */ e(
|
|
183
|
+
"div",
|
|
184
|
+
{
|
|
185
|
+
className: "fixed inset-0 bg-black/40",
|
|
186
|
+
onClick: l
|
|
187
|
+
}
|
|
188
|
+
)
|
|
189
|
+
}
|
|
190
|
+
) }) }),
|
|
191
|
+
/* @__PURE__ */ e(
|
|
192
|
+
"div",
|
|
193
|
+
{
|
|
194
|
+
className: i(
|
|
195
|
+
"fixed top-0 right-0 z-50 h-screen",
|
|
196
|
+
"transition-transform duration-300 ease-in-out",
|
|
197
|
+
"flex flex-col",
|
|
198
|
+
a ? "translate-x-0" : "translate-x-full",
|
|
199
|
+
L
|
|
200
|
+
),
|
|
201
|
+
style: { width: S },
|
|
202
|
+
children: /* @__PURE__ */ n("div", { className: "flex flex-col h-full bg-white shadow-2xl", children: [
|
|
203
|
+
/* @__PURE__ */ e("div", { className: "flex-shrink-0", children: T || /* @__PURE__ */ n(w, { children: [
|
|
204
|
+
/* @__PURE__ */ n(
|
|
53
205
|
"div",
|
|
54
206
|
{
|
|
55
|
-
className:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
207
|
+
className: "px-5 py-4 flex items-center gap-3.5 transition-colors duration-300",
|
|
208
|
+
style: { backgroundColor: r.color || "#6dbf47" },
|
|
209
|
+
children: [
|
|
210
|
+
/* @__PURE__ */ e("div", { className: "w-10 h-10 rounded-xl bg-white/20 flex items-center justify-center flex-shrink-0", children: (() => {
|
|
211
|
+
const t = r.icon || D;
|
|
212
|
+
return /* @__PURE__ */ e(t, { className: "w-5 h-5 text-white" });
|
|
213
|
+
})() }),
|
|
214
|
+
/* @__PURE__ */ n("div", { className: "flex-1 min-w-0", children: [
|
|
215
|
+
/* @__PURE__ */ e("h3", { className: "text-[15px] font-semibold text-white leading-tight truncate", children: r.name }),
|
|
216
|
+
/* @__PURE__ */ e("p", { className: "text-xs text-white/70 truncate", children: r.description })
|
|
217
|
+
] }),
|
|
218
|
+
/* @__PURE__ */ n("div", { className: "flex items-center gap-1 flex-shrink-0", children: [
|
|
219
|
+
N && /* @__PURE__ */ e(
|
|
220
|
+
"button",
|
|
221
|
+
{
|
|
222
|
+
type: "button",
|
|
223
|
+
onClick: N,
|
|
224
|
+
className: "p-1.5 rounded-lg text-white/70 hover:text-white hover:bg-white/15 transition-colors",
|
|
225
|
+
title: "New conversation",
|
|
226
|
+
children: /* @__PURE__ */ e(J, { className: "w-4.5 h-4.5" })
|
|
227
|
+
}
|
|
228
|
+
),
|
|
229
|
+
/* @__PURE__ */ e(
|
|
230
|
+
"button",
|
|
231
|
+
{
|
|
232
|
+
type: "button",
|
|
233
|
+
onClick: l,
|
|
234
|
+
className: "p-1.5 rounded-lg text-white/70 hover:text-white hover:bg-white/15 transition-colors",
|
|
235
|
+
children: /* @__PURE__ */ e(Q, { className: "w-5 h-5" })
|
|
236
|
+
}
|
|
237
|
+
)
|
|
238
|
+
] })
|
|
239
|
+
]
|
|
240
|
+
}
|
|
241
|
+
),
|
|
242
|
+
/* @__PURE__ */ e("div", { className: "px-5 py-3 border-b border-slate-200 bg-white", children: /* @__PURE__ */ e(
|
|
243
|
+
te,
|
|
244
|
+
{
|
|
245
|
+
agents: o,
|
|
246
|
+
activeAgent: r,
|
|
247
|
+
onChange: P
|
|
248
|
+
}
|
|
249
|
+
) })
|
|
250
|
+
] }) }),
|
|
251
|
+
/* @__PURE__ */ n("div", { className: "flex-1 overflow-y-auto px-5 py-5 space-y-4 bg-slate-50", children: [
|
|
252
|
+
h.length === 0 && /* @__PURE__ */ n("div", { className: "flex flex-col items-center justify-center h-full text-center px-8", children: [
|
|
253
|
+
/* @__PURE__ */ e(m, { agent: r, size: "lg" }),
|
|
254
|
+
/* @__PURE__ */ e("h3", { className: "text-base font-semibold text-slate-800 mt-4", children: r.name }),
|
|
255
|
+
/* @__PURE__ */ n("p", { className: "text-sm text-slate-400 mt-1 max-w-[260px]", children: [
|
|
256
|
+
r.description,
|
|
257
|
+
". Start a conversation to get help."
|
|
258
|
+
] })
|
|
259
|
+
] }),
|
|
260
|
+
h.map((t, x) => {
|
|
261
|
+
const d = B(t), b = x > 0 ? h[x - 1] : null, E = t.role === "agent" && d && (!b || b.role === "user" || b.agentId !== t.agentId);
|
|
262
|
+
return /* @__PURE__ */ n("div", { children: [
|
|
263
|
+
E && d && /* @__PURE__ */ n("div", { className: "flex items-center gap-2 mb-2", children: [
|
|
264
|
+
/* @__PURE__ */ e(m, { agent: d, size: "sm" }),
|
|
265
|
+
/* @__PURE__ */ e("span", { className: "text-xs font-medium text-slate-500", children: d.name })
|
|
266
|
+
] }),
|
|
267
|
+
/* @__PURE__ */ e(
|
|
268
|
+
"div",
|
|
61
269
|
{
|
|
62
|
-
...a,
|
|
63
270
|
className: i(
|
|
64
|
-
|
|
65
|
-
|
|
271
|
+
"flex",
|
|
272
|
+
t.role === "user" ? "justify-end" : "justify-start"
|
|
66
273
|
),
|
|
67
|
-
children:
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
274
|
+
children: /* @__PURE__ */ n(
|
|
275
|
+
"div",
|
|
276
|
+
{
|
|
277
|
+
className: i(
|
|
278
|
+
"max-w-[85%] rounded-2xl px-4 py-3 text-[14px] leading-relaxed",
|
|
279
|
+
t.role === "user" ? "bg-primary-500 text-white rounded-br-md" : "bg-white text-slate-800 rounded-bl-md shadow-sm border border-slate-100 border-l-[3px]"
|
|
280
|
+
),
|
|
281
|
+
style: t.role === "agent" && d ? { borderLeftColor: d.color || "#6dbf47" } : void 0,
|
|
282
|
+
children: [
|
|
283
|
+
/* @__PURE__ */ e("div", { className: "whitespace-pre-wrap", children: t.content }),
|
|
284
|
+
t.timestamp && /* @__PURE__ */ e(
|
|
285
|
+
"div",
|
|
286
|
+
{
|
|
287
|
+
className: i(
|
|
288
|
+
"text-[10px] mt-1.5",
|
|
289
|
+
t.role === "user" ? "text-white/50" : "text-slate-300"
|
|
290
|
+
),
|
|
291
|
+
children: $(t.timestamp)
|
|
292
|
+
}
|
|
293
|
+
)
|
|
294
|
+
]
|
|
295
|
+
}
|
|
296
|
+
)
|
|
297
|
+
}
|
|
298
|
+
)
|
|
299
|
+
] }, t.id);
|
|
300
|
+
}),
|
|
301
|
+
v && /* @__PURE__ */ n("div", { children: [
|
|
302
|
+
/* @__PURE__ */ n("div", { className: "flex items-center gap-2 mb-2", children: [
|
|
303
|
+
/* @__PURE__ */ e(m, { agent: r, size: "sm" }),
|
|
304
|
+
/* @__PURE__ */ e("span", { className: "text-xs font-medium text-slate-500", children: r.name })
|
|
305
|
+
] }),
|
|
306
|
+
/* @__PURE__ */ e("div", { className: "flex justify-start", children: /* @__PURE__ */ e("div", { className: "bg-white rounded-2xl rounded-bl-md shadow-sm border border-slate-100 px-4 py-3.5", children: /* @__PURE__ */ n("div", { className: "flex gap-1.5 items-center", children: [
|
|
307
|
+
/* @__PURE__ */ e(
|
|
308
|
+
"span",
|
|
309
|
+
{
|
|
310
|
+
className: "w-2 h-2 rounded-full animate-bounce",
|
|
311
|
+
style: { backgroundColor: r.color || "#6dbf47", animationDelay: "0ms" }
|
|
312
|
+
}
|
|
313
|
+
),
|
|
314
|
+
/* @__PURE__ */ e(
|
|
315
|
+
"span",
|
|
316
|
+
{
|
|
317
|
+
className: "w-2 h-2 rounded-full animate-bounce",
|
|
318
|
+
style: { backgroundColor: r.color || "#6dbf47", animationDelay: "150ms" }
|
|
319
|
+
}
|
|
320
|
+
),
|
|
321
|
+
/* @__PURE__ */ e(
|
|
322
|
+
"span",
|
|
323
|
+
{
|
|
324
|
+
className: "w-2 h-2 rounded-full animate-bounce",
|
|
325
|
+
style: { backgroundColor: r.color || "#6dbf47", animationDelay: "300ms" }
|
|
326
|
+
}
|
|
327
|
+
)
|
|
328
|
+
] }) }) })
|
|
329
|
+
] }),
|
|
330
|
+
/* @__PURE__ */ e("div", { ref: k })
|
|
331
|
+
] }),
|
|
332
|
+
/* @__PURE__ */ n("div", { className: "border-t border-slate-200 bg-white px-5 py-4 flex-shrink-0", children: [
|
|
333
|
+
/* @__PURE__ */ n(
|
|
334
|
+
"div",
|
|
335
|
+
{
|
|
336
|
+
className: "flex items-center gap-2 mb-3 px-2.5 py-1.5 rounded-lg transition-colors duration-300",
|
|
337
|
+
style: { backgroundColor: `${r.color || "#6dbf47"}12` },
|
|
338
|
+
children: [
|
|
339
|
+
/* @__PURE__ */ e(m, { agent: r, size: "sm" }),
|
|
340
|
+
/* @__PURE__ */ n("span", { className: "text-xs text-slate-500", children: [
|
|
341
|
+
"Chatting with ",
|
|
342
|
+
/* @__PURE__ */ e("span", { className: "font-semibold", style: { color: r.color || "#6dbf47" }, children: r.name })
|
|
343
|
+
] })
|
|
344
|
+
]
|
|
71
345
|
}
|
|
72
|
-
)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
346
|
+
),
|
|
347
|
+
/* @__PURE__ */ n("div", { className: "flex items-end gap-2.5", children: [
|
|
348
|
+
/* @__PURE__ */ e(
|
|
349
|
+
"textarea",
|
|
350
|
+
{
|
|
351
|
+
ref: I,
|
|
352
|
+
value: u,
|
|
353
|
+
onChange: (t) => y(t.target.value),
|
|
354
|
+
onKeyDown: M,
|
|
355
|
+
placeholder: F,
|
|
356
|
+
rows: 1,
|
|
357
|
+
className: i(
|
|
358
|
+
"flex-1 resize-none rounded-xl border border-slate-200 px-4 py-3",
|
|
359
|
+
"text-sm text-slate-800 placeholder:text-slate-400",
|
|
360
|
+
"focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent",
|
|
361
|
+
"max-h-32"
|
|
362
|
+
)
|
|
363
|
+
}
|
|
364
|
+
),
|
|
365
|
+
/* @__PURE__ */ e(
|
|
366
|
+
"button",
|
|
367
|
+
{
|
|
368
|
+
type: "button",
|
|
369
|
+
onClick: C,
|
|
370
|
+
disabled: !u.trim(),
|
|
371
|
+
className: i(
|
|
372
|
+
"p-3 rounded-xl transition-all duration-150",
|
|
373
|
+
"focus:outline-none focus:ring-2 focus:ring-primary-500",
|
|
374
|
+
u.trim() ? "bg-primary-500 text-white hover:bg-primary-600 shadow-sm" : "bg-slate-100 text-slate-300 cursor-not-allowed"
|
|
375
|
+
),
|
|
376
|
+
children: /* @__PURE__ */ e(Y, { className: "w-4.5 h-4.5" })
|
|
377
|
+
}
|
|
378
|
+
)
|
|
379
|
+
] })
|
|
380
|
+
] })
|
|
381
|
+
] })
|
|
382
|
+
}
|
|
383
|
+
)
|
|
384
|
+
] });
|
|
385
|
+
}
|
|
79
386
|
export {
|
|
80
|
-
|
|
387
|
+
se as AgentPanel
|
|
81
388
|
};
|
|
82
389
|
//# sourceMappingURL=index8.js.map
|
package/dist/index8.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index8.js","sources":["../src/components/AlertBox/AlertBox.tsx"],"sourcesContent":["import { Fragment, type ReactNode } from 'react'\nimport {\n Dialog,\n DialogPanel,\n DialogTitle,\n Transition,\n TransitionChild,\n} from '@headlessui/react'\nimport { cn } from '@/lib/utils'\nimport { Button, type ButtonProps } from '../Button/Button'\n\nexport interface AlertBoxButton extends Omit<ButtonProps, 'key'> {\n text: string\n}\n\nexport interface AlertBoxProps {\n isOpen: boolean\n onClose: () => void\n title: string\n message: string\n body?: ReactNode\n buttons: AlertBoxButton[]\n className?: string\n}\n\nexport const AlertBox = ({\n isOpen,\n onClose,\n title,\n message,\n body,\n buttons,\n className,\n}: AlertBoxProps) => {\n return (\n <Transition show={isOpen} as={Fragment}>\n <Dialog onClose={onClose} className=\"relative z-50\">\n {/* Backdrop */}\n <TransitionChild\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <div className=\"fixed inset-0 bg-black/50\" aria-hidden=\"true\" />\n </TransitionChild>\n\n {/* Modal */}\n <div className=\"fixed inset-0 flex items-center justify-center p-4\">\n <TransitionChild\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0 scale-95\"\n enterTo=\"opacity-100 scale-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100 scale-100\"\n leaveTo=\"opacity-0 scale-95\"\n >\n <DialogPanel\n className={cn(\n 'w-full max-w-md bg-white rounded-2xl shadow-xl overflow-hidden',\n 'transform transition-all',\n className\n )}\n >\n {/* Header */}\n <div className=\"px-6 py-4 border-b border-slate-200\">\n <DialogTitle className=\"text-lg font-semibold text-slate-900 text-center\">\n {title}\n </DialogTitle>\n </div>\n\n {/* Message */}\n <div className=\"px-8 py-6 text-center\">\n <p className=\"text-slate-700\">{message}</p>\n {body && <div className=\"mt-4\">{body}</div>}\n </div>\n\n {/* Buttons */}\n <div\n className={cn(\n 'flex px-8 py-4 border-t border-slate-200 gap-3',\n buttons.length === 1 ? 'justify-center' : 'justify-between'\n )}\n >\n {buttons.map((button) => (\n <Button\n key={button.text}\n {...button}\n className={cn(\n buttons.length === 1 ? 'w-full' : 'flex-1',\n button.className\n )}\n >\n {button.text}\n </Button>\n ))}\n </div>\n </DialogPanel>\n </TransitionChild>\n </div>\n </Dialog>\n </Transition>\n )\n}\n"],"names":["AlertBox","isOpen","onClose","title","message","body","buttons","className","jsx","Transition","Fragment","jsxs","Dialog","TransitionChild","DialogPanel","cn","DialogTitle","button","Button"],"mappings":";;;;;AAyBO,MAAMA,IAAW,CAAC;AAAA,EACvB,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AACF,MAEI,gBAAAC,EAACC,GAAA,EAAW,MAAMR,GAAQ,IAAIS,GAC5B,UAAA,gBAAAC,EAACC,GAAA,EAAO,SAAAV,GAAkB,WAAU,iBAElC,UAAA;AAAA,EAAA,gBAAAM;AAAA,IAACK;AAAA,IAAA;AAAA,MACC,IAAIH;AAAA,MACJ,OAAM;AAAA,MACN,WAAU;AAAA,MACV,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,WAAU;AAAA,MACV,SAAQ;AAAA,MAER,UAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,6BAA4B,eAAY,OAAA,CAAO;AAAA,IAAA;AAAA,EAAA;AAAA,EAIhE,gBAAAA,EAAC,OAAA,EAAI,WAAU,sDACb,UAAA,gBAAAA;AAAA,IAACK;AAAA,IAAA;AAAA,MACC,IAAIH;AAAA,MACJ,OAAM;AAAA,MACN,WAAU;AAAA,MACV,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,WAAU;AAAA,MACV,SAAQ;AAAA,MAER,UAAA,gBAAAC;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,WAAWC;AAAA,YACT;AAAA,YACA;AAAA,YACAR;AAAA,UAAA;AAAA,UAIF,UAAA;AAAA,YAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,uCACb,UAAA,gBAAAA,EAACQ,KAAY,WAAU,oDACpB,aACH,EAAA,CACF;AAAA,YAGA,gBAAAL,EAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,cAAA,gBAAAH,EAAC,KAAA,EAAE,WAAU,kBAAkB,UAAAJ,GAAQ;AAAA,cACtCC,KAAQ,gBAAAG,EAAC,OAAA,EAAI,WAAU,QAAQ,UAAAH,EAAA,CAAK;AAAA,YAAA,GACvC;AAAA,YAGA,gBAAAG;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWO;AAAA,kBACT;AAAA,kBACAT,EAAQ,WAAW,IAAI,mBAAmB;AAAA,gBAAA;AAAA,gBAG3C,UAAAA,EAAQ,IAAI,CAACW,MACZ,gBAAAT;AAAA,kBAACU;AAAA,kBAAA;AAAA,oBAEE,GAAGD;AAAA,oBACJ,WAAWF;AAAA,sBACTT,EAAQ,WAAW,IAAI,WAAW;AAAA,sBAClCW,EAAO;AAAA,oBAAA;AAAA,oBAGR,UAAAA,EAAO;AAAA,kBAAA;AAAA,kBAPHA,EAAO;AAAA,gBAAA,CASf;AAAA,cAAA;AAAA,YAAA;AAAA,UACH;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA,EACF,CACF;AAAA,EAAA,CACF,EAAA,CACF;"}
|
|
1
|
+
{"version":3,"file":"index8.js","sources":["../src/components/AgentPanel/AgentPanel.tsx"],"sourcesContent":["import {\n useState,\n useRef,\n useEffect,\n Fragment,\n type ReactNode,\n type KeyboardEvent,\n type ComponentType,\n type SVGProps,\n} from 'react'\nimport {\n Listbox,\n ListboxButton,\n ListboxOption,\n ListboxOptions,\n Transition,\n TransitionChild,\n} from '@headlessui/react'\nimport {\n XMarkIcon,\n PaperAirplaneIcon,\n ChevronUpDownIcon,\n CheckIcon,\n SparklesIcon,\n ArrowPathIcon,\n} from '@heroicons/react/24/outline'\nimport {\n ChartBarSquareIcon,\n BanknotesIcon,\n WrenchScrewdriverIcon,\n DocumentTextIcon,\n} from '@heroicons/react/24/outline'\nimport { cn } from '@/lib/utils'\n\n// ─── Agent Definition ────────────────────────────────────────\n\nexport interface AgentDefinition {\n id: string\n name: string\n description: string\n icon?: ComponentType<SVGProps<SVGSVGElement>>\n color?: string\n}\n\nconst defaultAgents: AgentDefinition[] = [\n {\n id: 'cma',\n name: 'CMA Agent',\n description: 'Comparative market analysis',\n icon: ChartBarSquareIcon,\n color: '#6366f1', // indigo\n },\n {\n id: 'finance',\n name: 'Finance Agent',\n description: 'Financial calculations & advice',\n icon: BanknotesIcon,\n color: '#0ea5e9', // sky\n },\n {\n id: 'maintenance',\n name: 'Maintenance Agent',\n description: 'Property maintenance & repairs',\n icon: WrenchScrewdriverIcon,\n color: '#f59e0b', // amber\n },\n {\n id: 'contracting',\n name: 'Contracting Agent',\n description: 'Contracts & agreements',\n icon: DocumentTextIcon,\n color: '#10b981', // emerald\n },\n]\n\n// ─── Message Types ───────────────────────────────────────────\n\nexport interface AgentPanelMessage {\n id: string\n role: 'user' | 'agent'\n content: string\n timestamp?: Date\n agentId?: string\n}\n\n// ─── Component Props ─────────────────────────────────────────\n\nexport interface AgentPanelProps {\n /** Whether the panel is open */\n open: boolean\n /** Called when the panel should close */\n onClose: () => void\n /** Available agents */\n agents?: AgentDefinition[]\n /** Currently selected agent ID */\n activeAgentId?: string\n /** Called when agent is switched */\n onAgentChange?: (agentId: string) => void\n /** Chat messages */\n messages?: AgentPanelMessage[]\n /** Called when user sends a message */\n onSendMessage?: (message: string) => void\n /** Whether the agent is currently responding */\n isTyping?: boolean\n /** Placeholder for the message input */\n placeholder?: string\n /** Called when user clicks new conversation */\n onNewConversation?: () => void\n /** Panel width */\n width?: number | string\n /** Custom header content (replaces default) */\n headerContent?: ReactNode\n /** Additional class */\n className?: string\n}\n\n// ─── Agent Selector ──────────────────────────────────────────\n\nfunction AgentSelector({\n agents,\n activeAgent,\n onChange,\n}: {\n agents: AgentDefinition[]\n activeAgent: AgentDefinition\n onChange: (agent: AgentDefinition) => void\n}) {\n return (\n <Listbox value={activeAgent} onChange={onChange}>\n <div className=\"relative\">\n <ListboxButton\n className={cn(\n 'flex items-center gap-2.5 w-full rounded-xl px-3 py-2',\n 'bg-slate-50 hover:bg-slate-100 border border-slate-200 transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500 rounded-xl',\n 'cursor-pointer'\n )}\n >\n <AgentIcon agent={activeAgent} size=\"sm\" />\n <div className=\"flex-1 text-left min-w-0\">\n <div className=\"text-sm font-semibold text-slate-800 truncate\">\n {activeAgent.name}\n </div>\n <div className=\"text-[11px] text-slate-400 truncate\">\n {activeAgent.description}\n </div>\n </div>\n <ChevronUpDownIcon className=\"w-4 h-4 text-slate-400 flex-shrink-0\" />\n </ListboxButton>\n\n <Transition\n as={Fragment}\n leave=\"transition ease-in duration-100\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <ListboxOptions\n className={cn(\n 'absolute left-0 right-0 mt-1.5 z-10',\n 'rounded-xl bg-white border border-slate-200',\n 'shadow-lg shadow-black/8 py-1.5',\n 'focus:outline-none'\n )}\n >\n {agents.map((agent) => (\n <ListboxOption\n key={agent.id}\n value={agent}\n className={cn(\n 'flex items-center gap-2.5 px-3 py-2.5 cursor-pointer',\n 'transition-colors',\n 'data-[focus]:bg-slate-50'\n )}\n >\n {({ selected }) => (\n <>\n <AgentIcon agent={agent} size=\"sm\" />\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-sm font-medium text-slate-800 truncate\">\n {agent.name}\n </div>\n <div className=\"text-[11px] text-slate-400 truncate\">\n {agent.description}\n </div>\n </div>\n {selected && (\n <CheckIcon className=\"w-4 h-4 text-primary-500 flex-shrink-0\" />\n )}\n </>\n )}\n </ListboxOption>\n ))}\n </ListboxOptions>\n </Transition>\n </div>\n </Listbox>\n )\n}\n\n// ─── Agent Icon ──────────────────────────────────────────────\n\nfunction AgentIcon({\n agent,\n size = 'md',\n}: {\n agent: AgentDefinition\n size?: 'sm' | 'md' | 'lg'\n}) {\n const Icon = agent.icon || SparklesIcon\n const sizeMap = {\n sm: 'w-7 h-7',\n md: 'w-9 h-9',\n lg: 'w-12 h-12',\n }\n const iconSizeMap = {\n sm: 'w-3.5 h-3.5',\n md: 'w-4.5 h-4.5',\n lg: 'w-6 h-6',\n }\n\n return (\n <div\n className={cn(\n 'rounded-lg flex items-center justify-center flex-shrink-0',\n sizeMap[size]\n )}\n style={{ backgroundColor: `${agent.color || '#6dbf47'}30` }}\n >\n <Icon\n className={iconSizeMap[size]}\n style={{ color: agent.color || '#6dbf47' }}\n />\n </div>\n )\n}\n\n// ─── AgentPanel Component ────────────────────────────────────\n\nexport function AgentPanel({\n open,\n onClose,\n agents = defaultAgents,\n activeAgentId,\n onAgentChange,\n messages = [],\n onSendMessage,\n isTyping = false,\n placeholder = 'Message the agent...',\n onNewConversation,\n width = 440,\n headerContent,\n className,\n}: AgentPanelProps) {\n const [inputValue, setInputValue] = useState('')\n const messagesEndRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLTextAreaElement>(null)\n\n const activeAgent = agents.find((a) => a.id === activeAgentId) || agents[0]\n const widthStyle = typeof width === 'number' ? `${width}px` : width\n\n useEffect(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' })\n }, [messages, isTyping])\n\n useEffect(() => {\n if (open) {\n setTimeout(() => inputRef.current?.focus(), 350)\n }\n }, [open])\n\n const handleSend = () => {\n const trimmed = inputValue.trim()\n if (!trimmed) return\n onSendMessage?.(trimmed)\n setInputValue('')\n }\n\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSend()\n }\n }\n\n const handleAgentChange = (agent: AgentDefinition) => {\n onAgentChange?.(agent.id)\n }\n\n // Format timestamp\n const formatTime = (date?: Date) => {\n if (!date) return ''\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n }\n\n // Get agent for a message\n const getMessageAgent = (msg: AgentPanelMessage) => {\n if (msg.role !== 'agent') return null\n return agents.find((a) => a.id === msg.agentId) || activeAgent\n }\n\n return (\n <>\n {/* Backdrop */}\n <Transition show={open} as={Fragment}>\n <div className=\"fixed inset-0 z-40\">\n <TransitionChild\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <div\n className=\"fixed inset-0 bg-black/40\"\n onClick={onClose}\n />\n </TransitionChild>\n </div>\n </Transition>\n\n {/* Panel */}\n <div\n className={cn(\n 'fixed top-0 right-0 z-50 h-screen',\n 'transition-transform duration-300 ease-in-out',\n 'flex flex-col',\n open ? 'translate-x-0' : 'translate-x-full',\n className\n )}\n style={{ width: widthStyle }}\n >\n <div className=\"flex flex-col h-full bg-white shadow-2xl\">\n {/* Header */}\n <div className=\"flex-shrink-0\">\n {headerContent || (\n <>\n {/* Agent identity banner */}\n <div\n className=\"px-5 py-4 flex items-center gap-3.5 transition-colors duration-300\"\n style={{ backgroundColor: activeAgent.color || '#6dbf47' }}\n >\n <div className=\"w-10 h-10 rounded-xl bg-white/20 flex items-center justify-center flex-shrink-0\">\n {(() => {\n const Icon = activeAgent.icon || SparklesIcon\n return <Icon className=\"w-5 h-5 text-white\" />\n })()}\n </div>\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-[15px] font-semibold text-white leading-tight truncate\">\n {activeAgent.name}\n </h3>\n <p className=\"text-xs text-white/70 truncate\">\n {activeAgent.description}\n </p>\n </div>\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n {onNewConversation && (\n <button\n type=\"button\"\n onClick={onNewConversation}\n className=\"p-1.5 rounded-lg text-white/70 hover:text-white hover:bg-white/15 transition-colors\"\n title=\"New conversation\"\n >\n <ArrowPathIcon className=\"w-4.5 h-4.5\" />\n </button>\n )}\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-1.5 rounded-lg text-white/70 hover:text-white hover:bg-white/15 transition-colors\"\n >\n <XMarkIcon className=\"w-5 h-5\" />\n </button>\n </div>\n </div>\n\n {/* Agent Selector */}\n <div className=\"px-5 py-3 border-b border-slate-200 bg-white\">\n <AgentSelector\n agents={agents}\n activeAgent={activeAgent}\n onChange={handleAgentChange}\n />\n </div>\n </>\n )}\n </div>\n\n {/* Messages Area */}\n <div className=\"flex-1 overflow-y-auto px-5 py-5 space-y-4 bg-slate-50\">\n {messages.length === 0 && (\n <div className=\"flex flex-col items-center justify-center h-full text-center px-8\">\n <AgentIcon agent={activeAgent} size=\"lg\" />\n <h3 className=\"text-base font-semibold text-slate-800 mt-4\">\n {activeAgent.name}\n </h3>\n <p className=\"text-sm text-slate-400 mt-1 max-w-[260px]\">\n {activeAgent.description}. Start a conversation to get help.\n </p>\n </div>\n )}\n\n {messages.map((msg, index) => {\n const msgAgent = getMessageAgent(msg)\n // Show agent label when agent changes between messages\n const prevMsg = index > 0 ? messages[index - 1] : null\n const showAgentLabel =\n msg.role === 'agent' &&\n msgAgent &&\n (!prevMsg ||\n prevMsg.role === 'user' ||\n prevMsg.agentId !== msg.agentId)\n\n return (\n <div key={msg.id}>\n {showAgentLabel && msgAgent && (\n <div className=\"flex items-center gap-2 mb-2\">\n <AgentIcon agent={msgAgent} size=\"sm\" />\n <span className=\"text-xs font-medium text-slate-500\">\n {msgAgent.name}\n </span>\n </div>\n )}\n <div\n className={cn(\n 'flex',\n msg.role === 'user' ? 'justify-end' : 'justify-start'\n )}\n >\n <div\n className={cn(\n 'max-w-[85%] rounded-2xl px-4 py-3 text-[14px] leading-relaxed',\n msg.role === 'user'\n ? 'bg-primary-500 text-white rounded-br-md'\n : 'bg-white text-slate-800 rounded-bl-md shadow-sm border border-slate-100 border-l-[3px]'\n )}\n style={msg.role === 'agent' && msgAgent ? { borderLeftColor: msgAgent.color || '#6dbf47' } : undefined}\n >\n <div className=\"whitespace-pre-wrap\">{msg.content}</div>\n {msg.timestamp && (\n <div\n className={cn(\n 'text-[10px] mt-1.5',\n msg.role === 'user'\n ? 'text-white/50'\n : 'text-slate-300'\n )}\n >\n {formatTime(msg.timestamp)}\n </div>\n )}\n </div>\n </div>\n </div>\n )\n })}\n\n {isTyping && (\n <div>\n <div className=\"flex items-center gap-2 mb-2\">\n <AgentIcon agent={activeAgent} size=\"sm\" />\n <span className=\"text-xs font-medium text-slate-500\">\n {activeAgent.name}\n </span>\n </div>\n <div className=\"flex justify-start\">\n <div className=\"bg-white rounded-2xl rounded-bl-md shadow-sm border border-slate-100 px-4 py-3.5\">\n <div className=\"flex gap-1.5 items-center\">\n <span\n className=\"w-2 h-2 rounded-full animate-bounce\"\n style={{ backgroundColor: activeAgent.color || '#6dbf47', animationDelay: '0ms' }}\n />\n <span\n className=\"w-2 h-2 rounded-full animate-bounce\"\n style={{ backgroundColor: activeAgent.color || '#6dbf47', animationDelay: '150ms' }}\n />\n <span\n className=\"w-2 h-2 rounded-full animate-bounce\"\n style={{ backgroundColor: activeAgent.color || '#6dbf47', animationDelay: '300ms' }}\n />\n </div>\n </div>\n </div>\n </div>\n )}\n <div ref={messagesEndRef} />\n </div>\n\n {/* Input Area */}\n <div className=\"border-t border-slate-200 bg-white px-5 py-4 flex-shrink-0\">\n {/* Active agent indicator */}\n <div\n className=\"flex items-center gap-2 mb-3 px-2.5 py-1.5 rounded-lg transition-colors duration-300\"\n style={{ backgroundColor: `${activeAgent.color || '#6dbf47'}12` }}\n >\n <AgentIcon agent={activeAgent} size=\"sm\" />\n <span className=\"text-xs text-slate-500\">\n Chatting with <span className=\"font-semibold\" style={{ color: activeAgent.color || '#6dbf47' }}>{activeAgent.name}</span>\n </span>\n </div>\n\n <div className=\"flex items-end gap-2.5\">\n <textarea\n ref={inputRef}\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n rows={1}\n className={cn(\n 'flex-1 resize-none rounded-xl border border-slate-200 px-4 py-3',\n 'text-sm text-slate-800 placeholder:text-slate-400',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent',\n 'max-h-32'\n )}\n />\n <button\n type=\"button\"\n onClick={handleSend}\n disabled={!inputValue.trim()}\n className={cn(\n 'p-3 rounded-xl transition-all duration-150',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500',\n inputValue.trim()\n ? 'bg-primary-500 text-white hover:bg-primary-600 shadow-sm'\n : 'bg-slate-100 text-slate-300 cursor-not-allowed'\n )}\n >\n <PaperAirplaneIcon className=\"w-4.5 h-4.5\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </>\n )\n}\n"],"names":["defaultAgents","ChartBarSquareIcon","BanknotesIcon","WrenchScrewdriverIcon","DocumentTextIcon","AgentSelector","agents","activeAgent","onChange","jsx","Listbox","jsxs","ListboxButton","cn","AgentIcon","ChevronUpDownIcon","Transition","Fragment","ListboxOptions","agent","ListboxOption","selected","CheckIcon","size","Icon","SparklesIcon","sizeMap","iconSizeMap","AgentPanel","open","onClose","activeAgentId","onAgentChange","messages","onSendMessage","isTyping","placeholder","onNewConversation","width","headerContent","className","inputValue","setInputValue","useState","messagesEndRef","useRef","inputRef","a","widthStyle","useEffect","_a","handleSend","trimmed","handleKeyDown","e","handleAgentChange","formatTime","date","getMessageAgent","msg","TransitionChild","ArrowPathIcon","XMarkIcon","index","msgAgent","prevMsg","showAgentLabel","PaperAirplaneIcon"],"mappings":"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"}
|