"use client"; import { useDrag } from "react-dnd"; import { cn } from "@/lib/utils"; import { PopComponentType } from "../types/pop-layout"; import { Square, FileText, MousePointer, BarChart3, LayoutGrid } from "lucide-react"; import { DND_ITEM_TYPES } from "../constants"; // 컴포넌트 정의 interface PaletteItem { type: PopComponentType; label: string; icon: React.ElementType; description: string; } const PALETTE_ITEMS: PaletteItem[] = [ { type: "pop-sample", label: "샘플 박스", icon: Square, description: "크기 조정 테스트용", }, { type: "pop-text", label: "텍스트", icon: FileText, description: "텍스트, 시간, 이미지 표시", }, { type: "pop-icon", label: "아이콘", icon: MousePointer, description: "네비게이션 아이콘 (화면 이동, URL, 뒤로가기)", }, { type: "pop-dashboard", label: "대시보드", icon: BarChart3, description: "KPI, 차트, 게이지, 통계 집계", }, { type: "pop-card-list", label: "카드 목록", icon: LayoutGrid, description: "테이블 데이터를 카드 형태로 표시", }, ]; // 드래그 가능한 컴포넌트 아이템 function DraggablePaletteItem({ item }: { item: PaletteItem }) { const [{ isDragging }, drag] = useDrag( () => ({ type: DND_ITEM_TYPES.COMPONENT, item: { type: DND_ITEM_TYPES.COMPONENT, componentType: item.type }, collect: (monitor) => ({ isDragging: monitor.isDragging(), }), }), [item.type] ); const Icon = item.icon; return (
드래그하여 캔버스에 배치
Tip: 캔버스의 그리드 칸에 드롭하세요