"use client"; import { useDrag } from "react-dnd"; import { cn } from "@/lib/utils"; import { PopComponentType } from "../types/pop-layout"; import { Square, FileText } 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: "텍스트, 시간, 이미지 표시", }, ]; // 드래그 가능한 컴포넌트 아이템 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 (
{item.label}
{item.description}
); } // 컴포넌트 팔레트 패널 export default function ComponentPalette() { return (
{/* 헤더 */}

컴포넌트

드래그하여 캔버스에 배치

{/* 컴포넌트 목록 */}
{PALETTE_ITEMS.map((item) => ( ))}
{/* 하단 안내 */}

Tip: 캔버스의 그리드 칸에 드롭하세요

); }