@copilotkit/react-ui 1.3.2-pre.0 → 1.3.3-pre.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 (84) hide show
  1. package/CHANGELOG.md +27 -5
  2. package/dist/{chunk-PGJGIYRW.mjs → chunk-3YESXHJH.mjs} +3 -3
  3. package/dist/{chunk-I454U2HM.mjs → chunk-BTOVRBBW.mjs} +52 -25
  4. package/dist/chunk-BTOVRBBW.mjs.map +1 -0
  5. package/dist/chunk-GDNJRSD4.mjs +126 -0
  6. package/dist/chunk-GDNJRSD4.mjs.map +1 -0
  7. package/dist/{chunk-N6GQ4WV4.mjs → chunk-GHMYWL42.mjs} +2 -2
  8. package/dist/{chunk-N6GQ4WV4.mjs.map → chunk-GHMYWL42.mjs.map} +1 -1
  9. package/dist/chunk-GOTHQ665.mjs +19 -0
  10. package/dist/chunk-GOTHQ665.mjs.map +1 -0
  11. package/dist/chunk-MA5B5ELM.mjs +26 -0
  12. package/dist/chunk-MA5B5ELM.mjs.map +1 -0
  13. package/dist/chunk-U42OB2S3.mjs +61 -0
  14. package/dist/chunk-U42OB2S3.mjs.map +1 -0
  15. package/dist/{chunk-KJQVEUVB.mjs → chunk-UUHCZZZV.mjs} +2 -2
  16. package/dist/chunk-UUHCZZZV.mjs.map +1 -0
  17. package/dist/chunk-YH2STM73.mjs +76 -0
  18. package/dist/chunk-YH2STM73.mjs.map +1 -0
  19. package/dist/components/chat/Chat.d.ts +18 -2
  20. package/dist/components/chat/Chat.js +664 -556
  21. package/dist/components/chat/Chat.js.map +1 -1
  22. package/dist/components/chat/Chat.mjs +6 -2
  23. package/dist/components/chat/Messages.d.ts +1 -1
  24. package/dist/components/chat/Messages.js +61 -662
  25. package/dist/components/chat/Messages.js.map +1 -1
  26. package/dist/components/chat/Messages.mjs +1 -4
  27. package/dist/components/chat/Modal.js +669 -561
  28. package/dist/components/chat/Modal.js.map +1 -1
  29. package/dist/components/chat/Modal.mjs +7 -3
  30. package/dist/components/chat/Popup.js +669 -561
  31. package/dist/components/chat/Popup.js.map +1 -1
  32. package/dist/components/chat/Popup.mjs +8 -4
  33. package/dist/components/chat/Sidebar.js +669 -561
  34. package/dist/components/chat/Sidebar.js.map +1 -1
  35. package/dist/components/chat/Sidebar.mjs +8 -4
  36. package/dist/components/chat/index.d.ts +1 -1
  37. package/dist/components/chat/index.js +669 -561
  38. package/dist/components/chat/index.js.map +1 -1
  39. package/dist/components/chat/index.mjs +9 -5
  40. package/dist/components/chat/messages/RenderActionExecutionMessage.d.ts +7 -0
  41. package/dist/components/chat/messages/RenderActionExecutionMessage.js +122 -0
  42. package/dist/components/chat/messages/RenderActionExecutionMessage.js.map +1 -0
  43. package/dist/components/chat/messages/RenderActionExecutionMessage.mjs +10 -0
  44. package/dist/components/chat/messages/RenderActionExecutionMessage.mjs.map +1 -0
  45. package/dist/components/chat/messages/RenderAgentStateMessage.d.ts +7 -0
  46. package/dist/components/chat/messages/RenderAgentStateMessage.js +107 -0
  47. package/dist/components/chat/messages/RenderAgentStateMessage.js.map +1 -0
  48. package/dist/components/chat/messages/RenderAgentStateMessage.mjs +10 -0
  49. package/dist/components/chat/messages/RenderAgentStateMessage.mjs.map +1 -0
  50. package/dist/components/chat/messages/RenderResultMessage.d.ts +7 -0
  51. package/dist/components/chat/messages/RenderResultMessage.js +65 -0
  52. package/dist/components/chat/messages/RenderResultMessage.js.map +1 -0
  53. package/dist/components/chat/messages/RenderResultMessage.mjs +10 -0
  54. package/dist/components/chat/messages/RenderResultMessage.mjs.map +1 -0
  55. package/dist/components/chat/messages/RenderTextMessage.d.ts +7 -0
  56. package/dist/components/chat/messages/RenderTextMessage.js +614 -0
  57. package/dist/components/chat/messages/RenderTextMessage.js.map +1 -0
  58. package/dist/components/chat/messages/RenderTextMessage.mjs +13 -0
  59. package/dist/components/chat/messages/RenderTextMessage.mjs.map +1 -0
  60. package/dist/components/chat/props.d.ts +12 -1
  61. package/dist/components/chat/props.js.map +1 -1
  62. package/dist/components/index.d.ts +1 -1
  63. package/dist/components/index.js +669 -561
  64. package/dist/components/index.js.map +1 -1
  65. package/dist/components/index.mjs +9 -5
  66. package/dist/index.d.ts +1 -1
  67. package/dist/index.js +677 -569
  68. package/dist/index.js.map +1 -1
  69. package/dist/index.mjs +9 -5
  70. package/package.json +7 -7
  71. package/src/components/chat/Chat.tsx +39 -4
  72. package/src/components/chat/Messages.tsx +45 -175
  73. package/src/components/chat/Popup.tsx +2 -2
  74. package/src/components/chat/Sidebar.tsx +2 -2
  75. package/src/components/chat/messages/RenderActionExecutionMessage.tsx +90 -0
  76. package/src/components/chat/messages/RenderAgentStateMessage.tsx +81 -0
  77. package/src/components/chat/messages/RenderResultMessage.tsx +15 -0
  78. package/src/components/chat/messages/RenderTextMessage.tsx +28 -0
  79. package/src/components/chat/props.ts +12 -0
  80. package/dist/chunk-4K36ATCD.mjs +0 -184
  81. package/dist/chunk-4K36ATCD.mjs.map +0 -1
  82. package/dist/chunk-I454U2HM.mjs.map +0 -1
  83. package/dist/chunk-KJQVEUVB.mjs.map +0 -1
  84. /package/dist/{chunk-PGJGIYRW.mjs.map → chunk-3YESXHJH.mjs.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,14 +1,36 @@
1
1
  # ui
2
2
 
3
- ## 1.3.2-pre.0
3
+ ## 1.3.3-pre.0
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - pre
7
+ - Pre-release
8
8
  - Updated dependencies
9
- - @copilotkit/react-core@1.3.2-pre.0
10
- - @copilotkit/runtime-client-gql@1.3.2-pre.0
11
- - @copilotkit/shared@1.3.2-pre.0
9
+ - @copilotkit/react-core@1.3.3-pre.0
10
+ - @copilotkit/runtime-client-gql@1.3.3-pre.0
11
+ - @copilotkit/shared@1.3.3-pre.0
12
+
13
+ ## 1.3.2
14
+
15
+ ### Patch Changes
16
+
17
+ - Features and bug fixes
18
+ - 30232c0: Ensure actions can be discovered on state change
19
+ - Updated dependencies
20
+ - Updated dependencies [30232c0]
21
+ - @copilotkit/react-core@1.3.2
22
+ - @copilotkit/runtime-client-gql@1.3.2
23
+ - @copilotkit/shared@1.3.2
24
+
25
+ ## 1.3.2-mme-discover-actions.0
26
+
27
+ ### Patch Changes
28
+
29
+ - Ensure actions can be discovered on state change
30
+ - Updated dependencies
31
+ - @copilotkit/react-core@1.3.2-mme-discover-actions.0
32
+ - @copilotkit/runtime-client-gql@1.3.2-mme-discover-actions.0
33
+ - @copilotkit/shared@1.3.2-mme-discover-actions.0
12
34
 
13
35
  ## 1.3.1
14
36
 
@@ -9,13 +9,13 @@ import {
9
9
  } from "./chunk-YOH25I6N.mjs";
10
10
  import {
11
11
  CopilotChat
12
- } from "./chunk-I454U2HM.mjs";
12
+ } from "./chunk-BTOVRBBW.mjs";
13
13
  import {
14
14
  Input
15
15
  } from "./chunk-U6J5DGOE.mjs";
