import React, { forwardRef } from 'react' import { TypeGuards } from '@codeleap/types' import { getRenderedComponent } from '@codeleap/utils' import { } from '../Button' import { View } from '../View' import { useInputBaseStyles } from './styles' import { InputBaseProps } from './types' import { Text } from '../Text' import RNAnimated, { FadeIn, FadeOut } from 'react-native-reanimated' import { View as RNView } from 'react-native' import { StyledComponentWithProps } from '@codeleap/styles' export { useInputBase } from './useInputBase' export * from './styles' export * from './utils' export * from './types' export const InputBaseDefaultOrder: InputBaseProps['order'] = [ 'label', 'description', 'innerWrapper', 'error', ] export const InputBase = forwardRef((props: InputBaseProps, ref) => { const { children, error = null, label, description = null, leftIcon = null, rightIcon = null, wrapper, debugName, innerWrapper, focused, innerWrapperProps = {}, wrapperProps = {}, disabled, order = InputBaseDefaultOrder, style, labelAsRow, hideErrorMessage, ...otherProps } = { ...InputBase.defaultProps, ...props, } const styles = useInputBaseStyles(props) const WrapperComponent = wrapper ?? View const InnerWrapperComponent = innerWrapper ?? View return {TypeGuards.isString(label) ? : label} {TypeGuards.isString(description) ? : description} {_leftIcon} {children} {_rightIcon} {hideErrorMessage || !error ? null : ( {TypeGuards.isString(error) ? : error} )} }) as StyledComponentWithProps InputBase.elements = ['wrapper', 'innerWrapper', 'label', 'errorMessage', 'description', 'icon', 'leftIcon', 'rightIcon'] InputBase.defaultProps = { disabled: false, labelAsRow: false, hideErrorMessage: false, order: InputBaseDefaultOrder, wrapper: View, innerWrapper: View, } as Partial