# 컴포넌트 Props 레퍼런스 > **중요**: 레이아웃 JSON 작성 시 반드시 이 문서에서 지원되는 props를 확인하세요. --- ## 목차 1. [핵심 원칙](#핵심-원칙) 2. [Select 컴포넌트](#select-컴포넌트) 3. [Input 컴포넌트](#input-컴포넌트) 4. [Button 컴포넌트](#button-컴포넌트) 5. [DataGrid 컴포넌트](#datagrid-컴포넌트) 6. [HtmlEditor 컴포넌트](#htmleditor-컴포넌트) 7. [CodeEditor 컴포넌트](#codeeditor-컴포넌트) 8. [Modal 컴포넌트](#modal-컴포넌트) 9. [LoadingSpinner 컴포넌트](#loadingspinner-컴포넌트) 10. [관련 문서](#관련-문서) --- ## 핵심 원칙 ``` 필수: 레이아웃 JSON 작성 전 이 문서에서 props 확인 (문서에 없는 props 사용 금지) 필수: 작성 후 /validate-frontend 스킬로 검증 ``` ### props 사용 전 확인 체크리스트 레이아웃 JSON에서 컴포넌트 props 작성 시: 1. **이 문서에서 해당 컴포넌트의 지원 props 확인** 2. **props 타입과 기본값 확인** 3. **레이아웃 JSON 작성** 4. **`/validate-frontend` 스킬로 검증** --- ## Select 컴포넌트 **타입**: `basic` | **템플릿**: `sirsoft-admin_basic`, `sirsoft-basic` **파일**: `templates/*/src/components/basic/Select.tsx` ### Props 인터페이스 ```typescript export interface SelectOption { value: string | number; // 옵션 값 (필수) label: string; // 표시될 라벨 (필수) disabled?: boolean; // 옵션 비활성화 여부 } export interface SelectProps extends React.SelectHTMLAttributes { // 커스텀 Props options?: SelectOption[] | string[]; // 옵션 배열 label?: string; // 레이블 텍스트 (상위 컴포넌트에서 처리) error?: string; // 에러 메시지 (상위 컴포넌트에서 처리) searchable?: boolean; // 드롭다운 내 검색 input 활성화 (engine-v1.40.0+) searchPlaceholder?: string; // 검색 input placeholder (searchable=true일 때) // HTML Select 표준 Props (모두 지원) value?: string | number; // 선택된 값 (제어 컴포넌트) defaultValue?: string | number; // 기본 선택값 (비제어 컴포넌트) name?: string; // 폼 필드명 id?: string; // 요소 ID disabled?: boolean; // 비활성화 required?: boolean; // 필수 입력 className?: string; // CSS 클래스 multiple?: boolean; // 다중 선택 (children 모드만) size?: number; // 표시 행 수 (children 모드만) } ``` ### 지원 Props 요약 | Props | 타입 | 필수 | 기본값 | 설명 | |-------|------|------|--------|------| | `options` | `SelectOption[]` \| `string[]` | ❌ | - | 드롭다운 옵션 배열 | | `value` | `string` \| `number` | ❌ | - | 선택된 값 (제어 컴포넌트) | | `defaultValue` | `string` \| `number` | ❌ | - | 기본 선택값 (비제어 컴포넌트) | | `name` | `string` | ❌ | - | 폼 필드명 | | `disabled` | `boolean` | ❌ | `false` | 비활성화 | | `required` | `boolean` | ❌ | `false` | 필수 입력 | | `className` | `string` | ❌ | - | CSS 클래스 | | `placeholder` | `string` | ❌ | - | 플레이스홀더 (옵션 배열 첫 항목) | | `searchable` | `boolean` | ❌ | `false` | 드롭다운 내 검색 input 활성화 (label/value 부분일치 필터링, engine-v1.40.0+) | | `searchPlaceholder` | `string` | ❌ | `'Search...'` | 검색 input placeholder (searchable=true일 때) | ### 렌더링 모드 Select 컴포넌트는 두 가지 모드로 동작합니다: 1. **Options 모드** (권장): `options` prop 제공 시 커스텀 드롭다운 2. **Children 모드**: `options` 없이 children으로 `