@usecrow/ui 0.1.49 → 0.1.51

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
@@ -70,6 +70,7 @@ function useChat({
70
70
  persistAnonymousConversations,
71
71
  welcomeMessage,
72
72
  selectedModel: initialSelectedModel,
73
+ toolConsentSettings,
73
74
  onVerificationStatus,
74
75
  onConversationId,
75
76
  onWorkflowEvent,
@@ -90,9 +91,12 @@ function useChat({
90
91
  const [activeToolCalls, setActiveToolCalls] = React3.useState([]);
91
92
  const [conversationId, setConversationId] = React3.useState(null);
92
93
  const [selectedModel, setSelectedModel] = React3.useState(initialSelectedModel);
94
+ const [suggestedActions, setSuggestedActions] = React3.useState([]);
93
95
  const abortControllerRef = React3.useRef(null);
94
96
  const hasCheckedPersistRef = React3.useRef(false);
95
97
  const streamingToolCallsRef = React3.useRef([]);
98
+ const toolConsentSettingsRef = React3.useRef(toolConsentSettings);
99
+ toolConsentSettingsRef.current = toolConsentSettings;
96
100
  React3.useEffect(() => {
97
101
  if (initialSelectedModel) {
98
102
  setSelectedModel((prev) => prev !== initialSelectedModel ? initialSelectedModel : prev);
@@ -344,26 +348,43 @@ function useChat({
344
348
  }
345
349
  break;
346
350
  case "client_tool_call":
347
- onToolCall?.({
348
- type: "start",
349
- toolName: parsed.tool_name,
350
- arguments: parsed.arguments
351
- });
352
- const clientToolCall = {
353
- id: parsed.tool_call_id || `tool-${Date.now()}`,
354
- name: parsed.tool_name,
355
- displayName: parsed.display_name || void 0,
356
- arguments: parsed.arguments || {},
357
- status: "executing",
358
- timestamp: /* @__PURE__ */ new Date()
359
- };
360
- streamingToolCallsRef.current = [...streamingToolCallsRef.current, clientToolCall];
361
- setActiveToolCalls((prev) => [...prev, clientToolCall]);
362
- pendingClientTools.push({
363
- toolName: parsed.tool_name,
364
- toolCallId: parsed.tool_call_id,
365
- arguments: parsed.arguments
366
- });
351
+ {
352
+ const needsConsent = toolConsentSettingsRef.current?.[parsed.tool_name]?.requires_consent === true;
353
+ onToolCall?.({
354
+ type: "start",
355
+ toolName: parsed.tool_name,
356
+ arguments: parsed.arguments
357
+ });
358
+ if (needsConsent) {
359
+ const consentClientTc = {
360
+ id: parsed.tool_call_id || `tool-${Date.now()}`,
361
+ name: parsed.tool_name,
362
+ displayName: parsed.display_name || void 0,
363
+ arguments: parsed.arguments || {},
364
+ status: "awaiting_consent",
365
+ requiresConsent: true,
366
+ timestamp: /* @__PURE__ */ new Date()
367
+ };
368
+ streamingToolCallsRef.current = [...streamingToolCallsRef.current, consentClientTc];
369
+ setActiveToolCalls((prev) => [...prev, consentClientTc]);
370
+ } else {
371
+ const clientToolCall = {
372
+ id: parsed.tool_call_id || `tool-${Date.now()}`,
373
+ name: parsed.tool_name,
374
+ displayName: parsed.display_name || void 0,
375
+ arguments: parsed.arguments || {},
376
+ status: "executing",
377
+ timestamp: /* @__PURE__ */ new Date()
378
+ };
379
+ streamingToolCallsRef.current = [...streamingToolCallsRef.current, clientToolCall];
380
+ setActiveToolCalls((prev) => [...prev, clientToolCall]);
381
+ pendingClientTools.push({
382
+ toolName: parsed.tool_name,
383
+ toolCallId: parsed.tool_call_id,
384
+ arguments: parsed.arguments
385
+ });
386
+ }
387
+ }
367
388
  break;
368
389
  case "tool_consent_required":
369
390
  onToolCall?.({
@@ -426,6 +447,11 @@ function useChat({
426
447
  case "workflow_complete_prompt":
427
448
  onWorkflowEvent?.({ type: "complete_prompt" });
428
449
  break;
450
+ case "suggested_actions":
451
+ if (parsed.actions && Array.isArray(parsed.actions)) {
452
+ setSuggestedActions(parsed.actions);
453
+ }
454
+ break;
429
455
  }
430
456
  } catch (e) {
431
457
  console.error("[Crow] Parse error:", e);
@@ -467,6 +493,7 @@ function useChat({
467
493
  }
468
494
  setActiveToolCalls([]);
469
495
  streamingToolCallsRef.current = [];
496
+ setSuggestedActions([]);
470
497
  const userMsgId = generateMessageId("user");
471
498
  const botMsgId = generateMessageId("bot");
472
499
  setMessages((prev) => [
@@ -739,21 +766,36 @@ function useChat({
739
766
  break;
740
767
  case "client_tool_call":
741
768
  {
742
- const toolCallEntry = {
743
- id: parsed.tool_call_id || `tool-${Date.now()}`,
744
- name: parsed.tool_name,
745
- displayName: parsed.display_name || void 0,
746
- arguments: parsed.arguments || {},
747
- status: "executing",
748
- timestamp: /* @__PURE__ */ new Date()
749
- };
750
- streamingToolCallsRef.current = [...streamingToolCallsRef.current, toolCallEntry];
751
- setActiveToolCalls((prev) => [...prev, toolCallEntry]);
752
- pendingClientTools.push({
753
- toolName: parsed.tool_name,
754
- toolCallId: parsed.tool_call_id,
755
- arguments: parsed.arguments
756
- });
769
+ const needsConsent2 = toolConsentSettingsRef.current?.[parsed.tool_name]?.requires_consent === true;
770
+ if (needsConsent2) {
771
+ const consentEntry2 = {
772
+ id: parsed.tool_call_id || `tool-${Date.now()}`,
773
+ name: parsed.tool_name,
774
+ displayName: parsed.display_name || void 0,
775
+ arguments: parsed.arguments || {},
776
+ status: "awaiting_consent",
777
+ requiresConsent: true,
778
+ timestamp: /* @__PURE__ */ new Date()
779
+ };
780
+ streamingToolCallsRef.current = [...streamingToolCallsRef.current, consentEntry2];
781
+ setActiveToolCalls((prev) => [...prev, consentEntry2]);
782
+ } else {
783
+ const toolCallEntry = {
784
+ id: parsed.tool_call_id || `tool-${Date.now()}`,
785
+ name: parsed.tool_name,
786
+ displayName: parsed.display_name || void 0,
787
+ arguments: parsed.arguments || {},
788
+ status: "executing",
789
+ timestamp: /* @__PURE__ */ new Date()
790
+ };
791
+ streamingToolCallsRef.current = [...streamingToolCallsRef.current, toolCallEntry];
792
+ setActiveToolCalls((prev) => [...prev, toolCallEntry]);
793
+ pendingClientTools.push({
794
+ toolName: parsed.tool_name,
795
+ toolCallId: parsed.tool_call_id,
796
+ arguments: parsed.arguments
797
+ });
798
+ }
757
799
  }
758
800
  break;
759
801
  case "tool_consent_required":
@@ -871,6 +913,8 @@ function useChat({
871
913
  activeToolCalls,
872
914
  conversationId,
873
915
  selectedModel,
916
+ suggestedActions,
917
+ setSuggestedActions,
874
918
  setSelectedModel,
875
919
  setConversationId,
876
920
  sendMessage,
@@ -1183,6 +1227,16 @@ function useCrowAPI({ onIdentified, onReset } = {}) {
1183
1227
  case "close":
1184
1228
  window.dispatchEvent(new CustomEvent("crow:close"));
1185
1229
  break;
1230
+ case "setSuggestedActions":
1231
+ if (!Array.isArray(options)) {
1232
+ console.error("[Crow] setSuggestedActions() requires an array of { label, message }");
1233
+ return;
1234
+ }
1235
+ window.__crow_suggested_actions = options;
1236
+ window.dispatchEvent(
1237
+ new CustomEvent("crow:setSuggestedActions", { detail: options })
1238
+ );
1239
+ break;
1186
1240
  case "registerToolRenderers":
1187
1241
  if (!opts || typeof opts !== "object") {
1188
1242
  console.error("[Crow] registerToolRenderers() requires an object");
@@ -1505,6 +1559,12 @@ function useWidgetStyles({
1505
1559
  const [dbStyles, setDbStyles] = React3.useState(
1506
1560
  styleCache.get(key)?.widgetStyles
1507
1561
  );
1562
+ const [initialSuggestions, setInitialSuggestions] = React3.useState(
1563
+ styleCache.get(key)?.initialSuggestions || []
1564
+ );
1565
+ const [toolConsentSettings, setToolConsentSettings] = React3.useState(
1566
+ styleCache.get(key)?.toolConsentSettings || {}
1567
+ );
1508
1568
  const [agentName, setAgentName] = React3.useState(
1509
1569
  styleCache.get(key)?.agentName || "Assistant"
1510
1570
  );
@@ -1544,6 +1604,8 @@ function useWidgetStyles({
1544
1604
  setPersistAnonymousConversations(config.persistAnonymousConversations ?? true);
1545
1605
  setWelcomeMessage(config.welcomeMessage ?? void 0);
1546
1606
  setSelectedModel(config.model ?? void 0);
1607
+ setInitialSuggestions(config.initialSuggestions || []);
1608
+ setToolConsentSettings(config.toolConsentSettings || {});
1547
1609
  } catch (err) {
1548
1610
  console.error("[CrowWidget] Failed to fetch styles:", err);
1549
1611
  setError(err instanceof Error ? err : new Error(String(err)));
@@ -1581,6 +1643,8 @@ function useWidgetStyles({
1581
1643
  persistAnonymousConversations,
1582
1644
  welcomeMessage,
1583
1645
  selectedModel,
1646
+ initialSuggestions,
1647
+ toolConsentSettings,
1584
1648
  refetch: fetchStyles
1585
1649
  };
1586
1650
  }
@@ -1616,6 +1680,9 @@ function useCopilotStyles({
1616
1680
  const [selectedModel, setSelectedModel] = React3.useState(
1617
1681
  styleCache.get(key)?.model ?? void 0
1618
1682
  );
1683
+ const [toolConsentSettings, setToolConsentSettings] = React3.useState(
1684
+ styleCache.get(key)?.toolConsentSettings || {}
1685
+ );
1619
1686
  const hasFetchedRef = React3.useRef(false);
1620
1687
  const fetchStyles = async () => {
1621
1688
  if (skip) return;
@@ -1632,6 +1699,7 @@ function useCopilotStyles({
1632
1699
  setPersistAnonymousConversations(config.persistAnonymousConversations ?? true);
1633
1700
  setWelcomeMessage(config.welcomeMessage ?? void 0);
1634
1701
  setSelectedModel(config.model ?? void 0);
1702
+ setToolConsentSettings(config.toolConsentSettings || {});
1635
1703
  } catch (err) {
1636
1704
  console.error("[CrowCopilot] Failed to fetch styles:", err);
1637
1705
  setError(err instanceof Error ? err : new Error(String(err)));
@@ -1669,6 +1737,7 @@ function useCopilotStyles({
1669
1737
  persistAnonymousConversations,
1670
1738
  welcomeMessage,
1671
1739
  selectedModel,
1740
+ toolConsentSettings,
1672
1741
  refetch: fetchStyles
1673
1742
  };
1674
1743
  }
@@ -3124,6 +3193,26 @@ function BrowserUseQuestion({
3124
3193
  }
3125
3194
  ) });
3126
3195
  }
3196
+ function SuggestedActions({
3197
+ actions,
3198
+ onActionClick
3199
+ }) {
3200
+ const styles = useWidgetStyles2();
3201
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "crow-flex crow-flex-wrap crow-gap-2 crow-px-1 crow-pb-2", children: actions.map((action, idx) => /* @__PURE__ */ jsxRuntime.jsx(
3202
+ "button",
3203
+ {
3204
+ onClick: () => onActionClick(action),
3205
+ className: "crow-rounded-full crow-border crow-px-3 crow-py-1.5 crow-text-sm crow-font-medium crow-transition-colors hover:crow-opacity-80 crow-cursor-pointer",
3206
+ style: {
3207
+ borderColor: styles.colors.primary,
3208
+ color: styles.colors.primary,
3209
+ background: "transparent"
3210
+ },
3211
+ children: action.label
3212
+ },
3213
+ idx
3214
+ )) });
3215
+ }
3127
3216
 
3128
3217
  // src/styles/cssVars.ts
3129
3218
  var CSS_VAR_NAMES = {
@@ -3252,7 +3341,7 @@ function injectCopilotBodyStyles() {
3252
3341
  }
3253
3342
  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: }
3254
3343
 
3255
- /*! 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-1\\.5{margin-top:.375rem;margin-bottom:.375rem}.crow-my-2{margin-top:.5rem;margin-bottom:.5rem}.crow-mb-0{margin-bottom:0}.crow-mb-0\\.5{margin-bottom:.125rem}.crow-mb-1{margin-bottom:.25rem}.crow-mb-1\\.5{margin-bottom:.375rem}.crow-mb-2{margin-bottom:.5rem}.crow-mb-3{margin-bottom:.75rem}.crow-mb-4{margin-bottom:1rem}.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-1\\.5{margin-top:.375rem}.crow-mt-2{margin-top:.5rem}.crow-mt-auto{margin-top:auto}.crow-block{display:block}.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-min-h-\\[40px\\]{min-height:40px}.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-items-stretch{align-items:stretch}.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-auto{overflow:auto}.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-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.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-black\\/5{background-color:rgba(0,0,0,.05)}.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-0\\.5{padding:.125rem}.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-2\\.5{padding-top:.625rem;padding-bottom:.625rem}.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-pt-3{padding-top:.75rem}.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-\\[13px\\]{font-size:13px}.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-italic{font-style:italic}.crow-leading-relaxed{line-height:1.625}.crow-leading-tight{line-height:1.25}.crow-tracking-wide{letter-spacing:.025em}.crow-text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.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-40{opacity:.4}.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-\\[0_0_20px_rgba\\(0\\,0\\,0\\,0\\.25\\)\\]{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.crow-shadow-\\[0_0_20px_rgba\\(0\\,0\\,0\\,0\\.25\\)\\]{--tw-shadow:0 0 20px rgba(0,0,0,.25);--tw-shadow-colored:0 0 20px var(--tw-shadow-color)}.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-lg,.crow-shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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)}.crow-outline-none{outline:2px solid transparent;outline-offset:2px}.crow-ring-4{--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(4px + 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)}.crow-ring-offset-2{--tw-ring-offset-width:2px}.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}}.crow-copilot-toggle{position:fixed;top:50%;transform:translateY(-50%);z-index:999998;width:24px;height:64px;display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid #e5e7eb;cursor:pointer;transition:all .2s ease;box-shadow:0 2px 8px rgba(0,0,0,.1)}.crow-copilot-toggle:hover{background:#f9fafb;box-shadow:0 4px 12px rgba(0,0,0,.15)}.crow-copilot-toggle-right{right:0;border-radius:8px 0 0 8px;border-right:none}.crow-copilot-toggle-left{left:0;border-radius:0 8px 8px 0;border-left:none}.crow-copilot-toggle.open.crow-copilot-toggle-right{right:var(--crow-copilot-width,400px)}.crow-copilot-toggle.open.crow-copilot-toggle-left{left:var(--crow-copilot-width,400px)}.crow-copilot-toggle svg{width:16px;height:16px;color:#6b7280;transition:transform .2s ease}.crow-copilot-toggle:hover svg{color:#374151}.crow-copilot-sidebar{position:fixed;top:0;bottom:0;z-index:999997;background:#fff;box-shadow:-4px 0 20px rgba(0,0,0,.1);transition:transform .3s cubic-bezier(.4,0,.2,1);overflow:hidden}.crow-copilot-sidebar-right{right:0;border-left:1px solid #e5e7eb}.crow-copilot-sidebar-left{left:0;border-right:1px solid #e5e7eb}.crow-copilot-sidebar.closed.crow-copilot-sidebar-right{transform:translateX(100%)}.crow-copilot-sidebar.closed.crow-copilot-sidebar-left{transform:translateX(-100%)}body.crow-copilot-open-right{margin-right:var(--crow-copilot-width,400px)!important;transition:margin .3s cubic-bezier(.4,0,.2,1)}body.crow-copilot-open-left{margin-left:var(--crow-copilot-width,400px)!important}body,body.crow-copilot-open-left{transition:margin .3s cubic-bezier(.4,0,.2,1)}.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-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/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-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/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}.hover\\:crow-opacity-80:hover{opacity:.8}.hover\\:crow-opacity-90:hover{opacity:.9}.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}`;
3344
+ /*! 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-1\\.5{margin-top:.375rem;margin-bottom:.375rem}.crow-my-2{margin-top:.5rem;margin-bottom:.5rem}.crow-mb-0{margin-bottom:0}.crow-mb-0\\.5{margin-bottom:.125rem}.crow-mb-1{margin-bottom:.25rem}.crow-mb-1\\.5{margin-bottom:.375rem}.crow-mb-2{margin-bottom:.5rem}.crow-mb-3{margin-bottom:.75rem}.crow-mb-4{margin-bottom:1rem}.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-1\\.5{margin-top:.375rem}.crow-mt-2{margin-top:.5rem}.crow-mt-auto{margin-top:auto}.crow-block{display:block}.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-min-h-\\[40px\\]{min-height:40px}.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-flex-wrap{flex-wrap:wrap}.crow-items-start{align-items:flex-start}.crow-items-end{align-items:flex-end}.crow-items-center{align-items:center}.crow-items-stretch{align-items:stretch}.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-auto{overflow:auto}.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-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.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-black\\/5{background-color:rgba(0,0,0,.05)}.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-0\\.5{padding:.125rem}.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-2\\.5{padding-top:.625rem;padding-bottom:.625rem}.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-pt-3{padding-top:.75rem}.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-\\[13px\\]{font-size:13px}.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-italic{font-style:italic}.crow-leading-relaxed{line-height:1.625}.crow-leading-tight{line-height:1.25}.crow-tracking-wide{letter-spacing:.025em}.crow-text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.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-40{opacity:.4}.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-\\[0_0_20px_rgba\\(0\\,0\\,0\\,0\\.25\\)\\]{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.crow-shadow-\\[0_0_20px_rgba\\(0\\,0\\,0\\,0\\.25\\)\\]{--tw-shadow:0 0 20px rgba(0,0,0,.25);--tw-shadow-colored:0 0 20px var(--tw-shadow-color)}.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-lg,.crow-shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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)}.crow-outline-none{outline:2px solid transparent;outline-offset:2px}.crow-ring-4{--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(4px + 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)}.crow-ring-offset-2{--tw-ring-offset-width:2px}.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}}.crow-copilot-toggle{position:fixed;top:50%;transform:translateY(-50%);z-index:999998;width:24px;height:64px;display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid #e5e7eb;cursor:pointer;transition:all .2s ease;box-shadow:0 2px 8px rgba(0,0,0,.1)}.crow-copilot-toggle:hover{background:#f9fafb;box-shadow:0 4px 12px rgba(0,0,0,.15)}.crow-copilot-toggle-right{right:0;border-radius:8px 0 0 8px;border-right:none}.crow-copilot-toggle-left{left:0;border-radius:0 8px 8px 0;border-left:none}.crow-copilot-toggle.open.crow-copilot-toggle-right{right:var(--crow-copilot-width,400px)}.crow-copilot-toggle.open.crow-copilot-toggle-left{left:var(--crow-copilot-width,400px)}.crow-copilot-toggle svg{width:16px;height:16px;color:#6b7280;transition:transform .2s ease}.crow-copilot-toggle:hover svg{color:#374151}.crow-copilot-sidebar{position:fixed;top:0;bottom:0;z-index:999997;background:#fff;box-shadow:-4px 0 20px rgba(0,0,0,.1);transition:transform .3s cubic-bezier(.4,0,.2,1);overflow:hidden}.crow-copilot-sidebar-right{right:0;border-left:1px solid #e5e7eb}.crow-copilot-sidebar-left{left:0;border-right:1px solid #e5e7eb}.crow-copilot-sidebar.closed.crow-copilot-sidebar-right{transform:translateX(100%)}.crow-copilot-sidebar.closed.crow-copilot-sidebar-left{transform:translateX(-100%)}body.crow-copilot-open-right{margin-right:var(--crow-copilot-width,400px)!important;transition:margin .3s cubic-bezier(.4,0,.2,1)}body.crow-copilot-open-left{margin-left:var(--crow-copilot-width,400px)!important}body,body.crow-copilot-open-left{transition:margin .3s cubic-bezier(.4,0,.2,1)}.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-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/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-600:hover{--tw-text-opacity:1;color:rgb(75 85 99/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}.hover\\:crow-opacity-80:hover{opacity:.8}.hover\\:crow-opacity-90:hover{opacity:.9}.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}`;
3256
3345
  var injected = false;
3257
3346
  function injectStyles(target = document) {
3258
3347
  if (target === document && injected) return;
@@ -3303,7 +3392,9 @@ function CrowWidget({
3303
3392
  showThinking: showThinkingFromAPI,
3304
3393
  persistAnonymousConversations,
3305
3394
  welcomeMessage: welcomeMessageFromAPI,
3306
- selectedModel: selectedModelFromAPI
3395
+ selectedModel: selectedModelFromAPI,
3396
+ initialSuggestions,
3397
+ toolConsentSettings
3307
3398
  } = useWidgetStyles({
3308
3399
  productId,
3309
3400
  apiUrl,
@@ -3346,6 +3437,7 @@ function CrowWidget({
3346
3437
  persistAnonymousConversations,
3347
3438
  welcomeMessage,
3348
3439
  selectedModel,
3440
+ toolConsentSettings,
3349
3441
  onVerificationStatus: (isVerified) => {
3350
3442
  setIsVerifiedUser(isVerified);
3351
3443
  },
@@ -3409,6 +3501,11 @@ function CrowWidget({
3409
3501
  setShouldRestoreHistory(true);
3410
3502
  }
3411
3503
  });
3504
+ React3.useEffect(() => {
3505
+ if (initialSuggestions.length > 0 && chat.suggestedActions.length === 0) {
3506
+ chat.setSuggestedActions(initialSuggestions);
3507
+ }
3508
+ }, [initialSuggestions]);
3412
3509
  React3.useEffect(() => {
3413
3510
  if (shouldRestoreHistory && chat.conversationId && !hasRestoredHistoryRef.current) {
3414
3511
  hasRestoredHistoryRef.current = true;
@@ -3643,14 +3740,47 @@ function CrowWidget({
3643
3740
  const handleToolConsent = async (toolCallId, approved) => {
3644
3741
  const toolCall = chat.activeToolCalls.find((tc) => tc.id === toolCallId) || chat.messages.flatMap((m) => m.toolCalls || []).find((tc) => tc.id === toolCallId);
3645
3742
  if (!toolCall) return;
3743
+ const isClientSide = !toolCall.serverSideExecution;
3646
3744
  if (approved) {
3647
3745
  chat.updateToolCallStatus(toolCallId, "executing");
3648
- if (submitToolResultRef.current) {
3649
- await submitToolResultRef.current(
3650
- toolCallId,
3651
- toolCall.name,
3652
- { consent_approved: true, tool_arguments: toolCall.arguments || {} }
3653
- );
3746
+ if (isClientSide) {
3747
+ try {
3748
+ const result = await executeClientToolRef.current?.(
3749
+ toolCall.name,
3750
+ toolCall.arguments || {}
3751
+ );
3752
+ const resultObj = result;
3753
+ const dataObj = resultObj?.data;
3754
+ const wasUserCancelled = dataObj?.declined === true || typeof resultObj?.error === "string" && resultObj.error.includes("cancelled by user") || typeof resultObj?.error === "string" && resultObj.error.includes("declined");
3755
+ if (wasUserCancelled) {
3756
+ console.log("[Crow Widget] Tool was cancelled by user after consent");
3757
+ return;
3758
+ }
3759
+ if (result && submitToolResultRef.current) {
3760
+ await submitToolResultRef.current(
3761
+ toolCallId,
3762
+ toolCall.name,
3763
+ result
3764
+ );
3765
+ }
3766
+ } catch (e) {
3767
+ console.error("[Crow Widget] Tool error after consent:", e);
3768
+ if (submitToolResultRef.current) {
3769
+ await submitToolResultRef.current(
3770
+ toolCallId,
3771
+ toolCall.name,
3772
+ { success: false, error: String(e) }
3773
+ );
3774
+ }
3775
+ }
3776
+ } else {
3777
+ if (submitToolResultRef.current) {
3778
+ await submitToolResultRef.current(
3779
+ toolCallId,
3780
+ toolCall.name,
3781
+ { consent_approved: true, tool_arguments: toolCall.arguments || {} }
3782
+ );
3783
+ }
3654
3784
  }
3655
3785
  } else {
3656
3786
  chat.updateToolCallStatus(toolCallId, "denied");
@@ -3663,14 +3793,29 @@ function CrowWidget({
3663
3793
  }
3664
3794
  }
3665
3795
  };
3796
+ const defaultSuggestedActionsRef = React3.useRef([]);
3666
3797
  React3.useEffect(() => {
3667
3798
  const handleOpen = () => setIsCollapsed(false);
3668
3799
  const handleClose = () => setIsCollapsed(true);
3800
+ const handleSetSuggestions = (e) => {
3801
+ const actions = e.detail;
3802
+ if (Array.isArray(actions)) {
3803
+ defaultSuggestedActionsRef.current = actions;
3804
+ chat.setSuggestedActions(actions);
3805
+ }
3806
+ };
3669
3807
  window.addEventListener("crow:open", handleOpen);
3670
3808
  window.addEventListener("crow:close", handleClose);
3809
+ window.addEventListener("crow:setSuggestedActions", handleSetSuggestions);
3810
+ const pending = window.__crow_suggested_actions;
3811
+ if (Array.isArray(pending) && pending.length > 0) {
3812
+ defaultSuggestedActionsRef.current = pending;
3813
+ chat.setSuggestedActions(pending);
3814
+ }
3671
3815
  return () => {
3672
3816
  window.removeEventListener("crow:open", handleOpen);
3673
3817
  window.removeEventListener("crow:close", handleClose);
3818
+ window.removeEventListener("crow:setSuggestedActions", handleSetSuggestions);
3674
3819
  };
3675
3820
  }, []);
3676
3821
  const handleBubbleClick = () => {
@@ -3731,6 +3876,13 @@ function CrowWidget({
3731
3876
  ) })
3732
3877
  ] }) }),
3733
3878
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "crow-mt-auto crow-w-full", children: [
3879
+ (chat.suggestedActions.length > 0 || !chat.isLoading && defaultSuggestedActionsRef.current.length > 0) && /* @__PURE__ */ jsxRuntime.jsx(
3880
+ SuggestedActions,
3881
+ {
3882
+ actions: chat.suggestedActions.length > 0 ? chat.suggestedActions : defaultSuggestedActionsRef.current,
3883
+ onActionClick: (action) => handleSend(action.message)
3884
+ }
3885
+ ),
3734
3886
  /* @__PURE__ */ jsxRuntime.jsx(PoweredByBadge, { apiUrl }),
3735
3887
  /* @__PURE__ */ jsxRuntime.jsx(
3736
3888
  PromptInputBox,
@@ -4057,7 +4209,8 @@ function CrowCopilot({
4057
4209
  pageNavigationRoutes,
4058
4210
  persistAnonymousConversations,
4059
4211
  welcomeMessage: welcomeMessageFromAPI,
4060
- selectedModel
4212
+ selectedModel,
4213
+ toolConsentSettings
4061
4214
  } = useCopilotStyles({
4062
4215
  productId,
4063
4216
  apiUrl,
@@ -4188,14 +4341,29 @@ function CrowCopilot({
4188
4341
  setIsCollapsed(false);
4189
4342
  }
4190
4343
  }, [isCollapsed]);
4344
+ const defaultSuggestedActionsRef = React3.useRef([]);
4191
4345
  React3.useEffect(() => {
4192
4346
  const handleOpen = () => setIsCollapsed(false);
4193
4347
  const handleClose = () => setIsCollapsed(true);
4348
+ const handleSetSuggestions = (e) => {
4349
+ const actions = e.detail;
4350
+ if (Array.isArray(actions)) {
4351
+ defaultSuggestedActionsRef.current = actions;
4352
+ chat.setSuggestedActions(actions);
4353
+ }
4354
+ };
4194
4355
  window.addEventListener("crow:open", handleOpen);
4195
4356
  window.addEventListener("crow:close", handleClose);
4357
+ window.addEventListener("crow:setSuggestedActions", handleSetSuggestions);
4358
+ const pending = window.__crow_suggested_actions;
4359
+ if (Array.isArray(pending) && pending.length > 0) {
4360
+ defaultSuggestedActionsRef.current = pending;
4361
+ chat.setSuggestedActions(pending);
4362
+ }
4196
4363
  return () => {
4197
4364
  window.removeEventListener("crow:open", handleOpen);
4198
4365
  window.removeEventListener("crow:close", handleClose);
4366
+ window.removeEventListener("crow:setSuggestedActions", handleSetSuggestions);
4199
4367
  };
4200
4368
  }, []);
4201
4369
  const messagesContainerRef = React3.useRef(null);
@@ -4233,6 +4401,7 @@ function CrowCopilot({
4233
4401
  persistAnonymousConversations,
4234
4402
  welcomeMessage,
4235
4403
  selectedModel,
4404
+ toolConsentSettings,
4236
4405
  onVerificationStatus: (isVerified) => {
4237
4406
  setIsVerifiedUser(isVerified);
4238
4407
  },
@@ -4431,14 +4600,54 @@ function CrowCopilot({
4431
4600
  const handleToolConsent = async (toolCallId, approved) => {
4432
4601
  const toolCall = chat.activeToolCalls.find((tc) => tc.id === toolCallId) || chat.messages.flatMap((m) => m.toolCalls || []).find((tc) => tc.id === toolCallId);
4433
4602
  if (!toolCall) return;
4603
+ const isClientSide = !toolCall.serverSideExecution;
4434
4604
  if (approved) {
4435
4605
  chat.updateToolCallStatus(toolCallId, "executing");
4436
- if (submitToolResultRef.current) {
4437
- await submitToolResultRef.current(
4438
- toolCallId,
4439
- toolCall.name,
4440
- { consent_approved: true, tool_arguments: toolCall.arguments || {} }
4441
- );
4606
+ if (isClientSide) {
4607
+ try {
4608
+ const result = await executeClientToolRef.current?.(
4609
+ toolCall.name,
4610
+ toolCall.arguments || {}
4611
+ );
4612
+ const resultObj = result;
4613
+ const dataObj = resultObj?.data;
4614
+ const wasUserCancelled = dataObj?.declined === true || typeof resultObj?.error === "string" && resultObj.error.includes("cancelled by user") || typeof resultObj?.error === "string" && resultObj.error.includes("declined");
4615
+ if (wasUserCancelled) {
4616
+ console.log("[Crow Copilot] Tool was cancelled by user after consent");
4617
+ if (submitToolResultRef.current) {
4618
+ await submitToolResultRef.current(
4619
+ toolCallId,
4620
+ toolCall.name,
4621
+ { success: false, cancelled: true, error: "Action was cancelled by the user." }
4622
+ );
4623
+ }
4624
+ return;
4625
+ }
4626
+ if (result && submitToolResultRef.current) {
4627
+ await submitToolResultRef.current(
4628
+ toolCallId,
4629
+ toolCall.name,
4630
+ result
4631
+ );
4632
+ }
4633
+ } catch (e) {
4634
+ console.error("[Crow Copilot] Tool error after consent:", e);
4635
+ if (submitToolResultRef.current) {
4636
+ await submitToolResultRef.current(
4637
+ toolCallId,
4638
+ toolCall.name,
4639
+ { success: false, error: String(e) }
4640
+ );
4641
+ }
4642
+ }
4643
+ } else {
4644
+ if (submitToolResultRef.current) {
4645
+ await submitToolResultRef.current(
4646
+ toolCallId,
4647
+ toolCall.name,
4648
+ { consent_approved: true, tool_arguments: toolCall.arguments || {} }
4649
+ );
4650
+ }
4442
4651
  }
4443
4652
  } else {
4444
4653
  chat.updateToolCallStatus(toolCallId, "denied");
@@ -4885,6 +5094,13 @@ function CrowCopilot({
4885
5094
  className: "crow-p-3 crow-border-t",
4886
5095
  style: { borderColor: styles.colors.border },
4887
5096
  children: [
5097
+ (chat.suggestedActions.length > 0 || !chat.isLoading && defaultSuggestedActionsRef.current.length > 0) && /* @__PURE__ */ jsxRuntime.jsx(
5098
+ SuggestedActions,
5099
+ {
5100
+ actions: chat.suggestedActions.length > 0 ? chat.suggestedActions : defaultSuggestedActionsRef.current,
5101
+ onActionClick: (action) => handleSend(action.message)
5102
+ }
5103
+ ),
4888
5104
  styles.branding.showPoweredBy && /* @__PURE__ */ jsxRuntime.jsx(PoweredByBadge, { apiUrl }),
4889
5105
  /* @__PURE__ */ jsxRuntime.jsx(
4890
5106
  PromptInputBox,