{"version":3,"file":"useMarkdownComponents.mjs","names":[],"sources":["../../../src/hooks/useMarkdown/useMarkdownComponents.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useMemo } from 'react';\nimport type { Components } from 'react-markdown';\n\nimport Hotkey from '@/Hotkey';\nimport { CodeBlock } from '@/Markdown/components/CodeBlock';\nimport { useMarkdownContext } from '@/Markdown/components/MarkdownProvider';\nimport Image from '@/mdx/mdxComponents/Image';\nimport Link from '@/mdx/mdxComponents/Link';\nimport Section from '@/mdx/mdxComponents/Section';\nimport Video from '@/mdx/mdxComponents/Video';\n\nexport const useMarkdownComponents = (): Components => {\n  const {\n    components,\n    animated,\n    citations,\n    componentProps,\n    enableMermaid,\n    fullFeaturedCodeBlock,\n    showFootnotes,\n  } = useMarkdownContext();\n\n  const memoA = useCallback(\n    ({ node, ...props }: any) => <Link citations={citations} {...props} {...componentProps?.a} />,\n    [citations, componentProps?.a],\n  );\n\n  const memoImg = useCallback(\n    ({ node, ...props }: any) => <Image {...props} {...componentProps?.img} />,\n    [componentProps?.img],\n  );\n\n  const memoVideo = useCallback(\n    ({ node, ...props }: any) => <Video {...props} {...componentProps?.video} />,\n    [componentProps?.video],\n  );\n\n  const memoSection = useCallback(\n    ({ node, ...props }: any) => <Section showFootnotes={showFootnotes} {...props} />,\n    [showFootnotes],\n  );\n\n  const memoKbd = useCallback(\n    ({ children }: any) => <Hotkey keys={children} style={{ display: 'inline-flex' }} />,\n    [],\n  );\n\n  const memoBr = useCallback(() => <br />, []);\n\n  const memeP = useCallback(({ style, children, className }: any) => {\n    const skipWrapperTags = ['img', 'video'];\n    if (typeof children === 'object' && skipWrapperTags.includes(children?.props?.node?.tagName)) {\n      return children;\n    }\n    return (\n      <p className={className} style={style}>\n        {children}\n      </p>\n    );\n  }, []);\n\n  // Stable references for theme objects to prevent unnecessary re-renders\n  const highlightTheme = useMemo(\n    () => componentProps?.highlight?.theme,\n    [JSON.stringify(componentProps?.highlight?.theme)],\n  );\n\n  const mermaidTheme = useMemo(\n    () => componentProps?.mermaid?.theme,\n    [JSON.stringify(componentProps?.mermaid?.theme)],\n  );\n\n  // Create stable component props reference\n  const stableComponentProps = useMemo(() => {\n    if (!componentProps) return;\n\n    return {\n      highlight: componentProps.highlight\n        ? { ...componentProps.highlight, theme: highlightTheme }\n        : undefined,\n      mermaid: componentProps.mermaid\n        ? { ...componentProps.mermaid, theme: mermaidTheme }\n        : undefined,\n    };\n  }, [highlightTheme, mermaidTheme]);\n\n  const memoPre = useCallback(\n    ({ node, ...props }: any) => (\n      <CodeBlock\n        animated={animated}\n        enableMermaid={enableMermaid}\n        fullFeatured={fullFeaturedCodeBlock}\n        {...stableComponentProps}\n        {...componentProps?.pre}\n        {...props}\n      />\n    ),\n    [animated, enableMermaid, fullFeaturedCodeBlock, stableComponentProps, componentProps?.pre],\n  );\n\n  const memoColorPreview = useCallback(({ node, ...props }: any) => <code {...props} />, []);\n\n  const memoComponents = useMemo(\n    () => ({\n      a: memoA,\n      br: memoBr,\n      colorPreview: memoColorPreview,\n      img: memoImg,\n      kbd: memoKbd,\n      p: memeP,\n      pre: memoPre,\n      section: memoSection,\n      video: memoVideo,\n    }),\n    [memoA, memoBr, memoImg, memoVideo, memoPre, memoSection, memeP, memoColorPreview, memoKbd],\n  );\n\n  return useMemo(\n    () => ({\n      ...memoComponents,\n      ...components,\n    }),\n    [memoComponents, components],\n  );\n};\n"],"mappings":";;;;;;;;;;;AAaA,MAAa,8BAA0C;CACrD,MAAM,EACJ,YACA,UACA,WACA,gBACA,eACA,uBACA,kBACE,oBAAoB;CAExB,MAAM,QAAQ,aACX,EAAE,MAAM,GAAG,YAAiB,oBAAC,MAAD;EAAiB;EAAW,GAAI;EAAO,GAAI,gBAAgB;EAAK,CAAA,EAC7F,CAAC,WAAW,gBAAgB,EAAE,CAC/B;CAED,MAAM,UAAU,aACb,EAAE,MAAM,GAAG,YAAiB,oBAAC,OAAD;EAAO,GAAI;EAAO,GAAI,gBAAgB;EAAO,CAAA,EAC1E,CAAC,gBAAgB,IAAI,CACtB;CAED,MAAM,YAAY,aACf,EAAE,MAAM,GAAG,YAAiB,oBAAC,OAAD;EAAO,GAAI;EAAO,GAAI,gBAAgB;EAAS,CAAA,EAC5E,CAAC,gBAAgB,MAAM,CACxB;CAED,MAAM,cAAc,aACjB,EAAE,MAAM,GAAG,YAAiB,oBAAC,SAAD;EAAwB;EAAe,GAAI;EAAS,CAAA,EACjF,CAAC,cAAc,CAChB;CAED,MAAM,UAAU,aACb,EAAE,eAAoB,oBAAC,QAAD;EAAQ,MAAM;EAAU,OAAO,EAAE,SAAS,eAAe;EAAI,CAAA,EACpF,EAAE,CACH;CAED,MAAM,SAAS,kBAAkB,oBAAC,MAAD,EAAM,CAAA,EAAE,EAAE,CAAC;CAE5C,MAAM,QAAQ,aAAa,EAAE,OAAO,UAAU,gBAAqB;AAEjE,MAAI,OAAO,aAAa,YADA,CAAC,OAAO,QAAQ,CACY,SAAS,UAAU,OAAO,MAAM,QAAQ,CAC1F,QAAO;AAET,SACE,oBAAC,KAAD;GAAc;GAAkB;GAC7B;GACC,CAAA;IAEL,EAAE,CAAC;CAGN,MAAM,iBAAiB,cACf,gBAAgB,WAAW,OACjC,CAAC,KAAK,UAAU,gBAAgB,WAAW,MAAM,CAAC,CACnD;CAED,MAAM,eAAe,cACb,gBAAgB,SAAS,OAC/B,CAAC,KAAK,UAAU,gBAAgB,SAAS,MAAM,CAAC,CACjD;CAGD,MAAM,uBAAuB,cAAc;AACzC,MAAI,CAAC,eAAgB;AAErB,SAAO;GACL,WAAW,eAAe,YACtB;IAAE,GAAG,eAAe;IAAW,OAAO;IAAgB,GACtD,KAAA;GACJ,SAAS,eAAe,UACpB;IAAE,GAAG,eAAe;IAAS,OAAO;IAAc,GAClD,KAAA;GACL;IACA,CAAC,gBAAgB,aAAa,CAAC;CAElC,MAAM,UAAU,aACb,EAAE,MAAM,GAAG,YACV,oBAAC,WAAD;EACY;EACK;EACf,cAAc;EACd,GAAI;EACJ,GAAI,gBAAgB;EACpB,GAAI;EACJ,CAAA,EAEJ;EAAC;EAAU;EAAe;EAAuB;EAAsB,gBAAgB;EAAI,CAC5F;CAED,MAAM,mBAAmB,aAAa,EAAE,MAAM,GAAG,YAAiB,oBAAC,QAAD,EAAM,GAAI,OAAS,CAAA,EAAE,EAAE,CAAC;CAE1F,MAAM,iBAAiB,eACd;EACL,GAAG;EACH,IAAI;EACJ,cAAc;EACd,KAAK;EACL,KAAK;EACL,GAAG;EACH,KAAK;EACL,SAAS;EACT,OAAO;EACR,GACD;EAAC;EAAO;EAAQ;EAAS;EAAW;EAAS;EAAa;EAAO;EAAkB;EAAQ,CAC5F;AAED,QAAO,eACE;EACL,GAAG;EACH,GAAG;EACJ,GACD,CAAC,gBAAgB,WAAW,CAC7B"}