@usecrow/ui 0.1.15 → 0.1.17

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
@@ -71,16 +71,19 @@ var getConversationStorageKey = (productId) => `crow_conv_${productId}`;
71
71
  function useChat({
72
72
  productId,
73
73
  apiUrl = "",
74
+ persistAnonymousConversations: _persistAnonymousConversations,
75
+ welcomeMessage,
74
76
  onVerificationStatus,
75
77
  onConversationId,
76
78
  onWorkflowEvent,
77
79
  onToolCall,
78
80
  onRestoredConversation
79
81
  }) {
82
+ const effectiveWelcomeMessage = welcomeMessage || DEFAULT_WELCOME_MESSAGE;
80
83
  const [messages, setMessages] = React3.useState([
81
84
  {
82
85
  id: "welcome",
83
- content: DEFAULT_WELCOME_MESSAGE,
86
+ content: effectiveWelcomeMessage,
84
87
  isBot: true,
85
88
  timestamp: /* @__PURE__ */ new Date()
86
89
  }
@@ -97,6 +100,18 @@ function useChat({
97
100
  const [selectedModel, setSelectedModel] = React3.useState(DEFAULT_MODEL);
98
101
  const abortControllerRef = React3.useRef(null);
99
102
  const hasRestoredRef = React3.useRef(false);
103
+ React3.useEffect(() => {
104
+ if (messages.length === 1 && messages[0].id === "welcome" && !conversationId) {
105
+ setMessages([
106
+ {
107
+ id: "welcome",
108
+ content: effectiveWelcomeMessage,
109
+ isBot: true,
110
+ timestamp: /* @__PURE__ */ new Date()
111
+ }
112
+ ]);
113
+ }
114
+ }, [effectiveWelcomeMessage]);
100
115
  React3.useEffect(() => {
101
116
  if (conversationId && onRestoredConversation && !hasRestoredRef.current) {
102
117
  hasRestoredRef.current = true;
@@ -347,7 +362,7 @@ function useChat({
347
362
  setMessages([
348
363
  {
349
364
  id: "welcome",
350
- content: DEFAULT_WELCOME_MESSAGE,
365
+ content: effectiveWelcomeMessage,
351
366
  isBot: true,
352
367
  timestamp: /* @__PURE__ */ new Date()
353
368
  }
@@ -357,7 +372,7 @@ function useChat({
357
372
  localStorage.removeItem(getConversationStorageKey(productId));
358
373
  } catch {
359
374
  }
360
- }, [productId]);
375
+ }, [productId, effectiveWelcomeMessage]);
361
376
  const loadMessages = React3.useCallback((historyMessages) => {
362
377
  setMessages(historyMessages);
363
378
  }, []);
@@ -1042,6 +1057,12 @@ function useWidgetStyles({
1042
1057
  const [showThinking, setShowThinking] = React3.useState(
1043
1058
  styleCache.get(key)?.showThinking ?? true
1044
1059
  );
1060
+ const [persistAnonymousConversations, setPersistAnonymousConversations] = React3.useState(
1061
+ styleCache.has(key) ? styleCache.get(key)?.persistAnonymousConversations ?? true : void 0
1062
+ );
1063
+ const [welcomeMessage, setWelcomeMessage] = React3.useState(
1064
+ styleCache.get(key)?.welcomeMessage ?? void 0
1065
+ );
1045
1066
  const hasFetchedRef = React3.useRef(false);
1046
1067
  const fetchStyles = async () => {
1047
1068
  if (skip) return;
@@ -1054,6 +1075,8 @@ function useWidgetStyles({
1054
1075
  setAgentName(config.agentName || "Assistant");
1055
1076
  setBrowserUseEnabled(config.browserUseEnabled || false);
1056
1077
  setShowThinking(config.showThinking ?? true);
1078
+ setPersistAnonymousConversations(config.persistAnonymousConversations ?? true);
1079
+ setWelcomeMessage(config.welcomeMessage ?? void 0);
1057
1080
  } catch (err) {
1058
1081
  console.error("[CrowWidget] Failed to fetch styles:", err);
1059
1082
  setError(err instanceof Error ? err : new Error(String(err)));
@@ -1069,6 +1092,8 @@ function useWidgetStyles({
1069
1092
  setAgentName(cached.agentName || "Assistant");
1070
1093
  setBrowserUseEnabled(cached.browserUseEnabled || false);
1071
1094
  setShowThinking(cached.showThinking ?? true);
1095
+ setPersistAnonymousConversations(cached.persistAnonymousConversations ?? true);
1096
+ setWelcomeMessage(cached.welcomeMessage ?? void 0);
1072
1097
  setIsLoading(false);
1073
1098
  return;
1074
1099
  }
@@ -1083,6 +1108,8 @@ function useWidgetStyles({
1083
1108
  agentName,
1084
1109
  browserUseEnabled,
1085
1110
  showThinking,
1111
+ persistAnonymousConversations,
1112
+ welcomeMessage,
1086
1113
  refetch: fetchStyles
1087
1114
  };
1088
1115
  }
@@ -1102,6 +1129,12 @@ function useCopilotStyles({
1102
1129
  const [agentName, setAgentName] = React3.useState(
1103
1130
  styleCache.get(key)?.agentName || "Assistant"
1104
1131
  );
1132
+ const [persistAnonymousConversations, setPersistAnonymousConversations] = React3.useState(
1133
+ styleCache.has(key) ? styleCache.get(key)?.persistAnonymousConversations ?? true : void 0
1134
+ );
1135
+ const [welcomeMessage, setWelcomeMessage] = React3.useState(
1136
+ styleCache.get(key)?.welcomeMessage ?? void 0
1137
+ );
1105
1138
  const hasFetchedRef = React3.useRef(false);
1106
1139
  const fetchStyles = async () => {
1107
1140
  if (skip) return;
@@ -1112,6 +1145,8 @@ function useCopilotStyles({
1112
1145
  styleCache.set(key, config);
1113
1146
  setDbStyles(config.copilotStyles);
1114
1147
  setAgentName(config.agentName || "Assistant");
1148
+ setPersistAnonymousConversations(config.persistAnonymousConversations ?? true);
1149
+ setWelcomeMessage(config.welcomeMessage ?? void 0);
1115
1150
  } catch (err) {
1116
1151
  console.error("[CrowCopilot] Failed to fetch styles:", err);
1117
1152
  setError(err instanceof Error ? err : new Error(String(err)));
@@ -1125,6 +1160,8 @@ function useCopilotStyles({
1125
1160
  if (cached) {
1126
1161
  setDbStyles(cached.copilotStyles);
1127
1162
  setAgentName(cached.agentName || "Assistant");
1163
+ setPersistAnonymousConversations(cached.persistAnonymousConversations ?? true);
1164
+ setWelcomeMessage(cached.welcomeMessage ?? void 0);
1128
1165
  setIsLoading(false);
1129
1166
  return;
1130
1167
  }
@@ -1137,6 +1174,8 @@ function useCopilotStyles({
1137
1174
  isLoading,
1138
1175
  error,
1139
1176
  agentName,
1177
+ persistAnonymousConversations,
1178
+ welcomeMessage,
1140
1179
  refetch: fetchStyles
1141
1180
  };
1142
1181
  }
@@ -2449,16 +2488,27 @@ function CrowWidget({
2449
2488
  styles: propStyles,
2450
2489
  previewMode = false,
2451
2490
  showThinking: showThinkingProp,
2491
+ welcomeMessage: welcomeMessageProp,
2452
2492
  onReady,
2453
2493
  onIdentify,
2454
2494
  tools
2455
2495
  }) {
2456
- const { styles, isLoading: isLoadingStyles, agentName, browserUseEnabled, showThinking: showThinkingFromAPI } = useWidgetStyles({
2496
+ const {
2497
+ styles,
2498
+ isLoading: isLoadingStyles,
2499
+ agentName,
2500
+ browserUseEnabled,
2501
+ showThinking: showThinkingFromAPI,
2502
+ persistAnonymousConversations,
2503
+ welcomeMessage: welcomeMessageFromAPI
2504
+ } = useWidgetStyles({
2457
2505
  productId,
2458
2506
  apiUrl,
2459
2507
  propStyles,
2460
2508
  skip: previewMode
2461
2509
  });
2510
+ const welcomeMessage = welcomeMessageProp ?? welcomeMessageFromAPI;
2511
+ console.log("[Crow Widget] persistAnonymousConversations from API:", persistAnonymousConversations, "isLoading:", isLoadingStyles);
2462
2512
  const showThinking = showThinkingProp ?? showThinkingFromAPI;
2463
2513
  const [autoTools, setAutoTools] = React3.useState({});
2464
2514
  const cssVars = stylesToCssVars(styles);
@@ -2486,6 +2536,8 @@ function CrowWidget({
2486
2536
  const chat = useChat({
2487
2537
  productId,
2488
2538
  apiUrl,
2539
+ persistAnonymousConversations,
2540
+ welcomeMessage,
2489
2541
  onVerificationStatus: (isVerified) => {
2490
2542
  setIsVerifiedUser(isVerified);
2491
2543
  },
@@ -2730,7 +2782,7 @@ function CrowCopilot({
2730
2782
  className,
2731
2783
  onReady
2732
2784
  }) {
2733
- const { styles, isLoading: isLoadingStyles, agentName } = useCopilotStyles({
2785
+ const { styles, isLoading: isLoadingStyles, agentName, persistAnonymousConversations, welcomeMessage } = useCopilotStyles({
2734
2786
  productId,
2735
2787
  apiUrl,
2736
2788
  propStyles,
@@ -2746,6 +2798,8 @@ function CrowCopilot({
2746
2798
  const chat = useChat({
2747
2799
  productId,
2748
2800
  apiUrl,
2801
+ persistAnonymousConversations,
2802
+ welcomeMessage,
2749
2803
  onVerificationStatus: (isVerified) => {
2750
2804
  setIsVerifiedUser(isVerified);
2751
2805
  },