@copilotkitnext/react 0.0.22-alpha.1 → 0.0.22-alpha.3

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 (421) hide show
  1. package/dist/chunk-32YJ5VJ4.mjs +157 -0
  2. package/dist/chunk-32YJ5VJ4.mjs.map +1 -0
  3. package/dist/chunk-36HFWACS.mjs +1 -0
  4. package/dist/chunk-36HFWACS.mjs.map +1 -0
  5. package/dist/chunk-3TA5QBSZ.mjs +122 -0
  6. package/dist/chunk-3TA5QBSZ.mjs.map +1 -0
  7. package/dist/chunk-46BZRXWT.mjs +16 -0
  8. package/dist/chunk-46BZRXWT.mjs.map +1 -0
  9. package/dist/chunk-4UDBR75C.mjs +106 -0
  10. package/dist/chunk-4UDBR75C.mjs.map +1 -0
  11. package/dist/chunk-4XJK5IVQ.mjs +83 -0
  12. package/dist/chunk-4XJK5IVQ.mjs.map +1 -0
  13. package/dist/chunk-5AAT4Z3C.mjs +107 -0
  14. package/dist/chunk-5AAT4Z3C.mjs.map +1 -0
  15. package/dist/chunk-5JNWVLQI.mjs +72 -0
  16. package/dist/chunk-5JNWVLQI.mjs.map +1 -0
  17. package/dist/chunk-5SC3CO5Q.mjs +69 -0
  18. package/dist/chunk-5SC3CO5Q.mjs.map +1 -0
  19. package/dist/chunk-6VUKDHOD.mjs +1 -0
  20. package/dist/chunk-6VUKDHOD.mjs.map +1 -0
  21. package/dist/chunk-AEFM73CL.mjs +32 -0
  22. package/dist/chunk-AEFM73CL.mjs.map +1 -0
  23. package/dist/chunk-AI3Z3CHN.mjs +97 -0
  24. package/dist/chunk-AI3Z3CHN.mjs.map +1 -0
  25. package/dist/chunk-AXFRCGH6.mjs +107 -0
  26. package/dist/chunk-AXFRCGH6.mjs.map +1 -0
  27. package/dist/chunk-BT6C5OPU.mjs +278 -0
  28. package/dist/chunk-BT6C5OPU.mjs.map +1 -0
  29. package/dist/chunk-CGLGXQAU.mjs +78 -0
  30. package/dist/chunk-CGLGXQAU.mjs.map +1 -0
  31. package/dist/chunk-CSHBUHRW.mjs +69 -0
  32. package/dist/chunk-CSHBUHRW.mjs.map +1 -0
  33. package/dist/chunk-CZ3GI3IF.mjs +283 -0
  34. package/dist/chunk-CZ3GI3IF.mjs.map +1 -0
  35. package/dist/chunk-DVUQO72Z.mjs +1 -0
  36. package/dist/chunk-DVUQO72Z.mjs.map +1 -0
  37. package/dist/chunk-E4HD4M7R.mjs +76 -0
  38. package/dist/chunk-E4HD4M7R.mjs.map +1 -0
  39. package/dist/chunk-E56GYBP3.mjs +101 -0
  40. package/dist/chunk-E56GYBP3.mjs.map +1 -0
  41. package/dist/chunk-EJ5ZEAAN.mjs +57 -0
  42. package/dist/chunk-EJ5ZEAAN.mjs.map +1 -0
  43. package/dist/chunk-ETWJDCGE.mjs +1 -0
  44. package/dist/chunk-ETWJDCGE.mjs.map +1 -0
  45. package/dist/chunk-F43IPGPA.mjs +311 -0
  46. package/dist/chunk-F43IPGPA.mjs.map +1 -0
  47. package/dist/chunk-FIBK3DYE.mjs +26 -0
  48. package/dist/chunk-FIBK3DYE.mjs.map +1 -0
  49. package/dist/chunk-FVURPXQK.mjs +45 -0
  50. package/dist/chunk-FVURPXQK.mjs.map +1 -0
  51. package/dist/chunk-FZR2XQKR.mjs +44 -0
  52. package/dist/chunk-FZR2XQKR.mjs.map +1 -0
  53. package/dist/chunk-IA4CLXDM.mjs +76 -0
  54. package/dist/chunk-IA4CLXDM.mjs.map +1 -0
  55. package/dist/chunk-IH5VFJ4L.mjs +60 -0
  56. package/dist/chunk-IH5VFJ4L.mjs.map +1 -0
  57. package/dist/chunk-IICUCI5S.mjs +43 -0
  58. package/dist/chunk-IICUCI5S.mjs.map +1 -0
  59. package/dist/chunk-JLVGSNAO.mjs +311 -0
  60. package/dist/chunk-JLVGSNAO.mjs.map +1 -0
  61. package/dist/chunk-JWOIINVV.mjs +237 -0
  62. package/dist/chunk-JWOIINVV.mjs.map +1 -0
  63. package/dist/chunk-KCVDFZJX.mjs +873 -0
  64. package/dist/chunk-KCVDFZJX.mjs.map +1 -0
  65. package/dist/chunk-KPRUSQ3K.mjs +1 -0
  66. package/dist/chunk-KPRUSQ3K.mjs.map +1 -0
  67. package/dist/chunk-MWC5OV7Z.mjs +1 -0
  68. package/dist/chunk-MWC5OV7Z.mjs.map +1 -0
  69. package/dist/chunk-N5EP5OD5.mjs +1 -0
  70. package/dist/chunk-N5EP5OD5.mjs.map +1 -0
  71. package/dist/chunk-NASFZS3N.mjs +43 -0
  72. package/dist/chunk-NASFZS3N.mjs.map +1 -0
  73. package/dist/chunk-NB2GZAKG.mjs +131 -0
  74. package/dist/chunk-NB2GZAKG.mjs.map +1 -0
  75. package/dist/chunk-NB4DFAZH.mjs +185 -0
  76. package/dist/chunk-NB4DFAZH.mjs.map +1 -0
  77. package/dist/chunk-NNAYEAP2.mjs +49 -0
  78. package/dist/chunk-NNAYEAP2.mjs.map +1 -0
  79. package/dist/chunk-NNPKBGD6.mjs +37 -0
  80. package/dist/chunk-NNPKBGD6.mjs.map +1 -0
  81. package/dist/chunk-OMPVTGXH.mjs +122 -0
  82. package/dist/chunk-OMPVTGXH.mjs.map +1 -0
  83. package/dist/chunk-QFBM3ZT2.mjs +45 -0
  84. package/dist/chunk-QFBM3ZT2.mjs.map +1 -0
  85. package/dist/chunk-QJ6DZ645.mjs +78 -0
  86. package/dist/chunk-QJ6DZ645.mjs.map +1 -0
  87. package/dist/chunk-R5OLAA3L.mjs +135 -0
  88. package/dist/chunk-R5OLAA3L.mjs.map +1 -0
  89. package/dist/chunk-RF2CGPHQ.mjs +215 -0
  90. package/dist/chunk-RF2CGPHQ.mjs.map +1 -0
  91. package/dist/chunk-RGD2L3Z4.mjs +96 -0
  92. package/dist/chunk-RGD2L3Z4.mjs.map +1 -0
  93. package/dist/chunk-RK5P2LG6.mjs +57 -0
  94. package/dist/chunk-RK5P2LG6.mjs.map +1 -0
  95. package/dist/chunk-RRXDJCXI.mjs +60 -0
  96. package/dist/chunk-RRXDJCXI.mjs.map +1 -0
  97. package/dist/chunk-SPDE34WC.mjs +283 -0
  98. package/dist/chunk-SPDE34WC.mjs.map +1 -0
  99. package/dist/chunk-TAUOEJH2.mjs +120 -0
  100. package/dist/chunk-TAUOEJH2.mjs.map +1 -0
  101. package/dist/chunk-TKFOXPXF.mjs +157 -0
  102. package/dist/chunk-TKFOXPXF.mjs.map +1 -0
  103. package/dist/chunk-UOX5D73C.mjs +22 -0
  104. package/dist/chunk-UOX5D73C.mjs.map +1 -0
  105. package/dist/chunk-US4KNAAV.mjs +1 -0
  106. package/dist/chunk-US4KNAAV.mjs.map +1 -0
  107. package/dist/chunk-UZB3CTOY.mjs +873 -0
  108. package/dist/chunk-UZB3CTOY.mjs.map +1 -0
  109. package/dist/chunk-VBI6JXPC.mjs +1 -0
  110. package/dist/chunk-VBI6JXPC.mjs.map +1 -0
  111. package/dist/chunk-VE3SBLU7.mjs +215 -0
  112. package/dist/chunk-VE3SBLU7.mjs.map +1 -0
  113. package/dist/chunk-VUHFLJWI.mjs +185 -0
  114. package/dist/chunk-VUHFLJWI.mjs.map +1 -0
  115. package/dist/chunk-VVAXSF3M.mjs +61 -0
  116. package/dist/chunk-VVAXSF3M.mjs.map +1 -0
  117. package/dist/chunk-W5DUKRCI.mjs +97 -0
  118. package/dist/chunk-W5DUKRCI.mjs.map +1 -0
  119. package/dist/chunk-WNRDFAZ5.mjs +22 -0
  120. package/dist/chunk-WNRDFAZ5.mjs.map +1 -0
  121. package/dist/chunk-XO4IRKSC.mjs +11 -0
  122. package/dist/chunk-XO4IRKSC.mjs.map +1 -0
  123. package/dist/chunk-XU5CEPYQ.mjs +75 -0
  124. package/dist/chunk-XU5CEPYQ.mjs.map +1 -0
  125. package/dist/chunk-YPH4BHOY.mjs +39 -0
  126. package/dist/chunk-YPH4BHOY.mjs.map +1 -0
  127. package/dist/chunk-YVPPF62K.mjs +32 -0
  128. package/dist/chunk-YVPPF62K.mjs.map +1 -0
  129. package/dist/chunk-YZUPVMHC.mjs +1 -0
  130. package/dist/chunk-YZUPVMHC.mjs.map +1 -0
  131. package/dist/chunk-Z3OIGQCZ.mjs +75 -0
  132. package/dist/chunk-Z3OIGQCZ.mjs.map +1 -0
  133. package/dist/chunk-ZIDT52TM.mjs +131 -0
  134. package/dist/chunk-ZIDT52TM.mjs.map +1 -0
  135. package/dist/components/CopilotKitInspector.d.mts +13 -0
  136. package/dist/components/CopilotKitInspector.d.ts +13 -0
  137. package/dist/components/CopilotKitInspector.js +69 -0
  138. package/dist/components/CopilotKitInspector.js.map +1 -0
  139. package/dist/components/CopilotKitInspector.mjs +7 -0
  140. package/dist/components/CopilotKitInspector.mjs.map +1 -0
  141. package/dist/components/WildcardToolCallRender.d.mts +7 -0
  142. package/dist/components/WildcardToolCallRender.d.ts +7 -0
  143. package/dist/components/WildcardToolCallRender.js +106 -0
  144. package/dist/components/WildcardToolCallRender.js.map +1 -0
  145. package/dist/components/WildcardToolCallRender.mjs +8 -0
  146. package/dist/components/WildcardToolCallRender.mjs.map +1 -0
  147. package/dist/components/chat/CopilotChat.d.mts +30 -0
  148. package/dist/components/chat/CopilotChat.d.ts +30 -0
  149. package/dist/components/chat/CopilotChat.js +2934 -0
  150. package/dist/components/chat/CopilotChat.js.map +1 -0
  151. package/dist/components/chat/CopilotChat.mjs +37 -0
  152. package/dist/components/chat/CopilotChat.mjs.map +1 -0
  153. package/dist/components/chat/CopilotChatAssistantMessage.d.mts +45 -0
  154. package/dist/components/chat/CopilotChatAssistantMessage.d.ts +45 -0
  155. package/dist/components/chat/CopilotChatAssistantMessage.js +735 -0
  156. package/dist/components/chat/CopilotChatAssistantMessage.js.map +1 -0
  157. package/dist/components/chat/CopilotChatAssistantMessage.mjs +29 -0
  158. package/dist/components/chat/CopilotChatAssistantMessage.mjs.map +1 -0
  159. package/dist/components/chat/CopilotChatAudioRecorder.d.mts +11 -0
  160. package/dist/components/chat/CopilotChatAudioRecorder.d.ts +11 -0
  161. package/dist/components/chat/CopilotChatAudioRecorder.js +131 -0
  162. package/dist/components/chat/CopilotChatAudioRecorder.js.map +1 -0
  163. package/dist/components/chat/CopilotChatAudioRecorder.mjs +9 -0
  164. package/dist/components/chat/CopilotChatAudioRecorder.mjs.map +1 -0
  165. package/dist/components/chat/CopilotChatInput.d.mts +67 -0
  166. package/dist/components/chat/CopilotChatInput.d.ts +67 -0
  167. package/dist/components/chat/CopilotChatInput.js +1305 -0
  168. package/dist/components/chat/CopilotChatInput.js.map +1 -0
  169. package/dist/components/chat/CopilotChatInput.mjs +16 -0
  170. package/dist/components/chat/CopilotChatInput.mjs.map +1 -0
  171. package/dist/components/chat/CopilotChatMessageView.d.mts +29 -0
  172. package/dist/components/chat/CopilotChatMessageView.d.ts +29 -0
  173. package/dist/components/chat/CopilotChatMessageView.js +1164 -0
  174. package/dist/components/chat/CopilotChatMessageView.js.map +1 -0
  175. package/dist/components/chat/CopilotChatMessageView.mjs +31 -0
  176. package/dist/components/chat/CopilotChatMessageView.mjs.map +1 -0
  177. package/dist/components/chat/CopilotChatSuggestionPill.d.mts +11 -0
  178. package/dist/components/chat/CopilotChatSuggestionPill.d.ts +11 -0
  179. package/dist/components/chat/CopilotChatSuggestionPill.js +76 -0
  180. package/dist/components/chat/CopilotChatSuggestionPill.js.map +1 -0
  181. package/dist/components/chat/CopilotChatSuggestionPill.mjs +10 -0
  182. package/dist/components/chat/CopilotChatSuggestionPill.mjs.map +1 -0
  183. package/dist/components/chat/CopilotChatSuggestionView.d.mts +33 -0
  184. package/dist/components/chat/CopilotChatSuggestionView.d.ts +33 -0
  185. package/dist/components/chat/CopilotChatSuggestionView.js +179 -0
  186. package/dist/components/chat/CopilotChatSuggestionView.js.map +1 -0
  187. package/dist/components/chat/CopilotChatSuggestionView.mjs +12 -0
  188. package/dist/components/chat/CopilotChatSuggestionView.mjs.map +1 -0
  189. package/dist/components/chat/CopilotChatToggleButton.d.mts +14 -0
  190. package/dist/components/chat/CopilotChatToggleButton.d.ts +14 -0
  191. package/dist/components/chat/CopilotChatToggleButton.js +222 -0
  192. package/dist/components/chat/CopilotChatToggleButton.js.map +1 -0
  193. package/dist/components/chat/CopilotChatToggleButton.mjs +16 -0
  194. package/dist/components/chat/CopilotChatToggleButton.mjs.map +1 -0
  195. package/dist/components/chat/CopilotChatToolCallsView.d.mts +10 -0
  196. package/dist/components/chat/CopilotChatToolCallsView.d.ts +10 -0
  197. package/dist/components/chat/CopilotChatToolCallsView.js +264 -0
  198. package/dist/components/chat/CopilotChatToolCallsView.js.map +1 -0
  199. package/dist/components/chat/CopilotChatToolCallsView.mjs +24 -0
  200. package/dist/components/chat/CopilotChatToolCallsView.mjs.map +1 -0
  201. package/dist/components/chat/CopilotChatUserMessage.d.mts +52 -0
  202. package/dist/components/chat/CopilotChatUserMessage.d.ts +52 -0
  203. package/dist/components/chat/CopilotChatUserMessage.js +523 -0
  204. package/dist/components/chat/CopilotChatUserMessage.js.map +1 -0
  205. package/dist/components/chat/CopilotChatUserMessage.mjs +14 -0
  206. package/dist/components/chat/CopilotChatUserMessage.mjs.map +1 -0
  207. package/dist/components/chat/CopilotChatView.d.mts +54 -0
  208. package/dist/components/chat/CopilotChatView.d.ts +54 -0
  209. package/dist/components/chat/CopilotChatView.js +2640 -0
  210. package/dist/components/chat/CopilotChatView.js.map +1 -0
  211. package/dist/components/chat/CopilotChatView.mjs +38 -0
  212. package/dist/components/chat/CopilotChatView.mjs.map +1 -0
  213. package/dist/components/chat/CopilotModalHeader.d.mts +22 -0
  214. package/dist/components/chat/CopilotModalHeader.d.ts +22 -0
  215. package/dist/components/chat/CopilotModalHeader.js +186 -0
  216. package/dist/components/chat/CopilotModalHeader.js.map +1 -0
  217. package/dist/components/chat/CopilotModalHeader.mjs +12 -0
  218. package/dist/components/chat/CopilotModalHeader.mjs.map +1 -0
  219. package/dist/components/chat/CopilotPopup.d.mts +33 -0
  220. package/dist/components/chat/CopilotPopup.d.ts +33 -0
  221. package/dist/components/chat/CopilotPopup.js +3343 -0
  222. package/dist/components/chat/CopilotPopup.js.map +1 -0
  223. package/dist/components/chat/CopilotPopup.mjs +43 -0
  224. package/dist/components/chat/CopilotPopup.mjs.map +1 -0
  225. package/dist/components/chat/CopilotPopupView.d.mts +30 -0
  226. package/dist/components/chat/CopilotPopupView.d.ts +30 -0
  227. package/dist/components/chat/CopilotPopupView.js +3003 -0
  228. package/dist/components/chat/CopilotPopupView.js.map +1 -0
  229. package/dist/components/chat/CopilotPopupView.mjs +41 -0
  230. package/dist/components/chat/CopilotPopupView.mjs.map +1 -0
  231. package/dist/components/chat/CopilotSidebar.d.mts +31 -0
  232. package/dist/components/chat/CopilotSidebar.d.ts +31 -0
  233. package/dist/components/chat/CopilotSidebar.js +3266 -0
  234. package/dist/components/chat/CopilotSidebar.js.map +1 -0
  235. package/dist/components/chat/CopilotSidebar.mjs +43 -0
  236. package/dist/components/chat/CopilotSidebar.mjs.map +1 -0
  237. package/dist/components/chat/CopilotSidebarView.d.mts +28 -0
  238. package/dist/components/chat/CopilotSidebarView.d.ts +28 -0
  239. package/dist/components/chat/CopilotSidebarView.js +2941 -0
  240. package/dist/components/chat/CopilotSidebarView.js.map +1 -0
  241. package/dist/components/chat/CopilotSidebarView.mjs +41 -0
  242. package/dist/components/chat/CopilotSidebarView.mjs.map +1 -0
  243. package/dist/components/chat/index.d.mts +23 -0
  244. package/dist/components/chat/index.d.ts +23 -0
  245. package/dist/components/chat/index.js +3503 -0
  246. package/dist/components/chat/index.js.map +1 -0
  247. package/dist/components/chat/index.mjs +95 -0
  248. package/dist/components/chat/index.mjs.map +1 -0
  249. package/dist/components/index.d.mts +29 -0
  250. package/dist/components/index.d.ts +29 -0
  251. package/dist/components/index.js +3583 -0
  252. package/dist/components/index.js.map +1 -0
  253. package/dist/components/index.mjs +104 -0
  254. package/dist/components/index.mjs.map +1 -0
  255. package/dist/components/ui/button.d.mts +14 -0
  256. package/dist/components/ui/button.d.ts +14 -0
  257. package/dist/components/ui/button.js +150 -0
  258. package/dist/components/ui/button.js.map +1 -0
  259. package/dist/components/ui/button.mjs +10 -0
  260. package/dist/components/ui/button.mjs.map +1 -0
  261. package/dist/components/ui/dropdown-menu.d.mts +28 -0
  262. package/dist/components/ui/dropdown-menu.d.ts +28 -0
  263. package/dist/components/ui/dropdown-menu.js +291 -0
  264. package/dist/components/ui/dropdown-menu.js.map +1 -0
  265. package/dist/components/ui/dropdown-menu.mjs +37 -0
  266. package/dist/components/ui/dropdown-menu.mjs.map +1 -0
  267. package/dist/components/ui/tooltip.d.mts +10 -0
  268. package/dist/components/ui/tooltip.d.ts +10 -0
  269. package/dist/components/ui/tooltip.js +103 -0
  270. package/dist/components/ui/tooltip.js.map +1 -0
  271. package/dist/components/ui/tooltip.mjs +14 -0
  272. package/dist/components/ui/tooltip.mjs.map +1 -0
  273. package/dist/hooks/index.d.mts +19 -0
  274. package/dist/hooks/index.d.ts +19 -0
  275. package/dist/hooks/index.js +691 -0
  276. package/dist/hooks/index.js.map +1 -0
  277. package/dist/hooks/index.mjs +45 -0
  278. package/dist/hooks/index.mjs.map +1 -0
  279. package/dist/hooks/use-agent-context.d.mts +5 -0
  280. package/dist/hooks/use-agent-context.d.ts +5 -0
  281. package/dist/hooks/use-agent-context.js +116 -0
  282. package/dist/hooks/use-agent-context.js.map +1 -0
  283. package/dist/hooks/use-agent-context.mjs +10 -0
  284. package/dist/hooks/use-agent-context.mjs.map +1 -0
  285. package/dist/hooks/use-agent.d.mts +16 -0
  286. package/dist/hooks/use-agent.d.ts +16 -0
  287. package/dist/hooks/use-agent.js +171 -0
  288. package/dist/hooks/use-agent.js.map +1 -0
  289. package/dist/hooks/use-agent.mjs +12 -0
  290. package/dist/hooks/use-agent.mjs.map +1 -0
  291. package/dist/hooks/use-configure-suggestions.d.mts +13 -0
  292. package/dist/hooks/use-configure-suggestions.d.ts +13 -0
  293. package/dist/hooks/use-configure-suggestions.js +232 -0
  294. package/dist/hooks/use-configure-suggestions.js.map +1 -0
  295. package/dist/hooks/use-configure-suggestions.mjs +11 -0
  296. package/dist/hooks/use-configure-suggestions.mjs.map +1 -0
  297. package/dist/hooks/use-frontend-tool.d.mts +8 -0
  298. package/dist/hooks/use-frontend-tool.d.ts +8 -0
  299. package/dist/hooks/use-frontend-tool.js +137 -0
  300. package/dist/hooks/use-frontend-tool.js.map +1 -0
  301. package/dist/hooks/use-frontend-tool.mjs +10 -0
  302. package/dist/hooks/use-frontend-tool.mjs.map +1 -0
  303. package/dist/hooks/use-human-in-the-loop.d.mts +7 -0
  304. package/dist/hooks/use-human-in-the-loop.d.ts +7 -0
  305. package/dist/hooks/use-human-in-the-loop.js +206 -0
  306. package/dist/hooks/use-human-in-the-loop.js.map +1 -0
  307. package/dist/hooks/use-human-in-the-loop.mjs +11 -0
  308. package/dist/hooks/use-human-in-the-loop.mjs.map +1 -0
  309. package/dist/hooks/use-keyboard-height.d.mts +15 -0
  310. package/dist/hooks/use-keyboard-height.d.ts +15 -0
  311. package/dist/hooks/use-keyboard-height.js +68 -0
  312. package/dist/hooks/use-keyboard-height.js.map +1 -0
  313. package/dist/hooks/use-keyboard-height.mjs +7 -0
  314. package/dist/hooks/use-keyboard-height.mjs.map +1 -0
  315. package/dist/hooks/use-render-activity-message.d.mts +5 -0
  316. package/dist/hooks/use-render-activity-message.d.ts +5 -0
  317. package/dist/hooks/use-render-activity-message.js +158 -0
  318. package/dist/hooks/use-render-activity-message.js.map +1 -0
  319. package/dist/hooks/use-render-activity-message.mjs +12 -0
  320. package/dist/hooks/use-render-activity-message.mjs.map +1 -0
  321. package/dist/hooks/use-render-custom-messages.d.mts +11 -0
  322. package/dist/hooks/use-render-custom-messages.d.ts +11 -0
  323. package/dist/hooks/use-render-custom-messages.js +170 -0
  324. package/dist/hooks/use-render-custom-messages.js.map +1 -0
  325. package/dist/hooks/use-render-custom-messages.mjs +12 -0
  326. package/dist/hooks/use-render-custom-messages.mjs.map +1 -0
  327. package/dist/hooks/use-render-tool-call.d.mts +16 -0
  328. package/dist/hooks/use-render-tool-call.d.ts +16 -0
  329. package/dist/hooks/use-render-tool-call.js +208 -0
  330. package/dist/hooks/use-render-tool-call.js.map +1 -0
  331. package/dist/hooks/use-render-tool-call.mjs +11 -0
  332. package/dist/hooks/use-render-tool-call.mjs.map +1 -0
  333. package/dist/hooks/use-suggestions.d.mts +14 -0
  334. package/dist/hooks/use-suggestions.d.ts +14 -0
  335. package/dist/hooks/use-suggestions.js +176 -0
  336. package/dist/hooks/use-suggestions.js.map +1 -0
  337. package/dist/hooks/use-suggestions.mjs +11 -0
  338. package/dist/hooks/use-suggestions.mjs.map +1 -0
  339. package/dist/index.d.mts +46 -635
  340. package/dist/index.d.ts +46 -635
  341. package/dist/index.mjs +110 -3960
  342. package/dist/index.mjs.map +1 -1
  343. package/dist/lib/react-core.d.mts +33 -0
  344. package/dist/lib/react-core.d.ts +33 -0
  345. package/dist/lib/react-core.js +73 -0
  346. package/dist/lib/react-core.js.map +1 -0
  347. package/dist/lib/react-core.mjs +7 -0
  348. package/dist/lib/react-core.mjs.map +1 -0
  349. package/dist/lib/slots.d.mts +16 -0
  350. package/dist/lib/slots.d.ts +16 -0
  351. package/dist/lib/slots.js +60 -0
  352. package/dist/lib/slots.js.map +1 -0
  353. package/dist/lib/slots.mjs +7 -0
  354. package/dist/lib/slots.mjs.map +1 -0
  355. package/dist/lib/utils.d.mts +5 -0
  356. package/dist/lib/utils.d.ts +5 -0
  357. package/dist/lib/utils.js +35 -0
  358. package/dist/lib/utils.js.map +1 -0
  359. package/dist/lib/utils.mjs +7 -0
  360. package/dist/lib/utils.mjs.map +1 -0
  361. package/dist/providers/CopilotChatConfigurationProvider.d.mts +43 -0
  362. package/dist/providers/CopilotChatConfigurationProvider.d.ts +43 -0
  363. package/dist/providers/CopilotChatConfigurationProvider.js +109 -0
  364. package/dist/providers/CopilotChatConfigurationProvider.js.map +1 -0
  365. package/dist/providers/CopilotChatConfigurationProvider.mjs +11 -0
  366. package/dist/providers/CopilotChatConfigurationProvider.mjs.map +1 -0
  367. package/dist/providers/CopilotKitProvider.d.mts +33 -0
  368. package/dist/providers/CopilotKitProvider.d.ts +33 -0
  369. package/dist/providers/CopilotKitProvider.js +314 -0
  370. package/dist/providers/CopilotKitProvider.js.map +1 -0
  371. package/dist/providers/CopilotKitProvider.mjs +12 -0
  372. package/dist/providers/CopilotKitProvider.mjs.map +1 -0
  373. package/dist/providers/index.d.mts +13 -0
  374. package/dist/providers/index.d.ts +13 -0
  375. package/dist/providers/index.js +396 -0
  376. package/dist/providers/index.js.map +1 -0
  377. package/dist/providers/index.mjs +18 -0
  378. package/dist/providers/index.mjs.map +1 -0
  379. package/dist/types/defineToolCallRenderer.d.mts +41 -0
  380. package/dist/types/defineToolCallRenderer.d.ts +41 -0
  381. package/dist/types/defineToolCallRenderer.js +40 -0
  382. package/dist/types/defineToolCallRenderer.js.map +1 -0
  383. package/dist/types/defineToolCallRenderer.mjs +7 -0
  384. package/dist/types/defineToolCallRenderer.mjs.map +1 -0
  385. package/dist/types/frontend-tool.d.mts +9 -0
  386. package/dist/types/frontend-tool.d.ts +9 -0
  387. package/dist/types/frontend-tool.js +19 -0
  388. package/dist/types/frontend-tool.js.map +1 -0
  389. package/dist/types/frontend-tool.mjs +2 -0
  390. package/dist/types/frontend-tool.mjs.map +1 -0
  391. package/dist/types/human-in-the-loop.d.mts +29 -0
  392. package/dist/types/human-in-the-loop.d.ts +29 -0
  393. package/dist/types/human-in-the-loop.js +19 -0
  394. package/dist/types/human-in-the-loop.js.map +1 -0
  395. package/dist/types/human-in-the-loop.mjs +2 -0
  396. package/dist/types/human-in-the-loop.mjs.map +1 -0
  397. package/dist/types/index.d.mts +11 -0
  398. package/dist/types/index.d.ts +11 -0
  399. package/dist/types/index.js +42 -0
  400. package/dist/types/index.js.map +1 -0
  401. package/dist/types/index.mjs +13 -0
  402. package/dist/types/index.mjs.map +1 -0
  403. package/dist/types/react-activity-message-renderer.d.mts +29 -0
  404. package/dist/types/react-activity-message-renderer.d.ts +29 -0
  405. package/dist/types/react-activity-message-renderer.js +19 -0
  406. package/dist/types/react-activity-message-renderer.js.map +1 -0
  407. package/dist/types/react-activity-message-renderer.mjs +2 -0
  408. package/dist/types/react-activity-message-renderer.mjs.map +1 -0
  409. package/dist/types/react-custom-message-renderer.d.mts +18 -0
  410. package/dist/types/react-custom-message-renderer.d.ts +18 -0
  411. package/dist/types/react-custom-message-renderer.js +19 -0
  412. package/dist/types/react-custom-message-renderer.js.map +1 -0
  413. package/dist/types/react-custom-message-renderer.mjs +2 -0
  414. package/dist/types/react-custom-message-renderer.mjs.map +1 -0
  415. package/dist/types/react-tool-call-renderer.d.mts +30 -0
  416. package/dist/types/react-tool-call-renderer.d.ts +30 -0
  417. package/dist/types/react-tool-call-renderer.js +19 -0
  418. package/dist/types/react-tool-call-renderer.js.map +1 -0
  419. package/dist/types/react-tool-call-renderer.mjs +2 -0
  420. package/dist/types/react-tool-call-renderer.mjs.map +1 -0
  421. package/package.json +8 -7
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/CopilotChatInput.tsx"],"sourcesContent":["import React, {\n useState,\n useRef,\n KeyboardEvent,\n ChangeEvent,\n useEffect,\n useLayoutEffect,\n forwardRef,\n useImperativeHandle,\n useCallback,\n useMemo,\n} from \"react\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Plus, Mic, ArrowUp, X, Check, Square } from \"lucide-react\";\n\nimport {\n CopilotChatLabels,\n useCopilotChatConfiguration,\n CopilotChatDefaultLabels,\n} from \"@/providers/CopilotChatConfigurationProvider\";\nimport { Button } from \"@/components/ui/button\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n DropdownMenuSeparator,\n} from \"@/components/ui/dropdown-menu\";\n\nimport { CopilotChatAudioRecorder } from \"./CopilotChatAudioRecorder\";\nimport { renderSlot, WithSlots } from \"@/lib/slots\";\n\nexport type CopilotChatInputMode = \"input\" | \"transcribe\" | \"processing\";\n\nexport type ToolsMenuItem = {\n label: string;\n} & (\n | {\n action: () => void;\n items?: never;\n }\n | {\n action?: never;\n items: (ToolsMenuItem | \"-\")[];\n }\n);\n\ntype CopilotChatInputSlots = {\n textArea: typeof CopilotChatInput.TextArea;\n sendButton: typeof CopilotChatInput.SendButton;\n startTranscribeButton: typeof CopilotChatInput.StartTranscribeButton;\n cancelTranscribeButton: typeof CopilotChatInput.CancelTranscribeButton;\n finishTranscribeButton: typeof CopilotChatInput.FinishTranscribeButton;\n addMenuButton: typeof CopilotChatInput.AddMenuButton;\n audioRecorder: typeof CopilotChatAudioRecorder;\n};\n\ntype CopilotChatInputRestProps = {\n mode?: CopilotChatInputMode;\n toolsMenu?: (ToolsMenuItem | \"-\")[];\n autoFocus?: boolean;\n onSubmitMessage?: (value: string) => void;\n onStop?: () => void;\n isRunning?: boolean;\n onStartTranscribe?: () => void;\n onCancelTranscribe?: () => void;\n onFinishTranscribe?: () => void;\n onAddFile?: () => void;\n value?: string;\n onChange?: (value: string) => void;\n} & Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\">;\n\ntype CopilotChatInputBaseProps = WithSlots<CopilotChatInputSlots, CopilotChatInputRestProps>;\n\ntype CopilotChatInputChildrenArgs = CopilotChatInputBaseProps extends { children?: infer C }\n ? C extends (props: infer P) => React.ReactNode\n ? P\n : never\n : never;\n\nexport type CopilotChatInputProps = Omit<CopilotChatInputBaseProps, \"children\"> & {\n children?: (props: CopilotChatInputChildrenArgs) => React.ReactNode;\n};\n\nconst SLASH_MENU_MAX_VISIBLE_ITEMS = 5;\nconst SLASH_MENU_ITEM_HEIGHT_PX = 40;\n\nexport function CopilotChatInput({\n mode = \"input\",\n onSubmitMessage,\n onStop,\n isRunning = false,\n onStartTranscribe,\n onCancelTranscribe,\n onFinishTranscribe,\n onAddFile,\n onChange,\n value,\n toolsMenu,\n autoFocus = true,\n textArea,\n sendButton,\n startTranscribeButton,\n cancelTranscribeButton,\n finishTranscribeButton,\n addMenuButton,\n audioRecorder,\n children,\n className,\n ...props\n}: CopilotChatInputProps) {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(() => value ?? \"\");\n\n useEffect(() => {\n if (!isControlled && value !== undefined) {\n setInternalValue(value);\n }\n }, [isControlled, value]);\n\n const resolvedValue = isControlled ? (value ?? \"\") : internalValue;\n\n const [layout, setLayout] = useState<\"compact\" | \"expanded\">(\"compact\");\n const ignoreResizeRef = useRef(false);\n const resizeEvaluationRafRef = useRef<number | null>(null);\n const isExpanded = mode === \"input\" && layout === \"expanded\";\n const [commandQuery, setCommandQuery] = useState<string | null>(null);\n const [slashHighlightIndex, setSlashHighlightIndex] = useState(0);\n\n const inputRef = useRef<HTMLTextAreaElement>(null);\n const gridRef = useRef<HTMLDivElement>(null);\n const addButtonContainerRef = useRef<HTMLDivElement>(null);\n const actionsContainerRef = useRef<HTMLDivElement>(null);\n const audioRecorderRef = useRef<React.ElementRef<typeof CopilotChatAudioRecorder>>(null);\n const slashMenuRef = useRef<HTMLDivElement>(null);\n const config = useCopilotChatConfiguration();\n const labels = config?.labels ?? CopilotChatDefaultLabels;\n\n const previousModalStateRef = useRef<boolean | undefined>(undefined);\n const measurementCanvasRef = useRef<HTMLCanvasElement | null>(null);\n const measurementsRef = useRef({\n singleLineHeight: 0,\n maxHeight: 0,\n paddingLeft: 0,\n paddingRight: 0,\n });\n\n const commandItems = useMemo(() => {\n const entries: ToolsMenuItem[] = [];\n const seen = new Set<string>();\n\n const pushItem = (item: ToolsMenuItem | \"-\") => {\n if (item === \"-\") {\n return;\n }\n\n if (item.items && item.items.length > 0) {\n for (const nested of item.items) {\n pushItem(nested);\n }\n return;\n }\n\n if (!seen.has(item.label)) {\n seen.add(item.label);\n entries.push(item);\n }\n };\n\n if (onAddFile) {\n pushItem({\n label: labels.chatInputToolbarAddButtonLabel,\n action: onAddFile,\n });\n }\n\n if (toolsMenu && toolsMenu.length > 0) {\n for (const item of toolsMenu) {\n pushItem(item);\n }\n }\n\n return entries;\n }, [labels.chatInputToolbarAddButtonLabel, onAddFile, toolsMenu]);\n\n const filteredCommands = useMemo(() => {\n if (commandQuery === null) {\n return [] as ToolsMenuItem[];\n }\n\n if (commandItems.length === 0) {\n return [] as ToolsMenuItem[];\n }\n\n const query = commandQuery.trim().toLowerCase();\n if (query.length === 0) {\n return commandItems;\n }\n\n const startsWith: ToolsMenuItem[] = [];\n const contains: ToolsMenuItem[] = [];\n for (const item of commandItems) {\n const label = item.label.toLowerCase();\n if (label.startsWith(query)) {\n startsWith.push(item);\n } else if (label.includes(query)) {\n contains.push(item);\n }\n }\n\n return [...startsWith, ...contains];\n }, [commandItems, commandQuery]);\n\n useEffect(() => {\n if (!autoFocus) {\n previousModalStateRef.current = config?.isModalOpen;\n return;\n }\n\n if (config?.isModalOpen && !previousModalStateRef.current) {\n inputRef.current?.focus();\n }\n\n previousModalStateRef.current = config?.isModalOpen;\n }, [config?.isModalOpen, autoFocus]);\n\n useEffect(() => {\n if (commandItems.length === 0 && commandQuery !== null) {\n setCommandQuery(null);\n }\n }, [commandItems.length, commandQuery]);\n\n const previousCommandQueryRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (\n commandQuery !== null &&\n commandQuery !== previousCommandQueryRef.current &&\n filteredCommands.length > 0\n ) {\n setSlashHighlightIndex(0);\n }\n\n previousCommandQueryRef.current = commandQuery;\n }, [commandQuery, filteredCommands.length]);\n\n useEffect(() => {\n if (commandQuery === null) {\n setSlashHighlightIndex(0);\n return;\n }\n\n if (filteredCommands.length === 0) {\n setSlashHighlightIndex(-1);\n } else if (slashHighlightIndex < 0 || slashHighlightIndex >= filteredCommands.length) {\n setSlashHighlightIndex(0);\n }\n }, [commandQuery, filteredCommands, slashHighlightIndex]);\n\n // Handle recording based on mode changes\n useEffect(() => {\n const recorder = audioRecorderRef.current;\n if (!recorder) {\n return;\n }\n\n if (mode === \"transcribe\") {\n // Start recording when entering transcribe mode\n recorder.start().catch(console.error);\n } else {\n // Stop recording when leaving transcribe mode\n if (recorder.state === \"recording\") {\n recorder.stop().catch(console.error);\n }\n }\n }, [mode]);\n\n useEffect(() => {\n if (mode !== \"input\") {\n setLayout(\"compact\");\n setCommandQuery(null);\n }\n }, [mode]);\n\n const updateSlashState = useCallback(\n (value: string) => {\n if (commandItems.length === 0) {\n setCommandQuery((prev) => (prev === null ? prev : null));\n return;\n }\n\n if (value.startsWith(\"/\")) {\n const firstLine = value.split(/\\r?\\n/, 1)[0] ?? \"\";\n const query = firstLine.slice(1);\n setCommandQuery((prev) => (prev === query ? prev : query));\n } else {\n setCommandQuery((prev) => (prev === null ? prev : null));\n }\n },\n [commandItems.length],\n );\n\n useEffect(() => {\n updateSlashState(resolvedValue);\n }, [resolvedValue, updateSlashState]);\n\n // Handlers\n const handleChange = (e: ChangeEvent<HTMLTextAreaElement>) => {\n const nextValue = e.target.value;\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n onChange?.(nextValue);\n updateSlashState(nextValue);\n };\n\n const clearInputValue = useCallback(() => {\n if (!isControlled) {\n setInternalValue(\"\");\n }\n\n if (onChange) {\n onChange(\"\");\n }\n }, [isControlled, onChange]);\n\n const runCommand = useCallback(\n (item: ToolsMenuItem) => {\n clearInputValue();\n\n item.action?.();\n\n setCommandQuery(null);\n setSlashHighlightIndex(0);\n\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n },\n [clearInputValue],\n );\n\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (commandQuery !== null && mode === \"input\") {\n if (e.key === \"ArrowDown\") {\n if (filteredCommands.length > 0) {\n e.preventDefault();\n setSlashHighlightIndex((prev) => {\n if (filteredCommands.length === 0) {\n return prev;\n }\n const next = prev === -1 ? 0 : (prev + 1) % filteredCommands.length;\n return next;\n });\n }\n return;\n }\n\n if (e.key === \"ArrowUp\") {\n if (filteredCommands.length > 0) {\n e.preventDefault();\n setSlashHighlightIndex((prev) => {\n if (filteredCommands.length === 0) {\n return prev;\n }\n if (prev === -1) {\n return filteredCommands.length - 1;\n }\n return prev <= 0 ? filteredCommands.length - 1 : prev - 1;\n });\n }\n return;\n }\n\n if (e.key === \"Enter\") {\n const selected = slashHighlightIndex >= 0 ? filteredCommands[slashHighlightIndex] : undefined;\n if (selected) {\n e.preventDefault();\n runCommand(selected);\n return;\n }\n }\n\n if (e.key === \"Escape\") {\n e.preventDefault();\n setCommandQuery(null);\n return;\n }\n }\n\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n if (isProcessing) {\n onStop?.();\n } else {\n send();\n }\n }\n };\n\n const send = () => {\n if (!onSubmitMessage) {\n return;\n }\n const trimmed = resolvedValue.trim();\n if (!trimmed) {\n return;\n }\n\n onSubmitMessage(trimmed);\n\n if (!isControlled) {\n setInternalValue(\"\");\n onChange?.(\"\");\n }\n\n if (inputRef.current) {\n inputRef.current.focus();\n }\n };\n\n const BoundTextArea = renderSlot(textArea, CopilotChatInput.TextArea, {\n ref: inputRef,\n value: resolvedValue,\n onChange: handleChange,\n onKeyDown: handleKeyDown,\n autoFocus: autoFocus,\n className: twMerge(\n \"w-full py-3\",\n isExpanded ? \"px-5\" : \"pr-5\",\n ),\n });\n\n const isProcessing = mode !== \"transcribe\" && isRunning;\n const canSend = resolvedValue.trim().length > 0 && !!onSubmitMessage;\n const canStop = !!onStop;\n\n const handleSendButtonClick = () => {\n if (isProcessing) {\n onStop?.();\n return;\n }\n send();\n };\n\n const BoundAudioRecorder = renderSlot(audioRecorder, CopilotChatAudioRecorder, {\n ref: audioRecorderRef,\n });\n\n const BoundSendButton = renderSlot(sendButton, CopilotChatInput.SendButton, {\n onClick: handleSendButtonClick,\n disabled: isProcessing ? !canStop : !canSend,\n children: isProcessing && canStop ? <Square className=\"size-[18px] fill-current\" /> : undefined,\n });\n\n const BoundStartTranscribeButton = renderSlot(startTranscribeButton, CopilotChatInput.StartTranscribeButton, {\n onClick: onStartTranscribe,\n });\n\n const BoundCancelTranscribeButton = renderSlot(cancelTranscribeButton, CopilotChatInput.CancelTranscribeButton, {\n onClick: onCancelTranscribe,\n });\n\n const BoundFinishTranscribeButton = renderSlot(finishTranscribeButton, CopilotChatInput.FinishTranscribeButton, {\n onClick: onFinishTranscribe,\n });\n\n const BoundAddMenuButton = renderSlot(addMenuButton, CopilotChatInput.AddMenuButton, {\n disabled: mode === \"transcribe\",\n onAddFile,\n toolsMenu,\n });\n\n if (children) {\n const childProps = {\n textArea: BoundTextArea,\n audioRecorder: BoundAudioRecorder,\n sendButton: BoundSendButton,\n startTranscribeButton: BoundStartTranscribeButton,\n cancelTranscribeButton: BoundCancelTranscribeButton,\n finishTranscribeButton: BoundFinishTranscribeButton,\n addMenuButton: BoundAddMenuButton,\n onSubmitMessage,\n onStop,\n isRunning,\n onStartTranscribe,\n onCancelTranscribe,\n onFinishTranscribe,\n onAddFile,\n mode,\n toolsMenu,\n autoFocus,\n } as CopilotChatInputChildrenArgs;\n\n return <>{children(childProps)}</>;\n }\n\n const handleContainerClick = (e: React.MouseEvent<HTMLDivElement>) => {\n // Don't focus if clicking on buttons or other interactive elements\n const target = e.target as HTMLElement;\n if (target.tagName !== \"BUTTON\" && !target.closest(\"button\") && inputRef.current && mode === \"input\") {\n inputRef.current.focus();\n }\n };\n\n const ensureMeasurements = useCallback(() => {\n const textarea = inputRef.current;\n if (!textarea) {\n return;\n }\n\n const previousValue = textarea.value;\n const previousHeight = textarea.style.height;\n\n textarea.style.height = \"auto\";\n\n const computedStyle = window.getComputedStyle(textarea);\n const paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;\n const paddingRight = parseFloat(computedStyle.paddingRight) || 0;\n const paddingTop = parseFloat(computedStyle.paddingTop) || 0;\n const paddingBottom = parseFloat(computedStyle.paddingBottom) || 0;\n\n textarea.value = \"\";\n const singleLineHeight = textarea.scrollHeight;\n textarea.value = previousValue;\n\n const contentHeight = singleLineHeight - paddingTop - paddingBottom;\n const maxHeight = contentHeight * 5 + paddingTop + paddingBottom;\n\n measurementsRef.current = {\n singleLineHeight,\n maxHeight,\n paddingLeft,\n paddingRight,\n };\n\n textarea.style.height = previousHeight;\n textarea.style.maxHeight = `${maxHeight}px`;\n }, []);\n\n const adjustTextareaHeight = useCallback(() => {\n const textarea = inputRef.current;\n if (!textarea) {\n return 0;\n }\n\n if (measurementsRef.current.singleLineHeight === 0) {\n ensureMeasurements();\n }\n\n const { maxHeight } = measurementsRef.current;\n if (maxHeight) {\n textarea.style.maxHeight = `${maxHeight}px`;\n }\n\n textarea.style.height = \"auto\";\n const scrollHeight = textarea.scrollHeight;\n if (maxHeight) {\n textarea.style.height = `${Math.min(scrollHeight, maxHeight)}px`;\n } else {\n textarea.style.height = `${scrollHeight}px`;\n }\n\n return scrollHeight;\n }, [ensureMeasurements]);\n\n const updateLayout = useCallback((nextLayout: \"compact\" | \"expanded\") => {\n setLayout((prev) => {\n if (prev === nextLayout) {\n return prev;\n }\n ignoreResizeRef.current = true;\n return nextLayout;\n });\n }, []);\n\n const evaluateLayout = useCallback(() => {\n if (mode !== \"input\") {\n updateLayout(\"compact\");\n return;\n }\n\n if (typeof window !== \"undefined\" && typeof window.matchMedia === \"function\") {\n const isMobileViewport = window.matchMedia(\"(max-width: 767px)\").matches;\n if (isMobileViewport) {\n ensureMeasurements();\n adjustTextareaHeight();\n updateLayout(\"expanded\");\n return;\n }\n }\n\n const textarea = inputRef.current;\n const grid = gridRef.current;\n const addContainer = addButtonContainerRef.current;\n const actionsContainer = actionsContainerRef.current;\n\n if (!textarea || !grid || !addContainer || !actionsContainer) {\n return;\n }\n\n if (measurementsRef.current.singleLineHeight === 0) {\n ensureMeasurements();\n }\n\n const scrollHeight = adjustTextareaHeight();\n const baseline = measurementsRef.current.singleLineHeight;\n const hasExplicitBreak = resolvedValue.includes(\"\\n\");\n const renderedMultiline = baseline > 0 ? scrollHeight > baseline + 1 : false;\n let shouldExpand = hasExplicitBreak || renderedMultiline;\n\n if (!shouldExpand) {\n const gridStyles = window.getComputedStyle(grid);\n const paddingLeft = parseFloat(gridStyles.paddingLeft) || 0;\n const paddingRight = parseFloat(gridStyles.paddingRight) || 0;\n const columnGap = parseFloat(gridStyles.columnGap) || 0;\n const gridAvailableWidth = grid.clientWidth - paddingLeft - paddingRight;\n\n if (gridAvailableWidth > 0) {\n const addWidth = addContainer.getBoundingClientRect().width;\n const actionsWidth = actionsContainer.getBoundingClientRect().width;\n const compactWidth = Math.max(gridAvailableWidth - addWidth - actionsWidth - columnGap * 2, 0);\n\n const canvas = measurementCanvasRef.current ?? document.createElement(\"canvas\");\n if (!measurementCanvasRef.current) {\n measurementCanvasRef.current = canvas;\n }\n\n const context = canvas.getContext(\"2d\");\n if (context) {\n const textareaStyles = window.getComputedStyle(textarea);\n const font =\n textareaStyles.font ||\n `${textareaStyles.fontStyle} ${textareaStyles.fontVariant} ${textareaStyles.fontWeight} ${textareaStyles.fontSize}/${textareaStyles.lineHeight} ${textareaStyles.fontFamily}`;\n context.font = font;\n\n const compactInnerWidth = Math.max(\n compactWidth - (measurementsRef.current.paddingLeft || 0) - (measurementsRef.current.paddingRight || 0),\n 0,\n );\n\n if (compactInnerWidth > 0) {\n const lines = resolvedValue.length > 0 ? resolvedValue.split(\"\\n\") : [\"\"];\n let longestWidth = 0;\n for (const line of lines) {\n const metrics = context.measureText(line || \" \");\n if (metrics.width > longestWidth) {\n longestWidth = metrics.width;\n }\n }\n\n if (longestWidth > compactInnerWidth) {\n shouldExpand = true;\n }\n }\n }\n }\n }\n\n const nextLayout = shouldExpand ? \"expanded\" : \"compact\";\n updateLayout(nextLayout);\n }, [adjustTextareaHeight, ensureMeasurements, mode, resolvedValue, updateLayout]);\n\n useLayoutEffect(() => {\n evaluateLayout();\n }, [evaluateLayout]);\n\n useEffect(() => {\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n\n const textarea = inputRef.current;\n const grid = gridRef.current;\n const addContainer = addButtonContainerRef.current;\n const actionsContainer = actionsContainerRef.current;\n\n if (!textarea || !grid || !addContainer || !actionsContainer) {\n return;\n }\n\n const scheduleEvaluation = () => {\n if (ignoreResizeRef.current) {\n ignoreResizeRef.current = false;\n return;\n }\n\n if (typeof window === \"undefined\") {\n evaluateLayout();\n return;\n }\n\n if (resizeEvaluationRafRef.current !== null) {\n cancelAnimationFrame(resizeEvaluationRafRef.current);\n }\n\n resizeEvaluationRafRef.current = window.requestAnimationFrame(() => {\n resizeEvaluationRafRef.current = null;\n evaluateLayout();\n });\n };\n\n const observer = new ResizeObserver(() => {\n scheduleEvaluation();\n });\n\n observer.observe(grid);\n observer.observe(addContainer);\n observer.observe(actionsContainer);\n observer.observe(textarea);\n\n return () => {\n observer.disconnect();\n if (typeof window !== \"undefined\" && resizeEvaluationRafRef.current !== null) {\n cancelAnimationFrame(resizeEvaluationRafRef.current);\n resizeEvaluationRafRef.current = null;\n }\n };\n }, [evaluateLayout]);\n\n const slashMenuVisible = commandQuery !== null && commandItems.length > 0;\n\n useEffect(() => {\n if (!slashMenuVisible || slashHighlightIndex < 0) {\n return;\n }\n\n const active = slashMenuRef.current?.querySelector<HTMLElement>(\n `[data-slash-index=\"${slashHighlightIndex}\"]`,\n );\n active?.scrollIntoView({ block: \"nearest\" });\n }, [slashMenuVisible, slashHighlightIndex]);\n\n const slashMenu = slashMenuVisible ? (\n <div\n data-testid=\"copilot-slash-menu\"\n role=\"listbox\"\n aria-label=\"Slash commands\"\n ref={slashMenuRef}\n className=\"absolute bottom-full left-0 right-0 z-30 mb-2 max-h-64 overflow-y-auto rounded-lg border border-border bg-white shadow-lg dark:border-[#3a3a3a] dark:bg-[#1f1f1f]\"\n style={{ maxHeight: `${SLASH_MENU_MAX_VISIBLE_ITEMS * SLASH_MENU_ITEM_HEIGHT_PX}px` }}\n >\n {filteredCommands.length === 0 ? (\n <div className=\"px-3 py-2 text-sm text-muted-foreground\">No commands found</div>\n ) : (\n filteredCommands.map((item, index) => {\n const isActive = index === slashHighlightIndex;\n return (\n <button\n key={`${item.label}-${index}`}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n data-active={isActive ? \"true\" : undefined}\n data-slash-index={index}\n className={twMerge(\n \"w-full px-3 py-2 text-left text-sm transition-colors\",\n \"hover:bg-muted dark:hover:bg-[#2f2f2f]\",\n isActive ? \"bg-muted dark:bg-[#2f2f2f]\" : \"bg-transparent\",\n )}\n onMouseEnter={() => setSlashHighlightIndex(index)}\n onMouseDown={(event) => {\n event.preventDefault();\n runCommand(item);\n }}\n >\n {item.label}\n </button>\n );\n })\n )}\n </div>\n ) : null;\n\n return (\n <div\n className={twMerge(\n // Layout\n \"flex w-full flex-col items-center justify-center\",\n // Interaction\n \"cursor-text\",\n // Overflow and clipping\n \"overflow-visible bg-clip-padding contain-inline-size\",\n // Background\n \"bg-white dark:bg-[#303030]\",\n // Visual effects\n \"shadow-[0_4px_4px_0_#0000000a,0_0_1px_0_#0000009e] rounded-[28px]\",\n className,\n )}\n onClick={handleContainerClick}\n {...props}\n data-layout={isExpanded ? \"expanded\" : \"compact\"}\n >\n <div\n ref={gridRef}\n className={twMerge(\n \"grid w-full gap-x-3 gap-y-3 px-3 py-2\",\n isExpanded\n ? \"grid-cols-[auto_minmax(0,1fr)_auto] grid-rows-[auto_auto]\"\n : \"grid-cols-[auto_minmax(0,1fr)_auto] items-center\",\n )}\n data-layout={isExpanded ? \"expanded\" : \"compact\"}\n >\n <div\n ref={addButtonContainerRef}\n className={twMerge(\n \"flex items-center\",\n isExpanded ? \"row-start-2\" : \"row-start-1\",\n \"col-start-1\",\n )}\n >\n {BoundAddMenuButton}\n </div>\n <div\n className={twMerge(\n \"relative flex min-w-0 flex-col\",\n isExpanded ? \"col-span-3 row-start-1\" : \"col-start-2 row-start-1\",\n )}\n >\n {mode === \"transcribe\" ? (\n BoundAudioRecorder\n ) : (\n <>\n {BoundTextArea}\n {slashMenu}\n </>\n )}\n </div>\n <div\n ref={actionsContainerRef}\n className={twMerge(\n \"flex items-center justify-end gap-2\",\n isExpanded ? \"col-start-3 row-start-2\" : \"col-start-3 row-start-1\",\n )}\n >\n {mode === \"transcribe\" ? (\n <>\n {onCancelTranscribe && BoundCancelTranscribeButton}\n {onFinishTranscribe && BoundFinishTranscribeButton}\n </>\n ) : (\n <>\n {onStartTranscribe && BoundStartTranscribeButton}\n {BoundSendButton}\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace CopilotChatInput {\n export const SendButton: React.FC<React.ButtonHTMLAttributes<HTMLButtonElement>> = ({ className, children, ...props }) => (\n <div className=\"mr-[10px]\">\n <Button\n type=\"button\"\n variant=\"chatInputToolbarPrimary\"\n size=\"chatInputToolbarIcon\"\n className={className}\n {...props}\n >\n {children ?? <ArrowUp className=\"size-[18px]\" />}\n </Button>\n </div>\n );\n\n export const ToolbarButton: React.FC<\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n icon: React.ReactNode;\n labelKey: keyof CopilotChatLabels;\n defaultClassName?: string;\n }\n > = ({ icon, labelKey, defaultClassName, className, ...props }) => {\n const config = useCopilotChatConfiguration();\n const labels = config?.labels ?? CopilotChatDefaultLabels;\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n type=\"button\"\n variant=\"chatInputToolbarSecondary\"\n size=\"chatInputToolbarIcon\"\n className={twMerge(defaultClassName, className)}\n {...props}\n >\n {icon}\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n <p>{labels[labelKey]}</p>\n </TooltipContent>\n </Tooltip>\n );\n };\n\n export const StartTranscribeButton: React.FC<React.ButtonHTMLAttributes<HTMLButtonElement>> = (props) => (\n <ToolbarButton\n icon={<Mic className=\"size-[18px]\" />}\n labelKey=\"chatInputToolbarStartTranscribeButtonLabel\"\n defaultClassName=\"mr-2\"\n {...props}\n />\n );\n\n export const CancelTranscribeButton: React.FC<React.ButtonHTMLAttributes<HTMLButtonElement>> = (props) => (\n <ToolbarButton\n icon={<X className=\"size-[18px]\" />}\n labelKey=\"chatInputToolbarCancelTranscribeButtonLabel\"\n defaultClassName=\"mr-2\"\n {...props}\n />\n );\n\n export const FinishTranscribeButton: React.FC<React.ButtonHTMLAttributes<HTMLButtonElement>> = (props) => (\n <ToolbarButton\n icon={<Check className=\"size-[18px]\" />}\n labelKey=\"chatInputToolbarFinishTranscribeButtonLabel\"\n defaultClassName=\"mr-[10px]\"\n {...props}\n />\n );\n\n export const AddMenuButton: React.FC<\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n toolsMenu?: (ToolsMenuItem | \"-\")[];\n onAddFile?: () => void;\n }\n > = ({ className, toolsMenu, onAddFile, disabled, ...props }) => {\n const config = useCopilotChatConfiguration();\n const labels = config?.labels ?? CopilotChatDefaultLabels;\n\n const menuItems = useMemo<(ToolsMenuItem | \"-\")[]>(() => {\n const items: (ToolsMenuItem | \"-\")[] = [];\n\n if (onAddFile) {\n items.push({\n label: labels.chatInputToolbarAddButtonLabel,\n action: onAddFile,\n });\n }\n\n if (toolsMenu && toolsMenu.length > 0) {\n if (items.length > 0) {\n items.push(\"-\");\n }\n\n for (const item of toolsMenu) {\n if (item === \"-\") {\n if (items.length === 0 || items[items.length - 1] === \"-\") {\n continue;\n }\n items.push(item);\n } else {\n items.push(item);\n }\n }\n\n while (items.length > 0 && items[items.length - 1] === \"-\") {\n items.pop();\n }\n }\n\n return items;\n }, [onAddFile, toolsMenu, labels.chatInputToolbarAddButtonLabel]);\n\n const renderMenuItems = useCallback(\n (items: (ToolsMenuItem | \"-\")[]): React.ReactNode =>\n items.map((item, index) => {\n if (item === \"-\") {\n return <DropdownMenuSeparator key={`separator-${index}`} />;\n }\n\n if (item.items && item.items.length > 0) {\n return (\n <DropdownMenuSub key={`group-${index}`}>\n <DropdownMenuSubTrigger>{item.label}</DropdownMenuSubTrigger>\n <DropdownMenuSubContent>{renderMenuItems(item.items)}</DropdownMenuSubContent>\n </DropdownMenuSub>\n );\n }\n\n return (\n <DropdownMenuItem key={`item-${index}`} onClick={item.action}>\n {item.label}\n </DropdownMenuItem>\n );\n }),\n [],\n );\n\n const hasMenuItems = menuItems.length > 0;\n const isDisabled = disabled || !hasMenuItems;\n\n return (\n <DropdownMenu>\n <Tooltip>\n <TooltipTrigger asChild>\n <DropdownMenuTrigger asChild>\n <Button\n type=\"button\"\n variant=\"chatInputToolbarSecondary\"\n size=\"chatInputToolbarIcon\"\n className={twMerge(\"ml-1\", className)}\n disabled={isDisabled}\n {...props}\n >\n <Plus className=\"size-[20px]\" />\n </Button>\n </DropdownMenuTrigger>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n <p className=\"flex items-center gap-1 text-xs font-medium\">\n <span>Add files and more</span>\n <code className=\"rounded bg-[#4a4a4a] px-1 py-[1px] font-mono text-[11px] text-white dark:bg-[#e0e0e0] dark:text-black\">/</code>\n </p>\n </TooltipContent>\n </Tooltip>\n {hasMenuItems && (\n <DropdownMenuContent side=\"top\" align=\"start\">\n {renderMenuItems(menuItems)}\n </DropdownMenuContent>\n )}\n </DropdownMenu>\n );\n };\n\n export type TextAreaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n\n export const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(function TextArea(\n { style, className, autoFocus, ...props },\n ref,\n ) {\n const internalTextareaRef = useRef<HTMLTextAreaElement>(null);\n const config = useCopilotChatConfiguration();\n const labels = config?.labels ?? CopilotChatDefaultLabels;\n\n useImperativeHandle(ref, () => internalTextareaRef.current as HTMLTextAreaElement);\n\n // Auto-scroll input into view on mobile when focused\n useEffect(() => {\n const textarea = internalTextareaRef.current;\n if (!textarea) return;\n\n const handleFocus = () => {\n // Small delay to let the keyboard start appearing\n setTimeout(() => {\n textarea.scrollIntoView({ behavior: \"smooth\", block: \"nearest\" });\n }, 300);\n };\n\n textarea.addEventListener(\"focus\", handleFocus);\n return () => textarea.removeEventListener(\"focus\", handleFocus);\n }, []);\n\n useEffect(() => {\n if (autoFocus) {\n internalTextareaRef.current?.focus();\n }\n }, [autoFocus]);\n\n return (\n <textarea\n ref={internalTextareaRef}\n {...props}\n style={{\n overflow: \"auto\",\n resize: \"none\",\n ...style,\n }}\n placeholder={labels.chatInputPlaceholder}\n className={twMerge(\n \"bg-transparent outline-none antialiased font-regular leading-relaxed text-[16px] placeholder:text-[#00000077] dark:placeholder:text-[#fffc]\",\n className,\n )}\n rows={1}\n />\n );\n });\n\n export const AudioRecorder = CopilotChatAudioRecorder;\n}\n\nCopilotChatInput.TextArea.displayName = \"CopilotChatInput.TextArea\";\nCopilotChatInput.SendButton.displayName = \"CopilotChatInput.SendButton\";\nCopilotChatInput.ToolbarButton.displayName = \"CopilotChatInput.ToolbarButton\";\nCopilotChatInput.StartTranscribeButton.displayName = \"CopilotChatInput.StartTranscribeButton\";\nCopilotChatInput.CancelTranscribeButton.displayName = \"CopilotChatInput.CancelTranscribeButton\";\nCopilotChatInput.FinishTranscribeButton.displayName = \"CopilotChatInput.FinishTranscribeButton\";\nCopilotChatInput.AddMenuButton.displayName = \"CopilotChatInput.AddMenuButton\";\n\nexport default CopilotChatInput;\n"],"mappings":"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","names":["value","CopilotChatInput","TextArea"]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-VBI6JXPC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,215 @@
1
+ import {
2
+ CopilotKitInspector
3
+ } from "./chunk-YPH4BHOY.mjs";
4
+ import {
5
+ CopilotKitCoreReact
6
+ } from "./chunk-NNAYEAP2.mjs";
7
+
8
+ // src/providers/CopilotKitProvider.tsx
9
+ import {
10
+ createContext,
11
+ useContext,
12
+ useMemo,
13
+ useEffect,
14
+ useReducer,
15
+ useRef,
16
+ useState
17
+ } from "react";
18
+ import { z } from "zod";
19
+ import { jsx, jsxs } from "react/jsx-runtime";
20
+ var CopilotKitContext = createContext({
21
+ copilotkit: null
22
+ });
23
+ function useStableArrayProp(prop, warningMessage, isMeaningfulChange) {
24
+ const empty = useMemo(() => [], []);
25
+ const value = prop ?? empty;
26
+ const initial = useRef(value);
27
+ useEffect(() => {
28
+ if (warningMessage && value !== initial.current && (isMeaningfulChange ? isMeaningfulChange(initial.current, value) : true)) {
29
+ console.error(warningMessage);
30
+ }
31
+ }, [value, warningMessage]);
32
+ return value;
33
+ }
34
+ var CopilotKitProvider = ({
35
+ children,
36
+ runtimeUrl,
37
+ headers = {},
38
+ properties = {},
39
+ agents__unsafe_dev_only: agents = {},
40
+ renderToolCalls,
41
+ renderActivityMessages,
42
+ renderCustomMessages,
43
+ frontendTools,
44
+ humanInTheLoop,
45
+ showDevConsole = false,
46
+ useSingleEndpoint = false
47
+ }) => {
48
+ const [shouldRenderInspector, setShouldRenderInspector] = useState(false);
49
+ useEffect(() => {
50
+ if (typeof window === "undefined") {
51
+ return;
52
+ }
53
+ if (showDevConsole === true) {
54
+ setShouldRenderInspector(true);
55
+ } else if (showDevConsole === "auto") {
56
+ const localhostHosts = /* @__PURE__ */ new Set(["localhost", "127.0.0.1"]);
57
+ if (localhostHosts.has(window.location.hostname)) {
58
+ setShouldRenderInspector(true);
59
+ } else {
60
+ setShouldRenderInspector(false);
61
+ }
62
+ } else {
63
+ setShouldRenderInspector(false);
64
+ }
65
+ }, [showDevConsole]);
66
+ const renderToolCallsList = useStableArrayProp(
67
+ renderToolCalls,
68
+ "renderToolCalls must be a stable array. If you want to dynamically add or remove tools, use `useFrontendTool` instead.",
69
+ (initial, next) => {
70
+ const key = (rc) => `${rc?.agentId ?? ""}:${rc?.name ?? ""}`;
71
+ const setFrom = (arr) => new Set(arr.map(key));
72
+ const a = setFrom(initial);
73
+ const b = setFrom(next);
74
+ if (a.size !== b.size) return true;
75
+ for (const k of a) if (!b.has(k)) return true;
76
+ return false;
77
+ }
78
+ );
79
+ const renderCustomMessagesList = useStableArrayProp(
80
+ renderCustomMessages,
81
+ "renderCustomMessages must be a stable array."
82
+ );
83
+ const renderActivityMessagesList = useStableArrayProp(
84
+ renderActivityMessages,
85
+ "renderActivityMessages must be a stable array."
86
+ );
87
+ const frontendToolsList = useStableArrayProp(
88
+ frontendTools,
89
+ "frontendTools must be a stable array. If you want to dynamically add or remove tools, use `useFrontendTool` instead."
90
+ );
91
+ const humanInTheLoopList = useStableArrayProp(
92
+ humanInTheLoop,
93
+ "humanInTheLoop must be a stable array. If you want to dynamically add or remove human-in-the-loop tools, use `useHumanInTheLoop` instead."
94
+ );
95
+ const processedHumanInTheLoopTools = useMemo(() => {
96
+ const processedTools = [];
97
+ const processedRenderToolCalls = [];
98
+ humanInTheLoopList.forEach((tool) => {
99
+ const frontendTool = {
100
+ name: tool.name,
101
+ description: tool.description,
102
+ parameters: tool.parameters,
103
+ followUp: tool.followUp,
104
+ ...tool.agentId && { agentId: tool.agentId },
105
+ handler: async () => {
106
+ return new Promise((resolve) => {
107
+ console.warn(`Human-in-the-loop tool '${tool.name}' called but no interactive handler is set up.`);
108
+ resolve(void 0);
109
+ });
110
+ }
111
+ };
112
+ processedTools.push(frontendTool);
113
+ if (tool.render) {
114
+ processedRenderToolCalls.push({
115
+ name: tool.name,
116
+ args: tool.parameters,
117
+ render: tool.render,
118
+ ...tool.agentId && { agentId: tool.agentId }
119
+ });
120
+ }
121
+ });
122
+ return { tools: processedTools, renderToolCalls: processedRenderToolCalls };
123
+ }, [humanInTheLoopList]);
124
+ const allTools = useMemo(() => {
125
+ const tools = [];
126
+ tools.push(...frontendToolsList);
127
+ tools.push(...processedHumanInTheLoopTools.tools);
128
+ return tools;
129
+ }, [frontendToolsList, processedHumanInTheLoopTools]);
130
+ const allRenderToolCalls = useMemo(() => {
131
+ const combined = [...renderToolCallsList];
132
+ frontendToolsList.forEach((tool) => {
133
+ if (tool.render) {
134
+ const args = tool.parameters || (tool.name === "*" ? z.any() : void 0);
135
+ if (args) {
136
+ combined.push({
137
+ name: tool.name,
138
+ args,
139
+ render: tool.render
140
+ });
141
+ }
142
+ }
143
+ });
144
+ combined.push(...processedHumanInTheLoopTools.renderToolCalls);
145
+ return combined;
146
+ }, [renderToolCallsList, frontendToolsList, processedHumanInTheLoopTools]);
147
+ const copilotkit = useMemo(() => {
148
+ const copilotkit2 = new CopilotKitCoreReact({
149
+ runtimeUrl,
150
+ runtimeTransport: useSingleEndpoint ? "single" : "rest",
151
+ headers,
152
+ properties,
153
+ agents__unsafe_dev_only: agents,
154
+ tools: allTools,
155
+ renderToolCalls: allRenderToolCalls,
156
+ renderActivityMessages: renderActivityMessagesList,
157
+ renderCustomMessages: renderCustomMessagesList
158
+ });
159
+ return copilotkit2;
160
+ }, [allTools, allRenderToolCalls, renderActivityMessagesList, renderCustomMessagesList, useSingleEndpoint]);
161
+ const [, forceUpdate] = useReducer((x) => x + 1, 0);
162
+ useEffect(() => {
163
+ const unsubscribe = copilotkit.subscribe({
164
+ onRenderToolCallsChanged: () => {
165
+ forceUpdate();
166
+ }
167
+ });
168
+ return () => {
169
+ unsubscribe();
170
+ };
171
+ }, [copilotkit]);
172
+ useEffect(() => {
173
+ copilotkit.setRuntimeUrl(runtimeUrl);
174
+ copilotkit.setRuntimeTransport(useSingleEndpoint ? "single" : "rest");
175
+ copilotkit.setHeaders(headers);
176
+ copilotkit.setProperties(properties);
177
+ copilotkit.setAgents__unsafe_dev_only(agents);
178
+ }, [runtimeUrl, headers, properties, agents, useSingleEndpoint]);
179
+ return /* @__PURE__ */ jsxs(
180
+ CopilotKitContext.Provider,
181
+ {
182
+ value: {
183
+ copilotkit
184
+ },
185
+ children: [
186
+ children,
187
+ shouldRenderInspector ? /* @__PURE__ */ jsx(CopilotKitInspector, { core: copilotkit }) : null
188
+ ]
189
+ }
190
+ );
191
+ };
192
+ var useCopilotKit = () => {
193
+ const context = useContext(CopilotKitContext);
194
+ const [, forceUpdate] = useReducer((x) => x + 1, 0);
195
+ if (!context) {
196
+ throw new Error("useCopilotKit must be used within CopilotKitProvider");
197
+ }
198
+ useEffect(() => {
199
+ const unsubscribe = context.copilotkit.subscribe({
200
+ onRuntimeConnectionStatusChanged: () => {
201
+ forceUpdate();
202
+ }
203
+ });
204
+ return () => {
205
+ unsubscribe();
206
+ };
207
+ }, []);
208
+ return context;
209
+ };
210
+
211
+ export {
212
+ CopilotKitProvider,
213
+ useCopilotKit
214
+ };
215
+ //# sourceMappingURL=chunk-VE3SBLU7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/providers/CopilotKitProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport React, {\n createContext,\n useContext,\n ReactNode,\n useMemo,\n useEffect,\n useReducer,\n useRef,\n useState,\n} from \"react\";\nimport { ReactActivityMessageRenderer, ReactToolCallRenderer } from \"../types\";\nimport { ReactCustomMessageRenderer } from \"../types/react-custom-message-renderer\";\nimport { ReactFrontendTool } from \"../types/frontend-tool\";\nimport { ReactHumanInTheLoop } from \"../types/human-in-the-loop\";\nimport { z } from \"zod\";\nimport { FrontendTool } from \"@copilotkitnext/core\";\nimport { AbstractAgent } from \"@ag-ui/client\";\nimport { CopilotKitCoreReact } from \"../lib/react-core\";\nimport { CopilotKitInspector } from \"../components/CopilotKitInspector\";\n\n// Define the context value interface - idiomatic React naming\nexport interface CopilotKitContextValue {\n copilotkit: CopilotKitCoreReact;\n}\n\n// Create the CopilotKit context\nconst CopilotKitContext = createContext<CopilotKitContextValue>({\n copilotkit: null!,\n});\n\n// Provider props interface\nexport interface CopilotKitProviderProps {\n children: ReactNode;\n runtimeUrl?: string;\n headers?: Record<string, string>;\n properties?: Record<string, unknown>;\n useSingleEndpoint?: boolean;\n agents__unsafe_dev_only?: Record<string, AbstractAgent>;\n renderToolCalls?: ReactToolCallRenderer<any>[];\n renderActivityMessages?: ReactActivityMessageRenderer<any>[];\n renderCustomMessages?: ReactCustomMessageRenderer[];\n frontendTools?: ReactFrontendTool[];\n humanInTheLoop?: ReactHumanInTheLoop[];\n showDevConsole?: boolean | \"auto\";\n}\n\n// Small helper to normalize array props to a stable reference and warn\nfunction useStableArrayProp<T>(\n prop: T[] | undefined,\n warningMessage?: string,\n isMeaningfulChange?: (initial: T[], next: T[]) => boolean,\n): T[] {\n const empty = useMemo<T[]>(() => [], []);\n const value = prop ?? empty;\n const initial = useRef(value);\n\n useEffect(() => {\n if (\n warningMessage &&\n value !== initial.current &&\n (isMeaningfulChange ? isMeaningfulChange(initial.current, value) : true)\n ) {\n console.error(warningMessage);\n }\n }, [value, warningMessage]);\n\n return value;\n}\n\n// Provider component\nexport const CopilotKitProvider: React.FC<CopilotKitProviderProps> = ({\n children,\n runtimeUrl,\n headers = {},\n properties = {},\n agents__unsafe_dev_only: agents = {},\n renderToolCalls,\n renderActivityMessages,\n renderCustomMessages,\n frontendTools,\n humanInTheLoop,\n showDevConsole = false,\n useSingleEndpoint = false,\n}) => {\n const [shouldRenderInspector, setShouldRenderInspector] = useState(false);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n if (showDevConsole === true) {\n // Explicitly show the inspector\n setShouldRenderInspector(true);\n } else if (showDevConsole === \"auto\") {\n // Show on localhost or 127.0.0.1 only\n const localhostHosts = new Set([\"localhost\", \"127.0.0.1\"]);\n if (localhostHosts.has(window.location.hostname)) {\n setShouldRenderInspector(true);\n } else {\n setShouldRenderInspector(false);\n }\n } else {\n // showDevConsole is false or undefined (default false)\n setShouldRenderInspector(false);\n }\n }, [showDevConsole]);\n\n // Normalize array props to stable references with clear dev warnings\n const renderToolCallsList = useStableArrayProp<ReactToolCallRenderer<any>>(\n renderToolCalls,\n \"renderToolCalls must be a stable array. If you want to dynamically add or remove tools, use `useFrontendTool` instead.\",\n (initial, next) => {\n // Only warn if the shape (names+agentId) changed. Allow identity changes\n // to support updated closures from parents (e.g., Storybook state).\n const key = (rc?: ReactToolCallRenderer<unknown>) => `${rc?.agentId ?? \"\"}:${rc?.name ?? \"\"}`;\n const setFrom = (arr: ReactToolCallRenderer<unknown>[]) => new Set(arr.map(key));\n const a = setFrom(initial);\n const b = setFrom(next);\n if (a.size !== b.size) return true;\n for (const k of a) if (!b.has(k)) return true;\n return false;\n },\n );\n\n const renderCustomMessagesList = useStableArrayProp<ReactCustomMessageRenderer>(\n renderCustomMessages,\n \"renderCustomMessages must be a stable array.\",\n );\n\n const renderActivityMessagesList = useStableArrayProp<ReactActivityMessageRenderer<any>>(\n renderActivityMessages,\n \"renderActivityMessages must be a stable array.\",\n );\n\n const frontendToolsList = useStableArrayProp<ReactFrontendTool>(\n frontendTools,\n \"frontendTools must be a stable array. If you want to dynamically add or remove tools, use `useFrontendTool` instead.\",\n );\n const humanInTheLoopList = useStableArrayProp<ReactHumanInTheLoop>(\n humanInTheLoop,\n \"humanInTheLoop must be a stable array. If you want to dynamically add or remove human-in-the-loop tools, use `useHumanInTheLoop` instead.\",\n );\n\n // Note: warnings for array identity changes are handled by useStableArrayProp\n\n // Process humanInTheLoop tools to create handlers and add render components\n const processedHumanInTheLoopTools = useMemo(() => {\n const processedTools: FrontendTool[] = [];\n const processedRenderToolCalls: ReactToolCallRenderer<unknown>[] = [];\n\n humanInTheLoopList.forEach((tool) => {\n // Create a promise-based handler for each human-in-the-loop tool\n const frontendTool: FrontendTool = {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n followUp: tool.followUp,\n ...(tool.agentId && { agentId: tool.agentId }),\n handler: async () => {\n // This handler will be replaced by the hook when it runs\n // For provider-level tools, we create a basic handler that waits for user interaction\n return new Promise((resolve) => {\n // The actual implementation will be handled by the render component\n // This is a placeholder that the hook will override\n console.warn(`Human-in-the-loop tool '${tool.name}' called but no interactive handler is set up.`);\n resolve(undefined);\n });\n },\n };\n processedTools.push(frontendTool);\n\n // Add the render component to renderToolCalls\n if (tool.render) {\n processedRenderToolCalls.push({\n name: tool.name,\n args: tool.parameters!,\n render: tool.render,\n ...(tool.agentId && { agentId: tool.agentId }),\n } as ReactToolCallRenderer<unknown>);\n }\n });\n\n return { tools: processedTools, renderToolCalls: processedRenderToolCalls };\n }, [humanInTheLoopList]);\n\n // Combine all tools for CopilotKitCore\n const allTools = useMemo(() => {\n const tools: FrontendTool[] = [];\n\n // Add frontend tools\n tools.push(...frontendToolsList);\n\n // Add processed human-in-the-loop tools\n tools.push(...processedHumanInTheLoopTools.tools);\n\n return tools;\n }, [frontendToolsList, processedHumanInTheLoopTools]);\n\n // Combine all render tool calls\n const allRenderToolCalls = useMemo(() => {\n const combined: ReactToolCallRenderer<unknown>[] = [...renderToolCallsList];\n\n // Add render components from frontend tools\n frontendToolsList.forEach((tool) => {\n if (tool.render) {\n // For wildcard tools without parameters, default to z.any()\n const args = tool.parameters || (tool.name === \"*\" ? z.any() : undefined);\n if (args) {\n combined.push({\n name: tool.name,\n args: args,\n render: tool.render,\n } as ReactToolCallRenderer<unknown>);\n }\n }\n });\n\n // Add render components from human-in-the-loop tools\n combined.push(...processedHumanInTheLoopTools.renderToolCalls);\n\n return combined;\n }, [renderToolCallsList, frontendToolsList, processedHumanInTheLoopTools]);\n\n const copilotkit = useMemo(() => {\n const copilotkit = new CopilotKitCoreReact({\n runtimeUrl,\n runtimeTransport: useSingleEndpoint ? \"single\" : \"rest\",\n headers,\n properties,\n agents__unsafe_dev_only: agents,\n tools: allTools,\n renderToolCalls: allRenderToolCalls,\n renderActivityMessages: renderActivityMessagesList,\n renderCustomMessages: renderCustomMessagesList,\n });\n\n return copilotkit;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [allTools, allRenderToolCalls, renderActivityMessagesList, renderCustomMessagesList, useSingleEndpoint]);\n\n // Subscribe to render tool calls changes to force re-renders\n const [, forceUpdate] = useReducer((x) => x + 1, 0);\n\n useEffect(() => {\n const unsubscribe = copilotkit.subscribe({\n onRenderToolCallsChanged: () => {\n forceUpdate();\n },\n });\n\n return () => {\n unsubscribe();\n };\n }, [copilotkit]);\n\n useEffect(() => {\n copilotkit.setRuntimeUrl(runtimeUrl);\n copilotkit.setRuntimeTransport(useSingleEndpoint ? \"single\" : \"rest\");\n copilotkit.setHeaders(headers);\n copilotkit.setProperties(properties);\n copilotkit.setAgents__unsafe_dev_only(agents);\n }, [runtimeUrl, headers, properties, agents, useSingleEndpoint]);\n\n return (\n <CopilotKitContext.Provider\n value={{\n copilotkit,\n }}\n >\n {children}\n {shouldRenderInspector ? <CopilotKitInspector core={copilotkit} /> : null}\n </CopilotKitContext.Provider>\n );\n};\n\n// Hook to use the CopilotKit instance - returns the full context value\nexport const useCopilotKit = (): CopilotKitContextValue => {\n const context = useContext(CopilotKitContext);\n const [, forceUpdate] = useReducer((x) => x + 1, 0);\n\n if (!context) {\n throw new Error(\"useCopilotKit must be used within CopilotKitProvider\");\n }\n useEffect(() => {\n const unsubscribe = context.copilotkit.subscribe({\n onRuntimeConnectionStatusChanged: () => {\n forceUpdate();\n },\n });\n return () => {\n unsubscribe();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return context;\n};\n"],"mappings":"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","names":["copilotkit"]}
@@ -0,0 +1,185 @@
1
+ import {
2
+ CopilotModalHeader
3
+ } from "./chunk-E56GYBP3.mjs";
4
+ import {
5
+ CopilotChatToggleButton_default
6
+ } from "./chunk-R5OLAA3L.mjs";
7
+ import {
8
+ CopilotChatView_default
9
+ } from "./chunk-F43IPGPA.mjs";
10
+ import {
11
+ renderSlot
12
+ } from "./chunk-FIBK3DYE.mjs";
13
+ import {
14
+ cn
15
+ } from "./chunk-XO4IRKSC.mjs";
16
+ import {
17
+ CopilotChatDefaultLabels,
18
+ useCopilotChatConfiguration
19
+ } from "./chunk-4XJK5IVQ.mjs";
20
+
21
+ // src/components/chat/CopilotPopupView.tsx
22
+ import { useEffect, useMemo, useRef, useState } from "react";
23
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
24
+ var DEFAULT_POPUP_WIDTH = 420;
25
+ var DEFAULT_POPUP_HEIGHT = 560;
26
+ var dimensionToCss = (value, fallback) => {
27
+ if (typeof value === "number" && Number.isFinite(value)) {
28
+ return `${value}px`;
29
+ }
30
+ if (typeof value === "string" && value.trim().length > 0) {
31
+ return value;
32
+ }
33
+ return `${fallback}px`;
34
+ };
35
+ function CopilotPopupView({
36
+ header,
37
+ width,
38
+ height,
39
+ clickOutsideToClose,
40
+ className,
41
+ ...restProps
42
+ }) {
43
+ const configuration = useCopilotChatConfiguration();
44
+ const isPopupOpen = configuration?.isModalOpen ?? false;
45
+ const setModalOpen = configuration?.setModalOpen;
46
+ const labels = configuration?.labels ?? CopilotChatDefaultLabels;
47
+ const containerRef = useRef(null);
48
+ const [isRendered, setIsRendered] = useState(isPopupOpen);
49
+ const [isAnimatingOut, setIsAnimatingOut] = useState(false);
50
+ useEffect(() => {
51
+ if (isPopupOpen) {
52
+ setIsRendered(true);
53
+ setIsAnimatingOut(false);
54
+ return;
55
+ }
56
+ if (!isRendered) {
57
+ return;
58
+ }
59
+ setIsAnimatingOut(true);
60
+ const timeout = setTimeout(() => {
61
+ setIsRendered(false);
62
+ setIsAnimatingOut(false);
63
+ }, 200);
64
+ return () => clearTimeout(timeout);
65
+ }, [isPopupOpen, isRendered]);
66
+ useEffect(() => {
67
+ if (!isPopupOpen) {
68
+ return;
69
+ }
70
+ if (typeof window === "undefined") {
71
+ return;
72
+ }
73
+ const handleKeyDown = (event) => {
74
+ if (event.key === "Escape") {
75
+ event.preventDefault();
76
+ setModalOpen?.(false);
77
+ }
78
+ };
79
+ window.addEventListener("keydown", handleKeyDown);
80
+ return () => window.removeEventListener("keydown", handleKeyDown);
81
+ }, [isPopupOpen, setModalOpen]);
82
+ useEffect(() => {
83
+ if (!isPopupOpen) {
84
+ return;
85
+ }
86
+ const focusTimer = setTimeout(() => {
87
+ containerRef.current?.focus({ preventScroll: true });
88
+ }, 200);
89
+ return () => clearTimeout(focusTimer);
90
+ }, [isPopupOpen]);
91
+ useEffect(() => {
92
+ if (!isPopupOpen || !clickOutsideToClose) {
93
+ return;
94
+ }
95
+ if (typeof document === "undefined") {
96
+ return;
97
+ }
98
+ const handlePointerDown = (event) => {
99
+ const target = event.target;
100
+ if (!target) {
101
+ return;
102
+ }
103
+ const container = containerRef.current;
104
+ if (container?.contains(target)) {
105
+ return;
106
+ }
107
+ const toggleButton = document.querySelector("[data-slot='chat-toggle-button']");
108
+ if (toggleButton && toggleButton.contains(target)) {
109
+ return;
110
+ }
111
+ setModalOpen?.(false);
112
+ };
113
+ document.addEventListener("pointerdown", handlePointerDown);
114
+ return () => document.removeEventListener("pointerdown", handlePointerDown);
115
+ }, [isPopupOpen, clickOutsideToClose, setModalOpen]);
116
+ const headerElement = useMemo(() => renderSlot(header, CopilotModalHeader, {}), [header]);
117
+ const resolvedWidth = dimensionToCss(width, DEFAULT_POPUP_WIDTH);
118
+ const resolvedHeight = dimensionToCss(height, DEFAULT_POPUP_HEIGHT);
119
+ const popupStyle = useMemo(
120
+ () => ({
121
+ "--copilot-popup-width": resolvedWidth,
122
+ "--copilot-popup-height": resolvedHeight,
123
+ "--copilot-popup-max-width": "calc(100vw - 3rem)",
124
+ "--copilot-popup-max-height": "calc(100dvh - 7.5rem)",
125
+ paddingTop: "env(safe-area-inset-top)",
126
+ paddingBottom: "env(safe-area-inset-bottom)",
127
+ paddingLeft: "env(safe-area-inset-left)",
128
+ paddingRight: "env(safe-area-inset-right)"
129
+ }),
130
+ [resolvedHeight, resolvedWidth]
131
+ );
132
+ const popupAnimationClass = isPopupOpen && !isAnimatingOut ? "pointer-events-auto translate-y-0 opacity-100 md:scale-100" : "pointer-events-none translate-y-4 opacity-0 md:translate-y-5 md:scale-[0.95]";
133
+ const popupContent = isRendered ? /* @__PURE__ */ jsx(
134
+ "div",
135
+ {
136
+ className: cn(
137
+ "fixed inset-0 z-[1200] flex max-w-full flex-col items-stretch",
138
+ "md:inset-auto md:bottom-24 md:right-6 md:items-end md:gap-4"
139
+ ),
140
+ children: /* @__PURE__ */ jsxs(
141
+ "div",
142
+ {
143
+ ref: containerRef,
144
+ tabIndex: -1,
145
+ role: "dialog",
146
+ "aria-label": labels.modalHeaderTitle,
147
+ "data-copilot-popup": true,
148
+ className: cn(
149
+ "relative flex h-full w-full flex-col overflow-hidden bg-background text-foreground",
150
+ "origin-bottom focus:outline-none transform-gpu transition-transform transition-opacity duration-200 ease-out",
151
+ "md:transition-transform md:transition-opacity",
152
+ "rounded-none border border-border/0 shadow-none ring-0",
153
+ "md:h-[var(--copilot-popup-height)] md:w-[var(--copilot-popup-width)]",
154
+ "md:max-h-[var(--copilot-popup-max-height)] md:max-w-[var(--copilot-popup-max-width)]",
155
+ "md:origin-bottom-right md:rounded-2xl md:border-border md:shadow-xl md:ring-1 md:ring-border/40",
156
+ popupAnimationClass
157
+ ),
158
+ style: popupStyle,
159
+ children: [
160
+ headerElement,
161
+ /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-hidden", "data-popup-chat": true, children: /* @__PURE__ */ jsx(
162
+ CopilotChatView_default,
163
+ {
164
+ ...restProps,
165
+ className: cn("h-full min-h-0", className)
166
+ }
167
+ ) })
168
+ ]
169
+ }
170
+ )
171
+ }
172
+ ) : null;
173
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
174
+ /* @__PURE__ */ jsx(CopilotChatToggleButton_default, {}),
175
+ popupContent
176
+ ] });
177
+ }
178
+ CopilotPopupView.displayName = "CopilotPopupView";
179
+ var CopilotPopupView_default = CopilotPopupView;
180
+
181
+ export {
182
+ CopilotPopupView,
183
+ CopilotPopupView_default
184
+ };
185
+ //# sourceMappingURL=chunk-VUHFLJWI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/CopilotPopupView.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport CopilotChatView, { CopilotChatViewProps } from \"./CopilotChatView\";\nimport CopilotChatToggleButton from \"./CopilotChatToggleButton\";\nimport { CopilotModalHeader } from \"./CopilotModalHeader\";\nimport { cn } from \"@/lib/utils\";\nimport { renderSlot, SlotValue } from \"@/lib/slots\";\nimport {\n CopilotChatDefaultLabels,\n useCopilotChatConfiguration,\n} from \"@/providers/CopilotChatConfigurationProvider\";\n\nconst DEFAULT_POPUP_WIDTH = 420;\nconst DEFAULT_POPUP_HEIGHT = 560;\n\nexport type CopilotPopupViewProps = CopilotChatViewProps & {\n header?: SlotValue<typeof CopilotModalHeader>;\n width?: number | string;\n height?: number | string;\n clickOutsideToClose?: boolean;\n};\n\nconst dimensionToCss = (value: number | string | undefined, fallback: number): string => {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return `${value}px`;\n }\n\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value;\n }\n\n return `${fallback}px`;\n};\n\nexport function CopilotPopupView({\n header,\n width,\n height,\n clickOutsideToClose,\n className,\n ...restProps\n}: CopilotPopupViewProps) {\n const configuration = useCopilotChatConfiguration();\n const isPopupOpen = configuration?.isModalOpen ?? false;\n const setModalOpen = configuration?.setModalOpen;\n const labels = configuration?.labels ?? CopilotChatDefaultLabels;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [isRendered, setIsRendered] = useState(isPopupOpen);\n const [isAnimatingOut, setIsAnimatingOut] = useState(false);\n\n useEffect(() => {\n if (isPopupOpen) {\n setIsRendered(true);\n setIsAnimatingOut(false);\n return;\n }\n\n if (!isRendered) {\n return;\n }\n\n setIsAnimatingOut(true);\n const timeout = setTimeout(() => {\n setIsRendered(false);\n setIsAnimatingOut(false);\n }, 200);\n\n return () => clearTimeout(timeout);\n }, [isPopupOpen, isRendered]);\n\n useEffect(() => {\n if (!isPopupOpen) {\n return;\n }\n\n if (typeof window === \"undefined\") {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n setModalOpen?.(false);\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [isPopupOpen, setModalOpen]);\n\n useEffect(() => {\n if (!isPopupOpen) {\n return;\n }\n\n const focusTimer = setTimeout(() => {\n containerRef.current?.focus({ preventScroll: true });\n }, 200);\n\n return () => clearTimeout(focusTimer);\n }, [isPopupOpen]);\n\n useEffect(() => {\n if (!isPopupOpen || !clickOutsideToClose) {\n return;\n }\n\n if (typeof document === \"undefined\") {\n return;\n }\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target as Node | null;\n if (!target) {\n return;\n }\n\n const container = containerRef.current;\n if (container?.contains(target)) {\n return;\n }\n\n const toggleButton = document.querySelector(\"[data-slot='chat-toggle-button']\");\n if (toggleButton && toggleButton.contains(target)) {\n return;\n }\n\n setModalOpen?.(false);\n };\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n return () => document.removeEventListener(\"pointerdown\", handlePointerDown);\n }, [isPopupOpen, clickOutsideToClose, setModalOpen]);\n\n const headerElement = useMemo(() => renderSlot(header, CopilotModalHeader, {}), [header]);\n\n const resolvedWidth = dimensionToCss(width, DEFAULT_POPUP_WIDTH);\n const resolvedHeight = dimensionToCss(height, DEFAULT_POPUP_HEIGHT);\n\n const popupStyle = useMemo(\n () =>\n ({\n \"--copilot-popup-width\": resolvedWidth,\n \"--copilot-popup-height\": resolvedHeight,\n \"--copilot-popup-max-width\": \"calc(100vw - 3rem)\",\n \"--copilot-popup-max-height\": \"calc(100dvh - 7.5rem)\",\n paddingTop: \"env(safe-area-inset-top)\",\n paddingBottom: \"env(safe-area-inset-bottom)\",\n paddingLeft: \"env(safe-area-inset-left)\",\n paddingRight: \"env(safe-area-inset-right)\",\n }) as React.CSSProperties,\n [resolvedHeight, resolvedWidth],\n );\n\n const popupAnimationClass =\n isPopupOpen && !isAnimatingOut\n ? \"pointer-events-auto translate-y-0 opacity-100 md:scale-100\"\n : \"pointer-events-none translate-y-4 opacity-0 md:translate-y-5 md:scale-[0.95]\";\n\n const popupContent = isRendered ? (\n <div\n className={cn(\n \"fixed inset-0 z-[1200] flex max-w-full flex-col items-stretch\",\n \"md:inset-auto md:bottom-24 md:right-6 md:items-end md:gap-4\",\n )}\n >\n <div\n ref={containerRef}\n tabIndex={-1}\n role=\"dialog\"\n aria-label={labels.modalHeaderTitle}\n data-copilot-popup\n className={cn(\n \"relative flex h-full w-full flex-col overflow-hidden bg-background text-foreground\",\n \"origin-bottom focus:outline-none transform-gpu transition-transform transition-opacity duration-200 ease-out\",\n \"md:transition-transform md:transition-opacity\",\n \"rounded-none border border-border/0 shadow-none ring-0\",\n \"md:h-[var(--copilot-popup-height)] md:w-[var(--copilot-popup-width)]\",\n \"md:max-h-[var(--copilot-popup-max-height)] md:max-w-[var(--copilot-popup-max-width)]\",\n \"md:origin-bottom-right md:rounded-2xl md:border-border md:shadow-xl md:ring-1 md:ring-border/40\",\n popupAnimationClass,\n )}\n style={popupStyle}\n >\n {headerElement}\n <div className=\"flex-1 overflow-hidden\" data-popup-chat>\n <CopilotChatView\n {...restProps}\n className={cn(\"h-full min-h-0\", className)}\n />\n </div>\n </div>\n </div>\n ) : null;\n\n return (\n <>\n <CopilotChatToggleButton />\n {popupContent}\n </>\n );\n}\n\nCopilotPopupView.displayName = \"CopilotPopupView\";\n\nexport default CopilotPopupView;\n"],"mappings":"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","names":[]}
@@ -0,0 +1,61 @@
1
+ import {
2
+ cn
3
+ } from "./chunk-XO4IRKSC.mjs";
4
+
5
+ // src/components/ui/tooltip.tsx
6
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ function TooltipProvider({
9
+ delayDuration = 0,
10
+ ...props
11
+ }) {
12
+ return /* @__PURE__ */ jsx(
13
+ TooltipPrimitive.Provider,
14
+ {
15
+ "data-slot": "tooltip-provider",
16
+ delayDuration,
17
+ ...props
18
+ }
19
+ );
20
+ }
21
+ function Tooltip({
22
+ ...props
23
+ }) {
24
+ return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props }) });
25
+ }
26
+ function TooltipTrigger({
27
+ ...props
28
+ }) {
29
+ return /* @__PURE__ */ jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
30
+ }
31
+ function TooltipContent({
32
+ className,
33
+ sideOffset = 0,
34
+ children,
35
+ ...props
36
+ }) {
37
+ return /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
38
+ TooltipPrimitive.Content,
39
+ {
40
+ "data-slot": "tooltip-content",
41
+ sideOffset,
42
+ className: cn(
43
+ "bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",
44
+ className
45
+ ),
46
+ ...props,
47
+ children: [
48
+ children,
49
+ /* @__PURE__ */ jsx(TooltipPrimitive.Arrow, { className: "bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })
50
+ ]
51
+ }
52
+ ) });
53
+ }
54
+
55
+ export {
56
+ TooltipProvider,
57
+ Tooltip,
58
+ TooltipTrigger,
59
+ TooltipContent
60
+ };
61
+ //# sourceMappingURL=chunk-VVAXSF3M.mjs.map