@copilotkit/react-ui 1.3.16-mme-reset-chat.10 → 1.3.16-mme-revert-rxjs-changes.10

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 (45) hide show
  1. package/CHANGELOG.md +9 -53
  2. package/dist/{chunk-H7LLXN6X.mjs → chunk-H5CXJBR5.mjs} +3 -7
  3. package/dist/chunk-H5CXJBR5.mjs.map +1 -0
  4. package/dist/{chunk-P54DK2TL.mjs → chunk-M2NVAJQA.mjs} +2 -2
  5. package/dist/{chunk-3QOICFXX.mjs → chunk-ORHE7FYT.mjs} +8 -104
  6. package/dist/chunk-ORHE7FYT.mjs.map +1 -0
  7. package/dist/{chunk-SEY3XSCD.mjs → chunk-PY7YBFPA.mjs} +2 -2
  8. package/dist/{chunk-CPMIEVKK.mjs → chunk-RKPANT3F.mjs} +65 -15
  9. package/dist/chunk-RKPANT3F.mjs.map +1 -0
  10. package/dist/components/chat/Chat.d.ts +5 -50
  11. package/dist/components/chat/Chat.js +68 -114
  12. package/dist/components/chat/Chat.js.map +1 -1
  13. package/dist/components/chat/Chat.mjs +2 -2
  14. package/dist/components/chat/Messages.d.ts +6 -1
  15. package/dist/components/chat/Messages.js +66 -15
  16. package/dist/components/chat/Messages.js.map +1 -1
  17. package/dist/components/chat/Messages.mjs +5 -3
  18. package/dist/components/chat/Modal.d.ts +1 -1
  19. package/dist/components/chat/Modal.js +68 -118
  20. package/dist/components/chat/Modal.js.map +1 -1
  21. package/dist/components/chat/Modal.mjs +3 -3
  22. package/dist/components/chat/Popup.js +68 -118
  23. package/dist/components/chat/Popup.js.map +1 -1
  24. package/dist/components/chat/Popup.mjs +4 -4
  25. package/dist/components/chat/Sidebar.js +68 -118
  26. package/dist/components/chat/Sidebar.js.map +1 -1
  27. package/dist/components/chat/Sidebar.mjs +4 -4
  28. package/dist/components/chat/index.js +68 -118
  29. package/dist/components/chat/index.js.map +1 -1
  30. package/dist/components/chat/index.mjs +5 -5
  31. package/dist/components/index.js +68 -118
  32. package/dist/components/index.js.map +1 -1
  33. package/dist/components/index.mjs +5 -5
  34. package/dist/index.js +70 -120
  35. package/dist/index.js.map +1 -1
  36. package/dist/index.mjs +5 -5
  37. package/package.json +7 -7
  38. package/src/components/chat/Chat.tsx +7 -166
  39. package/src/components/chat/Messages.tsx +72 -15
  40. package/src/components/chat/Modal.tsx +0 -4
  41. package/dist/chunk-3QOICFXX.mjs.map +0 -1
  42. package/dist/chunk-CPMIEVKK.mjs.map +0 -1
  43. package/dist/chunk-H7LLXN6X.mjs.map +0 -1
  44. /package/dist/{chunk-P54DK2TL.mjs.map → chunk-M2NVAJQA.mjs.map} +0 -0
  45. /package/dist/{chunk-SEY3XSCD.mjs.map → chunk-PY7YBFPA.mjs.map} +0 -0
