@aigentyc/chat-sdk 0.2.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/bin/aigentyc.mjs +14 -8
  2. package/bin/lib/add.mjs +1 -1
  3. package/bin/lib/doctor.mjs +1 -1
  4. package/bin/lib/skill.mjs +84 -0
  5. package/claude-skill/README.md +32 -0
  6. package/claude-skill/aigentyc-chat-sdk/SKILL.md +339 -0
  7. package/context7.json +1 -1
  8. package/dist/ChatInterface-B0zbA3Lm.d.cts +64 -0
  9. package/dist/ChatInterface-f8ftS56n.d.ts +64 -0
  10. package/dist/{SlotsContext-CBtt36al.d.ts → SlotsContext-BjiX1mRx.d.ts} +17 -2
  11. package/dist/{SlotsContext-CHvISDJT.d.cts → SlotsContext-CEOBjzfh.d.cts} +17 -2
  12. package/dist/ai-elements.cjs +114 -393
  13. package/dist/ai-elements.cjs.map +1 -1
  14. package/dist/ai-elements.d.cts +2 -31
  15. package/dist/ai-elements.d.ts +2 -31
  16. package/dist/ai-elements.js +9 -291
  17. package/dist/ai-elements.js.map +1 -1
  18. package/dist/{chunk-5QSXB6UL.cjs → chunk-3HGOLNGG.cjs} +13 -4
  19. package/dist/chunk-3HGOLNGG.cjs.map +1 -0
  20. package/dist/{chunk-KVEJAPWA.js → chunk-3KSMOHNY.js} +48 -62
  21. package/dist/chunk-3KSMOHNY.js.map +1 -0
  22. package/dist/chunk-4WOBNRRB.cjs +540 -0
  23. package/dist/chunk-4WOBNRRB.cjs.map +1 -0
  24. package/dist/chunk-7AZMWPKX.cjs +35 -0
  25. package/dist/chunk-7AZMWPKX.cjs.map +1 -0
  26. package/dist/chunk-B27JIQ4Z.js +528 -0
  27. package/dist/chunk-B27JIQ4Z.js.map +1 -0
  28. package/dist/{chunk-J2K7EJYP.cjs → chunk-BPV66QNM.cjs} +6 -4
  29. package/dist/chunk-BPV66QNM.cjs.map +1 -0
  30. package/dist/{chunk-FYPJSHCL.js → chunk-FPQ3UCCJ.js} +6 -4
  31. package/dist/chunk-FPQ3UCCJ.js.map +1 -0
  32. package/dist/{chunk-7L4FS6G7.js → chunk-JHWSG5IB.js} +17 -3
  33. package/dist/chunk-JHWSG5IB.js.map +1 -0
  34. package/dist/{chunk-4FBVV64J.js → chunk-M4YRNNGB.js} +13 -4
  35. package/dist/chunk-M4YRNNGB.js.map +1 -0
  36. package/dist/{chunk-QDFPJJ5Y.cjs → chunk-OU5OZKYH.cjs} +50 -65
  37. package/dist/chunk-OU5OZKYH.cjs.map +1 -0
  38. package/dist/{chunk-MC6QDYB6.cjs → chunk-PPCGZ5MP.cjs} +166 -67
  39. package/dist/chunk-PPCGZ5MP.cjs.map +1 -0
  40. package/dist/{chunk-U3FXVLUK.js → chunk-PQCGQ32Q.js} +84 -4
  41. package/dist/chunk-PQCGQ32Q.js.map +1 -0
  42. package/dist/{chunk-FOZXDUSZ.js → chunk-SWKWHBBN.js} +151 -54
  43. package/dist/chunk-SWKWHBBN.js.map +1 -0
  44. package/dist/{chunk-DMGYQ6NN.cjs → chunk-TLGZSXTU.cjs} +86 -6
  45. package/dist/chunk-TLGZSXTU.cjs.map +1 -0
  46. package/dist/{chunk-C24QG43M.cjs → chunk-TZ7EM3EG.cjs} +17 -2
  47. package/dist/chunk-TZ7EM3EG.cjs.map +1 -0
  48. package/dist/chunk-XEAAB5ZM.js +32 -0
  49. package/dist/chunk-XEAAB5ZM.js.map +1 -0
  50. package/dist/components.cjs +31 -52
  51. package/dist/components.cjs.map +1 -1
  52. package/dist/components.d.cts +4 -34
  53. package/dist/components.d.ts +4 -34
  54. package/dist/components.js +18 -42
  55. package/dist/components.js.map +1 -1
  56. package/dist/core.d.cts +2 -2
  57. package/dist/core.d.ts +2 -2
  58. package/dist/hooks.cjs +6 -6
  59. package/dist/hooks.d.cts +2 -2
  60. package/dist/hooks.d.ts +2 -2
  61. package/dist/hooks.js +2 -2
  62. package/dist/i18n.d.cts +1 -1
  63. package/dist/i18n.d.ts +1 -1
  64. package/dist/index.cjs +45 -23
  65. package/dist/index.cjs.map +1 -1
  66. package/dist/index.d.cts +51 -6
  67. package/dist/index.d.ts +51 -6
  68. package/dist/index.js +17 -10
  69. package/dist/index.js.map +1 -1
  70. package/dist/llms-full.txt +194 -14
  71. package/dist/message-feedback-BFh3-qym.d.cts +92 -0
  72. package/dist/message-feedback-cWR0NVok.d.ts +92 -0
  73. package/dist/normalize-KzCLLqpU.d.cts +42 -0
  74. package/dist/normalize-KzCLLqpU.d.ts +42 -0
  75. package/dist/styles.css +1 -1
  76. package/dist/theme.d.cts +1 -1
  77. package/dist/theme.d.ts +1 -1
  78. package/dist/tools.cjs +14 -5
  79. package/dist/tools.d.cts +3 -2
  80. package/dist/tools.d.ts +3 -2
  81. package/dist/tools.js +3 -2
  82. package/dist/{types-DKJ_-nbG.d.cts → types-DlNwk-bG.d.cts} +33 -3
  83. package/dist/{types-DKJ_-nbG.d.ts → types-DlNwk-bG.d.ts} +33 -3
  84. package/dist/ui.cjs +45 -45
  85. package/dist/ui.js +2 -2
  86. package/llms.txt +175 -5
  87. package/package.json +2 -1
  88. package/dist/chunk-4FBVV64J.js.map +0 -1
  89. package/dist/chunk-5QSXB6UL.cjs.map +0 -1
  90. package/dist/chunk-7L4FS6G7.js.map +0 -1
  91. package/dist/chunk-A7PCSWIK.js +0 -219
  92. package/dist/chunk-A7PCSWIK.js.map +0 -1
  93. package/dist/chunk-C24QG43M.cjs.map +0 -1
  94. package/dist/chunk-DMGYQ6NN.cjs.map +0 -1
  95. package/dist/chunk-FOZXDUSZ.js.map +0 -1
  96. package/dist/chunk-FYPJSHCL.js.map +0 -1
  97. package/dist/chunk-J2K7EJYP.cjs.map +0 -1
  98. package/dist/chunk-KVEJAPWA.js.map +0 -1
  99. package/dist/chunk-MC6QDYB6.cjs.map +0 -1
  100. package/dist/chunk-QDFPJJ5Y.cjs.map +0 -1
  101. package/dist/chunk-RTVEBPAJ.cjs +0 -230
  102. package/dist/chunk-RTVEBPAJ.cjs.map +0 -1
  103. package/dist/chunk-U3FXVLUK.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,18 +1,19 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk5QSXB6UL_cjs = require('./chunk-5QSXB6UL.cjs');
