/** * 반응형 설정 패널 * * 컴포넌트별로 브레이크포인트마다 다른 레이아웃 설정 가능 */ import React, { useState } from "react"; import { ComponentData } from "@/types/screen-management"; import { Breakpoint, BREAKPOINTS, ResponsiveComponentConfig } from "@/types/responsive"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Label } from "@/components/ui/label"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Checkbox } from "@/components/ui/checkbox"; interface ResponsiveConfigPanelProps { component: ComponentData; onUpdate: (config: ResponsiveComponentConfig) => void; } export const ResponsiveConfigPanel: React.FC = ({ component, onUpdate }) => { const [activeTab, setActiveTab] = useState("desktop"); const config = component.responsiveConfig || { designerPosition: { x: component.position.x, y: component.position.y, width: component.size.width, height: component.size.height, }, useSmartDefaults: true, }; return ( 반응형 설정 {/* 스마트 기본값 토글 */}
{ onUpdate({ ...config, useSmartDefaults: checked as boolean, }); }} />
스마트 기본값은 컴포넌트 크기에 따라 자동으로 반응형 레이아웃을 생성합니다.
{/* 수동 설정 */} {!config.useSmartDefaults && ( setActiveTab(v as Breakpoint)}> 데스크톱 태블릿 모바일 {/* 그리드 컬럼 수 */}
{/* 표시 순서 */}
{ onUpdate({ ...config, responsive: { ...config.responsive, [activeTab]: { ...config.responsive?.[activeTab], order: parseInt(e.target.value), }, }, }); }} />
작은 숫자가 먼저 표시됩니다.
{/* 숨김 */}
{ onUpdate({ ...config, responsive: { ...config.responsive, [activeTab]: { ...config.responsive?.[activeTab], hide: checked as boolean, }, }, }); }} />
)}
); };