feat: 테이블 테두리 및 라운드 제거, 검색 필터 제목 제거

- 모든 테이블 컴포넌트의 외곽 테두리(border) 제거
- 테이블 컨테이너의 라운드(rounded-lg) 제거
- 테이블 행 구분선(border-b)은 유지하여 데이터 구분
- FlowWidget과 TableListComponent에 동일한 스타일 적용
- 검색 필터 영역의 회색 배경(bg-muted/30) 제거
- 검색 필터 제목 제거
- AdvancedSearchFilters 컴포넌트의 '검색 필터' 제목 제거
This commit is contained in:
kjs
2025-10-30 15:39:39 +09:00
parent 0e9e5f29cf
commit 4010273d67
67 changed files with 2546 additions and 741 deletions

View File

@@ -294,7 +294,7 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
</div>
{componentConfig.leftPanel?.showSearch && (
<div className="relative mt-2">
<Search className="absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-gray-400" />
<Search className="absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
<Input
placeholder="검색..."
value={leftSearchQuery}
@@ -304,9 +304,9 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
</div>
)}
</CardHeader>
<CardContent className="flex-1 overflow-auto p-2">
<CardContent className="flex-1 overflow-auto">
{/* 좌측 데이터 목록 */}
<div className="space-y-1">
<div className="space-y-1 px-2">
{isDesignMode ? (
// 디자인 모드: 샘플 데이터
<>
@@ -372,22 +372,22 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
<div
key={itemId}
onClick={() => handleLeftItemSelect(item)}
className={`cursor-pointer rounded-md p-3 transition-colors hover:bg-gray-50 ${
isSelected ? "bg-blue-50 text-blue-700" : "text-gray-700"
className={`cursor-pointer rounded-md p-3 transition-colors hover:bg-muted ${
isSelected ? "bg-primary/10 text-primary" : "text-foreground"
}`}
>
<div className="truncate font-medium">{displayTitle}</div>
{displaySubtitle && <div className="truncate text-xs text-gray-500">{displaySubtitle}</div>}
{displaySubtitle && <div className="truncate text-xs text-muted-foreground">{displaySubtitle}</div>}
</div>
);
})
) : (
// 검색 결과 없음
<div className="py-8 text-center text-sm text-gray-500">
<div className="py-8 text-center text-sm text-muted-foreground">
{leftSearchQuery ? (
<>
<p> .</p>
<p className="mt-1 text-xs text-gray-400"> .</p>
<p className="mt-1 text-xs text-muted-foreground/70"> .</p>
</>
) : (
"데이터가 없습니다."
@@ -405,9 +405,9 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
{resizable && (
<div
onMouseDown={handleMouseDown}
className="group flex w-1 cursor-col-resize items-center justify-center bg-gray-200 transition-colors hover:bg-blue-400"
>
<GripVertical className="h-4 w-4 text-gray-400 group-hover:text-white" />
className="group flex w-1 cursor-col-resize items-center justify-center bg-border transition-colors hover:bg-primary"
>
<GripVertical className="h-4 w-4 text-muted-foreground group-hover:text-primary-foreground" />
</div>
)}
@@ -431,7 +431,7 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
</div>
{componentConfig.rightPanel?.showSearch && (
<div className="relative mt-2">
<Search className="absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-gray-400" />
<Search className="absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
<Input
placeholder="검색..."
value={rightSearchQuery}
@@ -441,14 +441,14 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
</div>
)}
</CardHeader>
<CardContent className="flex-1 overflow-auto p-4">
<CardContent className="flex-1 overflow-auto">
{/* 우측 데이터 */}
{isLoadingRight ? (
// 로딩 중
<div className="flex h-full items-center justify-center">
<div className="text-center">
<Loader2 className="mx-auto h-8 w-8 animate-spin text-blue-500" />
<p className="mt-2 text-sm text-gray-500"> ...</p>
<Loader2 className="mx-auto h-8 w-8 animate-spin text-primary" />
<p className="mt-2 text-sm text-muted-foreground"> ...</p>
</div>
</div>
) : rightData ? (
@@ -469,10 +469,10 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
return filteredData.length > 0 ? (
<div className="space-y-2">
<div className="mb-2 text-xs text-gray-500">
<div className="mb-2 text-xs text-muted-foreground">
{filteredData.length}
{rightSearchQuery && filteredData.length !== rightData.length && (
<span className="ml-1 text-blue-600">( {rightData.length} )</span>
<span className="ml-1 text-primary">( {rightData.length} )</span>
)}
</div>
{filteredData.map((item, index) => {
@@ -493,14 +493,14 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
{/* 요약 정보 (클릭 가능) */}
<div
onClick={() => toggleRightItemExpansion(itemId)}
className="cursor-pointer p-3 transition-colors hover:bg-gray-50"
className="cursor-pointer p-3 transition-colors hover:bg-muted"
>
<div className="flex items-start justify-between gap-2">
<div className="min-w-0 flex-1">
{firstValues.map(([key, value], idx) => (
<div key={key} className="mb-1 last:mb-0">
<div className="text-xs font-medium text-gray-500">{getColumnLabel(key)}</div>
<div className="truncate text-sm text-gray-900" title={String(value || "-")}>
<div className="text-xs font-medium text-muted-foreground">{getColumnLabel(key)}</div>
<div className="truncate text-sm text-foreground" title={String(value || "-")}>
{String(value || "-")}
</div>
</div>
@@ -508,9 +508,9 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
</div>
<div className="flex flex-shrink-0 items-start pt-1">
{isExpanded ? (
<ChevronUp className="h-5 w-5 text-gray-400" />
<ChevronUp className="h-5 w-5 text-muted-foreground" />
) : (
<ChevronDown className="h-5 w-5 text-gray-400" />
<ChevronDown className="h-5 w-5 text-muted-foreground" />
)}
</div>
</div>
@@ -522,13 +522,13 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
<div className="mb-2 text-xs font-semibold"> </div>
<div className="bg-card overflow-auto rounded-md border">
<table className="w-full text-sm">
<tbody className="divide-y divide-gray-200">
<tbody className="divide-y divide-border">
{allValues.map(([key, value]) => (
<tr key={key} className="hover:bg-gray-50">
<td className="px-3 py-2 font-medium whitespace-nowrap text-gray-600">
<tr key={key} className="hover:bg-muted">
<td className="px-3 py-2 font-medium whitespace-nowrap text-muted-foreground">
{getColumnLabel(key)}
</td>
<td className="px-3 py-2 break-all text-gray-900">{String(value)}</td>
<td className="px-3 py-2 break-all text-foreground">{String(value)}</td>
</tr>
))}
</tbody>
@@ -541,11 +541,11 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
})}
</div>
) : (
<div className="py-8 text-center text-sm text-gray-500">
<div className="py-8 text-center text-sm text-muted-foreground">
{rightSearchQuery ? (
<>
<p> .</p>
<p className="mt-1 text-xs text-gray-400"> .</p>
<p className="mt-1 text-xs text-muted-foreground/70"> .</p>
</>
) : (
"관련 데이터가 없습니다."
@@ -578,15 +578,15 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
<h3 className="mb-2 font-medium">{selectedLeftItem.name} </h3>
<div className="space-y-2 text-sm">
<div className="flex justify-between">
<span className="text-gray-600"> 1:</span>
<span className="text-muted-foreground"> 1:</span>
<span className="font-medium"> 1</span>
</div>
<div className="flex justify-between">
<span className="text-gray-600"> 2:</span>
<span className="text-muted-foreground"> 2:</span>
<span className="font-medium"> 2</span>
</div>
<div className="flex justify-between">
<span className="text-gray-600"> 3:</span>
<span className="text-muted-foreground"> 3:</span>
<span className="font-medium"> 3</span>
</div>
</div>
@@ -595,7 +595,7 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
) : (
// 선택 없음
<div className="flex h-full items-center justify-center">
<div className="text-center text-sm text-gray-500">
<div className="text-center text-sm text-muted-foreground">
<p className="mb-2"> </p>
<p className="text-xs"> </p>
</div>