11import { ReactNode } from "react" ;
2- import { GoSquirrel } from "react-icons/go " ;
2+ import { IoCopyOutline } from "react-icons/io5 " ;
33import Markdown from "react-markdown" ;
44import remarkGfm from 'remark-gfm'
55import rehypeExternalLinks from 'rehype-external-links'
@@ -43,44 +43,50 @@ const Message = ({ message, noAvatar, restart }: { message: Message ,noAvatar?:
4343 return (
4444 < div className = "flex flex-col items-start mb-10" >
4545 < div className = "flex gap-2 w-full" >
46- { ! noAvatar &&
47- < Tooltip
46+ { ! noAvatar && (
47+ < Tooltip
4848 content = { `Sent from ${ message . name || "System" } ` }
4949 placement = "bottom"
5050 closeDelay = { 0.5 }
5151 >
5252 < Avatar
5353 showFallback
54- name = { abbreviate ( message . name || "System" ) }
54+ name = { abbreviate ( message . name || "System" ) }
5555 className = "w-[40px] cursor-default"
56- classNames = { { base : `bg-white p-6 text-sm border dark:border-none dark:bg-zinc-900 ${ message . error && "border-danger dark:border-danger" } ` } }
56+ classNames = { {
57+ base : `bg-white p-6 text-sm border dark:border-none dark:bg-zinc-900 ${
58+ message . error && "border-danger dark:border-danger"
59+ } `,
60+ } }
5761 />
5862 </ Tooltip >
59- }
60- < div
61- className = { `w-[93%] rounded-2xl text-black dark:text-white pt-1 px-4 border dark:border-none dark:bg-zinc-900 ${ message . error ? "border-danger dark:border-danger" : "" } ` }
63+ ) }
64+ < div
65+ className = { `w-[93%] rounded-2xl text-black dark:text-white pt-1 px-4 border dark:border-none dark:bg-zinc-900 ${
66+ message . error ? "border-danger dark:border-danger" : ""
67+ } `}
6268 >
63- { message . message &&
64- < Markdown
65- className = { `!text-wrap prose overflow-x-auto dark:prose-invert p-4 !w-full !max-w-full prose-thead:text-left prose-img:rounded-xl prose-img:shadow-lg` }
69+ { message . message && (
70+ < Markdown
71+ className = { `!text-wrap prose overflow-x-auto dark:prose-invert p-4 !w-full !max-w-full prose-thead:text-left prose-img:rounded-xl prose-img:shadow-lg` }
6672 remarkPlugins = { [ remarkGfm ] }
67- rehypePlugins = { [ [ rehypeExternalLinks , { target : ' _blank' } ] ] }
73+ rehypePlugins = { [ [ rehypeExternalLinks , { target : " _blank" } ] ] }
6874 >
6975 { message . message }
7076 </ Markdown >
71- }
72- { message . component }
77+ ) }
78+ { message . component }
7379 { message . error && (
7480 < >
7581 < p className = "text-danger text-base pl-4 pb-6" > { message . error } </ p >
76- < Tooltip
82+ < Tooltip
7783 content = "If you are no longer able to chat, click here to restart the script."
7884 closeDelay = { 0.5 }
7985 placement = "bottom"
8086 color = "danger"
8187 >
8288 < Button
83- startContent = { < GoIssueReopened className = "text-lg" /> }
89+ startContent = { < GoIssueReopened className = "text-lg" /> }
8490 color = "danger"
8591 className = "ml-4 mb-6"
8692 onPress = { restart }
@@ -92,11 +98,22 @@ const Message = ({ message, noAvatar, restart }: { message: Message ,noAvatar?:
9298 ) }
9399 </ div >
94100 </ div >
95- { message . calls &&
96- < div className = "flex w-full justify-end mt-2" >
97- < Calls calls = { message . calls } />
98- </ div >
99- }
101+ < div className = "flex w-full justify-end mt-2 space-x-2" >
102+ < Tooltip content = "Copy Message" placement = "bottom" closeDelay = { 0.5 } >
103+ < Button
104+ isIconOnly
105+ radius = "full"
106+ startContent = { < IoCopyOutline className = "text-lg" /> }
107+ className = "ml-2"
108+ onPress = { ( ) => {
109+ navigator . clipboard . writeText ( message . message || '' ) ;
110+ } }
111+ />
112+ </ Tooltip >
113+ { message . calls && (
114+ < Calls calls = { message . calls } />
115+ ) }
116+ </ div >
100117 </ div >
101118 ) ;
102119 case MessageType . Alert :
0 commit comments