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:
@@ -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>
|
||||
) : (
|
||||
|
||||
Reference in New Issue
Block a user