import React from 'react'; interface TestIDProps { testID?: string; } interface BoxProps { children?: React.ReactNode; backgroundColor?: string; borderColor?: string; borderWidth?: number; borderBottomWidth?: number; borderBottomColor?: string; borderTopWidth?: number; borderTopColor?: string; borderLeftWidth?: number; borderLeftColor?: string; borderRightWidth?: number; borderRightColor?: string; borderRadius?: number | string; borderStyle?: "solid" | "dashed" | "dotted" | "none"; height?: number | string; padding?: number | string; paddingHorizontal?: number | string; paddingVertical?: number | string; paddingTop?: number | string; paddingBottom?: number | string; paddingLeft?: number | string; paddingRight?: number | string; margin?: number | string; marginTop?: number | string; marginBottom?: number | string; marginLeft?: number | string; marginRight?: number | string; flexDirection?: "row" | "column"; flexWrap?: "wrap" | "nowrap" | "wrap-reverse"; alignItems?: "center" | "flex-start" | "flex-end" | "stretch"; justifyContent?: "center" | "flex-start" | "flex-end" | "space-between" | "space-around"; position?: "relative" | "absolute" | "static" | "fixed"; top?: number | string; bottom?: number | string; left?: number | string; right?: number | string; width?: number | string; flex?: number; flexShrink?: number; gap?: number | string; alignSelf?: "center" | "flex-start" | "flex-end" | "stretch"; overflow?: "visible" | "hidden" | "scroll"; overflowX?: "visible" | "hidden" | "scroll" | "auto"; overflowY?: "visible" | "hidden" | "scroll" | "auto"; zIndex?: number; cursor?: "pointer" | "default" | "not-allowed" | "wait" | "text" | "move" | "grab" | "grabbing" | "inherit"; onPress?: () => void; hoverStyle?: { backgroundColor?: string; borderColor?: string; }; pressStyle?: { backgroundColor?: string; }; focusStyle?: { outlineColor?: string; outlineWidth?: number; outlineOffset?: number; outlineStyle?: "solid" | "dashed" | "dotted" | "none"; }; outline?: string; outlineColor?: string; outlineWidth?: number | string; outlineOffset?: number | string; outlineStyle?: "solid" | "dashed" | "dotted" | "none"; className?: string; "data-testid"?: string; testID?: string; disabled?: boolean; minWidth?: number | string; minHeight?: number | string; maxWidth?: number | string; maxHeight?: number | string; style?: React.CSSProperties; role?: string; "aria-label"?: string; "aria-labelledby"?: string; "aria-current"?: boolean | "time" | "false" | "true" | "page" | "step" | "location" | "date"; "aria-disabled"?: boolean; "aria-live"?: "polite" | "assertive" | "off"; "aria-busy"?: boolean; "aria-describedby"?: string; "aria-expanded"?: boolean; "aria-haspopup"?: boolean | "menu" | "listbox" | "tree" | "grid" | "dialog"; "aria-pressed"?: boolean | "mixed"; "aria-controls"?: string; tabIndex?: number; onKeyDown?: (e: React.KeyboardEvent) => void; onKeyUp?: (e: React.KeyboardEvent) => void; onLayout?: (event: any) => void; onMouseEnter?: (e: any) => void; onMouseLeave?: (e: any) => void; onPaste?: (e: React.ClipboardEvent) => void; onMoveShouldSetResponder?: (e: any) => boolean; onResponderGrant?: (e: any) => void; onResponderMove?: (e: any) => void; onResponderRelease?: (e: any) => void; onResponderTerminate?: (e: any) => void; as?: keyof JSX.IntrinsicElements; src?: string; alt?: string; /** Image load error handler. Only used when as="img". */ onError?: (e: any) => void; /** Image load success handler. Only used when as="img". */ onLoad?: (e: any) => void; id?: string; /** Button type attribute (only used when as="button") */ type?: "button" | "submit" | "reset"; } interface TextProps { children?: React.ReactNode; color?: string; fontSize?: number | string; fontWeight?: string | number; fontFamily?: string; lineHeight?: number | string; whiteSpace?: "normal" | "nowrap" | "pre" | "pre-line" | "pre-wrap"; textAlign?: "left" | "center" | "right" | "justify"; textDecoration?: "none" | "underline" | "line-through"; /** Limits text to N lines with ellipsis truncation (native equivalent of noWrap) */ numberOfLines?: number; style?: React.CSSProperties; className?: string; id?: string; role?: string; testID?: string; /** Test ID for testing frameworks (web) */ "data-testid"?: string; } interface SpinnerProps { color?: string; size?: number | string; strokeWidth?: number; /** Accessible role for the spinner */ role?: string; /** Accessible label for screen readers */ "aria-label"?: string; /** Aria live region behavior */ "aria-live"?: "polite" | "assertive" | "off"; /** ID of element that describes this spinner */ "aria-describedby"?: string; testID?: string; } interface IconProps { name?: string; color?: string; size?: number | string; children?: React.ReactNode; testID?: string; /** Test ID for testing frameworks (web) */ "data-testid"?: string; } interface DividerProps { color?: string; height?: number | string; width?: number | string; vertical?: boolean; dashStroke?: boolean; testID?: string; /** Test ID for testing frameworks (web) */ "data-testid"?: string; } interface InputPrimitiveProps { value?: string; placeholder?: string; onChange?: (e: React.ChangeEvent) => void; onChangeText?: (text: string) => void; onFocus?: () => void; onBlur?: () => void; onKeyDown?: (e: React.KeyboardEvent) => void; disabled?: boolean; secureTextEntry?: boolean; style?: React.CSSProperties; color?: string; fontSize?: number | string; fontFamily?: string; placeholderTextColor?: string; maxLength?: number; name?: string; type?: string; /** Input mode for virtual keyboard (web: inputMode, native: keyboardType) */ inputMode?: "none" | "text" | "decimal" | "numeric" | "tel" | "search" | "email" | "url"; /** Autocomplete behavior (web: autocomplete, native: textContentType/autoComplete) */ autoComplete?: string; id?: string; "aria-invalid"?: boolean; "aria-describedby"?: string; "aria-labelledby"?: string; "aria-label"?: string; "aria-disabled"?: boolean; "data-testid"?: string; testID?: string; } interface TextAreaPrimitiveProps extends Omit { onKeyDown?: (e: React.KeyboardEvent) => void; rows?: number; autoSize?: boolean; testID?: string; } interface LinearGradientProps { /** Gradient color stops from start to end */ colors: string[]; /** Start point as {x, y} where 0,0 is top-left and 1,1 is bottom-right. Defaults to {x: 0, y: 0} */ start?: { x: number; y: number; }; /** End point as {x, y} where 0,0 is top-left and 1,1 is bottom-right. Defaults to {x: 0, y: 1} */ end?: { x: number; y: number; }; /** Optional stop positions (0-1) for each color. If omitted, colors are evenly distributed */ locations?: number[]; children?: React.ReactNode; position?: "relative" | "absolute"; top?: number | string; bottom?: number | string; left?: number | string; right?: number | string; width?: number | string; height?: number | string; borderRadius?: number | string; overflow?: "visible" | "hidden"; zIndex?: number; style?: React.CSSProperties; "data-testid"?: string; testID?: string; } export type { BoxProps, DividerProps, IconProps, InputPrimitiveProps, LinearGradientProps, SpinnerProps, TestIDProps, TextAreaPrimitiveProps, TextProps };