@copilotkit/react-ui 1.4.0-pre-1-4-0.12 → 1.4.0-pre-1-4-0.13

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 (39) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/{chunk-QK6XA3PL.mjs → chunk-H5CXJBR5.mjs} +3 -3
  3. package/dist/{chunk-TEZWY2BL.mjs → chunk-M2NVAJQA.mjs} +2 -2
  4. package/dist/{chunk-C5KOJ3IH.mjs → chunk-ORHE7FYT.mjs} +2 -2
  5. package/dist/{chunk-OJ5NVSTU.mjs → chunk-PY7YBFPA.mjs} +2 -2
  6. package/dist/{chunk-CPMIEVKK.mjs → chunk-RKPANT3F.mjs} +65 -15
  7. package/dist/chunk-RKPANT3F.mjs.map +1 -0
  8. package/dist/components/chat/Chat.js +62 -13
  9. package/dist/components/chat/Chat.js.map +1 -1
  10. package/dist/components/chat/Chat.mjs +2 -2
  11. package/dist/components/chat/Messages.d.ts +6 -1
  12. package/dist/components/chat/Messages.js +66 -15
  13. package/dist/components/chat/Messages.js.map +1 -1
  14. package/dist/components/chat/Messages.mjs +5 -3
  15. package/dist/components/chat/Modal.js +62 -13
  16. package/dist/components/chat/Modal.js.map +1 -1
  17. package/dist/components/chat/Modal.mjs +3 -3
  18. package/dist/components/chat/Popup.js +62 -13
  19. package/dist/components/chat/Popup.js.map +1 -1
  20. package/dist/components/chat/Popup.mjs +4 -4
  21. package/dist/components/chat/Sidebar.js +62 -13
  22. package/dist/components/chat/Sidebar.js.map +1 -1
  23. package/dist/components/chat/Sidebar.mjs +4 -4
  24. package/dist/components/chat/index.js +62 -13
  25. package/dist/components/chat/index.js.map +1 -1
  26. package/dist/components/chat/index.mjs +5 -5
  27. package/dist/components/index.js +62 -13
  28. package/dist/components/index.js.map +1 -1
  29. package/dist/components/index.mjs +5 -5
  30. package/dist/index.js +62 -13
  31. package/dist/index.js.map +1 -1
  32. package/dist/index.mjs +5 -5
  33. package/package.json +7 -7
  34. package/src/components/chat/Messages.tsx +72 -15
  35. package/dist/chunk-CPMIEVKK.mjs.map +0 -1
  36. /package/dist/{chunk-QK6XA3PL.mjs.map → chunk-H5CXJBR5.mjs.map} +0 -0
  37. /package/dist/{chunk-TEZWY2BL.mjs.map → chunk-M2NVAJQA.mjs.map} +0 -0
  38. /package/dist/{chunk-C5KOJ3IH.mjs.map → chunk-ORHE7FYT.mjs.map} +0 -0
  39. /package/dist/{chunk-OJ5NVSTU.mjs.map → chunk-PY7YBFPA.mjs.map} +0 -0
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  CopilotModal
3
- } from "../../chunk-QK6XA3PL.mjs";
3
+ } from "../../chunk-H5CXJBR5.mjs";
4
4
  import "../../chunk-YAGE7RCE.mjs";
5
5
  import "../../chunk-VEC45H6Q.mjs";
6
6
  import "../../chunk-RQNJNK2W.mjs";
7
- import "../../chunk-C5KOJ3IH.mjs";
7
+ import "../../chunk-ORHE7FYT.mjs";
8
8
  import "../../chunk-V7W6IM2V.mjs";
9
9
  import "../../chunk-OMTPWC7T.mjs";
10
10
  import "../../chunk-ZABXREBH.mjs";
@@ -17,7 +17,7 @@ import "../../chunk-OTPAZXVR.mjs";
17
17
  import "../../chunk-4LUMV4YO.mjs";
18
18
  import "../../chunk-YQFVRDNC.mjs";
19
19
  import "../../chunk-YQ3D5IQV.mjs";