16
16
  import {
17
17
  Messages
18
- } from "./chunk-4K36ATCD.mjs";
18
+ } from "./chunk-GDNJRSD4.mjs";
19
19
  import {
20
20
  ResponseButton
21
21
  } from "./chunk-XSUSSWDS.mjs";
@@ -88,4 +88,4 @@ var CopilotModal = ({
88
88
  export {
89
89
  CopilotModal
90
90
  };
91
- //# sourceMappingURL=chunk-PGJGIYRW.mjs.map
91
+ //# sourceMappingURL=chunk-3YESXHJH.mjs.map
@@ -1,3 +1,15 @@
1
+ import {
2
+ RenderActionExecutionMessage
3
+ } from "./chunk-YH2STM73.mjs";
4
+ import {
5
+ RenderAgentStateMessage
6
+ } from "./chunk-U42OB2S3.mjs";
7
+ import {
8
+ RenderResultMessage
9
+ } from "./chunk-GOTHQ665.mjs";
10
+ import {
11
+ RenderTextMessage
12
+ } from "./chunk-MA5B5ELM.mjs";
1
13
  import {
2
14
  Suggestion,
3
15
  reloadSuggestions
@@ -10,7 +22,7 @@ import {
10
22
  } from "./chunk-U6J5DGOE.mjs";
11
23
  import {
12
24
  Messages
13
- } from "./chunk-4K36ATCD.mjs";
25
+ } from "./chunk-GDNJRSD4.mjs";
14
26
  import {
15
27
  ResponseButton
16
28
  } from "./chunk-XSUSSWDS.mjs";
@@ -35,6 +47,10 @@ function CopilotChat({
35
47
  showResponseButton = true,
36
48
  onInProgress,
37
49
  Messages: Messages2 = Messages,
50
+ RenderTextMessage: RenderTextMessage2 = RenderTextMessage,
51
+ RenderActionExecutionMessage: RenderActionExecutionMessage2 = RenderActionExecutionMessage,
52
+ RenderAgentStateMessage: RenderAgentStateMessage2 = RenderAgentStateMessage,
53
+ RenderResultMessage: RenderResultMessage2 = RenderResultMessage,
38
54
  Input: Input2 = Input,
39
55
  ResponseButton: ResponseButton2 = ResponseButton,
40
56
  className,
@@ -57,29 +73,40 @@ function CopilotChat({
57
73
  const isVisible = chatContext ? chatContext.open : true;
58
74
  return /* @__PURE__ */ jsxs(WrappedCopilotChat, { icons, labels, className, children: [
59
75
  /* @__PURE__ */ jsx(CopilotDevConsole, {}),
60
- /* @__PURE__ */ jsxs(Messages2, { messages: visibleMessages, inProgress: isLoading, children: [
61
- currentSuggestions.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
62
- /* @__PURE__ */ jsx("h6", { children: "Suggested:" }),
63
- /* @__PURE__ */ jsx("div", { className: "suggestions", children: currentSuggestions.map((suggestion, index) => /* @__PURE__ */ jsx(
64
- Suggestion,
65
- {
66
- title: suggestion.title,
67
- message: suggestion.message,
68
- partial: suggestion.partial,
69
- className: suggestion.className,
70
- onClick: (message) => sendMessage(message)
71
- },
72
- index
73
- )) })
74
- ] }),
75
- showResponseButton && visibleMessages.length > 0 && /* @__PURE__ */ jsx(
76
- ResponseButton2,
77
- {
78
- onClick: isLoading ? stopGeneration : reloadMessages,
79
- inProgress: isLoading
80
- }
81
- )
82
- ] }),
76
+ /* @__PURE__ */ jsxs(
77
+ Messages2,
78
+ {
79
+ RenderTextMessage: RenderTextMessage2,
80
+ RenderActionExecutionMessage: RenderActionExecutionMessage2,
81
+ RenderAgentStateMessage: RenderAgentStateMessage2,
82
+ RenderResultMessage: RenderResultMessage2,
83
+ messages: visibleMessages,
84
+ inProgress: isLoading,
85
+ children: [
86
+ currentSuggestions.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
87
+ /* @__PURE__ */ jsx("h6", { children: "Suggested:" }),
88
+ /* @__PURE__ */ jsx("div", { className: "suggestions", children: currentSuggestions.map((suggestion, index) => /* @__PURE__ */ jsx(
89
+ Suggestion,
90
+ {
91
+ title: suggestion.title,
92
+ message: suggestion.message,
93
+ partial: suggestion.partial,
94
+ className: suggestion.className,
95
+ onClick: (message) => sendMessage(message)
96
+ },
97
+ index
98
+ )) })
99
+ ] }),
100
+ showResponseButton && visibleMessages.length > 0 && /* @__PURE__ */ jsx(
101
+ ResponseButton2,
102
+ {
103
+ onClick: isLoading ? stopGeneration : reloadMessages,
104
+ inProgress: isLoading
105
+ }
106
+ )
107
+ ]
108
+ }
109
+ ),
83
110
  /* @__PURE__ */ jsx(Input2, { inProgress: isLoading, onSend: sendMessage, isVisible })
84
111
  ] });
85
112
  }
@@ -164,4 +191,4 @@ export {
164
191
  WrappedCopilotChat,
165
192
  useCopilotChatLogic
166
193
  };
