@copilotkit/react-ui 1.8.4-next.1 → 1.8.4-next.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 (41) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/{chunk-OG2LUNMO.mjs → chunk-6F2ZAK7T.mjs} +12 -4
  3. package/dist/chunk-6F2ZAK7T.mjs.map +1 -0
  4. package/dist/{chunk-HGA4N4ME.mjs → chunk-7EDMOLGH.mjs} +2 -2
  5. package/dist/{chunk-2D24Q2YO.mjs → chunk-LGMQR7XG.mjs} +2 -2
  6. package/dist/{chunk-SNLHKLW3.mjs → chunk-QJKMOGWN.mjs} +5 -2
  7. package/dist/chunk-QJKMOGWN.mjs.map +1 -0
  8. package/dist/{chunk-X7HMY3S6.mjs → chunk-QTD2KREC.mjs} +2 -2
  9. package/dist/components/chat/Chat.js +4 -1
  10. package/dist/components/chat/Chat.js.map +1 -1
  11. package/dist/components/chat/Chat.mjs +2 -2
  12. package/dist/components/chat/Input.js +4 -1
  13. package/dist/components/chat/Input.js.map +1 -1
  14. package/dist/components/chat/Input.mjs +1 -1
  15. package/dist/components/chat/Modal.d.ts +1 -1
  16. package/dist/components/chat/Modal.js +13 -2
  17. package/dist/components/chat/Modal.js.map +1 -1
  18. package/dist/components/chat/Modal.mjs +3 -3
  19. package/dist/components/chat/Popup.js +13 -2
  20. package/dist/components/chat/Popup.js.map +1 -1
  21. package/dist/components/chat/Popup.mjs +4 -4
  22. package/dist/components/chat/Sidebar.js +13 -2
  23. package/dist/components/chat/Sidebar.js.map +1 -1
  24. package/dist/components/chat/Sidebar.mjs +4 -4
  25. package/dist/components/chat/index.js +13 -2
  26. package/dist/components/chat/index.js.map +1 -1
  27. package/dist/components/chat/index.mjs +5 -5
  28. package/dist/components/index.js +13 -2
  29. package/dist/components/index.js.map +1 -1
  30. package/dist/components/index.mjs +5 -5
  31. package/dist/index.js +13 -2
  32. package/dist/index.js.map +1 -1
  33. package/dist/index.mjs +5 -5
  34. package/package.json +4 -4
  35. package/src/components/chat/Input.tsx +8 -2
  36. package/src/components/chat/Modal.tsx +8 -0
  37. package/dist/chunk-OG2LUNMO.mjs.map +0 -1
  38. package/dist/chunk-SNLHKLW3.mjs.map +0 -1
  39. /package/dist/{chunk-HGA4N4ME.mjs.map → chunk-7EDMOLGH.mjs.map} +0 -0
  40. /package/dist/{chunk-2D24Q2YO.mjs.map → chunk-LGMQR7XG.mjs.map} +0 -0
  41. /package/dist/{chunk-X7HMY3S6.mjs.map → chunk-QTD2KREC.mjs.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # ui
2
2
 
3
+ ## 1.8.4-next.3
4
+
5
+ ### Patch Changes
6
+
7
+ - @copilotkit/runtime-client-gql@1.8.4-next.3
8
+ - @copilotkit/react-core@1.8.4-next.3
9
+ - @copilotkit/shared@1.8.4-next.3
10
+
11
+ ## 1.8.4-next.2
12
+
13
+ ### Patch Changes
14
+
15
+ - fc11455: - fix: focus on text area when clicking in input box
16
+ - @copilotkit/react-core@1.8.4-next.2
17
+ - @copilotkit/runtime-client-gql@1.8.4-next.2
18
+ - @copilotkit/shared@1.8.4-next.2
19
+
3
20
  ## 1.8.4-next.1
4
21
 
5
22
  ### Patch Changes
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-YOEL33HG.mjs";
10
10
  import {
11
11
  CopilotChat
12
- } from "./chunk-HGA4N4ME.mjs";
12
+ } from "./chunk-7EDMOLGH.mjs";
13
13
  import {
14
14
  UserMessage
15
15
  } from "./chunk-HEIDCT7I.mjs";
@@ -18,7 +18,7 @@ import {
18
18
  } from "./chunk-5M7ODWKH.mjs";
