import Link from "next/link"; import { login, signInWithGoogle, signInWithKakao, } from "@/features/auth/actions"; import FormMessage from "@/components/form-message"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Checkbox } from "@/components/ui/checkbox"; import { Separator } from "@/components/ui/separator"; /** * [로그인 페이지 컴포넌트] * * Modern UI with glassmorphism effect (유리 형태 디자인) * - 투명 배경 + 블러 효과로 깊이감 표현 * - 그라디언트 배경으로 생동감 추가 * - shadcn/ui 컴포넌트로 일관된 디자인 시스템 유지 * * @param searchParams - URL 쿼리 파라미터 (에러 메시지 전달용) */ export default async function LoginPage({ searchParams, }: { searchParams: Promise<{ message: string }>; }) { // URL에서 메시지 파라미터 추출 (로그인 실패 시 에러 메시지 표시) const { message } = await searchParams; return (
{/* ========== 배경 그라디언트 레이어 ========== */} {/* 웹 페이지 전체 배경을 그라디언트로 채웁니다 */} {/* 라이트 모드: 부드러운 그레이 톤 (gray → white → gray) */} {/* 다크 모드: 깊은 블랙 톤으로 고급스러운 느낌 */} {/* 추가 그라디언트 효과 1: 우상단에서 시작하는 원형 그라디언트 */}
{/* 추가 그라디언트 효과 2: 좌하단에서 시작하는 원형 그라디언트 */}
{/* ========== 애니메이션 블러 효과 ========== */} {/* 부드럽게 깜빡이는 원형 블러로 생동감 표현 */} {/* animate-pulse: 1.5초 주기로 opacity 변화 */}
{/* delay-700: 700ms 지연으로 교차 애니메이션 효과 */}
{/* ========== 메인 콘텐츠 영역 ========== */} {/* z-10: 배경보다 위에 표시 */} {/* animate-in: 페이지 로드 시 fade-in + slide-up 애니메이션 */}
{/* 에러/성공 메시지 표시 영역 */} {/* URL 파라미터에 message가 있으면 표시됨 */} {/* ========== 로그인 카드 (Glassmorphism) ========== */} {/* bg-white/70: 70% 투명도의 흰색 배경 */} {/* backdrop-blur-xl: 배경 블러 효과 (유리 느낌) */} {/* ========== 카드 헤더 영역 ========== */} {/* 아이콘 배경: 그라디언트 원형 */}
👋
{/* 페이지 제목 */} 환영합니다! {/* 페이지 설명 */} 서비스 이용을 위해 로그인해 주세요.
{/* ========== 카드 콘텐츠 영역 (폼) ========== */} {/* 로그인 폼 - formAction으로 서버 액션(login) 연결 */}
{/* ========== 이메일 입력 필드 ========== */}
{/* htmlFor와 Input의 id 연결로 접근성 향상 */} {/* autoComplete="email": 브라우저 자동완성 기능 활성화 */} {/* required: HTML5 필수 입력 검증 */}
{/* ========== 비밀번호 입력 필드 ========== */}
{/* pattern: 최소 8자, 대문자, 소문자, 숫자, 특수문자 각 1개 이상 */} {/* 참고: HTML pattern에서는 <, >, {, } 등 일부 특수문자 사용 시 브라우저 호환성 문제 발생 */}
{/* 로그인 유지 & 비밀번호 찾기 */}
{/* 비밀번호 찾기 링크 */} 비밀번호 찾기
{/* 로그인 버튼 */} {/* 회원가입 링크 */}

계정이 없으신가요?{" "} 회원가입 하기

{/* 소셜 로그인 구분선 */}
또는 소셜 로그인
{/* 소셜 로그인 버튼들 */}
{/* ========== Google 로그인 버튼 ========== */}
{/* ========== Kakao 로그인 버튼 ========== */}
); }