@aigentyc/chat-sdk 0.1.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/LICENSE +21 -0
- package/README.md +156 -0
- package/dist/JsonRenderResult-Ftw4AKwb.d.cts +18 -0
- package/dist/JsonRenderResult-Ftw4AKwb.d.ts +18 -0
- package/dist/JsonRenderResult-GQOYPLVH.cjs +15 -0
- package/dist/JsonRenderResult-GQOYPLVH.cjs.map +1 -0
- package/dist/JsonRenderResult-ZFJ6VWMS.js +6 -0
- package/dist/JsonRenderResult-ZFJ6VWMS.js.map +1 -0
- package/dist/SlotsContext-CBtt36al.d.ts +148 -0
- package/dist/SlotsContext-CHvISDJT.d.cts +148 -0
- package/dist/VisualizationRenderer-FNFYNN66.js +5 -0
- package/dist/VisualizationRenderer-FNFYNN66.js.map +1 -0
- package/dist/VisualizationRenderer-VKMZXRUX.cjs +20 -0
- package/dist/VisualizationRenderer-VKMZXRUX.cjs.map +1 -0
- package/dist/ai-elements.cjs +4608 -0
- package/dist/ai-elements.cjs.map +1 -0
- package/dist/ai-elements.d.cts +897 -0
- package/dist/ai-elements.d.ts +897 -0
- package/dist/ai-elements.js +4363 -0
- package/dist/ai-elements.js.map +1 -0
- package/dist/chunk-3MP2EGEJ.cjs +270 -0
- package/dist/chunk-3MP2EGEJ.cjs.map +1 -0
- package/dist/chunk-3RW7O444.js +26 -0
- package/dist/chunk-3RW7O444.js.map +1 -0
- package/dist/chunk-42ARGQXE.js +51 -0
- package/dist/chunk-42ARGQXE.js.map +1 -0
- package/dist/chunk-4FBVV64J.js +257 -0
- package/dist/chunk-4FBVV64J.js.map +1 -0
- package/dist/chunk-4QT25AXI.js +21 -0
- package/dist/chunk-4QT25AXI.js.map +1 -0
- package/dist/chunk-525KS5HM.cjs +30 -0
- package/dist/chunk-525KS5HM.cjs.map +1 -0
- package/dist/chunk-5F3O3ZJH.js +299 -0
- package/dist/chunk-5F3O3ZJH.js.map +1 -0
- package/dist/chunk-5QSXB6UL.cjs +259 -0
- package/dist/chunk-5QSXB6UL.cjs.map +1 -0
- package/dist/chunk-5T4FJ2SR.js +664 -0
- package/dist/chunk-5T4FJ2SR.js.map +1 -0
- package/dist/chunk-7BNYTOTE.cjs +67 -0
- package/dist/chunk-7BNYTOTE.cjs.map +1 -0
- package/dist/chunk-AWAJOSFP.cjs +96 -0
- package/dist/chunk-AWAJOSFP.cjs.map +1 -0
- package/dist/chunk-BKDV2H6Z.js +224 -0
- package/dist/chunk-BKDV2H6Z.js.map +1 -0
- package/dist/chunk-FQN6OBGN.cjs +171 -0
- package/dist/chunk-FQN6OBGN.cjs.map +1 -0
- package/dist/chunk-FYPJSHCL.js +190 -0
- package/dist/chunk-FYPJSHCL.js.map +1 -0
- package/dist/chunk-J2H6MLQF.cjs +680 -0
- package/dist/chunk-J2H6MLQF.cjs.map +1 -0
- package/dist/chunk-J2K7EJYP.cjs +198 -0
- package/dist/chunk-J2K7EJYP.cjs.map +1 -0
- package/dist/chunk-JI5KCSOI.cjs +23 -0
- package/dist/chunk-JI5KCSOI.cjs.map +1 -0
- package/dist/chunk-JOO6C3XT.cjs +44 -0
- package/dist/chunk-JOO6C3XT.cjs.map +1 -0
- package/dist/chunk-KBGPBUTI.cjs +78 -0
- package/dist/chunk-KBGPBUTI.cjs.map +1 -0
- package/dist/chunk-MT2AMINB.js +75 -0
- package/dist/chunk-MT2AMINB.js.map +1 -0
- package/dist/chunk-MZQKGNWF.js +4 -0
- package/dist/chunk-MZQKGNWF.js.map +1 -0
- package/dist/chunk-NG7OTWXQ.cjs +226 -0
- package/dist/chunk-NG7OTWXQ.cjs.map +1 -0
- package/dist/chunk-NPJKLYLV.js +68 -0
- package/dist/chunk-NPJKLYLV.js.map +1 -0
- package/dist/chunk-NW2ESHRV.js +685 -0
- package/dist/chunk-NW2ESHRV.js.map +1 -0
- package/dist/chunk-NWF735F5.js +1631 -0
- package/dist/chunk-NWF735F5.js.map +1 -0
- package/dist/chunk-NYQSM3EB.cjs +305 -0
- package/dist/chunk-NYQSM3EB.cjs.map +1 -0
- package/dist/chunk-OU7OROOE.cjs +1643 -0
- package/dist/chunk-OU7OROOE.cjs.map +1 -0
- package/dist/chunk-PS3U7T37.js +42 -0
- package/dist/chunk-PS3U7T37.js.map +1 -0
- package/dist/chunk-Q7T3VAJV.cjs +687 -0
- package/dist/chunk-Q7T3VAJV.cjs.map +1 -0
- package/dist/chunk-QYCEHFAB.js +265 -0
- package/dist/chunk-QYCEHFAB.js.map +1 -0
- package/dist/chunk-RPDJXB3U.js +676 -0
- package/dist/chunk-RPDJXB3U.js.map +1 -0
- package/dist/chunk-UKEL7FWS.js +64 -0
- package/dist/chunk-UKEL7FWS.js.map +1 -0
- package/dist/chunk-VS3NZ7FX.js +164 -0
- package/dist/chunk-VS3NZ7FX.js.map +1 -0
- package/dist/chunk-WZLWAVSS.cjs +73 -0
- package/dist/chunk-WZLWAVSS.cjs.map +1 -0
- package/dist/chunk-X5YEOOPK.cjs +758 -0
- package/dist/chunk-X5YEOOPK.cjs.map +1 -0
- package/dist/chunk-X7R334SB.cjs +5 -0
- package/dist/chunk-X7R334SB.cjs.map +1 -0
- package/dist/chunk-XXNDL5SJ.cjs +432 -0
- package/dist/chunk-XXNDL5SJ.cjs.map +1 -0
- package/dist/chunk-YQELMJW5.js +429 -0
- package/dist/chunk-YQELMJW5.js.map +1 -0
- package/dist/components.cjs +551 -0
- package/dist/components.cjs.map +1 -0
- package/dist/components.d.cts +181 -0
- package/dist/components.d.ts +181 -0
- package/dist/components.js +483 -0
- package/dist/components.js.map +1 -0
- package/dist/core.cjs +283 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.cts +455 -0
- package/dist/core.d.ts +455 -0
- package/dist/core.js +241 -0
- package/dist/core.js.map +1 -0
- package/dist/hooks.cjs +324 -0
- package/dist/hooks.cjs.map +1 -0
- package/dist/hooks.d.cts +163 -0
- package/dist/hooks.d.ts +163 -0
- package/dist/hooks.js +277 -0
- package/dist/hooks.js.map +1 -0
- package/dist/i18n.cjs +26 -0
- package/dist/i18n.cjs.map +1 -0
- package/dist/i18n.d.cts +50 -0
- package/dist/i18n.d.ts +50 -0
- package/dist/i18n.js +5 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.cjs +466 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +80 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.js +438 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction-tracker-D9P1Oq4j.d.cts +83 -0
- package/dist/interaction-tracker-D9P1Oq4j.d.ts +83 -0
- package/dist/json-render.cjs +23 -0
- package/dist/json-render.cjs.map +1 -0
- package/dist/json-render.d.cts +857 -0
- package/dist/json-render.d.ts +857 -0
- package/dist/json-render.js +6 -0
- package/dist/json-render.js.map +1 -0
- package/dist/live-chat-transport-4XLOIPOE.js +4 -0
- package/dist/live-chat-transport-4XLOIPOE.js.map +1 -0
- package/dist/live-chat-transport-ALVRGWX7.cjs +13 -0
- package/dist/live-chat-transport-ALVRGWX7.cjs.map +1 -0
- package/dist/select-B4l9yoyn.d.cts +99 -0
- package/dist/select-B4l9yoyn.d.ts +99 -0
- package/dist/styles.css +2 -0
- package/dist/theme.cjs +18 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.d.cts +55 -0
- package/dist/theme.d.ts +55 -0
- package/dist/theme.js +5 -0
- package/dist/theme.js.map +1 -0
- package/dist/tools.cjs +32 -0
- package/dist/tools.cjs.map +1 -0
- package/dist/tools.d.cts +117 -0
- package/dist/tools.d.ts +117 -0
- package/dist/tools.js +11 -0
- package/dist/tools.js.map +1 -0
- package/dist/types-DKJ_-nbG.d.cts +349 -0
- package/dist/types-DKJ_-nbG.d.ts +349 -0
- package/dist/ui.cjs +667 -0
- package/dist/ui.cjs.map +1 -0
- package/dist/ui.d.cts +95 -0
- package/dist/ui.d.ts +95 -0
- package/dist/ui.js +414 -0
- package/dist/ui.js.map +1 -0
- package/package.json +255 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var chunk5QSXB6UL_cjs = require('./chunk-5QSXB6UL.cjs');
|
|
5
|
+
require('./chunk-NG7OTWXQ.cjs');
|
|
6
|
+
var chunkOU7OROOE_cjs = require('./chunk-OU7OROOE.cjs');
|
|
7
|
+
var chunkNYQSM3EB_cjs = require('./chunk-NYQSM3EB.cjs');
|
|
8
|
+
var chunk7BNYTOTE_cjs = require('./chunk-7BNYTOTE.cjs');
|
|
9
|
+
require('./chunk-FQN6OBGN.cjs');
|
|
10
|
+
require('./chunk-X7R334SB.cjs');
|
|
11
|
+
var chunk3MP2EGEJ_cjs = require('./chunk-3MP2EGEJ.cjs');
|
|
12
|
+
require('./chunk-XXNDL5SJ.cjs');
|
|
13
|
+
var chunkJ2K7EJYP_cjs = require('./chunk-J2K7EJYP.cjs');
|
|
14
|
+
require('./chunk-JOO6C3XT.cjs');
|
|
15
|
+
require('./chunk-WZLWAVSS.cjs');
|
|
16
|
+
require('./chunk-JI5KCSOI.cjs');
|
|
17
|
+
require('./chunk-AWAJOSFP.cjs');
|
|
18
|
+
var chunk525KS5HM_cjs = require('./chunk-525KS5HM.cjs');
|
|
19
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
20
|
+
var react = require('react');
|
|
21
|
+
|
|
22
|
+
var CALLBACK_KEYS = [
|
|
23
|
+
"onReady",
|
|
24
|
+
"onSessionStart",
|
|
25
|
+
"onSessionRestore",
|
|
26
|
+
"onMessageSent",
|
|
27
|
+
"onMessageReceived",
|
|
28
|
+
"onStreamStart",
|
|
29
|
+
"onStreamEnd",
|
|
30
|
+
"onToolCall",
|
|
31
|
+
"onToolResult",
|
|
32
|
+
"onToolAction",
|
|
33
|
+
"onLiveChatRequested",
|
|
34
|
+
"onLiveChatConnected",
|
|
35
|
+
"onLiveChatEnded",
|
|
36
|
+
"onError",
|
|
37
|
+
"onInteraction"
|
|
38
|
+
];
|
|
39
|
+
function pickCallbacks(props) {
|
|
40
|
+
const out = {};
|
|
41
|
+
for (const key of CALLBACK_KEYS) {
|
|
42
|
+
if (props[key] !== void 0) out[key] = props[key];
|
|
43
|
+
}
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
function ChatProvider(props) {
|
|
47
|
+
const {
|
|
48
|
+
children,
|
|
49
|
+
projectId,
|
|
50
|
+
apiEndpoint,
|
|
51
|
+
apiKey,
|
|
52
|
+
clientName,
|
|
53
|
+
language,
|
|
54
|
+
translations,
|
|
55
|
+
theme,
|
|
56
|
+
slots,
|
|
57
|
+
enableLiveChat = false,
|
|
58
|
+
chatServiceUrl,
|
|
59
|
+
persistMessages: _persistMessages,
|
|
60
|
+
maxMessages: _maxMessages,
|
|
61
|
+
questions: _questions,
|
|
62
|
+
...rest
|
|
63
|
+
} = props;
|
|
64
|
+
const callbacks = pickCallbacks(rest);
|
|
65
|
+
const config = { projectId, apiEndpoint, apiKey, clientName };
|
|
66
|
+
const langCode = language ?? "en";
|
|
67
|
+
const translationOverrides = translations?.[langCode];
|
|
68
|
+
const liveChatUrl = chatServiceUrl ?? apiEndpoint;
|
|
69
|
+
const inner = enableLiveChat && liveChatUrl && apiKey ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
70
|
+
chunkNYQSM3EB_cjs.LiveChatProvider,
|
|
71
|
+
{
|
|
72
|
+
chatServiceUrl: liveChatUrl,
|
|
73
|
+
apiKey,
|
|
74
|
+
projectId: projectId || "default",
|
|
75
|
+
sessionId: "default",
|
|
76
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(chunkNYQSM3EB_cjs.PreviewEmbedProvider, { children })
|
|
77
|
+
}
|
|
78
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunkNYQSM3EB_cjs.PreviewEmbedProvider, { children });
|
|
79
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunk3MP2EGEJ_cjs.I18nProvider, { language, translations: translationOverrides, children: /* @__PURE__ */ jsxRuntime.jsx(chunk7BNYTOTE_cjs.ThemeProvider, { theme, children: /* @__PURE__ */ jsxRuntime.jsx(chunkJ2K7EJYP_cjs.SlotsProvider, { slots, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
80
|
+
chunkJ2K7EJYP_cjs.ChatContextProvider,
|
|
81
|
+
{
|
|
82
|
+
config,
|
|
83
|
+
callbacks,
|
|
84
|
+
children: inner
|
|
85
|
+
}
|
|
86
|
+
) }) }) });
|
|
87
|
+
}
|
|
88
|
+
function Chat({ className, children, ...providerProps }) {
|
|
89
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ChatProvider, { ...providerProps, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className, children: [
|
|
90
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkOU7OROOE_cjs.ChatInterface, {}),
|
|
91
|
+
children
|
|
92
|
+
] }) });
|
|
93
|
+
}
|
|
94
|
+
function PreviewEventBridge() {
|
|
95
|
+
const previewEmbed = chunkNYQSM3EB_cjs.usePreviewEmbed();
|
|
96
|
+
react.useEffect(() => {
|
|
97
|
+
if (!previewEmbed || typeof window === "undefined") return;
|
|
98
|
+
const handler = (e) => {
|
|
99
|
+
const { url, title, description } = e.detail || {};
|
|
100
|
+
if (url) previewEmbed.openPreview({ url, title, description });
|
|
101
|
+
};
|
|
102
|
+
window.addEventListener("widget-preview-open", handler);
|
|
103
|
+
return () => window.removeEventListener("widget-preview-open", handler);
|
|
104
|
+
}, [previewEmbed]);
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
function MobilePreviewDrawer() {
|
|
108
|
+
const previewEmbed = chunkNYQSM3EB_cjs.usePreviewEmbed();
|
|
109
|
+
const isVisible = !!previewEmbed?.preview;
|
|
110
|
+
const preview = previewEmbed?.preview;
|
|
111
|
+
const closePreview = previewEmbed?.closePreview;
|
|
112
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
113
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
114
|
+
"div",
|
|
115
|
+
{
|
|
116
|
+
className: "absolute inset-0 z-40 bg-black/50",
|
|
117
|
+
style: {
|
|
118
|
+
opacity: isVisible ? 1 : 0,
|
|
119
|
+
pointerEvents: isVisible ? "auto" : "none",
|
|
120
|
+
transition: "opacity 200ms ease-out"
|
|
121
|
+
},
|
|
122
|
+
onClick: closePreview
|
|
123
|
+
}
|
|
124
|
+
),
|
|
125
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
126
|
+
"div",
|
|
127
|
+
{
|
|
128
|
+
className: "absolute inset-x-0 bottom-0 z-50 rounded-t-2xl border-t shadow-2xl",
|
|
129
|
+
style: {
|
|
130
|
+
backgroundColor: "var(--ac-background)",
|
|
131
|
+
borderColor: "var(--ac-border)",
|
|
132
|
+
height: "calc(100dvh - 150px)",
|
|
133
|
+
transform: isVisible ? "translateY(0)" : "translateY(100%)",
|
|
134
|
+
transition: "transform 300ms cubic-bezier(0.32, 0.72, 0, 1)"
|
|
135
|
+
},
|
|
136
|
+
children: [
|
|
137
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center pt-3 pb-1", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-[100px] h-2 rounded-full bg-muted" }) }),
|
|
138
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-5 py-3 flex items-center justify-between", children: [
|
|
139
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
140
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-medium text-sm truncate", style: { color: "var(--ac-text)" }, children: preview?.title || "Preview" }),
|
|
141
|
+
preview?.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mt-0.5 truncate", children: preview.description })
|
|
142
|
+
] }),
|
|
143
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
144
|
+
"button",
|
|
145
|
+
{
|
|
146
|
+
type: "button",
|
|
147
|
+
onClick: closePreview,
|
|
148
|
+
className: "shrink-0 w-8 h-8 rounded-full border flex items-center justify-center hover:bg-muted transition-colors ml-3",
|
|
149
|
+
children: [
|
|
150
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Close" }),
|
|
151
|
+
"\xD7"
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
)
|
|
155
|
+
] }),
|
|
156
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 pb-4 flex-1", style: { height: "calc(100% - 80px)" }, children: preview && /* @__PURE__ */ jsxRuntime.jsx(
|
|
157
|
+
"iframe",
|
|
158
|
+
{
|
|
159
|
+
src: preview.url,
|
|
160
|
+
className: "w-full h-full rounded-xl border-none",
|
|
161
|
+
sandbox: "allow-scripts allow-same-origin allow-forms allow-popups allow-presentation",
|
|
162
|
+
title: preview.title || "Preview"
|
|
163
|
+
},
|
|
164
|
+
preview.url
|
|
165
|
+
) })
|
|
166
|
+
]
|
|
167
|
+
}
|
|
168
|
+
)
|
|
169
|
+
] });
|
|
170
|
+
}
|
|
171
|
+
function ChatWidgetInner({
|
|
172
|
+
mode = "floating",
|
|
173
|
+
position = "bottom-right",
|
|
174
|
+
positionMobile,
|
|
175
|
+
isOpen: controlledIsOpen,
|
|
176
|
+
onOpenChange,
|
|
177
|
+
pendingMessage: initialPendingMessage,
|
|
178
|
+
zIndex,
|
|
179
|
+
greetingText,
|
|
180
|
+
greetingOffsetX,
|
|
181
|
+
greetingOffsetY,
|
|
182
|
+
greetingMaxWidth,
|
|
183
|
+
buttonOffsetXMobile,
|
|
184
|
+
buttonOffsetYMobile,
|
|
185
|
+
buttonOffsetXDesktop,
|
|
186
|
+
buttonOffsetYDesktop,
|
|
187
|
+
buttonIconUrl,
|
|
188
|
+
buttonImageUrl,
|
|
189
|
+
buttonImageUrlMobile,
|
|
190
|
+
buttonWidth,
|
|
191
|
+
buttonHeight,
|
|
192
|
+
buttonIconSize,
|
|
193
|
+
buttonWidthMobile,
|
|
194
|
+
buttonHeightMobile,
|
|
195
|
+
buttonIconSizeMobile,
|
|
196
|
+
buttonBgColor,
|
|
197
|
+
buttonBorderRadius,
|
|
198
|
+
hideGreeting,
|
|
199
|
+
logoUrl,
|
|
200
|
+
welcomeTitle,
|
|
201
|
+
welcomeSubtitle,
|
|
202
|
+
hideWelcomeHeader,
|
|
203
|
+
footerText,
|
|
204
|
+
hideHeader,
|
|
205
|
+
showFirstMessage,
|
|
206
|
+
questionsLayout,
|
|
207
|
+
questionsLayoutMobile,
|
|
208
|
+
language
|
|
209
|
+
}) {
|
|
210
|
+
const [internalIsOpen, setInternalIsOpen] = react.useState(false);
|
|
211
|
+
const [pendingMessage, setPendingMessage] = react.useState(initialPendingMessage ?? null);
|
|
212
|
+
const isMobile = chunkNYQSM3EB_cjs.useIsMobile();
|
|
213
|
+
const slots = chunkJ2K7EJYP_cjs.useSlots();
|
|
214
|
+
react.useEffect(() => {
|
|
215
|
+
if (controlledIsOpen === true) setInternalIsOpen(true);
|
|
216
|
+
}, [controlledIsOpen]);
|
|
217
|
+
const isOpen = internalIsOpen;
|
|
218
|
+
react.useEffect(() => {
|
|
219
|
+
if (mode === "inline" || typeof document === "undefined") return;
|
|
220
|
+
if (isOpen) {
|
|
221
|
+
const originalStyle = window.getComputedStyle(document.body).overflow;
|
|
222
|
+
document.body.style.overflow = "hidden";
|
|
223
|
+
return () => {
|
|
224
|
+
document.body.style.overflow = originalStyle;
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
}, [isOpen, mode]);
|
|
228
|
+
const handleOpen = react.useCallback(() => {
|
|
229
|
+
setInternalIsOpen(true);
|
|
230
|
+
onOpenChange?.(true);
|
|
231
|
+
}, [onOpenChange]);
|
|
232
|
+
const handleClose = react.useCallback(() => {
|
|
233
|
+
setInternalIsOpen(false);
|
|
234
|
+
onOpenChange?.(false);
|
|
235
|
+
}, [onOpenChange]);
|
|
236
|
+
const handleToggle = react.useCallback(() => {
|
|
237
|
+
if (isOpen) handleClose();
|
|
238
|
+
else handleOpen();
|
|
239
|
+
}, [isOpen, handleOpen, handleClose]);
|
|
240
|
+
const isRightSide = position === "bottom-right" || position === "top-right";
|
|
241
|
+
const dirRTL = language === "he";
|
|
242
|
+
const chatInterfaceProps = react.useMemo(
|
|
243
|
+
() => ({
|
|
244
|
+
isOpen,
|
|
245
|
+
onClose: handleClose,
|
|
246
|
+
logoUrl,
|
|
247
|
+
welcomeTitle,
|
|
248
|
+
welcomeSubtitle,
|
|
249
|
+
hideWelcomeHeader,
|
|
250
|
+
footerText,
|
|
251
|
+
hideHeader,
|
|
252
|
+
showFirstMessage,
|
|
253
|
+
questionsLayout,
|
|
254
|
+
questionsLayoutMobile,
|
|
255
|
+
pendingMessage,
|
|
256
|
+
onPendingMessageConsumed: () => setPendingMessage(null)
|
|
257
|
+
}),
|
|
258
|
+
[isOpen, handleClose, logoUrl, welcomeTitle, welcomeSubtitle, hideWelcomeHeader, footerText, hideHeader, showFirstMessage, questionsLayout, questionsLayoutMobile, pendingMessage]
|
|
259
|
+
);
|
|
260
|
+
if (mode === "inline") {
|
|
261
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col w-full h-full", dir: dirRTL ? "rtl" : "ltr", style: { backgroundColor: "var(--ac-background)" }, children: /* @__PURE__ */ jsxRuntime.jsx(chunkOU7OROOE_cjs.ChatInterface, { ...chatInterfaceProps }) });
|
|
262
|
+
}
|
|
263
|
+
const panelZIndex = zIndex || 9999;
|
|
264
|
+
const floatingButtonProps = {
|
|
265
|
+
onClick: handleToggle,
|
|
266
|
+
position,
|
|
267
|
+
positionMobile,
|
|
268
|
+
isOpen,
|
|
269
|
+
greeting: greetingText,
|
|
270
|
+
greetingOffsetX,
|
|
271
|
+
greetingOffsetY,
|
|
272
|
+
greetingMaxWidth,
|
|
273
|
+
buttonOffsetXMobile,
|
|
274
|
+
buttonOffsetYMobile,
|
|
275
|
+
buttonOffsetXDesktop,
|
|
276
|
+
buttonOffsetYDesktop,
|
|
277
|
+
buttonIconUrl,
|
|
278
|
+
buttonImageUrl,
|
|
279
|
+
buttonImageUrlMobile,
|
|
280
|
+
buttonWidth,
|
|
281
|
+
buttonHeight,
|
|
282
|
+
buttonIconSize,
|
|
283
|
+
buttonWidthMobile,
|
|
284
|
+
buttonHeightMobile,
|
|
285
|
+
buttonIconSizeMobile,
|
|
286
|
+
buttonBgColor,
|
|
287
|
+
buttonBorderRadius,
|
|
288
|
+
zIndex: zIndex || 999999,
|
|
289
|
+
hideGreeting
|
|
290
|
+
};
|
|
291
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
292
|
+
/* @__PURE__ */ jsxRuntime.jsx(PreviewEventBridge, {}),
|
|
293
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
294
|
+
"div",
|
|
295
|
+
{
|
|
296
|
+
className: "fixed inset-0 bg-black/50 transition-opacity duration-300 ease-in-out",
|
|
297
|
+
style: {
|
|
298
|
+
zIndex: panelZIndex - 1,
|
|
299
|
+
opacity: isOpen ? 1 : 0,
|
|
300
|
+
pointerEvents: isOpen ? "auto" : "none"
|
|
301
|
+
},
|
|
302
|
+
onClick: handleClose
|
|
303
|
+
}
|
|
304
|
+
),
|
|
305
|
+
!isMobile && /* @__PURE__ */ jsxRuntime.jsx(chunkOU7OROOE_cjs.PreviewEmbedPanel, { isOpen, isRightSide, zIndex: panelZIndex - 1 }),
|
|
306
|
+
!isMobile && /* @__PURE__ */ jsxRuntime.jsx(chunkOU7OROOE_cjs.LiveChatPanel, { isWidgetOpen: isOpen, isRightSide, zIndex: panelZIndex - 1 }),
|
|
307
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
308
|
+
"div",
|
|
309
|
+
{
|
|
310
|
+
className: chunk525KS5HM_cjs.cn(
|
|
311
|
+
"fixed flex flex-col p-0 shadow-2xl",
|
|
312
|
+
isMobile ? "inset-x-0 rounded-t-2xl border-t" : chunk525KS5HM_cjs.cn("inset-y-0 w-full max-w-[780px]", isRightSide ? "right-0 border-l" : "left-0 border-r")
|
|
313
|
+
),
|
|
314
|
+
dir: dirRTL ? "rtl" : "ltr",
|
|
315
|
+
style: {
|
|
316
|
+
backgroundColor: "var(--ac-background)",
|
|
317
|
+
borderColor: "var(--ac-border)",
|
|
318
|
+
...isMobile ? {
|
|
319
|
+
top: "70px",
|
|
320
|
+
bottom: 0,
|
|
321
|
+
height: "calc(100dvh - 70px)",
|
|
322
|
+
transform: isOpen ? "translateY(0)" : "translateY(100%)",
|
|
323
|
+
opacity: isOpen ? 1 : 0,
|
|
324
|
+
pointerEvents: isOpen ? "auto" : "none"
|
|
325
|
+
} : {
|
|
326
|
+
transform: isOpen ? "translateX(0)" : isRightSide ? "translateX(100%)" : "translateX(-100%)",
|
|
327
|
+
opacity: isOpen ? 1 : 0,
|
|
328
|
+
pointerEvents: isOpen ? "auto" : "none"
|
|
329
|
+
},
|
|
330
|
+
transition: "transform 300ms ease-in-out",
|
|
331
|
+
zIndex: panelZIndex
|
|
332
|
+
},
|
|
333
|
+
children: [
|
|
334
|
+
isMobile && /* @__PURE__ */ jsxRuntime.jsx(MobilePreviewDrawer, {}),
|
|
335
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkOU7OROOE_cjs.MobileLiveChatDrawer, {}),
|
|
336
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkOU7OROOE_cjs.ChatInterface, { ...chatInterfaceProps })
|
|
337
|
+
]
|
|
338
|
+
}
|
|
339
|
+
),
|
|
340
|
+
!isOpen && chunkJ2K7EJYP_cjs.renderSlot(
|
|
341
|
+
"floatingButton",
|
|
342
|
+
floatingButtonProps,
|
|
343
|
+
chunkOU7OROOE_cjs.FloatingButton,
|
|
344
|
+
slots
|
|
345
|
+
)
|
|
346
|
+
] });
|
|
347
|
+
}
|
|
348
|
+
function ChatWidget(props) {
|
|
349
|
+
const {
|
|
350
|
+
// Widget shell props consumed by inner component (also forwarded separately)
|
|
351
|
+
mode,
|
|
352
|
+
position,
|
|
353
|
+
positionMobile,
|
|
354
|
+
isOpen,
|
|
355
|
+
onOpenChange,
|
|
356
|
+
pendingMessage,
|
|
357
|
+
zIndex,
|
|
358
|
+
greetingText,
|
|
359
|
+
greetingOffsetX,
|
|
360
|
+
greetingOffsetY,
|
|
361
|
+
greetingMaxWidth,
|
|
362
|
+
buttonOffsetXMobile,
|
|
363
|
+
buttonOffsetYMobile,
|
|
364
|
+
buttonOffsetXDesktop,
|
|
365
|
+
buttonOffsetYDesktop,
|
|
366
|
+
buttonIconUrl,
|
|
367
|
+
buttonImageUrl,
|
|
368
|
+
buttonImageUrlMobile,
|
|
369
|
+
buttonWidth,
|
|
370
|
+
buttonHeight,
|
|
371
|
+
buttonIconSize,
|
|
372
|
+
buttonWidthMobile,
|
|
373
|
+
buttonHeightMobile,
|
|
374
|
+
buttonIconSizeMobile,
|
|
375
|
+
buttonBgColor,
|
|
376
|
+
buttonBorderRadius,
|
|
377
|
+
hideGreeting,
|
|
378
|
+
logoUrl,
|
|
379
|
+
welcomeTitle,
|
|
380
|
+
welcomeSubtitle,
|
|
381
|
+
hideWelcomeHeader,
|
|
382
|
+
footerText,
|
|
383
|
+
hideHeader,
|
|
384
|
+
showFirstMessage,
|
|
385
|
+
questionsLayout,
|
|
386
|
+
questionsLayoutMobile,
|
|
387
|
+
children: _children,
|
|
388
|
+
...providerProps
|
|
389
|
+
} = props;
|
|
390
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ChatProvider, { ...providerProps, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
391
|
+
ChatWidgetInner,
|
|
392
|
+
{
|
|
393
|
+
mode,
|
|
394
|
+
position,
|
|
395
|
+
positionMobile,
|
|
396
|
+
isOpen,
|
|
397
|
+
onOpenChange,
|
|
398
|
+
pendingMessage,
|
|
399
|
+
zIndex,
|
|
400
|
+
greetingText,
|
|
401
|
+
greetingOffsetX,
|
|
402
|
+
greetingOffsetY,
|
|
403
|
+
greetingMaxWidth,
|
|
404
|
+
buttonOffsetXMobile,
|
|
405
|
+
buttonOffsetYMobile,
|
|
406
|
+
buttonOffsetXDesktop,
|
|
407
|
+
buttonOffsetYDesktop,
|
|
408
|
+
buttonIconUrl,
|
|
409
|
+
buttonImageUrl,
|
|
410
|
+
buttonImageUrlMobile,
|
|
411
|
+
buttonWidth,
|
|
412
|
+
buttonHeight,
|
|
413
|
+
buttonIconSize,
|
|
414
|
+
buttonWidthMobile,
|
|
415
|
+
buttonHeightMobile,
|
|
416
|
+
buttonIconSizeMobile,
|
|
417
|
+
buttonBgColor,
|
|
418
|
+
buttonBorderRadius,
|
|
419
|
+
hideGreeting,
|
|
420
|
+
logoUrl,
|
|
421
|
+
welcomeTitle,
|
|
422
|
+
welcomeSubtitle,
|
|
423
|
+
hideWelcomeHeader,
|
|
424
|
+
footerText,
|
|
425
|
+
hideHeader,
|
|
426
|
+
showFirstMessage,
|
|
427
|
+
questionsLayout,
|
|
428
|
+
questionsLayoutMobile,
|
|
429
|
+
language: providerProps.language
|
|
430
|
+
}
|
|
431
|
+
) });
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
Object.defineProperty(exports, "useAigentycChat", {
|
|
435
|
+
enumerable: true,
|
|
436
|
+
get: function () { return chunk5QSXB6UL_cjs.useAigentycChat; }
|
|
437
|
+
});
|
|
438
|
+
Object.defineProperty(exports, "useLiveChat", {
|
|
439
|
+
enumerable: true,
|
|
440
|
+
get: function () { return chunkNYQSM3EB_cjs.useLiveChat; }
|
|
441
|
+
});
|
|
442
|
+
Object.defineProperty(exports, "useTheme", {
|
|
443
|
+
enumerable: true,
|
|
444
|
+
get: function () { return chunk7BNYTOTE_cjs.useTheme; }
|
|
445
|
+
});
|
|
446
|
+
Object.defineProperty(exports, "useI18n", {
|
|
447
|
+
enumerable: true,
|
|
448
|
+
get: function () { return chunk3MP2EGEJ_cjs.useI18n; }
|
|
449
|
+
});
|
|
450
|
+
Object.defineProperty(exports, "useChatContext", {
|
|
451
|
+
enumerable: true,
|
|
452
|
+
get: function () { return chunkJ2K7EJYP_cjs.useChatContext; }
|
|
453
|
+
});
|
|
454
|
+
Object.defineProperty(exports, "useSlot", {
|
|
455
|
+
enumerable: true,
|
|
456
|
+
get: function () { return chunkJ2K7EJYP_cjs.useSlot; }
|
|
457
|
+
});
|
|
458
|
+
Object.defineProperty(exports, "useSlots", {
|
|
459
|
+
enumerable: true,
|
|
460
|
+
get: function () { return chunkJ2K7EJYP_cjs.useSlots; }
|
|
461
|
+
});
|
|
462
|
+
exports.Chat = Chat;
|
|
463
|
+
exports.ChatProvider = ChatProvider;
|
|
464
|
+
exports.ChatWidget = ChatWidget;
|
|
465
|
+
//# sourceMappingURL=index.cjs.map
|
|
466
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/ChatProvider.tsx","../src/components/Chat.tsx","../src/components/ChatWidget.tsx"],"names":["jsx","LiveChatProvider","PreviewEmbedProvider","I18nProvider","ThemeProvider","SlotsProvider","ChatContextProvider","jsxs","ChatInterface","usePreviewEmbed","useEffect","Fragment","useState","useIsMobile","useSlots","useCallback","useMemo","PreviewEmbedPanel","LiveChatPanel","cn","MobileLiveChatDrawer","renderSlot","FloatingButton"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use client\";\n\nimport { I18nProvider } from \"./I18nProvider\";\nimport { ThemeProvider } from \"./ThemeProvider\";\nimport { SlotsProvider } from \"./SlotsContext\";\nimport { ChatContextProvider } from \"./ChatContext\";\nimport { LiveChatProvider } from \"./LiveChatProvider\";\nimport { PreviewEmbedProvider } from \"./PreviewEmbedProvider\";\nimport type { ChatProviderProps, ChatEventCallbacks } from \"../core/types\";\nimport type { TranslationMap } from \"./I18nProvider\";\n\nconst CALLBACK_KEYS: (keyof ChatEventCallbacks)[] = [\n \"onReady\",\n \"onSessionStart\",\n \"onSessionRestore\",\n \"onMessageSent\",\n \"onMessageReceived\",\n \"onStreamStart\",\n \"onStreamEnd\",\n \"onToolCall\",\n \"onToolResult\",\n \"onToolAction\",\n \"onLiveChatRequested\",\n \"onLiveChatConnected\",\n \"onLiveChatEnded\",\n \"onError\",\n \"onInteraction\",\n];\n\nfunction pickCallbacks(props: Record<string, unknown>): ChatEventCallbacks {\n const out: Record<string, unknown> = {};\n for (const key of CALLBACK_KEYS) {\n if (props[key] !== undefined) out[key] = props[key];\n }\n return out as ChatEventCallbacks;\n}\n\n/**\n * Top-level provider that composes all Aigentyc Chat sub-providers.\n *\n * Provider order (outermost to innermost):\n * 1. I18nProvider\n * 2. ThemeProvider (renders `<div data-aigentyc-chat>`)\n * 3. SlotsProvider\n * 4. ChatContextProvider\n * 5. LiveChatProvider (conditional on `enableLiveChat`)\n * 6. PreviewEmbedProvider\n */\nexport function ChatProvider(props: ChatProviderProps) {\n const {\n children,\n projectId,\n apiEndpoint,\n apiKey,\n clientName,\n language,\n translations,\n theme,\n slots,\n enableLiveChat = false,\n chatServiceUrl,\n persistMessages: _persistMessages,\n maxMessages: _maxMessages,\n questions: _questions,\n ...rest\n } = props;\n\n const callbacks = pickCallbacks(rest as Record<string, unknown>);\n const config = { projectId, apiEndpoint, apiKey, clientName };\n\n // Flatten translations from per-language map into single overrides.\n const langCode = language ?? \"en\";\n const translationOverrides = translations?.[langCode] as Partial<TranslationMap> | undefined;\n\n const liveChatUrl = chatServiceUrl ?? apiEndpoint;\n const inner = enableLiveChat && liveChatUrl && apiKey ? (\n <LiveChatProvider\n chatServiceUrl={liveChatUrl}\n apiKey={apiKey}\n projectId={projectId || \"default\"}\n sessionId=\"default\"\n >\n <PreviewEmbedProvider>{children}</PreviewEmbedProvider>\n </LiveChatProvider>\n ) : (\n <PreviewEmbedProvider>{children}</PreviewEmbedProvider>\n );\n\n return (\n <I18nProvider language={language} translations={translationOverrides}>\n <ThemeProvider theme={theme}>\n <SlotsProvider slots={slots as never}>\n <ChatContextProvider\n config={config}\n callbacks={callbacks}\n >\n {inner}\n </ChatContextProvider>\n </SlotsProvider>\n </ThemeProvider>\n </I18nProvider>\n );\n}\n","\"use client\";\n\n/**\n * Chat — Level 1 drop-in embed component.\n *\n * Wraps everything in `<ChatProvider>` internally and renders `<ChatInterface />`\n * inline (no floating button, no overlay). Use this when you want to embed a\n * chat directly inside a page layout.\n */\n\nimport type { ChatProviderProps } from \"../core/types\";\nimport { ChatProvider } from \"../providers/ChatProvider\";\nimport { ChatInterface } from \"./ChatInterface\";\n\nexport interface ChatProps extends ChatProviderProps {\n /** Optional className forwarded to the ChatInterface root. */\n className?: string;\n}\n\nexport function Chat({ className, children, ...providerProps }: ChatProps) {\n return (\n <ChatProvider {...(providerProps as unknown as React.ComponentProps<typeof ChatProvider>)}>\n <div className={className}>\n <ChatInterface />\n {children}\n </div>\n </ChatProvider>\n );\n}\n\nexport default Chat;\n","\"use client\";\n\n/**\n * Top-level widget (Level 1 API).\n *\n * Composes ChatProvider internally and renders FloatingButton, ChatInterface,\n * LiveChatPanel, and PreviewEmbedPanel based on widget mode.\n */\n\nimport { useState, useCallback, useEffect, useMemo } from \"react\";\nimport { ChatProvider } from \"../providers/ChatProvider\";\nimport type { ChatProviderProps } from \"../core/types\";\nimport { useIsMobile } from \"../hooks/use-mobile\";\nimport { cn } from \"../core/utils\";\nimport { ChatInterface } from \"./ChatInterface\";\nimport { FloatingButton } from \"./FloatingButton\";\nimport { LiveChatPanel, MobileLiveChatDrawer } from \"./LiveChatPanel\";\nimport { PreviewEmbedPanel } from \"./PreviewEmbedPanel\";\nimport { usePreviewEmbed } from \"../providers/PreviewEmbedProvider\";\nimport { useSlots, renderSlot } from \"../providers/SlotsContext\";\n\n/** Widget placement mode. */\nexport type WidgetMode = \"floating\" | \"inline\" | \"trigger\";\n\nexport interface ChatWidgetProps extends ChatProviderProps {\n\t/** How the widget is rendered. Default \"floating\". */\n\tmode?: WidgetMode;\n\t/** Fixed position for the floating button. Default \"bottom-right\". */\n\tposition?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n\tpositionMobile?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n\t/** Controlled open state. */\n\tisOpen?: boolean;\n\t/** Fired whenever the widget opens/closes. */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Message to pre-fill and auto-submit on open. */\n\tpendingMessage?: string | null;\n\t/** Overlay z-index (defaults to 9999). */\n\tzIndex?: number;\n\n\t// Floating button customisation\n\tgreetingText?: string;\n\tgreetingOffsetX?: string;\n\tgreetingOffsetY?: string;\n\tgreetingMaxWidth?: string;\n\tbuttonOffsetXMobile?: string;\n\tbuttonOffsetYMobile?: string;\n\tbuttonOffsetXDesktop?: string;\n\tbuttonOffsetYDesktop?: string;\n\tbuttonIconUrl?: string;\n\tbuttonImageUrl?: string;\n\tbuttonImageUrlMobile?: string;\n\tbuttonWidth?: string;\n\tbuttonHeight?: string;\n\tbuttonIconSize?: string;\n\tbuttonWidthMobile?: string;\n\tbuttonHeightMobile?: string;\n\tbuttonIconSizeMobile?: string;\n\tbuttonBgColor?: string;\n\tbuttonBorderRadius?: string;\n\thideGreeting?: boolean;\n\n\t// Welcome-page customisation (passed through to ChatInterface)\n\tlogoUrl?: string;\n\twelcomeTitle?: string;\n\twelcomeSubtitle?: string;\n\thideWelcomeHeader?: boolean;\n\tfooterText?: string;\n\thideHeader?: boolean;\n\tshowFirstMessage?: boolean;\n\tquestionsLayout?: \"vertical\" | \"horizontal\";\n\tquestionsLayoutMobile?: \"vertical\" | \"horizontal\";\n}\n\n/** Bridges the \"widget-preview-open\" custom event to the PreviewEmbed context. */\nfunction PreviewEventBridge() {\n\tconst previewEmbed = usePreviewEmbed();\n\n\tuseEffect(() => {\n\t\tif (!previewEmbed || typeof window === \"undefined\") return;\n\t\tconst handler = (e: Event) => {\n\t\t\tconst { url, title, description } = (e as CustomEvent).detail || {};\n\t\t\tif (url) previewEmbed.openPreview({ url, title, description });\n\t\t};\n\t\twindow.addEventListener(\"widget-preview-open\", handler);\n\t\treturn () => window.removeEventListener(\"widget-preview-open\", handler);\n\t}, [previewEmbed]);\n\n\treturn null;\n}\n\n/** Mobile preview drawer — slides up from bottom of the widget. */\nfunction MobilePreviewDrawer() {\n\tconst previewEmbed = usePreviewEmbed();\n\tconst isVisible = !!previewEmbed?.preview;\n\tconst preview = previewEmbed?.preview;\n\tconst closePreview = previewEmbed?.closePreview;\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tclassName=\"absolute inset-0 z-40 bg-black/50\"\n\t\t\t\tstyle={{\n\t\t\t\t\topacity: isVisible ? 1 : 0,\n\t\t\t\t\tpointerEvents: isVisible ? \"auto\" : \"none\",\n\t\t\t\t\ttransition: \"opacity 200ms ease-out\",\n\t\t\t\t}}\n\t\t\t\tonClick={closePreview}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName=\"absolute inset-x-0 bottom-0 z-50 rounded-t-2xl border-t shadow-2xl\"\n\t\t\t\tstyle={{\n\t\t\t\t\tbackgroundColor: \"var(--ac-background)\",\n\t\t\t\t\tborderColor: \"var(--ac-border)\",\n\t\t\t\t\theight: \"calc(100dvh - 150px)\",\n\t\t\t\t\ttransform: isVisible ? \"translateY(0)\" : \"translateY(100%)\",\n\t\t\t\t\ttransition: \"transform 300ms cubic-bezier(0.32, 0.72, 0, 1)\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div className=\"flex justify-center pt-3 pb-1\">\n\t\t\t\t\t<div className=\"w-[100px] h-2 rounded-full bg-muted\" />\n\t\t\t\t</div>\n\t\t\t\t<div className=\"px-5 py-3 flex items-center justify-between\">\n\t\t\t\t\t<div className=\"min-w-0\">\n\t\t\t\t\t\t<h3 className=\"font-medium text-sm truncate\" style={{ color: \"var(--ac-text)\" }}>\n\t\t\t\t\t\t\t{preview?.title || \"Preview\"}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t{preview?.description && (\n\t\t\t\t\t\t\t<p className=\"text-xs text-muted-foreground mt-0.5 truncate\">{preview.description}</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={closePreview}\n\t\t\t\t\t\tclassName=\"shrink-0 w-8 h-8 rounded-full border flex items-center justify-center hover:bg-muted transition-colors ml-3\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"sr-only\">Close</span>×\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"px-4 pb-4 flex-1\" style={{ height: \"calc(100% - 80px)\" }}>\n\t\t\t\t\t{preview && (\n\t\t\t\t\t\t<iframe\n\t\t\t\t\t\t\tkey={preview.url}\n\t\t\t\t\t\t\tsrc={preview.url}\n\t\t\t\t\t\t\tclassName=\"w-full h-full rounded-xl border-none\"\n\t\t\t\t\t\t\tsandbox=\"allow-scripts allow-same-origin allow-forms allow-popups allow-presentation\"\n\t\t\t\t\t\t\ttitle={preview.title || \"Preview\"}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\n/** Props for the inner widget shell — does not include ChatProvider config. */\ntype ChatWidgetInnerProps = Omit<\n\tChatWidgetProps,\n\tkeyof ChatProviderProps | \"children\"\n> & { language?: string };\n\n/** Inner component — rendered inside ChatProvider so it can read context. */\nfunction ChatWidgetInner({\n\tmode = \"floating\",\n\tposition = \"bottom-right\",\n\tpositionMobile,\n\tisOpen: controlledIsOpen,\n\tonOpenChange,\n\tpendingMessage: initialPendingMessage,\n\tzIndex,\n\tgreetingText,\n\tgreetingOffsetX,\n\tgreetingOffsetY,\n\tgreetingMaxWidth,\n\tbuttonOffsetXMobile,\n\tbuttonOffsetYMobile,\n\tbuttonOffsetXDesktop,\n\tbuttonOffsetYDesktop,\n\tbuttonIconUrl,\n\tbuttonImageUrl,\n\tbuttonImageUrlMobile,\n\tbuttonWidth,\n\tbuttonHeight,\n\tbuttonIconSize,\n\tbuttonWidthMobile,\n\tbuttonHeightMobile,\n\tbuttonIconSizeMobile,\n\tbuttonBgColor,\n\tbuttonBorderRadius,\n\thideGreeting,\n\tlogoUrl,\n\twelcomeTitle,\n\twelcomeSubtitle,\n\thideWelcomeHeader,\n\tfooterText,\n\thideHeader,\n\tshowFirstMessage,\n\tquestionsLayout,\n\tquestionsLayoutMobile,\n\tlanguage,\n}: ChatWidgetInnerProps) {\n\tconst [internalIsOpen, setInternalIsOpen] = useState(false);\n\tconst [pendingMessage, setPendingMessage] = useState<string | null>(initialPendingMessage ?? null);\n\tconst isMobile = useIsMobile();\n\tconst slots = useSlots();\n\n\tuseEffect(() => {\n\t\tif (controlledIsOpen === true) setInternalIsOpen(true);\n\t}, [controlledIsOpen]);\n\n\tconst isOpen = internalIsOpen;\n\n\t// Lock body scroll when open (except in inline mode)\n\tuseEffect(() => {\n\t\tif (mode === \"inline\" || typeof document === \"undefined\") return;\n\t\tif (isOpen) {\n\t\t\tconst originalStyle = window.getComputedStyle(document.body).overflow;\n\t\t\tdocument.body.style.overflow = \"hidden\";\n\t\t\treturn () => {\n\t\t\t\tdocument.body.style.overflow = originalStyle;\n\t\t\t};\n\t\t}\n\t}, [isOpen, mode]);\n\n\tconst handleOpen = useCallback(() => {\n\t\tsetInternalIsOpen(true);\n\t\tonOpenChange?.(true);\n\t}, [onOpenChange]);\n\n\tconst handleClose = useCallback(() => {\n\t\tsetInternalIsOpen(false);\n\t\tonOpenChange?.(false);\n\t}, [onOpenChange]);\n\n\tconst handleToggle = useCallback(() => {\n\t\tif (isOpen) handleClose();\n\t\telse handleOpen();\n\t}, [isOpen, handleOpen, handleClose]);\n\n\tconst isRightSide = position === \"bottom-right\" || position === \"top-right\";\n\tconst dirRTL = language === \"he\";\n\n\tconst chatInterfaceProps = useMemo(\n\t\t() => ({\n\t\t\tisOpen,\n\t\t\tonClose: handleClose,\n\t\t\tlogoUrl,\n\t\t\twelcomeTitle,\n\t\t\twelcomeSubtitle,\n\t\t\thideWelcomeHeader,\n\t\t\tfooterText,\n\t\t\thideHeader,\n\t\t\tshowFirstMessage,\n\t\t\tquestionsLayout,\n\t\t\tquestionsLayoutMobile,\n\t\t\tpendingMessage,\n\t\t\tonPendingMessageConsumed: () => setPendingMessage(null),\n\t\t}),\n\t\t[isOpen, handleClose, logoUrl, welcomeTitle, welcomeSubtitle, hideWelcomeHeader, footerText, hideHeader, showFirstMessage, questionsLayout, questionsLayoutMobile, pendingMessage],\n\t);\n\n\t// Inline mode\n\tif (mode === \"inline\") {\n\t\treturn (\n\t\t\t<div className=\"flex flex-col w-full h-full\" dir={dirRTL ? \"rtl\" : \"ltr\"} style={{ backgroundColor: \"var(--ac-background)\" }}>\n\t\t\t\t<ChatInterface {...chatInterfaceProps} />\n\t\t\t</div>\n\t\t);\n\t}\n\n\tconst panelZIndex = zIndex || 9999;\n\n\t// Floating button slot props\n\tconst floatingButtonProps = {\n\t\tonClick: handleToggle,\n\t\tposition,\n\t\tpositionMobile,\n\t\tisOpen,\n\t\tgreeting: greetingText,\n\t\tgreetingOffsetX,\n\t\tgreetingOffsetY,\n\t\tgreetingMaxWidth,\n\t\tbuttonOffsetXMobile,\n\t\tbuttonOffsetYMobile,\n\t\tbuttonOffsetXDesktop,\n\t\tbuttonOffsetYDesktop,\n\t\tbuttonIconUrl,\n\t\tbuttonImageUrl,\n\t\tbuttonImageUrlMobile,\n\t\tbuttonWidth,\n\t\tbuttonHeight,\n\t\tbuttonIconSize,\n\t\tbuttonWidthMobile,\n\t\tbuttonHeightMobile,\n\t\tbuttonIconSizeMobile,\n\t\tbuttonBgColor,\n\t\tbuttonBorderRadius,\n\t\tzIndex: zIndex || 999999,\n\t\thideGreeting,\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<PreviewEventBridge />\n\n\t\t\t{/* Overlay */}\n\t\t\t<div\n\t\t\t\tclassName=\"fixed inset-0 bg-black/50 transition-opacity duration-300 ease-in-out\"\n\t\t\t\tstyle={{\n\t\t\t\t\tzIndex: panelZIndex - 1,\n\t\t\t\t\topacity: isOpen ? 1 : 0,\n\t\t\t\t\tpointerEvents: isOpen ? \"auto\" : \"none\",\n\t\t\t\t}}\n\t\t\t\tonClick={handleClose}\n\t\t\t/>\n\n\t\t\t{!isMobile && <PreviewEmbedPanel isOpen={isOpen} isRightSide={isRightSide} zIndex={panelZIndex - 1} />}\n\t\t\t{!isMobile && <LiveChatPanel isWidgetOpen={isOpen} isRightSide={isRightSide} zIndex={panelZIndex - 1} />}\n\n\t\t\t{/* Main chat panel */}\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"fixed flex flex-col p-0 shadow-2xl\",\n\t\t\t\t\tisMobile\n\t\t\t\t\t\t? \"inset-x-0 rounded-t-2xl border-t\"\n\t\t\t\t\t\t: cn(\"inset-y-0 w-full max-w-[780px]\", isRightSide ? \"right-0 border-l\" : \"left-0 border-r\"),\n\t\t\t\t)}\n\t\t\t\tdir={dirRTL ? \"rtl\" : \"ltr\"}\n\t\t\t\tstyle={{\n\t\t\t\t\tbackgroundColor: \"var(--ac-background)\",\n\t\t\t\t\tborderColor: \"var(--ac-border)\",\n\t\t\t\t\t...(isMobile\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttop: \"70px\",\n\t\t\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\t\t\theight: \"calc(100dvh - 70px)\",\n\t\t\t\t\t\t\t\ttransform: isOpen ? \"translateY(0)\" : \"translateY(100%)\",\n\t\t\t\t\t\t\t\topacity: isOpen ? 1 : 0,\n\t\t\t\t\t\t\t\tpointerEvents: isOpen ? \"auto\" : \"none\",\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\ttransform: isOpen ? \"translateX(0)\" : isRightSide ? \"translateX(100%)\" : \"translateX(-100%)\",\n\t\t\t\t\t\t\t\topacity: isOpen ? 1 : 0,\n\t\t\t\t\t\t\t\tpointerEvents: isOpen ? \"auto\" : \"none\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\ttransition: \"transform 300ms ease-in-out\",\n\t\t\t\t\tzIndex: panelZIndex,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{isMobile && <MobilePreviewDrawer />}\n\t\t\t\t<MobileLiveChatDrawer />\n\n\t\t\t\t<ChatInterface {...chatInterfaceProps} />\n\t\t\t</div>\n\n\t\t\t{/* Floating button — hidden when open */}\n\t\t\t{!isOpen &&\n\t\t\t\trenderSlot(\n\t\t\t\t\t\"floatingButton\",\n\t\t\t\t\tfloatingButtonProps as never,\n\t\t\t\t\tFloatingButton as never,\n\t\t\t\t\tslots,\n\t\t\t\t)}\n\t\t</>\n\t);\n}\n\n/**\n * Top-level widget (Level 1 API). Composes ChatProvider internally and renders\n * the correct shell based on `mode`.\n */\nexport function ChatWidget(props: ChatWidgetProps) {\n\t// Split ChatProviderProps from widget-shell props.\n\tconst {\n\t\t// Widget shell props consumed by inner component (also forwarded separately)\n\t\tmode,\n\t\tposition,\n\t\tpositionMobile,\n\t\tisOpen,\n\t\tonOpenChange,\n\t\tpendingMessage,\n\t\tzIndex,\n\t\tgreetingText,\n\t\tgreetingOffsetX,\n\t\tgreetingOffsetY,\n\t\tgreetingMaxWidth,\n\t\tbuttonOffsetXMobile,\n\t\tbuttonOffsetYMobile,\n\t\tbuttonOffsetXDesktop,\n\t\tbuttonOffsetYDesktop,\n\t\tbuttonIconUrl,\n\t\tbuttonImageUrl,\n\t\tbuttonImageUrlMobile,\n\t\tbuttonWidth,\n\t\tbuttonHeight,\n\t\tbuttonIconSize,\n\t\tbuttonWidthMobile,\n\t\tbuttonHeightMobile,\n\t\tbuttonIconSizeMobile,\n\t\tbuttonBgColor,\n\t\tbuttonBorderRadius,\n\t\thideGreeting,\n\t\tlogoUrl,\n\t\twelcomeTitle,\n\t\twelcomeSubtitle,\n\t\thideWelcomeHeader,\n\t\tfooterText,\n\t\thideHeader,\n\t\tshowFirstMessage,\n\t\tquestionsLayout,\n\t\tquestionsLayoutMobile,\n\t\tchildren: _children,\n\t\t...providerProps\n\t} = props;\n\n\treturn (\n\t\t<ChatProvider {...providerProps}>\n\t\t\t<ChatWidgetInner\n\t\t\t\tmode={mode}\n\t\t\t\tposition={position}\n\t\t\t\tpositionMobile={positionMobile}\n\t\t\t\tisOpen={isOpen}\n\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\tpendingMessage={pendingMessage}\n\t\t\t\tzIndex={zIndex}\n\t\t\t\tgreetingText={greetingText}\n\t\t\t\tgreetingOffsetX={greetingOffsetX}\n\t\t\t\tgreetingOffsetY={greetingOffsetY}\n\t\t\t\tgreetingMaxWidth={greetingMaxWidth}\n\t\t\t\tbuttonOffsetXMobile={buttonOffsetXMobile}\n\t\t\t\tbuttonOffsetYMobile={buttonOffsetYMobile}\n\t\t\t\tbuttonOffsetXDesktop={buttonOffsetXDesktop}\n\t\t\t\tbuttonOffsetYDesktop={buttonOffsetYDesktop}\n\t\t\t\tbuttonIconUrl={buttonIconUrl}\n\t\t\t\tbuttonImageUrl={buttonImageUrl}\n\t\t\t\tbuttonImageUrlMobile={buttonImageUrlMobile}\n\t\t\t\tbuttonWidth={buttonWidth}\n\t\t\t\tbuttonHeight={buttonHeight}\n\t\t\t\tbuttonIconSize={buttonIconSize}\n\t\t\t\tbuttonWidthMobile={buttonWidthMobile}\n\t\t\t\tbuttonHeightMobile={buttonHeightMobile}\n\t\t\t\tbuttonIconSizeMobile={buttonIconSizeMobile}\n\t\t\t\tbuttonBgColor={buttonBgColor}\n\t\t\t\tbuttonBorderRadius={buttonBorderRadius}\n\t\t\t\thideGreeting={hideGreeting}\n\t\t\t\tlogoUrl={logoUrl}\n\t\t\t\twelcomeTitle={welcomeTitle}\n\t\t\t\twelcomeSubtitle={welcomeSubtitle}\n\t\t\t\thideWelcomeHeader={hideWelcomeHeader}\n\t\t\t\tfooterText={footerText}\n\t\t\t\thideHeader={hideHeader}\n\t\t\t\tshowFirstMessage={showFirstMessage}\n\t\t\t\tquestionsLayout={questionsLayout}\n\t\t\t\tquestionsLayoutMobile={questionsLayoutMobile}\n\t\t\t\tlanguage={providerProps.language as string | undefined}\n\t\t\t/>\n\t\t</ChatProvider>\n\t);\n}\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { C as ChatProviderProps } from './types-DKJ_-nbG.cjs';
|
|
3
|
+
export { a as ChatConfig, b as ChatEventCallbacks, c as ChatMessage, d as ComponentAction, L as Language, e as LiveChatMessage, f as LiveChatState, Q as QuestionConfig, S as SlotMap, T as ThemeConfig, g as ToolRendererProps, h as ToolResult } from './types-DKJ_-nbG.cjs';
|
|
4
|
+
export { L as LiveChatReturn, U as UseAigentycChatOptions, a as UseAigentycChatReturn, u as useAigentycChat, b as useChatContext, c as useLiveChat, d as useSlot, e as useSlots } from './SlotsContext-CHvISDJT.cjs';
|
|
5
|
+
export { useTheme } from './theme.cjs';
|
|
6
|
+
export { useI18n } from './i18n.cjs';
|
|
7
|
+
import 'react';
|
|
8
|
+
|
|
9
|
+
interface ChatProps extends ChatProviderProps {
|
|
10
|
+
/** Optional className forwarded to the ChatInterface root. */
|
|
11
|
+
className?: string;
|
|
12
|
+
}
|
|
13
|
+
declare function Chat({ className, children, ...providerProps }: ChatProps): react_jsx_runtime.JSX.Element;
|
|
14
|
+
|
|
15
|
+
/** Widget placement mode. */
|
|
16
|
+
type WidgetMode = "floating" | "inline" | "trigger";
|
|
17
|
+
interface ChatWidgetProps extends ChatProviderProps {
|
|
18
|
+
/** How the widget is rendered. Default "floating". */
|
|
19
|
+
mode?: WidgetMode;
|
|
20
|
+
/** Fixed position for the floating button. Default "bottom-right". */
|
|
21
|
+
position?: "bottom-right" | "bottom-left" | "top-right" | "top-left";
|
|
22
|
+
positionMobile?: "bottom-right" | "bottom-left" | "top-right" | "top-left";
|
|
23
|
+
/** Controlled open state. */
|
|
24
|
+
isOpen?: boolean;
|
|
25
|
+
/** Fired whenever the widget opens/closes. */
|
|
26
|
+
onOpenChange?: (open: boolean) => void;
|
|
27
|
+
/** Message to pre-fill and auto-submit on open. */
|
|
28
|
+
pendingMessage?: string | null;
|
|
29
|
+
/** Overlay z-index (defaults to 9999). */
|
|
30
|
+
zIndex?: number;
|
|
31
|
+
greetingText?: string;
|
|
32
|
+
greetingOffsetX?: string;
|
|
33
|
+
greetingOffsetY?: string;
|
|
34
|
+
greetingMaxWidth?: string;
|
|
35
|
+
buttonOffsetXMobile?: string;
|
|
36
|
+
buttonOffsetYMobile?: string;
|
|
37
|
+
buttonOffsetXDesktop?: string;
|
|
38
|
+
buttonOffsetYDesktop?: string;
|
|
39
|
+
buttonIconUrl?: string;
|
|
40
|
+
buttonImageUrl?: string;
|
|
41
|
+
buttonImageUrlMobile?: string;
|
|
42
|
+
buttonWidth?: string;
|
|
43
|
+
buttonHeight?: string;
|
|
44
|
+
buttonIconSize?: string;
|
|
45
|
+
buttonWidthMobile?: string;
|
|
46
|
+
buttonHeightMobile?: string;
|
|
47
|
+
buttonIconSizeMobile?: string;
|
|
48
|
+
buttonBgColor?: string;
|
|
49
|
+
buttonBorderRadius?: string;
|
|
50
|
+
hideGreeting?: boolean;
|
|
51
|
+
logoUrl?: string;
|
|
52
|
+
welcomeTitle?: string;
|
|
53
|
+
welcomeSubtitle?: string;
|
|
54
|
+
hideWelcomeHeader?: boolean;
|
|
55
|
+
footerText?: string;
|
|
56
|
+
hideHeader?: boolean;
|
|
57
|
+
showFirstMessage?: boolean;
|
|
58
|
+
questionsLayout?: "vertical" | "horizontal";
|
|
59
|
+
questionsLayoutMobile?: "vertical" | "horizontal";
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Top-level widget (Level 1 API). Composes ChatProvider internally and renders
|
|
63
|
+
* the correct shell based on `mode`.
|
|
64
|
+
*/
|
|
65
|
+
declare function ChatWidget(props: ChatWidgetProps): react_jsx_runtime.JSX.Element;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Top-level provider that composes all Aigentyc Chat sub-providers.
|
|
69
|
+
*
|
|
70
|
+
* Provider order (outermost to innermost):
|
|
71
|
+
* 1. I18nProvider
|
|
72
|
+
* 2. ThemeProvider (renders `<div data-aigentyc-chat>`)
|
|
73
|
+
* 3. SlotsProvider
|
|
74
|
+
* 4. ChatContextProvider
|
|
75
|
+
* 5. LiveChatProvider (conditional on `enableLiveChat`)
|
|
76
|
+
* 6. PreviewEmbedProvider
|
|
77
|
+
*/
|
|
78
|
+
declare function ChatProvider(props: ChatProviderProps): react_jsx_runtime.JSX.Element;
|
|
79
|
+
|
|
80
|
+
export { Chat, ChatProvider, ChatProviderProps, ChatWidget };
|