@copilotkit/react-ui 1.3.7-fix-chat-interactions-rerenders.0 → 1.3.8-fix-memoize-chat-ui-context.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 (114) hide show
  1. package/CHANGELOG.md +15 -5
  2. package/dist/{chunk-LGS6B47Q.mjs → chunk-3KBQXU44.mjs} +10 -10
  3. package/dist/{chunk-XSUSSWDS.mjs → chunk-3XAXY2Z3.mjs} +2 -2
  4. package/dist/{chunk-FUCEBN2P.mjs → chunk-47OPG5FM.mjs} +9 -9
  5. package/dist/{chunk-CTPEKUNX.mjs → chunk-4FIGRRFS.mjs} +5 -7
  6. package/dist/chunk-4FIGRRFS.mjs.map +1 -0
  7. package/dist/{chunk-YH2STM73.mjs → chunk-6BL5C56L.mjs} +4 -4
  8. package/dist/chunk-6BL5C56L.mjs.map +1 -0
  9. package/dist/{chunk-GOTHQ665.mjs → chunk-6INMITFA.mjs} +3 -4
  10. package/dist/chunk-6INMITFA.mjs.map +1 -0
  11. package/dist/{chunk-BJPGMY3I.mjs → chunk-CBBFRI3Q.mjs} +19 -8
  12. package/dist/{chunk-BJPGMY3I.mjs.map → chunk-CBBFRI3Q.mjs.map} +1 -1
  13. package/dist/{chunk-GDNJRSD4.mjs → chunk-CPMIEVKK.mjs} +9 -11
  14. package/dist/chunk-CPMIEVKK.mjs.map +1 -0
  15. package/dist/{chunk-HBZPOT37.mjs → chunk-JTINVYPK.mjs} +3 -3
  16. package/dist/{chunk-CPWFYV3U.mjs → chunk-KCAVDFB6.mjs} +2 -2
  17. package/dist/{chunk-YOH25I6N.mjs → chunk-RQNJNK2W.mjs} +2 -2
  18. package/dist/{chunk-QI3OM75G.mjs → chunk-RS6UPR5N.mjs} +2 -2
  19. package/dist/{chunk-5DT3MDBZ.mjs → chunk-S5MBUNGN.mjs} +2 -3
  20. package/dist/{chunk-5DT3MDBZ.mjs.map → chunk-S5MBUNGN.mjs.map} +1 -1
  21. package/dist/{chunk-PJNNEX4L.mjs → chunk-SWADR6EH.mjs} +2 -2
  22. package/dist/{chunk-FLV3J3VX.mjs → chunk-VEC45H6Q.mjs} +2 -2
  23. package/dist/{chunk-MA5B5ELM.mjs → chunk-WYMTXCQU.mjs} +3 -4
  24. package/dist/chunk-WYMTXCQU.mjs.map +1 -0
  25. package/dist/{chunk-FO7Z5LAL.mjs → chunk-YAGE7RCE.mjs} +2 -2
  26. package/dist/{chunk-RF3KLUPD.mjs → chunk-ZABXREBH.mjs} +3 -4
  27. package/dist/chunk-ZABXREBH.mjs.map +1 -0
  28. package/dist/components/chat/Button.js.map +1 -1
  29. package/dist/components/chat/Button.mjs +2 -2
  30. package/dist/components/chat/Chat.js +39 -36
  31. package/dist/components/chat/Chat.js.map +1 -1
  32. package/dist/components/chat/Chat.mjs +12 -12
  33. package/dist/components/chat/ChatContext.js +17 -6
  34. package/dist/components/chat/ChatContext.js.map +1 -1
  35. package/dist/components/chat/ChatContext.mjs +1 -1
  36. package/dist/components/chat/Header.js.map +1 -1
  37. package/dist/components/chat/Header.mjs +2 -2
  38. package/dist/components/chat/Input.js +1 -2
  39. package/dist/components/chat/Input.js.map +1 -1
  40. package/dist/components/chat/Input.mjs +3 -3
  41. package/dist/components/chat/Messages.js +6 -6
  42. package/dist/components/chat/Messages.js.map +1 -1
  43. package/dist/components/chat/Messages.mjs +2 -2
  44. package/dist/components/chat/Modal.js +39 -36
  45. package/dist/components/chat/Modal.js.map +1 -1
  46. package/dist/components/chat/Modal.mjs +16 -16
  47. package/dist/components/chat/Popup.js +39 -36
  48. package/dist/components/chat/Popup.js.map +1 -1
  49. package/dist/components/chat/Popup.mjs +17 -17
  50. package/dist/components/chat/Response.js.map +1 -1
  51. package/dist/components/chat/Response.mjs +2 -2
  52. package/dist/components/chat/Sidebar.js +39 -36
  53. package/dist/components/chat/Sidebar.js.map +1 -1
  54. package/dist/components/chat/Sidebar.mjs +17 -17
  55. package/dist/components/chat/Window.js.map +1 -1
  56. package/dist/components/chat/Window.mjs +2 -2
  57. package/dist/components/chat/index.js +39 -36
  58. package/dist/components/chat/index.js.map +1 -1
  59. package/dist/components/chat/index.mjs +18 -18
  60. package/dist/components/chat/messages/RenderActionExecutionMessage.js +1 -1
  61. package/dist/components/chat/messages/RenderActionExecutionMessage.js.map +1 -1
  62. package/dist/components/chat/messages/RenderActionExecutionMessage.mjs +2 -2
  63. package/dist/components/chat/messages/RenderAgentStateMessage.js +1 -2
  64. package/dist/components/chat/messages/RenderAgentStateMessage.js.map +1 -1
  65. package/dist/components/chat/messages/RenderAgentStateMessage.mjs +2 -2
  66. package/dist/components/chat/messages/RenderResultMessage.js +1 -2
  67. package/dist/components/chat/messages/RenderResultMessage.js.map +1 -1
  68. package/dist/components/chat/messages/RenderResultMessage.mjs +2 -2
  69. package/dist/components/chat/messages/RenderTextMessage.js +1 -2
  70. package/dist/components/chat/messages/RenderTextMessage.js.map +1 -1
  71. package/dist/components/chat/messages/RenderTextMessage.mjs +2 -2
  72. package/dist/components/dev-console/console.js +4 -6
  73. package/dist/components/dev-console/console.js.map +1 -1
  74. package/dist/components/dev-console/console.mjs +2 -2
  75. package/dist/components/dev-console/index.js +4 -6
  76. package/dist/components/dev-console/index.js.map +1 -1
  77. package/dist/components/dev-console/index.mjs +2 -2
  78. package/dist/components/dev-console/utils.js +4 -6
  79. package/dist/components/dev-console/utils.js.map +1 -1
  80. package/dist/components/dev-console/utils.mjs +1 -1
  81. package/dist/components/index.js +39 -36
  82. package/dist/components/index.js.map +1 -1
  83. package/dist/components/index.mjs +18 -18
  84. package/dist/hooks/use-push-to-talk.js +1 -2
  85. package/dist/hooks/use-push-to-talk.js.map +1 -1
  86. package/dist/hooks/use-push-to-talk.mjs +1 -1
  87. package/dist/index.js +39 -36
  88. package/dist/index.js.map +1 -1
  89. package/dist/index.mjs +18 -18
  90. package/package.json +8 -8
  91. package/src/components/chat/ChatContext.tsx +21 -8
  92. package/src/components/chat/Messages.tsx +6 -6
  93. package/src/components/chat/messages/RenderActionExecutionMessage.tsx +1 -1
  94. package/src/components/chat/messages/RenderAgentStateMessage.tsx +1 -1
  95. package/src/components/chat/messages/RenderResultMessage.tsx +1 -1
  96. package/src/components/chat/messages/RenderTextMessage.tsx +1 -1
  97. package/src/components/dev-console/utils.ts +4 -4
  98. package/src/hooks/use-push-to-talk.tsx +1 -1
  99. package/dist/chunk-CTPEKUNX.mjs.map +0 -1
  100. package/dist/chunk-GDNJRSD4.mjs.map +0 -1
  101. package/dist/chunk-GOTHQ665.mjs.map +0 -1
  102. package/dist/chunk-MA5B5ELM.mjs.map +0 -1
  103. package/dist/chunk-RF3KLUPD.mjs.map +0 -1
  104. package/dist/chunk-YH2STM73.mjs.map +0 -1
  105. /package/dist/{chunk-LGS6B47Q.mjs.map → chunk-3KBQXU44.mjs.map} +0 -0
  106. /package/dist/{chunk-XSUSSWDS.mjs.map → chunk-3XAXY2Z3.mjs.map} +0 -0
  107. /package/dist/{chunk-FUCEBN2P.mjs.map → chunk-47OPG5FM.mjs.map} +0 -0
  108. /package/dist/{chunk-HBZPOT37.mjs.map → chunk-JTINVYPK.mjs.map} +0 -0
  109. /package/dist/{chunk-CPWFYV3U.mjs.map → chunk-KCAVDFB6.mjs.map} +0 -0
  110. /package/dist/{chunk-YOH25I6N.mjs.map → chunk-RQNJNK2W.mjs.map} +0 -0
  111. /package/dist/{chunk-QI3OM75G.mjs.map → chunk-RS6UPR5N.mjs.map} +0 -0
  112. /package/dist/{chunk-PJNNEX4L.mjs.map → chunk-SWADR6EH.mjs.map} +0 -0
  113. /package/dist/{chunk-FLV3J3VX.mjs.map → chunk-VEC45H6Q.mjs.map} +0 -0
  114. /package/dist/{chunk-FO7Z5LAL.mjs.map → chunk-YAGE7RCE.mjs.map} +0 -0
@@ -1,30 +1,30 @@
1
1
  import {
2
2
  CopilotSidebar
3
- } from "../../chunk-CPWFYV3U.mjs";
4
- import "../../chunk-FUCEBN2P.mjs";
5
- import "../../chunk-FO7Z5LAL.mjs";
6
- import "../../chunk-FLV3J3VX.mjs";
7
- import "../../chunk-YOH25I6N.mjs";
8
- import "../../chunk-LGS6B47Q.mjs";
3
+ } from "../../chunk-KCAVDFB6.mjs";
4
+ import "../../chunk-47OPG5FM.mjs";
5
+ import "../../chunk-YAGE7RCE.mjs";
6
+ import "../../chunk-VEC45H6Q.mjs";
7
+ import "../../chunk-RQNJNK2W.mjs";
8
+ import "../../chunk-3KBQXU44.mjs";
9
9
  import "../../chunk-V7W6IM2V.mjs";
10
- import "../../chunk-YH2STM73.mjs";
11
- import "../../chunk-RF3KLUPD.mjs";
12
- import "../../chunk-GOTHQ665.mjs";
13
- import "../../chunk-MA5B5ELM.mjs";
10
+ import "../../chunk-6BL5C56L.mjs";
11
+ import "../../chunk-ZABXREBH.mjs";
12
+ import "../../chunk-6INMITFA.mjs";
13
+ import "../../chunk-WYMTXCQU.mjs";
14
14
  import "../../chunk-KFQYJ5R5.mjs";
15
- import "../../chunk-QI3OM75G.mjs";
16
- import "../../chunk-CTPEKUNX.mjs";
15
+ import "../../chunk-RS6UPR5N.mjs";
16
+ import "../../chunk-4FIGRRFS.mjs";
17
17
  import "../../chunk-OTPAZXVR.mjs";
