import React, { ReactNode } from "react";
import { DropdownTheme } from "./Dropdown.theme";
export type DropdownPlacement = "top" | "top-start" | "top-end" | "right" | "right-start" | "right-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end";
export type SelectionMode = "none" | "single" | "multiple";
export interface DropdownContextValue {
    isOpen: boolean;
    onOpenChange: (isOpen: boolean) => void;
    triggerRef: React.RefObject<HTMLElement | null>;
    menuRef: React.RefObject<HTMLDivElement | null>;
    menuId: string;
    placement: DropdownPlacement;
    offset: number;
    closeOnSelect: boolean;
    disabledKeys: Set<string>;
    selectedKeys: Set<string>;
    selectionMode: SelectionMode;
    onAction?: (key: string) => void;
    onSelectionChange?: (keys: Set<string>) => void;
    theme: DropdownTheme;
}
export interface DropdownProps extends React.HTMLAttributes<HTMLDivElement> {
    children: ReactNode;
    isOpen?: boolean;
    defaultIsOpen?: boolean;
    onOpenChange?: (isOpen: boolean) => void;
    placement?: DropdownPlacement;
    offset?: number;
    closeOnSelect?: boolean;
    disabledKeys?: string[];
    selectedKeys?: string[];
    defaultSelectedKeys?: string[];
    selectionMode?: SelectionMode;
    onAction?: (key: string) => void;
    onSelectionChange?: (keys: string[]) => void;
    theme?: Partial<DropdownTheme>;
    /**
     * Force dark mode styling for the component. Use when placing the component
     * on a dark background while the page is in light mode. This applies the
     * 'dark' class to the container, making text, borders, and other elements
     * use light colors for visibility.
     * @default false
     */
    darkMode?: boolean;
}
export interface DropdownTriggerProps {
    children: React.ReactElement;
    className?: string;
}
export interface DropdownMenuProps extends React.HTMLAttributes<HTMLDivElement> {
    children: ReactNode;
    className?: string;
    animation?: boolean;
    portal?: boolean;
    horizontal?: boolean;
    "aria-label"?: string;
}
export interface DropdownItemProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "color" | "onSelect"> {
    itemKey: string;
    children: ReactNode;
    className?: string;
    startContent?: ReactNode;
    endContent?: ReactNode;
    subtitle?: ReactNode;
    shortcut?: ReactNode;
    isDisabled?: boolean;
    isDanger?: boolean;
    onAction?: () => void;
}
export interface DropdownSectionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
    children: ReactNode;
    className?: string;
    title?: ReactNode;
    showDivider?: boolean;
}
export interface DropdownSeparatorProps extends React.HTMLAttributes<HTMLDivElement> {
    className?: string;
}
/**
 * Theme overrides for the Dropdown component
 */
export interface DropdownThemeOverrides {
    /** Menu container style */
    menuStyle?: string;
    /** Item base style */
    itemBaseStyle?: string;
    /** Danger item style */
    itemDangerStyle?: string;
    /** Section title style */
    sectionTitleStyle?: string;
    /** Section container style */
    sectionStyle?: string;
}
