@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 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.map(
504
- (msg, idx) => ({
505
- id: `history-${idx}`,
506
- content: msg.content,
507
- isBot: msg.role === "assistant",
508
- timestamp: /* @__PURE__ */ new Date()
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.map(
532
- (msg, idx) => ({
533
- id: `history-${idx}`,
534
- content: msg.content,
535
- isBot: msg.role === "assistant",
536
- timestamp: /* @__PURE__ */ new Date()
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
- var CopilotStyleContext = React3.createContext(null);
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-100 crow-px-1 crow-py-0.5 crow-rounded crow-text-sm",
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
- ) : /* @__PURE__ */ jsxRuntime.jsx("code", { className, ...props, children });
1480
+ );
1392
1481
  },
1393
- pre: ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "crow-bg-gray-100 crow-p-2 crow-rounded crow-my-1 crow-overflow-x-auto crow-text-sm", children })
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({ thinking, isComplete, toolCalls = [], isWaiting = false }) {
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: getRandomThinkingMessage() }) })
1624
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "crow-font-medium", children: /* @__PURE__ */ jsxRuntime.jsx(ShimmeringContent, { children: message }) })
1519
1625
  ] });
1520
1626
  }
1521
- function ThinkingBlock({ thinking, isComplete }) {
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: getRandomThinkingMessage() }) : "Thought" }),
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-100 crow-rounded crow-text-xs crow-font-mono crow-text-gray-700 crow-overflow-x-auto crow-max-h-32 crow-overflow-y-auto crow-ml-4", children: JSON.stringify(toolCall.arguments, null, 2) })
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
- ({ children }, ref) => {
1717
- const styles = useWidgetStyles2();
1718
- const internalRef = React3.useRef(null);
1719
- const lastScrollHeightRef = React3.useRef(0);
1720
- const isUserScrollingRef = React3.useRef(false);
1721
- const containerRef = ref || internalRef;
1722
- const isNearBottom = React3.useCallback(() => {
1723
- const container = containerRef.current;
1724
- if (!container) return true;
1725
- const threshold = 100;
1726
- return container.scrollHeight - container.scrollTop - container.clientHeight < threshold;
1727
- }, [containerRef]);
1728
- const scrollToBottom = React3.useCallback(() => {
1729
- const container = containerRef.current;
1730
- if (!container) return;
1731
- container.scrollTo({
1732
- top: container.scrollHeight,
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
- return /* @__PURE__ */ jsxRuntime.jsx(
1758
- framerMotion.motion.div,
1759
- {
1760
- ref: containerRef,
1761
- id: MESSAGES_CONTAINER_ID,
1762
- initial: { opacity: 0 },
1763
- animate: { opacity: 1 },
1764
- exit: { opacity: 0 },
1765
- transition: { duration: styles.animations.duration },
1766
- 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",
1767
- style: { background: styles.colors.messagesBackground },
1768
- children
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 = ({ className, onKeyDown, disableAutosize = false, placeholder, ...props }) => {
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("div", { className: cn("crow-flex crow-items-center crow-gap-2", className), ...props, children });
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(PromptInputTextarea, { placeholder, className: "crow-text-base" }) }),
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(lucideReact.Square, { className: "crow-h-3.5 crow-w-3.5 crow-text-white", style: { fill: "white" } }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowUp, { className: cn(
2158
- "crow-h-3.5 crow-w-3.5",
2159
- hasContent ? "crow-text-white" : "crow-text-gray-400"
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 }),