import { AnchorHTMLAttributes, CSSProperties, HTMLAttributes, MouseEventHandler, ReactNode } from 'react'; import { QA } from '../common'; /** Пункт меню */ export type SidebarMenuItemProps = { /** Обязательный идентификатор * * Можно использовать любой уникальный в рамках меню int|string|uuid */ id: string; /** Текст */ label: ReactNode; /** Иконка */ icon?: ReactNode; /** Значок * * При передаче string | number будет показат Badge * * При передаче кастомного компонента, он будет отрендерен как есть */ badge?: ReactNode; /** Всплывающая подскаска при свернутом меню */ tooltip?: ReactNode; /** Отключено * * Не позволяет переход по пункту */ disabled?: boolean; /** Дочерние пункты * * Максимальная глубина меню = 2 уровня * т.е. childs[N].childs не будет отрендерен */ childs?: SidebarMenuItemProps[]; /** Обработчик нажания на пункт */ onClick?: MouseEventHandler; } & QA & Pick, 'href' | 'target' | 'className'>; export type SidebarMenuProps = { /** Пункты меню */ items: SidebarMenuItemProps[]; /** Выбранный пункт */ selected?: string; /** Обработчик перехода по пункту */ onChange?: (newSelected: SidebarMenuItemProps) => void; /** Принудительная установка состояния раскрыт | свернут */ isExpanded?: boolean; /** Обработчик события раскрытия | сворачивания */ setIsExpanded?: (newIsExpanded: boolean) => void; } & QA & Pick & Pick, 'style' | 'className'>; export type SidebarMenuContextProps = { onClick: (item: SidebarMenuItemProps) => MouseEventHandler; isSelected: (item: SidebarMenuItemProps) => boolean; } & Required>; export type SidebarMenuItemStyles = { isSelected: boolean; } & Pick;