import { LitElement, html, css } from 'lit'; import { customElement } from 'lit/decorators.js'; 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. * The active item (matching currentSlug) is highlighted with aria-current. */ @customElement('starlight-sidebar') export class StarlightSidebar extends LitElement { static override properties = { groups: { type: Array }, currentSlug: { type: String }, }; static override 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; } `; groups: SidebarGroup[] = []; currentSlug = ''; override render() { return html` `; } } export default StarlightSidebar;