import { type TextStyle, type ViewStyle } from "react-native"; import { type ColorTokens, type FloatingLabelStyles } from "../../style/index.js"; export type Size = "small" | "base" | "large"; export interface TextareaFieldState { /** Error/validation state (error or invalid prop). */ error: boolean; /** The field currently holds keyboard focus. */ focused: boolean; /** A pointer rests over the field (web only; the skin declares `hover`). */ hovered?: boolean; } export interface TextareaSkin extends FloatingLabelStyles { /** Clear Liquid Glass text entry on the web appearance. */ liquid?: boolean; referenceLabel?: boolean; /** The above-field label's whole type and ink: every skin supplies it, Android's too, * for the flush field, which never floats its label. */ labelAbove: NonNullable["labelAbove"]>; field: (tokens: ColorTokens, state: TextareaFieldState) => TextStyle; /** The value's type scale per size. */ text: (size: Size) => TextStyle; /** The field's minimum height for a row count (the field still grows with content). */ minHeight: (rows: number | undefined, size: Size) => TextStyle; /** Whether a pointer hover steps the resting edge to `subtle-foreground` (web only; * native pointer hover waits on the owner, src/style/hover.tsx). */ hover?: boolean; /** The halo around a focused field (a box-shadow spread), or absent for none. */ focusHalo?: (tokens: ColorTokens) => ViewStyle; /** What a flush field keeps of its inset once its frame drops (absent: the framed inset). */ flushInset?: TextStyle; /** The placeholder ink. */ placeholder: (tokens: ColorTokens) => string; /** Opacity applied to the field and its label when disabled. */ disabledOpacity: number; /** The gap between the above-field label and the field. */ labelGap: number; /** The leading inset the Android floating label aligns with (the field's side inset). */ labelInset?: number; /** * The live character-count line the component renders under the field when * `showCount` is set (end-aligned, "N / max"). The subtle or muted caption at rest, * `destructive-text` once the count passes the soft cap so the overage reads as an * error. Only the type conventions change per OS. */ count: (tokens: ColorTokens, over: boolean) => TextStyle; /** The count row's own place under the field: its gap from the field and any side inset. */ countRow: { gap: number; inset: number; }; /** What joins the count to its cap: " / " (web, Android) or "/" (iOS). */ countJoin: string; } export declare const webSkin: TextareaSkin; export declare const iosSkin: TextareaSkin; export declare const androidSkin: TextareaSkin; /** Dense paragraph entry shares Argus Input's inset and semibold values. */ export declare const denseText: TextStyle; export declare const denseField: (tokens: ColorTokens) => TextStyle; export declare const denseMinHeight: (rows?: number) => TextStyle; /** A chat composer's entry (reference claude-desktop-chat): one 20 px line at 6 by 8 in. */ export declare const composerText: TextStyle; export declare const composerField: TextStyle; export declare const composerMinHeight: (rows?: number) => TextStyle; /** Terminal prompts share transcript metrics without borrowing a platform field inset. */ export declare const terminalText: TextStyle; export declare const terminalField: TextStyle; export declare const terminalMinHeight: (rows?: number) => TextStyle; //# sourceMappingURL=textarea.styles.d.ts.map