import type { DropdownContextValue } from "./DropdownContext.js";
export interface UseDropdownParameters {
  /**
   * If `true`, the dropdown is initially open.
   */
  defaultOpen?: boolean;
  /**
   * Callback fired when the component requests to be opened or closed.
   */
  onOpenChange?: (event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent | null, open: boolean) => void;
  /**
   * Allows to control whether the dropdown is open.
   * This is a controlled counterpart of `defaultOpen`.
   */
  open?: boolean;
  /**
   * The name of the component using useDropdown.
   * For debugging purposes.
   * @default 'useDropdown'
   */
  componentName?: string;
}
export interface UseDropdownReturnValue {
  /**
   * The value to be passed into the DropdownContext provider.
   */
  contextValue: DropdownContextValue;
  /**
   * If `true`, the dropdown is open.
   */
  open: boolean;
}
export declare const DropdownActionTypes: {
  readonly blur: "dropdown:blur";
  readonly escapeKeyDown: "dropdown:escapeKeyDown";
  readonly toggle: "dropdown:toggle";
  readonly open: "dropdown:open";
  readonly close: "dropdown:close";
};
interface DropdownBlurAction {
  type: typeof DropdownActionTypes.blur;
  event: React.FocusEvent;
}
interface DropdownEscapeKeyDownAction {
  type: typeof DropdownActionTypes.escapeKeyDown;
  event: React.KeyboardEvent;
}
interface DropdownToggleAction {
  type: typeof DropdownActionTypes.toggle;
  event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent | null;
}
interface DropdownOpenAction {
  type: typeof DropdownActionTypes.open;
  event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent | null;
}
interface DropdownCloseAction {
  type: typeof DropdownActionTypes.close;
  event: React.MouseEvent | React.KeyboardEvent | React.FocusEvent | null;
}
export type DropdownAction = DropdownBlurAction | DropdownEscapeKeyDownAction | DropdownToggleAction | DropdownOpenAction | DropdownCloseAction;
export type DropdownState = {
  open: boolean;
  changeReason: React.MouseEvent | React.KeyboardEvent | React.FocusEvent | null;
};
export {};