@copilotkit/react-ui 1.3.0 → 1.3.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 (203) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/chunk-54JAUBUJ.mjs +26 -0
  3. package/dist/chunk-54JAUBUJ.mjs.map +1 -0
  4. package/dist/chunk-5HHVL5WK.mjs +29 -0
  5. package/dist/chunk-5HHVL5WK.mjs.map +1 -0
  6. package/dist/chunk-B2KQEX2R.mjs +91 -0
  7. package/dist/chunk-B2KQEX2R.mjs.map +1 -0
  8. package/dist/chunk-BJPGMY3I.mjs +70 -0
  9. package/dist/chunk-BJPGMY3I.mjs.map +1 -0
  10. package/dist/chunk-EFZPSZWO.mjs +1 -0
  11. package/dist/chunk-EFZPSZWO.mjs.map +1 -0
  12. package/dist/chunk-FL4ETWFB.mjs +21 -0
  13. package/dist/chunk-FL4ETWFB.mjs.map +1 -0
  14. package/dist/chunk-FLV3J3VX.mjs +18 -0
  15. package/dist/chunk-FLV3J3VX.mjs.map +1 -0
  16. package/dist/chunk-FO7Z5LAL.mjs +118 -0
  17. package/dist/chunk-FO7Z5LAL.mjs.map +1 -0
  18. package/dist/chunk-FOZVHL73.mjs +171 -0
  19. package/dist/chunk-FOZVHL73.mjs.map +1 -0
  20. package/dist/chunk-FZC7X5PK.mjs +262 -0
  21. package/dist/chunk-FZC7X5PK.mjs.map +1 -0
  22. package/dist/chunk-H7TM5JE6.mjs +146 -0
  23. package/dist/chunk-H7TM5JE6.mjs.map +1 -0
  24. package/dist/chunk-HR36Y2FQ.mjs +167 -0
  25. package/dist/chunk-HR36Y2FQ.mjs.map +1 -0
  26. package/dist/chunk-I4QG2ZZU.mjs +220 -0
  27. package/dist/chunk-I4QG2ZZU.mjs.map +1 -0
  28. package/dist/chunk-IU3WTXLQ.mjs +1 -0
  29. package/dist/chunk-IU3WTXLQ.mjs.map +1 -0
  30. package/dist/chunk-JD7BAH7U.mjs +1 -0
  31. package/dist/chunk-JD7BAH7U.mjs.map +1 -0
  32. package/dist/chunk-MRFF7GSQ.mjs +1 -0
  33. package/dist/chunk-MRFF7GSQ.mjs.map +1 -0
  34. package/dist/chunk-MRXNTQOX.mjs +59 -0
  35. package/dist/chunk-MRXNTQOX.mjs.map +1 -0
  36. package/dist/chunk-OTPAZXVR.mjs +92 -0
  37. package/dist/chunk-OTPAZXVR.mjs.map +1 -0
  38. package/dist/chunk-QOEAEMUQ.mjs +30 -0
  39. package/dist/chunk-QOEAEMUQ.mjs.map +1 -0
  40. package/dist/chunk-T26KLXLH.mjs +1 -0
  41. package/dist/chunk-T26KLXLH.mjs.map +1 -0
  42. package/dist/chunk-U6J5DGOE.mjs +83 -0
  43. package/dist/chunk-U6J5DGOE.mjs.map +1 -0
  44. package/dist/chunk-UPTB2MVO.mjs +395 -0
  45. package/dist/chunk-UPTB2MVO.mjs.map +1 -0
  46. package/dist/chunk-V7W6IM2V.mjs +1 -0
  47. package/dist/chunk-V7W6IM2V.mjs.map +1 -0
  48. package/dist/chunk-VOBX4JOA.mjs +138 -0
  49. package/dist/chunk-VOBX4JOA.mjs.map +1 -0
  50. package/dist/chunk-WB3YULQ4.mjs +1 -0
  51. package/dist/chunk-WB3YULQ4.mjs.map +1 -0
  52. package/dist/chunk-WCPLXRZX.mjs +106 -0
  53. package/dist/chunk-WCPLXRZX.mjs.map +1 -0
  54. package/dist/chunk-XSUSSWDS.mjs +18 -0
  55. package/dist/chunk-XSUSSWDS.mjs.map +1 -0
  56. package/dist/chunk-YOH25I6N.mjs +25 -0
  57. package/dist/chunk-YOH25I6N.mjs.map +1 -0
  58. package/dist/chunk-YQ3D5IQV.mjs +75 -0
  59. package/dist/chunk-YQ3D5IQV.mjs.map +1 -0
  60. package/dist/chunk-YQFVRDNC.mjs +53 -0
  61. package/dist/chunk-YQFVRDNC.mjs.map +1 -0
  62. package/dist/components/chat/Button.js.map +1 -1
  63. package/dist/components/chat/Button.mjs +6 -30
  64. package/dist/components/chat/Button.mjs.map +1 -1
  65. package/dist/components/chat/Chat.d.ts +1 -1
  66. package/dist/components/chat/Chat.js +6 -3
  67. package/dist/components/chat/Chat.js.map +1 -1
  68. package/dist/components/chat/Chat.mjs +20 -1851
  69. package/dist/components/chat/Chat.mjs.map +1 -1
  70. package/dist/components/chat/ChatContext.d.ts +1 -1
  71. package/dist/components/chat/ChatContext.mjs +7 -228
  72. package/dist/components/chat/ChatContext.mjs.map +1 -1
  73. package/dist/components/chat/CodeBlock.js +2 -1
  74. package/dist/components/chat/CodeBlock.js.map +1 -1
  75. package/dist/components/chat/CodeBlock.mjs +8 -482
  76. package/dist/components/chat/CodeBlock.mjs.map +1 -1
  77. package/dist/components/chat/Header.mjs +6 -23
  78. package/dist/components/chat/Header.mjs.map +1 -1
  79. package/dist/components/chat/Icons.mjs +16 -271
  80. package/dist/components/chat/Icons.mjs.map +1 -1
  81. package/dist/components/chat/Input.js +4 -2
  82. package/dist/components/chat/Input.js.map +1 -1
  83. package/dist/components/chat/Input.mjs +8 -255
  84. package/dist/components/chat/Input.mjs.map +1 -1
  85. package/dist/components/chat/Markdown.js +2 -1
  86. package/dist/components/chat/Markdown.js.map +1 -1
  87. package/dist/components/chat/Markdown.mjs +7 -546
  88. package/dist/components/chat/Markdown.mjs.map +1 -1
  89. package/dist/components/chat/Messages.js +2 -1
  90. package/dist/components/chat/Messages.js.map +1 -1
  91. package/dist/components/chat/Messages.mjs +8 -723
  92. package/dist/components/chat/Messages.mjs.map +1 -1
  93. package/dist/components/chat/Modal.d.ts +1 -1
  94. package/dist/components/chat/Modal.js +6 -3
  95. package/dist/components/chat/Modal.js.map +1 -1
  96. package/dist/components/chat/Modal.mjs +22 -2052
  97. package/dist/components/chat/Modal.mjs.map +1 -1
  98. package/dist/components/chat/Popup.js +6 -3
  99. package/dist/components/chat/Popup.js.map +1 -1
  100. package/dist/components/chat/Popup.mjs +23 -2061
  101. package/dist/components/chat/Popup.mjs.map +1 -1
  102. package/dist/components/chat/Response.mjs +6 -23
  103. package/dist/components/chat/Response.mjs.map +1 -1
  104. package/dist/components/chat/Sidebar.js +6 -3
  105. package/dist/components/chat/Sidebar.js.map +1 -1
  106. package/dist/components/chat/Sidebar.mjs +23 -2072
  107. package/dist/components/chat/Sidebar.mjs.map +1 -1
  108. package/dist/components/chat/Suggestion.js.map +1 -1
  109. package/dist/components/chat/Suggestion.mjs +5 -152
  110. package/dist/components/chat/Suggestion.mjs.map +1 -1
  111. package/dist/components/chat/Textarea.js.map +1 -1
  112. package/dist/components/chat/Textarea.mjs +4 -48
  113. package/dist/components/chat/Textarea.mjs.map +1 -1
  114. package/dist/components/chat/Window.js.map +1 -1
  115. package/dist/components/chat/Window.mjs +6 -125
  116. package/dist/components/chat/Window.mjs.map +1 -1
  117. package/dist/components/chat/index.js +6 -3
  118. package/dist/components/chat/index.js.map +1 -1
  119. package/dist/components/chat/index.mjs +31 -2078
  120. package/dist/components/chat/index.mjs.map +1 -1
  121. package/dist/components/chat/props.d.ts +1 -1
  122. package/dist/components/chat/props.mjs +1 -0
  123. package/dist/components/dev-console/console.js.map +1 -1
  124. package/dist/components/dev-console/console.mjs +8 -478
  125. package/dist/components/dev-console/console.mjs.map +1 -1
  126. package/dist/components/dev-console/icons.mjs +8 -83
  127. package/dist/components/dev-console/icons.mjs.map +1 -1
  128. package/dist/components/dev-console/index.js.map +1 -1
  129. package/dist/components/dev-console/index.mjs +10 -476
  130. package/dist/components/dev-console/index.mjs.map +1 -1
  131. package/dist/components/dev-console/types.d.ts +1 -1
  132. package/dist/components/dev-console/utils.js.map +1 -1
  133. package/dist/components/dev-console/utils.mjs +8 -154
  134. package/dist/components/dev-console/utils.mjs.map +1 -1
  135. package/dist/components/index.js +6 -3
  136. package/dist/components/index.js.map +1 -1
  137. package/dist/components/index.mjs +32 -2078
  138. package/dist/components/index.mjs.map +1 -1
  139. package/dist/context/index.d.ts +1 -1
  140. package/dist/context/index.mjs +1 -0
  141. package/dist/hooks/index.mjs +5 -24
  142. package/dist/hooks/index.mjs.map +1 -1
  143. package/dist/hooks/use-copilot-chat-suggestions.mjs +4 -24
  144. package/dist/hooks/use-copilot-chat-suggestions.mjs.map +1 -1
  145. package/dist/hooks/use-copy-to-clipboard.d.ts +1 -1
  146. package/dist/hooks/use-copy-to-clipboard.mjs +4 -21
  147. package/dist/hooks/use-copy-to-clipboard.mjs.map +1 -1
  148. package/dist/hooks/use-push-to-talk.d.ts +1 -1
  149. package/dist/hooks/use-push-to-talk.js.map +1 -1
  150. package/dist/hooks/use-push-to-talk.mjs +6 -148
  151. package/dist/hooks/use-push-to-talk.mjs.map +1 -1
  152. package/dist/index.css +747 -1
  153. package/dist/index.css.map +1 -0
  154. package/dist/index.js +6 -10
  155. package/dist/index.js.map +1 -1
  156. package/dist/index.mjs +38 -2110
  157. package/dist/index.mjs.map +1 -1
  158. package/dist/lib/utils.mjs +3 -20
  159. package/dist/lib/utils.mjs.map +1 -1
  160. package/dist/lib/utils.test.d.ts +1 -1
  161. package/dist/types/css.d.ts +1 -1
  162. package/dist/types/index.mjs +1 -0
  163. package/dist/types/suggestions.d.ts +1 -1
  164. package/package.json +11 -19
  165. package/src/components/chat/Chat.tsx +4 -1
  166. package/src/components/chat/Popup.tsx +4 -1
  167. package/src/components/chat/Sidebar.tsx +3 -1
  168. package/tsup.config.ts +15 -59
  169. package/dist/components/chat/Button.d.mts +0 -7
  170. package/dist/components/chat/Chat.d.mts +0 -87
  171. package/dist/components/chat/ChatContext.d.mts +0 -105
  172. package/dist/components/chat/CodeBlock.d.mts +0 -14
  173. package/dist/components/chat/Header.d.mts +0 -7
  174. package/dist/components/chat/Icons.d.mts +0 -18
  175. package/dist/components/chat/Input.d.mts +0 -7
  176. package/dist/components/chat/Markdown.d.mts +0 -8
  177. package/dist/components/chat/Messages.d.mts +0 -7
  178. package/dist/components/chat/Modal.d.mts +0 -51
  179. package/dist/components/chat/Popup.d.mts +0 -13
  180. package/dist/components/chat/Response.d.mts +0 -7
  181. package/dist/components/chat/Sidebar.d.mts +0 -13
  182. package/dist/components/chat/Suggestion.d.mts +0 -14
  183. package/dist/components/chat/Textarea.d.mts +0 -13
  184. package/dist/components/chat/Window.d.mts +0 -7
  185. package/dist/components/chat/index.d.mts +0 -11
  186. package/dist/components/chat/props.d.mts +0 -35
  187. package/dist/components/dev-console/console.d.mts +0 -10
  188. package/dist/components/dev-console/icons.d.mts +0 -9
  189. package/dist/components/dev-console/index.d.mts +0 -5
  190. package/dist/components/dev-console/types.d.mts +0 -9
  191. package/dist/components/dev-console/utils.d.mts +0 -10
  192. package/dist/components/index.d.mts +0 -11
  193. package/dist/context/index.d.mts +0 -2
  194. package/dist/hooks/index.d.mts +0 -1
  195. package/dist/hooks/use-copilot-chat-suggestions.d.mts +0 -83
  196. package/dist/hooks/use-copy-to-clipboard.d.mts +0 -9
  197. package/dist/hooks/use-push-to-talk.d.mts +0 -19
  198. package/dist/index.d.mts +0 -13
  199. package/dist/lib/utils.d.mts +0 -4
  200. package/dist/lib/utils.test.d.mts +0 -2
  201. package/dist/types/css.d.mts +0 -16
  202. package/dist/types/index.d.mts +0 -2
  203. package/dist/types/suggestions.d.mts +0 -8
package/dist/index.mjs CHANGED
@@ -1,2116 +1,44 @@
1
1
  "use client";
