@aigentyc/chat-sdk 0.3.1 → 0.4.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 (58) hide show
  1. package/AGENTS.md +24 -1
  2. package/claude-skill/aigentyc-chat-sdk/SKILL.md +1 -1
  3. package/context7.json +1 -1
  4. package/dist/{ChatInterface-f8ftS56n.d.ts → ChatInterface--yaDB5yp.d.ts} +1 -1
  5. package/dist/{ChatInterface-B0zbA3Lm.d.cts → ChatInterface-0rq8D5-8.d.cts} +1 -1
  6. package/dist/{SlotsContext-BjiX1mRx.d.ts → SlotsContext-CWTjP0mA.d.ts} +1 -1
  7. package/dist/{SlotsContext-CEOBjzfh.d.cts → SlotsContext-u5CFB7MS.d.cts} +1 -1
  8. package/dist/{chunk-FPQ3UCCJ.js → chunk-3EN3DMUL.js} +24 -5
  9. package/dist/chunk-3EN3DMUL.js.map +1 -0
  10. package/dist/{chunk-BPV66QNM.cjs → chunk-46MUOYPR.cjs} +24 -5
  11. package/dist/chunk-46MUOYPR.cjs.map +1 -0
  12. package/dist/{chunk-AD6XWKWB.js → chunk-6ZZTTD5E.js} +3 -3
  13. package/dist/{chunk-AD6XWKWB.js.map → chunk-6ZZTTD5E.js.map} +1 -1
  14. package/dist/{chunk-3HGOLNGG.cjs → chunk-AWRQSM42.cjs} +23 -3
  15. package/dist/chunk-AWRQSM42.cjs.map +1 -0
  16. package/dist/{chunk-M4YRNNGB.js → chunk-LSKOJ7SH.js} +23 -3
  17. package/dist/chunk-LSKOJ7SH.js.map +1 -0
  18. package/dist/{chunk-5XF7KH6B.cjs → chunk-LVWSWTI3.cjs} +22 -22
  19. package/dist/chunk-LVWSWTI3.cjs.map +1 -0
  20. package/dist/{chunk-7IFBPXT3.cjs → chunk-OEEDYJTV.cjs} +6 -6
  21. package/dist/{chunk-7IFBPXT3.cjs.map → chunk-OEEDYJTV.cjs.map} +1 -1
  22. package/dist/{chunk-YG2COKFR.js → chunk-RAQVW2D7.js} +7 -7
  23. package/dist/chunk-RAQVW2D7.js.map +1 -0
  24. package/dist/components.cjs +15 -15
  25. package/dist/components.d.cts +2 -2
  26. package/dist/components.d.ts +2 -2
  27. package/dist/components.js +4 -4
  28. package/dist/core.d.cts +2 -2
  29. package/dist/core.d.ts +2 -2
  30. package/dist/hooks.cjs +6 -6
  31. package/dist/hooks.d.cts +2 -2
  32. package/dist/hooks.d.ts +2 -2
  33. package/dist/hooks.js +2 -2
  34. package/dist/i18n.d.cts +1 -1
  35. package/dist/i18n.d.ts +1 -1
  36. package/dist/index.cjs +33 -22
  37. package/dist/index.cjs.map +1 -1
  38. package/dist/index.d.cts +4 -4
  39. package/dist/index.d.ts +4 -4
  40. package/dist/index.js +18 -7
  41. package/dist/index.js.map +1 -1
  42. package/dist/llms-full.txt +34 -11
  43. package/dist/theme.d.cts +1 -1
  44. package/dist/theme.d.ts +1 -1
  45. package/dist/tools.cjs +5 -5
  46. package/dist/tools.d.cts +2 -2
  47. package/dist/tools.d.ts +2 -2
  48. package/dist/tools.js +2 -2
  49. package/dist/{types-DlNwk-bG.d.cts → types-DQCjs81O.d.cts} +19 -1
  50. package/dist/{types-DlNwk-bG.d.ts → types-DQCjs81O.d.ts} +19 -1
  51. package/llms.txt +1 -1
  52. package/package.json +1 -1
  53. package/dist/chunk-3HGOLNGG.cjs.map +0 -1
  54. package/dist/chunk-5XF7KH6B.cjs.map +0 -1
  55. package/dist/chunk-BPV66QNM.cjs.map +0 -1
  56. package/dist/chunk-FPQ3UCCJ.js.map +0 -1
  57. package/dist/chunk-M4YRNNGB.js.map +0 -1
  58. package/dist/chunk-YG2COKFR.js.map +0 -1
package/dist/hooks.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- export { L as LiveChatReturn, U as UseAigentycChatOptions, b as UseAigentycChatReturn, u as useAigentycChat, c as useChatContext, d as useLiveChat, e as useSlot, f as useSlots } from './SlotsContext-BjiX1mRx.js';
1
+ export { L as LiveChatReturn, U as UseAigentycChatOptions, b as UseAigentycChatReturn, u as useAigentycChat, c as useChatContext, d as useLiveChat, e as useSlot, f as useSlots } from './SlotsContext-CWTjP0mA.js';
2
2
  export { useTheme } from './theme.js';
3
3
  export { useI18n } from './i18n.js';
4
4
  import { RefObject } from 'react';
5
5
  export { u as useInteractionTracker } from './interaction-tracker-D9P1Oq4j.js';
6
- import './types-DlNwk-bG.js';
6
+ import './types-DQCjs81O.js';
7
7
  import 'react/jsx-runtime';
8
8
 
9
9
  /** Information about a preview to display in an embedded panel. */
package/dist/hooks.js CHANGED
@@ -1,12 +1,12 @@
1
1
  "use client";
