@copilotkit/react-ui 1.8.0-next.6 → 1.8.0-next.8
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 +19 -0
- package/dist/{chunk-FBYETUFL.mjs → chunk-5M7ODWKH.mjs} +6 -12
- package/dist/chunk-5M7ODWKH.mjs.map +1 -0
- package/dist/{chunk-GBXUOB6L.mjs → chunk-7BXD65QV.mjs} +3 -3
- package/dist/{chunk-6H7IQRIU.mjs → chunk-DKYAA4DM.mjs} +2 -2
- package/dist/{chunk-DFHFPZQD.mjs → chunk-FGVMRZ5D.mjs} +9 -16
- package/dist/chunk-FGVMRZ5D.mjs.map +1 -0
- package/dist/{chunk-Z6YOBQUJ.mjs → chunk-HGA4N4ME.mjs} +8 -13
- package/dist/chunk-HGA4N4ME.mjs.map +1 -0
- package/dist/{chunk-FFNESJSG.mjs → chunk-N5QWMFFT.mjs} +2 -2
- package/dist/{chunk-YC4NBUGE.mjs → chunk-NRA3CFEE.mjs} +3 -3
- package/dist/chunk-NRA3CFEE.mjs.map +1 -0
- package/dist/{chunk-CGVOCLHN.mjs → chunk-P7S3E5UW.mjs} +2 -2
- package/dist/{chunk-OTPAZXVR.mjs → chunk-Q5V6S67N.mjs} +17 -6
- package/dist/chunk-Q5V6S67N.mjs.map +1 -0
- package/dist/{chunk-LYHZXHTJ.mjs → chunk-SNLHKLW3.mjs} +2 -2
- package/dist/{chunk-5JY5QJ2W.mjs → chunk-UN2E3HCK.mjs} +9 -3
- package/dist/chunk-UN2E3HCK.mjs.map +1 -0
- package/dist/{chunk-QS7UFQFD.mjs → chunk-Y5RNSFAD.mjs} +3 -3
- package/dist/{chunk-VC4NO5QZ.mjs → chunk-YOEL33HG.mjs} +2 -2
- package/dist/{chunk-GJME6MK4.mjs → chunk-ZY25LVYR.mjs} +2 -2
- package/dist/components/chat/Button.js.map +1 -1
- package/dist/components/chat/Button.mjs +2 -2
- package/dist/components/chat/Chat.d.ts +2 -11
- package/dist/components/chat/Chat.js +67 -76
- package/dist/components/chat/Chat.js.map +1 -1
- package/dist/components/chat/Chat.mjs +6 -7
- package/dist/components/chat/ChatContext.d.ts +15 -0
- package/dist/components/chat/ChatContext.js +67 -1
- package/dist/components/chat/ChatContext.js.map +1 -1
- package/dist/components/chat/ChatContext.mjs +1 -1
- package/dist/components/chat/Header.js +18 -7
- package/dist/components/chat/Header.js.map +1 -1
- package/dist/components/chat/Header.mjs +5 -5
- package/dist/components/chat/Input.js.map +1 -1
- package/dist/components/chat/Input.mjs +2 -2
- package/dist/components/chat/Messages.js.map +1 -1
- package/dist/components/chat/Messages.mjs +2 -2
- package/dist/components/chat/Modal.d.ts +1 -1
- package/dist/components/chat/Modal.js +92 -94
- package/dist/components/chat/Modal.js.map +1 -1
- package/dist/components/chat/Modal.mjs +13 -14
- package/dist/components/chat/Popup.js +94 -96
- package/dist/components/chat/Popup.js.map +1 -1
- package/dist/components/chat/Popup.mjs +14 -15
- package/dist/components/chat/Sidebar.js +94 -96
- package/dist/components/chat/Sidebar.js.map +1 -1
- package/dist/components/chat/Sidebar.mjs +14 -15
- package/dist/components/chat/Window.js.map +1 -1
- package/dist/components/chat/Window.mjs +2 -2
- package/dist/components/chat/index.d.ts +1 -1
- package/dist/components/chat/index.js +96 -98
- package/dist/components/chat/index.js.map +1 -1
- package/dist/components/chat/index.mjs +17 -18
- package/dist/components/chat/messages/AssistantMessage.js +4 -67
- package/dist/components/chat/messages/AssistantMessage.js.map +1 -1
- package/dist/components/chat/messages/AssistantMessage.mjs +2 -2
- package/dist/components/chat/props.d.ts +1 -5
- package/dist/components/chat/props.js.map +1 -1
- package/dist/components/dev-console/console.js +18 -7
- package/dist/components/dev-console/console.js.map +1 -1
- package/dist/components/dev-console/console.mjs +3 -3
- package/dist/components/dev-console/icons.js +16 -5
- package/dist/components/dev-console/icons.js.map +1 -1
- package/dist/components/dev-console/icons.mjs +1 -1
- package/dist/components/dev-console/index.js +18 -7
- package/dist/components/dev-console/index.js.map +1 -1
- package/dist/components/dev-console/index.mjs +3 -3
- package/dist/components/help-modal/index.js +2 -2
- package/dist/components/help-modal/index.js.map +1 -1
- package/dist/components/help-modal/index.mjs +1 -1
- package/dist/components/help-modal/modal.js +2 -2
- package/dist/components/help-modal/modal.js.map +1 -1
- package/dist/components/help-modal/modal.mjs +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.js +96 -98
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +17 -18
- package/dist/index.css +39 -34
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +96 -98
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +18 -19
- package/dist/types/css.d.ts +2 -0
- package/dist/types/css.js.map +1 -1
- package/package.json +4 -4
- package/src/components/chat/Chat.tsx +0 -16
- package/src/components/chat/ChatContext.tsx +25 -0
- package/src/components/chat/Modal.tsx +0 -6
- package/src/components/chat/messages/AssistantMessage.tsx +4 -5
- package/src/components/chat/props.ts +0 -5
- package/src/components/dev-console/icons.tsx +9 -2
- package/src/components/help-modal/modal.tsx +2 -2
- package/src/css/colors.css +3 -0
- package/src/css/console.css +44 -9
- package/src/styles.css +0 -1
- package/src/types/css.ts +2 -0
- package/dist/chunk-5JY5QJ2W.mjs.map +0 -1
- package/dist/chunk-DFHFPZQD.mjs.map +0 -1
- package/dist/chunk-FBYETUFL.mjs.map +0 -1
- package/dist/chunk-OTPAZXVR.mjs.map +0 -1
- package/dist/chunk-UZTZXMYS.mjs +0 -18
- package/dist/chunk-UZTZXMYS.mjs.map +0 -1
- package/dist/chunk-YC4NBUGE.mjs.map +0 -1
- package/dist/chunk-Z6YOBQUJ.mjs.map +0 -1
- package/dist/components/chat/Response.d.ts +0 -7
- package/dist/components/chat/Response.js +0 -64
- package/dist/components/chat/Response.js.map +0 -1
- package/dist/components/chat/Response.mjs +0 -10
- package/dist/components/chat/Response.mjs.map +0 -1
- package/src/components/chat/Response.tsx +0 -12
- package/src/css/response.css +0 -26
- /package/dist/{chunk-GBXUOB6L.mjs.map → chunk-7BXD65QV.mjs.map} +0 -0
- /package/dist/{chunk-6H7IQRIU.mjs.map → chunk-DKYAA4DM.mjs.map} +0 -0
- /package/dist/{chunk-FFNESJSG.mjs.map → chunk-N5QWMFFT.mjs.map} +0 -0
- /package/dist/{chunk-CGVOCLHN.mjs.map → chunk-P7S3E5UW.mjs.map} +0 -0
- /package/dist/{chunk-LYHZXHTJ.mjs.map → chunk-SNLHKLW3.mjs.map} +0 -0
- /package/dist/{chunk-QS7UFQFD.mjs.map → chunk-Y5RNSFAD.mjs.map} +0 -0
- /package/dist/{chunk-VC4NO5QZ.mjs.map → chunk-YOEL33HG.mjs.map} +0 -0
- /package/dist/{chunk-GJME6MK4.mjs.map → chunk-ZY25LVYR.mjs.map} +0 -0
|
@@ -368,7 +368,10 @@ var ChatContextProvider = ({
|
|
|
368
368
|
spinnerIcon: SpinnerIcon,
|
|
369
369
|
stopIcon: StopIcon,
|
|
370
370
|
regenerateIcon: RegenerateIcon,
|
|
371
|
-
pushToTalkIcon: MicrophoneIcon
|
|
371
|
+
pushToTalkIcon: MicrophoneIcon,
|
|
372
|
+
copyIcon: CopyIcon,
|
|
373
|
+
thumbsUpIcon: ThumbsUpIcon,
|
|
374
|
+
thumbsDownIcon: ThumbsDownIcon
|
|
372
375
|
}), icons),
|
|
373
376
|
[icons]
|
|
374
377
|
);
|
|
@@ -683,13 +686,24 @@ var ExclamationMarkIcon = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
|
683
686
|
) }) })
|
|
684
687
|
}
|
|
685
688
|
);
|
|
686
|
-
var ChevronDownIcon = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
687
|
-
"
|
|
689
|
+
var ChevronDownIcon = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
690
|
+
"svg",
|
|
688
691
|
{
|
|
689
|
-
|
|
690
|
-
|
|
692
|
+
width: "7px",
|
|
693
|
+
height: "4px",
|
|
694
|
+
viewBox: "0 0 7 4",
|
|
695
|
+
version: "1.1",
|
|
696
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
697
|
+
fill: "currentColor",
|
|
698
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("g", { id: "Page-1", stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("g", { id: "Group", fill: "currentColor", fillRule: "nonzero", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
699
|
+
"path",
|
|
700
|
+
{
|
|
701
|
+
d: "M3.71690723,3.90271086 C3.59268176,4.03242971 3.39143629,4.03242971 3.26721082,3.90271086 L0.0853966595,0.57605615 C-0.0314221035,0.444981627 -0.0279751448,0.240725043 0.0931934622,0.114040675 C0.214362069,-0.0126436935 0.409725445,-0.0162475626 0.535093061,0.105888951 L3.49205902,3.19746006 L6.44902499,0.105888951 C6.52834574,0.0168884389 6.64780588,-0.0197473458 6.7605411,0.0103538404 C6.87327633,0.0404550266 6.96130636,0.132492308 6.99009696,0.250359396 C7.01888756,0.368226483 6.98384687,0.493124608 6.89872139,0.57605615 L3.71690723,3.90271086 Z",
|
|
702
|
+
id: "Path"
|
|
703
|
+
}
|
|
704
|
+
) }) })
|
|
691
705
|
}
|
|
692
|
-
)
|
|
706
|
+
);
|
|
693
707
|
var CheckIcon2 = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
694
708
|
"svg",
|
|
695
709
|
{
|
|
@@ -772,11 +786,11 @@ function CopilotKitHelpModal() {
|
|
|
772
786
|
right: "-120px",
|
|
773
787
|
width: "380px"
|
|
774
788
|
},
|
|
775
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "
|
|
789
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "copilotKitHelpModal rounded-lg shadow-xl w-full p-4 flex-col relative", children: [
|
|
776
790
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
777
791
|
"button",
|
|
778
792
|
{
|
|
779
|
-
className: "absolute text-gray-400 hover:text-gray-600 focus:outline-none",
|
|
793
|
+
className: "copilotKitHelpModalCloseButton absolute text-gray-400 hover:text-gray-600 focus:outline-none",
|
|
780
794
|
style: { top: "10px", right: "10px" },
|
|
781
795
|
onClick: () => setShowHelpModal(false),
|
|
782
796
|
"aria-label": "Close",
|
|
@@ -1435,18 +1449,8 @@ var Input = ({ inProgress, onSend, isVisible = false, onStop }) => {
|
|
|
1435
1449
|
] }) });
|
|
1436
1450
|
};
|
|
1437
1451
|
|
|
1438
|
-
// src/components/chat/Response.tsx
|
|
1439
|
-
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
1440
|
-
var ResponseButton = ({ onClick, inProgress }) => {
|
|
1441
|
-
const context = useChatContext();
|
|
1442
|
-
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("button", { onClick, className: "copilotKitResponseButton", children: [
|
|
1443
|
-
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: inProgress ? context.icons.stopIcon : context.icons.regenerateIcon }),
|
|
1444
|
-
inProgress ? context.labels.stopGenerating : context.labels.regenerateResponse
|
|
1445
|
-
] });
|
|
1446
|
-
};
|
|
1447
|
-
|
|
1448
1452
|
// src/components/chat/messages/RenderTextMessage.tsx
|
|
1449
|
-
var
|
|
1453
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
1450
1454
|
function RenderTextMessage(props) {
|
|
1451
1455
|
const {
|
|
1452
1456
|
message,
|
|
@@ -1462,7 +1466,7 @@ function RenderTextMessage(props) {
|
|
|
1462
1466
|
} = props;
|
|
1463
1467
|
if (message.isTextMessage()) {
|
|
1464
1468
|
if (message.role === "user") {
|
|
1465
|
-
return /* @__PURE__ */ (0,
|
|
1469
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1466
1470
|
UserMessage2,
|
|
1467
1471
|
{
|
|
1468
1472
|
"data-message-role": "user",
|
|
@@ -1472,7 +1476,7 @@ function RenderTextMessage(props) {
|
|
|
1472
1476
|
index
|
|
1473
1477
|
);
|
|
1474
1478
|
} else if (message.role == "assistant") {
|
|
1475
|
-
return /* @__PURE__ */ (0,
|
|
1479
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1476
1480
|
AssistantMessage2,
|
|
1477
1481
|
{
|
|
1478
1482
|
"data-message-role": "assistant",
|
|
@@ -1495,7 +1499,7 @@ function RenderTextMessage(props) {
|
|
|
1495
1499
|
// src/components/chat/messages/RenderActionExecutionMessage.tsx
|
|
1496
1500
|
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
1497
1501
|
var import_react_core6 = require("@copilotkit/react-core");
|
|
1498
|
-
var
|
|
1502
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1499
1503
|
function RenderActionExecutionMessage(props) {
|
|
1500
1504
|
const { chatComponentsCache } = (0, import_react_core6.useCopilotContext)();
|
|
1501
1505
|
const { message, inProgress, index, isCurrentMessage, actionResult, AssistantMessage: AssistantMessage2 } = props;
|
|
@@ -1504,7 +1508,7 @@ function RenderActionExecutionMessage(props) {
|
|
|
1504
1508
|
const render = chatComponentsCache.current.actions[message.name] || chatComponentsCache.current.actions["*"];
|
|
1505
1509
|
if (typeof render === "string") {
|
|
1506
1510
|
if (isCurrentMessage && inProgress) {
|
|
1507
|
-
return /* @__PURE__ */ (0,
|
|
1511
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1508
1512
|
AssistantMessage2,
|
|
1509
1513
|
{
|
|
1510
1514
|
rawData: message,
|
|
@@ -1537,7 +1541,7 @@ function RenderActionExecutionMessage(props) {
|
|
|
1537
1541
|
return null;
|
|
1538
1542
|
}
|
|
1539
1543
|
if (typeof toRender === "string") {
|
|
1540
|
-
return /* @__PURE__ */ (0,
|
|
1544
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1541
1545
|
AssistantMessage2,
|
|
1542
1546
|
{
|
|
1543
1547
|
rawData: message,
|
|
@@ -1549,7 +1553,7 @@ function RenderActionExecutionMessage(props) {
|
|
|
1549
1553
|
index
|
|
1550
1554
|
);
|
|
1551
1555
|
} else {
|
|
1552
|
-
return /* @__PURE__ */ (0,
|
|
1556
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1553
1557
|
AssistantMessage2,
|
|
1554
1558
|
{
|
|
1555
1559
|
rawData: message,
|
|
@@ -1563,20 +1567,20 @@ function RenderActionExecutionMessage(props) {
|
|
|
1563
1567
|
}
|
|
1564
1568
|
} catch (e) {
|
|
1565
1569
|
console.error(`Error executing render function for action ${message.name}: ${e}`);
|
|
1566
|
-
return /* @__PURE__ */ (0,
|
|
1570
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1567
1571
|
AssistantMessage2,
|
|
1568
1572
|
{
|
|
1569
1573
|
rawData: message,
|
|
1570
1574
|
"data-message-role": "assistant",
|
|
1571
1575
|
isLoading: false,
|
|
1572
1576
|
isGenerating: false,
|
|
1573
|
-
subComponent: /* @__PURE__ */ (0,
|
|
1574
|
-
/* @__PURE__ */ (0,
|
|
1577
|
+
subComponent: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
|
|
1578
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("b", { children: [
|
|
1575
1579
|
"\u274C Error executing render function for action ",
|
|
1576
1580
|
message.name,
|
|
1577
1581
|
":"
|
|
1578
1582
|
] }),
|
|
1579
|
-
/* @__PURE__ */ (0,
|
|
1583
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("pre", { children: e instanceof Error ? e.message : String(e) })
|
|
1580
1584
|
] })
|
|
1581
1585
|
},
|
|
1582
1586
|
index
|
|
@@ -1586,7 +1590,7 @@ function RenderActionExecutionMessage(props) {
|
|
|
1586
1590
|
} else if (!inProgress || !isCurrentMessage) {
|
|
1587
1591
|
return null;
|
|
1588
1592
|
} else {
|
|
1589
|
-
return /* @__PURE__ */ (0,
|
|
1593
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1590
1594
|
AssistantMessage2,
|
|
1591
1595
|
{
|
|
1592
1596
|
rawData: message,
|
|
@@ -1601,11 +1605,11 @@ function RenderActionExecutionMessage(props) {
|
|
|
1601
1605
|
}
|
|
1602
1606
|
|
|
1603
1607
|
// src/components/chat/messages/RenderResultMessage.tsx
|
|
1604
|
-
var
|
|
1608
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
1605
1609
|
function RenderResultMessage(props) {
|
|
1606
1610
|
const { message, inProgress, index, isCurrentMessage, AssistantMessage: AssistantMessage2 } = props;
|
|
1607
1611
|
if (message.isResultMessage() && inProgress && isCurrentMessage) {
|
|
1608
|
-
return /* @__PURE__ */ (0,
|
|
1612
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1609
1613
|
AssistantMessage2,
|
|
1610
1614
|
{
|
|
1611
1615
|
"data-message-role": "assistant",
|
|
@@ -1622,7 +1626,7 @@ function RenderResultMessage(props) {
|
|
|
1622
1626
|
|
|
1623
1627
|
// src/components/chat/messages/RenderAgentStateMessage.tsx
|
|
1624
1628
|
var import_react_core7 = require("@copilotkit/react-core");
|
|
1625
|
-
var
|
|
1629
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
1626
1630
|
function RenderAgentStateMessage(props) {
|
|
1627
1631
|
const { chatComponentsCache } = (0, import_react_core7.useCopilotContext)();
|
|
1628
1632
|
const { message, inProgress, index, isCurrentMessage, AssistantMessage: AssistantMessage2 } = props;
|
|
@@ -1634,7 +1638,7 @@ function RenderAgentStateMessage(props) {
|
|
|
1634
1638
|
if (render) {
|
|
1635
1639
|
if (typeof render === "string") {
|
|
1636
1640
|
if (isCurrentMessage && inProgress) {
|
|
1637
|
-
return /* @__PURE__ */ (0,
|
|
1641
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1638
1642
|
AssistantMessage2,
|
|
1639
1643
|
{
|
|
1640
1644
|
rawData: message,
|
|
@@ -1660,7 +1664,7 @@ function RenderAgentStateMessage(props) {
|
|
|
1660
1664
|
return null;
|
|
1661
1665
|
}
|
|
1662
1666
|
if (!toRender && isCurrentMessage && inProgress) {
|
|
1663
|
-
return /* @__PURE__ */ (0,
|
|
1667
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1664
1668
|
AssistantMessage2,
|
|
1665
1669
|
{
|
|
1666
1670
|
"data-message-role": "assistant",
|
|
@@ -1674,7 +1678,7 @@ function RenderAgentStateMessage(props) {
|
|
|
1674
1678
|
return null;
|
|
1675
1679
|
}
|
|
1676
1680
|
if (typeof toRender === "string") {
|
|
1677
|
-
return /* @__PURE__ */ (0,
|
|
1681
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1678
1682
|
AssistantMessage2,
|
|
1679
1683
|
{
|
|
1680
1684
|
rawData: message,
|
|
@@ -1686,7 +1690,7 @@ function RenderAgentStateMessage(props) {
|
|
|
1686
1690
|
index
|
|
1687
1691
|
);
|
|
1688
1692
|
} else {
|
|
1689
|
-
return /* @__PURE__ */ (0,
|
|
1693
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1690
1694
|
AssistantMessage2,
|
|
1691
1695
|
{
|
|
1692
1696
|
rawData: message,
|
|
@@ -1702,7 +1706,7 @@ function RenderAgentStateMessage(props) {
|
|
|
1702
1706
|
} else if (!inProgress || !isCurrentMessage) {
|
|
1703
1707
|
return null;
|
|
1704
1708
|
} else {
|
|
1705
|
-
return /* @__PURE__ */ (0,
|
|
1709
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1706
1710
|
AssistantMessage2,
|
|
1707
1711
|
{
|
|
1708
1712
|
rawData: message,
|
|
@@ -1747,7 +1751,7 @@ function useCopyToClipboard({ timeout = 2e3 }) {
|
|
|
1747
1751
|
}
|
|
1748
1752
|
|
|
1749
1753
|
// src/components/chat/CodeBlock.tsx
|
|
1750
|
-
var
|
|
1754
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
1751
1755
|
var programmingLanguages = {
|
|
1752
1756
|
javascript: ".js",
|
|
1753
1757
|
python: ".py",
|
|
@@ -1810,15 +1814,15 @@ var CodeBlock = (0, import_react10.memo)(({ language, value }) => {
|
|
|
1810
1814
|
return;
|
|
1811
1815
|
copyToClipboard(value);
|
|
1812
1816
|
};
|
|
1813
|
-
return /* @__PURE__ */ (0,
|
|
1814
|
-
/* @__PURE__ */ (0,
|
|
1815
|
-
/* @__PURE__ */ (0,
|
|
1816
|
-
/* @__PURE__ */ (0,
|
|
1817
|
-
/* @__PURE__ */ (0,
|
|
1818
|
-
/* @__PURE__ */ (0,
|
|
1817
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitCodeBlock", children: [
|
|
1818
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitCodeBlockToolbar", children: [
|
|
1819
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "copilotKitCodeBlockToolbarLanguage", children: language }),
|
|
1820
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitCodeBlockToolbarButtons", children: [
|
|
1821
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("button", { className: "copilotKitCodeBlockToolbarButton", onClick: downloadAsFile, children: DownloadIcon }),
|
|
1822
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("button", { className: "copilotKitCodeBlockToolbarButton", onClick: onCopy, children: isCopied ? CheckIcon : CopyIcon })
|
|
1819
1823
|
] })
|
|
1820
1824
|
] }),
|
|
1821
|
-
/* @__PURE__ */ (0,
|
|
1825
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1822
1826
|
import_react_syntax_highlighter.Prism,
|
|
1823
1827
|
{
|
|
1824
1828
|
language,
|
|
@@ -2121,18 +2125,18 @@ var highlightStyle = {
|
|
|
2121
2125
|
// src/components/chat/Markdown.tsx
|
|
2122
2126
|
var import_remark_gfm = __toESM(require("remark-gfm"));
|
|
2123
2127
|
var import_remark_math = __toESM(require("remark-math"));
|
|
2124
|
-
var
|
|
2128
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
2125
2129
|
var MemoizedReactMarkdown = (0, import_react11.memo)(
|
|
2126
2130
|
import_react_markdown.default,
|
|
2127
2131
|
(prevProps, nextProps) => prevProps.children === nextProps.children && prevProps.className === nextProps.className
|
|
2128
2132
|
);
|
|
2129
2133
|
var Markdown = ({ content }) => {
|
|
2130
|
-
return /* @__PURE__ */ (0,
|
|
2134
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "copilotKitMarkdown", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(MemoizedReactMarkdown, { components, remarkPlugins: [import_remark_gfm.default, import_remark_math.default], children: content }) });
|
|
2131
2135
|
};
|
|
2132
2136
|
var components = {
|
|
2133
2137
|
a(_a) {
|
|
2134
2138
|
var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
|
|
2135
|
-
return /* @__PURE__ */ (0,
|
|
2139
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
2136
2140
|
"a",
|
|
2137
2141
|
__spreadProps(__spreadValues({
|
|
2138
2142
|
style: { color: "blue", textDecoration: "underline" }
|
|
@@ -2147,7 +2151,7 @@ var components = {
|
|
|
2147
2151
|
var _d = _c, { children, className, inline } = _d, props = __objRest(_d, ["children", "className", "inline"]);
|
|
2148
2152
|
if (children.length) {
|
|
2149
2153
|
if (children[0] == "\u258D") {
|
|
2150
|
-
return /* @__PURE__ */ (0,
|
|
2154
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
2151
2155
|
"span",
|
|
2152
2156
|
{
|
|
2153
2157
|
style: {
|
|
@@ -2162,9 +2166,9 @@ var components = {
|
|
|
2162
2166
|
}
|
|
2163
2167
|
const match = /language-(\w+)/.exec(className || "");
|
|
2164
2168
|
if (inline) {
|
|
2165
|
-
return /* @__PURE__ */ (0,
|
|
2169
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("code", __spreadProps(__spreadValues({ className }, props), { children }));
|
|
2166
2170
|
}
|
|
2167
|
-
return /* @__PURE__ */ (0,
|
|
2171
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
2168
2172
|
CodeBlock,
|
|
2169
2173
|
__spreadValues({
|
|
2170
2174
|
language: match && match[1] || "",
|
|
@@ -2177,7 +2181,7 @@ var components = {
|
|
|
2177
2181
|
|
|
2178
2182
|
// src/components/chat/messages/AssistantMessage.tsx
|
|
2179
2183
|
var import_react12 = require("react");
|
|
2180
|
-
var
|
|
2184
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
2181
2185
|
var AssistantMessage = (props) => {
|
|
2182
2186
|
const { icons, labels } = useChatContext();
|
|
2183
2187
|
const {
|
|
@@ -2218,77 +2222,77 @@ var AssistantMessage = (props) => {
|
|
|
2218
2222
|
onThumbsDown(message);
|
|
2219
2223
|
}
|
|
2220
2224
|
};
|
|
2221
|
-
const LoadingIcon = () => /* @__PURE__ */ (0,
|
|
2222
|
-
return /* @__PURE__ */ (0,
|
|
2223
|
-
(message || isLoading) && /* @__PURE__ */ (0,
|
|
2224
|
-
message && /* @__PURE__ */ (0,
|
|
2225
|
-
isLoading && /* @__PURE__ */ (0,
|
|
2226
|
-
message && !isLoading && /* @__PURE__ */ (0,
|
|
2225
|
+
const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { children: icons.activityIcon });
|
|
2226
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
|
|
2227
|
+
(message || isLoading) && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
|
|
2228
|
+
message && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Markdown, { content: message || "" }),
|
|
2229
|
+
isLoading && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(LoadingIcon, {}),
|
|
2230
|
+
message && !isLoading && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
2227
2231
|
"div",
|
|
2228
2232
|
{
|
|
2229
2233
|
className: `copilotKitMessageControls ${isCurrentMessage ? "currentMessage" : ""}`,
|
|
2230
2234
|
children: [
|
|
2231
|
-
/* @__PURE__ */ (0,
|
|
2235
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2232
2236
|
"button",
|
|
2233
2237
|
{
|
|
2234
2238
|
className: "copilotKitMessageControlButton",
|
|
2235
2239
|
onClick: handleRegenerate,
|
|
2236
2240
|
"aria-label": labels.regenerateResponse,
|
|
2237
2241
|
title: labels.regenerateResponse,
|
|
2238
|
-
children:
|
|
2242
|
+
children: icons.regenerateIcon
|
|
2239
2243
|
}
|
|
2240
2244
|
),
|
|
2241
|
-
/* @__PURE__ */ (0,
|
|
2245
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2242
2246
|
"button",
|
|
2243
2247
|
{
|
|
2244
2248
|
className: "copilotKitMessageControlButton",
|
|
2245
2249
|
onClick: handleCopy,
|
|
2246
2250
|
"aria-label": labels.copyToClipboard,
|
|
2247
2251
|
title: labels.copyToClipboard,
|
|
2248
|
-
children: copied ? /* @__PURE__ */ (0,
|
|
2252
|
+
children: copied ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { style: { fontSize: "10px", fontWeight: "bold" }, children: "\u2713" }) : icons.copyIcon
|
|
2249
2253
|
}
|
|
2250
2254
|
),
|
|
2251
|
-
onThumbsUp && /* @__PURE__ */ (0,
|
|
2255
|
+
onThumbsUp && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2252
2256
|
"button",
|
|
2253
2257
|
{
|
|
2254
2258
|
className: "copilotKitMessageControlButton",
|
|
2255
2259
|
onClick: handleThumbsUp,
|
|
2256
2260
|
"aria-label": labels.thumbsUp,
|
|
2257
2261
|
title: labels.thumbsUp,
|
|
2258
|
-
children:
|
|
2262
|
+
children: icons.thumbsUpIcon
|
|
2259
2263
|
}
|
|
2260
2264
|
),
|
|
2261
|
-
onThumbsDown && /* @__PURE__ */ (0,
|
|
2265
|
+
onThumbsDown && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2262
2266
|
"button",
|
|
2263
2267
|
{
|
|
2264
2268
|
className: "copilotKitMessageControlButton",
|
|
2265
2269
|
onClick: handleThumbsDown,
|
|
2266
2270
|
"aria-label": labels.thumbsDown,
|
|
2267
2271
|
title: labels.thumbsDown,
|
|
2268
|
-
children:
|
|
2272
|
+
children: icons.thumbsDownIcon
|
|
2269
2273
|
}
|
|
2270
2274
|
)
|
|
2271
2275
|
]
|
|
2272
2276
|
}
|
|
2273
2277
|
)
|
|
2274
2278
|
] }),
|
|
2275
|
-
/* @__PURE__ */ (0,
|
|
2279
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { style: { marginBottom: "0.5rem" }, children: subComponent })
|
|
2276
2280
|
] });
|
|
2277
2281
|
};
|
|
2278
2282
|
|
|
2279
2283
|
// src/components/chat/messages/UserMessage.tsx
|
|
2280
|
-
var
|
|
2284
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
2281
2285
|
var UserMessage = (props) => {
|
|
2282
|
-
return /* @__PURE__ */ (0,
|
|
2286
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: props.message });
|
|
2283
2287
|
};
|
|
2284
2288
|
|
|
2285
2289
|
// src/components/chat/Suggestion.tsx
|
|
2286
2290
|
var import_react_core8 = require("@copilotkit/react-core");
|
|
2287
2291
|
var import_shared2 = require("@copilotkit/shared");
|
|
2288
2292
|
var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
|
|
2289
|
-
var
|
|
2293
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
2290
2294
|
function Suggestion({ title, message, onClick, partial, className }) {
|
|
2291
|
-
return /* @__PURE__ */ (0,
|
|
2295
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2292
2296
|
"button",
|
|
2293
2297
|
{
|
|
2294
2298
|
disabled: partial,
|
|
@@ -2298,7 +2302,7 @@ function Suggestion({ title, message, onClick, partial, className }) {
|
|
|
2298
2302
|
},
|
|
2299
2303
|
className: className || (partial ? "suggestion loading" : "suggestion"),
|
|
2300
2304
|
"data-test-id": "suggestion",
|
|
2301
|
-
children: partial ? SmallSpinnerIcon : /* @__PURE__ */ (0,
|
|
2305
|
+
children: partial ? SmallSpinnerIcon : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: title })
|
|
2302
2306
|
}
|
|
2303
2307
|
);
|
|
2304
2308
|
}
|
|
@@ -2378,12 +2382,11 @@ var import_react_core9 = require("@copilotkit/react-core");
|
|
|
2378
2382
|
var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
|
|
2379
2383
|
var import_shared3 = require("@copilotkit/shared");
|
|
2380
2384
|
var import_react_core10 = require("@copilotkit/react-core");
|
|
2381
|
-
var
|
|
2385
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
2382
2386
|
function CopilotChat({
|
|
2383
2387
|
instructions,
|
|
2384
2388
|
onSubmitMessage,
|
|
2385
2389
|
makeSystemMessage,
|
|
2386
|
-
showResponseButton = true,
|
|
2387
2390
|
onInProgress,
|
|
2388
2391
|
onStopGeneration,
|
|
2389
2392
|
onReloadMessages,
|
|
@@ -2397,7 +2400,6 @@ function CopilotChat({
|
|
|
2397
2400
|
RenderAgentStateMessage: RenderAgentStateMessage2 = RenderAgentStateMessage,
|
|
2398
2401
|
RenderResultMessage: RenderResultMessage2 = RenderResultMessage,
|
|
2399
2402
|
Input: Input2 = Input,
|
|
2400
|
-
ResponseButton: ResponseButton2 = ResponseButton,
|
|
2401
2403
|
className,
|
|
2402
2404
|
icons,
|
|
2403
2405
|
labels,
|
|
@@ -2445,8 +2447,8 @@ function CopilotChat({
|
|
|
2445
2447
|
onCopy(message);
|
|
2446
2448
|
}
|
|
2447
2449
|
};
|
|
2448
|
-
return /* @__PURE__ */ (0,
|
|
2449
|
-
/* @__PURE__ */ (0,
|
|
2450
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
|
|
2451
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
2450
2452
|
Messages2,
|
|
2451
2453
|
{
|
|
2452
2454
|
AssistantMessage: AssistantMessage2,
|
|
@@ -2461,7 +2463,7 @@ function CopilotChat({
|
|
|
2461
2463
|
onCopy: handleCopy,
|
|
2462
2464
|
onThumbsUp,
|
|
2463
2465
|
onThumbsDown,
|
|
2464
|
-
children: currentSuggestions.length > 0 && /* @__PURE__ */ (0,
|
|
2466
|
+
children: currentSuggestions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "suggestions", children: currentSuggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
2465
2467
|
Suggestion,
|
|
2466
2468
|
{
|
|
2467
2469
|
title: suggestion.title,
|
|
@@ -2474,7 +2476,7 @@ function CopilotChat({
|
|
|
2474
2476
|
)) })
|
|
2475
2477
|
}
|
|
2476
2478
|
),
|
|
2477
|
-
/* @__PURE__ */ (0,
|
|
2479
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
2478
2480
|
Input2,
|
|
2479
2481
|
{
|
|
2480
2482
|
inProgress: isLoading,
|
|
@@ -2493,10 +2495,10 @@ function WrappedCopilotChat({
|
|
|
2493
2495
|
}) {
|
|
2494
2496
|
const chatContext = import_react13.default.useContext(ChatContext);
|
|
2495
2497
|
if (!chatContext) {
|
|
2496
|
-
return /* @__PURE__ */ (0,
|
|
2497
|
-
}, children: /* @__PURE__ */ (0,
|
|
2498
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ChatContextProvider, { icons, labels, open: true, setOpen: () => {
|
|
2499
|
+
}, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: `copilotKitChat ${className}`, children }) });
|
|
2498
2500
|
}
|
|
2499
|
-
return /* @__PURE__ */ (0,
|
|
2501
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_jsx_runtime22.Fragment, { children });
|
|
2500
2502
|
}
|
|
2501
2503
|
var SUGGESTIONS_DEBOUNCE_TIMEOUT = 1e3;
|
|
2502
2504
|
var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
|
|
@@ -2657,7 +2659,7 @@ var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onS
|
|
|
2657
2659
|
};
|
|
2658
2660
|
|
|
2659
2661
|
// src/components/chat/Modal.tsx
|
|
2660
|
-
var
|
|
2662
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
2661
2663
|
var CopilotModal = ({
|
|
2662
2664
|
instructions,
|
|
2663
2665
|
defaultOpen = false,
|
|
@@ -2671,14 +2673,12 @@ var CopilotModal = ({
|
|
|
2671
2673
|
icons,
|
|
2672
2674
|
labels,
|
|
2673
2675
|
makeSystemMessage,
|
|
2674
|
-
showResponseButton = true,
|
|
2675
2676
|
onInProgress,
|
|
2676
2677
|
Window: Window2 = Window,
|
|
2677
2678
|
Button: Button2 = Button,
|
|
2678
2679
|
Header: Header2 = Header,
|
|
2679
2680
|
Messages: Messages2 = Messages,
|
|
2680
2681
|
Input: Input2 = Input,
|
|
2681
|
-
ResponseButton: ResponseButton2 = ResponseButton,
|
|
2682
2682
|
AssistantMessage: AssistantMessage2 = AssistantMessage,
|
|
2683
2683
|
UserMessage: UserMessage2 = UserMessage,
|
|
2684
2684
|
className,
|
|
@@ -2689,19 +2689,19 @@ var CopilotModal = ({
|
|
|
2689
2689
|
onSetOpen == null ? void 0 : onSetOpen(open);
|
|
2690
2690
|
setOpenState(open);
|
|
2691
2691
|
};
|
|
2692
|
-
return /* @__PURE__ */ (0,
|
|
2692
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(ChatContextProvider, { icons, labels, open: openState, setOpen, children: [
|
|
2693
2693
|
children,
|
|
2694
|
-
/* @__PURE__ */ (0,
|
|
2695
|
-
/* @__PURE__ */ (0,
|
|
2696
|
-
/* @__PURE__ */ (0,
|
|
2694
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className, children: [
|
|
2695
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Button2, {}),
|
|
2696
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
2697
2697
|
Window2,
|
|
2698
2698
|
{
|
|
2699
2699
|
clickOutsideToClose,
|
|
2700
2700
|
shortcut,
|
|
2701
2701
|
hitEscapeToClose,
|
|
2702
2702
|
children: [
|
|
2703
|
-
/* @__PURE__ */ (0,
|
|
2704
|
-
/* @__PURE__ */ (0,
|
|
2703
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Header2, {}),
|
|
2704
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2705
2705
|
CopilotChat,
|
|
2706
2706
|
{
|
|
2707
2707
|
instructions,
|
|
@@ -2709,11 +2709,9 @@ var CopilotModal = ({
|
|
|
2709
2709
|
onStopGeneration,
|
|
2710
2710
|
onReloadMessages,
|
|
2711
2711
|
makeSystemMessage,
|
|
2712
|
-
showResponseButton,
|
|
2713
2712
|
onInProgress,
|
|
2714
2713
|
Messages: Messages2,
|
|
2715
2714
|
Input: Input2,
|
|
2716
|
-
ResponseButton: ResponseButton2,
|
|
2717
2715
|
AssistantMessage: AssistantMessage2,
|
|
2718
2716
|
UserMessage: UserMessage2
|
|
2719
2717
|
}
|
|
@@ -2726,17 +2724,17 @@ var CopilotModal = ({
|
|
|
2726
2724
|
};
|
|
2727
2725
|
|
|
2728
2726
|
// src/components/chat/Popup.tsx
|
|
2729
|
-
var
|
|
2727
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
2730
2728
|
function CopilotPopup(props) {
|
|
2731
2729
|
props = __spreadProps(__spreadValues({}, props), {
|
|
2732
2730
|
className: props.className ? props.className + " copilotKitPopup" : "copilotKitPopup"
|
|
2733
2731
|
});
|
|
2734
|
-
return /* @__PURE__ */ (0,
|
|
2732
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(CopilotModal, __spreadProps(__spreadValues({}, props), { children: props.children }));
|
|
2735
2733
|
}
|
|
2736
2734
|
|
|
2737
2735
|
// src/components/chat/Sidebar.tsx
|
|
2738
2736
|
var import_react15 = require("react");
|
|
2739
|
-
var
|
|
2737
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
2740
2738
|
function CopilotSidebar(props) {
|
|
2741
2739
|
props = __spreadProps(__spreadValues({}, props), {
|
|
2742
2740
|
className: props.className ? props.className + " copilotKitSidebar" : "copilotKitSidebar"
|
|
@@ -2749,7 +2747,7 @@ function CopilotSidebar(props) {
|
|
|
2749
2747
|
(_a = props.onSetOpen) == null ? void 0 : _a.call(props, open);
|
|
2750
2748
|
setExpandedClassName(open ? "sidebarExpanded" : "");
|
|
2751
2749
|
};
|
|
2752
|
-
return /* @__PURE__ */ (0,
|
|
2750
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: `copilotKitSidebarContentWrapper ${expandedClassName}`, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(CopilotModal, __spreadProps(__spreadValues(__spreadValues({}, props), { onSetOpen }), { children: props.children })) });
|
|
2753
2751
|
}
|
|
2754
2752
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2755
2753
|
0 && (module.exports = {
|