@usecrow/ui 0.1.66 → 0.1.67

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.d.cts CHANGED
@@ -207,6 +207,14 @@ interface WidgetConfigResponse {
207
207
  toolConsentSettings?: Record<string, {
208
208
  requires_consent: boolean;
209
209
  }>;
210
+ /** Whether end-user model selection is enabled */
211
+ modelSelectionEnabled?: boolean;
212
+ /** Available models for end-user selection (model IDs + display info) */
213
+ availableModels?: Array<{
214
+ id: string;
215
+ name: string;
216
+ provider: "OpenAI" | "Anthropic";
217
+ }>;
210
218
  }
211
219
 
212
220
  /**
@@ -863,6 +871,14 @@ interface UseWidgetStylesResult {
863
871
  toolConsentSettings: Record<string, {
864
872
  requires_consent: boolean;
865
873
  }>;
874
+ /** Whether end-user model selection is enabled */
875
+ modelSelectionEnabled: boolean;
876
+ /** Available models for the dropdown */
877
+ availableModels: Array<{
878
+ id: string;
879
+ name: string;
880
+ provider: "OpenAI" | "Anthropic";
881
+ }>;
866
882
  /** Refetch styles from API */
867
883
  refetch: () => Promise<void>;
868
884
  }
@@ -910,6 +926,14 @@ interface UseCopilotStylesResult {
910
926
  toolConsentSettings: Record<string, {
911
927
  requires_consent: boolean;
912
928
  }>;
929
+ /** Whether end-user model selection is enabled */
930
+ modelSelectionEnabled: boolean;
931
+ /** Available models for the dropdown */
932
+ availableModels: Array<{
933
+ id: string;
934
+ name: string;
935
+ provider: "OpenAI" | "Anthropic";
936
+ }>;
913
937
  /** Refetch styles from API */
914
938
  refetch: () => Promise<void>;
915
939
  }
package/dist/index.d.ts CHANGED
@@ -207,6 +207,14 @@ interface WidgetConfigResponse {
207
207
  toolConsentSettings?: Record<string, {
208
208
  requires_consent: boolean;
209
209
  }>;
210
+ /** Whether end-user model selection is enabled */
211
+ modelSelectionEnabled?: boolean;
212
+ /** Available models for end-user selection (model IDs + display info) */
213
+ availableModels?: Array<{
214
+ id: string;
215
+ name: string;
216
+ provider: "OpenAI" | "Anthropic";
217
+ }>;
210
218
  }
211
219
 
212
220
  /**
@@ -863,6 +871,14 @@ interface UseWidgetStylesResult {
863
871
  toolConsentSettings: Record<string, {
864
872
  requires_consent: boolean;
865
873
  }>;
874
+ /** Whether end-user model selection is enabled */
875
+ modelSelectionEnabled: boolean;
876
+ /** Available models for the dropdown */
877
+ availableModels: Array<{
878
+ id: string;
879
+ name: string;
880
+ provider: "OpenAI" | "Anthropic";
881
+ }>;
866
882
  /** Refetch styles from API */
867
883
  refetch: () => Promise<void>;
868
884
  }
@@ -910,6 +926,14 @@ interface UseCopilotStylesResult {
910
926
  toolConsentSettings: Record<string, {
911
927
  requires_consent: boolean;
912
928
  }>;
929
+ /** Whether end-user model selection is enabled */
930
+ modelSelectionEnabled: boolean;
931
+ /** Available models for the dropdown */
932
+ availableModels: Array<{
933
+ id: string;
934
+ name: string;
935
+ provider: "OpenAI" | "Anthropic";
936
+ }>;
913
937
  /** Refetch styles from API */
914
938
  refetch: () => Promise<void>;
915
939
  }
