@copilotkit/react-ui 0.14.1 → 0.15.0-alpha.1

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 (124) hide show
  1. package/.turbo/turbo-build.log +279 -196
  2. package/CHANGELOG.md +22 -0
  3. package/dist/chunk-47SYBLI2.mjs +110 -0
  4. package/dist/chunk-47SYBLI2.mjs.map +1 -0
  5. package/dist/chunk-6H3Y2XEI.mjs +56 -0
  6. package/dist/chunk-6H3Y2XEI.mjs.map +1 -0
  7. package/dist/chunk-7YXG7D47.mjs +191 -0
  8. package/dist/chunk-7YXG7D47.mjs.map +1 -0
  9. package/dist/chunk-DN3OI5WF.mjs +72 -0
  10. package/dist/chunk-DN3OI5WF.mjs.map +1 -0
  11. package/dist/chunk-DPUPEOGG.mjs +14 -0
  12. package/dist/chunk-DPUPEOGG.mjs.map +1 -0
  13. package/dist/chunk-FZRTAML3.mjs +3 -0
  14. package/dist/chunk-GPEJCUWA.mjs +14 -0
  15. package/dist/chunk-GPEJCUWA.mjs.map +1 -0
  16. package/dist/chunk-NXWVWC33.mjs +117 -0
  17. package/dist/chunk-NXWVWC33.mjs.map +1 -0
  18. package/dist/chunk-P4GBO6MW.mjs +3 -0
  19. package/dist/chunk-P4GBO6MW.mjs.map +1 -0
  20. package/dist/chunk-QFASQEFJ.mjs +51 -0
  21. package/dist/chunk-QFASQEFJ.mjs.map +1 -0
  22. package/dist/chunk-UIRFLYXI.mjs +53 -0
  23. package/dist/chunk-UIRFLYXI.mjs.map +1 -0
  24. package/dist/chunk-WB3YULQ4.mjs +3 -0
  25. package/dist/chunk-WB3YULQ4.mjs.map +1 -0
  26. package/dist/chunk-WM6BS77F.mjs +53 -0
  27. package/dist/chunk-WM6BS77F.mjs.map +1 -0
  28. package/dist/chunk-X3Z2EVFV.mjs +26 -0
  29. package/dist/chunk-X3Z2EVFV.mjs.map +1 -0
  30. package/dist/chunk-X4T6ZUVM.mjs +14 -0
  31. package/dist/chunk-X4T6ZUVM.mjs.map +1 -0
  32. package/dist/chunk-Y2RUG4B3.mjs +21 -0
  33. package/dist/chunk-Y2RUG4B3.mjs.map +1 -0
  34. package/dist/chunk-ZVAH2Z2W.mjs +61 -0
  35. package/dist/chunk-ZVAH2Z2W.mjs.map +1 -0
  36. package/dist/components/chat/Button.d.ts +7 -0
  37. package/dist/components/chat/Button.mjs +6 -0
  38. package/dist/components/chat/Button.mjs.map +1 -0
  39. package/dist/components/chat/Chat.d.ts +95 -0
  40. package/dist/components/chat/Chat.mjs +16 -0
  41. package/dist/components/chat/Chat.mjs.map +1 -0
  42. package/dist/components/chat/ChatContext.d.ts +105 -0
  43. package/dist/components/chat/ChatContext.mjs +5 -0
  44. package/dist/components/chat/ChatContext.mjs.map +1 -0
  45. package/dist/components/chat/CodeBlock.d.ts +14 -0
  46. package/dist/components/chat/CodeBlock.mjs +6 -0
  47. package/dist/components/chat/CodeBlock.mjs.map +1 -0
  48. package/dist/components/chat/Header.d.ts +7 -0
  49. package/dist/components/chat/Header.mjs +6 -0
  50. package/dist/components/chat/Header.mjs.map +1 -0
  51. package/dist/components/chat/Icons.d.ts +15 -0
  52. package/dist/components/chat/Icons.mjs +4 -0
  53. package/dist/components/chat/Icons.mjs.map +1 -0
  54. package/dist/components/chat/Input.d.ts +7 -0
  55. package/dist/components/chat/Input.mjs +7 -0
  56. package/dist/components/chat/Input.mjs.map +1 -0
  57. package/dist/components/chat/Markdown.d.ts +8 -0
  58. package/dist/components/chat/Markdown.mjs +7 -0
  59. package/dist/components/chat/Markdown.mjs.map +1 -0
  60. package/dist/components/chat/Messages.d.ts +7 -0
  61. package/dist/components/chat/Messages.mjs +9 -0
  62. package/dist/components/chat/Messages.mjs.map +1 -0
  63. package/dist/components/chat/Popup.d.ts +9 -0
  64. package/dist/components/chat/Popup.mjs +17 -0
  65. package/dist/components/chat/Popup.mjs.map +1 -0
  66. package/dist/components/chat/Response.d.ts +7 -0
  67. package/dist/components/chat/Response.mjs +6 -0
  68. package/dist/components/chat/Response.mjs.map +1 -0
  69. package/dist/components/chat/Sidebar.d.ts +12 -0
  70. package/dist/components/chat/Sidebar.mjs +17 -0
  71. package/dist/components/chat/Sidebar.mjs.map +1 -0
  72. package/dist/components/chat/Textarea.d.ts +13 -0
  73. package/dist/components/chat/Textarea.mjs +4 -0
  74. package/dist/components/chat/Textarea.mjs.map +1 -0
  75. package/dist/components/chat/Window.d.ts +6 -0
  76. package/dist/components/chat/Window.mjs +4 -0
  77. package/dist/components/chat/Window.mjs.map +1 -0
  78. package/dist/components/chat/index.d.ts +7 -0
  79. package/dist/components/chat/index.mjs +20 -0
  80. package/dist/components/chat/index.mjs.map +1 -0
  81. package/dist/components/chat/props.d.ts +33 -0
  82. package/dist/components/chat/props.mjs +3 -0
  83. package/dist/components/chat/props.mjs.map +1 -0
  84. package/dist/components/chat-components/copilot-chat.mjs +1 -1
  85. package/dist/components/chat-components/ui/badge.d.ts +1 -1
  86. package/dist/components/index.d.ts +5 -0
  87. package/dist/components/index.mjs +18 -2
  88. package/dist/components/sidebar/copilot-sidebar-ui-provider.mjs +1 -1
  89. package/dist/components/sidebar/copilot-sidebar.mjs +1 -1
  90. package/dist/index.css +452 -0
  91. package/dist/index.css.map +1 -1
  92. package/dist/index.d.ts +5 -0
  93. package/dist/index.mjs +18 -2
  94. package/package.json +5 -5
  95. package/src/components/chat/Button.tsx +24 -0
  96. package/src/components/chat/Chat.tsx +186 -0
  97. package/src/components/chat/ChatContext.tsx +176 -0
  98. package/src/components/chat/CodeBlock.tsx +149 -0
  99. package/src/components/chat/Header.tsx +16 -0
  100. package/src/components/chat/Icons.tsx +179 -0
  101. package/src/components/chat/Input.tsx +51 -0
  102. package/src/components/chat/Markdown.tsx +62 -0
  103. package/src/components/chat/Messages.tsx +113 -0
  104. package/src/components/chat/Popup.tsx +10 -0
  105. package/src/components/chat/Response.tsx +13 -0
  106. package/src/components/chat/Sidebar.tsx +28 -0
  107. package/src/components/chat/Textarea.tsx +61 -0
  108. package/src/components/chat/Window.tsx +141 -0
  109. package/src/components/chat/index.tsx +3 -0
  110. package/src/components/chat/props.ts +36 -0
  111. package/src/components/index.ts +2 -0
  112. package/src/css/animations.css +29 -0
  113. package/src/css/button.css +54 -0
  114. package/src/css/colors.css +61 -0
  115. package/src/css/header.css +43 -0
  116. package/src/css/input.css +79 -0
  117. package/src/css/messages.css +57 -0
  118. package/src/css/popup.css +22 -0
  119. package/src/css/response.css +29 -0
  120. package/src/css/sidebar.css +34 -0
  121. package/src/css/window.css +58 -0
  122. package/src/styles.css +11 -0
  123. package/dist/chunk-U6NJWGTV.mjs +0 -3
  124. /package/dist/{chunk-U6NJWGTV.mjs.map → chunk-FZRTAML3.mjs.map} +0 -0
