"use client"; import React, { useState } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Checkbox } from "@/components/ui/checkbox"; import { Database, ArrowLeft, Save, Monitor, Smartphone, Tablet, ChevronDown, Settings, Grid3X3, Eye, EyeOff, Zap, Languages, Settings2, PanelLeft, PanelLeftClose, } from "lucide-react"; import { ScreenResolution, SCREEN_RESOLUTIONS } from "@/types/screen"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; interface GridSettings { columns: number; gap: number; padding: number; snapToGrid: boolean; showGrid: boolean; gridColor?: string; gridOpacity?: number; } interface SlimToolbarProps { screenName?: string; tableName?: string; screenResolution?: ScreenResolution; onBack: () => void; onSave: () => void; isSaving?: boolean; onPreview?: () => void; onResolutionChange?: (resolution: ScreenResolution) => void; gridSettings?: GridSettings; onGridSettingsChange?: (settings: GridSettings) => void; onGenerateMultilang?: () => void; isGeneratingMultilang?: boolean; onOpenMultilangSettings?: () => void; // 패널 토글 기능 isPanelOpen?: boolean; onTogglePanel?: () => void; } export const SlimToolbar: React.FC = ({ screenName, tableName, screenResolution, onBack, onSave, isSaving = false, onPreview, onResolutionChange, gridSettings, onGridSettingsChange, onGenerateMultilang, isGeneratingMultilang = false, onOpenMultilangSettings, isPanelOpen = false, onTogglePanel, }) => { // 사용자 정의 해상도 상태 const [customWidth, setCustomWidth] = useState(""); const [customHeight, setCustomHeight] = useState(""); const [showCustomInput, setShowCustomInput] = useState(false); const getCategoryIcon = (category: string) => { switch (category) { case "desktop": return ; case "tablet": return ; case "mobile": return ; default: return ; } }; const handleCustomResolution = () => { const width = parseInt(customWidth); const height = parseInt(customHeight); if (width > 0 && height > 0 && onResolutionChange) { const customResolution: ScreenResolution = { width, height, name: `사용자 정의 (${width}×${height})`, category: "custom", }; onResolutionChange(customResolution); setShowCustomInput(false); } }; const updateGridSetting = (key: keyof GridSettings, value: boolean) => { if (onGridSettingsChange && gridSettings) { onGridSettingsChange({ ...gridSettings, [key]: value, }); } }; return (
{/* 좌측: 네비게이션 + 패널 토글 + 화면 정보 */}
{onTogglePanel &&
} {/* 패널 토글 버튼 */} {onTogglePanel && ( )}

{screenName || "화면 설계"}

{tableName && (
{tableName}
)}
{/* 해상도 선택 드롭다운 */} {screenResolution && ( <>
{onResolutionChange && ( 데스크톱 {SCREEN_RESOLUTIONS.filter((r) => r.category === "desktop").map((resolution) => ( onResolutionChange(resolution)} className="flex items-center space-x-2" > {resolution.name} {resolution.width}×{resolution.height} ))} 태블릿 {SCREEN_RESOLUTIONS.filter((r) => r.category === "tablet").map((resolution) => ( onResolutionChange(resolution)} className="flex items-center space-x-2" > {resolution.name} {resolution.width}×{resolution.height} ))} 모바일 {SCREEN_RESOLUTIONS.filter((r) => r.category === "mobile").map((resolution) => ( onResolutionChange(resolution)} className="flex items-center space-x-2" > {resolution.name} {resolution.width}×{resolution.height} ))} 사용자 정의 { e.preventDefault(); setCustomWidth(screenResolution.width.toString()); setCustomHeight(screenResolution.height.toString()); setShowCustomInput(true); }} className="flex items-center space-x-2" > 사용자 정의... )}
사용자 정의 해상도
setCustomWidth(e.target.value)} placeholder="1920" className="h-8 text-xs" />
setCustomHeight(e.target.value)} placeholder="1080" className="h-8 text-xs" />
)} {/* 격자 설정 */} {gridSettings && onGridSettingsChange && ( <>
)}
{/* 우측: 버튼들 */}
{onPreview && ( )} {onGenerateMultilang && ( )} {onOpenMultilangSettings && ( )}
); }; export default SlimToolbar;