18
- import "../../chunk-HBZPOT37.mjs";
18
+ import "../../chunk-JTINVYPK.mjs";
19
19
  import "../../chunk-YQFVRDNC.mjs";
20
20
  import "../../chunk-YQ3D5IQV.mjs";
21
- import "../../chunk-GDNJRSD4.mjs";
22
- import "../../chunk-XSUSSWDS.mjs";
23
- import "../../chunk-BJPGMY3I.mjs";
21
+ import "../../chunk-CPMIEVKK.mjs";
22
+ import "../../chunk-3XAXY2Z3.mjs";
23
+ import "../../chunk-CBBFRI3Q.mjs";
24
24
  import "../../chunk-UPTB2MVO.mjs";
25
25
  import "../../chunk-FZC7X5PK.mjs";
26
26
  import "../../chunk-54JAUBUJ.mjs";
27
- import "../../chunk-5DT3MDBZ.mjs";
27
+ import "../../chunk-S5MBUNGN.mjs";
28
28
  import "../../chunk-MRXNTQOX.mjs";
29
29
  export {
30
30
  CopilotSidebar
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/chat/Window.tsx","../../../src/components/chat/ChatContext.tsx"],"sourcesContent":["import React, { useCallback, useEffect } from \"react\";\nimport { WindowProps } from \"./props\";\nimport { useChatContext } from \"./ChatContext\";\n\nexport const Window = ({\n children,\n clickOutsideToClose,\n shortcut,\n hitEscapeToClose,\n}: WindowProps) => {\n const windowRef = React.useRef<HTMLDivElement>(null);\n\n const { open, setOpen } = useChatContext();\n\n const handleClickOutside = useCallback(\n (event: MouseEvent) => {\n if (!clickOutsideToClose) {\n return;\n }\n\n const parentElement = windowRef.current?.parentElement;\n\n let className = \"\";\n if (event.target instanceof HTMLElement) {\n className = event.target.className;\n }\n\n if (\n open &&\n parentElement &&\n !parentElement.contains(event.target as any) &&\n // prevent closing the window when clicking on the debug menu\n !className.includes(\"copilotKitDebugMenu\")\n ) {\n setOpen(false);\n }\n },\n [clickOutsideToClose, open, setOpen],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n const target = event.target as HTMLElement;\n const isInput =\n target.tagName === \"INPUT\" ||\n target.tagName === \"SELECT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.isContentEditable;\n\n const isDescendantOfWrapper = windowRef.current?.contains(target);\n\n if (\n open &&\n event.key === \"Escape\" &&\n (!isInput || isDescendantOfWrapper) &&\n hitEscapeToClose\n ) {\n setOpen(false);\n } else if (\n event.key === shortcut &&\n ((isMacOS() && event.metaKey) || (!isMacOS() && event.ctrlKey)) &&\n (!isInput || isDescendantOfWrapper)\n ) {\n setOpen(!open);\n }\n },\n [hitEscapeToClose, shortcut, open, setOpen],\n );\n\n const adjustForMobile = useCallback(() => {\n const copilotKitWindow = windowRef.current;\n const vv = window.visualViewport;\n if (!copilotKitWindow || !vv) {\n return;\n }\n\n if (window.innerWidth < 640 && open) {\n copilotKitWindow.style.height = `${vv.height}px`;\n copilotKitWindow.style.left = `${vv.offsetLeft}px`;\n copilotKitWindow.style.top = `${vv.offsetTop}px`;\n\n document.body.style.position = \"fixed\";\n document.body.style.width = \"100%\";\n document.body.style.height = `${window.innerHeight}px`;\n document.body.style.overflow = \"hidden\";\n document.body.style.touchAction = \"none\";\n\n // Prevent scrolling on iOS\n document.body.addEventListener(\"touchmove\", preventScroll, {\n passive: false,\n });\n } else {\n copilotKitWindow.style.height = \"\";\n copilotKitWindow.style.left = \"\";\n copilotKitWindow.style.top = \"\";\n document.body.style.position = \"\";\n document.body.style.height = \"\";\n document.body.style.width = \"\";\n document.body.style.overflow = \"\";\n document.body.style.top = \"\";\n document.body.style.touchAction = \"\";\n\n document.body.removeEventListener(\"touchmove\", preventScroll);\n }\n }, [open]);\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleKeyDown);\n if (window.visualViewport) {\n window.visualViewport.addEventListener(\"resize\", adjustForMobile);\n adjustForMobile();\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleKeyDown);\n if (window.visualViewport) {\n window.visualViewport.removeEventListener(\"resize\", adjustForMobile);\n }\n };\n }, [adjustForMobile, handleClickOutside, handleKeyDown]);\n\n return (\n <div className={`copilotKitWindow${open ? \" open\" : \"\"}`} ref={windowRef}>\n {children}\n </div>\n );\n};\n\nconst preventScroll = (event: TouchEvent): void => {\n let targetElement = event.target as Element;\n\n // Function to check if the target has the parent with a given class\n const hasParentWithClass = (element: Element, className: string): boolean => {\n while (element && element !== document.body) {\n if (element.classList.contains(className)) {\n return true;\n }\n element = element.parentElement!;\n }\n return false;\n };\n\n // Check if the target of the touch event is inside an element with the 'copilotKitMessages' class\n if (!hasParentWithClass(targetElement, \"copilotKitMessages\")) {\n event.preventDefault();\n }\n};\n\nfunction isMacOS() {\n return /Mac|iMac|Macintosh/i.test(navigator.userAgent);\n}\n","import React, { useMemo, useState } from \"react\";\nimport * as DefaultIcons from \"./Icons\";\n\n/**\n * Icons for CopilotChat component.\n */\nexport interface CopilotChatIcons {\n /**\n * The icon to use for the open chat button.\n * @default <OpenIcon />\n */\n openIcon?: React.ReactNode;\n\n /**\n * The icon to use for the close chat button.\n * @default <CloseIcon />\n */\n closeIcon?: React.ReactNode;\n\n /**\n * The icon to use for the close chat button in the header.\n * @default <HeaderCloseIcon />\n */\n headerCloseIcon?: React.ReactNode;\n\n /**\n * The icon to use for the send button.\n * @default <SendIcon />\n */\n sendIcon?: React.ReactNode;\n\n /**\n * The icon to use for the activity indicator.\n * @default <ActivityIcon />\n */\n activityIcon?: React.ReactNode;\n\n /**\n * The icon to use for the spinner.\n * @default <SpinnerIcon />\n */\n spinnerIcon?: React.ReactNode;\n\n /**\n * The icon to use for the stop button.\n * @default <StopIcon />\n */\n stopIcon?: React.ReactNode;\n\n /**\n * The icon to use for the regenerate button.\n * @default <RegenerateIcon />\n */\n regenerateIcon?: React.ReactNode;\n\n /**\n * The icons to use for push to talk.\n * @default <PushToTalkIcon />\n */\n\n pushToTalkIcon?: React.ReactNode;\n}\n\n/**\n * Labels for CopilotChat component.\n */\nexport interface CopilotChatLabels {\n /**\n * The initial message(s) to display in the chat window.\n */\n initial?: string | string[];\n\n /**\n * The title to display in the header.\n * @default \"CopilotKit\"\n */\n title?: string;\n\n /**\n * The placeholder to display in the input.\n * @default \"Type a message...\"\n */\n placeholder?: string;\n\n /**\n * The message to display when an error occurs.\n * @default \"❌ An error occurred. Please try again.\"\n */\n error?: string;\n\n /**\n * The label to display on the stop button.\n * @default \"Stop generating\"\n */\n stopGenerating?: string;\n\n /**\n * The label to display on the regenerate button.\n * @default \"Regenerate response\"\n */\n regenerateResponse?: string;\n}\n\ninterface ChatContext {\n labels: Required<CopilotChatLabels>;\n icons: Required<CopilotChatIcons>;\n open: boolean;\n setOpen: (open: boolean) => void;\n}\n\nexport const ChatContext = React.createContext<ChatContext | undefined>(undefined);\n\nexport function useChatContext(): ChatContext {\n const context = React.useContext(ChatContext);\n if (context === undefined) {\n throw new Error(\n \"Context not found. Did you forget to wrap your app in a <ChatContextProvider> component?\",\n );\n }\n return context;\n}\n\ninterface ChatContextProps {\n // temperature?: number;\n // instructions?: string;\n // maxFeedback?: number;\n labels?: CopilotChatLabels;\n icons?: CopilotChatIcons;\n children?: React.ReactNode;\n open: boolean;\n setOpen: (open: boolean) => void;\n}\n\nexport const ChatContextProvider = ({\n // temperature,\n // instructions,\n // maxFeedback,\n labels,\n icons,\n children,\n open,\n setOpen,\n}: ChatContextProps) => {\n const context = {\n labels: {\n ...{\n initial: \"\",\n title: \"CopilotKit\",\n placeholder: \"Type a message...\",\n error: \"❌ An error occurred. Please try again.\",\n stopGenerating: \"Stop generating\",\n regenerateResponse: \"Regenerate response\",\n },\n ...labels,\n },\n\n icons: {\n ...{\n openIcon: DefaultIcons.OpenIcon,\n closeIcon: DefaultIcons.CloseIcon,\n headerCloseIcon: DefaultIcons.HeaderCloseIcon,\n sendIcon: DefaultIcons.SendIcon,\n activityIcon: DefaultIcons.ActivityIcon,\n spinnerIcon: DefaultIcons.SpinnerIcon,\n stopIcon: DefaultIcons.StopIcon,\n regenerateIcon: DefaultIcons.RegenerateIcon,\n pushToTalkIcon: DefaultIcons.PushToTalkIcon,\n },\n ...icons,\n },\n open,\n setOpen,\n };\n return <ChatContext.Provider value={context}>{children}</ChatContext.Provider>;\n};\n"],"mappings":"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","names":["import_react","React","import_jsx_runtime","React"]}
1
+ {"version":3,"sources":["../../../src/components/chat/Window.tsx","../../../src/components/chat/ChatContext.tsx"],"sourcesContent":["import React, { useCallback, useEffect } from \"react\";\nimport { WindowProps } from \"./props\";\nimport { useChatContext } from \"./ChatContext\";\n\nexport const Window = ({\n children,\n clickOutsideToClose,\n shortcut,\n hitEscapeToClose,\n}: WindowProps) => {\n const windowRef = React.useRef<HTMLDivElement>(null);\n\n const { open, setOpen } = useChatContext();\n\n const handleClickOutside = useCallback(\n (event: MouseEvent) => {\n if (!clickOutsideToClose) {\n return;\n }\n\n const parentElement = windowRef.current?.parentElement;\n\n let className = \"\";\n if (event.target instanceof HTMLElement) {\n className = event.target.className;\n }\n\n if (\n open &&\n parentElement &&\n !parentElement.contains(event.target as any) &&\n // prevent closing the window when clicking on the debug menu\n !className.includes(\"copilotKitDebugMenu\")\n ) {\n setOpen(false);\n }\n },\n [clickOutsideToClose, open, setOpen],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n const target = event.target as HTMLElement;\n const isInput =\n target.tagName === \"INPUT\" ||\n target.tagName === \"SELECT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.isContentEditable;\n\n const isDescendantOfWrapper = windowRef.current?.contains(target);\n\n if (\n open &&\n event.key === \"Escape\" &&\n (!isInput || isDescendantOfWrapper) &&\n hitEscapeToClose\n ) {\n setOpen(false);\n } else if (\n event.key === shortcut &&\n ((isMacOS() && event.metaKey) || (!isMacOS() && event.ctrlKey)) &&\n (!isInput || isDescendantOfWrapper)\n ) {\n setOpen(!open);\n }\n },\n [hitEscapeToClose, shortcut, open, setOpen],\n );\n\n const adjustForMobile = useCallback(() => {\n const copilotKitWindow = windowRef.current;\n const vv = window.visualViewport;\n if (!copilotKitWindow || !vv) {\n return;\n }\n\n if (window.innerWidth < 640 && open) {\n copilotKitWindow.style.height = `${vv.height}px`;\n copilotKitWindow.style.left = `${vv.offsetLeft}px`;\n copilotKitWindow.style.top = `${vv.offsetTop}px`;\n\n document.body.style.position = \"fixed\";\n document.body.style.width = \"100%\";\n document.body.style.height = `${window.innerHeight}px`;\n document.body.style.overflow = \"hidden\";\n document.body.style.touchAction = \"none\";\n\n // Prevent scrolling on iOS\n document.body.addEventListener(\"touchmove\", preventScroll, {\n passive: false,\n });\n } else {\n copilotKitWindow.style.height = \"\";\n copilotKitWindow.style.left = \"\";\n copilotKitWindow.style.top = \"\";\n document.body.style.position = \"\";\n document.body.style.height = \"\";\n document.body.style.width = \"\";\n document.body.style.overflow = \"\";\n document.body.style.top = \"\";\n document.body.style.touchAction = \"\";\n\n document.body.removeEventListener(\"touchmove\", preventScroll);\n }\n }, [open]);\n\n useEffect(() => {\n document.addEventListener(\"mousedown\", handleClickOutside);\n document.addEventListener(\"keydown\", handleKeyDown);\n if (window.visualViewport) {\n window.visualViewport.addEventListener(\"resize\", adjustForMobile);\n adjustForMobile();\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n document.removeEventListener(\"keydown\", handleKeyDown);\n if (window.visualViewport) {\n window.visualViewport.removeEventListener(\"resize\", adjustForMobile);\n }\n };\n }, [adjustForMobile, handleClickOutside, handleKeyDown]);\n\n return (\n <div className={`copilotKitWindow${open ? \" open\" : \"\"}`} ref={windowRef}>\n {children}\n </div>\n );\n};\n\nconst preventScroll = (event: TouchEvent): void => {\n let targetElement = event.target as Element;\n\n // Function to check if the target has the parent with a given class\n const hasParentWithClass = (element: Element, className: string): boolean => {\n while (element && element !== document.body) {\n if (element.classList.contains(className)) {\n return true;\n }\n element = element.parentElement!;\n }\n return false;\n };\n\n // Check if the target of the touch event is inside an element with the 'copilotKitMessages' class\n if (!hasParentWithClass(targetElement, \"copilotKitMessages\")) {\n event.preventDefault();\n }\n};\n\nfunction isMacOS() {\n return /Mac|iMac|Macintosh/i.test(navigator.userAgent);\n}\n","import React, { useMemo, useState } from \"react\";\nimport * as DefaultIcons from \"./Icons\";\n\n/**\n * Icons for CopilotChat component.\n */\nexport interface CopilotChatIcons {\n /**\n * The icon to use for the open chat button.\n * @default <OpenIcon />\n */\n openIcon?: React.ReactNode;\n\n /**\n * The icon to use for the close chat button.\n * @default <CloseIcon />\n */\n closeIcon?: React.ReactNode;\n\n /**\n * The icon to use for the close chat button in the header.\n * @default <HeaderCloseIcon />\n */\n headerCloseIcon?: React.ReactNode;\n\n /**\n * The icon to use for the send button.\n * @default <SendIcon />\n */\n sendIcon?: React.ReactNode;\n\n /**\n * The icon to use for the activity indicator.\n * @default <ActivityIcon />\n */\n activityIcon?: React.ReactNode;\n\n /**\n * The icon to use for the spinner.\n * @default <SpinnerIcon />\n */\n spinnerIcon?: React.ReactNode;\n\n /**\n * The icon to use for the stop button.\n * @default <StopIcon />\n */\n stopIcon?: React.ReactNode;\n\n /**\n * The icon to use for the regenerate button.\n * @default <RegenerateIcon />\n */\n regenerateIcon?: React.ReactNode;\n\n /**\n * The icons to use for push to talk.\n * @default <PushToTalkIcon />\n */\n\n pushToTalkIcon?: React.ReactNode;\n}\n\n/**\n * Labels for CopilotChat component.\n */\nexport interface CopilotChatLabels {\n /**\n * The initial message(s) to display in the chat window.\n */\n initial?: string | string[];\n\n /**\n * The title to display in the header.\n * @default \"CopilotKit\"\n */\n title?: string;\n\n /**\n * The placeholder to display in the input.\n * @default \"Type a message...\"\n */\n placeholder?: string;\n\n /**\n * The message to display when an error occurs.\n * @default \"❌ An error occurred. Please try again.\"\n */\n error?: string;\n\n /**\n * The label to display on the stop button.\n * @default \"Stop generating\"\n */\n stopGenerating?: string;\n\n /**\n * The label to display on the regenerate button.\n * @default \"Regenerate response\"\n */\n regenerateResponse?: string;\n}\n\ninterface ChatContext {\n labels: Required<CopilotChatLabels>;\n icons: Required<CopilotChatIcons>;\n open: boolean;\n setOpen: (open: boolean) => void;\n}\n\nexport const ChatContext = React.createContext<ChatContext | undefined>(undefined);\n\nexport function useChatContext(): ChatContext {\n const context = React.useContext(ChatContext);\n if (context === undefined) {\n throw new Error(\n \"Context not found. Did you forget to wrap your app in a <ChatContextProvider> component?\",\n );\n }\n return context;\n}\n\ninterface ChatContextProps {\n // temperature?: number;\n // instructions?: string;\n // maxFeedback?: number;\n labels?: CopilotChatLabels;\n icons?: CopilotChatIcons;\n children?: React.ReactNode;\n open: boolean;\n setOpen: (open: boolean) => void;\n}\n\nexport const ChatContextProvider = ({\n // temperature,\n // instructions,\n // maxFeedback,\n labels,\n icons,\n children,\n open,\n setOpen,\n}: ChatContextProps) => {\n const memoizedLabels = useMemo(\n () => ({\n ...{\n initial: \"\",\n title: \"CopilotKit\",\n placeholder: \"Type a message...\",\n error: \"❌ An error occurred. Please try again.\",\n stopGenerating: \"Stop generating\",\n regenerateResponse: \"Regenerate response\",\n },\n ...labels,\n }),\n [labels],\n );\n\n const memoizedIcons = useMemo(\n () => ({\n ...{\n openIcon: DefaultIcons.OpenIcon,\n closeIcon: DefaultIcons.CloseIcon,\n headerCloseIcon: DefaultIcons.HeaderCloseIcon,\n sendIcon: DefaultIcons.SendIcon,\n activityIcon: DefaultIcons.ActivityIcon,\n spinnerIcon: DefaultIcons.SpinnerIcon,\n stopIcon: DefaultIcons.StopIcon,\n regenerateIcon: DefaultIcons.RegenerateIcon,\n pushToTalkIcon: DefaultIcons.PushToTalkIcon,\n },\n ...icons,\n }),\n [icons],\n );\n\n const context = useMemo(\n () => ({\n labels: memoizedLabels,\n icons: memoizedIcons,\n open,\n setOpen,\n }),\n [memoizedLabels, memoizedIcons, open, setOpen],\n );\n\n return <ChatContext.Provider value={context}>{children}</ChatContext.Provider>;\n};\n"],"mappings":"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","names":["import_react","React","import_jsx_runtime","React"]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Window
3
- } from "../../chunk-FO7Z5LAL.mjs";
4
- import "../../chunk-BJPGMY3I.mjs";
3
+ } from "../../chunk-YAGE7RCE.mjs";
4
+ import "../../chunk-CBBFRI3Q.mjs";
5
5
  import "../../chunk-FZC7X5PK.mjs";
