diff --git a/packages/ui/src/components/chat/MarkdownRendererImpl.tsx b/packages/ui/src/components/chat/MarkdownRendererImpl.tsx index 31e41034..efd7d0b1 100644 --- a/packages/ui/src/components/chat/MarkdownRendererImpl.tsx +++ b/packages/ui/src/components/chat/MarkdownRendererImpl.tsx @@ -201,6 +201,7 @@ const downloadFile = (filename: string, content: string, mimeType: string) => { URL.revokeObjectURL(url); }; + // Table copy button with dropdown const TableCopyButton: React.FC<{ tableRef: React.RefObject }> = ({ tableRef }) => { const { t } = useI18n(); @@ -218,12 +219,20 @@ const TableCopyButton: React.FC<{ tableRef: React.RefObject document.removeEventListener('mousedown', handleClickOutside); }, []); - const handleCopy = async (format: 'csv' | 'tsv') => { + const handleCopy = async (format: 'csv' | 'tsv' | 'markdown') => { const tableEl = tableRef.current?.querySelector('table'); if (!tableEl) return; const data = extractTableData(tableEl); - const content = format === 'csv' ? tableToCSV(data) : tableToTSV(data); + let content: string; + if (format === 'csv') { + content = tableToCSV(data); + } else if (format === 'tsv') { + content = tableToTSV(data); + } else { + content = tableToMarkdown(data); + } + try { await navigator.clipboard.write([ @@ -252,24 +261,34 @@ const TableCopyButton: React.FC<{ tableRef: React.RefObject setShowMenu(!showMenu)} className="p-1 rounded hover:bg-interactive-hover/60 text-muted-foreground hover:text-foreground transition-colors" - title={t('markdownRenderer.table.actions.copyTitle')} + title={t("markdownRenderer.table.actions.copyTitle")} > - {copied ? : } + {copied ? ( + + ) : ( + + )} {showMenu && (
+
)}