@usecrow/ui 0.1.33 → 0.1.35

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
@@ -1190,6 +1190,10 @@ function useWidgetStyles({
1190
1190
  const [browserUseEnabled, setBrowserUseEnabled] = React3.useState(
1191
1191
  styleCache.get(key)?.browserUseEnabled || false
1192
1192
  );
1193
+ const [pageNavigationEnabled, setPageNavigationEnabled] = React3.useState(
1194
+ styleCache.get(key)?.pageNavigationEnabled || false
1195
+ );
1196
+ const [pageNavigationRoutes, setPageNavigationRoutes] = React3.useState(styleCache.get(key)?.pageNavigationRoutes || []);
1193
1197
  const [showThinking, setShowThinking] = React3.useState(
1194
1198
  styleCache.get(key)?.showThinking ?? true
1195
1199
  );
@@ -1213,6 +1217,8 @@ function useWidgetStyles({
1213
1217
  setDbStyles(config.widgetStyles);
1214
1218
  setAgentName(config.agentName || "Assistant");
1215
1219
  setBrowserUseEnabled(config.browserUseEnabled || false);
1220
+ setPageNavigationEnabled(config.pageNavigationEnabled || false);
1221
+ setPageNavigationRoutes(config.pageNavigationRoutes || []);
1216
1222
  setShowThinking(config.showThinking ?? true);
1217
1223
  setPersistAnonymousConversations(config.persistAnonymousConversations ?? true);
1218
1224
  setWelcomeMessage(config.welcomeMessage ?? void 0);
@@ -1248,6 +1254,8 @@ function useWidgetStyles({
1248
1254
  error,
1249
1255
  agentName,
1250
1256
  browserUseEnabled,
1257
+ pageNavigationEnabled,
1258
+ pageNavigationRoutes,
1251
1259
  showThinking,
1252
1260
  persistAnonymousConversations,
1253
1261
  welcomeMessage,
@@ -1271,6 +1279,10 @@ function useCopilotStyles({
1271
1279
  const [agentName, setAgentName] = React3.useState(
1272
1280
  styleCache.get(key)?.agentName || "Assistant"
1273
1281
  );
1282
+ const [pageNavigationEnabled, setPageNavigationEnabled] = React3.useState(
1283
+ styleCache.get(key)?.pageNavigationEnabled || false
1284
+ );
1285
+ const [pageNavigationRoutes, setPageNavigationRoutes] = React3.useState(styleCache.get(key)?.pageNavigationRoutes || []);
1274
1286
  const [persistAnonymousConversations, setPersistAnonymousConversations] = React3.useState(
1275
1287
  styleCache.has(key) ? styleCache.get(key)?.persistAnonymousConversations ?? true : void 0
1276
1288
  );
@@ -1290,6 +1302,8 @@ function useCopilotStyles({
1290
1302
  styleCache.set(key, config);
1291
1303
  setDbStyles(config.copilotStyles);
1292
1304
  setAgentName(config.agentName || "Assistant");
1305
+ setPageNavigationEnabled(config.pageNavigationEnabled || false);
1306
+ setPageNavigationRoutes(config.pageNavigationRoutes || []);
1293
1307
  setPersistAnonymousConversations(config.persistAnonymousConversations ?? true);
1294
1308
  setWelcomeMessage(config.welcomeMessage ?? void 0);
1295
1309
  setSelectedModel(config.model ?? void 0);
@@ -1306,6 +1320,8 @@ function useCopilotStyles({
1306
1320
  if (cached) {
1307
1321
  setDbStyles(cached.copilotStyles);
1308
1322
  setAgentName(cached.agentName || "Assistant");
1323
+ setPageNavigationEnabled(cached.pageNavigationEnabled || false);
1324
+ setPageNavigationRoutes(cached.pageNavigationRoutes || []);
1309
1325
  setPersistAnonymousConversations(cached.persistAnonymousConversations ?? true);
1310
1326
  setWelcomeMessage(cached.welcomeMessage ?? void 0);
1311
1327
  setSelectedModel(cached.model ?? void 0);
@@ -1321,6 +1337,8 @@ function useCopilotStyles({
1321
1337
  isLoading,
1322
1338
  error,
1323
1339
  agentName,
1340
+ pageNavigationEnabled,
1341
+ pageNavigationRoutes,
1324
1342
  persistAnonymousConversations,
1325
1343
  welcomeMessage,
1326
1344
  selectedModel,
@@ -2868,6 +2886,7 @@ function CrowWidget({
2868
2886
  onReady,
2869
2887
  onIdentify,
2870
2888
  tools,
2889
+ navigate,
2871
2890
  onToolResult
2872
2891
  }) {
2873
2892
  const {
@@ -2875,6 +2894,8 @@ function CrowWidget({
2875
2894
  isLoading: isLoadingStyles,
2876
2895
  agentName: agentNameFromAPI,
2877
2896
  browserUseEnabled,
2897
+ pageNavigationEnabled,
2898
+ pageNavigationRoutes,
2878
2899
  showThinking: showThinkingFromAPI,
2879
2900
  persistAnonymousConversations,
2880
2901
  welcomeMessage: welcomeMessageFromAPI,
@@ -3080,17 +3101,33 @@ function CrowWidget({
3080
3101
  };
3081
3102
  }, [handleBrowserConfirmation, handleBrowserQuestion, handleBrowserProgress]);
3082
3103
  React3.useEffect(() => {
3083
- if (browserUseEnabled && !isLoadingStyles && Object.keys(autoTools).length === 0) {
3104
+ if (browserUseEnabled && !isLoadingStyles && !autoTools.browser_use) {
3084
3105
  import('@usecrow/client/browser').then(({ createBrowserUseTool }) => {
3085
- setAutoTools({
3106
+ setAutoTools((prev) => ({
3107
+ ...prev,
3086
3108
  browser_use: createBrowserUseTool({ productId, apiUrl })
3087
- });
3109
+ }));
3088
3110
  console.log("[Crow] browser_use tool auto-loaded");
3089
3111
  }).catch((err) => {
3090
3112
  console.warn("[Crow] Failed to load browser_use:", err);
3091
3113
  });
3092
3114
  }
3093
3115
  }, [browserUseEnabled, isLoadingStyles, productId, apiUrl, autoTools]);
3116
+ React3.useEffect(() => {
3117
+ if (pageNavigationEnabled && pageNavigationRoutes.length > 0 && !isLoadingStyles) {
3118
+ import('@usecrow/client').then(({ createNavigateToPageTool }) => {
3119
+ setAutoTools((prev) => ({
3120
+ ...prev,
3121
+ navigateToPage: createNavigateToPageTool(pageNavigationRoutes, navigate)
3122
+ }));
3123
+ console.log(
3124
+ `[Crow] navigateToPage tool auto-loaded with ${pageNavigationRoutes.length} routes`
3125
+ );
3126
+ }).catch((err) => {
3127
+ console.warn("[Crow] Failed to load navigateToPage:", err);
3128
+ });
3129
+ }
3130
+ }, [pageNavigationEnabled, pageNavigationRoutes, isLoadingStyles, navigate]);
3094
3131
  const mergedTools = React3.useMemo(() => ({ ...autoTools, ...tools }), [autoTools, tools]);
3095
3132
  React3.useEffect(() => {
3096
3133
  if (Object.keys(mergedTools).length > 0) {
@@ -3387,12 +3424,15 @@ function CrowCopilot({
3387
3424
  previewMode = false,
3388
3425
  className,
3389
3426
  onReady,
3427
+ navigate,
3390
3428
  onToolResult
3391
3429
  }) {
3392
3430
  const {
3393
3431
  styles,
3394
3432
  isLoading: isLoadingStyles,
3395
3433
  agentName: agentNameFromAPI,
3434
+ pageNavigationEnabled,
3435
+ pageNavigationRoutes,
3396
3436
  persistAnonymousConversations,
3397
3437
  welcomeMessage: welcomeMessageFromAPI,
3398
3438
  selectedModel
@@ -3404,6 +3444,27 @@ function CrowCopilot({
3404
3444
  });
3405
3445
  const agentName = agentNameProp ?? agentNameFromAPI ?? title;
3406
3446
  const welcomeMessage = welcomeMessageProp ?? welcomeMessageFromAPI;
3447
+ const [autoTools, setAutoTools] = React3.useState({});
3448
+ React3.useEffect(() => {
3449
+ if (pageNavigationEnabled && pageNavigationRoutes.length > 0 && !isLoadingStyles) {
3450
+ import('@usecrow/client').then(({ createNavigateToPageTool }) => {
3451
+ setAutoTools((prev) => ({
3452
+ ...prev,
3453
+ navigateToPage: createNavigateToPageTool(pageNavigationRoutes, navigate)
3454
+ }));
3455
+ console.log(
3456
+ `[Crow] navigateToPage tool auto-loaded with ${pageNavigationRoutes.length} routes`
3457
+ );
3458
+ }).catch((err) => {
3459
+ console.warn("[Crow] Failed to load navigateToPage:", err);
3460
+ });
3461
+ }
3462
+ }, [pageNavigationEnabled, pageNavigationRoutes, isLoadingStyles, navigate]);
3463
+ React3.useEffect(() => {
3464
+ if (Object.keys(autoTools).length > 0) {
3465
+ window.crow?.("registerTools", autoTools);
3466
+ }
3467
+ }, [autoTools]);
3407
3468
  const messagesContainerRef = React3.useRef(null);
3408
3469
  const tabsScrollRef = React3.useRef(null);
3409
3470
  const executeClientToolRef = React3.useRef(null);