6
6
  import "../../chunk-MRXNTQOX.mjs";
7
7
  export {
@@ -354,8 +354,8 @@ var ChatContextProvider = ({
354
354
  open,
355
355
  setOpen
356
356
  }) => {
357
- const context = {
358
- labels: __spreadValues(__spreadValues({}, {
357
+ const memoizedLabels = (0, import_react.useMemo)(
358
+ () => __spreadValues(__spreadValues({}, {
359
359
  initial: "",
360
360
  title: "CopilotKit",
361
361
  placeholder: "Type a message...",
@@ -363,7 +363,10 @@ var ChatContextProvider = ({
363
363
  stopGenerating: "Stop generating",
364
364
  regenerateResponse: "Regenerate response"
365
365
  }), labels),
366
- icons: __spreadValues(__spreadValues({}, {
366
+ [labels]
367
+ );
368
+ const memoizedIcons = (0, import_react.useMemo)(
369
+ () => __spreadValues(__spreadValues({}, {
367
370
  openIcon: OpenIcon,
368
371
  closeIcon: CloseIcon,
369
372
  headerCloseIcon: HeaderCloseIcon,
@@ -374,9 +377,17 @@ var ChatContextProvider = ({
374
377
  regenerateIcon: RegenerateIcon,
375
378
  pushToTalkIcon: PushToTalkIcon
376
379
  }), icons),
377
- open,
378
- setOpen
379
- };
380
+ [icons]
381
+ );
382
+ const context = (0, import_react.useMemo)(
383
+ () => ({
384
+ labels: memoizedLabels,
385
+ icons: memoizedIcons,
386
+ open,
387
+ setOpen
388
+ }),
389
+ [memoizedLabels, memoizedIcons, open, setOpen]
390
+ );
380
391
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ChatContext.Provider, { value: context, children });
381
392
  };
382
393
 
@@ -538,10 +549,10 @@ var Messages = ({
538
549
  messages = [...initialMessages, ...messages];
539
550
  const actionResults = {};
540
551
  for (let i = 0; i < messages.length; i++) {
541
- if (messages[i] instanceof import_runtime_client_gql.ActionExecutionMessage) {
552
+ if (messages[i].isActionExecutionMessage()) {
542
553
  const id = messages[i].id;
543
554
  const resultMessage = messages.find(
544
- (message) => message instanceof import_runtime_client_gql.ResultMessage && message.actionExecutionId === id
555
+ (message) => message.isResultMessage() && message.actionExecutionId === id
545
556
  );
546
557
  if (resultMessage) {
547
558
  actionResults[id] = import_runtime_client_gql.ResultMessage.decodeResult(resultMessage.result || "");
@@ -562,7 +573,7 @@ var Messages = ({
562
573
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "copilotKitMessages", children: [
563
574
  messages.map((message, index) => {
564
575
  const isCurrentMessage = index === messages.length - 1;
565
- if (message instanceof import_runtime_client_gql.TextMessage) {
576
+ if (message.isTextMessage()) {
566
577
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
567
578
  RenderTextMessage2,
568
579
  {
@@ -573,7 +584,7 @@ var Messages = ({
573
584
  },
574
585
  index
575
586
  );
576
- } else if (message instanceof import_runtime_client_gql.ActionExecutionMessage) {
587
+ } else if (message.isActionExecutionMessage()) {
577
588
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
578
589
  RenderActionExecutionMessage2,
579
590
  {
@@ -585,7 +596,7 @@ var Messages = ({
585
596
  },
586
597
  index
587
598
  );
588
- } else if (message instanceof import_runtime_client_gql.AgentStateMessage) {
599
+ } else if (message.isAgentStateMessage()) {
589
600
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
590
601
  RenderAgentStateMessage2,
591
602
  {
@@ -596,7 +607,7 @@ var Messages = ({
596
607
  },
597
608
  index
598
609
  );
599
- } else if (message instanceof import_runtime_client_gql.ResultMessage) {
610
+ } else if (message.isResultMessage()) {
600
611
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
601
612
  RenderResultMessage2,
602
613
  {
@@ -683,7 +694,6 @@ var Textarea_default = AutoResizingTextarea;
683
694
 
684
695
  // src/hooks/use-push-to-talk.tsx
685
696
  var import_react_core = require("@copilotkit/react-core");
686
- var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
687
697
  var import_react5 = require("react");
688
698
  var startRecording = (mediaStreamRef, mediaRecorderRef, audioContextRef, recordedChunks, onStop) => __async(void 0, null, function* () {
689
699
  if (!mediaStreamRef.current || !audioContextRef.current) {
@@ -776,7 +786,7 @@ var usePushToTalk = ({
776
786
  (message) => message.id === startReadingFromMessageId
777
787
  );
778
788
  const messagesAfterLast = context.messages.slice(lastMessageIndex + 1).filter(
779
- (message) => message instanceof import_runtime_client_gql2.TextMessage && message.role === "assistant"
789
+ (message) => message.isTextMessage() && message.role === "assistant"
780
790
  );
781
791
  const text = messagesAfterLast.map((message) => message.content).join("\n");
782
792
  playAudioResponse(text, context.copilotApiConfig.textToSpeechUrl, audioContextRef.current);
@@ -864,9 +874,6 @@ var ResponseButton = ({ onClick, inProgress }) => {
864
874
  ] });
865
875
  };
866
876
 
867
- // src/components/chat/messages/RenderTextMessage.tsx
868
- var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
869
-
870
877
  // src/components/chat/Markdown.tsx
871
878
  var import_react8 = require("react");
872
879
  var import_react_markdown = __toESM(require("react-markdown"));
@@ -1340,7 +1347,7 @@ var import_jsx_runtime12 = require("react/jsx-runtime");
1340
1347
  function RenderTextMessage(props) {
1341
1348
  const { message, inProgress, index, isCurrentMessage } = props;
1342
1349
  const { icons } = useChatContext();
1343
- if (message instanceof import_runtime_client_gql3.TextMessage) {
1350
+ if (message.isTextMessage()) {
1344
1351
  if (message.role === "user") {
1345
1352
  return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: message.content }, index);
1346
1353
  } else if (message.role == "assistant") {
@@ -1350,14 +1357,14 @@ function RenderTextMessage(props) {
1350
1357
  }
1351
1358
 
1352
1359
  // src/components/chat/messages/RenderActionExecutionMessage.tsx
1353
- var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
1360
+ var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
1354
1361
  var import_react_core3 = require("@copilotkit/react-core");
1355
1362
  var import_jsx_runtime13 = require("react/jsx-runtime");
1356
1363
  function RenderActionExecutionMessage(props) {
1357
1364
  const { message, inProgress, index, isCurrentMessage, actionResult } = props;
1358
1365
  const { chatComponentsCache } = (0, import_react_core3.useCopilotContext)();
1359
1366
  const { icons } = useChatContext();
1360
- if (message instanceof import_runtime_client_gql4.ActionExecutionMessage) {
1367
+ if (message.isActionExecutionMessage()) {
1361
1368
  if (chatComponentsCache.current !== null && chatComponentsCache.current.actions[message.name]) {
1362
1369
  const render = chatComponentsCache.current.actions[message.name];
1363
1370
  if (typeof render === "string") {
@@ -1375,7 +1382,7 @@ function RenderActionExecutionMessage(props) {
1375
1382
  let status = "inProgress";
1376
1383
  if (actionResult !== void 0) {
1377
1384
  status = "complete";
1378
- } else if (message.status.code !== import_runtime_client_gql4.MessageStatusCode.Pending) {
1385
+ } else if (message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending) {
1379
1386
  status = "executing";
1380
1387
  }
1381
1388
  try {
@@ -1418,25 +1425,23 @@ function RenderActionExecutionMessage(props) {
1418
1425
  }
1419
1426
 
1420
1427
  // src/components/chat/messages/RenderResultMessage.tsx
1421
- var import_runtime_client_gql5 = require("@copilotkit/runtime-client-gql");
1422
1428
  var import_jsx_runtime14 = require("react/jsx-runtime");
1423
1429
  function RenderResultMessage(props) {
1424
1430
  const { message, inProgress, index, isCurrentMessage } = props;
1425
1431
  const { icons } = useChatContext();
1426
- if (message instanceof import_runtime_client_gql5.ResultMessage && inProgress && isCurrentMessage) {
1432
+ if (message.isResultMessage() && inProgress && isCurrentMessage) {
1427
1433
  return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: icons.spinnerIcon }, index);
1428
1434
  }
1429
1435
  }
1430
1436
 
1431
1437
  // src/components/chat/messages/RenderAgentStateMessage.tsx
1432
- var import_runtime_client_gql6 = require("@copilotkit/runtime-client-gql");
1433
1438
  var import_react_core4 = require("@copilotkit/react-core");
1434
1439
  var import_jsx_runtime15 = require("react/jsx-runtime");
1435
1440
  function RenderAgentStateMessage(props) {
1436
1441
  const { message, inProgress, index, isCurrentMessage } = props;
1437
1442
  const { chatComponentsCache } = (0, import_react_core4.useCopilotContext)();
1438
1443
  const { icons } = useChatContext();
1439
- if (message instanceof import_runtime_client_gql6.AgentStateMessage) {
1444
+ if (message.isAgentStateMessage()) {
1440
1445
  let render;
1441
1446
  if (chatComponentsCache.current !== null) {
1442
1447
  render = chatComponentsCache.current.coAgentStateRenders[`${message.agentName}-${message.nodeName}`] || chatComponentsCache.current.coAgentStateRenders[`${message.agentName}-global`];
@@ -1489,7 +1494,7 @@ function RenderAgentStateMessage(props) {
1489
1494
  // src/components/chat/Suggestion.tsx
1490
1495
  var import_react_core5 = require("@copilotkit/react-core");
1491
1496
  var import_shared = require("@copilotkit/shared");
1492
- var import_runtime_client_gql7 = require("@copilotkit/runtime-client-gql");
1497
+ var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
1493
1498
  var import_jsx_runtime16 = require("react/jsx-runtime");
1494
1499
  function Suggestion({ title, message, onClick, partial, className }) {
1495
1500
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
@@ -1525,7 +1530,7 @@ var reloadSuggestions = (context, chatSuggestionConfiguration, setCurrentSuggest
1525
1530
  context,
1526
1531
  instructions: "Suggest what the user could say next. Provide clear, highly relevant suggestions. Do not literally suggest function calls. " + config.instructions + "\n\n" + numOfSuggestionsInstructions,
1527
1532
  data: "Available tools: " + tools + "\n\n",
1528
- requestType: import_runtime_client_gql7.CopilotRequestType.Task,
1533
+ requestType: import_runtime_client_gql3.CopilotRequestType.Task,
1529
1534
  parameters: [
1530
1535
  {
1531
1536
  name: "suggestions",
@@ -1581,13 +1586,11 @@ var reloadSuggestions = (context, chatSuggestionConfiguration, setCurrentSuggest
1581
1586
  // src/components/chat/Chat.tsx
1582
1587
  var import_react11 = __toESM(require("react"));
1583
1588
  var import_react_core8 = require("@copilotkit/react-core");
1584
- var import_runtime_client_gql10 = require("@copilotkit/runtime-client-gql");
1589
+ var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
1585
1590
  var import_shared3 = require("@copilotkit/shared");
1586
1591
 
1587
1592
  // src/components/dev-console/utils.ts
1588
1593
  var import_react_core6 = require("@copilotkit/react-core");
1589
- var import_runtime_client_gql8 = require("@copilotkit/runtime-client-gql");
1590
- var import_runtime_client_gql9 = require("@copilotkit/runtime-client-gql");
1591
1594
  function shouldShowDevConsole(showDevConsole) {
1592
1595
  if (typeof showDevConsole === "boolean") {
1593
1596
  return showDevConsole;
@@ -1677,7 +1680,7 @@ function logMessages(context) {
1677
1680
  return;
1678
1681
  }
1679
1682
  const tableData = context.messages.map((message) => {
1680
- if (message instanceof import_runtime_client_gql8.TextMessage) {
1683
+ if (message.isTextMessage()) {
1681
1684
  return {
1682
1685
  id: message.id,
1683
1686
  type: "TextMessage",
@@ -1686,7 +1689,7 @@ function logMessages(context) {
1686
1689
  scope: void 0,
1687
1690
  content: message.content
1688
1691
  };
1689
- } else if (message instanceof import_runtime_client_gql8.ActionExecutionMessage) {
1692
+ } else if (message.isActionExecutionMessage()) {
1690
1693
  return {
1691
1694
  id: message.id,
1692
1695
  type: "ActionExecutionMessage",
@@ -1695,7 +1698,7 @@ function logMessages(context) {
1695
1698
  scope: message.scope,
1696
1699
  content: message.arguments
1697
1700
  };
1698
- } else if (message instanceof import_runtime_client_gql8.ResultMessage) {
1701
+ } else if (message.isResultMessage()) {
1699
1702
  return {
1700
1703
  id: message.id,
1701
1704
  type: "ResultMessage",
@@ -1704,7 +1707,7 @@ function logMessages(context) {
1704
1707
  scope: message.actionExecutionId,
1705
1708
  content: message.result
1706
1709
  };
1707
- } else if (message instanceof import_runtime_client_gql9.AgentStateMessage) {
1710
+ } else if (message.isAgentStateMessage()) {
1708
1711
  return {
1709
1712
  id: message.id,
1710
1713
  type: `AgentStateMessage (running: ${message.running})`,
@@ -2135,9 +2138,9 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage) =>
2135
2138
  const sendMessage = (messageContent) => __async(void 0, null, function* () {
2136
2139
  abortSuggestions();
2137
2140
  setCurrentSuggestions([]);
2138
- const message = new import_runtime_client_gql10.TextMessage({
2141
+ const message = new import_runtime_client_gql4.TextMessage({
2139
2142
  content: messageContent,
2140
- role: import_runtime_client_gql10.Role.User
2143
+ role: import_runtime_client_gql4.Role.User
2141
2144
  });
2142
2145
  if (onSubmitMessage) {
2143
2146
  try {