import * as react from 'react';
import { AriaAttributes, RefObject, Ref, RefCallback, useEffect, ReactElement, CSSProperties } from 'react';
import { TransitionProps } from 'react-transition-group/Transition';
import { U as UseSelectedPosition, S as SelectedPosition } from './useSelectedPosition.types-cd760ebb.js';

type Nullable<T> = T | null | false | undefined;
declare function generateUtilityClass<T extends Record<string, any>>(componentName: string, classes: Nullable<Extract<keyof T, string>>[]): T;

declare function useAriaAttributes<T extends Record<string, any>>(props: T): AriaAttributes;

declare function useClasses<S extends string, T extends Record<string, any>>(component: string, slots: Record<S, Nullable<Extract<keyof T, string>>[]>): Record<string, Nullable<Extract<keyof T, string>>[][]>;

declare function useDebounce<T>(value: T, delay?: number): T;

declare function useEventListener<K extends keyof MediaQueryListEventMap>(eventName: K, handler: (event: MediaQueryListEventMap[K]) => void, element: RefObject<MediaQueryList>, options?: boolean | AddEventListenerOptions): void;
declare function useEventListener<K extends keyof WindowEventMap>(eventName: K, handler: (event: WindowEventMap[K]) => void, element?: undefined, options?: boolean | AddEventListenerOptions): void;
declare function useEventListener<K extends keyof HTMLElementEventMap, T extends HTMLElement = HTMLDivElement>(eventName: K, handler: (event: HTMLElementEventMap[K]) => void, element: RefObject<T>, options?: boolean | AddEventListenerOptions): void;
declare function useEventListener<K extends keyof DocumentEventMap>(eventName: K, handler: (event: DocumentEventMap[K]) => void, element: RefObject<Document>, options?: boolean | AddEventListenerOptions): void;

declare function useForwardRef<I>(...refs: Array<Ref<I> | undefined>): RefCallback<I> | null;

declare function useInteraction(): "mouse" | "keyboard" | undefined;

declare const useIsomorphicLayoutEffect: typeof useEffect;

interface UseTransitionProps extends Pick<TransitionProps, "timeout" | "onEnter" | "onExit" | "easing" | "style"> {
    children: ReactElement<any, any>;
    ref?: Ref<unknown>;
    timeout: TransitionProps[""];
    type: keyof CSSProperties;
}
declare function useTransition({ children, easing, onEnter, onExit, ref, style, timeout, type, }: UseTransitionProps): {
    defaultTimeout: {
        enter: string | number;
        exit: string | number;
    };
    handleOnEnter: (mode: "enter" | "exit") => (isAppearing?: boolean) => void;
    handleRef: ((instance: unknown) => void) | null;
    nodeRef: react.RefObject<HTMLElement>;
};

interface WindowSize {
    height: number;
    width: number;
}
declare function useWindowSize(): WindowSize;

declare function useValueChange(value: any, callback: () => void): void;

declare function useSelectedPosition({ childDisplayName, children: childrenProp, innerRef, onChange, preventScroll, size, value, }: UseSelectedPosition): {
    children: react.FunctionComponentElement<any>[];
    selectedPosition: SelectedPosition;
};

export { useClasses as a, useDebounce as b, useEventListener as c, useForwardRef as d, useInteraction as e, useIsomorphicLayoutEffect as f, useTransition as g, useWindowSize as h, useValueChange as i, useSelectedPosition as j, generateUtilityClass as k, useAriaAttributes as u };
