# [체크리스트] 버튼 아이콘화 - 화면 디자이너 버튼 표시 모드 확장 > 관련 문서: [계획서](./BIC[계획]-버튼-아이콘화.md) | [맥락노트](./BIC[맥락]-버튼-아이콘화.md) --- ## 공정 상태 - 전체 진행률: **100%** (전 단계 구현 및 검증 완료) - 현재 단계: 완료 --- ## 구현 체크리스트 ### 1단계: 아이콘 매핑 파일 생성 - [x] `frontend/lib/button-icon-map.tsx` 생성 - [x] 버튼 액션별 추천 아이콘 매핑 (`actionIconMap`) 정의 (14개 액션 x 6개 아이콘) - [x] 아이콘 크기 비율 매핑 (`iconSizePresets`) 정의 (작게/보통/크게/매우 크게, 버튼 높이 대비 %) + `getIconSizeStyle()` 유틸 - [x] lucide 아이콘 동적 렌더링 포함 `getButtonDisplayContent()` 구현 - [x] SVG 아이콘 렌더링 (DOMPurify 정화 via `isomorphic-dompurify`) - [x] 아이콘 이름 → 컴포넌트 매핑 객체 (`iconMap`) + `addToIconMap()` 동적 추가 - [x] deprecated 액션용 안내 문구 상수 (`NO_ICON_MESSAGE`) 정의 - [x] `isomorphic-dompurify` 기존 설치 확인 (추가 설치 불필요) - [x] `ButtonIconRenderer` 공용 컴포넌트 추가 (모든 렌더러에서 재사용) - [x] `getDefaultIconForAction()` 디폴트 아이콘 유틸 함수 추가 (액션별 첫 번째 추천 / 범용 폴백) - [x] `FALLBACK_ICON_NAME` 상수 + `SquareMousePointer` import/매핑 추가 ### 2단계: ButtonConfigPanel 수정 - [x] 표시 모드 버튼 그룹 UI 추가 (텍스트 / 아이콘 / 아이콘+텍스트) - [x] `displayMode` 상태 관리 및 `onUpdateProperty` 연동 - [x] 아이콘 모드 선택 시 조건부 UI 분기 (텍스트 입력 숨김 → 아이콘 선택 표시) - [x] 아이콘+텍스트 모드 선택 시 아이콘 선택 + 텍스트 입력 **동시** 표시 - [x] 버튼 액션별 추천 아이콘 그리드 렌더링 (4열 그리드) - [x] 선택된 아이콘 하이라이트 (`ring-2 ring-primary/30 border-primary`) - [x] 아이콘 크기 비율 프리셋 버튼 그룹 (작게/보통/크게/매우 크게, 한글 라벨) - [x] px 직접 입력 필드 제거 (비율 프리셋만 제공) - [x] `icon.name`, `icon.size` 를 `onUpdateProperty`로 저장 - [x] 아이콘 색상 컬러 피커 구현 (`ColorPickerWithTransparent` 재사용) - [x] "텍스트 색상과 동일" 초기화 버튼 구현 - [x] 텍스트 위치 4방향 설정 추가 (`iconTextPosition`, 왼쪽/오른쪽/위쪽/아래쪽) - [x] 아이콘-텍스트 간격 설정 추가 (`iconGap`, 슬라이더 + 직접 입력, 아이콘+텍스트 모드 전용) - [x] 아이콘 모드 레이아웃 안내 문구 표시 (Info 아이콘 + bg-blue-50 박스) - [x] 액션 변경 시 선택 아이콘 자동 초기화 로직 (추천 목록에 없으면 해제) - [x] deprecated 액션에서 안내 문구 + 커스텀 아이콘 추가 버튼 표시 - [x] 아이콘/아이콘+텍스트 모드 전환 시 아이콘 미선택이면 디폴트 아이콘 자동 부여 - [x] 커스텀 아이콘 삭제 시 디폴트 아이콘으로 자동 복귀 (텍스트 모드 전환 방지) ### 3단계: 커스텀 아이콘 추가/삭제 (lucide 검색) - [x] "lucide 검색" 버튼 UI - [x] lucide 아이콘 검색 팝오버 (Popover + Command + CommandInput) - [x] `import { icons } from "lucide-react"` 기반 전체 아이콘 검색/필터링 - [x] 선택 시 `componentConfig.customIcons` 배열 추가 + `addToIconMap` 동적 등록 - [x] lucide 커스텀 아이콘 그리드 렌더링 (추천 아이콘 아래, 구분선 포함) - [x] lucide 커스텀 아이콘 X 버튼으로 개별 삭제 ### 3-1단계: 커스텀 아이콘 추가/삭제 (SVG 붙여넣기) - [x] "SVG 붙여넣기" 버튼 UI (Popover) - [x] SVG 입력 textarea + DOMPurify 실시간 미리보기 - [x] SVG 유효성 검사 (`