import React, { useId } from 'react'; interface Option { value: string | number; label: string; } interface SelectProps extends Omit, 'className'> { label: string; className?: { container?: string; label?: string; input?: string; }; options: Option[]; placeholder?: string; } /** * Componente `Select` reutilizable en React. * * Este componente renderiza un elemento ` * * @param {Object} props - Propiedades del componente. * @param {string} props.label - Etiqueta visible asociada al campo. * @param {Array<{ value: string | number, label: string }>} props.options - Lista de opciones disponibles en el select. * @param {string} [props.placeholder] - Opción deshabilitada inicial que actúa como guía o título (si se proporciona). * @param {string} [props.name] - Nombre del campo (útil en formularios). * @param {string} [props.id] - ID del campo; si no se proporciona, se genera automáticamente. * @param {string | number} [props.defaultValue] - Valor por defecto del select (modo no controlado). * @param {string | number} [props.value] - Valor actual del select (modo controlado). * @param {Object} [props.className] - Objeto para aplicar clases CSS personalizadas. * @param {string} [props.className.container] - Clases del contenedor principal. * @param {string} [props.className.label] - Clases de la etiqueta. * @param {string} [props.className.input] - Clases del ``. * * @returns {JSX.Element} Un elemento ` {placeholder && ( )} {options.map((option) => ( ))} ); }; export default Select;