code.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. import { useEffect, useState } from "react"
  2. import { codeToHtml} from "shiki"
  3. /**
  4. * Code component that uses Shiki to convert code to HTML and render it.
  5. *
  6. * @param code - The code to be highlighted.
  7. * @param theme - The theme to be used for highlighting.
  8. * @param language - The language of the code.
  9. * @param transformers - The transformers to be applied to the code.
  10. * @param decorations - The decorations to be applied to the code.
  11. * @param divProps - Additional properties to be passed to the div element.
  12. * @returns The rendered code block.
  13. */
  14. export function Code ({code, theme, language, transformers, decorations, ...divProps}) {
  15. const [codeResult, setCodeResult] = useState("")
  16. useEffect(() => {
  17. async function fetchCode() {
  18. const result = await codeToHtml(code, {
  19. lang: language,
  20. theme,
  21. transformers,
  22. decorations
  23. });
  24. setCodeResult(result);
  25. }
  26. fetchCode();
  27. }, [code, language, theme, transformers, decorations]
  28. )
  29. return (
  30. <div dangerouslySetInnerHTML={{__html: codeResult}} {...divProps} ></div>
  31. )
  32. }