@copilotkit/react-ui 1.10.6 → 1.50.0-beta.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 (122) hide show
  1. package/dist/{chunk-H5Y4W7DM.mjs → chunk-3JYVJHL5.mjs} +6 -6
  2. package/dist/chunk-3YWFGNSM.mjs +32 -0
  3. package/dist/chunk-3YWFGNSM.mjs.map +1 -0
  4. package/dist/{chunk-BAD2NFZ7.mjs → chunk-CQ2WALZ7.mjs} +2 -2
  5. package/dist/{chunk-W7ONZTSW.mjs → chunk-E6WVAOQA.mjs} +11 -5
  6. package/dist/chunk-E6WVAOQA.mjs.map +1 -0
  7. package/dist/{chunk-ME2WM7IP.mjs → chunk-G35HUUDA.mjs} +36 -260
  8. package/dist/chunk-G35HUUDA.mjs.map +1 -0
  9. package/dist/{chunk-EZQA3UPQ.mjs → chunk-HBZW7E5Z.mjs} +16 -13
  10. package/dist/chunk-HBZW7E5Z.mjs.map +1 -0
  11. package/dist/{chunk-3QYTKBWC.mjs → chunk-IHFR6PYG.mjs} +8 -5
  12. package/dist/chunk-IHFR6PYG.mjs.map +1 -0
  13. package/dist/{chunk-5XLGXUQI.mjs → chunk-MPF6BJUF.mjs} +7 -3
  14. package/dist/chunk-MPF6BJUF.mjs.map +1 -0
  15. package/dist/{chunk-W26XFBEG.mjs → chunk-NGJ32FAP.mjs} +3 -3
  16. package/dist/chunk-NGJ32FAP.mjs.map +1 -0
  17. package/dist/{chunk-2LIO4Z3E.mjs → chunk-ODEHR7KI.mjs} +9 -2
  18. package/dist/chunk-ODEHR7KI.mjs.map +1 -0
  19. package/dist/chunk-OYRZ4VLU.mjs +12 -0
  20. package/dist/chunk-OYRZ4VLU.mjs.map +1 -0
  21. package/dist/chunk-QB3GUN2N.mjs +31 -0
  22. package/dist/chunk-QB3GUN2N.mjs.map +1 -0
  23. package/dist/{chunk-7RDGZ5JL.mjs → chunk-SOB5EIL7.mjs} +2 -2
  24. package/dist/components/chat/Chat.d.ts +3 -98
  25. package/dist/components/chat/Chat.js +100 -279
  26. package/dist/components/chat/Chat.js.map +1 -1
  27. package/dist/components/chat/Chat.mjs +12 -14
  28. package/dist/components/chat/Input.d.ts +1 -1
  29. package/dist/components/chat/Input.js +11 -8
  30. package/dist/components/chat/Input.js.map +1 -1
  31. package/dist/components/chat/Input.mjs +2 -2
  32. package/dist/components/chat/Messages.d.ts +4 -4
  33. package/dist/components/chat/Messages.js +44 -8
  34. package/dist/components/chat/Messages.js.map +1 -1
  35. package/dist/components/chat/Messages.mjs +5 -5
  36. package/dist/components/chat/Modal.d.ts +1 -6
  37. package/dist/components/chat/Modal.js +106 -283
  38. package/dist/components/chat/Modal.js.map +1 -1
  39. package/dist/components/chat/Modal.mjs +11 -11
  40. package/dist/components/chat/Popup.d.ts +1 -6
  41. package/dist/components/chat/Popup.js +106 -283
  42. package/dist/components/chat/Popup.js.map +1 -1
  43. package/dist/components/chat/Popup.mjs +12 -12
  44. package/dist/components/chat/Sidebar.d.ts +1 -6
  45. package/dist/components/chat/Sidebar.js +106 -283
  46. package/dist/components/chat/Sidebar.js.map +1 -1
  47. package/dist/components/chat/Sidebar.mjs +12 -12
  48. package/dist/components/chat/Suggestion.js.map +1 -1
  49. package/dist/components/chat/Suggestion.mjs +1 -1
  50. package/dist/components/chat/Suggestions.d.ts +1 -1
  51. package/dist/components/chat/Suggestions.js +19 -12
  52. package/dist/components/chat/Suggestions.js.map +1 -1
  53. package/dist/components/chat/Suggestions.mjs +2 -2
  54. package/dist/components/chat/index.d.ts +0 -5
  55. package/dist/components/chat/index.js +106 -283
  56. package/dist/components/chat/index.js.map +1 -1
  57. package/dist/components/chat/index.mjs +13 -13
  58. package/dist/components/chat/messages/AssistantMessage.js +7 -4
  59. package/dist/components/chat/messages/AssistantMessage.js.map +1 -1
  60. package/dist/components/chat/messages/AssistantMessage.mjs +1 -1
  61. package/dist/components/chat/messages/LegacyRenderMessage.js +37 -7
  62. package/dist/components/chat/messages/LegacyRenderMessage.js.map +1 -1
  63. package/dist/components/chat/messages/LegacyRenderMessage.mjs +4 -4
  64. package/dist/components/chat/messages/RenderMessage.js +30 -7
  65. package/dist/components/chat/messages/RenderMessage.js.map +1 -1
  66. package/dist/components/chat/messages/RenderMessage.mjs +3 -3
  67. package/dist/components/chat/messages/UserMessage.js +19 -3
  68. package/dist/components/chat/messages/UserMessage.js.map +1 -1
  69. package/dist/components/chat/messages/UserMessage.mjs +1 -1
  70. package/dist/components/chat/props.d.ts +16 -0
  71. package/dist/components/chat/props.js.map +1 -1
  72. package/dist/components/index.d.ts +0 -5
  73. package/dist/components/index.js +106 -283
  74. package/dist/components/index.js.map +1 -1
  75. package/dist/components/index.mjs +13 -13
  76. package/dist/hooks/index.d.ts +1 -0
  77. package/dist/hooks/index.js +2 -24
  78. package/dist/hooks/index.js.map +1 -1
  79. package/dist/hooks/index.mjs +1 -1
  80. package/dist/hooks/use-copilot-chat-suggestions.d.ts +4 -26
  81. package/dist/hooks/use-copilot-chat-suggestions.js +2 -24
  82. package/dist/hooks/use-copilot-chat-suggestions.js.map +1 -1
  83. package/dist/hooks/use-copilot-chat-suggestions.mjs +1 -1
  84. package/dist/index.css +8 -1
  85. package/dist/index.css.map +1 -1
  86. package/dist/index.d.ts +0 -5
  87. package/dist/index.js +109 -308
  88. package/dist/index.js.map +1 -1
  89. package/dist/index.mjs +14 -14
  90. package/dist/types/suggestions.d.ts +1 -0
  91. package/dist/types/suggestions.js.map +1 -1
  92. package/package.json +23 -22
  93. package/src/components/chat/Chat.tsx +40 -325
  94. package/src/components/chat/Input.tsx +13 -12
  95. package/src/components/chat/Messages.tsx +10 -4
  96. package/src/components/chat/Suggestion.tsx +2 -2
  97. package/src/components/chat/Suggestions.tsx +6 -2
  98. package/src/components/chat/messages/AssistantMessage.tsx +14 -4
  99. package/src/components/chat/messages/LegacyRenderMessage.tsx +7 -0
  100. package/src/components/chat/messages/RenderMessage.tsx +4 -0
  101. package/src/components/chat/messages/UserMessage.tsx +30 -6
  102. package/src/components/chat/props.ts +19 -0
  103. package/src/css/messages.css +10 -1
  104. package/src/hooks/use-copilot-chat-suggestions.tsx +6 -57
  105. package/src/types/suggestions.ts +1 -0
  106. package/tsup.config.ts +1 -1
  107. package/dist/chunk-226ZMOE3.mjs +0 -24
  108. package/dist/chunk-226ZMOE3.mjs.map +0 -1
  109. package/dist/chunk-2LIO4Z3E.mjs.map +0 -1
  110. package/dist/chunk-3QYTKBWC.mjs.map +0 -1
  111. package/dist/chunk-5XLGXUQI.mjs.map +0 -1
  112. package/dist/chunk-EYRKZDP5.mjs +0 -32
  113. package/dist/chunk-EYRKZDP5.mjs.map +0 -1
  114. package/dist/chunk-EZQA3UPQ.mjs.map +0 -1
  115. package/dist/chunk-ME2WM7IP.mjs.map +0 -1
  116. package/dist/chunk-VVL6JFCJ.mjs +0 -16
  117. package/dist/chunk-VVL6JFCJ.mjs.map +0 -1
  118. package/dist/chunk-W26XFBEG.mjs.map +0 -1
  119. package/dist/chunk-W7ONZTSW.mjs.map +0 -1
  120. /package/dist/{chunk-H5Y4W7DM.mjs.map → chunk-3JYVJHL5.mjs.map} +0 -0
  121. /package/dist/{chunk-BAD2NFZ7.mjs.map → chunk-CQ2WALZ7.mjs.map} +0 -0
  122. /package/dist/{chunk-7RDGZ5JL.mjs.map → chunk-SOB5EIL7.mjs.map} +0 -0