4
+ var chunk3HGOLNGG_cjs = require('./chunk-3HGOLNGG.cjs');
5
5
  require('./chunk-NG7OTWXQ.cjs');
6
- var chunkMC6QDYB6_cjs = require('./chunk-MC6QDYB6.cjs');
6
+ var chunkPPCGZ5MP_cjs = require('./chunk-PPCGZ5MP.cjs');
7
7
  var chunkNYQSM3EB_cjs = require('./chunk-NYQSM3EB.cjs');
8
8
  var chunkP3RPAI4F_cjs = require('./chunk-P3RPAI4F.cjs');
9
- require('./chunk-RTVEBPAJ.cjs');
9
+ require('./chunk-4WOBNRRB.cjs');
10
10
  require('./chunk-X7R334SB.cjs');
11
11
  var chunk3MP2EGEJ_cjs = require('./chunk-3MP2EGEJ.cjs');
12
- require('./chunk-DMGYQ6NN.cjs');
13
- var chunkJ2K7EJYP_cjs = require('./chunk-J2K7EJYP.cjs');
12
+ var chunk7AZMWPKX_cjs = require('./chunk-7AZMWPKX.cjs');
13
+ require('./chunk-TLGZSXTU.cjs');
14
+ var chunkBPV66QNM_cjs = require('./chunk-BPV66QNM.cjs');
14
15
  require('./chunk-JOO6C3XT.cjs');