167
- //# sourceMappingURL=chunk-I454U2HM.mjs.map
194
+ //# sourceMappingURL=chunk-BTOVRBBW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/Chat.tsx"],"sourcesContent":["/**\n * <br/>\n * <img src=\"/images/CopilotChat.gif\" width=\"500\" />\n *\n * A chatbot panel component for the CopilotKit framework. The component allows for a high degree\n * of customization through various props and custom CSS.\n *\n * ## Install Dependencies\n *\n * This component is part of the [@copilotkit/react-ui](https://npmjs.com/package/@copilotkit/react-ui) package.\n *\n * ```shell npm2yarn \\\"@copilotkit/react-ui\"\\\n * npm install @copilotkit/react-core @copilotkit/react-ui\n * ```\n *\n * ## Usage\n *\n * ```tsx\n * import { CopilotChat } from \"@copilotkit/react-ui\";\n * import \"@copilotkit/react-ui/styles.css\";\n *\n * <CopilotChat\n * labels={{\n * title: \"Your Assistant\",\n * initial: \"Hi! 👋 How can I assist you today?\",\n * }}\n * />\n * ```\n *\n * ### Look & Feel\n *\n * By default, CopilotKit components do not have any styles. You can import CopilotKit's stylesheet at the root of your project:\n * ```tsx title=\"YourRootComponent.tsx\"\n * ...\n * import \"@copilotkit/react-ui/styles.css\"; // [!code highlight]\n *\n * export function YourRootComponent() {\n * return (\n * <CopilotKit>\n * ...\n * </CopilotKit>\n * );\n * }\n * ```\n * For more information about how to customize the styles, check out the [Customize Look & Feel](/concepts/customize-look-and-feel) guide.\n */\n\nimport {\n ChatContext,\n ChatContextProvider,\n CopilotChatIcons,\n CopilotChatLabels,\n} from \"./ChatContext\";\nimport { Messages as DefaultMessages } from \"./Messages\";\nimport { Input as DefaultInput } from \"./Input\";\nimport { ResponseButton as DefaultResponseButton } from \"./Response\";\nimport { RenderTextMessage as DefaultRenderTextMessage } from \"./messages/RenderTextMessage\";\nimport { RenderActionExecutionMessage as DefaultRenderActionExecutionMessage } from \"./messages/RenderActionExecutionMessage\";\nimport { RenderResultMessage as DefaultRenderResultMessage } from \"./messages/RenderResultMessage\";\nimport { RenderAgentStateMessage as DefaultRenderAgentStateMessage } from \"./messages/RenderAgentStateMessage\";\nimport { Suggestion } from \"./Suggestion\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { SystemMessageFunction, useCopilotChat, useCopilotContext } from \"@copilotkit/react-core\";\nimport { reloadSuggestions } from \"./Suggestion\";\nimport { CopilotChatSuggestion } from \"../../types/suggestions\";\nimport { Message, Role, TextMessage } from \"@copilotkit/runtime-client-gql\";\nimport { InputProps, MessagesProps, RenderMessageProps, ResponseButtonProps } from \"./props\";\nimport { randomId } from \"@copilotkit/shared\";\n\nimport { CopilotDevConsole } from \"../dev-console\";\n\n/**\n * Props for CopilotChat component.\n */\nexport interface CopilotChatProps {\n /**\n * Custom instructions to be added to the system message. Use this property to\n * provide additional context or guidance to the language model, influencing\n * its responses. These instructions can include specific directions,\n * preferences, or criteria that the model should consider when generating\n * its output, thereby tailoring the conversation more precisely to the\n * user's needs or the application's requirements.\n */\n instructions?: string;\n\n /**\n * A callback that gets called when the in progress state changes.\n */\n onInProgress?: (inProgress: boolean) => void;\n\n /**\n * A callback that gets called when a new message it submitted.\n */\n onSubmitMessage?: (message: string) => void | Promise<void>;\n\n /**\n * Icons can be used to set custom icons for the chat window.\n */\n icons?: CopilotChatIcons;\n\n /**\n * Labels can be used to set custom labels for the chat window.\n */\n labels?: CopilotChatLabels;\n\n /**\n * A function that takes in context string and instructions and returns\n * the system message to include in the chat request.\n * Use this to completely override the system message, when providing\n * instructions is not enough.\n */\n makeSystemMessage?: SystemMessageFunction;\n\n /**\n * Whether to show the response button.\n * @default true\n */\n showResponseButton?: boolean;\n\n /**\n * A custom Messages component to use instead of the default.\n */\n Messages?: React.ComponentType<MessagesProps>;\n\n /**\n * A custom RenderTextMessage component to use instead of the default.\n */\n RenderTextMessage?: React.ComponentType<RenderMessageProps>;\n\n /**\n * A custom RenderActionExecutionMessage component to use instead of the default.\n */\n RenderActionExecutionMessage?: React.ComponentType<RenderMessageProps>;\n\n /**\n * A custom RenderAgentStateMessage component to use instead of the default.\n */\n RenderAgentStateMessage?: React.ComponentType<RenderMessageProps>;\n\n /**\n * A custom RenderResultMessage component to use instead of the default.\n */\n RenderResultMessage?: React.ComponentType<RenderMessageProps>;\n\n /**\n * A custom Input component to use instead of the default.\n */\n Input?: React.ComponentType<InputProps>;\n\n /**\n * A custom ResponseButton component to use instead of the default.\n */\n ResponseButton?: React.ComponentType<ResponseButtonProps>;\n\n /**\n * A class name to apply to the root element.\n */\n className?: string;\n\n /**\n * Children to render.\n */\n children?: React.ReactNode;\n}\n\nexport function CopilotChat({\n instructions,\n onSubmitMessage,\n makeSystemMessage,\n showResponseButton = true,\n onInProgress,\n Messages = DefaultMessages,\n RenderTextMessage = DefaultRenderTextMessage,\n RenderActionExecutionMessage = DefaultRenderActionExecutionMessage,\n RenderAgentStateMessage = DefaultRenderAgentStateMessage,\n RenderResultMessage = DefaultRenderResultMessage,\n Input = DefaultInput,\n ResponseButton = DefaultResponseButton,\n className,\n icons,\n labels,\n}: CopilotChatProps) {\n const context = useCopilotContext();\n\n useEffect(() => {\n context.setChatInstructions(instructions || \"\");\n }, [instructions]);\n\n const {\n visibleMessages,\n isLoading,\n currentSuggestions,\n sendMessage,\n stopGeneration,\n reloadMessages,\n } = useCopilotChatLogic(makeSystemMessage, onInProgress, onSubmitMessage);\n\n const chatContext = React.useContext(ChatContext);\n const isVisible = chatContext ? chatContext.open : true;\n\n return (\n <WrappedCopilotChat icons={icons} labels={labels} className={className}>\n <CopilotDevConsole />\n <Messages\n RenderTextMessage={RenderTextMessage}\n RenderActionExecutionMessage={RenderActionExecutionMessage}\n RenderAgentStateMessage={RenderAgentStateMessage}\n RenderResultMessage={RenderResultMessage}\n messages={visibleMessages}\n inProgress={isLoading}\n >\n {currentSuggestions.length > 0 && (\n <div>\n <h6>Suggested:</h6>\n <div className=\"suggestions\">\n {currentSuggestions.map((suggestion, index) => (\n <Suggestion\n key={index}\n title={suggestion.title}\n message={suggestion.message}\n partial={suggestion.partial}\n className={suggestion.className}\n onClick={(message) => sendMessage(message)}\n />\n ))}\n </div>\n </div>\n )}\n {showResponseButton && visibleMessages.length > 0 && (\n <ResponseButton\n onClick={isLoading ? stopGeneration : reloadMessages}\n inProgress={isLoading}\n />\n )}\n </Messages>\n <Input inProgress={isLoading} onSend={sendMessage} isVisible={isVisible} />\n </WrappedCopilotChat>\n );\n}\n\nexport function WrappedCopilotChat({\n children,\n icons,\n labels,\n className,\n}: {\n children: React.ReactNode;\n icons?: CopilotChatIcons;\n labels?: CopilotChatLabels;\n className?: string;\n}) {\n const chatContext = React.useContext(ChatContext);\n if (!chatContext) {\n return (\n <ChatContextProvider icons={icons} labels={labels} open={true} setOpen={() => {}}>\n <div className={`copilotKitChat ${className}`}>{children}</div>\n </ChatContextProvider>\n );\n }\n return <>{children}</>;\n}\n\nconst SUGGESTIONS_DEBOUNCE_TIMEOUT = 1000;\n\nexport const useCopilotChatLogic = (\n makeSystemMessage?: SystemMessageFunction,\n onInProgress?: (isLoading: boolean) => void,\n onSubmitMessage?: (messageContent: string) => Promise<void> | void,\n) => {\n const { visibleMessages, appendMessage, reloadMessages, stopGeneration, isLoading } =\n useCopilotChat({\n id: randomId(),\n makeSystemMessage,\n });\n\n const [currentSuggestions, setCurrentSuggestions] = useState<CopilotChatSuggestion[]>([]);\n const suggestionsAbortControllerRef = useRef<AbortController | null>(null);\n const debounceTimerRef = useRef<any>();\n\n const abortSuggestions = () => {\n suggestionsAbortControllerRef.current?.abort();\n suggestionsAbortControllerRef.current = null;\n };\n\n const context = useCopilotContext();\n\n useEffect(() => {\n onInProgress?.(isLoading);\n\n abortSuggestions();\n\n debounceTimerRef.current = setTimeout(\n () => {\n if (!isLoading && Object.keys(context.chatSuggestionConfiguration).length !== 0) {\n suggestionsAbortControllerRef.current = new AbortController();\n reloadSuggestions(\n context,\n context.chatSuggestionConfiguration,\n setCurrentSuggestions,\n suggestionsAbortControllerRef,\n );\n }\n },\n currentSuggestions.length == 0 ? 0 : SUGGESTIONS_DEBOUNCE_TIMEOUT,\n );\n\n return () => {\n clearTimeout(debounceTimerRef.current);\n };\n }, [isLoading, context.chatSuggestionConfiguration]);\n\n const sendMessage = async (messageContent: string) => {\n abortSuggestions();\n setCurrentSuggestions([]);\n\n const message: Message = new TextMessage({\n content: messageContent,\n role: Role.User,\n });\n\n // Append the message immediately to make it visible\n appendMessage(message);\n\n if (onSubmitMessage) {\n try {\n await onSubmitMessage(messageContent);\n } catch (error) {\n console.error(\"Error in onSubmitMessage:\", error);\n }\n }\n\n return message;\n };\n\n return {\n visibleMessages,\n isLoading,\n currentSuggestions,\n sendMessage,\n stopGeneration,\n reloadMessages,\n };\n};\n"],"mappings":"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","names":["Messages","RenderTextMessage","RenderActionExecutionMessage","RenderAgentStateMessage","RenderResultMessage","Input","ResponseButton"]}
@@ -0,0 +1,126 @@
1
+ import {
2
+ useChatContext
3
+ } from "./chunk-BJPGMY3I.mjs";
4
+
5
+ // src/components/chat/Messages.tsx
6
+ import React, { useEffect, useMemo } from "react";
7
+ import {
8
+ ActionExecutionMessage,
9
+ ResultMessage,
10
+ TextMessage,
11
+ Role,
12
+ AgentStateMessage
13
+ } from "@copilotkit/runtime-client-gql";
14
+ import { jsx, jsxs } from "react/jsx-runtime";
15
+ var Messages = ({
16
+ messages,
17
+ inProgress,
18
+ children,
19
+ RenderTextMessage,
20
+ RenderActionExecutionMessage,
21
+ RenderAgentStateMessage,
22
+ RenderResultMessage
23
+ }) => {
24
+ const context = useChatContext();
25
+ const initialMessages = useMemo(
26
+ () => makeInitialMessages(context.labels.initial),
27
+ [context.labels.initial]
28
+ );
29
+ messages = [...initialMessages, ...messages];
30
+ const actionResults = {};
31
+ for (let i = 0; i < messages.length; i++) {
32
+ if (messages[i] instanceof ActionExecutionMessage) {
33
+ const id = messages[i].id;
34
+ const resultMessage = messages.find(
35
+ (message) => message instanceof ResultMessage && message.actionExecutionId === id
36
+ );
37
+ if (resultMessage) {
38
+ actionResults[id] = ResultMessage.decodeResult(resultMessage.result || "");
39
+ }
40
+ }
41
+ }
42
+ const messagesEndRef = React.useRef(null);
43
+ const scrollToBottom = () => {
44
+ if (messagesEndRef.current) {
45
+ messagesEndRef.current.scrollIntoView({
46
+ behavior: "auto"
47
+ });
48
+ }
49
+ };
50
+ useEffect(() => {
51
+ scrollToBottom();
52
+ }, [messages]);
53
+ return /* @__PURE__ */ jsxs("div", { className: "copilotKitMessages", children: [
54
+ messages.map((message, index) => {
55
+ const isCurrentMessage = index === messages.length - 1;
56
+ if (message instanceof TextMessage) {
57
+ return /* @__PURE__ */ jsx(
58
+ RenderTextMessage,
59
+ {
60
+ message,
61
+ inProgress,
62
+ index,
63
+ isCurrentMessage
64
+ },
65
+ index
66
+ );
67
+ } else if (message instanceof ActionExecutionMessage) {
68
+ return /* @__PURE__ */ jsx(
69
+ RenderActionExecutionMessage,
70
+ {
71
+ message,
72
+ inProgress,
73
+ index,
74
+ isCurrentMessage,
75
+ actionResult: actionResults[message.id]
76
+ },
77
+ index
78
+ );
79
+ } else if (message instanceof AgentStateMessage) {
80
+ return /* @__PURE__ */ jsx(
81
+ RenderAgentStateMessage,
82
+ {
83
+ message,
84
+ inProgress,
85
+ index,
86
+ isCurrentMessage
87
+ },
88
+ index
89
+ );
90
+ } else if (message instanceof ResultMessage) {
91
+ return /* @__PURE__ */ jsx(
92
+ RenderResultMessage,
93
+ {
94
+ message,
95
+ inProgress,
96
+ index,
97
+ isCurrentMessage
98
+ },
99
+ index
100
+ );
101
+ }
102
+ }),
103
+ /* @__PURE__ */ jsx("footer", { ref: messagesEndRef, children })
104
+ ] });
105
+ };
106
+ function makeInitialMessages(initial) {
107
+ let initialArray = [];
108
+ if (initial) {
109
+ if (Array.isArray(initial)) {
110
+ initialArray.push(...initial);
111
+ } else {
112
+ initialArray.push(initial);
113
+ }
114
+ }
115
+ return initialArray.map(
116
+ (message) => new TextMessage({
117
+ role: Role.Assistant,
118
+ content: message
119
+ })
120
+ );
121
+ }
122
+
123
+ export {
124
+ Messages
125
+ };
126
+ //# sourceMappingURL=chunk-GDNJRSD4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/Messages.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport { MessagesProps } from \"./props\";\nimport { useChatContext } from \"./ChatContext\";\nimport {\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n Role,\n AgentStateMessage,\n} from \"@copilotkit/runtime-client-gql\";\n\nexport const Messages = ({\n messages,\n inProgress,\n children,\n RenderTextMessage,\n RenderActionExecutionMessage,\n RenderAgentStateMessage,\n RenderResultMessage,\n}: MessagesProps) => {\n const context = useChatContext();\n const initialMessages = useMemo(\n () => makeInitialMessages(context.labels.initial),\n [context.labels.initial],\n );\n messages = [...initialMessages, ...messages];\n\n const actionResults: Record<string, string> = {};\n\n for (let i = 0; i < messages.length; i++) {\n if (messages[i] instanceof ActionExecutionMessage) {\n const id = messages[i].id;\n const resultMessage: ResultMessage | undefined = messages.find(\n (message) => message instanceof ResultMessage && message.actionExecutionId === id,\n ) as ResultMessage | undefined;\n\n if (resultMessage) {\n actionResults[id] = ResultMessage.decodeResult(resultMessage.result || \"\");\n }\n }\n }\n\n const messagesEndRef = React.useRef<HTMLDivElement>(null);\n\n const scrollToBottom = () => {\n if (messagesEndRef.current) {\n messagesEndRef.current.scrollIntoView({\n behavior: \"auto\",\n });\n }\n };\n\n useEffect(() => {\n scrollToBottom();\n }, [messages]);\n\n return (\n <div className=\"copilotKitMessages\">\n {messages.map((message, index) => {\n const isCurrentMessage = index === messages.length - 1;\n\n if (message instanceof TextMessage) {\n return (\n <RenderTextMessage\n key={index}\n message={message}\n inProgress={inProgress}\n index={index}\n isCurrentMessage={isCurrentMessage}\n />\n );\n } else if (message instanceof ActionExecutionMessage) {\n return (\n <RenderActionExecutionMessage\n key={index}\n message={message}\n inProgress={inProgress}\n index={index}\n isCurrentMessage={isCurrentMessage}\n actionResult={actionResults[message.id]}\n />\n );\n } else if (message instanceof AgentStateMessage) {\n return (\n <RenderAgentStateMessage\n key={index}\n message={message}\n inProgress={inProgress}\n index={index}\n isCurrentMessage={isCurrentMessage}\n />\n );\n } else if (message instanceof ResultMessage) {\n return (\n <RenderResultMessage\n key={index}\n message={message}\n inProgress={inProgress}\n index={index}\n isCurrentMessage={isCurrentMessage}\n />\n );\n }\n })}\n <footer ref={messagesEndRef}>{children}</footer>\n </div>\n );\n};\n\nfunction makeInitialMessages(initial?: string | string[]): Message[] {\n let initialArray: string[] = [];\n if (initial) {\n if (Array.isArray(initial)) {\n initialArray.push(...initial);\n } else {\n initialArray.push(initial);\n }\n }\n\n return initialArray.map(\n (message) =>\n new TextMessage({\n role: Role.Assistant,\n content: message,\n }),\n );\n}\n"],"mappings":";;;;;AAAA,OAAO,SAAS,WAAW,eAAe;AAG1C;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAgDH,SAMQ,KANR;AA9CG,IAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAqB;AACnB,QAAM,UAAU,eAAe;AAC/B,QAAM,kBAAkB;AAAA,IACtB,MAAM,oBAAoB,QAAQ,OAAO,OAAO;AAAA,IAChD,CAAC,QAAQ,OAAO,OAAO;AAAA,EACzB;AACA,aAAW,CAAC,GAAG,iBAAiB,GAAG,QAAQ;AAE3C,QAAM,gBAAwC,CAAC;AAE/C,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,QAAI,SAAS,CAAC,aAAa,wBAAwB;AACjD,YAAM,KAAK,SAAS,CAAC,EAAE;AACvB,YAAM,gBAA2C,SAAS;AAAA,QACxD,CAAC,YAAY,mBAAmB,iBAAiB,QAAQ,sBAAsB;AAAA,MACjF;AAEA,UAAI,eAAe;AACjB,sBAAc,EAAE,IAAI,cAAc,aAAa,cAAc,UAAU,EAAE;AAAA,MAC3E;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB,MAAM,OAAuB,IAAI;AAExD,QAAM,iBAAiB,MAAM;AAC3B,QAAI,eAAe,SAAS;AAC1B,qBAAe,QAAQ,eAAe;AAAA,QACpC,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AAEA,YAAU,MAAM;AACd,mBAAe;AAAA,EACjB,GAAG,CAAC,QAAQ,CAAC;AAEb,SACE,qBAAC,SAAI,WAAU,sBACZ;AAAA,aAAS,IAAI,CAAC,SAAS,UAAU;AAChC,YAAM,mBAAmB,UAAU,SAAS,SAAS;AAErD,UAAI,mBAAmB,aAAa;AAClC,eACE;AAAA,UAAC;AAAA;AAAA,YAEC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,UAJK;AAAA,QAKP;AAAA,MAEJ,WAAW,mBAAmB,wBAAwB;AACpD,eACE;AAAA,UAAC;AAAA;AAAA,YAEC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,cAAc,cAAc,QAAQ,EAAE;AAAA;AAAA,UALjC;AAAA,QAMP;AAAA,MAEJ,WAAW,mBAAmB,mBAAmB;AAC/C,eACE;AAAA,UAAC;AAAA;AAAA,YAEC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,UAJK;AAAA,QAKP;AAAA,MAEJ,WAAW,mBAAmB,eAAe;AAC3C,eACE;AAAA,UAAC;AAAA;AAAA,YAEC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,UAJK;AAAA,QAKP;AAAA,MAEJ;AAAA,IACF,CAAC;AAAA,IACD,oBAAC,YAAO,KAAK,gBAAiB,UAAS;AAAA,KACzC;AAEJ;AAEA,SAAS,oBAAoB,SAAwC;AACnE,MAAI,eAAyB,CAAC;AAC9B,MAAI,SAAS;AACX,QAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,mBAAa,KAAK,GAAG,OAAO;AAAA,IAC9B,OAAO;AACL,mBAAa,KAAK,OAAO;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO,aAAa;AAAA,IAClB,CAAC,YACC,IAAI,YAAY;AAAA,MACd,MAAM,KAAK;AAAA,MACX,SAAS;AAAA,IACX,CAAC;AAAA,EACL;AACF;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CopilotModal
3
- } from "./chunk-PGJGIYRW.mjs";
3
+ } from "./chunk-3YESXHJH.mjs";
4
4
  import {
5
5
  __spreadProps,
6
6
  __spreadValues
@@ -18,4 +18,4 @@ function CopilotPopup(props) {
18
18
  export {
19
19
  CopilotPopup
20
20
  };
21
- //# sourceMappingURL=chunk-N6GQ4WV4.mjs.map
21
+ //# sourceMappingURL=chunk-GHMYWL42.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/chat/Popup.tsx"],"sourcesContent":["/**\n * <br/>\n * <img src=\"/images/CopilotPopup.gif\" width=\"500\" />\n *\n * A chatbot popup component for the CopilotKit framework. The component allows for a high degree\n * of customization through various props and custom CSS.\n *\n * See [CopilotSidebar](/reference/components/CopilotSidebar) for a sidebar version of this component.\n *\n * ## Install Dependencies\n *\n * This component is part of the [@copilotkit/react-ui](https://npmjs.com/package/@copilotkit/react-ui) package.\n *\n * ```shell npm2yarn \\\"@copilotkit/react-ui\"\\\n * npm install @copilotkit/react-core @copilotkit/react-ui\n * ```\n * ## Usage\n *\n * ```tsx\n * import { CopilotPopup } from \"@copilotkit/react-ui\";\n * import \"@copilotkit/react-ui/styles.css\";\n *\n * <CopilotPopup\n * labels={{\n * title: \"Your Assistant\",\n * initial: \"Hi! 👋 How can I assist you today?\",\n * }}\n * />\n * ```\n *\n * ### Look & Feel\n *\n * By default, CopilotKit components do not have any styles. You can import CopilotKit's stylesheet at the root of your project:\n * ```tsx fileName=\"YourRootComponent.tsx\" {2}\n * ...\n * import \"@copilotkit/react-ui/styles.css\";\n *\n * export function YourRootComponent() {\n * return (\n * <CopilotKit>\n * ...\n * </CopilotKit>\n * );\n * }\n * ```\n * For more information about how to customize the styles, check out the [Customize Look & Feel](/concepts/customize-look-and-feel) guide.\n */\n\nimport { CopilotModal, CopilotModalProps } from \"./Modal\";\n\nexport function CopilotPopup(props: CopilotModalProps) {\n props = {\n ...props,\n className: props.className ? props.className + \" copilotKitPopup\" : \"copilotKitPopup\",\n };\n return <CopilotModal {...props}>{props.children}</CopilotModal>;\n}\n"],"mappings":";;;;;;;;;AAuDS;AALF,SAAS,aAAa,OAA0B;AACrD,UAAQ,iCACH,QADG;AAAA,IAEN,WAAW,MAAM,YAAY,MAAM,YAAY,qBAAqB;AAAA,EACtE;AACA,SAAO,oBAAC,+CAAiB,QAAjB,EAAyB,gBAAM,WAAS;AAClD;","names":[]}
1
+ {"version":3,"sources":["../src/components/chat/Popup.tsx"],"sourcesContent":["/**\n * <br/>\n * <img src=\"/images/CopilotPopup.gif\" width=\"500\" />\n *\n * A chatbot popup component for the CopilotKit framework. The component allows for a high degree\n * of customization through various props and custom CSS.\n *\n * See [CopilotSidebar](/reference/components/CopilotSidebar) for a sidebar version of this component.\n *\n * ## Install Dependencies\n *\n * This component is part of the [@copilotkit/react-ui](https://npmjs.com/package/@copilotkit/react-ui) package.\n *\n * ```shell npm2yarn \\\"@copilotkit/react-ui\"\\\n * npm install @copilotkit/react-core @copilotkit/react-ui\n * ```\n * ## Usage\n *\n * ```tsx\n * import { CopilotPopup } from \"@copilotkit/react-ui\";\n * import \"@copilotkit/react-ui/styles.css\";\n *\n * <CopilotPopup\n * labels={{\n * title: \"Your Assistant\",\n * initial: \"Hi! 👋 How can I assist you today?\",\n * }}\n * />\n * ```\n *\n * ### Look & Feel\n *\n * By default, CopilotKit components do not have any styles. You can import CopilotKit's stylesheet at the root of your project:\n * ```tsx title=\"YourRootComponent.tsx\"\n * ...\n * import \"@copilotkit/react-ui/styles.css\"; // [!code highlight]\n *\n * export function YourRootComponent() {\n * return (\n * <CopilotKit>\n * ...\n * </CopilotKit>\n * );\n * }\n * ```\n * For more information about how to customize the styles, check out the [Customize Look & Feel](/concepts/customize-look-and-feel) guide.\n */\n\nimport { CopilotModal, CopilotModalProps } from \"./Modal\";\n\nexport function CopilotPopup(props: CopilotModalProps) {\n props = {\n ...props,\n className: props.className ? props.className + \" copilotKitPopup\" : \"copilotKitPopup\",\n };\n return <CopilotModal {...props}>{props.children}</CopilotModal>;\n}\n"],"mappings":";;;;;;;;;AAuDS;AALF,SAAS,aAAa,OAA0B;AACrD,UAAQ,iCACH,QADG;AAAA,IAEN,WAAW,MAAM,YAAY,MAAM,YAAY,qBAAqB;AAAA,EACtE;AACA,SAAO,oBAAC,+CAAiB,QAAjB,EAAyB,gBAAM,WAAS;AAClD;","names":[]}
@@ -0,0 +1,19 @@
1
+ import {
2
+ useChatContext
3
+ } from "./chunk-BJPGMY3I.mjs";
4
+
5
+ // src/components/chat/messages/RenderResultMessage.tsx
6
+ import { ResultMessage } from "@copilotkit/runtime-client-gql";
7
+ import { jsx } from "react/jsx-runtime";
8
+ function RenderResultMessage(props) {
9
+ const { message, inProgress, index, isCurrentMessage } = props;
10
+ const { icons } = useChatContext();
11
+ if (message instanceof ResultMessage && inProgress && isCurrentMessage) {
12
+ return /* @__PURE__ */ jsx("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: icons.spinnerIcon }, index);
13
+ }
14
+ }
15
+
16
+ export {
17
+ RenderResultMessage
18
+ };
19
+ //# sourceMappingURL=chunk-GOTHQ665.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/messages/RenderResultMessage.tsx"],"sourcesContent":["import { ResultMessage } from \"@copilotkit/runtime-client-gql\";\nimport { RenderMessageProps } from \"../props\";\nimport { useChatContext } from \"../ChatContext\";\n\nexport function RenderResultMessage(props: RenderMessageProps) {\n const { message, inProgress, index, isCurrentMessage } = props;\n const { icons } = useChatContext();\n if (message instanceof ResultMessage && inProgress && isCurrentMessage) {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {icons.spinnerIcon}\n </div>\n );\n }\n}\n"],"mappings":";;;;;AAAA,SAAS,qBAAqB;AASxB;AALC,SAAS,oBAAoB,OAA2B;AAC7D,QAAM,EAAE,SAAS,YAAY,OAAO,iBAAiB,IAAI;AACzD,QAAM,EAAE,MAAM,IAAI,eAAe;AACjC,MAAI,mBAAmB,iBAAiB,cAAc,kBAAkB;AACtE,WACE,oBAAC,SAAgB,WAAW,gDACzB,gBAAM,eADC,KAEV;AAAA,EAEJ;AACF;","names":[]}
@@ -0,0 +1,26 @@
1
+ import {
2
+ Markdown
3
+ } from "./chunk-YQ3D5IQV.mjs";
4
+ import {
5
+ useChatContext
6
+ } from "./chunk-BJPGMY3I.mjs";
7
+
8
+ // src/components/chat/messages/RenderTextMessage.tsx
9
+ import { TextMessage } from "@copilotkit/runtime-client-gql";
10
+ import { jsx } from "react/jsx-runtime";
11
+ function RenderTextMessage(props) {
12
+ const { message, inProgress, index, isCurrentMessage } = props;
13
+ const { icons } = useChatContext();
14
+ if (message instanceof TextMessage) {
15
+ if (message.role === "user") {
16
+ return /* @__PURE__ */ jsx("div", { className: "copilotKitMessage copilotKitUserMessage", children: message.content }, index);
17
+ } else if (message.role == "assistant") {
18
+ return /* @__PURE__ */ jsx("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: isCurrentMessage && inProgress && !message.content ? icons.spinnerIcon : /* @__PURE__ */ jsx(Markdown, { content: message.content }) }, index);
19
+ }
20
+ }
21
+ }
22
+
23
+ export {
24
+ RenderTextMessage
25
+ };
26
+ //# sourceMappingURL=chunk-MA5B5ELM.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/messages/RenderTextMessage.tsx"],"sourcesContent":["import { TextMessage } from \"@copilotkit/runtime-client-gql\";\nimport { RenderMessageProps } from \"../props\";\nimport { Markdown } from \"../Markdown\";\nimport { useChatContext } from \"../ChatContext\";\n\nexport function RenderTextMessage(props: RenderMessageProps) {\n const { message, inProgress, index, isCurrentMessage } = props;\n const { icons } = useChatContext();\n if (message instanceof TextMessage) {\n if (message.role === \"user\") {\n return (\n <div key={index} className=\"copilotKitMessage copilotKitUserMessage\">\n {message.content}\n </div>\n );\n } else if (message.role == \"assistant\") {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {isCurrentMessage && inProgress && !message.content ? (\n icons.spinnerIcon\n ) : (\n <Markdown content={message.content} />\n )}\n </div>\n );\n }\n }\n}\n"],"mappings":";;;;;;;;AAAA,SAAS,mBAAmB;AAWpB;AAND,SAAS,kBAAkB,OAA2B;AAC3D,QAAM,EAAE,SAAS,YAAY,OAAO,iBAAiB,IAAI;AACzD,QAAM,EAAE,MAAM,IAAI,eAAe;AACjC,MAAI,mBAAmB,aAAa;AAClC,QAAI,QAAQ,SAAS,QAAQ;AAC3B,aACE,oBAAC,SAAgB,WAAU,2CACxB,kBAAQ,WADD,KAEV;AAAA,IAEJ,WAAW,QAAQ,QAAQ,aAAa;AACtC,aACE,oBAAC,SAAgB,WAAW,gDACzB,8BAAoB,cAAc,CAAC,QAAQ,UAC1C,MAAM,cAEN,oBAAC,YAAS,SAAS,QAAQ,SAAS,KAJ9B,KAMV;AAAA,IAEJ;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,61 @@
1
+ import {
2
+ useChatContext
3
+ } from "./chunk-BJPGMY3I.mjs";
4
+
5
+ // src/components/chat/messages/RenderAgentStateMessage.tsx
6
+ import { AgentStateMessage } from "@copilotkit/runtime-client-gql";
7
+ import { useCopilotContext } from "@copilotkit/react-core";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ function RenderAgentStateMessage(props) {
10
+ const { message, inProgress, index, isCurrentMessage } = props;
11
+ const { chatComponentsCache } = useCopilotContext();
12
+ const { icons } = useChatContext();
13
+ if (message instanceof AgentStateMessage) {
14
+ let render;
15
+ if (chatComponentsCache.current !== null) {
16
+ render = chatComponentsCache.current.coagentActions[`${message.agentName}-${message.nodeName}`] || chatComponentsCache.current.coagentActions[`${message.agentName}-global`];
17
+ }
18
+ if (render) {
19
+ if (typeof render === "string") {
20
+ if (isCurrentMessage && inProgress) {
21
+ return /* @__PURE__ */ jsxs("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: [
22
+ icons.spinnerIcon,
23
+ " ",
24
+ /* @__PURE__ */ jsx("span", { className: "inProgressLabel", children: render })
25
+ ] }, index);
26
+ } else {
27
+ return null;
28
+ }
29
+ } else {
30
+ const state = message.state;
31
+ let status = message.active ? "inProgress" : "complete";
32
+ const toRender = render({
33
+ status,
34
+ state,
35
+ nodeName: message.nodeName
36
+ });
37
+ if (!toRender && status === "complete") {
38
+ return null;
39
+ }
40
+ if (typeof toRender === "string") {
41
+ return /* @__PURE__ */ jsxs("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: [
42
+ isCurrentMessage && inProgress && icons.spinnerIcon,
43
+ " ",
44
+ toRender
45
+ ] }, index);
46
+ } else {
47
+ return /* @__PURE__ */ jsx("div", { className: "copilotKitCustomAssistantMessage", children: toRender }, index);
48
+ }
49
+ }
50
+ } else if (!inProgress || !isCurrentMessage) {
51
+ return null;
52
+ } else {
53
+ return /* @__PURE__ */ jsx("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: icons.spinnerIcon }, index);
54
+ }
55
+ }
56
+ }
57
+
58
+ export {
59
+ RenderAgentStateMessage
60
+ };
61
+ //# sourceMappingURL=chunk-U42OB2S3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/messages/RenderAgentStateMessage.tsx"],"sourcesContent":["import { AgentStateMessage } from \"@copilotkit/runtime-client-gql\";\nimport { RenderMessageProps } from \"../props\";\nimport { useChatContext } from \"../ChatContext\";\nimport { CoagentInChatRenderFunction, useCopilotContext } from \"@copilotkit/react-core\";\n\nexport function RenderAgentStateMessage(props: RenderMessageProps) {\n const { message, inProgress, index, isCurrentMessage } = props;\n const { chatComponentsCache } = useCopilotContext();\n const { icons } = useChatContext();\n\n if (message instanceof AgentStateMessage) {\n let render: string | CoagentInChatRenderFunction | undefined;\n\n if (chatComponentsCache.current !== null) {\n render =\n chatComponentsCache.current.coagentActions[`${message.agentName}-${message.nodeName}`] ||\n chatComponentsCache.current.coagentActions[`${message.agentName}-global`];\n }\n\n if (render) {\n // render a static string\n if (typeof render === \"string\") {\n // when render is static, we show it only when in progress\n if (isCurrentMessage && inProgress) {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {icons.spinnerIcon} <span className=\"inProgressLabel\">{render}</span>\n </div>\n );\n }\n // Done - silent by default to avoid a series of \"done\" messages\n else {\n return null;\n }\n }\n // render is a function\n else {\n const state = message.state;\n\n let status = message.active ? \"inProgress\" : \"complete\";\n\n const toRender = render({\n status: status as any,\n state,\n nodeName: message.nodeName,\n });\n\n // No result and complete: stay silent\n if (!toRender && status === \"complete\") {\n return null;\n }\n\n if (typeof toRender === \"string\") {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {isCurrentMessage && inProgress && icons.spinnerIcon} {toRender}\n </div>\n );\n } else {\n return (\n <div key={index} className=\"copilotKitCustomAssistantMessage\">\n {toRender}\n </div>\n );\n }\n }\n }\n // No render function found- show the default message\n else if (!inProgress || !isCurrentMessage) {\n // Done - silent by default to avoid a series of \"done\" messages\n return null;\n } else {\n // In progress\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {icons.spinnerIcon}\n </div>\n );\n }\n }\n}\n"],"mappings":";;;;;AAAA,SAAS,yBAAyB;AAGlC,SAAsC,yBAAyB;AAsBnD,SACsB,KADtB;AApBL,SAAS,wBAAwB,OAA2B;AACjE,QAAM,EAAE,SAAS,YAAY,OAAO,iBAAiB,IAAI;AACzD,QAAM,EAAE,oBAAoB,IAAI,kBAAkB;AAClD,QAAM,EAAE,MAAM,IAAI,eAAe;AAEjC,MAAI,mBAAmB,mBAAmB;AACxC,QAAI;AAEJ,QAAI,oBAAoB,YAAY,MAAM;AACxC,eACE,oBAAoB,QAAQ,eAAe,GAAG,QAAQ,aAAa,QAAQ,UAAU,KACrF,oBAAoB,QAAQ,eAAe,GAAG,QAAQ,kBAAkB;AAAA,IAC5E;AAEA,QAAI,QAAQ;AAEV,UAAI,OAAO,WAAW,UAAU;AAE9B,YAAI,oBAAoB,YAAY;AAClC,iBACE,qBAAC,SAAgB,WAAW,gDACzB;AAAA,kBAAM;AAAA,YAAY;AAAA,YAAC,oBAAC,UAAK,WAAU,mBAAmB,kBAAO;AAAA,eADtD,KAEV;AAAA,QAEJ,OAEK;AACH,iBAAO;AAAA,QACT;AAAA,MACF,OAEK;AACH,cAAM,QAAQ,QAAQ;AAEtB,YAAI,SAAS,QAAQ,SAAS,eAAe;AAE7C,cAAM,WAAW,OAAO;AAAA,UACtB;AAAA,UACA;AAAA,UACA,UAAU,QAAQ;AAAA,QACpB,CAAC;AAGD,YAAI,CAAC,YAAY,WAAW,YAAY;AACtC,iBAAO;AAAA,QACT;AAEA,YAAI,OAAO,aAAa,UAAU;AAChC,iBACE,qBAAC,SAAgB,WAAW,gDACzB;AAAA,gCAAoB,cAAc,MAAM;AAAA,YAAY;AAAA,YAAE;AAAA,eAD/C,KAEV;AAAA,QAEJ,OAAO;AACL,iBACE,oBAAC,SAAgB,WAAU,oCACxB,sBADO,KAEV;AAAA,QAEJ;AAAA,MACF;AAAA,IACF,WAES,CAAC,cAAc,CAAC,kBAAkB;AAEzC,aAAO;AAAA,IACT,OAAO;AAEL,aACE,oBAAC,SAAgB,WAAW,gDACzB,gBAAM,eADC,KAEV;AAAA,IAEJ;AAAA,EACF;AACF;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CopilotModal
3
- } from "./chunk-PGJGIYRW.mjs";
3
+ } from "./chunk-3YESXHJH.mjs";
4
4
  import {
5
5
  __spreadProps,
6
6
  __spreadValues
@@ -27,4 +27,4 @@ function CopilotSidebar(props) {
27
27
  export {
28
28
  CopilotSidebar
29
29
  };
30
- //# sourceMappingURL=chunk-KJQVEUVB.mjs.map
30
+ //# sourceMappingURL=chunk-UUHCZZZV.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/Sidebar.tsx"],"sourcesContent":["/**\n * <br/>\n * <img src=\"/images/CopilotSidebar.gif\" width=\"500\" />\n *\n * A chatbot sidebar component for the CopilotKit framework. Highly customizable through various props and custom CSS.\n *\n * See [CopilotPopup](/reference/components/CopilotPopup) for a popup version of this component.\n *\n * ## Install Dependencies\n *\n * This component is part of the [@copilotkit/react-ui](https://npmjs.com/package/@copilotkit/react-ui) package.\n *\n * ```shell npm2yarn \\\"@copilotkit/react-ui\"\\\n * npm install @copilotkit/react-core @copilotkit/react-ui\n * ```\n *\n * ## Usage\n *\n * ```tsx\n * import { CopilotSidebar } from \"@copilotkit/react-ui\";\n * import \"@copilotkit/react-ui/styles.css\";\n *\n * <CopilotSidebar\n * labels={{\n * title: \"Your Assistant\",\n * initial: \"Hi! 👋 How can I assist you today?\",\n * }}\n * >\n * <YourApp/>\n * </CopilotSidebar>\n * ```\n *\n * ### Look & Feel\n *\n * By default, CopilotKit components do not have any styles. You can import CopilotKit's stylesheet at the root of your project:\n * ```tsx title=\"YourRootComponent.tsx\"\n * ...\n * import \"@copilotkit/react-ui/styles.css\"; // [!code highlight]\n *\n * export function YourRootComponent() {\n * return (\n * <CopilotKit>\n * ...\n * </CopilotKit>\n * );\n * }\n * ```\n * For more information about how to customize the styles, check out the [Customize Look & Feel](/concepts/customize-look-and-feel) guide.\n */\nimport React, { useState } from \"react\";\nimport { CopilotModal, CopilotModalProps } from \"./Modal\";\n\nexport function CopilotSidebar(props: CopilotModalProps) {\n props = {\n ...props,\n className: props.className ? props.className + \" copilotKitSidebar\" : \"copilotKitSidebar\",\n };\n const [expandedClassName, setExpandedClassName] = useState(\n props.defaultOpen ? \"sidebarExpanded\" : \"\",\n );\n\n const onSetOpen = (open: boolean) => {\n props.onSetOpen?.(open);\n setExpandedClassName(open ? \"sidebarExpanded\" : \"\");\n };\n\n return (\n <div className={`copilotKitSidebarContentWrapper ${expandedClassName}`}>\n <CopilotModal {...props} {...{ onSetOpen }}>\n {props.children}\n </CopilotModal>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAiDA,SAAgB,gBAAgB;AAmB1B;AAhBC,SAAS,eAAe,OAA0B;AACvD,UAAQ,iCACH,QADG;AAAA,IAEN,WAAW,MAAM,YAAY,MAAM,YAAY,uBAAuB;AAAA,EACxE;AACA,QAAM,CAAC,mBAAmB,oBAAoB,IAAI;AAAA,IAChD,MAAM,cAAc,oBAAoB;AAAA,EAC1C;AAEA,QAAM,YAAY,CAAC,SAAkB;AA7DvC;AA8DI,gBAAM,cAAN,+BAAkB;AAClB,yBAAqB,OAAO,oBAAoB,EAAE;AAAA,EACpD;AAEA,SACE,oBAAC,SAAI,WAAW,mCAAmC,qBACjD,8BAAC,8DAAiB,QAAW,EAAE,UAAU,IAAxC,EACE,gBAAM,WACT,GACF;AAEJ;","names":[]}
@@ -0,0 +1,76 @@
1
+ import {
2
+ useChatContext
3
+ } from "./chunk-BJPGMY3I.mjs";
4
+
5
+ // src/components/chat/messages/RenderActionExecutionMessage.tsx
6
+ import { ActionExecutionMessage, MessageStatusCode } from "@copilotkit/runtime-client-gql";
7
+ import { useCopilotContext } from "@copilotkit/react-core";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ function RenderActionExecutionMessage(props) {
10
+ const { message, inProgress, index, isCurrentMessage, actionResult } = props;
11
+ const { chatComponentsCache } = useCopilotContext();
12
+ const { icons } = useChatContext();
13
+ if (message instanceof ActionExecutionMessage) {
14
+ if (chatComponentsCache.current !== null && chatComponentsCache.current.actions[message.name]) {
15
+ const render = chatComponentsCache.current.actions[message.name];
16
+ if (typeof render === "string") {
17
+ if (isCurrentMessage && inProgress) {
18
+ return /* @__PURE__ */ jsxs("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: [
19
+ icons.spinnerIcon,
20
+ " ",
21
+ /* @__PURE__ */ jsx("span", { className: "inProgressLabel", children: render })
22
+ ] }, index);
23
+ } else {
24
+ return null;
25
+ }
26
+ } else {
27
+ const args = message.arguments;
28
+ let status = "inProgress";
29
+ if (actionResult !== void 0) {
30
+ status = "complete";
31
+ } else if (message.status.code !== MessageStatusCode.Pending) {
32
+ status = "executing";
33
+ }
34
+ try {
35
+ const toRender = render({
36
+ status,
37
+ args,
38
+ result: actionResult
39
+ });
40
+ if (!toRender && status === "complete") {
41
+ return null;
42
+ }
43
+ if (typeof toRender === "string") {
44
+ return /* @__PURE__ */ jsxs("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: [
45
+ isCurrentMessage && inProgress && icons.spinnerIcon,
46
+ " ",
47
+ toRender
48
+ ] }, index);
49
+ } else {
50
+ return /* @__PURE__ */ jsx("div", { className: "copilotKitCustomAssistantMessage", children: toRender }, index);
51
+ }
52
+ } catch (e) {
53
+ console.error(`Error executing render function for action ${message.name}: ${e}`);
54
+ return /* @__PURE__ */ jsxs("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: [
55
+ isCurrentMessage && inProgress && icons.spinnerIcon,
56
+ /* @__PURE__ */ jsxs("b", { children: [
57
+ "\u274C Error executing render: ",
58
+ message.name
59
+ ] }),
60
+ /* @__PURE__ */ jsx("br", {}),
61
+ e instanceof Error ? e.message : String(e)
62
+ ] }, index);
63
+ }
64
+ }
65
+ } else if (!inProgress || !isCurrentMessage) {
66
+ return null;
67
+ } else {
68
+ return /* @__PURE__ */ jsx("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: icons.spinnerIcon }, index);
69
+ }
70
+ }
71
+ }
72
+
73
+ export {
74
+ RenderActionExecutionMessage
75
+ };
76
+ //# sourceMappingURL=chunk-YH2STM73.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/messages/RenderActionExecutionMessage.tsx"],"sourcesContent":["import { ActionExecutionMessage, MessageStatusCode } from \"@copilotkit/runtime-client-gql\";\nimport { RenderMessageProps } from \"../props\";\nimport { useChatContext } from \"../ChatContext\";\nimport { RenderFunctionStatus, useCopilotContext } from \"@copilotkit/react-core\";\n\nexport function RenderActionExecutionMessage(props: RenderMessageProps) {\n const { message, inProgress, index, isCurrentMessage, actionResult } = props;\n const { chatComponentsCache } = useCopilotContext();\n const { icons } = useChatContext();\n\n if (message instanceof ActionExecutionMessage) {\n if (chatComponentsCache.current !== null && chatComponentsCache.current.actions[message.name]) {\n const render = chatComponentsCache.current.actions[message.name];\n // render a static string\n if (typeof render === \"string\") {\n // when render is static, we show it only when in progress\n if (isCurrentMessage && inProgress) {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {icons.spinnerIcon} <span className=\"inProgressLabel\">{render}</span>\n </div>\n );\n }\n // Done - silent by default to avoid a series of \"done\" messages\n else {\n return null;\n }\n }\n // render is a function\n else {\n const args = message.arguments;\n\n let status: RenderFunctionStatus = \"inProgress\";\n\n if (actionResult !== undefined) {\n status = \"complete\";\n } else if (message.status.code !== MessageStatusCode.Pending) {\n status = \"executing\";\n }\n\n try {\n const toRender = render({\n status: status as any,\n args,\n result: actionResult,\n });\n // No result and complete: stay silent\n if (!toRender && status === \"complete\") {\n return null;\n }\n if (typeof toRender === \"string\") {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {isCurrentMessage && inProgress && icons.spinnerIcon} {toRender}\n </div>\n );\n } else {\n return (\n <div key={index} className=\"copilotKitCustomAssistantMessage\">\n {toRender}\n </div>\n );\n }\n } catch (e) {\n console.error(`Error executing render function for action ${message.name}: ${e}`);\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {isCurrentMessage && inProgress && icons.spinnerIcon}\n <b>❌ Error executing render: {message.name}</b>\n <br />\n {e instanceof Error ? e.message : String(e)}\n </div>\n );\n }\n }\n }\n // No render function found- show the default message\n else if (!inProgress || !isCurrentMessage) {\n // Done - silent by default to avoid a series of \"done\" messages\n return null;\n } else {\n // In progress\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {icons.spinnerIcon}\n </div>\n );\n }\n }\n}\n"],"mappings":";;;;;AAAA,SAAS,wBAAwB,yBAAyB;AAG1D,SAA+B,yBAAyB;AAe5C,SACsB,KADtB;AAbL,SAAS,6BAA6B,OAA2B;AACtE,QAAM,EAAE,SAAS,YAAY,OAAO,kBAAkB,aAAa,IAAI;AACvE,QAAM,EAAE,oBAAoB,IAAI,kBAAkB;AAClD,QAAM,EAAE,MAAM,IAAI,eAAe;AAEjC,MAAI,mBAAmB,wBAAwB;AAC7C,QAAI,oBAAoB,YAAY,QAAQ,oBAAoB,QAAQ,QAAQ,QAAQ,IAAI,GAAG;AAC7F,YAAM,SAAS,oBAAoB,QAAQ,QAAQ,QAAQ,IAAI;AAE/D,UAAI,OAAO,WAAW,UAAU;AAE9B,YAAI,oBAAoB,YAAY;AAClC,iBACE,qBAAC,SAAgB,WAAW,gDACzB;AAAA,kBAAM;AAAA,YAAY;AAAA,YAAC,oBAAC,UAAK,WAAU,mBAAmB,kBAAO;AAAA,eADtD,KAEV;AAAA,QAEJ,OAEK;AACH,iBAAO;AAAA,QACT;AAAA,MACF,OAEK;AACH,cAAM,OAAO,QAAQ;AAErB,YAAI,SAA+B;AAEnC,YAAI,iBAAiB,QAAW;AAC9B,mBAAS;AAAA,QACX,WAAW,QAAQ,OAAO,SAAS,kBAAkB,SAAS;AAC5D,mBAAS;AAAA,QACX;AAEA,YAAI;AACF,gBAAM,WAAW,OAAO;AAAA,YACtB;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,UACV,CAAC;AAED,cAAI,CAAC,YAAY,WAAW,YAAY;AACtC,mBAAO;AAAA,UACT;AACA,cAAI,OAAO,aAAa,UAAU;AAChC,mBACE,qBAAC,SAAgB,WAAW,gDACzB;AAAA,kCAAoB,cAAc,MAAM;AAAA,cAAY;AAAA,cAAE;AAAA,iBAD/C,KAEV;AAAA,UAEJ,OAAO;AACL,mBACE,oBAAC,SAAgB,WAAU,oCACxB,sBADO,KAEV;AAAA,UAEJ;AAAA,QACF,SAAS,GAAP;AACA,kBAAQ,MAAM,8CAA8C,QAAQ,SAAS,GAAG;AAChF,iBACE,qBAAC,SAAgB,WAAW,gDACzB;AAAA,gCAAoB,cAAc,MAAM;AAAA,YACzC,qBAAC,OAAE;AAAA;AAAA,cAA2B,QAAQ;AAAA,eAAK;AAAA,YAC3C,oBAAC,QAAG;AAAA,YACH,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AAAA,eAJlC,KAKV;AAAA,QAEJ;AAAA,MACF;AAAA,IACF,WAES,CAAC,cAAc,CAAC,kBAAkB;AAEzC,aAAO;AAAA,IACT,OAAO;AAEL,aACE,oBAAC,SAAgB,WAAW,gDACzB,gBAAM,eADC,KAEV;AAAA,IAEJ;AAAA,EACF;AACF;","names":[]}