2
- export { useAigentycChat } from './chunk-M4YRNNGB.js';
2
+ export { useAigentycChat } from './chunk-LSKOJ7SH.js';
3
3
  export { useInteractionTracker } from './chunk-MT2AMINB.js';
4
4
  import './chunk-BKDV2H6Z.js';
5
5
  export { useIsMobile, useLiveChat, usePreviewEmbed } from './chunk-5F3O3ZJH.js';
6
6
  export { useTheme } from './chunk-IU7Q7O5G.js';
7
7
  import './chunk-MZQKGNWF.js';
8
8
  export { useI18n } from './chunk-QYCEHFAB.js';
9
- export { useChatContext, useSlot, useSlots } from './chunk-FPQ3UCCJ.js';
9
+ export { useChatContext, useSlot, useSlots } from './chunk-3EN3DMUL.js';
10
10
  import { useState, useCallback, useMemo, useEffect } from 'react';
11
11
 
12
12
  function useImageLoader() {
package/dist/i18n.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- export { L as Language } from './types-DlNwk-bG.cjs';
3
+ export { L as Language } from './types-DQCjs81O.cjs';
4
4
 
5
5
  /**
6
6
  * All supported translation keys.
package/dist/i18n.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- export { L as Language } from './types-DlNwk-bG.js';
3
+ export { L as Language } from './types-DQCjs81O.js';
4
4
 
5
5
  /**
6
6
  * All supported translation keys.
package/dist/index.cjs CHANGED
@@ -1,17 +1,17 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk3HGOLNGG_cjs = require('./chunk-3HGOLNGG.cjs');
4
+ var chunkAWRQSM42_cjs = require('./chunk-AWRQSM42.cjs');
5
5
  require('./chunk-NG7OTWXQ.cjs');
6
- var chunk5XF7KH6B_cjs = require('./chunk-5XF7KH6B.cjs');
6
+ var chunkLVWSWTI3_cjs = require('./chunk-LVWSWTI3.cjs');
7
7
  var chunkNYQSM3EB_cjs = require('./chunk-NYQSM3EB.cjs');
8
8
  var chunkP3RPAI4F_cjs = require('./chunk-P3RPAI4F.cjs');
9
9
  require('./chunk-4WOBNRRB.cjs');
10
10
  require('./chunk-X7R334SB.cjs');
11
11
  var chunk3MP2EGEJ_cjs = require('./chunk-3MP2EGEJ.cjs');
12
12
  var chunk7AZMWPKX_cjs = require('./chunk-7AZMWPKX.cjs');
13
- require('./chunk-7IFBPXT3.cjs');
14
- var chunkBPV66QNM_cjs = require('./chunk-BPV66QNM.cjs');
13
+ require('./chunk-OEEDYJTV.cjs');
14
+ var chunk46MUOYPR_cjs = require('./chunk-46MUOYPR.cjs');
15
15
  require('./chunk-JOO6C3XT.cjs');
16
16
  require('./chunk-TZ7EM3EG.cjs');
17
17
  require('./chunk-JI5KCSOI.cjs');
@@ -54,6 +54,9 @@ function ChatProvider(props) {
54
54
  apiEndpoint,
55
55
  apiKey,
56
56
  clientName,
57
+ pageUrl,
58
+ pageTitle,
59
+ pageContext,
57
60
  language,
58
61
  translations,
59
62
  theme,
@@ -66,7 +69,15 @@ function ChatProvider(props) {
66
69
  ...rest
67
70
  } = props;
68
71
  const callbacks = pickCallbacks(rest);
69
- const config = { projectId, apiEndpoint, apiKey, clientName };
72
+ const config = {
73
+ projectId,
74
+ apiEndpoint,
75
+ apiKey,
76
+ clientName,
77
+ pageUrl,
78
+ pageTitle,
79
+ pageContext
80
+ };
70
81
  const langCode = language ?? "en";
71
82
  const translationOverrides = translations?.[langCode];
72
83
  const liveChatUrl = chatServiceUrl ?? apiEndpoint;
@@ -80,8 +91,8 @@ function ChatProvider(props) {
80
91
  children: /* @__PURE__ */ jsxRuntime.jsx(chunkNYQSM3EB_cjs.PreviewEmbedProvider, { children })
81
92
  }
82
93
  ) : /* @__PURE__ */ jsxRuntime.jsx(chunkNYQSM3EB_cjs.PreviewEmbedProvider, { children });
