@copilotkit/react-ui 0.22.0 → 0.36.0-mme-push-to-talk.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 (152) hide show
  1. package/.turbo/turbo-build.log +204 -178
  2. package/CHANGELOG.md +12 -0
  3. package/dist/chunk-5ASYNEHX.mjs +53 -0
  4. package/dist/chunk-5ASYNEHX.mjs.map +1 -0
  5. package/dist/{chunk-MBYUBR3F.mjs → chunk-A7J4KGLP.mjs} +2 -2
  6. package/dist/chunk-DMAQBCTX.mjs +95 -0
  7. package/dist/chunk-DMAQBCTX.mjs.map +1 -0
  8. package/dist/{chunk-KE3N45ZY.mjs → chunk-DRNCOXZO.mjs} +3 -4
  9. package/dist/chunk-DRNCOXZO.mjs.map +1 -0
  10. package/dist/{chunk-7YXG7D47.mjs → chunk-FWTPMPSN.mjs} +37 -2
  11. package/dist/chunk-FWTPMPSN.mjs.map +1 -0
  12. package/dist/chunk-JPX5ODUX.mjs +266 -0
  13. package/dist/chunk-JPX5ODUX.mjs.map +1 -0
  14. package/dist/chunk-KZME7C5S.mjs +76 -0
  15. package/dist/chunk-KZME7C5S.mjs.map +1 -0
  16. package/dist/{chunk-7JYUCW7H.mjs → chunk-MWFHYCQB.mjs} +2 -2
  17. package/dist/chunk-PEDSZYHE.mjs +36 -0
  18. package/dist/chunk-PEDSZYHE.mjs.map +1 -0
  19. package/dist/{chunk-YEHO5VMA.mjs → chunk-PGZDQT74.mjs} +2 -2
  20. package/dist/{chunk-MRXNTQOX.mjs → chunk-SKC7AJIV.mjs} +3 -1
  21. package/dist/chunk-T26KLXLH.mjs +1 -0
  22. package/dist/{chunk-T3WYKWNC.mjs → chunk-UVMROYDT.mjs} +5 -5
  23. package/dist/chunk-UVMROYDT.mjs.map +1 -0
  24. package/dist/{chunk-YAORLSQ3.mjs → chunk-XWWMYJJF.mjs} +5 -5
  25. package/dist/chunk-XWWMYJJF.mjs.map +1 -0
  26. package/dist/{chunk-73EBDGYK.mjs → chunk-XYM43AHP.mjs} +5 -5
  27. package/dist/chunk-XYM43AHP.mjs.map +1 -0
  28. package/dist/chunk-Z45ZEXJW.mjs +32 -0
  29. package/dist/chunk-Z45ZEXJW.mjs.map +1 -0
  30. package/dist/{chunk-WDHLWSSU.mjs → chunk-ZKLK3M77.mjs} +3 -3
  31. package/dist/components/chat/Button.d.ts +1 -1
  32. package/dist/components/chat/Button.js +30 -2
  33. package/dist/components/chat/Button.js.map +1 -1
  34. package/dist/components/chat/Button.mjs +4 -4
  35. package/dist/components/chat/Chat.d.ts +3 -2
  36. package/dist/components/chat/Chat.js +397 -86
  37. package/dist/components/chat/Chat.js.map +1 -1
  38. package/dist/components/chat/Chat.mjs +13 -11
  39. package/dist/components/chat/ChatContext.d.ts +6 -1
  40. package/dist/components/chat/ChatContext.js +29 -28
  41. package/dist/components/chat/ChatContext.js.map +1 -1
  42. package/dist/components/chat/ChatContext.mjs +3 -3
  43. package/dist/components/chat/CodeBlock.js.map +1 -1
  44. package/dist/components/chat/CodeBlock.mjs +3 -3
  45. package/dist/components/chat/Header.js.map +1 -1
  46. package/dist/components/chat/Header.mjs +4 -4
  47. package/dist/components/chat/Icons.d.ts +2 -1
  48. package/dist/components/chat/Icons.js +36 -0
  49. package/dist/components/chat/Icons.js.map +1 -1
  50. package/dist/components/chat/Icons.mjs +4 -2
  51. package/dist/components/chat/Input.d.ts +1 -1
  52. package/dist/components/chat/Input.js +1 -2
  53. package/dist/components/chat/Input.js.map +1 -1
  54. package/dist/components/chat/Input.mjs +4 -4
  55. package/dist/components/chat/Markdown.js.map +1 -1
  56. package/dist/components/chat/Markdown.mjs +4 -4
  57. package/dist/components/chat/Messages.d.ts +1 -1
  58. package/dist/components/chat/Messages.js +2 -2
  59. package/dist/components/chat/Messages.js.map +1 -1
  60. package/dist/components/chat/Messages.mjs +6 -6
  61. package/dist/components/chat/Popup.d.ts +52 -1
  62. package/dist/components/chat/Popup.js +401 -90
  63. package/dist/components/chat/Popup.js.map +1 -1
  64. package/dist/components/chat/Popup.mjs +14 -12
  65. package/dist/components/chat/Response.js.map +1 -1
  66. package/dist/components/chat/Response.mjs +4 -4
  67. package/dist/components/chat/Sidebar.d.ts +3 -5
  68. package/dist/components/chat/Sidebar.js +403 -92
  69. package/dist/components/chat/Sidebar.js.map +1 -1
  70. package/dist/components/chat/Sidebar.mjs +14 -12
  71. package/dist/components/chat/Suggestion.d.ts +14 -0
  72. package/dist/components/chat/Suggestion.js +172 -0
  73. package/dist/components/chat/Suggestion.js.map +1 -0
  74. package/dist/components/chat/Suggestion.mjs +11 -0
  75. package/dist/components/chat/Suggestion.mjs.map +1 -0
  76. package/dist/components/chat/Textarea.mjs +1 -1
  77. package/dist/components/chat/Window.mjs +1 -1
  78. package/dist/components/chat/audio.d.ts +7 -0
  79. package/dist/components/chat/audio.js +77 -0
  80. package/dist/components/chat/audio.js.map +1 -0
  81. package/dist/components/chat/audio.mjs +10 -0
  82. package/dist/components/chat/audio.mjs.map +1 -0
  83. package/dist/components/chat/index.d.ts +2 -1
  84. package/dist/components/chat/index.js +407 -96
  85. package/dist/components/chat/index.js.map +1 -1
  86. package/dist/components/chat/index.mjs +15 -13
  87. package/dist/components/chat/props.d.ts +11 -2
  88. package/dist/components/chat/props.js.map +1 -1
  89. package/dist/components/index.d.ts +2 -1
  90. package/dist/components/index.js +407 -96
  91. package/dist/components/index.js.map +1 -1
  92. package/dist/components/index.mjs +15 -13
  93. package/dist/hooks/index.d.ts +2 -2
  94. package/dist/hooks/index.js +61 -0
  95. package/dist/hooks/index.js.map +1 -1
  96. package/dist/hooks/index.mjs +28 -1
  97. package/dist/hooks/use-copilot-chat-suggestions.d.ts +65 -0
  98. package/dist/hooks/use-copilot-chat-suggestions.js +78 -0
  99. package/dist/hooks/use-copilot-chat-suggestions.js.map +1 -0
  100. package/dist/hooks/use-copilot-chat-suggestions.mjs +28 -0
  101. package/dist/hooks/use-copilot-chat-suggestions.mjs.map +1 -0
  102. package/dist/hooks/use-copy-to-clipboard.mjs +1 -1
  103. package/dist/index.css +41 -5
  104. package/dist/index.css.map +1 -1
  105. package/dist/index.d.ts +3 -1
  106. package/dist/index.js +435 -98
  107. package/dist/index.js.map +1 -1
  108. package/dist/index.mjs +23 -17
  109. package/dist/lib/utils.mjs +1 -1
  110. package/dist/types/suggestions.d.ts +28 -0
  111. package/dist/types/suggestions.js +19 -0
  112. package/dist/types/suggestions.js.map +1 -0
  113. package/dist/types/suggestions.mjs +1 -0
  114. package/dist/types/suggestions.mjs.map +1 -0
  115. package/package.json +6 -6
  116. package/src/components/chat/Button.tsx +36 -4
  117. package/src/components/chat/Chat.tsx +204 -16
  118. package/src/components/chat/ChatContext.tsx +44 -32
  119. package/src/components/chat/Icons.tsx +27 -0
  120. package/src/components/chat/Input.tsx +1 -2
  121. package/src/components/chat/Messages.tsx +3 -3
  122. package/src/components/chat/Popup.tsx +52 -6
  123. package/src/components/chat/Sidebar.tsx +59 -6
  124. package/src/components/chat/Suggestion.tsx +105 -0
  125. package/src/components/chat/audio.ts +26 -0
  126. package/src/components/chat/props.ts +11 -1
  127. package/src/css/messages.css +7 -1
  128. package/src/css/response.css +1 -4
  129. package/src/css/suggestions.css +35 -0
  130. package/src/hooks/index.ts +1 -1
  131. package/src/hooks/use-copilot-chat-suggestions.tsx +91 -0
  132. package/src/styles.css +1 -0
  133. package/src/types/suggestions.ts +30 -0
  134. package/typedoc.json +4 -0
  135. package/dist/chunk-6U3O2JZP.mjs +0 -100
  136. package/dist/chunk-6U3O2JZP.mjs.map +0 -1
  137. package/dist/chunk-73EBDGYK.mjs.map +0 -1
  138. package/dist/chunk-7LMXXGJT.mjs +0 -75
  139. package/dist/chunk-7LMXXGJT.mjs.map +0 -1
  140. package/dist/chunk-7YXG7D47.mjs.map +0 -1
  141. package/dist/chunk-H4VKQGVU.mjs +0 -1
  142. package/dist/chunk-KE3N45ZY.mjs.map +0 -1
  143. package/dist/chunk-T3WYKWNC.mjs.map +0 -1
  144. package/dist/chunk-YAORLSQ3.mjs.map +0 -1
  145. package/dist/chunk-YTIGBBTC.mjs +0 -25
  146. package/dist/chunk-YTIGBBTC.mjs.map +0 -1
  147. /package/dist/{chunk-MBYUBR3F.mjs.map → chunk-A7J4KGLP.mjs.map} +0 -0
  148. /package/dist/{chunk-7JYUCW7H.mjs.map → chunk-MWFHYCQB.mjs.map} +0 -0
  149. /package/dist/{chunk-YEHO5VMA.mjs.map → chunk-PGZDQT74.mjs.map} +0 -0
  150. /package/dist/{chunk-H4VKQGVU.mjs.map → chunk-SKC7AJIV.mjs.map} +0 -0
  151. /package/dist/{chunk-MRXNTQOX.mjs.map → chunk-T26KLXLH.mjs.map} +0 -0
  152. /package/dist/{chunk-WDHLWSSU.mjs.map → chunk-ZKLK3M77.mjs.map} +0 -0
