import { ThemingProps } from "../theme/types.js";
import { SystemProps } from "../system/system.js";
import { IconProp } from "../icon/icon.types.js";
import { BadgeProps } from "../badge/badge.types.js";
import { BoxProps } from "../box/box.types.js";
import { ComponentProps, ReactNode } from "react";

//#region src/sidemenuV2/sidemenuV2.types.d.ts
type SidemenuOrientationV2 = 'vertical' | 'horizontal';
type SidemenuSizeV2 = 'md';
type SidemenuVariantV2 = 'default' | 'dark' | 'light';
type SidemenuCollapseModeV2 = 'auto' | 'manual' | 'responsive';
type SidemenuV2Props = SystemProps & ThemingProps<'Sidemenu'> & {
  /** Collection of menu items */items?: SidemenuItemV2Props[]; /** Initial expansion state (uncontrolled) @default true */
  isExpandedInitial?: boolean; /** Callback to control when expansion should be allowed */
  shouldExpand?: (trigger: 'toggle' | 'navigation', currentState: boolean) => boolean; /** Whether the menu is sticky @default false */
  isSticky?: boolean; /** External callback for navigation to the item path, could be a custom function or React Router hook: https://reactrouter.com/en/main/hooks/use-navigate */
  onNavigate?: (to: string, item?: SidemenuItemV2Props) => void; /** Custom navigation component for different routing libraries */
  NavigationComponent?: React.ComponentType<{
    to: string;
    children: ReactNode;
  }>; /** Width of the container when the side menu is expanded @default 280 */
  width?: number; /** Width of the container when collapsed @default 64 */
  collapsedWidth?: number; /** Sidemenu orientation @default 'vertical' */
  orientation?: SidemenuOrientationV2; /** Sidemenu size variant @default 'md' */
  size?: SidemenuSizeV2; /** Sidemenu visual variant @default 'default' */
  variant?: SidemenuVariantV2; /** Collapse behavior @default 'manual' */
  collapseMode?: SidemenuCollapseModeV2; /** Breakpoint for responsive collapse */
  collapseBreakpoint?: string; /** Custom header content */
  header?: ReactNode; /** Custom footer content */
  footer?: ReactNode; /** Show tooltips on collapsed items @default true */
  showTooltips?: boolean; /** Allow multiple expanded groups @default false */
  allowMultipleExpanded?: boolean; /** Callback when expansion state changes */
  onExpandedChange?: (isExpanded: boolean) => void; /** Callback when an item is selected */
  onItemSelect?: (item: SidemenuItemV2Props) => void; /** ARIA label for the sidemenu */
  'aria-label'?: string; /** ARIA labelledby for the sidemenu */
  'aria-labelledby'?: string; /** Test ID for automated testing */
  'data-testid'?: string; /** Enable keyboard navigation @default true */
  enableKeyboardNavigation?: boolean; /** Auto-collapse siblings when expanding @default false */
  autoCollapseSiblings?: boolean; /** Loading state @default false */
  isLoading?: boolean; /** Error state */
  error?: string | ReactNode; /** Empty state content */
  emptyContent?: ReactNode; /** Animation duration in milliseconds @default 250 */
  animationDuration?: number; /** Disable animations @default false */
  disableAnimation?: boolean;
};
type SidemenuItemBadgeV2Props = {
  /** Badge content */content?: string | number; /** Badge variant @default 'default' */
  variant?: 'default' | 'success' | 'warning' | 'error' | 'info'; /** Show badge as dot @default false */
  isDot?: boolean; /** Maximum count to display @default 99 */
  maxCount?: number;
};
type SidemenuItemV2Props = BoxProps & {
  /** Custom class name */className?: string; /** Children (submenu items) */
  children?: ReactNode; /** Icon name or component */
  icon?: IconProp; /** Icon size @default 'md' */
  iconSize?: 'md' | 'sm' | 'lg'; /** Whether the item is active */
  isActive?: boolean; /** Whether the item is expanded vertically */
  isExpanded?: boolean; /** Unique identifier for submenu state management */
  itemId?: string; /** Whether the item is disabled @default false */
  disabled?: boolean; /** Whether the item is loading @default false */
  isLoading?: boolean; /** On click callback */
  onClick?: (item?: SidemenuItemV2Props) => void; /** On collapse callback */
  onCollapse?: (item?: SidemenuItemV2Props) => void; /** On expand callback */
  onExpand?: (item?: SidemenuItemV2Props) => void; /** Router path */
  path?: string; /** Display title */
  title: string; /** Subtitle or description */
  subtitle?: string; /** Tooltip content (shown when collapsed) */
  tooltip?: string | ReactNode; /** Badge configuration */
  badge?: Pick<BadgeProps, 'label' | 'variant' | 'color'>;
  badgeLinkUrl?: string; /** Keyboard shortcut display */
  shortcut?: string; /** Item visibility @default true */
  visible?: boolean; /** Item priority for sorting @default 0 */
  priority?: number; /** Nesting level (auto-calculated if not provided) */
  level?: number; /** External link indicator @default false */
  isExternal?: boolean; /** Target for external links @default '_blank' */
  target?: string; /** Whether item is new (shows indicator) @default false */
  isNew?: boolean; /** Whether item is beta (shows indicator) @default false */
  isBeta?: boolean; /** Custom status text */
  status?: string; /** Item category for grouping */
  category?: string; /** ARIA label override */
  'aria-label'?: string; /** ARIA description */
  'aria-describedby'?: string; /** Test ID for this specific item */
  'data-testid'?: string; /** Custom component to render as */
  as?: React.ElementType; /** Before icon slot */
  beforeIcon?: ReactNode; /** After icon slot */
  afterIcon?: ReactNode; /** Custom metadata */
  meta?: Record<string, any>; /** Whether item is positioned at bottom @default false */
  onBottom?: boolean;
};
type SidemenuTopV2Props = BoxProps & {
  /** Custom class name */className?: string; /** Left slot (always visible) */
  leftSlot?: ReactNode; /** Right slot (hidden when collapsed) */
  rightSlot?: ReactNode; /** Center slot for title/branding */
  centerSlot?: ReactNode; /** Whether to show collapse toggle @default true */
  showCollapseToggle?: boolean; /** Custom collapse toggle component */
  CollapseToggle?: React.ComponentType<{
    isExpanded: boolean;
    onClick: () => void;
    disabled?: boolean;
  }>; /** Collapse toggle position @default 'right' */
  collapseTogglePosition?: 'left' | 'right' | 'center'; /** Top section height @default 'auto' */
  height?: string | number; /** Sticky behavior @default false */
  isSticky?: boolean; /** Background variant */
  background?: 'transparent' | 'default' | 'brand'; /** Border configuration */
  border?: 'none' | 'bottom' | 'full'; /** Custom actions */
  actions?: ReactNode; /** Test ID */
  'data-testid'?: string; /** Disabled state @default false */
  disabled?: boolean; /** Loading state @default false */
  isLoading?: boolean; /** Error state */
  error?: string | ReactNode;
};
type SidemenuGroupV2Props = {
  /** Group title */title?: string; /** Group items */
  items: SidemenuItemV2Props[]; /** Whether group is collapsible @default true */
  collapsible?: boolean; /** Whether group is expanded by default @default true */
  defaultExpanded?: boolean; /** Group icon */
  icon?: IconProp; /** Group priority for ordering @default 0 */
  priority?: number; /** Group visibility @default true */
  visible?: boolean; /** Group category */
  category?: string; /** Divider after group @default false */
  showDivider?: boolean; /** Custom group header renderer */
  renderHeader?: (props: SidemenuGroupV2Props) => ReactNode; /** Test ID for group */
  'data-testid'?: string;
};
type SidemenuContextV2Value = {
  /** Current expansion state */isExpanded: boolean; /** Toggle expansion */
  toggleExpanded: () => void; /** Current size */
  size: SidemenuSizeV2; /** Current variant */
  variant: SidemenuVariantV2; /** Navigation function */
  navigate: (to: string, item?: SidemenuItemV2Props) => void; /** Active item path */
  activePath?: string; /** Set active item */
  setActivePath: (path: string) => void; /** Disabled state */
  disabled?: boolean; /** Loading state */
  isLoading?: boolean; /** Theme context */
  isDark?: boolean; /** Width values */
  width: number;
  collapsedWidth: number; /** Animation settings */
  animationDuration: number;
  disableAnimation: boolean;
};
type UseSidemenuV2Return = {
  /** Expansion state */isExpanded: boolean; /** Toggle function */
  toggle: () => void; /** Expand function */
  expand: () => void; /** Collapse function */
  collapse: () => void; /** Navigation function */
  navigate: (to: string) => void; /** Active item */
  activeItem?: SidemenuItemV2Props; /** Set active item */
  setActiveItem: (item: SidemenuItemV2Props) => void; /** Context value */
  contextValue: SidemenuContextV2Value;
};
type UseSidemenuItemV2Return = {
  /** Item expansion state */isExpandedVertically: boolean; /** Toggle vertical expansion */
  setIsExpandedVertically: (expanded: boolean) => void; /** Theme detection */
  isDark: boolean; /** Size from context */
  size: SidemenuSizeV2; /** Horizontal expansion from sidemenu */
  isExpandedHorizontally: boolean; /** Computed styles */
  styles: Record<string, any>; /** Item ref */
  itemRef: React.RefObject<HTMLElement>; /** Focus management */
  focus: () => void; /** Blur management */
  blur: () => void; /** Active state */
  isActive: boolean; /** Disabled state */
  disabled: boolean;
};
type SidemenuItemClickEventV2 = {
  item: SidemenuItemV2Props;
  path?: string;
  preventDefault: () => void;
  isDefaultPrevented: boolean;
};
type SidemenuExpandEventV2 = {
  isExpanded: boolean;
  width: number;
  duration: number;
};
type SidemenuTopPropsV2 = BoxProps & {
  /** Custom class name */className?: string; /** Left slot (always visible) */
  leftSlot?: ReactNode; /** Right slot (hidden if the sidemenu is collapsed) */
  rightSlot?: ReactNode;
};
type SidemenuItemWithChildrenV2 = SidemenuItemV2Props & {
  children: SidemenuItemV2Props[];
};
type SidemenuFlatItemV2 = SidemenuItemV2Props & {
  level: number;
  parentPath?: string;
  fullPath: string;
};
type SidemenuComponentV2Props = ComponentProps<'nav'> & SidemenuV2Props;
type SidemenuItemComponentV2Props = ComponentProps<'button'> & SidemenuItemV2Props;
type SidemenuTopComponentV2Props = ComponentProps<'div'> & SidemenuTopV2Props;
//#endregion
export { SidemenuCollapseModeV2, SidemenuComponentV2Props, SidemenuContextV2Value, SidemenuExpandEventV2, SidemenuFlatItemV2, SidemenuGroupV2Props, SidemenuItemBadgeV2Props, SidemenuItemClickEventV2, SidemenuItemComponentV2Props, SidemenuItemV2Props, SidemenuItemWithChildrenV2, SidemenuOrientationV2, SidemenuSizeV2, SidemenuTopComponentV2Props, SidemenuTopPropsV2, SidemenuTopV2Props, SidemenuV2Props, SidemenuVariantV2, UseSidemenuItemV2Return, UseSidemenuV2Return };

//# sourceMappingURL=sidemenuV2.types.d.ts.map