@copilotz/chat-ui 0.7.4 → 0.7.5

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.
Files changed (163) hide show
  1. package/dist/index.cjs +3 -3
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +3 -3
  4. package/dist/index.js.map +1 -1
  5. package/dist/styles.css +6 -3
  6. package/package.json +1 -1
  7. package/dist/components/chat/AgentSelectors.d.ts +0 -50
  8. package/dist/components/chat/AgentSelectors.d.ts.map +0 -1
  9. package/dist/components/chat/AgentSelectors.js +0 -67
  10. package/dist/components/chat/AgentSelectors.js.map +0 -1
  11. package/dist/components/chat/AssistantActivity.d.ts +0 -11
  12. package/dist/components/chat/AssistantActivity.d.ts.map +0 -1
  13. package/dist/components/chat/AssistantActivity.js +0 -82
  14. package/dist/components/chat/AssistantActivity.js.map +0 -1
  15. package/dist/components/chat/ChatHeader.d.ts +0 -56
  16. package/dist/components/chat/ChatHeader.d.ts.map +0 -1
  17. package/dist/components/chat/ChatHeader.js +0 -71
  18. package/dist/components/chat/ChatHeader.js.map +0 -1
  19. package/dist/components/chat/ChatInput.d.ts +0 -25
  20. package/dist/components/chat/ChatInput.d.ts.map +0 -1
  21. package/dist/components/chat/ChatInput.js +0 -732
  22. package/dist/components/chat/ChatInput.js.map +0 -1
  23. package/dist/components/chat/ChatUI.d.ts +0 -4
  24. package/dist/components/chat/ChatUI.d.ts.map +0 -1
  25. package/dist/components/chat/ChatUI.js +0 -470
  26. package/dist/components/chat/ChatUI.js.map +0 -1
  27. package/dist/components/chat/Message.d.ts +0 -37
  28. package/dist/components/chat/Message.d.ts.map +0 -1
  29. package/dist/components/chat/Message.js +0 -262
  30. package/dist/components/chat/Message.js.map +0 -1
  31. package/dist/components/chat/Sidebar.d.ts +0 -52
  32. package/dist/components/chat/Sidebar.d.ts.map +0 -1
  33. package/dist/components/chat/Sidebar.js +0 -112
  34. package/dist/components/chat/Sidebar.js.map +0 -1
  35. package/dist/components/chat/ThreadManager.d.ts +0 -18
  36. package/dist/components/chat/ThreadManager.d.ts.map +0 -1
  37. package/dist/components/chat/ThreadManager.js +0 -108
  38. package/dist/components/chat/ThreadManager.js.map +0 -1
  39. package/dist/components/chat/UserContext.d.ts +0 -15
  40. package/dist/components/chat/UserContext.d.ts.map +0 -1
  41. package/dist/components/chat/UserContext.js +0 -39
  42. package/dist/components/chat/UserContext.js.map +0 -1
  43. package/dist/components/chat/UserMenu.d.ts +0 -38
  44. package/dist/components/chat/UserMenu.d.ts.map +0 -1
  45. package/dist/components/chat/UserMenu.js +0 -44
  46. package/dist/components/chat/UserMenu.js.map +0 -1
  47. package/dist/components/chat/UserProfile.d.ts +0 -51
  48. package/dist/components/chat/UserProfile.d.ts.map +0 -1
  49. package/dist/components/chat/UserProfile.js +0 -206
  50. package/dist/components/chat/UserProfile.js.map +0 -1
  51. package/dist/components/chat/VoiceComposer.d.ts +0 -29
  52. package/dist/components/chat/VoiceComposer.d.ts.map +0 -1
  53. package/dist/components/chat/VoiceComposer.js +0 -99
  54. package/dist/components/chat/VoiceComposer.js.map +0 -1
  55. package/dist/components/ui/Spinner.d.ts +0 -7
  56. package/dist/components/ui/Spinner.d.ts.map +0 -1
  57. package/dist/components/ui/Spinner.js +0 -14
  58. package/dist/components/ui/Spinner.js.map +0 -1
  59. package/dist/components/ui/accordion.d.ts +0 -8
  60. package/dist/components/ui/accordion.d.ts.map +0 -1
  61. package/dist/components/ui/accordion.js +0 -14
  62. package/dist/components/ui/accordion.js.map +0 -1
  63. package/dist/components/ui/alert-dialog.d.ts +0 -15
  64. package/dist/components/ui/alert-dialog.d.ts.map +0 -1
  65. package/dist/components/ui/alert-dialog.js +0 -66
  66. package/dist/components/ui/alert-dialog.js.map +0 -1
  67. package/dist/components/ui/avatar.d.ts +0 -7
  68. package/dist/components/ui/avatar.d.ts.map +0 -1
  69. package/dist/components/ui/avatar.js +0 -15
  70. package/dist/components/ui/avatar.js.map +0 -1
  71. package/dist/components/ui/badge.d.ts +0 -10
  72. package/dist/components/ui/badge.d.ts.map +0 -1
  73. package/dist/components/ui/badge.js +0 -23
  74. package/dist/components/ui/badge.js.map +0 -1
  75. package/dist/components/ui/button.d.ts +0 -11
  76. package/dist/components/ui/button.d.ts.map +0 -1
  77. package/dist/components/ui/button.js +0 -32
  78. package/dist/components/ui/button.js.map +0 -1
  79. package/dist/components/ui/card.d.ts +0 -10
  80. package/dist/components/ui/card.d.ts.map +0 -1
  81. package/dist/components/ui/card.js +0 -25
  82. package/dist/components/ui/card.js.map +0 -1
  83. package/dist/components/ui/collapsible.d.ts +0 -6
  84. package/dist/components/ui/collapsible.d.ts.map +0 -1
  85. package/dist/components/ui/collapsible.js +0 -6
  86. package/dist/components/ui/collapsible.js.map +0 -1
  87. package/dist/components/ui/context-menu.d.ts +0 -26
  88. package/dist/components/ui/context-menu.d.ts.map +0 -1
  89. package/dist/components/ui/context-menu.js +0 -51
  90. package/dist/components/ui/context-menu.js.map +0 -1
  91. package/dist/components/ui/dialog.d.ts +0 -16
  92. package/dist/components/ui/dialog.d.ts.map +0 -1
  93. package/dist/components/ui/dialog.js +0 -63
  94. package/dist/components/ui/dialog.js.map +0 -1
  95. package/dist/components/ui/dropdown-menu.d.ts +0 -26
  96. package/dist/components/ui/dropdown-menu.d.ts.map +0 -1
  97. package/dist/components/ui/dropdown-menu.js +0 -51
  98. package/dist/components/ui/dropdown-menu.js.map +0 -1
  99. package/dist/components/ui/input.d.ts +0 -4
  100. package/dist/components/ui/input.d.ts.map +0 -1
  101. package/dist/components/ui/input.js +0 -7
  102. package/dist/components/ui/input.js.map +0 -1
  103. package/dist/components/ui/progress.d.ts +0 -5
  104. package/dist/components/ui/progress.d.ts.map +0 -1
  105. package/dist/components/ui/progress.js +0 -8
  106. package/dist/components/ui/progress.js.map +0 -1
  107. package/dist/components/ui/scroll-area.d.ts +0 -8
  108. package/dist/components/ui/scroll-area.d.ts.map +0 -1
  109. package/dist/components/ui/scroll-area.js +0 -16
  110. package/dist/components/ui/scroll-area.js.map +0 -1
  111. package/dist/components/ui/select.d.ts +0 -12
  112. package/dist/components/ui/select.d.ts.map +0 -1
  113. package/dist/components/ui/select.js +0 -21
  114. package/dist/components/ui/select.js.map +0 -1
  115. package/dist/components/ui/separator.d.ts +0 -5
  116. package/dist/components/ui/separator.d.ts.map +0 -1
  117. package/dist/components/ui/separator.js +0 -9
  118. package/dist/components/ui/separator.js.map +0 -1
  119. package/dist/components/ui/sheet.d.ts +0 -14
  120. package/dist/components/ui/sheet.d.ts.map +0 -1
  121. package/dist/components/ui/sheet.js +0 -66
  122. package/dist/components/ui/sheet.js.map +0 -1
  123. package/dist/components/ui/sidebar.d.ts +0 -70
  124. package/dist/components/ui/sidebar.d.ts.map +0 -1
  125. package/dist/components/ui/sidebar.js +0 -212
  126. package/dist/components/ui/sidebar.js.map +0 -1
  127. package/dist/components/ui/skeleton.d.ts +0 -3
  128. package/dist/components/ui/skeleton.d.ts.map +0 -1
  129. package/dist/components/ui/skeleton.js +0 -7
  130. package/dist/components/ui/skeleton.js.map +0 -1
  131. package/dist/components/ui/textarea.d.ts +0 -4
  132. package/dist/components/ui/textarea.d.ts.map +0 -1
  133. package/dist/components/ui/textarea.js +0 -7
  134. package/dist/components/ui/textarea.js.map +0 -1
  135. package/dist/components/ui/tooltip.d.ts +0 -8
  136. package/dist/components/ui/tooltip.d.ts.map +0 -1
  137. package/dist/components/ui/tooltip.js +0 -18
  138. package/dist/components/ui/tooltip.js.map +0 -1
  139. package/dist/config/chatConfig.d.ts +0 -4
  140. package/dist/config/chatConfig.d.ts.map +0 -1
  141. package/dist/config/chatConfig.js +0 -173
  142. package/dist/config/chatConfig.js.map +0 -1
  143. package/dist/hooks/use-mobile.d.ts +0 -2
  144. package/dist/hooks/use-mobile.d.ts.map +0 -1
  145. package/dist/hooks/use-mobile.js +0 -16
  146. package/dist/hooks/use-mobile.js.map +0 -1
  147. package/dist/index.d.ts.map +0 -1
  148. package/dist/lib/chatUtils.d.ts +0 -18
  149. package/dist/lib/chatUtils.d.ts.map +0 -1
  150. package/dist/lib/chatUtils.js +0 -64
  151. package/dist/lib/chatUtils.js.map +0 -1
  152. package/dist/lib/utils.d.ts +0 -6
  153. package/dist/lib/utils.d.ts.map +0 -1
  154. package/dist/lib/utils.js +0 -46
  155. package/dist/lib/utils.js.map +0 -1
  156. package/dist/lib/voiceCompose.d.ts +0 -6
  157. package/dist/lib/voiceCompose.d.ts.map +0 -1
  158. package/dist/lib/voiceCompose.js +0 -344
  159. package/dist/lib/voiceCompose.js.map +0 -1
  160. package/dist/types/chatTypes.d.ts +0 -386
  161. package/dist/types/chatTypes.d.ts.map +0 -1
  162. package/dist/types/chatTypes.js +0 -2
  163. package/dist/types/chatTypes.js.map +0 -1
