33import { useExtractTOCItems } from "../../useTOCItems" ;
44import { TableOfContents } from "./tableOfContents" ;
55import { Button } from "@/components/ui/button" ;
6- import { Copy , TableOfContentsIcon , ThumbsDown , ThumbsUp } from "lucide-react" ;
6+ import { TableOfContentsIcon , ThumbsDown , ThumbsUp } from "lucide-react" ;
77import { Separator } from "@/components/ui/separator" ;
88import { MarkdownRenderer } from "./markdownRenderer" ;
9- import { forwardRef , useImperativeHandle , useRef , useState } from "react" ;
9+ import { forwardRef , useCallback , useImperativeHandle , useRef , useState } from "react" ;
1010import { Toggle } from "@/components/ui/toggle" ;
1111import { Tooltip , TooltipContent , TooltipTrigger } from "@/components/ui/tooltip" ;
12+ import { CopyIconButton } from "@/app/[domain]/components/copyIconButton" ;
13+ import { useToast } from "@/components/hooks/use-toast" ;
14+ import { convertLLMOutputToPortableMarkdown } from "../../utils" ;
1215
1316interface AnswerCardProps {
1417 answerText : string ;
@@ -21,12 +24,22 @@ export const AnswerCard = forwardRef<HTMLDivElement, AnswerCardProps>(({
2124 const markdownRendererRef = useRef < HTMLDivElement > ( null ) ;
2225 const { tocItems, activeId } = useExtractTOCItems ( { target : markdownRendererRef . current } ) ;
2326 const [ isTOCButtonToggled , setIsTOCButtonToggled ] = useState ( false ) ;
27+ const { toast } = useToast ( ) ;
2428
2529 useImperativeHandle (
2630 forwardedRef ,
2731 ( ) => markdownRendererRef . current as HTMLDivElement
2832 ) ;
2933
34+ const onCopyAnswer = useCallback ( ( ) => {
35+ const markdownText = convertLLMOutputToPortableMarkdown ( answerText ) ;
36+ navigator . clipboard . writeText ( markdownText ) ;
37+ toast ( {
38+ description : "✅ Copied to clipboard" ,
39+ } ) ;
40+ return true ;
41+ } , [ answerText , toast ] ) ;
42+
3043 return (
3144 < div className = "flex flex-row w-full relative scroll-mt-16" >
3245 { ( isTOCButtonToggled && tocItems . length > 0 ) && (
@@ -43,13 +56,10 @@ export const AnswerCard = forwardRef<HTMLDivElement, AnswerCardProps>(({
4356 < div className = "flex items-center gap-2" >
4457 < Tooltip >
4558 < TooltipTrigger asChild >
46- < Button
47- variant = "ghost"
48- size = "sm"
59+ < CopyIconButton
60+ onCopy = { onCopyAnswer }
4961 className = "h-6 w-6 text-muted-foreground"
50- >
51- < Copy className = "h-3 w-3" />
52- </ Button >
62+ />
5363 </ TooltipTrigger >
5464 < TooltipContent
5565 side = "bottom"
0 commit comments