"use client"; import React, { useState } from "react"; import { ComponentData } from "@/types/screen"; import { componentRegistry, ComponentRenderer } from "../DynamicComponentRenderer"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { ChevronDown, ChevronUp } from "lucide-react"; // 접을 수 있는 패널 컴포넌트 렌더러 const PanelRenderer: ComponentRenderer = ({ component, children, ...props }) => { const config = component.componentConfig || {}; const { title = "패널 제목", collapsible = true, defaultExpanded = true, style = {} } = config; const [isExpanded, setIsExpanded] = useState(defaultExpanded); return (
{title} {collapsible && ( )}
{isExpanded && ( {children && React.Children.count(children) > 0 ? ( children ) : (
패널 내용 영역
컴포넌트를 여기에 배치하세요
)}
)}
); }; // 레지스트리에 등록 componentRegistry.register("panel", PanelRenderer); componentRegistry.register("panel-collapsible", PanelRenderer); export { PanelRenderer };