MDX.tsx 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. import * as React from 'react';
  2. import type { MDXComponents } from 'mdx';
  3. import { useMDXComponent } from 'next-contentlayer/hooks';
  4. import Link from '@/components/Link';
  5. import TablerSponsorsBanner from '@/components/TablerSponsorsBanner';
  6. import Callout from '@/components/mdx/Callout';
  7. import { Card, Cards } from '@/components/mdx/Cards';
  8. import { Code, Pre } from '@/components/mdx/Code';
  9. import ColorsTable from '@/components/mdx/ColorsTable';
  10. import EmailsCount from '@/components/mdx/EmailsCount';
  11. import FlagsTable from '@/components/mdx/FlagsTable';
  12. import GuideImage from '@/components/mdx/GuideImage';
  13. import IconsCount from '@/components/mdx/IconsCount';
  14. import Image from '@/components/mdx/Image';
  15. import PaymentsTable from '@/components/mdx/PaymentsTable';
  16. import TablerLogos from '@/components/mdx/TablerLogos';
  17. import { Tab, Tabs, TabsPackage } from '@/components/mdx/Tabs';
  18. import { TipBad, TipGood, TipChanges } from '@/components/mdx/Tips';
  19. import { OptionDescription, OptionTitle, OptionsTable } from '@/components/mdx/OptionsTable';
  20. const components: MDXComponents = {
  21. // h1: ({ className, ...props }) => (
  22. // <h1
  23. // className={cn(
  24. // "mt-2 scroll-m-20 text-4xl font-bold tracking-tight",
  25. // className
  26. // )}
  27. // {...props}
  28. // />
  29. // ),
  30. // h2: ({ className, ...props }) => (
  31. // <h2
  32. // className={cn(
  33. // "mt-10 scroll-m-20 border-b pb-1 text-3xl font-semibold tracking-tight first:mt-0",
  34. // className
  35. // )}
  36. // {...props}
  37. // />
  38. // ),
  39. // h3: ({ className, ...props }) => (
  40. // <h3
  41. // className={cn(
  42. // "mt-8 scroll-m-20 text-2xl font-semibold tracking-tight",
  43. // className
  44. // )}
  45. // {...props}
  46. // />
  47. // ),
  48. // h4: ({ className, ...props }) => (
  49. // <h4
  50. // className={cn(
  51. // "mt-8 scroll-m-20 text-xl font-semibold tracking-tight",
  52. // className
  53. // )}
  54. // {...props}
  55. // />
  56. // ),
  57. // h5: ({ className, ...props }) => (
  58. // <h5
  59. // className={cn(
  60. // "mt-8 scroll-m-20 text-lg font-semibold tracking-tight",
  61. // className
  62. // )}
  63. // {...props}
  64. // />
  65. // ),
  66. // h6: ({ className, ...props }) => (
  67. // <h6
  68. // className={cn(
  69. // "mt-8 scroll-m-20 text-base font-semibold tracking-tight",
  70. // className
  71. // )}
  72. // {...props}
  73. // />
  74. // ),
  75. // a: ({ className, ...props }) => (
  76. // <a
  77. // className={cn("font-medium underline underline-offset-4", className)}
  78. // {...props}
  79. // />
  80. // ),
  81. // p: ({ className, ...props }) => (
  82. // <p
  83. // className={cn("leading-7 [&:not(:first-child)]:mt-6", className)}
  84. // {...props}
  85. // />
  86. // ),
  87. // ul: ({ className, ...props }) => (
  88. // <ul className={cn("my-6 ml-6 list-disc", className)} {...props} />
  89. // ),
  90. // ol: ({ className, ...props }) => (
  91. // <ol className={cn("my-6 ml-6 list-decimal", className)} {...props} />
  92. // ),
  93. // li: ({ className, ...props }) => (
  94. // <li className={cn("mt-2", className)} {...props} />
  95. // ),
  96. // blockquote: ({ className, ...props }) => (
  97. // <blockquote
  98. // className={cn(
  99. // "mt-6 border-l-2 pl-6 italic [&>*]:text-muted-foreground",
  100. // className
  101. // )}
  102. // {...props}
  103. // />
  104. // ),
  105. // img: ({
  106. // className,
  107. // alt,
  108. // ...props
  109. // }: React.ImgHTMLAttributes<HTMLImageElement>) => (
  110. // // eslint-disable-next-line @next/next/no-img-element
  111. // <img className={cn("rounded-md border", className)} alt={alt} {...props} />
  112. // ),
  113. // hr: ({ ...props }) => <hr className="my-4 md:my-8" {...props} />,
  114. // table: ({ className, ...props }: React.HTMLAttributes<HTMLTableElement>) => (
  115. // <div className="my-6 w-full overflow-y-auto">
  116. // <table className={cn("w-full", className)} {...props} />
  117. // </div>
  118. // ),
  119. // tr: ({ className, ...props }: React.HTMLAttributes<HTMLTableRowElement>) => (
  120. // <tr
  121. // className={cn("m-0 border-t p-0 even:bg-muted", className)}
  122. // {...props}
  123. // />
  124. // ),
  125. // th: ({ className, ...props }) => (
  126. // <th
  127. // className={cn(
  128. // "border px-4 py-2 text-left font-bold [&[align=center]]:text-center [&[align=right]]:text-right",
  129. // className
  130. // )}
  131. // {...props}
  132. // />
  133. // ),
  134. // td: ({ className, ...props }) => (
  135. // <td
  136. // className={cn(
  137. // "border px-4 py-2 text-left [&[align=center]]:text-center [&[align=right]]:text-right",
  138. // className
  139. // )}
  140. // {...props}
  141. // />
  142. // ),
  143. // pre: ({ className, ...props }) => (
  144. // <pre
  145. // className={cn(
  146. // "mb-4 mt-6 overflow-x-auto rounded-lg border bg-black py-4",
  147. // className
  148. // )}
  149. // {...props}
  150. // />
  151. // ),
  152. // code: ({ className, ...props }) => (
  153. // <code
  154. // className={cn(
  155. // "relative rounded border px-[0.3rem] py-[0.2rem] font-mono text-sm",
  156. // className
  157. // )}
  158. // {...props}
  159. // />
  160. // ),
  161. // Image,
  162. // Callout,
  163. // Card: MdxCard,
  164. Link,
  165. TablerLogos,
  166. PaymentsTable,
  167. FlagsTable,
  168. ColorsTable,
  169. EmailsCount,
  170. IconsCount,
  171. GuideImage,
  172. Callout,
  173. Tabs,
  174. TabsPackage,
  175. Tab,
  176. Card,
  177. Cards,
  178. TipGood,
  179. TipBad,
  180. TipChanges,
  181. pre: Pre,
  182. code: Code,
  183. a: (props) => {
  184. return <Link {...props} />;
  185. },
  186. img: Image,
  187. TablerSponsorsBanner,
  188. OptionDescription,
  189. OptionTitle,
  190. OptionsTable,
  191. };
  192. export default function Mdx({ code }: { code: string }) {
  193. const Component = useMDXComponent(code);
  194. return (
  195. <>
  196. <Component components={components} />
  197. </>
  198. );
  199. }