2024-11-14 12:16:05 -05:00
|
|
|
import Link from 'next/link';
|
2025-02-03 20:33:15 +05:30
|
|
|
import React, { memo } from 'react';
|
2025-08-18 22:48:13 -07:00
|
|
|
import { Streamdown, type StreamdownProps } from 'streamdown';
|
|
|
|
|
|
|
|
|
|
type Components = StreamdownProps['components'];
|
2024-10-11 18:00:22 +05:30
|
|
|
|
2024-12-19 17:05:04 +05:30
|
|
|
const components: Partial<Components> = {
|
|
|
|
|
a: ({ node, children, ...props }) => {
|
|
|
|
|
return (
|
|
|
|
|
// @ts-expect-error
|
|
|
|
|
<Link
|
|
|
|
|
className="text-blue-500 hover:underline"
|
|
|
|
|
target="_blank"
|
|
|
|
|
rel="noreferrer"
|
|
|
|
|
{...props}
|
|
|
|
|
>
|
|
|
|
|
{children}
|
|
|
|
|
</Link>
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
};
|
2024-10-11 18:00:22 +05:30
|
|
|
|
2025-08-18 22:48:13 -07:00
|
|
|
const NonMemoizedMarkdown = ({ children }: { children: string }) => (
|
|
|
|
|
<Streamdown components={components}>{children}</Streamdown>
|
|
|
|
|
);
|
2024-10-11 18:00:22 +05:30
|
|
|
|
|
|
|
|
export const Markdown = memo(
|
|
|
|
|
NonMemoizedMarkdown,
|
2024-11-15 13:00:15 -05:00
|
|
|
(prevProps, nextProps) => prevProps.children === nextProps.children,
|
2024-10-11 18:00:22 +05:30
|
|
|
);
|