package/dist/index.js CHANGED
@@ -1612,6 +1612,12 @@ function useWidgetStyles({
1612
1612
  const [selectedModel, setSelectedModel] = useState(
1613
1613
  styleCache.get(key)?.model ?? void 0
1614
1614
  );
1615
+ const [modelSelectionEnabled, setModelSelectionEnabled] = useState(
1616
+ styleCache.get(key)?.modelSelectionEnabled || false
1617
+ );
1618
+ const [availableModels, setAvailableModels] = useState(
1619
+ styleCache.get(key)?.availableModels || []
1620
+ );
1615
1621
  const hasFetchedRef = useRef(false);
1616
1622
  const fetchStyles = async () => {
1617
1623
  if (skip) return;
@@ -1631,6 +1637,8 @@ function useWidgetStyles({
1631
1637
  setSelectedModel(config.model ?? void 0);
1632
1638
  setInitialSuggestions(config.initialSuggestions || []);
1633
1639
  setToolConsentSettings(config.toolConsentSettings || {});
1640
+ setModelSelectionEnabled(config.modelSelectionEnabled || false);
1641
+ setAvailableModels(config.availableModels || []);
1634
1642
  } catch (err) {
1635
1643
  console.error("[CrowWidget] Failed to fetch styles:", err);
1636
1644
  setError(err instanceof Error ? err : new Error(String(err)));
@@ -1649,6 +1657,8 @@ function useWidgetStyles({
1649
1657
  setPersistAnonymousConversations(cached.persistAnonymousConversations ?? true);
1650
1658
  setWelcomeMessage(cached.welcomeMessage ?? void 0);
1651
1659
  setSelectedModel(cached.model ?? void 0);
1660
+ setModelSelectionEnabled(cached.modelSelectionEnabled || false);
1661
+ setAvailableModels(cached.availableModels || []);
1652
1662
  setIsLoading(false);
1653
1663
  return;
1654
1664
  }
@@ -1670,6 +1680,8 @@ function useWidgetStyles({
1670
1680
  selectedModel,
1671
1681
  initialSuggestions,
1672
1682
  toolConsentSettings,
1683
+ modelSelectionEnabled,
1684
+ availableModels,
1673
1685
  refetch: fetchStyles
1674
1686
  };
1675
1687
  }
@@ -1709,6 +1721,12 @@ function useCopilotStyles({
1709
1721
  const [toolConsentSettings, setToolConsentSettings] = useState(
1710
1722
  styleCache.get(key)?.toolConsentSettings || {}
1711
1723
  );
1724
+ const [modelSelectionEnabled, setModelSelectionEnabled] = useState(
1725
+ styleCache.get(key)?.modelSelectionEnabled || false
1726
+ );
1727
+ const [availableModels, setAvailableModels] = useState(
1728
+ styleCache.get(key)?.availableModels || []
1729
+ );
1712
1730
  const hasFetchedRef = useRef(false);
1713
1731
  const fetchStyles = async () => {
1714
1732
  if (skip) return;
@@ -1726,6 +1744,8 @@ function useCopilotStyles({
1726
1744
  setWelcomeMessage(config.welcomeMessage ?? void 0);
1727
1745
  setSelectedModel(config.model ?? void 0);
1728
1746
  setToolConsentSettings(config.toolConsentSettings || {});
1747
+ setModelSelectionEnabled(config.modelSelectionEnabled || false);
1748
+ setAvailableModels(config.availableModels || []);
1729
1749
  } catch (err) {
1730
1750
  console.error("[CrowCopilot] Failed to fetch styles:", err);
1731
1751
  setError(err instanceof Error ? err : new Error(String(err)));
@@ -1745,6 +1765,8 @@ function useCopilotStyles({
1745
1765
  setPersistAnonymousConversations(cached.persistAnonymousConversations ?? true);
1746
1766
  setWelcomeMessage(cached.welcomeMessage ?? void 0);
1747
1767
  setSelectedModel(cached.model ?? void 0);
1768
+ setModelSelectionEnabled(cached.modelSelectionEnabled || false);
1769
+ setAvailableModels(cached.availableModels || []);
1748
1770
  setIsLoading(false);
1749
1771
  return;
1750
1772
  }
@@ -1764,6 +1786,8 @@ function useCopilotStyles({
1764
1786
  welcomeMessage,
1765
1787
  selectedModel,
1766
1788
  toolConsentSettings,
1789
+ modelSelectionEnabled,
1790
+ availableModels,
1767
1791
  refetch: fetchStyles
1768
1792
  };
1769
1793
  }
@@ -3205,7 +3229,9 @@ var ModelSelector = ({
3205
3229
  const dropdownRef = useRef(null);
3206
3230
  useEffect(() => {
3207
3231
  const handleClickOutside = (event) => {
3208
- if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
3232
+ if (!dropdownRef.current) return;
3233
+ const path = event.composedPath();
3234
+ if (!path.includes(dropdownRef.current)) {
3209
3235
  setIsOpen(false);
3210
3236
  }
3211
3237
  };
@@ -4190,7 +4216,9 @@ function CrowWidget({
4190
4216
  welcomeMessage: welcomeMessageFromAPI,
4191
4217
  selectedModel: selectedModelFromAPI,
4192
4218
  initialSuggestions,
4193
- toolConsentSettings
4219
+ toolConsentSettings,
4220
+ modelSelectionEnabled,
4221
+ availableModels: availableModelsFromAPI
4194
4222
  } = useWidgetStyles({
4195
4223
  productId,
4196
4224
  apiUrl,
@@ -4787,7 +4815,10 @@ function CrowWidget({
4787
4815
  showStopButton: isBrowserUseActive || !!askUserResolver || !!pendingConfirmation,
4788
4816
  highlighted: !!askUserResolver,
4789
4817
  className: "crow-backdrop-blur-md",
4790
- backendUrl: apiUrl
4818
+ backendUrl: apiUrl,
4819
+ selectedModel: chat.selectedModel || selectedModelFromAPI,
4820
+ onModelChange: chat.setSelectedModel,
4821
+ availableModels: modelSelectionEnabled ? availableModelsFromAPI : []
4791
4822
  }
4792
4823
  )
4793
4824
  ] })
@@ -5122,7 +5153,9 @@ function CrowCopilot({
5122
5153
  persistAnonymousConversations,
5123
5154
  welcomeMessage: welcomeMessageFromAPI,
5124
5155
  selectedModel,
5125
- toolConsentSettings
5156
+ toolConsentSettings,
5157
+ modelSelectionEnabled,
5158
+ availableModels: availableModelsFromAPI
5126
5159
  } = useCopilotStyles({
5127
5160
  productId,
5128
5161
  apiUrl,
@@ -6087,7 +6120,10 @@ function CrowCopilot({
6087
6120
  onSend: handleSend,
6088
6121
  onStop: handleStop,
6089
6122
  placeholder: "Ask anything...",
6090
- isLoading: chat.isLoading
6123
+ isLoading: chat.isLoading,
6124
+ selectedModel: chat.selectedModel || selectedModel,
6125
+ onModelChange: chat.setSelectedModel,
6126
+ availableModels: modelSelectionEnabled ? availableModelsFromAPI : []
6091
6127
  }
6092
6128
  )
6093
6129
  ]