From a8eeae7a1e24d1ccab3348d68e75c71b696f3e13 Mon Sep 17 00:00:00 2001
From: Vitor Ayres
Date: Tue, 7 Nov 2023 13:45:24 -0300
Subject: [PATCH 01/22] i18n(pt-BR): Update `reference/configuration.mdx`
(#1050)
---
docs/src/content/docs/pt-br/reference/configuration.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/src/content/docs/pt-br/reference/configuration.mdx b/docs/src/content/docs/pt-br/reference/configuration.mdx
index 390cbb3dfd9..df932ec3346 100644
--- a/docs/src/content/docs/pt-br/reference/configuration.mdx
+++ b/docs/src/content/docs/pt-br/reference/configuration.mdx
@@ -183,10 +183,10 @@ sidebar: [
type SidebarItem = {
label: string;
translations?: Record;
+ badge?: string | BadgeConfig;
} & (
| {
link: string;
- badge?: string | BadgeConfig;
attrs?: Record;
}
| { items: SidebarItem[]; collapsed?: boolean }
From 5e51300c01b49e15bdf61be3cea97099237c21b1 Mon Sep 17 00:00:00 2001
From: Paul Valladares <85648028+dreyfus92@users.noreply.github.com>
Date: Tue, 7 Nov 2023 19:31:55 -0600
Subject: [PATCH 02/22] i18n(es): Update `i18n` (#1028)
* update: update i18n
* Apply suggestions from kevin's review
Co-authored-by: Kevin Zuniga Cuellar <46791833+kevinzunigacuellar@users.noreply.github.com>
---------
Co-authored-by: Kevin Zuniga Cuellar <46791833+kevinzunigacuellar@users.noreply.github.com>
---
docs/src/content/docs/es/guides/i18n.mdx | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/docs/src/content/docs/es/guides/i18n.mdx b/docs/src/content/docs/es/guides/i18n.mdx
index 0a359b4ef5a..7274ab75045 100644
--- a/docs/src/content/docs/es/guides/i18n.mdx
+++ b/docs/src/content/docs/es/guides/i18n.mdx
@@ -140,7 +140,11 @@ Si no hay una traducción disponible para un idioma, Starlight mostrará a los l
## Traduce la UI de Starlight
-Starlight proporciona de forma predeterminada traducciones para los textos utilizados en la UI al inglés, checo, francés, alemán, italiano, japonés, holandés, portugués, danés, español, turco, árabe, noruego, farsi, hebreo, chino simplificado, coreano, indonesio, ruso, sueco, ucraniano y vietnamita. También damos la bienvenida a [contribuciones para agregar más idiomas predeterminados](https://github.com/withastro/starlight/blob/main/CONTRIBUTING.md).
+Además de alojar archivos de contenido traducidos, Starlight te permite traducir las etiquetas de UI predeterminadas (p. ej. el encabezado "En esta página" en la tabla de contenidos) para que tus lectores puedan experimentar tu sitio completamente en el idioma seleccionado.
+
+Inglés, checo, francés, alemán, italiano, japonés, portugués, holandés, danés, español, turco, árabe, noruego, farsi, hebreo, chino simplificado, coreano, indonesio, ruso, sueco, ucraniano, vietnamita y gallego se proporcionan de forma predeterminada, y damos la bienvenida a [contribuciones para agregar más idiomas predeterminados](https://github.com/withastro/starlight/blob/main/CONTRIBUTING.md).
+
+Puedes proprocionar traducciones para idiomas adicionales, o editar nuestras etiquetas predeterminadas, a través de la colección de datos `i18n`.
1. Configura la colección de datos `i18n` en `src/content/config.ts` si aún no está configurada:
From 0c9d9732650c8028bdcba1b1825944f3ec534ed2 Mon Sep 17 00:00:00 2001
From: Paul Valladares <85648028+dreyfus92@users.noreply.github.com>
Date: Wed, 8 Nov 2023 10:39:18 -0600
Subject: [PATCH 03/22] i18n(es): Update `frontmatter` (#1030)
---
.../content/docs/es/reference/frontmatter.md | 40 +++++++++++++++----
1 file changed, 32 insertions(+), 8 deletions(-)
diff --git a/docs/src/content/docs/es/reference/frontmatter.md b/docs/src/content/docs/es/reference/frontmatter.md
index 61a528327ec..b2a8cb6581b 100644
--- a/docs/src/content/docs/es/reference/frontmatter.md
+++ b/docs/src/content/docs/es/reference/frontmatter.md
@@ -111,20 +111,44 @@ hero:
---
```
+Puedes mostrar diferentes versiones de la imagen hero en los modos claro y oscuro.
+
+```md
+---
+hero:
+ image:
+ alt: Un logotipo brillante, de colores brillantes
+ dark: ../../assets/logo-dark.png
+ light: ../../assets/logo-light.png
+---
+```
+
#### `HeroConfig`
```ts
interface HeroConfig {
title?: string;
tagline?: string;
- image?: {
- alt?: string;
- // Ruta relativa a una imagen en tu repositorio.
- file?: string;
- // HTML crudo para usar en el espacio de la imagen.
- // Podría ser una etiqueta ` ` personalizada o un `` en línea.
- html?: string;
- };
+ image?:
+ | {
+ // Ruta relativa a una imagen en tu repositorio.
+ file: string;
+ // Texto alternativo para hacer que la imagen sea accesible a la tecnología de asistencia
+ alt?: string;
+ }
+ | {
+ // Ruta relativa a una imagen en tu repositorio para usar en el modo oscuro.
+ dark: string;
+ // Ruta relativa a una imagen en tu repositorio para usar en el modo claro.
+ light: string;
+ // Texto alternativo para hacer que la imagen sea accesible a la tecnología de asistencia
+ alt?: string;
+ }
+ | {
+ // HTML crudo para usar en el espacio de la imagen.
+ // Podría ser una etiqueta ` ` personalizada o un `` en línea.
+ html: string;
+ };
actions?: Array<{
text: string;
link: string;
From 5e0aed9e404281512b423548d00092e2bcdcd1e4 Mon Sep 17 00:00:00 2001
From: Vitor Ayres
Date: Wed, 8 Nov 2023 21:29:07 -0300
Subject: [PATCH 04/22] i18n(pt-BR): Update `reference/frontmatter.md` (#1051)
* Update frontmatter.md
#280
* Update frontmatter.md
* Update frontmatter.md
* improve wording
---
.../docs/pt-br/reference/frontmatter.md | 40 +++++++++++++++----
1 file changed, 32 insertions(+), 8 deletions(-)
diff --git a/docs/src/content/docs/pt-br/reference/frontmatter.md b/docs/src/content/docs/pt-br/reference/frontmatter.md
index ed8d73d07e4..1e38930a6df 100644
--- a/docs/src/content/docs/pt-br/reference/frontmatter.md
+++ b/docs/src/content/docs/pt-br/reference/frontmatter.md
@@ -111,20 +111,44 @@ hero:
---
```
+Você pode exibir diferentes versões da imagem hero no modo claro e escuro.
+
+```md
+---
+hero:
+ image:
+ alt: Um logo brilhante e colorido
+ dark: ../../assets/logo-escuro.png
+ light: ../../assets/logo-claro.png
+---
+```
+
#### `HeroConfig`
```ts
interface HeroConfig {
title?: string;
tagline?: string;
- image?: {
- alt?: string;
- // Caminho relativo a uma imagem no seu repositório.
- file?: string;
- // HTML bruto para utilizar no slot de imagem.
- // Pode ser uma tag ` ` customizada ou um `` inline.
- html?: string;
- };
+ image?:
+ | {
+ // Caminho relativo de uma imagem no seu repositório.
+ file: string;
+ // Texto alternativo para tornar a imagem acessível à tecnologia assistiva
+ alt?: string;
+ }
+ | {
+ // Caminho relativo de uma imagem em seu repositório para ser usada no modo escuro.
+ dark: string;
+ // Caminho relativo de uma imagem em seu repositório para ser usada no modo claro.
+ light: string;
+ // Texto alternativo para tornar a imagem acessível à tecnologia assistiva
+ alt?: string;
+ }
+ | {
+ // HTML bruto para utilizar no slot de imagem.
+ // Pode ser uma tag ` ` personalizada ou um `` inline.
+ html: string;
+ };
actions?: Array<{
text: string;
link: string;
From 1c1acd386bb5f0e42eb7b7b0d77841f165907407 Mon Sep 17 00:00:00 2001
From: trueberryless <99918022+trueberryless@users.noreply.github.com>
Date: Thu, 9 Nov 2023 09:54:57 +0100
Subject: [PATCH 05/22] i18n(de): Update translation of another file into
German (#1057)
Co-authored-by: HiDeoo <494699+HiDeoo@users.noreply.github.com>
---
docs/src/content/docs/de/reference/configuration.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/src/content/docs/de/reference/configuration.mdx b/docs/src/content/docs/de/reference/configuration.mdx
index 306ed7dce4b..abc6711b866 100644
--- a/docs/src/content/docs/de/reference/configuration.mdx
+++ b/docs/src/content/docs/de/reference/configuration.mdx
@@ -181,10 +181,10 @@ sidebar: [
type SidebarItem = {
label: string;
translations?: Record;
+ badge?: string | BadgeConfig;
} & (
| {
link: string;
- badge?: string | BadgeConfig;
attrs?: Record;
}
| { items: SidebarItem[]; collapsed?: boolean }
From dea8490b3c4664c5e9286afa3f8cd34b2a78ee56 Mon Sep 17 00:00:00 2001
From: trueberryless <99918022+trueberryless@users.noreply.github.com>
Date: Thu, 9 Nov 2023 11:29:24 +0100
Subject: [PATCH 06/22] i18n(de): Update translation of authoring-content.md
into German (#1053)
* i18n(de): Update translation of authoring-content.md into German
* Update docs/src/content/docs/de/guides/authoring-content.md
Co-authored-by: Chris Swithinbank
---------
Co-authored-by: Chris Swithinbank
---
docs/src/content/docs/de/guides/authoring-content.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/docs/src/content/docs/de/guides/authoring-content.md b/docs/src/content/docs/de/guides/authoring-content.md
index e376af0fa08..88ffcf85b6f 100644
--- a/docs/src/content/docs/de/guides/authoring-content.md
+++ b/docs/src/content/docs/de/guides/authoring-content.md
@@ -207,3 +207,7 @@ Lange, einzeilige Codeblöcke sollten nicht umgebrochen werden. Sie sollten hori
## Andere allgemeine Markdown-Funktionen
Starlight unterstützt alle anderen Markdown-Autorensyntaxen, wie Listen und Tabellen. Einen schnellen Überblick über alle Markdown-Syntaxelemente findest du im [Markdown Cheat Sheet von The Markdown Guide](https://www.markdownguide.org/cheat-sheet/).
+
+## Erweiterte Markdown- und MDX-Konfiguration
+
+Starlight verwendet Astros Markdown- und MDX-Renderer, der auf remark und rehype aufbaut. Du kannst eine Unterstützung für eigene Syntax und Verhalten hinzufügen, indem du `remarkPlugins` oder `rehypePlugins` in deiner Astro-Konfigurationsdatei hinzufügst. Weitere Informationen findest du unter ["Markdown konfigurieren"] (https://docs.astro.build/de/guides/markdown-content/#markdown-konfigurieren) in der Astro-Dokumentation.
From f77c6c0d6c1ac07c3c98d2b247d4c28f9d971003 Mon Sep 17 00:00:00 2001
From: trueberryless <99918022+trueberryless@users.noreply.github.com>
Date: Thu, 9 Nov 2023 18:34:34 +0100
Subject: [PATCH 07/22] i18n(de): Update translating of `i18n.mdx` into German
(#1054)
Co-authored-by: HiDeoo <494699+HiDeoo@users.noreply.github.com>
---
docs/src/content/docs/de/guides/i18n.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/src/content/docs/de/guides/i18n.mdx b/docs/src/content/docs/de/guides/i18n.mdx
index 46478e5d25b..40ffae09356 100644
--- a/docs/src/content/docs/de/guides/i18n.mdx
+++ b/docs/src/content/docs/de/guides/i18n.mdx
@@ -143,7 +143,7 @@ Wenn für eine Sprache noch keine Übersetzung verfügbar ist, zeigt Starlight d
Starlight bietet nicht nur übersetzte Inhaltsdateien, sondern auch die Möglichkeit, die Standard-Benutzeroberfläche zu übersetzen (z.B. die Überschrift "Auf dieser Seite" im Inhaltsverzeichnis), so dass deine Leser deine Website vollständig in der ausgewählten Sprache erleben können.
-Englisch, Tschechisch, Französisch, Deutsch, Italienisch, Japanisch, Portugiesisch, Niederländisch, Dänisch, Spanisch, Türkisch, Arabisch, Norwegisch, Farsi, Hebräisch, Chinesisch (vereinfacht), Koreanisch, Indonesisch, Russisch, Schwedisch, Ukrainisch und Vietnamesisch werden standardmäßig übersetzt, und wir freuen uns über [Beiträge zur Aufnahme weiterer Standardsprachen](https://github.com/withastro/starlight/blob/main/CONTRIBUTING.md).
+Englisch, Tschechisch, Französisch, Deutsch, Italienisch, Japanisch, Portugiesisch, Niederländisch, Dänisch, Spanisch, Türkisch, Arabisch, Norwegisch, Farsi, Hebräisch, Chinesisch (vereinfacht), Koreanisch, Indonesisch, Russisch, Schwedisch, Ukrainisch, Vietnamesisch und Galizisch werden standardmäßig übersetzt, und wir freuen uns über [Beiträge zur Aufnahme weiterer Standardsprachen](https://github.com/withastro/starlight/blob/main/CONTRIBUTING.md).
Du kannst Übersetzungen für zusätzliche Sprachen, die du unterstützt, über die `i18n` Datensammlung zur Verfügung stellen - oder unsere Standardbezeichnungen überschreiben.
From 8e8f03532f470269e8cdda3f3bcfbbae15fbe235 Mon Sep 17 00:00:00 2001
From: Chris Swithinbank
Date: Fri, 10 Nov 2023 23:07:14 +0100
Subject: [PATCH 08/22] Migrate docs site to Vercel (#795)
Co-authored-by: Tony Sullivan
---
.gitignore | 3 +++
docs/astro.config.mjs | 9 +++++++--
docs/public/_headers | 4 ----
docs/public/_redirects | 3 ---
docs/vercel.json | 22 ++++++++++++++++++++++
5 files changed, 32 insertions(+), 9 deletions(-)
delete mode 100644 docs/public/_headers
delete mode 100644 docs/public/_redirects
create mode 100644 docs/vercel.json
diff --git a/.gitignore b/.gitignore
index 9f880cb7098..e790eb4de4e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,6 @@ pnpm-debug.log*
# Vitest
__coverage__/
+
+# Vercel output
+.vercel
\ No newline at end of file
diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs
index 37ecec8bd16..2405fd09de4 100644
--- a/docs/astro.config.mjs
+++ b/docs/astro.config.mjs
@@ -16,7 +16,13 @@ export const locales = {
ru: { label: 'Русский', lang: 'ru' },
};
-const site = 'https://starlight.astro.build/';
+/* https://vercel.com/docs/projects/environment-variables/system-environment-variables#system-environment-variables */
+const VERCEL_PREVIEW_SITE =
+ process.env.VERCEL_ENV !== 'production' &&
+ process.env.VERCEL_URL &&
+ `https://${process.env.VERCEL_URL}`;
+
+const site = VERCEL_PREVIEW_SITE || 'https://starlight.astro.build/';
export default defineConfig({
site,
@@ -175,7 +181,6 @@ export default defineConfig({
autogenerate: { directory: 'reference' },
},
],
- lastUpdated: true,
}),
],
});
diff --git a/docs/public/_headers b/docs/public/_headers
deleted file mode 100644
index aaa51ef2a6e..00000000000
--- a/docs/public/_headers
+++ /dev/null
@@ -1,4 +0,0 @@
-/_astro/*
- Cache-Control: public
- Cache-Control: max-age=604800
- Cache-Control: immutable
diff --git a/docs/public/_redirects b/docs/public/_redirects
deleted file mode 100644
index a7aa40820f3..00000000000
--- a/docs/public/_redirects
+++ /dev/null
@@ -1,3 +0,0 @@
-/ph/* https://astro-houston-ph.pages.dev/ph/:splat 200
-/zh/* /zh-cn/:splat
-/:lang/* /:lang/404/ 404
diff --git a/docs/vercel.json b/docs/vercel.json
new file mode 100644
index 00000000000..e5259e57302
--- /dev/null
+++ b/docs/vercel.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://openapi.vercel.sh/vercel.json",
+
+ "routes": [
+ {
+ "src": "^/_astro/(.*)$",
+ "headers": { "cache-control": "public, max-age=31536000, immutable" },
+ "continue": true
+ },
+
+ { "src": "/(ph$|ph/)(.*)", "dest": "https://astro-houston-ph.pages.dev/ph/$2" },
+
+ { "src": "(.*)/([^./]+)$", "dest": "$1/$2/", "status": 301 },
+ { "src": "(.*)/index.html$", "dest": "$1/", "status": 301 },
+
+ { "handle": "filesystem" },
+
+ { "src": "/zh/(.*)", "dest": "/zh-cn/$1", "status": 301 },
+
+ { "src": "/(?[^/]*)/(.*)", "dest": "/$lang/404/", "status": 404 }
+ ]
+}
From 60edb22374a73bc0d02dbe2e26c2566d6400a3e8 Mon Sep 17 00:00:00 2001
From: HiDeoo <494699+HiDeoo@users.noreply.github.com>
Date: Sun, 12 Nov 2023 12:11:21 +0100
Subject: [PATCH 09/22] Fix `test-utils.ts` error (#1059)
---
packages/starlight/__tests__/test-utils.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/packages/starlight/__tests__/test-utils.ts b/packages/starlight/__tests__/test-utils.ts
index b9b0e8991af..96ff4f649e9 100644
--- a/packages/starlight/__tests__/test-utils.ts
+++ b/packages/starlight/__tests__/test-utils.ts
@@ -17,6 +17,7 @@ const frontmatterSchema = docsSchema()({
z.literal('webp'),
z.literal('gif'),
z.literal('svg'),
+ z.literal('avif'),
]),
}),
});
From 0af505081968c2519e5d028d15d4c18e7a215240 Mon Sep 17 00:00:00 2001
From: Chris Swithinbank
Date: Thu, 16 Nov 2023 22:27:18 +0100
Subject: [PATCH 10/22] Expand testing (#1045)
---
.../__tests__/basics/sitemap.test.ts | 40 ++++++++
.../__tests__/remark-rehype/asides.test.ts | 87 ++++++++++++++++++
.../remark-rehype/asides/generates-aside.html | 1 +
.../asides/handles-complex-children.html | 2 +
.../remark-rehype/asides/nested-asides.html | 1 +
.../remark-rehype/rehype-tabs.test.ts | 91 +++++++++++++++++++
packages/starlight/integrations/sitemap.ts | 18 ++--
packages/starlight/package.json | 1 +
pnpm-lock.yaml | 3 +
9 files changed, 237 insertions(+), 7 deletions(-)
create mode 100644 packages/starlight/__tests__/basics/sitemap.test.ts
create mode 100644 packages/starlight/__tests__/remark-rehype/asides.test.ts
create mode 100644 packages/starlight/__tests__/remark-rehype/asides/generates-aside.html
create mode 100644 packages/starlight/__tests__/remark-rehype/asides/handles-complex-children.html
create mode 100644 packages/starlight/__tests__/remark-rehype/asides/nested-asides.html
create mode 100644 packages/starlight/__tests__/remark-rehype/rehype-tabs.test.ts
diff --git a/packages/starlight/__tests__/basics/sitemap.test.ts b/packages/starlight/__tests__/basics/sitemap.test.ts
new file mode 100644
index 00000000000..d33820402be
--- /dev/null
+++ b/packages/starlight/__tests__/basics/sitemap.test.ts
@@ -0,0 +1,40 @@
+import { describe, expect, test } from 'vitest';
+import { getSitemapConfig, starlightSitemap } from '../../integrations/sitemap';
+import type { StarlightConfig } from '../../types';
+import { StarlightConfigSchema, type StarlightUserConfig } from '../../utils/user-config';
+
+describe('starlightSitemap', () => {
+ test('returns @astrojs/sitemap integration', () => {
+ const integration = starlightSitemap({} as StarlightConfig);
+ expect(integration.name).toBe('@astrojs/sitemap');
+ });
+});
+
+describe('getSitemapConfig', () => {
+ test('configures i18n config', () => {
+ const config = getSitemapConfig(
+ StarlightConfigSchema.parse({
+ title: 'i18n test',
+ locales: { root: { lang: 'en', label: 'English' }, fr: { label: 'French' } },
+ } satisfies StarlightUserConfig)
+ );
+ expect(config).toMatchInlineSnapshot(`
+ {
+ "i18n": {
+ "defaultLocale": "root",
+ "locales": {
+ "fr": "fr",
+ "root": "en",
+ },
+ },
+ }
+ `);
+ });
+
+ test('no config for monolingual sites', () => {
+ const config = getSitemapConfig(
+ StarlightConfigSchema.parse({ title: 'i18n test' } satisfies StarlightUserConfig)
+ );
+ expect(config).toMatchInlineSnapshot('{}');
+ });
+});
diff --git a/packages/starlight/__tests__/remark-rehype/asides.test.ts b/packages/starlight/__tests__/remark-rehype/asides.test.ts
new file mode 100644
index 00000000000..57fe4191840
--- /dev/null
+++ b/packages/starlight/__tests__/remark-rehype/asides.test.ts
@@ -0,0 +1,87 @@
+import { createMarkdownProcessor } from '@astrojs/markdown-remark';
+import { describe, expect, test } from 'vitest';
+import { starlightAsides } from '../../integrations/asides';
+
+const processor = await createMarkdownProcessor({
+ remarkPlugins: [...starlightAsides()],
+});
+
+test('generates ', async () => {
+ const res = await processor.render(`
+:::note
+Some text
+:::
+`);
+ expect(res.code).toMatchFileSnapshot('./asides/generates-aside.html');
+});
+
+describe('default labels', () => {
+ test.each([
+ ['note', 'Note'],
+ ['tip', 'Tip'],
+ ['caution', 'Caution'],
+ ['danger', 'Danger'],
+ ])('%s has label %s', async (type, label) => {
+ const res = await processor.render(`
+:::${type}[${label}]
+Some text
+:::
+`);
+ expect(res.code).includes(`aria-label="${label}"`);
+ expect(res.code).includes(` ${label}
`);
+ });
+});
+
+describe('custom labels', () => {
+ test.each(['note', 'tip', 'caution', 'danger'])('%s with custom label', async (type) => {
+ const label = 'Custom Label';
+ const res = await processor.render(`
+:::${type}[${label}]
+Some text
+:::
+ `);
+ expect(res.code).includes(`aria-label="${label}"`);
+ expect(res.code).includes(`${label}`);
+ });
+});
+
+test('ignores unknown directive variants', async () => {
+ const res = await processor.render(`
+:::unknown
+Some text
+:::
+`);
+ expect(res.code).toMatchInlineSnapshot('""');
+});
+
+test('handles complex children', async () => {
+ const res = await processor.render(`
+:::note
+Paragraph [link](/href/).
+
+
+
+
+See more
+
+More.
+
+
+:::
+`);
+ expect(res.code).toMatchFileSnapshot('./asides/handles-complex-children.html');
+});
+
+test('nested asides', async () => {
+ const res = await processor.render(`
+::::note
+Note contents.
+
+:::tip
+Nested tip.
+:::
+
+::::
+`);
+ expect(res.code).toMatchFileSnapshot('./asides/nested-asides.html');
+});
diff --git a/packages/starlight/__tests__/remark-rehype/asides/generates-aside.html b/packages/starlight/__tests__/remark-rehype/asides/generates-aside.html
new file mode 100644
index 00000000000..fb95a152382
--- /dev/null
+++ b/packages/starlight/__tests__/remark-rehype/asides/generates-aside.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/starlight/__tests__/remark-rehype/asides/handles-complex-children.html b/packages/starlight/__tests__/remark-rehype/asides/handles-complex-children.html
new file mode 100644
index 00000000000..8cb4524903b
--- /dev/null
+++ b/packages/starlight/__tests__/remark-rehype/asides/handles-complex-children.html
@@ -0,0 +1,2 @@
+ Note
Paragraph link .
+See more More.
\ No newline at end of file
diff --git a/packages/starlight/__tests__/remark-rehype/asides/nested-asides.html b/packages/starlight/__tests__/remark-rehype/asides/nested-asides.html
new file mode 100644
index 00000000000..51da5fcc4b3
--- /dev/null
+++ b/packages/starlight/__tests__/remark-rehype/asides/nested-asides.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/starlight/__tests__/remark-rehype/rehype-tabs.test.ts b/packages/starlight/__tests__/remark-rehype/rehype-tabs.test.ts
new file mode 100644
index 00000000000..f1f3b1c3155
--- /dev/null
+++ b/packages/starlight/__tests__/remark-rehype/rehype-tabs.test.ts
@@ -0,0 +1,91 @@
+import { expect, test } from 'vitest';
+import { processPanels, TabItemTagname } from '../../user-components/rehype-tabs';
+
+const TabItem = ({ label, slot }: { label: string; slot: string }) =>
+ `<${TabItemTagname} data-label="${label}">${slot}${TabItemTagname}>`;
+
+/** Get an array of HTML strings, one for each `` created by rehype-tabs for each tab item. */
+const extractSections = (html: string) =>
+ [...html.matchAll(//g)].map(([section]) => section);
+
+test('empty component returns no html or panels', () => {
+ const { panels, html } = processPanels('');
+ expect(html).toEqual('');
+ expect(panels).toEqual([]);
+});
+
+test('non-tab-item content is passed unchanged', () => {
+ const input = 'Random paragraph
';
+ const { panels, html } = processPanels(input);
+ expect(html).toEqual(input);
+ expect(panels).toEqual([]);
+});
+
+test('tab items are processed', () => {
+ const label = 'Test';
+ const slot = 'Random paragraph
';
+ const input = TabItem({ label, slot });
+ const { panels, html } = processPanels(input);
+
+ expect(html).toMatchInlineSnapshot(
+ '""'
+ );
+ expect(panels).toHaveLength(1);
+ expect(panels?.[0]?.label).toBe(label);
+ expect(panels?.[0]?.panelId).toMatchInlineSnapshot('"tab-panel-0"');
+ expect(panels?.[0]?.tabId).toMatchInlineSnapshot('"tab-0"');
+});
+
+test('only first item is not hidden', () => {
+ const labels = ['One', 'Two', 'Three'];
+ const input = labels.map((label) => TabItem({ label, slot: `${label}
` })).join('');
+ const { panels, html } = processPanels(input);
+
+ expect(panels).toHaveLength(3);
+ expect(html).toMatchInlineSnapshot(
+ '""'
+ );
+ const sections = extractSections(html);
+ expect(sections).toMatchInlineSnapshot(`
+ [
+ "",
+ "",
+ "",
+ ]
+ `);
+ expect(sections.map((section) => section.includes('hidden'))).toEqual([false, true, true]);
+});
+
+test('applies incrementing ID and aria-labelledby to each tab item', () => {
+ const labels = ['One', 'Two', 'Three'];
+ const input = labels.map((label) => TabItem({ label, slot: `${label}
` })).join('');
+ const { panels, html } = processPanels(input);
+
+ // IDs are incremented globally to ensure they are unique, so we need to extract from the panel data.
+ const firstTabIdMatches = panels?.[0]?.tabId.match(/^tab-(\d)+$/);
+ const firstTabId = parseInt(firstTabIdMatches![1]!, 10);
+
+ extractSections(html).forEach((section, index) => {
+ expect(section).includes(`id="tab-panel-${firstTabId + index}"`);
+ expect(section).includes(`aria-labelledby="tab-${firstTabId + index}"`);
+ });
+});
+
+test('applies tabindex="0" to tab items without focusable content', () => {
+ const input = [
+ TabItem({ label: 'Focusable', slot: `` }),
+ TabItem({ label: 'Not Focusable', slot: `Plain text
` }),
+ TabItem({
+ label: 'Focusable Nested',
+ slot: ``,
+ }),
+ ].join('');
+ const { html } = processPanels(input);
+ expect(html).toMatchInlineSnapshot(
+ '""'
+ );
+ const sections = extractSections(html);
+ expect(sections[0]).not.includes('tabindex="0"');
+ expect(sections[1]).includes('tabindex="0"');
+ expect(sections[2]).not.includes('tabindex="0"');
+});
diff --git a/packages/starlight/integrations/sitemap.ts b/packages/starlight/integrations/sitemap.ts
index ba18af034f1..3b63370ec23 100644
--- a/packages/starlight/integrations/sitemap.ts
+++ b/packages/starlight/integrations/sitemap.ts
@@ -1,19 +1,23 @@
import sitemap, { type SitemapOptions } from '@astrojs/sitemap';
import type { StarlightConfig } from '../types';
-/**
- * A wrapped version of the `@astrojs/sitemap` integration configured based
- * on Starlight i18n config.
- */
-export function starlightSitemap(opts: StarlightConfig) {
+export function getSitemapConfig(opts: StarlightConfig): SitemapOptions {
const sitemapConfig: SitemapOptions = {};
if (opts.isMultilingual) {
sitemapConfig.i18n = {
- defaultLocale: opts.defaultLocale.locale! || 'root',
+ defaultLocale: opts.defaultLocale.locale || 'root',
locales: Object.fromEntries(
Object.entries(opts.locales).map(([locale, config]) => [locale, config?.lang!])
),
};
}
- return sitemap(sitemapConfig);
+ return sitemapConfig;
+}
+
+/**
+ * A wrapped version of the `@astrojs/sitemap` integration configured based
+ * on Starlight i18n config.
+ */
+export function starlightSitemap(opts: StarlightConfig) {
+ return sitemap(getSitemapConfig(opts));
}
diff --git a/packages/starlight/package.json b/packages/starlight/package.json
index 946dc1eb4df..123de1f411f 100644
--- a/packages/starlight/package.json
+++ b/packages/starlight/package.json
@@ -164,6 +164,7 @@
"astro": "^3.2.0"
},
"devDependencies": {
+ "@astrojs/markdown-remark": "^3.2.1",
"@types/node": "^18.16.19",
"@vitest/coverage-v8": "^0.33.0",
"astro": "^3.2.3",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c6035741368..e3e9cf1d112 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -181,6 +181,9 @@ importers:
specifier: ^5.3.7
version: 5.3.7
devDependencies:
+ '@astrojs/markdown-remark':
+ specifier: ^3.2.1
+ version: 3.2.1(astro@3.2.3)
'@types/node':
specifier: ^18.16.19
version: 18.16.19
From 1a8824f3c7e11d6418664ff0d720f16b94ae7586 Mon Sep 17 00:00:00 2001
From: delucis
Date: Thu, 16 Nov 2023 21:27:57 +0000
Subject: [PATCH 11/22] [ci] format
---
.../remark-rehype/asides/generates-aside.html | 17 +++++++-
.../asides/handles-complex-children.html | 25 +++++++++++-
.../remark-rehype/asides/nested-asides.html | 40 ++++++++++++++++++-
3 files changed, 78 insertions(+), 4 deletions(-)
diff --git a/packages/starlight/__tests__/remark-rehype/asides/generates-aside.html b/packages/starlight/__tests__/remark-rehype/asides/generates-aside.html
index fb95a152382..bafb265f997 100644
--- a/packages/starlight/__tests__/remark-rehype/asides/generates-aside.html
+++ b/packages/starlight/__tests__/remark-rehype/asides/generates-aside.html
@@ -1 +1,16 @@
-
\ No newline at end of file
+
diff --git a/packages/starlight/__tests__/remark-rehype/asides/handles-complex-children.html b/packages/starlight/__tests__/remark-rehype/asides/handles-complex-children.html
index 8cb4524903b..27d75df09a5 100644
--- a/packages/starlight/__tests__/remark-rehype/asides/handles-complex-children.html
+++ b/packages/starlight/__tests__/remark-rehype/asides/handles-complex-children.html
@@ -1,2 +1,23 @@
- Note
Paragraph link .
-See more More.
\ No newline at end of file
+
+
+
+ Note
+
+
+ Paragraph link .
+
+
+ See more
+ More.
+
+
+
diff --git a/packages/starlight/__tests__/remark-rehype/asides/nested-asides.html b/packages/starlight/__tests__/remark-rehype/asides/nested-asides.html
index 51da5fcc4b3..44fa4e7f78e 100644
--- a/packages/starlight/__tests__/remark-rehype/asides/nested-asides.html
+++ b/packages/starlight/__tests__/remark-rehype/asides/nested-asides.html
@@ -1 +1,39 @@
-
\ No newline at end of file
+
From d59eb1313a0512dcfd9636beb075745245fa0e6e Mon Sep 17 00:00:00 2001
From: Chris Swithinbank
Date: Thu, 16 Nov 2023 23:34:30 +0100
Subject: [PATCH 12/22] Avoid formatting test snapshots (#1074)
---
.prettierignore | 5 ++-
.../__tests__/remark-rehype/asides.test.ts | 6 +--
.../remark-rehype/asides/generates-aside.html | 16 --------
.../asides/handles-complex-children.html | 23 -----------
.../remark-rehype/asides/nested-asides.html | 39 -------------------
.../snapshots/generates-aside.html | 1 +
.../snapshots/handles-complex-children.html | 2 +
.../snapshots/nested-asides.html | 1 +
8 files changed, 11 insertions(+), 82 deletions(-)
delete mode 100644 packages/starlight/__tests__/remark-rehype/asides/generates-aside.html
delete mode 100644 packages/starlight/__tests__/remark-rehype/asides/handles-complex-children.html
delete mode 100644 packages/starlight/__tests__/remark-rehype/asides/nested-asides.html
create mode 100644 packages/starlight/__tests__/remark-rehype/snapshots/generates-aside.html
create mode 100644 packages/starlight/__tests__/remark-rehype/snapshots/handles-complex-children.html
create mode 100644 packages/starlight/__tests__/remark-rehype/snapshots/nested-asides.html
diff --git a/.prettierignore b/.prettierignore
index 8b16453a2c2..871a65eb470 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -10,4 +10,7 @@
.changeset
# Files
-pnpm-lock.yaml
\ No newline at end of file
+pnpm-lock.yaml
+
+# Test snapshots
+**/__tests__/**/snapshots
diff --git a/packages/starlight/__tests__/remark-rehype/asides.test.ts b/packages/starlight/__tests__/remark-rehype/asides.test.ts
index 57fe4191840..7d1da5a6781 100644
--- a/packages/starlight/__tests__/remark-rehype/asides.test.ts
+++ b/packages/starlight/__tests__/remark-rehype/asides.test.ts
@@ -12,7 +12,7 @@ test('generates ', async () => {
Some text
:::
`);
- expect(res.code).toMatchFileSnapshot('./asides/generates-aside.html');
+ expect(res.code).toMatchFileSnapshot('./snapshots/generates-aside.html');
});
describe('default labels', () => {
@@ -69,7 +69,7 @@ More.
:::
`);
- expect(res.code).toMatchFileSnapshot('./asides/handles-complex-children.html');
+ expect(res.code).toMatchFileSnapshot('./snapshots/handles-complex-children.html');
});
test('nested asides', async () => {
@@ -83,5 +83,5 @@ Nested tip.
::::
`);
- expect(res.code).toMatchFileSnapshot('./asides/nested-asides.html');
+ expect(res.code).toMatchFileSnapshot('./snapshots/nested-asides.html');
});
diff --git a/packages/starlight/__tests__/remark-rehype/asides/generates-aside.html b/packages/starlight/__tests__/remark-rehype/asides/generates-aside.html
deleted file mode 100644
index bafb265f997..00000000000
--- a/packages/starlight/__tests__/remark-rehype/asides/generates-aside.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
diff --git a/packages/starlight/__tests__/remark-rehype/asides/handles-complex-children.html b/packages/starlight/__tests__/remark-rehype/asides/handles-complex-children.html
deleted file mode 100644
index 27d75df09a5..00000000000
--- a/packages/starlight/__tests__/remark-rehype/asides/handles-complex-children.html
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
- Note
-
-
- Paragraph link .
-
-
- See more
- More.
-
-
-
diff --git a/packages/starlight/__tests__/remark-rehype/asides/nested-asides.html b/packages/starlight/__tests__/remark-rehype/asides/nested-asides.html
deleted file mode 100644
index 44fa4e7f78e..00000000000
--- a/packages/starlight/__tests__/remark-rehype/asides/nested-asides.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
diff --git a/packages/starlight/__tests__/remark-rehype/snapshots/generates-aside.html b/packages/starlight/__tests__/remark-rehype/snapshots/generates-aside.html
new file mode 100644
index 00000000000..fb95a152382
--- /dev/null
+++ b/packages/starlight/__tests__/remark-rehype/snapshots/generates-aside.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/starlight/__tests__/remark-rehype/snapshots/handles-complex-children.html b/packages/starlight/__tests__/remark-rehype/snapshots/handles-complex-children.html
new file mode 100644
index 00000000000..8cb4524903b
--- /dev/null
+++ b/packages/starlight/__tests__/remark-rehype/snapshots/handles-complex-children.html
@@ -0,0 +1,2 @@
+ Note
Paragraph link .
+See more More.
\ No newline at end of file
diff --git a/packages/starlight/__tests__/remark-rehype/snapshots/nested-asides.html b/packages/starlight/__tests__/remark-rehype/snapshots/nested-asides.html
new file mode 100644
index 00000000000..51da5fcc4b3
--- /dev/null
+++ b/packages/starlight/__tests__/remark-rehype/snapshots/nested-asides.html
@@ -0,0 +1 @@
+
\ No newline at end of file
From c27495da61f9376236519ed3f08a169f245a189c Mon Sep 17 00:00:00 2001
From: HiDeoo <494699+HiDeoo@users.noreply.github.com>
Date: Fri, 17 Nov 2023 00:35:10 +0100
Subject: [PATCH 13/22] Expose Markdown content styles (#1049)
Co-authored-by: Chris Swithinbank
---
.changeset/warm-birds-smell.md | 5 +
docs/src/content/docs/reference/overrides.md | 2 +
.../components/MarkdownContent.astro | 125 +-----------------
packages/starlight/package.json | 3 +-
packages/starlight/style/markdown.css | 115 ++++++++++++++++
5 files changed, 126 insertions(+), 124 deletions(-)
create mode 100644 .changeset/warm-birds-smell.md
create mode 100644 packages/starlight/style/markdown.css
diff --git a/.changeset/warm-birds-smell.md b/.changeset/warm-birds-smell.md
new file mode 100644
index 00000000000..e23822d9584
--- /dev/null
+++ b/.changeset/warm-birds-smell.md
@@ -0,0 +1,5 @@
+---
+'@astrojs/starlight': patch
+---
+
+Expose Markdown content styles in `@astrojs/starlight/style/markdown.css`
diff --git a/docs/src/content/docs/reference/overrides.md b/docs/src/content/docs/reference/overrides.md
index b3d95be95dd..a9938ad7f0d 100644
--- a/docs/src/content/docs/reference/overrides.md
+++ b/docs/src/content/docs/reference/overrides.md
@@ -342,6 +342,8 @@ The default implementation shows a large title, tagline, and call-to-action link
Component rendered around each page’s main content.
The default implementation sets up basic styles to apply to Markdown content.
+The Markdown content styles are also exposed in `@astrojs/starlight/style/markdown.css` and scoped to the `.sl-markdown-content` CSS class.
+
---
### Footer
diff --git a/packages/starlight/components/MarkdownContent.astro b/packages/starlight/components/MarkdownContent.astro
index ffb0108a6d0..0d40cd47ed2 100644
--- a/packages/starlight/components/MarkdownContent.astro
+++ b/packages/starlight/components/MarkdownContent.astro
@@ -1,127 +1,6 @@
---
import type { Props } from '../props';
+import '../style/markdown.css';
---
-
-
-
+
diff --git a/packages/starlight/package.json b/packages/starlight/package.json
index 123de1f411f..f2167b14144 100644
--- a/packages/starlight/package.json
+++ b/packages/starlight/package.json
@@ -158,7 +158,8 @@
"./schema": "./schema.ts",
"./types": "./types.ts",
"./index.astro": "./index.astro",
- "./404.astro": "./404.astro"
+ "./404.astro": "./404.astro",
+ "./style/markdown.css": "./style/markdown.css"
},
"peerDependencies": {
"astro": "^3.2.0"
diff --git a/packages/starlight/style/markdown.css b/packages/starlight/style/markdown.css
new file mode 100644
index 00000000000..c4f522eb5eb
--- /dev/null
+++ b/packages/starlight/style/markdown.css
@@ -0,0 +1,115 @@
+.sl-markdown-content
+ :not(a, strong, em, del, span, input, code)
+ + :not(a, strong, em, del, span, input, code, :where(.not-content *)) {
+ margin-top: 1.5rem;
+}
+
+/* Headings after non-headings have more spacing. */
+.sl-markdown-content
+ :not(h1, h2, h3, h4, h5, h6)
+ + :is(h1, h2, h3, h4, h5, h6):not(:where(.not-content *)) {
+ margin-top: 2.5rem;
+}
+
+.sl-markdown-content li + li:not(:where(.not-content *)),
+.sl-markdown-content dt + dt:not(:where(.not-content *)),
+.sl-markdown-content dt + dd:not(:where(.not-content *)),
+.sl-markdown-content dd + dd:not(:where(.not-content *)) {
+ margin-top: 0.25rem;
+}
+
+.sl-markdown-content
+ li
+ > :last-child:not(li, ul, ol):not(a, strong, em, del, span, input, :where(.not-content *)) {
+ margin-bottom: 1.25rem;
+}
+
+.sl-markdown-content dt:not(:where(.not-content *)) {
+ font-weight: 700;
+}
+.sl-markdown-content dd:not(:where(.not-content *)) {
+ padding-inline-start: 1rem;
+}
+
+.sl-markdown-content :is(h1, h2, h3, h4, h5, h6):not(:where(.not-content *)) {
+ color: var(--sl-color-white);
+ line-height: var(--sl-line-height-headings);
+ font-weight: 600;
+}
+
+.sl-markdown-content :is(img, picture, video, canvas, svg, iframe):not(:where(.not-content *)) {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+
+.sl-markdown-content h1:not(:where(.not-content *)) {
+ font-size: var(--sl-text-h1);
+}
+.sl-markdown-content h2:not(:where(.not-content *)) {
+ font-size: var(--sl-text-h2);
+}
+.sl-markdown-content h3:not(:where(.not-content *)) {
+ font-size: var(--sl-text-h3);
+}
+.sl-markdown-content h4:not(:where(.not-content *)) {
+ font-size: var(--sl-text-h4);
+}
+.sl-markdown-content h5:not(:where(.not-content *)) {
+ font-size: var(--sl-text-h5);
+}
+.sl-markdown-content h6:not(:where(.not-content *)) {
+ font-size: var(--sl-text-h6);
+}
+
+.sl-markdown-content a:not(:where(.not-content *)) {
+ color: var(--sl-color-text-accent);
+}
+.sl-markdown-content a:hover:not(:where(.not-content *)) {
+ color: var(--sl-color-white);
+}
+
+.sl-markdown-content code:not(:where(.not-content *)) {
+ background-color: var(--sl-color-bg-inline-code);
+ margin-block: -0.125rem;
+ padding: 0.125rem 0.375rem;
+ font-size: var(--sl-text-code-sm);
+}
+.sl-markdown-content :is(h1, h2, h3, h4, h5, h6) code {
+ font-size: inherit;
+}
+
+.sl-markdown-content pre:not(:where(.not-content *)) {
+ border: 1px solid var(--sl-color-gray-5);
+ padding: 0.75rem 1rem;
+ font-size: var(--sl-text-code);
+ tab-size: 2;
+}
+
+.sl-markdown-content pre code:not(:where(.not-content *)) {
+ all: unset;
+ font-family: var(--__sl-font-mono);
+}
+
+.sl-markdown-content blockquote:not(:where(.not-content *)) {
+ border-inline-start: 1px solid var(--sl-color-gray-5);
+ padding-inline-start: 1rem;
+}
+
+.sl-markdown-content table:not(:where(.not-content *)) {
+ display: block;
+ overflow: auto;
+ border-collapse: collapse;
+}
+.sl-markdown-content tr:nth-child(2n):not(:where(.not-content *)) {
+ background-color: var(--sl-color-gray-7, var(--sl-color-gray-6));
+}
+.sl-markdown-content :is(th, td):not(:where(.not-content *)) {
+ border: 1px solid var(--sl-color-hairline-light);
+ padding: 0.375rem 0.8125rem;
+}
+
+.sl-markdown-content hr:not(:where(.not-content *)) {
+ border: 0;
+ border-bottom: 1px solid var(--sl-color-hairline);
+}
From b86f3608f03be9455ec1d5ba11820c9bf601ad1e Mon Sep 17 00:00:00 2001
From: Genteure
Date: Fri, 17 Nov 2023 08:01:32 +0800
Subject: [PATCH 14/22] Fix sidebar highlighting when path contains non-ASCII
characters (#1069)
Co-authored-by: HiDeoo <494699+HiDeoo@users.noreply.github.com>
Co-authored-by: Chris Swithinbank
---
.changeset/healthy-rabbits-grab.md | 5 +
.../sidebar/navigation-unicode.test.ts | 117 ++++++++++++++++++
packages/starlight/utils/navigation.ts | 2 +-
3 files changed, 123 insertions(+), 1 deletion(-)
create mode 100644 .changeset/healthy-rabbits-grab.md
create mode 100644 packages/starlight/__tests__/sidebar/navigation-unicode.test.ts
diff --git a/.changeset/healthy-rabbits-grab.md b/.changeset/healthy-rabbits-grab.md
new file mode 100644
index 00000000000..1bde31b8081
--- /dev/null
+++ b/.changeset/healthy-rabbits-grab.md
@@ -0,0 +1,5 @@
+---
+'@astrojs/starlight': patch
+---
+
+Fix sidebar highlighting and navigation buttons for pages with path containing non-ASCII characters
diff --git a/packages/starlight/__tests__/sidebar/navigation-unicode.test.ts b/packages/starlight/__tests__/sidebar/navigation-unicode.test.ts
new file mode 100644
index 00000000000..5e280af7ddf
--- /dev/null
+++ b/packages/starlight/__tests__/sidebar/navigation-unicode.test.ts
@@ -0,0 +1,117 @@
+import { describe, expect, test, vi } from 'vitest';
+import { getSidebar } from '../../utils/navigation';
+
+vi.mock('astro:content', async () =>
+ (await import('../test-utils')).mockedAstroContent({
+ docs: [
+ ['index.mdx', { title: 'Home Page' }],
+ ['environmental-impact.md', { title: 'Eco-friendly docs' }],
+ ['reference/configuration.mdx', { title: 'Config Reference' }],
+ ['reference/frontmatter.md', { title: 'Frontmatter Reference' }],
+ // @ts-expect-error — Using a slug not present in Starlight docs site
+ ['api/v1/用户.md', { title: 'Path with non-ASCII characters' }],
+ ['guides/components.mdx', { title: 'Components' }],
+ ],
+ })
+);
+
+describe('getSidebar', () => {
+ test('matches current page when path contains non-ascii characters', () => {
+ expect(getSidebar('/api/v1/%E7%94%A8%E6%88%B7', undefined)).toMatchInlineSnapshot(`
+ [
+ {
+ "attrs": {},
+ "badge": undefined,
+ "href": "/",
+ "isCurrent": false,
+ "label": "Home",
+ "type": "link",
+ },
+ {
+ "badge": undefined,
+ "collapsed": false,
+ "entries": [
+ {
+ "attrs": {},
+ "badge": {
+ "text": "New",
+ "variant": "success",
+ },
+ "href": "/intro/",
+ "isCurrent": false,
+ "label": "Introduction",
+ "type": "link",
+ },
+ {
+ "attrs": {},
+ "badge": {
+ "text": "Deprecated",
+ "variant": "default",
+ },
+ "href": "/next-steps/",
+ "isCurrent": false,
+ "label": "Next Steps",
+ "type": "link",
+ },
+ {
+ "attrs": {
+ "class": "showcase-link",
+ "target": "_blank",
+ },
+ "badge": undefined,
+ "href": "/showcase/",
+ "isCurrent": false,
+ "label": "Showcase",
+ "type": "link",
+ },
+ ],
+ "label": "Start Here",
+ "type": "group",
+ },
+ {
+ "badge": {
+ "text": "Experimental",
+ "variant": "default",
+ },
+ "collapsed": false,
+ "entries": [
+ {
+ "attrs": {},
+ "badge": undefined,
+ "href": "/reference/configuration/",
+ "isCurrent": false,
+ "label": "Config Reference",
+ "type": "link",
+ },
+ {
+ "attrs": {},
+ "badge": undefined,
+ "href": "/reference/frontmatter/",
+ "isCurrent": false,
+ "label": "Frontmatter Reference",
+ "type": "link",
+ },
+ ],
+ "label": "Reference",
+ "type": "group",
+ },
+ {
+ "badge": undefined,
+ "collapsed": false,
+ "entries": [
+ {
+ "attrs": {},
+ "badge": undefined,
+ "href": "/api/v1/用户/",
+ "isCurrent": true,
+ "label": "Path with non-ASCII characters",
+ "type": "link",
+ },
+ ],
+ "label": "API v1",
+ "type": "group",
+ },
+ ]
+ `);
+ });
+});
diff --git a/packages/starlight/utils/navigation.ts b/packages/starlight/utils/navigation.ts
index 5710f553206..1e74932f56e 100644
--- a/packages/starlight/utils/navigation.ts
+++ b/packages/starlight/utils/navigation.ts
@@ -135,7 +135,7 @@ function makeLink(
attrs?: LinkHTMLAttributes
): Link {
if (!isAbsolute(href)) href = pathWithBase(href);
- const isCurrent = href === ensureTrailingSlash(currentPathname);
+ const isCurrent = encodeURI(href) === ensureTrailingSlash(currentPathname);
return { type: 'link', label, href, isCurrent, badge, attrs: attrs ?? {} };
}
From c35e41c8d7f80701f77cef3aa6ce2078cdaa5590 Mon Sep 17 00:00:00 2001
From: "Houston (Bot)" <108291165+astrobot-houston@users.noreply.github.com>
Date: Thu, 16 Nov 2023 16:06:07 -0800
Subject: [PATCH 15/22] [ci] release (#1027)
Co-authored-by: github-actions[bot]
---
.changeset/healthy-rabbits-grab.md | 5 -----
.changeset/polite-colts-turn.md | 5 -----
.changeset/quiet-humans-lie.md | 5 -----
.changeset/warm-birds-smell.md | 5 -----
examples/basics/package.json | 2 +-
examples/tailwind/package.json | 2 +-
packages/starlight/CHANGELOG.md | 30 +++++++++++++++++++++---------
packages/starlight/package.json | 2 +-
pnpm-lock.yaml | 4 ++--
9 files changed, 26 insertions(+), 34 deletions(-)
delete mode 100644 .changeset/healthy-rabbits-grab.md
delete mode 100644 .changeset/polite-colts-turn.md
delete mode 100644 .changeset/quiet-humans-lie.md
delete mode 100644 .changeset/warm-birds-smell.md
diff --git a/.changeset/healthy-rabbits-grab.md b/.changeset/healthy-rabbits-grab.md
deleted file mode 100644
index 1bde31b8081..00000000000
--- a/.changeset/healthy-rabbits-grab.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@astrojs/starlight': patch
----
-
-Fix sidebar highlighting and navigation buttons for pages with path containing non-ASCII characters
diff --git a/.changeset/polite-colts-turn.md b/.changeset/polite-colts-turn.md
deleted file mode 100644
index 0e46da7f828..00000000000
--- a/.changeset/polite-colts-turn.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@astrojs/starlight': patch
----
-
-Internal: fix import issue in translation string loading mechanism
diff --git a/.changeset/quiet-humans-lie.md b/.changeset/quiet-humans-lie.md
deleted file mode 100644
index 08611098bcc..00000000000
--- a/.changeset/quiet-humans-lie.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@astrojs/starlight': patch
----
-
-Fix last updated dates for pages displaying fallback content
diff --git a/.changeset/warm-birds-smell.md b/.changeset/warm-birds-smell.md
deleted file mode 100644
index e23822d9584..00000000000
--- a/.changeset/warm-birds-smell.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@astrojs/starlight': patch
----
-
-Expose Markdown content styles in `@astrojs/starlight/style/markdown.css`
diff --git a/examples/basics/package.json b/examples/basics/package.json
index b7a528788f1..926d71d4b80 100644
--- a/examples/basics/package.json
+++ b/examples/basics/package.json
@@ -11,7 +11,7 @@
"astro": "astro"
},
"dependencies": {
- "@astrojs/starlight": "^0.12.0",
+ "@astrojs/starlight": "^0.12.1",
"astro": "^3.2.3",
"sharp": "^0.32.5"
}
diff --git a/examples/tailwind/package.json b/examples/tailwind/package.json
index 25851c56001..35727482b5b 100644
--- a/examples/tailwind/package.json
+++ b/examples/tailwind/package.json
@@ -11,7 +11,7 @@
"astro": "astro"
},
"dependencies": {
- "@astrojs/starlight": "^0.12.0",
+ "@astrojs/starlight": "^0.12.1",
"@astrojs/starlight-tailwind": "^2.0.1",
"@astrojs/tailwind": "^5.0.0",
"astro": "^3.2.3",
diff --git a/packages/starlight/CHANGELOG.md b/packages/starlight/CHANGELOG.md
index 901e1a813cb..a9bf0f95152 100644
--- a/packages/starlight/CHANGELOG.md
+++ b/packages/starlight/CHANGELOG.md
@@ -1,5 +1,17 @@
# @astrojs/starlight
+## 0.12.1
+
+### Patch Changes
+
+- [#1069](https://github.com/withastro/starlight/pull/1069) [`b86f360`](https://github.com/withastro/starlight/commit/b86f3608f03be9455ec1d5ba11820c9bf601ad1e) Thanks [@Genteure](https://github.com/Genteure)! - Fix sidebar highlighting and navigation buttons for pages with path containing non-ASCII characters
+
+- [#1025](https://github.com/withastro/starlight/pull/1025) [`0d1e75e`](https://github.com/withastro/starlight/commit/0d1e75e17269ddac3eb15b7dfb4480da1bb01c6c) Thanks [@HiDeoo](https://github.com/HiDeoo)! - Internal: fix import issue in translation string loading mechanism
+
+- [#1044](https://github.com/withastro/starlight/pull/1044) [`a5a9754`](https://github.com/withastro/starlight/commit/a5a9754f111b97abfd277d99759e9857aa0fb22b) Thanks [@HiDeoo](https://github.com/HiDeoo)! - Fix last updated dates for pages displaying fallback content
+
+- [#1049](https://github.com/withastro/starlight/pull/1049) [`c27495d`](https://github.com/withastro/starlight/commit/c27495da61f9376236519ed3f08a169f245a189c) Thanks [@HiDeoo](https://github.com/HiDeoo)! - Expose Markdown content styles in `@astrojs/starlight/style/markdown.css`
+
## 0.12.0
### Minor Changes
@@ -281,16 +293,16 @@
```css
:root {
- --sl-hue-accent: 234;
- --sl-color-accent-low: hsl(var(--sl-hue-accent), 54%, 20%);
- --sl-color-accent: hsl(var(--sl-hue-accent), 100%, 60%);
- --sl-color-accent-high: hsl(var(--sl-hue-accent), 100%, 87%);
+ --sl-hue-accent: 234;
+ --sl-color-accent-low: hsl(var(--sl-hue-accent), 54%, 20%);
+ --sl-color-accent: hsl(var(--sl-hue-accent), 100%, 60%);
+ --sl-color-accent-high: hsl(var(--sl-hue-accent), 100%, 87%);
}
:root[data-theme='light'] {
- --sl-color-accent-high: hsl(var(--sl-hue-accent), 80%, 30%);
- --sl-color-accent: hsl(var(--sl-hue-accent), 90%, 60%);
- --sl-color-accent-low: hsl(var(--sl-hue-accent), 88%, 90%);
+ --sl-color-accent-high: hsl(var(--sl-hue-accent), 80%, 30%);
+ --sl-color-accent: hsl(var(--sl-hue-accent), 90%, 60%);
+ --sl-color-accent-low: hsl(var(--sl-hue-accent), 88%, 90%);
}
```
@@ -669,8 +681,8 @@
```json
{
- "search.label": "Suchen",
- "search.shortcutLabel": "(Drücke / zum Suchen)"
+ "search.label": "Suchen",
+ "search.shortcutLabel": "(Drücke / zum Suchen)"
}
```
diff --git a/packages/starlight/package.json b/packages/starlight/package.json
index f2167b14144..3ff8403eaf0 100644
--- a/packages/starlight/package.json
+++ b/packages/starlight/package.json
@@ -1,6 +1,6 @@
{
"name": "@astrojs/starlight",
- "version": "0.12.0",
+ "version": "0.12.1",
"description": "Build beautiful, high-performance documentation websites with Astro",
"scripts": {
"test": "vitest",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e3e9cf1d112..9946589d184 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -103,7 +103,7 @@ importers:
examples/basics:
dependencies:
'@astrojs/starlight':
- specifier: ^0.12.0
+ specifier: ^0.12.1
version: link:../../packages/starlight
astro:
specifier: ^3.2.3
@@ -115,7 +115,7 @@ importers:
examples/tailwind:
dependencies:
'@astrojs/starlight':
- specifier: ^0.12.0
+ specifier: ^0.12.1
version: link:../../packages/starlight
'@astrojs/starlight-tailwind':
specifier: ^2.0.1
From 910aa0b21cb55c89a11907e5d0e2dfad7b89fd62 Mon Sep 17 00:00:00 2001
From: delucis
Date: Fri, 17 Nov 2023 00:06:48 +0000
Subject: [PATCH 16/22] [ci] format
---
packages/starlight/CHANGELOG.md | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/packages/starlight/CHANGELOG.md b/packages/starlight/CHANGELOG.md
index a9bf0f95152..01931083f14 100644
--- a/packages/starlight/CHANGELOG.md
+++ b/packages/starlight/CHANGELOG.md
@@ -293,16 +293,16 @@
```css
:root {
- --sl-hue-accent: 234;
- --sl-color-accent-low: hsl(var(--sl-hue-accent), 54%, 20%);
- --sl-color-accent: hsl(var(--sl-hue-accent), 100%, 60%);
- --sl-color-accent-high: hsl(var(--sl-hue-accent), 100%, 87%);
+ --sl-hue-accent: 234;
+ --sl-color-accent-low: hsl(var(--sl-hue-accent), 54%, 20%);
+ --sl-color-accent: hsl(var(--sl-hue-accent), 100%, 60%);
+ --sl-color-accent-high: hsl(var(--sl-hue-accent), 100%, 87%);
}
:root[data-theme='light'] {
- --sl-color-accent-high: hsl(var(--sl-hue-accent), 80%, 30%);
- --sl-color-accent: hsl(var(--sl-hue-accent), 90%, 60%);
- --sl-color-accent-low: hsl(var(--sl-hue-accent), 88%, 90%);
+ --sl-color-accent-high: hsl(var(--sl-hue-accent), 80%, 30%);
+ --sl-color-accent: hsl(var(--sl-hue-accent), 90%, 60%);
+ --sl-color-accent-low: hsl(var(--sl-hue-accent), 88%, 90%);
}
```
@@ -681,8 +681,8 @@
```json
{
- "search.label": "Suchen",
- "search.shortcutLabel": "(Drücke / zum Suchen)"
+ "search.label": "Suchen",
+ "search.shortcutLabel": "(Drücke / zum Suchen)"
}
```
From 2f2adf29f2a13d5ff0f1577207210745a5ae7405 Mon Sep 17 00:00:00 2001
From: Russ Biggs
Date: Fri, 17 Nov 2023 03:13:13 -0700
Subject: [PATCH 17/22] add Slack icon (#1075)
Co-authored-by: Chris Swithinbank
---
.changeset/kind-boats-train.md | 5 +++++
packages/starlight/components/Icons.ts | 2 ++
packages/starlight/schemas/social.ts | 2 ++
3 files changed, 9 insertions(+)
create mode 100644 .changeset/kind-boats-train.md
diff --git a/.changeset/kind-boats-train.md b/.changeset/kind-boats-train.md
new file mode 100644
index 00000000000..83267d880ed
--- /dev/null
+++ b/.changeset/kind-boats-train.md
@@ -0,0 +1,5 @@
+---
+'@astrojs/starlight': patch
+---
+
+Add Slack social link icon
diff --git a/packages/starlight/components/Icons.ts b/packages/starlight/components/Icons.ts
index f6910737782..6446a5ae8a0 100644
--- a/packages/starlight/components/Icons.ts
+++ b/packages/starlight/components/Icons.ts
@@ -99,4 +99,6 @@ export const Icons = {
' ',
patreon:
' ',
+ slack:
+ ' ',
};
diff --git a/packages/starlight/schemas/social.ts b/packages/starlight/schemas/social.ts
index b8aac4b60d0..6882f9f8a36 100644
--- a/packages/starlight/schemas/social.ts
+++ b/packages/starlight/schemas/social.ts
@@ -24,6 +24,7 @@ export const socialLinks = [
'email',
'reddit',
'patreon',
+ 'slack',
] as const;
export const SocialLinksSchema = () =>
@@ -63,6 +64,7 @@ export const SocialLinksSchema = () =>
email: 'Email',
reddit: 'Reddit',
patreon: 'Patreon',
+ slack: 'Slack',
}[key];
labelledLinks[key] = { label, url };
}
From 1ec69e97a30b2f4aae1a9a1f9013ceed92df5adc Mon Sep 17 00:00:00 2001
From: Omar
Date: Fri, 17 Nov 2023 03:14:06 -0800
Subject: [PATCH 18/22] add new example to showcase (#1070)
Co-authored-by: Chris Swithinbank
---
.../src/assets/showcase/docs.ethfollow.xyz.png | Bin 0 -> 106641 bytes
docs/src/components/showcase-sites.astro | 5 +++++
2 files changed, 5 insertions(+)
create mode 100644 docs/src/assets/showcase/docs.ethfollow.xyz.png
diff --git a/docs/src/assets/showcase/docs.ethfollow.xyz.png b/docs/src/assets/showcase/docs.ethfollow.xyz.png
new file mode 100644
index 0000000000000000000000000000000000000000..c62f659b0b4f0401fee3559df8442a7331f218fd
GIT binary patch
literal 106641
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