@copilotkit/react-ui 1.68.0 → 1.68.2

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.umd.js CHANGED
@@ -1424,6 +1424,36 @@ rehype_sanitize = __toESM(rehype_sanitize);
1424
1424
  });
1425
1425
  };
1426
1426
 
1427
+ //#endregion
1428
+ //#region src/components/chat/feedback.ts
1429
+ /**
1430
+ * The feedback state a click on `kind` transitions to.
1431
+ *
1432
+ * Clicking the button that is already active retracts the feedback, so the
1433
+ * click deactivates it; every other click applies feedback.
1434
+ */
1435
+ function isActivatingClick(current, kind) {
1436
+ return current !== kind;
1437
+ }
1438
+ /**
1439
+ * Applies a feedback click to the message-id keyed map.
1440
+ *
1441
+ * A deactivating click removes the entry entirely rather than storing a falsy
1442
+ * value, so `messageFeedback[id]` stays absent for "no feedback given".
1443
+ */
1444
+ function applyFeedbackClick(previous, messageId, kind, isActive) {
1445
+ if (!isActive) {
1446
+ if (!(messageId in previous)) return previous;
1447
+ const { [messageId]: _retracted, ...rest } = previous;
1448
+ return rest;
1449
+ }
1450
+ if (previous[messageId] === kind) return previous;
1451
+ return {
1452
+ ...previous,
1453
+ [messageId]: kind
1454
+ };
1455
+ }
1456
+
1427
1457
  //#endregion
1428
1458
  //#region src/components/chat/messages/AssistantMessage.tsx
1429
1459
  const AssistantMessage = (props) => {
@@ -1444,10 +1474,10 @@ rehype_sanitize = __toESM(rehype_sanitize);
1444
1474
  if (onRegenerate) onRegenerate();
1445
1475
  };
1446
1476
  const handleThumbsUp = () => {
1447
- if (onThumbsUp && message) onThumbsUp(message);
1477
+ if (onThumbsUp && message) onThumbsUp(message, isActivatingClick(feedback, "thumbsUp"));
1448
1478
  };
1449
1479
  const handleThumbsDown = () => {
1450
- if (onThumbsDown && message) onThumbsDown(message);
1480
+ if (onThumbsDown && message) onThumbsDown(message, isActivatingClick(feedback, "thumbsDown"));
1451
1481
  };
1452
1482
  const LoadingIcon = () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1453
1483
  "data-testid": "copilot-loading-cursor",
@@ -2522,21 +2552,18 @@ rehype_sanitize = __toESM(rehype_sanitize);
2522
2552
  triggerChatError(error, "dropUpload", error);
2523
2553
  }
2524
2554
  };
2525
- const handleThumbsUp = (message) => {
2526
- if (onThumbsUp) onThumbsUp(message);
2527
- setMessageFeedback((prev) => ({
2528
- ...prev,
2529
- [message.id]: "thumbsUp"
2530
- }));
2531
- triggerObservabilityHook("onFeedbackGiven", message.id, "thumbsUp");
2555
+ const recordFeedback = (message, kind, isActive) => {
2556
+ const nextActive = isActive !== null && isActive !== void 0 ? isActive : true;
2557
+ setMessageFeedback((prev) => applyFeedbackClick(prev, message.id, kind, nextActive));
2558
+ if (nextActive) triggerObservabilityHook("onFeedbackGiven", message.id, kind);
2559
+ };
2560
+ const handleThumbsUp = (message, isActive) => {
2561
+ onThumbsUp === null || onThumbsUp === void 0 || onThumbsUp(message, isActive !== null && isActive !== void 0 ? isActive : true);
2562
+ recordFeedback(message, "thumbsUp", isActive);
2532
2563
  };
2533
- const handleThumbsDown = (message) => {
2534
- if (onThumbsDown) onThumbsDown(message);
2535
- setMessageFeedback((prev) => ({
2536
- ...prev,
2537
- [message.id]: "thumbsDown"
2538
- }));
2539
- triggerObservabilityHook("onFeedbackGiven", message.id, "thumbsDown");
2564
+ const handleThumbsDown = (message, isActive) => {
2565
+ onThumbsDown === null || onThumbsDown === void 0 || onThumbsDown(message, isActive !== null && isActive !== void 0 ? isActive : true);
2566
+ recordFeedback(message, "thumbsDown", isActive);
2540
2567
  };
2541
2568
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WrappedCopilotChat, {
2542
2569
  icons,