import { type FieldWidthProps, type StyleProp, type ViewStyle } from "../../style/index.js";
import { type SelectSkin } from "./select.styles.js";
/**
* An option whose stored value differs from the text shown for it, for lists
* keyed by id (a project id, a region slug, a workspace name). Passing bare
* strings stays supported and means the value and the label are the same.
*/
export interface SelectOption {
value: string;
label: string;
}
export interface SelectProps extends FieldWidthProps {
/**
* Controlled selection; omit for uncontrolled use. Empty shows the placeholder.
* With plain string options this is the option itself; with `SelectOption`
* objects it is the option's `value`, and the trigger shows its `label`.
*/
value?: string;
/** Initial selection for uncontrolled use (a bare picks on its own). */
defaultValue?: string;
/**
* The selectable options: bare strings, or `{ value, label }` objects when the
* stored value differs from the text shown for it.
*/
options?: Array;
/**
* The field's persistent label. Its placement is platform-adaptive: iOS and web
* render it ABOVE the trigger; Android renders the Material 3 in-container
* FLOATING label (centered like a placeholder at rest, floating to the top once
* the menu opens or a value is selected). The label names the field for a11y.
*/
label?: string;
/**
* Places the `label` as a LEADING cluster INSIDE the trigger row (a toolbar-style
* labeled select) instead of the persistent above/floating placement. Takes effect
* only alongside `label`. The inline label still names the trigger (accessibilityLabel
* / aria-labelledby) and shares its tap target, since it lives inside the trigger
* Pressable. Pairs with `fit` for a content-hugging toolbar cluster.
*/
inline?: boolean;
/**
* Marks the field as required: appends a destructive "*" to the label (hidden
* from the accessible name) and sets aria-required on the trigger. Takes effect
* only alongside `label`.
*/
required?: boolean;
/** Renders a leading globe glyph inside the trigger, indented so the value clears it. */
icon?: boolean;
/** Prompt shown in the trigger when no value is selected. */
placeholder?: string;
/** Controlled open state of the option list; omit for uncontrolled use. */
open?: boolean;
/** Initial open state for uncontrolled use. */
defaultOpen?: boolean;
/** Fired when the open state changes (trigger press, select), in both modes. */
onOpenChange?: (open: boolean) => void;
/** Dims the control and blocks interaction. */
disabled?: boolean;
/** Called with the chosen option's value when a row is pressed (both modes). */
onSelect?: (option: string) => void;
/** E2E hook forwarded to the trigger pressable. */
testID?: string;
small?: boolean;
large?: boolean;
/** Outer flex composition within a parent only, never a restyle hook; width comes from the width axis (block/narrow/wide). */
style?: StyleProp;
}
/** Build a Select component from a platform skin. */
export declare function createSelect(skin: SelectSkin): (props: SelectProps) => import("react").JSX.Element;
//# sourceMappingURL=select.shared.d.ts.map