@super_studio/ecforce-ai-agent-react 0.1.5 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-frame.d.ts.map +1 -1
- package/dist/chatbot-proivder.d.ts +15 -0
- package/dist/chatbot-proivder.d.ts.map +1 -0
- package/dist/chatbot-sheet.css +104 -0
- package/dist/chatbot-sheet.d.ts +6 -0
- package/dist/chatbot-sheet.d.ts.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +248 -65
- package/dist/index.mjs +258 -75
- package/dist/sheet.d.ts +12 -0
- package/dist/sheet.d.ts.map +1 -0
- package/dist/tooltip.css +18 -0
- package/dist/tooltip.d.ts +21 -0
- package/dist/tooltip.d.ts.map +1 -0
- package/package.json +10 -10
- package/src/agent-frame.tsx +22 -6
- package/src/chatbot-proivder.tsx +51 -0
- package/src/chatbot-sheet.css +104 -0
- package/src/{chatbot-popover.tsx → chatbot-sheet.tsx} +31 -25
- package/src/index.ts +4 -2
- package/src/sheet.tsx +148 -0
- package/src/tooltip.css +18 -0
- package/src/tooltip.tsx +88 -0
- package/dist/chatbot-popover.d.ts +0 -3
- package/dist/chatbot-popover.d.ts.map +0 -1
- package/dist/chatbot.css +0 -166
- package/dist/popover.d.ts +0 -9
- package/dist/popover.d.ts.map +0 -1
- package/src/chatbot.css +0 -166
- package/src/popover.tsx +0 -54
package/dist/index.mjs
CHANGED
|
@@ -31,6 +31,38 @@ var __objRest = (source, exclude) => {
|
|
|
31
31
|
return target;
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
+
// src/chatbot-proivder.tsx
|
|
35
|
+
import React from "react";
|
|
36
|
+
import { jsx } from "react/jsx-runtime";
|
|
37
|
+
var ChatbotContext = React.createContext(
|
|
38
|
+
void 0
|
|
39
|
+
);
|
|
40
|
+
function useChatbot() {
|
|
41
|
+
const context = React.useContext(ChatbotContext);
|
|
42
|
+
if (!context) {
|
|
43
|
+
throw new Error("useChatbot must be used within a ChatbotProvider");
|
|
44
|
+
}
|
|
45
|
+
return context;
|
|
46
|
+
}
|
|
47
|
+
function ChatbotProvider({ children }) {
|
|
48
|
+
const [hasOpened, setHasOpened] = React.useState(false);
|
|
49
|
+
const [open, setOpen] = React.useState(false);
|
|
50
|
+
const [isExpanded, setIsExpanded] = React.useState(false);
|
|
51
|
+
React.useEffect(() => {
|
|
52
|
+
if (open) {
|
|
53
|
+
setHasOpened(true);
|
|
54
|
+
}
|
|
55
|
+
}, [open]);
|
|
56
|
+
const value = {
|
|
57
|
+
hasOpened,
|
|
58
|
+
open,
|
|
59
|
+
setOpen,
|
|
60
|
+
isExpanded,
|
|
61
|
+
setIsExpanded
|
|
62
|
+
};
|
|
63
|
+
return /* @__PURE__ */ jsx(ChatbotContext.Provider, { value, children });
|
|
64
|
+
}
|
|
65
|
+
|
|
34
66
|
// src/agent-frame.tsx
|
|
35
67
|
import {
|
|
36
68
|
forwardRef,
|
|
@@ -45,7 +77,7 @@ import {
|
|
|
45
77
|
var PROD_CHATBOT_URL = "https://ecforce-ai-agent.vercel.app";
|
|
46
78
|
|
|
47
79
|
// src/agent-frame.tsx
|
|
48
|
-
import { jsx } from "react/jsx-runtime";
|
|
80
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
49
81
|
var AgentFrame = forwardRef(
|
|
50
82
|
({ agentId, mcps = [], appName, className, url }, ref) => {
|
|
51
83
|
var _a;
|
|
@@ -54,6 +86,7 @@ var AgentFrame = forwardRef(
|
|
|
54
86
|
const [isReady, setIsReady] = useState(false);
|
|
55
87
|
const [hasInitialized, setHasInitialized] = useState(false);
|
|
56
88
|
const [currentMcps, setCurrentMcps] = useState(mcps);
|
|
89
|
+
const { setIsExpanded, setOpen } = useChatbot();
|
|
57
90
|
const postMessage = useCallback((message) => {
|
|
58
91
|
var _a2;
|
|
59
92
|
if ((_a2 = iframeRef.current) == null ? void 0 : _a2.contentWindow) {
|
|
@@ -101,8 +134,19 @@ var AgentFrame = forwardRef(
|
|
|
101
134
|
if (process.env.NODE_ENV === "development") {
|
|
102
135
|
console.log("iframe message", event.data);
|
|
103
136
|
}
|
|
104
|
-
|
|
105
|
-
|
|
137
|
+
switch ((_a2 = event.data) == null ? void 0 : _a2.type) {
|
|
138
|
+
case "CHATBOT_READY":
|
|
139
|
+
setIsReady(true);
|
|
140
|
+
break;
|
|
141
|
+
case "CLOSE_CHATBOT":
|
|
142
|
+
setOpen(false);
|
|
143
|
+
break;
|
|
144
|
+
case "EXPAND_CHATBOT":
|
|
145
|
+
setIsExpanded(true);
|
|
146
|
+
break;
|
|
147
|
+
case "SHRINK_CHATBOT":
|
|
148
|
+
setIsExpanded(false);
|
|
149
|
+
break;
|
|
106
150
|
}
|
|
107
151
|
};
|
|
108
152
|
const handleIframeLoad = () => {
|
|
@@ -129,7 +173,7 @@ var AgentFrame = forwardRef(
|
|
|
129
173
|
setMcps(mcps);
|
|
130
174
|
}
|
|
131
175
|
}, [setMcps, mcps, currentMcps]);
|
|
132
|
-
return /* @__PURE__ */
|
|
176
|
+
return /* @__PURE__ */ jsx2(
|
|
133
177
|
"iframe",
|
|
134
178
|
{
|
|
135
179
|
ref: iframeRef,
|
|
@@ -146,93 +190,224 @@ var AgentFrame = forwardRef(
|
|
|
146
190
|
);
|
|
147
191
|
AgentFrame.displayName = "AgentFrame";
|
|
148
192
|
|
|
149
|
-
// src/chatbot-
|
|
150
|
-
import { forwardRef as forwardRef3
|
|
193
|
+
// src/chatbot-sheet.tsx
|
|
194
|
+
import { forwardRef as forwardRef3 } from "react";
|
|
151
195
|
|
|
152
|
-
// src/
|
|
153
|
-
import * as
|
|
154
|
-
import * as
|
|
155
|
-
import { jsx as
|
|
156
|
-
|
|
157
|
-
var
|
|
196
|
+
// src/sheet.tsx
|
|
197
|
+
import * as SheetPrimitive from "@radix-ui/react-dialog";
|
|
198
|
+
import * as React2 from "react";
|
|
199
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
200
|
+
function Sheet(_a) {
|
|
201
|
+
var props = __objRest(_a, []);
|
|
202
|
+
const { open, setOpen } = useChatbot();
|
|
203
|
+
return /* @__PURE__ */ jsx3(
|
|
204
|
+
SheetPrimitive.Root,
|
|
205
|
+
__spreadValues({
|
|
206
|
+
"data-slot": "sheet",
|
|
207
|
+
modal: false,
|
|
208
|
+
open,
|
|
209
|
+
onOpenChange: setOpen
|
|
210
|
+
}, props)
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
var SheetTrigger = React2.forwardRef((_a, ref) => {
|
|
158
214
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
159
|
-
return /* @__PURE__ */
|
|
160
|
-
|
|
215
|
+
return /* @__PURE__ */ jsx3(
|
|
216
|
+
SheetPrimitive.Trigger,
|
|
161
217
|
__spreadValues({
|
|
162
218
|
ref,
|
|
163
|
-
|
|
219
|
+
"data-slot": "sheet-trigger",
|
|
220
|
+
className: `chatbot-trigger ${className || ""}`
|
|
164
221
|
}, props)
|
|
165
222
|
);
|
|
166
223
|
});
|
|
167
|
-
|
|
168
|
-
var
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
224
|
+
SheetTrigger.displayName = SheetPrimitive.Trigger.displayName;
|
|
225
|
+
var SheetClose = React2.forwardRef((_a, ref) => {
|
|
226
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
227
|
+
return /* @__PURE__ */ jsx3(
|
|
228
|
+
SheetPrimitive.Close,
|
|
229
|
+
__spreadValues({
|
|
230
|
+
ref,
|
|
231
|
+
"data-slot": "sheet-close",
|
|
232
|
+
className: `chatbot-sheet-close ${className || ""}`
|
|
233
|
+
}, props)
|
|
234
|
+
);
|
|
235
|
+
});
|
|
236
|
+
SheetClose.displayName = SheetPrimitive.Close.displayName;
|
|
237
|
+
function SheetPortal(_a) {
|
|
238
|
+
var props = __objRest(_a, []);
|
|
239
|
+
return /* @__PURE__ */ jsx3(SheetPrimitive.Portal, __spreadValues({ "data-slot": "sheet-portal" }, props));
|
|
240
|
+
}
|
|
241
|
+
var SheetContent = React2.forwardRef((_a, ref) => {
|
|
242
|
+
var _b = _a, { className, children, style } = _b, props = __objRest(_b, ["className", "children", "style"]);
|
|
243
|
+
const { isExpanded, open, hasOpened } = useChatbot();
|
|
244
|
+
const width = isExpanded ? "848px" : "400px";
|
|
245
|
+
const translateX = open ? "0" : "100%";
|
|
246
|
+
const contentStyle = __spreadValues({
|
|
247
|
+
"--sheet-width": width,
|
|
248
|
+
transform: `translateX(${translateX})`
|
|
249
|
+
}, style);
|
|
250
|
+
return /* @__PURE__ */ jsx3(SheetPortal, { forceMount: hasOpened || void 0, children: /* @__PURE__ */ jsx3(
|
|
251
|
+
SheetPrimitive.Content,
|
|
252
|
+
__spreadProps(__spreadValues({
|
|
253
|
+
ref,
|
|
254
|
+
"data-slot": "sheet-content",
|
|
255
|
+
forceMount: hasOpened || void 0,
|
|
256
|
+
onInteractOutside: (e) => e.preventDefault(),
|
|
257
|
+
className: `chatbot-sheet-content ${isExpanded ? "chatbot-sheet-expanded" : ""} ${className || ""}`,
|
|
258
|
+
style: contentStyle
|
|
259
|
+
}, props), {
|
|
260
|
+
children
|
|
261
|
+
})
|
|
262
|
+
) });
|
|
263
|
+
});
|
|
264
|
+
SheetContent.displayName = SheetPrimitive.Content.displayName;
|
|
265
|
+
var SheetHeader = React2.forwardRef((_a, ref) => {
|
|
266
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
267
|
+
return /* @__PURE__ */ jsx3(
|
|
268
|
+
"div",
|
|
269
|
+
__spreadValues({
|
|
270
|
+
ref,
|
|
271
|
+
"data-slot": "sheet-header",
|
|
272
|
+
className: `chatbot-sheet-header ${className || ""}`
|
|
273
|
+
}, props)
|
|
274
|
+
);
|
|
275
|
+
});
|
|
276
|
+
SheetHeader.displayName = "SheetHeader";
|
|
277
|
+
var SheetFooter = React2.forwardRef((_a, ref) => {
|
|
278
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
279
|
+
return /* @__PURE__ */ jsx3(
|
|
280
|
+
"div",
|
|
281
|
+
__spreadValues({
|
|
282
|
+
ref,
|
|
283
|
+
"data-slot": "sheet-footer",
|
|
284
|
+
className: `chatbot-sheet-footer ${className || ""}`
|
|
285
|
+
}, props)
|
|
286
|
+
);
|
|
287
|
+
});
|
|
288
|
+
SheetFooter.displayName = "SheetFooter";
|
|
289
|
+
var SheetTitle = React2.forwardRef((_a, ref) => {
|
|
290
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
291
|
+
return /* @__PURE__ */ jsx3(
|
|
292
|
+
SheetPrimitive.Title,
|
|
293
|
+
__spreadValues({
|
|
294
|
+
ref,
|
|
295
|
+
"data-slot": "sheet-title",
|
|
296
|
+
className: `chatbot-sheet-title ${className || ""}`
|
|
297
|
+
}, props)
|
|
298
|
+
);
|
|
299
|
+
});
|
|
300
|
+
SheetTitle.displayName = SheetPrimitive.Title.displayName;
|
|
301
|
+
var SheetDescription = React2.forwardRef((_a, ref) => {
|
|
302
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
303
|
+
return /* @__PURE__ */ jsx3(
|
|
304
|
+
SheetPrimitive.Description,
|
|
305
|
+
__spreadValues({
|
|
306
|
+
ref,
|
|
307
|
+
"data-slot": "sheet-description",
|
|
308
|
+
className: `chatbot-sheet-description ${className || ""}`
|
|
309
|
+
}, props)
|
|
310
|
+
);
|
|
311
|
+
});
|
|
312
|
+
SheetDescription.displayName = SheetPrimitive.Description.displayName;
|
|
199
313
|
|
|
200
|
-
// src/
|
|
201
|
-
import {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
314
|
+
// src/tooltip.tsx
|
|
315
|
+
import {
|
|
316
|
+
Arrow,
|
|
317
|
+
Content as Content2,
|
|
318
|
+
Portal as Portal2,
|
|
319
|
+
Provider,
|
|
320
|
+
Root as Root2,
|
|
321
|
+
Trigger as Trigger2
|
|
322
|
+
} from "@radix-ui/react-tooltip";
|
|
323
|
+
import "./tooltip.css";
|
|
324
|
+
import { jsx as jsx4, jsxs } from "react/jsx-runtime";
|
|
325
|
+
function Tooltip({
|
|
326
|
+
content,
|
|
327
|
+
trigger,
|
|
328
|
+
side,
|
|
329
|
+
align,
|
|
330
|
+
disabled,
|
|
331
|
+
delayDuration,
|
|
332
|
+
skipDelayDuration,
|
|
333
|
+
className,
|
|
334
|
+
open,
|
|
335
|
+
alignOffset,
|
|
336
|
+
sideOffset,
|
|
337
|
+
arrowClassName,
|
|
338
|
+
keepTooltipOpen
|
|
339
|
+
}) {
|
|
340
|
+
return /* @__PURE__ */ jsx4(
|
|
341
|
+
Provider,
|
|
342
|
+
{
|
|
343
|
+
delayDuration: delayDuration != null ? delayDuration : 200,
|
|
344
|
+
skipDelayDuration: skipDelayDuration != null ? skipDelayDuration : 200,
|
|
345
|
+
children: /* @__PURE__ */ jsxs(Root2, { open: disabled ? false : open, children: [
|
|
346
|
+
/* @__PURE__ */ jsx4(
|
|
347
|
+
Trigger2,
|
|
348
|
+
{
|
|
349
|
+
onClick: keepTooltipOpen ? (event) => {
|
|
350
|
+
event.preventDefault();
|
|
351
|
+
} : void 0,
|
|
352
|
+
asChild: true,
|
|
353
|
+
children: trigger
|
|
354
|
+
}
|
|
355
|
+
),
|
|
356
|
+
/* @__PURE__ */ jsx4(Portal2, { children: /* @__PURE__ */ jsxs(
|
|
357
|
+
Content2,
|
|
358
|
+
{
|
|
359
|
+
className: `tooltip-content ${className || ""}`,
|
|
360
|
+
side,
|
|
361
|
+
align,
|
|
362
|
+
alignOffset,
|
|
363
|
+
sideOffset,
|
|
364
|
+
onPointerDownOutside: keepTooltipOpen ? (event) => {
|
|
365
|
+
event.preventDefault();
|
|
366
|
+
} : void 0,
|
|
367
|
+
children: [
|
|
368
|
+
/* @__PURE__ */ jsx4(Arrow, { className: arrowClassName }),
|
|
369
|
+
content
|
|
370
|
+
]
|
|
371
|
+
}
|
|
372
|
+
) })
|
|
373
|
+
] })
|
|
374
|
+
}
|
|
375
|
+
);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// src/chatbot-sheet.tsx
|
|
379
|
+
import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
380
|
+
var ChatbotSheet = forwardRef3(
|
|
381
|
+
(_a, ref) => {
|
|
382
|
+
var _b = _a, { sheetStyle } = _b, props = __objRest(_b, ["sheetStyle"]);
|
|
383
|
+
return /* @__PURE__ */ jsxs2(Sheet, { children: [
|
|
384
|
+
/* @__PURE__ */ jsx5(
|
|
385
|
+
Tooltip,
|
|
216
386
|
{
|
|
387
|
+
side: "top",
|
|
217
388
|
align: "end",
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
children: /* @__PURE__ */ jsx3(AgentFrame, __spreadProps(__spreadValues({}, props), { ref }))
|
|
389
|
+
content: "AI\u306B\u8CEA\u554F\u3057\u3066\u307F\u307E\u3057\u3087\u3046",
|
|
390
|
+
trigger: /* @__PURE__ */ jsx5(SheetTrigger, { children: /* @__PURE__ */ jsx5(EcforceAiIcon, {}) })
|
|
221
391
|
}
|
|
222
|
-
)
|
|
392
|
+
),
|
|
393
|
+
/* @__PURE__ */ jsxs2(SheetContent, { style: sheetStyle, children: [
|
|
394
|
+
/* @__PURE__ */ jsx5(SheetTitle, { children: "AI\u306B\u8CEA\u554F\u3057\u3066\u307F\u307E\u3057\u3087\u3046" }),
|
|
395
|
+
/* @__PURE__ */ jsx5(SheetDescription, { children: "AI\u306B\u8CEA\u554F\u3057\u3066\u307F\u307E\u3057\u3087\u3046" }),
|
|
396
|
+
/* @__PURE__ */ jsx5(AgentFrame, __spreadProps(__spreadValues({}, props), { ref }))
|
|
397
|
+
] })
|
|
223
398
|
] });
|
|
224
399
|
}
|
|
225
400
|
);
|
|
226
401
|
function EcforceAiIcon() {
|
|
227
|
-
return /* @__PURE__ */
|
|
402
|
+
return /* @__PURE__ */ jsx5(
|
|
228
403
|
"svg",
|
|
229
404
|
{
|
|
230
|
-
width: "
|
|
231
|
-
height: "
|
|
405
|
+
width: "18",
|
|
406
|
+
height: "18",
|
|
232
407
|
viewBox: "0 0 24 24",
|
|
233
408
|
xmlns: "http://www.w3.org/2000/svg",
|
|
234
409
|
fill: "currentColor",
|
|
235
|
-
children: /* @__PURE__ */
|
|
410
|
+
children: /* @__PURE__ */ jsx5(
|
|
236
411
|
"path",
|
|
237
412
|
{
|
|
238
413
|
fillRule: "evenodd",
|
|
@@ -245,8 +420,16 @@ function EcforceAiIcon() {
|
|
|
245
420
|
}
|
|
246
421
|
export {
|
|
247
422
|
AgentFrame,
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
423
|
+
ChatbotProvider,
|
|
424
|
+
ChatbotSheet,
|
|
425
|
+
Sheet,
|
|
426
|
+
SheetClose,
|
|
427
|
+
SheetContent,
|
|
428
|
+
SheetDescription,
|
|
429
|
+
SheetFooter,
|
|
430
|
+
SheetHeader,
|
|
431
|
+
SheetTitle,
|
|
432
|
+
SheetTrigger,
|
|
433
|
+
Tooltip,
|
|
434
|
+
useChatbot
|
|
252
435
|
};
|
package/dist/sheet.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as SheetPrimitive from "@radix-ui/react-dialog";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
declare function Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
declare const SheetTrigger: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
5
|
+
declare const SheetClose: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
6
|
+
declare const SheetContent: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
7
|
+
declare const SheetHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
8
|
+
declare const SheetFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
9
|
+
declare const SheetTitle: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
|
|
10
|
+
declare const SheetDescription: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
|
|
11
|
+
export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, };
|
|
12
|
+
//# sourceMappingURL=sheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../src/sheet.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,iBAAS,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,2CAW5E;AAED,QAAA,MAAM,YAAY,mKAUhB,CAAC;AAGH,QAAA,MAAM,UAAU,iKAUd,CAAC;AASH,QAAA,MAAM,YAAY,6JAgChB,CAAC;AAGH,QAAA,MAAM,WAAW,6GAUf,CAAC;AAGH,QAAA,MAAM,WAAW,6GAUf,CAAC;AAGH,QAAA,MAAM,UAAU,mKAUd,CAAC;AAGH,QAAA,MAAM,gBAAgB,6KAUpB,CAAC;AAGH,OAAO,EACL,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,CAAC"}
|
package/dist/tooltip.css
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* Tooltip Content */
|
|
2
|
+
.tooltip-content {
|
|
3
|
+
background-color: #1f2937;
|
|
4
|
+
z-index: 50;
|
|
5
|
+
max-width: 320px;
|
|
6
|
+
border-radius: 0.125rem;
|
|
7
|
+
padding: 0.5rem;
|
|
8
|
+
font-size: 0.625rem;
|
|
9
|
+
font-weight: 400;
|
|
10
|
+
line-height: 1.25;
|
|
11
|
+
color: #ffffff;
|
|
12
|
+
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Arrow styling can be customized via arrowClassName prop */
|
|
16
|
+
.tooltip-arrow {
|
|
17
|
+
fill: #1f2937;
|
|
18
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import "./tooltip.css";
|
|
2
|
+
type Side = "top" | "right" | "bottom" | "left";
|
|
3
|
+
type Align = "start" | "center" | "end";
|
|
4
|
+
type TooltipProps = {
|
|
5
|
+
content: React.ReactNode;
|
|
6
|
+
side?: Side;
|
|
7
|
+
align?: Align;
|
|
8
|
+
trigger: React.ReactNode;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
delayDuration?: number;
|
|
11
|
+
skipDelayDuration?: number;
|
|
12
|
+
className?: string;
|
|
13
|
+
open?: boolean;
|
|
14
|
+
alignOffset?: number;
|
|
15
|
+
sideOffset?: number;
|
|
16
|
+
arrowClassName?: string;
|
|
17
|
+
keepTooltipOpen?: boolean;
|
|
18
|
+
};
|
|
19
|
+
export declare function Tooltip({ content, trigger, side, align, disabled, delayDuration, skipDelayDuration, className, open, alignOffset, sideOffset, arrowClassName, keepTooltipOpen, }: TooltipProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=tooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../src/tooltip.tsx"],"names":[],"mappings":"AAUA,OAAO,eAAe,CAAC;AAEvB,KAAK,IAAI,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAChD,KAAK,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAExC,KAAK,YAAY,GAAG;IAClB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,wBAAgB,OAAO,CAAC,EACtB,OAAO,EACP,OAAO,EACP,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,IAAI,EACJ,WAAW,EACX,UAAU,EACV,cAAc,EACd,eAAe,GAChB,EAAE,YAAY,2CA0Cd"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@super_studio/ecforce-ai-agent-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "dist/index.mjs",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"sideEffects": false,
|
|
8
|
-
"scripts": {
|
|
9
|
-
"dev": "npm-run-all --parallel dev:main dev:types",
|
|
10
|
-
"dev:main": "tsup --watch",
|
|
11
|
-
"dev:types": "tsc -p tsconfig.build.json --watch",
|
|
12
|
-
"build": "tsup && tsc -p tsconfig.build.json",
|
|
13
|
-
"prepublishOnly": "pnpm build"
|
|
14
|
-
},
|
|
15
8
|
"files": [
|
|
16
9
|
"dist",
|
|
17
10
|
"src/**/*.ts",
|
|
@@ -24,13 +17,14 @@
|
|
|
24
17
|
"require": "./dist/index.js",
|
|
25
18
|
"default": "./dist/index.js"
|
|
26
19
|
},
|
|
27
|
-
"./chatbot.css": "./dist/chatbot.css"
|
|
20
|
+
"./chatbot-sheet.css": "./dist/chatbot-sheet.css"
|
|
28
21
|
},
|
|
29
22
|
"publishConfig": {
|
|
30
23
|
"access": "public"
|
|
31
24
|
},
|
|
32
25
|
"dependencies": {
|
|
33
|
-
"@radix-ui/react-
|
|
26
|
+
"@radix-ui/react-dialog": "1.1.14",
|
|
27
|
+
"@radix-ui/react-tooltip": "1.2.7"
|
|
34
28
|
},
|
|
35
29
|
"peerDependencies": {
|
|
36
30
|
"react": ">=16",
|
|
@@ -44,5 +38,11 @@
|
|
|
44
38
|
"react": "19.1.0",
|
|
45
39
|
"react-dom": "19.1.0",
|
|
46
40
|
"tsup": "8.5.0"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"dev": "npm-run-all --parallel dev:main dev:types",
|
|
44
|
+
"dev:main": "tsup --watch",
|
|
45
|
+
"dev:types": "tsc -p tsconfig.build.json --watch",
|
|
46
|
+
"build": "tsup && tsc -p tsconfig.build.json"
|
|
47
47
|
}
|
|
48
48
|
}
|
package/src/agent-frame.tsx
CHANGED
|
@@ -6,11 +6,14 @@ import {
|
|
|
6
6
|
useRef,
|
|
7
7
|
useState,
|
|
8
8
|
} from "react";
|
|
9
|
+
import { useChatbot } from "./chatbot-proivder";
|
|
9
10
|
import { PROD_CHATBOT_URL } from "./constants";
|
|
10
11
|
|
|
11
|
-
type IframeMessage =
|
|
12
|
-
type: "CHATBOT_READY"
|
|
13
|
-
}
|
|
12
|
+
type IframeMessage =
|
|
13
|
+
| { type: "CHATBOT_READY" }
|
|
14
|
+
| { type: "CLOSE_CHATBOT" }
|
|
15
|
+
| { type: "EXPAND_CHATBOT" }
|
|
16
|
+
| { type: "SHRINK_CHATBOT" };
|
|
14
17
|
|
|
15
18
|
type MCP = {
|
|
16
19
|
name: string;
|
|
@@ -68,6 +71,7 @@ export const AgentFrame = forwardRef<AgentElement, AgentFrameProps>(
|
|
|
68
71
|
const [isReady, setIsReady] = useState(false);
|
|
69
72
|
const [hasInitialized, setHasInitialized] = useState(false);
|
|
70
73
|
const [currentMcps, setCurrentMcps] = useState<MCP[]>(mcps);
|
|
74
|
+
const { setIsExpanded, setOpen } = useChatbot();
|
|
71
75
|
|
|
72
76
|
// helper to post message to the iframe
|
|
73
77
|
const postMessage = useCallback((message: ParentMessage) => {
|
|
@@ -124,9 +128,21 @@ export const AgentFrame = forwardRef<AgentElement, AgentFrameProps>(
|
|
|
124
128
|
if (process.env.NODE_ENV === "development") {
|
|
125
129
|
console.log("iframe message", event.data);
|
|
126
130
|
}
|
|
127
|
-
//
|
|
128
|
-
|
|
129
|
-
|
|
131
|
+
// Handle iframe messages
|
|
132
|
+
switch (event.data?.type) {
|
|
133
|
+
case "CHATBOT_READY":
|
|
134
|
+
// When the iframe is ready, set isReady flag to kick off the initialization
|
|
135
|
+
setIsReady(true);
|
|
136
|
+
break;
|
|
137
|
+
case "CLOSE_CHATBOT":
|
|
138
|
+
setOpen(false);
|
|
139
|
+
break;
|
|
140
|
+
case "EXPAND_CHATBOT":
|
|
141
|
+
setIsExpanded(true);
|
|
142
|
+
break;
|
|
143
|
+
case "SHRINK_CHATBOT":
|
|
144
|
+
setIsExpanded(false);
|
|
145
|
+
break;
|
|
130
146
|
}
|
|
131
147
|
};
|
|
132
148
|
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import React from "react";
|
|
4
|
+
|
|
5
|
+
interface ChatbotContextType {
|
|
6
|
+
hasOpened: boolean;
|
|
7
|
+
open: boolean;
|
|
8
|
+
setOpen: (open: boolean) => void;
|
|
9
|
+
isExpanded: boolean;
|
|
10
|
+
setIsExpanded: (expanded: boolean) => void;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const ChatbotContext = React.createContext<ChatbotContextType | undefined>(
|
|
14
|
+
undefined,
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
export function useChatbot() {
|
|
18
|
+
const context = React.useContext(ChatbotContext);
|
|
19
|
+
if (!context) {
|
|
20
|
+
throw new Error("useChatbot must be used within a ChatbotProvider");
|
|
21
|
+
}
|
|
22
|
+
return context;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
interface ChatbotProviderProps {
|
|
26
|
+
children: React.ReactNode;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function ChatbotProvider({ children }: ChatbotProviderProps) {
|
|
30
|
+
const [hasOpened, setHasOpened] = React.useState(false);
|
|
31
|
+
const [open, setOpen] = React.useState(false);
|
|
32
|
+
const [isExpanded, setIsExpanded] = React.useState(false);
|
|
33
|
+
|
|
34
|
+
React.useEffect(() => {
|
|
35
|
+
if (open) {
|
|
36
|
+
setHasOpened(true);
|
|
37
|
+
}
|
|
38
|
+
}, [open]);
|
|
39
|
+
|
|
40
|
+
const value = {
|
|
41
|
+
hasOpened,
|
|
42
|
+
open,
|
|
43
|
+
setOpen,
|
|
44
|
+
isExpanded,
|
|
45
|
+
setIsExpanded,
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<ChatbotContext.Provider value={value}>{children}</ChatbotContext.Provider>
|
|
50
|
+
);
|
|
51
|
+
}
|