@copilotz/chat-ui 0.1.2 → 0.1.3

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.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/components/chat/ChatUI.tsx
2
- import { useState as useState8, useEffect as useEffect10, useRef as useRef7, useCallback as useCallback4 } from "react";
2
+ import { useState as useState8, useEffect as useEffect10, useRef as useRef7, useCallback as useCallback4, useMemo as useMemo3 } from "react";
3
3
 
4
4
  // src/config/chatConfig.ts
5
5
  var defaultChatConfig = {
@@ -736,27 +736,7 @@ var ToolCallsDisplay = memo(function ToolCallsDisplay2({ toolCalls, label }) {
736
736
  ] });
737
737
  });
738
738
  var arePropsEqual = (prevProps, nextProps) => {
739
- if (prevProps.message.id !== nextProps.message.id) return false;
740
- if (prevProps.message.content !== nextProps.message.content) return false;
741
- if (prevProps.message.isStreaming !== nextProps.message.isStreaming) return false;
742
- if (prevProps.message.isComplete !== nextProps.message.isComplete) return false;
743
- if (prevProps.message.isEdited !== nextProps.message.isEdited) return false;
744
- if (prevProps.message.timestamp !== nextProps.message.timestamp) return false;
745
- if (prevProps.message.toolCalls !== nextProps.message.toolCalls) {
746
- const prevCalls = prevProps.message.toolCalls;
747
- const nextCalls = nextProps.message.toolCalls;
748
- if (!prevCalls || !nextCalls || prevCalls.length !== nextCalls.length) return false;
749
- for (let i = 0; i < prevCalls.length; i++) {
750
- if (prevCalls[i].id !== nextCalls[i].id || prevCalls[i].status !== nextCalls[i].status || prevCalls[i].result !== nextCalls[i].result) {
751
- return false;
752
- }
753
- }
754
- }
755
- if (prevProps.message.attachments !== nextProps.message.attachments) {
756
- const prevAtt = prevProps.message.attachments;
757
- const nextAtt = nextProps.message.attachments;
758
- if (!prevAtt || !nextAtt || prevAtt.length !== nextAtt.length) return false;
759
- }
739
+ if (prevProps.message !== nextProps.message) return false;
760
740
  if (prevProps.isUser !== nextProps.isUser) return false;
761
741
  if (prevProps.userAvatar !== nextProps.userAvatar) return false;
762
742
  if (prevProps.userName !== nextProps.userName) return false;
@@ -3753,7 +3733,10 @@ var ChatUI = ({
3753
3733
  initialInput,
3754
3734
  onInitialInputConsumed
3755
3735
  }) => {
3756
- const config = mergeConfig(defaultChatConfig, userConfig);
3736
+ const config = useMemo3(
3737
+ () => mergeConfig(defaultChatConfig, userConfig),
3738
+ [userConfig]
3739
+ );
3757
3740
  const [isMobile, setIsMobile] = useState8(false);
3758
3741
  const [isUserProfileOpen, setIsUserProfileOpen] = useState8(false);
3759
3742
  let userContext;
@@ -3978,6 +3961,62 @@ var ChatUI = ({
3978
3961
  `message-skeleton-${index}`
3979
3962
  );
3980
3963
  }) });
