@buun_group/brutalist-ui
Version:
A brutalist-styled component library
160 lines (159 loc) • 6.1 kB
TypeScript
/**
* @module Sidebar
* @description A comprehensive sidebar navigation component with collapsible functionality, hierarchical menu structure, and multiple layout variants. Features responsive design and accessibility support.
*/
import React, { HTMLAttributes, CSSProperties } from 'react';
/**
* Props for the Sidebar component
*/
export interface SidebarProps extends HTMLAttributes<HTMLDivElement> {
/**
* Whether the sidebar can be collapsed and expanded
* @default false
*/
collapsible?: boolean;
/**
* Whether the sidebar is currently in collapsed state
* @default false
*/
collapsed?: boolean;
/**
* Callback function called when the collapsed state changes
*/
onCollapsedChange?: (collapsed: boolean) => void;
/**
* Which side of the screen the sidebar should appear on
* @default 'left'
*/
side?: 'left' | 'right';
/**
* Visual style variant for the sidebar
* @default 'default'
*/
variant?: 'default' | 'floating' | 'inset';
/**
* Additional CSS classes to apply to the sidebar
*/
className?: string;
/**
* Custom inline styles (supports utility classes)
*/
style?: CSSProperties;
}
/**
* Props for the SidebarHeader component
*/
export interface SidebarHeaderProps extends HTMLAttributes<HTMLDivElement> {
/**
* Additional CSS classes to apply to the sidebar header
*/
className?: string;
}
/**
* Props for the SidebarContent component
*/
export interface SidebarContentProps extends HTMLAttributes<HTMLDivElement> {
/**
* Additional CSS classes to apply to the sidebar content
*/
className?: string;
}
/**
* Props for the SidebarFooter component
*/
export interface SidebarFooterProps extends HTMLAttributes<HTMLDivElement> {
/**
* Additional CSS classes to apply to the sidebar footer
*/
className?: string;
}
/**
* Props for the SidebarGroup component
*/
export interface SidebarGroupProps extends HTMLAttributes<HTMLDivElement> {
/**
* Additional CSS classes to apply to the sidebar group
*/
className?: string;
}
/**
* Props for the SidebarGroupLabel component
*/
export interface SidebarGroupLabelProps extends HTMLAttributes<HTMLDivElement> {
/**
* Additional CSS classes to apply to the group label
*/
className?: string;
}
/**
* Props for the SidebarGroupContent component
*/
export interface SidebarGroupContentProps extends HTMLAttributes<HTMLDivElement> {
/**
* Additional CSS classes to apply to the group content
*/
className?: string;
}
/**
* Props for the SidebarMenu component
*/
export interface SidebarMenuProps extends HTMLAttributes<HTMLUListElement> {
/**
* Additional CSS classes to apply to the sidebar menu
*/
className?: string;
}
/**
* Props for the SidebarMenuItem component
*/
export interface SidebarMenuItemProps extends HTMLAttributes<HTMLLIElement> {
/**
* Additional CSS classes to apply to the menu item
*/
className?: string;
}
/**
* Props for the SidebarMenuButton component
*/
export interface SidebarMenuButtonProps extends HTMLAttributes<HTMLButtonElement> {
/**
* Whether this menu item is currently active/selected
* @default false
*/
isActive?: boolean;
/**
* Icon element to display alongside the menu button text
*/
icon?: React.ReactNode;
/**
* Additional CSS classes to apply to the menu button
*/
className?: string;
}
interface SidebarContextValue {
collapsed: boolean;
collapsible: boolean;
}
export declare const Sidebar: React.ForwardRefExoticComponent<SidebarProps & React.RefAttributes<HTMLDivElement>>;
export declare const SidebarHeader: React.ForwardRefExoticComponent<SidebarHeaderProps & React.RefAttributes<HTMLDivElement>>;
export declare const SidebarContent: React.ForwardRefExoticComponent<SidebarContentProps & React.RefAttributes<HTMLDivElement>>;
export declare const SidebarFooter: React.ForwardRefExoticComponent<SidebarFooterProps & React.RefAttributes<HTMLDivElement>>;
export declare const SidebarGroup: React.ForwardRefExoticComponent<SidebarGroupProps & React.RefAttributes<HTMLDivElement>>;
export declare const SidebarGroupLabel: React.ForwardRefExoticComponent<SidebarGroupLabelProps & React.RefAttributes<HTMLDivElement>>;
export declare const SidebarGroupContent: React.ForwardRefExoticComponent<SidebarGroupContentProps & React.RefAttributes<HTMLDivElement>>;
export declare const SidebarMenu: React.ForwardRefExoticComponent<SidebarMenuProps & React.RefAttributes<HTMLUListElement>>;
export declare const SidebarMenuItem: React.ForwardRefExoticComponent<SidebarMenuItemProps & React.RefAttributes<HTMLLIElement>>;
export declare const SidebarMenuButton: React.ForwardRefExoticComponent<SidebarMenuButtonProps & React.RefAttributes<HTMLButtonElement>>;
export declare const useSidebar: () => SidebarContextValue;
declare const SidebarNamespace: React.ForwardRefExoticComponent<SidebarProps & React.RefAttributes<HTMLDivElement>> & {
Header: React.ForwardRefExoticComponent<SidebarHeaderProps & React.RefAttributes<HTMLDivElement>>;
Content: React.ForwardRefExoticComponent<SidebarContentProps & React.RefAttributes<HTMLDivElement>>;
Footer: React.ForwardRefExoticComponent<SidebarFooterProps & React.RefAttributes<HTMLDivElement>>;
Group: React.ForwardRefExoticComponent<SidebarGroupProps & React.RefAttributes<HTMLDivElement>>;
GroupLabel: React.ForwardRefExoticComponent<SidebarGroupLabelProps & React.RefAttributes<HTMLDivElement>>;
GroupContent: React.ForwardRefExoticComponent<SidebarGroupContentProps & React.RefAttributes<HTMLDivElement>>;
Menu: React.ForwardRefExoticComponent<SidebarMenuProps & React.RefAttributes<HTMLUListElement>>;
MenuItem: React.ForwardRefExoticComponent<SidebarMenuItemProps & React.RefAttributes<HTMLLIElement>>;
MenuButton: React.ForwardRefExoticComponent<SidebarMenuButtonProps & React.RefAttributes<HTMLButtonElement>>;
};
export default SidebarNamespace;