@@ -0,0 +1,36 @@
1
+ import {
2
+ __async
3
+ } from "./chunk-SKC7AJIV.mjs";
4
+
5
+ // src/components/chat/audio.ts
6
+ var checkMicrophonePermission = () => __async(void 0, null, function* () {
7
+ try {
8
+ const permissionStatus = yield navigator.permissions.query({
9
+ name: "microphone"
10
+ });
11
+ if (permissionStatus.state === "granted") {
12
+ return true;
13
+ } else {
14
+ return false;
15
+ }
16
+ } catch (err) {
17
+ console.error("Error checking microphone permission", err);
18
+ }
19
+ });
20
+ var requestMicAndPlaybackPermission = () => __async(void 0, null, function* () {
21
+ try {
22
+ const stream = yield navigator.mediaDevices.getUserMedia({ audio: true });
23
+ const audioContext = new window.AudioContext();
24
+ yield audioContext.resume();
25
+ return { stream, audioContext };
26
+ } catch (err) {
27
+ console.error("Error requesting microphone and playback permissions", err);
28
+ return null;
29
+ }
30
+ });
31
+
32
+ export {
33
+ checkMicrophonePermission,
34
+ requestMicAndPlaybackPermission
35
+ };
36
+ //# sourceMappingURL=chunk-PEDSZYHE.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/audio.ts"],"sourcesContent":["export const checkMicrophonePermission = async () => {\n try {\n const permissionStatus = await navigator.permissions.query({\n name: \"microphone\" as PermissionName,\n });\n if (permissionStatus.state === \"granted\") {\n return true;\n } else {\n return false;\n }\n } catch (err) {\n console.error(\"Error checking microphone permission\", err);\n }\n};\n\nexport const requestMicAndPlaybackPermission = async () => {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n const audioContext = new window.AudioContext();\n await audioContext.resume();\n return { stream, audioContext };\n } catch (err) {\n console.error(\"Error requesting microphone and playback permissions\", err);\n return null;\n }\n};\n"],"mappings":";;;;;AAAO,IAAM,4BAA4B,MAAY;AACnD,MAAI;AACF,UAAM,mBAAmB,MAAM,UAAU,YAAY,MAAM;AAAA,MACzD,MAAM;AAAA,IACR,CAAC;AACD,QAAI,iBAAiB,UAAU,WAAW;AACxC,aAAO;AAAA,IACT,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF,SAAS,KAAP;AACA,YAAQ,MAAM,wCAAwC,GAAG;AAAA,EAC3D;AACF;AAEO,IAAM,kCAAkC,MAAY;AACzD,MAAI;AACF,UAAM,SAAS,MAAM,UAAU,aAAa,aAAa,EAAE,OAAO,KAAK,CAAC;AACxE,UAAM,eAAe,IAAI,OAAO,aAAa;AAC7C,UAAM,aAAa,OAAO;AAC1B,WAAO,EAAE,QAAQ,aAAa;AAAA,EAChC,SAAS,KAAP;AACA,YAAQ,MAAM,wDAAwD,GAAG;AACzE,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  useChatContext
3
- } from "./chunk-7LMXXGJT.mjs";
3
+ } from "./chunk-KZME7C5S.mjs";
4
4
 