@@ -1,37 +0,0 @@
1
- import React from 'react';
2
- import { ActivityDisplayMode, ChatConfig, ChatMarkdownConfig, ChatMessage, AgentOption, MessageActionEvent } from '../../types/chatTypes';
3
- interface MessageProps {
4
- message: ChatMessage;
5
- isUser?: boolean;
6
- userAvatar?: string;
7
- userName?: string;
8
- assistantAvatar?: React.ReactNode;
9
- assistantName?: string;
10
- showTimestamp?: boolean;
11
- showAvatar?: boolean;
12
- enableCopy?: boolean;
13
- enableEdit?: boolean;
14
- enableRegenerate?: boolean;
15
- activityDisplay?: ActivityDisplayMode;
16
- compactMode?: boolean;
17
- onAction?: (event: MessageActionEvent) => void;
18
- className?: string;
19
- labels?: ChatConfig['labels'];
20
- showMoreLabel?: string;
21
- showLessLabel?: string;
22
- collapseLongMessages?: boolean;
23
- collapseLongMessagesForUserOnly?: boolean;
24
- longMessagePreviewChars?: number;
25
- longMessageChunkChars?: number;
26
- renderUserMarkdown?: boolean;
27
- markdown?: ChatMarkdownConfig;
28
- isExpanded?: boolean;
29
- onToggleExpanded?: (messageId: string) => void;
30
- /** When true, hides the avatar and name (for grouped consecutive messages from same sender) */
31
- isGrouped?: boolean;
32
- /** Available agents for resolving multi-agent display (colors, avatars) */
33
- agentOptions?: AgentOption[];
34
- }
35
- export declare const Message: React.FC<MessageProps>;
36
- export {};
37
- //# sourceMappingURL=Message.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../../src/components/chat/Message.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6C,MAAM,OAAO,CAAC;AAIlE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAmB,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAkB3J,UAAU,YAAY;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,+FAA+F;IAC/F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;CAC9B;AA+SD,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAuU1B,CAAC"}
@@ -1,262 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import React, { useState, useMemo, useEffect, memo } from 'react';
3
- import ReactMarkdown from 'react-markdown';
4
- import remarkGfm from 'remark-gfm';
5
- import rehypeHighlight from 'rehype-highlight';
6
- import { getAgentColor, getAgentInitials } from '../../lib/chatUtils';
7
- import { Button } from '../ui/button';
8
- import { Avatar, AvatarFallback, AvatarImage } from '../ui/avatar';
9
- import { Badge } from '../ui/badge';
10
- import { Textarea } from '../ui/textarea';
11
- import { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip';
12
- import { createObjectUrlFromDataUrl } from '../../lib/utils';
13
- import { AssistantActivity } from './AssistantActivity';
14
- import { Copy, Edit, RotateCcw, Check, X, } from 'lucide-react';
15
- // Memoized markdown components configuration to prevent recreation on every render
16
- const defaultMarkdownComponents = {
17
- code: ({ node, className, children, ...props }) => {
18
- const inline = props.inline;
19
- const match = /language-(\w+)/.exec(className || '');
20
- return !inline && match ? (_jsx("pre", { className: "relative", children: _jsx("code", { className: className, ...props, children: children }) })) : (_jsx("code", { className: "bg-muted px-1 py-0.5 rounded text-sm", ...props, children: children }));
21
- },
22
- };
23
- // Memoized plugins arrays to prevent recreation
24
- const remarkPluginsDefault = [remarkGfm];
25
- const rehypePluginsDefault = [rehypeHighlight];
26
- const rehypePluginsEmpty = [];
27
- const getPlainTextChunks = (content, chunkSize) => {
28
- if (chunkSize <= 0 || content.length <= chunkSize) {
29
- return [content];
30
- }
31
- const chunks = [];
32
- let start = 0;
33
- while (start < content.length) {
34
- let end = Math.min(start + chunkSize, content.length);
35
- if (end < content.length) {
36
- const splitAt = content.lastIndexOf('\n', end);
37
- if (splitAt > start + Math.floor(chunkSize / 2)) {
38
- end = splitAt + 1;
39
- }
40
- }
41
- chunks.push(content.slice(start, end));
42
- start = end;
43
- }
44
- return chunks;
45
- };
46
- const hasCodeBlocks = (content) => /(^|\n)(```|~~~)/.test(content);
47
- const getCollapsedPreview = (content, previewChars, previewOverride) => {
48
- if (previewOverride && previewOverride.trim().length > 0) {
49
- const normalizedPreview = previewOverride.trimEnd();
50
- return normalizedPreview.endsWith('...') ? normalizedPreview : `${normalizedPreview}...`;
51
- }
52
- if (content.length <= previewChars) {
53
- return content;
54
- }
55
- return `${content.slice(0, previewChars).trimEnd()}...`;
56
- };
57
- const LongContentShell = memo(function LongContentShell({ children, className, style }) {
58
- return (_jsx("div", { className: className, style: style, children: children }));
59
- });
60
- const PlainTextContent = memo(function PlainTextContent({ content, className = '', chunkSize = 12000, style, }) {
61
- const chunks = useMemo(() => getPlainTextChunks(content, chunkSize), [content, chunkSize]);
62
- return (_jsx(LongContentShell, { className: `text-sm leading-6 whitespace-pre-wrap break-words ${className}`.trim(), style: style, children: chunks.map((chunk, index) => (_jsx(React.Fragment, { children: chunk }, index))) }));
63
- });
64
- // Streaming text component for real-time markdown rendering - memoized to prevent unnecessary re-renders
65
- const StreamingText = memo(function StreamingText({ content, isStreaming = false, className = '', renderMarkdown = true, markdown, plainTextChunkChars = 12000, contentStyle, }) {
66
- const hasContent = content.trim().length > 0;
67
- const enableSyntaxHighlight = renderMarkdown && !isStreaming && hasCodeBlocks(content);
68
- const mergedComponents = useMemo(() => ({
69
- ...defaultMarkdownComponents,
70
- ...markdown?.components,
71
- }), [markdown?.components]);
72
- const mergedRemarkPlugins = useMemo(() => [
73
- ...remarkPluginsDefault,
74
- ...(markdown?.remarkPlugins ?? []),
75
- ], [markdown?.remarkPlugins]);
76
- const mergedRehypePlugins = useMemo(() => [
77
- ...(enableSyntaxHighlight ? rehypePluginsDefault : rehypePluginsEmpty),
78
- ...(markdown?.rehypePlugins ?? []),
79
- ], [enableSyntaxHighlight, markdown?.rehypePlugins]);
80
- return (_jsxs(_Fragment, { children: [hasContent ? (renderMarkdown ? (_jsx(LongContentShell, { className: `prose prose-sm max-w-none dark:prose-invert break-words ${className}`.trim(), style: contentStyle, children: _jsx(ReactMarkdown, { remarkPlugins: mergedRemarkPlugins, rehypePlugins: mergedRehypePlugins, components: mergedComponents, children: content }) })) : (_jsx(PlainTextContent, { content: content, className: className, chunkSize: plainTextChunkChars, style: contentStyle }))) : null, isStreaming && hasContent && (_jsx("span", { className: "inline-block w-2 h-4 bg-primary animate-pulse ml-1" }))] }));
81
- });
82
- // Media attachment renderer - memoized to prevent unnecessary re-renders
83
- const MediaRenderer = memo(function MediaRenderer({ attachment }) {
84
- const [audioPlaybackSrc, setAudioPlaybackSrc] = useState(attachment.dataUrl);
85
- useEffect(() => {
86
- if (attachment.kind !== 'audio' || !attachment.dataUrl.startsWith('data:')) {
87
- setAudioPlaybackSrc(attachment.dataUrl);
88
- return;
89
- }
90
- const objectUrl = createObjectUrlFromDataUrl(attachment.dataUrl);
91
- if (!objectUrl) {
92
- setAudioPlaybackSrc(attachment.dataUrl);
93
- return;
94
- }
95
- setAudioPlaybackSrc(objectUrl);
96
- return () => {
97
- URL.revokeObjectURL(objectUrl);
98
- };
99
- }, [attachment.kind, attachment.dataUrl]);
100
- const formatDuration = (ms) => {
101
- if (!ms)
102
- return '';
103
- const seconds = Math.floor(ms / 1000);
104
- const minutes = Math.floor(seconds / 60);
105
- return `${minutes}:${(seconds % 60).toString().padStart(2, '0')}`;
106
- };
107
- switch (attachment.kind) {
108
- case 'image':
109
- return (_jsxs("div", { className: "relative rounded-lg overflow-hidden border bg-muted/20 max-w-md", children: [_jsx("img", { src: attachment.dataUrl, alt: attachment.fileName || 'Attachment', className: "w-full h-auto object-cover", loading: "lazy" }), attachment.fileName && (_jsx("div", { className: "absolute bottom-0 left-0 right-0 bg-black/50 text-white text-xs p-2", children: attachment.fileName }))] }));
110
- case 'audio':
111
- return (_jsx("div", { className: "flex w-full max-w-md py-0 min-w-64 items-center gap-3", children: _jsx("audio", { className: "w-full mt-2", preload: "metadata", controls: true, children: _jsx("source", { src: audioPlaybackSrc, type: attachment.mimeType }) }) }));
112
- case 'video':
113
- return (_jsxs("div", { className: "relative rounded-lg overflow-hidden border bg-muted/20 max-w-lg", children: [_jsx("video", { src: attachment.dataUrl, poster: attachment.poster, controls: true, className: "w-full h-auto" }), attachment.fileName && (_jsx("div", { className: "absolute bottom-0 left-0 right-0 bg-black/50 text-white text-xs p-2", children: attachment.fileName }))] }));
114
- default:
115
- return null;
116
- }
117
- });
118
- // Keep memo comparison lightweight. Message objects are treated immutably by the
119
- // chat state, so reference equality is enough to detect actual message changes.
120
- const arePropsEqual = (prevProps, nextProps) => {
121
- if (prevProps.message !== nextProps.message)
122
- return false;
123
- // Compare other props
124
- if (prevProps.isUser !== nextProps.isUser)
125
- return false;
126
- if (prevProps.userAvatar !== nextProps.userAvatar)
127
- return false;
128
- if (prevProps.userName !== nextProps.userName)
129
- return false;
130
- if (prevProps.assistantName !== nextProps.assistantName)
131
- return false;
132
- if (prevProps.showTimestamp !== nextProps.showTimestamp)
133
- return false;
134
- if (prevProps.showAvatar !== nextProps.showAvatar)
135
- return false;
136
- if (prevProps.enableCopy !== nextProps.enableCopy)
137
- return false;
138
- if (prevProps.enableEdit !== nextProps.enableEdit)
139
- return false;
140
- if (prevProps.enableRegenerate !== nextProps.enableRegenerate)
141
- return false;
142
- if (prevProps.activityDisplay !== nextProps.activityDisplay)
143
- return false;
144
- if (prevProps.compactMode !== nextProps.compactMode)
145
- return false;
146
- if (prevProps.className !== nextProps.className)
147
- return false;
148
- if (prevProps.labels !== nextProps.labels)
149
- return false;
150
- if (prevProps.showMoreLabel !== nextProps.showMoreLabel)
151
- return false;
152
- if (prevProps.showLessLabel !== nextProps.showLessLabel)
153
- return false;
154
- if (prevProps.collapseLongMessages !== nextProps.collapseLongMessages)
155
- return false;
156
- if (prevProps.collapseLongMessagesForUserOnly !== nextProps.collapseLongMessagesForUserOnly)
157
- return false;
158
- if (prevProps.longMessagePreviewChars !== nextProps.longMessagePreviewChars)
159
- return false;
160
- if (prevProps.longMessageChunkChars !== nextProps.longMessageChunkChars)
161
- return false;
162
- if (prevProps.renderUserMarkdown !== nextProps.renderUserMarkdown)
163
- return false;
164
- if (prevProps.markdown !== nextProps.markdown)
165
- return false;
166
- if (prevProps.isExpanded !== nextProps.isExpanded)
167
- return false;
168
- if (prevProps.onToggleExpanded !== nextProps.onToggleExpanded)
169
- return false;
170
- if (prevProps.isGrouped !== nextProps.isGrouped)
171
- return false;
172
- if (prevProps.assistantAvatar !== nextProps.assistantAvatar)
173
- return false;
174
- return true;
175
- };
176
- export const Message = memo(({ message, isUser, userAvatar, userName = 'Você', assistantAvatar, assistantName = 'Assistente', showTimestamp = false, showAvatar = true, enableCopy = true, enableEdit = true, enableRegenerate = true, activityDisplay = 'full', compactMode = false, onAction, className = '', labels, showMoreLabel = 'Show more', showLessLabel = 'Show less', collapseLongMessages = false, collapseLongMessagesForUserOnly = false, longMessagePreviewChars = 4000, longMessageChunkChars = 12000, renderUserMarkdown = true, markdown, isExpanded = false, onToggleExpanded, isGrouped = false, agentOptions = [], }) => {
177
- const [isEditing, setIsEditing] = useState(false);
178
- const [editContent, setEditContent] = useState(message.content);
179
- const [showActions, setShowActions] = useState(false);
180
- const [copied, setCopied] = useState(false);
181
- const messageIsUser = isUser ?? message.role === 'user';
182
- // Resolve multi-agent sender display
183
- const agentSender = !messageIsUser && message.senderAgentId
184
- ? agentOptions.find(a => a.id === message.senderAgentId ||
185
- a.name.toLowerCase() === (message.senderAgentId ?? '').toLowerCase() ||
186
- a.name.toLowerCase() === (message.senderName ?? '').toLowerCase())
187
- : undefined;
188
- const isMultiAgent = agentOptions.length > 1;
189
- const resolvedAssistantName = (isMultiAgent && (agentSender?.name || message.senderName)) || assistantName;
190
- const agentColor = agentSender ? (agentSender.color || getAgentColor(agentSender.id)) : undefined;
191
- const canEdit = enableEdit && messageIsUser;
192
- const canRegenerate = enableRegenerate && !messageIsUser;
193
- const normalizedPreviewChars = Math.max(longMessagePreviewChars, 1);
194
- const normalizedChunkChars = Math.max(longMessageChunkChars, 1);
195
- const previewOverride = typeof message.metadata?.previewContent === 'string'
196
- ? message.metadata.previewContent
197
- : undefined;
198
- const canCollapseMessage = collapseLongMessages
199
- && !message.isStreaming
200
- && message.content.length > normalizedPreviewChars
201
- && (!collapseLongMessagesForUserOnly || messageIsUser);
202
- const isCollapsed = canCollapseMessage && !isExpanded;
203
- const contentToRender = isCollapsed
204
- ? getCollapsedPreview(message.content, normalizedPreviewChars, previewOverride)
205
- : message.content;
206
- const shouldRenderMarkdown = !isCollapsed && (!messageIsUser || renderUserMarkdown);
207
- const shouldApplyLargeContentContainment = !isCollapsed && message.content.length > normalizedChunkChars;
208
- const contentStyle = shouldApplyLargeContentContainment
209
- ? {
210
- contentVisibility: 'auto',
211
- containIntrinsicSize: '1px 400px',
212
- }
213
- : undefined;
214
- const horizontalOffsetClass = showAvatar
215
- ? messageIsUser
216
- ? (compactMode ? 'mr-9' : 'mr-11')
217
- : (compactMode ? 'ml-9' : 'ml-11')
218
- : '';
219
- const handleCopy = async () => {
220
- try {
221
- await navigator.clipboard.writeText(message.content);
222
- setCopied(true);
223
- setTimeout(() => setCopied(false), 2000);
224
- onAction?.({ action: 'copy', messageId: message.id, content: message.content });
225
- }
226
- catch (error) {
227
- console.error('Failed to copy message:', error);
228
- }
229
- };
230
- const handleEdit = () => {
231
- if (isEditing) {
232
- if (editContent.trim() !== message.content) {
233
- onAction?.({ action: 'edit', messageId: message.id, content: editContent.trim() });
234
- }
235
- setIsEditing(false);
236
- }
237
- else {
238
- setEditContent(message.content);
239
- setIsEditing(true);
240
- }
241
- };
242
- const handleCancelEdit = () => {
243
- setEditContent(message.content);
244
- setIsEditing(false);
245
- };
246
- const handleRegenerate = () => {
247
- onAction?.({ action: 'regenerate', messageId: message.id });
248
- };
249
- const handleToggleExpanded = () => {
250
- onToggleExpanded?.(message.id);
251
- };
252
- const formatTime = (timestamp) => {
253
- return new Date(timestamp).toLocaleTimeString('pt-BR', {
254
- hour: '2-digit',
255
- minute: '2-digit',
256
- });
257
- };
258
- return (_jsxs("div", { className: `flex w-full flex-col ${className} max-w-[800px] mx-auto`, onMouseEnter: () => setShowActions(true), onMouseLeave: () => setShowActions(false), children: [!isGrouped && (_jsxs("div", { className: `flex gap-3 ${messageIsUser ? 'flex-row-reverse' : 'flex-row'} w-full mb-1`, children: [showAvatar && (_jsx("div", { className: `flex-shrink-0 ${compactMode ? 'mt-1' : 'mt-0'}`, children: _jsx(Avatar, { className: compactMode ? 'h-6 w-6' : 'h-8 w-8', children: messageIsUser ? (_jsxs(_Fragment, { children: [_jsx(AvatarImage, { src: userAvatar, alt: userName }), _jsx(AvatarFallback, { className: "bg-primary text-primary-foreground", children: userName.charAt(0).toUpperCase() })] })) : agentSender ? (_jsxs(_Fragment, { children: [agentSender.avatarUrl ? (_jsx(AvatarImage, { src: agentSender.avatarUrl, alt: agentSender.name })) : null, _jsx(AvatarFallback, { style: agentColor ? { backgroundColor: agentColor, color: 'white' } : undefined, className: agentColor ? 'text-[10px]' : 'bg-secondary text-secondary-foreground', children: getAgentInitials(agentSender.name) })] })) : (_jsx(_Fragment, { children: assistantAvatar || (_jsx(AvatarFallback, { className: "bg-secondary text-secondary-foreground", children: "AI" })) })) }) })), _jsxs("div", { className: `flex items-center gap-2 mb-1 ${messageIsUser ? 'flex-row-reverse' : 'flex-row'}`, children: [_jsx("span", { className: `font-medium ${compactMode ? 'text-sm' : 'text-base'}`, style: !messageIsUser && agentColor ? { color: agentColor } : undefined, children: messageIsUser ? userName : resolvedAssistantName }), showTimestamp && (_jsx("span", { className: "text-xs text-muted-foreground", children: formatTime(message.timestamp) })), message.isEdited && (_jsx(Badge, { variant: "outline", className: "text-xs", children: "editado" }))] })] })), _jsx("div", { className: `flex-1 min-w-0 ${messageIsUser ? 'text-right' : 'text-left'} ${horizontalOffsetClass}`, children: _jsxs("div", { className: `relative inline-flex flex-col overflow-hidden text-left ${messageIsUser
259
- ? 'rounded-lg p-3 bg-primary text-primary-foreground ml-auto max-w-[85%]'
260
- : 'max-w-full'}`, children: [isEditing ? (_jsxs("div", { className: "space-y-2", children: [_jsx(Textarea, { value: editContent, onChange: (e) => setEditContent(e.target.value), className: "min-h-[100px] resize-none", autoFocus: true }), _jsxs("div", { className: "flex gap-2 justify-end", children: [_jsxs(Button, { variant: "outline", size: "sm", onClick: handleCancelEdit, children: [_jsx(X, { className: "h-4 w-4 mr-1" }), "Cancelar"] }), _jsxs(Button, { size: "sm", onClick: handleEdit, children: [_jsx(Check, { className: "h-4 w-4 mr-1" }), "Salvar"] })] })] })) : (_jsxs(_Fragment, { children: [!messageIsUser && (_jsx(AssistantActivity, { activity: message.activity, displayMode: activityDisplay, labels: labels })), _jsx(StreamingText, { content: contentToRender, isStreaming: message.isStreaming, renderMarkdown: shouldRenderMarkdown, markdown: markdown, plainTextChunkChars: normalizedChunkChars, contentStyle: contentStyle }), canCollapseMessage && (_jsx("div", { className: "mt-3", children: _jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "h-auto px-0 text-xs font-medium text-current hover:bg-transparent hover:opacity-80", "aria-expanded": !isCollapsed, onClick: handleToggleExpanded, children: isCollapsed ? showMoreLabel : showLessLabel }) })), message.attachments && message.attachments.length > 0 && (_jsx("div", { className: "mt-3 space-y-2", children: message.attachments.map((attachment, index) => (_jsx(MediaRenderer, { attachment: attachment }, index))) }))] })), !isEditing && (showActions || copied) && (_jsxs("div", { className: `absolute -top-2 flex gap-1 ${messageIsUser ? '-left-2' : '-right-2'}`, children: [enableCopy && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "secondary", size: "icon", className: "h-6 w-6 opacity-0 group-hover:opacity-100 transition-opacity", onClick: handleCopy, children: copied ? (_jsx(Check, { className: "h-3 w-3 text-green-500" })) : (_jsx(Copy, { className: "h-3 w-3" })) }) }), _jsx(TooltipContent, { children: copied ? 'Copiado!' : 'Copiar' })] })), canEdit && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "secondary", size: "icon", className: "h-6 w-6 opacity-0 group-hover:opacity-100 transition-opacity", onClick: handleEdit, children: _jsx(Edit, { className: "h-3 w-3" }) }) }), _jsx(TooltipContent, { children: "Editar" })] })), canRegenerate && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "secondary", size: "icon", className: "h-6 w-6 opacity-0 group-hover:opacity-100 transition-opacity", onClick: handleRegenerate, children: _jsx(RotateCcw, { className: "h-3 w-3" }) }) }), _jsx(TooltipContent, { children: "Regenerar" })] }))] }))] }) })] }));
261
- }, arePropsEqual);
262
- //# sourceMappingURL=Message.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Message.js","sourceRoot":"","sources":["../../../src/components/chat/Message.tsx"],"names":[],"mappings":"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"}
@@ -1,52 +0,0 @@
1
- import React from 'react';
2
- import { ChatThread } from '../../types/chatTypes';
3
- import { Sidebar as ShadcnSidebar } from '../ui/sidebar';
4
- import { UserMenuUser, UserMenuCallbacks, UserMenuConfig } from './UserMenu';
5
- export interface SidebarConfig {
6
- labels?: {
7
- newChat?: string;
8
- search?: string;
9
- customComponentLabel?: string;
10
- showArchived?: string;
11
- hideArchived?: string;
12
- noThreadsFound?: string;
13
- noThreadsYet?: string;
14
- deleteConfirmTitle?: string;
15
- deleteConfirmDescription?: string;
16
- renameThread?: string;
17
- archiveThread?: string;
18
- unarchiveThread?: string;
19
- deleteThread?: string;
20
- today?: string;
21
- yesterday?: string;
22
- createNewThread?: string;
23
- threadNamePlaceholder?: string;
24
- cancel?: string;
25
- create?: string;
26
- daysAgo?: string;
27
- };
28
- branding?: {
29
- logo?: React.ReactNode;
30
- title?: React.ReactNode;
31
- subtitle?: React.ReactNode;
32
- };
33
- userMenu?: UserMenuConfig;
34
- }
35
- export interface SidebarProps extends React.ComponentProps<typeof ShadcnSidebar> {
36
- threads: ChatThread[];
37
- currentThreadId?: string | null;
38
- config: SidebarConfig;
39
- onCreateThread?: (title?: string) => void;
40
- onSelectThread?: (threadId: string) => void;
41
- onRenameThread?: (threadId: string, newTitle: string) => void;
42
- onDeleteThread?: (threadId: string) => void;
43
- onArchiveThread?: (threadId: string) => void;
44
- user?: UserMenuUser | null;
45
- userMenuCallbacks?: UserMenuCallbacks;
46
- currentTheme?: 'light' | 'dark' | 'system';
47
- showThemeOptions?: boolean;
48
- /** Additional items to render in the user menu */
49
- userMenuAdditionalItems?: React.ReactNode;
50
- }
51
- export declare const Sidebar: React.FC<SidebarProps>;
52
- //# sourceMappingURL=Sidebar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/chat/Sidebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EACL,OAAO,IAAI,aAAa,EAazB,MAAM,eAAe,CAAC;AAqCvB,OAAO,EAAY,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGvF,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;QAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QACvB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QACxB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;KAC5B,CAAC;IACF,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,aAAa,CAAC;IAC9E,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kDAAkD;IAClD,uBAAuB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3C;AAqED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAyT1C,CAAC"}
@@ -1,112 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useRef, useEffect } from 'react';
3
- import { Button } from '../ui/button';
4
- import { Input } from '../ui/input';
5
- import { Sidebar as ShadcnSidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuAction, SidebarMenuButton, SidebarMenuItem, SidebarRail, useSidebar, } from '../ui/sidebar';
6
- import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '../ui/dialog';
7
- import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '../ui/alert-dialog';
8
- import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '../ui/dropdown-menu';
9
- import { Plus, MoreHorizontal, Edit2, Trash2, Archive, Search, Filter, Bot, } from 'lucide-react';
10
- import { UserMenu } from './UserMenu';
11
- import { Avatar, AvatarFallback } from '../ui/avatar';
12
- // Create thread dialog
13
- const CreateThreadDialog = ({ config, onCreateThread, trigger }) => {
14
- const [title, setTitle] = useState('');
15
- const [isOpen, setIsOpen] = useState(false);
16
- const handleCreate = () => {
17
- onCreateThread(title.trim() || undefined);
18
- setTitle('');
19
- setIsOpen(false);
20
- };
21
- return (_jsxs(Dialog, { open: isOpen, onOpenChange: setIsOpen, children: [_jsx(DialogTrigger, { asChild: true, children: trigger || (_jsxs(Button, { className: "w-full justify-start", variant: "outline", children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), config.labels?.newChat || 'New Chat'] })) }), _jsxs(DialogContent, { children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: config.labels?.createNewThread || 'New Conversation' }), _jsx(DialogDescription, { children: "Give your new conversation a name or leave blank to auto-generate one." })] }), _jsx(Input, { value: title, onChange: (e) => setTitle(e.target.value), placeholder: config.labels?.threadNamePlaceholder || "Conversation name", onKeyDown: (e) => e.key === 'Enter' && handleCreate(), autoFocus: true }), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: "outline", onClick: () => setIsOpen(false), children: config.labels?.cancel || 'Cancel' }), _jsx(Button, { onClick: handleCreate, children: config.labels?.create || 'Create' })] })] })] }));
22
- };
23
- const ThreadInitialsIcon = ({ title }) => {
24
- const initials = title
25
- ?.split(' ')
26
- .map((n) => n[0])
27
- .slice(0, 2)
28
- .join('')
29
- .toUpperCase() || '?';
30
- return (_jsx("div", { className: "flex shrink-0 items-center justify-center rounded bg-muted text-[10px] font-medium", children: initials }));
31
- };
32
- export const Sidebar = ({ threads, currentThreadId, config, onCreateThread, onSelectThread, onRenameThread, onDeleteThread, onArchiveThread,
33
- // User menu props
34
- user, userMenuCallbacks, currentTheme, showThemeOptions = true, userMenuAdditionalItems, ...props }) => {
35
- const [searchQuery, setSearchQuery] = useState('');
36
- const [showArchived, setShowArchived] = useState(false);
37
- const [deleteThreadId, setDeleteThreadId] = useState(null);
38
- const [editingThreadId, setEditingThreadId] = useState(null);
39
- const [editTitle, setEditTitle] = useState('');
40
- const inputRef = useRef(null);
41
- // Use the sidebar context to control expansion
42
- const { setOpen } = useSidebar();
43
- useEffect(() => {
44
- if (editingThreadId && inputRef.current) {
45
- inputRef.current.focus();
46
- inputRef.current.select();
47
- }
48
- }, [editingThreadId]);
49
- // Filter threads based on search and archive filter
50
- const filteredThreads = threads.filter(thread => {
51
- const title = (thread.title ?? '').toString();
52
- const matchesSearch = title.toLowerCase().includes(searchQuery.toLowerCase());
53
- const matchesArchiveFilter = showArchived || !thread.isArchived;
54
- return matchesSearch && matchesArchiveFilter;
55
- });
56
- // Group threads by date
57
- const groupedThreads = filteredThreads.reduce((groups, thread) => {
58
- const date = new Date(thread.updatedAt);
59
- const today = new Date();
60
- const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000);
61
- let groupKey;
62
- if (date.toDateString() === today.toDateString()) {
63
- groupKey = config.labels?.today || 'Today';
64
- }
65
- else if (date.toDateString() === yesterday.toDateString()) {
66
- groupKey = config.labels?.yesterday || 'Yesterday';
67
- }
68
- else {
69
- groupKey = date.toLocaleDateString('en-US', {
70
- weekday: 'long',
71
- day: '2-digit',
72
- month: 'long',
73
- });
74
- }
75
- if (!groups[groupKey]) {
76
- groups[groupKey] = [];
77
- }
78
- groups[groupKey].push(thread);
79
- return groups;
80
- }, {});
81
- const handleDeleteThread = (threadId) => {
82
- onDeleteThread?.(threadId);
83
- setDeleteThreadId(null);
84
- };
85
- const startEditing = (thread) => {
86
- setEditingThreadId(thread.id);
87
- setEditTitle(thread.title || '');
88
- };
89
- const saveEdit = () => {
90
- if (editingThreadId && editTitle.trim()) {
91
- onRenameThread?.(editingThreadId, editTitle.trim());
92
- }
93
- setEditingThreadId(null);
94
- };
95
- const cancelEdit = () => {
96
- setEditingThreadId(null);
97
- };
98
- return (_jsxs(ShadcnSidebar, { collapsible: "icon", ...props, children: [_jsxs(SidebarHeader, { children: [_jsxs("div", { className: "flex items-center gap-3 px-2 py-3", children: [_jsx("div", { className: "flex items-center justify-center shrink-0", children: config.branding?.logo || (_jsx(Avatar, { className: "h-8 w-8", children: _jsx(AvatarFallback, { className: "bg-primary text-primary-foreground", children: _jsx(Bot, { className: "h-4 w-4" }) }) })) }), _jsxs("div", { className: "flex flex-col min-w-0 group-data-[collapsible=icon]:hidden", children: [_jsx("span", { className: "text-sm font-semibold truncate", children: config.branding?.title || 'Chat' }), config.branding?.subtitle && (_jsx("span", { className: "text-xs text-muted-foreground truncate", children: config.branding.subtitle }))] })] }), onCreateThread && (_jsx(CreateThreadDialog, { config: config, onCreateThread: onCreateThread, trigger: _jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsxs(SidebarMenuButton, { size: "lg", className: "w-full justify-start gap-2 border border-sidebar-border shadow-sm hover:bg-sidebar-accent hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:justify-center", tooltip: config.labels?.newChat || 'New Chat', children: [_jsx(Plus, { className: "size-4" }), _jsx("span", { className: "group-data-[collapsible=icon]:hidden", children: config.labels?.newChat || 'New Chat' })] }) }) }) })), _jsxs("div", { className: "px-2 py-1 mt-4", children: [_jsxs("div", { className: "relative group-data-[collapsible=icon]:hidden", children: [_jsx(Search, { className: "pointer-events-none absolute left-2 top-1/2 size-4 -translate-y-1/2 select-none opacity-50" }), _jsx(Input, { className: "pl-8 h-8 bg-sidebar-accent/50 border-sidebar-border focus-visible:ring-1 focus-visible:ring-sidebar-ring", placeholder: config.labels?.search || "Search...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value) })] }), _jsx("div", { className: "hidden group-data-[collapsible=icon]:flex justify-center", children: _jsx(Button, { variant: "ghost", size: "icon", className: "h-7 w-7", onClick: () => setOpen(true), title: config.labels?.search || "Search", children: _jsx(Search, { className: "h-4 w-4" }) }) })] })] }), _jsxs(SidebarContent, { children: [threads.some(t => t.isArchived) && (_jsx("div", { className: "px-4 py-2 mt-2 group-data-[collapsible=icon]:hidden", children: _jsxs(Button, { variant: "ghost", size: "sm", onClick: () => setShowArchived(!showArchived), className: "h-6 text-xs w-full justify-start text-muted-foreground", children: [_jsx(Filter, { className: "mr-2 h-3 w-3" }), showArchived ?
99
- (config.labels?.hideArchived || 'Hide Archived') :
100
- (config.labels?.showArchived || 'Show Archived')] }) })), Object.keys(groupedThreads).length === 0 ? (_jsxs("div", { className: "px-4 py-8 text-center text-muted-foreground group-data-[collapsible=icon]:hidden", children: [_jsx("div", { className: "mx-auto h-8 w-8 mb-2 flex items-center justify-center rounded-full bg-muted/50", children: _jsx(Plus, { className: "h-4 w-4 opacity-50" }) }), _jsx("p", { className: "text-xs", children: searchQuery ?
101
- (config.labels?.noThreadsFound || 'No conversations found') :
102
- (config.labels?.noThreadsYet || 'No conversations yet') })] })) : (Object.entries(groupedThreads).map(([group, groupThreads]) => (_jsxs(SidebarGroup, { className: "mt-2", children: [_jsx(SidebarGroupLabel, { className: "group-data-[collapsible=icon]:hidden", children: group }), _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: groupThreads.map((thread) => (_jsxs(SidebarMenuItem, { children: [editingThreadId === thread.id ? (_jsx("div", { className: "flex items-center gap-1 px-2 py-1", children: _jsx(Input, { ref: inputRef, value: editTitle, onChange: (e) => setEditTitle(e.target.value), onKeyDown: (e) => {
103
- if (e.key === 'Enter')
104
- saveEdit();
105
- if (e.key === 'Escape')
106
- cancelEdit();
107
- }, onBlur: saveEdit, className: "h-7 text-sm" }) })) : (_jsxs(SidebarMenuButton, { isActive: currentThreadId === thread.id, onClick: () => onSelectThread?.(thread.id), tooltip: thread.title, children: [_jsx(ThreadInitialsIcon, { title: thread.title || '?' }), _jsx("div", { className: "flex flex-col items-start gap-0.5 flex-1 min-w-0 group-data-[collapsible=icon]:hidden", children: _jsx("span", { className: "truncate w-full", children: thread.title || 'New Chat' }) }), thread.isArchived && _jsx(Archive, { className: "ml-auto h-3 w-3 opacity-50 group-data-[collapsible=icon]:hidden" })] })), !editingThreadId && (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(SidebarMenuAction, { showOnHover: true, children: [_jsx(MoreHorizontal, {}), _jsx("span", { className: "sr-only", children: "More" })] }) }), _jsxs(DropdownMenuContent, { className: "w-48", side: "right", align: "start", children: [_jsxs(DropdownMenuItem, { onClick: () => startEditing(thread), children: [_jsx(Edit2, { className: "mr-2 h-4 w-4" }), _jsx("span", { children: config.labels?.renameThread || 'Rename' })] }), _jsxs(DropdownMenuItem, { onClick: () => onArchiveThread?.(thread.id), children: [_jsx(Archive, { className: "mr-2 h-4 w-4" }), _jsx("span", { children: thread.isArchived ?
108
- (config.labels?.unarchiveThread || 'Unarchive') :
109
- (config.labels?.archiveThread || 'Archive') })] }), _jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuItem, { onClick: () => setDeleteThreadId(thread.id), className: "text-destructive focus:text-destructive", children: [_jsx(Trash2, { className: "mr-2 h-4 w-4" }), _jsx("span", { children: config.labels?.deleteThread || 'Delete' })] })] })] }))] }, thread.id))) }) })] }, group))))] }), _jsx(SidebarFooter, { children: _jsx(UserMenu, { user: user, config: config.userMenu, callbacks: userMenuCallbacks, currentTheme: currentTheme, showThemeOptions: showThemeOptions, additionalItems: userMenuAdditionalItems }) }), _jsx(SidebarRail, {}), deleteThreadId && (_jsx(AlertDialog, { open: !!deleteThreadId, onOpenChange: () => setDeleteThreadId(null), children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: config.labels?.deleteConfirmTitle || 'Delete Conversation' }), _jsx(AlertDialogDescription, { children: config.labels?.deleteConfirmDescription ||
110
- 'Are you sure you want to delete this conversation? This action cannot be undone.' })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: config.labels?.cancel || 'Cancel' }), _jsx(AlertDialogAction, { onClick: () => deleteThreadId && handleDeleteThread(deleteThreadId), className: "bg-destructive text-destructive-foreground hover:bg-destructive/90", children: config.labels?.deleteThread || 'Delete' })] })] }) }))] }));
111
- };
112
- //# sourceMappingURL=Sidebar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../../src/components/chat/Sidebar.tsx"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import React from 'react';
2
- import { ChatThread, ChatConfig } from '../../types/chatTypes';
3
- interface ThreadManagerProps {
4
- threads: ChatThread[];
5
- currentThreadId?: string | null;
6
- config?: ChatConfig;
7
- onCreateThread?: (title?: string) => void;
8
- onSelectThread?: (threadId: string) => void;
9
- onRenameThread?: (threadId: string, newTitle: string) => void;
10
- onDeleteThread?: (threadId: string) => void;
11
- onArchiveThread?: (threadId: string) => void;
12
- isOpen?: boolean;
13
- onClose?: () => void;
14
- className?: string;
15
- }
16
- export declare const ThreadManager: React.FC<ThreadManagerProps>;
17
- export {};
18
- //# sourceMappingURL=ThreadManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ThreadManager.d.ts","sourceRoot":"","sources":["../../../src/components/chat/ThreadManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAkD/D,UAAU,kBAAkB;IAC1B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmLD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAkLtD,CAAC"}