2
- var __defProp = Object.defineProperty;
3
- var __defProps = Object.defineProperties;
4
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
- var __spreadValues = (a, b) => {
10
- for (var prop in b || (b = {}))
11
- if (__hasOwnProp.call(b, prop))
12
- __defNormalProp(a, prop, b[prop]);
13
- if (__getOwnPropSymbols)
14
- for (var prop of __getOwnPropSymbols(b)) {
15
- if (__propIsEnum.call(b, prop))
16
- __defNormalProp(a, prop, b[prop]);
17
- }
18
- return a;
19
- };
20
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
- var __objRest = (source, exclude) => {
22
- var target = {};
23
- for (var prop in source)
24
- if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
- target[prop] = source[prop];
26
- if (source != null && __getOwnPropSymbols)
27
- for (var prop of __getOwnPropSymbols(source)) {
28
- if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
- target[prop] = source[prop];
30
- }
31
- return target;
32
- };
33
- var __async = (__this, __arguments, generator) => {
34
- return new Promise((resolve, reject) => {
35
- var fulfilled = (value) => {
36
- try {
37
- step(generator.next(value));
38
- } catch (e) {
39
- reject(e);
40
- }
41
- };
42
- var rejected = (value) => {
43
- try {
44
- step(generator.throw(value));
45
- } catch (e) {
46
- reject(e);
47
- }
48
- };
49
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
50
- step((generator = generator.apply(__this, __arguments)).next());
51
- });
52
- };
53
-
54
- // src/styles.css
55
- if (globalThis.hasOwnProperty("document")) {
56
- const style = document == null ? void 0 : document.createElement("style");
57
- style.innerHTML = "html{--copilot-kit-primary-color:#3b82f6;--copilot-kit-contrast-color:#fff;--copilot-kit-secondary-color:#f3f4f6;--copilot-kit-secondary-contrast-color:#000;--copilot-kit-background-color:#fff;--copilot-kit-muted-color:#6a6a6a;--copilot-kit-separator-color:rgba(0,0,0,.08);--copilot-kit-scrollbar-color:rgba(0,0,0,.2);--copilot-kit-response-button-color:#333;--copilot-kit-response-button-background-color:#fff}.copilotKitPopup{bottom:1rem;line-height:1.5;position:fixed;right:1rem;z-index:30;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;touch-action:manipulation}.copilotKitPopup svg{display:inline-block;vertical-align:middle}.copilotKitSidebar{bottom:1rem;line-height:1.5;position:fixed;right:1rem;z-index:30;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;touch-action:manipulation}.copilotKitSidebar svg{display:inline-block;vertical-align:middle}.copilotKitSidebarContentWrapper{margin-right:0;overflow:visible;transition:margin-right .3s ease}@media (min-width:640px){.copilotKitSidebarContentWrapper.sidebarExpanded{margin-right:28rem}}.copilotKitButton{align-items:center;background-color:var(--copilot-kit-primary-color);border:1px solid hsla(0,0%,100%,.2);border-radius:50%;color:var(--copilot-kit-contrast-color);cursor:pointer;display:flex;height:3.5rem;justify-content:center;outline:none;position:relative;transform:scale(1);transition:transform .2s;width:3.5rem}.copilotKitButton:hover{transform:scale(1.1)}.copilotKitButton:active{transform:scale(.75)}.copilotKitButtonIcon{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);transition:opacity .1s,transform .3s}.copilotKitButton.open .copilotKitButtonIconOpen{opacity:0;transform:translate(-50%,-50%) scale(0) rotate(90deg)}.copilotKitButton.open .copilotKitButtonIconClose,.copilotKitButton:not(.open) .copilotKitButtonIconOpen{opacity:1;transform:translate(-50%,-50%) scale(1) rotate(0deg)}.copilotKitButton:not(.open) .copilotKitButtonIconClose{opacity:0;transform:translate(-50%,-50%) scale(0) rotate(-90deg)}.copilotKitHeader{align-items:center;background-color:var(--copilot-kit-primary-color);border-bottom:1px solid var(--copilot-kit-separator-color);border-top-left-radius:0;border-top-right-radius:0;color:var(--copilot-kit-contrast-color);display:flex;font-weight:500;height:56px;justify-content:center;position:relative}.copilotKitSidebar .copilotKitHeader{border-radius:0}@media (min-width:640px){.copilotKitHeader{border-top-left-radius:8px;border-top-right-radius:8px;padding-left:24px;padding-right:24px}}.copilotKitHeader>button{background-color:transparent;border:0;color:var(--copilot-kit-contrast-color);cursor:pointer;outline:none;padding:0;position:absolute;right:16px;top:50%;transform:translateY(-50%)}.copilotKitHeader>button:focus{outline:none}.copilotKitInput{align-items:center;background-color:var(--copilot-kit-background-color);border-bottom-left-radius:.75rem;border-bottom-right-radius:.75rem;border-top:1px solid var(--copilot-kit-separator-color);cursor:text;display:flex;padding:1rem 1rem 1rem 2rem;position:relative}.copilotKitInput>.copilotKitInputControls>button{-webkit-appearance:button;-moz-appearance:button;appearance:button;background-color:transparent;background-image:none;border:0;color:rgba(0,0,0,.25);cursor:pointer;display:inline-block;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0 0 0 .5rem;padding:.25rem;text-align:center;text-indent:0;text-shadow:none;text-transform:none;transform:scale(1);transition-duration:.2s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.copilotKitInput>.copilotKitInputControls>button:not([disabled]){color:var(--copilot-kit-primary-color)}.copilotKitInput>.copilotKitInputControls>button:not([disabled]):hover{transform:scale(1.1)}.copilotKitInput>.copilotKitInputControls>button[disabled]{color:var(--copilot-kit-muted-color)}.copilotKitInputControls{display:flex}.copilotKitInput>textarea{flex:1;outline:2px solid transparent;outline-offset:2px;overflow-wrap:break-word;resize:none;white-space:pre-wrap;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--copilot-kit-background-color);border:0;color:var(--copilot-kit-secondary-contrast-color);cursor:text;font-family:inherit;font-size:.875rem;font-weight:inherit;line-height:1.25rem;margin:0;padding:0}.copilotKitInput>textarea::-moz-placeholder{color:var(--copilot-kit-muted-color);opacity:1}.copilotKitInput>textarea::placeholder{color:var(--copilot-kit-muted-color);opacity:1}.copilotKitInput>.copilotKitInputControls>button.copilotKitPushToTalkRecording{animation:copilotKitPulseAnimation 2s cubic-bezier(.4,0,.6,1) infinite;background-color:red;border-radius:50%;color:#fff}.copilotKitMessages{background-color:var(--copilot-kit-background-color);display:flex;flex:1;flex-direction:column;overflow-y:scroll;padding:1rem 2rem}.copilotKitMessages::-webkit-scrollbar{width:9px}.copilotKitMessages::-webkit-scrollbar-thumb{background-color:var(--copilot-kit-scrollbar-color);border:2px solid var(--copilot-kit-background-color);border-radius:10rem}.copilotKitMessages::-webkit-scrollbar-track-piece:start{background:transparent}.copilotKitMessages::-webkit-scrollbar-track-piece:end{background:transparent}.copilotKitMessage{border-radius:.5rem;font-size:.875rem;line-height:1.25rem;margin-bottom:.5rem;max-width:80%;overflow-wrap:break-word;padding:1rem}.copilotKitMessage.copilotKitUserMessage{background:var(--copilot-kit-primary-color);color:var(--copilot-kit-contrast-color);margin-left:auto;white-space:pre-wrap}.copilotKitMessage.copilotKitAssistantMessage{background:var(--copilot-kit-secondary-color);color:var(--copilot-kit-secondary-contrast-color);margin-right:auto}.copilotKitMessage.copilotKitAssistantMessage+.copilotKitMessage.copilotKitUserMessage,.copilotKitMessage.copilotKitUserMessage+.copilotKitMessage.copilotKitAssistantMessage{margin-top:1.5rem}.copilotKitCustomAssistantMessage{margin-bottom:1.5rem;margin-top:1.5rem}.copilotKitMessage .inProgressLabel{margin-left:10px}.copilotKitMessages footer{display:flex;flex-direction:column;flex-grow:1;justify-content:flex-end}.copilotKitWindow{background-color:#fff;border-color:#e5e7eb;border-radius:.75rem;box-shadow:0 5px 40px rgba(0,0,0,.16);display:flex;flex-direction:column;inset:0;opacity:0;pointer-events:none;position:fixed;transform:scale(.95) translateY(20px);transform-origin:bottom;transition:opacity .1s ease-out,transform .2s ease-out}.copilotKitSidebar .copilotKitWindow{border-radius:0;opacity:1;transform:translateX(100%)}.copilotKitWindow.open{opacity:1;pointer-events:auto;transform:scale(1) translateY(0)}.copilotKitSidebar .copilotKitWindow.open{transform:translateX(0)}@media (min-width:640px){.copilotKitWindow{border-width:0;bottom:5rem;height:600px;left:auto;margin-bottom:1rem;max-height:calc(100% - 6rem);min-height:200px;right:1rem;top:auto;transform-origin:bottom right;width:24rem}.copilotKitSidebar .copilotKitWindow{bottom:0;left:auto;margin-bottom:0;max-height:none;min-height:100%;right:0;top:auto;width:28rem}}.copilotKitActivityDot1{animation:copilotKitActivityDotsAnimation 1.05s infinite}.copilotKitActivityDot2{animation-delay:.1s}.copilotKitActivityDot3{animation-delay:.2s}@keyframes copilotKitActivityDotsAnimation{0%,57.14%{animation-timing-function:cubic-bezier(.33,.66,.66,1);transform:translate(0)}28.57%{animation-timing-function:cubic-bezier(.33,0,.66,.33);transform:translateY(-6px)}to{transform:translate(0)}}@keyframes copilotKitSpinAnimation{to{transform:rotate(1turn)}}@keyframes copilotKitPulseAnimation{50%{opacity:.5}}.copilotKitResponseButton{background-color:var(--copilot-kit-response-button-background-color);border:1px solid var(--copilot-kit-separator-color);border-radius:4px;color:var(--copilot-kit-response-button-color);cursor:pointer;font-size:14px;font-weight:500;height:32px;line-height:30px;margin:15px 0 0;padding:0 16px;text-align:center;text-decoration:none;text-transform:none;white-space:nowrap}.copilotKitResponseButton:hover{filter:brightness(95%)}.copilotKitResponseButton>span{margin-right:.5rem}.copilotKitMarkdown h1,.copilotKitMarkdown h2,.copilotKitMarkdown h3,.copilotKitMarkdown h4,.copilotKitMarkdown h5,.copilotKitMarkdown h6{font-weight:700;line-height:1.2}.copilotKitMarkdown h1:not(:last-child),.copilotKitMarkdown h2:not(:last-child),.copilotKitMarkdown h3:not(:last-child),.copilotKitMarkdown h4:not(:last-child),.copilotKitMarkdown h5:not(:last-child),.copilotKitMarkdown h6:not(:last-child){margin-bottom:1rem}.copilotKitMarkdown h1{font-size:1.5em}.copilotKitMarkdown h2{font-size:1.25em;font-weight:600}.copilotKitMarkdown h3{font-size:1.1em}.copilotKitMarkdown h4{font-size:1em}.copilotKitMarkdown h5{font-size:.9em}.copilotKitMarkdown h6{font-size:.8em}.copilotKitMarkdown blockquote:not(:last-child),.copilotKitMarkdown ol:not(:last-child),.copilotKitMarkdown p:not(:last-child),.copilotKitMarkdown pre:not(:last-child),.copilotKitMarkdown ul:not(:last-child){margin-bottom:1.25em}.copilotKitMarkdown blockquote{border-left:2px solid;border-color:#8e8ea0;line-height:1.2;padding-left:10px}.copilotKitMarkdown blockquote p{padding:.7em 0}.copilotKitMarkdown ul{list-style-type:disc;overflow:visible;padding-left:20px}.copilotKitMarkdown li{list-style-position:outside;list-style-type:inherit;margin-left:0;overflow:visible;padding-left:0;position:relative}.copilotKitCodeBlock{background-color:#09090b;border-radius:.375rem;position:relative;width:100%}.copilotKitCodeBlockToolbar{align-items:center;background-color:#27272a;border-top-left-radius:.375rem;border-top-right-radius:.375rem;color:#e4e4e4;display:flex;font-family:sans-serif;justify-content:space-between;padding-bottom:.09rem;padding-left:1rem;padding-top:.09rem;width:100%}.copilotKitCodeBlockToolbarLanguage{font-size:.75rem;line-height:1rem;text-transform:lowercase}.copilotKitCodeBlockToolbarButtons{align-items:center;display:flex;margin-left:.25rem;margin-right:.25rem}.copilotKitCodeBlockToolbarButton{align-items:center;border-radius:.375rem;display:inline-flex;font-size:.875rem;font-weight:500;height:2.5rem;justify-content:center;line-height:1.25rem;margin:2px;padding:3px;width:2.5rem}.copilotKitCodeBlockToolbarButton:hover{background-color:#37373a}.copilotKitMessages footer .suggestions{display:flex;flex-wrap:wrap;gap:8px}.copilotKitMessages footer h6{font-size:.7rem;font-weight:500;margin-bottom:8px}.copilotKitMessages footer .suggestions .suggestion{background:var(--copilot-kit-primary-color);border-radius:.5rem;color:var(--copilot-kit-contrast-color);font-size:.7rem;padding:8px 12px}.copilotKitMessages footer .suggestions button{transition:transform .3s ease}.copilotKitMessages footer .suggestions button:not(:disabled):hover{transform:scale(1.05)}.copilotKitMessages footer .suggestions button:disabled{cursor:wait}.copilotKitMessages footer .suggestions button svg{margin-right:6px}.copilotKitChat{line-height:1.5;z-index:30;-webkit-text-size-adjust:100%;display:flex;flex-direction:column;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;touch-action:manipulation}.copilotKitChat svg{display:inline-block;vertical-align:middle}.copilotKitChat .copilotKitMessages{flex-grow:1}.copilotKitDevConsole{align-items:center;background-color:#f3f4f6;border-bottom:1px solid #cecece;display:flex;padding:10px}.copilotKitDevConsole.copilotKitDevConsoleWarnOutdated{background-color:#f9caca}.copilotKitDevConsole .copilotKitVersionInfo{display:flex;flex:1;flex-direction:column;gap:2px;margin-left:18px}.copilotKitDevConsole .copilotKitVersionInfo header{font-size:11px;font-weight:700}.copilotKitDevConsole .copilotKitVersionInfo footer{margin-top:10px}.copilotKitDevConsole .copilotKitVersionInfo footer button{background-color:#fff;border:1px solid #979797;border-radius:4px;display:inline-block;font-family:monospace;font-size:11px;font-weight:400;overflow:hidden;padding:1px 12px 1px 5px;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:260px}.copilotKitDevConsole .copilotKitVersionInfo header aside{color:#7f7a7a;display:inline;font-weight:400;margin-left:5px}.copilotKitDevConsole .copilotKitVersionInfo section{font-size:11px}.copilotKitDevConsole .copilotKitVersionInfo section svg{margin-left:3px;margin-top:-3px}.copilotKitDevConsole .copilotKitDebugMenuButton{align-items:center;background-color:#d8d8d8;border:1px solid #979797;border-radius:6px;display:flex;font-size:11px;font-weight:700;height:30px;justify-content:center;outline:none;width:90px}.copilotKitDebugMenuButton.compact{color:#000;font-size:8px;justify-content:center;outline:none;width:35px}.copilotKitDevConsole .copilotKitDebugMenuButton:hover{background-color:#c7c7c7}.copilotKitDevConsole .copilotKitDebugMenuButton>svg{margin-left:10px}.copilotKitDebugMenu{background-color:#d8d8d8;border:1px solid #979797;border-radius:6px;font-size:13px;margin-top:2px;outline:none;padding:.25rem}.copilotKitDebugMenuItem{background:none;border:none;cursor:pointer;display:block;padding:3px 10px;text-align:left;width:100%}.copilotKitDebugMenuItem:hover{background-color:#c7c7c7;border-radius:4px}.copilotKitDebugMenu[data-closed]{opacity:0;transform:scale(.95)}.copilotKitDebugMenu hr{background-color:#979797;border:none;height:1px;margin:.25rem}";
58
- document == null ? void 0 : document.head.appendChild(style);
59
- }
60
-
61
- // src/components/chat/Modal.tsx
62
- import React8 from "react";
63
-
64
- // src/components/chat/ChatContext.tsx
65
- import React from "react";
66
-
67
- // src/components/chat/Icons.tsx
68
- import { jsx, jsxs } from "react/jsx-runtime";
69
- var OpenIcon = /* @__PURE__ */ jsx(
70
- "svg",
71
- {
72
- xmlns: "http://www.w3.org/2000/svg",
73
- viewBox: "0 0 24 24",
74
- fill: "currentColor",
75
- width: "24",
76
- height: "24",
77
- children: /* @__PURE__ */ jsx("g", { transform: "translate(24, 0) scale(-1, 1)", children: /* @__PURE__ */ jsx(
78
- "path",
79
- {
80
- fillRule: "evenodd",
81
- 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",
82
- clipRule: "evenodd"
83
- }
84
- ) })
85
- }
86
- );
87
- var CloseIcon = /* @__PURE__ */ jsx(
88
- "svg",
89
- {
90
- xmlns: "http://www.w3.org/2000/svg",
91
- fill: "none",
92
- viewBox: "0 0 24 24",
93
- strokeWidth: "1.5",
94
- stroke: "currentColor",
95
- width: "24",
96
- height: "24",
97
- children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19.5 8.25l-7.5 7.5-7.5-7.5" })
98
- }
99
- );
100
- var HeaderCloseIcon = /* @__PURE__ */ jsx(
101
- "svg",
102
- {
103
- xmlns: "http://www.w3.org/2000/svg",
104
- fill: "none",
105
- viewBox: "0 0 24 24",
106
- strokeWidth: "1.5",
107
- stroke: "currentColor",
108
- width: "24",
109
- height: "24",
110
- children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" })
111
- }
112
- );
113
- var SendIcon = /* @__PURE__ */ jsx(
114
- "svg",
115
- {
116
- xmlns: "http://www.w3.org/2000/svg",
117
- fill: "none",
118
- viewBox: "0 0 24 24",
119
- strokeWidth: 1.5,
120
- stroke: "currentColor",
121
- width: "24",
122
- height: "24",
123
- children: /* @__PURE__ */ jsx(
124
- "path",
125
- {
126
- strokeLinecap: "round",
127
- strokeLinejoin: "round",
128
- 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"
129
- }
130
- )
131
- }
132
- );
133
- var SpinnerIcon = /* @__PURE__ */ jsxs(
134
- "svg",
135
- {
136
- style: {
137
- animation: "copilotKitSpinAnimation 1s linear infinite",
138
- color: "rgb(107 114 128)"
139
- },
140
- width: "24",
141
- height: "24",
142
- xmlns: "http://www.w3.org/2000/svg",
143
- fill: "none",
144
- viewBox: "0 0 24 24",
145
- children: [
146
- /* @__PURE__ */ jsx(
147
- "circle",
148
- {
149
- style: { opacity: 0.25 },
150
- cx: "12",
151
- cy: "12",
152
- r: "10",
153
- stroke: "currentColor",
154
- strokeWidth: "4"
155
- }
156
- ),
157
- /* @__PURE__ */ jsx(
158
- "path",
159
- {
160
- style: { opacity: 0.75 },
161
- fill: "currentColor",
162
- 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"
163
- }
164
- )
165
- ]
166
- }
167
- );
168
- var SmallSpinnerIcon = /* @__PURE__ */ jsxs(
169
- "svg",
170
- {
171
- style: {
172
- animation: "copilotKitSpinAnimation 1s linear infinite"
173
- },
174
- width: "13",
175
- height: "13",
176
- xmlns: "http://www.w3.org/2000/svg",
177
- fill: "none",
178
- viewBox: "0 0 24 24",
179
- children: [
180
- /* @__PURE__ */ jsx(
181
- "circle",
182
- {
183
- style: { opacity: 0.25 },
184
- cx: "12",
185
- cy: "12",
186
- r: "10",
187
- stroke: "currentColor",
188
- strokeWidth: "4"
189
- }
190
- ),
191
- /* @__PURE__ */ jsx(
192
- "path",
193
- {
194
- style: { opacity: 0.75 },
195
- fill: "currentColor",
196
- 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"
197
- }
198
- )
199
- ]
200
- }
201
- );
202
- var ActivityIcon = /* @__PURE__ */ jsxs(
203
- "svg",
204
- {
205
- style: {
206
- display: "inline-block",
207
- marginLeft: "0.25rem",
208
- marginRight: "0.25rem"
209
- },
210
- height: "24",
211
- width: "24",
212
- viewBox: "0 0 27 27",
213
- xmlns: "http://www.w3.org/2000/svg",
214
- fill: "currentColor",
215
- children: [
216
- /* @__PURE__ */ jsx("circle", { className: "copilotKitActivityDot1", cx: "4", cy: "12", r: "3" }),
217
- /* @__PURE__ */ jsx("circle", { className: "copilotKitActivityDot1 copilotKitActivityDot2", cx: "12", cy: "12", r: "3" }),
218
- /* @__PURE__ */ jsx("circle", { className: "copilotKitActivityDot1 copilotKitActivityDot3", cx: "20", cy: "12", r: "3" })
219
- ]
220
- }
221
- );
222
- function CheckIcon(_a) {
223
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
224
- return /* @__PURE__ */ jsx(
225
- "svg",
226
- __spreadProps(__spreadValues({
227
- xmlns: "http://www.w3.org/2000/svg",
228
- viewBox: "0 0 256 256",
229
- fill: "currentColor",
230
- style: { height: "1rem", width: "1rem" },
231
- className
232
- }, props), {
233
- 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" })
234
- })
235
- );
236
- }
237
- function DownloadIcon(_a) {
238
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
239
- return /* @__PURE__ */ jsx(
240
- "svg",
241
- __spreadProps(__spreadValues({
242
- xmlns: "http://www.w3.org/2000/svg",
243
- viewBox: "0 0 256 256",
244
- fill: "currentColor",
245
- style: { height: "1rem", width: "1rem" },
246
- className
247
- }, props), {
248
- 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" })
249
- })
250
- );
251
- }
252
- function CopyIcon(_a) {
253
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
254
- return /* @__PURE__ */ jsx(
255
- "svg",
256
- __spreadProps(__spreadValues({
257
- xmlns: "http://www.w3.org/2000/svg",
258
- viewBox: "0 0 256 256",
259
- fill: "currentColor",
260
- style: { height: "1rem", width: "1rem" },
261
- className
262
- }, props), {
263
- 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" })
264
- })
265
- );
266
- }
267
- var StopIcon = /* @__PURE__ */ jsx(
268
- "svg",
269
- {
270
- xmlns: "http://www.w3.org/2000/svg",
271
- viewBox: "0 0 256 256",
272
- fill: "currentColor",
273
- style: { height: "1rem", width: "1rem" },
274
- 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" })
275
- }
276
- );
277
- var RegenerateIcon = /* @__PURE__ */ jsx(
278
- "svg",
279
- {
280
- xmlns: "http://www.w3.org/2000/svg",
281
- viewBox: "0 0 256 256",
282
- fill: "currentColor",
283
- style: { height: "1rem", width: "1rem" },
284
- 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" })
285
- }
286
- );
287
- var PushToTalkIcon = /* @__PURE__ */ jsx(
288
- "svg",
289
- {
290
- xmlns: "http://www.w3.org/2000/svg",
291
- fill: "none",
292
- viewBox: "0 0 24 24",
293
- strokeWidth: 1.5,
294
- stroke: "currentColor",
295
- className: "w-6 h-6",
296
- children: /* @__PURE__ */ jsx(
297
- "path",
298
- {
299
- strokeLinecap: "round",
300
- strokeLinejoin: "round",
301
- d: "M12 18.75a6 6 0 0 0 6-6v-1.5m-6 7.5a6 6 0 0 1-6-6v-1.5m6 7.5v3.75m-3.75 0h7.5M12 15.75a3 3 0 0 1-3-3V4.5a3 3 0 1 1 6 0v8.25a3 3 0 0 1-3 3Z"
302
- }
303
- )
304
- }
305
- );
306
-
307
- // src/components/chat/ChatContext.tsx
308
- import { jsx as jsx2 } from "react/jsx-runtime";
309
- var ChatContext = React.createContext(void 0);
310
- function useChatContext() {
311
- const context = React.useContext(ChatContext);
312
- if (context === void 0) {
313
- throw new Error(
314
- "Context not found. Did you forget to wrap your app in a <ChatContextProvider> component?"
315
- );
316
- }
317
- return context;
318
- }
319
- var ChatContextProvider = ({
320
- // temperature,
321
- // instructions,
322
- // maxFeedback,
323
- labels,
324
- icons,
325
- children,
326
- open,
327
- setOpen
328
- }) => {
329
- const context = {
330
- labels: __spreadValues(__spreadValues({}, {
331
- initial: "",
332
- title: "CopilotKit",
333
- placeholder: "Type a message...",
334
- error: "\u274C An error occurred. Please try again.",
335
- stopGenerating: "Stop generating",
336
- regenerateResponse: "Regenerate response"
337
- }), labels),
338
- icons: __spreadValues(__spreadValues({}, {
339
- openIcon: OpenIcon,
340
- closeIcon: CloseIcon,
341
- headerCloseIcon: HeaderCloseIcon,
342
- sendIcon: SendIcon,
343
- activityIcon: ActivityIcon,
344
- spinnerIcon: SpinnerIcon,
345
- stopIcon: StopIcon,
346
- regenerateIcon: RegenerateIcon,
347
- pushToTalkIcon: PushToTalkIcon
348
- }), icons),
349
- open,
350
- setOpen
351
- };
352
- return /* @__PURE__ */ jsx2(ChatContext.Provider, { value: context, children });
353
- };
354
-
355
- // src/components/chat/Window.tsx
356
- import React2, { useCallback, useEffect } from "react";
357
- import { jsx as jsx3 } from "react/jsx-runtime";
358
- var Window = ({
359
- children,
360
- clickOutsideToClose,
361
- shortcut,
362
- hitEscapeToClose
363
- }) => {
364
- const windowRef = React2.useRef(null);
365
- const { open, setOpen } = useChatContext();
366
- const handleClickOutside = useCallback(
367
- (event) => {
368
- var _a;
369
- if (!clickOutsideToClose) {
370
- return;
371
- }
372
- const parentElement = (_a = windowRef.current) == null ? void 0 : _a.parentElement;
373
- let className = "";
374
- if (event.target instanceof HTMLElement) {
375
- className = event.target.className;
376
- }
377
- if (open && parentElement && !parentElement.contains(event.target) && // prevent closing the window when clicking on the debug menu
378
- !className.includes("copilotKitDebugMenu")) {
379
- setOpen(false);
380
- }
381
- },
382
- [clickOutsideToClose, open, setOpen]
383
- );
384
- const handleKeyDown = useCallback(
385
- (event) => {
386
- var _a;
387
- const target = event.target;
388
- const isInput = target.tagName === "INPUT" || target.tagName === "SELECT" || target.tagName === "TEXTAREA" || target.isContentEditable;
389
- const isDescendantOfWrapper = (_a = windowRef.current) == null ? void 0 : _a.contains(target);
390
- if (open && event.key === "Escape" && (!isInput || isDescendantOfWrapper) && hitEscapeToClose) {
391
- setOpen(false);
392
- } else if (event.key === shortcut && (isMacOS() && event.metaKey || !isMacOS() && event.ctrlKey) && (!isInput || isDescendantOfWrapper)) {
393
- setOpen(!open);
394
- }
395
- },
396
- [hitEscapeToClose, shortcut, open, setOpen]
397
- );
398
- const adjustForMobile = useCallback(() => {
399
- const copilotKitWindow = windowRef.current;
400
- const vv = window.visualViewport;
401
- if (!copilotKitWindow || !vv) {
402
- return;
403
- }
404
- if (window.innerWidth < 640 && open) {
405
- copilotKitWindow.style.height = `${vv.height}px`;
406
- copilotKitWindow.style.left = `${vv.offsetLeft}px`;
407
- copilotKitWindow.style.top = `${vv.offsetTop}px`;
408
- document.body.style.position = "fixed";
409
- document.body.style.width = "100%";
410
- document.body.style.height = `${window.innerHeight}px`;
411
- document.body.style.overflow = "hidden";
412
- document.body.style.touchAction = "none";
413
- document.body.addEventListener("touchmove", preventScroll, {
414
- passive: false
415
- });
416
- } else {
417
- copilotKitWindow.style.height = "";
418
- copilotKitWindow.style.left = "";
419
- copilotKitWindow.style.top = "";
420
- document.body.style.position = "";
421
- document.body.style.height = "";
422
- document.body.style.width = "";
423
- document.body.style.overflow = "";
424
- document.body.style.top = "";
425
- document.body.style.touchAction = "";
426
- document.body.removeEventListener("touchmove", preventScroll);
427
- }
428
- }, [open]);
429
- useEffect(() => {
430
- document.addEventListener("mousedown", handleClickOutside);
431
- document.addEventListener("keydown", handleKeyDown);
432
- if (window.visualViewport) {
433
- window.visualViewport.addEventListener("resize", adjustForMobile);
434
- adjustForMobile();
435
- }
436
- return () => {
437
- document.removeEventListener("mousedown", handleClickOutside);
438
- document.removeEventListener("keydown", handleKeyDown);
439
- if (window.visualViewport) {
440
- window.visualViewport.removeEventListener("resize", adjustForMobile);
441
- }
442
- };
443
- }, [adjustForMobile, handleClickOutside, handleKeyDown]);
444
- return /* @__PURE__ */ jsx3("div", { className: `copilotKitWindow${open ? " open" : ""}`, ref: windowRef, children });
445
- };
446
- var preventScroll = (event) => {
447
- let targetElement = event.target;
448
- const hasParentWithClass = (element, className) => {
449
- while (element && element !== document.body) {
450
- if (element.classList.contains(className)) {
451
- return true;
452
- }
453
- element = element.parentElement;
454
- }
455
- return false;
456
- };
457
- if (!hasParentWithClass(targetElement, "copilotKitMessages")) {
458
- event.preventDefault();
459
- }
460
- };
461
- function isMacOS() {
462
- return /Mac|iMac|Macintosh/i.test(navigator.userAgent);
463
- }
464
-
465
- // src/components/chat/Button.tsx
466
- import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
467
- var Button = ({}) => {
468
- const { open, setOpen, icons } = useChatContext();
469
- return /* @__PURE__ */ jsx4("div", { onClick: () => setOpen(!open), children: /* @__PURE__ */ jsxs2(
470
- "button",
471
- {
472
- className: `copilotKitButton ${open ? "open" : ""}`,
473
- "aria-label": open ? "Close Chat" : "Open Chat",
474
- children: [
475
- /* @__PURE__ */ jsx4("div", { className: "copilotKitButtonIcon copilotKitButtonIconOpen", children: icons.openIcon }),
476
- /* @__PURE__ */ jsx4("div", { className: "copilotKitButtonIcon copilotKitButtonIconClose", children: icons.closeIcon })
477
- ]
478
- }
479
- ) });
480
- };
481
-
482
- // src/components/chat/Header.tsx
483
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
484
- var Header = ({}) => {
485
- const { setOpen, icons, labels } = useChatContext();
486
- return /* @__PURE__ */ jsxs3("div", { className: "copilotKitHeader", children: [
487
- /* @__PURE__ */ jsx5("div", { children: labels.title }),
488
- /* @__PURE__ */ jsx5("button", { onClick: () => setOpen(false), "aria-label": "Close", children: icons.headerCloseIcon })
489
- ] });
490
- };
491
-
492
- // src/components/chat/Messages.tsx
493
- import React4, { useEffect as useEffect2, useMemo as useMemo2 } from "react";
494
-
495
- // src/components/chat/Markdown.tsx
496
- import { memo as memo2 } from "react";
497
- import ReactMarkdown from "react-markdown";
498
-
499
- // src/components/chat/CodeBlock.tsx
500
- import { memo } from "react";
501
- import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
502
-
503
- // src/hooks/use-copy-to-clipboard.tsx
504
- import * as React3 from "react";
505
- function useCopyToClipboard({ timeout = 2e3 }) {
506
- const [isCopied, setIsCopied] = React3.useState(false);
507
- const copyToClipboard = (value) => {
508
- var _a;
509
- if (typeof window === "undefined" || !((_a = navigator.clipboard) == null ? void 0 : _a.writeText)) {
510
- return;
511
- }
512
- if (!value) {
513
- return;
514
- }
515
- navigator.clipboard.writeText(value).then(() => {
516
- setIsCopied(true);
517
- setTimeout(() => {
518
- setIsCopied(false);
519
- }, timeout);
520
- });
521
- };
522
- return { isCopied, copyToClipboard };
523
- }
524
-
525
- // src/components/chat/CodeBlock.tsx
526
- import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
527
- var programmingLanguages = {
528
- javascript: ".js",
529
- python: ".py",
530
- java: ".java",
531
- c: ".c",
532
- cpp: ".cpp",
533
- "c++": ".cpp",
534
- "c#": ".cs",
535
- ruby: ".rb",
536
- php: ".php",
537
- swift: ".swift",
538
- "objective-c": ".m",
539
- kotlin: ".kt",
540
- typescript: ".ts",
541
- go: ".go",
542
- perl: ".pl",
543
- rust: ".rs",
544
- scala: ".scala",
545
- haskell: ".hs",
546
- lua: ".lua",
547
- shell: ".sh",
548
- sql: ".sql",
549
- html: ".html",
550
- css: ".css"
551
- // add more file extensions here, make sure the key is same as language prop in CodeBlock.tsx component
552
- };
553
- var generateRandomString = (length, lowercase = false) => {
554
- const chars = "ABCDEFGHJKLMNPQRSTUVWXY3456789";
555
- let result = "";
556
- for (let i = 0; i < length; i++) {
557
- result += chars.charAt(Math.floor(Math.random() * chars.length));
558
- }
559
- return lowercase ? result.toLowerCase() : result;
560
- };
561
- var CodeBlock = memo(({ language, value }) => {
562
- const { isCopied, copyToClipboard } = useCopyToClipboard({ timeout: 2e3 });
563
- const downloadAsFile = () => {
564
- if (typeof window === "undefined") {
565
- return;
566
- }
567
- const fileExtension = programmingLanguages[language] || ".file";
568
- const suggestedFileName = `file-${generateRandomString(3, true)}${fileExtension}`;
569
- const fileName = window.prompt("Enter file name", suggestedFileName);
570
- if (!fileName) {
571
- return;
572
- }
573
- const blob = new Blob([value], { type: "text/plain" });
574
- const url = URL.createObjectURL(blob);
575
- const link = document.createElement("a");
576
- link.download = fileName;
577
- link.href = url;
578
- link.style.display = "none";
579
- document.body.appendChild(link);
580
- link.click();
581
- document.body.removeChild(link);
582
- URL.revokeObjectURL(url);
583
- };
584
- const onCopy = () => {
585
- if (isCopied) return;
586
- copyToClipboard(value);
587
- };
588
- return /* @__PURE__ */ jsxs4("div", { className: "copilotKitCodeBlock", children: [
589
- /* @__PURE__ */ jsxs4("div", { className: "copilotKitCodeBlockToolbar", children: [
590
- /* @__PURE__ */ jsx6("span", { className: "copilotKitCodeBlockToolbarLanguage", children: language }),
591
- /* @__PURE__ */ jsxs4("div", { className: "copilotKitCodeBlockToolbarButtons", children: [
592
- /* @__PURE__ */ jsxs4("button", { className: "copilotKitCodeBlockToolbarButton", onClick: downloadAsFile, children: [
593
- /* @__PURE__ */ jsx6(DownloadIcon, {}),
594
- /* @__PURE__ */ jsx6("span", { className: "sr-only", children: "Download" })
595
- ] }),
596
- /* @__PURE__ */ jsxs4("button", { className: "copilotKitCodeBlockToolbarButton", onClick: onCopy, children: [
597
- isCopied ? /* @__PURE__ */ jsx6(CheckIcon, {}) : /* @__PURE__ */ jsx6(CopyIcon, {}),
598
- /* @__PURE__ */ jsx6("span", { className: "sr-only", children: "Copy code" })
599
- ] })
600
- ] })
601
- ] }),
602
- /* @__PURE__ */ jsx6(
603
- SyntaxHighlighter,
604
- {
605
- language,
606
- style: highlightStyle,
607
- PreTag: "div",
608
- customStyle: {
609
- margin: 0,
610
- borderBottomLeftRadius: "0.375rem",
611
- borderBottomRightRadius: "0.375rem"
612
- },
613
- children: value
614
- }
615
- )
616
- ] });
617
- });
618
- CodeBlock.displayName = "CodeBlock";
619
- var highlightStyle = {
620
- 'pre[class*="language-"]': {
621
- color: "#d4d4d4",
622
- fontSize: "13px",
623
- textShadow: "none",
624
- fontFamily: 'Menlo, Monaco, Consolas, "Andale Mono", "Ubuntu Mono", "Courier New", monospace',
625
- direction: "ltr",
626
- textAlign: "left",
627
- whiteSpace: "pre",
628
- wordSpacing: "normal",
629
- wordBreak: "normal",
630
- lineHeight: "1.5",
631
- MozTabSize: "4",
632
- OTabSize: "4",
633
- tabSize: "4",
634
- WebkitHyphens: "none",
635
- MozHyphens: "none",
636
- msHyphens: "none",
637
- hyphens: "none",
638
- padding: "1em",
639
- margin: ".5em 0",
640
- overflow: "auto",
641
- background: "#1e1e1e"
642
- },
643
- 'code[class*="language-"]': {
644
- color: "#d4d4d4",
645
- fontSize: "13px",
646
- textShadow: "none",
647
- fontFamily: 'Menlo, Monaco, Consolas, "Andale Mono", "Ubuntu Mono", "Courier New", monospace',
648
- direction: "ltr",
649
- textAlign: "left",
650
- whiteSpace: "pre",
651
- wordSpacing: "normal",
652
- wordBreak: "normal",
653
- lineHeight: "1.5",
654
- MozTabSize: "4",
655
- OTabSize: "4",
656
- tabSize: "4",
657
- WebkitHyphens: "none",
658
- MozHyphens: "none",
659
- msHyphens: "none",
660
- hyphens: "none"
661
- },
662
- 'pre[class*="language-"]::selection': {
663
- textShadow: "none",
664
- background: "#264F78"
665
- },
666
- 'code[class*="language-"]::selection': {
667
- textShadow: "none",
668
- background: "#264F78"
669
- },
670
- 'pre[class*="language-"] *::selection': {
671
- textShadow: "none",
672
- background: "#264F78"
673
- },
674
- 'code[class*="language-"] *::selection': {
675
- textShadow: "none",
676
- background: "#264F78"
677
- },
678
- ':not(pre) > code[class*="language-"]': {
679
- padding: ".1em .3em",
680
- borderRadius: ".3em",
681
- color: "#db4c69",
682
- background: "#1e1e1e"
683
- },
684
- ".namespace": {
685
- Opacity: ".7"
686
- },
687
- "doctype.doctype-tag": {
688
- color: "#569CD6"
689
- },
690
- "doctype.name": {
691
- color: "#9cdcfe"
692
- },
693
- comment: {
694
- color: "#6a9955"
695
- },
696
- prolog: {
697
- color: "#6a9955"
698
- },
699
- punctuation: {
700
- color: "#d4d4d4"
701
- },
702
- ".language-html .language-css .token.punctuation": {
703
- color: "#d4d4d4"
704
- },
705
- ".language-html .language-javascript .token.punctuation": {
706
- color: "#d4d4d4"
707
- },
708
- property: {
709
- color: "#9cdcfe"
710
- },
711
- tag: {
712
- color: "#569cd6"
713
- },
714
- boolean: {
715
- color: "#569cd6"
716
- },
717
- number: {
718
- color: "#b5cea8"
719
- },
720
- constant: {
721
- color: "#9cdcfe"
722
- },
723
- symbol: {
724
- color: "#b5cea8"
725
- },
726
- inserted: {
727
- color: "#b5cea8"
728
- },
729
- unit: {
730
- color: "#b5cea8"
731
- },
732
- selector: {
733
- color: "#d7ba7d"
734
- },
735
- "attr-name": {
736
- color: "#9cdcfe"
737
- },
738
- string: {
739
- color: "#ce9178"
740
- },
741
- char: {
742
- color: "#ce9178"
743
- },
744
- builtin: {
745
- color: "#ce9178"
746
- },
747
- deleted: {
748
- color: "#ce9178"
749
- },
750
- ".language-css .token.string.url": {
751
- textDecoration: "underline"
752
- },
753
- operator: {
754
- color: "#d4d4d4"
755
- },
756
- entity: {
757
- color: "#569cd6"
758
- },
759
- "operator.arrow": {
760
- color: "#569CD6"
761
- },
762
- atrule: {
763
- color: "#ce9178"
764
- },
765
- "atrule.rule": {
766
- color: "#c586c0"
767
- },
768
- "atrule.url": {
769
- color: "#9cdcfe"
770
- },
771
- "atrule.url.function": {
772
- color: "#dcdcaa"
773
- },
774
- "atrule.url.punctuation": {
775
- color: "#d4d4d4"
776
- },
777
- keyword: {
778
- color: "#569CD6"
779
- },
780
- "keyword.module": {
781
- color: "#c586c0"
782
- },
783
- "keyword.control-flow": {
784
- color: "#c586c0"
785
- },
786
- function: {
787
- color: "#dcdcaa"
788
- },
789
- "function.maybe-class-name": {
790
- color: "#dcdcaa"
791
- },
792
- regex: {
793
- color: "#d16969"
794
- },
795
- important: {
796
- color: "#569cd6"
797
- },
798
- italic: {
799
- fontStyle: "italic"
800
- },
801
- "class-name": {
802
- color: "#4ec9b0"
803
- },
804
- "maybe-class-name": {
805
- color: "#4ec9b0"
806
- },
807
- console: {
808
- color: "#9cdcfe"
809
- },
810
- parameter: {
811
- color: "#9cdcfe"
812
- },
813
- interpolation: {
814
- color: "#9cdcfe"
815
- },
816
- "punctuation.interpolation-punctuation": {
817
- color: "#569cd6"
818
- },
819
- variable: {
820
- color: "#9cdcfe"
821
- },
822
- "imports.maybe-class-name": {
823
- color: "#9cdcfe"
824
- },
825
- "exports.maybe-class-name": {
826
- color: "#9cdcfe"
827
- },
828
- escape: {
829
- color: "#d7ba7d"
830
- },
831
- "tag.punctuation": {
832
- color: "#808080"
833
- },
834
- cdata: {
835
- color: "#808080"
836
- },
837
- "attr-value": {
838
- color: "#ce9178"
839
- },
840
- "attr-value.punctuation": {
841
- color: "#ce9178"
842
- },
843
- "attr-value.punctuation.attr-equals": {
844
- color: "#d4d4d4"
845
- },
846
- namespace: {
847
- color: "#4ec9b0"
848
- },
849
- 'pre[class*="language-javascript"]': {
850
- color: "#9cdcfe"
851
- },
852
- 'code[class*="language-javascript"]': {
853
- color: "#9cdcfe"
854
- },
855
- 'pre[class*="language-jsx"]': {
856
- color: "#9cdcfe"
857
- },
858
- 'code[class*="language-jsx"]': {
859
- color: "#9cdcfe"
860
- },
861
- 'pre[class*="language-typescript"]': {
862
- color: "#9cdcfe"
863
- },
864
- 'code[class*="language-typescript"]': {
865
- color: "#9cdcfe"
866
- },
867
- 'pre[class*="language-tsx"]': {
868
- color: "#9cdcfe"
869
- },
870
- 'code[class*="language-tsx"]': {
871
- color: "#9cdcfe"
872
- },
873
- 'pre[class*="language-css"]': {
874
- color: "#ce9178"
875
- },
876
- 'code[class*="language-css"]': {
877
- color: "#ce9178"
878
- },
879
- 'pre[class*="language-html"]': {
880
- color: "#d4d4d4"
881
- },
882
- 'code[class*="language-html"]': {
883
- color: "#d4d4d4"
884
- },
885
- ".language-regex .token.anchor": {
886
- color: "#dcdcaa"
887
- },
888
- ".language-html .token.punctuation": {
889
- color: "#808080"
890
- },
891
- 'pre[class*="language-"] > code[class*="language-"]': {
892
- position: "relative",
893
- zIndex: "1"
894
- },
895
- ".line-highlight.line-highlight": {
896
- background: "#f7ebc6",
897
- boxShadow: "inset 5px 0 0 #f7d87c",
898
- zIndex: "0"
899
- }
900
- };
901
-
902
- // src/components/chat/Markdown.tsx
903
- import remarkGfm from "remark-gfm";
904
- import remarkMath from "remark-math";
905
- import { jsx as jsx7 } from "react/jsx-runtime";
906
- var MemoizedReactMarkdown = memo2(
907
- ReactMarkdown,
908
- (prevProps, nextProps) => prevProps.children === nextProps.children && prevProps.className === nextProps.className
909
- );
910
- var Markdown = ({ content }) => {
911
- return /* @__PURE__ */ jsx7("div", { className: "copilotKitMarkdown", children: /* @__PURE__ */ jsx7(MemoizedReactMarkdown, { components, remarkPlugins: [remarkGfm, remarkMath], children: content }) });
912
- };
913
- var components = {
914
- p({ children }) {
915
- return /* @__PURE__ */ jsx7("p", { children });
916
- },
917
- a(_a) {
918
- var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
919
- return /* @__PURE__ */ jsx7(
920
- "a",
921
- __spreadProps(__spreadValues({
922
- style: { color: "blue", textDecoration: "underline" }
923
- }, props), {
924
- target: "_blank",
925
- rel: "noopener noreferrer",
926
- children
927
- })
928
- );
929
- },
930
- code(_c) {
931
- var _d = _c, { children, className, inline } = _d, props = __objRest(_d, ["children", "className", "inline"]);
932
- if (children.length) {
933
- if (children[0] == "\u258D") {
934
- return /* @__PURE__ */ jsx7(
935
- "span",
936
- {
937
- style: {
938
- animation: "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite",
939
- marginTop: "0.25rem"
940
- },
941
- children: "\u258D"
942
- }
943
- );
944
- }
945
- children[0] = children[0].replace("`\u258D`", "\u258D");
946
- }
947
- const match = /language-(\w+)/.exec(className || "");
948
- if (inline) {
949
- return /* @__PURE__ */ jsx7("code", __spreadProps(__spreadValues({ className }, props), { children }));
950
- }
951
- return /* @__PURE__ */ jsx7(
952
- CodeBlock,
953
- __spreadValues({
954
- language: match && match[1] || "",
955
- value: String(children).replace(/\n$/, "")
956
- }, props),
957
- Math.random()
958
- );
959
- }
960
- };
961
-
962
- // src/components/chat/Messages.tsx
963
- import { useCopilotContext } from "@copilotkit/react-core";
2
+ import "./chunk-EFZPSZWO.mjs";
3
+ import "./chunk-JD7BAH7U.mjs";
4
+ import "./chunk-MRFF7GSQ.mjs";
964
5
  import {
965
- MessageStatusCode,
966
- ActionExecutionMessage,
967
- ResultMessage,
968
- TextMessage,
969
- Role,
970
- AgentStateMessage
971
- } from "@copilotkit/runtime-client-gql";
972
- import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
973
- var Messages = ({ messages, inProgress, children }) => {
974
- const { chatComponentsCache } = useCopilotContext();
975
- const context = useChatContext();
976
- const initialMessages = useMemo2(
977
- () => makeInitialMessages(context.labels.initial),
978
- [context.labels.initial]
979
- );
980
- messages = [...initialMessages, ...messages];
981
- const functionResults = {};
982
- for (let i = 0; i < messages.length; i++) {
983
- if (messages[i] instanceof ActionExecutionMessage) {
984
- const id = messages[i].id;
985
- const resultMessage = messages.find(
986
- (message) => message instanceof ResultMessage && message.actionExecutionId === id
987
- );
988
- if (resultMessage) {
989
- functionResults[id] = ResultMessage.decodeResult(resultMessage.result || "");
990
- }
991
- }
992
- }
993
- const messagesEndRef = React4.useRef(null);
994
- const scrollToBottom = () => {
995
- if (messagesEndRef.current) {
996
- messagesEndRef.current.scrollIntoView({
997
- behavior: "auto"
998
- });
999
- }
1000
- };
1001
- useEffect2(() => {
1002
- scrollToBottom();
1003
- }, [messages]);
1004
- return /* @__PURE__ */ jsxs5("div", { className: "copilotKitMessages", children: [
1005
- messages.map((message, index) => {
1006
- const isCurrentMessage = index === messages.length - 1;
1007
- if (message instanceof TextMessage && message.role === "user") {
1008
- return /* @__PURE__ */ jsx8("div", { className: "copilotKitMessage copilotKitUserMessage", children: message.content }, index);
1009
- } else if (message instanceof TextMessage && message.role == "assistant") {
1010
- return /* @__PURE__ */ jsx8("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: isCurrentMessage && inProgress && !message.content ? context.icons.spinnerIcon : /* @__PURE__ */ jsx8(Markdown, { content: message.content }) }, index);
1011
- } else if (message instanceof ActionExecutionMessage) {
1012
- if (chatComponentsCache.current !== null && chatComponentsCache.current.actions[message.name]) {
1013
- const render = chatComponentsCache.current.actions[message.name];
1014
- if (typeof render === "string") {
1015
- if (isCurrentMessage && inProgress) {
1016
- return /* @__PURE__ */ jsxs5("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: [
1017
- context.icons.spinnerIcon,
1018
- " ",
1019
- /* @__PURE__ */ jsx8("span", { className: "inProgressLabel", children: render })
1020
- ] }, index);
1021
- } else {
1022
- return null;
1023
- }
1024
- } else {
1025
- const args = message.arguments;
1026
- let status = "inProgress";
1027
- if (functionResults[message.id] !== void 0) {
1028
- status = "complete";
1029
- } else if (message.status.code !== MessageStatusCode.Pending) {
1030
- status = "executing";
1031
- }
1032
- const toRender = render({
1033
- status,
1034
- args,
1035
- result: functionResults[message.id]
1036
- });
1037
- if (!toRender && status === "complete") {
1038
- return null;
1039
- }
1040
- if (typeof toRender === "string") {
1041
- return /* @__PURE__ */ jsxs5("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: [
1042
- isCurrentMessage && inProgress && context.icons.spinnerIcon,
1043
- " ",
1044
- toRender
1045
- ] }, index);
1046
- } else {
1047
- return /* @__PURE__ */ jsx8("div", { className: "copilotKitCustomAssistantMessage", children: toRender }, index);
1048
- }
1049
- }
1050
- } else if (!inProgress || !isCurrentMessage) {
1051
- return null;
1052
- } else {
1053
- return /* @__PURE__ */ jsx8("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: context.icons.spinnerIcon }, index);
1054
- }
1055
- } else if (message instanceof AgentStateMessage) {
1056
- let render;
1057
- if (chatComponentsCache.current !== null) {
1058
- render = chatComponentsCache.current.coagentActions[`${message.agentName}-${message.nodeName}`] || chatComponentsCache.current.coagentActions[`${message.agentName}-global`];
1059
- }
1060
- if (render) {
1061
- if (typeof render === "string") {
1062
- if (isCurrentMessage && inProgress) {
1063
- return /* @__PURE__ */ jsxs5("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: [
1064
- context.icons.spinnerIcon,
1065
- " ",
1066
- /* @__PURE__ */ jsx8("span", { className: "inProgressLabel", children: render })
1067
- ] }, index);
1068
- } else {
1069
- return null;
1070
- }
1071
- } else {
1072
- const state = message.state;
1073
- let status = message.active ? "inProgress" : "complete";
1074
- const toRender = render({
1075
- status,
1076
- state,
1077
- nodeName: message.nodeName
1078
- });
1079
- if (!toRender && status === "complete") {
1080
- return null;
1081
- }
1082
- if (typeof toRender === "string") {
1083
- return /* @__PURE__ */ jsxs5("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: [
1084
- isCurrentMessage && inProgress && context.icons.spinnerIcon,
1085
- " ",
1086
- toRender
1087
- ] }, index);
1088
- } else {
1089
- return /* @__PURE__ */ jsx8("div", { className: "copilotKitCustomAssistantMessage", children: toRender }, index);
1090
- }
1091
- }
1092
- } else if (!inProgress || !isCurrentMessage) {
1093
- return null;
1094
- } else {
1095
- return /* @__PURE__ */ jsx8("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: context.icons.spinnerIcon }, index);
1096
- }
1097
- } else if (message instanceof ResultMessage && inProgress && isCurrentMessage) {
1098
- return /* @__PURE__ */ jsx8("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: context.icons.spinnerIcon }, index);
1099
- }
1100
- }),
1101
- /* @__PURE__ */ jsx8("footer", { ref: messagesEndRef, children })
1102
- ] });
1103
- };
1104
- function makeInitialMessages(initial) {
1105
- let initialArray = [];
1106
- if (initial) {
1107
- if (Array.isArray(initial)) {
1108
- initialArray.push(...initial);
1109
- } else {
1110
- initialArray.push(initial);
1111
- }
1112
- }
1113
- return initialArray.map(
1114
- (message) => new TextMessage({
1115
- role: Role.Assistant,
1116
- content: message
1117
- })
1118
- );
1119
- }
1120
-
1121
- // src/components/chat/Input.tsx
1122
- import { useEffect as useEffect5, useRef as useRef3, useState as useState5 } from "react";
1123
-
1124
- // src/components/chat/Textarea.tsx
1125
- import { useState as useState3, useRef, useEffect as useEffect3, forwardRef, useImperativeHandle } from "react";
1126
- import { jsx as jsx9 } from "react/jsx-runtime";
1127
- var AutoResizingTextarea = forwardRef(
1128
- ({ maxRows = 1, placeholder, value, onChange, onKeyDown, autoFocus }, ref) => {
1129
- const internalTextareaRef = useRef(null);
1130
- const [maxHeight, setMaxHeight] = useState3(0);
1131
- useImperativeHandle(ref, () => internalTextareaRef.current);
1132
- useEffect3(() => {
1133
- const calculateMaxHeight = () => {
1134
- const textarea = internalTextareaRef.current;
1135
- if (textarea) {
1136
- textarea.style.height = "auto";
1137
- const singleRowHeight = textarea.scrollHeight;
1138
- setMaxHeight(singleRowHeight * maxRows);
1139
- if (autoFocus) {
1140
- textarea.focus();
1141
- }
1142
- }
1143
- };
1144
- calculateMaxHeight();
1145
- }, [maxRows]);
1146
- useEffect3(() => {
1147
- const textarea = internalTextareaRef.current;
1148
- if (textarea) {
1149
- textarea.style.height = "auto";
1150
- textarea.style.height = `${Math.min(textarea.scrollHeight, maxHeight)}px`;
1151
- }
1152
- }, [value, maxHeight]);
1153
- return /* @__PURE__ */ jsx9(
1154
- "textarea",
1155
- {
1156
- ref: internalTextareaRef,
1157
- value,
1158
- onChange,
1159
- onKeyDown,
1160
- placeholder,
1161
- style: {
1162
- overflow: "auto",
1163
- resize: "none",
1164
- maxHeight: `${maxHeight}px`
1165
- },
1166
- rows: 1
1167
- }
1168
- );
1169
- }
1170
- );
1171
- var Textarea_default = AutoResizingTextarea;
1172
-
1173
- // src/hooks/use-push-to-talk.tsx
1174
- import { useCopilotContext as useCopilotContext2 } from "@copilotkit/react-core";
1175
- import { TextMessage as TextMessage2 } from "@copilotkit/runtime-client-gql";
1176
- import { useEffect as useEffect4, useRef as useRef2, useState as useState4 } from "react";
1177
- var startRecording = (mediaStreamRef, mediaRecorderRef, audioContextRef, recordedChunks, onStop) => __async(void 0, null, function* () {
1178
- if (!mediaStreamRef.current || !audioContextRef.current) {
1179
- mediaStreamRef.current = yield navigator.mediaDevices.getUserMedia({ audio: true });
1180
- audioContextRef.current = new window.AudioContext();
1181
- yield audioContextRef.current.resume();
1182
- }
1183
- mediaRecorderRef.current = new MediaRecorder(mediaStreamRef.current);
1184
- mediaRecorderRef.current.start(1e3);
1185
- mediaRecorderRef.current.ondataavailable = (event) => {
1186
- recordedChunks.push(event.data);
1187
- };
1188
- mediaRecorderRef.current.onstop = onStop;
1189
- });
1190
- var stopRecording = (mediaRecorderRef) => {
1191
- if (mediaRecorderRef.current && mediaRecorderRef.current.state !== "inactive") {
1192
- mediaRecorderRef.current.stop();
1193
- }
1194
- };
1195
- var transcribeAudio = (recordedChunks, transcribeAudioUrl) => __async(void 0, null, function* () {
1196
- const completeBlob = new Blob(recordedChunks, { type: "audio/mp4" });
1197
- const formData = new FormData();
1198
- formData.append("file", completeBlob, "recording.mp4");
1199
- const response = yield fetch(transcribeAudioUrl, {
1200
- method: "POST",
1201
- body: formData
1202
- });
1203
- if (!response.ok) {
1204
- throw new Error(`Error: ${response.statusText}`);
1205
- }
1206
- const transcription = yield response.json();
1207
- return transcription.text;
1208
- });
1209
- var playAudioResponse = (text, textToSpeechUrl, audioContext) => {
1210
- const encodedText = encodeURIComponent(text);
1211
- const url = `${textToSpeechUrl}?text=${encodedText}`;
1212
- fetch(url).then((response) => response.arrayBuffer()).then((arrayBuffer) => audioContext.decodeAudioData(arrayBuffer)).then((audioBuffer) => {
1213
- const source = audioContext.createBufferSource();
1214
- source.buffer = audioBuffer;
1215
- source.connect(audioContext.destination);
1216
- source.start(0);
1217
- }).catch((error) => {
1218
- console.error("Error with decoding audio data", error);
1219
- });
1220
- };
1221
- var usePushToTalk = ({
1222
- sendFunction,
1223
- inProgress
1224
- }) => {
1225
- const [pushToTalkState, setPushToTalkState] = useState4("idle");
1226
- const mediaStreamRef = useRef2(null);
1227
- const audioContextRef = useRef2(null);
1228
- const mediaRecorderRef = useRef2(null);
1229
- const recordedChunks = useRef2([]);
1230
- const context = useCopilotContext2();
1231
- const [startReadingFromMessageId, setStartReadingFromMessageId] = useState4(null);
1232
- useEffect4(() => {
1233
- if (pushToTalkState === "recording") {
1234
- startRecording(
1235
- mediaStreamRef,
1236
- mediaRecorderRef,
1237
- audioContextRef,
1238
- recordedChunks.current,
1239
- () => {
1240
- setPushToTalkState("transcribing");
1241
- }
1242
- );
1243
- } else {
1244
- stopRecording(mediaRecorderRef);
1245
- if (pushToTalkState === "transcribing") {
1246
- transcribeAudio(recordedChunks.current, context.copilotApiConfig.transcribeAudioUrl).then(
1247
- (transcription) => __async(void 0, null, function* () {
1248
- recordedChunks.current = [];
1249
- setPushToTalkState("idle");
1250
- const message = yield sendFunction(transcription);
1251
- setStartReadingFromMessageId(message.id);
1252
- })
1253
- );
1254
- }
1255
- }
1256
- return () => {
1257
- stopRecording(mediaRecorderRef);
1258
- };
1259
- }, [pushToTalkState]);
1260
- useEffect4(() => {
1261
- if (inProgress === false && startReadingFromMessageId) {
1262
- const lastMessageIndex = context.messages.findIndex(
1263
- (message) => message.id === startReadingFromMessageId
1264
- );
1265
- const messagesAfterLast = context.messages.slice(lastMessageIndex + 1).filter(
1266
- (message) => message instanceof TextMessage2 && message.role === "assistant"
1267
- );
1268
- const text = messagesAfterLast.map((message) => message.content).join("\n");
1269
- playAudioResponse(text, context.copilotApiConfig.textToSpeechUrl, audioContextRef.current);
1270
- setStartReadingFromMessageId(null);
1271
- }
1272
- }, [startReadingFromMessageId, inProgress]);
1273
- return { pushToTalkState, setPushToTalkState };
1274
- };
1275
-
1276
- // src/components/chat/Input.tsx
1277
- import { useCopilotContext as useCopilotContext3 } from "@copilotkit/react-core";
1278
- import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
1279
- var Input = ({ inProgress, onSend, isVisible = false }) => {
1280
- const context = useChatContext();
1281
- const copilotContext = useCopilotContext3();
1282
- const pushToTalkConfigured = copilotContext.copilotApiConfig.textToSpeechUrl !== void 0 && copilotContext.copilotApiConfig.transcribeAudioUrl !== void 0;
1283
- const textareaRef = useRef3(null);
1284
- const handleDivClick = (event) => {
1285
- var _a;
1286
- if (event.target !== event.currentTarget) return;
1287
- (_a = textareaRef.current) == null ? void 0 : _a.focus();
1288
- };
1289
- const [text, setText] = useState5("");
1290
- const send = () => {
1291
- var _a;
1292
- if (inProgress) return;
1293
- onSend(text);
1294
- setText("");
1295
- (_a = textareaRef.current) == null ? void 0 : _a.focus();
1296
- };
1297
- useEffect5(() => {
1298
- var _a;
1299
- if (isVisible) {
1300
- (_a = textareaRef.current) == null ? void 0 : _a.focus();
1301
- }
1302
- }, [isVisible]);
1303
- const { pushToTalkState, setPushToTalkState } = usePushToTalk({
1304
- sendFunction: onSend,
1305
- inProgress
1306
- });
1307
- const sendIcon = inProgress || pushToTalkState === "transcribing" ? context.icons.activityIcon : context.icons.sendIcon;
1308
- const showPushToTalk = pushToTalkConfigured && (pushToTalkState === "idle" || pushToTalkState === "recording") && !inProgress;
1309
- const sendDisabled = inProgress || text.length === 0 || pushToTalkState !== "idle";
1310
- return /* @__PURE__ */ jsxs6("div", { className: "copilotKitInput", onClick: handleDivClick, children: [
1311
- /* @__PURE__ */ jsx10(
1312
- Textarea_default,
1313
- {
1314
- ref: textareaRef,
1315
- placeholder: context.labels.placeholder,
1316
- autoFocus: true,
1317
- maxRows: 5,
1318
- value: text,
1319
- onChange: (event) => setText(event.target.value),
1320
- onKeyDown: (event) => {
1321
- if (event.key === "Enter" && !event.shiftKey) {
1322
- event.preventDefault();
1323
- send();
1324
- }
1325
- }
1326
- }
1327
- ),
1328
- /* @__PURE__ */ jsxs6("div", { className: "copilotKitInputControls", children: [
1329
- showPushToTalk && /* @__PURE__ */ jsx10(
1330
- "button",
1331
- {
1332
- onClick: () => setPushToTalkState(pushToTalkState === "idle" ? "recording" : "transcribing"),
1333
- className: pushToTalkState === "recording" ? "copilotKitPushToTalkRecording" : "",
1334
- children: context.icons.pushToTalkIcon
1335
- }
1336
- ),
1337
- /* @__PURE__ */ jsx10("button", { disabled: sendDisabled, onClick: send, children: sendIcon })
1338
- ] })
1339
- ] });
1340
- };
1341
-
1342
- // src/components/chat/Response.tsx
1343
- import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
1344
- var ResponseButton = ({ onClick, inProgress }) => {
1345
- const context = useChatContext();
1346
- return /* @__PURE__ */ jsxs7("button", { onClick, className: "copilotKitResponseButton", children: [
1347
- /* @__PURE__ */ jsx11("span", { children: inProgress ? context.icons.stopIcon : context.icons.regenerateIcon }),
1348
- inProgress ? context.labels.stopGenerating : context.labels.regenerateResponse
1349
- ] });
1350
- };
1351
-
1352
- // src/components/chat/Suggestion.tsx
6
+ CopilotSidebar
7
+ } from "./chunk-QOEAEMUQ.mjs";
8
+ import "./chunk-WB3YULQ4.mjs";
1353
9
  import {
1354
- extract
1355
- } from "@copilotkit/react-core";
1356
- import { actionParametersToJsonSchema } from "@copilotkit/shared";
1357
- import { CopilotRequestType } from "@copilotkit/runtime-client-gql";
1358
- import { jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
1359
- function Suggestion({ title, message, onClick, partial, className }) {
1360
- return /* @__PURE__ */ jsxs8(
1361
- "button",
1362
- {
1363
- disabled: partial,
1364
- onClick: (e) => {
1365
- e.preventDefault();
1366
- onClick(message);
1367
- },
1368
- className: className || "suggestion",
1369
- children: [
1370
- partial && SmallSpinnerIcon,
1371
- /* @__PURE__ */ jsx12("span", { children: title })
1372
- ]
1373
- }
1374
- );
1375
- }
1376
- var reloadSuggestions = (context, chatSuggestionConfiguration, setCurrentSuggestions, abortControllerRef) => __async(void 0, null, function* () {
1377
- const abortController = abortControllerRef.current;
1378
- const tools = JSON.stringify(
1379
- Object.values(context.actions).map((action) => ({
1380
- name: action.name,
1381
- description: action.description,
1382
- jsonSchema: JSON.stringify(actionParametersToJsonSchema(action.parameters))
1383
- }))
1384
- );
1385
- const allSuggestions = [];
1386
- for (const config of Object.values(chatSuggestionConfiguration)) {
1387
- try {
1388
- const numOfSuggestionsInstructions = config.minSuggestions === 0 ? `Produce up to ${config.maxSuggestions} suggestions. If there are no highly relevant suggestions you can think of, provide an empty array.` : `Produce between ${config.minSuggestions} and ${config.maxSuggestions} suggestions.`;
1389
- const result = yield extract({
1390
- context,
1391
- instructions: "Suggest what the user could say next. Provide clear, highly relevant suggestions. Do not literally suggest function calls. " + config.instructions + "\n\n" + numOfSuggestionsInstructions,
1392
- data: "Available tools: " + tools + "\n\n",
1393
- requestType: CopilotRequestType.Task,
1394
- parameters: [
1395
- {
1396
- name: "suggestions",
1397
- type: "object[]",
1398
- attributes: [
1399
- {
1400
- name: "title",
1401
- description: "The title of the suggestion. This is shown as a button and should be short.",
1402
- type: "string"
1403
- },
1404
- {
1405
- name: "message",
1406
- description: "The message to send when the suggestion is clicked. This should be a clear, complete sentence and will be sent as an instruction to the AI.",
1407
- type: "string"
1408
- }
1409
- ]
1410
- }
1411
- ],
1412
- include: {
1413
- messages: true,
1414
- readable: true
1415
- },
1416
- abortSignal: abortController == null ? void 0 : abortController.signal,
1417
- stream: ({ status, args }) => {
1418
- const suggestions = args.suggestions || [];
1419
- const newSuggestions = [];
1420
- for (let i = 0; i < suggestions.length; i++) {
1421
- if (config.maxSuggestions !== void 0 && i >= config.maxSuggestions) {
1422
- break;
1423
- }
1424
- const { title, message } = suggestions[i];
1425
- const partial = i == suggestions.length - 1 && status !== "complete";
1426
- newSuggestions.push({
1427
- title,
1428
- message,
1429
- partial,
1430
- className: config.className
1431
- });
1432
- }
1433
- setCurrentSuggestions([...allSuggestions, ...newSuggestions]);
1434
- }
1435
- });
1436
- allSuggestions.push(...result.suggestions);
1437
- } catch (error) {
1438
- console.error("Error loading suggestions", error);
1439
- }
1440
- }
1441
- if (abortControllerRef.current === abortController) {
1442
- abortControllerRef.current = null;
1443
- }
1444
- });
1445
-
1446
- // src/components/chat/Chat.tsx
1447
- import React7, { useEffect as useEffect7, useRef as useRef5, useState as useState7 } from "react";
1448
- import { useCopilotChat, useCopilotContext as useCopilotContext6 } from "@copilotkit/react-core";
1449
- import { Role as Role2, TextMessage as TextMessage4 } from "@copilotkit/runtime-client-gql";
1450
- import { randomId } from "@copilotkit/shared";
1451
-
1452
- // src/components/dev-console/utils.ts
1453
- import { defaultCopilotContextCategories } from "@copilotkit/react-core";
1454
- import { ActionExecutionMessage as ActionExecutionMessage2, ResultMessage as ResultMessage2, TextMessage as TextMessage3 } from "@copilotkit/runtime-client-gql";
1455
- import { AgentStateMessage as AgentStateMessage2 } from "@copilotkit/runtime-client-gql";
1456
- function shouldShowDevConsole(showDevConsole) {
1457
- if (typeof showDevConsole === "boolean") {
1458
- return showDevConsole;
1459
- }
1460
- return getHostname() === "localhost" || getHostname() === "127.0.0.1" || getHostname() === "0.0.0.0" || getHostname() === "::1";
1461
- }
1462
- function getHostname() {
1463
- if (typeof window !== "undefined" && window.location) {
1464
- return window.location.hostname;
1465
- }
1466
- return "";
1467
- }
1468
- function getPublishedCopilotKitVersion(current, forceCheck = false) {
1469
- return __async(this, null, function* () {
1470
- const LOCAL_STORAGE_KEY = "__copilotkit_version_check__";
1471
- const serializedVersion = localStorage.getItem(LOCAL_STORAGE_KEY);
1472
- if (serializedVersion && !forceCheck) {
1473
- try {
1474
- const parsedVersion = JSON.parse(serializedVersion);
1475
- const oneHour = 60 * 60 * 1e3;
1476
- const now = (/* @__PURE__ */ new Date()).getTime();
1477
- if (parsedVersion.current === current && now - new Date(parsedVersion.lastChecked).getTime() < oneHour) {
1478
- return parsedVersion;
1479
- }
1480
- } catch (error) {
1481
- console.error("Failed to parse CopilotKitVersion from localStorage", error);
1482
- }
1483
- }
1484
- try {
1485
- const response = yield fetch("https://api.cloud.stagingcopilotkit.ai/check-for-updates", {
1486
- method: "POST",
1487
- headers: {
1488
- "Content-Type": "application/json"
1489
- },
1490
- body: JSON.stringify({
1491
- packages: [
1492
- {
1493
- packageName: "@copilotkit/shared",
1494
- packageVersion: current
1495
- }
1496
- ]
1497
- })
1498
- });
1499
- const data = yield response.json();
1500
- const version = {
1501
- current,
1502
- lastChecked: (/* @__PURE__ */ new Date()).getTime(),
1503
- latest: data.packages[0].latestVersion,
1504
- severity: data.packages[0].severity,
1505
- advisory: data.packages[0].advisory || null
1506
- };
1507
- localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(version));
1508
- return version;
1509
- } catch (error) {
1510
- console.error("Failed to check for updates", error);
1511
- throw error;
1512
- }
1513
- });
1514
- }
1515
- function logReadables(context) {
1516
- console.log("%cCurrent Readables:", "font-size: 16px; font-weight: bold;");
1517
- const readables = context.getContextString([], defaultCopilotContextCategories).trim();
1518
- if (readables.length === 0) {
1519
- console.log("No readables found");
1520
- return;
1521
- }
1522
- console.log(readables);
1523
- }
1524
- function logActions(context) {
1525
- console.log("%cCurrent Actions:", "font-size: 16px; font-weight: bold;");
1526
- if (Object.values(context.actions).length === 0) {
1527
- console.log("No actions found");
1528
- return;
1529
- }
1530
- for (const action of Object.values(context.actions)) {
1531
- console.group(action.name);
1532
- console.log("name", action.name);
1533
- console.log("description", action.description);
1534
- console.log("parameters", action.parameters);
1535
- console.groupEnd();
1536
- }
1537
- }
1538
- function logMessages(context) {
1539
- console.log("%cCurrent Messages:", "font-size: 16px; font-weight: bold;");
1540
- if (context.messages.length === 0) {
1541
- console.log("No messages found");
1542
- return;
1543
- }
1544
- const tableData = context.messages.map((message) => {
1545
- if (message instanceof TextMessage3) {
1546
- return {
1547
- id: message.id,
1548
- type: "TextMessage",
1549
- role: message.role,
1550
- name: void 0,
1551
- scope: void 0,
1552
- content: message.content
1553
- };
1554
- } else if (message instanceof ActionExecutionMessage2) {
1555
- return {
1556
- id: message.id,
1557
- type: "ActionExecutionMessage",
1558
- role: void 0,
1559
- name: message.name,
1560
- scope: message.scope,
1561
- content: message.arguments
1562
- };
1563
- } else if (message instanceof ResultMessage2) {
1564
- return {
1565
- id: message.id,
1566
- type: "ResultMessage",
1567
- role: void 0,
1568
- name: message.actionName,
1569
- scope: message.actionExecutionId,
1570
- content: message.result
1571
- };
1572
- } else if (message instanceof AgentStateMessage2) {
1573
- return {
1574
- id: message.id,
1575
- type: `AgentStateMessage (running: ${message.running})`,
1576
- role: message.role,
1577
- name: void 0,
1578
- scope: message.threadId,
1579
- content: message.state
1580
- };
1581
- }
1582
- });
1583
- console.table(tableData);
1584
- }
1585
-
1586
- // src/components/dev-console/console.tsx
1587
- import { useCopilotContext as useCopilotContext5 } from "@copilotkit/react-core";
1588
- import { useEffect as useEffect6, useRef as useRef4, useState as useState6 } from "react";
1589
-
1590
- // src/components/dev-console/icons.tsx
1591
- import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
1592
- var ExclamationMarkTriangleIcon = /* @__PURE__ */ jsx13(
1593
- "svg",
1594
- {
1595
- width: "13.3967723px",
1596
- height: "12px",
1597
- viewBox: "0 0 13.3967723 12",
1598
- version: "1.1",
1599
- xmlns: "http://www.w3.org/2000/svg",
1600
- children: /* @__PURE__ */ jsx13("g", { id: "Page-1", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", children: /* @__PURE__ */ jsx13("g", { id: "exclamation-triangle", fill: "#CD2121", children: /* @__PURE__ */ jsx13(
1601
- "path",
1602
- {
1603
- d: "M5.39935802,0.75 C5.97670802,-0.25 7.42007802,-0.25 7.99742802,0.75 L13.193588,9.75 C13.770888,10.75 13.049288,12 11.894588,12 L1.50223802,12 C0.34753802,12 -0.37414898,10.75 0.20319802,9.75 L5.39935802,0.75 Z M6.69838802,2.5 C7.11260802,2.5 7.44838802,2.83579 7.44838802,3.25 L7.44838802,6.25 C7.44838802,6.66421 7.11260802,7 6.69838802,7 C6.28417802,7 5.94838802,6.66421 5.94838802,6.25 L5.94838802,3.25 C5.94838802,2.83579 6.28417802,2.5 6.69838802,2.5 Z M6.69838802,10.5 C7.25067802,10.5 7.69838802,10.0523 7.69838802,9.5 C7.69838802,8.9477 7.25067802,8.5 6.69838802,8.5 C6.14610802,8.5 5.69838802,8.9477 5.69838802,9.5 C5.69838802,10.0523 6.14610802,10.5 6.69838802,10.5 Z",
1604
- id: "Shape"
1605
- }
1606
- ) }) })
1607
- }
1608
- );
1609
- var ExclamationMarkIcon = /* @__PURE__ */ jsx13(
1610
- "svg",
1611
- {
1612
- width: "14px",
1613
- height: "14px",
1614
- viewBox: "0 0 14 14",
1615
- version: "1.1",
1616
- xmlns: "http://www.w3.org/2000/svg",
1617
- children: /* @__PURE__ */ jsx13("g", { id: "Page-1", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", children: /* @__PURE__ */ jsx13("g", { id: "exclamation-circle", fill: "#EC662C", children: /* @__PURE__ */ jsx13(
1618
- "path",
1619
- {
1620
- d: "M7,14 C10.866,14 14,10.866 14,7 C14,3.13401 10.866,0 7,0 C3.13401,0 0,3.13401 0,7 C0,10.866 3.13401,14 7,14 Z M7,3 C7.41421,3 7.75,3.33579 7.75,3.75 L7.75,6.75 C7.75,7.16421 7.41421,7.5 7,7.5 C6.58579,7.5 6.25,7.16421 6.25,6.75 L6.25,3.75 C6.25,3.33579 6.58579,3 7,3 Z M7,11 C7.55228,11 8,10.5523 8,10 C8,9.4477 7.55228,9 7,9 C6.44772,9 6,9.4477 6,10 C6,10.5523 6.44772,11 7,11 Z",
1621
- id: "Shape"
1622
- }
1623
- ) }) })
1624
- }
1625
- );
1626
- var ChevronDownIcon = /* @__PURE__ */ jsx13("svg", { width: "7px", height: "4px", viewBox: "0 0 7 4", version: "1.1", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx13("g", { id: "Page-1", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", children: /* @__PURE__ */ jsx13("g", { id: "Group", fill: "#000000", fillRule: "nonzero", children: /* @__PURE__ */ jsx13(
1627
- "path",
1628
- {
1629
- d: "M3.71690723,3.90271086 C3.59268176,4.03242971 3.39143629,4.03242971 3.26721082,3.90271086 L0.0853966595,0.57605615 C-0.0314221035,0.444981627 -0.0279751448,0.240725043 0.0931934622,0.114040675 C0.214362069,-0.0126436935 0.409725445,-0.0162475626 0.535093061,0.105888951 L3.49205902,3.19746006 L6.44902499,0.105888951 C6.52834574,0.0168884389 6.64780588,-0.0197473458 6.7605411,0.0103538404 C6.87327633,0.0404550266 6.96130636,0.132492308 6.99009696,0.250359396 C7.01888756,0.368226483 6.98384687,0.493124608 6.89872139,0.57605615 L3.71690723,3.90271086 Z",
1630
- id: "Path"
1631
- }
1632
- ) }) }) });
1633
- var CheckIcon2 = /* @__PURE__ */ jsx13(
1634
- "svg",
1635
- {
1636
- width: "14px",
1637
- height: "14px",
1638
- viewBox: "0 0 14 14",
1639
- version: "1.1",
1640
- xmlns: "http://www.w3.org/2000/svg",
1641
- children: /* @__PURE__ */ jsx13("g", { id: "Page-1", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", children: /* @__PURE__ */ jsx13("g", { id: "Group-2", transform: "translate(-118, 0)", fill: "#1BC030", fillRule: "nonzero", children: /* @__PURE__ */ jsx13("g", { id: "Group", transform: "translate(118, 0)", children: /* @__PURE__ */ jsx13(
1642
- "path",
1643
- {
1644
- d: "M0,7 C0,3.13384615 3.13384615,0 7,0 C10.8661538,0 14,3.13384615 14,7 C14,10.8661538 10.8661538,14 7,14 C3.13384615,14 0,10.8661538 0,7 Z M9.59179487,5.69764103 C9.70905818,5.54139023 9.73249341,5.33388318 9.65303227,5.15541491 C9.57357113,4.97694665 9.40367989,4.85551619 9.20909814,4.83811118 C9.01451638,4.82070616 8.82577109,4.91005717 8.71589744,5.07158974 L6.39261538,8.32389744 L5.22666667,7.15794872 C5.01450582,6.96025518 4.68389046,6.9660885 4.47883563,7.17114332 C4.27378081,7.37619815 4.26794748,7.70681351 4.46564103,7.91897436 L6.08102564,9.53435897 C6.19289944,9.64614839 6.3482622,9.70310251 6.50588106,9.69010587 C6.66349993,9.67710922 6.80743532,9.59547613 6.89948718,9.46687179 L9.59179487,5.69764103 L9.59179487,5.69764103 Z",
1645
- id: "Shape"
1646
- }
1647
- ) }) }) })
1648
- }
1649
- );
1650
- var CopilotKitIcon = /* @__PURE__ */ jsxs9(
1651
- "svg",
1652
- {
1653
- width: "33px",
1654
- height: "35px",
1655
- viewBox: "0 0 33 35",
1656
- version: "1.1",
1657
- xmlns: "http://www.w3.org/2000/svg",
1658
- children: [
1659
- /* @__PURE__ */ jsx13("title", { children: "bd5c9079-929b-4d55-bdc9-16d1c8181b71" }),
1660
- /* @__PURE__ */ jsx13("g", { id: "Page-1", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", children: /* @__PURE__ */ jsx13(
1661
- "image",
1662
- {
1663
- x: "0",
1664
- y: "0",
1665
- width: "33",
1666
- height: "35",
1667
- xlinkHref: "data:image/png;base64,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"
1668
- }
1669
- ) })
1670
- ]
1671
- }
1672
- );
1673
-
1674
- // src/components/dev-console/console.tsx
1675
- import { Menu, MenuButton, MenuItem, MenuItems } from "@headlessui/react";
1676
- import { COPILOTKIT_VERSION } from "@copilotkit/shared";
1677
- import { Fragment, jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
1678
- function CopilotDevConsole() {
1679
- const currentVersion = COPILOTKIT_VERSION;
1680
- const context = useCopilotContext5();
1681
- const [showDevConsole, setShowDevConsole] = useState6(false);
1682
- useEffect6(() => {
1683
- setShowDevConsole(shouldShowDevConsole(context.showDevConsole));
1684
- }, [context.showDevConsole]);
1685
- const dontRunTwiceInDevMode = useRef4(false);
1686
- const [versionStatus, setVersionStatus] = useState6("unknown");
1687
- const [latestVersion, setLatestVersion] = useState6("");
1688
- const consoleRef = useRef4(null);
1689
- const [debugButtonMode, setDebugButtonMode] = useState6("full");
1690
- const checkForUpdates = (force = false) => {
1691
- setVersionStatus("checking");
1692
- getPublishedCopilotKitVersion(currentVersion, force).then((v) => {
1693
- setLatestVersion(v.latest);
1694
- let versionOk = false;
1695
- if (v.current === v.latest) {
1696
- versionOk = true;
1697
- } else if (/[a-zA-Z]/.test(v.current)) {
1698
- versionOk = true;
1699
- }
1700
- if (versionOk) {
1701
- setVersionStatus("latest");
1702
- } else if (v.severity !== "low") {
1703
- setVersionStatus("outdated");
1704
- } else {
1705
- setVersionStatus("update-available");
1706
- }
1707
- }).catch((e) => {
1708
- console.error(e);
1709
- setVersionStatus("unknown");
1710
- });
1711
- };
1712
- useEffect6(() => {
1713
- if (dontRunTwiceInDevMode.current === true) {
1714
- return;
1715
- }
1716
- dontRunTwiceInDevMode.current = true;
1717
- checkForUpdates();
1718
- }, []);
1719
- useEffect6(() => {
1720
- const handleResize = (entries) => {
1721
- for (let entry of entries) {
1722
- if (entry.target === consoleRef.current) {
1723
- const width = entry.contentRect.width;
1724
- if (width < 400) {
1725
- setDebugButtonMode("compact");
1726
- } else {
1727
- setDebugButtonMode("full");
1728
- }
1729
- }
1730
- }
1731
- };
1732
- const observer = new ResizeObserver(handleResize);
1733
- if (consoleRef.current) {
1734
- observer.observe(consoleRef.current);
1735
- const initialWidth = consoleRef.current.getBoundingClientRect().width;
1736
- if (initialWidth < 400) {
1737
- setDebugButtonMode("compact");
1738
- } else {
1739
- setDebugButtonMode("full");
1740
- }
1741
- }
1742
- return () => {
1743
- if (consoleRef.current) {
1744
- observer.unobserve(consoleRef.current);
1745
- }
1746
- };
1747
- }, [consoleRef.current]);
1748
- if (!showDevConsole) {
1749
- return null;
1750
- }
1751
- return /* @__PURE__ */ jsxs10(
1752
- "div",
1753
- {
1754
- ref: consoleRef,
1755
- className: "copilotKitDevConsole " + (versionStatus === "update-available" ? "copilotKitDevConsoleUpgrade" : "") + (versionStatus === "outdated" ? "copilotKitDevConsoleWarnOutdated" : ""),
1756
- children: [
1757
- /* @__PURE__ */ jsx14("div", { className: "copilotKitDevConsoleLogo", children: /* @__PURE__ */ jsx14("a", { href: "https://copilotkit.ai", target: "_blank", children: CopilotKitIcon }) }),
1758
- /* @__PURE__ */ jsx14(
1759
- VersionInfo,
1760
- {
1761
- showDevConsole: context.showDevConsole,
1762
- versionStatus,
1763
- currentVersion,
1764
- latestVersion
1765
- }
1766
- ),
1767
- /* @__PURE__ */ jsx14(
1768
- DebugMenuButton,
1769
- {
1770
- setShowDevConsole,
1771
- checkForUpdates,
1772
- mode: debugButtonMode
1773
- }
1774
- )
1775
- ]
1776
- }
1777
- );
1778
- }
1779
- function VersionInfo({
1780
- showDevConsole,
1781
- versionStatus,
1782
- currentVersion,
1783
- latestVersion
1784
- }) {
1785
- const [copyStatus, setCopyStatus] = useState6("");
1786
- let versionLabel = "";
1787
- let versionIcon = "";
1788
- let currentVersionLabel = currentVersion;
1789
- if (versionStatus === "latest") {
1790
- versionLabel = "latest";
1791
- versionIcon = CheckIcon2;
1792
- } else if (versionStatus === "checking") {
1793
- versionLabel = "checking";
1794
- versionIcon = SmallSpinnerIcon;
1795
- } else if (versionStatus === "update-available") {
1796
- versionLabel = "update available";
1797
- versionIcon = ExclamationMarkIcon;
1798
- currentVersionLabel = `${currentVersion} \u2192 ${latestVersion}`;
1799
- } else if (versionStatus === "outdated") {
1800
- versionLabel = "outdated";
1801
- versionIcon = ExclamationMarkTriangleIcon;
1802
- currentVersionLabel = `${currentVersion} \u2192 ${latestVersion}`;
1803
- }
1804
- let asideLabel = "";
1805
- if (showDevConsole === "auto") {
1806
- asideLabel = "(localhost only)";
1807
- } else if (showDevConsole === true) {
1808
- asideLabel = "(always on)";
1809
- }
1810
- const installCommand = [
1811
- `npm install`,
1812
- `@copilotkit/react-core@${latestVersion}`,
1813
- `@copilotkit/react-ui@${latestVersion}`,
1814
- `@copilotkit/react-textarea@${latestVersion}`
1815
- ].join(" ");
1816
- const handleCopyClick = () => {
1817
- navigator.clipboard.writeText(installCommand.trim()).then(() => {
1818
- setCopyStatus("Command copied to clipboard!");
1819
- setTimeout(() => setCopyStatus(""), 1e3);
1820
- });
1821
- };
1822
- return /* @__PURE__ */ jsxs10("div", { className: "copilotKitVersionInfo", children: [
1823
- /* @__PURE__ */ jsxs10("header", { children: [
1824
- "COPILOTKIT DEV CONSOLE",
1825
- showDevConsole === "auto" && /* @__PURE__ */ jsx14("aside", { children: asideLabel })
1826
- ] }),
1827
- /* @__PURE__ */ jsxs10("section", { children: [
1828
- "Version: ",
1829
- versionLabel,
1830
- " (",
1831
- currentVersionLabel,
1832
- ") ",
1833
- versionIcon
1834
- ] }),
1835
- (versionStatus === "update-available" || versionStatus === "outdated") && /* @__PURE__ */ jsx14("footer", { children: /* @__PURE__ */ jsx14("button", { onClick: handleCopyClick, children: copyStatus || installCommand }) })
1836
- ] });
1837
- }
1838
- function DebugMenuButton({
1839
- setShowDevConsole,
1840
- checkForUpdates,
1841
- mode
1842
- }) {
1843
- const context = useCopilotContext5();
1844
- return /* @__PURE__ */ jsx14("div", { className: "bg-black fixed top-24 w-52 text-right", children: /* @__PURE__ */ jsxs10(Menu, { children: [
1845
- /* @__PURE__ */ jsx14(MenuButton, { className: `copilotKitDebugMenuButton ${mode === "compact" ? "compact" : ""}`, children: mode == "compact" ? "Debug" : /* @__PURE__ */ jsxs10(Fragment, { children: [
1846
- "Debug ",
1847
- ChevronDownIcon
1848
- ] }) }),
1849
- /* @__PURE__ */ jsxs10(
1850
- MenuItems,
1851
- {
1852
- transition: true,
1853
- anchor: "bottom end",
1854
- className: "copilotKitDebugMenu",
1855
- style: { zIndex: 40 },
1856
- children: [
1857
- /* @__PURE__ */ jsx14(MenuItem, { children: /* @__PURE__ */ jsx14("button", { className: "copilotKitDebugMenuItem", onClick: () => logReadables(context), children: "Log Readables" }) }),
1858
- /* @__PURE__ */ jsx14(MenuItem, { children: /* @__PURE__ */ jsx14("button", { className: "copilotKitDebugMenuItem", onClick: () => logActions(context), children: "Log Actions" }) }),
1859
- /* @__PURE__ */ jsx14(MenuItem, { children: /* @__PURE__ */ jsx14("button", { className: "copilotKitDebugMenuItem", onClick: () => logMessages(context), children: "Log Messages" }) }),
1860
- /* @__PURE__ */ jsx14(MenuItem, { children: /* @__PURE__ */ jsx14("button", { className: "copilotKitDebugMenuItem", onClick: () => checkForUpdates(true), children: "Check for Updates" }) }),
1861
- /* @__PURE__ */ jsx14("hr", {}),
1862
- /* @__PURE__ */ jsx14(MenuItem, { children: /* @__PURE__ */ jsx14("button", { className: "copilotKitDebugMenuItem", onClick: () => setShowDevConsole(false), children: "Hide Dev Console" }) })
1863
- ]
1864
- }
1865
- )
1866
- ] }) });
1867
- }
1868
-
1869
- // src/components/chat/Chat.tsx
1870
- import { Fragment as Fragment2, jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
1871
- function CopilotChat({
1872
- instructions,
1873
- onSubmitMessage,
1874
- makeSystemMessage,
1875
- showResponseButton = true,
1876
- onInProgress,
1877
- Messages: Messages2 = Messages,
1878
- Input: Input2 = Input,
1879
- ResponseButton: ResponseButton2 = ResponseButton,
1880
- className,
1881
- icons,
1882
- labels
1883
- }) {
1884
- const context = useCopilotContext6();
1885
- useEffect7(() => {
1886
- context.setChatInstructions(instructions || "");
1887
- }, [instructions]);
1888
- const {
1889
- visibleMessages,
1890
- isLoading,
1891
- currentSuggestions,
1892
- sendMessage,
1893
- stopGeneration,
1894
- reloadMessages
1895
- } = useCopilotChatLogic(makeSystemMessage, onInProgress, onSubmitMessage);
1896
- const chatContext = React7.useContext(ChatContext);
1897
- const isVisible = chatContext ? chatContext.open : true;
1898
- return /* @__PURE__ */ jsxs11(WrappedCopilotChat, { icons, labels, className, children: [
1899
- /* @__PURE__ */ jsx15(CopilotDevConsole, {}),
1900
- /* @__PURE__ */ jsxs11(Messages2, { messages: visibleMessages, inProgress: isLoading, children: [
1901
- currentSuggestions.length > 0 && /* @__PURE__ */ jsxs11("div", { children: [
1902
- /* @__PURE__ */ jsx15("h6", { children: "Suggested:" }),
1903
- /* @__PURE__ */ jsx15("div", { className: "suggestions", children: currentSuggestions.map((suggestion, index) => /* @__PURE__ */ jsx15(
1904
- Suggestion,
1905
- {
1906
- title: suggestion.title,
1907
- message: suggestion.message,
1908
- partial: suggestion.partial,
1909
- className: suggestion.className,
1910
- onClick: (message) => sendMessage(message)
1911
- },
1912
- index
1913
- )) })
1914
- ] }),
1915
- showResponseButton && visibleMessages.length > 0 && /* @__PURE__ */ jsx15(
1916
- ResponseButton2,
1917
- {
1918
- onClick: isLoading ? stopGeneration : reloadMessages,
1919
- inProgress: isLoading
1920
- }
1921
- )
1922
- ] }),
1923
- /* @__PURE__ */ jsx15(Input2, { inProgress: isLoading, onSend: sendMessage, isVisible })
1924
- ] });
1925
- }
1926
- function WrappedCopilotChat({
1927
- children,
1928
- icons,
1929
- labels,
1930
- className
1931
- }) {
1932
- const chatContext = React7.useContext(ChatContext);
1933
- if (!chatContext) {
1934
- return /* @__PURE__ */ jsx15(ChatContextProvider, { icons, labels, open: true, setOpen: () => {
1935
- }, children: /* @__PURE__ */ jsx15("div", { className: `copilotKitChat ${className}`, children }) });
1936
- }
1937
- return /* @__PURE__ */ jsx15(Fragment2, { children });
1938
- }
1939
- var SUGGESTIONS_DEBOUNCE_TIMEOUT = 1e3;
1940
- var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage) => {
1941
- const { visibleMessages, appendMessage, reloadMessages, stopGeneration, isLoading } = useCopilotChat({
1942
- id: randomId(),
1943
- makeSystemMessage
1944
- });
1945
- const [currentSuggestions, setCurrentSuggestions] = useState7([]);
1946
- const suggestionsAbortControllerRef = useRef5(null);
1947
- const debounceTimerRef = useRef5();
1948
- const abortSuggestions = () => {
1949
- var _a;
1950
- (_a = suggestionsAbortControllerRef.current) == null ? void 0 : _a.abort();
1951
- suggestionsAbortControllerRef.current = null;
1952
- };
1953
- const context = useCopilotContext6();
1954
- useEffect7(() => {
1955
- onInProgress == null ? void 0 : onInProgress(isLoading);
1956
- abortSuggestions();
1957
- debounceTimerRef.current = setTimeout(
1958
- () => {
1959
- if (!isLoading && Object.keys(context.chatSuggestionConfiguration).length !== 0) {
1960
- suggestionsAbortControllerRef.current = new AbortController();
1961
- reloadSuggestions(
1962
- context,
1963
- context.chatSuggestionConfiguration,
1964
- setCurrentSuggestions,
1965
- suggestionsAbortControllerRef
1966
- );
1967
- }
1968
- },
1969
- currentSuggestions.length == 0 ? 0 : SUGGESTIONS_DEBOUNCE_TIMEOUT
1970
- );
1971
- return () => {
1972
- clearTimeout(debounceTimerRef.current);
1973
- };
1974
- }, [isLoading, context.chatSuggestionConfiguration]);
1975
- const sendMessage = (messageContent) => __async(void 0, null, function* () {
1976
- abortSuggestions();
1977
- setCurrentSuggestions([]);
1978
- const message = new TextMessage4({
1979
- content: messageContent,
1980
- role: Role2.User
1981
- });
1982
- appendMessage(message);
1983
- if (onSubmitMessage) {
1984
- try {
1985
- yield onSubmitMessage(messageContent);
1986
- } catch (error) {
1987
- console.error("Error in onSubmitMessage:", error);
1988
- }
1989
- }
1990
- return message;
1991
- });
1992
- return {
1993
- visibleMessages,
1994
- isLoading,
1995
- currentSuggestions,
1996
- sendMessage,
1997
- stopGeneration,
1998
- reloadMessages
1999
- };
2000
- };
2001
-
2002
- // src/components/chat/Modal.tsx
2003
- import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
2004
- var CopilotModal = ({
2005
- instructions,
2006
- defaultOpen = false,
2007
- clickOutsideToClose = true,
2008
- hitEscapeToClose = true,
2009
- onSetOpen,
2010
- onSubmitMessage,
2011
- shortcut = "/",
2012
- icons,
2013
- labels,
2014
- makeSystemMessage,
2015
- showResponseButton = true,
2016
- onInProgress,
2017
- Window: Window2 = Window,
2018
- Button: Button2 = Button,
2019
- Header: Header2 = Header,
2020
- Messages: Messages2 = Messages,
2021
- Input: Input2 = Input,
2022
- ResponseButton: ResponseButton2 = ResponseButton,
2023
- className,
2024
- children
2025
- }) => {
2026
- const [openState, setOpenState] = React8.useState(defaultOpen);
2027
- const setOpen = (open) => {
2028
- onSetOpen == null ? void 0 : onSetOpen(open);
2029
- setOpenState(open);
2030
- };
2031
- return /* @__PURE__ */ jsxs12(ChatContextProvider, { icons, labels, open: openState, setOpen, children: [
2032
- children,
2033
- /* @__PURE__ */ jsxs12("div", { className, children: [
2034
- /* @__PURE__ */ jsx16(Button2, {}),
2035
- /* @__PURE__ */ jsxs12(
2036
- Window2,
2037
- {
2038
- clickOutsideToClose,
2039
- shortcut,
2040
- hitEscapeToClose,
2041
- children: [
2042
- /* @__PURE__ */ jsx16(Header2, {}),
2043
- /* @__PURE__ */ jsx16(
2044
- CopilotChat,
2045
- {
2046
- instructions,
2047
- onSubmitMessage,
2048
- makeSystemMessage,
2049
- showResponseButton,
2050
- onInProgress,
2051
- Messages: Messages2,
2052
- Input: Input2,
2053
- ResponseButton: ResponseButton2
2054
- }
2055
- )
2056
- ]
2057
- }
2058
- )
2059
- ] })
2060
- ] });
2061
- };
2062
-
2063
- // src/components/chat/Popup.tsx
2064
- import { jsx as jsx17 } from "react/jsx-runtime";
2065
- function CopilotPopup(props) {
2066
- props = __spreadProps(__spreadValues({}, props), {
2067
- className: props.className ? props.className + " copilotKitPopup" : "copilotKitPopup"
2068
- });
2069
- return /* @__PURE__ */ jsx17(CopilotModal, __spreadProps(__spreadValues({}, props), { children: props.children }));
2070
- }
2071
-
2072
- // src/components/chat/Sidebar.tsx
2073
- import { useState as useState8 } from "react";
2074
- import { jsx as jsx18 } from "react/jsx-runtime";
2075
- function CopilotSidebar(props) {
2076
- props = __spreadProps(__spreadValues({}, props), {
2077
- className: props.className ? props.className + " copilotKitSidebar" : "copilotKitSidebar"
2078
- });
2079
- const [expandedClassName, setExpandedClassName] = useState8(
2080
- props.defaultOpen ? "sidebarExpanded" : ""
2081
- );
2082
- const onSetOpen = (open) => {
2083
- var _a;
2084
- (_a = props.onSetOpen) == null ? void 0 : _a.call(props, open);
2085
- setExpandedClassName(open ? "sidebarExpanded" : "");
2086
- };
2087
- return /* @__PURE__ */ jsx18("div", { className: `copilotKitSidebarContentWrapper ${expandedClassName}`, children: /* @__PURE__ */ jsx18(CopilotModal, __spreadProps(__spreadValues(__spreadValues({}, props), { onSetOpen }), { children: props.children })) });
2088
- }
2089
-
2090
- // src/hooks/use-copilot-chat-suggestions.tsx
2091
- import { useEffect as useEffect8 } from "react";
2092
- import { useCopilotContext as useCopilotContext7 } from "@copilotkit/react-core";
2093
- import { randomId as randomId2 } from "@copilotkit/shared";
2094
- function useCopilotChatSuggestions({
2095
- instructions,
2096
- className,
2097
- minSuggestions = 1,
2098
- maxSuggestions = 3
2099
- }, dependencies = []) {
2100
- const context = useCopilotContext7();
2101
- useEffect8(() => {
2102
- const id = randomId2();
2103
- context.addChatSuggestionConfiguration(id, {
2104
- instructions,
2105
- minSuggestions,
2106
- maxSuggestions,
2107
- className
2108
- });
2109
- return () => {
2110
- context.removeChatSuggestionConfiguration(id);
2111
- };
2112
- }, dependencies);
2113
- }
10
+ CopilotPopup
11
+ } from "./chunk-FL4ETWFB.mjs";
12
+ import "./chunk-B2KQEX2R.mjs";
13
+ import "./chunk-FO7Z5LAL.mjs";
14
+ import "./chunk-FLV3J3VX.mjs";
15
+ import "./chunk-YOH25I6N.mjs";
16
+ import {
17
+ CopilotChat
18
+ } from "./chunk-HR36Y2FQ.mjs";
19
+ import "./chunk-V7W6IM2V.mjs";
20
+ import "./chunk-WCPLXRZX.mjs";
21
+ import "./chunk-I4QG2ZZU.mjs";
22
+ import "./chunk-H7TM5JE6.mjs";
23
+ import "./chunk-OTPAZXVR.mjs";
24
+ import "./chunk-U6J5DGOE.mjs";
25
+ import "./chunk-YQFVRDNC.mjs";
26
+ import "./chunk-FOZVHL73.mjs";
27
+ import "./chunk-YQ3D5IQV.mjs";
28
+ import "./chunk-XSUSSWDS.mjs";
29
+ import {
30
+ useChatContext
31
+ } from "./chunk-BJPGMY3I.mjs";
32
+ import "./chunk-UPTB2MVO.mjs";
33
+ import "./chunk-FZC7X5PK.mjs";
34
+ import "./chunk-IU3WTXLQ.mjs";
35
+ import "./chunk-T26KLXLH.mjs";
36
+ import {
37
+ useCopilotChatSuggestions
38
+ } from "./chunk-5HHVL5WK.mjs";
39
+ import "./chunk-54JAUBUJ.mjs";
40
+ import "./chunk-VOBX4JOA.mjs";
41
+ import "./chunk-MRXNTQOX.mjs";
2114
42
  export {
2115
43
  CopilotChat,
2116
44
  CopilotPopup,