/** * 반복 필드 그룹(Repeater) 타입 정의 */ export type RepeaterFieldType = "text" | "number" | "email" | "tel" | "date" | "select" | "textarea"; /** * 반복 그룹 내 개별 필드 정의 */ export interface RepeaterFieldDefinition { name: string; // 필드 이름 (키) label: string; // 필드 라벨 type: RepeaterFieldType; // 입력 타입 placeholder?: string; required?: boolean; options?: Array<{ label: string; value: string }>; // select용 width?: string; // 필드 너비 (예: "200px", "50%") validation?: { minLength?: number; maxLength?: number; min?: number; max?: number; pattern?: string; }; } /** * 반복 필드 그룹 설정 */ export interface RepeaterFieldGroupConfig { fields: RepeaterFieldDefinition[]; // 반복될 필드 정의 targetTable?: string; // 저장할 대상 테이블 (미지정 시 메인 화면 테이블) minItems?: number; // 최소 항목 수 maxItems?: number; // 최대 항목 수 addButtonText?: string; // 추가 버튼 텍스트 removeButtonText?: string; // 제거 버튼 텍스트 (보통 아이콘) allowReorder?: boolean; // 순서 변경 가능 여부 showIndex?: boolean; // 인덱스 번호 표시 여부 collapsible?: boolean; // 각 항목을 접을 수 있는지 (카드 모드일 때만) layout?: "grid" | "card"; // 레이아웃 타입: grid(테이블 행) 또는 card(카드 형식) showDivider?: boolean; // 항목 사이 구분선 표시 (카드 모드일 때만) emptyMessage?: string; // 항목이 없을 때 메시지 } /** * 반복 그룹 항목 데이터 */ export type RepeaterItemData = Record; /** * 반복 그룹 전체 데이터 (배열) */ export type RepeaterData = RepeaterItemData[];