'use client'; import type { RankConfigItem } from '@/types/response/donation/rankConfig'; import { Checkbox } from '@/components/ui/checkbox'; import { RANK_PERIODS, RANK_THEMES, NAME_DISPLAY_TYPES, FONT_FAMILIES } from '../constants'; import type { FormState } from '../types'; type Props = { form: FormState; editingItem: RankConfigItem|null; saving: boolean; onFormChange: (field: K, value: FormState[K]) => void; onSave: () => void; onCancel: () => void; }; /** 색상 입력 (color picker + hex text) */ function ColorInput({ id, value, onChange }: { id: string; value: string; onChange: (v: string) => void }) { return (
onChange(e.target.value)} /> onChange(e.target.value)} maxLength={7} />
); } export default function RankFormPanel({ form, editingItem, saving, onFormChange, onSave, onCancel }: Props) { return (
{/* ── 기본 설정 ────────────────────────────── */}

기본 설정

onFormChange('title', e.target.value)} placeholder="후원 순위" />
onFormChange('maxRankCount', parseInt(e.target.value) || 5)} />
{/* ── 기간 설정 (사용자 지정일 때만) ────────── */} {form.period === 5 && (

기간 설정

onFormChange('startAt', e.target.value || null)} placeholder="2026.03.30 14:00" maxLength={16} />
onFormChange('endAt', e.target.value || null)} placeholder="2026.03.31 14:00" maxLength={16} />
)} {/* ── 표시 설정 ───────────────────────────── */}

표시 설정

{/* ── 제목 폰트 ──────────────────────────────── */}

제목 폰트

onFormChange('titleFontSizePx', parseInt(e.target.value) || 18)} />
onFormChange('titleFontColor', v)} />
{/* ── 순위별 폰트 (details 접이식) ────────── */}

순위별 폰트

{/* 1등 */}
1등 폰트 설정
onFormChange('rank1FontSizePx', parseInt(e.target.value) || 15)} />
onFormChange('rank1FontColor', v)} />
{/* 2등 */}
2등 폰트 설정
onFormChange('rank2FontSizePx', parseInt(e.target.value) || 15)} />
onFormChange('rank2FontColor', v)} />
{/* 3등 */}
3등 폰트 설정
onFormChange('rank3FontSizePx', parseInt(e.target.value) || 15)} />
onFormChange('rank3FontColor', v)} />
{/* ── 하단 버튼 ────────────────────────────── */}
); }