@uptrademedia/site-kit 1.1.7 → 1.2.1

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 (113) hide show
  1. package/dist/analytics/index.d.mts +2 -2
  2. package/dist/analytics/index.d.ts +2 -2
  3. package/dist/analytics/index.js +6 -6
  4. package/dist/analytics/index.mjs +2 -2
  5. package/dist/{api-l44k92vp.d.mts → api-CWtoFJCO.d.mts} +1 -1
  6. package/dist/{api-l44k92vp.d.ts → api-CWtoFJCO.d.ts} +1 -1
  7. package/dist/blog/index.d.mts +2 -2
  8. package/dist/blog/index.d.ts +2 -2
  9. package/dist/blog/server.d.mts +1 -1
  10. package/dist/blog/server.d.ts +1 -1
  11. package/dist/{chunk-HEUULOSC.js → chunk-2MNLOYDD.js} +3 -3
  12. package/dist/{chunk-HEUULOSC.js.map → chunk-2MNLOYDD.js.map} +1 -1
  13. package/dist/{chunk-LHMD7CAR.mjs → chunk-2STSAGNT.mjs} +28 -6
  14. package/dist/chunk-2STSAGNT.mjs.map +1 -0
  15. package/dist/{chunk-3LOFIO77.mjs → chunk-44OMJFCG.mjs} +187 -193
  16. package/dist/chunk-44OMJFCG.mjs.map +1 -0
  17. package/dist/{chunk-CTKXFLIF.js → chunk-47ZS7MKZ.js} +119 -80
  18. package/dist/chunk-47ZS7MKZ.js.map +1 -0
  19. package/dist/{chunk-VFJ3NNCY.js → chunk-DERI27QC.js} +187 -193
  20. package/dist/chunk-DERI27QC.js.map +1 -0
  21. package/dist/{chunk-TOUIKTXU.mjs → chunk-FHTQUJ4M.mjs} +118 -80
  22. package/dist/chunk-FHTQUJ4M.mjs.map +1 -0
  23. package/dist/{chunk-IRNMIFOE.js → chunk-ICHCPLRB.js} +28 -6
  24. package/dist/chunk-ICHCPLRB.js.map +1 -0
  25. package/dist/{chunk-HGTTGJVZ.js → chunk-LBHEVL6U.js} +3 -3
  26. package/dist/{chunk-HGTTGJVZ.js.map → chunk-LBHEVL6U.js.map} +1 -1
  27. package/dist/{chunk-YT5SBY5W.mjs → chunk-MLJXNFUO.mjs} +3 -3
  28. package/dist/{chunk-YT5SBY5W.mjs.map → chunk-MLJXNFUO.mjs.map} +1 -1
  29. package/dist/{chunk-OW2C3ATV.mjs → chunk-R6V7DQ24.mjs} +3 -3
  30. package/dist/{chunk-OW2C3ATV.mjs.map → chunk-R6V7DQ24.mjs.map} +1 -1
  31. package/dist/cli/index.js +831 -740
  32. package/dist/cli/index.js.map +1 -1
  33. package/dist/cli/index.mjs +825 -734
  34. package/dist/cli/index.mjs.map +1 -1
  35. package/dist/commerce/index.d.mts +3 -3
  36. package/dist/commerce/index.d.ts +3 -3
  37. package/dist/commerce/server.d.mts +1 -1
  38. package/dist/commerce/server.d.ts +1 -1
  39. package/dist/engage/index.d.mts +2 -2
  40. package/dist/engage/index.d.ts +2 -2
  41. package/dist/engage/index.js +4 -4
  42. package/dist/engage/index.mjs +1 -1
  43. package/dist/images/index.d.mts +1 -1
  44. package/dist/images/index.d.ts +1 -1
  45. package/dist/index.d.mts +7 -7
  46. package/dist/index.d.ts +7 -7
  47. package/dist/index.js +4 -4
  48. package/dist/index.mjs +2 -2
  49. package/dist/llms/index.d.mts +23 -274
  50. package/dist/llms/index.d.ts +23 -274
  51. package/dist/llms/index.js +14 -14
  52. package/dist/llms/index.js.map +1 -1
  53. package/dist/llms/index.mjs +4 -4
  54. package/dist/llms/index.mjs.map +1 -1
  55. package/dist/robots/index.d.mts +46 -0
  56. package/dist/robots/index.d.ts +46 -0
  57. package/dist/robots/index.js +34 -0
  58. package/dist/robots/index.js.map +1 -0
  59. package/dist/robots/index.mjs +32 -0
  60. package/dist/robots/index.mjs.map +1 -0
  61. package/dist/{routing-D311WhuV.d.ts → routing-BI69sU8F.d.ts} +1 -1
  62. package/dist/{routing-bTjqOM8S.d.mts → routing-Bg1nr9N0.d.mts} +1 -1
  63. package/dist/{scanner-VNEXRTZF.mjs → scanner-7ZMUM2P5.mjs} +3 -3
  64. package/dist/{scanner-VNEXRTZF.mjs.map → scanner-7ZMUM2P5.mjs.map} +1 -1
  65. package/dist/{scanner-CVKYTPUO.js → scanner-OY7UF3WA.js} +14 -14
  66. package/dist/{scanner-CVKYTPUO.js.map → scanner-OY7UF3WA.js.map} +1 -1
  67. package/dist/seo/index.d.mts +3 -3
  68. package/dist/seo/index.d.ts +3 -3
  69. package/dist/seo/server.d.mts +2 -2
  70. package/dist/seo/server.d.ts +2 -2
  71. package/dist/setup/index.js +2 -2
  72. package/dist/setup/index.mjs +1 -1
  73. package/dist/setup/server.js +2 -2
  74. package/dist/setup/server.mjs +1 -1
  75. package/dist/sitemap/index.d.mts +5 -1
  76. package/dist/sitemap/index.d.ts +5 -1
  77. package/dist/sitemap/index.js +5 -4
  78. package/dist/sitemap/index.js.map +1 -1
  79. package/dist/sitemap/index.mjs +4 -3
  80. package/dist/sitemap/index.mjs.map +1 -1
  81. package/dist/{socket-loader-3FWQWPDQ.js → socket-loader-J26QHHOB.js} +2 -2
  82. package/dist/socket-loader-J26QHHOB.js.map +1 -0
  83. package/dist/{socket-loader-N5ETWMXW.mjs → socket-loader-R7S2YJ2J.mjs} +2 -2
  84. package/dist/socket-loader-R7S2YJ2J.mjs.map +1 -0
  85. package/dist/{types-C_pfGZhI.d.mts → types-Bsf5kX1n.d.mts} +1 -1
  86. package/dist/{types-C_pfGZhI.d.ts → types-Bsf5kX1n.d.ts} +1 -1
  87. package/dist/{types-DxhEH2tX.d.mts → types-CNZcDIoX.d.mts} +1 -1
  88. package/dist/{types-DxhEH2tX.d.ts → types-CNZcDIoX.d.ts} +1 -1
  89. package/dist/types-D8i7Alvv.d.mts +259 -0
  90. package/dist/types-D8i7Alvv.d.ts +259 -0
  91. package/dist/{types-DiZVgJKD.d.mts → types-DA_Kocle.d.mts} +1 -1
  92. package/dist/{types-DiZVgJKD.d.ts → types-DA_Kocle.d.ts} +1 -1
  93. package/dist/{types-CMNYdZwT.d.mts → types-DI0jnhjJ.d.mts} +1 -1
  94. package/dist/{types-CMNYdZwT.d.ts → types-DI0jnhjJ.d.ts} +1 -1
  95. package/dist/{types-BF2v5qX3.d.mts → types-wCtRFR0Y.d.mts} +1 -1
  96. package/dist/{types-BF2v5qX3.d.ts → types-wCtRFR0Y.d.ts} +1 -1
  97. package/dist/{useEventModal-x_RZRewW.d.mts → useEventModal-Bs0W9Iy_.d.mts} +2 -2
  98. package/dist/{useEventModal-5fIKdIaY.d.ts → useEventModal-Btu3uIjE.d.ts} +2 -2
  99. package/dist/{web-vitals-PW6MQOKS.js → web-vitals-444RLW3B.js} +3 -3
  100. package/dist/web-vitals-444RLW3B.js.map +1 -0
  101. package/dist/{web-vitals-YSIFBTH7.mjs → web-vitals-KPICZIEF.mjs} +3 -3
  102. package/dist/web-vitals-KPICZIEF.mjs.map +1 -0
  103. package/package.json +7 -1
  104. package/dist/chunk-3LOFIO77.mjs.map +0 -1
  105. package/dist/chunk-CTKXFLIF.js.map +0 -1
  106. package/dist/chunk-IRNMIFOE.js.map +0 -1
  107. package/dist/chunk-LHMD7CAR.mjs.map +0 -1
  108. package/dist/chunk-TOUIKTXU.mjs.map +0 -1
  109. package/dist/chunk-VFJ3NNCY.js.map +0 -1
  110. package/dist/socket-loader-3FWQWPDQ.js.map +0 -1
  111. package/dist/socket-loader-N5ETWMXW.mjs.map +0 -1
  112. package/dist/web-vitals-PW6MQOKS.js.map +0 -1
  113. package/dist/web-vitals-YSIFBTH7.mjs.map +0 -1
@@ -1,12 +1,14 @@
1
1
  'use strict';
2
2
 
3
3
  var React2 = require('react');
4
+ var ReactMarkdown = require('react-markdown');
4
5
  var jsxRuntime = require('react/jsx-runtime');
5
6
  var navigation = require('next/navigation');
6
7
 
7
8
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
9
 
9
10
  var React2__default = /*#__PURE__*/_interopDefault(React2);
11
+ var ReactMarkdown__default = /*#__PURE__*/_interopDefault(ReactMarkdown);
10
12
 
11
13
  // src/engage/ChatWidget.tsx
12
14
  function getApiConfig() {
@@ -64,6 +66,7 @@ function ChatWidget({ projectId: propProjectId, config, apiUrl: propApiUrl, sign
64
66
  React2.useRef(null);
65
67
  const pendingInitialMessageRef = React2.useRef(null);
66
68
  const apiKeyMissingWarnedRef = React2.useRef(false);
69
+ const siteContextRef = React2.useRef(null);
67
70
  function ensureApiKey() {
68
71
  const { apiKey } = getApiConfig();
69
72
  if (apiKey) return apiKey;
@@ -182,15 +185,30 @@ function ChatWidget({ projectId: propProjectId, config, apiUrl: propApiUrl, sign
182
185
  }
183
186
  return null;
184
187
  }, [projectId, visitorId, baseUrl]);
188
+ const fetchSiteContext = React2.useCallback(async () => {
189
+ if (siteContextRef.current) return siteContextRef.current;
190
+ try {
191
+ const base = typeof window !== "undefined" ? window.location.origin : "";
192
+ const res = await fetch(`${base}/llms.txt`, { cache: "no-store" });
193
+ if (res.ok) {
194
+ const text = await res.text();
195
+ if (text?.trim()) siteContextRef.current = text.trim();
196
+ }
197
+ } catch {
198
+ }
199
+ return siteContextRef.current;
200
+ }, []);
185
201
  const sendToSignalApi = React2.useCallback(
186
202
  async (content, conversationId) => {
187
203
  const url = `${signalUrl.replace(/\/$/, "")}/echo/public/chat`;
204
+ const siteContext = await fetchSiteContext();
188
205
  const body = {
189
206
  message: content,
190
207
  projectId,
191
208
  visitorId,
192
209
  ...conversationId ? { conversationId } : {},
193
- pageUrl: typeof window !== "undefined" ? window.location.href : void 0
210
+ pageUrl: typeof window !== "undefined" ? window.location.href : void 0,
211
+ ...siteContext ? { siteContext } : {}
194
212
  };
195
213
  const res = await fetch(url, {
196
214
  method: "POST",
@@ -207,7 +225,7 @@ function ChatWidget({ projectId: propProjectId, config, apiUrl: propApiUrl, sign
207
225
  const newConversationId = data?.conversationId ?? conversationId;
208
226
  return { content: aiContent, suggestions, conversationId: newConversationId };
209
227
  },
210
- [signalUrl, projectId, visitorId]
228
+ [signalUrl, projectId, visitorId, fetchSiteContext]
211
229
  );
212
230
  const handleSocketMessage = React2.useCallback((data) => {
213
231
  switch (data.type || data.event) {
@@ -264,7 +282,7 @@ function ChatWidget({ projectId: propProjectId, config, apiUrl: propApiUrl, sign
264
282
  socketRef.current.disconnect();
265
283
  socketRef.current = null;
266
284
  }
267
- const { createSocket } = await import('./socket-loader-3FWQWPDQ.js');
285
+ const { createSocket } = await import('./socket-loader-J26QHHOB.js');
268
286
  const namespaceUrl = `${baseUrl.replace(/\/$/, "")}/engage/chat`;
269
287
  const socket = await createSocket(namespaceUrl, {
270
288
  query: { projectId, visitorId, sessionId: currentSessionId },
@@ -985,82 +1003,101 @@ function ChatWidget({ projectId: propProjectId, config, apiUrl: propApiUrl, sign
985
1003
  {
986
1004
  style: { flex: 1, overflowY: "auto", padding: 16, display: "flex", flexDirection: "column", gap: 12, backgroundColor: "#f9fafb" },
987
1005
  children: [
988
- messages.map((message) => /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", justifyContent: message.role === "user" ? "flex-end" : "flex-start" }, children: /* @__PURE__ */ jsxRuntime.jsxs(
989
- "div",
990
- {
991
- style: {
992
- maxWidth: "80%",
993
- padding: message.role === "system" ? "8px 12px" : "10px 14px",
994
- borderRadius: message.role === "user" ? "16px 16px 4px 16px" : message.role === "system" ? "8px" : "16px 16px 16px 4px",
995
- backgroundColor: message.role === "user" ? primaryColor : message.role === "system" ? "#e5e7eb" : "#ffffff",
996
- color: message.role === "user" ? isLightColor(primaryColor) ? "#1a1a1a" : "white" : message.role === "system" ? "#6b7280" : "#111827",
997
- boxShadow: message.role === "system" ? "none" : "0 1px 2px rgba(0,0,0,0.08)",
998
- fontSize: message.role === "system" ? 13 : 14,
999
- fontStyle: message.role === "system" ? "italic" : "normal",
1000
- lineHeight: 1.5,
1001
- whiteSpace: "pre-wrap",
1002
- wordBreak: "break-word"
1003
- },
1004
- children: [
1005
- message.agentName && message.role === "agent" && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, opacity: 0.6, marginBottom: 4 }, children: message.agentName }),
1006
- message.content,
1007
- message.attachments?.length ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 8, display: "flex", flexDirection: "column", gap: 6 }, children: message.attachments.map(
1008
- (att, i) => att.mimeType?.startsWith("image/") ? /* @__PURE__ */ jsxRuntime.jsx("a", { href: att.url, target: "_blank", rel: "noopener noreferrer", style: { display: "block" }, children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: att.url, alt: att.name, style: { maxWidth: "100%", maxHeight: 200, borderRadius: 8, objectFit: "contain" } }) }, i) : /* @__PURE__ */ jsxRuntime.jsxs("a", { href: att.url, target: "_blank", rel: "noopener noreferrer", style: { fontSize: 13, wordBreak: "break-all" }, children: [
1009
- "\u{1F4CE} ",
1010
- att.name
1011
- ] }, i)
1012
- ) }) : null,
1013
- message.suggestions?.length ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", flexWrap: "wrap", gap: 6, marginTop: 8 }, children: message.suggestions.map((s, i) => /* @__PURE__ */ jsxRuntime.jsx(
1014
- "button",
1015
- {
1016
- type: "button",
1017
- onClick: () => {
1018
- setInputValue(s);
1019
- inputRef.current?.focus();
1020
- },
1021
- style: {
1022
- padding: "6px 12px",
1023
- borderRadius: 16,
1024
- border: `1px solid ${primaryColor}`,
1025
- backgroundColor: `${primaryColor}10`,
1026
- color: primaryColor,
1027
- fontSize: 13,
1028
- cursor: "pointer"
1029
- },
1030
- children: s
1031
- },
1032
- i
1033
- )) }) : null,
1034
- message.sendFailed && lastFailedSend && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 8 }, children: /* @__PURE__ */ jsxRuntime.jsx(
1035
- "button",
1036
- {
1037
- type: "button",
1038
- onClick: retryFailedSend,
1039
- style: { padding: "6px 12px", borderRadius: 6, border: "1px solid #ef4444", backgroundColor: "#fef2f2", color: "#dc2626", fontSize: 13, cursor: "pointer" },
1040
- children: "Retry send"
1041
- }
1042
- ) }),
1043
- widgetConfig?.signal_enabled && message.role === "assistant" && !message.suggestions?.length && widgetConfig?.handoff_enabled !== false && messages.filter((m) => m.role === "user").length >= 2 && message.id === messages.filter((m) => m.role === "assistant").slice(-1)[0]?.id && /* @__PURE__ */ jsxRuntime.jsx(
1044
- "button",
1045
- {
1046
- onClick: requestHandoff,
1047
- style: {
1048
- display: "inline-block",
1049
- marginTop: 8,
1050
- padding: "6px 12px",
1051
- borderRadius: 6,
1052
- border: `1px solid ${primaryColor}`,
1053
- backgroundColor: "transparent",
1054
- color: primaryColor,
1055
- fontSize: 13,
1056
- cursor: "pointer"
1006
+ messages.map((message) => {
1007
+ const isAssistant = message.role === "assistant" || message.role === "agent";
1008
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", justifyContent: message.role === "user" ? "flex-end" : "flex-start" }, children: /* @__PURE__ */ jsxRuntime.jsxs(
1009
+ "div",
1010
+ {
1011
+ style: {
1012
+ maxWidth: "80%",
1013
+ padding: message.role === "system" ? "8px 12px" : isAssistant ? "12px 16px" : "10px 14px",
1014
+ borderRadius: message.role === "user" ? "16px 16px 4px 16px" : message.role === "system" ? "8px" : "16px 16px 16px 4px",
1015
+ backgroundColor: message.role === "user" ? primaryColor : message.role === "system" ? "#e5e7eb" : "#ffffff",
1016
+ color: message.role === "user" ? isLightColor(primaryColor) ? "#1a1a1a" : "white" : message.role === "system" ? "#6b7280" : "#111827",
1017
+ boxShadow: message.role === "system" ? "none" : "0 1px 2px rgba(0,0,0,0.08)",
1018
+ fontSize: message.role === "system" ? 13 : 14,
1019
+ fontStyle: message.role === "system" ? "italic" : "normal",
1020
+ lineHeight: isAssistant ? 1.6 : 1.5,
1021
+ whiteSpace: isAssistant ? "normal" : "pre-wrap",
1022
+ wordBreak: "break-word",
1023
+ textAlign: isAssistant ? "left" : void 0,
1024
+ borderLeft: isAssistant ? `3px solid ${primaryColor}33` : void 0
1025
+ },
1026
+ children: [
1027
+ message.agentName && message.role === "agent" && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, opacity: 0.6, marginBottom: 4 }, children: message.agentName }),
1028
+ isAssistant ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "chatMessageContent", children: /* @__PURE__ */ jsxRuntime.jsx(
1029
+ ReactMarkdown__default.default,
1030
+ {
1031
+ components: {
1032
+ p: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("p", { style: { margin: "0 0 8px", lineHeight: 1.6 }, children }),
1033
+ strong: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("strong", { style: { fontWeight: 600 }, children }),
1034
+ ul: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("ul", { style: { margin: "4px 0 8px", paddingLeft: 20 }, children }),
1035
+ ol: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("ol", { style: { margin: "4px 0 8px", paddingLeft: 20 }, children }),
1036
+ li: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginBottom: 4 }, children }),
1037
+ h3: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("h3", { style: { margin: "12px 0 6px", fontSize: 15, fontWeight: 600 }, children }),
1038
+ h4: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("h4", { style: { margin: "8px 0 4px", fontSize: 14, fontWeight: 600 }, children })
1039
+ },
1040
+ children: message.content
1041
+ }
1042
+ ) }) : message.content,
1043
+ message.attachments?.length ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 8, display: "flex", flexDirection: "column", gap: 6 }, children: message.attachments.map(
1044
+ (att, i) => att.mimeType?.startsWith("image/") ? /* @__PURE__ */ jsxRuntime.jsx("a", { href: att.url, target: "_blank", rel: "noopener noreferrer", style: { display: "block" }, children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: att.url, alt: att.name, style: { maxWidth: "100%", maxHeight: 200, borderRadius: 8, objectFit: "contain" } }) }, i) : /* @__PURE__ */ jsxRuntime.jsxs("a", { href: att.url, target: "_blank", rel: "noopener noreferrer", style: { fontSize: 13, wordBreak: "break-all", display: "flex", alignItems: "center", gap: 6 }, children: [
1045
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" }) }),
1046
+ att.name
1047
+ ] }, i)
1048
+ ) }) : null,
1049
+ message.suggestions?.length ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", flexWrap: "wrap", gap: 6, marginTop: 8 }, children: message.suggestions.map((s, i) => /* @__PURE__ */ jsxRuntime.jsx(
1050
+ "button",
1051
+ {
1052
+ type: "button",
1053
+ onClick: () => {
1054
+ setInputValue(s);
1055
+ inputRef.current?.focus();
1056
+ },
1057
+ style: {
1058
+ padding: "6px 12px",
1059
+ borderRadius: 16,
1060
+ border: `1px solid ${primaryColor}`,
1061
+ backgroundColor: `${primaryColor}10`,
1062
+ color: primaryColor,
1063
+ fontSize: 13,
1064
+ cursor: "pointer"
1065
+ },
1066
+ children: s
1057
1067
  },
