@@ -15,6 +15,7 @@ import {
1515 Collapse ,
1616 Container ,
1717 Grid ,
18+ IconButton ,
1819 Paper ,
1920 Stack ,
2021 Typography ,
@@ -49,6 +50,29 @@ import "./LayoutRenderer.css";
4950
5051const liquidEngine = new Liquid ( ) ;
5152
53+ const AppMessageToolbar = ( { message } ) => {
54+ return (
55+ < Box
56+ sx = { {
57+ display : "flex" ,
58+ justifyContent : "space-between" ,
59+ alignItems : "center" ,
60+ padding : "3px 0" ,
61+ position : "absolute" ,
62+ bottom : 0 ,
63+ right : 0 ,
64+ } }
65+ >
66+ < IconButton
67+ onClick = { ( ) => navigator . clipboard . writeText ( message . content ) }
68+ sx = { { color : "#999" } }
69+ >
70+ < ContentCopyOutlined fontSize = "small" />
71+ </ IconButton >
72+ </ Box >
73+ ) ;
74+ } ;
75+
5276const PromptlyAppInputForm = memo (
5377 ( { workflow, runApp, submitButtonOptions, sx, clearOnSubmit = false } ) => {
5478 const appRunData = useRecoilValue ( appRunDataState ) ;
@@ -221,6 +245,8 @@ const UserMessage = memo(
221245const AppMessage = memo (
222246 ( props ) => {
223247 const { message, workflow, assistantImage } = props ;
248+ const [ showToolbar , setShowToolbar ] = useState ( false ) ;
249+
224250 return (
225251 < Box
226252 sx = { {
@@ -235,7 +261,13 @@ const AppMessage = memo(
235261 className = {
236262 workflow ? "layout-workflow-output" : "layout-chat_message_from_app"
237263 }
264+ sx = { {
265+ position : "relative" ,
266+ } }
267+ onMouseEnter = { ( ) => setShowToolbar ( true ) }
268+ onMouseLeave = { ( ) => setShowToolbar ( false ) }
238269 >
270+ { showToolbar && < AppMessageToolbar message = { message } /> }
239271 < LayoutRenderer > { message . content || "" } </ LayoutRenderer >
240272 </ Box >
241273 </ Box >
@@ -249,6 +281,8 @@ const AppMessage = memo(
249281const AgentMessage = memo (
250282 ( props ) => {
251283 const { message, workflow, assistantImage } = props ;
284+ const [ showToolbar , setShowToolbar ] = useState ( false ) ;
285+
252286 return (
253287 < Box
254288 sx = { {
@@ -264,12 +298,16 @@ const AgentMessage = memo(
264298 workflow ? "layout-workflow-output" : "layout-chat_message_from_app"
265299 }
266300 sx = { {
301+ position : "relative" ,
267302 color :
268303 message ?. subType === "agent-step-error"
269304 ? "red !important"
270305 : "inherit" ,
271306 } }
307+ onMouseEnter = { ( ) => setShowToolbar ( true ) }
308+ onMouseLeave = { ( ) => setShowToolbar ( false ) }
272309 >
310+ { showToolbar && < AppMessageToolbar message = { message } /> }
273311 < LayoutRenderer > { message . content || "" } </ LayoutRenderer >
274312 </ Box >
275313 </ Box >
0 commit comments