import React from "react";
import type { SelectProps, SelectButtonProps, SelectOptionsProps, SelectOptionProps, SelectState, SelectSize, SelectThemeOverrides } from "./Select.types";
import { useSelectState, type UseSelectStateReturn, type UseSelectStateProps } from "./useSelectState";
/**
 * Context value type for Select components
 * Extends UseSelectStateReturn with additional component-specific properties
 */
export interface SelectContextValue<T = any> extends UseSelectStateReturn<T> {
    /** Size variant */
    size: SelectSize;
    /** Component state (default, disabled) */
    state: SelectState;
    /** Theme configuration */
    theme: SelectThemeOverrides;
    /** Whether search is enabled */
    searchable: boolean;
    /** Whether typeahead is enabled */
    enableTypeahead: boolean;
    /** Button ref (alias for triggerRef for backward compatibility) */
    buttonRef: React.MutableRefObject<HTMLButtonElement | null>;
}
/**
 * SelectContext - exported for external consumption
 */
export declare const SelectContext: React.Context<SelectContextValue<any> | undefined>;
/**
 * useSelectContext - Hook to consume SelectContext
 * Throws if used outside of SelectProvider
 */
export declare const useSelectContext: <T = any>() => SelectContextValue<T>;
/**
 * Props for the SelectProvider component
 */
export interface SelectProviderProps<T = any> {
    /** Child components */
    children: React.ReactNode;
    /** State from useSelectState hook */
    selectState: UseSelectStateReturn<T>;
    /** Size variant */
    size?: SelectSize;
    /** Component state */
    componentState?: SelectState;
    /** Theme overrides */
    theme?: SelectThemeOverrides;
    /** Whether search is enabled */
    searchable?: boolean;
    /** Whether typeahead is enabled */
    enableTypeahead?: boolean;
}
/**
 * SelectProvider - Provides select context to children
 *
 * This component allows building custom dropdown components using Select primitives.
 *
 * @example
 * ```tsx
 * const selectState = useSelectState({ options, value, onChange });
 *
 * <SelectProvider selectState={selectState} size="md">
 *   <MyCustomTrigger />
 *   <SelectOptions isOpen={selectState.isOpen}>
 *     {selectState.filteredOptions.map(option => (
 *       <SelectOption key={option.id} value={option.value}>
 *         {option.label}
 *       </SelectOption>
 *     ))}
 *   </SelectOptions>
 * </SelectProvider>
 * ```
 */
export declare function SelectProvider<T = any>({ children, selectState, size, componentState, theme: themeOverrides, searchable, enableTypeahead, }: SelectProviderProps<T>): import("react/jsx-runtime").JSX.Element;
/**
 * Select Button Component
 */
export declare const SelectButton: React.FC<SelectButtonProps>;
/**
 * Extended props for SelectOptions to support custom triggers
 */
export interface SelectOptionsExtendedProps extends SelectOptionsProps {
    /** Custom trigger ref - if provided, uses this instead of buttonRef from context */
    triggerRef?: React.RefObject<HTMLElement>;
}
/**
 * Select Options Component
 */
export declare const SelectOptions: React.FC<SelectOptionsExtendedProps>;
/**
 * Select Option Component
 */
export declare const SelectOption: <T extends any>({ value, isSelected, disabled, className, onSelect, children, }: SelectOptionProps<T>) => import("react/jsx-runtime").JSX.Element;
export declare const Select: <T = unknown>(props: SelectProps<T> & React.RefAttributes<HTMLDivElement>) => React.ReactElement | null;
export { useSelectState };
export type { UseSelectStateProps, UseSelectStateReturn };