@@ -80,8 +80,7 @@ var __async = (__this, __arguments, generator) => {
80
80
  var Chat_exports = {};
81
81
  __export(Chat_exports, {
82
82
  CopilotChat: () => CopilotChat,
83
- WrappedCopilotChat: () => WrappedCopilotChat,
84
- useCopilotChatLogic: () => useCopilotChatLogic
83
+ WrappedCopilotChat: () => WrappedCopilotChat
85
84
  });
86
85
  module.exports = __toCommonJS(Chat_exports);
87
86
 
@@ -400,14 +399,30 @@ var import_react_core = require("@copilotkit/react-core");
400
399
 
401
400
  // src/components/chat/messages/UserMessage.tsx
402
401
  var import_jsx_runtime3 = require("react/jsx-runtime");
402
+ var getTextContent = (content) => {
403
+ if (typeof content === "undefined") {
404
+ return void 0;
405
+ }
406
+ if (typeof content === "string") {
407
+ return content;
408
+ }
409
+ return content.map((part) => {
410
+ if (part.type === "text") {
411
+ return part.text;
412
+ }
413
+ return void 0;
414
+ }).filter((value) => typeof value === "string" && value.length > 0).join(" ").trim() || void 0;
415
+ };
403
416
  var UserMessage = (props) => {
404
417
  const { message, ImageRenderer: ImageRenderer2 } = props;
405
- const isImageMessage = message && "image" in message && message.image;
418
+ const isImageMessage = message && "image" in message && Boolean(message.image);
406
419
  if (isImageMessage) {
407
420
  const imageMessage = message;
408
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ImageRenderer2, { image: imageMessage.image, content: imageMessage.content }) });
421
+ const content2 = getTextContent(imageMessage == null ? void 0 : imageMessage.content);
422
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ImageRenderer2, { image: imageMessage.image, content: content2 }) });
409
423
  }