1058
- children: "Talk to a person"
1059
- }
1060
- )
1061
- ]
1062
- }
1063
- ) }, message.id)),
1068
+ i
1069
+ )) }) : null,
1070
+ message.sendFailed && lastFailedSend && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 8 }, children: /* @__PURE__ */ jsxRuntime.jsx(
1071
+ "button",
1072
+ {
1073
+ type: "button",
1074
+ onClick: retryFailedSend,
1075
+ style: { padding: "6px 12px", borderRadius: 6, border: "1px solid #ef4444", backgroundColor: "#fef2f2", color: "#dc2626", fontSize: 13, cursor: "pointer" },
1076
+ children: "Retry send"
1077
+ }
1078
+ ) }),
1079
+ widgetConfig?.signal_enabled && message.role === "assistant" && !message.suggestions?.length && widgetConfig?.handoff_enabled !== false && messages.filter((m) => m.role === "user").length >= 2 && message.id === messages.filter((m) => m.role === "assistant").slice(-1)[0]?.id && /* @__PURE__ */ jsxRuntime.jsx(
1080
+ "button",
1081
+ {
1082
+ onClick: requestHandoff,
1083
+ style: {
1084
+ display: "inline-block",
1085
+ marginTop: 8,
1086
+ padding: "6px 12px",
1087
+ borderRadius: 6,
1088
+ border: `1px solid ${primaryColor}`,
1089
+ backgroundColor: "transparent",
1090
+ color: primaryColor,
1091
+ fontSize: 13,
1092
+ cursor: "pointer"
1093
+ },
1094
+ children: "Talk to a person"
1095
+ }
1096
+ )
1097
+ ]
1098
+ }
1099
+ ) }, message.id);
1100
+ }),
1064
1101
  (isLoading || agentTyping) && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", justifyContent: "flex-start" }, children: /* @__PURE__ */ jsxRuntime.jsxs(
1065
1102
  "div",
1066
1103
  {
@@ -1190,6 +1227,8 @@ function ChatWidget({ projectId: propProjectId, config, apiUrl: propApiUrl, sign
1190
1227
  from { transform: scaleX(0); }
1191
1228
  to { transform: scaleX(1); }
1192
1229
  }
1230
+ .chatMessageContent p:first-child { margin-top: 0; }
1231
+ .chatMessageContent p:last-child { margin-bottom: 0; }
1193
1232
  ` })
1194
1233
  ]
1195
1234
  }
@@ -1823,5 +1862,5 @@ function getDeviceType() {
1823
1862
  exports.ChatWidget = ChatWidget;
1824
1863
  exports.DesignRenderer = DesignRenderer;
1825
1864
  exports.EngageWidget = EngageWidget;
1826
- //# sourceMappingURL=chunk-CTKXFLIF.js.map
1827
- //# sourceMappingURL=chunk-CTKXFLIF.js.map
1865
+ //# sourceMappingURL=chunk-47ZS7MKZ.js.map
1866
+ //# sourceMappingURL=chunk-47ZS7MKZ.js.map