"use client"; import { useDrag } from "react-dnd"; import { cn } from "@/lib/utils"; import { PopComponentType } from "../types/pop-layout"; import { Square } from "lucide-react"; // DnD 타입 상수 const DND_ITEM_TYPES = { COMPONENT: "component", } as const; // 컴포넌트 정의 interface PaletteItem { type: PopComponentType; label: string; icon: React.ElementType; description: string; } const PALETTE_ITEMS: PaletteItem[] = [ { type: "pop-sample", label: "샘플 박스", icon: Square, 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: 캔버스의 그리드 칸에 드롭하세요