import { type ViewStyle, type TextStyle } from "react-native"; import { type ColorTokens, type FloatingLabelStyles } from "../../style/index.js"; export type Size = "small" | "default" | "large"; /** The trailing disclosure: which glyph, its size and ink, and whether it turns over while open. */ export interface SelectDisclosure { /** chevronDown (web), chevronsUpDown (iOS) or the Material drop-down triangle (Android). */ glyph: "chevronDown" | "chevronsUpDown" | "triangle"; /** The glyph's box (px); the triangle is drawn 10x5 centered in it. */ size: (size: Size) => number; color: (t: ColorTokens, open: boolean) => string; /** The glyph turns over (180 degrees) while the list is open. */ flips: boolean; } export interface SelectSkin extends FloatingLabelStyles { /** The dense web field and its compact option rows. Native skins retain their platform control. */ reference?: { trigger: (t: ColorTokens, open: boolean, hovered?: boolean, focused?: boolean) => ViewStyle; value: (t: ColorTokens) => TextStyle; label: (t: ColorTokens) => TextStyle; row: (t: ColorTokens, selected: boolean) => ViewStyle; option: (t: ColorTokens, selected: boolean) => TextStyle; /** The dense chevron's size (px). */ chevron: number; }; /** Type scale per size; the trigger value shares it. */ text: (size: Size) => TextStyle; /** The stacked (above-trigger) label type and its gap to the trigger, used on iOS + web * (`floatingLabel: false`). On Android the label FLOATS inside the trigger instead (see * FloatingLabelStyles: `floatingLabel`, `labelRest`/`labelFloated`/`labelReserve`). */ label: (t: ColorTokens, size: Size) => TextStyle; /** The INLINE label type: a muted label rendered as a leading cluster INSIDE the * trigger row (before the value) when `inline` is set alongside `label`. */ inlineLabel: (t: ColorTokens, size: Size) => TextStyle; /** * The trigger surface: shape, fill, border/underline. `open` lights the active state; * `hovered` and `focused` (keyboard focus) are read only by a skin that draws them (the * web's hover edge and focus edge). */ trigger: (t: ColorTokens, size: Size, open: boolean, hovered?: boolean, focused?: boolean) => ViewStyle; /** The `soft` trigger's fill and edge, over the trigger; a skin that omits it fills with `field-fill`. */ soft?: (t: ColorTokens) => ViewStyle; /** A pointer hover steps the resting edge (web only; native pointer hover waits on the owner). */ hover?: boolean; /** The halo a keyboard-focused trigger wears in place of the kit's ring, or none (the platform owns focus). */ focusHalo?: (t: ColorTokens) => ViewStyle; /** The leading cluster inside the trigger (optional icon + value/placeholder). */ triggerValue: ViewStyle; /** The trigger value text: foreground when a value is selected, the placeholder ink otherwise. */ valueText: (t: ColorTokens, size: Size, hasValue: boolean) => TextStyle; /** The trailing disclosure glyph. */ disclosure: SelectDisclosure; /** The leading globe glyph's size (px) and ink, for `icon`. */ icon: { size: number; color: (t: ColorTokens) => string; }; /** The open option list surface: card visuals only (fill, border, shadow, radius, * padding, maxHeight). AnchoredOverlay paints it on the DENSE layer and supplies the * on-page position; the inline no-host fallback adds PANEL_ANCHOR. */ panel: (t: ColorTokens) => ViewStyle; /** The space between the trigger and the open list. */ panelGap: number; /** A menu of its own width (the iOS pop-up menu); omitted, the list is at least the trigger's width. */ panelWidth?: number; /** An option row. `selected` carries the chosen row's fill. */ optionRow: (t: ColorTokens, selected: boolean) => ViewStyle; /** An optional hairline separator above every row after the first. */ rowSeparator?: (t: ColorTokens) => ViewStyle; /** The fill applied on press (web/iOS; Android uses a ripple). */ optionPressed: (t: ColorTokens) => ViewStyle; /** Option row text. */ optionText: (t: ColorTokens, size: Size) => TextStyle; /** The selection mark's ink (`color`) and size (`fontSize`, the check glyph's px). */ indicator: (t: ColorTokens, size: Size) => TextStyle; /** Where the selection mark renders; "none" marks the chosen row with its fill alone. */ selectedSide: "leading" | "trailing" | "none"; /** The leading mark's slot width (iOS), which every row reserves so labels line up. */ markSlot?: number; /** Opacity applied to the trigger when disabled. */ disabledOpacity: number; /** iOS/web dim the trigger + rows on press; Android uses a ripple instead (null). */ pressedOpacity: number | null; /** Android ripple over the trigger and the rows; null on iOS/web. */ ripple: ((t: ColorTokens) => { color: string; borderless: boolean; }) | null; } export declare const root: ViewStyle; export declare const rootLifted: ViewStyle; export declare const PANEL_ANCHOR: ViewStyle; export declare const webSkin: SelectSkin; export declare const iosSkin: SelectSkin; export declare const androidSkin: SelectSkin; //# sourceMappingURL=select.styles.d.ts.map