# 컴포넌트 기본 너비 설정 가이드 ## 개요 화면 관리에서 각 컴포넌트 타입별로 적절한 기본 너비를 설정하고, 컴포넌트가 지정된 너비를 벗어나지 않도록 스타일을 적용했습니다. ## 변경 사항 ### 1. 인풋 컴포넌트 기본 너비 조정 각 인풋 타입별로 적절한 기본 크기를 설정했습니다: #### 텍스트 입력 계열 - **텍스트 입력** (`text-input`): 300px × 40px - **숫자 입력** (`number-input`): 200px × 40px - **텍스트 영역** (`textarea-basic`): 400px × 100px #### 선택 입력 계열 - **선택상자** (`select-basic`): 250px × 40px - **날짜 선택** (`date-input`): 220px × 40px - **체크박스** (`checkbox-basic`): 150px × 32px - **라디오 버튼** (`radio-basic`): 150px × 32px - **슬라이더** (`slider-basic`): 250px × 40px - **토글 스위치** (`toggle-switch`): 180px × 40px #### 파일 및 기타 - **파일 업로드** (`file-upload`): 350px × 40px #### 표시 컴포넌트 - **기본 버튼** (`button-primary`): 120px × 40px - **텍스트 표시** (`text-display`): 150px × 24px - **이미지 표시** (`image-display`): 200px × 200px - **구분선** (`divider-line`): 400px × 2px - **아코디언** (`accordion-basic`): 400px × 200px #### 데이터 컴포넌트 - **테이블 리스트** (`table-list`): 120px × 600px - **카드 표시** (`card-display`): 기존 유지 ### 2. 공통 스타일 적용 `/frontend/lib/registry/components/common/inputStyles.ts` 파일의 모든 스타일 클래스에 다음을 추가: - `max-w-full`: 최대 너비를 부모 컨테이너로 제한 - `overflow-hidden`: 내용이 넘칠 경우 숨김 처리 적용된 클래스: - `INPUT_CLASSES.base` - `INPUT_CLASSES.container` - `INPUT_CLASSES.textarea` - `INPUT_CLASSES.select` - `INPUT_CLASSES.flexContainer` ### 3. 개별 컴포넌트 스타일 적용 #### TextInputComponent - 컨테이너 div: `max-w-full overflow-hidden` 추가 - input 요소: `max-w-full` 추가 - textarea 요소: `max-w-full` 추가 #### RealtimePreviewDynamic - 컴포넌트 렌더링 컨테이너: `max-w-full overflow-hidden` 추가 ## 적용 효과 ### 1. 일관된 초기 크기 - 컴포넌트 드래그 앤 드롭 시 각 타입별로 적절한 기본 크기로 생성됨 - 사용자가 별도로 크기를 조정할 필요 없이 바로 사용 가능 ### 2. 그리드 시스템과의 통합 - **그리드 활성화 시**: `defaultSize.width`를 기준으로 적절한 그리드 컬럼 수 자동 계산 - 예: 300px 너비 → 약 3-4 컬럼 (그리드 설정에 따라 다름) - 계산된 컬럼 수에 맞춰 정확한 너비로 재조정 - **그리드 비활성화 시**: `defaultSize`의 픽셀 값을 그대로 사용 - 일관된 사용자 경험 제공 ### 3. 너비 제한 - 컴포넌트가 설정된 너비를 벗어나지 않음 - 부모 컨테이너 크기에 맞춰 자동으로 조정됨 - 레이아웃 깨짐 방지 ### 4. 반응형 대응 - `max-w-full` 속성으로 부모 컨테이너에 맞춰 자동 축소 - `overflow-hidden`으로 내용 넘침 방지 ## 사용 방법 ### 새 컴포넌트 생성 시 1. 컴포넌트 팔레트에서 원하는 타입 선택 2. 캔버스에 드래그 앤 드롭 3. 자동으로 적절한 기본 크기로 생성됨 ### 크기 조정 1. 컴포넌트 선택 2. 속성 패널에서 "컴포넌트 너비" 선택 3. 드롭다운에서 원하는 너비 선택 (1/12 ~ 12/12) 4. 또는 직접 픽셀 값 입력 ## 주의 사항 ### 기존 화면에 미치는 영향 - 이미 생성된 컴포넌트는 영향 받지 않음 - 새로 생성되는 컴포넌트만 새로운 기본값 적용 ### 스타일 우선순위 1. 인라인 style 속성 2. componentConfig에서 설정한 크기 3. defaultSize (새로 적용된 기본값) ### 커스터마이징 - 각 컴포넌트의 `index.ts` 파일에서 `defaultSize` 수정 가능 - 프로젝트 요구사항에 맞춰 조정 가능 ## 테스트 방법 ### 기본 크기 테스트 ``` 1. 화면 디자이너 열기 2. 각 인풋 타입 컴포넌트를 캔버스에 드롭 3. 기본 크기가 적절한지 확인 4. 여러 컴포넌트를 나란히 배치하여 일관성 확인 ``` ### 너비 제한 테스트 ``` 1. 컴포넌트 생성 후 선택 2. 속성 패널에서 너비를 작은 값으로 설정 (예: 100px) 3. 컴포넌트 내부의 input이 너비를 벗어나지 않는지 확인 4. 긴 텍스트 입력 시 overflow 처리 확인 ``` ### 반응형 테스트 ``` 1. 레이아웃 컨테이너 내부에 컴포넌트 배치 2. 레이아웃 크기를 조정하여 컴포넌트가 적절히 축소되는지 확인 3. 다양한 화면 해상도에서 테스트 ``` ## 관련 파일 ### 컴포넌트 정의 파일 - `/frontend/lib/registry/components/text-input/index.ts` - `/frontend/lib/registry/components/number-input/index.ts` - `/frontend/lib/registry/components/select-basic/index.ts` - `/frontend/lib/registry/components/date-input/index.ts` - `/frontend/lib/registry/components/textarea-basic/index.ts` - `/frontend/lib/registry/components/checkbox-basic/index.ts` - `/frontend/lib/registry/components/radio-basic/index.ts` - `/frontend/lib/registry/components/file-upload/index.ts` - `/frontend/lib/registry/components/slider-basic/index.ts` - `/frontend/lib/registry/components/toggle-switch/index.ts` - `/frontend/lib/registry/components/button-primary/index.ts` - `/frontend/lib/registry/components/text-display/index.ts` - `/frontend/lib/registry/components/image-display/index.ts` - `/frontend/lib/registry/components/divider-line/index.ts` - `/frontend/lib/registry/components/accordion-basic/index.ts` - `/frontend/lib/registry/components/table-list/index.ts` ### 공통 스타일 파일 - `/frontend/lib/registry/components/common/inputStyles.ts` ### 렌더링 관련 파일 - `/frontend/components/screen/RealtimePreviewDynamic.tsx` - `/frontend/lib/registry/components/text-input/TextInputComponent.tsx` ### 화면 디자이너 - `/frontend/components/screen/ScreenDesigner.tsx` - `handleComponentDrop` 함수 (1751-1800줄): 컴포넌트 드롭 시 그리드 컬럼 수 자동 계산 - 그리드 활성화 시: `defaultSize.width` 기반으로 gridColumns 계산 후 너비 재조정 - 그리드 비활성화 시: `defaultSize` 그대로 사용 ## 향후 개선 사항 ### 1. 반응형 기본값 - 화면 크기에 따라 다른 기본값 적용 - 모바일, 태블릿, 데스크톱 각각 최적화 ### 2. 사용자 정의 기본값 - 사용자가 자주 사용하는 크기를 기본값으로 저장 - 프로젝트별 기본값 설정 기능 ### 3. 스마트 크기 조정 - 주변 컴포넌트에 맞춰 자동으로 크기 조정 - 레이블 길이에 따른 동적 너비 계산 ### 4. 프리셋 제공 - 폼 레이아웃 프리셋 (라벨-입력 쌍) - 검색 바 프리셋 - 로그인 폼 프리셋 ## 버전 히스토리 ### v1.0.0 (2025-10-14) - 초기 기본 너비 설정 적용 - 공통 스타일에 max-w-full, overflow-hidden 추가 - 모든 인풋 컴포넌트 기본 크기 조정