@@ -388,7 +388,7 @@ var ChatContextProvider = ({
388
388
  };
389
389
 
390
390
  // src/components/chat/Messages.tsx
391
- var import_react2 = __toESM(require("react"));
391
+ var import_react2 = require("react");
392
392
  var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
393
393
  var import_jsx_runtime3 = require("react/jsx-runtime");
394
394
  var Messages = ({
@@ -418,18 +418,8 @@ var Messages = ({
418
418
  }
419
419
  }
420
420
  }
421
- const messagesEndRef = import_react2.default.useRef(null);
422
- const scrollToBottom = () => {
423
- if (messagesEndRef.current) {
424
- messagesEndRef.current.scrollIntoView({
425
- behavior: "auto"
426
- });
427
- }
428
- };
429
- (0, import_react2.useEffect)(() => {
430
- scrollToBottom();
431
- }, [messages]);
432
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "copilotKitMessages", children: [
421
+ const { messagesEndRef, messagesContainerRef } = useScrollToBottom(messages);
422
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
433
423
  messages.map((message, index) => {
434
424
  const isCurrentMessage = index === messages.length - 1;
435
425
  if (message.isTextMessage()) {
@@ -498,6 +488,65 @@ function makeInitialMessages(initial) {
498
488
  })
499
489
  );
500
490
  }
491
+ function useScrollToBottom(messages) {
492
+ const messagesEndRef = (0, import_react2.useRef)(null);
493
+ const messagesContainerRef = (0, import_react2.useRef)(null);
494
+ const isProgrammaticScrollRef = (0, import_react2.useRef)(false);
495
+ const isUserScrollUpRef = (0, import_react2.useRef)(false);
496
+ const scrollToBottom = () => {
497
+ if (messagesEndRef.current) {
498
+ isProgrammaticScrollRef.current = true;
499
+ messagesEndRef.current.scrollIntoView({
500
+ behavior: "auto"
501
+ });
502
+ }
503
+ };
504
+ const handleScroll = () => {
505
+ if (isProgrammaticScrollRef.current) {
506
+ isProgrammaticScrollRef.current = false;
507
+ return;
508
+ }
509
+ if (messagesContainerRef.current) {
510
+ const { scrollTop, scrollHeight, clientHeight } = messagesContainerRef.current;
511
+ isUserScrollUpRef.current = scrollTop + clientHeight < scrollHeight;
512
+ }
513
+ };
514
+ (0, import_react2.useEffect)(() => {
515
+ const container = messagesContainerRef.current;
516
+ if (container) {
517
+ container.addEventListener("scroll", handleScroll);
518
+ }
519
+ return () => {
520
+ if (container) {
521
+ container.removeEventListener("scroll", handleScroll);
522
+ }
523
+ };
524
+ }, []);
525
+ (0, import_react2.useEffect)(() => {
526
+ const container = messagesContainerRef.current;
527
+ if (!container) {
528
+ return;
529
+ }
530
+ const mutationObserver = new MutationObserver(() => {
531
+ if (!isUserScrollUpRef.current) {
532
+ scrollToBottom();
533
+ }
534
+ });
535
+ mutationObserver.observe(container, {
536
+ childList: true,
537
+ subtree: true,
538
+ characterData: true
539
+ });
540
+ return () => {
541
+ mutationObserver.disconnect();
542
+ };
543
+ }, []);
544
+ (0, import_react2.useEffect)(() => {
545
+ isUserScrollUpRef.current = false;
546
+ scrollToBottom();
547
+ }, [messages.filter((m) => m.isTextMessage() && m.role === import_runtime_client_gql.Role.User).length]);
548
+ return { messagesEndRef, messagesContainerRef };
549
+ }
501
550
 
502
551
  // src/components/chat/Input.tsx
503
552
  var import_react5 = require("react");
@@ -1905,7 +1954,6 @@ function DebugMenuButton({
1905
1954
  }
1906
1955
 
1907
1956
  // src/components/chat/Chat.tsx
1908
- var import_react_core9 = require("@copilotkit/react-core");
1909
1957
  var import_jsx_runtime16 = require("react/jsx-runtime");
1910
1958
  function CopilotChat({
1911
1959
  instructions,
@@ -1913,8 +1961,6 @@ function CopilotChat({
1913
1961
  makeSystemMessage,
1914
1962
  showResponseButton = true,
1915
1963
  onInProgress,
1916
- onStopGeneration,
1917
- onReloadMessages,
1918
1964
  Messages: Messages2 = Messages,
1919
1965
  RenderTextMessage: RenderTextMessage2 = RenderTextMessage,
1920
1966
  RenderActionExecutionMessage: RenderActionExecutionMessage2 = RenderActionExecutionMessage,
@@ -1937,13 +1983,7 @@ function CopilotChat({
1937
1983
  sendMessage,
1938
1984
  stopGeneration,
1939
1985
  reloadMessages
1940
- } = useCopilotChatLogic(
1941
- makeSystemMessage,
1942
- onInProgress,
1943
- onSubmitMessage,
1944
- onStopGeneration,
1945
- onReloadMessages
1946
- );
1986
+ } = useCopilotChatLogic(makeSystemMessage, onInProgress, onSubmitMessage);
1947
1987
  const chatContext = import_react10.default.useContext(ChatContext);
1948
1988
  const isVisible = chatContext ? chatContext.open : true;
1949
1989
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
@@ -1999,15 +2039,8 @@ function WrappedCopilotChat({
1999
2039
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_jsx_runtime16.Fragment, { children });
2000
2040
  }
2001
2041
  var SUGGESTIONS_DEBOUNCE_TIMEOUT = 1e3;
2002
- var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
2003
- var _a;
2004
- const {
2005
- visibleMessages,
2006
- appendMessage,
2007
- reloadMessages: defaultReloadMessages,
2008
- stopGeneration: defaultStopGeneration,
2009
- isLoading
2010
- } = (0, import_react_core8.useCopilotChat)({
2042
+ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage) => {
2043
+ const { visibleMessages, appendMessage, reloadMessages, stopGeneration, isLoading } = (0, import_react_core8.useCopilotChat)({
2011
2044
  id: (0, import_shared3.randomId)(),
2012
2045
  makeSystemMessage
2013
2046
  });
@@ -2015,8 +2048,8 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
2015
2048
  const suggestionsAbortControllerRef = (0, import_react10.useRef)(null);
2016
2049
  const debounceTimerRef = (0, import_react10.useRef)();
2017
2050
  const abortSuggestions = () => {
2018
- var _a2;
2019
- (_a2 = suggestionsAbortControllerRef.current) == null ? void 0 : _a2.abort();
2051
+ var _a;
2052
+ (_a = suggestionsAbortControllerRef.current) == null ? void 0 : _a.abort();
2020
2053
  suggestionsAbortControllerRef.current = null;
2021
2054
  };
2022
2055
  const generalContext = (0, import_react_core8.useCopilotContext)();
@@ -2042,13 +2075,7 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
2042
2075
  return () => {
2043
2076
  clearTimeout(debounceTimerRef.current);
2044
2077
  };
2045
- }, [
2046
- isLoading,
2047
- context.chatSuggestionConfiguration,
2048
- // hackish way to trigger suggestions reload on reset, but better than moving suggestions to the
2049
- // global context
2050
- visibleMessages.length == 0
2051
- ]);
2078
+ }, [isLoading, context.chatSuggestionConfiguration]);
2052
2079
  const sendMessage = (messageContent) => __async(void 0, null, function* () {
2053
2080
  abortSuggestions();
2054
2081
  setCurrentSuggestions([]);
@@ -2066,79 +2093,6 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
2066
2093
  appendMessage(message);
2067
2094
  return message;
2068
2095
  });
2069
- const messages = visibleMessages;
2070
- const { setMessages } = messagesContext;
2071
- const currentAgentName = (_a = generalContext.agentSession) == null ? void 0 : _a.agentName;
2072
- const restartCurrentAgent = (hint) => __async(void 0, null, function* () {
2073
- if (generalContext.agentSession) {
2074
- generalContext.setAgentSession(__spreadProps(__spreadValues({}, generalContext.agentSession), {
2075
- nodeName: void 0,
2076
- threadId: void 0
2077
- }));
2078
- generalContext.setCoagentStates((prevAgentStates) => {
2079
- return __spreadProps(__spreadValues({}, prevAgentStates), {
2080
- [generalContext.agentSession.agentName]: __spreadProps(__spreadValues({}, prevAgentStates[generalContext.agentSession.agentName]), {
2081
- threadId: void 0,
2082
- nodeName: void 0,
2083
- runId: void 0
2084
- })
2085
- });
2086
- });
2087
- }
2088
- });
2089
- const runCurrentAgent = (hint) => __async(void 0, null, function* () {
2090
- if (generalContext.agentSession) {
2091
- yield (0, import_react_core9.runAgent)(generalContext.agentSession.agentName, context, appendMessage, hint);
2092
- }
2093
- });
2094
- const stopCurrentAgent = () => {
2095
- if (generalContext.agentSession) {
2096
- (0, import_react_core9.stopAgent)(generalContext.agentSession.agentName, context);
2097
- }
2098
- };
2099
- const setCurrentAgentState = (state) => {
2100
- if (generalContext.agentSession) {
2101
- generalContext.setCoagentStates((prevAgentStates) => {
2102
- return __spreadProps(__spreadValues({}, prevAgentStates), {
2103
- [generalContext.agentSession.agentName]: {
2104
- state
2105
- }
2106
- });
2107
- });
2108
- }
2109
- };
2110
- function stopGeneration() {
2111
- if (onStopGeneration) {
2112
- onStopGeneration({
2113
- messages,
2114
- setMessages,
2115
- stopGeneration: defaultStopGeneration,
2116
- currentAgentName,
2117
- restartCurrentAgent,
2118
- stopCurrentAgent,
2119
- runCurrentAgent,
2120
- setCurrentAgentState
2121
- });
2122
- } else {
2123
- defaultStopGeneration();
2124
- }
2125
- }
2126
- function reloadMessages() {
2127
- if (onReloadMessages) {
2128
- onReloadMessages({
2129
- messages,
2130
- setMessages,
2131
- stopGeneration: defaultStopGeneration,
2132
- currentAgentName,
2133
- restartCurrentAgent,
2134
- stopCurrentAgent,
2135
- runCurrentAgent,
2136
- setCurrentAgentState
2137
- });
2138
- } else {
2139
- defaultReloadMessages();
2140
- }
2141
- }
2142
2096
  return {
2143
2097
  visibleMessages,
2144
2098
  isLoading,