diff --git a/frontend/components/screen/InteractiveDataTable.tsx b/frontend/components/screen/InteractiveDataTable.tsx index 9ca617e3..f6b38cb4 100644 --- a/frontend/components/screen/InteractiveDataTable.tsx +++ b/frontend/components/screen/InteractiveDataTable.tsx @@ -1852,7 +1852,7 @@ export const InteractiveDataTable: React.FC = ({ ) : data.length > 0 ? ( data.map((row, rowIndex) => ( - + {/* 체크박스 셀 (삭제 기능이 활성화된 경우) */} {component.enableDelete && ( diff --git a/frontend/components/screen/InteractiveScreenViewer.tsx b/frontend/components/screen/InteractiveScreenViewer.tsx index aeadcc1f..264a384a 100644 --- a/frontend/components/screen/InteractiveScreenViewer.tsx +++ b/frontend/components/screen/InteractiveScreenViewer.tsx @@ -1696,7 +1696,7 @@ export const InteractiveScreenViewer: React.FC = ( // 라벨 표시 여부 계산 const shouldShowLabel = !hideLabel && // hideLabel이 true면 라벨 숨김 - component.style?.labelDisplay !== false && + (component.style?.labelDisplay ?? true) && (component.label || component.style?.labelText) && !templateTypes.includes(component.type); // 템플릿 컴포넌트는 라벨 표시 안함 diff --git a/frontend/components/screen/panels/ComponentsPanel.tsx b/frontend/components/screen/panels/ComponentsPanel.tsx index 747bf9eb..68f44705 100644 --- a/frontend/components/screen/panels/ComponentsPanel.tsx +++ b/frontend/components/screen/panels/ComponentsPanel.tsx @@ -185,6 +185,14 @@ export function ComponentsPanel({ className }: ComponentsPanelProps) { + {/* 주황색 강조 영역 */} +
+
+
+ 컴포넌트를 드래그하여 화면에 추가하세요 +
+
+ {/* 컴포넌트 목록 */}
@@ -205,7 +213,7 @@ export function ComponentsPanel({ className }: ComponentsPanelProps) { e.currentTarget.style.opacity = '1'; e.currentTarget.style.transform = 'none'; }} - className="group cursor-grab rounded-lg border border-gray-200/40 bg-white/90 backdrop-blur-sm p-5 shadow-sm transition-all duration-300 hover:bg-white hover:shadow-lg hover:shadow-purple-500/15 hover:scale-[1.02] hover:border-purple-300/60 hover:-translate-y-1 active:cursor-grabbing active:scale-[0.98] active:translate-y-0" + className="group cursor-grab rounded-lg border border-gray-200/40 bg-white/90 backdrop-blur-sm p-6 shadow-sm transition-all duration-300 hover:bg-white hover:shadow-lg hover:shadow-purple-500/15 hover:scale-[1.02] hover:border-purple-300/60 hover:-translate-y-1 active:cursor-grabbing active:scale-[0.98] active:translate-y-0" title={component.description} >
diff --git a/frontend/components/screen/panels/PropertiesPanel.tsx b/frontend/components/screen/panels/PropertiesPanel.tsx index 18d8944e..e36191a8 100644 --- a/frontend/components/screen/panels/PropertiesPanel.tsx +++ b/frontend/components/screen/panels/PropertiesPanel.tsx @@ -207,7 +207,7 @@ const PropertiesPanelComponent: React.FC = ({ labelMarginBottom: selectedComponent?.style?.labelMarginBottom || "4px", required: (selectedComponent?.type === "widget" ? (selectedComponent as WidgetComponent).required : false) || false, readonly: (selectedComponent?.type === "widget" ? (selectedComponent as WidgetComponent).readonly : false) || false, - labelDisplay: selectedComponent?.style?.labelDisplay !== false, + labelDisplay: selectedComponent?.style?.labelDisplay ?? true, // widgetType도 로컬 상태로 관리 widgetType: (selectedComponent?.type === "widget" ? (selectedComponent as WidgetComponent).widgetType : "text") || "text", @@ -265,7 +265,7 @@ const PropertiesPanelComponent: React.FC = ({ labelMarginBottom: selectedComponent?.style?.labelMarginBottom || "4px", required: widget?.required || false, readonly: widget?.readonly || false, - labelDisplay: selectedComponent.style?.labelDisplay !== false, + labelDisplay: selectedComponent.style?.labelDisplay ?? true, // widgetType 동기화 widgetType: widget?.widgetType || "text", }); diff --git a/frontend/components/screen/panels/TemplatesPanel.tsx b/frontend/components/screen/panels/TemplatesPanel.tsx index 464450d5..49c7b974 100644 --- a/frontend/components/screen/panels/TemplatesPanel.tsx +++ b/frontend/components/screen/panels/TemplatesPanel.tsx @@ -573,7 +573,7 @@ export const TemplatesPanel: React.FC = ({ onDragStart }) = e.currentTarget.style.opacity = '1'; e.currentTarget.style.transform = 'none'; }} - className="group cursor-grab rounded-lg border border-gray-200/40 bg-white/90 backdrop-blur-sm p-5 shadow-sm transition-all duration-300 hover:bg-white hover:shadow-lg hover:shadow-blue-500/15 hover:scale-[1.02] hover:border-blue-300/60 hover:-translate-y-1 active:cursor-grabbing active:scale-[0.98] active:translate-y-0" + className="group cursor-grab rounded-lg border border-gray-200/40 bg-white/90 backdrop-blur-sm p-6 shadow-sm transition-all duration-300 hover:bg-white hover:shadow-lg hover:shadow-blue-500/15 hover:scale-[1.02] hover:border-blue-300/60 hover:-translate-y-1 active:cursor-grabbing active:scale-[0.98] active:translate-y-0" >
diff --git a/frontend/components/ui/select.tsx b/frontend/components/ui/select.tsx index b4b2d24c..ee5d504d 100644 --- a/frontend/components/ui/select.tsx +++ b/frontend/components/ui/select.tsx @@ -31,7 +31,7 @@ function SelectTrigger({ data-slot="select-trigger" data-size={size} className={cn( - "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", + "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-48 items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className, )} {...props} diff --git a/frontend/lib/registry/components/card-display/CardDisplayComponent.tsx b/frontend/lib/registry/components/card-display/CardDisplayComponent.tsx index 8d39aa1b..25a50213 100644 --- a/frontend/lib/registry/components/card-display/CardDisplayComponent.tsx +++ b/frontend/lib/registry/components/card-display/CardDisplayComponent.tsx @@ -261,7 +261,7 @@ export const CardDisplayComponent: React.FC = ({ // 카드 스타일 - 통일된 디자인 시스템 적용 const cardStyle: React.CSSProperties = { backgroundColor: "white", - border: "1px solid #e2e8f0", // 더 부드러운 보더 색상 + border: "2px solid #e5e7eb", // 더 명확한 테두리 borderRadius: "12px", // 통일된 라운드 처리 padding: "24px", // 더 여유로운 패딩 boxShadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)", // 더 깊은 그림자 @@ -276,6 +276,7 @@ export const CardDisplayComponent: React.FC = ({ "&:hover": { transform: "translateY(-2px)", boxShadow: "0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)", + borderColor: "#f59e0b", // 호버 시 오렌지 테두리 } }; diff --git a/frontend/lib/registry/components/checkbox-basic/CheckboxBasicComponent.tsx b/frontend/lib/registry/components/checkbox-basic/CheckboxBasicComponent.tsx index 04802a64..24b6bc00 100644 --- a/frontend/lib/registry/components/checkbox-basic/CheckboxBasicComponent.tsx +++ b/frontend/lib/registry/components/checkbox-basic/CheckboxBasicComponent.tsx @@ -77,7 +77,7 @@ export const CheckboxBasicComponent: React.FC = ({ return (
{/* 라벨 렌더링 */} - {component.label && component.style?.labelDisplay !== false && ( + {component.label && (component.style?.labelDisplay ?? true) && (