export interface UseExpandCollapseOptions {
    /** Initial expanded state for uncontrolled mode. */
    defaultExpanded?: boolean;
    /** Controlled expanded state. When provided, the hook is in controlled mode. */
    expanded?: boolean;
    /** Callback invoked when the expanded state changes. */
    onToggle?: (expanded: boolean) => void;
}
export interface UseExpandCollapseReturn {
    /** Whether the content is currently expanded. */
    isExpanded: boolean;
    /** Toggles the expanded state. */
    toggle: () => void;
    /**
     * Props to spread on the trigger element (button).
     *
     * Includes `aria-expanded`, `aria-controls`, and `onClick`.
     * Matches the Arrow Accordion pattern where the headline button
     * carries `aria-expanded` and `aria-controls` referencing the body panel.
     */
    triggerProps: {
        'aria-expanded': boolean;
        'aria-controls': string;
        onClick: () => void;
    };
    /**
     * Props to spread on the collapsible content element.
     *
     * Includes `id` (linked to trigger's `aria-controls`),
     * `role`, and `hidden` when collapsed.
     */
    contentProps: {
        id: string;
        role: 'region';
        'aria-labelledby': string;
        hidden: boolean | undefined;
    };
}
/**
 * Manages expand/collapse behavior for Arrow components like Accordion,
 * DisclosureCard, DisclosureMenu, and Modal.
 *
 * Supports both controlled (`expanded` + `onToggle`) and uncontrolled
 * (`defaultExpanded`) modes. Generates unique IDs via `React.useId()`
 * for `aria-controls` / `aria-labelledby` linkage.
 *
 * @example
 * const { isExpanded, triggerProps, contentProps } = useExpandCollapse({
 *   defaultExpanded: false,
 * });
 *
 * <h2>
 *   <button {...triggerProps}>Headline</button>
 * </h2>
 * <div {...contentProps}>Body content</div>
 */
export declare function useExpandCollapse({ defaultExpanded, expanded, onToggle, }?: UseExpandCollapseOptions): UseExpandCollapseReturn;
//# sourceMappingURL=useExpandCollapse.d.ts.map