import { cn } from '../core/styling'; import * as React from 'react'; import { BasicField, BasicFieldOptions, extractBasicFieldProps, } from '../basic-field'; import { extractInputPartProps, InputAddon, InputAnatomy, InputContainer, InputIcon, InputStyling, } from '../input'; /* ------------------------------------------------------------------------------------------------- * TextInput * -----------------------------------------------------------------------------------------------*/ export type TextInputProps = Omit< React.ComponentPropsWithRef<'input'>, 'size' > & InputStyling & BasicFieldOptions & { /** * Callback invoked when the value changes. Returns the string value. */ onValueChange?: (value: string) => void; }; export const TextInput = React.forwardRef( (props, ref) => { const [props1, basicFieldProps] = extractBasicFieldProps( props, React.useId() ); const [ { size, intent, leftAddon, leftIcon, rightAddon, rightIcon, className, onValueChange, onChange, ...rest }, { inputContainerProps, leftAddonProps, leftIconProps, rightAddonProps, rightIconProps, }, ] = extractInputPartProps({ ...props1, size: props1.size ?? 'md', intent: props1.intent ?? 'basic', leftAddon: props1.leftAddon, leftIcon: props1.leftIcon, rightAddon: props1.rightAddon, rightIcon: props1.rightIcon, }); const handleOnChange = React.useCallback( (e: React.ChangeEvent) => { onValueChange?.(e.target.value); onChange?.(e); }, [] ); return ( ); } ); TextInput.displayName = 'TextInput';