import { type ReactNode } from "react";
export interface SelectOption {
    value: string;
    label: string;
    icon?: ReactNode;
    description?: string;
    disabled?: boolean;
}
export interface SelectProps {
    options: SelectOption[];
    value?: string;
    defaultValue?: string;
    onChange?: (value: string) => void;
    placeholder?: string;
    searchable?: boolean;
    label?: string;
    error?: boolean;
    errorMessage?: string;
    disabled?: boolean;
    size?: "sm" | "md" | "lg";
    className?: string;
    /** Name for form submission (forwarded to the HiddenSelect element). */
    name?: string;
    /** Required flag for form submission (forwarded to HiddenSelect). */
    required?: boolean;
    /** Stable id for the trigger button (and the source for label htmlFor). */
    id?: string;
    /** Associate this control with an external <form id="..."> element. */
    form?: string;
    /** Auto-focus the trigger on mount. */
    autoFocus?: boolean;
    /** Optional aria-label when no visible label is provided. */
    "aria-label"?: string;
    /** Optional aria-labelledby override. */
    "aria-labelledby"?: string;
    /** Optional aria-describedby (e.g. for helper text outside the component). */
    "aria-describedby"?: string;
    /** Helper text rendered below the trigger. Suppressed when `error`
     *  is set (the error message takes the slot). */
    helperText?: ReactNode;
    /**
     * Render a check-mark glyph next to the currently selected option in
     * the dropdown. Defaults to `false` — the highlighted background is
     * already a strong visual cue, so doubling up reads as visual noise
     * in dense menus. Re-enable when the menu sits in a context where the
     * highlight isn't enough (e.g. extremely tall menus).
     */
    showCheckmark?: boolean;
    /**
     * Close the popover when the user clicks anywhere outside the trigger
     * + menu. Defaults to `true` — set to `false` for cases where the
     * caller manages dismissal explicitly (e.g. a modal that wraps the
     * select and owns its own close logic).
     */
    closeOnOutsideClick?: boolean;
    /** Show our design-system `<Tooltip>` on hover over options whose
     *  label may be truncated. Default `false` — opt-in via this flag per
     *  the platform's "chrome stays quiet unless explicitly enabled"
     *  convention. The popover surfaces the full label plus the
     *  description on a second line when present. */
    showOverflowTooltips?: boolean;
    /**
     * Floor for the dropdown popover width in pixels. The popover is
     * normally pinned to the trigger's width (visual alignment); pass
     * a number here when the trigger is narrow but option labels are
     * long — e.g. Calendar's compact `size="sm"` month/year caption
     * where the trigger is ~70 px but month names like "September"
     * need ~110 px. Defaults to the trigger width (no override).
     */
    dropdownMinWidth?: number;
}
export declare const Select: import("react").ForwardRefExoticComponent<SelectProps & import("react").RefAttributes<HTMLButtonElement>>;
//# sourceMappingURL=Select.d.ts.map