import React, { useCallback } from 'react'; import { clsx } from 'clsx'; import { forwardRef } from '../utils/react'; import { Box } from '../box'; import * as css from './input-container.css'; /*-- Types --*/ export interface InputAddonProps extends Pick {} export interface InputContainerProps extends css.InputContainerVariants { startAddon?: React.ReactNode; startAddonProps?: InputAddonProps; endAddon?: React.ReactNode; endAddonProps?: InputAddonProps; startAddonRef?: React.ForwardedRef; endAddonRef?: React.ForwardedRef; } /*-- Main --*/ export const InputContainer = forwardRef<'div', InputContainerProps>( function InputContainer( { children, className, disabled, focused, full, startAddon, startAddonProps, endAddon, endAddonProps, startAddonRef, endAddonRef, ...rest }, ref, ) { const cn = clsx(className, css.inputContainer({ disabled, focused, full })); const onAddonMouseDown: React.MouseEventHandler = useCallback(event => { // Prevent focus lose from input on clicking addon. event.preventDefault(); }, []); return ( {startAddon && (
{startAddon}
)} {children} {endAddon && (
{endAddon}
)}
); }, );