20
- import "../../chunk-CPMIEVKK.mjs";
20
+ import "../../chunk-RKPANT3F.mjs";
21
21
  import "../../chunk-3XAXY2Z3.mjs";
22
22
  import "../../chunk-CBBFRI3Q.mjs";
23
23
  import "../../chunk-UPTB2MVO.mjs";
@@ -526,7 +526,7 @@ var Header = ({}) => {
526
526
  };
527
527
 
528
528
  // src/components/chat/Messages.tsx
529
- var import_react3 = __toESM(require("react"));
529
+ var import_react3 = require("react");
530
530
  var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
531
531
  var import_jsx_runtime6 = require("react/jsx-runtime");
532
532
  var Messages = ({
@@ -556,18 +556,8 @@ var Messages = ({
556
556
  }
557
557
  }
558
558
  }
559
- const messagesEndRef = import_react3.default.useRef(null);
560
- const scrollToBottom = () => {
561
- if (messagesEndRef.current) {
562
- messagesEndRef.current.scrollIntoView({
563
- behavior: "auto"
564
- });
565
- }
566
- };
567
- (0, import_react3.useEffect)(() => {
568
- scrollToBottom();
569
- }, [messages]);
570
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "copilotKitMessages", children: [
559
+ const { messagesEndRef, messagesContainerRef } = useScrollToBottom(messages);
560
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
571
561
  messages.map((message, index) => {
572
562
  const isCurrentMessage = index === messages.length - 1;
573
563
  if (message.isTextMessage()) {
@@ -636,6 +626,65 @@ function makeInitialMessages(initial) {
636
626
  })
637
627
  );
638
628
  }
629
+ function useScrollToBottom(messages) {
630
+ const messagesEndRef = (0, import_react3.useRef)(null);
631
+ const messagesContainerRef = (0, import_react3.useRef)(null);
632
+ const isProgrammaticScrollRef = (0, import_react3.useRef)(false);
633
+ const isUserScrollUpRef = (0, import_react3.useRef)(false);
634
+ const scrollToBottom = () => {
635
+ if (messagesEndRef.current) {
636
+ isProgrammaticScrollRef.current = true;
637
+ messagesEndRef.current.scrollIntoView({
638
+ behavior: "auto"
639
+ });
640
+ }
641
+ };
642
+ const handleScroll = () => {
643
+ if (isProgrammaticScrollRef.current) {
644
+ isProgrammaticScrollRef.current = false;
645
+ return;
646
+ }
647
+ if (messagesContainerRef.current) {
648
+ const { scrollTop, scrollHeight, clientHeight } = messagesContainerRef.current;
649
+ isUserScrollUpRef.current = scrollTop + clientHeight < scrollHeight;
650
+ }
651
+ };
652
+ (0, import_react3.useEffect)(() => {
653
+ const container = messagesContainerRef.current;
654
+ if (container) {
655
+ container.addEventListener("scroll", handleScroll);
656
+ }
657
+ return () => {
658
+ if (container) {
659
+ container.removeEventListener("scroll", handleScroll);
660
+ }
661
+ };
662
+ }, []);
663
+ (0, import_react3.useEffect)(() => {
664
+ const container = messagesContainerRef.current;
665
+ if (!container) {
666
+ return;
667
+ }
668
+ const mutationObserver = new MutationObserver(() => {
669
+ if (!isUserScrollUpRef.current) {
670
+ scrollToBottom();
671
+ }
672
+ });
673
+ mutationObserver.observe(container, {
674
+ childList: true,
675
+ subtree: true,
676
+ characterData: true
677
+ });
678
+ return () => {
679
+ mutationObserver.disconnect();
680
+ };
681
+ }, []);
682
+ (0, import_react3.useEffect)(() => {
683
+ isUserScrollUpRef.current = false;
684
+ scrollToBottom();
685
+ }, [messages.filter((m) => m.isTextMessage() && m.role === import_runtime_client_gql.Role.User).length]);
686
+ return { messagesEndRef, messagesContainerRef };
687
+ }
639
688
 
640
689
  // src/components/chat/Input.tsx
641
690
  var import_react6 = require("react");