import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
import * as i0 from "@angular/core";
export interface SidebarItem {
/** Stable identifier used by `activeId` and emitted by `itemClick`. */
id: string;
/** Text label displayed next to the icon. */
label: string;
/** Lucide icon name (kebab-case), e.g. `'house'` or `'folder'`. */
icon: string;
/** Child items — renders this item as an expandable group with a chevron toggle. Child items cannot have their own children. */
children?: SidebarItem[];
/** When true, renders a horizontal divider above this item in the list. */
dividerBefore?: boolean;
/** When true, the item is non-interactive — it cannot be clicked and receives no hover or active styling. */
disabled?: boolean;
/**
* When true, clicking the item emits `itemClick` but does not highlight it
* as active or update `activeId`. Use for action items (e.g. logout)
* that are not navigation destinations.
*/
nonRoute?: boolean;
}
/**
* Sidebar — vertical app navigation from the ComPsych Design System.
*
* Figma: Core Components — base 260:4700, parts 213:1585.
*
* Icon + label items with default / hover / selected / focus / disabled states,
* section dividers, expandable groups (chevron), and a pinned footer
* (location & language, logout). Data-driven via `items` / `footerItems`,
* defaulting to the design's content. All values are sys tokens.
*/
export declare class SidebarComponent {
private readonly sanitizer;
/** Navigation items rendered in the scrollable main area. Defaults to the standard ComPsych nav set. */
readonly items: import("@angular/core").InputSignal;
/** Items pinned to the bottom of the sidebar, outside the scroll region. Intended for utility actions such as language selection and logout. */
readonly footerItems: import("@angular/core").InputSignal;
/** Currently active item id — supports two-way binding via `[(activeId)]`. Updated on click for route items; unchanged for `nonRoute` items. */
readonly activeId: import("@angular/core").ModelSignal;
/**
* Emitted with the item's `id` when a non-disabled action (`nonRoute`) item is clicked.
* Navigation (route) items do not emit — they update `activeId` instead (bind via `[(activeId)]`).
* Group items (those with `children`) do not emit — they only toggle their expanded state.
*/
readonly itemClick: import("@angular/core").OutputEmitterRef;
private readonly expanded;
constructor(sanitizer: DomSanitizer);
isExpanded(id: string): boolean;
isActive(id: string): boolean;
onItemClick(item: SidebarItem): void;
/**
* Looks up a Lucide icon by name and injects explicit width/height attributes
* so the SVG renders at the correct size when injected via [innerHTML].
* Angular's CSS encapsulation does not add _ngcontent attributes to dynamically
* injected content, so explicit SVG attributes are the reliable solution.
*/
iconSvg(name: string, size?: number, strokeWidth?: number): SafeHtml;
static ɵfac: i0.ɵɵFactoryDeclaration;
static ɵcmp: i0.ɵɵComponentDeclaration;
}