UNPKG

@gambito-corp/mbs-library

Version:

Librería de componentes React reutilizables - Sistema de diseño modular y escalable

64 lines (56 loc) 2.41 kB
import React from 'react'; const SearchInput = ({ value, onChange, placeholder = 'Buscar...', disabled = false, onClear, className = '', ...props }) => { const baseClasses = 'w-full pl-10 pr-10 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 transition-colors duration-200'; const disabledClasses = disabled ? 'bg-gray-100 cursor-not-allowed opacity-60' : 'bg-white'; const handleClear = () => { if (onClear) { onClear(); } else if (onChange) { onChange({ target: { value: '' } }); } }; return ( <div className="relative"> {/* Icono de búsqueda */} <div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"> <svg className="h-5 w-5 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" /> </svg> </div> <input type="text" value={value} onChange={onChange} placeholder={placeholder} disabled={disabled} className={`${baseClasses} ${disabledClasses} ${className}`} {...props} /> {/* Botón de limpiar */} {value && ( <div className="absolute inset-y-0 right-0 pr-3 flex items-center"> <button type="button" onClick={handleClear} className="text-gray-400 hover:text-gray-600 focus:outline-none" > <svg className="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" /> </svg> </button> </div> )} </div> ); }; export default SearchInput;