3964
+ const renderedMessageList = useMemo3(() => {
3965
+ if (isMessagesLoading) return renderMessageLoadingSkeleton();
3966
+ return /* @__PURE__ */ jsxs14(Fragment6, { children: [
3967
+ renderSuggestions(),
3968
+ messages.map((message, index) => {
3969
+ const prevMessage = index > 0 ? messages[index - 1] : null;
3970
+ const isGrouped = prevMessage !== null && prevMessage.role === message.role;
3971
+ return /* @__PURE__ */ jsxs14("div", { className: isGrouped ? "space-y-1 -mt-2" : "space-y-2", children: [
3972
+ /* @__PURE__ */ jsx24(
3973
+ Message,
3974
+ {
3975
+ message,
3976
+ userAvatar: user?.avatar,
3977
+ userName: user?.name,
3978
+ assistantAvatar: assistant?.avatar,
3979
+ assistantName: assistant?.name,
3980
+ showTimestamp: config.ui.showTimestamps,
3981
+ showAvatar: config.ui.showAvatars,
3982
+ enableCopy: config.features.enableMessageCopy,
3983
+ enableEdit: config.features.enableMessageEditing,
3984
+ enableRegenerate: config.features.enableRegeneration,
3985
+ enableToolCallsDisplay: config.features.enableToolCallsDisplay,
3986
+ compactMode: config.ui.compactMode,
3987
+ onAction: handleMessageAction,
3988
+ toolUsedLabel: config.labels.toolUsed,
3989
+ thinkingLabel: config.labels.thinking,
3990
+ isGrouped
3991
+ }
3992
+ ),
3993
+ message.role === "assistant" && renderInlineSuggestions(message.id)
3994
+ ] }, message.id);
3995
+ })
3996
+ ] });
3997
+ }, [
3998
+ isMessagesLoading,
3999
+ messages,
4000
+ handleSendMessage,
4001
+ user?.avatar,
4002
+ user?.name,
4003
+ assistant?.avatar,
4004
+ assistant?.name,
4005
+ config.branding.title,
4006
+ config.branding.subtitle,
4007
+ config.ui.showTimestamps,
4008
+ config.ui.showAvatars,
4009
+ config.ui.compactMode,
4010
+ config.features.enableMessageCopy,
4011
+ config.features.enableMessageEditing,
4012
+ config.features.enableRegeneration,
4013
+ config.features.enableToolCallsDisplay,
4014
+ config.labels.toolUsed,
4015
+ config.labels.thinking,
4016
+ handleMessageAction,
4017
+ messageSuggestions,
4018
+ suggestions
4019
+ ]);
3981
4020
  const shouldShowAgentSelector = Boolean(
3982
4021
  config.agentSelector?.enabled && onSelectAgent && agentOptions.length > 0 && (!config.agentSelector?.hideIfSingle || agentOptions.length > 1)
3983
4022
  );
@@ -4038,37 +4077,7 @@ var ChatUI = ({
4038
4077
  viewportClassName: "p-4 overscroll-contain",
4039
4078
  onScrollCapture: handleScroll,
4040
4079
  children: /* @__PURE__ */ jsxs14("div", { className: "max-w-4xl mx-auto space-y-4 pb-4", children: [
4041
- isMessagesLoading ? renderMessageLoadingSkeleton() : /* @__PURE__ */ jsxs14(Fragment6, { children: [
4042
- renderSuggestions(),
4043
- messages.map((message, index) => {
4044
- const prevMessage = index > 0 ? messages[index - 1] : null;
4045
- const isGrouped = prevMessage !== null && prevMessage.role === message.role;
4046
- return /* @__PURE__ */ jsxs14("div", { className: isGrouped ? "space-y-1 -mt-2" : "space-y-2", children: [
4047
- /* @__PURE__ */ jsx24(
4048
- Message,
4049
- {
4050
- message,
4051
- userAvatar: user?.avatar,
4052
- userName: user?.name,
4053
- assistantAvatar: assistant?.avatar,
4054
- assistantName: assistant?.name,
4055
- showTimestamp: config.ui.showTimestamps,
4056
- showAvatar: config.ui.showAvatars,
4057
- enableCopy: config.features.enableMessageCopy,
4058
- enableEdit: config.features.enableMessageEditing,
4059
- enableRegenerate: config.features.enableRegeneration,
4060
- enableToolCallsDisplay: config.features.enableToolCallsDisplay,
4061
- compactMode: config.ui.compactMode,
4062
- onAction: handleMessageAction,
4063
- toolUsedLabel: config.labels.toolUsed,
4064
- thinkingLabel: config.labels.thinking,
4065
- isGrouped
4066
- }
4067
- ),
4068
- message.role === "assistant" && renderInlineSuggestions(message.id)
4069
- ] }, message.id);
4070
- })
4071
- ] }),
4080
+ renderedMessageList,
4072
4081
  /* @__PURE__ */ jsx24("div", { ref: messagesEndRef })
4073
4082
  ] })
4074
4083
  }