15
- require('./chunk-C24QG43M.cjs');
16
+ require('./chunk-TZ7EM3EG.cjs');
16
17
  require('./chunk-JI5KCSOI.cjs');
17
18
  require('./chunk-AWAJOSFP.cjs');
18
19
  var chunk525KS5HM_cjs = require('./chunk-525KS5HM.cjs');
@@ -34,6 +35,9 @@ var CALLBACK_KEYS = [
34
35
  "onLiveChatConnected",
35
36
  "onLiveChatEnded",
36
37
  "onError",
38
+ "onNewConversation",
39
+ "onStopGeneration",
40
+ "onClearMessages",
37
41
  "onInteraction"
38
42
  ];
39
43
  function pickCallbacks(props) {
@@ -76,8 +80,8 @@ function ChatProvider(props) {
76
80
  children: /* @__PURE__ */ jsxRuntime.jsx(chunkNYQSM3EB_cjs.PreviewEmbedProvider, { children })
77
81
  }
78
82
  ) : /* @__PURE__ */ jsxRuntime.jsx(chunkNYQSM3EB_cjs.PreviewEmbedProvider, { children });
79
- return /* @__PURE__ */ jsxRuntime.jsx(chunk3MP2EGEJ_cjs.I18nProvider, { language, translations: translationOverrides, children: /* @__PURE__ */ jsxRuntime.jsx(chunkP3RPAI4F_cjs.ThemeProvider, { theme, children: /* @__PURE__ */ jsxRuntime.jsx(chunkJ2K7EJYP_cjs.SlotsProvider, { slots, children: /* @__PURE__ */ jsxRuntime.jsx(
80
- chunkJ2K7EJYP_cjs.ChatContextProvider,
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,
81
85
  {
82
86
  config,
83
87
  callbacks,
@@ -85,9 +89,9 @@ function ChatProvider(props) {
85
89
  }
86
90
  ) }) }) });
87
91
  }
88
- function Chat({ className, children, showSources, ...providerProps }) {
92
+ function Chat({ className, children, showSources, messagePartOrder, ...providerProps }) {
89
93
  return /* @__PURE__ */ jsxRuntime.jsx(ChatProvider, { ...providerProps, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className, children: [
90
- /* @__PURE__ */ jsxRuntime.jsx(chunkMC6QDYB6_cjs.ChatInterface, { showSources }),
94
+ /* @__PURE__ */ jsxRuntime.jsx(chunkPPCGZ5MP_cjs.ChatInterface, { showSources, messagePartOrder }),
91
95
  children
92
96
  ] }) });
93
97
  }
@@ -206,12 +210,13 @@ function ChatWidgetInner({
206
210
  questionsLayout,
207
211
  questionsLayoutMobile,
208
212
  showSources,
213
+ messagePartOrder,
209
214
  language
210
215
  }) {
211
216
  const [internalIsOpen, setInternalIsOpen] = react.useState(false);
212
217
  const [pendingMessage, setPendingMessage] = react.useState(initialPendingMessage ?? null);
213
218
  const isMobile = chunkNYQSM3EB_cjs.useIsMobile();
214
- const slots = chunkJ2K7EJYP_cjs.useSlots();
219
+ const slots = chunkBPV66QNM_cjs.useSlots();
215
220
  react.useEffect(() => {
216
221
  if (controlledIsOpen === true) setInternalIsOpen(true);
217
222
  }, [controlledIsOpen]);
@@ -254,13 +259,14 @@ function ChatWidgetInner({
254
259
  questionsLayout,
255
260
  questionsLayoutMobile,
256
261
  showSources,
262
+ messagePartOrder,
257
263
  pendingMessage,
258
264
  onPendingMessageConsumed: () => setPendingMessage(null)
259
265
  }),
260
- [isOpen, handleClose, logoUrl, welcomeTitle, welcomeSubtitle, hideWelcomeHeader, footerText, hideHeader, showFirstMessage, questionsLayout, questionsLayoutMobile, showSources, pendingMessage]
266
+ [isOpen, handleClose, logoUrl, welcomeTitle, welcomeSubtitle, hideWelcomeHeader, footerText, hideHeader, showFirstMessage, questionsLayout, questionsLayoutMobile, showSources, messagePartOrder, pendingMessage]
261
267
  );
