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>