master
1---
2import { articleConfig, commentConfig } from '@/config';
3import ProfileCard from '@components/aside/ProfileCard.astro';
4import TOC from '@components/aside/TOC.astro';
5import Comment from '@components/Comment.astro';
6import type { MarkdownHeading } from 'astro';
7import MainLayout from './MainLayout.astro';
8
9interface Props {
10 title: string;
11 description?: string;
12 lang?: string;
13 headings?: MarkdownHeading[];
14 comment?: boolean;
15 banner?: string;
16}
17
18const { title, description, lang, headings, comment, banner } = Astro.props;
19---
20
21<MainLayout
22 title={title}
23 description={description}
24 lang={lang}
25 banner={banner ? { src: banner } : undefined}
26>
27 <slot slot="head" name="head" />
28 <slot slot="header-content" name="header-content" />
29 <div class="card border-base-300 bg-base-200 swup-transition-fade border px-6 py-4">
30 <slot />
31 {comment && commentConfig.enable && <Comment />}
32 </div>
33 <Fragment slot="aside-fixed">
34 <ProfileCard />
35 <slot name="aside-fixed" />
36 </Fragment>
37 <Fragment slot="aside-sticky">
38 {articleConfig.toc && headings && headings.length > 0 && <TOC headings={headings} />}
39 <slot name="aside-sticky" />
40 </Fragment>
41</MainLayout>