import React, { useMemo } from "react"; import { IconProps } from "@tamagui/helpers-icon"; import { ColorTokens, GetProps, Input as TamaguiInput, Label, SizeTokens, styled, XStack, YStack } from "tamagui"; import { Caption } from "@/ui/components/typography"; const StyledInput = styled(TamaguiInput, { size: "$large", flex: 1, borderWidth: 0, placeholderTextColor: "$gray8", backgroundColor: "transparent", }); export type InputProps = GetProps & { label?: string; caption?: string; error?: string; leadingAdornment?: React.ComponentType; trailingAdornment?: React.ReactNode; onChangeText?: (text: string) => void; id?: string; }; export const Input = (props: InputProps) => { const { label, caption, error, leadingAdornment, trailingAdornment, onChangeText, id, ...rest } = props; const isInvalid = !!error; const leadingAdornmentComponent = useMemo(() => { return leadingAdornment ? ( {React.createElement(leadingAdornment, { size: "$1", color: "$gray9", })} ) : undefined; }, [leadingAdornment]); return ( {label && ( )} {leadingAdornmentComponent} {trailingAdornment} {caption && !isInvalid && {caption}} {isInvalid && error && {error}} ); };