mirror of
https://github.com/tabler/tabler.git
synced 2026-08-29 13:21:29 +04:00
67 lines
1.8 KiB
Plaintext
67 lines
1.8 KiB
Plaintext
---
|
|
// Adapter: MDX (layout in frontmatter) → DocsLayout.
|
|
// Astro passes { frontmatter, headings, url, file } to the MDX layout — we map it
|
|
// onto DocsLayout props, computing the TOC from the headings (equivalent of the `toc` filter).
|
|
import DocsLayout from './DocsLayout.astro'
|
|
|
|
interface MdxHeading {
|
|
depth: number
|
|
slug: string
|
|
text: string
|
|
}
|
|
|
|
interface MdxFrontmatter {
|
|
'title'?: string
|
|
'seoTitle'?: string
|
|
'summary'?: string
|
|
'description'?: string
|
|
'seoDescription'?: string
|
|
'added-in'?: string
|
|
'docs-libs'?: string | string[]
|
|
'hide-pagination'?: boolean
|
|
}
|
|
|
|
const {
|
|
frontmatter,
|
|
headings = [],
|
|
url,
|
|
file,
|
|
} = Astro.props as {
|
|
frontmatter: MdxFrontmatter
|
|
headings: MdxHeading[]
|
|
url?: string
|
|
file?: string
|
|
}
|
|
|
|
// Repo-relative source path for the "Edit this page" link, e.g.
|
|
// "docs/pages/ui/components/alert.mdx" (`file` is the absolute path of the MDX page).
|
|
const editPath = file?.includes('/docs/pages/') ? file.replace(/^.*\/docs\/pages\//, 'docs/pages/') : undefined
|
|
|
|
const rawDocsLibs = frontmatter['docs-libs']
|
|
const docsLibs = rawDocsLibs == null ? [] : Array.isArray(rawDocsLibs) ? rawDocsLibs : [rawDocsLibs]
|
|
|
|
const toc = headings
|
|
.filter((heading) => heading.depth === 2 || heading.depth === 3)
|
|
.map((heading) => ({
|
|
level: heading.depth as 2 | 3,
|
|
text: heading.text,
|
|
id: heading.slug,
|
|
}))
|
|
---
|
|
|
|
<DocsLayout
|
|
title={frontmatter.title ?? ''}
|
|
seoTitle={frontmatter.seoTitle}
|
|
summary={frontmatter.summary}
|
|
description={frontmatter.description}
|
|
seoDescription={frontmatter.seoDescription}
|
|
addedIn={frontmatter['added-in']}
|
|
docsLibs={docsLibs}
|
|
hidePagination={frontmatter['hide-pagination']}
|
|
editPath={editPath}
|
|
toc={toc}
|
|
url={url ? `${url.replace(/\.html$/, '').replace(/\/$/, '')}/` : undefined}
|
|
>
|
|
<slot />
|
|
</DocsLayout>
|