@super_studio/ecforce-ai-agent-react 0.3.1 → 0.5.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.
Files changed (45) hide show
  1. package/dist/components/chatbot-frame.d.ts +25 -0
  2. package/dist/components/chatbot-frame.d.ts.map +1 -0
  3. package/dist/components/chatbot-sheet.d.ts +8 -0
  4. package/dist/components/chatbot-sheet.d.ts.map +1 -0
  5. package/dist/components/provider/chatbot-proivder.d.ts +36 -0
  6. package/dist/components/provider/chatbot-proivder.d.ts.map +1 -0
  7. package/dist/components/provider/use-chatbot-frame-handler.d.ts +44 -0
  8. package/dist/components/provider/use-chatbot-frame-handler.d.ts.map +1 -0
  9. package/dist/components/provider/use-chatbot-window-states.d.ts +9 -0
  10. package/dist/components/provider/use-chatbot-window-states.d.ts.map +1 -0
  11. package/dist/components/sheet.d.ts.map +1 -0
  12. package/dist/components/tooltip.d.ts.map +1 -0
  13. package/dist/index.d.ts +5 -5
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +197 -167
  16. package/dist/index.mjs +198 -168
  17. package/dist/lib/constants.d.ts.map +1 -0
  18. package/package.json +3 -3
  19. package/src/components/chatbot-frame.tsx +86 -0
  20. package/src/{chatbot-sheet.tsx → components/chatbot-sheet.tsx} +25 -31
  21. package/src/components/provider/chatbot-proivder.tsx +79 -0
  22. package/src/components/provider/use-chatbot-frame-handler.tsx +130 -0
  23. package/src/components/provider/use-chatbot-window-states.tsx +15 -0
  24. package/src/{sheet.tsx → components/sheet.tsx} +1 -3
  25. package/src/{tooltip.tsx → components/tooltip.tsx} +0 -2
  26. package/src/index.ts +5 -5
  27. package/dist/agent-frame.d.ts +0 -32
  28. package/dist/agent-frame.d.ts.map +0 -1
  29. package/dist/chatbot-proivder.d.ts +0 -15
  30. package/dist/chatbot-proivder.d.ts.map +0 -1
  31. package/dist/chatbot-sheet.d.ts +0 -6
  32. package/dist/chatbot-sheet.d.ts.map +0 -1
  33. package/dist/constants.d.ts.map +0 -1
  34. package/dist/sheet.d.ts.map +0 -1
  35. package/dist/tooltip.d.ts.map +0 -1
  36. package/src/agent-frame.tsx +0 -196
  37. package/src/chatbot-proivder.tsx +0 -51
  38. /package/dist/{sheet.d.ts → components/sheet.d.ts} +0 -0
  39. /package/dist/{tooltip.d.ts → components/tooltip.d.ts} +0 -0
  40. /package/dist/{constants.d.ts → lib/constants.d.ts} +0 -0
  41. /package/dist/{chatbot-sheet.css → styles/chatbot-sheet.css} +0 -0
  42. /package/dist/{preset.css → styles/preset.css} +0 -0
  43. /package/src/{constants.ts → lib/constants.ts} +0 -0
  44. /package/src/{chatbot-sheet.css → styles/chatbot-sheet.css} +0 -0
  45. /package/src/{preset.css → styles/preset.css} +0 -0
