@copilotkit/react-core 1.9.2-next.8 → 1.9.2-next.9
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 +9 -0
- package/dist/{chunk-CCESTGAM.mjs → chunk-3OQM3NEK.mjs} +2 -2
- package/dist/{chunk-T4ZKC4X4.mjs → chunk-3YHYWAHK.mjs} +2 -2
- package/dist/{chunk-ISYBUDL4.mjs → chunk-55QZ2SVJ.mjs} +4 -5
- package/dist/chunk-55QZ2SVJ.mjs.map +1 -0
- package/dist/chunk-57K2ZJ5F.mjs +348 -0
- package/dist/chunk-57K2ZJ5F.mjs.map +1 -0
- package/dist/{chunk-ZHEEHGLS.mjs → chunk-ADIITPD2.mjs} +8 -5
- package/dist/{chunk-ZHEEHGLS.mjs.map → chunk-ADIITPD2.mjs.map} +1 -1
- package/dist/{chunk-S4BOATBG.mjs → chunk-EF5BNM34.mjs} +2 -2
- package/dist/{chunk-I4JPQECN.mjs → chunk-EXU7GWLC.mjs} +4 -4
- package/dist/{chunk-7G6RR4HE.mjs → chunk-FXK6RQIN.mjs} +2 -2
- package/dist/{chunk-JXF732XG.mjs → chunk-G7LYGERN.mjs} +80 -13
- package/dist/chunk-G7LYGERN.mjs.map +1 -0
- package/dist/{chunk-VJCHRQ7Q.mjs → chunk-JDEWNLNP.mjs} +37 -4
- package/dist/chunk-JDEWNLNP.mjs.map +1 -0
- package/dist/{chunk-JHIZ5HAI.mjs → chunk-NQVCZQ5T.mjs} +3 -3
- package/dist/{chunk-VF6UPRKM.mjs → chunk-OF4SZTLL.mjs} +3 -3
- package/dist/{chunk-QQZLIEXK.mjs → chunk-SJJNFYGQ.mjs} +3 -3
- package/dist/{chunk-RN3ZRHI7.mjs → chunk-WOGURSAL.mjs} +5 -5
- package/dist/chunk-YAF2LATQ.mjs +310 -0
- package/dist/chunk-YAF2LATQ.mjs.map +1 -0
- package/dist/components/copilot-provider/copilot-messages.js +35 -2
- package/dist/components/copilot-provider/copilot-messages.js.map +1 -1
- package/dist/components/copilot-provider/copilot-messages.mjs +2 -2
- package/dist/components/copilot-provider/copilotkit.js +289 -234
- package/dist/components/copilot-provider/copilotkit.js.map +1 -1
- package/dist/components/copilot-provider/copilotkit.mjs +7 -7
- package/dist/components/copilot-provider/index.js +289 -234
- package/dist/components/copilot-provider/index.js.map +1 -1
- package/dist/components/copilot-provider/index.mjs +7 -7
- package/dist/components/error-boundary/error-boundary.js +135 -146
- package/dist/components/error-boundary/error-boundary.js.map +1 -1
- package/dist/components/error-boundary/error-boundary.mjs +4 -4
- package/dist/components/error-boundary/error-utils.js.map +1 -1
- package/dist/components/error-boundary/error-utils.mjs +2 -2
- package/dist/components/index.js +289 -234
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +7 -7
- package/dist/components/toast/toast-provider.js +118 -85
- package/dist/components/toast/toast-provider.js.map +1 -1
- package/dist/components/toast/toast-provider.mjs +1 -1
- package/dist/components/usage-banner.js +135 -146
- package/dist/components/usage-banner.js.map +1 -1
- package/dist/components/usage-banner.mjs +1 -1
- package/dist/hooks/index.js +75 -10
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +14 -14
- package/dist/hooks/use-chat.js +72 -10
- package/dist/hooks/use-chat.js.map +1 -1
- package/dist/hooks/use-chat.mjs +4 -4
- package/dist/hooks/use-coagent-state-render.js.map +1 -1
- package/dist/hooks/use-coagent-state-render.mjs +2 -2
- package/dist/hooks/use-coagent.js +75 -10
- package/dist/hooks/use-coagent.js.map +1 -1
- package/dist/hooks/use-coagent.mjs +10 -10
- package/dist/hooks/use-copilot-action.js.map +1 -1
- package/dist/hooks/use-copilot-action.mjs +3 -3
- package/dist/hooks/use-copilot-authenticated-action.js.map +1 -1
- package/dist/hooks/use-copilot-authenticated-action.mjs +4 -4
- package/dist/hooks/use-copilot-chat.js +72 -10
- package/dist/hooks/use-copilot-chat.js.map +1 -1
- package/dist/hooks/use-copilot-chat.mjs +9 -9
- package/dist/hooks/use-copilot-runtime-client.js +1 -1
- package/dist/hooks/use-copilot-runtime-client.js.map +1 -1
- package/dist/hooks/use-copilot-runtime-client.mjs +2 -2
- package/dist/hooks/use-langgraph-interrupt.js +72 -10
- package/dist/hooks/use-langgraph-interrupt.js.map +1 -1
- package/dist/hooks/use-langgraph-interrupt.mjs +10 -10
- package/dist/index.js +363 -243
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +15 -15
- package/dist/lib/copilot-task.mjs +8 -8
- package/dist/lib/index.mjs +8 -8
- package/dist/utils/extract.mjs +7 -7
- package/dist/utils/index.mjs +7 -7
- package/package.json +3 -3
- package/src/components/copilot-provider/copilot-messages.tsx +42 -3
- package/src/components/toast/toast-provider.tsx +49 -24
- package/src/components/usage-banner.tsx +144 -147
- package/src/hooks/use-chat.ts +106 -6
- package/src/hooks/use-coagent.ts +5 -0
- package/src/hooks/use-copilot-runtime-client.ts +2 -39
- package/dist/chunk-HD2GE3DK.mjs +0 -359
- package/dist/chunk-HD2GE3DK.mjs.map +0 -1
- package/dist/chunk-ISYBUDL4.mjs.map +0 -1
- package/dist/chunk-JXF732XG.mjs.map +0 -1
- package/dist/chunk-VJCHRQ7Q.mjs.map +0 -1
- package/dist/chunk-VRXANACV.mjs +0 -277
- package/dist/chunk-VRXANACV.mjs.map +0 -1
- /package/dist/{chunk-CCESTGAM.mjs.map → chunk-3OQM3NEK.mjs.map} +0 -0
- /package/dist/{chunk-T4ZKC4X4.mjs.map → chunk-3YHYWAHK.mjs.map} +0 -0
- /package/dist/{chunk-S4BOATBG.mjs.map → chunk-EF5BNM34.mjs.map} +0 -0
- /package/dist/{chunk-I4JPQECN.mjs.map → chunk-EXU7GWLC.mjs.map} +0 -0
- /package/dist/{chunk-7G6RR4HE.mjs.map → chunk-FXK6RQIN.mjs.map} +0 -0
- /package/dist/{chunk-JHIZ5HAI.mjs.map → chunk-NQVCZQ5T.mjs.map} +0 -0
- /package/dist/{chunk-VF6UPRKM.mjs.map → chunk-OF4SZTLL.mjs.map} +0 -0
- /package/dist/{chunk-QQZLIEXK.mjs.map → chunk-SJJNFYGQ.mjs.map} +0 -0
- /package/dist/{chunk-RN3ZRHI7.mjs.map → chunk-WOGURSAL.mjs.map} +0 -0
package/dist/chunk-VRXANACV.mjs
DELETED
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
__spreadProps,
|
|
3
|
-
__spreadValues
|
|
4
|
-
} from "./chunk-SKC7AJIV.mjs";
|
|
5
|
-
|
|
6
|
-
// src/components/toast/toast-provider.tsx
|
|
7
|
-
import { createContext, useContext, useState, useCallback } from "react";
|
|
8
|
-
import { Severity } from "@copilotkit/shared";
|
|
9
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
-
var ToastContext = createContext(void 0);
|
|
11
|
-
function getErrorSeverity(error) {
|
|
12
|
-
if (error.severity) {
|
|
13
|
-
switch (error.severity) {
|
|
14
|
-
case Severity.CRITICAL:
|
|
15
|
-
return "critical";
|
|
16
|
-
case Severity.WARNING:
|
|
17
|
-
return "warning";
|
|
18
|
-
case Severity.INFO:
|
|
19
|
-
return "info";
|
|
20
|
-
default:
|
|
21
|
-
return "info";
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
const message = error.message.toLowerCase();
|
|
25
|
-
if (message.includes("api key") || message.includes("401") || message.includes("unauthorized") || message.includes("authentication") || message.includes("incorrect api key")) {
|
|
26
|
-
return "critical";
|
|
27
|
-
}
|
|
28
|
-
return "info";
|
|
29
|
-
}
|
|
30
|
-
function getErrorColors(severity) {
|
|
31
|
-
switch (severity) {
|
|
32
|
-
case "critical":
|
|
33
|
-
return {
|
|
34
|
-
background: "#fee2e2",
|
|
35
|
-
border: "#dc2626",
|
|
36
|
-
text: "#7f1d1d",
|
|
37
|
-
icon: "#dc2626"
|
|
38
|
-
};
|
|
39
|
-
case "warning":
|
|
40
|
-
return {
|
|
41
|
-
background: "#fef3c7",
|
|
42
|
-
border: "#d97706",
|
|
43
|
-
text: "#78350f",
|
|
44
|
-
icon: "#d97706"
|
|
45
|
-
};
|
|
46
|
-
case "info":
|
|
47
|
-
return {
|
|
48
|
-
background: "#dbeafe",
|
|
49
|
-
border: "#2563eb",
|
|
50
|
-
text: "#1e3a8a",
|
|
51
|
-
icon: "#2563eb"
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
function useToast() {
|
|
56
|
-
const context = useContext(ToastContext);
|
|
57
|
-
if (!context) {
|
|
58
|
-
throw new Error("useToast must be used within a ToastProvider");
|
|
59
|
-
}
|
|
60
|
-
return context;
|
|
61
|
-
}
|
|
62
|
-
function ToastProvider({
|
|
63
|
-
enabled,
|
|
64
|
-
children
|
|
65
|
-
}) {
|
|
66
|
-
const [toasts, setToasts] = useState([]);
|
|
67
|
-
const [bannerError, setBannerErrorState] = useState(null);
|
|
68
|
-
const removeToast = useCallback((id) => {
|
|
69
|
-
setToasts((prev) => prev.filter((toast) => toast.id !== id));
|
|
70
|
-
}, []);
|
|
71
|
-
const addToast = useCallback(
|
|
72
|
-
(toast) => {
|
|
73
|
-
var _a;
|
|
74
|
-
if (!enabled) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
const id = (_a = toast.id) != null ? _a : Math.random().toString(36).substring(2, 9);
|
|
78
|
-
setToasts((currentToasts) => {
|
|
79
|
-
if (currentToasts.find((toast2) => toast2.id === id))
|
|
80
|
-
return currentToasts;
|
|
81
|
-
return [...currentToasts, __spreadProps(__spreadValues({}, toast), { id })];
|
|
82
|
-
});
|
|
83
|
-
if (toast.duration) {
|
|
84
|
-
setTimeout(() => {
|
|
85
|
-
removeToast(id);
|
|
86
|
-
}, toast.duration);
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
[enabled, removeToast]
|
|
90
|
-
);
|
|
91
|
-
const setBannerError = useCallback(
|
|
92
|
-
(error) => {
|
|
93
|
-
if (!enabled && error !== null) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
setBannerErrorState(error);
|
|
97
|
-
},
|
|
98
|
-
[enabled]
|
|
99
|
-
);
|
|
100
|
-
const addGraphQLErrorsToast = useCallback((errors) => {
|
|
101
|
-
console.warn("addGraphQLErrorsToast is deprecated. All errors now show as banners.");
|
|
102
|
-
}, []);
|
|
103
|
-
const value = {
|
|
104
|
-
toasts,
|
|
105
|
-
addToast,
|
|
106
|
-
addGraphQLErrorsToast,
|
|
107
|
-
removeToast,
|
|
108
|
-
enabled,
|
|
109
|
-
bannerError,
|
|
110
|
-
setBannerError
|
|
111
|
-
};
|
|
112
|
-
return /* @__PURE__ */ jsxs(ToastContext.Provider, { value, children: [
|
|
113
|
-
bannerError && (() => {
|
|
114
|
-
const severity = getErrorSeverity(bannerError);
|
|
115
|
-
const colors = getErrorColors(severity);
|
|
116
|
-
return /* @__PURE__ */ jsx(
|
|
117
|
-
"div",
|
|
118
|
-
{
|
|
119
|
-
style: {
|
|
120
|
-
position: "fixed",
|
|
121
|
-
bottom: "20px",
|
|
122
|
-
left: "50%",
|
|
123
|
-
transform: "translateX(-50%)",
|
|
124
|
-
zIndex: 9999,
|
|
125
|
-
backgroundColor: colors.background,
|
|
126
|
-
border: `1px solid ${colors.border}`,
|
|
127
|
-
borderLeft: `4px solid ${colors.border}`,
|
|
128
|
-
borderRadius: "8px",
|
|
129
|
-
padding: "10px 14px",
|
|
130
|
-
fontSize: "13px",
|
|
131
|
-
boxShadow: "0 4px 12px rgba(0, 0, 0, 0.15)",
|
|
132
|
-
backdropFilter: "blur(8px)",
|
|
133
|
-
maxWidth: "500px",
|
|
134
|
-
minWidth: "350px"
|
|
135
|
-
},
|
|
136
|
-
children: /* @__PURE__ */ jsxs(
|
|
137
|
-
"div",
|
|
138
|
-
{
|
|
139
|
-
style: {
|
|
140
|
-
display: "flex",
|
|
141
|
-
justifyContent: "space-between",
|
|
142
|
-
alignItems: "center",
|
|
143
|
-
gap: "10px"
|
|
144
|
-
},
|
|
145
|
-
children: [
|
|
146
|
-
/* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px", flex: 1 }, children: [
|
|
147
|
-
/* @__PURE__ */ jsx(
|
|
148
|
-
"div",
|
|
149
|
-
{
|
|
150
|
-
style: {
|
|
151
|
-
width: "12px",
|
|
152
|
-
height: "12px",
|
|
153
|
-
borderRadius: "50%",
|
|
154
|
-
backgroundColor: colors.border,
|
|
155
|
-
flexShrink: 0
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
),
|
|
159
|
-
/* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "10px", flex: 1 }, children: [
|
|
160
|
-
/* @__PURE__ */ jsx(
|
|
161
|
-
"div",
|
|
162
|
-
{
|
|
163
|
-
style: {
|
|
164
|
-
color: colors.text,
|
|
165
|
-
lineHeight: "1.4",
|
|
166
|
-
fontWeight: "400",
|
|
167
|
-
fontSize: "13px",
|
|
168
|
-
flex: 1,
|
|
169
|
-
wordWrap: "break-word",
|
|
170
|
-
overflowWrap: "break-word",
|
|
171
|
-
hyphens: "auto"
|
|
172
|
-
},
|
|
173
|
-
children: (() => {
|
|
174
|
-
const message = bannerError.message;
|
|
175
|
-
const markdownLinkRegex = /\[([^\]]+)\]\(([^)]+)\)/g;
|
|
176
|
-
const plainUrlRegex = /(https?:\/\/[^\s)]+)/g;
|
|
177
|
-
let cleanMessage = message.replace(markdownLinkRegex, "").replace(plainUrlRegex, "").replace(/See more:\s*/g, "").replace(/\s+/g, " ").trim();
|
|
178
|
-
if (cleanMessage.length > 120) {
|
|
179
|
-
cleanMessage = cleanMessage.substring(0, 117) + "...";
|
|
180
|
-
}
|
|
181
|
-
return cleanMessage;
|
|
182
|
-
})()
|
|
183
|
-
}
|
|
184
|
-
),
|
|
185
|
-
(() => {
|
|
186
|
-
const message = bannerError.message;
|
|
187
|
-
const markdownLinkRegex = /\[([^\]]+)\]\(([^)]+)\)/g;
|
|
188
|
-
const plainUrlRegex = /(https?:\/\/[^\s)]+)/g;
|
|
189
|
-
let url = null;
|
|
190
|
-
let buttonText = "See More";
|
|
191
|
-
const markdownMatch = markdownLinkRegex.exec(message);
|
|
192
|
-
if (markdownMatch) {
|
|
193
|
-
url = markdownMatch[2];
|
|
194
|
-
buttonText = "See More";
|
|
195
|
-
} else {
|
|
196
|
-
const urlMatch = plainUrlRegex.exec(message);
|
|
197
|
-
if (urlMatch) {
|
|
198
|
-
url = urlMatch[0];
|
|
199
|
-
buttonText = "See More";
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
if (!url)
|
|
203
|
-
return null;
|
|
204
|
-
return /* @__PURE__ */ jsx(
|
|
205
|
-
"button",
|
|
206
|
-
{
|
|
207
|
-
onClick: () => window.open(url, "_blank", "noopener,noreferrer"),
|
|
208
|
-
style: {
|
|
209
|
-
background: colors.border,
|
|
210
|
-
color: "white",
|
|
211
|
-
border: "none",
|
|
212
|
-
borderRadius: "5px",
|
|
213
|
-
padding: "4px 10px",
|
|
214
|
-
fontSize: "11px",
|
|
215
|
-
fontWeight: "500",
|
|
216
|
-
cursor: "pointer",
|
|
217
|
-
transition: "all 0.2s ease",
|
|
218
|
-
flexShrink: 0
|
|
219
|
-
},
|
|
220
|
-
onMouseEnter: (e) => {
|
|
221
|
-
e.currentTarget.style.opacity = "0.9";
|
|
222
|
-
e.currentTarget.style.transform = "translateY(-1px)";
|
|
223
|
-
},
|
|
224
|
-
onMouseLeave: (e) => {
|
|
225
|
-
e.currentTarget.style.opacity = "1";
|
|
226
|
-
e.currentTarget.style.transform = "translateY(0)";
|
|
227
|
-
},
|
|
228
|
-
children: buttonText
|
|
229
|
-
}
|
|
230
|
-
);
|
|
231
|
-
})()
|
|
232
|
-
] })
|
|
233
|
-
] }),
|
|
234
|
-
/* @__PURE__ */ jsx(
|
|
235
|
-
"button",
|
|
236
|
-
{
|
|
237
|
-
onClick: () => setBannerError(null),
|
|
238
|
-
style: {
|
|
239
|
-
background: "transparent",
|
|
240
|
-
border: "none",
|
|
241
|
-
color: colors.text,
|
|
242
|
-
cursor: "pointer",
|
|
243
|
-
padding: "2px",
|
|
244
|
-
borderRadius: "3px",
|
|
245
|
-
fontSize: "14px",
|
|
246
|
-
lineHeight: "1",
|
|
247
|
-
opacity: 0.6,
|
|
248
|
-
transition: "all 0.2s ease",
|
|
249
|
-
flexShrink: 0
|
|
250
|
-
},
|
|
251
|
-
title: "Dismiss",
|
|
252
|
-
onMouseEnter: (e) => {
|
|
253
|
-
e.currentTarget.style.opacity = "1";
|
|
254
|
-
e.currentTarget.style.background = "rgba(0, 0, 0, 0.05)";
|
|
255
|
-
},
|
|
256
|
-
onMouseLeave: (e) => {
|
|
257
|
-
e.currentTarget.style.opacity = "0.6";
|
|
258
|
-
e.currentTarget.style.background = "transparent";
|
|
259
|
-
},
|
|
260
|
-
children: "\xD7"
|
|
261
|
-
}
|
|
262
|
-
)
|
|
263
|
-
]
|
|
264
|
-
}
|
|
265
|
-
)
|
|
266
|
-
}
|
|
267
|
-
);
|
|
268
|
-
})(),
|
|
269
|
-
children
|
|
270
|
-
] });
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
export {
|
|
274
|
-
useToast,
|
|
275
|
-
ToastProvider
|
|
276
|
-
};
|
|
277
|
-
//# sourceMappingURL=chunk-VRXANACV.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/toast/toast-provider.tsx"],"sourcesContent":["import { GraphQLError } from \"@copilotkit/runtime-client-gql\";\nimport React, { createContext, useContext, useState, useCallback } from \"react\";\nimport { ErrorToast } from \"../error-boundary/error-utils\";\nimport { PartialBy, CopilotKitError, CopilotKitErrorCode, Severity } from \"@copilotkit/shared\";\nimport { renderCopilotKitUsage } from \"../usage-banner\";\n\ninterface Toast {\n id: string;\n message: string | React.ReactNode;\n type: \"info\" | \"success\" | \"warning\" | \"error\";\n duration?: number;\n}\n\ninterface ToastContextValue {\n toasts: Toast[];\n addToast: (toast: PartialBy<Toast, \"id\">) => void;\n addGraphQLErrorsToast: (errors: GraphQLError[]) => void;\n removeToast: (id: string) => void;\n enabled: boolean;\n // Banner management\n bannerError: CopilotKitError | null;\n setBannerError: (error: CopilotKitError | null) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | undefined>(undefined);\n\n// Helper functions for error banner styling\ntype ErrorSeverity = \"critical\" | \"warning\" | \"info\";\n\ninterface ErrorColors {\n background: string;\n border: string;\n text: string;\n icon: string;\n}\n\nfunction getErrorSeverity(error: CopilotKitError): ErrorSeverity {\n // Use structured error severity if available\n if (error.severity) {\n switch (error.severity) {\n case Severity.CRITICAL:\n return \"critical\";\n case Severity.WARNING:\n return \"warning\";\n case Severity.INFO:\n return \"info\";\n default:\n return \"info\";\n }\n }\n\n // Fallback: Check for API key errors which should always be critical\n const message = error.message.toLowerCase();\n if (\n message.includes(\"api key\") ||\n message.includes(\"401\") ||\n message.includes(\"unauthorized\") ||\n message.includes(\"authentication\") ||\n message.includes(\"incorrect api key\")\n ) {\n return \"critical\";\n }\n\n // Default to info level\n return \"info\";\n}\n\nfunction getErrorColors(severity: ErrorSeverity): ErrorColors {\n switch (severity) {\n case \"critical\":\n return {\n background: \"#fee2e2\",\n border: \"#dc2626\",\n text: \"#7f1d1d\",\n icon: \"#dc2626\",\n };\n case \"warning\":\n return {\n background: \"#fef3c7\",\n border: \"#d97706\",\n text: \"#78350f\",\n icon: \"#d97706\",\n };\n case \"info\":\n return {\n background: \"#dbeafe\",\n border: \"#2563eb\",\n text: \"#1e3a8a\",\n icon: \"#2563eb\",\n };\n }\n}\n\nexport function useToast() {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n return context;\n}\n\nexport function ToastProvider({\n enabled,\n children,\n}: {\n enabled: boolean;\n children: React.ReactNode;\n}) {\n const [toasts, setToasts] = useState<Toast[]>([]);\n const [bannerError, setBannerErrorState] = useState<CopilotKitError | null>(null);\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const addToast = useCallback(\n (toast: PartialBy<Toast, \"id\">) => {\n // Respect the enabled flag for ALL toasts\n if (!enabled) {\n return;\n }\n\n const id = toast.id ?? Math.random().toString(36).substring(2, 9);\n\n setToasts((currentToasts) => {\n if (currentToasts.find((toast) => toast.id === id)) return currentToasts;\n return [...currentToasts, { ...toast, id }];\n });\n\n if (toast.duration) {\n setTimeout(() => {\n removeToast(id);\n }, toast.duration);\n }\n },\n [enabled, removeToast],\n );\n\n const setBannerError = useCallback(\n (error: CopilotKitError | null) => {\n // Respect the enabled flag for ALL errors\n if (!enabled && error !== null) {\n return;\n }\n setBannerErrorState(error);\n },\n [enabled],\n );\n\n const addGraphQLErrorsToast = useCallback((errors: GraphQLError[]) => {\n // DEPRECATED: All errors now route to banners for consistency\n console.warn(\"addGraphQLErrorsToast is deprecated. All errors now show as banners.\");\n // Function kept for backward compatibility - does nothing\n }, []);\n\n const value = {\n toasts,\n addToast,\n addGraphQLErrorsToast,\n removeToast,\n enabled,\n bannerError,\n setBannerError,\n };\n\n return (\n <ToastContext.Provider value={value}>\n {/* Banner Error Display */}\n {bannerError &&\n (() => {\n const severity = getErrorSeverity(bannerError);\n const colors = getErrorColors(severity);\n\n return (\n <div\n style={{\n position: \"fixed\",\n bottom: \"20px\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n zIndex: 9999,\n backgroundColor: colors.background,\n border: `1px solid ${colors.border}`,\n borderLeft: `4px solid ${colors.border}`,\n borderRadius: \"8px\",\n padding: \"10px 14px\",\n fontSize: \"13px\",\n boxShadow: \"0 4px 12px rgba(0, 0, 0, 0.15)\",\n backdropFilter: \"blur(8px)\",\n maxWidth: \"500px\",\n minWidth: \"350px\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n gap: \"10px\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", flex: 1 }}>\n <div\n style={{\n width: \"12px\",\n height: \"12px\",\n borderRadius: \"50%\",\n backgroundColor: colors.border,\n flexShrink: 0,\n }}\n />\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"10px\", flex: 1 }}>\n <div\n style={{\n color: colors.text,\n lineHeight: \"1.4\",\n fontWeight: \"400\",\n fontSize: \"13px\",\n flex: 1,\n wordWrap: \"break-word\",\n overflowWrap: \"break-word\",\n hyphens: \"auto\",\n }}\n >\n {(() => {\n const message = bannerError.message;\n const markdownLinkRegex = /\\[([^\\]]+)\\]\\(([^)]+)\\)/g;\n const plainUrlRegex = /(https?:\\/\\/[^\\s)]+)/g;\n\n // Remove URLs and markdown links from the message, keep just the text\n let cleanMessage = message\n .replace(markdownLinkRegex, \"\") // Remove [text](url)\n .replace(plainUrlRegex, \"\") // Remove plain URLs\n .replace(/See more:\\s*/g, \"\") // Remove \"See more:\" text\n .replace(/\\s+/g, \" \") // Clean up extra spaces\n .trim();\n\n // Truncate very long messages for better display\n if (cleanMessage.length > 120) {\n cleanMessage = cleanMessage.substring(0, 117) + \"...\";\n }\n\n return cleanMessage;\n })()}\n </div>\n\n {(() => {\n const message = bannerError.message;\n const markdownLinkRegex = /\\[([^\\]]+)\\]\\(([^)]+)\\)/g;\n const plainUrlRegex = /(https?:\\/\\/[^\\s)]+)/g;\n\n // Extract the first URL found\n let url = null;\n let buttonText = \"See More\";\n\n // Check for markdown links first\n const markdownMatch = markdownLinkRegex.exec(message);\n if (markdownMatch) {\n url = markdownMatch[2];\n buttonText = \"See More\";\n } else {\n // Check for plain URLs\n const urlMatch = plainUrlRegex.exec(message);\n if (urlMatch) {\n url = urlMatch[0];\n buttonText = \"See More\";\n }\n }\n\n if (!url) return null;\n\n return (\n <button\n onClick={() => window.open(url, \"_blank\", \"noopener,noreferrer\")}\n style={{\n background: colors.border,\n color: \"white\",\n border: \"none\",\n borderRadius: \"5px\",\n padding: \"4px 10px\",\n fontSize: \"11px\",\n fontWeight: \"500\",\n cursor: \"pointer\",\n transition: \"all 0.2s ease\",\n flexShrink: 0,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.opacity = \"0.9\";\n e.currentTarget.style.transform = \"translateY(-1px)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.opacity = \"1\";\n e.currentTarget.style.transform = \"translateY(0)\";\n }}\n >\n {buttonText}\n </button>\n );\n })()}\n </div>\n </div>\n <button\n onClick={() => setBannerError(null)}\n style={{\n background: \"transparent\",\n border: \"none\",\n color: colors.text,\n cursor: \"pointer\",\n padding: \"2px\",\n borderRadius: \"3px\",\n fontSize: \"14px\",\n lineHeight: \"1\",\n opacity: 0.6,\n transition: \"all 0.2s ease\",\n flexShrink: 0,\n }}\n title=\"Dismiss\"\n onMouseEnter={(e) => {\n e.currentTarget.style.opacity = \"1\";\n e.currentTarget.style.background = \"rgba(0, 0, 0, 0.05)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.opacity = \"0.6\";\n e.currentTarget.style.background = \"transparent\";\n }}\n >\n ×\n </button>\n </div>\n </div>\n );\n })()}\n\n {/* Toast Display - Deprecated: All errors now show as banners */}\n {children}\n </ToastContext.Provider>\n );\n}\n\n// Toast component removed - all errors now show as banners for consistency\n"],"mappings":";;;;;;AACA,SAAgB,eAAe,YAAY,UAAU,mBAAmB;AAExE,SAA0D,gBAAgB;AAuMxD,cASA,YATA;AAlLlB,IAAM,eAAe,cAA6C,MAAS;AAY3E,SAAS,iBAAiB,OAAuC;AAE/D,MAAI,MAAM,UAAU;AAClB,YAAQ,MAAM,UAAU;AAAA,MACtB,KAAK,SAAS;AACZ,eAAO;AAAA,MACT,KAAK,SAAS;AACZ,eAAO;AAAA,MACT,KAAK,SAAS;AACZ,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAGA,QAAM,UAAU,MAAM,QAAQ,YAAY;AAC1C,MACE,QAAQ,SAAS,SAAS,KAC1B,QAAQ,SAAS,KAAK,KACtB,QAAQ,SAAS,cAAc,KAC/B,QAAQ,SAAS,gBAAgB,KACjC,QAAQ,SAAS,mBAAmB,GACpC;AACA,WAAO;AAAA,EACT;AAGA,SAAO;AACT;AAEA,SAAS,eAAe,UAAsC;AAC5D,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO;AAAA,QACL,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,EACJ;AACF;AAEO,SAAS,WAAW;AACzB,QAAM,UAAU,WAAW,YAAY;AACvC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AACA,SAAO;AACT;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AACF,GAGG;AACD,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAkB,CAAC,CAAC;AAChD,QAAM,CAAC,aAAa,mBAAmB,IAAI,SAAiC,IAAI;AAEhF,QAAM,cAAc,YAAY,CAAC,OAAe;AAC9C,cAAU,CAAC,SAAS,KAAK,OAAO,CAAC,UAAU,MAAM,OAAO,EAAE,CAAC;AAAA,EAC7D,GAAG,CAAC,CAAC;AAEL,QAAM,WAAW;AAAA,IACf,CAAC,UAAkC;AApHvC;AAsHM,UAAI,CAAC,SAAS;AACZ;AAAA,MACF;AAEA,YAAM,MAAK,WAAM,OAAN,YAAY,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC;AAEhE,gBAAU,CAAC,kBAAkB;AAC3B,YAAI,cAAc,KAAK,CAACA,WAAUA,OAAM,OAAO,EAAE;AAAG,iBAAO;AAC3D,eAAO,CAAC,GAAG,eAAe,iCAAK,QAAL,EAAY,GAAG,EAAC;AAAA,MAC5C,CAAC;AAED,UAAI,MAAM,UAAU;AAClB,mBAAW,MAAM;AACf,sBAAY,EAAE;AAAA,QAChB,GAAG,MAAM,QAAQ;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,SAAS,WAAW;AAAA,EACvB;AAEA,QAAM,iBAAiB;AAAA,IACrB,CAAC,UAAkC;AAEjC,UAAI,CAAC,WAAW,UAAU,MAAM;AAC9B;AAAA,MACF;AACA,0BAAoB,KAAK;AAAA,IAC3B;AAAA,IACA,CAAC,OAAO;AAAA,EACV;AAEA,QAAM,wBAAwB,YAAY,CAAC,WAA2B;AAEpE,YAAQ,KAAK,sEAAsE;AAAA,EAErF,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SACE,qBAAC,aAAa,UAAb,EAAsB,OAEpB;AAAA,oBACE,MAAM;AACL,YAAM,WAAW,iBAAiB,WAAW;AAC7C,YAAM,SAAS,eAAe,QAAQ;AAEtC,aACE;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,iBAAiB,OAAO;AAAA,YACxB,QAAQ,aAAa,OAAO;AAAA,YAC5B,YAAY,aAAa,OAAO;AAAA,YAChC,cAAc;AAAA,YACd,SAAS;AAAA,YACT,UAAU;AAAA,YACV,WAAW;AAAA,YACX,gBAAgB;AAAA,YAChB,UAAU;AAAA,YACV,UAAU;AAAA,UACZ;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,gBACL,SAAS;AAAA,gBACT,gBAAgB;AAAA,gBAChB,YAAY;AAAA,gBACZ,KAAK;AAAA,cACP;AAAA,cAEA;AAAA,qCAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,OAAO,MAAM,EAAE,GACvE;AAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,OAAO;AAAA,wBACL,OAAO;AAAA,wBACP,QAAQ;AAAA,wBACR,cAAc;AAAA,wBACd,iBAAiB,OAAO;AAAA,wBACxB,YAAY;AAAA,sBACd;AAAA;AAAA,kBACF;AAAA,kBACA,qBAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,QAAQ,MAAM,EAAE,GACxE;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAO;AAAA,0BACL,OAAO,OAAO;AAAA,0BACd,YAAY;AAAA,0BACZ,YAAY;AAAA,0BACZ,UAAU;AAAA,0BACV,MAAM;AAAA,0BACN,UAAU;AAAA,0BACV,cAAc;AAAA,0BACd,SAAS;AAAA,wBACX;AAAA,wBAEE,iBAAM;AACN,gCAAM,UAAU,YAAY;AAC5B,gCAAM,oBAAoB;AAC1B,gCAAM,gBAAgB;AAGtB,8BAAI,eAAe,QAChB,QAAQ,mBAAmB,EAAE,EAC7B,QAAQ,eAAe,EAAE,EACzB,QAAQ,iBAAiB,EAAE,EAC3B,QAAQ,QAAQ,GAAG,EACnB,KAAK;AAGR,8BAAI,aAAa,SAAS,KAAK;AAC7B,2CAAe,aAAa,UAAU,GAAG,GAAG,IAAI;AAAA,0BAClD;AAEA,iCAAO;AAAA,wBACT,GAAG;AAAA;AAAA,oBACL;AAAA,qBAEE,MAAM;AACN,4BAAM,UAAU,YAAY;AAC5B,4BAAM,oBAAoB;AAC1B,4BAAM,gBAAgB;AAGtB,0BAAI,MAAM;AACV,0BAAI,aAAa;AAGjB,4BAAM,gBAAgB,kBAAkB,KAAK,OAAO;AACpD,0BAAI,eAAe;AACjB,8BAAM,cAAc,CAAC;AACrB,qCAAa;AAAA,sBACf,OAAO;AAEL,8BAAM,WAAW,cAAc,KAAK,OAAO;AAC3C,4BAAI,UAAU;AACZ,gCAAM,SAAS,CAAC;AAChB,uCAAa;AAAA,wBACf;AAAA,sBACF;AAEA,0BAAI,CAAC;AAAK,+BAAO;AAEjB,6BACE;AAAA,wBAAC;AAAA;AAAA,0BACC,SAAS,MAAM,OAAO,KAAK,KAAK,UAAU,qBAAqB;AAAA,0BAC/D,OAAO;AAAA,4BACL,YAAY,OAAO;AAAA,4BACnB,OAAO;AAAA,4BACP,QAAQ;AAAA,4BACR,cAAc;AAAA,4BACd,SAAS;AAAA,4BACT,UAAU;AAAA,4BACV,YAAY;AAAA,4BACZ,QAAQ;AAAA,4BACR,YAAY;AAAA,4BACZ,YAAY;AAAA,0BACd;AAAA,0BACA,cAAc,CAAC,MAAM;AACnB,8BAAE,cAAc,MAAM,UAAU;AAChC,8BAAE,cAAc,MAAM,YAAY;AAAA,0BACpC;AAAA,0BACA,cAAc,CAAC,MAAM;AACnB,8BAAE,cAAc,MAAM,UAAU;AAChC,8BAAE,cAAc,MAAM,YAAY;AAAA,0BACpC;AAAA,0BAEC;AAAA;AAAA,sBACH;AAAA,oBAEJ,GAAG;AAAA,qBACL;AAAA,mBACF;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAS,MAAM,eAAe,IAAI;AAAA,oBAClC,OAAO;AAAA,sBACL,YAAY;AAAA,sBACZ,QAAQ;AAAA,sBACR,OAAO,OAAO;AAAA,sBACd,QAAQ;AAAA,sBACR,SAAS;AAAA,sBACT,cAAc;AAAA,sBACd,UAAU;AAAA,sBACV,YAAY;AAAA,sBACZ,SAAS;AAAA,sBACT,YAAY;AAAA,sBACZ,YAAY;AAAA,oBACd;AAAA,oBACA,OAAM;AAAA,oBACN,cAAc,CAAC,MAAM;AACnB,wBAAE,cAAc,MAAM,UAAU;AAChC,wBAAE,cAAc,MAAM,aAAa;AAAA,oBACrC;AAAA,oBACA,cAAc,CAAC,MAAM;AACnB,wBAAE,cAAc,MAAM,UAAU;AAChC,wBAAE,cAAc,MAAM,aAAa;AAAA,oBACrC;AAAA,oBACD;AAAA;AAAA,gBAED;AAAA;AAAA;AAAA,UACF;AAAA;AAAA,MACF;AAAA,IAEJ,GAAG;AAAA,IAGJ;AAAA,KACH;AAEJ;","names":["toast"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|