feat: ajoute MarkdownRenderer avec couleurs personnalisées
This commit is contained in:
@@ -0,0 +1,61 @@
|
|||||||
|
'use client'
|
||||||
|
|
||||||
|
import PropTypes from 'prop-types'
|
||||||
|
import dynamic from 'next/dynamic'
|
||||||
|
import Typography from '@mui/material/Typography'
|
||||||
|
import {useTheme} from '@mui/material/styles'
|
||||||
|
|
||||||
|
const MarkdownPreview = dynamic(
|
||||||
|
() => import('@uiw/react-markdown-preview').then(mod => mod.default),
|
||||||
|
{ssr: false}
|
||||||
|
)
|
||||||
|
|
||||||
|
export default function MarkdownRenderer({content, color, fallbackComponent: FallbackComponent = Typography}) {
|
||||||
|
const theme = useTheme()
|
||||||
|
|
||||||
|
// Check if content contains markdown syntax
|
||||||
|
const hasMarkdown = content && (
|
||||||
|
content.includes('**')
|
||||||
|
|| content.includes('*')
|
||||||
|
|| content.includes('#')
|
||||||
|
|| content.includes('[')
|
||||||
|
|| content.includes('`')
|
||||||
|
|| content.includes('> ')
|
||||||
|
|| content.includes('- ')
|
||||||
|
|| content.includes('1. ')
|
||||||
|
)
|
||||||
|
|
||||||
|
if (!hasMarkdown) {
|
||||||
|
// Fallback to original rendering for plain text
|
||||||
|
const formattedContent = content.replaceAll('\n', '<br />')
|
||||||
|
return <FallbackComponent dangerouslySetInnerHTML={{__html: formattedContent}} />
|
||||||
|
}
|
||||||
|
|
||||||
|
const textColor = color || theme.palette.text.primary
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
backgroundColor: 'transparent',
|
||||||
|
color: textColor
|
||||||
|
}}
|
||||||
|
data-color-mode={theme.palette.mode}
|
||||||
|
>
|
||||||
|
<MarkdownPreview
|
||||||
|
source={content}
|
||||||
|
style={{
|
||||||
|
backgroundColor: 'transparent',
|
||||||
|
color: textColor,
|
||||||
|
fontSize: 'inherit',
|
||||||
|
fontFamily: 'inherit'
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
MarkdownRenderer.propTypes = {
|
||||||
|
content: PropTypes.string.isRequired,
|
||||||
|
color: PropTypes.string,
|
||||||
|
fallbackComponent: PropTypes.elementType
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user