@@ -0,0 +1,25 @@
1
+ import type { MCP } from "./provider/use-chatbot-frame-handler";
2
+ export type ChatbotFrameProps = {
3
+ /** 管理画面上のエージェントID */
4
+ agentId: string;
5
+ /** エージェントにつなげるMCPの情報 */
6
+ mcps?: MCP[];
7
+ /** アプリ名のメタデータ */
8
+ appName?: string;
9
+ /**
10
+ * trueになるまで、初期化されません。
11
+ * 初期化せれたあとはもう使われません。
12
+ * @default true
13
+ */
14
+ enabled?: boolean;
15
+ /**
16
+ * エージェントのURLを上書きしたい場合にこちらを使います。
17
+ * 基本的には使われません。
18
+ * [CHATBOT_URL]の環境変数でも設定可能。
19
+ * @internal
20
+ */
21
+ url?: string;
22
+ className?: string;
23
+ };
24
+ export declare function ChatbotFrame({ agentId, appName, mcps, enabled, url, className, }: ChatbotFrameProps): import("react/jsx-runtime").JSX.Element;
25
+ //# sourceMappingURL=chatbot-frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-frame.d.ts","sourceRoot":"","sources":["../../src/components/chatbot-frame.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,sCAAsC,CAAC;AAEhE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,iBAAiB;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,OAAO,EACP,IAAI,EACJ,OAAc,EACd,GAAG,EACH,SAAS,GACV,EAAE,iBAAiB,2CAkDnB"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import { type ChatbotFrameProps } from "./chatbot-frame";
3
+ type ChatbotSheetProps = ChatbotFrameProps & {
4
+ sheetStyle?: React.CSSProperties;
5
+ };
6
+ export declare function ChatbotSheet({ sheetStyle, ...props }: ChatbotSheetProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=chatbot-sheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-sheet.d.ts","sourceRoot":"","sources":["../../src/components/chatbot-sheet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAUvE,KAAK,iBAAiB,GAAG,iBAAiB,GAAG;IAC3C,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAClC,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,2CAoBvE"}
@@ -0,0 +1,36 @@
1
+ import React from "react";
2
+ import { type InitProps, type MCP } from "./use-chatbot-frame-handler";
3
+ type ChatbotContextType = {
4
+ /** 1回チャットボットを開いたら、固定でtrueになる */
5
+ hasOpened: boolean;
6
+ /** チャットボットを開いているか */
7
+ open: boolean;
8
+ /** チャットボットを開く */
9
+ setOpen: (open: boolean) => void;
10
+ /** チャットボットを展開しているか */
11
+ isExpanded: boolean;
12
+ /** チャットボットを展開する */
13
+ setIsExpanded: (expanded: boolean) => void;
14
+ /** チャットボットを初期化 */
15
+ init: (props: InitProps) => void;
16
+ /** MCPを設定 */
17
+ setMcps: (mcps: MCP[]) => void;
18
+ /** アプリ名を設定 */
19
+ setAppName: (appName: string) => void;
20
+ /** チャットボットが準備できたか */
21
+ isReady: boolean;
22
+ /** チャットボットが初期化されたか */
23
+ isInitialized: boolean;
24
+ /**
25
+ * @internal
26
+ * チャットボットのiframe要素を設定
27
+ */
28
+ setIframeEl: (iframeEl: HTMLIFrameElement | null) => void;
29
+ };
30
+ export declare function useChatbot(): ChatbotContextType;
31
+ type ChatbotProviderProps = {
32
+ children: React.ReactNode;
33
+ };
34
+ export declare function ChatbotProvider({ children }: ChatbotProviderProps): import("react/jsx-runtime").JSX.Element;
35
+ export {};
36
+ //# sourceMappingURL=chatbot-proivder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot-proivder.d.ts","sourceRoot":"","sources":["../../../src/components/provider/chatbot-proivder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,GAAG,EACT,MAAM,6BAA6B,CAAC;AAGrC,KAAK,kBAAkB,GAAG;IACxB,gCAAgC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,iBAAiB;IACjB,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,sBAAsB;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,mBAAmB;IACnB,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,kBAAkB;IAClB,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACjC,aAAa;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAC/B,cAAc;IACd,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,qBAAqB;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,WAAW,EAAE,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC;CAC3D,CAAC;AAMF,wBAAgB,UAAU,uBAMzB;AAED,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CA0BjE"}
@@ -0,0 +1,44 @@
1
+ import React from "react";
2
+ export type IframeMessage = {
3
+ type: "CHATBOT_READY";
4
+ } | {
5
+ type: "CHATBOT_INITIALIZED";
6
+ } | {
7
+ type: "CLOSE_CHATBOT";
8
+ } | {
9
+ type: "EXPAND_CHATBOT";
10
+ } | {
11
+ type: "SHRINK_CHATBOT";
12
+ };
13
+ export type MCP = {
14
+ name: string;
15
+ url: string;
16
+ headers?: Record<string, string>;
17
+ };
18
+ export type InitProps = {
19
+ mcps?: MCP[];
20
+ appName?: string;
21
+ };
22
+ export type ParentMessage = {
23
+ type: "mcps";
24
+ mcps: MCP[];
25
+ } | {
26
+ type: "appName";
27
+ appName: string;
28
+ } | {
29
+ type: "init";
30
+ mcps?: MCP[];
31
+ appName?: string;
32
+ };
33
+ export declare function useChatbotFrameHandler({ setOpen, setIsExpanded, }: {
34
+ setOpen: (open: boolean) => void;
35
+ setIsExpanded: (expanded: boolean) => void;
36
+ }): {
37
+ init: (props: InitProps) => void;
38
+ setMcps: (mcps: MCP[]) => void;
39
+ setAppName: (appName: string) => void;
40
+ setIframeEl: React.Dispatch<React.SetStateAction<HTMLIFrameElement | null>>;
41
+ isReady: boolean;
42
+ isInitialized: boolean;
43
+ };
44
+ //# sourceMappingURL=use-chatbot-frame-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-chatbot-frame-handler.d.ts","sourceRoot":"","sources":["../../../src/components/provider/use-chatbot-frame-handler.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE/B,MAAM,MAAM,GAAG,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GACrB;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;CACb,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEN,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,aAAa,GACd,EAAE;IACD,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;kBAqBW,SAAS;oBAUV,GAAG,EAAE;0BAOF,MAAM;;;;EAkDnB"}
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ export declare function useChatbotWindowStates(): {
3
+ hasOpened: boolean;
4
+ open: boolean;
5
+ isExpanded: boolean;
6
+ setOpen: React.Dispatch<React.SetStateAction<boolean>>;
7
+ setIsExpanded: React.Dispatch<React.SetStateAction<boolean>>;
8
+ };
9
+ //# sourceMappingURL=use-chatbot-window-states.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-chatbot-window-states.d.ts","sourceRoot":"","sources":["../../../src/components/provider/use-chatbot-window-states.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,wBAAgB,sBAAsB;;;;;;EAYrC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../src/components/sheet.tsx"],"names":[],"mappings":"AAAA,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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../src/components/tooltip.tsx"],"names":[],"mappings":"AASA,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/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export * from "./chatbot-proivder";
2
- export * from "./agent-frame";
3
- export * from "./chatbot-sheet";
4
- export * from "./sheet";
5
- export * from "./tooltip";
1
+ export * from "./components/provider/chatbot-proivder";
2
+ export * from "./components/chatbot-frame";
3
+ export * from "./components/chatbot-sheet";
4
+ export * from "./components/sheet";
5
+ export * from "./components/tooltip";
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -31,169 +31,201 @@ var __objRest = (source, exclude) => {
31
31
  return target;
32
32
  };
33
33
 
34
- // src/chatbot-proivder.tsx
35
- var _react = require('react'); var React2 = _interopRequireWildcard(_react);
34
+ // src/components/provider/chatbot-proivder.tsx
35
+ var _react = require('react'); var React5 = _interopRequireWildcard(_react);
36
+
37
+ // src/components/provider/use-chatbot-frame-handler.tsx
38
+
39
+ function useChatbotFrameHandler({
40
+ setOpen,
41
+ setIsExpanded
42
+ }) {
43
+ const [iframeEl, setIframeEl] = React5.default.useState(
44
+ null
45
+ );
46
+ const [isReady, setIsReady] = React5.default.useState(false);
47
+ const [isInitialized, setIsInitialized] = React5.default.useState(false);
48
+ const postMessage = React5.default.useCallback(
49
+ (message) => {
50
+ if (iframeEl == null ? void 0 : iframeEl.contentWindow) {
51
+ if (process.env.NODE_ENV === "development") {
52
+ console.log("sending message to iframe", message);
53
+ }
54
+ iframeEl.contentWindow.postMessage(message, "*");
55
+ }
56
+ },
57
+ [iframeEl]
58
+ );
59
+ const init = React5.default.useCallback(
60
+ (props) => {
61
+ postMessage(__spreadValues({
62
+ type: "init"
63
+ }, props));
64
+ },
65
+ [postMessage]
66
+ );
67
+ const setMcps = React5.default.useCallback(
68
+ (mcps) => {
69
+ postMessage({ type: "mcps", mcps });
70
+ },
71
+ [postMessage]
72
+ );
73
+ const setAppName = React5.default.useCallback(
74
+ (appName) => {
75
+ postMessage({ type: "appName", appName });
76
+ },
77
+ [postMessage]
78
+ );
79
+ React5.default.useEffect(() => {
80
+ const iframe = iframeEl;
81
+ if (!iframe) {
82
+ return;
83
+ }
84
+ const handleMessage = (event) => {
85
+ var _a;
86
+ if (process.env.NODE_ENV === "development") {
87
+ console.log("iframe message", event.data);
88
+ }
89
+ switch ((_a = event.data) == null ? void 0 : _a.type) {
90
+ case "CHATBOT_READY":
91
+ setIsReady(true);
92
+ break;
93
+ case "CHATBOT_INITIALIZED":
94
+ setIsInitialized(true);
95
+ break;
96
+ case "CLOSE_CHATBOT":
97
+ setOpen(false);
98
+ break;
99
+ case "EXPAND_CHATBOT":
100
+ setIsExpanded(true);
101
+ break;
102
+ case "SHRINK_CHATBOT":
103
+ setIsExpanded(false);
104
+ break;
105
+ }
106
+ };
107
+ const handleIframeLoad = () => {
108
+ window.addEventListener("message", handleMessage);
109
+ };
110
+ iframe.addEventListener("load", handleIframeLoad);
111
+ return () => {
112
+ window.removeEventListener("message", handleMessage);
113
+ iframe.removeEventListener("load", handleIframeLoad);
114
+ };
115
+ }, [iframeEl]);
116
+ return { init, setMcps, setAppName, setIframeEl, isReady, isInitialized };
117
+ }
118
+
119
+ // src/components/provider/use-chatbot-window-states.tsx
120
+
121
+ function useChatbotWindowStates() {
122
+ const [hasOpened, setHasOpened] = React5.default.useState(false);
123
+ const [open, setOpen] = React5.default.useState(false);
124
+ const [isExpanded, setIsExpanded] = React5.default.useState(false);
125
+ React5.default.useEffect(() => {
126
+ if (open) {
127
+ setHasOpened(true);
128
+ }
129
+ }, [open]);
130
+ return { hasOpened, open, isExpanded, setOpen, setIsExpanded };
131
+ }
132
+
133
+ // src/components/provider/chatbot-proivder.tsx
36
134
  var _jsxruntime = require('react/jsx-runtime');
37
- var ChatbotContext = React2.default.createContext(
135
+ var ChatbotContext = React5.default.createContext(
38
136
  void 0
39
137
  );
40
138
  function useChatbot() {
41
- const context = React2.default.useContext(ChatbotContext);
139
+ const context = React5.default.useContext(ChatbotContext);
42
140
  if (!context) {
43
141
  throw new Error("useChatbot must be used within a ChatbotProvider");
44
142
  }
45
143
  return context;
46
144
  }
47
145
  function ChatbotProvider({ children }) {
48
- const [hasOpened, setHasOpened] = React2.default.useState(false);
49
- const [open, setOpen] = React2.default.useState(false);
50
- const [isExpanded, setIsExpanded] = React2.default.useState(false);
51
- React2.default.useEffect(() => {
52
- if (open) {
53
- setHasOpened(true);
54
- }
55
- }, [open]);
146
+ const { hasOpened, open, isExpanded, setOpen, setIsExpanded } = useChatbotWindowStates();
147
+ const { setMcps, setAppName, init, isReady, isInitialized, setIframeEl } = useChatbotFrameHandler({
148
+ setOpen,
149
+ setIsExpanded
150
+ });
56
151
  const value = {
57
152
  hasOpened,
58
153
  open,
59
154
  setOpen,
60
155
  isExpanded,
61
- setIsExpanded
156
+ setIsExpanded,
157
+ init,
158
+ setMcps,
159
+ setAppName,
160
+ isReady,
161
+ isInitialized,
162
+ setIframeEl
62
163
  };
63
164
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ChatbotContext.Provider, { value, children });
64
165
  }
65
166
 
66
- // src/agent-frame.tsx
67
-
68
-
69
-
70
-
71
-
167
+ // src/components/chatbot-frame.tsx
72
168
 
73
169
 
74
-
75
-
76
- // src/constants.ts
170
+ // src/lib/constants.ts
77
171
  var PROD_CHATBOT_URL = "https://ecforce-ai-agent.vercel.app";
78
172
 
79
- // src/agent-frame.tsx
80
-
81
- var AgentFrame = _react.forwardRef.call(void 0,
82
- ({ agentId, mcps = [], appName, className, url }, ref) => {
83
- var _a;
84
- const chatbotUrl = (_a = url != null ? url : process.env.CHATBOT_URL) != null ? _a : PROD_CHATBOT_URL;
85
- const iframeRef = _react.useRef.call(void 0, null);
86
- const [isReady, setIsReady] = _react.useState.call(void 0, false);
87
- const [hasInitialized, setHasInitialized] = _react.useState.call(void 0, false);
88
- const [currentMcps, setCurrentMcps] = _react.useState.call(void 0, mcps);
89
- const { setIsExpanded, setOpen } = useChatbot();
90
- const postMessage = _react.useCallback.call(void 0, (message) => {
91
- var _a2;
92
- if ((_a2 = iframeRef.current) == null ? void 0 : _a2.contentWindow) {
93
- iframeRef.current.contentWindow.postMessage(message, "*");
94
- }
95
- }, []);
96
- const init = _react.useCallback.call(void 0,
97
- (props) => {
98
- postMessage(__spreadValues({
99
- type: "init"
100
- }, props));
101
- },
102
- [postMessage]
103
- );
104
- const setMcps = _react.useCallback.call(void 0,
105
- (mcps2) => {
106
- postMessage({ type: "mcps", mcps: mcps2 });
107
- },
108
- [postMessage]
109
- );
110
- const setAppName = _react.useCallback.call(void 0,
111
- (appName2) => {
112
- postMessage({ type: "appName", appName: appName2 });
113
- },
114
- [postMessage]
115
- );
116
- _react.useImperativeHandle.call(void 0,
117
- ref,
118
- () => ({
119
- setMcps,
120
- setAppName,
121
- get isReady() {
122
- return isReady;
123
- }
124
- }),
125
- [setMcps, setAppName, isReady]
126
- );
127
- _react.useEffect.call(void 0, () => {
128
- const iframe = iframeRef.current;
129
- if (!iframe) {
130
- return;
131
- }
132
- const handleMessage = (event) => {
133
- var _a2;
134
- if (process.env.NODE_ENV === "development") {
135
- console.log("iframe message", event.data);
136
- }
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;
150
- }
151
- };
152
- const handleIframeLoad = () => {
153
- window.addEventListener("message", handleMessage);
154
- };
155
- iframe.addEventListener("load", handleIframeLoad);
156
- return () => {
157
- window.removeEventListener("message", handleMessage);
158
- iframe.removeEventListener("load", handleIframeLoad);
159
- };
160
- }, []);
161
- _react.useEffect.call(void 0, () => {
162
- if (isReady && !hasInitialized) {
163
- setHasInitialized(true);
164
- init({ mcps });
165
- if (appName) {
166
- setAppName(appName);
167
- }
168
- }
169
- }, [isReady, init, mcps, appName, hasInitialized, setAppName]);
170
- _react.useEffect.call(void 0, () => {
171
- if (JSON.stringify(currentMcps) !== JSON.stringify(mcps)) {
172
- setCurrentMcps(mcps);
173
- setMcps(mcps);
174
- }
175
- }, [setMcps, mcps, currentMcps]);
176
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
177
- "iframe",
178
- {
179
- ref: iframeRef,
180
- src: `${chatbotUrl}/embed/${agentId}`,
181
- className,
182
- allow: "clipboard-write",
183
- style: {
184
- width: "100%",
185
- height: "100%"
186
- }
173
+ // src/components/chatbot-frame.tsx
174
+
175
+ function ChatbotFrame({
176
+ agentId,
177
+ appName,
178
+ mcps,
179
+ enabled = true,
180
+ url,
181
+ className
182
+ }) {
183
+ var _a;
184
+ const chatbotUrl = (_a = url != null ? url : process.env.CHATBOT_URL) != null ? _a : PROD_CHATBOT_URL;
185
+ const { setIframeEl } = useChatbot();
186
+ const { init, setMcps, setAppName, isReady } = useChatbot();
187
+ const sentInitRef = React5.default.useRef(false);
188
+ const [currentMcps, setCurrentMcps] = React5.default.useState();
189
+ const [currentAppName, setCurrentAppName] = React5.default.useState();
190
+ React5.default.useEffect(() => {
191
+ if (enabled && isReady && !sentInitRef.current) {
192
+ init({ mcps, appName });
193
+ sentInitRef.current = true;
194
+ setCurrentMcps(mcps);
195
+ setCurrentAppName(appName);
196
+ }
197
+ }, [enabled, init, mcps, appName, isReady]);
198
+ React5.default.useEffect(() => {
199
+ if (sentInitRef.current && mcps && JSON.stringify(currentMcps) !== JSON.stringify(mcps)) {
200
+ setMcps(mcps);
201
+ setCurrentMcps(mcps);
202
+ }
203
+ }, [mcps]);
204
+ React5.default.useEffect(() => {
205
+ if (sentInitRef.current && appName && currentAppName !== appName) {
206
+ setCurrentAppName(appName);
207
+ setAppName(appName);
208
+ }
209
+ }, [appName]);
210
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
211
+ "iframe",
212
+ {
213
+ ref: setIframeEl,
214
+ src: `${chatbotUrl}/embed/${agentId}`,
215
+ className,
216
+ allow: "clipboard-write",
217
+ style: {
218
+ width: "100%",
219
+ height: "100%"
187
220
  }
188
- );
189
- }
190
- );
191
- AgentFrame.displayName = "AgentFrame";
221
+ }
222
+ );
223
+ }
192
224
 