5
5
  // src/components/chat/Response.tsx
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -15,4 +15,4 @@ var ResponseButton = ({ onClick, inProgress }) => {
15
15
  export {
16
16
  ResponseButton
17
17
  };
18
- //# sourceMappingURL=chunk-YEHO5VMA.mjs.map
18
+ //# sourceMappingURL=chunk-PGZDQT74.mjs.map
@@ -17,6 +17,7 @@ var __spreadValues = (a, b) => {
17
17
  return a;
18
18
  };
19
19
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __restKey = (key) => typeof key === "symbol" ? key : key + "";
20
21
  var __objRest = (source, exclude) => {
21
22
  var target = {};
22
23
  for (var prop in source)
@@ -53,7 +54,8 @@ var __async = (__this, __arguments, generator) => {
53
54
  export {
54
55
  __spreadValues,
55
56
  __spreadProps,
57
+ __restKey,
56
58
  __objRest,
57
59
  __async
58
60
  };
59
- //# sourceMappingURL=chunk-MRXNTQOX.mjs.map
61
+ //# sourceMappingURL=chunk-SKC7AJIV.mjs.map
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-T26KLXLH.mjs.map
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  CopilotChat
3
- } from "./chunk-6U3O2JZP.mjs";
3
+ } from "./chunk-JPX5ODUX.mjs";
4
4
  import {
5
5
  __spreadProps,
6
6
  __spreadValues
7
- } from "./chunk-MRXNTQOX.mjs";
7
+ } from "./chunk-SKC7AJIV.mjs";
8
8
 
9
9
  // src/components/chat/Sidebar.tsx
10
10
  import { useState } from "react";
11
11
  import { jsx } from "react/jsx-runtime";
12
- var CopilotSidebar = (props) => {
12
+ function CopilotSidebar(props) {
13
13
  props = __spreadProps(__spreadValues({}, props), {
14
14
  className: props.className ? props.className + " copilotKitSidebar" : "copilotKitSidebar"
15
15
  });
@@ -22,9 +22,9 @@ var CopilotSidebar = (props) => {
22
22
  setExpandedClassName(open ? "sidebarExpanded" : "");
23
23
  };
24
24
  return /* @__PURE__ */ jsx("div", { className: `copilotKitSidebarContentWrapper ${expandedClassName}`, children: /* @__PURE__ */ jsx(CopilotChat, __spreadProps(__spreadValues(__spreadValues({}, props), { onSetOpen }), { children: props.children })) });
25
- };
25
+ }
26
26
 
27
27
  export {
28
28
  CopilotSidebar
29
29
  };
30
- //# sourceMappingURL=chunk-T3WYKWNC.mjs.map
30
+ //# sourceMappingURL=chunk-UVMROYDT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/Sidebar.tsx"],"sourcesContent":["/**\n * A chatbot sidebar component for CopilotKit.\n *\n * <img src=\"/images/CopilotSidebar/CopilotSidebar.gif\" width=\"500\" />\n *\n * <img referrerPolicy=\"no-referrer-when-downgrade\" src=\"https://static.scarf.sh/a.png?x-pxid=a9b290bb-38f9-4518-ac3b-8f54fdbf43be\" />\n *\n * A chatbot sidebar component for the CopilotKit framework. Highly customizable through various props and custom CSS.\n *\n * <RequestExample>\n * ```jsx CopilotSidebar Example\n * import { CopilotSidebar } from \"@copilotkit/react-ui\";\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 * </RequestExample>\n *\n *\n * See [CopilotPopup](./CopilotPopup) for a popup version of this component.\n *\n * <Note>\n * To make the sidebar push your content to the side, wrap your content in the\n * sidebar component. If you want the sidebar to overlay your content, place the\n * sidebar component outside of your content.\n * </Note>\n *\n * ## Custom CSS\n *\n * You can customize the colors of the chat window by overriding the CSS variables\n * defined in the [default styles](https://github.com/CopilotKit/CopilotKit/blob/main/CopilotKit/packages/react-ui/src/css/colors.css).\n *\n * For example, to set the primary color to purple:\n *\n * ```jsx\n * <div style={{ \"--copilot-kit-primary-color\": \"#7D5BA6\" }}>\n * <CopilotSidebar />\n * </div>\n * ```\n *\n * To further customize the chat window, you can override the CSS classes defined\n * [here](https://github.com/CopilotKit/CopilotKit/blob/main/CopilotKit/packages/react-ui/src/css/).\n *\n * For example:\n *\n * ```css\n * .copilotKitButton {\n * border-radius: 0;\n * }\n * ```\n */\nimport React, { useState } from \"react\";\nimport { CopilotChat, CopilotChatProps } from \"./Chat\";\n\nexport function CopilotSidebar(props: CopilotChatProps) {\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 <CopilotChat {...props} {...{ onSetOpen }}>\n {props.children}\n </CopilotChat>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAyDA,SAAgB,gBAAgB;AAmB1B;AAhBC,SAAS,eAAe,OAAyB;AACtD,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;AArEvC;AAsEI,gBAAM,cAAN,+BAAkB;AAClB,yBAAqB,OAAO,oBAAoB,EAAE;AAAA,EACpD;AAEA,SACE,oBAAC,SAAI,WAAW,mCAAmC,qBACjD,8BAAC,6DAAgB,QAAW,EAAE,UAAU,IAAvC,EACE,gBAAM,WACT,GACF;AAEJ;","names":[]}
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  CopilotChat
3
- } from "./chunk-6U3O2JZP.mjs";
3
+ } from "./chunk-JPX5ODUX.mjs";
4
4
  import {
5
5
  __spreadProps,
6
6
  __spreadValues
7
- } from "./chunk-MRXNTQOX.mjs";
7
+ } from "./chunk-SKC7AJIV.mjs";
8
8
 