@@ -0,0 +1,110 @@
1
+ import React, { useCallback, useEffect } from 'react';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ // src/components/chat/Window.tsx
5
+ var Window = ({
6
+ open,
7
+ setOpen,
8
+ children,
9
+ clickOutsideToClose,
10
+ hotkey,
11
+ hitEscapeToClose
12
+ }) => {
13
+ const windowRef = React.useRef(null);
14
+ const handleClickOutside = useCallback(
15
+ (event) => {
16
+ var _a;
17
+ if (!clickOutsideToClose) {
18
+ return;
19
+ }
20
+ const parentElement = (_a = windowRef.current) == null ? void 0 : _a.parentElement;
21
+ if (open && parentElement && !parentElement.contains(event.target)) {
22
+ setOpen(false);
23
+ }
24
+ },
25
+ [clickOutsideToClose, open, setOpen]
26
+ );
27
+ const handleKeyDown = useCallback(
28
+ (event) => {
29
+ var _a;
30
+ const target = event.target;
31
+ const isInput = target.tagName === "INPUT" || target.tagName === "SELECT" || target.tagName === "TEXTAREA" || target.isContentEditable;
32
+ const isDescendantOfWrapper = (_a = windowRef.current) == null ? void 0 : _a.contains(target);
33
+ if (open && event.key === "Escape" && (!isInput || isDescendantOfWrapper) && hitEscapeToClose) {
34
+ setOpen(false);
35
+ } else if (event.key === hotkey && (isMacOS() && event.metaKey || !isMacOS() && event.ctrlKey) && (!isInput || isDescendantOfWrapper)) {
36
+ setOpen(!open);
37
+ }
38
+ },
39
+ [hitEscapeToClose, hotkey, open, setOpen]
40
+ );
41
+ const adjustForMobile = useCallback(() => {
42
+ const copilotKitWindow = windowRef.current;
43
+ const vv = window.visualViewport;
44
+ if (!copilotKitWindow || !vv) {
45
+ return;
46
+ }
47
+ if (window.innerWidth < 640 && open) {
48
+ copilotKitWindow.style.height = `${vv.height}px`;
49
+ copilotKitWindow.style.left = `${vv.offsetLeft}px`;
50
+ copilotKitWindow.style.top = `${vv.offsetTop}px`;
51
+ document.body.style.position = "fixed";
52
+ document.body.style.width = "100%";
53
+ document.body.style.height = `${window.innerHeight}px`;
54
+ document.body.style.overflow = "hidden";
55
+ document.body.style.touchAction = "none";
56
+ document.body.addEventListener("touchmove", preventScroll, {
57
+ passive: false
58
+ });
59
+ } else {
60
+ copilotKitWindow.style.height = "";
61
+ copilotKitWindow.style.left = "";
62
+ copilotKitWindow.style.top = "";
63
+ document.body.style.position = "";
64
+ document.body.style.height = "";
65
+ document.body.style.width = "";
66
+ document.body.style.overflow = "";
67
+ document.body.style.top = "";
68
+ document.body.style.touchAction = "";
69
+ document.body.removeEventListener("touchmove", preventScroll);
70
+ }
71
+ }, [open]);
72
+ useEffect(() => {
73
+ document.addEventListener("mousedown", handleClickOutside);
74
+ document.addEventListener("keydown", handleKeyDown);
75
+ if (window.visualViewport) {
76
+ window.visualViewport.addEventListener("resize", adjustForMobile);
77
+ adjustForMobile();
78
+ }
79
+ return () => {
80
+ document.removeEventListener("mousedown", handleClickOutside);
81
+ document.removeEventListener("keydown", handleKeyDown);
82
+ if (window.visualViewport) {
83
+ window.visualViewport.removeEventListener("resize", adjustForMobile);
84
+ }
85
+ };
86
+ }, [adjustForMobile, handleClickOutside, handleKeyDown]);
87
+ return /* @__PURE__ */ jsx("div", { className: `copilotKitWindow${open ? " open" : ""}`, ref: windowRef, children });
88
+ };
89
+ var preventScroll = (event) => {
90
+ let targetElement = event.target;
91
+ const hasParentWithClass = (element, className) => {
92
+ while (element && element !== document.body) {
93
+ if (element.classList.contains(className)) {
94
+ return true;
95
+ }
96
+ element = element.parentElement;
97
+ }
98
+ return false;
99
+ };
100
+ if (!hasParentWithClass(targetElement, "copilotKitMessages")) {
101
+ event.preventDefault();
102
+ }
103
+ };
104
+ function isMacOS() {
105
+ return /Mac|iMac|Macintosh/i.test(navigator.userAgent);
106
+ }
107
+
108
+ export { Window };
109
+ //# sourceMappingURL=out.js.map
110
+ //# sourceMappingURL=chunk-47SYBLI2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/Window.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useCallback, useEffect } from \"react\";\nimport { WindowProps } from \"./props\";\n\nexport const Window = ({\n open,\n setOpen,\n children,\n clickOutsideToClose,\n hotkey,\n hitEscapeToClose,\n}: WindowProps) => {\n const windowRef = React.useRef<HTMLDivElement>(null);\n\n const handleClickOutside = useCallback(\n (event: MouseEvent) => {\n if (!clickOutsideToClose) {\n return;\n }\n\n const parentElement = windowRef.current?.parentElement;\n\n if (open && parentElement && !parentElement.contains(event.target as any)) {\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 === hotkey &&\n ((isMacOS() && event.metaKey) || (!isMacOS() && event.ctrlKey)) &&\n (!isInput || isDescendantOfWrapper)\n ) {\n setOpen(!open);\n }\n },\n [hitEscapeToClose, hotkey, 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"]}
@@ -0,0 +1,56 @@
1
+ import { OpenIcon, CloseIcon, HeaderCloseIcon, SendIcon, ActivityIcon, SpinnerIcon, StopIcon, RegenerateIcon } from './chunk-7YXG7D47.mjs';
2
+ import { __spreadValues, __spreadProps } from './chunk-MRXNTQOX.mjs';
3
+ import React, { useMemo } from 'react';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var ChatContext = React.createContext(void 0);
7
+ function useChatContext() {
8
+ const context = React.useContext(ChatContext);
9
+ if (context === void 0) {
10
+ throw new Error(
11
+ "Context not found. Did you forget to wrap your app in a <ChatContextProvider> component?"
12
+ );
13
+ }
14
+ return context;
15
+ }
16
+ var ChatContextProvider = ({
17
+ // temperature,
18
+ // instructions,
19
+ // maxFeedback,
20
+ labels,
21
+ icons,
22
+ children
23
+ }) => {
24
+ const context = useMemo(
25
+ () => ({
26
+ labels: __spreadValues(__spreadValues({}, {
27
+ initial: "",
28
+ title: "CopilotKit",
29
+ placeholder: "Type a message...",
30
+ thinking: "Thinking...",
31
+ done: "\u2705 Done",
32
+ error: "\u274C An error occurred. Please try again.",
33
+ stopGenerating: "Stop generating",
34
+ regenerateResponse: "Regenerate response"
35
+ }), labels),
36
+ icons: __spreadProps(__spreadValues({}, {
37
+ openIcon: OpenIcon,
38
+ closeIcon: CloseIcon,
39
+ headerCloseIcon: HeaderCloseIcon,
40
+ sendIcon: SendIcon,
41
+ activityIcon: ActivityIcon,
42
+ spinnerIcon: SpinnerIcon,
43
+ stopIcon: StopIcon,
44
+ regenerateIcon: RegenerateIcon
45
+ }), {
46
+ icons
47
+ })
48
+ }),
49
+ [labels, icons]
50
+ );
51
+ return /* @__PURE__ */ jsx(ChatContext.Provider, { value: context, children });
52
+ };
53
+
54
+ export { ChatContext, ChatContextProvider, useChatContext };
55
+ //# sourceMappingURL=out.js.map
56
+ //# sourceMappingURL=chunk-6H3Y2XEI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/ChatContext.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,SAAS,eAAe;AA8KtB;AA7DF,IAAM,cAAc,MAAM,cAAuC,MAAS;AAE1E,SAAS,iBAA8B;AAC5C,QAAM,UAAU,MAAM,WAAW,WAAW;AAC5C,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAWO,IAAM,sBAAkD,CAAC;AAAA;AAAA;AAAA;AAAA,EAI9D;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,MACL,QAAQ,kCACH;AAAA,QACD,SAAS;AAAA,QACT,OAAO;AAAA,QACP,aAAa;AAAA,QACb,UAAU;AAAA,QACV,MAAM;AAAA,QACN,OAAO;AAAA,QACP,gBAAgB;AAAA,QAChB,oBAAoB;AAAA,MACtB,IACG;AAAA,MAGL,OAAO,iCACF;AAAA,QACD,UAAuB;AAAA,QACvB,WAAwB;AAAA,QACxB,iBAA8B;AAAA,QAC9B,UAAuB;AAAA,QACvB,cAA2B;AAAA,QAC3B,aAA0B;AAAA,QAC1B,UAAuB;AAAA,QACvB,gBAA6B;AAAA,MAC/B,IAVK;AAAA,QAWL;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,QAAQ,KAAK;AAAA,EAChB;AACA,SAAO,oBAAC,YAAY,UAAZ,EAAqB,OAAO,SAAU,UAAS;AACzD","sourcesContent":["import React, { useMemo } from \"react\";\nimport * as DefaultIcons from \"./Icons\";\n\n/**\n * Icons for CopilotKitChat component.\n */\nexport interface CopilotKitChatIcons {\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/**\n * Labels for CopilotKitChat component.\n */\nexport interface CopilotKitChatLabels {\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 while the chat GPT is \"thinking\".\n * @default \"Thinking...\"\n */\n thinking?: string;\n\n /**\n * The message to display when the chat is done executing a function.\n * @default \"✅ Done\"\n */\n done?: 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<CopilotKitChatLabels>;\n icons: Required<CopilotKitChatIcons>;\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?: CopilotKitChatLabels;\n icons?: CopilotKitChatIcons;\n children?: React.ReactNode;\n}\n\nexport const ChatContextProvider: React.FC<ChatContextProps> = ({\n // temperature,\n // instructions,\n // maxFeedback,\n labels,\n icons,\n children,\n}) => {\n const context = useMemo(\n () => ({\n labels: {\n ...{\n initial: \"\",\n title: \"CopilotKit\",\n placeholder: \"Type a message...\",\n thinking: \"Thinking...\",\n done: \"✅ Done\",\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 },\n icons,\n },\n }),\n [labels, icons],\n );\n return <ChatContext.Provider value={context}>{children}</ChatContext.Provider>;\n};\n"]}
@@ -0,0 +1,191 @@
1
+ import { __objRest, __spreadProps, __spreadValues } from './chunk-MRXNTQOX.mjs';
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+
4
+ var OpenIcon = /* @__PURE__ */ jsx(
5
+ "svg",
6
+ {
7
+ xmlns: "http://www.w3.org/2000/svg",
8
+ viewBox: "0 0 24 24",
9
+ fill: "currentColor",
10
+ width: "24",
11
+ height: "24",
12
+ children: /* @__PURE__ */ jsx("g", { transform: "translate(24, 0) scale(-1, 1)", children: /* @__PURE__ */ jsx(
13
+ "path",
14
+ {
15
+ fillRule: "evenodd",
16
+ d: "M5.337 21.718a6.707 6.707 0 01-.533-.074.75.75 0 01-.44-1.223 3.73 3.73 0 00.814-1.686c.023-.115-.022-.317-.254-.543C3.274 16.587 2.25 14.41 2.25 12c0-5.03 4.428-9 9.75-9s9.75 3.97 9.75 9c0 5.03-4.428 9-9.75 9-.833 0-1.643-.097-2.417-.279a6.721 6.721 0 01-4.246.997z",
17
+ clipRule: "evenodd"
18
+ }
19
+ ) })
20
+ }
21
+ );
22
+ var CloseIcon = /* @__PURE__ */ jsx(
23
+ "svg",
24
+ {
25
+ xmlns: "http://www.w3.org/2000/svg",
26
+ fill: "none",
27
+ viewBox: "0 0 24 24",
28
+ strokeWidth: "1.5",
29
+ stroke: "currentColor",
30
+ width: "24",
31
+ height: "24",
32
+ children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19.5 8.25l-7.5 7.5-7.5-7.5" })
33
+ }
34
+ );
35
+ var HeaderCloseIcon = /* @__PURE__ */ jsx(
36
+ "svg",
37
+ {
38
+ xmlns: "http://www.w3.org/2000/svg",
39
+ fill: "none",
40
+ viewBox: "0 0 24 24",
41
+ strokeWidth: "1.5",
42
+ stroke: "currentColor",
43
+ width: "24",
44
+ height: "24",
45
+ children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" })
46
+ }
47
+ );
48
+ var SendIcon = /* @__PURE__ */ jsx(
49
+ "svg",
50
+ {
51
+ xmlns: "http://www.w3.org/2000/svg",
52
+ fill: "none",
53
+ viewBox: "0 0 24 24",
54
+ strokeWidth: 1.5,
55
+ stroke: "currentColor",
56
+ width: "24",
57
+ height: "24",
58
+ children: /* @__PURE__ */ jsx(
59
+ "path",
60
+ {
61
+ strokeLinecap: "round",
62
+ strokeLinejoin: "round",
63
+ d: "M6 12L3.269 3.126A59.768 59.768 0 0121.485 12 59.77 59.77 0 013.27 20.876L5.999 12zm0 0h7.5"
64
+ }
65
+ )
66
+ }
67
+ );
68
+ var SpinnerIcon = /* @__PURE__ */ jsxs(
69
+ "svg",
70
+ {
71
+ style: {
72
+ animation: "copilotKitSpinAnimation 1s linear infinite",
73
+ color: "rgb(107 114 128)"
74
+ },
75
+ width: "24",
76
+ height: "24",
77
+ xmlns: "http://www.w3.org/2000/svg",
78
+ fill: "none",
79
+ viewBox: "0 0 24 24",
80
+ children: [
81
+ /* @__PURE__ */ jsx(
82
+ "circle",
83
+ {
84
+ style: { opacity: 0.25 },
85
+ cx: "12",
86
+ cy: "12",
87
+ r: "10",
88
+ stroke: "currentColor",
89
+ strokeWidth: "4"
90
+ }
91
+ ),
92
+ /* @__PURE__ */ jsx(
93
+ "path",
94
+ {
95
+ style: { opacity: 0.75 },
96
+ fill: "currentColor",
97
+ d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
98
+ }
99
+ )
100
+ ]
101
+ }
102
+ );
103
+ var ActivityIcon = /* @__PURE__ */ jsxs(
104
+ "svg",
105
+ {
106
+ style: {
107
+ display: "inline-block",
108
+ marginLeft: "0.25rem",
109
+ marginRight: "0.25rem"
110
+ },
111
+ height: "24",
112
+ width: "24",
113
+ viewBox: "0 0 27 27",
114
+ xmlns: "http://www.w3.org/2000/svg",
115
+ fill: "currentColor",
116
+ children: [
117
+ /* @__PURE__ */ jsx("circle", { className: "copilotKitActivityDot1", cx: "4", cy: "12", r: "3" }),
118
+ /* @__PURE__ */ jsx("circle", { className: "copilotKitActivityDot1 copilotKitActivityDot2", cx: "12", cy: "12", r: "3" }),
119
+ /* @__PURE__ */ jsx("circle", { className: "copilotKitActivityDot1 copilotKitActivityDot3", cx: "20", cy: "12", r: "3" })
120
+ ]
121
+ }
122
+ );
123
+ function CheckIcon(_a) {
124
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
125
+ return /* @__PURE__ */ jsx(
126
+ "svg",
127
+ __spreadProps(__spreadValues({
128
+ xmlns: "http://www.w3.org/2000/svg",
129
+ viewBox: "0 0 256 256",
130
+ fill: "currentColor",
131
+ style: { height: "1rem", width: "1rem" },
132
+ className
133
+ }, props), {
134
+ children: /* @__PURE__ */ jsx("path", { d: "m229.66 77.66-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69 218.34 66.34a8 8 0 0 1 11.32 11.32Z" })
135
+ })
136
+ );
137
+ }
138
+ function DownloadIcon(_a) {
139
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
140
+ return /* @__PURE__ */ jsx(
141
+ "svg",
142
+ __spreadProps(__spreadValues({
143
+ xmlns: "http://www.w3.org/2000/svg",
144
+ viewBox: "0 0 256 256",
145
+ fill: "currentColor",
146
+ style: { height: "1rem", width: "1rem" },
147
+ className
148
+ }, props), {
149
+ children: /* @__PURE__ */ jsx("path", { d: "M224 152v56a16 16 0 0 1-16 16H48a16 16 0 0 1-16-16v-56a8 8 0 0 1 16 0v56h160v-56a8 8 0 0 1 16 0Zm-101.66 5.66a8 8 0 0 0 11.32 0l40-40a8 8 0 0 0-11.32-11.32L136 132.69V40a8 8 0 0 0-16 0v92.69l-26.34-26.35a8 8 0 0 0-11.32 11.32Z" })
150
+ })
151
+ );
152
+ }
153
+ function CopyIcon(_a) {
154
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
155
+ return /* @__PURE__ */ jsx(
156
+ "svg",
157
+ __spreadProps(__spreadValues({
158
+ xmlns: "http://www.w3.org/2000/svg",
159
+ viewBox: "0 0 256 256",
160
+ fill: "currentColor",
161
+ style: { height: "1rem", width: "1rem" },
162
+ className
163
+ }, props), {
164
+ children: /* @__PURE__ */ jsx("path", { d: "M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8Zm-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z" })
165
+ })
166
+ );
167
+ }
168
+ var StopIcon = /* @__PURE__ */ jsx(
169
+ "svg",
170
+ {
171
+ xmlns: "http://www.w3.org/2000/svg",
172
+ viewBox: "0 0 256 256",
173
+ fill: "currentColor",
174
+ style: { height: "1rem", width: "1rem" },
175
+ children: /* @__PURE__ */ jsx("path", { d: "M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24Zm0 192a88 88 0 1 1 88-88 88.1 88.1 0 0 1-88 88Zm24-120h-48a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8Zm-8 48h-32v-32h32Z" })
176
+ }
177
+ );
178
+ var RegenerateIcon = /* @__PURE__ */ jsx(
179
+ "svg",
180
+ {
181
+ xmlns: "http://www.w3.org/2000/svg",
182
+ viewBox: "0 0 256 256",
183
+ fill: "currentColor",
184
+ style: { height: "1rem", width: "1rem" },
185
+ children: /* @__PURE__ */ jsx("path", { d: "M197.67 186.37a8 8 0 0 1 0 11.29C196.58 198.73 170.82 224 128 224c-37.39 0-64.53-22.4-80-39.85V208a8 8 0 0 1-16 0v-48a8 8 0 0 1 8-8h48a8 8 0 0 1 0 16H55.44C67.76 183.35 93 208 128 208c36 0 58.14-21.46 58.36-21.68a8 8 0 0 1 11.31.05ZM216 40a8 8 0 0 0-8 8v23.85C192.53 54.4 165.39 32 128 32c-42.82 0-68.58 25.27-69.66 26.34a8 8 0 0 0 11.3 11.34C69.86 69.46 92 48 128 48c35 0 60.24 24.65 72.56 40H168a8 8 0 0 0 0 16h48a8 8 0 0 0 8-8V48a8 8 0 0 0-8-8Z" })
186
+ }
187
+ );
188
+
189
+ export { ActivityIcon, CheckIcon, CloseIcon, CopyIcon, DownloadIcon, HeaderCloseIcon, OpenIcon, RegenerateIcon, SendIcon, SpinnerIcon, StopIcon };
190
+ //# sourceMappingURL=out.js.map
191
+ //# sourceMappingURL=chunk-7YXG7D47.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/Icons.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\n\nexport const OpenIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <g transform=\"translate(24, 0) scale(-1, 1)\">\n <path\n fillRule=\"evenodd\"\n d=\"M5.337 21.718a6.707 6.707 0 01-.533-.074.75.75 0 01-.44-1.223 3.73 3.73 0 00.814-1.686c.023-.115-.022-.317-.254-.543C3.274 16.587 2.25 14.41 2.25 12c0-5.03 4.428-9 9.75-9s9.75 3.97 9.75 9c0 5.03-4.428 9-9.75 9-.833 0-1.643-.097-2.417-.279a6.721 6.721 0 01-4.246.997z\"\n clipRule=\"evenodd\"\n />\n </g>\n </svg>\n);\n\nexport const CloseIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"1.5\"\n stroke=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\" />\n </svg>\n);\n\nexport const HeaderCloseIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"1.5\"\n stroke=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n);\n\nexport const SendIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth={1.5}\n stroke=\"currentColor\"\n width=\"24\"\n height=\"24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 12L3.269 3.126A59.768 59.768 0 0121.485 12 59.77 59.77 0 013.27 20.876L5.999 12zm0 0h7.5\"\n />\n </svg>\n);\n\nexport const SpinnerIcon = (\n <svg\n style={{\n animation: \"copilotKitSpinAnimation 1s linear infinite\",\n color: \"rgb(107 114 128)\",\n }}\n width=\"24\"\n height=\"24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n style={{ opacity: 0.25 }}\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n style={{ opacity: 0.75 }}\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n);\n\nexport const ActivityIcon = (\n <svg\n style={{\n display: \"inline-block\",\n marginLeft: \"0.25rem\",\n marginRight: \"0.25rem\",\n }}\n height=\"24\"\n width=\"24\"\n viewBox=\"0 0 27 27\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n >\n <circle className=\"copilotKitActivityDot1\" cx=\"4\" cy=\"12\" r=\"3\" />\n <circle className=\"copilotKitActivityDot1 copilotKitActivityDot2\" cx=\"12\" cy=\"12\" r=\"3\" />\n <circle className=\"copilotKitActivityDot1 copilotKitActivityDot3\" cx=\"20\" cy=\"12\" r=\"3\" />\n </svg>\n);\n\nexport function CheckIcon({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n style={{ height: \"1rem\", width: \"1rem\" }}\n className={className}\n {...props}\n >\n <path d=\"m229.66 77.66-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69 218.34 66.34a8 8 0 0 1 11.32 11.32Z\" />\n </svg>\n );\n}\n\nexport function DownloadIcon({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n style={{ height: \"1rem\", width: \"1rem\" }}\n className={className}\n {...props}\n >\n <path d=\"M224 152v56a16 16 0 0 1-16 16H48a16 16 0 0 1-16-16v-56a8 8 0 0 1 16 0v56h160v-56a8 8 0 0 1 16 0Zm-101.66 5.66a8 8 0 0 0 11.32 0l40-40a8 8 0 0 0-11.32-11.32L136 132.69V40a8 8 0 0 0-16 0v92.69l-26.34-26.35a8 8 0 0 0-11.32 11.32Z\" />\n </svg>\n );\n}\n\nexport function CopyIcon({ className, ...props }: React.ComponentProps<\"svg\">) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n style={{ height: \"1rem\", width: \"1rem\" }}\n className={className}\n {...props}\n >\n <path d=\"M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8Zm-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z\" />\n </svg>\n );\n}\n\nexport const StopIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n style={{ height: \"1rem\", width: \"1rem\" }}\n >\n <path d=\"M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24Zm0 192a88 88 0 1 1 88-88 88.1 88.1 0 0 1-88 88Zm24-120h-48a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8Zm-8 48h-32v-32h32Z\" />\n </svg>\n);\n\nexport const RegenerateIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n style={{ height: \"1rem\", width: \"1rem\" }}\n >\n <path d=\"M197.67 186.37a8 8 0 0 1 0 11.29C196.58 198.73 170.82 224 128 224c-37.39 0-64.53-22.4-80-39.85V208a8 8 0 0 1-16 0v-48a8 8 0 0 1 8-8h48a8 8 0 0 1 0 16H55.44C67.76 183.35 93 208 128 208c36 0 58.14-21.46 58.36-21.68a8 8 0 0 1 11.31.05ZM216 40a8 8 0 0 0-8 8v23.85C192.53 54.4 165.39 32 128 32c-42.82 0-68.58 25.27-69.66 26.34a8 8 0 0 0 11.3 11.34C69.86 69.46 92 48 128 48c35 0 60.24 24.65 72.56 40H168a8 8 0 0 0 0 16h48a8 8 0 0 0 8-8V48a8 8 0 0 0-8-8Z\" />\n </svg>\n);\n"]}
@@ -0,0 +1,72 @@
1
+ import { Window } from './chunk-47SYBLI2.mjs';
2
+ import { Input } from './chunk-QFASQEFJ.mjs';
3
+ import { Messages } from './chunk-ZVAH2Z2W.mjs';
4
+ import { ResponseButton } from './chunk-GPEJCUWA.mjs';
5
+ import { Button } from './chunk-Y2RUG4B3.mjs';
6
+ import { Header } from './chunk-DPUPEOGG.mjs';
7
+ import { ChatContextProvider } from './chunk-6H3Y2XEI.mjs';
8
+ import { __async } from './chunk-MRXNTQOX.mjs';
9
+ import React from 'react';
10
+ import { useCopilotChat } from '@copilotkit/react-core';
11
+ import { nanoid } from 'nanoid';
12
+ import { jsx, jsxs } from 'react/jsx-runtime';
13
+
14
+ var CopilotKitChat = ({
15
+ instructions,
16
+ defaultOpen = false,
17
+ clickOutsideToClose = true,
18
+ hitEscapeToClose = true,
19
+ onSetOpen,
20
+ hotkey = "e",
21
+ icons,
22
+ labels,
23
+ makeSystemMessage,
24
+ showResponseButton = true,
25
+ Window: Window2 = Window,
26
+ Button: Button2 = Button,
27
+ Header: Header2 = Header,
28
+ Messages: Messages2 = Messages,
29
+ Input: Input2 = Input,
30
+ ResponseButton: ResponseButton2 = ResponseButton,
31
+ className
32
+ }) => {
33
+ const { visibleMessages, append, reload, stop, isLoading, input, setInput } = useCopilotChat({
34
+ id: nanoid(),
35
+ makeSystemMessage,
36
+ additionalInstructions: instructions
37
+ });
38
+ const [openState, setOpenState] = React.useState(defaultOpen);
39
+ const setOpen = (open) => {
40
+ onSetOpen == null ? void 0 : onSetOpen(open);
41
+ setOpenState(open);
42
+ };
43
+ const sendMessage = (message) => __async(void 0, null, function* () {
44
+ append({
45
+ id: nanoid(),
46
+ content: message,
47
+ role: "user"
48
+ });
49
+ });
50
+ return /* @__PURE__ */ jsx(ChatContextProvider, { icons, labels, children: /* @__PURE__ */ jsxs("div", { className, children: [
51
+ /* @__PURE__ */ jsx(Button2, { open: openState, setOpen }),
52
+ /* @__PURE__ */ jsxs(
53
+ Window2,
54
+ {
55
+ open: openState,
56
+ setOpen,
57
+ clickOutsideToClose,
58
+ hotkey,
59
+ hitEscapeToClose,
60
+ children: [
61
+ /* @__PURE__ */ jsx(Header2, { open: openState, setOpen }),
62
+ /* @__PURE__ */ jsx(Messages2, { messages: visibleMessages, inProgress: isLoading }),
63
+ /* @__PURE__ */ jsx(Input2, { inProgress: isLoading, onSend: sendMessage, children: showResponseButton && visibleMessages.length > 0 && /* @__PURE__ */ jsx(ResponseButton2, { onClick: isLoading ? stop : reload, inProgress: isLoading }) })
64
+ ]
65
+ }
66
+ )
67
+ ] }) });
68
+ };
69
+
70
+ export { CopilotKitChat };
71
+ //# sourceMappingURL=out.js.map
72
+ //# sourceMappingURL=chunk-DN3OI5WF.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/Chat.tsx"],"names":["Window","Button","Header","Messages","Input","ResponseButton"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAElB,SAAgC,sBAAsB;AActD,SAAS,cAAc;AAsJf,cACA,YADA;AA3CD,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA,cAAc;AAAA,EACd,sBAAsB;AAAA,EACtB,mBAAmB;AAAA,EACnB;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB,QAAAA,UAAS;AAAA,EACT,QAAAC,UAAS;AAAA,EACT,QAAAC,UAAS;AAAA,EACT,UAAAC,YAAW;AAAA,EACX,OAAAC,SAAQ;AAAA,EACR,gBAAAC,kBAAiB;AAAA,EACjB;AACF,MAAM;AACJ,QAAM,EAAE,iBAAiB,QAAQ,QAAQ,MAAM,WAAW,OAAO,SAAS,IAAI,eAAe;AAAA,IAC3F,IAAI,OAAO;AAAA,IACX;AAAA,IACA,wBAAwB;AAAA,EAC1B,CAAC;AAED,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,WAAW;AAE5D,QAAM,UAAU,CAAC,SAAkB;AACjC,2CAAY;AACZ,iBAAa,IAAI;AAAA,EACnB;AAEA,QAAM,cAAc,CAAO,YAAoB;AAC7C,WAAO;AAAA,MACL,IAAI,OAAO;AAAA,MACX,SAAS;AAAA,MACT,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAEA,SACE,oBAAC,uBAAoB,OAAc,QACjC,+BAAC,SAAI,WACH;AAAA,wBAACJ,SAAA,EAAO,MAAM,WAAW,SAAkB;AAAA,IAC3C;AAAA,MAACD;AAAA,MAAA;AAAA,QACC,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEA;AAAA,8BAACE,SAAA,EAAO,MAAM,WAAW,SAAkB;AAAA,UAC3C,oBAACC,WAAA,EAAS,UAAU,iBAAiB,YAAY,WAAW;AAAA,UAC5D,oBAACC,QAAA,EAAM,YAAY,WAAW,QAAQ,aACnC,gCAAsB,gBAAgB,SAAS,KAC9C,oBAACC,iBAAA,EAAe,SAAS,YAAY,OAAO,QAAQ,YAAY,WAAW,GAE/E;AAAA;AAAA;AAAA,IACF;AAAA,KACF,GACF;AAEJ","sourcesContent":["import React from \"react\";\nimport { CopilotKitChatIcons, ChatContextProvider, CopilotKitChatLabels } from \"./ChatContext\";\nimport { SystemMessageFunction, useCopilotChat } from \"@copilotkit/react-core\";\nimport {\n ButtonProps,\n HeaderProps,\n WindowProps,\n MessagesProps,\n InputProps,\n ResponseButtonProps,\n} from \"./props\";\nimport { Window as DefaultWindow } from \"./Window\";\nimport { Button as DefaultButton } from \"./Button\";\nimport { Header as DefaultHeader } from \"./Header\";\nimport { Messages as DefaultMessages } from \"./Messages\";\nimport { Input as DefaultInput } from \"./Input\";\nimport { nanoid } from \"nanoid\";\nimport { ResponseButton as DefaultResponseButton } from \"./Response\";\n\n/**\n * Props for CopilotKitChat component.\n */\nexport interface CopilotKitChatProps {\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 * Whether the chat window should be open by default.\n * @default false\n */\n defaultOpen?: boolean;\n\n /**\n * If the chat window should close when the user clicks outside of it.\n * @default true\n */\n clickOutsideToClose?: boolean;\n\n /**\n * If the chat window should close when the user hits the Escape key.\n * @default true\n */\n hitEscapeToClose?: boolean;\n\n /**\n * A callback that gets called when the chat window opens or closes.\n */\n onSetOpen?: (open: boolean) => void;\n\n /**\n * The hotkey to open the chat window.\n * Uses Command-<hotkey> on a Mac and Ctrl-<hotkey> on Windows.\n * @default \"e\"\n */\n hotkey?: string;\n\n /**\n * Icons can be used to set custom icons for the chat window.\n */\n icons?: CopilotKitChatIcons;\n\n /**\n * Labels can be used to set custom labels for the chat window.\n */\n labels?: CopilotKitChatLabels;\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 Window component to use instead of the default.\n */\n Window?: React.ComponentType<WindowProps>;\n\n /**\n * A custom Button component to use instead of the default.\n */\n Button?: React.ComponentType<ButtonProps>;\n\n /**\n * A custom Header component to use instead of the default.\n */\n Header?: React.ComponentType<HeaderProps>;\n\n /**\n * A custom Messages component to use instead of the default.\n */\n Messages?: React.ComponentType<MessagesProps>;\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\nexport const CopilotKitChat: React.FC<CopilotKitChatProps> = ({\n instructions,\n defaultOpen = false,\n clickOutsideToClose = true,\n hitEscapeToClose = true,\n onSetOpen,\n hotkey = \"e\",\n icons,\n labels,\n makeSystemMessage,\n showResponseButton = true,\n Window = DefaultWindow,\n Button = DefaultButton,\n Header = DefaultHeader,\n Messages = DefaultMessages,\n Input = DefaultInput,\n ResponseButton = DefaultResponseButton,\n className,\n}) => {\n const { visibleMessages, append, reload, stop, isLoading, input, setInput } = useCopilotChat({\n id: nanoid(),\n makeSystemMessage,\n additionalInstructions: instructions,\n });\n\n const [openState, setOpenState] = React.useState(defaultOpen);\n\n const setOpen = (open: boolean) => {\n onSetOpen?.(open);\n setOpenState(open);\n };\n\n const sendMessage = async (message: string) => {\n append({\n id: nanoid(),\n content: message,\n role: \"user\",\n });\n };\n\n return (\n <ChatContextProvider icons={icons} labels={labels}>\n <div className={className}>\n <Button open={openState} setOpen={setOpen}></Button>\n <Window\n open={openState}\n setOpen={setOpen}\n clickOutsideToClose={clickOutsideToClose}\n hotkey={hotkey}\n hitEscapeToClose={hitEscapeToClose}\n >\n <Header open={openState} setOpen={setOpen} />\n <Messages messages={visibleMessages} inProgress={isLoading} />\n <Input inProgress={isLoading} onSend={sendMessage}>\n {showResponseButton && visibleMessages.length > 0 && (\n <ResponseButton onClick={isLoading ? stop : reload} inProgress={isLoading} />\n )}\n </Input>\n </Window>\n </div>\n </ChatContextProvider>\n );\n};\n"]}
@@ -0,0 +1,14 @@
1
+ import { useChatContext } from './chunk-6H3Y2XEI.mjs';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+
4
+ var Header = ({ setOpen }) => {
5
+ const context = useChatContext();
6
+ return /* @__PURE__ */ jsxs("div", { className: "copilotKitHeader", children: [
7
+ /* @__PURE__ */ jsx("div", { children: context.labels.title }),
8
+ /* @__PURE__ */ jsx("button", { onClick: () => setOpen(false), "aria-label": "Close", children: context.icons.headerCloseIcon })
9
+ ] });
10
+ };
11
+
12
+ export { Header };
13
+ //# sourceMappingURL=out.js.map
14
+ //# sourceMappingURL=chunk-DPUPEOGG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/Header.tsx"],"names":[],"mappings":";;;;;AAQI,SACE,KADF;AAJG,IAAM,SAAgC,CAAC,EAAE,QAAQ,MAAM;AAC5D,QAAM,UAAU,eAAe;AAE/B,SACE,qBAAC,SAAI,WAAU,oBACb;AAAA,wBAAC,SAAK,kBAAQ,OAAO,OAAM;AAAA,IAC3B,oBAAC,YAAO,SAAS,MAAM,QAAQ,KAAK,GAAG,cAAW,SAC/C,kBAAQ,MAAM,iBACjB;AAAA,KACF;AAEJ","sourcesContent":["import React from \"react\";\nimport { HeaderProps } from \"./props\";\nimport { useChatContext } from \"./ChatContext\";\n\nexport const Header: React.FC<HeaderProps> = ({ setOpen }) => {\n const context = useChatContext();\n\n return (\n <div className=\"copilotKitHeader\">\n <div>{context.labels.title}</div>\n <button onClick={() => setOpen(false)} aria-label=\"Close\">\n {context.icons.headerCloseIcon}\n </button>\n </div>\n );\n};\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=out.js.map
3
+ //# sourceMappingURL=chunk-FZRTAML3.mjs.map
@@ -0,0 +1,14 @@
1
+ import { useChatContext } from './chunk-6H3Y2XEI.mjs';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+
4
+ var ResponseButton = ({ onClick, inProgress }) => {
5
+ const context = useChatContext();
6
+ return /* @__PURE__ */ jsxs("button", { onClick, className: "copilotKitResponseButton", children: [
7
+ /* @__PURE__ */ jsx("span", { children: inProgress ? context.icons.stopIcon : context.icons.regenerateIcon }),
8
+ inProgress ? context.labels.stopGenerating : context.labels.regenerateResponse
9
+ ] });
10
+ };
11
+
12
+ export { ResponseButton };
13
+ //# sourceMappingURL=out.js.map
14
+ //# sourceMappingURL=chunk-GPEJCUWA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/Response.tsx"],"names":[],"mappings":";;;;;AAOI,SACE,KADF;AAHG,IAAM,iBAAgD,CAAC,EAAE,SAAS,WAAW,MAAM;AACxF,QAAM,UAAU,eAAe;AAC/B,SACE,qBAAC,YAAO,SAAkB,WAAU,4BAClC;AAAA,wBAAC,UAAM,uBAAa,QAAQ,MAAM,WAAW,QAAQ,MAAM,gBAAe;AAAA,IACzE,aAAa,QAAQ,OAAO,iBAAiB,QAAQ,OAAO;AAAA,KAC/D;AAEJ","sourcesContent":["import React from \"react\";\nimport { useChatContext } from \"./ChatContext\";\nimport { ResponseButtonProps } from \"./props\";\n\nexport const ResponseButton: React.FC<ResponseButtonProps> = ({ onClick, inProgress }) => {\n const context = useChatContext();\n return (\n <button onClick={onClick} className=\"copilotKitResponseButton\">\n <span>{inProgress ? context.icons.stopIcon : context.icons.regenerateIcon}</span>\n {inProgress ? context.labels.stopGenerating : context.labels.regenerateResponse}\n </button>\n );\n};\n"]}