"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, AlignStartVertical, AlignCenterVertical, AlignEndVertical, AlignStartHorizontal, AlignCenterHorizontal, AlignEndHorizontal, AlignHorizontalSpaceAround, AlignVerticalSpaceAround, RulerIcon, Tag, Keyboard, Equal, } from "lucide-react"; import { ScreenResolution, SCREEN_RESOLUTIONS } from "@/types/screen"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; interface GridSettings { columns: number; gap: number; padding: number; snapToGrid: boolean; showGrid: boolean; gridColor?: string; gridOpacity?: number; } type AlignMode = "left" | "centerX" | "right" | "top" | "centerY" | "bottom"; type DistributeDirection = "horizontal" | "vertical"; type MatchSizeMode = "width" | "height" | "both"; 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; // 정렬/배분/크기 기능 selectedCount?: number; onAlign?: (mode: AlignMode) => void; onDistribute?: (direction: DistributeDirection) => void; onMatchSize?: (mode: MatchSizeMode) => void; onToggleLabels?: () => void; onShowShortcuts?: () => void; } export const SlimToolbar: React.FC = ({ screenName, tableName, screenResolution, onBack, onSave, isSaving = false, onPreview, onResolutionChange, gridSettings, onGridSettingsChange, onGenerateMultilang, isGeneratingMultilang = false, onOpenMultilangSettings, isPanelOpen = false, onTogglePanel, selectedCount = 0, onAlign, onDistribute, onMatchSize, onToggleLabels, onShowShortcuts, }) => { // 사용자 정의 해상도 상태 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} ))} 사용자 정의 { setCustomWidth(screenResolution.width.toString()); setCustomHeight(screenResolution.height.toString()); setShowCustomInput(true); }} className="flex items-center space-x-2" > 사용자 정의... )} {/* 사용자 정의 해상도 다이얼로그 */} 사용자 정의 해상도
setCustomWidth(e.target.value)} placeholder="1920" />
setCustomHeight(e.target.value)} placeholder="1080" />
)} {/* 격자 설정 */} {gridSettings && onGridSettingsChange && ( <>
)}
{/* 중앙: 정렬/배분 도구 (다중 선택 시 표시) */} {selectedCount >= 2 && (onAlign || onDistribute || onMatchSize) && (
{/* 정렬 */} {onAlign && ( <> 정렬
)} {/* 배분 (3개 이상 선택 시) */} {onDistribute && selectedCount >= 3 && ( <>
배분 )} {/* 크기 맞추기 */} {onMatchSize && ( <>
크기 )}
{selectedCount}개 선택
)} {/* 우측: 버튼들 */}
{/* 라벨 토글 버튼 */} {onToggleLabels && ( )} {/* 단축키 도움말 */} {onShowShortcuts && ( )} {onPreview && ( )} {onGenerateMultilang && ( )} {onOpenMultilangSettings && ( )}
); }; export default SlimToolbar;