import rangeParser from "parse-numeric-range"; import { PrismLight as SyntaxHighlighter } from "react-syntax-highlighter"; import tsx from "react-syntax-highlighter/dist/cjs/languages/prism/tsx"; import typescript from "react-syntax-highlighter/dist/cjs/languages/prism/typescript"; import scss from "react-syntax-highlighter/dist/cjs/languages/prism/scss"; import bash from "react-syntax-highlighter/dist/cjs/languages/prism/bash"; import markdown from "react-syntax-highlighter/dist/cjs/languages/prism/markdown"; import json from "react-syntax-highlighter/dist/cjs/languages/prism/json"; import { coldarkDark as defaulttheme } from "react-syntax-highlighter/dist/cjs/styles/prism"; import { BiCopy } from "react-icons/bi"; import { Components } from "react-markdown"; import { generateSlug } from "../utils/general"; import ReactMarkdown from "react-markdown"; import remarkGfm from "remark-gfm"; import remarkTypograf from "@mavrin/remark-typograf"; import smartypants from "remark-smartypants"; import rehypeRaw from "rehype-raw"; import emoji from "remark-emoji"; import oembed from "@agentofuser/remark-oembed"; import remarkDirective from 'remark-directive' import remarkDirectiveRehype from 'remark-directive-rehype' import { YouTubeVideo } from "./Youtube"; import { ImageSlide } from "./ImageSlide"; //import rehypeSanitize from "rehype-sanitize"; SyntaxHighlighter.registerLanguage("tsx", tsx); SyntaxHighlighter.registerLanguage("typescript", typescript); SyntaxHighlighter.registerLanguage("scss", scss); SyntaxHighlighter.registerLanguage("bash", bash); SyntaxHighlighter.registerLanguage("markdown", markdown); SyntaxHighlighter.registerLanguage("json", json); export const StyledMarkdown = ({ html }: { html: string }) => { const MarkdownComponents: Components = { h1: (props: any) => { const arr = props.children; let heading = ""; for (let i = 0; i < arr.length; i++) { if (arr[i]?.type !== undefined) { for (let j = 0; j < arr[i].props.children.length; j++) { heading += arr[i]?.props?.children[0]; } } else heading += arr[i]; } const slug = generateSlug(heading); return (
);
},
//custom directives
//@ts-ignore
'yt': YouTubeVideo,
'img-slide': ImageSlide,
};
return (