9
9
  // src/components/chat/Popup.tsx
10
10
  import { jsx } from "react/jsx-runtime";
11
- var CopilotPopup = (props) => {
11
+ function CopilotPopup(props) {
12
12
  props = __spreadProps(__spreadValues({}, props), {
13
13
  className: props.className ? props.className + " copilotKitPopup" : "copilotKitPopup"
14
14
  });
15
15
  return /* @__PURE__ */ jsx(CopilotChat, __spreadProps(__spreadValues({}, props), { children: props.children }));
16
- };
16
+ }
17
17
 
18
18
  export {
19
19
  CopilotPopup
20
20
  };
21
- //# sourceMappingURL=chunk-YAORLSQ3.mjs.map
21
+ //# sourceMappingURL=chunk-XWWMYJJF.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/Popup.tsx"],"sourcesContent":["/**\n * A chatbot popup component for CopilotKit.\n *\n * <img src=\"/images/CopilotPopup/CopilotPopup.gif\" width=\"500\" />\n *\n * <img referrerPolicy=\"no-referrer-when-downgrade\" src=\"https://static.scarf.sh/a.png?x-pxid=a9b290bb-38f9-4518-ac3b-8f54fdbf43be\" />\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](./CopilotSidebar) for a sidebar version of this component.\n *\n * <RequestExample>\n * ```jsx CopilotPopup Example\n * import { CopilotPopup } from \"@copilotkit/react-ui\";\n *\n * <CopilotPopup\n * labels={{\n * title: \"Your Assistant\",\n * initial: \"Hi! 👋 How can I assist you today?\",\n * }}\n * />\n * ```\n * </RequestExample>\n *\n * ## Custom CSS\n *\n * You can customize the colors of the chat window by overriding the CSS variables\n * defined in the [default styles](https://github.com/CopilotKit/CopilotKit/blob/main/CopilotKit/packages/react-ui/src/css/colors.css).\n *\n * For example, to set the primary color to purple:\n *\n * ```jsx\n * <div style={{ \"--copilot-kit-primary-color\": \"#7D5BA6\" }}>\n * <CopilotPopup />\n * </div>\n * ```\n *\n * To further customize the chat window, you can override the CSS classes defined\n * [here](https://github.com/CopilotKit/CopilotKit/blob/main/CopilotKit/packages/react-ui/src/css/).\n *\n * For example:\n *\n * ```css\n * .copilotKitButton {\n * border-radius: 0;\n * }\n * ```\n */\n\nimport { CopilotChat, CopilotChatProps } from \"./Chat\";\n\nexport function CopilotPopup(props: CopilotChatProps) {\n props = {\n ...props,\n className: props.className ? props.className + \" copilotKitPopup\" : \"copilotKitPopup\",\n };\n return <CopilotChat {...props}>{props.children}</CopilotChat>;\n}\n"],"mappings":";;;;;;;;;AAyDS;AALF,SAAS,aAAa,OAAyB;AACpD,UAAQ,iCACH,QADG;AAAA,IAEN,WAAW,MAAM,YAAY,MAAM,YAAY,qBAAqB;AAAA,EACtE;AACA,SAAO,oBAAC,8CAAgB,QAAhB,EAAwB,gBAAM,WAAS;AACjD;","names":[]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  Markdown
3
- } from "./chunk-WDHLWSSU.mjs";
3
+ } from "./chunk-ZKLK3M77.mjs";
4
4
  import {
5
5
  useChatContext
6
- } from "./chunk-7LMXXGJT.mjs";
6
+ } from "./chunk-KZME7C5S.mjs";
7
7
 
8
8
  // src/components/chat/Messages.tsx
9
9
  import React, { useEffect, useMemo } from "react";
@@ -11,7 +11,7 @@ import { nanoid } from "nanoid";
11
11
  import { decodeResult } from "@copilotkit/shared";
12
12
  import { useCopilotContext } from "@copilotkit/react-core";
13
13
  import { jsx, jsxs } from "react/jsx-runtime";
14
- var Messages = ({ messages, inProgress }) => {
14
+ var Messages = ({ messages, inProgress, children }) => {
15
15
  const { chatComponentsCache } = useCopilotContext();
16
16
  const context = useChatContext();
17
17
  const initialMessages = useMemo(
@@ -97,7 +97,7 @@ var Messages = ({ messages, inProgress }) => {
97
97
  return /* @__PURE__ */ jsx("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: /* @__PURE__ */ jsx(Markdown, { content: message.content }) }, index);
98
98
  }
99
99
  }),
100
- /* @__PURE__ */ jsx("div", { ref: messagesEndRef })
100
+ /* @__PURE__ */ jsx("footer", { ref: messagesEndRef, children })
101
101
  ] });
102
102
  };