262
268
  if (mode === "inline") {
263
- 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(chunkMC6QDYB6_cjs.ChatInterface, { ...chatInterfaceProps }) });
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(chunkPPCGZ5MP_cjs.ChatInterface, { ...chatInterfaceProps }) });
264
270
  }
265
271
  const panelZIndex = zIndex || 9999;
266
272
  const floatingButtonProps = {
@@ -304,8 +310,8 @@ function ChatWidgetInner({
304
310
  onClick: handleClose
305
311
  }
306
312
  ),
307
- !isMobile && /* @__PURE__ */ jsxRuntime.jsx(chunkMC6QDYB6_cjs.PreviewEmbedPanel, { isOpen, isRightSide, zIndex: panelZIndex - 1 }),
308
- !isMobile && /* @__PURE__ */ jsxRuntime.jsx(chunkMC6QDYB6_cjs.LiveChatPanel, { isWidgetOpen: isOpen, isRightSide, zIndex: panelZIndex - 1 }),
313
+ !isMobile && /* @__PURE__ */ jsxRuntime.jsx(chunkPPCGZ5MP_cjs.PreviewEmbedPanel, { isOpen, isRightSide, zIndex: panelZIndex - 1 }),
314
+ !isMobile && /* @__PURE__ */ jsxRuntime.jsx(chunkPPCGZ5MP_cjs.LiveChatPanel, { isWidgetOpen: isOpen, isRightSide, zIndex: panelZIndex - 1 }),
309
315
  /* @__PURE__ */ jsxRuntime.jsxs(
310
316
  "div",
311
317
  {
@@ -334,15 +340,15 @@ function ChatWidgetInner({
334
340
  },
335
341
  children: [
336
342
  isMobile && /* @__PURE__ */ jsxRuntime.jsx(MobilePreviewDrawer, {}),
337
- /* @__PURE__ */ jsxRuntime.jsx(chunkMC6QDYB6_cjs.MobileLiveChatDrawer, {}),
338
- /* @__PURE__ */ jsxRuntime.jsx(chunkMC6QDYB6_cjs.ChatInterface, { ...chatInterfaceProps })
343
+ /* @__PURE__ */ jsxRuntime.jsx(chunkPPCGZ5MP_cjs.MobileLiveChatDrawer, {}),
344
+ /* @__PURE__ */ jsxRuntime.jsx(chunkPPCGZ5MP_cjs.ChatInterface, { ...chatInterfaceProps })
339
345
  ]
340
346
  }
341
347
  ),
342
- !isOpen && chunkJ2K7EJYP_cjs.renderSlot(
348
+ !isOpen && chunkBPV66QNM_cjs.renderSlot(
343
349
  "floatingButton",
344
350
  floatingButtonProps,
345
- chunkMC6QDYB6_cjs.FloatingButton,
351
+ chunkPPCGZ5MP_cjs.FloatingButton,
346
352
  slots
347
353
  )
348
354
  ] });
