MarpSlides.tsx 1010 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { Marp } from '@marp-team/marp-core';
  2. import { Element } from '@marp-team/marpit';
  3. import Head from 'next/head';
  4. import './Slides.global.scss';
  5. const MARP_CONTAINER_CLASS_NAME = 'marpit';
  6. const marpit = new Marp({
  7. container: [
  8. new Element('div', { class: MARP_CONTAINER_CLASS_NAME }),
  9. new Element('div', { class: 'slides' }),
  10. ],
  11. slideContainer: [
  12. new Element('div', { class: 'shadow rounded m-2' }),
  13. ],
  14. inlineSVG: true,
  15. emoji: undefined,
  16. html: false,
  17. math: false,
  18. });
  19. type Props = {
  20. children?: string,
  21. }
  22. export const MarpSlides = (props: Props): JSX.Element => {
  23. const { children } = props;
  24. const { html, css } = marpit.render(children ?? '');
  25. return (
  26. <>
  27. <Head>
  28. <style>{css}</style>
  29. </Head>
  30. <div
  31. // eslint-disable-next-line react/no-danger
  32. dangerouslySetInnerHTML={{
  33. // DOMpurify.sanitize delete elements in <svg> so sanitize is not used here.
  34. __html: html,
  35. }}
  36. />
  37. </>
  38. );
  39. };