diff --git a/src/bach/breadcrumbs.ts b/src/bach/breadcrumbs.ts index 3e2f6cf..12445ee 100644 --- a/src/bach/breadcrumbs.ts +++ b/src/bach/breadcrumbs.ts @@ -12,6 +12,7 @@ export async function searchPagesForBreadcrumbs( pages: PageItem[], prefix: { label: string; href: string }[], titleMap: Map, + sidebarTitleMap: Map, iconMap: Map ): Promise<{ label: string; href: string }[] | null> { const normalizedTarget = normalizePagePath(pagePath) @@ -41,11 +42,20 @@ export async function searchPagesForBreadcrumbs( return groupPrefix } } else { - const firstChildHref = findFirstHref(buildPages(item.pages, 0, '', titleMap, new Map(), iconMap)) + const firstChildHref = findFirstHref( + buildPages(item.pages, 0, '', titleMap, new Map(), sidebarTitleMap, iconMap) + ) groupPrefix.push({ label: item.group, href: firstChildHref ?? '/' }) } - const result = await searchPagesForBreadcrumbs(pagePath, item.pages, groupPrefix, titleMap, iconMap) + const result = await searchPagesForBreadcrumbs( + pagePath, + item.pages, + groupPrefix, + titleMap, + sidebarTitleMap, + iconMap + ) if (result) return result } } @@ -65,12 +75,13 @@ export async function buildBreadcrumbs( entryId: string, pageTitle: string, titleMap: Map, + sidebarTitleMap: Map, iconMap: Map ): Promise<{ label: string; href: string }[]> { const pagePath = normalizeEntryId(entryId) for (const tab of config.navigation.tabs) { - const crumbs = await searchPagesForBreadcrumbs(pagePath, tab.pages, [], titleMap, iconMap) + const crumbs = await searchPagesForBreadcrumbs(pagePath, tab.pages, [], titleMap, sidebarTitleMap, iconMap) if (crumbs) { // Remove the active page itself — breadcrumbs show only the parent path return crumbs.slice(0, -1) diff --git a/src/bach/content.ts b/src/bach/content.ts index 2652d60..2f4aaaa 100644 --- a/src/bach/content.ts +++ b/src/bach/content.ts @@ -55,6 +55,10 @@ export function buildSidebarEntryMap( entries.map((entry) => ({ id: entry.id, title: entry.data.title, + sidebarTitle: + 'sidebarTitle' in entry.data && typeof entry.data.sidebarTitle === 'string' + ? entry.data.sidebarTitle + : undefined, method: 'method' in entry.data && typeof entry.data.method === 'string' ? entry.data.method : undefined, icon: 'icon' in entry.data && typeof entry.data.icon === 'string' ? entry.data.icon : undefined, sortOrder: @@ -75,6 +79,7 @@ export function buildSidebarEntryMap( export function buildCollectionsSidebarData(allEntries: Map) { const titleMap = new Map() const methodMap = new Map() + const sidebarTitleMap = new Map() const iconMap = new Map() const articles: ArticleEntry[] = [] @@ -88,6 +93,14 @@ export function buildCollectionsSidebarData(allEntries: Map methodMap: Map + sidebarTitleMap: Map iconMap: Map articles: ArticleEntry[] defaultEntriesBySlug: Map @@ -50,9 +51,9 @@ export class BachSite { const defaultCollection = getDefaultCollection(this._config) const allEntries = await loadCollections(this._config) - const { titleMap, methodMap, iconMap, articles } = buildCollectionsSidebarData(allEntries) + const { titleMap, methodMap, sidebarTitleMap, iconMap, articles } = buildCollectionsSidebarData(allEntries) const collectionsMap = buildSidebarEntryMap(allEntries) - const sidebar = await buildSidebarTree(this._config, titleMap, methodMap, iconMap, collectionsMap) + const sidebar = await buildSidebarTree(this._config, titleMap, methodMap, sidebarTitleMap, iconMap, collectionsMap) const defaultEntriesBySlug = new Map() for (const entry of allEntries.get(defaultCollection) ?? []) { @@ -65,6 +66,7 @@ export class BachSite { sidebar, titleMap, methodMap, + sidebarTitleMap, iconMap, articles, defaultEntriesBySlug, @@ -96,6 +98,7 @@ export class BachSite { entry.id, title, siteContext.titleMap, + siteContext.sidebarTitleMap, siteContext.iconMap ) } diff --git a/src/bach/tree.ts b/src/bach/tree.ts index 1689999..02b0386 100644 --- a/src/bach/tree.ts +++ b/src/bach/tree.ts @@ -49,6 +49,7 @@ function _collectFromPages(pages: PageItem( parentPath: string, titleMap: Map, methodMap: Map, + sidebarTitleMap: Map, iconMap: Map, collectionsMap?: Map ): SidebarNode[] { @@ -83,6 +85,7 @@ export function buildPages( const articleNode: SidebarArticleNode = { type: 'article', title, + sidebarTitle: sidebarTitleMap.get(normalizedPath), href, path: normalizedPath, method: methodMap.get(normalizedPath), @@ -117,6 +120,7 @@ export function buildPages( children: sortedEntries.map((entry) => ({ type: 'article', title: entry.title, + sidebarTitle: entry.sidebarTitle, href: `/${entry.id}`, path: entry.id, method: entry.method, @@ -141,7 +145,16 @@ export function buildPages( childrenPages = item.pages } - const children = buildPages(childrenPages, depth + 1, groupPath, titleMap, methodMap, iconMap, collectionsMap) + const children = buildPages( + childrenPages, + depth + 1, + groupPath, + titleMap, + methodMap, + sidebarTitleMap, + iconMap, + collectionsMap + ) const categoryNode: SidebarCategoryNode = { type: 'category', @@ -201,10 +214,12 @@ export async function buildSidebarTree( config: DocsConfig, titleMap: Map, methodMap?: Map, + sidebarTitleMap?: Map, iconMap?: Map, collectionsMap?: Map ): Promise { const _methodMap = methodMap ?? new Map() + const _sidebarTitleMap = sidebarTitleMap ?? new Map() const _iconMap = iconMap ?? new Map() const tabs: TabInfo[] = [] @@ -213,7 +228,7 @@ export async function buildSidebarTree( for (const tabItem of config.navigation.tabs) { const tabSlug = slugify(tabItem.tab) - const tabTree = buildPages(tabItem.pages, 0, '', titleMap, _methodMap, _iconMap, collectionsMap) + const tabTree = buildPages(tabItem.pages, 0, '', titleMap, _methodMap, _sidebarTitleMap, _iconMap, collectionsMap) const firstHref = findFirstHref(tabTree) ?? '/' diff --git a/src/bach/types.ts b/src/bach/types.ts index 8ea3a26..9803768 100644 --- a/src/bach/types.ts +++ b/src/bach/types.ts @@ -24,6 +24,7 @@ export interface SidebarCategoryNode { export interface SidebarArticleNode { type: 'article' title: string + sidebarTitle?: string href: string path: string method?: string diff --git a/src/components/sidebar-tree-view.tsx b/src/components/sidebar-tree-view.tsx index 8c33867..ddb874b 100644 --- a/src/components/sidebar-tree-view.tsx +++ b/src/components/sidebar-tree-view.tsx @@ -150,7 +150,7 @@ function ChildNode({ }`} > {node.icon && } - {node.title} + {node.sidebarTitle ?? node.title} {node.method && }