From d162b2fc0795248fa89d45f2e5d4207126a59256 Mon Sep 17 00:00:00 2001
From: Chris Swithinbank
Date: Tue, 30 May 2023 15:48:38 +0200
Subject: Layout refactoring (#99)
---
.changeset/forty-dogs-bathe.md | 5 +++
.changeset/rare-feet-cry.md | 5 +++
.changeset/six-pants-cough.md | 5 +++
.changeset/smart-drinks-tie.md | 5 +++
docs/src/content/docs/de/index.mdx | 2 ++
.../src/content/docs/de/reference/configuration.md | 2 +-
docs/src/content/docs/es/index.mdx | 1 +
.../src/content/docs/es/reference/configuration.md | 2 +-
docs/src/content/docs/index.mdx | 1 +
docs/src/content/docs/ja/index.mdx | 1 +
.../src/content/docs/ja/reference/configuration.md | 2 +-
docs/src/content/docs/reference/configuration.md | 2 +-
docs/src/content/docs/reference/frontmatter.md | 16 +++++++++
packages/starlight/components/ContentPanel.astro | 2 +-
packages/starlight/components/EditLink.astro | 22 +++++++++++-
packages/starlight/components/Footer.astro | 41 +++++++++++++++++++++
packages/starlight/components/Header.astro | 31 ++++++++++++----
packages/starlight/components/Icons.ts | 2 ++
packages/starlight/components/LastUpdated.astro | 8 -----
packages/starlight/components/RightSidebar.astro | 42 ++++++++++++----------
.../starlight/components/RightSidebarPanel.astro | 2 +-
.../starlight/components/TableOfContents.astro | 25 +++++--------
.../TableOfContents/MobileTableOfContents.astro | 22 +++++-------
packages/starlight/index.astro | 40 +++++++++++++--------
packages/starlight/layout/PageFrame.astro | 16 ++++-----
packages/starlight/layout/TwoColumnContent.astro | 24 +++++++++++--
packages/starlight/schema.ts | 10 ++++++
packages/starlight/schemas/tableOfContents.ts | 23 ++++++++++++
packages/starlight/style/props.css | 1 +
packages/starlight/utils/navigation.ts | 2 +-
packages/starlight/utils/user-config.ts | 15 ++------
31 files changed, 265 insertions(+), 112 deletions(-)
create mode 100644 .changeset/forty-dogs-bathe.md
create mode 100644 .changeset/rare-feet-cry.md
create mode 100644 .changeset/six-pants-cough.md
create mode 100644 .changeset/smart-drinks-tie.md
create mode 100644 packages/starlight/components/Footer.astro
create mode 100644 packages/starlight/schemas/tableOfContents.ts
diff --git a/.changeset/forty-dogs-bathe.md b/.changeset/forty-dogs-bathe.md
new file mode 100644
index 00000000..21e53922
--- /dev/null
+++ b/.changeset/forty-dogs-bathe.md
@@ -0,0 +1,5 @@
+---
+"@astrojs/starlight": patch
+---
+
+Fix “next page” arrow showing on pages not in sidebar
diff --git a/.changeset/rare-feet-cry.md b/.changeset/rare-feet-cry.md
new file mode 100644
index 00000000..cb64821c
--- /dev/null
+++ b/.changeset/rare-feet-cry.md
@@ -0,0 +1,5 @@
+---
+"@astrojs/starlight": patch
+---
+
+Add support for a “splash” layout
diff --git a/.changeset/six-pants-cough.md b/.changeset/six-pants-cough.md
new file mode 100644
index 00000000..dc7e0d91
--- /dev/null
+++ b/.changeset/six-pants-cough.md
@@ -0,0 +1,5 @@
+---
+"@astrojs/starlight": patch
+---
+
+Support hiding right sidebar table of contents
diff --git a/.changeset/smart-drinks-tie.md b/.changeset/smart-drinks-tie.md
new file mode 100644
index 00000000..0bd6064c
--- /dev/null
+++ b/.changeset/smart-drinks-tie.md
@@ -0,0 +1,5 @@
+---
+"@astrojs/starlight": patch
+---
+
+Move edit page link to page footer so it is accessible on mobile
diff --git a/docs/src/content/docs/de/index.mdx b/docs/src/content/docs/de/index.mdx
index 6bd2e532..f710c658 100644
--- a/docs/src/content/docs/de/index.mdx
+++ b/docs/src/content/docs/de/index.mdx
@@ -1,5 +1,7 @@
---
title: Wilkommen, Welt
+description: Erstelle schöne, leistungsstarke Dokumentations-Websites mit Starlight und Astro.
+template: splash
---
:::caution[Laufende Arbeiten]
diff --git a/docs/src/content/docs/de/reference/configuration.md b/docs/src/content/docs/de/reference/configuration.md
index eef5a857..015acc6a 100644
--- a/docs/src/content/docs/de/reference/configuration.md
+++ b/docs/src/content/docs/de/reference/configuration.md
@@ -44,7 +44,7 @@ type LogoConfig = { alt?: string; replacesTitle?: boolean } & (
### `tableOfContents`
-**Typ:** `{ minHeadingLevel?: number; maxHeadingLevel?: number; }`
+**Typ:** `false | { minHeadingLevel?: number; maxHeadingLevel?: number; }`
**Voreinstellung:** `{ minHeadingLevel: 2; maxHeadingLevel: 3; }`
Konfiguriere das Inhaltsverzeichnis, das rechts auf jeder Seite angezeigt wird. Standardmäßig werden `
` und `` Überschriften in dieses Inhaltsverzeichnis aufgenommen.
diff --git a/docs/src/content/docs/es/index.mdx b/docs/src/content/docs/es/index.mdx
index 1d8fe501..b6bf9d0b 100644
--- a/docs/src/content/docs/es/index.mdx
+++ b/docs/src/content/docs/es/index.mdx
@@ -1,6 +1,7 @@
---
title: Bienvenido, mundo
description: Starlight te ayuda a construir sitios web de documentación hermosos y de alto rendimiento con Astro.
+template: splash
---
:::caution[Trabajo en progreso]
diff --git a/docs/src/content/docs/es/reference/configuration.md b/docs/src/content/docs/es/reference/configuration.md
index ea004e1e..7761ee63 100644
--- a/docs/src/content/docs/es/reference/configuration.md
+++ b/docs/src/content/docs/es/reference/configuration.md
@@ -44,7 +44,7 @@ type LogoConfig = { alt?: string; replacesTitle?: boolean } & (
### `tableOfContents`
-**tipo:** `{ minHeadingLevel?: number; maxHeadingLevel?: number; }`
+**tipo:** `false | { minHeadingLevel?: number; maxHeadingLevel?: number; }`
**por defecto:** `{ minHeadingLevel: 2; maxHeadingLevel: 3; }`
Configura la tabla de contenidos que se muestra a la derecha de cada página. De forma predeterminada, los encabezados `` y `` se incluirán en esta tabla de contenidos.
diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx
index eed7f0dc..56d15de8 100644
--- a/docs/src/content/docs/index.mdx
+++ b/docs/src/content/docs/index.mdx
@@ -1,6 +1,7 @@
---
title: Welcome, world
description: Starlight helps you build beautiful, high-performance documentation websites with Astro.
+template: splash
---
:::caution[Work in progress]
diff --git a/docs/src/content/docs/ja/index.mdx b/docs/src/content/docs/ja/index.mdx
index 37d8a623..d8bdcdae 100644
--- a/docs/src/content/docs/ja/index.mdx
+++ b/docs/src/content/docs/ja/index.mdx
@@ -1,6 +1,7 @@
---
title: ようこそ、世界
description: Starlightは、Astroを使って美しく高性能なドキュメントサイトを作るためのテーマです。
+template: splash
---
:::caution[作業中]
diff --git a/docs/src/content/docs/ja/reference/configuration.md b/docs/src/content/docs/ja/reference/configuration.md
index 0e069a28..65501ed9 100644
--- a/docs/src/content/docs/ja/reference/configuration.md
+++ b/docs/src/content/docs/ja/reference/configuration.md
@@ -44,7 +44,7 @@ type LogoConfig = { alt?: string; replacesTitle?: boolean } & (
### `tableOfContents`
-**type:** `{ minHeadingLevel?: number; maxHeadingLevel?: number; }`
+**type:** `false | { minHeadingLevel?: number; maxHeadingLevel?: number; }`
**default:** `{ minHeadingLevel: 2; maxHeadingLevel: 3; }`
各ページの右側に表示される目次を設定します。デフォルトでは、``と``の見出しがこの目次に含まれます。
diff --git a/docs/src/content/docs/reference/configuration.md b/docs/src/content/docs/reference/configuration.md
index 4413311d..aafacf99 100644
--- a/docs/src/content/docs/reference/configuration.md
+++ b/docs/src/content/docs/reference/configuration.md
@@ -44,7 +44,7 @@ type LogoConfig = { alt?: string; replacesTitle?: boolean } & (
### `tableOfContents`
-**type:** `{ minHeadingLevel?: number; maxHeadingLevel?: number; }`
+**type:** `false | { minHeadingLevel?: number; maxHeadingLevel?: number; }`
**default:** `{ minHeadingLevel: 2; maxHeadingLevel: 3; }`
Configure the table of contents shown on the right of each page. By default, `` and `` headings will be included in this table of contents.
diff --git a/docs/src/content/docs/reference/frontmatter.md b/docs/src/content/docs/reference/frontmatter.md
index cdd2279a..4d947100 100644
--- a/docs/src/content/docs/reference/frontmatter.md
+++ b/docs/src/content/docs/reference/frontmatter.md
@@ -34,6 +34,15 @@ The page description is used for page metadata and will be picked up by search e
Overrides the [global `editLink` config](/reference/configuration/#editlink). Set to `false` to disable the “Edit page” link for a specific page or provide an alternative URL where the content of this page is editable.
+### `template`
+
+**type:** `'doc' | 'splash'`
+**default:** `'doc'`
+
+Set the layout template for this page.
+Pages use the `'doc'` layout by default.
+Set to `'splash'` to use a wider layout without any sidebars designed for landing pages.
+
### `head`
**type:** [`HeadConfig[]`](/reference/configuration/#headconfig)
@@ -49,3 +58,10 @@ head:
content: Custom about title
---
```
+
+### `tableOfContents`
+
+**type:** `false | { minHeadingLevel?: number; maxHeadingLevel?: number; }`
+
+Overrides the [global `tableOfContents` config](/reference/configuration/#tableofcontents).
+Customize the heading levels to be included or set to `false` to hide the table of contents on this page.
diff --git a/packages/starlight/components/ContentPanel.astro b/packages/starlight/components/ContentPanel.astro
index 4f3aaa2a..4d8a75a8 100644
--- a/packages/starlight/components/ContentPanel.astro
+++ b/packages/starlight/components/ContentPanel.astro
@@ -19,7 +19,7 @@
@media (min-width: 72rem) {
.container {
- margin-inline-start: auto;
+ margin-inline: var(--sl-content-margin-inline, auto);
}
}
diff --git a/packages/starlight/components/EditLink.astro b/packages/starlight/components/EditLink.astro
index c72c25ac..f4fcbef2 100644
--- a/packages/starlight/components/EditLink.astro
+++ b/packages/starlight/components/EditLink.astro
@@ -2,6 +2,7 @@
import type { CollectionEntry } from 'astro:content';
import config from 'virtual:starlight/user-config';
import { useTranslations } from '../utils/translations';
+import Icon from './Icon.astro';
interface Props {
data: CollectionEntry<'docs'>['data'];
@@ -23,4 +24,23 @@ const url =
: undefined;
---
-{editUrl !== false && url && {t('page.editLink')}}
+{
+ editUrl !== false && url && (
+
+
+ {t('page.editLink')}
+
+ )
+}
+
+
diff --git a/packages/starlight/components/Footer.astro b/packages/starlight/components/Footer.astro
new file mode 100644
index 00000000..c550d31d
--- /dev/null
+++ b/packages/starlight/components/Footer.astro
@@ -0,0 +1,41 @@
+---
+import config from 'virtual:starlight/user-config';
+import { SidebarEntry, getPrevNextLinks } from '../utils/navigation';
+import type { StarlightDocsEntry } from '../utils/routing';
+import type { LocaleData } from '../utils/slugs';
+
+import LastUpdated from '../components/LastUpdated.astro';
+import PrevNextLinks from '../components/PrevNextLinks.astro';
+import EditLink from './EditLink.astro';
+
+interface Props extends LocaleData {
+ entry: StarlightDocsEntry;
+ sidebar: SidebarEntry[];
+}
+
+const { entry, dir, lang, locale, sidebar } = Astro.props;
+const prevNextLinks = getPrevNextLinks(sidebar);
+---
+
+
+
+
diff --git a/packages/starlight/components/Header.astro b/packages/starlight/components/Header.astro
index 1d80e49e..594b1690 100644
--- a/packages/starlight/components/Header.astro
+++ b/packages/starlight/components/Header.astro
@@ -9,7 +9,7 @@ interface Props {
locale: string | undefined;
}
-const { locale } = Astro.props
+const { locale } = Astro.props;
---
@@ -37,17 +37,34 @@ const { locale } = Astro.props
}
@media (min-width: 50rem) {
+ :global(:root[data-has-sidebar]) {
+ --__sidebar-pad: calc(2 * var(--sl-nav-pad-x));
+ }
+ :global(:root:not([data-has-toc])) {
+ --__toc-width: 0rem;
+ }
.header {
- --__sidebar-width: var(--sl-sidebar-width) - var(--sl-nav-pad-x);
+ --__sidebar-width: max(
+ 0rem,
+ var(--sl-content-inline-start, 0rem) - var(--sl-nav-pad-x)
+ );
--__main-column-fr: calc(
- (100% - var(--sl-content-width) - 2 * var(--sl-sidebar-width)) / 2
+ (
+ 100% + var(--__sidebar-pad, 0rem) -
+ var(--__toc-width, var(--sl-sidebar-width)) -
+ (2 * var(--__toc-width, var(--sl-nav-pad-x))) -
+ var(--sl-content-inline-start, 0rem) - var(--sl-content-width)
+ ) / 2
);
display: grid;
grid-template-columns:
/* 1 (site title): runs up until the main content column’s left edge. */
- calc(
- var(--__sidebar-width) +
- max(0rem, var(--__main-column-fr) - var(--sl-nav-gap))
+ max(
+ var(--sl-title-min-width),
+ calc(
+ var(--__sidebar-width) +
+ max(0rem, var(--__main-column-fr) - var(--sl-nav-gap))
+ )
)
/* 2 (search box): all free space that is available. */
1fr
diff --git a/packages/starlight/components/Icons.ts b/packages/starlight/components/Icons.ts
index c85472e4..4aa2f179 100644
--- a/packages/starlight/components/Icons.ts
+++ b/packages/starlight/components/Icons.ts
@@ -12,6 +12,8 @@ export const Icons = {
bars: '',
translate:
'',
+ pencil:
+ '',
moon: '',
sun: '',
laptop:
diff --git a/packages/starlight/components/LastUpdated.astro b/packages/starlight/components/LastUpdated.astro
index 349b190e..c1e0476d 100644
--- a/packages/starlight/components/LastUpdated.astro
+++ b/packages/starlight/components/LastUpdated.astro
@@ -34,11 +34,3 @@ try {
)
}
-
-
diff --git a/packages/starlight/components/RightSidebar.astro b/packages/starlight/components/RightSidebar.astro
index d9c73139..54083dd6 100644
--- a/packages/starlight/components/RightSidebar.astro
+++ b/packages/starlight/components/RightSidebar.astro
@@ -1,30 +1,36 @@
---
import type { MarkdownHeading } from 'astro';
-import config from 'virtual:starlight/user-config';
-import type { StarlightDocsEntry } from '../utils/routing';
-import EditLink from './EditLink.astro';
import RightSidebarPanel from './RightSidebarPanel.astro';
+import MobileTableOfContents from './TableOfContents/MobileTableOfContents.astro';
import TableOfContents from './TableOfContents.astro';
+import { generateToC } from './TableOfContents/generateToC';
+import { useTranslations } from '../utils/translations';
interface Props {
- entry: StarlightDocsEntry;
headings: MarkdownHeading[];
locale: string | undefined;
+ tocConfig: { maxHeadingLevel: number; minHeadingLevel: number } | false;
}
-const { entry, headings, locale } = Astro.props;
+const { headings, locale, tocConfig } = Astro.props;
+const t = useTranslations(locale);
+const tocProps = tocConfig && {
+ ...tocConfig,
+ locale,
+ toc: generateToC(headings, {
+ ...tocConfig,
+ title: t('tableOfContents.overview'),
+ }),
+};
---
-
-
-
-
- {
- config.editLink.baseUrl && (
- <>
- Contribute
-
- >
- )
- }
-
+{
+ tocProps && (
+ <>
+
+
+
+
+ >
+ )
+}
diff --git a/packages/starlight/components/RightSidebarPanel.astro b/packages/starlight/components/RightSidebarPanel.astro
index d1344c74..b4a3b5f8 100644
--- a/packages/starlight/components/RightSidebarPanel.astro
+++ b/packages/starlight/components/RightSidebarPanel.astro
@@ -1,4 +1,4 @@
-