410
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: message == null ? void 0 : message.content });
424
+ const content = getTextContent(message == null ? void 0 : message.content);
425
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: content });
411
426
  };
412
427
 
413
428
  // src/components/chat/Markdown.tsx
@@ -950,6 +965,7 @@ var AssistantMessage = (props) => {
950
965
  onThumbsUp,
951
966
  onThumbsDown,
952
967
  isCurrentMessage,
968
+ feedback,
953
969
  markdownTagRenderers
954
970
  } = props;
955
971
  const [copied, setCopied] = (0, import_react4.useState)(false);
@@ -971,12 +987,14 @@ var AssistantMessage = (props) => {
971
987
  onRegenerate();
972
988
  };
973
989
  const handleThumbsUp = () => {
974
- if (onThumbsUp && message)
990
+ if (onThumbsUp && message) {
975
991
  onThumbsUp(message);
992
+ }
976
993
  };
977
994
  const handleThumbsDown = () => {
978
- if (onThumbsDown && message)
995
+ if (onThumbsDown && message) {
979
996
  onThumbsDown(message);
997
+ }
980
998
  };
981
999
  const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { children: icons.activityIcon });
982
1000
  const content = (message == null ? void 0 : message.content) || "";
@@ -1012,7 +1030,7 @@ var AssistantMessage = (props) => {
1012
1030
  onThumbsUp && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1013
1031
  "button",
1014
1032
  {
1015
- className: "copilotKitMessageControlButton",
1033
+ className: `copilotKitMessageControlButton ${feedback === "thumbsUp" ? "active" : ""}`,
1016
1034
  onClick: handleThumbsUp,
1017
1035
  "aria-label": labels.thumbsUp,
1018
1036
  title: labels.thumbsUp,
@@ -1022,7 +1040,7 @@ var AssistantMessage = (props) => {
1022
1040
  onThumbsDown && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
1023
1041
  "button",
1024
1042
  {
1025
- className: "copilotKitMessageControlButton",
1043
+ className: `copilotKitMessageControlButton ${feedback === "thumbsDown" ? "active" : ""}`,
1026
1044
  onClick: handleThumbsDown,
1027
1045
  "aria-label": labels.thumbsDown,
1028
1046
  title: labels.thumbsDown,
@@ -1083,6 +1101,7 @@ function RenderMessage(_a) {
1083
1101
  var _a2;
1084
1102
  const {
1085
1103
  message,
1104
+ messages,
1086
1105
  inProgress,
1087
1106
  index,
1088
1107
  isCurrentMessage,
@@ -1090,6 +1109,7 @@ function RenderMessage(_a) {
1090
1109
  onCopy,
1091
1110
  onThumbsUp,
1092
1111
  onThumbsDown,
1112
+ messageFeedback,
1093
1113
  markdownTagRenderers
1094
1114
  } = props;
1095
1115
  switch (message.role) {
@@ -1112,6 +1132,7 @@ function RenderMessage(_a) {
1112
1132
  subComponent: (_a2 = message.generativeUI) == null ? void 0 : _a2.call(message),
1113
1133
  rawData: message,
1114
1134
  message,
1135
+ messages,
1115
1136
  isLoading: inProgress && isCurrentMessage && !message.content,
1116
1137
  isGenerating: inProgress && isCurrentMessage && !!message.content,
1117
1138
  isCurrentMessage,
@@ -1119,6 +1140,7 @@ function RenderMessage(_a) {
1119
1140
  onCopy,
1120
1141
  onThumbsUp,
1121
1142
  onThumbsDown,
1143
+ feedback: (messageFeedback == null ? void 0 : messageFeedback[message.id]) || null,
1122
1144
  markdownTagRenderers,
1123
1145
  ImageRenderer: ImageRenderer2
1124
1146
  },
@@ -1132,6 +1154,7 @@ var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
1132
1154
  var import_jsx_runtime9 = require("react/jsx-runtime");
1133
1155
  var LegacyRenderMessage = ({
1134
1156
  message,
1157
+ messages,
1135
1158
  inProgress,
1136
1159
  index,
1137
1160
  isCurrentMessage,
@@ -1160,6 +1183,7 @@ var LegacyRenderMessage = ({
1160
1183
  RenderTextMessage,
1161
1184
  {
1162
1185
  message,
1186
+ messages,
1163
1187
  inProgress,
1164
1188
  index,
1165
1189
  isCurrentMessage,
@@ -1177,6 +1201,7 @@ var LegacyRenderMessage = ({
1177
1201
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1178
1202
  RenderActionExecutionMessage,
1179
1203
  {
1204
+ messages,
1180
1205
  message,
1181
1206
  inProgress,
1182
1207
  index,
@@ -1191,6 +1216,7 @@ var LegacyRenderMessage = ({
1191
1216
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1192
1217
  RenderAgentStateMessage,
1193
1218
  {
1219
+ messages,
1194
1220
  message,
1195
1221
  inProgress,
1196
1222
  index,
@@ -1204,6 +1230,7 @@ var LegacyRenderMessage = ({
1204
1230
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1205
1231
  RenderResultMessage,
1206
1232
  {
1233
+ messages,
1207
1234
  message,
1208
1235
  inProgress,
1209
1236
  index,
@@ -1217,6 +1244,7 @@ var LegacyRenderMessage = ({
1217
1244
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1218
1245
  RenderImageMessage,
1219
1246
  {
1247
+ messages,
1220
1248
  message,
1221
1249
  inProgress,
1222
1250
  index,
@@ -1229,6 +1257,7 @@ var LegacyRenderMessage = ({
1229
1257
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1230
1258
  RenderMessage,
1231
1259
  {
1260
+ messages,
1232
1261
  message,
1233
1262
  inProgress,
1234
1263
  index,
@@ -1259,6 +1288,7 @@ var Messages = ({
1259
1288
  onCopy,
1260
1289
  onThumbsUp,
1261
1290
  onThumbsDown,
1291
+ messageFeedback,
1262
1292
  markdownTagRenderers,
1263
1293
  chatError,
1264
1294
  // Legacy props
@@ -1268,7 +1298,8 @@ var Messages = ({
1268
1298
  RenderResultMessage,
1269
1299
  RenderImageMessage
1270
1300
  }) => {
1271
- const { labels } = useChatContext();
1301
+ var _a;
1302
+ const { labels, icons } = useChatContext();
1272
1303
  const { messages: visibleMessages, interrupt } = (0, import_react_core.useCopilotChatInternal)();
1273
1304
  const initialMessages = (0, import_react6.useMemo)(() => makeInitialMessages(labels.initial), [labels.initial]);
1274
1305
  const messages = [...initialMessages, ...visibleMessages];
@@ -1298,6 +1329,7 @@ var Messages = ({
1298
1329
  ]
1299
1330
  );
1300
1331
  const MessageRenderer = hasLegacyProps ? (props) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(LegacyRenderMessage, __spreadProps(__spreadValues({}, props), { legacyProps })) : RenderMessage2;
1332
+ const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: icons.activityIcon });
1301
1333
  return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
1302
1334
  /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "copilotKitMessagesContainer", children: [
1303
1335
  messages.map((message, index) => {
@@ -1306,6 +1338,7 @@ var Messages = ({
1306
1338
  MessageRenderer,
1307
1339
  {
1308
1340
  message,
1341
+ messages,
1309
1342
  inProgress,
1310
1343
  index,
1311
1344
  isCurrentMessage,
@@ -1316,11 +1349,13 @@ var Messages = ({
1316
1349
  onCopy,
1317
1350
  onThumbsUp,
1318
1351
  onThumbsDown,
1352
+ messageFeedback,
1319
1353
  markdownTagRenderers
1320
1354
  },
1321
1355
  index
1322
1356
  );
1323
1357
  }),
1358
+ ((_a = messages[messages.length - 1]) == null ? void 0 : _a.role) === "user" && inProgress && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(LoadingIcon, {}),
1324
1359
  interrupt,
1325
1360
  chatError && ErrorMessage && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ErrorMessage, { error: chatError, isCurrentMessage: true })
1326
1361
  ] }),
@@ -1614,12 +1649,12 @@ var MAX_NEWLINES = 6;
1614
1649
  var Input = ({
1615
1650
  inProgress,
1616
1651
  onSend,
1617
- isVisible = false,
1652
+ chatReady = true,
1618
1653
  onStop,
1619
1654
  onUpload,
1620
1655
  hideStopButton = false
1621
1656
  }) => {
1622
- var _a, _b;
1657
+ var _a;
1623
1658
  const context = useChatContext();
1624
1659
  const copilotContext = (0, import_react_core3.useCopilotContext)();
1625
1660
  const showPoweredBy = !((_a = copilotContext.copilotApiConfig) == null ? void 0 : _a.publicApiKey);
@@ -1649,14 +1684,16 @@ var Input = ({
1649
1684
  inProgress
1650
1685
  });
1651
1686
  const isInProgress = inProgress || pushToTalkState === "transcribing";
1652
- const buttonIcon = isInProgress && !hideStopButton ? context.icons.stopIcon : context.icons.sendIcon;
1687
+ const { buttonIcon, buttonAlt } = (0, import_react10.useMemo)(() => {
1688
+ if (!chatReady)
1689
+ return { buttonIcon: context.icons.spinnerIcon, buttonAlt: "Loading" };
1690
+ return isInProgress && !hideStopButton ? { buttonIcon: context.icons.stopIcon, buttonAlt: "Stop" } : { buttonIcon: context.icons.sendIcon, buttonAlt: "Send" };
1691
+ }, [isInProgress, chatReady, hideStopButton, context.icons.stopIcon, context.icons.sendIcon]);
1653
1692
  const showPushToTalk = pushToTalkConfigured && (pushToTalkState === "idle" || pushToTalkState === "recording") && !inProgress;
1693
+ const { interrupt } = (0, import_react_core3.useCopilotChatInternal)();
1654
1694
  const canSend = (0, import_react10.useMemo)(() => {
1655
- var _a2;
1656
- const interruptEvent = (_a2 = copilotContext.langGraphInterruptAction) == null ? void 0 : _a2.event;
1657
- const interruptInProgress = (interruptEvent == null ? void 0 : interruptEvent.name) === "LangGraphInterruptEvent" && !(interruptEvent == null ? void 0 : interruptEvent.response);
1658
- return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interruptInProgress;
1659
- }, [(_b = copilotContext.langGraphInterruptAction) == null ? void 0 : _b.event, isInProgress, text, pushToTalkState]);
1695
+ return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interrupt;
1696
+ }, [interrupt, isInProgress, text, pushToTalkState]);
1660
1697
  const canStop = (0, import_react10.useMemo)(() => {
1661
1698
  return isInProgress && !hideStopButton;
1662
1699
  }, [isInProgress, hideStopButton]);
@@ -1703,6 +1740,7 @@ var Input = ({
1703
1740
  "data-copilotkit-in-progress": inProgress,
1704
1741
  "data-test-id": inProgress ? "copilot-chat-request-in-progress" : "copilot-chat-ready",
1705
1742
  className: "copilotKitInputControlButton",
1743
+ "aria-label": buttonAlt,
1706
1744
  children: buttonIcon
1707
1745
  }
1708
1746
  )
@@ -1716,8 +1754,6 @@ var Input = ({
1716
1754
  var import_react11 = __toESM(require("react"));
1717
1755
  var import_react_core5 = require("@copilotkit/react-core");
1718
1756
  var import_shared = require("@copilotkit/shared");
1719
- var import_shared2 = require("@copilotkit/shared");
1720
- var import_react_core6 = require("@copilotkit/react-core");
1721
1757
 
1722
1758
  // src/components/chat/ImageUploadQueue.tsx
1723
1759
  var import_jsx_runtime14 = require("react/jsx-runtime");
@@ -1821,18 +1857,25 @@ function Suggestion({ title, onClick, partial, className }) {
1821
1857
 
1822
1858
  // src/components/chat/Suggestions.tsx
1823
1859
  var import_jsx_runtime16 = require("react/jsx-runtime");
1824
- function Suggestions({ suggestions, onSuggestionClick }) {
1825
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1826
- Suggestion,
1827
- {
1828
- title: suggestion.title,
1829
- message: suggestion.message,
1830
- partial: suggestion.partial,
1831
- className: suggestion.className,
1832
- onClick: () => onSuggestionClick(suggestion.message)
1833
- },
1834
- index
1835
- )) });
1860
+ function Suggestions({
1861
+ suggestions,
1862
+ onSuggestionClick,
1863
+ isLoading
1864
+ }) {
1865
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => {
1866
+ var _a, _b;
1867
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1868
+ Suggestion,
1869
+ {
1870
+ title: suggestion.title,
1871
+ message: suggestion.message,
1872
+ partial: (_b = (_a = suggestion.isLoading) != null ? _a : suggestion.partial) != null ? _b : isLoading,
1873
+ className: suggestion.className,
1874
+ onClick: () => onSuggestionClick(suggestion.message)
1875
+ },
1876
+ index
1877
+ );
1878
+ }) });
1836
1879
  }
1837
1880
 
1838
1881
  // src/components/chat/Chat.tsx
@@ -1886,6 +1929,9 @@ function CopilotChat({
1886
1929
  const { publicApiKey, chatApiEndpoint } = copilotApiConfig;
1887
1930
  const [selectedImages, setSelectedImages] = (0, import_react11.useState)([]);
1888
1931
  const [chatError, setChatError] = (0, import_react11.useState)(null);
1932
+ const [messageFeedback, setMessageFeedback] = (0, import_react11.useState)(
1933
+ {}
1934
+ );
1889
1935
  const fileInputRef = (0, import_react11.useRef)(null);
1890
1936
  const triggerObservabilityHook = (0, import_react11.useCallback)(
1891
1937
  (hookName, ...args) => {
@@ -2029,16 +2075,12 @@ function CopilotChat({
2029
2075
  sendMessage,
2030
2076
  stopGeneration,
2031
2077
  reloadMessages,
2032
- suggestions: currentSuggestions
2033
- } = useCopilotChatLogic(
2034
- suggestions,
2035
- makeSystemMessage,
2036
- disableSystemMessage,
2037
- onInProgress,
2038
- onSubmitMessage,
2039
- onStopGeneration,
2040
- onReloadMessages
2041
- );
2078
+ suggestions: currentSuggestions,
2079
+ isLoadingSuggestions,
2080
+ agent
2081
+ } = (0, import_react_core5.useCopilotChatInternal)({
2082
+ suggestions
2083
+ });
2042
2084
  const prevIsLoading = (0, import_react11.useRef)(isLoading);
2043
2085
  (0, import_react11.useEffect)(() => {
2044
2086
  if (prevIsLoading.current !== isLoading) {
@@ -2057,7 +2099,11 @@ function CopilotChat({
2057
2099
  fileInputRef.current.value = "";
2058
2100
  }
2059
2101
  triggerObservabilityHook("onMessageSent", text);
2060
- return sendMessage(text, images);
2102
+ return sendMessage({
2103
+ id: (0, import_shared.randomUUID)(),
2104
+ content: text,
2105
+ role: "user"
2106
+ });
2061
2107
  };
2062
2108
  const chatContext = import_react11.default.useContext(ChatContext);
2063
2109
  const isVisible = chatContext ? chatContext.open : true;
@@ -2113,12 +2159,18 @@ function CopilotChat({
2113
2159
  if (onThumbsUp) {
2114
2160
  onThumbsUp(message);
2115
2161
  }
2162
+ setMessageFeedback((prev) => __spreadProps(__spreadValues({}, prev), {
2163
+ [message.id]: "thumbsUp"
2164
+ }));
2116
2165
  triggerObservabilityHook("onFeedbackGiven", message.id, "thumbsUp");
2117
2166
  };
2118
2167
  const handleThumbsDown = (message) => {
2119
2168
  if (onThumbsDown) {
2120
2169
  onThumbsDown(message);
2121
2170
  }
2171
+ setMessageFeedback((prev) => __spreadProps(__spreadValues({}, prev), {
2172
+ [message.id]: "thumbsDown"
2173
+ }));
2122
2174
  triggerObservabilityHook("onFeedbackGiven", message.id, "thumbsDown");
2123
2175
  };
2124
2176
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
@@ -2140,6 +2192,7 @@ function CopilotChat({
2140
2192
  onCopy: handleCopy,
2141
2193
  onThumbsUp: handleThumbsUp,
2142
2194
  onThumbsDown: handleThumbsDown,
2195
+ messageFeedback,
2143
2196
  markdownTagRenderers,
2144
2197
  ImageRenderer: ImageRenderer2,
2145
2198
  ErrorMessage,
@@ -2153,7 +2206,8 @@ function CopilotChat({
2153
2206
  RenderSuggestionsList,
2154
2207
  {
2155
2208
  onSuggestionClick: handleSendMessage,
2156
- suggestions: currentSuggestions
2209
+ suggestions: currentSuggestions,
2210
+ isLoading: isLoadingSuggestions
2157
2211
  }
2158
2212
  )
2159
2213
  }
@@ -2176,6 +2230,7 @@ function CopilotChat({
2176
2230
  Input2,
2177
2231
  {
2178
2232
  inProgress: isLoading,
2233
+ chatReady: Boolean(agent),
2179
2234
  onSend: handleSendMessage,
2180
2235
  isVisible,
2181
2236
  onStop: stopGeneration,
@@ -2201,243 +2256,9 @@ function WrappedCopilotChat({
2201
2256
  }
2202
2257
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_jsx_runtime17.Fragment, { children });
2203
2258
  }
2204
- var useCopilotChatLogic = (chatSuggestions, makeSystemMessage, disableSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
2205
- var _a;
2206
- const {
2207
- messages,
2208
- sendMessage,
2209
- setMessages,
2210
- reloadMessages: defaultReloadMessages,
2211
- stopGeneration: defaultStopGeneration,
2212
- runChatCompletion,
2213
- isLoading,
2214
- suggestions,
2215
- setSuggestions,
2216
- generateSuggestions,
2217
- resetSuggestions: resetSuggestionsFromHook,
2218
- isLoadingSuggestions
2219
- } = (0, import_react_core5.useCopilotChatInternal)({
2220
- makeSystemMessage,
2221
- disableSystemMessage
2222
- });
2223
- const generalContext = (0, import_react_core5.useCopilotContext)();
2224
- const messagesContext = (0, import_react_core5.useCopilotMessagesContext)();
2225
- const { actions } = generalContext;
2226
- const [suggestionsFailed, setSuggestionsFailed] = (0, import_react11.useState)(false);
2227
- const hasGeneratedInitialSuggestions = (0, import_react11.useRef)(false);
2228
- (0, import_react11.useEffect)(() => {
2229
- if (Array.isArray(chatSuggestions)) {
2230
- setSuggestions(chatSuggestions);
2231
- hasGeneratedInitialSuggestions.current = true;
2232
- }
2233
- }, [JSON.stringify(chatSuggestions), setSuggestions]);
2234
- const generateSuggestionsWithErrorHandling = (0, import_react11.useCallback)(
2235
- (context) => __async(void 0, null, function* () {
2236
- try {
2237
- yield generateSuggestions();
2238
- } catch (error) {
2239
- console.error("Failed to generate suggestions:", error);
2240
- setSuggestionsFailed(true);
2241
- }
2242
- }),
2243
- [generateSuggestions]
2244
- );
2245
- (0, import_react11.useEffect)(() => {
2246
- if (chatSuggestions !== "auto" || isLoadingSuggestions || suggestionsFailed) {
2247
- return;
2248
- }
2249
- if (isLoading) {
2250
- return;
2251
- }
2252
- if (Object.keys(generalContext.chatSuggestionConfiguration).length === 0) {
2253
- return;
2254
- }
2255
- if (messages.length === 0 && !hasGeneratedInitialSuggestions.current) {
2256
- hasGeneratedInitialSuggestions.current = true;
2257
- generateSuggestionsWithErrorHandling("initial");
2258
- return;
2259
- }
2260
- if (messages.length > 0 && suggestions.length === 0) {
2261
- generateSuggestionsWithErrorHandling("post-message");
2262
- return;
2263
- }
2264
- }, [
2265
- chatSuggestions,
2266
- isLoadingSuggestions,
2267
- suggestionsFailed,
2268
- messages.length,
2269
- isLoading,
2270
- suggestions.length,
2271
- Object.keys(generalContext.chatSuggestionConfiguration).join(","),
2272
- // Use stable string instead of object reference
2273
- generateSuggestionsWithErrorHandling
2274
- ]);
2275
- (0, import_react11.useEffect)(() => {
2276
- if (chatSuggestions !== "auto") {
2277
- hasGeneratedInitialSuggestions.current = false;
2278
- setSuggestionsFailed(false);
2279
- }
2280
- }, [chatSuggestions]);
2281
- const stableContext = (0, import_react11.useMemo)(
2282
- () => __spreadValues(__spreadValues({}, generalContext), messagesContext),
2283
- [
2284
- // Only include stable dependencies
2285
- generalContext.actions,
2286
- messagesContext.messages.length,
2287
- generalContext.isLoading
2288
- ]
2289
- );
2290
- const resetSuggestions = (0, import_react11.useCallback)(() => {
2291
- resetSuggestionsFromHook();
2292
- setSuggestionsFailed(false);
2293
- hasGeneratedInitialSuggestions.current = false;
2294
- }, [resetSuggestionsFromHook]);
2295
- (0, import_react11.useEffect)(() => {
2296
- onInProgress == null ? void 0 : onInProgress(isLoading);
2297
- }, [onInProgress, isLoading]);
2298
- const safelySendMessage = (messageContent, imagesToUse) => __async(void 0, null, function* () {
2299
- const images = imagesToUse || [];
2300
- if (chatSuggestions === "auto" || chatSuggestions === "manual") {
2301
- setSuggestions([]);
2302
- }
2303
- let firstMessage = null;
2304
- if (messageContent.trim().length > 0) {
2305
- const textMessage = {
2306
- id: (0, import_shared2.randomId)(),
2307
- role: "user",
2308
- content: messageContent
2309
- };
2310
- if (onSubmitMessage) {
2311
- try {
2312
- yield onSubmitMessage(messageContent);
2313
- } catch (error) {
2314
- console.error("Error in onSubmitMessage:", error);
2315
- }
2316
- }
2317
- yield sendMessage(textMessage, {
2318
- followUp: images.length === 0,
2319
- clearSuggestions: chatSuggestions === "auto" || chatSuggestions === "manual"
2320
- });
2321
- if (!firstMessage) {
2322
- firstMessage = textMessage;
2323
- }
2324
- }
2325
- if (images.length > 0) {
2326
- for (let i = 0; i < images.length; i++) {
2327
- const imageMessage = {
2328
- id: (0, import_shared2.randomId)(),
2329
- role: "user",
2330
- image: {
2331
- format: images[i].contentType.replace("image/", ""),
2332
- bytes: images[i].bytes
2333
- }
2334
- };
2335
- yield sendMessage(imageMessage, { followUp: i === images.length - 1 });
2336
- if (!firstMessage) {
2337
- firstMessage = imageMessage;
2338
- }
2339
- }
2340
- }
2341
- if (!firstMessage) {
2342
- return { role: "user", content: "", id: (0, import_shared2.randomId)() };
2343
- }
2344
- return firstMessage;
2345
- });
2346
- const currentAgentName = (_a = generalContext.agentSession) == null ? void 0 : _a.agentName;
2347
- const restartCurrentAgent = (hint) => __async(void 0, null, function* () {
2348
- if (generalContext.agentSession) {
2349
- generalContext.setAgentSession(__spreadProps(__spreadValues({}, generalContext.agentSession), {
2350
- nodeName: void 0,
2351
- threadId: void 0
2352
- }));
2353
- generalContext.setCoagentStates((prevAgentStates) => {
2354
- return __spreadProps(__spreadValues({}, prevAgentStates), {
2355
- [generalContext.agentSession.agentName]: __spreadProps(__spreadValues({}, prevAgentStates[generalContext.agentSession.agentName]), {
2356
- threadId: void 0,
2357
- nodeName: void 0,
2358
- runId: void 0
2359
- })
2360
- });
2361
- });
2362
- }
2363
- });
2364
- const runCurrentAgent = (hint) => __async(void 0, null, function* () {
2365
- if (generalContext.agentSession) {
2366
- yield (0, import_react_core6.runAgent)(
2367
- generalContext.agentSession.agentName,
2368
- stableContext,
2369
- messagesContext.messages,
2370
- sendMessage,
2371
- runChatCompletion
2372
- );
2373
- }
2374
- });
2375
- const stopCurrentAgent = () => {
2376
- if (generalContext.agentSession) {
2377
- (0, import_react_core6.stopAgent)(generalContext.agentSession.agentName, stableContext);
2378
- }
2379
- };
2380
- const setCurrentAgentState = (state) => {
2381
- if (generalContext.agentSession) {
2382
- generalContext.setCoagentStates((prevAgentStates) => {
2383
- return __spreadProps(__spreadValues({}, prevAgentStates), {
2384
- [generalContext.agentSession.agentName]: {
2385
- state
2386
- }
2387
- });
2388
- });
2389
- }
2390
- };
2391
- function stopGeneration() {
2392
- setSuggestions([]);
2393
- if (onStopGeneration) {
2394
- onStopGeneration({
2395
- messages,
2396
- setMessages,
2397
- stopGeneration: defaultStopGeneration,
2398
- currentAgentName,
2399
- restartCurrentAgent,
2400
- stopCurrentAgent,
2401
- runCurrentAgent,
2402
- setCurrentAgentState
2403
- });
2404
- } else {
2405
- defaultStopGeneration();
2406
- }
2407
- }
2408
- function reloadMessages(messageId) {
2409
- if (onReloadMessages) {
2410
- onReloadMessages({
2411
- messages,
2412
- setMessages,
2413
- stopGeneration: defaultStopGeneration,
2414
- currentAgentName,
2415
- restartCurrentAgent,
2416
- stopCurrentAgent,
2417
- runCurrentAgent,
2418
- setCurrentAgentState,
2419
- messageId
2420
- });
2421
- } else {
2422
- defaultReloadMessages(messageId);
2423
- }
2424
- }
2425
- return {
2426
- messages,
2427
- isLoading,
2428
- suggestions,
2429
- sendMessage: safelySendMessage,
2430
- stopGeneration,
2431
- reloadMessages,
2432
- resetSuggestions,
2433
- context: stableContext,
2434
- actions
2435
- };
2436
- };
2437
2259
  // Annotate the CommonJS export names for ESM import in node:
2438
2260
  0 && (module.exports = {
2439
2261
  CopilotChat,
2440
- WrappedCopilotChat,
2441
- useCopilotChatLogic
2262
+ WrappedCopilotChat
2442
2263
  });
2443
2264
  //# sourceMappingURL=Chat.js.map