import { Select as SelectPrimitive } from '@base-ui/react/select';
import { ButtonProps } from '../Button';
import { FormElementSize } from '../../primitives/form-element';
import * as React from 'react';
type SelectRootProps<Value> = SelectPrimitive.Root.Props<Value, false>;
type SelectChangeDetails = Parameters<NonNullable<SelectRootProps<unknown>['onValueChange']>>[1];
/**
 * `onValueChange` is intentionally narrowed to a non-null value: these selects
 * always hold a value once changed, which keeps existing `(value) => void`
 * consumer handlers valid (Base UI's own callback type is `Value | null`).
 */
type SelectProps<Value = string> = Omit<SelectRootProps<Value>, 'onValueChange'> & {
    onValueChange?: (value: Value, eventDetails: SelectChangeDetails) => void;
};
declare function Select<Value = string>({ children, items, onValueChange, ...props }: SelectProps<Value>): import("react/jsx-runtime").JSX.Element;
declare namespace Select {
    var displayName: string;
}
declare const SelectGroup: React.ForwardRefExoticComponent<Omit<import('@base-ui/react').SelectGroupProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
export type SelectValueProps = Omit<SelectPrimitive.Value.Props, 'className'> & {
    className?: string;
};
/**
 * Displays the selected value. Radix's `Select.Value` took a `placeholder`
 * prop and rendered the selected item's text automatically; Base UI's
 * `Select.Value` behaves the same way (renders the value, falls back to
 * `placeholder` when nothing is selected), so this is a thin passthrough.
 */
declare const SelectValue: React.ForwardRefExoticComponent<Omit<SelectValueProps, "ref"> & React.RefAttributes<HTMLSpanElement>>;
export type SelectTriggerProps = Omit<SelectPrimitive.Trigger.Props, 'className'> & {
    className?: string;
    size?: FormElementSize;
    /** Kept for API compatibility; styling is now intrinsic to the trigger. */
    variant?: ButtonProps['variant'];
};
declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectTriggerProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
export type SelectContentProps = Omit<SelectPrimitive.Popup.Props, 'className'> & {
    className?: string;
    /**
     * Kept for API compatibility with the previous Radix API. Radix supported
     * `position="popper" | "item-aligned"`; Base UI always uses popper-style
     * positioning so this prop is accepted but has no effect.
     */
    position?: 'popper' | 'item-aligned';
    /** Optional portal container, forwarded to `Select.Portal`. */
    container?: HTMLElement | null;
    side?: SelectPrimitive.Positioner.Props['side'];
    align?: SelectPrimitive.Positioner.Props['align'];
    sideOffset?: SelectPrimitive.Positioner.Props['sideOffset'];
};
declare const SelectContent: React.ForwardRefExoticComponent<Omit<SelectContentProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
export type SelectItemProps = Omit<SelectPrimitive.Item.Props, 'className'> & {
    className?: string;
};
declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectItemProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectItem };
