@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.js
CHANGED
|
@@ -93,7 +93,9 @@ function useChat({
|
|
|
93
93
|
message,
|
|
94
94
|
conversation_id: conversationId,
|
|
95
95
|
identity_token: identityToken,
|
|
96
|
-
model: selectedModel
|
|
96
|
+
model: selectedModel,
|
|
97
|
+
user_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
98
|
+
user_local_time: (/* @__PURE__ */ new Date()).toLocaleString()
|
|
97
99
|
}),
|
|
98
100
|
signal: abortControllerRef.current.signal
|
|
99
101
|
});
|
|
@@ -363,7 +365,9 @@ function useChat({
|
|
|
363
365
|
tool_name: toolName,
|
|
364
366
|
result,
|
|
365
367
|
identity_token: identityToken,
|
|
366
|
-
model: selectedModel
|
|
368
|
+
model: selectedModel,
|
|
369
|
+
user_timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
370
|
+
user_local_time: (/* @__PURE__ */ new Date()).toLocaleString()
|
|
367
371
|
})
|
|
368
372
|
});
|
|
369
373
|
if (!response.ok) {
|
|
@@ -474,14 +478,14 @@ function useConversations({ productId, apiUrl = "" }) {
|
|
|
474
478
|
if (res.ok) {
|
|
475
479
|
const data = await res.json();
|
|
476
480
|
const historyMessages = data.messages || [];
|
|
477
|
-
return historyMessages.
|
|
478
|
-
(msg
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
);
|
|
481
|
+
return historyMessages.filter(
|
|
482
|
+
(msg) => msg.role !== "tool" && !msg.content.startsWith("[Client Tool Result:")
|
|
483
|
+
).map((msg, idx) => ({
|
|
484
|
+
id: `history-${idx}`,
|
|
485
|
+
content: msg.content,
|
|
486
|
+
isBot: msg.role === "assistant",
|
|
487
|
+
timestamp: /* @__PURE__ */ new Date()
|
|
488
|
+
}));
|
|
485
489
|
}
|
|
486
490
|
} catch (error) {
|
|
487
491
|
console.error("[Crow] Error loading conversation history:", error);
|
|
@@ -502,14 +506,14 @@ function useConversations({ productId, apiUrl = "" }) {
|
|
|
502
506
|
if (res.ok) {
|
|
503
507
|
const data = await res.json();
|
|
504
508
|
const historyMessages = data.messages || [];
|
|
505
|
-
return historyMessages.
|
|
506
|
-
(msg
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
);
|
|
509
|
+
return historyMessages.filter(
|
|
510
|
+
(msg) => msg.role !== "tool" && !msg.content.startsWith("[Client Tool Result:")
|
|
511
|
+
).map((msg, idx) => ({
|
|
512
|
+
id: `history-${idx}`,
|
|
513
|
+
content: msg.content,
|
|
514
|
+
isBot: msg.role === "assistant",
|
|
515
|
+
timestamp: /* @__PURE__ */ new Date()
|
|
516
|
+
}));
|
|
513
517
|
}
|
|
514
518
|
} catch (error) {
|
|
515
519
|
console.error("[Crow] Error loading anonymous conversation history:", error);
|
|
@@ -622,6 +626,16 @@ function useWorkflow({
|
|
|
622
626
|
exitWorkflow
|
|
623
627
|
};
|
|
624
628
|
}
|
|
629
|
+
var SDK_DEFAULT_TOOLS = {
|
|
630
|
+
refreshPage: async () => {
|
|
631
|
+
try {
|
|
632
|
+
window.location.reload();
|
|
633
|
+
return { status: "success", data: { message: "Page refresh initiated" } };
|
|
634
|
+
} catch (error) {
|
|
635
|
+
return { status: "error", error: String(error) };
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
};
|
|
625
639
|
function useCrowAPI({ onIdentified, onReset } = {}) {
|
|
626
640
|
const onIdentifiedRef = useRef(onIdentified);
|
|
627
641
|
const onResetRef = useRef(onReset);
|
|
@@ -631,6 +645,15 @@ function useCrowAPI({ onIdentified, onReset } = {}) {
|
|
|
631
645
|
onResetRef.current = onReset;
|
|
632
646
|
});
|
|
633
647
|
useEffect(() => {
|
|
648
|
+
if (!window.__crow_client_tools) {
|
|
649
|
+
window.__crow_client_tools = {};
|
|
650
|
+
}
|
|
651
|
+
for (const [toolName, handler] of Object.entries(SDK_DEFAULT_TOOLS)) {
|
|
652
|
+
if (!window.__crow_client_tools[toolName]) {
|
|
653
|
+
window.__crow_client_tools[toolName] = handler;
|
|
654
|
+
console.log(`[Crow] Registered default tool: ${toolName}`);
|
|
655
|
+
}
|
|
656
|
+
}
|
|
634
657
|
window.crow = function(command, options) {
|
|
635
658
|
const opts = options;
|
|
636
659
|
switch (command) {
|
|
@@ -990,6 +1013,9 @@ function useWidgetStyles({
|
|
|
990
1013
|
const [browserUseEnabled, setBrowserUseEnabled] = useState(
|
|
991
1014
|
styleCache.get(key)?.browserUseEnabled || false
|
|
992
1015
|
);
|
|
1016
|
+
const [showThinking, setShowThinking] = useState(
|
|
1017
|
+
styleCache.get(key)?.showThinking ?? true
|
|
1018
|
+
);
|
|
993
1019
|
const hasFetchedRef = useRef(false);
|
|
994
1020
|
const fetchStyles = async () => {
|
|
995
1021
|
if (skip) return;
|
|
@@ -1001,6 +1027,7 @@ function useWidgetStyles({
|
|
|
1001
1027
|
setDbStyles(config.widgetStyles);
|
|
1002
1028
|
setAgentName(config.agentName || "Assistant");
|
|
1003
1029
|
setBrowserUseEnabled(config.browserUseEnabled || false);
|
|
1030
|
+
setShowThinking(config.showThinking ?? true);
|
|
1004
1031
|
} catch (err) {
|
|
1005
1032
|
console.error("[CrowWidget] Failed to fetch styles:", err);
|
|
1006
1033
|
setError(err instanceof Error ? err : new Error(String(err)));
|
|
@@ -1015,6 +1042,7 @@ function useWidgetStyles({
|
|
|
1015
1042
|
setDbStyles(cached.widgetStyles);
|
|
1016
1043
|
setAgentName(cached.agentName || "Assistant");
|
|
1017
1044
|
setBrowserUseEnabled(cached.browserUseEnabled || false);
|
|
1045
|
+
setShowThinking(cached.showThinking ?? true);
|
|
1018
1046
|
setIsLoading(false);
|
|
1019
1047
|
return;
|
|
1020
1048
|
}
|
|
@@ -1028,6 +1056,7 @@ function useWidgetStyles({
|
|
|
1028
1056
|
error,
|
|
1029
1057
|
agentName,
|
|
1030
1058
|
browserUseEnabled,
|
|
1059
|
+
showThinking,
|
|
1031
1060
|
refetch: fetchStyles
|
|
1032
1061
|
};
|
|
1033
1062
|
}
|
|
@@ -1108,11 +1137,12 @@ function WidgetStyleProvider({
|
|
|
1108
1137
|
styles,
|
|
1109
1138
|
agentName = "Assistant",
|
|
1110
1139
|
isLoading = false,
|
|
1111
|
-
variant = "floating"
|
|
1140
|
+
variant = "floating",
|
|
1141
|
+
showThinking = true
|
|
1112
1142
|
}) {
|
|
1113
1143
|
const value = useMemo(
|
|
1114
|
-
() => ({ styles, agentName, isLoading, variant }),
|
|
1115
|
-
[styles, agentName, isLoading, variant]
|
|
1144
|
+
() => ({ styles, agentName, isLoading, variant, showThinking }),
|
|
1145
|
+
[styles, agentName, isLoading, variant, showThinking]
|
|
1116
1146
|
);
|
|
1117
1147
|
return /* @__PURE__ */ jsx(WidgetStyleContext.Provider, { value, children });
|
|
1118
1148
|
}
|
|
@@ -1129,7 +1159,13 @@ function useWidgetStyles2() {
|
|
|
1129
1159
|
const context = useContext(WidgetStyleContext);
|
|
1130
1160
|
return context?.styles ?? DEFAULT_WIDGET_STYLES;
|
|
1131
1161
|
}
|
|
1132
|
-
|
|
1162
|
+
function useShowThinking() {
|
|
1163
|
+
const context = useContext(WidgetStyleContext);
|
|
1164
|
+
return context?.showThinking ?? true;
|
|
1165
|
+
}
|
|
1166
|
+
var CopilotStyleContext = createContext(
|
|
1167
|
+
null
|
|
1168
|
+
);
|
|
1133
1169
|
function CopilotStyleProvider({
|
|
1134
1170
|
children,
|
|
1135
1171
|
styles,
|
|
@@ -1155,6 +1191,7 @@ function useCopilotStyles2() {
|
|
|
1155
1191
|
const context = useContext(CopilotStyleContext);
|
|
1156
1192
|
return context?.styles ?? DEFAULT_COPILOT_STYLES;
|
|
1157
1193
|
}
|
|
1194
|
+
var PASSTHROUGH_KEYS = /* @__PURE__ */ new Set(["Escape", "Tab"]);
|
|
1158
1195
|
function ShadowContainer({
|
|
1159
1196
|
children,
|
|
1160
1197
|
styles,
|
|
@@ -1169,6 +1206,51 @@ function ShadowContainer({
|
|
|
1169
1206
|
setShadowRoot(shadow);
|
|
1170
1207
|
}
|
|
1171
1208
|
}, []);
|
|
1209
|
+
useEffect(() => {
|
|
1210
|
+
if (!shadowRoot || !hostRef.current) return;
|
|
1211
|
+
const hostElement = hostRef.current;
|
|
1212
|
+
const stopPropagationHandler = (e) => {
|
|
1213
|
+
const keyEvent = e;
|
|
1214
|
+
if (keyEvent.key && PASSTHROUGH_KEYS.has(keyEvent.key)) {
|
|
1215
|
+
return;
|
|
1216
|
+
}
|
|
1217
|
+
e.stopPropagation();
|
|
1218
|
+
};
|
|
1219
|
+
shadowRoot.addEventListener("keydown", stopPropagationHandler);
|
|
1220
|
+
shadowRoot.addEventListener("keyup", stopPropagationHandler);
|
|
1221
|
+
shadowRoot.addEventListener("keypress", stopPropagationHandler);
|
|
1222
|
+
let lastFocusedElement = null;
|
|
1223
|
+
const trackFocus = (e) => {
|
|
1224
|
+
lastFocusedElement = e.target;
|
|
1225
|
+
};
|
|
1226
|
+
const protectFocus = (e) => {
|
|
1227
|
+
if (e.key && PASSTHROUGH_KEYS.has(e.key)) {
|
|
1228
|
+
return;
|
|
1229
|
+
}
|
|
1230
|
+
const path = e.composedPath();
|
|
1231
|
+
if (!path.includes(hostElement) && !path.includes(shadowRoot)) {
|
|
1232
|
+
return;
|
|
1233
|
+
}
|
|
1234
|
+
if (lastFocusedElement) {
|
|
1235
|
+
const elementToRestore = lastFocusedElement;
|
|
1236
|
+
queueMicrotask(() => {
|
|
1237
|
+
const activeInShadow = shadowRoot.activeElement;
|
|
1238
|
+
if (!activeInShadow) {
|
|
1239
|
+
elementToRestore.focus();
|
|
1240
|
+
}
|
|
1241
|
+
});
|
|
1242
|
+
}
|
|
1243
|
+
};
|
|
1244
|
+
shadowRoot.addEventListener("focusin", trackFocus);
|
|
1245
|
+
document.addEventListener("keydown", protectFocus, { capture: true });
|
|
1246
|
+
return () => {
|
|
1247
|
+
shadowRoot.removeEventListener("keydown", stopPropagationHandler);
|
|
1248
|
+
shadowRoot.removeEventListener("keyup", stopPropagationHandler);
|
|
1249
|
+
shadowRoot.removeEventListener("keypress", stopPropagationHandler);
|
|
1250
|
+
shadowRoot.removeEventListener("focusin", trackFocus);
|
|
1251
|
+
document.removeEventListener("keydown", protectFocus, { capture: true });
|
|
1252
|
+
};
|
|
1253
|
+
}, [shadowRoot]);
|
|
1172
1254
|
return /* @__PURE__ */ jsx("div", { ref: hostRef, id: hostId, className: hostClassName, children: shadowRoot && createPortal(
|
|
1173
1255
|
/* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1174
1256
|
/* @__PURE__ */ jsx("style", { children: styles }),
|
|
@@ -1358,13 +1440,20 @@ function StreamingText({
|
|
|
1358
1440
|
return isInline ? /* @__PURE__ */ jsx(
|
|
1359
1441
|
"code",
|
|
1360
1442
|
{
|
|
1361
|
-
className: "crow-bg-gray-
|
|
1443
|
+
className: "crow-bg-gray-800 crow-text-gray-200 crow-px-1.5 crow-py-0.5 crow-rounded crow-text-sm",
|
|
1444
|
+
...props,
|
|
1445
|
+
children
|
|
1446
|
+
}
|
|
1447
|
+
) : /* @__PURE__ */ jsx(
|
|
1448
|
+
"code",
|
|
1449
|
+
{
|
|
1450
|
+
className: `crow-text-gray-200 ${className || ""}`,
|
|
1362
1451
|
...props,
|
|
1363
1452
|
children
|
|
1364
1453
|
}
|
|
1365
|
-
)
|
|
1454
|
+
);
|
|
1366
1455
|
},
|
|
1367
|
-
pre: ({ children }) => /* @__PURE__ */ jsx("pre", { className: "crow-bg-gray-
|
|
1456
|
+
pre: ({ children }) => /* @__PURE__ */ 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 })
|
|
1368
1457
|
},
|
|
1369
1458
|
children: content
|
|
1370
1459
|
}
|
|
@@ -1447,10 +1536,6 @@ var THINKING_MESSAGES = [
|
|
|
1447
1536
|
"Connecting",
|
|
1448
1537
|
"Synthesizing"
|
|
1449
1538
|
];
|
|
1450
|
-
function getRandomThinkingMessage() {
|
|
1451
|
-
const idx = Math.floor(Math.random() * THINKING_MESSAGES.length);
|
|
1452
|
-
return THINKING_MESSAGES[idx] + "...";
|
|
1453
|
-
}
|
|
1454
1539
|
function ShimmeringContent({ children }) {
|
|
1455
1540
|
return /* @__PURE__ */ jsxs(
|
|
1456
1541
|
"span",
|
|
@@ -1476,10 +1561,21 @@ function ShimmeringContent({ children }) {
|
|
|
1476
1561
|
}
|
|
1477
1562
|
);
|
|
1478
1563
|
}
|
|
1479
|
-
function ReasoningTrace({
|
|
1564
|
+
function ReasoningTrace({
|
|
1565
|
+
thinking,
|
|
1566
|
+
isComplete,
|
|
1567
|
+
toolCalls = [],
|
|
1568
|
+
isWaiting = false,
|
|
1569
|
+
showDetails = true
|
|
1570
|
+
}) {
|
|
1480
1571
|
const hasThinking = !!thinking && thinking.trim().length > 0;
|
|
1481
1572
|
const hasToolCalls = toolCalls.length > 0;
|
|
1573
|
+
const isActive = isWaiting || hasThinking && !isComplete || toolCalls.some((t) => t.status === "executing");
|
|
1482
1574
|
if (!isWaiting && !hasThinking && !hasToolCalls) return null;
|
|
1575
|
+
if (!showDetails) {
|
|
1576
|
+
if (!isActive) return null;
|
|
1577
|
+
return /* @__PURE__ */ jsx("div", { className: "crow-flex crow-justify-start crow-mb-2", children: /* @__PURE__ */ jsx("div", { className: "crow-max-w-[90%]", children: /* @__PURE__ */ jsx(WaitingIndicator, {}) }) });
|
|
1578
|
+
}
|
|
1483
1579
|
return /* @__PURE__ */ jsx("div", { className: "crow-flex crow-justify-start crow-mb-2", children: /* @__PURE__ */ jsxs("div", { className: "crow-max-w-[90%] crow-space-y-1.5", children: [
|
|
1484
1580
|
isWaiting && !hasThinking && /* @__PURE__ */ jsx(WaitingIndicator, {}),
|
|
1485
1581
|
hasThinking && /* @__PURE__ */ jsx(ThinkingBlock, { thinking, isComplete }),
|
|
@@ -1487,17 +1583,41 @@ function ReasoningTrace({ thinking, isComplete, toolCalls = [], isWaiting = fals
|
|
|
1487
1583
|
] }) });
|
|
1488
1584
|
}
|
|
1489
1585
|
function WaitingIndicator() {
|
|
1586
|
+
const [messageIndex, setMessageIndex] = useState(
|
|
1587
|
+
() => Math.floor(Math.random() * THINKING_MESSAGES.length)
|
|
1588
|
+
);
|
|
1589
|
+
useEffect(() => {
|
|
1590
|
+
const interval = setInterval(() => {
|
|
1591
|
+
setMessageIndex((i) => (i + 1) % THINKING_MESSAGES.length);
|
|
1592
|
+
}, 3e3);
|
|
1593
|
+
return () => clearInterval(interval);
|
|
1594
|
+
}, []);
|
|
1595
|
+
const message = THINKING_MESSAGES[messageIndex] + "...";
|
|
1490
1596
|
return /* @__PURE__ */ jsxs("div", { className: "crow-flex crow-items-center crow-gap-1.5 crow-text-xs crow-text-gray-500", children: [
|
|
1491
1597
|
/* @__PURE__ */ jsx("div", { className: "crow-flex crow-items-center crow-justify-center crow-w-4 crow-h-4", children: /* @__PURE__ */ jsx(ShimmeringContent, { children: /* @__PURE__ */ jsx(Brain, { className: "crow-w-3.5 crow-h-3.5" }) }) }),
|
|
1492
|
-
/* @__PURE__ */ jsx("span", { className: "crow-font-medium", children: /* @__PURE__ */ jsx(ShimmeringContent, { children:
|
|
1598
|
+
/* @__PURE__ */ jsx("span", { className: "crow-font-medium", children: /* @__PURE__ */ jsx(ShimmeringContent, { children: message }) })
|
|
1493
1599
|
] });
|
|
1494
1600
|
}
|
|
1495
|
-
function ThinkingBlock({
|
|
1601
|
+
function ThinkingBlock({
|
|
1602
|
+
thinking,
|
|
1603
|
+
isComplete
|
|
1604
|
+
}) {
|
|
1496
1605
|
const [isExpanded, setIsExpanded] = useState(!isComplete);
|
|
1606
|
+
const [messageIndex, setMessageIndex] = useState(
|
|
1607
|
+
() => Math.floor(Math.random() * THINKING_MESSAGES.length)
|
|
1608
|
+
);
|
|
1497
1609
|
useLayoutEffect(() => {
|
|
1498
1610
|
setIsExpanded(!isComplete);
|
|
1499
1611
|
}, [isComplete]);
|
|
1612
|
+
useEffect(() => {
|
|
1613
|
+
if (isComplete) return;
|
|
1614
|
+
const interval = setInterval(() => {
|
|
1615
|
+
setMessageIndex((i) => (i + 1) % THINKING_MESSAGES.length);
|
|
1616
|
+
}, 3e3);
|
|
1617
|
+
return () => clearInterval(interval);
|
|
1618
|
+
}, [isComplete]);
|
|
1500
1619
|
const isInProgress = !isComplete;
|
|
1620
|
+
const message = THINKING_MESSAGES[messageIndex] + "...";
|
|
1501
1621
|
return /* @__PURE__ */ jsxs("div", { className: "crow-flex crow-flex-col crow-gap-1 crow-text-xs", children: [
|
|
1502
1622
|
/* @__PURE__ */ jsxs(
|
|
1503
1623
|
"button",
|
|
@@ -1506,7 +1626,7 @@ function ThinkingBlock({ thinking, isComplete }) {
|
|
|
1506
1626
|
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`,
|
|
1507
1627
|
children: [
|
|
1508
1628
|
/* @__PURE__ */ jsx("div", { className: "crow-flex crow-items-center crow-justify-center crow-w-4 crow-h-4", children: isInProgress ? /* @__PURE__ */ jsx(ShimmeringContent, { children: /* @__PURE__ */ jsx(Brain, { className: "crow-w-3.5 crow-h-3.5" }) }) : /* @__PURE__ */ jsx(Brain, { className: "crow-w-3.5 crow-h-3.5" }) }),
|
|
1509
|
-
/* @__PURE__ */ jsx("span", { className: "crow-font-medium", children: isInProgress ? /* @__PURE__ */ jsx(ShimmeringContent, { children:
|
|
1629
|
+
/* @__PURE__ */ jsx("span", { className: "crow-font-medium", children: isInProgress ? /* @__PURE__ */ jsx(ShimmeringContent, { children: message }) : "Thought" }),
|
|
1510
1630
|
/* @__PURE__ */ jsx(
|
|
1511
1631
|
motion.div,
|
|
1512
1632
|
{
|
|
@@ -1581,7 +1701,7 @@ function ToolCallBlock({ toolCall }) {
|
|
|
1581
1701
|
exit: { height: 0, opacity: 0 },
|
|
1582
1702
|
transition: { duration: 0.15 },
|
|
1583
1703
|
className: "crow-overflow-hidden",
|
|
1584
|
-
children: /* @__PURE__ */ jsx("pre", { className: "crow-mt-1 crow-p-2 crow-bg-gray-
|
|
1704
|
+
children: /* @__PURE__ */ 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) })
|
|
1585
1705
|
}
|
|
1586
1706
|
) })
|
|
1587
1707
|
] });
|
|
@@ -1592,6 +1712,7 @@ function MessageBubble({
|
|
|
1592
1712
|
isLoading = false
|
|
1593
1713
|
}) {
|
|
1594
1714
|
const styles = useWidgetStyles2();
|
|
1715
|
+
const showThinkingSetting = useShowThinking();
|
|
1595
1716
|
const isWaiting = message.content === "Thinking..." || message.isBot && isLoading && !message.content;
|
|
1596
1717
|
const hasThinking = message.isBot && message.thinking;
|
|
1597
1718
|
const hasContent = message.content && message.content !== "Thinking...";
|
|
@@ -1610,7 +1731,8 @@ function MessageBubble({
|
|
|
1610
1731
|
thinking: message.thinking,
|
|
1611
1732
|
isComplete: message.thinkingComplete,
|
|
1612
1733
|
toolCalls,
|
|
1613
|
-
isWaiting: isWaiting && !hasThinking
|
|
1734
|
+
isWaiting: isWaiting && !hasThinking,
|
|
1735
|
+
showDetails: showThinkingSetting
|
|
1614
1736
|
}
|
|
1615
1737
|
),
|
|
1616
1738
|
hasContent && /* @__PURE__ */ jsxs(
|
|
@@ -1686,64 +1808,62 @@ function MessageList({
|
|
|
1686
1808
|
msg.id
|
|
1687
1809
|
)) });
|
|
1688
1810
|
}
|
|
1689
|
-
var MessagesContainer = forwardRef(
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
const
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
const
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
container.
|
|
1706
|
-
|
|
1707
|
-
behavior: "smooth"
|
|
1708
|
-
});
|
|
1709
|
-
}, [containerRef]);
|
|
1710
|
-
useEffect(() => {
|
|
1711
|
-
const container = containerRef.current;
|
|
1712
|
-
if (!container) return;
|
|
1713
|
-
const handleScroll = () => {
|
|
1714
|
-
isUserScrollingRef.current = !isNearBottom();
|
|
1715
|
-
};
|
|
1716
|
-
container.addEventListener("scroll", handleScroll, { passive: true });
|
|
1717
|
-
return () => container.removeEventListener("scroll", handleScroll);
|
|
1718
|
-
}, [containerRef, isNearBottom]);
|
|
1719
|
-
useEffect(() => {
|
|
1720
|
-
const container = containerRef.current;
|
|
1721
|
-
if (!container) return;
|
|
1722
|
-
const currentHeight = container.scrollHeight;
|
|
1723
|
-
const heightChanged = currentHeight !== lastScrollHeightRef.current;
|
|
1724
|
-
if (heightChanged) {
|
|
1725
|
-
lastScrollHeightRef.current = currentHeight;
|
|
1726
|
-
if (!isUserScrollingRef.current || isNearBottom()) {
|
|
1727
|
-
scrollToBottom();
|
|
1728
|
-
}
|
|
1729
|
-
}
|
|
1811
|
+
var MessagesContainer = forwardRef(({ children }, ref) => {
|
|
1812
|
+
const styles = useWidgetStyles2();
|
|
1813
|
+
const internalRef = useRef(null);
|
|
1814
|
+
const lastScrollHeightRef = useRef(0);
|
|
1815
|
+
const isUserScrollingRef = useRef(false);
|
|
1816
|
+
const containerRef = ref || internalRef;
|
|
1817
|
+
const isNearBottom = useCallback(() => {
|
|
1818
|
+
const container = containerRef.current;
|
|
1819
|
+
if (!container) return true;
|
|
1820
|
+
const threshold = 100;
|
|
1821
|
+
return container.scrollHeight - container.scrollTop - container.clientHeight < threshold;
|
|
1822
|
+
}, [containerRef]);
|
|
1823
|
+
const scrollToBottom = useCallback(() => {
|
|
1824
|
+
const container = containerRef.current;
|
|
1825
|
+
if (!container) return;
|
|
1826
|
+
container.scrollTo({
|
|
1827
|
+
top: container.scrollHeight,
|
|
1828
|
+
behavior: "smooth"
|
|
1730
1829
|
});
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1830
|
+
}, [containerRef]);
|
|
1831
|
+
useEffect(() => {
|
|
1832
|
+
const container = containerRef.current;
|
|
1833
|
+
if (!container) return;
|
|
1834
|
+
const handleScroll = () => {
|
|
1835
|
+
isUserScrollingRef.current = !isNearBottom();
|
|
1836
|
+
};
|
|
1837
|
+
container.addEventListener("scroll", handleScroll, { passive: true });
|
|
1838
|
+
return () => container.removeEventListener("scroll", handleScroll);
|
|
1839
|
+
}, [containerRef, isNearBottom]);
|
|
1840
|
+
useEffect(() => {
|
|
1841
|
+
const container = containerRef.current;
|
|
1842
|
+
if (!container) return;
|
|
1843
|
+
const currentHeight = container.scrollHeight;
|
|
1844
|
+
const heightChanged = currentHeight !== lastScrollHeightRef.current;
|
|
1845
|
+
if (heightChanged) {
|
|
1846
|
+
lastScrollHeightRef.current = currentHeight;
|
|
1847
|
+
if (!isUserScrollingRef.current || isNearBottom()) {
|
|
1848
|
+
scrollToBottom();
|
|
1743
1849
|
}
|
|
1744
|
-
|
|
1745
|
-
}
|
|
1746
|
-
|
|
1850
|
+
}
|
|
1851
|
+
});
|
|
1852
|
+
return /* @__PURE__ */ jsx(
|
|
1853
|
+
motion.div,
|
|
1854
|
+
{
|
|
1855
|
+
ref: containerRef,
|
|
1856
|
+
id: MESSAGES_CONTAINER_ID,
|
|
1857
|
+
initial: { opacity: 0 },
|
|
1858
|
+
animate: { opacity: 1 },
|
|
1859
|
+
exit: { opacity: 0 },
|
|
1860
|
+
transition: { duration: styles.animations.duration },
|
|
1861
|
+
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",
|
|
1862
|
+
style: { background: styles.colors.messagesBackground },
|
|
1863
|
+
children
|
|
1864
|
+
}
|
|
1865
|
+
);
|
|
1866
|
+
});
|
|
1747
1867
|
MessagesContainer.displayName = "MessagesContainer";
|
|
1748
1868
|
function ConversationList({
|
|
1749
1869
|
conversations,
|
|
@@ -2015,7 +2135,13 @@ var PromptInput = React3.forwardRef(
|
|
|
2015
2135
|
}
|
|
2016
2136
|
);
|
|
2017
2137
|
PromptInput.displayName = "PromptInput";
|
|
2018
|
-
var PromptInputTextarea = ({
|
|
2138
|
+
var PromptInputTextarea = ({
|
|
2139
|
+
className,
|
|
2140
|
+
onKeyDown,
|
|
2141
|
+
disableAutosize = false,
|
|
2142
|
+
placeholder,
|
|
2143
|
+
...props
|
|
2144
|
+
}) => {
|
|
2019
2145
|
const { value, setValue, maxHeight, onSubmit, disabled } = usePromptInput();
|
|
2020
2146
|
const textareaRef = React3.useRef(null);
|
|
2021
2147
|
React3.useEffect(() => {
|
|
@@ -2048,7 +2174,14 @@ var PromptInputActions = ({
|
|
|
2048
2174
|
children,
|
|
2049
2175
|
className,
|
|
2050
2176
|
...props
|
|
2051
|
-
}) => /* @__PURE__ */ jsx(
|
|
2177
|
+
}) => /* @__PURE__ */ jsx(
|
|
2178
|
+
"div",
|
|
2179
|
+
{
|
|
2180
|
+
className: cn("crow-flex crow-items-center crow-gap-2", className),
|
|
2181
|
+
...props,
|
|
2182
|
+
children
|
|
2183
|
+
}
|
|
2184
|
+
);
|
|
2052
2185
|
var PromptInputAction = ({
|
|
2053
2186
|
tooltip,
|
|
2054
2187
|
children,
|
|
@@ -2095,7 +2228,13 @@ var PromptInputBox = React3.forwardRef(
|
|
|
2095
2228
|
disabled: isLoading,
|
|
2096
2229
|
ref: ref || promptBoxRef,
|
|
2097
2230
|
children: [
|
|
2098
|
-
/* @__PURE__ */ jsx("div", { className: "crow-transition-all crow-duration-300 crow-opacity-100", children: /* @__PURE__ */ jsx(
|
|
2231
|
+
/* @__PURE__ */ jsx("div", { className: "crow-transition-all crow-duration-300 crow-opacity-100", children: /* @__PURE__ */ jsx(
|
|
2232
|
+
PromptInputTextarea,
|
|
2233
|
+
{
|
|
2234
|
+
placeholder,
|
|
2235
|
+
className: "crow-text-base"
|
|
2236
|
+
}
|
|
2237
|
+
) }),
|
|
2099
2238
|
/* @__PURE__ */ jsxs(PromptInputActions, { className: "crow-flex crow-items-center crow-justify-between crow-gap-2 crow-p-0 crow-pt-1", children: [
|
|
2100
2239
|
/* @__PURE__ */ jsx("div", { className: "crow-flex crow-items-center", children: availableModels.length > 0 && onModelChange && /* @__PURE__ */ jsx(
|
|
2101
2240
|
ModelSelector,
|
|
@@ -2128,10 +2267,21 @@ var PromptInputBox = React3.forwardRef(
|
|
|
2128
2267
|
handleSubmit();
|
|
2129
2268
|
}
|
|
2130
2269
|
},
|
|
2131
|
-
children: isLoading ? /* @__PURE__ */ jsx(
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2270
|
+
children: isLoading ? /* @__PURE__ */ jsx(
|
|
2271
|
+
Square,
|
|
2272
|
+
{
|
|
2273
|
+
className: "crow-h-3.5 crow-w-3.5 crow-text-white",
|
|
2274
|
+
style: { fill: "white" }
|
|
2275
|
+
}
|
|
2276
|
+
) : /* @__PURE__ */ jsx(
|
|
2277
|
+
ArrowUp,
|
|
2278
|
+
{
|
|
2279
|
+
className: cn(
|
|
2280
|
+
"crow-h-3.5 crow-w-3.5",
|
|
2281
|
+
hasContent ? "crow-text-white" : "crow-text-gray-400"
|
|
2282
|
+
)
|
|
2283
|
+
}
|
|
2284
|
+
)
|
|
2135
2285
|
}
|
|
2136
2286
|
)
|
|
2137
2287
|
}
|
|
@@ -2246,7 +2396,7 @@ function getCssVar(varName, element = document.documentElement) {
|
|
|
2246
2396
|
var STYLE_ID = "crow-ui-styles";
|
|
2247
2397
|
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: }
|
|
2248
2398
|
|
|
2249
|
-
/*! 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}`;
|
|
2399
|
+
/*! 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}`;
|
|
2250
2400
|
var injected = false;
|
|
2251
2401
|
function injectStyles(target = document) {
|
|
2252
2402
|
if (target === document && injected) return;
|
|
@@ -2272,16 +2422,18 @@ function CrowWidget({
|
|
|
2272
2422
|
variant = "floating",
|
|
2273
2423
|
styles: propStyles,
|
|
2274
2424
|
previewMode = false,
|
|
2425
|
+
showThinking: showThinkingProp,
|
|
2275
2426
|
onReady,
|
|
2276
2427
|
onIdentify,
|
|
2277
2428
|
tools
|
|
2278
2429
|
}) {
|
|
2279
|
-
const { styles, isLoading: isLoadingStyles, agentName, browserUseEnabled } = useWidgetStyles({
|
|
2430
|
+
const { styles, isLoading: isLoadingStyles, agentName, browserUseEnabled, showThinking: showThinkingFromAPI } = useWidgetStyles({
|
|
2280
2431
|
productId,
|
|
2281
2432
|
apiUrl,
|
|
2282
2433
|
propStyles,
|
|
2283
2434
|
skip: previewMode
|
|
2284
2435
|
});
|
|
2436
|
+
const showThinking = showThinkingProp ?? showThinkingFromAPI;
|
|
2285
2437
|
const [autoTools, setAutoTools] = useState({});
|
|
2286
2438
|
const cssVars = stylesToCssVars(styles);
|
|
2287
2439
|
const messagesContainerRef = useRef(null);
|
|
@@ -2528,6 +2680,7 @@ function CrowWidget({
|
|
|
2528
2680
|
agentName,
|
|
2529
2681
|
isLoading: isLoadingStyles,
|
|
2530
2682
|
variant,
|
|
2683
|
+
showThinking,
|
|
2531
2684
|
children: [
|
|
2532
2685
|
variant === "floating" && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2533
2686
|
/* @__PURE__ */ jsx(ChatBubble, { isExpanded: !isCollapsed, onClick: handleBubbleClick }),
|