import { FASTElement, Observable, html, css, repeat } from '@microsoft/fast-element';
export interface SidebarItem {
label: string;
slug: string;
badge?: { text: string; variant?: string };
}
export interface SidebarGroup {
label: string;
items: SidebarItem[];
}
/**
*
* Renders grouped navigation links for the docs sidebar.
*/
export class StarlightSidebar extends FASTElement {
groups: SidebarGroup[] = [];
currentSlug = '';
}
Observable.defineProperty(StarlightSidebar.prototype, 'groups');
Observable.defineProperty(StarlightSidebar.prototype, 'currentSlug');
const template = html`
`;
const styles = css`
:host { display: block; }
nav { padding: 1rem 0; }
.group { margin-bottom: 1.5rem; }
.group-label {
font-size: var(--sl-text-xs, 0.75rem);
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--sl-color-gray-4, #757575);
padding: 0 1rem;
margin: 0 0 0.5rem;
}
ul { list-style: none; padding: 0; margin: 0; }
li { margin: 0; }
a {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0.35rem 1rem;
font-size: var(--sl-text-sm, 0.875rem);
color: var(--sl-color-gray-5, #4b4b4b);
text-decoration: none;
border-left: 2px solid transparent;
transition: color 0.15s, background-color 0.15s;
}
a:hover {
color: var(--sl-color-text, #23262f);
background-color: var(--sl-color-gray-2, #e8e8e8);
}
a[aria-current='page'] {
color: var(--sl-color-accent, #7c3aed);
border-left-color: var(--sl-color-accent, #7c3aed);
background-color: var(--sl-color-accent-low, #ede9fe);
font-weight: 600;
}
.badge {
display: inline-block;
padding: 0.1em 0.45em;
font-size: var(--sl-text-xs, 0.75rem);
font-weight: 600;
border-radius: 9999px;
background-color: var(--sl-color-accent-low, #ede9fe);
color: var(--sl-color-accent-high, #5b21b6);
margin-left: 0.5rem;
}
`;
StarlightSidebar.define({ name: 'starlight-sidebar', template, styles });
export default StarlightSidebar;