@usecrow/ui 0.1.13 → 0.1.14
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/dist/index.cjs +253 -100
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +15 -6
- package/dist/index.d.ts +15 -6
- package/dist/index.js +253 -100
- package/dist/index.js.map +1 -1
- package/package.json +6 -3
- package/dist/styles.css +0 -3
package/dist/index.cjs
CHANGED
|
@@ -119,7 +119,9 @@ function useChat({
|
|
|
119
119
|
message,
|
|
120
120
|
conversation_id: conversationId,
|
|
121
121
|
identity_token: identityToken,
|
|
122
|
-
model: selectedModel
|
|
122
|
+
model: selectedModel,
|
|
123
|
+
user_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
124
|
+
user_local_time: (/* @__PURE__ */ new Date()).toLocaleString()
|
|
123
125
|
}),
|
|
124
126
|
signal: abortControllerRef.current.signal
|
|
125
127
|
});
|
|
@@ -389,7 +391,9 @@ function useChat({
|
|
|
389
391
|
tool_name: toolName,
|
|
390
392
|
result,
|
|
391
393
|
identity_token: identityToken,
|
|
392
|
-
model: selectedModel
|
|
394
|
+
model: selectedModel,
|
|
395
|
+
user_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
396
|
+
user_local_time: (/* @__PURE__ */ new Date()).toLocaleString()
|
|
393
397
|
})
|
|
394
398
|
});
|
|
395
399
|
if (!response.ok) {
|
|
@@ -500,14 +504,14 @@ function useConversations({ productId, apiUrl = "" }) {
|
|
|
500
504
|
if (res.ok) {
|
|
501
505
|
const data = await res.json();
|
|
502
506
|
const historyMessages = data.messages || [];
|
|
503
|
-
return historyMessages.
|
|
504
|
-
(msg
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
);
|
|
507
|
+
return historyMessages.filter(
|
|
508
|
+
(msg) => msg.role !== "tool" && !msg.content.startsWith("[Client Tool Result:")
|
|
509
|
+
).map((msg, idx) => ({
|
|
510
|
+
id: `history-${idx}`,
|
|
511
|
+
content: msg.content,
|
|
512
|
+
isBot: msg.role === "assistant",
|
|
513
|
+
timestamp: /* @__PURE__ */ new Date()
|
|
514
|
+
}));
|
|
511
515
|
}
|
|
512
516
|
} catch (error) {
|
|
513
517
|
console.error("[Crow] Error loading conversation history:", error);
|
|
@@ -528,14 +532,14 @@ function useConversations({ productId, apiUrl = "" }) {
|
|
|
528
532
|
if (res.ok) {
|
|
529
533
|
const data = await res.json();
|
|
530
534
|
const historyMessages = data.messages || [];
|
|
531
|
-
return historyMessages.
|
|
532
|
-
(msg
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
);
|
|
535
|
+
return historyMessages.filter(
|
|
536
|
+
(msg) => msg.role !== "tool" && !msg.content.startsWith("[Client Tool Result:")
|
|
537
|
+
).map((msg, idx) => ({
|
|
538
|
+
id: `history-${idx}`,
|
|
539
|
+
content: msg.content,
|
|
540
|
+
isBot: msg.role === "assistant",
|
|
541
|
+
timestamp: /* @__PURE__ */ new Date()
|
|
542
|
+
}));
|
|
539
543
|
}
|
|
540
544
|
} catch (error) {
|
|
541
545
|
console.error("[Crow] Error loading anonymous conversation history:", error);
|
|
@@ -648,6 +652,16 @@ function useWorkflow({
|
|
|
648
652
|
exitWorkflow
|
|
649
653
|
};
|
|
650
654
|
}
|
|
655
|
+
var SDK_DEFAULT_TOOLS = {
|
|
656
|
+
refreshPage: async () => {
|
|
657
|
+
try {
|
|
658
|
+
window.location.reload();
|
|
659
|
+
return { status: "success", data: { message: "Page refresh initiated" } };
|
|
660
|
+
} catch (error) {
|
|
661
|
+
return { status: "error", error: String(error) };
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
};
|
|
651
665
|
function useCrowAPI({ onIdentified, onReset } = {}) {
|
|
652
666
|
const onIdentifiedRef = React3.useRef(onIdentified);
|
|
653
667
|
const onResetRef = React3.useRef(onReset);
|
|
@@ -657,6 +671,15 @@ function useCrowAPI({ onIdentified, onReset } = {}) {
|
|
|
657
671
|
onResetRef.current = onReset;
|
|
658
672
|
});
|
|
659
673
|
React3.useEffect(() => {
|
|
674
|
+
if (!window.__crow_client_tools) {
|
|
675
|
+
window.__crow_client_tools = {};
|
|
676
|
+
}
|
|
677
|
+
for (const [toolName, handler] of Object.entries(SDK_DEFAULT_TOOLS)) {
|
|
678
|
+
if (!window.__crow_client_tools[toolName]) {
|
|
679
|
+
window.__crow_client_tools[toolName] = handler;
|
|
680
|
+
console.log(`[Crow] Registered default tool: ${toolName}`);
|
|
681
|
+
}
|
|
682
|
+
}
|
|
660
683
|
window.crow = function(command, options) {
|
|
661
684
|
const opts = options;
|
|
662
685
|
switch (command) {
|
|
@@ -1016,6 +1039,9 @@ function useWidgetStyles({
|
|
|
1016
1039
|
const [browserUseEnabled, setBrowserUseEnabled] = React3.useState(
|
|
1017
1040
|
styleCache.get(key)?.browserUseEnabled || false
|
|
1018
1041
|
);
|
|
1042
|
+
const [showThinking, setShowThinking] = React3.useState(
|
|
1043
|
+
styleCache.get(key)?.showThinking ?? true
|
|
1044
|
+
);
|
|
1019
1045
|
const hasFetchedRef = React3.useRef(false);
|
|
1020
1046
|
const fetchStyles = async () => {
|
|
1021
1047
|
if (skip) return;
|
|
@@ -1027,6 +1053,7 @@ function useWidgetStyles({
|
|
|
1027
1053
|
setDbStyles(config.widgetStyles);
|
|
1028
1054
|
setAgentName(config.agentName || "Assistant");
|
|
1029
1055
|
setBrowserUseEnabled(config.browserUseEnabled || false);
|
|
1056
|
+
setShowThinking(config.showThinking ?? true);
|
|
1030
1057
|
} catch (err) {
|
|
1031
1058
|
console.error("[CrowWidget] Failed to fetch styles:", err);
|
|
1032
1059
|
setError(err instanceof Error ? err : new Error(String(err)));
|
|
@@ -1041,6 +1068,7 @@ function useWidgetStyles({
|
|
|
1041
1068
|
setDbStyles(cached.widgetStyles);
|
|
1042
1069
|
setAgentName(cached.agentName || "Assistant");
|
|
1043
1070
|
setBrowserUseEnabled(cached.browserUseEnabled || false);
|
|
1071
|
+
setShowThinking(cached.showThinking ?? true);
|
|
1044
1072
|
setIsLoading(false);
|
|
1045
1073
|
return;
|
|
1046
1074
|
}
|
|
@@ -1054,6 +1082,7 @@ function useWidgetStyles({
|
|
|
1054
1082
|
error,
|
|
1055
1083
|
agentName,
|
|
1056
1084
|
browserUseEnabled,
|
|
1085
|
+
showThinking,
|
|
1057
1086
|
refetch: fetchStyles
|
|
1058
1087
|
};
|
|
1059
1088
|
}
|
|
@@ -1134,11 +1163,12 @@ function WidgetStyleProvider({
|
|
|
1134
1163
|
styles,
|
|
1135
1164
|
agentName = "Assistant",
|
|
1136
1165
|
isLoading = false,
|
|
1137
|
-
variant = "floating"
|
|
1166
|
+
variant = "floating",
|
|
1167
|
+
showThinking = true
|
|
1138
1168
|
}) {
|
|
1139
1169
|
const value = React3.useMemo(
|
|
1140
|
-
() => ({ styles, agentName, isLoading, variant }),
|
|
1141
|
-
[styles, agentName, isLoading, variant]
|
|
1170
|
+
() => ({ styles, agentName, isLoading, variant, showThinking }),
|
|
1171
|
+
[styles, agentName, isLoading, variant, showThinking]
|
|
1142
1172
|
);
|
|
1143
1173
|
return /* @__PURE__ */ jsxRuntime.jsx(WidgetStyleContext.Provider, { value, children });
|
|
1144
1174
|
}
|
|
@@ -1155,7 +1185,13 @@ function useWidgetStyles2() {
|
|
|
1155
1185
|
const context = React3.useContext(WidgetStyleContext);
|
|
1156
1186
|
return context?.styles ?? DEFAULT_WIDGET_STYLES;
|
|
1157
1187
|
}
|
|
1158
|
-
|
|
1188
|
+
function useShowThinking() {
|
|
1189
|
+
const context = React3.useContext(WidgetStyleContext);
|
|
1190
|
+
return context?.showThinking ?? true;
|
|
1191
|
+
}
|
|
1192
|
+
var CopilotStyleContext = React3.createContext(
|
|
1193
|
+
null
|
|
1194
|
+
);
|
|
1159
1195
|
function CopilotStyleProvider({
|
|
1160
1196
|
children,
|
|
1161
1197
|
styles,
|
|
@@ -1181,6 +1217,7 @@ function useCopilotStyles2() {
|
|
|
1181
1217
|
const context = React3.useContext(CopilotStyleContext);
|
|
1182
1218
|
return context?.styles ?? DEFAULT_COPILOT_STYLES;
|
|
1183
1219
|
}
|
|
1220
|
+
var PASSTHROUGH_KEYS = /* @__PURE__ */ new Set(["Escape", "Tab"]);
|
|
1184
1221
|
function ShadowContainer({
|
|
1185
1222
|
children,
|
|
1186
1223
|
styles,
|
|
@@ -1195,6 +1232,51 @@ function ShadowContainer({
|
|
|
1195
1232
|
setShadowRoot(shadow);
|
|
1196
1233
|
}
|
|
1197
1234
|
}, []);
|
|
1235
|
+
React3.useEffect(() => {
|
|
1236
|
+
if (!shadowRoot || !hostRef.current) return;
|
|
1237
|
+
const hostElement = hostRef.current;
|
|
1238
|
+
const stopPropagationHandler = (e) => {
|
|
1239
|
+
const keyEvent = e;
|
|
1240
|
+
if (keyEvent.key && PASSTHROUGH_KEYS.has(keyEvent.key)) {
|
|
1241
|
+
return;
|
|
1242
|
+
}
|
|
1243
|
+
e.stopPropagation();
|
|
1244
|
+
};
|
|
1245
|
+
shadowRoot.addEventListener("keydown", stopPropagationHandler);
|
|
1246
|
+
shadowRoot.addEventListener("keyup", stopPropagationHandler);
|
|
1247
|
+
shadowRoot.addEventListener("keypress", stopPropagationHandler);
|
|
1248
|
+
let lastFocusedElement = null;
|
|
1249
|
+
const trackFocus = (e) => {
|
|
1250
|
+
lastFocusedElement = e.target;
|
|
1251
|
+
};
|
|
1252
|
+
const protectFocus = (e) => {
|
|
1253
|
+
if (e.key && PASSTHROUGH_KEYS.has(e.key)) {
|
|
1254
|
+
return;
|
|
1255
|
+
}
|
|
1256
|
+
const path = e.composedPath();
|
|
1257
|
+
if (!path.includes(hostElement) && !path.includes(shadowRoot)) {
|
|
1258
|
+
return;
|
|
1259
|
+
}
|
|
1260
|
+
if (lastFocusedElement) {
|
|
1261
|
+
const elementToRestore = lastFocusedElement;
|
|
1262
|
+
queueMicrotask(() => {
|
|
1263
|
+
const activeInShadow = shadowRoot.activeElement;
|
|
1264
|
+
if (!activeInShadow) {
|
|
1265
|
+
elementToRestore.focus();
|
|
1266
|
+
}
|
|
1267
|
+
});
|
|
1268
|
+
}
|
|
1269
|
+
};
|
|
1270
|
+
shadowRoot.addEventListener("focusin", trackFocus);
|
|
1271
|
+
document.addEventListener("keydown", protectFocus, { capture: true });
|
|
1272
|
+
return () => {
|
|
1273
|
+
shadowRoot.removeEventListener("keydown", stopPropagationHandler);
|
|
1274
|
+
shadowRoot.removeEventListener("keyup", stopPropagationHandler);
|
|
1275
|
+
shadowRoot.removeEventListener("keypress", stopPropagationHandler);
|
|
1276
|
+
shadowRoot.removeEventListener("focusin", trackFocus);
|
|
1277
|
+
document.removeEventListener("keydown", protectFocus, { capture: true });
|
|
1278
|
+
};
|
|
1279
|
+
}, [shadowRoot]);
|
|
1198
1280
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref: hostRef, id: hostId, className: hostClassName, children: shadowRoot && reactDom.createPortal(
|
|
1199
1281
|
/* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1200
1282
|
/* @__PURE__ */ jsxRuntime.jsx("style", { children: styles }),
|
|
@@ -1384,13 +1466,20 @@ function StreamingText({
|
|
|
1384
1466
|
return isInline ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1385
1467
|
"code",
|
|
1386
1468
|
{
|
|
1387
|
-
className: "crow-bg-gray-
|
|
1469
|
+
className: "crow-bg-gray-800 crow-text-gray-200 crow-px-1.5 crow-py-0.5 crow-rounded crow-text-sm",
|
|
1470
|
+
...props,
|
|
1471
|
+
children
|
|
1472
|
+
}
|
|
1473
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1474
|
+
"code",
|
|
1475
|
+
{
|
|
1476
|
+
className: `crow-text-gray-200 ${className || ""}`,
|
|
1388
1477
|
...props,
|
|
1389
1478
|
children
|
|
1390
1479
|
}
|
|
1391
|
-
)
|
|
1480
|
+
);
|
|
1392
1481
|
},
|
|
1393
|
-
pre: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "crow-bg-gray-
|
|
1482
|
+
pre: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "crow-bg-gray-800 crow-text-gray-200 crow-p-3 crow-rounded-lg crow-my-2 crow-overflow-x-auto crow-text-sm", children })
|
|
1394
1483
|
},
|
|
1395
1484
|
children: content
|
|
1396
1485
|
}
|
|
@@ -1473,10 +1562,6 @@ var THINKING_MESSAGES = [
|
|
|
1473
1562
|
"Connecting",
|
|
1474
1563
|
"Synthesizing"
|
|
1475
1564
|
];
|
|
1476
|
-
function getRandomThinkingMessage() {
|
|
1477
|
-
const idx = Math.floor(Math.random() * THINKING_MESSAGES.length);
|
|
1478
|
-
return THINKING_MESSAGES[idx] + "...";
|
|
1479
|
-
}
|
|
1480
1565
|
function ShimmeringContent({ children }) {
|
|
1481
1566
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1482
1567
|
"span",
|
|
@@ -1502,10 +1587,21 @@ function ShimmeringContent({ children }) {
|
|
|
1502
1587
|
}
|
|
1503
1588
|
);
|
|
1504
1589
|
}
|
|
1505
|
-
function ReasoningTrace({
|
|
1590
|
+
function ReasoningTrace({
|
|
1591
|
+
thinking,
|
|
1592
|
+
isComplete,
|
|
1593
|
+
toolCalls = [],
|
|
1594
|
+
isWaiting = false,
|
|
1595
|
+
showDetails = true
|
|
1596
|
+
}) {
|
|
1506
1597
|
const hasThinking = !!thinking && thinking.trim().length > 0;
|
|
1507
1598
|
const hasToolCalls = toolCalls.length > 0;
|
|
1599
|
+
const isActive = isWaiting || hasThinking && !isComplete || toolCalls.some((t) => t.status === "executing");
|
|
1508
1600
|
if (!isWaiting && !hasThinking && !hasToolCalls) return null;
|
|
1601
|
+
if (!showDetails) {
|
|
1602
|
+
if (!isActive) return null;
|
|
1603
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "crow-flex crow-justify-start crow-mb-2", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "crow-max-w-[90%]", children: /* @__PURE__ */ jsxRuntime.jsx(WaitingIndicator, {}) }) });
|
|
1604
|
+
}
|
|
1509
1605
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "crow-flex crow-justify-start crow-mb-2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "crow-max-w-[90%] crow-space-y-1.5", children: [
|
|
1510
1606
|
isWaiting && !hasThinking && /* @__PURE__ */ jsxRuntime.jsx(WaitingIndicator, {}),
|
|
1511
1607
|
hasThinking && /* @__PURE__ */ jsxRuntime.jsx(ThinkingBlock, { thinking, isComplete }),
|
|
@@ -1513,17 +1609,41 @@ function ReasoningTrace({ thinking, isComplete, toolCalls = [], isWaiting = fals
|
|
|
1513
1609
|
] }) });
|
|
1514
1610
|
}
|
|
1515
1611
|
function WaitingIndicator() {
|
|
1612
|
+
const [messageIndex, setMessageIndex] = React3.useState(
|
|
1613
|
+
() => Math.floor(Math.random() * THINKING_MESSAGES.length)
|
|
1614
|
+
);
|
|
1615
|
+
React3.useEffect(() => {
|
|
1616
|
+
const interval = setInterval(() => {
|
|
1617
|
+
setMessageIndex((i) => (i + 1) % THINKING_MESSAGES.length);
|
|
1618
|
+
}, 3e3);
|
|
1619
|
+
return () => clearInterval(interval);
|
|
1620
|
+
}, []);
|
|
1621
|
+
const message = THINKING_MESSAGES[messageIndex] + "...";
|
|
1516
1622
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "crow-flex crow-items-center crow-gap-1.5 crow-text-xs crow-text-gray-500", children: [
|
|
1517
1623
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "crow-flex crow-items-center crow-justify-center crow-w-4 crow-h-4", children: /* @__PURE__ */ jsxRuntime.jsx(ShimmeringContent, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Brain, { className: "crow-w-3.5 crow-h-3.5" }) }) }),
|
|
1518
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "crow-font-medium", children: /* @__PURE__ */ jsxRuntime.jsx(ShimmeringContent, { children:
|
|
1624
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "crow-font-medium", children: /* @__PURE__ */ jsxRuntime.jsx(ShimmeringContent, { children: message }) })
|
|
1519
1625
|
] });
|
|
1520
1626
|
}
|
|
1521
|
-
function ThinkingBlock({
|
|
1627
|
+
function ThinkingBlock({
|
|
1628
|
+
thinking,
|
|
1629
|
+
isComplete
|
|
1630
|
+
}) {
|
|
1522
1631
|
const [isExpanded, setIsExpanded] = React3.useState(!isComplete);
|
|
1632
|
+
const [messageIndex, setMessageIndex] = React3.useState(
|
|
1633
|
+
() => Math.floor(Math.random() * THINKING_MESSAGES.length)
|
|
1634
|
+
);
|
|
1523
1635
|
React3.useLayoutEffect(() => {
|
|
1524
1636
|
setIsExpanded(!isComplete);
|
|
1525
1637
|
}, [isComplete]);
|
|
1638
|
+
React3.useEffect(() => {
|
|
1639
|
+
if (isComplete) return;
|
|
1640
|
+
const interval = setInterval(() => {
|
|
1641
|
+
setMessageIndex((i) => (i + 1) % THINKING_MESSAGES.length);
|
|
1642
|
+
}, 3e3);
|
|
1643
|
+
return () => clearInterval(interval);
|
|
1644
|
+
}, [isComplete]);
|
|
1526
1645
|
const isInProgress = !isComplete;
|
|
1646
|
+
const message = THINKING_MESSAGES[messageIndex] + "...";
|
|
1527
1647
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "crow-flex crow-flex-col crow-gap-1 crow-text-xs", children: [
|
|
1528
1648
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1529
1649
|
"button",
|
|
@@ -1532,7 +1652,7 @@ function ThinkingBlock({ thinking, isComplete }) {
|
|
|
1532
1652
|
className: `crow-flex crow-items-center crow-gap-1.5 crow-select-none crow-transition-colors ${isInProgress ? "crow-text-gray-500" : "crow-text-gray-600 hover:crow-text-gray-800"} crow-cursor-pointer`,
|
|
1533
1653
|
children: [
|
|
1534
1654
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "crow-flex crow-items-center crow-justify-center crow-w-4 crow-h-4", children: isInProgress ? /* @__PURE__ */ jsxRuntime.jsx(ShimmeringContent, { children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Brain, { className: "crow-w-3.5 crow-h-3.5" }) }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Brain, { className: "crow-w-3.5 crow-h-3.5" }) }),
|
|
1535
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "crow-font-medium", children: isInProgress ? /* @__PURE__ */ jsxRuntime.jsx(ShimmeringContent, { children:
|
|
1655
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "crow-font-medium", children: isInProgress ? /* @__PURE__ */ jsxRuntime.jsx(ShimmeringContent, { children: message }) : "Thought" }),
|
|
1536
1656
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1537
1657
|
framerMotion.motion.div,
|
|
1538
1658
|
{
|
|
@@ -1607,7 +1727,7 @@ function ToolCallBlock({ toolCall }) {
|
|
|
1607
1727
|
exit: { height: 0, opacity: 0 },
|
|
1608
1728
|
transition: { duration: 0.15 },
|
|
1609
1729
|
className: "crow-overflow-hidden",
|
|
1610
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "crow-mt-1 crow-p-2 crow-bg-gray-
|
|
1730
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "crow-mt-1 crow-p-2 crow-bg-gray-800 crow-rounded crow-text-xs crow-font-mono crow-text-gray-200 crow-overflow-x-auto crow-max-h-32 crow-overflow-y-auto crow-ml-4", children: JSON.stringify(toolCall.arguments, null, 2) })
|
|
1611
1731
|
}
|
|
1612
1732
|
) })
|
|
1613
1733
|
] });
|
|
@@ -1618,6 +1738,7 @@ function MessageBubble({
|
|
|
1618
1738
|
isLoading = false
|
|
1619
1739
|
}) {
|
|
1620
1740
|
const styles = useWidgetStyles2();
|
|
1741
|
+
const showThinkingSetting = useShowThinking();
|
|
1621
1742
|
const isWaiting = message.content === "Thinking..." || message.isBot && isLoading && !message.content;
|
|
1622
1743
|
const hasThinking = message.isBot && message.thinking;
|
|
1623
1744
|
const hasContent = message.content && message.content !== "Thinking...";
|
|
@@ -1636,7 +1757,8 @@ function MessageBubble({
|
|
|
1636
1757
|
thinking: message.thinking,
|
|
1637
1758
|
isComplete: message.thinkingComplete,
|
|
1638
1759
|
toolCalls,
|
|
1639
|
-
isWaiting: isWaiting && !hasThinking
|
|
1760
|
+
isWaiting: isWaiting && !hasThinking,
|
|
1761
|
+
showDetails: showThinkingSetting
|
|
1640
1762
|
}
|
|
1641
1763
|
),
|
|
1642
1764
|
hasContent && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -1712,64 +1834,62 @@ function MessageList({
|
|
|
1712
1834
|
msg.id
|
|
1713
1835
|
)) });
|
|
1714
1836
|
}
|
|
1715
|
-
var MessagesContainer = React3.forwardRef(
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
const
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
const
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
container.
|
|
1732
|
-
|
|
1733
|
-
behavior: "smooth"
|
|
1734
|
-
});
|
|
1735
|
-
}, [containerRef]);
|
|
1736
|
-
React3.useEffect(() => {
|
|
1737
|
-
const container = containerRef.current;
|
|
1738
|
-
if (!container) return;
|
|
1739
|
-
const handleScroll = () => {
|
|
1740
|
-
isUserScrollingRef.current = !isNearBottom();
|
|
1741
|
-
};
|
|
1742
|
-
container.addEventListener("scroll", handleScroll, { passive: true });
|
|
1743
|
-
return () => container.removeEventListener("scroll", handleScroll);
|
|
1744
|
-
}, [containerRef, isNearBottom]);
|
|
1745
|
-
React3.useEffect(() => {
|
|
1746
|
-
const container = containerRef.current;
|
|
1747
|
-
if (!container) return;
|
|
1748
|
-
const currentHeight = container.scrollHeight;
|
|
1749
|
-
const heightChanged = currentHeight !== lastScrollHeightRef.current;
|
|
1750
|
-
if (heightChanged) {
|
|
1751
|
-
lastScrollHeightRef.current = currentHeight;
|
|
1752
|
-
if (!isUserScrollingRef.current || isNearBottom()) {
|
|
1753
|
-
scrollToBottom();
|
|
1754
|
-
}
|
|
1755
|
-
}
|
|
1837
|
+
var MessagesContainer = React3.forwardRef(({ children }, ref) => {
|
|
1838
|
+
const styles = useWidgetStyles2();
|
|
1839
|
+
const internalRef = React3.useRef(null);
|
|
1840
|
+
const lastScrollHeightRef = React3.useRef(0);
|
|
1841
|
+
const isUserScrollingRef = React3.useRef(false);
|
|
1842
|
+
const containerRef = ref || internalRef;
|
|
1843
|
+
const isNearBottom = React3.useCallback(() => {
|
|
1844
|
+
const container = containerRef.current;
|
|
1845
|
+
if (!container) return true;
|
|
1846
|
+
const threshold = 100;
|
|
1847
|
+
return container.scrollHeight - container.scrollTop - container.clientHeight < threshold;
|
|
1848
|
+
}, [containerRef]);
|
|
1849
|
+
const scrollToBottom = React3.useCallback(() => {
|
|
1850
|
+
const container = containerRef.current;
|
|
1851
|
+
if (!container) return;
|
|
1852
|
+
container.scrollTo({
|
|
1853
|
+
top: container.scrollHeight,
|
|
1854
|
+
behavior: "smooth"
|
|
1756
1855
|
});
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1856
|
+
}, [containerRef]);
|
|
1857
|
+
React3.useEffect(() => {
|
|
1858
|
+
const container = containerRef.current;
|
|
1859
|
+
if (!container) return;
|
|
1860
|
+
const handleScroll = () => {
|
|
1861
|
+
isUserScrollingRef.current = !isNearBottom();
|
|
1862
|
+
};
|
|
1863
|
+
container.addEventListener("scroll", handleScroll, { passive: true });
|
|
1864
|
+
return () => container.removeEventListener("scroll", handleScroll);
|
|
1865
|
+
}, [containerRef, isNearBottom]);
|
|
1866
|
+
React3.useEffect(() => {
|
|
1867
|
+
const container = containerRef.current;
|
|
1868
|
+
if (!container) return;
|
|
1869
|
+
const currentHeight = container.scrollHeight;
|
|
1870
|
+
const heightChanged = currentHeight !== lastScrollHeightRef.current;
|
|
1871
|
+
if (heightChanged) {
|
|
1872
|
+
lastScrollHeightRef.current = currentHeight;
|
|
1873
|
+
if (!isUserScrollingRef.current || isNearBottom()) {
|
|
1874
|
+
scrollToBottom();
|
|
1769
1875
|
}
|
|
1770
|
-
|
|
1771
|
-
}
|
|
1772
|
-
|
|
1876
|
+
}
|
|
1877
|
+
});
|
|
1878
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1879
|
+
framerMotion.motion.div,
|
|
1880
|
+
{
|
|
1881
|
+
ref: containerRef,
|
|
1882
|
+
id: MESSAGES_CONTAINER_ID,
|
|
1883
|
+
initial: { opacity: 0 },
|
|
1884
|
+
animate: { opacity: 1 },
|
|
1885
|
+
exit: { opacity: 0 },
|
|
1886
|
+
transition: { duration: styles.animations.duration },
|
|
1887
|
+
className: "crow-relative crow-flex-1 crow-min-h-0 crow-rounded-2xl crow-mb-3 crow-overflow-y-auto crow-p-4 crow-space-y-3 crow-pointer-events-auto",
|
|
1888
|
+
style: { background: styles.colors.messagesBackground },
|
|
1889
|
+
children
|
|
1890
|
+
}
|
|
1891
|
+
);
|
|
1892
|
+
});
|
|
1773
1893
|
MessagesContainer.displayName = "MessagesContainer";
|
|
1774
1894
|
function ConversationList({
|
|
1775
1895
|
conversations,
|
|
@@ -2041,7 +2161,13 @@ var PromptInput = React3__default.default.forwardRef(
|
|
|
2041
2161
|
}
|
|
2042
2162
|
);
|
|
2043
2163
|
PromptInput.displayName = "PromptInput";
|
|
2044
|
-
var PromptInputTextarea = ({
|
|
2164
|
+
var PromptInputTextarea = ({
|
|
2165
|
+
className,
|
|
2166
|
+
onKeyDown,
|
|
2167
|
+
disableAutosize = false,
|
|
2168
|
+
placeholder,
|
|
2169
|
+
...props
|
|
2170
|
+
}) => {
|
|
2045
2171
|
const { value, setValue, maxHeight, onSubmit, disabled } = usePromptInput();
|
|
2046
2172
|
const textareaRef = React3__default.default.useRef(null);
|
|
2047
2173
|
React3__default.default.useEffect(() => {
|
|
@@ -2074,7 +2200,14 @@ var PromptInputActions = ({
|
|
|
2074
2200
|
children,
|
|
2075
2201
|
className,
|
|
2076
2202
|
...props
|
|
2077
|
-
}) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2203
|
+
}) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2204
|
+
"div",
|
|
2205
|
+
{
|
|
2206
|
+
className: cn("crow-flex crow-items-center crow-gap-2", className),
|
|
2207
|
+
...props,
|
|
2208
|
+
children
|
|
2209
|
+
}
|
|
2210
|
+
);
|
|
2078
2211
|
var PromptInputAction = ({
|
|
2079
2212
|
tooltip,
|
|
2080
2213
|
children,
|
|
@@ -2121,7 +2254,13 @@ var PromptInputBox = React3__default.default.forwardRef(
|
|
|
2121
2254
|
disabled: isLoading,
|
|
2122
2255
|
ref: ref || promptBoxRef,
|
|
2123
2256
|
children: [
|
|
2124
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "crow-transition-all crow-duration-300 crow-opacity-100", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2257
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "crow-transition-all crow-duration-300 crow-opacity-100", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2258
|
+
PromptInputTextarea,
|
|
2259
|
+
{
|
|
2260
|
+
placeholder,
|
|
2261
|
+
className: "crow-text-base"
|
|
2262
|
+
}
|
|
2263
|
+
) }),
|
|
2125
2264
|
/* @__PURE__ */ jsxRuntime.jsxs(PromptInputActions, { className: "crow-flex crow-items-center crow-justify-between crow-gap-2 crow-p-0 crow-pt-1", children: [
|
|
2126
2265
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "crow-flex crow-items-center", children: availableModels.length > 0 && onModelChange && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2127
2266
|
ModelSelector,
|
|
@@ -2154,10 +2293,21 @@ var PromptInputBox = React3__default.default.forwardRef(
|
|
|
2154
2293
|
handleSubmit();
|
|
2155
2294
|
}
|
|
2156
2295
|
},
|
|
2157
|
-
children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2296
|
+
children: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
2297
|
+
lucideReact.Square,
|
|
2298
|
+
{
|
|
2299
|
+
className: "crow-h-3.5 crow-w-3.5 crow-text-white",
|
|
2300
|
+
style: { fill: "white" }
|
|
2301
|
+
}
|
|
2302
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
2303
|
+
lucideReact.ArrowUp,
|
|
2304
|
+
{
|
|
2305
|
+
className: cn(
|
|
2306
|
+
"crow-h-3.5 crow-w-3.5",
|
|
2307
|
+
hasContent ? "crow-text-white" : "crow-text-gray-400"
|
|
2308
|
+
)
|
|
2309
|
+
}
|
|
2310
|
+
)
|
|
2161
2311
|
}
|
|
2162
2312
|
)
|
|
2163
2313
|
}
|
|
@@ -2272,7 +2422,7 @@ function getCssVar(varName, element = document.documentElement) {
|
|
|
2272
2422
|
var STYLE_ID = "crow-ui-styles";
|
|
2273
2423
|
var WIDGET_CSS = `*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }
|
|
2274
2424
|
|
|
2275
|
-
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.crow-pointer-events-none{pointer-events:none}.crow-pointer-events-auto{pointer-events:auto}.crow-fixed{position:fixed}.crow-absolute{position:absolute}.crow-relative{position:relative}.crow-sticky{position:sticky}.crow-bottom-0{bottom:0}.crow-bottom-full{bottom:100%}.crow-left-0{left:0}.crow-right-0{right:0}.crow-top-0{top:0}.crow-z-50{z-index:50}.crow-z-\\[999999\\]{z-index:999999}.crow-m-0{margin:0}.crow-my-1{margin-top:.25rem}.crow-mb-1,.crow-my-1{margin-bottom:.25rem}.crow-mb-2{margin-bottom:.5rem}.crow-mb-3{margin-bottom:.75rem}.crow-ml-0{margin-left:0}.crow-ml-0\\.5{margin-left:.125rem}.crow-ml-2{margin-left:.5rem}.crow-ml-4{margin-left:1rem}.crow-mt-0{margin-top:0}.crow-mt-0\\.5{margin-top:.125rem}.crow-mt-1{margin-top:.25rem}.crow-mt-2{margin-top:.5rem}.crow-mt-auto{margin-top:auto}.crow-inline-block{display:inline-block}.crow-flex{display:flex}.crow-inline-flex{display:inline-flex}.crow-h-10{height:2.5rem}.crow-h-12{height:3rem}.crow-h-2{height:.5rem}.crow-h-3{height:.75rem}.crow-h-3\\.5{height:.875rem}.crow-h-4{height:1rem}.crow-h-7{height:1.75rem}.crow-h-8{height:2rem}.crow-h-full{height:100%}.crow-max-h-32{max-height:8rem}.crow-max-h-\\[200px\\]{max-height:200px}.crow-min-h-0{min-height:0}.crow-min-h-\\[32px\\]{min-height:32px}.crow-w-0{width:0}.crow-w-0\\.5{width:.125rem}.crow-w-2{width:.5rem}.crow-w-3{width:.75rem}.crow-w-3\\.5{width:.875rem}.crow-w-4{width:1rem}.crow-w-7{width:1.75rem}.crow-w-8{width:2rem}.crow-w-full{width:100%}.crow-min-w-0{min-width:0}.crow-min-w-\\[180px\\]{min-width:180px}.crow-max-w-\\[80\\%\\]{max-width:80%}.crow-max-w-\\[90\\%\\]{max-width:90%}.crow-max-w-full{max-width:100%}.crow-flex-1{flex:1 1 0%}.crow-flex-shrink-0{flex-shrink:0}.crow-rotate-180{--tw-rotate:180deg}.crow-rotate-180,.crow-scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.crow-scale-100{--tw-scale-x:1;--tw-scale-y:1}.crow-scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.crow-animate-fade-in{animation:crow-fadeIn .2s ease-out}.crow-animate-pulse{animation:crow-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.crow-animate-slide-up{animation:crow-slideUp .3s ease-out}@keyframes crow-spin{to{transform:rotate(1turn)}}.crow-animate-spin{animation:crow-spin 1s linear infinite}.crow-cursor-default{cursor:default}.crow-cursor-not-allowed{cursor:not-allowed}.crow-cursor-pointer{cursor:pointer}.crow-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.crow-resize-none{resize:none}.crow-list-decimal{list-style-type:decimal}.crow-list-disc{list-style-type:disc}.crow-flex-row{flex-direction:row}.crow-flex-col{flex-direction:column}.crow-items-start{align-items:flex-start}.crow-items-end{align-items:flex-end}.crow-items-center{align-items:center}.crow-justify-start{justify-content:flex-start}.crow-justify-end{justify-content:flex-end}.crow-justify-center{justify-content:center}.crow-justify-between{justify-content:space-between}.crow-gap-1{gap:.25rem}.crow-gap-1\\.5{gap:.375rem}.crow-gap-2{gap:.5rem}.crow-gap-3{gap:.75rem}.crow-gap-4{gap:1rem}.crow-gap-6{gap:1.5rem}.crow-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.crow-space-y-1\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.crow-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.crow-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.crow-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.crow-overflow-hidden{overflow:hidden}.crow-overflow-visible{overflow:visible}.crow-overflow-x-auto{overflow-x:auto}.crow-overflow-y-auto{overflow-y:auto}.crow-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crow-whitespace-pre-wrap{white-space:pre-wrap}.crow-break-words{overflow-wrap:break-word}.crow-rounded{border-radius:.25rem}.crow-rounded-2xl{border-radius:1rem}.crow-rounded-3xl{border-radius:1.5rem}.crow-rounded-full{border-radius:9999px}.crow-rounded-lg{border-radius:.5rem}.crow-rounded-md{border-radius:.375rem}.crow-rounded-xl{border-radius:.75rem}.crow-border{border-width:1px}.crow-border-b{border-bottom-width:1px}.crow-border-l{border-left-width:1px}.crow-border-l-2{border-left-width:2px}.crow-border-r{border-right-width:1px}.crow-border-t{border-top-width:1px}.crow-border-none{border-style:none}.crow-border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.crow-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.crow-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.crow-border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.crow-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.crow-bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.crow-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.crow-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.crow-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.crow-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.crow-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.crow-bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.crow-bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.crow-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.crow-bg-transparent{background-color:transparent}.crow-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.crow-p-0{padding:0}.crow-p-1{padding:.25rem}.crow-p-1\\.5{padding:.375rem}.crow-p-2{padding:.5rem}.crow-p-3{padding:.75rem}.crow-p-4{padding:1rem}.crow-p-6{padding:1.5rem}.crow-px-1{padding-left:.25rem;padding-right:.25rem}.crow-px-2{padding-left:.5rem;padding-right:.5rem}.crow-px-3{padding-left:.75rem;padding-right:.75rem}.crow-px-4{padding-left:1rem;padding-right:1rem}.crow-px-6{padding-left:1.5rem;padding-right:1.5rem}.crow-py-0{padding-top:0;padding-bottom:0}.crow-py-0\\.5{padding-top:.125rem;padding-bottom:.125rem}.crow-py-1{padding-top:.25rem;padding-bottom:.25rem}.crow-py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.crow-py-2{padding-top:.5rem;padding-bottom:.5rem}.crow-py-3{padding-top:.75rem;padding-bottom:.75rem}.crow-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.crow-py-8{padding-top:2rem;padding-bottom:2rem}.crow-pb-2{padding-bottom:.5rem}.crow-pl-3{padding-left:.75rem}.crow-pl-4{padding-left:1rem}.crow-pl-5{padding-left:1.25rem}.crow-pr-4{padding-right:1rem}.crow-pt-1{padding-top:.25rem}.crow-text-left{text-align:left}.crow-text-center{text-align:center}.crow-text-right{text-align:right}.crow-align-text-bottom{vertical-align:text-bottom}.crow-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.crow-text-base{font-size:1rem;line-height:1.5rem}.crow-text-lg{font-size:1.125rem;line-height:1.75rem}.crow-text-sm{font-size:.875rem;line-height:1.25rem}.crow-text-xs{font-size:.75rem;line-height:1rem}.crow-font-bold{font-weight:700}.crow-font-medium{font-weight:500}.crow-font-semibold{font-weight:600}.crow-uppercase{text-transform:uppercase}.crow-leading-relaxed{line-height:1.625}.crow-tracking-wide{letter-spacing:.025em}.crow-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.crow-text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.crow-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.crow-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.crow-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.crow-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.crow-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.crow-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.crow-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.crow-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.crow-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.crow-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.crow-underline{text-decoration-line:underline}.crow-opacity-0{opacity:0}.crow-opacity-100{opacity:1}.crow-opacity-50{opacity:.5}.crow-opacity-60{opacity:.6}.crow-shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.crow-shadow-2xl,.crow-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.crow-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.crow-shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.crow-backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.crow-backdrop-blur-md,.crow-backdrop-blur-sm{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.crow-backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.crow-transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-duration-150{transition-duration:.15s}.crow-duration-200{transition-duration:.2s}.crow-duration-300{transition-duration:.3s}.crow-duration-500{transition-duration:.5s}.crow-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.crow-animate-fade-in{animation:crow-fadeIn .2s ease-out}.crow-animate-slide-up{animation:crow-slideUp .3s ease-out}.crow-animate-pulse{animation:crow-pulse 1.5s ease-in-out infinite}.crow-animation-delay-100{animation-delay:.1s}.crow-animation-delay-200{animation-delay:.2s}@keyframes crow-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes crow-slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes crow-pulse{0%,to{opacity:1}50%{opacity:.4}}.crow-overflow-y-auto::-webkit-scrollbar{width:6px}.crow-overflow-y-auto::-webkit-scrollbar-track{background:transparent}.crow-overflow-y-auto::-webkit-scrollbar-thumb{background-color:#d1d5db;border-radius:3px}.crow-overflow-y-auto::-webkit-scrollbar-thumb:hover{background-color:#9ca3af}.crow-focus-visible\\:crow-outline-none:focus-visible{outline:none}.crow-focus-visible\\:crow-ring-2:focus-visible{box-shadow:0 0 0 2px var(--crow-primary,#6366f1)}:host{--crow-primary:#6366f1;--crow-primary-dark:#4f46e5;--crow-secondary:#f1f5f9;--crow-accent:#10b981}@media (prefers-color-scheme:dark){:host{--crow-primary:#818cf8;--crow-primary-dark:#6366f1}}.placeholder\\:crow-text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.placeholder\\:crow-text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.last\\:crow-mb-0:last-child{margin-bottom:0}.last\\:crow-border-0:last-child{border-width:0}.hover\\:crow-scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:crow-bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\\:crow-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\\:crow-bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.hover\\:crow-bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\\:crow-bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.hover\\:crow-text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.hover\\:crow-text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\\:crow-text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.hover\\:crow-opacity-100:hover{opacity:1}.focus\\:crow-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:crow-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\\:crow-ring-0:focus,.focus\\:crow-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:crow-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\\:crow-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\\:crow-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:crow-ring-0:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.disabled\\:crow-pointer-events-none:disabled{pointer-events:none}.disabled\\:crow-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:crow-opacity-50:disabled{opacity:.5}`;
|
|
2425
|
+
/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.crow-pointer-events-none{pointer-events:none}.crow-pointer-events-auto{pointer-events:auto}.crow-fixed{position:fixed}.crow-absolute{position:absolute}.crow-relative{position:relative}.crow-sticky{position:sticky}.crow-bottom-0{bottom:0}.crow-bottom-full{bottom:100%}.crow-left-0{left:0}.crow-right-0{right:0}.crow-top-0{top:0}.crow-z-50{z-index:50}.crow-z-\\[999999\\]{z-index:999999}.crow-m-0{margin:0}.crow-my-1{margin-top:.25rem;margin-bottom:.25rem}.crow-my-2{margin-top:.5rem;margin-bottom:.5rem}.crow-mb-1{margin-bottom:.25rem}.crow-mb-2{margin-bottom:.5rem}.crow-mb-3{margin-bottom:.75rem}.crow-ml-0{margin-left:0}.crow-ml-0\\.5{margin-left:.125rem}.crow-ml-2{margin-left:.5rem}.crow-ml-4{margin-left:1rem}.crow-mt-0{margin-top:0}.crow-mt-0\\.5{margin-top:.125rem}.crow-mt-1{margin-top:.25rem}.crow-mt-2{margin-top:.5rem}.crow-mt-auto{margin-top:auto}.crow-inline-block{display:inline-block}.crow-flex{display:flex}.crow-inline-flex{display:inline-flex}.crow-h-10{height:2.5rem}.crow-h-12{height:3rem}.crow-h-2{height:.5rem}.crow-h-3{height:.75rem}.crow-h-3\\.5{height:.875rem}.crow-h-4{height:1rem}.crow-h-7{height:1.75rem}.crow-h-8{height:2rem}.crow-h-full{height:100%}.crow-max-h-32{max-height:8rem}.crow-max-h-\\[200px\\]{max-height:200px}.crow-min-h-0{min-height:0}.crow-min-h-\\[32px\\]{min-height:32px}.crow-w-0{width:0}.crow-w-0\\.5{width:.125rem}.crow-w-2{width:.5rem}.crow-w-3{width:.75rem}.crow-w-3\\.5{width:.875rem}.crow-w-4{width:1rem}.crow-w-7{width:1.75rem}.crow-w-8{width:2rem}.crow-w-full{width:100%}.crow-min-w-0{min-width:0}.crow-min-w-\\[180px\\]{min-width:180px}.crow-max-w-\\[80\\%\\]{max-width:80%}.crow-max-w-\\[90\\%\\]{max-width:90%}.crow-max-w-full{max-width:100%}.crow-flex-1{flex:1 1 0%}.crow-flex-shrink-0{flex-shrink:0}.crow-rotate-180{--tw-rotate:180deg}.crow-rotate-180,.crow-scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.crow-scale-100{--tw-scale-x:1;--tw-scale-y:1}.crow-scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.crow-animate-fade-in{animation:crow-fadeIn .2s ease-out}.crow-animate-pulse{animation:crow-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.crow-animate-slide-up{animation:crow-slideUp .3s ease-out}@keyframes crow-spin{to{transform:rotate(1turn)}}.crow-animate-spin{animation:crow-spin 1s linear infinite}.crow-cursor-default{cursor:default}.crow-cursor-not-allowed{cursor:not-allowed}.crow-cursor-pointer{cursor:pointer}.crow-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.crow-resize-none{resize:none}.crow-list-decimal{list-style-type:decimal}.crow-list-disc{list-style-type:disc}.crow-flex-row{flex-direction:row}.crow-flex-col{flex-direction:column}.crow-items-start{align-items:flex-start}.crow-items-end{align-items:flex-end}.crow-items-center{align-items:center}.crow-justify-start{justify-content:flex-start}.crow-justify-end{justify-content:flex-end}.crow-justify-center{justify-content:center}.crow-justify-between{justify-content:space-between}.crow-gap-1{gap:.25rem}.crow-gap-1\\.5{gap:.375rem}.crow-gap-2{gap:.5rem}.crow-gap-3{gap:.75rem}.crow-gap-4{gap:1rem}.crow-gap-6{gap:1.5rem}.crow-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.crow-space-y-1\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.crow-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.crow-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.crow-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.crow-overflow-hidden{overflow:hidden}.crow-overflow-visible{overflow:visible}.crow-overflow-x-auto{overflow-x:auto}.crow-overflow-y-auto{overflow-y:auto}.crow-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crow-whitespace-pre-wrap{white-space:pre-wrap}.crow-break-words{overflow-wrap:break-word}.crow-rounded{border-radius:.25rem}.crow-rounded-2xl{border-radius:1rem}.crow-rounded-3xl{border-radius:1.5rem}.crow-rounded-full{border-radius:9999px}.crow-rounded-lg{border-radius:.5rem}.crow-rounded-md{border-radius:.375rem}.crow-rounded-xl{border-radius:.75rem}.crow-border{border-width:1px}.crow-border-b{border-bottom-width:1px}.crow-border-l{border-left-width:1px}.crow-border-l-2{border-left-width:2px}.crow-border-r{border-right-width:1px}.crow-border-t{border-top-width:1px}.crow-border-none{border-style:none}.crow-border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.crow-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.crow-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.crow-border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.crow-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.crow-bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.crow-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.crow-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.crow-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.crow-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.crow-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.crow-bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.crow-bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.crow-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.crow-bg-transparent{background-color:transparent}.crow-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.crow-p-0{padding:0}.crow-p-1{padding:.25rem}.crow-p-1\\.5{padding:.375rem}.crow-p-2{padding:.5rem}.crow-p-3{padding:.75rem}.crow-p-4{padding:1rem}.crow-p-6{padding:1.5rem}.crow-px-1{padding-left:.25rem;padding-right:.25rem}.crow-px-1\\.5{padding-left:.375rem;padding-right:.375rem}.crow-px-2{padding-left:.5rem;padding-right:.5rem}.crow-px-3{padding-left:.75rem;padding-right:.75rem}.crow-px-4{padding-left:1rem;padding-right:1rem}.crow-px-6{padding-left:1.5rem;padding-right:1.5rem}.crow-py-0{padding-top:0;padding-bottom:0}.crow-py-0\\.5{padding-top:.125rem;padding-bottom:.125rem}.crow-py-1{padding-top:.25rem;padding-bottom:.25rem}.crow-py-1\\.5{padding-top:.375rem;padding-bottom:.375rem}.crow-py-2{padding-top:.5rem;padding-bottom:.5rem}.crow-py-3{padding-top:.75rem;padding-bottom:.75rem}.crow-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.crow-py-8{padding-top:2rem;padding-bottom:2rem}.crow-pb-2{padding-bottom:.5rem}.crow-pl-3{padding-left:.75rem}.crow-pl-4{padding-left:1rem}.crow-pl-5{padding-left:1.25rem}.crow-pr-4{padding-right:1rem}.crow-pt-1{padding-top:.25rem}.crow-text-left{text-align:left}.crow-text-center{text-align:center}.crow-text-right{text-align:right}.crow-align-text-bottom{vertical-align:text-bottom}.crow-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.crow-text-base{font-size:1rem;line-height:1.5rem}.crow-text-lg{font-size:1.125rem;line-height:1.75rem}.crow-text-sm{font-size:.875rem;line-height:1.25rem}.crow-text-xs{font-size:.75rem;line-height:1rem}.crow-font-bold{font-weight:700}.crow-font-medium{font-weight:500}.crow-font-semibold{font-weight:600}.crow-uppercase{text-transform:uppercase}.crow-leading-relaxed{line-height:1.625}.crow-tracking-wide{letter-spacing:.025em}.crow-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.crow-text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.crow-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.crow-text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.crow-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.crow-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.crow-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.crow-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.crow-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.crow-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.crow-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.crow-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.crow-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.crow-underline{text-decoration-line:underline}.crow-opacity-0{opacity:0}.crow-opacity-100{opacity:1}.crow-opacity-50{opacity:.5}.crow-opacity-60{opacity:.6}.crow-shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.crow-shadow-2xl,.crow-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.crow-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.crow-shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.crow-backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.crow-backdrop-blur-md,.crow-backdrop-blur-sm{backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.crow-backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.crow-transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.crow-duration-150{transition-duration:.15s}.crow-duration-200{transition-duration:.2s}.crow-duration-300{transition-duration:.3s}.crow-duration-500{transition-duration:.5s}.crow-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.crow-animate-fade-in{animation:crow-fadeIn .2s ease-out}.crow-animate-slide-up{animation:crow-slideUp .3s ease-out}.crow-animate-pulse{animation:crow-pulse 1.5s ease-in-out infinite}.crow-animation-delay-100{animation-delay:.1s}.crow-animation-delay-200{animation-delay:.2s}@keyframes crow-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes crow-slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes crow-pulse{0%,to{opacity:1}50%{opacity:.4}}.crow-overflow-y-auto::-webkit-scrollbar{width:6px}.crow-overflow-y-auto::-webkit-scrollbar-track{background:transparent}.crow-overflow-y-auto::-webkit-scrollbar-thumb{background-color:#d1d5db;border-radius:3px}.crow-overflow-y-auto::-webkit-scrollbar-thumb:hover{background-color:#9ca3af}.crow-focus-visible\\:crow-outline-none:focus-visible{outline:none}.crow-focus-visible\\:crow-ring-2:focus-visible{box-shadow:0 0 0 2px var(--crow-primary,#6366f1)}:host{--crow-primary:#6366f1;--crow-primary-dark:#4f46e5;--crow-secondary:#f1f5f9;--crow-accent:#10b981}@media (prefers-color-scheme:dark){:host{--crow-primary:#818cf8;--crow-primary-dark:#6366f1}}.placeholder\\:crow-text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.placeholder\\:crow-text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.last\\:crow-mb-0:last-child{margin-bottom:0}.last\\:crow-border-0:last-child{border-width:0}.hover\\:crow-scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:crow-bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\\:crow-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\\:crow-bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.hover\\:crow-bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\\:crow-bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.hover\\:crow-text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.hover\\:crow-text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\\:crow-text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.hover\\:crow-opacity-100:hover{opacity:1}.focus\\:crow-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:crow-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\\:crow-ring-0:focus,.focus\\:crow-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:crow-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\\:crow-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\\:crow-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:crow-ring-0:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.disabled\\:crow-pointer-events-none:disabled{pointer-events:none}.disabled\\:crow-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:crow-opacity-50:disabled{opacity:.5}`;
|
|
2276
2426
|
var injected = false;
|
|
2277
2427
|
function injectStyles(target = document) {
|
|
2278
2428
|
if (target === document && injected) return;
|
|
@@ -2298,16 +2448,18 @@ function CrowWidget({
|
|
|
2298
2448
|
variant = "floating",
|
|
2299
2449
|
styles: propStyles,
|
|
2300
2450
|
previewMode = false,
|
|
2451
|
+
showThinking: showThinkingProp,
|
|
2301
2452
|
onReady,
|
|
2302
2453
|
onIdentify,
|
|
2303
2454
|
tools
|
|
2304
2455
|
}) {
|
|
2305
|
-
const { styles, isLoading: isLoadingStyles, agentName, browserUseEnabled } = useWidgetStyles({
|
|
2456
|
+
const { styles, isLoading: isLoadingStyles, agentName, browserUseEnabled, showThinking: showThinkingFromAPI } = useWidgetStyles({
|
|
2306
2457
|
productId,
|
|
2307
2458
|
apiUrl,
|
|
2308
2459
|
propStyles,
|
|
2309
2460
|
skip: previewMode
|
|
2310
2461
|
});
|
|
2462
|
+
const showThinking = showThinkingProp ?? showThinkingFromAPI;
|
|
2311
2463
|
const [autoTools, setAutoTools] = React3.useState({});
|
|
2312
2464
|
const cssVars = stylesToCssVars(styles);
|
|
2313
2465
|
const messagesContainerRef = React3.useRef(null);
|
|
@@ -2554,6 +2706,7 @@ function CrowWidget({
|
|
|
2554
2706
|
agentName,
|
|
2555
2707
|
isLoading: isLoadingStyles,
|
|
2556
2708
|
variant,
|
|
2709
|
+
showThinking,
|
|
2557
2710
|
children: [
|
|
2558
2711
|
variant === "floating" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2559
2712
|
/* @__PURE__ */ jsxRuntime.jsx(ChatBubble, { isExpanded: !isCollapsed, onClick: handleBubbleClick }),
|