@@ -435,7 +441,11 @@ function ChatWidget(props) {
435
441
 
436
442
  Object.defineProperty(exports, "useAigentycChat", {
437
443
  enumerable: true,
438
- get: function () { return chunk5QSXB6UL_cjs.useAigentycChat; }
444
+ get: function () { return chunk3HGOLNGG_cjs.useAigentycChat; }
445
+ });
446
+ Object.defineProperty(exports, "ChatErrorBoundary", {
447
+ enumerable: true,
448
+ get: function () { return chunkPPCGZ5MP_cjs.ChatErrorBoundary; }
439
449
  });
440
450
  Object.defineProperty(exports, "useLiveChat", {
441
451
  enumerable: true,
@@ -449,17 +459,29 @@ Object.defineProperty(exports, "useI18n", {
449
459
  enumerable: true,
450
460
  get: function () { return chunk3MP2EGEJ_cjs.useI18n; }
451
461
  });
462
+ Object.defineProperty(exports, "getToolDisplayData", {
463
+ enumerable: true,
464
+ get: function () { return chunk7AZMWPKX_cjs.getToolDisplayData; }
465
+ });
466
+ Object.defineProperty(exports, "normalizeToolRows", {
467
+ enumerable: true,
468
+ get: function () { return chunk7AZMWPKX_cjs.normalizeToolRows; }
469
+ });
470
+ Object.defineProperty(exports, "renderSlot", {
471
+ enumerable: true,
472
+ get: function () { return chunkBPV66QNM_cjs.renderSlot; }
473
+ });
452
474
  Object.defineProperty(exports, "useChatContext", {
453
475
  enumerable: true,
454
- get: function () { return chunkJ2K7EJYP_cjs.useChatContext; }
476
+ get: function () { return chunkBPV66QNM_cjs.useChatContext; }
455
477
  });
456
478
  Object.defineProperty(exports, "useSlot", {
457
479
  enumerable: true,
458
- get: function () { return chunkJ2K7EJYP_cjs.useSlot; }
480
+ get: function () { return chunkBPV66QNM_cjs.useSlot; }
459
481
  });
460
482
  Object.defineProperty(exports, "useSlots", {
461
483
  enumerable: true,
462
- get: function () { return chunkJ2K7EJYP_cjs.useSlots; }
484
+ get: function () { return chunkBPV66QNM_cjs.useSlots; }
463
485
  });
464
486
  exports.Chat = Chat;
465
487
  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 \"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\nexport function Chat({ className, children, showSources, ...providerProps }: ChatProps) {\n return (\n <ChatProvider {...(providerProps as unknown as React.ComponentProps<typeof ChatProvider>)}>\n <div className={className}>\n <ChatInterface showSources={showSources} />\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}\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\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\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, 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 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"]}
package/dist/index.d.cts CHANGED
@@ -1,10 +1,14 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { C as ChatProviderProps } from './types-DKJ_-nbG.cjs';
3
- export { a as ChatConfig, b as ChatEventCallbacks, c as ChatMessage, d as ComponentAction, L as Language, e as LiveChatMessage, f as LiveChatState, Q as QuestionConfig, S as SlotMap, T as ThemeConfig, g as ToolRendererProps, h as ToolResult } from './types-DKJ_-nbG.cjs';
4
- export { L as LiveChatReturn, U as UseAigentycChatOptions, a as UseAigentycChatReturn, u as useAigentycChat, b as useChatContext, c as useLiveChat, d as useSlot, e as useSlots } from './SlotsContext-CHvISDJT.cjs';
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';
5
5
  export { useTheme } from './theme.cjs';
6
6
  export { useI18n } from './i18n.cjs';
7
- import 'react';
7
+ export { A as AssistantMessageSlotProps, C as ChatInterfaceProps, U as UserMessageSlotProps } from './ChatInterface-B0zbA3Lm.cjs';
8
+ export { g as getToolDisplayData, n as normalizeToolRows } from './normalize-KzCLLqpU.cjs';
9
+ import { Component, ReactNode, ErrorInfo } from 'react';
10
+ export { F as FeedbackData, M as MessageFeedbackActionsState } from './message-feedback-BFh3-qym.cjs';
11
+ import './interaction-tracker-D9P1Oq4j.cjs';
8
12
 
9
13
  interface ChatProps extends ChatProviderProps {
10
14
  /** Optional className forwarded to the ChatInterface root. */
@@ -14,8 +18,15 @@ interface ChatProps extends ChatProviderProps {
14
18
  * `searchKnowledgeBase` tool. Off by default.
15
19
  */
16
20
  showSources?: boolean;
21
+ /**
22
+ * Controls the rendering order of message parts (text vs tool results).
23
+ * - `"text-first"` (default) — text parts render before tool cards
24
+ * - `"tools-first"` — tool cards render before text
25
+ * - `"stream-order"` — parts render in the order received from the API
26
+ */
27
+ messagePartOrder?: "text-first" | "tools-first" | "stream-order";
17
28
  }
18
- declare function Chat({ className, children, showSources, ...providerProps }: ChatProps): react_jsx_runtime.JSX.Element;
29
+ declare function Chat({ className, children, showSources, messagePartOrder, ...providerProps }: ChatProps): react_jsx_runtime.JSX.Element;
19
30
 
20
31
  /** Widget placement mode. */
21
32
  type WidgetMode = "floating" | "inline" | "trigger";
@@ -64,6 +75,8 @@ interface ChatWidgetProps extends ChatProviderProps {
64
75
  questionsLayoutMobile?: "vertical" | "horizontal";
65
76
  /** Show citation sources under each assistant message. Off by default. */
66
77
  showSources?: boolean;
78
+ /** Controls rendering order of message parts. Default: "text-first". */
79
+ messagePartOrder?: "text-first" | "tools-first" | "stream-order";
67
80
  }
68
81
  /**
69
82
  * Top-level widget (Level 1 API). Composes ChatProvider internally and renders
@@ -84,4 +97,36 @@ declare function ChatWidget(props: ChatWidgetProps): react_jsx_runtime.JSX.Eleme
84
97
  */
85
98
  declare function ChatProvider(props: ChatProviderProps): react_jsx_runtime.JSX.Element;
86
99
 
87
- export { Chat, ChatProvider, ChatProviderProps, ChatWidget };
100
+ /**
101
+ * Error boundary for isolating tool-renderer and slot failures.
102
+ *
103
+ * If a custom tool renderer, visualization, or slot component throws, the
104
+ * error is caught here — the rest of the chat stays alive and the user
105
+ * sees a small fallback. Without this, one broken tool crashes the whole
106
+ * conversation view.
107
+ */
108
+
109
+ interface ErrorBoundaryProps {
110
+ children: ReactNode;
111
+ /**
112
+ * Optional custom fallback. Receives the caught error + a retry fn. If
113
+ * omitted, a minimal neutral fallback is shown.
114
+ */
115
+ fallback?: (error: Error, reset: () => void) => ReactNode;
116
+ /** Called when an error is caught — use for logging/Sentry. */
117
+ onError?: (error: Error, info: ErrorInfo) => void;
118
+ /** Label used in the default fallback text (e.g. "tool renderer"). */
119
+ label?: string;
120
+ }
121
+ interface ErrorBoundaryState {
122
+ error: Error | null;
123
+ }
124
+ declare class ChatErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
125
+ state: ErrorBoundaryState;
126
+ static getDerivedStateFromError(error: Error): ErrorBoundaryState;
127
+ componentDidCatch(error: Error, info: ErrorInfo): void;
128
+ reset: () => void;
129
+ render(): ReactNode;
130
+ }
131
+
132
+ export { Chat, ChatErrorBoundary, type ChatProps, ChatProvider, ChatProviderProps, ChatWidget };
package/dist/index.d.ts CHANGED
@@ -1,10 +1,14 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { C as ChatProviderProps } from './types-DKJ_-nbG.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-DKJ_-nbG.js';
4
- export { L as LiveChatReturn, U as UseAigentycChatOptions, a as UseAigentycChatReturn, u as useAigentycChat, b as useChatContext, c as useLiveChat, d as useSlot, e as useSlots } from './SlotsContext-CBtt36al.js';
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';
5
5
  export { useTheme } from './theme.js';
6
6
  export { useI18n } from './i18n.js';
7
- import 'react';
7
+ export { A as AssistantMessageSlotProps, C as ChatInterfaceProps, U as UserMessageSlotProps } from './ChatInterface-f8ftS56n.js';
8
+ export { g as getToolDisplayData, n as normalizeToolRows } from './normalize-KzCLLqpU.js';
9
+ import { Component, ReactNode, ErrorInfo } from 'react';
10
+ export { F as FeedbackData, M as MessageFeedbackActionsState } from './message-feedback-cWR0NVok.js';
11
+ import './interaction-tracker-D9P1Oq4j.js';
8
12
 
9
13
  interface ChatProps extends ChatProviderProps {
10
14
  /** Optional className forwarded to the ChatInterface root. */
@@ -14,8 +18,15 @@ interface ChatProps extends ChatProviderProps {
14
18
  * `searchKnowledgeBase` tool. Off by default.
15
19
  */
16
20
  showSources?: boolean;
21
+ /**
22
+ * Controls the rendering order of message parts (text vs tool results).
23
+ * - `"text-first"` (default) — text parts render before tool cards
24
+ * - `"tools-first"` — tool cards render before text
25
+ * - `"stream-order"` — parts render in the order received from the API
26
+ */
27
+ messagePartOrder?: "text-first" | "tools-first" | "stream-order";
17
28
  }
18
- declare function Chat({ className, children, showSources, ...providerProps }: ChatProps): react_jsx_runtime.JSX.Element;
29
+ declare function Chat({ className, children, showSources, messagePartOrder, ...providerProps }: ChatProps): react_jsx_runtime.JSX.Element;
19
30
 
20
31
  /** Widget placement mode. */
21
32
  type WidgetMode = "floating" | "inline" | "trigger";
@@ -64,6 +75,8 @@ interface ChatWidgetProps extends ChatProviderProps {
64
75
  questionsLayoutMobile?: "vertical" | "horizontal";
65
76
  /** Show citation sources under each assistant message. Off by default. */
66
77
  showSources?: boolean;
78
+ /** Controls rendering order of message parts. Default: "text-first". */
79
+ messagePartOrder?: "text-first" | "tools-first" | "stream-order";
67
80
  }
68
81
  /**
69
82
  * Top-level widget (Level 1 API). Composes ChatProvider internally and renders
@@ -84,4 +97,36 @@ declare function ChatWidget(props: ChatWidgetProps): react_jsx_runtime.JSX.Eleme
84
97
  */
85
98
  declare function ChatProvider(props: ChatProviderProps): react_jsx_runtime.JSX.Element;
86
99
 
87
- export { Chat, ChatProvider, ChatProviderProps, ChatWidget };
100
+ /**
101
+ * Error boundary for isolating tool-renderer and slot failures.
102
+ *
103
+ * If a custom tool renderer, visualization, or slot component throws, the
104
+ * error is caught here — the rest of the chat stays alive and the user
105
+ * sees a small fallback. Without this, one broken tool crashes the whole
106
+ * conversation view.
107
+ */
108
+
109
+ interface ErrorBoundaryProps {
110
+ children: ReactNode;
111
+ /**
112
+ * Optional custom fallback. Receives the caught error + a retry fn. If
113
+ * omitted, a minimal neutral fallback is shown.
114
+ */
115
+ fallback?: (error: Error, reset: () => void) => ReactNode;
116
+ /** Called when an error is caught — use for logging/Sentry. */
117
+ onError?: (error: Error, info: ErrorInfo) => void;
118
+ /** Label used in the default fallback text (e.g. "tool renderer"). */
119
+ label?: string;
120
+ }
121
+ interface ErrorBoundaryState {
122
+ error: Error | null;
123
+ }
124
+ declare class ChatErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
125
+ state: ErrorBoundaryState;
126
+ static getDerivedStateFromError(error: Error): ErrorBoundaryState;
127
+ componentDidCatch(error: Error, info: ErrorInfo): void;
128
+ reset: () => void;
129
+ render(): ReactNode;
130
+ }
131
+
132
+ export { Chat, ChatErrorBoundary, type ChatProps, ChatProvider, ChatProviderProps, ChatWidget };
package/dist/index.js CHANGED
@@ -1,20 +1,22 @@
1
1
  "use client";
2
- export { useAigentycChat } from './chunk-4FBVV64J.js';
2
+ export { useAigentycChat } from './chunk-M4YRNNGB.js';
3
3
  import './chunk-BKDV2H6Z.js';
4
- import { ChatInterface, PreviewEmbedPanel, LiveChatPanel, MobileLiveChatDrawer, FloatingButton } from './chunk-FOZXDUSZ.js';
4
+ import { ChatInterface, PreviewEmbedPanel, LiveChatPanel, MobileLiveChatDrawer, FloatingButton } from './chunk-SWKWHBBN.js';
5
+ export { ChatErrorBoundary } from './chunk-SWKWHBBN.js';
5
6
  import { LiveChatProvider, PreviewEmbedProvider, useIsMobile, usePreviewEmbed } from './chunk-5F3O3ZJH.js';
6
7
  export { useLiveChat } from './chunk-5F3O3ZJH.js';
7
8
  import { ThemeProvider } from './chunk-IU7Q7O5G.js';
8
9
  export { useTheme } from './chunk-IU7Q7O5G.js';
9
- import './chunk-A7PCSWIK.js';
10
+ import './chunk-B27JIQ4Z.js';
10
11
  import './chunk-MZQKGNWF.js';
11
12
  import { I18nProvider } from './chunk-QYCEHFAB.js';
12
13
  export { useI18n } from './chunk-QYCEHFAB.js';
13
- import './chunk-U3FXVLUK.js';
14
- import { SlotsProvider, ChatContextProvider, useSlots, renderSlot } from './chunk-FYPJSHCL.js';
15
- export { useChatContext, useSlot, useSlots } from './chunk-FYPJSHCL.js';
14
+ export { getToolDisplayData, normalizeToolRows } from './chunk-XEAAB5ZM.js';
15
+ import './chunk-PQCGQ32Q.js';
16
+ import { SlotsProvider, ChatContextProvider, useSlots, renderSlot } from './chunk-FPQ3UCCJ.js';
17
+ export { renderSlot, useChatContext, useSlot, useSlots } from './chunk-FPQ3UCCJ.js';
16
18
  import './chunk-PS3U7T37.js';
17
- import './chunk-7L4FS6G7.js';
19
+ import './chunk-JHWSG5IB.js';
18
20
  import './chunk-4QT25AXI.js';
19
21
  import './chunk-NPJKLYLV.js';
20
22
  import { cn } from './chunk-3RW7O444.js';
@@ -36,6 +38,9 @@ var CALLBACK_KEYS = [
36
38
  "onLiveChatConnected",
37
39
  "onLiveChatEnded",
38
40
  "onError",
41
+ "onNewConversation",
42
+ "onStopGeneration",
43
+ "onClearMessages",
39
44
  "onInteraction"
40
45
  ];
41
46
  function pickCallbacks(props) {
@@ -87,9 +92,9 @@ function ChatProvider(props) {
87
92
  }
88
93
  ) }) }) });