193
- // src/chatbot-sheet.tsx
225
+ // src/components/chatbot-sheet.tsx
194
226
 
195
227
 
196
- // src/sheet.tsx
228
+ // src/components/sheet.tsx
197
229
  var _reactdialog = require('@radix-ui/react-dialog'); var SheetPrimitive = _interopRequireWildcard(_reactdialog);
198
230
 
199
231
 
@@ -210,7 +242,7 @@ function Sheet(_a) {
210
242
  }, props)
211
243
  );
212
244
  }
213
- var SheetTrigger = React2.forwardRef((_a, ref) => {
245
+ var SheetTrigger = React5.forwardRef((_a, ref) => {
214
246
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
215
247
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
216
248
  SheetPrimitive.Trigger,
@@ -222,7 +254,7 @@ var SheetTrigger = React2.forwardRef((_a, ref) => {
222
254
  );
223
255
  });
224
256
  SheetTrigger.displayName = SheetPrimitive.Trigger.displayName;
225
- var SheetClose = React2.forwardRef((_a, ref) => {
257
+ var SheetClose = React5.forwardRef((_a, ref) => {
226
258
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
227
259
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
228
260
  SheetPrimitive.Close,
@@ -238,7 +270,7 @@ function SheetPortal(_a) {
238
270
  var props = __objRest(_a, []);
239
271
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SheetPrimitive.Portal, __spreadValues({ "data-slot": "sheet-portal" }, props));
240
272
  }
241
- var SheetContent = React2.forwardRef((_a, ref) => {
273
+ var SheetContent = React5.forwardRef((_a, ref) => {
242
274
  var _b = _a, { className, children, style } = _b, props = __objRest(_b, ["className", "children", "style"]);
243
275
  const { isExpanded, open, hasOpened } = useChatbot();
244
276
  const width = isExpanded ? "848px" : "400px";
@@ -262,7 +294,7 @@ var SheetContent = React2.forwardRef((_a, ref) => {
262
294
  ) });
263
295
  });
264
296
  SheetContent.displayName = SheetPrimitive.Content.displayName;
265
- var SheetHeader = React2.forwardRef((_a, ref) => {
297
+ var SheetHeader = React5.forwardRef((_a, ref) => {
266
298
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
267
299
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
268
300
  "div",
@@ -274,7 +306,7 @@ var SheetHeader = React2.forwardRef((_a, ref) => {
274
306
  );
275
307
  });
276
308
  SheetHeader.displayName = "SheetHeader";
277
- var SheetFooter = React2.forwardRef((_a, ref) => {
309
+ var SheetFooter = React5.forwardRef((_a, ref) => {
278
310
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
279
311
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
280
312
  "div",
@@ -286,7 +318,7 @@ var SheetFooter = React2.forwardRef((_a, ref) => {
286
318
  );
287
319
  });
288
320
  SheetFooter.displayName = "SheetFooter";
289
- var SheetTitle = React2.forwardRef((_a, ref) => {
321
+ var SheetTitle = React5.forwardRef((_a, ref) => {
290
322
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
291
323
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
292
324
  SheetPrimitive.Title,
@@ -298,7 +330,7 @@ var SheetTitle = React2.forwardRef((_a, ref) => {
298
330
  );
299
331
  });
300
332
  SheetTitle.displayName = SheetPrimitive.Title.displayName;
301
- var SheetDescription = React2.forwardRef((_a, ref) => {
333
+ var SheetDescription = React5.forwardRef((_a, ref) => {
302
334
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
303
335
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
304
336
  SheetPrimitive.Description,
@@ -311,7 +343,7 @@ var SheetDescription = React2.forwardRef((_a, ref) => {
311
343
  });
312
344
  SheetDescription.displayName = SheetPrimitive.Description.displayName;
313
345
 
314
- // src/tooltip.tsx
346
+ // src/components/tooltip.tsx
315
347
 
316
348
 
317
349
 
@@ -374,29 +406,27 @@ function Tooltip({
374
406
  );
375
407
  }
376
408
 
377
- // src/chatbot-sheet.tsx
409
+ // src/components/chatbot-sheet.tsx
378
410
 
379
- var ChatbotSheet = _react.forwardRef.call(void 0,
380
- (_a, ref) => {
381
- var _b = _a, { sheetStyle } = _b, props = __objRest(_b, ["sheetStyle"]);
382
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, Sheet, { children: [
383
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
384
- Tooltip,
385
- {
386
- side: "top",
387
- align: "end",
388
- content: "AI\u306B\u8CEA\u554F\u3057\u3066\u307F\u307E\u3057\u3087\u3046",
389
- trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SheetTrigger, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, EcforceAiIcon, {}) })
390
- }
391
- ),
392
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, SheetContent, { style: sheetStyle, children: [
393
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SheetTitle, { children: "AI\u306B\u8CEA\u554F\u3057\u3066\u307F\u307E\u3057\u3087\u3046" }),
394
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SheetDescription, { children: "AI\u306B\u8CEA\u554F\u3057\u3066\u307F\u307E\u3057\u3087\u3046" }),
395
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AgentFrame, __spreadProps(__spreadValues({}, props), { ref }))
396
- ] })
397
- ] });
398
- }
399
- );
411
+ function ChatbotSheet(_a) {
412
+ var _b = _a, { sheetStyle } = _b, props = __objRest(_b, ["sheetStyle"]);
413
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, Sheet, { children: [
414
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
415
+ Tooltip,
416
+ {
417
+ side: "top",
418
+ align: "end",
419
+ content: "AI\u306B\u8CEA\u554F\u3057\u3066\u307F\u307E\u3057\u3087\u3046",
420
+ trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SheetTrigger, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, EcforceAiIcon, {}) })
421
+ }
422
+ ),
423
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, SheetContent, { style: sheetStyle, children: [
424
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SheetTitle, { children: "AI\u306B\u8CEA\u554F\u3057\u3066\u307F\u307E\u3057\u3087\u3046" }),
425
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SheetDescription, { children: "AI\u306B\u8CEA\u554F\u3057\u3066\u307F\u307E\u3057\u3087\u3046" }),
426
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ChatbotFrame, __spreadValues({}, props))
427
+ ] })
428
+ ] });
429
+ }
400
430
  function EcforceAiIcon() {
401
431
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
402
432
  "svg",
@@ -431,4 +461,4 @@ function EcforceAiIcon() {
431
461
 
432
462
 
433
463
 
434
- exports.AgentFrame = AgentFrame; exports.ChatbotProvider = ChatbotProvider; exports.ChatbotSheet = ChatbotSheet; exports.Sheet = Sheet; exports.SheetClose = SheetClose; exports.SheetContent = SheetContent; exports.SheetDescription = SheetDescription; exports.SheetFooter = SheetFooter; exports.SheetHeader = SheetHeader; exports.SheetTitle = SheetTitle; exports.SheetTrigger = SheetTrigger; exports.Tooltip = Tooltip; exports.useChatbot = useChatbot;
464
+ exports.ChatbotFrame = ChatbotFrame; exports.ChatbotProvider = ChatbotProvider; exports.ChatbotSheet = ChatbotSheet; exports.Sheet = Sheet; exports.SheetClose = SheetClose; exports.SheetContent = SheetContent; exports.SheetDescription = SheetDescription; exports.SheetFooter = SheetFooter; exports.SheetHeader = SheetHeader; exports.SheetTitle = SheetTitle; exports.SheetTrigger = SheetTrigger; exports.Tooltip = Tooltip; exports.useChatbot = useChatbot;