@copilotkit/react-ui 1.8.6 → 1.8.7
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.
- package/CHANGELOG.md +20 -0
- package/dist/{chunk-Q2YY2NX3.mjs → chunk-24TDU7MY.mjs} +2 -2
- package/dist/{chunk-XNQO5AZZ.mjs → chunk-ABHUX6T6.mjs} +2 -2
- package/dist/{chunk-QJKMOGWN.mjs → chunk-BDNHZ3GW.mjs} +4 -3
- package/dist/chunk-BDNHZ3GW.mjs.map +1 -0
- package/dist/{chunk-NMNC4ROZ.mjs → chunk-DSQGQJI4.mjs} +2 -2
- package/dist/{chunk-HEIDCT7I.mjs → chunk-HWMFMBJC.mjs} +2 -2
- package/dist/chunk-HWMFMBJC.mjs.map +1 -0
- package/dist/{chunk-UN2E3HCK.mjs → chunk-IEMQ2SQW.mjs} +6 -4
- package/dist/chunk-IEMQ2SQW.mjs.map +1 -0
- package/dist/{chunk-ZY25LVYR.mjs → chunk-IJADIQAR.mjs} +20 -2
- package/dist/chunk-IJADIQAR.mjs.map +1 -0
- package/dist/{chunk-X6EFGEBJ.mjs → chunk-JOL7NS2W.mjs} +2 -2
- package/dist/{chunk-PCTCOQK2.mjs → chunk-KENCH7RN.mjs} +2 -2
- package/dist/{chunk-ZLRUNNS7.mjs → chunk-O34Z4XM2.mjs} +170 -30
- package/dist/chunk-O34Z4XM2.mjs.map +1 -0
- package/dist/{chunk-5M7ODWKH.mjs → chunk-OZXUB3V7.mjs} +3 -3
- package/dist/chunk-PLHTVHUW.mjs +82 -0
- package/dist/chunk-PLHTVHUW.mjs.map +1 -0
- package/dist/{chunk-62QMTKMJ.mjs → chunk-POWCBXRY.mjs} +3 -3
- package/dist/chunk-PXEVB7IK.mjs +1 -0
- package/dist/{chunk-HIORSNVD.mjs → chunk-Q2NFQTCQ.mjs} +2 -2
- package/dist/chunk-SLTG4L62.mjs +78 -0
- package/dist/chunk-SLTG4L62.mjs.map +1 -0
- package/dist/{chunk-SMJ3QQCE.mjs → chunk-T7N77F5Y.mjs} +2 -2
- package/dist/{chunk-YOEL33HG.mjs → chunk-UFN2VWSR.mjs} +2 -2
- package/dist/{chunk-2OTVZXDX.mjs → chunk-UH2UFL5W.mjs} +3 -3
- package/dist/{chunk-D5XIJNXQ.mjs → chunk-VGPQYMKJ.mjs} +8 -8
- package/dist/{chunk-WNC6OCIB.mjs → chunk-XFCMZH2H.mjs} +2 -2
- package/dist/{chunk-ORSMX3SE.mjs → chunk-XWG3L6QC.mjs} +15 -1
- package/dist/{chunk-ORSMX3SE.mjs.map → chunk-XWG3L6QC.mjs.map} +1 -1
- package/dist/{chunk-TOQ7P4DO.mjs → chunk-XZNY26GH.mjs} +2 -2
- package/dist/{chunk-GOAED4H6.mjs → chunk-Y7UO3RPW.mjs} +10 -10
- package/dist/components/chat/Button.js.map +1 -1
- package/dist/components/chat/Button.mjs +3 -3
- package/dist/components/chat/Chat.d.ts +23 -3
- package/dist/components/chat/Chat.js +341 -30
- package/dist/components/chat/Chat.js.map +1 -1
- package/dist/components/chat/Chat.mjs +16 -14
- package/dist/components/chat/ChatContext.d.ts +5 -0
- package/dist/components/chat/ChatContext.js +15 -1
- package/dist/components/chat/ChatContext.js.map +1 -1
- package/dist/components/chat/ChatContext.mjs +2 -2
- package/dist/components/chat/CodeBlock.js.map +1 -1
- package/dist/components/chat/CodeBlock.mjs +2 -2
- package/dist/components/chat/Header.js.map +1 -1
- package/dist/components/chat/Header.mjs +5 -5
- package/dist/components/chat/Icons.d.ts +2 -1
- package/dist/components/chat/Icons.js +17 -2
- package/dist/components/chat/Icons.js.map +1 -1
- package/dist/components/chat/Icons.mjs +5 -3
- package/dist/components/chat/ImageUploadQueue.d.ts +13 -0
- package/dist/components/chat/ImageUploadQueue.js +106 -0
- package/dist/components/chat/ImageUploadQueue.js.map +1 -0
- package/dist/components/chat/ImageUploadQueue.mjs +8 -0
- package/dist/components/chat/ImageUploadQueue.mjs.map +1 -0
- package/dist/components/chat/Input.d.ts +1 -1
- package/dist/components/chat/Input.js +2 -1
- package/dist/components/chat/Input.js.map +1 -1
- package/dist/components/chat/Input.mjs +3 -3
- package/dist/components/chat/Markdown.js.map +1 -1
- package/dist/components/chat/Markdown.mjs +3 -3
- package/dist/components/chat/Messages.d.ts +1 -1
- package/dist/components/chat/Messages.js +18 -0
- package/dist/components/chat/Messages.js.map +1 -1
- package/dist/components/chat/Messages.mjs +3 -3
- package/dist/components/chat/Modal.js +348 -37
- package/dist/components/chat/Modal.js.map +1 -1
- package/dist/components/chat/Modal.mjs +22 -20
- package/dist/components/chat/Popup.js +350 -39
- package/dist/components/chat/Popup.js.map +1 -1
- package/dist/components/chat/Popup.mjs +23 -21
- package/dist/components/chat/Sidebar.js +350 -39
- package/dist/components/chat/Sidebar.js.map +1 -1
- package/dist/components/chat/Sidebar.mjs +23 -21
- package/dist/components/chat/Suggestion.js.map +1 -1
- package/dist/components/chat/Suggestion.mjs +2 -2
- package/dist/components/chat/Window.js.map +1 -1
- package/dist/components/chat/Window.mjs +3 -3
- package/dist/components/chat/index.d.ts +1 -0
- package/dist/components/chat/index.js +354 -41
- package/dist/components/chat/index.js.map +1 -1
- package/dist/components/chat/index.mjs +30 -25
- package/dist/components/chat/messages/AssistantMessage.js.map +1 -1
- package/dist/components/chat/messages/AssistantMessage.mjs +5 -5
- package/dist/components/chat/messages/RenderActionExecutionMessage.js.map +1 -1
- package/dist/components/chat/messages/RenderActionExecutionMessage.mjs +6 -6
- package/dist/components/chat/messages/RenderAgentStateMessage.js.map +1 -1
- package/dist/components/chat/messages/RenderAgentStateMessage.mjs +6 -6
- package/dist/components/chat/messages/RenderImageMessage.d.ts +7 -0
- package/dist/components/chat/messages/RenderImageMessage.js +774 -0
- package/dist/components/chat/messages/RenderImageMessage.js.map +1 -0
- package/dist/components/chat/messages/RenderImageMessage.mjs +15 -0
- package/dist/components/chat/messages/RenderImageMessage.mjs.map +1 -0
- package/dist/components/chat/messages/RenderResultMessage.js.map +1 -1
- package/dist/components/chat/messages/RenderResultMessage.mjs +6 -6
- package/dist/components/chat/messages/RenderTextMessage.js +1 -1
- package/dist/components/chat/messages/RenderTextMessage.js.map +1 -1
- package/dist/components/chat/messages/RenderTextMessage.mjs +7 -7
- package/dist/components/chat/messages/UserMessage.js +1 -1
- package/dist/components/chat/messages/UserMessage.js.map +1 -1
- package/dist/components/chat/messages/UserMessage.mjs +1 -1
- package/dist/components/chat/props.d.ts +3 -0
- package/dist/components/chat/props.js.map +1 -1
- package/dist/components/dev-console/console.js.map +1 -1
- package/dist/components/dev-console/console.mjs +3 -3
- package/dist/components/dev-console/index.js.map +1 -1
- package/dist/components/dev-console/index.mjs +3 -3
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +354 -41
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +30 -25
- package/dist/index.d.ts +1 -0
- package/dist/index.js +354 -41
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +30 -25
- package/package.json +6 -6
- package/src/components/chat/Chat.tsx +198 -18
- package/src/components/chat/ChatContext.tsx +7 -0
- package/src/components/chat/Icons.tsx +14 -0
- package/src/components/chat/ImageUploadQueue.tsx +77 -0
- package/src/components/chat/Input.tsx +8 -1
- package/src/components/chat/Messages.tsx +17 -0
- package/src/components/chat/index.tsx +1 -0
- package/src/components/chat/messages/RenderImageMessage.tsx +64 -0
- package/src/components/chat/messages/UserMessage.tsx +5 -1
- package/src/components/chat/props.ts +3 -0
- package/dist/chunk-HEIDCT7I.mjs.map +0 -1
- package/dist/chunk-QJKMOGWN.mjs.map +0 -1
- package/dist/chunk-SQMEPWVT.mjs +0 -1
- package/dist/chunk-UN2E3HCK.mjs.map +0 -1
- package/dist/chunk-ZLRUNNS7.mjs.map +0 -1
- package/dist/chunk-ZY25LVYR.mjs.map +0 -1
- /package/dist/{chunk-Q2YY2NX3.mjs.map → chunk-24TDU7MY.mjs.map} +0 -0
- /package/dist/{chunk-XNQO5AZZ.mjs.map → chunk-ABHUX6T6.mjs.map} +0 -0
- /package/dist/{chunk-NMNC4ROZ.mjs.map → chunk-DSQGQJI4.mjs.map} +0 -0
- /package/dist/{chunk-X6EFGEBJ.mjs.map → chunk-JOL7NS2W.mjs.map} +0 -0
- /package/dist/{chunk-PCTCOQK2.mjs.map → chunk-KENCH7RN.mjs.map} +0 -0
- /package/dist/{chunk-5M7ODWKH.mjs.map → chunk-OZXUB3V7.mjs.map} +0 -0
- /package/dist/{chunk-62QMTKMJ.mjs.map → chunk-POWCBXRY.mjs.map} +0 -0
- /package/dist/{chunk-SQMEPWVT.mjs.map → chunk-PXEVB7IK.mjs.map} +0 -0
- /package/dist/{chunk-HIORSNVD.mjs.map → chunk-Q2NFQTCQ.mjs.map} +0 -0
- /package/dist/{chunk-SMJ3QQCE.mjs.map → chunk-T7N77F5Y.mjs.map} +0 -0
- /package/dist/{chunk-YOEL33HG.mjs.map → chunk-UFN2VWSR.mjs.map} +0 -0
- /package/dist/{chunk-2OTVZXDX.mjs.map → chunk-UH2UFL5W.mjs.map} +0 -0
- /package/dist/{chunk-D5XIJNXQ.mjs.map → chunk-VGPQYMKJ.mjs.map} +0 -0
- /package/dist/{chunk-WNC6OCIB.mjs.map → chunk-XFCMZH2H.mjs.map} +0 -0
- /package/dist/{chunk-TOQ7P4DO.mjs.map → chunk-XZNY26GH.mjs.map} +0 -0
- /package/dist/{chunk-GOAED4H6.mjs.map → chunk-Y7UO3RPW.mjs.map} +0 -0
package/dist/components/index.js
CHANGED
|
@@ -85,6 +85,7 @@ __export(components_exports, {
|
|
|
85
85
|
CopilotPopup: () => CopilotPopup,
|
|
86
86
|
CopilotSidebar: () => CopilotSidebar,
|
|
87
87
|
Markdown: () => Markdown,
|
|
88
|
+
RenderImageMessage: () => RenderImageMessage,
|
|
88
89
|
UserMessage: () => UserMessage,
|
|
89
90
|
shouldShowDevConsole: () => shouldShowDevConsole,
|
|
90
91
|
useChatContext: () => useChatContext
|
|
@@ -308,6 +309,19 @@ var DownloadIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
|
308
309
|
)
|
|
309
310
|
}
|
|
310
311
|
);
|
|
312
|
+
var UploadIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
313
|
+
"svg",
|
|
314
|
+
{
|
|
315
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
316
|
+
fill: "none",
|
|
317
|
+
viewBox: "0 0 24 24",
|
|
318
|
+
strokeWidth: "1.5",
|
|
319
|
+
stroke: "currentColor",
|
|
320
|
+
width: "24",
|
|
321
|
+
height: "24",
|
|
322
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 4.5v15m7.5-7.5h-15" })
|
|
323
|
+
}
|
|
324
|
+
);
|
|
311
325
|
var CheckIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
312
326
|
"svg",
|
|
313
327
|
{
|
|
@@ -373,7 +387,8 @@ var ChatContextProvider = ({
|
|
|
373
387
|
pushToTalkIcon: MicrophoneIcon,
|
|
374
388
|
copyIcon: CopyIcon,
|
|
375
389
|
thumbsUpIcon: ThumbsUpIcon,
|
|
376
|
-
thumbsDownIcon: ThumbsDownIcon
|
|
390
|
+
thumbsDownIcon: ThumbsDownIcon,
|
|
391
|
+
uploadIcon: UploadIcon
|
|
377
392
|
}), icons),
|
|
378
393
|
[icons]
|
|
379
394
|
);
|
|
@@ -1078,6 +1093,7 @@ var Messages = ({
|
|
|
1078
1093
|
RenderActionExecutionMessage: RenderActionExecutionMessage2,
|
|
1079
1094
|
RenderAgentStateMessage: RenderAgentStateMessage2,
|
|
1080
1095
|
RenderResultMessage: RenderResultMessage2,
|
|
1096
|
+
RenderImageMessage: RenderImageMessage2,
|
|
1081
1097
|
AssistantMessage: AssistantMessage2,
|
|
1082
1098
|
UserMessage: UserMessage2,
|
|
1083
1099
|
onRegenerate,
|
|
@@ -1166,6 +1182,23 @@ var Messages = ({
|
|
|
1166
1182
|
},
|
|
1167
1183
|
index
|
|
1168
1184
|
);
|
|
1185
|
+
} else if (message.isImageMessage && message.isImageMessage()) {
|
|
1186
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1187
|
+
RenderImageMessage2,
|
|
1188
|
+
{
|
|
1189
|
+
message,
|
|
1190
|
+
inProgress,
|
|
1191
|
+
index,
|
|
1192
|
+
isCurrentMessage,
|
|
1193
|
+
AssistantMessage: AssistantMessage2,
|
|
1194
|
+
UserMessage: UserMessage2,
|
|
1195
|
+
onRegenerate,
|
|
1196
|
+
onCopy,
|
|
1197
|
+
onThumbsUp,
|
|
1198
|
+
onThumbsDown
|
|
1199
|
+
},
|
|
1200
|
+
index
|
|
1201
|
+
);
|
|
1169
1202
|
}
|
|
1170
1203
|
}),
|
|
1171
1204
|
interrupt
|
|
@@ -1408,7 +1441,7 @@ var usePushToTalk = ({
|
|
|
1408
1441
|
// src/components/chat/Input.tsx
|
|
1409
1442
|
var import_react_core6 = require("@copilotkit/react-core");
|
|
1410
1443
|
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
1411
|
-
var Input = ({ inProgress, onSend, isVisible = false, onStop }) => {
|
|
1444
|
+
var Input = ({ inProgress, onSend, isVisible = false, onStop, onUpload }) => {
|
|
1412
1445
|
const context = useChatContext();
|
|
1413
1446
|
const copilotContext = (0, import_react_core6.useCopilotContext)();
|
|
1414
1447
|
const pushToTalkConfigured = copilotContext.copilotApiConfig.textToSpeechUrl !== void 0 && copilotContext.copilotApiConfig.transcribeAudioUrl !== void 0;
|
|
@@ -1472,6 +1505,7 @@ var Input = ({ inProgress, onSend, isVisible = false, onStop }) => {
|
|
|
1472
1505
|
}
|
|
1473
1506
|
),
|
|
1474
1507
|
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "copilotKitInputControls", children: [
|
|
1508
|
+
onUpload && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("button", { onClick: onUpload, className: "copilotKitInputControlButton", children: context.icons.uploadIcon }),
|
|
1475
1509
|
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { flexGrow: 1 } }),
|
|
1476
1510
|
showPushToTalk && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1477
1511
|
"button",
|
|
@@ -1499,7 +1533,7 @@ var Input = ({ inProgress, onSend, isVisible = false, onStop }) => {
|
|
|
1499
1533
|
// src/components/chat/messages/UserMessage.tsx
|
|
1500
1534
|
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
1501
1535
|
var UserMessage = (props) => {
|
|
1502
|
-
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: props.message });
|
|
1536
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: props.subComponent || props.message });
|
|
1503
1537
|
};
|
|
1504
1538
|
|
|
1505
1539
|
// src/components/chat/Markdown.tsx
|
|
@@ -2353,13 +2387,77 @@ function RenderAgentStateMessage(_a) {
|
|
|
2353
2387
|
}
|
|
2354
2388
|
}
|
|
2355
2389
|
|
|
2390
|
+
// src/components/chat/messages/RenderImageMessage.tsx
|
|
2391
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
2392
|
+
function RenderImageMessage(_a) {
|
|
2393
|
+
var _b = _a, {
|
|
2394
|
+
UserMessage: UserMessage2 = UserMessage,
|
|
2395
|
+
AssistantMessage: AssistantMessage2 = AssistantMessage
|
|
2396
|
+
} = _b, props = __objRest(_b, [
|
|
2397
|
+
"UserMessage",
|
|
2398
|
+
"AssistantMessage"
|
|
2399
|
+
]);
|
|
2400
|
+
const {
|
|
2401
|
+
message,
|
|
2402
|
+
inProgress,
|
|
2403
|
+
index,
|
|
2404
|
+
isCurrentMessage,
|
|
2405
|
+
onRegenerate,
|
|
2406
|
+
onCopy,
|
|
2407
|
+
onThumbsUp,
|
|
2408
|
+
onThumbsDown
|
|
2409
|
+
} = props;
|
|
2410
|
+
if (message.isImageMessage()) {
|
|
2411
|
+
const imageData = `data:${message.format};base64,${message.bytes}`;
|
|
2412
|
+
const imageComponent = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "copilotKitImage", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2413
|
+
"img",
|
|
2414
|
+
{
|
|
2415
|
+
src: imageData,
|
|
2416
|
+
alt: "User uploaded image",
|
|
2417
|
+
style: { maxWidth: "100%", maxHeight: "300px", borderRadius: "8px" }
|
|
2418
|
+
}
|
|
2419
|
+
) });
|
|
2420
|
+
if (message.role === "user") {
|
|
2421
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2422
|
+
UserMessage2,
|
|
2423
|
+
{
|
|
2424
|
+
"data-message-role": "user",
|
|
2425
|
+
message: "",
|
|
2426
|
+
rawData: message,
|
|
2427
|
+
subComponent: imageComponent
|
|
2428
|
+
},
|
|
2429
|
+
index
|
|
2430
|
+
);
|
|
2431
|
+
} else if (message.role === "assistant") {
|
|
2432
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2433
|
+
AssistantMessage2,
|
|
2434
|
+
{
|
|
2435
|
+
"data-message-role": "assistant",
|
|
2436
|
+
message: "",
|
|
2437
|
+
rawData: message,
|
|
2438
|
+
subComponent: imageComponent,
|
|
2439
|
+
isLoading: inProgress && isCurrentMessage && !message.bytes,
|
|
2440
|
+
isGenerating: inProgress && isCurrentMessage && !!message.bytes,
|
|
2441
|
+
isCurrentMessage,
|
|
2442
|
+
onRegenerate: () => onRegenerate == null ? void 0 : onRegenerate(message.id),
|
|
2443
|
+
onCopy,
|
|
2444
|
+
onThumbsUp,
|
|
2445
|
+
onThumbsDown
|
|
2446
|
+
},
|
|
2447
|
+
index
|
|
2448
|
+
);
|
|
2449
|
+
}
|
|
2450
|
+
}
|
|
2451
|
+
return null;
|
|
2452
|
+
}
|
|
2453
|
+
|
|
2356
2454
|
// src/components/chat/Suggestion.tsx
|
|
2357
2455
|
var import_react_core9 = require("@copilotkit/react-core");
|
|
2358
2456
|
var import_shared2 = require("@copilotkit/shared");
|
|
2359
2457
|
var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
|
|
2360
|
-
var
|
|
2458
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
2361
2459
|
function Suggestion({ title, message, onClick, partial, className }) {
|
|
2362
|
-
return /* @__PURE__ */ (0,
|
|
2460
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
2363
2461
|
"button",
|
|
2364
2462
|
{
|
|
2365
2463
|
disabled: partial,
|
|
@@ -2369,7 +2467,7 @@ function Suggestion({ title, message, onClick, partial, className }) {
|
|
|
2369
2467
|
},
|
|
2370
2468
|
className: className || (partial ? "suggestion loading" : "suggestion"),
|
|
2371
2469
|
"data-test-id": "suggestion",
|
|
2372
|
-
children: partial ? SmallSpinnerIcon : /* @__PURE__ */ (0,
|
|
2470
|
+
children: partial ? SmallSpinnerIcon : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { children: title })
|
|
2373
2471
|
}
|
|
2374
2472
|
);
|
|
2375
2473
|
}
|
|
@@ -2449,7 +2547,87 @@ var import_react_core10 = require("@copilotkit/react-core");
|
|
|
2449
2547
|
var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
|
|
2450
2548
|
var import_shared3 = require("@copilotkit/shared");
|
|
2451
2549
|
var import_react_core11 = require("@copilotkit/react-core");
|
|
2452
|
-
|
|
2550
|
+
|
|
2551
|
+
// src/components/chat/ImageUploadQueue.tsx
|
|
2552
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
2553
|
+
var ImageUploadQueue = ({
|
|
2554
|
+
images,
|
|
2555
|
+
onRemoveImage,
|
|
2556
|
+
className = ""
|
|
2557
|
+
}) => {
|
|
2558
|
+
if (images.length === 0)
|
|
2559
|
+
return null;
|
|
2560
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2561
|
+
"div",
|
|
2562
|
+
{
|
|
2563
|
+
className: `copilotKitImageUploadQueue ${className}`,
|
|
2564
|
+
style: {
|
|
2565
|
+
display: "flex",
|
|
2566
|
+
flexWrap: "wrap",
|
|
2567
|
+
gap: "8px",
|
|
2568
|
+
margin: "8px",
|
|
2569
|
+
padding: "8px"
|
|
2570
|
+
},
|
|
2571
|
+
children: images.map((image, index) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
2572
|
+
"div",
|
|
2573
|
+
{
|
|
2574
|
+
className: "copilotKitImageUploadQueueItem",
|
|
2575
|
+
style: {
|
|
2576
|
+
position: "relative",
|
|
2577
|
+
display: "inline-block",
|
|
2578
|
+
width: "60px",
|
|
2579
|
+
height: "60px",
|
|
2580
|
+
borderRadius: "4px",
|
|
2581
|
+
overflow: "hidden"
|
|
2582
|
+
},
|
|
2583
|
+
children: [
|
|
2584
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2585
|
+
"img",
|
|
2586
|
+
{
|
|
2587
|
+
src: `data:${image.contentType};base64,${image.bytes}`,
|
|
2588
|
+
alt: `Selected image ${index + 1}`,
|
|
2589
|
+
style: {
|
|
2590
|
+
width: "100%",
|
|
2591
|
+
height: "100%",
|
|
2592
|
+
objectFit: "cover"
|
|
2593
|
+
}
|
|
2594
|
+
}
|
|
2595
|
+
),
|
|
2596
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2597
|
+
"button",
|
|
2598
|
+
{
|
|
2599
|
+
onClick: () => onRemoveImage(index),
|
|
2600
|
+
className: "copilotKitImageUploadQueueRemoveButton",
|
|
2601
|
+
style: {
|
|
2602
|
+
position: "absolute",
|
|
2603
|
+
top: "2px",
|
|
2604
|
+
right: "2px",
|
|
2605
|
+
background: "rgba(0,0,0,0.6)",
|
|
2606
|
+
color: "white",
|
|
2607
|
+
border: "none",
|
|
2608
|
+
borderRadius: "50%",
|
|
2609
|
+
width: "18px",
|
|
2610
|
+
height: "18px",
|
|
2611
|
+
display: "flex",
|
|
2612
|
+
alignItems: "center",
|
|
2613
|
+
justifyContent: "center",
|
|
2614
|
+
cursor: "pointer",
|
|
2615
|
+
fontSize: "10px",
|
|
2616
|
+
padding: 0
|
|
2617
|
+
},
|
|
2618
|
+
children: "\u2715"
|
|
2619
|
+
}
|
|
2620
|
+
)
|
|
2621
|
+
]
|
|
2622
|
+
},
|
|
2623
|
+
index
|
|
2624
|
+
))
|
|
2625
|
+
}
|
|
2626
|
+
);
|
|
2627
|
+
};
|
|
2628
|
+
|
|
2629
|
+
// src/components/chat/Chat.tsx
|
|
2630
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
2453
2631
|
function CopilotChat({
|
|
2454
2632
|
instructions,
|
|
2455
2633
|
onSubmitMessage,
|
|
@@ -2466,14 +2644,64 @@ function CopilotChat({
|
|
|
2466
2644
|
RenderActionExecutionMessage: RenderActionExecutionMessage2 = RenderActionExecutionMessage,
|
|
2467
2645
|
RenderAgentStateMessage: RenderAgentStateMessage2 = RenderAgentStateMessage,
|
|
2468
2646
|
RenderResultMessage: RenderResultMessage2 = RenderResultMessage,
|
|
2647
|
+
RenderImageMessage: RenderImageMessage2 = RenderImageMessage,
|
|
2469
2648
|
Input: Input2 = Input,
|
|
2470
2649
|
className,
|
|
2471
2650
|
icons,
|
|
2472
2651
|
labels,
|
|
2473
2652
|
AssistantMessage: AssistantMessage2 = AssistantMessage,
|
|
2474
|
-
UserMessage: UserMessage2 = UserMessage
|
|
2653
|
+
UserMessage: UserMessage2 = UserMessage,
|
|
2654
|
+
imageUploadsEnabled,
|
|
2655
|
+
inputFileAccept = "image/*"
|
|
2475
2656
|
}) {
|
|
2476
2657
|
const { additionalInstructions, setChatInstructions } = (0, import_react_core10.useCopilotContext)();
|
|
2658
|
+
const [selectedImages, setSelectedImages] = (0, import_react13.useState)([]);
|
|
2659
|
+
const fileInputRef = (0, import_react13.useRef)(null);
|
|
2660
|
+
(0, import_react13.useEffect)(() => {
|
|
2661
|
+
if (!imageUploadsEnabled)
|
|
2662
|
+
return;
|
|
2663
|
+
const handlePaste = (e) => __async(this, null, function* () {
|
|
2664
|
+
var _a, _b;
|
|
2665
|
+
const target = e.target;
|
|
2666
|
+
if (!((_a = target.parentElement) == null ? void 0 : _a.classList.contains("copilotKitInput")))
|
|
2667
|
+
return;
|
|
2668
|
+
const items = Array.from(((_b = e.clipboardData) == null ? void 0 : _b.items) || []);
|
|
2669
|
+
const imageItems = items.filter((item) => item.type.startsWith("image/"));
|
|
2670
|
+
if (imageItems.length === 0)
|
|
2671
|
+
return;
|
|
2672
|
+
e.preventDefault();
|
|
2673
|
+
const imagePromises = imageItems.map((item) => {
|
|
2674
|
+
const file = item.getAsFile();
|
|
2675
|
+
if (!file)
|
|
2676
|
+
return Promise.resolve(null);
|
|
2677
|
+
return new Promise((resolve, reject) => {
|
|
2678
|
+
const reader = new FileReader();
|
|
2679
|
+
reader.onload = (e2) => {
|
|
2680
|
+
var _a2, _b2;
|
|
2681
|
+
const base64String = (_b2 = (_a2 = e2.target) == null ? void 0 : _a2.result) == null ? void 0 : _b2.split(",")[1];
|
|
2682
|
+
if (base64String) {
|
|
2683
|
+
resolve({
|
|
2684
|
+
contentType: file.type,
|
|
2685
|
+
bytes: base64String
|
|
2686
|
+
});
|
|
2687
|
+
} else {
|
|
2688
|
+
resolve(null);
|
|
2689
|
+
}
|
|
2690
|
+
};
|
|
2691
|
+
reader.onerror = reject;
|
|
2692
|
+
reader.readAsDataURL(file);
|
|
2693
|
+
});
|
|
2694
|
+
});
|
|
2695
|
+
try {
|
|
2696
|
+
const loadedImages = (yield Promise.all(imagePromises)).filter((img) => img !== null);
|
|
2697
|
+
setSelectedImages((prev) => [...prev, ...loadedImages]);
|
|
2698
|
+
} catch (error) {
|
|
2699
|
+
console.error("Error processing pasted images:", error);
|
|
2700
|
+
}
|
|
2701
|
+
});
|
|
2702
|
+
document.addEventListener("paste", handlePaste);
|
|
2703
|
+
return () => document.removeEventListener("paste", handlePaste);
|
|
2704
|
+
}, [imageUploadsEnabled]);
|
|
2477
2705
|
(0, import_react13.useEffect)(() => {
|
|
2478
2706
|
if (!(additionalInstructions == null ? void 0 : additionalInstructions.length)) {
|
|
2479
2707
|
setChatInstructions(instructions || "");
|
|
@@ -2501,6 +2729,14 @@ function CopilotChat({
|
|
|
2501
2729
|
onStopGeneration,
|
|
2502
2730
|
onReloadMessages
|
|
2503
2731
|
);
|
|
2732
|
+
const handleSendMessage = (text) => {
|
|
2733
|
+
const images = selectedImages;
|
|
2734
|
+
setSelectedImages([]);
|
|
2735
|
+
if (fileInputRef.current) {
|
|
2736
|
+
fileInputRef.current.value = "";
|
|
2737
|
+
}
|
|
2738
|
+
return sendMessage(text, images);
|
|
2739
|
+
};
|
|
2504
2740
|
const chatContext = import_react13.default.useContext(ChatContext);
|
|
2505
2741
|
const isVisible = chatContext ? chatContext.open : true;
|
|
2506
2742
|
const handleRegenerate = (messageId) => {
|
|
@@ -2514,8 +2750,42 @@ function CopilotChat({
|
|
|
2514
2750
|
onCopy(message);
|
|
2515
2751
|
}
|
|
2516
2752
|
};
|
|
2517
|
-
|
|
2518
|
-
|
|
2753
|
+
const handleImageUpload = (event) => __async(this, null, function* () {
|
|
2754
|
+
if (!event.target.files || event.target.files.length === 0) {
|
|
2755
|
+
return;
|
|
2756
|
+
}
|
|
2757
|
+
const files = Array.from(event.target.files).filter((file) => file.type.startsWith("image/"));
|
|
2758
|
+
if (files.length === 0)
|
|
2759
|
+
return;
|
|
2760
|
+
const fileReadPromises = files.map((file) => {
|
|
2761
|
+
return new Promise((resolve, reject) => {
|
|
2762
|
+
const reader = new FileReader();
|
|
2763
|
+
reader.onload = (e) => {
|
|
2764
|
+
var _a, _b;
|
|
2765
|
+
const base64String = ((_b = (_a = e.target) == null ? void 0 : _a.result) == null ? void 0 : _b.split(",")[1]) || "";
|
|
2766
|
+
if (base64String) {
|
|
2767
|
+
resolve({
|
|
2768
|
+
contentType: file.type,
|
|
2769
|
+
bytes: base64String
|
|
2770
|
+
});
|
|
2771
|
+
}
|
|
2772
|
+
};
|
|
2773
|
+
reader.onerror = reject;
|
|
2774
|
+
reader.readAsDataURL(file);
|
|
2775
|
+
});
|
|
2776
|
+
});
|
|
2777
|
+
try {
|
|
2778
|
+
const loadedImages = yield Promise.all(fileReadPromises);
|
|
2779
|
+
setSelectedImages((prev) => [...prev, ...loadedImages]);
|
|
2780
|
+
} catch (error) {
|
|
2781
|
+
console.error("Error reading files:", error);
|
|
2782
|
+
}
|
|
2783
|
+
});
|
|
2784
|
+
const removeSelectedImage = (index) => {
|
|
2785
|
+
setSelectedImages((prev) => prev.filter((_, i) => i !== index));
|
|
2786
|
+
};
|
|
2787
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
|
|
2788
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
2519
2789
|
Messages2,
|
|
2520
2790
|
{
|
|
2521
2791
|
AssistantMessage: AssistantMessage2,
|
|
@@ -2524,32 +2794,51 @@ function CopilotChat({
|
|
|
2524
2794
|
RenderActionExecutionMessage: RenderActionExecutionMessage2,
|
|
2525
2795
|
RenderAgentStateMessage: RenderAgentStateMessage2,
|
|
2526
2796
|
RenderResultMessage: RenderResultMessage2,
|
|
2797
|
+
RenderImageMessage: RenderImageMessage2,
|
|
2527
2798
|
messages: visibleMessages,
|
|
2528
2799
|
inProgress: isLoading,
|
|
2529
2800
|
onRegenerate: handleRegenerate,
|
|
2530
2801
|
onCopy: handleCopy,
|
|
2531
2802
|
onThumbsUp,
|
|
2532
2803
|
onThumbsDown,
|
|
2533
|
-
children: currentSuggestions.length > 0 && /* @__PURE__ */ (0,
|
|
2804
|
+
children: currentSuggestions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "suggestions", children: currentSuggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
2534
2805
|
Suggestion,
|
|
2535
2806
|
{
|
|
2536
2807
|
title: suggestion.title,
|
|
2537
2808
|
message: suggestion.message,
|
|
2538
2809
|
partial: suggestion.partial,
|
|
2539
2810
|
className: suggestion.className,
|
|
2540
|
-
onClick: (message) =>
|
|
2811
|
+
onClick: (message) => handleSendMessage(message)
|
|
2541
2812
|
},
|
|
2542
2813
|
index
|
|
2543
2814
|
)) })
|
|
2544
2815
|
}
|
|
2545
2816
|
),
|
|
2546
|
-
/* @__PURE__ */ (0,
|
|
2817
|
+
imageUploadsEnabled && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment, { children: [
|
|
2818
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ImageUploadQueue, { images: selectedImages, onRemoveImage: removeSelectedImage }),
|
|
2819
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
2820
|
+
"input",
|
|
2821
|
+
{
|
|
2822
|
+
type: "file",
|
|
2823
|
+
multiple: true,
|
|
2824
|
+
ref: fileInputRef,
|
|
2825
|
+
onChange: handleImageUpload,
|
|
2826
|
+
accept: inputFileAccept,
|
|
2827
|
+
style: { display: "none" }
|
|
2828
|
+
}
|
|
2829
|
+
)
|
|
2830
|
+
] }),
|
|
2831
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
2547
2832
|
Input2,
|
|
2548
2833
|
{
|
|
2549
2834
|
inProgress: isLoading,
|
|
2550
|
-
onSend:
|
|
2835
|
+
onSend: handleSendMessage,
|
|
2551
2836
|
isVisible,
|
|
2552
|
-
onStop: stopGeneration
|
|
2837
|
+
onStop: stopGeneration,
|
|
2838
|
+
onUpload: imageUploadsEnabled ? () => {
|
|
2839
|
+
var _a;
|
|
2840
|
+
return (_a = fileInputRef.current) == null ? void 0 : _a.click();
|
|
2841
|
+
} : void 0
|
|
2553
2842
|
}
|
|
2554
2843
|
)
|
|
2555
2844
|
] });
|
|
@@ -2562,10 +2851,10 @@ function WrappedCopilotChat({
|
|
|
2562
2851
|
}) {
|
|
2563
2852
|
const chatContext = import_react13.default.useContext(ChatContext);
|
|
2564
2853
|
if (!chatContext) {
|
|
2565
|
-
return /* @__PURE__ */ (0,
|
|
2566
|
-
}, children: /* @__PURE__ */ (0,
|
|
2854
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ChatContextProvider, { icons, labels, open: true, setOpen: () => {
|
|
2855
|
+
}, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: `copilotKitChat ${className}`, children }) });
|
|
2567
2856
|
}
|
|
2568
|
-
return /* @__PURE__ */ (0,
|
|
2857
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_jsx_runtime24.Fragment, { children });
|
|
2569
2858
|
}
|
|
2570
2859
|
var SUGGESTIONS_DEBOUNCE_TIMEOUT = 1e3;
|
|
2571
2860
|
var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
|
|
@@ -2619,22 +2908,45 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
2619
2908
|
// global context
|
|
2620
2909
|
visibleMessages.length == 0
|
|
2621
2910
|
]);
|
|
2622
|
-
const sendMessage = (messageContent) => __async(void 0, null, function* () {
|
|
2911
|
+
const sendMessage = (messageContent, imagesToUse) => __async(void 0, null, function* () {
|
|
2912
|
+
const images = imagesToUse || [];
|
|
2623
2913
|
abortSuggestions();
|
|
2624
2914
|
setCurrentSuggestions([]);
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2915
|
+
let firstMessage = null;
|
|
2916
|
+
if (messageContent.trim().length > 0) {
|
|
2917
|
+
const textMessage = new import_runtime_client_gql4.TextMessage({
|
|
2918
|
+
content: messageContent,
|
|
2919
|
+
role: import_runtime_client_gql4.Role.User
|
|
2920
|
+
});
|
|
2921
|
+
if (onSubmitMessage) {
|
|
2922
|
+
try {
|
|
2923
|
+
yield onSubmitMessage(messageContent);
|
|
2924
|
+
} catch (error) {
|
|
2925
|
+
console.error("Error in onSubmitMessage:", error);
|
|
2926
|
+
}
|
|
2927
|
+
}
|
|
2928
|
+
yield appendMessage(textMessage, { followUp: images.length === 0 });
|
|
2929
|
+
if (!firstMessage) {
|
|
2930
|
+
firstMessage = textMessage;
|
|
2931
|
+
}
|
|
2932
|
+
}
|
|
2933
|
+
if (images.length > 0) {
|
|
2934
|
+
for (let i = 0; i < images.length; i++) {
|
|
2935
|
+
const imageMessage = new import_runtime_client_gql4.ImageMessage({
|
|
2936
|
+
format: images[i].contentType.replace("image/", ""),
|
|
2937
|
+
bytes: images[i].bytes,
|
|
2938
|
+
role: import_runtime_client_gql4.Role.User
|
|
2939
|
+
});
|
|
2940
|
+
yield appendMessage(imageMessage, { followUp: i === images.length - 1 });
|
|
2941
|
+
if (!firstMessage) {
|
|
2942
|
+
firstMessage = imageMessage;
|
|
2943
|
+
}
|
|
2634
2944
|
}
|
|
2635
2945
|
}
|
|
2636
|
-
|
|
2637
|
-
|
|
2946
|
+
if (!firstMessage) {
|
|
2947
|
+
return new import_runtime_client_gql4.TextMessage({ content: "", role: import_runtime_client_gql4.Role.User });
|
|
2948
|
+
}
|
|
2949
|
+
return firstMessage;
|
|
2638
2950
|
});
|
|
2639
2951
|
const messages = visibleMessages;
|
|
2640
2952
|
const { setMessages } = messagesContext;
|
|
@@ -2727,7 +3039,7 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
2727
3039
|
};
|
|
2728
3040
|
|
|
2729
3041
|
// src/components/chat/Modal.tsx
|
|
2730
|
-
var
|
|
3042
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
2731
3043
|
var CopilotModal = ({
|
|
2732
3044
|
instructions,
|
|
2733
3045
|
defaultOpen = false,
|
|
@@ -2761,19 +3073,19 @@ var CopilotModal = ({
|
|
|
2761
3073
|
onSetOpen == null ? void 0 : onSetOpen(open);
|
|
2762
3074
|
setOpenState(open);
|
|
2763
3075
|
};
|
|
2764
|
-
return /* @__PURE__ */ (0,
|
|
3076
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(ChatContextProvider, { icons, labels, open: openState, setOpen, children: [
|
|
2765
3077
|
children,
|
|
2766
|
-
/* @__PURE__ */ (0,
|
|
2767
|
-
/* @__PURE__ */ (0,
|
|
2768
|
-
/* @__PURE__ */ (0,
|
|
3078
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className, children: [
|
|
3079
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Button2, {}),
|
|
3080
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
2769
3081
|
Window2,
|
|
2770
3082
|
{
|
|
2771
3083
|
clickOutsideToClose,
|
|
2772
3084
|
shortcut,
|
|
2773
3085
|
hitEscapeToClose,
|
|
2774
3086
|
children: [
|
|
2775
|
-
/* @__PURE__ */ (0,
|
|
2776
|
-
/* @__PURE__ */ (0,
|
|
3087
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Header2, {}),
|
|
3088
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
2777
3089
|
CopilotChat,
|
|
2778
3090
|
{
|
|
2779
3091
|
instructions,
|
|
@@ -2800,17 +3112,17 @@ var CopilotModal = ({
|
|
|
2800
3112
|
};
|
|
2801
3113
|
|
|
2802
3114
|
// src/components/chat/Popup.tsx
|
|
2803
|
-
var
|
|
3115
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
2804
3116
|
function CopilotPopup(props) {
|
|
2805
3117
|
props = __spreadProps(__spreadValues({}, props), {
|
|
2806
3118
|
className: props.className ? props.className + " copilotKitPopup" : "copilotKitPopup"
|
|
2807
3119
|
});
|
|
2808
|
-
return /* @__PURE__ */ (0,
|
|
3120
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(CopilotModal, __spreadProps(__spreadValues({}, props), { children: props.children }));
|
|
2809
3121
|
}
|
|
2810
3122
|
|
|
2811
3123
|
// src/components/chat/Sidebar.tsx
|
|
2812
3124
|
var import_react15 = require("react");
|
|
2813
|
-
var
|
|
3125
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
2814
3126
|
function CopilotSidebar(props) {
|
|
2815
3127
|
props = __spreadProps(__spreadValues({}, props), {
|
|
2816
3128
|
className: props.className ? props.className + " copilotKitSidebar" : "copilotKitSidebar"
|
|
@@ -2823,7 +3135,7 @@ function CopilotSidebar(props) {
|
|
|
2823
3135
|
(_a = props.onSetOpen) == null ? void 0 : _a.call(props, open);
|
|
2824
3136
|
setExpandedClassName(open ? "sidebarExpanded" : "");
|
|
2825
3137
|
};
|
|
2826
|
-
return /* @__PURE__ */ (0,
|
|
3138
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: `copilotKitSidebarContentWrapper ${expandedClassName}`, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(CopilotModal, __spreadProps(__spreadValues(__spreadValues({}, props), { onSetOpen }), { children: props.children })) });
|
|
2827
3139
|
}
|
|
2828
3140
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2829
3141
|
0 && (module.exports = {
|
|
@@ -2833,6 +3145,7 @@ function CopilotSidebar(props) {
|
|
|
2833
3145
|
CopilotPopup,
|
|
2834
3146
|
CopilotSidebar,
|
|
2835
3147
|
Markdown,
|
|
3148
|
+
RenderImageMessage,
|
|
2836
3149
|
UserMessage,
|
|
2837
3150
|
shouldShowDevConsole,
|
|
2838
3151
|
useChatContext
|