"use client"; import React from "react"; import { LayoutRendererProps } from "../BaseLayoutRenderer"; /** * 카드 레이아웃 컴포넌트 * 3x2 격자로 구성된 카드 대시보드 레이아웃 */ export const CardLayoutLayout: React.FC = ({ layout, children, onUpdateLayout, onSelectComponent, isDesignMode = false, }) => { const cardConfig = layout.layoutConfig?.cardLayout || { columns: 3, gap: 16, aspectRatio: "4:3", }; // 카드 레이아웃 스타일 const containerStyle: React.CSSProperties = { display: "grid", gridTemplateColumns: `repeat(${cardConfig.columns}, 1fr)`, gridTemplateRows: "repeat(2, 300px)", // 2행 고정 gap: `${cardConfig.gap}px`, padding: "16px", width: "100%", height: "100%", background: "transparent", }; // 카드 스타일 const cardStyle: React.CSSProperties = { backgroundColor: "white", border: "1px solid #e5e7eb", borderRadius: "8px", padding: "16px", boxShadow: "0 1px 3px 0 rgba(0, 0, 0, 0.1)", transition: "all 0.2s ease-in-out", overflow: "hidden", display: "flex", flexDirection: "column", position: "relative", minHeight: "200px", }; // 디자인 모드에서 호버 효과 const designModeCardStyle: React.CSSProperties = isDesignMode ? { ...cardStyle, cursor: "pointer", borderColor: "#d1d5db", "&:hover": { borderColor: "#3b82f6", boxShadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1)", }, } : cardStyle; return (
{layout.zones?.map((zone, index) => { const zoneChildren = children?.filter((child) => child.props.parentId === zone.id) || []; return (
isDesignMode && onSelectComponent?.(zone.id)} className={isDesignMode ? "hover:border-blue-500 hover:shadow-md" : ""} > {/* 카드 헤더 */} {isDesignMode && (
{zone.name}
)} {/* 카드 내용 */}
{zoneChildren.length > 0 ? (
{zoneChildren}
) : ( isDesignMode && (
{zone.name}
컴포넌트를 드래그하여 추가하세요
) )}
); })}
); };