import React, { ElementType, HTMLAttributes } from 'react';
import type { Options } from '@popperjs/core';
import { PolymorphicRefForwardingComponent } from '../../helpers';
import type { Placements } from '../../types';
import type { Alignments } from './types';
export interface CDropdownProps extends HTMLAttributes {
/**
* Specifies the alignment of the React Dropdown Menu within this React Dropdown.
*
* @example
* // Align dropdown menu to the end on large devices, otherwise start
*
* Toggle dropdown
*
* Action
* Another Action
*
*
*
* @type 'start' | 'end' | { xs: 'start' | 'end' } | { sm: 'start' | 'end' } |
* { md: 'start' | 'end' } | { lg: 'start' | 'end' } | { xl: 'start' | 'end'} |
* { xxl: 'start' | 'end'}
*/
alignment?: Alignments;
/**
* Determines the root node component (native HTML element or a custom React
* component) for the React Dropdown.
*/
as?: ElementType;
/**
* Configures automatic closing behavior for the React Dropdown:
* - `true` - Close on clicks inside or outside of the React Dropdown Menu.
* - `false` - Disable auto-close; manually call `hide` or `toggle` (also not closed by `Escape`).
* - `'inside'` - Close only when clicking inside the React Dropdown Menu.
* - `'outside'` - Close only when clicking outside the React Dropdown Menu.
*
* @example
* // Close only when user clicks outside of the menu
*
*/
autoClose?: 'inside' | 'outside' | boolean;
/**
* Adds custom classes to the React Dropdown root element.
*/
className?: string;
/**
* Appends the React Dropdown Menu to a specific element. You can pass an HTML
* element or a function returning an element. Defaults to `document.body`.
*
* @example
* // Append the menu to a custom container
* const myContainer = document.getElementById('my-container')
*
*
*
* @since 4.11.0
*/
container?: DocumentFragment | Element | (() => DocumentFragment | Element | null) | null;
/**
* Applies a darker color scheme to the React Dropdown Menu, often used within
* dark navbars.
*/
dark?: boolean;
/**
* Specifies the direction of the React Dropdown.
*/
direction?: 'center' | 'dropup' | 'dropup-center' | 'dropend' | 'dropstart';
/**
* Defines x and y offsets ([x, y]) for the React Dropdown Menu relative to
* its target.
*
* @example
* // Offset the menu 10px in X and 5px in Y direction
*
* ...
*
*/
offset?: [number, number];
/**
* Callback fired right before the React Dropdown becomes hidden.
*
* @since 4.9.0
*/
onHide?: () => void;
/**
* Callback fired immediately after the React Dropdown is displayed.
*/
onShow?: () => void;
/**
* Determines the placement of the React Dropdown Menu after Popper.js
* modifiers.
*
* @type 'auto' | 'auto-start' | 'auto-end' | 'top-end' | 'top' | 'top-start' | 'bottom-end' | 'bottom' | 'bottom-start' | 'right-start' | 'right' | 'right-end' | 'left-start' | 'left' | 'left-end'
*/
placement?: Placements;
/**
* Enables or disables dynamic positioning via Popper.js for the React
* Dropdown Menu.
*/
popper?: boolean;
/**
* Provides a custom Popper.js configuration or a function that returns a
* modified Popper.js configuration for advanced positioning of the React
* Dropdown Menu. [Read more](https://popper.js.org/docs/v2/constructors/#options)
*
* @example
* // Providing a custom popper config
* ...
*
* @since 5.5.0
*/
popperConfig?: Partial | ((defaultPopperConfig: Partial) => Partial);
/**
* Renders the React Dropdown Menu using a React Portal, allowing it to escape
* the DOM hierarchy for improved positioning.
*
* @since 4.8.0
*/
portal?: boolean;
/**
* Sets the reference element for positioning the React Dropdown Menu.
* - `toggle` - The React Dropdown Toggle button (default).
* - `parent` - The React Dropdown wrapper element.
* - `HTMLElement` - A custom HTML element.
* - `React.RefObject` - A custom reference element.
*
* @example
* // Use the parent element as reference for positioning
*
* Toggle dropdown
*
* Action
* Another Action
*
*
*
* @since 5.9.0
*/
reference?: 'parent' | 'toggle' | HTMLElement | React.RefObject;
/**
* Defines the visual variant of the React Dropdown
*/
variant?: 'btn-group' | 'dropdown' | 'input-group' | 'nav-item';
/**
* Controls the visibility of the React Dropdown Menu:
* - `true` - Visible
* - `false` - Hidden
*
* @example
* // Programmatically manage the dropdown visibility
* const [visible, setVisible] = useState(false)
*
*
* ...
*
*
*/
visible?: boolean;
}
export declare const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>;