refactor: 전체 프론트엔드 하드코딩 색상 → CSS 변수 일괄 치환

447+ 파일, 4500+ 줄 변경:
- gray-* → border/bg-muted/text-foreground/text-muted-foreground
- blue-* → primary/ring
- red-* → destructive
- green-* → emerald (일관성)
- indigo-* → primary
- yellow/orange → amber (통일)
- dark mode 변형도 시맨틱 토큰으로 변환

Made-with: Cursor
This commit is contained in:
DDD1542
2026-03-09 14:31:59 +09:00
parent d967cf0a0d
commit 4f10b5e42d
447 changed files with 4520 additions and 4520 deletions

View File

@@ -318,7 +318,7 @@ export default function CreateScreenModal({ open, onOpenChange, onCreated, isPop
value={screenCode}
readOnly
placeholder="자동 생성됩니다..."
className="cursor-not-allowed bg-gray-50"
className="cursor-not-allowed bg-muted"
/>
</div>
@@ -396,10 +396,10 @@ export default function CreateScreenModal({ open, onOpenChange, onCreated, isPop
<Check
className={cn("mr-2 h-4 w-4", selectedDbSource === "internal" ? "opacity-100" : "opacity-0")}
/>
<Database className="mr-2 h-4 w-4 text-blue-500" />
<Database className="mr-2 h-4 w-4 text-primary" />
<div className="flex flex-col">
<span className="font-medium"> </span>
<span className="text-xs text-gray-500">PostgreSQL ( )</span>
<span className="text-xs text-muted-foreground">PostgreSQL ( )</span>
</div>
</CommandItem>
{externalConnections.map((conn: any) => (
@@ -416,10 +416,10 @@ export default function CreateScreenModal({ open, onOpenChange, onCreated, isPop
<Check
className={cn("mr-2 h-4 w-4", selectedDbSource === conn.id ? "opacity-100" : "opacity-0")}
/>
<Database className="mr-2 h-4 w-4 text-green-500" />
<Database className="mr-2 h-4 w-4 text-emerald-500" />
<div className="flex flex-col">
<span className="font-medium">{conn.connection_name}</span>
<span className="text-xs text-gray-500">{conn.db_type?.toUpperCase()}</span>
<span className="text-xs text-muted-foreground">{conn.db_type?.toUpperCase()}</span>
</div>
</CommandItem>
))}
@@ -428,7 +428,7 @@ export default function CreateScreenModal({ open, onOpenChange, onCreated, isPop
</Command>
</PopoverContent>
</Popover>
<p className="text-xs text-gray-500"> </p>
<p className="text-xs text-muted-foreground"> </p>
</div>
</>
)}
@@ -479,7 +479,7 @@ export default function CreateScreenModal({ open, onOpenChange, onCreated, isPop
<Globe className="mr-2 h-4 w-4 text-purple-500" />
<div className="flex flex-col">
<span className="font-medium">{conn.connection_name}</span>
<span className="text-xs text-gray-500 truncate max-w-[300px]">{conn.base_url}</span>
<span className="text-xs text-muted-foreground truncate max-w-[300px]">{conn.base_url}</span>
</div>
</CommandItem>
))}
@@ -488,7 +488,7 @@ export default function CreateScreenModal({ open, onOpenChange, onCreated, isPop
</Command>
</PopoverContent>
</Popover>
<p className="text-xs text-gray-500">
<p className="text-xs text-muted-foreground">
REST API .
<Link href="/admin/externalRestApi" className="ml-1 text-primary hover:underline">
@@ -505,7 +505,7 @@ export default function CreateScreenModal({ open, onOpenChange, onCreated, isPop
onChange={(e) => setRestApiEndpoint(e.target.value)}
placeholder="/api/data 또는 /users"
/>
<p className="text-xs text-gray-500"> URL ()</p>
<p className="text-xs text-muted-foreground"> URL ()</p>
</div>
{/* JSON Path */}
@@ -517,7 +517,7 @@ export default function CreateScreenModal({ open, onOpenChange, onCreated, isPop
onChange={(e) => setRestApiJsonPath(e.target.value)}
placeholder="data 또는 result.items"
/>
<p className="text-xs text-gray-500">API (: data, result.items)</p>
<p className="text-xs text-muted-foreground">API (: data, result.items)</p>
</div>
</>
)}
@@ -548,7 +548,7 @@ export default function CreateScreenModal({ open, onOpenChange, onCreated, isPop
{/* 검색 입력 필드 */}
<div className="sticky top-0 z-10 border-b bg-white p-2" onKeyDown={(e) => e.stopPropagation()}>
<div className="relative">
<Search className="absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 transform text-gray-400" />
<Search className="absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 transform text-muted-foreground/70" />
<input
ref={searchInputRef}
type="text"
@@ -572,7 +572,7 @@ export default function CreateScreenModal({ open, onOpenChange, onCreated, isPop
e.stopPropagation();
setTableSearchTerm("");
}}
className="hover:text-muted-foreground absolute top-1/2 right-2 h-4 w-4 -translate-y-1/2 transform text-gray-400"
className="hover:text-muted-foreground absolute top-1/2 right-2 h-4 w-4 -translate-y-1/2 transform text-muted-foreground/70"
>
<X className="h-3 w-3" />
</button>
@@ -585,7 +585,7 @@ export default function CreateScreenModal({ open, onOpenChange, onCreated, isPop
{selectedDbSource === "internal" ? (
// 내부 DB 테이블 목록
filteredTables.length === 0 ? (
<div className="px-2 py-6 text-center text-sm text-gray-500">
<div className="px-2 py-6 text-center text-sm text-muted-foreground">
{tableSearchTerm ? `"${tableSearchTerm}"에 대한 검색 결과가 없습니다` : "테이블이 없습니다"}
</div>
) : (
@@ -597,7 +597,7 @@ export default function CreateScreenModal({ open, onOpenChange, onCreated, isPop
)
) : // 외부 DB 테이블 목록
filteredExternalTables.length === 0 ? (
<div className="px-2 py-6 text-center text-sm text-gray-500">
<div className="px-2 py-6 text-center text-sm text-muted-foreground">
{tableSearchTerm ? `"${tableSearchTerm}"에 대한 검색 결과가 없습니다` : "테이블이 없습니다"}
</div>
) : (