# 모달 자동 검증 설계 ## 1. 목표 모든 모달에서 필수 입력값이 있는 경우: - 빈 필수 필드 아래에 경고 문구 표시 - 모든 필수 필드가 입력되기 전까지 저장/등록 버튼 비활성화 --- ## 2. 전체 구조 ``` ┌─────────────────────────────────────────────────────────────────┐ │ DialogContent (모든 모달의 공통 래퍼) │ │ │ │ useDialogAutoValidation(contentRef) │ │ │ │ │ ├─ 0단계: 모드 확인 │ │ │ └─ useTabStore.mode === "user" 일 때만 실행 │ │ │ (관리자 모드에서는 return → 나중에 필요 시 확장) │ │ │ │ │ ├─ 1단계: 필수 필드 탐지 │ │ │ └─ Label 내부 안에 * 문자 존재 여부 │ │ │ (라벨 텍스트 직접 매칭 X → span 태그 안의 * 만 감지) │ │ │ │ │ ├─ 2단계: 시각적 피드백 │ │ │ ├─ 빈 필수 필드 → 빨간 테두리 (border-destructive) │ │ │ └─ 필드 아래 에러 메시지 주입 ("필수 입력 항목입니다") │ │ │ │ │ └─ 3단계: 버튼 비활성화 │ │ │ │ │ ├─ 기본: 모달 내 모든 ` (data-variant="default") | shadcn 기본 버튼 | | `