MDX.tsx 5.6 KB

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