19
19
  import {
20
20
  Input
21
- } from "./chunk-SNLHKLW3.mjs";
21
+ } from "./chunk-QJKMOGWN.mjs";
22
22
  import {
23
23
  Messages
24
24
  } from "./chunk-ZY25LVYR.mjs";
@@ -50,6 +50,10 @@ var CopilotModal = ({
50
50
  Input: Input2 = Input,
51
51
  AssistantMessage: AssistantMessage2 = AssistantMessage,
52
52
  UserMessage: UserMessage2 = UserMessage,
53
+ onThumbsUp,
54
+ onThumbsDown,
55
+ onCopy,
56
+ onRegenerate,
53
57
  className,
54
58
  children
55
59
  }) => {
@@ -82,7 +86,11 @@ var CopilotModal = ({
82
86
  Messages: Messages2,
83
87
  Input: Input2,
84
88
  AssistantMessage: AssistantMessage2,
85
- UserMessage: UserMessage2
89
+ UserMessage: UserMessage2,
90
+ onThumbsUp,
91
+ onThumbsDown,
92
+ onCopy,
93
+ onRegenerate
86
94
  }
87
95
  )
88
96
  ]
@@ -95,4 +103,4 @@ var CopilotModal = ({
95
103
  export {
96
104
  CopilotModal
97
105
  };
98
- //# sourceMappingURL=chunk-OG2LUNMO.mjs.map
106
+ //# sourceMappingURL=chunk-6F2ZAK7T.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/Modal.tsx"],"sourcesContent":["import React from \"react\";\nimport { ChatContextProvider } from \"./ChatContext\";\nimport { ButtonProps, HeaderProps, WindowProps } from \"./props\";\nimport { Window as DefaultWindow } from \"./Window\";\nimport { Button as DefaultButton } from \"./Button\";\nimport { Header as DefaultHeader } from \"./Header\";\nimport { Messages as DefaultMessages } from \"./Messages\";\nimport { Input as DefaultInput } from \"./Input\";\nimport { CopilotChat, CopilotChatProps } from \"./Chat\";\nimport { AssistantMessage as DefaultAssistantMessage } from \"./messages/AssistantMessage\";\nimport { UserMessage as DefaultUserMessage } from \"./messages/UserMessage\";\n\nexport interface CopilotModalProps extends CopilotChatProps {\n /**\n * Whether the chat window should be open by default.\n * @default false\n */\n defaultOpen?: boolean;\n\n /**\n * If the chat window should close when the user clicks outside of it.\n * @default true\n */\n clickOutsideToClose?: boolean;\n\n /**\n * If the chat window should close when the user hits the Escape key.\n * @default true\n */\n hitEscapeToClose?: boolean;\n\n /**\n * The shortcut key to open the chat window.\n * Uses Command-[shortcut] on a Mac and Ctrl-[shortcut] on Windows.\n * @default '/'\n */\n shortcut?: string;\n\n /**\n * A callback that gets called when the chat window opens or closes.\n */\n onSetOpen?: (open: boolean) => void;\n\n /**\n * A custom Window component to use instead of the default.\n */\n Window?: React.ComponentType<WindowProps>;\n\n /**\n * A custom Button component to use instead of the default.\n */\n Button?: React.ComponentType<ButtonProps>;\n\n /**\n * A custom Header component to use instead of the default.\n */\n Header?: React.ComponentType<HeaderProps>;\n}\n\nexport const CopilotModal = ({\n instructions,\n defaultOpen = false,\n clickOutsideToClose = true,\n hitEscapeToClose = true,\n onSetOpen,\n onSubmitMessage,\n onStopGeneration,\n onReloadMessages,\n shortcut = \"/\",\n icons,\n labels,\n makeSystemMessage,\n onInProgress,\n Window = DefaultWindow,\n Button = DefaultButton,\n Header = DefaultHeader,\n Messages = DefaultMessages,\n Input = DefaultInput,\n AssistantMessage = DefaultAssistantMessage,\n UserMessage = DefaultUserMessage,\n onThumbsUp,\n onThumbsDown,\n onCopy,\n onRegenerate,\n className,\n children,\n}: CopilotModalProps) => {\n const [openState, setOpenState] = React.useState(defaultOpen);\n\n const setOpen = (open: boolean) => {\n onSetOpen?.(open);\n setOpenState(open);\n };\n\n return (\n <ChatContextProvider icons={icons} labels={labels} open={openState} setOpen={setOpen}>\n {children}\n <div className={className}>\n <Button></Button>\n <Window\n clickOutsideToClose={clickOutsideToClose}\n shortcut={shortcut}\n hitEscapeToClose={hitEscapeToClose}\n >\n <Header />\n <CopilotChat\n instructions={instructions}\n onSubmitMessage={onSubmitMessage}\n onStopGeneration={onStopGeneration}\n onReloadMessages={onReloadMessages}\n makeSystemMessage={makeSystemMessage}\n onInProgress={onInProgress}\n Messages={Messages}\n Input={Input}\n AssistantMessage={AssistantMessage}\n UserMessage={UserMessage}\n onThumbsUp={onThumbsUp}\n onThumbsDown={onThumbsDown}\n onCopy={onCopy}\n onRegenerate={onRegenerate}\n />\n </Window>\n </div>\n </ChatContextProvider>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,WAAW;AAkGV,cACA,YADA;AAvCD,IAAM,eAAe,CAAC;AAAA,EAC3B;AAAA,EACA,cAAc;AAAA,EACd,sBAAsB;AAAA,EACtB,mBAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAAA,UAAS;AAAA,EACT,QAAAC,UAAS;AAAA,EACT,QAAAC,UAAS;AAAA,EACT,UAAAC,YAAW;AAAA,EACX,OAAAC,SAAQ;AAAA,EACR,kBAAAC,oBAAmB;AAAA,EACnB,aAAAC,eAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAyB;AACvB,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,WAAW;AAE5D,QAAM,UAAU,CAAC,SAAkB;AACjC,2CAAY;AACZ,iBAAa,IAAI;AAAA,EACnB;AAEA,SACE,qBAAC,uBAAoB,OAAc,QAAgB,MAAM,WAAW,SACjE;AAAA;AAAA,IACD,qBAAC,SAAI,WACH;AAAA,0BAACL,SAAA,EAAO;AAAA,MACR;AAAA,QAACD;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UAEA;AAAA,gCAACE,SAAA,EAAO;AAAA,YACR;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,UAAUC;AAAA,gBACV,OAAOC;AAAA,gBACP,kBAAkBC;AAAA,gBAClB,aAAaC;AAAA,gBACb;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,YACF;AAAA;AAAA;AAAA,MACF;AAAA,OACF;AAAA,KACF;AAEJ;","names":["Window","Button","Header","Messages","Input","AssistantMessage","UserMessage"]}
@@ -22,7 +22,7 @@ import {
22
22
  } from "./chunk-TOQ7P4DO.mjs";
23
23
  import {
24
24
  Input
25
- } from "./chunk-SNLHKLW3.mjs";
25
+ } from "./chunk-QJKMOGWN.mjs";
26
26
  import {
27
27
  Messages
28
28
  } from "./chunk-ZY25LVYR.mjs";
@@ -327,4 +327,4 @@ export {
327
327
  WrappedCopilotChat,
328
328
  useCopilotChatLogic
329
329
  };
330
- //# sourceMappingURL=chunk-HGA4N4ME.mjs.map
330
+ //# sourceMappingURL=chunk-7EDMOLGH.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CopilotModal
3
- } from "./chunk-OG2LUNMO.mjs";
3
+ } from "./chunk-6F2ZAK7T.mjs";
4
4
  import {
5
5
  __spreadProps,
6
6
  __spreadValues
@@ -18,4 +18,4 @@ function CopilotPopup(props) {
18
18
  export {
19
19
  CopilotPopup
20
20
  };
21
- //# sourceMappingURL=chunk-2D24Q2YO.mjs.map
21
+ //# sourceMappingURL=chunk-LGMQR7XG.mjs.map
@@ -19,7 +19,10 @@ var Input = ({ inProgress, onSend, isVisible = false, onStop }) => {
19
19
  const textareaRef = useRef(null);
20
20
  const handleDivClick = (event) => {
21
21
  var _a;
22
- if (event.target !== event.currentTarget)
22
+ const target = event.target;
23
+ if (target.closest("button"))
24
+ return;
25
+ if (target.tagName === "TEXTAREA")
23
26
  return;
24
27
  (_a = textareaRef.current) == null ? void 0 : _a.focus();
25
28
  };
@@ -100,4 +103,4 @@ var Input = ({ inProgress, onSend, isVisible = false, onStop }) => {
100
103
  export {
101
104
  Input
102
105
  };
103
- //# sourceMappingURL=chunk-SNLHKLW3.mjs.map
106
+ //# sourceMappingURL=chunk-QJKMOGWN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/Input.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { InputProps } from \"./props\";\nimport { useChatContext } from \"./ChatContext\";\nimport AutoResizingTextarea from \"./Textarea\";\nimport { usePushToTalk } from \"../../hooks/use-push-to-talk\";\nimport { useCopilotContext } from \"@copilotkit/react-core\";\n\nexport const Input = ({ inProgress, onSend, isVisible = false, onStop }: InputProps) => {\n const context = useChatContext();\n const copilotContext = useCopilotContext();\n\n const pushToTalkConfigured =\n copilotContext.copilotApiConfig.textToSpeechUrl !== undefined &&\n copilotContext.copilotApiConfig.transcribeAudioUrl !== undefined;\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const handleDivClick = (event: React.MouseEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement;\n\n // If the user clicked a button or inside a button, don't focus the textarea\n if (target.closest(\"button\")) return;\n\n // If the user clicked the textarea, do nothing (it's already focused)\n if (target.tagName === \"TEXTAREA\") return;\n\n // Otherwise, focus the textarea\n textareaRef.current?.focus();\n };\n\n const [text, setText] = useState(\"\");\n const send = () => {\n if (inProgress) return;\n onSend(text);\n setText(\"\");\n\n textareaRef.current?.focus();\n };\n\n useEffect(() => {\n if (isVisible) {\n textareaRef.current?.focus();\n }\n }, [isVisible]);\n\n const { pushToTalkState, setPushToTalkState } = usePushToTalk({\n sendFunction: onSend,\n inProgress,\n });\n\n const isInProgress = inProgress || pushToTalkState === \"transcribing\";\n const buttonIcon = isInProgress ? context.icons.stopIcon : context.icons.sendIcon;\n const showPushToTalk =\n pushToTalkConfigured &&\n (pushToTalkState === \"idle\" || pushToTalkState === \"recording\") &&\n !inProgress;\n\n const canSend = () => {\n const interruptEvent = copilotContext.langGraphInterruptAction?.event;\n const interruptInProgress =\n interruptEvent?.name === \"LangGraphInterruptEvent\" && !interruptEvent?.response;\n\n return (\n (isInProgress || (!isInProgress && text.trim().length > 0)) &&\n pushToTalkState === \"idle\" &&\n !interruptInProgress\n );\n };\n\n const sendDisabled = !canSend();\n\n return (\n <div className=\"copilotKitInputContainer\">\n <div className=\"copilotKitInput\" onClick={handleDivClick}>\n <AutoResizingTextarea\n ref={textareaRef}\n placeholder={context.labels.placeholder}\n autoFocus={true}\n maxRows={5}\n value={text}\n onChange={(event) => setText(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n if (canSend()) {\n send();\n }\n }\n }}\n />\n <div className=\"copilotKitInputControls\">\n <div style={{ flexGrow: 1 }} />\n {showPushToTalk && (\n <button\n onClick={() =>\n setPushToTalkState(pushToTalkState === \"idle\" ? \"recording\" : \"transcribing\")\n }\n className={\n pushToTalkState === \"recording\"\n ? \"copilotKitInputControlButton copilotKitPushToTalkRecording\"\n : \"copilotKitInputControlButton\"\n }\n >\n {context.icons.pushToTalkIcon}\n </button>\n )}\n <button\n disabled={sendDisabled}\n onClick={isInProgress ? onStop : send}\n data-copilotkit-in-progress={inProgress}\n data-test-id={inProgress ? \"copilot-chat-request-in-progress\" : \"copilot-chat-ready\"}\n className=\"copilotKitInputControlButton\"\n >\n {buttonIcon}\n </button>\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;AAAA,SAAgB,WAAW,QAAQ,gBAAgB;AAKnD,SAAS,yBAAyB;AAqE1B,cAgBA,YAhBA;AAnED,IAAM,QAAQ,CAAC,EAAE,YAAY,QAAQ,YAAY,OAAO,OAAO,MAAkB;AACtF,QAAM,UAAU,eAAe;AAC/B,QAAM,iBAAiB,kBAAkB;AAEzC,QAAM,uBACJ,eAAe,iBAAiB,oBAAoB,UACpD,eAAe,iBAAiB,uBAAuB;AAEzD,QAAM,cAAc,OAA4B,IAAI;AAEpD,QAAM,iBAAiB,CAAC,UAA4C;AAjBtE;AAkBI,UAAM,SAAS,MAAM;AAGrB,QAAI,OAAO,QAAQ,QAAQ;AAAG;AAG9B,QAAI,OAAO,YAAY;AAAY;AAGnC,sBAAY,YAAZ,mBAAqB;AAAA,EACvB;AAEA,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,EAAE;AACnC,QAAM,OAAO,MAAM;AA/BrB;AAgCI,QAAI;AAAY;AAChB,WAAO,IAAI;AACX,YAAQ,EAAE;AAEV,sBAAY,YAAZ,mBAAqB;AAAA,EACvB;AAEA,YAAU,MAAM;AAvClB;AAwCI,QAAI,WAAW;AACb,wBAAY,YAAZ,mBAAqB;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,EAAE,iBAAiB,mBAAmB,IAAI,cAAc;AAAA,IAC5D,cAAc;AAAA,IACd;AAAA,EACF,CAAC;AAED,QAAM,eAAe,cAAc,oBAAoB;AACvD,QAAM,aAAa,eAAe,QAAQ,MAAM,WAAW,QAAQ,MAAM;AACzE,QAAM,iBACJ,yBACC,oBAAoB,UAAU,oBAAoB,gBACnD,CAAC;AAEH,QAAM,UAAU,MAAM;AAzDxB;AA0DI,UAAM,kBAAiB,oBAAe,6BAAf,mBAAyC;AAChE,UAAM,uBACJ,iDAAgB,UAAS,6BAA6B,EAAC,iDAAgB;AAEzE,YACG,gBAAiB,CAAC,gBAAgB,KAAK,KAAK,EAAE,SAAS,MACxD,oBAAoB,UACpB,CAAC;AAAA,EAEL;AAEA,QAAM,eAAe,CAAC,QAAQ;AAE9B,SACE,oBAAC,SAAI,WAAU,4BACb,+BAAC,SAAI,WAAU,mBAAkB,SAAS,gBACxC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,aAAa,QAAQ,OAAO;AAAA,QAC5B,WAAW;AAAA,QACX,SAAS;AAAA,QACT,OAAO;AAAA,QACP,UAAU,CAAC,UAAU,QAAQ,MAAM,OAAO,KAAK;AAAA,QAC/C,WAAW,CAAC,UAAU;AACpB,cAAI,MAAM,QAAQ,WAAW,CAAC,MAAM,UAAU;AAC5C,kBAAM,eAAe;AACrB,gBAAI,QAAQ,GAAG;AACb,mBAAK;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA;AAAA,IACF;AAAA,IACA,qBAAC,SAAI,WAAU,2BACb;AAAA,0BAAC,SAAI,OAAO,EAAE,UAAU,EAAE,GAAG;AAAA,MAC5B,kBACC;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MACP,mBAAmB,oBAAoB,SAAS,cAAc,cAAc;AAAA,UAE9E,WACE,oBAAoB,cAChB,+DACA;AAAA,UAGL,kBAAQ,MAAM;AAAA;AAAA,MACjB;AAAA,MAEF;AAAA,QAAC;AAAA;AAAA,UACC,UAAU;AAAA,UACV,SAAS,eAAe,SAAS;AAAA,UACjC,+BAA6B;AAAA,UAC7B,gBAAc,aAAa,qCAAqC;AAAA,UAChE,WAAU;AAAA,UAET;AAAA;AAAA,MACH;AAAA,OACF;AAAA,KACF,GACF;AAEJ;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CopilotModal
3
- } from "./chunk-OG2LUNMO.mjs";
3
+ } from "./chunk-6F2ZAK7T.mjs";
4
4
  import {
5
5
  __spreadProps,
6
6
  __spreadValues
@@ -27,4 +27,4 @@ function CopilotSidebar(props) {
27
27
  export {
28
28
  CopilotSidebar
29
29
  };
30
- //# sourceMappingURL=chunk-X7HMY3S6.mjs.map
30
+ //# sourceMappingURL=chunk-QTD2KREC.mjs.map
@@ -730,7 +730,10 @@ var Input = ({ inProgress, onSend, isVisible = false, onStop }) => {
730
730
  const textareaRef = (0, import_react5.useRef)(null);
731
731
  const handleDivClick = (event) => {
732
732
  var _a;
733
- if (event.target !== event.currentTarget)
733
+ const target = event.target;
734
+ if (target.closest("button"))
735
+ return;
736
+ if (target.tagName === "TEXTAREA")
734
737
  return;
735
738
  (_a = textareaRef.current) == null ? void 0 : _a.focus();
736
739
  };