import { type ReactNode } from "react";
import { type DropdownMenuItem } from "../DropdownMenu/DropdownMenu";
export interface SidebarNavItem {
    id: string;
    label: ReactNode;
    icon: ReactNode;
    badge?: ReactNode;
    tag?: ReactNode;
    active?: boolean;
    /** Shortcut hint shown in rail tooltip, e.g. "⌘1". */
    shortcut?: string;
    onClick?: () => void;
    href?: string;
    /** Nested children (L2/L3). Items with children expand in place. */
    children?: SidebarNavItem[];
    /** Start expanded. Defaults to active (so active path is pre-revealed). */
    defaultExpanded?: boolean;
}
export interface SidebarSection {
    id?: string;
    label?: ReactNode;
    items: SidebarNavItem[];
}
export interface SidebarUser {
    name: ReactNode;
    email?: ReactNode;
    initial?: ReactNode;
    avatar?: ReactNode;
    /**
     * Optional click handler — fires when the user card itself is activated.
     * If `menu` is also provided, the click opens the menu instead; this
     * onClick acts as an additional side effect, not the navigation.
     */
    onClick?: () => void;
    /**
     * Profile / account menu. When provided, the user card becomes a
     * DropdownMenu trigger — clicking it opens the menu inline. This is the
     * supported way to attach a profile menu without nesting a <button>
     * inside the user card's <button>.
     */
    menu?: DropdownMenuItem[];
}
export interface SidebarProps {
    /**
     * - "rail"      — always-collapsed 48 px rail
     * - "expanded"  — always-expanded 224 px
     * - "auto"      — rail that expands into a floating overlay on hover;
     *                 user can pin it to stay expanded (persisted to localStorage)
     *
     * Branding (logo + product name) intentionally lives in the app's top
     * bar / page header, NOT on the sidebar. That keeps the sidebar focused
     * on navigation and avoids redundant chrome.
     */
    variant?: "rail" | "expanded" | "auto";
    sections?: SidebarSection[];
    items?: SidebarNavItem[];
    footerItems?: SidebarNavItem[];
    user?: SidebarUser;
    /** For rail/expanded: toggle callback. For auto: optional hook called on pin change. */
    onToggle?: () => void;
    pinned?: boolean;
    defaultPinned?: boolean;
    onPinnedChange?: (pinned: boolean) => void;
    pinStorageKey?: string;
    hoverOpenDelay?: number;
    hoverCloseDelay?: number;
    tooltipDelay?: number;
    height?: number | string;
    className?: string;
}
export declare function Sidebar({ variant, sections, items, footerItems, user, onToggle, pinned: pinnedProp, defaultPinned, onPinnedChange, pinStorageKey, hoverOpenDelay, hoverCloseDelay, tooltipDelay, height, className, }: SidebarProps): import("react/jsx-runtime").JSX.Element;
//# sourceMappingURL=Sidebar.d.ts.map