| 
									
										
										
										
											2025-05-30 11:31:50 +08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @fileoverview Link component for rendering <a> tags in Markdown. | 
					
						
							|  |  |  |  * Extracted from the main markdown renderer for modularity. | 
					
						
							|  |  |  |  * Handles special rendering for "abbr:" type links for interactive chat actions. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | import React from 'react' | 
					
						
							|  |  |  | import { useChatContext } from '@/app/components/base/chat/chat/context' | 
					
						
							| 
									
										
										
										
											2025-06-04 15:56:29 +08:00
										 |  |  | import { isValidUrl } from './utils' | 
					
						
							| 
									
										
										
										
											2025-05-30 11:31:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | const Link = ({ node, children, ...props }: any) => { | 
					
						
							|  |  |  |   const { onSend } = useChatContext() | 
					
						
							|  |  |  |   if (node.properties?.href && node.properties.href?.toString().startsWith('abbr')) { | 
					
						
							|  |  |  |     const hidden_text = decodeURIComponent(node.properties.href.toString().split('abbr:')[1]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return <abbr className="cursor-pointer underline !decoration-primary-700 decoration-dashed" onClick={() => onSend?.(hidden_text)} title={node.children[0]?.value || ''}>{node.children[0]?.value || ''}</abbr> | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   else { | 
					
						
							| 
									
										
										
										
											2025-06-04 15:56:29 +08:00
										 |  |  |     const href = props.href || node.properties?.href | 
					
						
							| 
									
										
										
										
											2025-06-20 09:23:30 +08:00
										 |  |  |     if(!href || !isValidUrl(href)) | 
					
						
							| 
									
										
										
										
											2025-06-04 15:56:29 +08:00
										 |  |  |       return <span>{children}</span> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return <a href={href} target="_blank" className="cursor-pointer underline !decoration-primary-700 decoration-dashed">{children || 'Download'}</a> | 
					
						
							| 
									
										
										
										
											2025-05-30 11:31:50 +08:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default Link |