103
103
  function makeInitialMessages(initial) {
@@ -119,4 +119,4 @@ function makeInitialMessages(initial) {
119
119
  export {
120
120
  Messages
121
121
  };
122
- //# sourceMappingURL=chunk-73EBDGYK.mjs.map
122
+ //# sourceMappingURL=chunk-XYM43AHP.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/Messages.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport { MessagesProps, SuggestionsProps } from \"./props\";\nimport { useChatContext } from \"./ChatContext\";\nimport { nanoid } from \"nanoid\";\nimport { Message, decodeResult } from \"@copilotkit/shared\";\nimport { Markdown } from \"./Markdown\";\nimport { ActionRenderProps, RenderFunctionStatus, useCopilotContext } from \"@copilotkit/react-core\";\n\nexport const Messages = ({ messages, inProgress, children }: MessagesProps) => {\n const { chatComponentsCache } = useCopilotContext();\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 functionResults: Record<string, string> = {};\n\n for (let i = 0; i < messages.length; i++) {\n if (messages[i].role === \"assistant\" && messages[i].function_call) {\n const id = messages[i].id;\n if (i + 1 < messages.length && messages[i + 1].role === \"function\") {\n functionResults[id] = decodeResult(messages[i + 1].content || \"\");\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.role === \"user\") {\n return (\n <div key={index} className=\"copilotKitMessage copilotKitUserMessage\">\n {message.content}\n </div>\n );\n } else if (message.role == \"assistant\") {\n if (isCurrentMessage && inProgress && !message.content && !message.partialFunctionCall) {\n // The message is in progress and there is no content- show the spinner\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {context.icons.spinnerIcon}\n </div>\n );\n } else if (message.function_call || message.partialFunctionCall) {\n // Find the action that corresponds to the function call if any\n const functionCallName: string = (message.function_call?.name ||\n message.partialFunctionCall?.name)!;\n if (\n chatComponentsCache.current !== null &&\n chatComponentsCache.current[functionCallName]\n ) {\n const render = chatComponentsCache.current[functionCallName];\n\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 {context.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.function_call\n ? JSON.parse(message.function_call.arguments || \"{}\")\n : message.partialFunctionCall?.arguments;\n\n let status: RenderFunctionStatus = \"inProgress\";\n\n if (functionResults[message.id] !== undefined) {\n status = \"complete\";\n } else if (message.function_call) {\n status = \"executing\";\n }\n\n const toRender = render({\n status: status as any,\n args,\n result: functionResults[message.id],\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 && context.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) && message.function_call) {\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 {context.icons.spinnerIcon}\n </div>\n );\n }\n }\n\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n <Markdown content={message.content} />\n </div>\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((message) => ({\n id: nanoid(),\n role: \"assistant\",\n content: message,\n }));\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,32 @@
1
+ import {
2
+ useChatContext
3
+ } from "./chunk-KZME7C5S.mjs";
4
+
5
+ // src/hooks/use-copilot-chat-suggestions.tsx
6
+ import { useEffect } from "react";
7
+ import { nanoid } from "nanoid";
8
+ function useCopilotChatSuggestions({
9
+ instructions,
10
+ className,
11
+ minSuggestions = 1,
12
+ maxSuggestions = 3
13
+ }, dependencies = []) {
14
+ const chatContext = useChatContext();
15
+ useEffect(() => {
16
+ const id = nanoid();
17
+ chatContext.addChatSuggestionConfiguration(id, {
18
+ instructions,
19
+ minSuggestions,
20
+ maxSuggestions,
21
+ className
22
+ });
23
+ return () => {
24
+ chatContext.removeChatSuggestionConfiguration(id);
25
+ };
26
+ }, dependencies);
27
+ }
28
+
29
+ export {
30
+ useCopilotChatSuggestions
31
+ };
32
+ //# sourceMappingURL=chunk-Z45ZEXJW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-copilot-chat-suggestions.tsx"],"sourcesContent":["/**\n * A hook for providing suggestions to the user in the Copilot chat.\n *\n * <img src=\"/images/useCopilotChatSuggestions/use-copilot-chat-suggestions.gif\" width=\"500\" />\n *\n * <img referrerPolicy=\"no-referrer-when-downgrade\" src=\"https://static.scarf.sh/a.png?x-pxid=a9b290bb-38f9-4518-ac3b-8f54fdbf43be\" />\n *\n * `useCopilotChatSuggestions` integrates auto-generated chat suggestions into your application in the context of your\n * app's state. It dynamically manages suggestions based on provided configurations and\n * dependencies.\n *\n * <RequestExample>\n * ```jsx useCopilotChatSuggestions Example\n * import { useCopilotChatSuggestions }\n * from \"@copilotkit/react-ui\";\n *\n * useCopilotChatSuggestions({\n * instructions: \"Your instructions for suggestions.\",\n * })\n * ```\n * </RequestExample>\n *\n * ## Basic Setup\n *\n * To incorporate this hook into your React components, start by importing it:\n *\n * ```tsx\n * import { useCopilotChatSuggestions } from \"@copilotkit/react-ui\";\n * ```\n *\n * Then, use it in your component to initiate suggestion functionality:\n *\n * ```tsx\n * useCopilotChatSuggestions({\n * instructions: \"Your instructions for suggestions.\",\n * });\n * ```\n *\n * ## Dependency Management\n *\n * ```tsx\n * import { useCopilotChatSuggestions } from \"@copilotkit/react-ui\";\n *\n * useCopilotChatSuggestions(\n * {\n * instructions: \"Suggest the most relevant next actions.\",\n * },\n * [appState],\n * );\n * ```\n *\n * In the example above, the suggestions are generated based on the given instructions.\n * The hook monitors `appState`, and updates suggestions accordingly whenever it changes.\n *\n * ## Behavior and Lifecycle\n *\n * The hook registers the configuration with the chat context upon component mount and\n * removes it on unmount, ensuring a clean and efficient lifecycle management.\n */\n\nimport { useEffect } from \"react\";\nimport { useChatContext } from \"../components\";\nimport { nanoid } from \"nanoid\";\nimport { CopilotChatSuggestionConfiguration } from \"../types/suggestions\";\n\nexport function useCopilotChatSuggestions(\n {\n instructions,\n className,\n minSuggestions = 1,\n maxSuggestions = 3,\n }: CopilotChatSuggestionConfiguration,\n dependencies: any[] = [],\n) {\n const chatContext = useChatContext();\n\n useEffect(() => {\n const id = nanoid();\n\n chatContext.addChatSuggestionConfiguration(id, {\n instructions,\n minSuggestions,\n maxSuggestions,\n className,\n });\n\n return () => {\n chatContext.removeChatSuggestionConfiguration(id);\n };\n }, dependencies);\n}\n"],"mappings":";;;;;AA4DA,SAAS,iBAAiB;AAE1B,SAAS,cAAc;AAGhB,SAAS,0BACd;AAAA,EACE;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,iBAAiB;AACnB,GACA,eAAsB,CAAC,GACvB;AACA,QAAM,cAAc,eAAe;AAEnC,YAAU,MAAM;AACd,UAAM,KAAK,OAAO;AAElB,gBAAY,+BAA+B,IAAI;AAAA,MAC7C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,kBAAY,kCAAkC,EAAE;AAAA,IAClD;AAAA,EACF,GAAG,YAAY;AACjB;","names":[]}
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  CodeBlock
3
- } from "./chunk-MBYUBR3F.mjs";
3
+ } from "./chunk-A7J4KGLP.mjs";
4
4
  import {
5
5
  __objRest,
6
6
  __spreadProps,
7
7
  __spreadValues
8
- } from "./chunk-MRXNTQOX.mjs";
8
+ } from "./chunk-SKC7AJIV.mjs";
9
9
 