83
- return /* @__PURE__ */ jsxRuntime.jsx(chunk3MP2EGEJ_cjs.I18nProvider, { language, translations: translationOverrides, children: /* @__PURE__ */ jsxRuntime.jsx(chunkP3RPAI4F_cjs.ThemeProvider, { theme, children: /* @__PURE__ */ jsxRuntime.jsx(chunkBPV66QNM_cjs.SlotsProvider, { slots, children: /* @__PURE__ */ jsxRuntime.jsx(
84
- chunkBPV66QNM_cjs.ChatContextProvider,
94
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk3MP2EGEJ_cjs.I18nProvider, { language, translations: translationOverrides, children: /* @__PURE__ */ jsxRuntime.jsx(chunkP3RPAI4F_cjs.ThemeProvider, { theme, children: /* @__PURE__ */ jsxRuntime.jsx(chunk46MUOYPR_cjs.SlotsProvider, { slots, children: /* @__PURE__ */ jsxRuntime.jsx(
95
+ chunk46MUOYPR_cjs.ChatContextProvider,
85
96
  {
86
97
  config,
87
98
  callbacks,
@@ -91,7 +102,7 @@ function ChatProvider(props) {
91
102
  }
92
103
  function Chat({ className, children, showSources, messagePartOrder, ...providerProps }) {
93
104
  return /* @__PURE__ */ jsxRuntime.jsx(ChatProvider, { ...providerProps, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className, children: [
94
- /* @__PURE__ */ jsxRuntime.jsx(chunk5XF7KH6B_cjs.ChatInterface, { showSources, messagePartOrder }),
105
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLVWSWTI3_cjs.ChatInterface, { showSources, messagePartOrder }),
95
106
  children
96
107
  ] }) });
97
108
  }
@@ -216,7 +227,7 @@ function ChatWidgetInner({
216
227
  const [internalIsOpen, setInternalIsOpen] = react.useState(false);
217
228
  const [pendingMessage, setPendingMessage] = react.useState(initialPendingMessage ?? null);
218
229
  const isMobile = chunkNYQSM3EB_cjs.useIsMobile();
219
- const slots = chunkBPV66QNM_cjs.useSlots();
230
+ const slots = chunk46MUOYPR_cjs.useSlots();
220
231
  react.useEffect(() => {
221
232
  if (controlledIsOpen === true) setInternalIsOpen(true);
222
233
  }, [controlledIsOpen]);
@@ -266,7 +277,7 @@ function ChatWidgetInner({
266
277
  [isOpen, handleClose, logoUrl, welcomeTitle, welcomeSubtitle, hideWelcomeHeader, footerText, hideHeader, showFirstMessage, questionsLayout, questionsLayoutMobile, showSources, messagePartOrder, pendingMessage]
267
278
  );
268
279
  if (mode === "inline") {
269
- 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(chunk5XF7KH6B_cjs.ChatInterface, { ...chatInterfaceProps }) });
280
+ 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(chunkLVWSWTI3_cjs.ChatInterface, { ...chatInterfaceProps }) });
270
281
  }
271
282
  const panelZIndex = zIndex || 9999;
272
283
  const floatingButtonProps = {
@@ -310,8 +321,8 @@ function ChatWidgetInner({
310
321
  onClick: handleClose
311
322
  }
312
323
  ),
313
- !isMobile && /* @__PURE__ */ jsxRuntime.jsx(chunk5XF7KH6B_cjs.PreviewEmbedPanel, { isOpen, isRightSide, zIndex: panelZIndex - 1 }),
314
- !isMobile && /* @__PURE__ */ jsxRuntime.jsx(chunk5XF7KH6B_cjs.LiveChatPanel, { isWidgetOpen: isOpen, isRightSide, zIndex: panelZIndex - 1 }),
324
+ !isMobile && /* @__PURE__ */ jsxRuntime.jsx(chunkLVWSWTI3_cjs.PreviewEmbedPanel, { isOpen, isRightSide, zIndex: panelZIndex - 1 }),
325
+ !isMobile && /* @__PURE__ */ jsxRuntime.jsx(chunkLVWSWTI3_cjs.LiveChatPanel, { isWidgetOpen: isOpen, isRightSide, zIndex: panelZIndex - 1 }),
315
326
  /* @__PURE__ */ jsxRuntime.jsxs(
316
327
  "div",
317
328
  {
@@ -340,15 +351,15 @@ function ChatWidgetInner({
340
351
  },
341
352
  children: [
342
353
  isMobile && /* @__PURE__ */ jsxRuntime.jsx(MobilePreviewDrawer, {}),
343
- /* @__PURE__ */ jsxRuntime.jsx(chunk5XF7KH6B_cjs.MobileLiveChatDrawer, {}),
344
- /* @__PURE__ */ jsxRuntime.jsx(chunk5XF7KH6B_cjs.ChatInterface, { ...chatInterfaceProps })
354
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLVWSWTI3_cjs.MobileLiveChatDrawer, {}),
355
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLVWSWTI3_cjs.ChatInterface, { ...chatInterfaceProps })
345
356
  ]
346
357
  }
347
358
  ),
348
- !isOpen && chunkBPV66QNM_cjs.renderSlot(
359
+ !isOpen && chunk46MUOYPR_cjs.renderSlot(
349
360
  "floatingButton",
350
361
  floatingButtonProps,
351
- chunk5XF7KH6B_cjs.FloatingButton,
362
+ chunkLVWSWTI3_cjs.FloatingButton,
352
363
  slots
353
364
  )
354
365
  ] });
@@ -441,11 +452,11 @@ function ChatWidget(props) {
441
452
 
442
453
  Object.defineProperty(exports, "useAigentycChat", {
443
454
  enumerable: true,
444
- get: function () { return chunk3HGOLNGG_cjs.useAigentycChat; }
455
+ get: function () { return chunkAWRQSM42_cjs.useAigentycChat; }
445
456
  });
446
457
  Object.defineProperty(exports, "ChatErrorBoundary", {
447
458
  enumerable: true,
448
- get: function () { return chunk5XF7KH6B_cjs.ChatErrorBoundary; }
459
+ get: function () { return chunkLVWSWTI3_cjs.ChatErrorBoundary; }
449
460
  });
450
461
  Object.defineProperty(exports, "useLiveChat", {
451
462
  enumerable: true,
@@ -469,19 +480,19 @@ Object.defineProperty(exports, "normalizeToolRows", {
469
480
  });
470
481
  Object.defineProperty(exports, "renderSlot", {
471
482
  enumerable: true,
472
- get: function () { return chunkBPV66QNM_cjs.renderSlot; }
483
+ get: function () { return chunk46MUOYPR_cjs.renderSlot; }
473
484
  });
474
485
  Object.defineProperty(exports, "useChatContext", {
475
486
  enumerable: true,
476
- get: function () { return chunkBPV66QNM_cjs.useChatContext; }
487
+ get: function () { return chunk46MUOYPR_cjs.useChatContext; }
477
488
  });
478
489
  Object.defineProperty(exports, "useSlot", {
479
490
  enumerable: true,
480
- get: function () { return chunkBPV66QNM_cjs.useSlot; }
491
+ get: function () { return chunk46MUOYPR_cjs.useSlot; }
481
492
  });
482
493
  Object.defineProperty(exports, "useSlots", {
483
494
  enumerable: true,
484
- get: function () { return chunkBPV66QNM_cjs.useSlots; }
495
+ get: function () { return chunk46MUOYPR_cjs.useSlots; }
485
496
  });
486
497
  exports.Chat = Chat;
487
498
  exports.ChatProvider = ChatProvider;
@@ -1 +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 \"onNewConversation\",\n \"onStopGeneration\",\n \"onClearMessages\",\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 * Show citation sources under each assistant message that used the\n * `searchKnowledgeBase` tool. Off by default.\n */\n showSources?: boolean;\n /**\n * Controls the rendering order of message parts (text vs tool results).\n * - `\"text-first\"` (default) — text parts render before tool cards\n * - `\"tools-first\"` — tool cards render before text\n * - `\"stream-order\"` — parts render in the order received from the API\n */\n messagePartOrder?: \"text-first\" | \"tools-first\" | \"stream-order\";\n}\n\nexport function Chat({ className, children, showSources, messagePartOrder, ...providerProps }: ChatProps) {\n return (\n <ChatProvider {...(providerProps as unknown as React.ComponentProps<typeof ChatProvider>)}>\n <div className={className}>\n <ChatInterface showSources={showSources} messagePartOrder={messagePartOrder} />\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\t/** Show citation sources under each assistant message. Off by default. */\n\tshowSources?: boolean;\n\t/** Controls rendering order of message parts. Default: \"text-first\". */\n\tmessagePartOrder?: \"text-first\" | \"tools-first\" | \"stream-order\";\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>&times;\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\tshowSources,\n\tmessagePartOrder,\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\tshowSources,\n\t\t\tmessagePartOrder,\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, showSources, messagePartOrder, 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"]}
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 \"onNewConversation\",\n \"onStopGeneration\",\n \"onClearMessages\",\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 pageUrl,\n pageTitle,\n pageContext,\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 = {\n projectId,\n apiEndpoint,\n apiKey,\n clientName,\n pageUrl,\n pageTitle,\n pageContext,\n };\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 * Show citation sources under each assistant message that used the\n * `searchKnowledgeBase` tool. Off by default.\n */\n showSources?: boolean;\n /**\n * Controls the rendering order of message parts (text vs tool results).\n * - `\"text-first\"` (default) — text parts render before tool cards\n * - `\"tools-first\"` — tool cards render before text\n * - `\"stream-order\"` — parts render in the order received from the API\n */\n messagePartOrder?: \"text-first\" | \"tools-first\" | \"stream-order\";\n}\n\nexport function Chat({ className, children, showSources, messagePartOrder, ...providerProps }: ChatProps) {\n return (\n <ChatProvider {...(providerProps as unknown as React.ComponentProps<typeof ChatProvider>)}>\n <div className={className}>\n <ChatInterface showSources={showSources} messagePartOrder={messagePartOrder} />\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\t/** Show citation sources under each assistant message. Off by default. */\n\tshowSources?: boolean;\n\t/** Controls rendering order of message parts. Default: \"text-first\". */\n\tmessagePartOrder?: \"text-first\" | \"tools-first\" | \"stream-order\";\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>&times;\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\tshowSources,\n\tmessagePartOrder,\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\tshowSources,\n\t\t\tmessagePartOrder,\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, showSources, messagePartOrder, 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 CHANGED
@@ -1,10 +1,10 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { C as ChatProviderProps } from './types-DlNwk-bG.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-DlNwk-bG.cjs';
4
- export { L as LiveChatReturn, S as SlotComponent, a as SlotName, U as UseAigentycChatOptions, b as UseAigentycChatReturn, r as renderSlot, u as useAigentycChat, c as useChatContext, d as useLiveChat, e as useSlot, f as useSlots } from './SlotsContext-CEOBjzfh.cjs';
2
+ import { C as ChatProviderProps } from './types-DQCjs81O.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-DQCjs81O.cjs';
4
+ export { L as LiveChatReturn, S as SlotComponent, a as SlotName, U as UseAigentycChatOptions, b as UseAigentycChatReturn, r as renderSlot, u as useAigentycChat, c as useChatContext, d as useLiveChat, e as useSlot, f as useSlots } from './SlotsContext-u5CFB7MS.cjs';
5
5
  export { useTheme } from './theme.cjs';
6
6
  export { useI18n } from './i18n.cjs';
7
- export { A as AssistantMessageSlotProps, C as ChatInterfaceProps, U as UserMessageSlotProps } from './ChatInterface-B0zbA3Lm.cjs';
7
+ export { A as AssistantMessageSlotProps, C as ChatInterfaceProps, U as UserMessageSlotProps } from './ChatInterface-0rq8D5-8.cjs';
8
8
  export { g as getToolDisplayData, n as normalizeToolRows } from './normalize-KzCLLqpU.cjs';
9
9
  import { Component, ReactNode, ErrorInfo } from 'react';
10
10
  export { F as FeedbackData, M as MessageFeedbackActionsState } from './message-feedback-BFh3-qym.cjs';
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { C as ChatProviderProps } from './types-DlNwk-bG.js';
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-DlNwk-bG.js';
4
- export { L as LiveChatReturn, S as SlotComponent, a as SlotName, U as UseAigentycChatOptions, b as UseAigentycChatReturn, r as renderSlot, u as useAigentycChat, c as useChatContext, d as useLiveChat, e as useSlot, f as useSlots } from './SlotsContext-BjiX1mRx.js';
2
+ import { C as ChatProviderProps } from './types-DQCjs81O.js';
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-DQCjs81O.js';
4
+ export { L as LiveChatReturn, S as SlotComponent, a as SlotName, U as UseAigentycChatOptions, b as UseAigentycChatReturn, r as renderSlot, u as useAigentycChat, c as useChatContext, d as useLiveChat, e as useSlot, f as useSlots } from './SlotsContext-CWTjP0mA.js';
5
5
  export { useTheme } from './theme.js';
6
6
  export { useI18n } from './i18n.js';
7
- export { A as AssistantMessageSlotProps, C as ChatInterfaceProps, U as UserMessageSlotProps } from './ChatInterface-f8ftS56n.js';
7
+ export { A as AssistantMessageSlotProps, C as ChatInterfaceProps, U as UserMessageSlotProps } from './ChatInterface--yaDB5yp.js';
8
8
  export { g as getToolDisplayData, n as normalizeToolRows } from './normalize-KzCLLqpU.js';
9
9
  import { Component, ReactNode, ErrorInfo } from 'react';
10
10
  export { F as FeedbackData, M as MessageFeedbackActionsState } from './message-feedback-cWR0NVok.js';
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- export { useAigentycChat } from './chunk-M4YRNNGB.js';
2
+ export { useAigentycChat } from './chunk-LSKOJ7SH.js';
3
3
  import './chunk-BKDV2H6Z.js';
4
- import { ChatInterface, PreviewEmbedPanel, LiveChatPanel, MobileLiveChatDrawer, FloatingButton } from './chunk-YG2COKFR.js';
5
- export { ChatErrorBoundary } from './chunk-YG2COKFR.js';
4
+ import { ChatInterface, PreviewEmbedPanel, LiveChatPanel, MobileLiveChatDrawer, FloatingButton } from './chunk-RAQVW2D7.js';
5
+ export { ChatErrorBoundary } from './chunk-RAQVW2D7.js';
6
6
  import { LiveChatProvider, PreviewEmbedProvider, useIsMobile, usePreviewEmbed } from './chunk-5F3O3ZJH.js';
7
7
  export { useLiveChat } from './chunk-5F3O3ZJH.js';
8
8
  import { ThemeProvider } from './chunk-IU7Q7O5G.js';
@@ -12,9 +12,9 @@ import './chunk-MZQKGNWF.js';
12
12
  import { I18nProvider } from './chunk-QYCEHFAB.js';
13
13
  export { useI18n } from './chunk-QYCEHFAB.js';
14
14
  export { getToolDisplayData, normalizeToolRows } from './chunk-XEAAB5ZM.js';
15
- import './chunk-AD6XWKWB.js';
16
- import { SlotsProvider, ChatContextProvider, useSlots, renderSlot } from './chunk-FPQ3UCCJ.js';
17
- export { renderSlot, useChatContext, useSlot, useSlots } from './chunk-FPQ3UCCJ.js';
15
+ import './chunk-6ZZTTD5E.js';
16
+ import { SlotsProvider, ChatContextProvider, useSlots, renderSlot } from './chunk-3EN3DMUL.js';
17
+ export { renderSlot, useChatContext, useSlot, useSlots } from './chunk-3EN3DMUL.js';
18
18
  import './chunk-PS3U7T37.js';
19
19
  import './chunk-JHWSG5IB.js';
20
20
  import './chunk-4QT25AXI.js';
@@ -57,6 +57,9 @@ function ChatProvider(props) {
57
57
  apiEndpoint,
58
58
  apiKey,
59
59
  clientName,
60
+ pageUrl,
61
+ pageTitle,
62
+ pageContext,
60
63
  language,
61
64
  translations,
62
65
  theme,
@@ -69,7 +72,15 @@ function ChatProvider(props) {
69
72
  ...rest
70
73
  } = props;
71
74
  const callbacks = pickCallbacks(rest);
72
- const config = { projectId, apiEndpoint, apiKey, clientName };
75
+ const config = {
76
+ projectId,
77
+ apiEndpoint,
78
+ apiKey,
79
+ clientName,
80
+ pageUrl,
81
+ pageTitle,
82
+ pageContext
83
+ };
73
84
  const langCode = language ?? "en";
74
85
  const translationOverrides = translations?.[langCode];
75
86
  const liveChatUrl = chatServiceUrl ?? apiEndpoint;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/providers/ChatProvider.tsx","../src/components/Chat.tsx","../src/components/ChatWidget.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"index.js","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 \"onNewConversation\",\n \"onStopGeneration\",\n \"onClearMessages\",\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 * Show citation sources under each assistant message that used the\n * `searchKnowledgeBase` tool. Off by default.\n */\n showSources?: boolean;\n /**\n * Controls the rendering order of message parts (text vs tool results).\n * - `\"text-first\"` (default) — text parts render before tool cards\n * - `\"tools-first\"` — tool cards render before text\n * - `\"stream-order\"` — parts render in the order received from the API\n */\n messagePartOrder?: \"text-first\" | \"tools-first\" | \"stream-order\";\n}\n\nexport function Chat({ className, children, showSources, messagePartOrder, ...providerProps }: ChatProps) {\n return (\n <ChatProvider {...(providerProps as unknown as React.ComponentProps<typeof ChatProvider>)}>\n <div className={className}>\n <ChatInterface showSources={showSources} messagePartOrder={messagePartOrder} />\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\t/** Show citation sources under each assistant message. Off by default. */\n\tshowSources?: boolean;\n\t/** Controls rendering order of message parts. Default: \"text-first\". */\n\tmessagePartOrder?: \"text-first\" | \"tools-first\" | \"stream-order\";\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>&times;\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\tshowSources,\n\tmessagePartOrder,\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\tshowSources,\n\t\t\tmessagePartOrder,\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, showSources, messagePartOrder, 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"]}
1
+ {"version":3,"sources":["../src/providers/ChatProvider.tsx","../src/components/Chat.tsx","../src/components/ChatWidget.tsx"],"names":["jsx","jsxs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAWA,IAAM,aAAA,GAA8C;AAAA,EAClD,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,mBAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,cAAc,KAAA,EAAoD;AACzE,EAAA,MAAM,MAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,OAAO,aAAA,EAAe;AAC/B,IAAA,IAAI,KAAA,CAAM,GAAG,CAAA,KAAM,MAAA,MAAe,GAAG,CAAA,GAAI,MAAM,GAAG,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,GAAA;AACT;AAaO,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,cAAA,GAAiB,KAAA;AAAA,IACjB,cAAA;AAAA,IACA,eAAA,EAAiB,gBAAA;AAAA,IACjB,WAAA,EAAa,YAAA;AAAA,IACb,SAAA,EAAW,UAAA;AAAA,IACX,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,SAAA,GAAY,cAAc,IAA+B,CAAA;AAC/D,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,SAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AAGA,EAAA,MAAM,WAAW,QAAA,IAAY,IAAA;AAC7B,EAAA,MAAM,oBAAA,GAAuB,eAAe,QAAQ,CAAA;AAEpD,EAAA,MAAM,cAAc,cAAA,IAAkB,WAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,cAAA,IAAkB,WAAA,IAAe,MAAA,mBAC7C,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAgB,WAAA;AAAA,MAChB,MAAA;AAAA,MACA,WAAW,SAAA,IAAa,SAAA;AAAA,MACxB,SAAA,EAAU,SAAA;AAAA,MAEV,QAAA,kBAAA,GAAA,CAAC,wBAAsB,QAAA,EAAS;AAAA;AAAA,GAClC,mBAEA,GAAA,CAAC,oBAAA,EAAA,EAAsB,QAAA,EAAS,CAAA;AAGlC,EAAA,uBACE,GAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAoB,YAAA,EAAc,oBAAA,EAC9C,8BAAC,aAAA,EAAA,EAAc,KAAA,EACb,QAAA,kBAAA,GAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EACb,QAAA,kBAAA,GAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACC,MAAA;AAAA,MACA,SAAA;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH,EACF,GACF,CAAA,EACF,CAAA;AAEJ;ACrFO,SAAS,IAAA,CAAK,EAAE,SAAA,EAAW,QAAA,EAAU,aAAa,gBAAA,EAAkB,GAAG,eAAc,EAAc;AACxG,EAAA,uBACEA,GAAAA,CAAC,YAAA,EAAA,EAAc,GAAI,aAAA,EACjB,QAAA,kBAAA,IAAA,CAAC,SAAI,SAAA,EACH,QAAA,EAAA;AAAA,oBAAAA,GAAAA,CAAC,aAAA,EAAA,EAAc,WAAA,EAA0B,gBAAA,EAAoC,CAAA;AAAA,IAC5E;AAAA,GAAA,EACH,CAAA,EACF,CAAA;AAEJ;ACsCA,SAAS,kBAAA,GAAqB;AAC7B,EAAA,MAAM,eAAe,eAAA,EAAgB;AAErC,EAAA,SAAA,CAAU,MAAM;AACf,IAAA,IAAI,CAAC,YAAA,IAAgB,OAAO,MAAA,KAAW,WAAA,EAAa;AACpD,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAa;AAC7B,MAAA,MAAM,EAAE,GAAA,EAAK,KAAA,EAAO,aAAY,GAAK,CAAA,CAAkB,UAAU,EAAC;AAClE,MAAA,IAAI,KAAK,YAAA,CAAa,WAAA,CAAY,EAAE,GAAA,EAAK,KAAA,EAAO,aAAa,CAAA;AAAA,IAC9D,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,uBAAuB,OAAO,CAAA;AACtD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,qBAAA,EAAuB,OAAO,CAAA;AAAA,EACvE,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,OAAO,IAAA;AACR;AAGA,SAAS,mBAAA,GAAsB;AAC9B,EAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,EAAA,MAAM,SAAA,GAAY,CAAC,CAAC,YAAA,EAAc,OAAA;AAClC,EAAA,MAAM,UAAU,YAAA,EAAc,OAAA;AAC9B,EAAA,MAAM,eAAe,YAAA,EAAc,YAAA;AAEnC,EAAA,uBACCC,KAAA,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAU,mCAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACN,OAAA,EAAS,YAAY,CAAA,GAAI,CAAA;AAAA,UACzB,aAAA,EAAe,YAAY,MAAA,GAAS,MAAA;AAAA,UACpC,UAAA,EAAY;AAAA,SACb;AAAA,QACA,OAAA,EAAS;AAAA;AAAA,KACV;AAAA,oBACAC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAU,oEAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACN,eAAA,EAAiB,sBAAA;AAAA,UACjB,WAAA,EAAa,kBAAA;AAAA,UACb,MAAA,EAAQ,sBAAA;AAAA,UACR,SAAA,EAAW,YAAY,eAAA,GAAkB,kBAAA;AAAA,UACzC,UAAA,EAAY;AAAA,SACb;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,SAAI,SAAA,EAAU,+BAAA,EACd,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EAAsC,CAAA,EACtD,CAAA;AAAA,0BACAC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACd,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACd,QAAA,EAAA;AAAA,8BAAAD,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,8BAAA,EAA+B,KAAA,EAAO,EAAE,KAAA,EAAO,gBAAA,EAAiB,EAC5E,QAAA,EAAA,OAAA,EAAS,KAAA,IAAS,SAAA,EACpB,CAAA;AAAA,cACC,OAAA,EAAS,+BACTA,GAAAA,CAAC,OAAE,SAAA,EAAU,+CAAA,EAAiD,kBAAQ,WAAA,EAAY;AAAA,aAAA,EAEpF,CAAA;AAAA,4BACAC,IAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACA,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,YAAA;AAAA,gBACT,SAAA,EAAU,6GAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,kBAAO;AAAA;AAAA;AAAA;AACvC,WAAA,EACD,CAAA;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAmB,KAAA,EAAO,EAAE,MAAA,EAAQ,mBAAA,EAAoB,EACrE,QAAA,EAAA,OAAA,oBACAA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEA,KAAK,OAAA,CAAQ,GAAA;AAAA,cACb,SAAA,EAAU,sCAAA;AAAA,cACV,OAAA,EAAQ,6EAAA;AAAA,cACR,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,aAAA;AAAA,YAJnB,OAAA,CAAQ;AAAA,WAKd,EAEF;AAAA;AAAA;AAAA;AACD,GAAA,EACD,CAAA;AAEF;AASA,SAAS,eAAA,CAAgB;AAAA,EACxB,IAAA,GAAO,UAAA;AAAA,EACP,QAAA,GAAW,cAAA;AAAA,EACX,cAAA;AAAA,EACA,MAAA,EAAQ,gBAAA;AAAA,EACR,YAAA;AAAA,EACA,cAAA,EAAgB,qBAAA;AAAA,EAChB,MAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,oBAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,oBAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,qBAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACD,CAAA,EAAyB;AACxB,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,QAAA,CAAwB,yBAAyB,IAAI,CAAA;AACjG,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,QAAQ,QAAA,EAAS;AAEvB,EAAA,SAAA,CAAU,MAAM;AACf,IAAA,IAAI,gBAAA,KAAqB,IAAA,EAAM,iBAAA,CAAkB,IAAI,CAAA;AAAA,EACtD,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAA,MAAM,MAAA,GAAS,cAAA;AAGf,EAAA,SAAA,CAAU,MAAM;AACf,IAAA,IAAI,IAAA,KAAS,QAAA,IAAY,OAAO,QAAA,KAAa,WAAA,EAAa;AAC1D,IAAA,IAAI,MAAA,EAAQ;AACX,MAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAS,IAAI,CAAA,CAAE,QAAA;AAC7D,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AAC/B,MAAA,OAAO,MAAM;AACZ,QAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,aAAA;AAAA,MAChC,CAAA;AAAA,IACD;AAAA,EACD,CAAA,EAAG,CAAC,MAAA,EAAQ,IAAI,CAAC,CAAA;AAEjB,EAAA,MAAM,UAAA,GAAa,YAAY,MAAM;AACpC,IAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,IAAA,YAAA,GAAe,IAAI,CAAA;AAAA,EACpB,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,MAAM,WAAA,GAAc,YAAY,MAAM;AACrC,IAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,IAAA,YAAA,GAAe,KAAK,CAAA;AAAA,EACrB,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,MAAM,YAAA,GAAe,YAAY,MAAM;AACtC,IAAA,IAAI,QAAQ,WAAA,EAAY;AAAA,SACnB,UAAA,EAAW;AAAA,EACjB,CAAA,EAAG,CAAC,MAAA,EAAQ,UAAA,EAAY,WAAW,CAAC,CAAA;AAEpC,EAAA,MAAM,WAAA,GAAc,QAAA,KAAa,cAAA,IAAkB,QAAA,KAAa,WAAA;AAChE,EAAA,MAAM,SAAS,QAAA,KAAa,IAAA;AAE5B,EAAA,MAAM,kBAAA,GAAqB,OAAA;AAAA,IAC1B,OAAO;AAAA,MACN,MAAA;AAAA,MACA,OAAA,EAAS,WAAA;AAAA,MACT,OAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,gBAAA;AAAA,MACA,eAAA;AAAA,MACA,qBAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,cAAA;AAAA,MACA,wBAAA,EAA0B,MAAM,iBAAA,CAAkB,IAAI;AAAA,KACvD,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,WAAA,EAAa,OAAA,EAAS,cAAc,eAAA,EAAiB,iBAAA,EAAmB,UAAA,EAAY,UAAA,EAAY,gBAAA,EAAkB,eAAA,EAAiB,qBAAA,EAAuB,WAAA,EAAa,kBAAkB,cAAc;AAAA,GACjN;AAGA,EAAA,IAAI,SAAS,QAAA,EAAU;AACtB,IAAA,uBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6BAAA,EAA8B,GAAA,EAAK,SAAS,KAAA,GAAQ,KAAA,EAAO,OAAO,EAAE,eAAA,EAAiB,wBAAuB,EAC1H,QAAA,kBAAAA,IAAC,aAAA,EAAA,EAAe,GAAG,oBAAoB,CAAA,EACxC,CAAA;AAAA,EAEF;AAEA,EAAA,MAAM,cAAc,MAAA,IAAU,IAAA;AAG9B,EAAA,MAAM,mBAAA,GAAsB;AAAA,IAC3B,OAAA,EAAS,YAAA;AAAA,IACT,QAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA,EAAU,YAAA;AAAA,IACV,eAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,mBAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,QAAQ,MAAA,IAAU,MAAA;AAAA,IAClB;AAAA,GACD;AAEA,EAAA,uBACCC,KAAA,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAD,IAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,oBAGpBA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAU,uEAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACN,QAAQ,WAAA,GAAc,CAAA;AAAA,UACtB,OAAA,EAAS,SAAS,CAAA,GAAI,CAAA;AAAA,UACtB,aAAA,EAAe,SAAS,MAAA,GAAS;AAAA,SAClC;AAAA,QACA,OAAA,EAAS;AAAA;AAAA,KACV;AAAA,IAEC,CAAC,4BAAYA,GAAAA,CAAC,qBAAkB,MAAA,EAAgB,WAAA,EAA0B,MAAA,EAAQ,WAAA,GAAc,CAAA,EAAG,CAAA;AAAA,IACnG,CAAC,QAAA,oBAAYA,GAAAA,CAAC,aAAA,EAAA,EAAc,cAAc,MAAA,EAAQ,WAAA,EAA0B,MAAA,EAAQ,WAAA,GAAc,CAAA,EAAG,CAAA;AAAA,oBAGtGC,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACV,oCAAA;AAAA,UACA,WACG,kCAAA,GACA,EAAA,CAAG,gCAAA,EAAkC,WAAA,GAAc,qBAAqB,iBAAiB;AAAA,SAC7F;AAAA,QACA,GAAA,EAAK,SAAS,KAAA,GAAQ,KAAA;AAAA,QACtB,KAAA,EAAO;AAAA,UACN,eAAA,EAAiB,sBAAA;AAAA,UACjB,WAAA,EAAa,kBAAA;AAAA,UACb,GAAI,QAAA,GACD;AAAA,YACA,GAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAQ,CAAA;AAAA,YACR,MAAA,EAAQ,qBAAA;AAAA,YACR,SAAA,EAAW,SAAS,eAAA,GAAkB,kBAAA;AAAA,YACtC,OAAA,EAAS,SAAS,CAAA,GAAI,CAAA;AAAA,YACtB,aAAA,EAAe,SAAS,MAAA,GAAS;AAAA,WAClC,GACC;AAAA,YACA,SAAA,EAAW,MAAA,GAAS,eAAA,GAAkB,WAAA,GAAc,kBAAA,GAAqB,mBAAA;AAAA,YACzE,OAAA,EAAS,SAAS,CAAA,GAAI,CAAA;AAAA,YACtB,aAAA,EAAe,SAAS,MAAA,GAAS;AAAA,WAClC;AAAA,UACF,UAAA,EAAY,6BAAA;AAAA,UACZ,MAAA,EAAQ;AAAA,SACT;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,QAAA,oBAAYD,IAAC,mBAAA,EAAA,EAAoB,CAAA;AAAA,0BAClCA,IAAC,oBAAA,EAAA,EAAqB,CAAA;AAAA,0BAEtBA,GAAAA,CAAC,aAAA,EAAA,EAAe,GAAG,kBAAA,EAAoB;AAAA;AAAA;AAAA,KACxC;AAAA,IAGC,CAAC,MAAA,IACD,UAAA;AAAA,MACC,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA;AACD,GAAA,EACF,CAAA;AAEF;AAMO,SAAS,WAAW,KAAA,EAAwB;AAElD,EAAA,MAAM;AAAA;AAAA,IAEL,IAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,mBAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,oBAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA,oBAAA;AAAA,IACA,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,qBAAA;AAAA,IACA,QAAA,EAAU,SAAA;AAAA,IACV,GAAG;AAAA,GACJ,GAAI,KAAA;AAEJ,EAAA,uBACCA,GAAAA,CAAC,YAAA,EAAA,EAAc,GAAG,eACjB,QAAA,kBAAAA,GAAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,oBAAA;AAAA,MACA,oBAAA;AAAA,MACA,aAAA;AAAA,MACA,cAAA;AAAA,MACA,oBAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA,iBAAA;AAAA,MACA,kBAAA;AAAA,MACA,oBAAA;AAAA,MACA,aAAA;AAAA,MACA,kBAAA;AAAA,MACA,YAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,gBAAA;AAAA,MACA,eAAA;AAAA,MACA,qBAAA;AAAA,MACA,UAAU,aAAA,CAAc;AAAA;AAAA,GACzB,EACD,CAAA;AAEF","file":"index.js","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 \"onNewConversation\",\n \"onStopGeneration\",\n \"onClearMessages\",\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 pageUrl,\n pageTitle,\n pageContext,\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 = {\n projectId,\n apiEndpoint,\n apiKey,\n clientName,\n pageUrl,\n pageTitle,\n pageContext,\n };\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 * Show citation sources under each assistant message that used the\n * `searchKnowledgeBase` tool. Off by default.\n */\n showSources?: boolean;\n /**\n * Controls the rendering order of message parts (text vs tool results).\n * - `\"text-first\"` (default) — text parts render before tool cards\n * - `\"tools-first\"` — tool cards render before text\n * - `\"stream-order\"` — parts render in the order received from the API\n */\n messagePartOrder?: \"text-first\" | \"tools-first\" | \"stream-order\";\n}\n\nexport function Chat({ className, children, showSources, messagePartOrder, ...providerProps }: ChatProps) {\n return (\n <ChatProvider {...(providerProps as unknown as React.ComponentProps<typeof ChatProvider>)}>\n <div className={className}>\n <ChatInterface showSources={showSources} messagePartOrder={messagePartOrder} />\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\t/** Show citation sources under each assistant message. Off by default. */\n\tshowSources?: boolean;\n\t/** Controls rendering order of message parts. Default: \"text-first\". */\n\tmessagePartOrder?: \"text-first\" | \"tools-first\" | \"stream-order\";\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>&times;\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\tshowSources,\n\tmessagePartOrder,\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\tshowSources,\n\t\t\tmessagePartOrder,\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, showSources, messagePartOrder, 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"]}