본 컴포넌트는 Next.js 환경에서 **"시각적 일관성"**과 **"개발 편의성"**을 동시에 충족하도록 설계되었다. 브라우저 기본 select 요소의 동작 방식을 유지하면서도, 커스텀 화살표 아이콘과 상태 관리 로직을 통합하여 프로젝트 전반에서 일관된 사용자 경험을 제공한다.


✅ 컴포넌트 구조

파일명 유형 주요 역할
select.tsx Server <select />를 렌더링하는 기본 Select 컴포넌트label 연결 및 option 렌더링 지원

✅ 공통 속성 (SelectProps)

모든 Select 컴포넌트는 아래 타입을 기반으로 하며, 기본적인 HTML select 속성을 지원

속성명 타입 기본값 설명
label string - Select 상단에 렌더링될 라벨 텍스트
options SelectOption[] - { value, label, disabled } 구조의 옵션 데이터 배열
placeholder string - 선택 안내용 옵션(value="", disabled, hidden 상태)
onValueChange (value: string) => void - 변경된 값(e.target.value)만 인자로 받는 편의 콜백
className string - Select 요소에 적용될 추가 Tailwind 클래스

✅ 주요 설계 특징

  1. 상태 기반 아이콘: onMouseDownonBlur 이벤트를 감지하여 드롭다운의 열림/닫힘 상태를 추적하고, 그에 맞는 화살표 아이콘(ArrowUpIcon, ArrowDownIcon)을 보여준다
  2. 자동 ID 매핑: id를 명시하지 않아도 useId를 통해 고유 ID를 생성하여 labelselect를 안정적으로 연결한다
  3. 접근성 유지: 커스텀 드롭다운처럼 보이지만 내부적으로는 표준 selectoption을 사용하므로 모바일 환경의 네이티브 선택창 기능을 온전히 활용할 수 있다

✅ 사용 예시

1. 데이터 기반의 기본 사용

options 프롭에 배열을 전달하여 깔끔하게 선택창을 구성한다.