"use client"; import type { Block, FormInputBlockProps } from "@/features/editor/state/editorStore"; import { ColorPickerField, TEXT_COLOR_PALETTE } from "@/features/editor/components/ColorPickerField"; import { NumericPropertyControl } from "@/features/editor/components/NumericPropertyControl"; interface FormInputPropertiesPanelProps { block: Block; selectedBlockId: string | null; updateBlock: (id: string, partial: any) => void; } export function FormInputPropertiesPanel({ block, selectedBlockId, updateBlock }: FormInputPropertiesPanelProps) { if (!selectedBlockId || block.id !== selectedBlockId || block.type !== "formInput") return null; const inputProps = block.props as FormInputBlockProps; return (

입력 필드

{inputProps.labelMode === "image" && ( <> )}

필드 스타일

{(inputProps.widthMode ?? "full") === "fixed" && ( { updateBlock(selectedBlockId, { widthPx: v, } as any); }} /> )} { updateBlock(selectedBlockId, { textColorCustom: hex, } as any); }} palette={TEXT_COLOR_PALETTE} onPaletteSelect={(item) => { updateBlock(selectedBlockId, { textColorCustom: item.color, } as any); }} /> { updateBlock(selectedBlockId, { fillColorCustom: hex, } as any); }} palette={TEXT_COLOR_PALETTE} onPaletteSelect={(item) => { updateBlock(selectedBlockId, { fillColorCustom: item.color, } as any); }} /> { updateBlock(selectedBlockId, { strokeColorCustom: hex, } as any); }} palette={TEXT_COLOR_PALETTE} onPaletteSelect={(item) => { updateBlock(selectedBlockId, { strokeColorCustom: item.color, } as any); }} /> { const r = inputProps.borderRadius ?? "md"; return r === "none" ? 0 : r === "sm" ? 2 : r === "lg" ? 6 : r === "full" ? 8 : 4; })()} min={0} max={8} step={1} presets={[ { id: "none", label: "없음", value: 0 }, { id: "sm", label: "작게", value: 2 }, { id: "md", label: "보통", value: 4 }, { id: "lg", label: "크게", value: 6 }, { id: "full", label: "완전 둥글게", value: 8 }, ]} onChangeValue={(v) => { const next = v <= 0 ? "none" : v <= 2 ? "sm" : v <= 5 ? "md" : v <= 7 ? "lg" : "full"; updateBlock(selectedBlockId, { borderRadius: next, } as any); }} />
); }