"use client"; import { useState } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Slider } from "@/components/ui/slider"; import { Grid, Settings, RotateCcw } from "lucide-react"; interface GridSettings { columns: number; gap: number; padding: number; snapToGrid: boolean; } interface GridControlsProps { gridSettings: GridSettings; onGridSettingsChange: (settings: GridSettings) => void; className?: string; } export default function GridControls({ gridSettings, onGridSettingsChange, className }: GridControlsProps) { const [localSettings, setLocalSettings] = useState(gridSettings); const handleSettingChange = (key: keyof GridSettings, value: number | boolean) => { const newSettings = { ...localSettings, [key]: value }; setLocalSettings(newSettings); onGridSettingsChange(newSettings); }; const resetToDefault = () => { const defaultSettings: GridSettings = { columns: 12, gap: 16, padding: 16, snapToGrid: true, }; setLocalSettings(defaultSettings); onGridSettingsChange(defaultSettings); }; return ( 격자 설정 {/* 격자 열 개수 */}
handleSettingChange("columns", value[0])} className="flex-1" /> handleSettingChange("columns", parseInt(e.target.value) || 12)} className="w-16 text-xs" />
현재: {localSettings.columns}열
{/* 격자 간격 */}
handleSettingChange("gap", value[0])} className="flex-1" /> handleSettingChange("gap", parseInt(e.target.value) || 16)} className="w-16 text-xs" />
{/* 여백 */}
handleSettingChange("padding", value[0])} className="flex-1" /> handleSettingChange("padding", parseInt(e.target.value) || 16)} className="w-16 text-xs" />
{/* 격자 스냅 */}
{/* 격자 변경 안내 */}
💡 격자 변경 시 자동 조정
격자 설정을 변경하면 기존 컴포넌트들이 새 격자에 맞춰 자동으로 위치와 크기가 조정됩니다.
{/* 격자 미리보기 */}
{Array.from({ length: localSettings.columns }).map((_, i) => (
))}
{/* 초기화 버튼 */} ); }