diff --git a/docs/src/content/docs/guides/i18n.mdx b/docs/src/content/docs/guides/i18n.mdx
index 7591a5340fe..803d1372ae1 100644
--- a/docs/src/content/docs/guides/i18n.mdx
+++ b/docs/src/content/docs/guides/i18n.mdx
@@ -282,7 +282,7 @@ Learn more about content collection schemas in [“Defining a collection schema
You can access Starlight’s [built-in UI strings](/guides/i18n/#translate-starlights-ui) as well as [user-defined](/guides/i18n/#extend-translation-schema), and [plugin-provided](/reference/plugins/#injecttranslations) UI strings through a unified API powered by [i18next](https://www.i18next.com/).
This includes support for features like [interpolation](https://www.i18next.com/translation-function/interpolation) and [pluralization](https://www.i18next.com/translation-function/plurals).
-In Astro components, this API is available as part of the [global `Astro` object](https://docs.astro.build/en/reference/api-reference/#astrolocals) as `Astro.locals.t`:
+In Astro components, this API is available as part of the [global `Astro` object](https://docs.astro.build/en/reference/api-reference/#locals) as `Astro.locals.t`:
```astro title="example.astro"
@@ -290,7 +290,7 @@ In Astro components, this API is available as part of the [global `Astro` object
```
-You can also use the API in [endpoints](https://docs.astro.build/en/guides/endpoints/), where the `locals` object is available as part of the [endpoint context](https://docs.astro.build/en/reference/api-reference/#contextlocals):
+You can also use the API in [endpoints](https://docs.astro.build/en/guides/endpoints/), where the `locals` object is available as part of the [endpoint context](https://docs.astro.build/en/reference/api-reference/#locals):
```ts title="src/pages/404.ts"
export const GET = (context) => {
@@ -391,7 +391,7 @@ See the [`dir()` reference in the i18next documentation](https://www.i18next.com
## Accessing the current locale
-You can use [`Astro.currentLocale`](https://docs.astro.build/en/reference/api-reference/#astrocurrentlocale) to read the current locale in `.astro` components.
+You can use [`Astro.currentLocale`](https://docs.astro.build/en/reference/api-reference/#currentlocale) to read the current locale in `.astro` components.
The following example reads the current locale and uses it with the [`getRelativeLocaleUrl()`](https://docs.astro.build/en/reference/modules/astro-i18n/#getrelativelocaleurl) helper to generate a link to an about page in the current language:
diff --git a/docs/src/content/docs/guides/overriding-components.mdx b/docs/src/content/docs/guides/overriding-components.mdx
index edac98b2f1e..dc465589a53 100644
--- a/docs/src/content/docs/guides/overriding-components.mdx
+++ b/docs/src/content/docs/guides/overriding-components.mdx
@@ -141,7 +141,7 @@ In the following example, a component overriding Starlight's [`Footer`](/referen
import type { Props } from '@astrojs/starlight/props';
import Default from '@astrojs/starlight/components/Footer.astro';
-const isHomepage = Astro.props.slug === '';
+const isHomepage = Astro.props.id === '';
---
{
diff --git a/docs/src/content/docs/ko/components/using-components.mdx b/docs/src/content/docs/ko/components/using-components.mdx
index 2521fa4247d..86c69e45118 100644
--- a/docs/src/content/docs/ko/components/using-components.mdx
+++ b/docs/src/content/docs/ko/components/using-components.mdx
@@ -9,7 +9,7 @@ sidebar:
링크 카드나 YouTube 삽입 등을 예로 들 수 있습니다.
Starlight는 [MDX](https://mdxjs.com/) 및 [Markdoc](https://markdoc.dev/) 파일에서 컴포넌트 사용을 지원하며 사용할 수 있는 몇 가지 공통 컴포넌트를 제공합니다.
-[Astro 문서에서 컴포넌트 구축에 대해 자세히 알아보세요](https://docs.astro.build/ko/core-concepts/astro-components/).
+[Astro 문서에서 컴포넌트 구축에 대해 자세히 알아보세요](https://docs.astro.build/ko/basics/astro-components/).
## MDX에서 컴포넌트 사용
@@ -30,7 +30,7 @@ import CustomCard from '../../components/CustomCard.astro';
컴포넌트에는 **중첩된 콘텐츠**가 포함될 수도 있습니다.
```
-Starlight는 Astro로 구동되므로 [지원되는 UI 프레임워크(React, Preact, Svelte, Vue, Solid, Alpine)](https://docs.astro.build/ko/core-concepts/framework-components/)로 빌드된 컴포넌트를 MDX 파일에 추가할 수 있습니다.
+Starlight는 Astro로 구동되므로 [지원되는 UI 프레임워크(React, Preact, Svelte, Vue, Solid, Alpine)](https://docs.astro.build/ko/guides/framework-components/)로 빌드된 컴포넌트를 MDX 파일에 추가할 수 있습니다.
Astro 문서에서 [MDX에서 컴포넌트 사용](https://docs.astro.build/ko/guides/integrations-guide/mdx/#mdx에서-컴포넌트-사용)에 대해 자세히 알아보세요.
## Markdoc에서 컴포넌트 사용
diff --git a/docs/src/content/docs/ko/environmental-impact.md b/docs/src/content/docs/ko/environmental-impact.md
index f97533f7a40..13d847e303f 100644
--- a/docs/src/content/docs/ko/environmental-impact.md
+++ b/docs/src/content/docs/ko/environmental-impact.md
@@ -138,6 +138,6 @@ JavaScript를 분석하고 컴파일하는 것은 브라우저가 수행해야
[sf]: https://www.sciencefocus.com/science/what-is-the-carbon-footprint-of-the-internet/
[bbc]: https://www.bbc.com/future/article/20200305-why-your-internet-habits-are-not-as-clean-as-you-think
[http]: https://httparchive.org/reports/state-of-the-web
-[assets]: https://docs.astro.build/ko/guides/assets/
+[assets]: https://docs.astro.build/ko/guides/images/
[islands]: https://docs.astro.build/ko/concepts/islands/
[wcc]: https://www.websitecarbon.com/
diff --git a/docs/src/content/docs/ko/guides/authoring-content.mdx b/docs/src/content/docs/ko/guides/authoring-content.mdx
index de4770edd35..f193a1532f5 100644
--- a/docs/src/content/docs/ko/guides/authoring-content.mdx
+++ b/docs/src/content/docs/ko/guides/authoring-content.mdx
@@ -45,7 +45,7 @@ title: 페이지 제목
## 이미지
-Starlight의 이미지는 [Astro에 내장된 최적화된 자산 지원](https://docs.astro.build/ko/guides/assets/)을 사용합니다.
+Starlight의 이미지는 [Astro에 내장된 최적화된 자산 지원](https://docs.astro.build/ko/guides/images/)을 사용합니다.
Markdown 및 MDX는 스크린 리더 및 보조 기술에서 사용되는 대체 텍스트가 포함된 이미지를 표시하기 위한 Markdown 구문을 지원합니다.
@@ -105,7 +105,7 @@ description: Starlight에 내장된 링크를 사용하는 방법
레벨 2 (``) 및 레벨 3 (``) 제목이 페이지 목차에 자동으로 나타납니다.
-[Astro 공식 문서](https://docs.astro.build/ko/guides/markdown-content/#heading-ids)에서 Astro가 제목의 `id`를 처리하는 방법에 대해 자세히 알아보세요.
+[Astro 공식 문서](https://docs.astro.build/ko/guides/markdown-content/#제목-id)에서 Astro가 제목의 `id`를 처리하는 방법에 대해 자세히 알아보세요.
## 보조 내용
@@ -144,12 +144,12 @@ npm create astro@latest -- --template starlight
:::tip[알고 계셨나요?]
-Astro는 ["Islands Architecture"](https://docs.astro.build/ko/concepts/islands/)를 사용하여 더 빠른 웹사이트를 구축할 수 있도록 도와줍니다.
+Astro는 ["아일랜드 아키텍처"](https://docs.astro.build/ko/concepts/islands/)를 사용하여 더 빠른 웹사이트를 구축할 수 있도록 도와줍니다.
:::
```md
:::tip[알고 계셨나요?]
-Astro는 ["Islands Architecture"](https://docs.astro.build/ko/concepts/islands/)를 사용하여 더 빠른 웹사이트를 구축할 수 있도록 도와줍니다.
+Astro는 ["아일랜드 아키텍처"](https://docs.astro.build/ko/concepts/islands/)를 사용하여 더 빠른 웹사이트를 구축할 수 있도록 도와줍니다.
:::
```
diff --git a/docs/src/content/docs/ko/guides/overriding-components.mdx b/docs/src/content/docs/ko/guides/overriding-components.mdx
index 04ef5f9130b..20925961cf8 100644
--- a/docs/src/content/docs/ko/guides/overriding-components.mdx
+++ b/docs/src/content/docs/ko/guides/overriding-components.mdx
@@ -84,7 +84,7 @@ import Default from '@astrojs/starlight/components/SocialIcons.astro';
사용자 정의 컴포넌트 내부에 내장 컴포넌트를 렌더링하는 경우:
- 전개 연산자를 사용하여 내장 컴포넌트에 `Astro.props`의 모든 속성을 전달합니다. 이를 통해, 내장 컴포넌트는 렌더링에 필요한 모든 데이터를 전달받습니다.
-- 기본 컴포넌트 내에 [``](https://docs.astro.build/ko/core-concepts/astro-components/#슬롯)을 추가합니다. 이를 통해, 하위 컴포넌트를 전달받은 경우, Astro가 전달받은 컴포넌트를 렌더링할 위치를 알 수 있습니다.
+- 기본 컴포넌트 내에 [``](https://docs.astro.build/ko/basics/astro-components/#슬롯)을 추가합니다. 이를 통해, 하위 컴포넌트를 전달받은 경우, Astro가 전달받은 컴포넌트를 렌더링할 위치를 알 수 있습니다.
[명명된 슬롯](https://docs.astro.build/ko/basics/astro-components/#명명된-슬롯)이 포함된 [`PageFrame`](/ko/reference/overrides/#pageframe) 또는 [`TwoColumnContent`](/ko/reference/overrides/#twocolumncontent) 컴포넌트를 재사용하는 경우 이러한 슬롯도 [전송](https://docs.astro.build/ko/basics/astro-components/#슬롯-전송)해야 합니다.
@@ -155,4 +155,4 @@ const isHomepage = Astro.props.slug === '';
}
```
-[Astro의 템플릿 구문 가이드](https://docs.astro.build/ko/core-concepts/astro-syntax/#dynamic-html)에서 조건부 렌더링에 대해 자세히 알아보세요.
+[Astro의 템플릿 구문 가이드](https://docs.astro.build/ko/basics/astro-syntax/#동적-html)에서 조건부 렌더링에 대해 자세히 알아보세요.
diff --git a/docs/src/content/docs/ko/guides/project-structure.mdx b/docs/src/content/docs/ko/guides/project-structure.mdx
index 89f1ed295db..04d8c56e950 100644
--- a/docs/src/content/docs/ko/guides/project-structure.mdx
+++ b/docs/src/content/docs/ko/guides/project-structure.mdx
@@ -5,12 +5,12 @@ description: Starlight 프로젝트에서 파일을 구성하는 방법을 알
이 가이드에서는 Starlight 프로젝트가 구성되는 방법과 프로젝트의 다양한 파일이 수행하는 작업을 보여줍니다.
-Starlight 프로젝트는 일반적으로 다른 Astro 프로젝트와 동일한 파일 및 디렉터리 구조를 따릅니다. 자세한 내용은 [Astro의 프로젝트 구조 문서](https://docs.astro.build/ko/core-concepts/project-structure/)를 참조하세요.
+Starlight 프로젝트는 일반적으로 다른 Astro 프로젝트와 동일한 파일 및 디렉터리 구조를 따릅니다. 자세한 내용은 [Astro의 프로젝트 구조 문서](https://docs.astro.build/ko/basics/project-structure/)를 참조하세요.
## 파일 및 디렉터리
- `astro.config.mjs` — Starlight 통합 및 구성이 포함된 Astro 구성 파일 입니다.
-- `src/content/config.ts` — Starlight의 프론트매터 스키마를 프로젝트에 추가하는 콘텐츠 컬렉션 구성 파일입니다.
+- `src/content.config.ts` — Starlight의 프론트매터 스키마를 프로젝트에 추가하는 콘텐츠 컬렉션 구성 파일입니다.
- `src/content/docs/` — 콘텐츠 파일들이 포함된 디렉터리입니다. Starlight는 이 디렉터리에 있는 `.md`, `.mdx` 또는 `.mdoc` 파일을 사이트의 페이지로 변환합니다.
- `src/content/i18n/` (선택적) — [국제화](/ko/guides/i18n/)를 지원하는 번역 데이터들이 포함된 디렉터리입니다.
- `src/` — 프로젝트의 기타 소스 코드 및 파일(컴포넌트, 스타일, 이미지 등)이 포함된 디렉터리입니다.
@@ -39,8 +39,7 @@ import { FileTree } from '@astrojs/starlight/components';
- 01-getting-started.md
- 02-advanced.md
- index.mdx
- - config.ts
- - env.d.ts
+ - content.config.ts
- astro.config.mjs
- package.json
- tsconfig.json
diff --git a/docs/src/content/docs/ko/guides/site-search.mdx b/docs/src/content/docs/ko/guides/site-search.mdx
index 42f3986f12e..a723262ad8c 100644
--- a/docs/src/content/docs/ko/guides/site-search.mdx
+++ b/docs/src/content/docs/ko/guides/site-search.mdx
@@ -124,18 +124,19 @@ Starlight에 내장된 [국제화 시스템](/ko/guides/i18n/#starlight-ui-번
-1. `src/content/config.ts` 파일의 DocSearch 스키마를 사용하여 Starlight의 `i18n` 콘텐츠 컬렉션 정의를 확장합니다.
+1. `src/content.config.ts` 파일의 DocSearch 스키마를 사용하여 Starlight의 `i18n` 콘텐츠 컬렉션 정의를 확장합니다.
- ```js ins={4} ins=/{ extend: .+ }/
- // src/content/config.ts
+ ```js ins={5} ins=/{ extend: .+ }/
+ // src/content.config.ts
import { defineCollection } from 'astro:content';
+ import { docsLoader, i18nLoader } from '@astrojs/starlight/loaders';
import { docsSchema, i18nSchema } from '@astrojs/starlight/schema';
import { docSearchI18nSchema } from '@astrojs/starlight-docsearch/schema';
export const collections = {
- docs: defineCollection({ schema: docsSchema() }),
+ docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
i18n: defineCollection({
- type: 'data',
+ loader: i18nLoader(),
schema: i18nSchema({ extend: docSearchI18nSchema() }),
}),
};
diff --git a/docs/src/content/docs/ko/index.mdx b/docs/src/content/docs/ko/index.mdx
index baa0bdf1e1d..51e16371ade 100644
--- a/docs/src/content/docs/ko/index.mdx
+++ b/docs/src/content/docs/ko/index.mdx
@@ -7,6 +7,12 @@ description: Starlight로 아름답고 성능이 좋은 Astro 문서 웹 사이
template: splash
editUrl: false
lastUpdated: false
+banner:
+ content: |
+ Astro 5로 업데이트 하고 싶나요?
+
+ 업그레이드 방법 알아보기
+
hero:
title: Starlight로 멋진 문서를 만드세요
tagline: 아름다운 문서 웹 사이트를 만드는데 필요한 모든 것. 빠르고, 접근성이 좋으며 사용하기 쉽습니다.
diff --git a/docs/src/content/docs/ko/reference/configuration.mdx b/docs/src/content/docs/ko/reference/configuration.mdx
index 07000930fde..9c871540597 100644
--- a/docs/src/content/docs/ko/reference/configuration.mdx
+++ b/docs/src/content/docs/ko/reference/configuration.mdx
@@ -467,7 +467,7 @@ Pagefind로 사이트 색인을 생성하지 않으려면 `false`로 설정하
**타입:** `boolean`
**기본값:** `true`
-Starlight 페이지를 정적 HTML로 사전 렌더링할지, 아니면 [SSR 어댑터](https://docs.astro.build/ko/guides/server-side-rendering/)를 통해 주문형으로 렌더링할지 정의합니다.
+Starlight 페이지를 정적 HTML로 사전 렌더링할지, 아니면 [SSR 어댑터](https://docs.astro.build/ko/guides/on-demand-rendering/)를 통해 주문형으로 렌더링할지 정의합니다.
Starlight 페이지는 기본적으로 사전 렌더링됩니다.
SSR 어댑터를 사용 중이고 Starlight 페이지를 주문형으로 렌더링하기를 원한다면 `prerender: false`를 설정하세요.
@@ -572,7 +572,7 @@ starlight({
**타입:** `boolean`
**기본값:** `false`
-Starlight의 기본 [404 페이지](https://docs.astro.build/ko/core-concepts/astro-pages/#사용자-정의-404-오류-페이지) 삽입을 비활성화합니다. 프로젝트에서 사용자 정의 `src/pages/404.astro` 경로를 사용하려면 이 옵션을 `true`로 설정하세요.
+Starlight의 기본 [404 페이지](https://docs.astro.build/ko/basics/astro-pages/#사용자-정의-404-오류-페이지) 삽입을 비활성화합니다. 프로젝트에서 사용자 정의 `src/pages/404.astro` 경로를 사용하려면 이 옵션을 `true`로 설정하세요.
### `components`
diff --git a/docs/src/content/docs/ko/reference/overrides.md b/docs/src/content/docs/ko/reference/overrides.md
index f66868b391f..216eae47306 100644
--- a/docs/src/content/docs/ko/reference/overrides.md
+++ b/docs/src/content/docs/ko/reference/overrides.md
@@ -69,11 +69,14 @@ Starlight는 사용자 정의 컴포넌트에 다음 속성들을 전달합니
콘텐츠 파일 이름에서 생성된 이 페이지의 슬러그입니다.
+이 속성은 더 이상 사용되지 않으며 향후 버전의 Starlight에서 제거될 예정입니다.
+[Starlight의 `docsLoader`](/ko/manual-setup/#콘텐츠-컬렉션-구성)를 사용하여 새 콘텐츠 레이어 API로 마이그레이션하고 대신 [`id`](#id) 속성을 사용하세요.
+
#### `id`
**타입:** `string`
-콘텐츠 파일 이름을 기반으로 하는 이 페이지의 고유 ID입니다.
+이 페이지의 슬러그 또는 [`legacy.collections`](https://docs.astro.build/ko/reference/legacy-flags/#collections) 플래그를 사용하는 경우 콘텐츠 파일명을 기준으로 한 이 페이지의 고유 ID입니다.
#### `isFallback`
diff --git a/examples/basics/package.json b/examples/basics/package.json
index 8662fc45d1d..37f3bb1e43c 100644
--- a/examples/basics/package.json
+++ b/examples/basics/package.json
@@ -11,7 +11,7 @@
"astro": "astro"
},
"dependencies": {
- "@astrojs/starlight": "^0.30.0",
+ "@astrojs/starlight": "^0.30.1",
"astro": "^5.0.2",
"sharp": "^0.32.5"
}
diff --git a/examples/markdoc/package.json b/examples/markdoc/package.json
index 9d4bcbac3f6..c15fd786a3f 100644
--- a/examples/markdoc/package.json
+++ b/examples/markdoc/package.json
@@ -12,7 +12,7 @@
},
"dependencies": {
"@astrojs/markdoc": "^0.12.1",
- "@astrojs/starlight": "^0.30.0",
+ "@astrojs/starlight": "^0.30.1",
"@astrojs/starlight-markdoc": "^0.2.0",
"astro": "^5.0.2",
"sharp": "^0.32.5"
diff --git a/examples/tailwind/package.json b/examples/tailwind/package.json
index b8ab6c9b8e7..a21e5f5d8ea 100644
--- a/examples/tailwind/package.json
+++ b/examples/tailwind/package.json
@@ -11,7 +11,7 @@
"astro": "astro"
},
"dependencies": {
- "@astrojs/starlight": "^0.30.0",
+ "@astrojs/starlight": "^0.30.1",
"@astrojs/starlight-tailwind": "^3.0.0",
"@astrojs/tailwind": "^5.1.3",
"astro": "^5.0.2",
diff --git a/packages/starlight/CHANGELOG.md b/packages/starlight/CHANGELOG.md
index 53b50c34c4e..d55cc74b141 100644
--- a/packages/starlight/CHANGELOG.md
+++ b/packages/starlight/CHANGELOG.md
@@ -1,5 +1,11 @@
# @astrojs/starlight
+## 0.30.1
+
+### Patch Changes
+
+- [#2688](https://github.com/withastro/starlight/pull/2688) [`5c6996c`](https://github.com/withastro/starlight/commit/5c6996cd248e9da735a14e7fcaf638b51f2796bc) Thanks [@HiDeoo](https://github.com/HiDeoo)! - Fixes an issue with autogenerated sidebars when using Starlight with Astro's new Content Layer API where group names would be sluggified.
+
## 0.30.0
### Minor Changes
diff --git a/packages/starlight/__tests__/basics/navigation.test.ts b/packages/starlight/__tests__/basics/navigation.test.ts
index 90676507445..0b4e5bd7d4e 100644
--- a/packages/starlight/__tests__/basics/navigation.test.ts
+++ b/packages/starlight/__tests__/basics/navigation.test.ts
@@ -9,6 +9,7 @@ vi.mock('astro:content', async () =>
['guides/authoring-content.mdx', { title: 'Authoring Markdown' }],
['reference/frontmatter.md', { title: 'Frontmatter Reference', sidebar: { hidden: true } }],
['guides/project-structure.mdx', { title: 'Project Structure' }],
+ ['Getting Started/intro.md', { title: 'Introduction' }],
],
})
);
@@ -33,6 +34,22 @@ describe('getSidebar', () => {
"label": "Eco-friendly docs",
"type": "link",
},
+ {
+ "badge": undefined,
+ "collapsed": false,
+ "entries": [
+ {
+ "attrs": {},
+ "badge": undefined,
+ "href": "/getting-started/intro/",
+ "isCurrent": false,
+ "label": "Introduction",
+ "type": "link",
+ },
+ ],
+ "label": "Getting Started",
+ "type": "group",
+ },
{
"badge": undefined,
"collapsed": false,
@@ -152,6 +169,14 @@ describe('flattenSidebar', () => {
"label": "Eco-friendly docs",
"type": "link",
},
+ {
+ "attrs": {},
+ "badge": undefined,
+ "href": "/getting-started/intro/",
+ "isCurrent": false,
+ "label": "Introduction",
+ "type": "link",
+ },
{
"attrs": {},
"badge": undefined,
@@ -182,9 +207,9 @@ describe('getPrevNextLinks', () => {
"next": {
"attrs": {},
"badge": undefined,
- "href": "/guides/authoring-content/",
+ "href": "/getting-started/intro/",
"isCurrent": false,
- "label": "Authoring Markdown",
+ "label": "Introduction",
"type": "link",
},
"prev": {
diff --git a/packages/starlight/__tests__/test-utils.ts b/packages/starlight/__tests__/test-utils.ts
index 45dbde6625e..d6e3a711252 100644
--- a/packages/starlight/__tests__/test-utils.ts
+++ b/packages/starlight/__tests__/test-utils.ts
@@ -28,7 +28,11 @@ function mockDoc(
data: z.input,
body = ''
): StarlightDocsCollectionEntry {
- const slug = docsFilePath.replace(/\.[^\.]+$/, '').replace(/\/index$/, '');
+ const slug = docsFilePath
+ .replace(/\.[^\.]+$/, '')
+ .replace(/\s/, '-')
+ .replace(/\/index$/, '')
+ .toLowerCase();
const doc: StarlightDocsCollectionEntry = {
id: project.legacyCollections ? docsFilePath : slug,
diff --git a/packages/starlight/package.json b/packages/starlight/package.json
index 0a00a079648..d5297df79df 100644
--- a/packages/starlight/package.json
+++ b/packages/starlight/package.json
@@ -1,6 +1,6 @@
{
"name": "@astrojs/starlight",
- "version": "0.30.0",
+ "version": "0.30.1",
"description": "Build beautiful, high-performance documentation websites with Astro",
"scripts": {
"test": "vitest",
diff --git a/packages/starlight/utils/navigation.ts b/packages/starlight/utils/navigation.ts
index 76608601dea..921dc2fe0a7 100644
--- a/packages/starlight/utils/navigation.ts
+++ b/packages/starlight/utils/navigation.ts
@@ -1,5 +1,6 @@
import { AstroError } from 'astro/errors';
import config from 'virtual:starlight/user-config';
+import project from 'virtual:starlight/project-context';
import type { Badge, I18nBadge, I18nBadgeConfig } from '../schemas/badge';
import type { PrevNextLinkConfig } from '../schemas/prevNextLink';
import type {
@@ -14,8 +15,9 @@ import { formatPath } from './format-path';
import { BuiltInDefaultLocale, pickLang } from './i18n';
import { ensureLeadingSlash, ensureTrailingSlash, stripLeadingAndTrailingSlashes } from './path';
import { getLocaleRoutes, routes, type Route } from './routing';
-import { localeToLang, slugToPathname } from './slugs';
+import { localeToLang, localizedId, slugToPathname } from './slugs';
import type { StarlightConfig } from './user-config';
+import { getCollectionPathFromRoot } from './collection';
const DirKey = Symbol('DirKey');
const SlugKey = Symbol('SlugKey');
@@ -108,7 +110,7 @@ function groupFromAutogenerateConfig(
// Match against `foo/anything/else.md`.
doc.id.startsWith(localeDir + '/')
);
- const tree = treeify(dirDocs, localeDir);
+ const tree = treeify(dirDocs, locale, localeDir);
const label = pickLang(item.translations, localeToLang(locale)) || item.label;
return {
type: 'group',
@@ -205,8 +207,8 @@ function pathsMatch(pathA: string, pathB: string) {
function getBreadcrumbs(path: string, baseDir: string): string[] {
// Strip extension from path.
const pathWithoutExt = stripExtension(path);
- // Index paths will match `baseDir` but we still need to consider them as a single segment.
- if (pathWithoutExt === baseDir) return [path];
+ // Index paths will match `baseDir` and don’t include breadcrumbs.
+ if (pathWithoutExt === baseDir) return [];
// Ensure base directory ends in a trailing slash.
baseDir = ensureTrailingSlash(baseDir);
// Strip base directory from path if present.
@@ -218,16 +220,28 @@ function getBreadcrumbs(path: string, baseDir: string): string[] {
}
/** Turn a flat array of routes into a tree structure. */
-function treeify(routes: Route[], baseDir: string): Dir {
+function treeify(routes: Route[], locale: string | undefined, baseDir: string): Dir {
const treeRoot: Dir = makeDir(baseDir);
+ const collectionPathFromRoot = getCollectionPathFromRoot('docs', project);
routes
// Remove any entries that should be hidden
.filter((doc) => !doc.entry.data.sidebar.hidden)
+ // Compute the path of each entry from the root of the collection ahead of time.
+ .map(
+ (doc) =>
+ [
+ project.legacyCollections
+ ? doc.id
+ : // For collections with a loader, use a localized filePath relative to the collection
+ localizedId(doc.entry.filePath.replace(`${collectionPathFromRoot}/`, ''), locale),
+ doc,
+ ] as const
+ )
// Sort by depth, to build the tree depth first.
- .sort((a, b) => b.id.split('/').length - a.id.split('/').length)
+ .sort(([a], [b]) => b.split('/').length - a.split('/').length)
// Build the tree
- .forEach((doc) => {
- const parts = getBreadcrumbs(doc.id, baseDir);
+ .forEach(([filePathFromContentDir, doc]) => {
+ const parts = getBreadcrumbs(filePathFromContentDir, baseDir);
let currentNode = treeRoot;
parts.forEach((part, index) => {
@@ -374,7 +388,7 @@ function getIntermediateSidebarFromConfig(
if (sidebarConfig) {
return sidebarConfig.map((group) => configItemToEntry(group, pathname, locale, routes));
} else {
- const tree = treeify(routes, locale || '');
+ const tree = treeify(routes, locale, locale || '');
return sidebarFromDir(tree, pathname, locale, false);
}
}
diff --git a/packages/starlight/utils/slugs.ts b/packages/starlight/utils/slugs.ts
index c811c55046f..c6b0b7393ae 100644
--- a/packages/starlight/utils/slugs.ts
+++ b/packages/starlight/utils/slugs.ts
@@ -82,7 +82,8 @@ export function localizedSlug(slug: string, locale: string | undefined): string
}
/**
- * Convert a legacy collection entry ID to a different locale.
+ * Convert a legacy collection entry ID or filePath relative to the collection root to a different
+ * locale.
* For example, passing an ID of `en/home.md` and a locale of `fr` results in `fr/home.md`.
* An undefined locale is treated as the root locale, resulting in `home.md`.
* @param id A collection entry ID
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f775c799823..02bd8e1cc6a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -81,7 +81,7 @@ importers:
examples/basics:
dependencies:
'@astrojs/starlight':
- specifier: ^0.30.0
+ specifier: ^0.30.1
version: link:../../packages/starlight
astro:
specifier: ^5.0.2
@@ -96,7 +96,7 @@ importers:
specifier: ^0.12.1
version: 0.12.1(astro@5.0.2)
'@astrojs/starlight':
- specifier: ^0.30.0
+ specifier: ^0.30.1
version: link:../../packages/starlight
'@astrojs/starlight-markdoc':
specifier: ^0.2.0
@@ -111,7 +111,7 @@ importers:
examples/tailwind:
dependencies:
'@astrojs/starlight':
- specifier: ^0.30.0
+ specifier: ^0.30.1
version: link:../../packages/starlight
'@astrojs/starlight-tailwind':
specifier: ^3.0.0