/**
* @usevyre/react — Sidebar & App Layout
*
* AI CONTEXT:
* ┌──────────────────────────────────────────────────────────────┐
* │ Layout hierarchy: │
* │ │
* │ AppLayout — root, manages collapsed state │
* │ ├── Sidebar — left column │
* │ │ ├── SidebarHeader — logo + app name │
* │ │ ├── SidebarContent — scrollable nav area │
* │ │ │ └── SidebarSection → SidebarItem │
* │ │ └── SidebarFooter — pinned bottom area │
* │ └── AppShell — right column (flex: 1) │
* │ ├── AppBar — optional top bar │
* │ │ └── SidebarTrigger — collapse toggle button │
* │ └── PageContent — scrollable page content │
* │ │
* │ Import: import { AppLayout, AppShell, AppBar, │
* │ PageContent, SidebarTrigger, │
* │ Sidebar, SidebarHeader, SidebarContent, │
* │ SidebarSection, SidebarItem, SidebarFooter } │
* │ from "@usevyre/react" │
* │ │
* │ AppLayout props: │
* │ defaultCollapsed = boolean (uncontrolled default) │
* │ collapsed = boolean (controlled) │
* │ onCollapsedChange = (v: boolean) => void │
* │ className = string │
* │ │
* │ Sidebar props: │
* │ variant = "default" | "floating" │
* │ className = string │
* │ │
* │ SidebarItem props: │
* │ active = boolean │
* │ icon = ReactNode │
* │ badge = string | number │
* │ href = string │
* │ onClick = () => void │
* │ │
* │ SidebarTrigger props (all optional): │
* │ icon = ReactNode (shown when expanded; │
* │ default = built-in menu icon) │
* │ collapsedIcon = ReactNode (shown when collapsed; │
* │ falls back to icon) │
* └──────────────────────────────────────────────────────────────┘
*
* @example
*
*
* } />
*
*
* } active href="/">Dashboard
* } href="/users">Users
*
*
*
* } href="/settings">Settings
*
*
*
*
*
* ...
*
*
* Dashboard
*
*
*
*/
import React from "react";
interface AppLayoutCtx {
collapsed: boolean;
toggleCollapsed: () => void;
}
export declare const useAppLayout: () => AppLayoutCtx;
export interface AppLayoutProps {
defaultCollapsed?: boolean;
collapsed?: boolean;
onCollapsedChange?: (v: boolean) => void;
className?: string;
children?: React.ReactNode;
}
export declare const AppLayout: React.ForwardRefExoticComponent>;
export interface SidebarProps {
variant?: "default" | "floating";
className?: string;
children?: React.ReactNode;
}
export declare const Sidebar: React.ForwardRefExoticComponent>;
export interface SidebarHeaderProps {
logo?: React.ReactNode;
title?: string;
className?: string;
children?: React.ReactNode;
}
export declare const SidebarHeader: React.ForwardRefExoticComponent>;
export interface SidebarContentProps {
className?: string;
children?: React.ReactNode;
}
export declare const SidebarContent: React.ForwardRefExoticComponent>;
export interface SidebarSectionProps {
label?: string;
className?: string;
children?: React.ReactNode;
}
export declare const SidebarSection: React.ForwardRefExoticComponent>;
export interface SidebarItemProps {
active?: boolean;
icon?: React.ReactNode;
badge?: string | number;
href?: string;
onClick?: () => void;
className?: string;
children?: React.ReactNode;
}
export declare const SidebarItem: React.FC;
export interface SidebarFooterProps {
className?: string;
children?: React.ReactNode;
}
export declare const SidebarFooter: React.ForwardRefExoticComponent>;
export interface AppShellProps {
className?: string;
children?: React.ReactNode;
}
export declare const AppShell: React.ForwardRefExoticComponent>;
export interface AppBarProps {
className?: string;
children?: React.ReactNode;
}
export declare const AppBar: React.ForwardRefExoticComponent>;
export interface SidebarTriggerProps {
className?: string;
/** Icon shown when the sidebar is expanded. Defaults to the built-in menu icon. */
icon?: React.ReactNode;
/** Icon shown when the sidebar is collapsed. Falls back to `icon`, then the built-in icon. */
collapsedIcon?: React.ReactNode;
}
export declare const SidebarTrigger: React.FC;
export interface PageContentProps {
className?: string;
children?: React.ReactNode;
}
export declare const PageContent: React.ForwardRefExoticComponent>;
export {};