89
94
  }
90
- function Chat({ className, children, showSources, ...providerProps }) {
95
+ function Chat({ className, children, showSources, messagePartOrder, ...providerProps }) {
91
96
  return /* @__PURE__ */ jsx(ChatProvider, { ...providerProps, children: /* @__PURE__ */ jsxs("div", { className, children: [
92
- /* @__PURE__ */ jsx(ChatInterface, { showSources }),
97
+ /* @__PURE__ */ jsx(ChatInterface, { showSources, messagePartOrder }),
93
98
  children
94
99
  ] }) });
95
100
  }
@@ -208,6 +213,7 @@ function ChatWidgetInner({
208
213
  questionsLayout,
209
214
  questionsLayoutMobile,
210
215
  showSources,
216
+ messagePartOrder,
211
217
  language
212
218
  }) {
213
219
  const [internalIsOpen, setInternalIsOpen] = useState(false);
@@ -256,10 +262,11 @@ function ChatWidgetInner({
256
262
  questionsLayout,
257
263
  questionsLayoutMobile,
258
264
  showSources,
265
+ messagePartOrder,
259
266
  pendingMessage,
260
267
  onPendingMessageConsumed: () => setPendingMessage(null)
261
268
  }),
262
- [isOpen, handleClose, logoUrl, welcomeTitle, welcomeSubtitle, hideWelcomeHeader, footerText, hideHeader, showFirstMessage, questionsLayout, questionsLayoutMobile, showSources, pendingMessage]
269
+ [isOpen, handleClose, logoUrl, welcomeTitle, welcomeSubtitle, hideWelcomeHeader, footerText, hideHeader, showFirstMessage, questionsLayout, questionsLayoutMobile, showSources, messagePartOrder, pendingMessage]
263
270
  );
264
271
  if (mode === "inline") {
265
272
  return /* @__PURE__ */ jsx("div", { className: "flex flex-col w-full h-full", dir: dirRTL ? "rtl" : "ltr", style: { backgroundColor: "var(--ac-background)" }, children: /* @__PURE__ */ jsx(ChatInterface, { ...chatInterfaceProps }) });