import { Select as SelectPrimitive } from '@base-ui/react/select'; import * as React from 'react'; export type SelectState = 'completed' | 'error' | 'success' | 'warning'; /** * PORTED FROM FIGMA `.input-dropdown` (22:3967), whose trigger is the `Input` frame inside it. * * THE TRIGGER NO LONGER MATCHES `Input`'s METRICS, and that is the point of this port. The old * docblock read: "the trigger deliberately matches Input's metrics — a select and a text field sit * next to each other in forms, and any difference in height reads as a mistake." Figma draws * `.input-text` at **36px** and `.input-dropdown` at **48px**, so the difference is not a mistake, * it is the design; and rule 1 makes "Figma drew two heights" outrank "one height looks tidier". * The binding deferred this as "a density decision about every control in the library" — it is * not, because Figma states a height per atom and each atom can take its own. * * The 48px is `h-12` with 16px horizontal padding and no vertical padding: Figma centres a 24px * line in a fixed frame rather than deriving the height from padding. */ declare const selectTriggerStyles: (props?: ({ state?: "error" | "success" | "warning" | "completed" | null | undefined; } & import("class-variance-authority/types").ClassProp) | undefined) => string; declare const selectPopupStyles: (props?: import("class-variance-authority/types").ClassProp | undefined) => string; declare const selectItemStyles: (props?: import("class-variance-authority/types").ClassProp | undefined) => string; /** * The chevron, which Figma FLIPS when the popup opens — `-rotate-180 -scale-x-100` on the open * variant's Action Icon. Only Dev Mode shows this: the REST extraction reported the same * `color/brand/white` glyph in every variant, which is what led the binding to record that "the * ONLY difference between hover and active in the whole node is the 10 -> 8 radius" and to decline * Figma's open state as visually indistinguishable from hover. It is not — the arrow turns over. * * `-scale-x-100` alongside the rotation is a mirror, which for a symmetrical chevron is a no-op, so * only the rotation is ported. The glyph is `color/brand/white` (13.97:1 on the field fill), not * the muted `--color-icon-secondary` this used to draw. */ declare const selectIconStyles: (props?: import("class-variance-authority/types").ClassProp | undefined) => string; export interface SelectOption { value: TValue; label: React.ReactNode; disabled?: boolean; } export interface SelectProps { options: SelectOption[]; value?: TValue; defaultValue?: TValue; onValueChange?: (value: TValue) => void; /** * @default 'Select…' */ placeholder?: string; /** Visual state. `error` also sets `aria-invalid` on the trigger. */ state?: SelectState; disabled?: boolean; /** Trailing glyph on the trigger. */ triggerIcon?: React.ReactNode; /** Applied to the trigger. */ className?: string; /** Applied to the popup. */ popupClassName?: string; id?: string; /** Required unless the trigger is paired with a `