summaryrefslogtreecommitdiff
path: root/src/components/mdx-layout.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/mdx-layout.tsx')
-rw-r--r--src/components/mdx-layout.tsx51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/components/mdx-layout.tsx b/src/components/mdx-layout.tsx
new file mode 100644
index 0000000..bc68a93
--- /dev/null
+++ b/src/components/mdx-layout.tsx
@@ -0,0 +1,51 @@
+import { PostComments } from '@/app/(home)/posts/[slug]/page.client';
+import type { TOCItemType } from 'fumadocs-core/server';
+import { InlineTOC } from 'fumadocs-ui/components/inline-toc';
+import type { ReactNode } from 'react';
+import { Section } from './section';
+
+interface MdxLayoutProps {
+ children: ReactNode;
+ title: string;
+ toc?: TOCItemType[] | null;
+ comments?: boolean;
+ slug: string;
+}
+
+export default function MdxLayout({
+ children,
+ title,
+ toc,
+ comments,
+ slug,
+}: MdxLayoutProps): ReactNode {
+ return (
+ <>
+ <Section className='p-4 lg:p-6'>
+ <h1 className='text-center font-bold text-3xl leading-tight tracking-tighter md:text-4xl'>
+ {title}
+ </h1>
+ </Section>
+
+ <Section className='h-full' sectionClassName='flex flex-1'>
+ <article className='flex min-h-full flex-col lg:flex-row'>
+ <div className='flex flex-1 flex-col gap-4'>
+ {toc?.length ? (
+ <InlineTOC
+ items={toc}
+ className='rounded-none border-0 border-border/70 border-b border-dashed dark:border-border'
+ />
+ ) : null}
+ <div className='prose min-w-0 flex-1 px-4'>{children}</div>
+ {comments ? (
+ <PostComments
+ slug={slug}
+ className='[&_form>div]:!rounded-none rounded-none border-0 border-border/70 border-t border-dashed dark:border-border'
+ />
+ ) : null}
+ </div>
+ </article>
+ </Section>
+ </>
+ );
+}