10
10
  // src/components/chat/Markdown.tsx
11
11
  import { memo } from "react";
@@ -72,4 +72,4 @@ var components = {
72
72
  export {
73
73
  Markdown
74
74
  };
75
- //# sourceMappingURL=chunk-WDHLWSSU.mjs.map
75
+ //# sourceMappingURL=chunk-ZKLK3M77.mjs.map
@@ -1,6 +1,6 @@
1
1
  import { ButtonProps } from './props.js';
2
2
  import '@copilotkit/shared';
3
3
 
4
- declare const Button: ({ open, setOpen }: ButtonProps) => JSX.Element;
4
+ declare const Button: ({ open, setOpen, pushToTalk, setPushToTalk }: ButtonProps) => JSX.Element;
5
5
 
6
6
  export { Button };
@@ -33,6 +33,7 @@ __export(Button_exports, {
33
33
  Button: () => Button
34
34
  });
35
35
  module.exports = __toCommonJS(Button_exports);
36
+ var import_react2 = require("react");
36
37
 
37
38
  // src/components/chat/ChatContext.tsx
38
39
  var import_react = __toESM(require("react"));
@@ -50,9 +51,36 @@ function useChatContext() {
50
51
 
51
52
  // src/components/chat/Button.tsx
52
53
  var import_jsx_runtime2 = require("react/jsx-runtime");
53
- var Button = ({ open, setOpen }) => {
54
+ var Button = ({ open, setOpen, pushToTalk, setPushToTalk }) => {
54
55
  const context = useChatContext();
55
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { onClick: () => setOpen(!open), children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
56
+ const timerRef = (0, import_react2.useRef)(null);
57
+ const [isLongPress, setIsLongPress] = (0, import_react2.useState)(false);
58
+ const handleMouseDown = () => {
59
+ timerRef.current = setTimeout(() => {
60
+ setPushToTalk(true);
61
+ setIsLongPress(true);
62
+ }, 500);
63
+ };
64
+ const handleMouseUp = () => {
65
+ if (timerRef.current) {
66
+ clearTimeout(timerRef.current);
67
+ setPushToTalk(false);
68
+ }
69
+ };
70
+ const handleClick = () => {
71
+ if (!isLongPress) {
72
+ setOpen(!open);
73
+ } else {
74
+ setIsLongPress(false);
75
+ }
76
+ };
77
+ (0, import_react2.useEffect)(() => {
78
+ document.addEventListener("mouseup", handleMouseUp);
79
+ return () => {
80
+ document.removeEventListener("mouseup", handleMouseUp);
81
+ };
82
+ }, []);
83
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { onClick: handleClick, onMouseDown: handleMouseDown, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
56
84
  "button",
57
85
  {
58
86
  className: `copilotKitButton ${open ? "open" : ""}`,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/chat/Button.tsx","../../../src/components/chat/ChatContext.tsx"],"sourcesContent":["import { ButtonProps } from \"./props\";\nimport { useChatContext } from \"./ChatContext\";\n\nexport const Button = ({ open, setOpen }: ButtonProps) => {\n const context = useChatContext();\n // To ensure that the mouse handler fires even when the button is scaled down\n // we wrap the button in a div and attach the handler to the div\n return (\n <div onClick={() => setOpen(!open)}>\n <button\n className={`copilotKitButton ${open ? \"open\" : \"\"}`}\n aria-label={open ? \"Close Chat\" : \"Open Chat\"}\n >\n <div className=\"copilotKitButtonIcon copilotKitButtonIconOpen\">\n {context.icons.openIcon}\n </div>\n <div className=\"copilotKitButtonIcon copilotKitButtonIconClose\">\n {context.icons.closeIcon}\n </div>\n </button>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\nimport * as DefaultIcons from \"./Icons\";\n\n/**\n * Icons for CopilotChat component.\n */\nexport interface CopilotChatIcons {\n /**\n * The icon to use for the open chat button.\n * @default <OpenIcon />\n */\n openIcon?: React.ReactNode;\n\n /**\n * The icon to use for the close chat button.\n * @default <CloseIcon />\n */\n closeIcon?: React.ReactNode;\n\n /**\n * The icon to use for the close chat button in the header.\n * @default <HeaderCloseIcon />\n */\n headerCloseIcon?: React.ReactNode;\n\n /**\n * The icon to use for the send button.\n * @default <SendIcon />\n */\n sendIcon?: React.ReactNode;\n\n /**\n * The icon to use for the activity indicator.\n * @default <ActivityIcon />\n */\n activityIcon?: React.ReactNode;\n\n /**\n * The icon to use for the spinner.\n * @default <SpinnerIcon />\n */\n spinnerIcon?: React.ReactNode;\n\n /**\n * The icon to use for the stop button.\n * @default <StopIcon />\n */\n stopIcon?: React.ReactNode;\n\n /**\n * The icon to use for the regenerate button.\n * @default <RegenerateIcon />\n */\n regenerateIcon?: React.ReactNode;\n}\n\n/**\n * Labels for CopilotChat component.\n */\nexport interface CopilotChatLabels {\n /**\n * The initial message(s) to display in the chat window.\n */\n initial?: string | string[];\n\n /**\n * The title to display in the header.\n * @default \"CopilotKit\"\n */\n title?: string;\n\n /**\n * The placeholder to display in the input.\n * @default \"Type a message...\"\n */\n placeholder?: string;\n\n /**\n * The message to display while the chat GPT is \"thinking\".\n * @default \"Thinking...\"\n */\n thinking?: string;\n\n /**\n * The message to display when an error occurs.\n * @default \"❌ An error occurred. Please try again.\"\n */\n error?: string;\n\n /**\n * The label to display on the stop button.\n * @default \"Stop generating\"\n */\n stopGenerating?: string;\n\n /**\n * The label to display on the regenerate button.\n * @default \"Regenerate response\"\n */\n regenerateResponse?: string;\n}\n\ninterface ChatContext {\n labels: Required<CopilotChatLabels>;\n icons: Required<CopilotChatIcons>;\n open: boolean;\n setOpen: (open: boolean) => void;\n}\n\nexport const ChatContext = React.createContext<ChatContext | undefined>(undefined);\n\nexport function useChatContext(): ChatContext {\n const context = React.useContext(ChatContext);\n if (context === undefined) {\n throw new Error(\n \"Context not found. Did you forget to wrap your app in a <ChatContextProvider> component?\",\n );\n }\n return context;\n}\n\ninterface ChatContextProps {\n // temperature?: number;\n // instructions?: string;\n // maxFeedback?: number;\n labels?: CopilotChatLabels;\n icons?: CopilotChatIcons;\n children?: React.ReactNode;\n open: boolean;\n setOpen: (open: boolean) => void;\n}\n\nexport const ChatContextProvider = ({\n // temperature,\n // instructions,\n // maxFeedback,\n labels,\n icons,\n children,\n open,\n setOpen,\n}: ChatContextProps) => {\n const context = useMemo(\n () => ({\n labels: {\n ...{\n initial: \"\",\n title: \"CopilotKit\",\n placeholder: \"Type a message...\",\n thinking: \"Thinking...\",\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 open,\n setOpen,\n }),\n [labels, icons, open, setOpen],\n );\n return <ChatContext.Provider value={context}>{children}</ChatContext.Provider>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAA+B;AA+KtB;AAlEF,IAAM,cAAc,aAAAA,QAAM,cAAuC,MAAS;AAE1E,SAAS,iBAA8B;AAC5C,QAAM,UAAU,aAAAA,QAAM,WAAW,WAAW;AAC5C,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;AD9GM,IAAAC,sBAAA;AANC,IAAM,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAmB;AACxD,QAAM,UAAU,eAAe;AAG/B,SACE,6CAAC,SAAI,SAAS,MAAM,QAAQ,CAAC,IAAI,GAC/B;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,oBAAoB,OAAO,SAAS;AAAA,MAC/C,cAAY,OAAO,eAAe;AAAA,MAElC;AAAA,qDAAC,SAAI,WAAU,iDACZ,kBAAQ,MAAM,UACjB;AAAA,QACA,6CAAC,SAAI,WAAU,kDACZ,kBAAQ,MAAM,WACjB;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;","names":["React","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../../src/components/chat/Button.tsx","../../../src/components/chat/ChatContext.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { ButtonProps } from \"./props\";\nimport { useChatContext } from \"./ChatContext\";\n\nexport const Button = ({ open, setOpen, pushToTalk, setPushToTalk }: ButtonProps) => {\n const context = useChatContext();\n const timerRef = useRef<NodeJS.Timeout | null>(null);\n const [isLongPress, setIsLongPress] = useState(false);\n\n const handleMouseDown = () => {\n timerRef.current = setTimeout(() => {\n setPushToTalk(true);\n setIsLongPress(true);\n }, 500); // 500ms for long press\n };\n\n const handleMouseUp = () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n setPushToTalk(false);\n }\n };\n\n const handleClick = () => {\n if (!isLongPress) {\n setOpen(!open);\n } else {\n setIsLongPress(false);\n }\n };\n\n // we want to handle the mouse up event event outside of the button component\n useEffect(() => {\n document.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }, []);\n\n return (\n <div onClick={handleClick} onMouseDown={handleMouseDown}>\n <button\n className={`copilotKitButton ${open ? \"open\" : \"\"}`}\n aria-label={open ? \"Close Chat\" : \"Open Chat\"}\n >\n <div className=\"copilotKitButtonIcon copilotKitButtonIconOpen\">\n {context.icons.openIcon}\n </div>\n <div className=\"copilotKitButtonIcon copilotKitButtonIconClose\">\n {context.icons.closeIcon}\n </div>\n </button>\n </div>\n );\n};\n","import React, { useMemo, useState } from \"react\";\nimport * as DefaultIcons from \"./Icons\";\nimport { CopilotChatSuggestion, CopilotChatSuggestionConfiguration } from \"../../types/suggestions\";\n\n/**\n * Icons for CopilotChat component.\n */\nexport interface CopilotChatIcons {\n /**\n * The icon to use for the open chat button.\n * @default <OpenIcon />\n */\n openIcon?: React.ReactNode;\n\n /**\n * The icon to use for the close chat button.\n * @default <CloseIcon />\n */\n closeIcon?: React.ReactNode;\n\n /**\n * The icon to use for the close chat button in the header.\n * @default <HeaderCloseIcon />\n */\n headerCloseIcon?: React.ReactNode;\n\n /**\n * The icon to use for the send button.\n * @default <SendIcon />\n */\n sendIcon?: React.ReactNode;\n\n /**\n * The icon to use for the activity indicator.\n * @default <ActivityIcon />\n */\n activityIcon?: React.ReactNode;\n\n /**\n * The icon to use for the spinner.\n * @default <SpinnerIcon />\n */\n spinnerIcon?: React.ReactNode;\n\n /**\n * The icon to use for the stop button.\n * @default <StopIcon />\n */\n stopIcon?: React.ReactNode;\n\n /**\n * The icon to use for the regenerate button.\n * @default <RegenerateIcon />\n */\n regenerateIcon?: React.ReactNode;\n}\n\n/**\n * Labels for CopilotChat component.\n */\nexport interface CopilotChatLabels {\n /**\n * The initial message(s) to display in the chat window.\n */\n initial?: string | string[];\n\n /**\n * The title to display in the header.\n * @default \"CopilotKit\"\n */\n title?: string;\n\n /**\n * The placeholder to display in the input.\n * @default \"Type a message...\"\n */\n placeholder?: string;\n\n /**\n * The message to display while the chat GPT is \"thinking\".\n * @default \"Thinking...\"\n */\n thinking?: string;\n\n /**\n * The message to display when an error occurs.\n * @default \"❌ An error occurred. Please try again.\"\n */\n error?: string;\n\n /**\n * The label to display on the stop button.\n * @default \"Stop generating\"\n */\n stopGenerating?: string;\n\n /**\n * The label to display on the regenerate button.\n * @default \"Regenerate response\"\n */\n regenerateResponse?: string;\n}\n\ninterface ChatContext {\n labels: Required<CopilotChatLabels>;\n icons: Required<CopilotChatIcons>;\n open: boolean;\n setOpen: (open: boolean) => void;\n addChatSuggestionConfiguration: (\n id: string,\n suggestion: CopilotChatSuggestionConfiguration,\n ) => void;\n removeChatSuggestionConfiguration: (id: string) => void;\n}\n\nexport const ChatContext = React.createContext<ChatContext | undefined>(undefined);\n\nexport function useChatContext(): ChatContext {\n const context = React.useContext(ChatContext);\n if (context === undefined) {\n throw new Error(\n \"Context not found. Did you forget to wrap your app in a <ChatContextProvider> component?\",\n );\n }\n return context;\n}\n\ninterface ChatContextProps {\n // temperature?: number;\n // instructions?: string;\n // maxFeedback?: number;\n labels?: CopilotChatLabels;\n icons?: CopilotChatIcons;\n children?: React.ReactNode;\n open: boolean;\n setOpen: (open: boolean) => void;\n addChatSuggestionConfiguration: (\n id: string,\n suggestion: CopilotChatSuggestionConfiguration,\n ) => void;\n removeChatSuggestionConfiguration: (id: string) => void;\n}\n\nexport const ChatContextProvider = ({\n // temperature,\n // instructions,\n // maxFeedback,\n labels,\n icons,\n children,\n open,\n setOpen,\n addChatSuggestionConfiguration,\n removeChatSuggestionConfiguration,\n}: ChatContextProps) => {\n const context = {\n labels: {\n ...{\n initial: \"\",\n title: \"CopilotKit\",\n placeholder: \"Type a message...\",\n thinking: \"Thinking...\",\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 open,\n setOpen,\n addChatSuggestionConfiguration,\n removeChatSuggestionConfiguration,\n };\n return <ChatContext.Provider value={context}>{children}</ChatContext.Provider>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,gBAA4C;;;ACA5C,mBAAyC;AA2LhC;AAxEF,IAAM,cAAc,aAAAC,QAAM,cAAuC,MAAS;AAE1E,SAAS,iBAA8B;AAC5C,QAAM,UAAU,aAAAA,QAAM,WAAW,WAAW;AAC5C,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;ADpFM,IAAAC,sBAAA;AArCC,IAAM,SAAS,CAAC,EAAE,MAAM,SAAS,YAAY,cAAc,MAAmB;AACnF,QAAM,UAAU,eAAe;AAC/B,QAAM,eAAW,sBAA8B,IAAI;AACnD,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAS,KAAK;AAEpD,QAAM,kBAAkB,MAAM;AAC5B,aAAS,UAAU,WAAW,MAAM;AAClC,oBAAc,IAAI;AAClB,qBAAe,IAAI;AAAA,IACrB,GAAG,GAAG;AAAA,EACR;AAEA,QAAM,gBAAgB,MAAM;AAC1B,QAAI,SAAS,SAAS;AACpB,mBAAa,SAAS,OAAO;AAC7B,oBAAc,KAAK;AAAA,IACrB;AAAA,EACF;AAEA,QAAM,cAAc,MAAM;AACxB,QAAI,CAAC,aAAa;AAChB,cAAQ,CAAC,IAAI;AAAA,IACf,OAAO;AACL,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF;AAGA,+BAAU,MAAM;AACd,aAAS,iBAAiB,WAAW,aAAa;AAClD,WAAO,MAAM;AACX,eAAS,oBAAoB,WAAW,aAAa;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SACE,6CAAC,SAAI,SAAS,aAAa,aAAa,iBACtC;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,oBAAoB,OAAO,SAAS;AAAA,MAC/C,cAAY,OAAO,eAAe;AAAA,MAElC;AAAA,qDAAC,SAAI,WAAU,iDACZ,kBAAQ,MAAM,UACjB;AAAA,QACA,6CAAC,SAAI,WAAU,kDACZ,kBAAQ,MAAM,WACjB;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;","names":["import_react","React","import_jsx_runtime"]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  Button
3
- } from "../../chunk-YTIGBBTC.mjs";
4
- import "../../chunk-7LMXXGJT.mjs";
5
- import "../../chunk-7YXG7D47.mjs";
6
- import "../../chunk-MRXNTQOX.mjs";
3
+ } from "../../chunk-5ASYNEHX.mjs";
4
+ import "../../chunk-KZME7C5S.mjs";
5
+ import "../../chunk-FWTPMPSN.mjs";
6
+ import "../../chunk-SKC7AJIV.mjs";
7
7
  export {
8
8
  Button
9
9
  };
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { CopilotChatIcons, CopilotChatLabels } from './ChatContext.js';
3
3
  import { SystemMessageFunction } from '@copilotkit/react-core';
4
4
  import { WindowProps, ButtonProps, HeaderProps, MessagesProps, InputProps, ResponseButtonProps } from './props.js';
5
+ import '../../types/suggestions.js';
5
6
  import '@copilotkit/shared';
6
7
 
7
8
  /**
@@ -46,8 +47,8 @@ interface CopilotChatProps {
46
47
  onSubmitMessage?: (message: string) => void;
47
48
  /**
48
49
  * The shortcut key to open the chat window.
49
- * Uses Command-<shortcut> on a Mac and Ctrl-<shortcut> on Windows.
50
- * @default "e"
50
+ * Uses Command-[shortcut] on a Mac and Ctrl-[shortcut] on Windows.
51
+ * @default "/"
51
52
  */
52
53
  shortcut?: string;
53
54
  /**