-
-
);
-}
\ No newline at end of file
+}
diff --git a/src/index.css b/src/index.css
index 27c3ac2..dbd3f5d 100644
--- a/src/index.css
+++ b/src/index.css
@@ -81,7 +81,7 @@
/* ── Paperlogy (포인트 제목 폰트) ── */
@font-face {
- font-family: 'Paperozi';
+ font-family: 'Paperlogy';
src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-1Thin.woff2')
format('woff2');
font-weight: 100;
@@ -89,7 +89,7 @@
}
@font-face {
- font-family: 'Paperozi';
+ font-family: 'Paperlogy';
src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-2ExtraLight.woff2')
format('woff2');
font-weight: 200;
@@ -97,7 +97,7 @@
}
@font-face {
- font-family: 'Paperozi';
+ font-family: 'Paperlogy';
src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-3Light.woff2')
format('woff2');
font-weight: 300;
@@ -105,7 +105,7 @@
}
@font-face {
- font-family: 'Paperozi';
+ font-family: 'Paperlogy';
src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-4Regular.woff2')
format('woff2');
font-weight: 400;
@@ -113,7 +113,7 @@
}
@font-face {
- font-family: 'Paperozi';
+ font-family: 'Paperlogy';
src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-5Medium.woff2')
format('woff2');
font-weight: 500;
@@ -121,7 +121,7 @@
}
@font-face {
- font-family: 'Paperozi';
+ font-family: 'Paperlogy';
src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-6SemiBold.woff2')
format('woff2');
font-weight: 600;
@@ -129,7 +129,7 @@
}
@font-face {
- font-family: 'Paperozi';
+ font-family: 'Paperlogy';
src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-7Bold.woff2')
format('woff2');
font-weight: 700;
@@ -137,7 +137,7 @@
}
@font-face {
- font-family: 'Paperozi';
+ font-family: 'Paperlogy';
src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-8ExtraBold.woff2')
format('woff2');
font-weight: 800;
@@ -145,7 +145,7 @@
}
@font-face {
- font-family: 'Paperozi';
+ font-family: 'Paperlogy';
src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/2408-3@1.0/Paperlogy-9Black.woff2')
format('woff2');
font-weight: 900;
diff --git a/src/pages/TestAvatar.tsx b/src/pages/TestAvatar.tsx
deleted file mode 100644
index 66e7f68..0000000
--- a/src/pages/TestAvatar.tsx
+++ /dev/null
@@ -1,76 +0,0 @@
-import { Avatar } from '../components/common/Avatar';
-
-export const TestAvatar = () => {
- return (
-
-
-
- 아바타 컴포넌트 테스트 👤
-
-
- 사이즈별 기본 상태와 이미지 적용 상태
-
-
-
-
- {/* 1. 사이즈별 기본 아바타 (이미지 없음) */}
-
-
- 1. 기본 프로필 (사이즈별)
-
-
-
-
- {/* 2. 이미지가 들어온 경우 */}
-
-
- 2. 사진이 있을 경우 (src 전달)
-
-
- {/* 임시로 더미 이미지 URL을 넣어두었습니다 */}
-
-
-
-
-
-
- {/* 3. 실제 시안 적용 예시 (게시글 상세 작성자 정보) */}
-
-
- 3. 실제 시안 흉내내기
-
-
-
-
-
-
- );
-};
diff --git a/src/pages/TestButton.tsx b/src/pages/TestButton.tsx
deleted file mode 100644
index 89f6e05..0000000
--- a/src/pages/TestButton.tsx
+++ /dev/null
@@ -1,125 +0,0 @@
-import Button from '../components/common/Button';
-
-export const TestButton = () => {
- return (
-
-
-
- 버튼 UI 테스트 도화지 🎨
-
-
- 시안의 모든 케이스를 커버하는 만능 버튼 검증 페이지입니다.
-
-
-
- {/* 1. 새로운 색상(Variant) 테스트 */}
-
-
- 1. Variant (디자인 종류)
-
-
-
-
-
-
-
-
-
-
-
- {/* 2. 실제 시안 레이아웃(Layout) 테스트 - 하이라이트 ✨ */}
-
-
- 2. 실제 시안 레이아웃 조립 테스트
-
-
- {/* 케이스 A: 하단 고정 100% 버튼 */}
-
-
- ✅ 케이스 A: 회원가입, 시간등록 (기본 100%)
-
-
-
-
- {/* 케이스 B: 50:50 모달창 버튼 */}
-
-
- ✅ 케이스 B: 모달창 (취소/삭제 반반 나누기)
-
-
-
-
-
-
-
- {/* 케이스 C: 리스트 아이템 내부의 수락/거절 */}
-
-
- ✅ 케이스 C: 받은 요청함 (수락/거절 작은 버튼)
-
-
-
-
-
-
-
-
-
- {/* 3. 크기(Size) 테스트 */}
-
-
- 3. Size (크기 변화) - fullWidth={false} 기준
-
-
-
-
-
-
-
-
- {/* 4. 비활성화(Disabled) 테스트 */}
-
-
- 4. Disabled (비활성화 상태)
-
-
-
-
-
-
-
-
- );
-};
diff --git a/src/pages/TestCard.tsx b/src/pages/TestCard.tsx
deleted file mode 100644
index f84caa7..0000000
--- a/src/pages/TestCard.tsx
+++ /dev/null
@@ -1,103 +0,0 @@
-import { Icon } from '@iconify/react';
-import { Badge } from '../components/common/Badge';
-import { CourseCard } from '../components/common/CourseCard';
-
-export const TestCard = () => {
- return (
-
-
-
- 과목 카드 & 배지 테스트 🪪
-
-
- 시안의 모든 카드 케이스 완벽 구현
-
-
-
-
- {/* 케이스 A: 찜 목록 (가장 단순한 형태 + 노란색 배지) */}
-
-
- 1. 찜 목록 스타일
-
-
- 교양필수
- 운영체제
- >
- }
- />
-
-
- {/* 케이스 B: 글쓰기 - 원하는 과목 선택 (+ 아이콘) */}
-
-
- 2. 원하는 과목 선택 (+ 아이콘)
-
-
- +
-
- }
- badges={
- <>
-
컴퓨터 과학
-
전공필수
- >
- }
- />
-
-
- {/* 케이스 C: 글쓰기 - 선택된 과목 삭제 (X 아이콘 + 우측 정렬 배지) */}
-
-
- 3. 교환글 작성 (X 삭제 버튼)
-
- }
- badges={
-
- {' '}
- {/* 배지만 우측으로 밀기 */}
- 컴퓨터 과학
-
- 전공필수
-
-
- }
- />
-
-
- {/* 케이스 D: 게시글 상세 - 요청받은 내 게시글 (파란 테두리 배지) */}
-
-
- 4. 상세 - 요청받은 게시글 (파란 테두리)
-
-
- 전공필수
- 컴퓨터과학
- >
- }
- />
-
-
-
- );
-};
diff --git a/src/pages/TestExtra.tsx b/src/pages/TestExtra.tsx
deleted file mode 100644
index 8fc6dc5..0000000
--- a/src/pages/TestExtra.tsx
+++ /dev/null
@@ -1,165 +0,0 @@
-import { useState } from 'react';
-import { Icon } from '@iconify/react';
-import { Dropdown } from '../components/common/Dropdown';
-import { EmptyState } from '../components/common/EmptyState';
-import { FAB } from '../components/common/FAB';
-import { Toast } from '../components/common/Toast';
-import Button from '../components/common/Button';
-import Header from '../components/layout/Header';
-import { ICONS } from '../constants/icons';
-import { IconButton } from '../components/common/IconButton';
-
-export const TestExtra = () => {
- // 1. 드롭다운 상태 관리
- const [filterValue, setFilterValue] = useState('all');
-
- // 2. 토스트 상태 관리
- const [isToastVisible, setIsToastVisible] = useState(false);
- const [toastMessage, setToastMessage] = useState('');
- const [toastIcon, setToastIcon] = useState('ph:check-bold');
-
- // 토스트 띄우기 도우미 함수
- const showToast = (message: string, icon: string = 'ph:check-bold') => {
- setToastMessage(message);
- setToastIcon(icon);
- setIsToastVisible(false); // 연타 시 타이머 초기화를 위해 한번 껐다가 켭니다
- setTimeout(() => setIsToastVisible(true), 10);
- };
-
- return (
-
-
-
- 기타 컴포넌트 테스트 🧩
-
-
- 드롭다운, 빈 화면, 토스트, 그리고 플로팅 버튼
-
-
-
- {/* 💡 모바일 화면 규격 (스크롤 테스트를 위해 높이와 overflow 속성 추가) */}
-
- {/* =========================================
- 💡 공통 Header 컴포넌트 적용 완료
- ========================================= */}
-
}
- title="컴포넌트 테스트"
- rightNode={
}
- />
-
- {/* 스크롤 가능한 메인 영역 */}
-
- {/* =========================================
- 💡 1. Dropdown (드롭다운 필터) 테스트
- ========================================= */}
-
-
- 1. 드롭다운 필터 (z-index 테스트)
-
-
-
-
-
- 현재 선택된 값:{' '}
- {filterValue}
-
-
-
-
-
- {/* =========================================
- 💡 2. EmptyState (빈 화면) 테스트
- ========================================= */}
-
-
- 2. 텅 빈 화면 안내
-
-
- } // 시안의 연파란색 느낌
- title="아직 등록한 교환 게시글이 없어요."
- description="교환하려는 과목을 등록하고 원하는 과목을 찾아보세요!"
- action={
-
- }
- />
-
-
-
-
-
- {/* =========================================
- 💡 3. Toast (토스트 알림) 테스트
- ========================================= */}
-
-
- 3. 토스트 알림 띄우기
-
-
-
-
-
-
-
- {/* 스크롤 길이를 늘리기 위한 가짜 여백 */}
-
- (스크롤 영역)
-
-
-
- {/* =========================================
- 💡 4. FAB (플로팅 버튼) 테스트
- ========================================= */}
- {/* 기본 동그라미 FAB (+ 아이콘) : 겹치지 않게 위치 조정 */}
-
alert('+ 아이콘 클릭!')}
- className="bottom-28" // 원래 위치
- />
-
- {/* 알약 모양 FAB (+ 글쓰기) : 겹치지 않게 위치 조정 */}
- alert('글쓰기 클릭!')}
- text="글쓰기"
- className="bottom-8" // 아래로 조금 내림
- />
-
- {/* =========================================
- 💡 5. 실제 렌더링되는 Toast 컴포넌트
- ========================================= */}
- setIsToastVisible(false)}
- icon={toastIcon}
- />
-
-
- );
-};
diff --git a/src/pages/TestHeader.tsx b/src/pages/TestHeader.tsx
deleted file mode 100644
index 50f5a24..0000000
--- a/src/pages/TestHeader.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-import { ICONS } from '../constants/icons';
-import { IconButton } from '../components/common/IconButton';
-import Header from '../components/layout/Header';
-
-export const TestHeader = () => {
- return (
-
-
-
- 헤더 UI 테스트 도화지 🎨
-
-
- 타이틀 중앙 정렬 및 가변 아이콘 검증
-
-
-
- {/* 모바일 화면(402px) 규격을 흉내 낸 컨테이너 */}
-
- {/* 1번 시안: 게시글 상세 */}
-
-
- 1. 게시글 상세 (타이틀 중앙 + 우측 점 3개)
-
-
-
console.log('뒤로가기')}
- />
- }
- title="게시글 상세"
- rightNode={}
- />
- {/* 헤더 아래 빈 내용 영역 */}
-
-
-
-
- {/* 2번 시안: 교환 요청함 */}
-
-
- 2. 교환 요청함 (기본 형태)
-
-
-
}
- title="교환 요청함"
- rightNode={
}
- />
-
-
-
-
- {/* 3번 시안: 메인 홈 */}
-
-
- 3. 메인 홈 (좌측 로고 + 우측 멀티 아이콘)
-
-
-
- 교환해요
-
- }
- // title은 아예 비워둡니다
- rightNode={
- <>
- {/* 💡 아이콘 두 개가 나란히 들어가도 알아서 예쁘게 배치됩니다 */}
-
-
- >
- }
- />
-
-
-
-
-
- );
-};
diff --git a/src/pages/TestInput.tsx b/src/pages/TestInput.tsx
deleted file mode 100644
index 53d0f2b..0000000
--- a/src/pages/TestInput.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-import { useState } from 'react';
-import { Icon } from '@iconify/react';
-// 💡 컴포넌트들의 실제 경로에 맞게 수정해주세요
-import { Input } from '../components/common/Input';
-import { Textarea } from '../components/common/Textarea';
-
-export const TestInput = () => {
- // 비밀번호 보이기/숨기기 토글 상태 관리
- const [showPassword, setShowPassword] = useState(false);
-
- return (
-
-
-
- 입력창 UI 테스트 도화지 📝
-
-
- 기본, 아이콘, 에러, 채팅 피드 타입 검증
-
-
-
- {/* 모바일 화면(402px) 규격 컨테이너 */}
-
- {/* 케이스 1: 기본 이메일 입력창 */}
-
-
- {/* 케이스 2: 비밀번호 변경 에러 상태 */}
-
-
- {/* 케이스 3: 게시판 글쓰기 제목 및 내용 */}
-
-
- {/* 케이스 4: 채팅 및 댓글 입력창 (Pill 타입) */}
-
-
-
- );
-};
diff --git a/src/pages/TestLoading.tsx b/src/pages/TestLoading.tsx
deleted file mode 100644
index e633446..0000000
--- a/src/pages/TestLoading.tsx
+++ /dev/null
@@ -1,72 +0,0 @@
-import { Spinner } from '../components/common/Spinner';
-import { Skeleton } from '../components/common/Skeleton';
-
-export const TestLoading = () => {
- return (
-
-
-
- 모달 UI 테스트 도화지 팝업창 💬
-
-
- 아래 버튼들을 눌러 모달을 띄워보세요.
-
-
-
-
-
-
-
-
-
- {/* =========================================
- 💡 1. 게시글 삭제 모달 (50:50 버튼)
- ========================================= */}
-
setOpenDeleteModal(false)}
- icon={
-
- }
- title="게시글 삭제"
- footer={
- <>
-
-
- >
- }
- >
- 삭제 시 복구할 수 없습니다
-
-
- {/* =========================================
- 💡 2. 인증 실패 모달 (단일 버튼 + 긴 텍스트)
- ========================================= */}
-
setOpenAuthModal(false)}
- icon={
-
- }
- title="인증에 실패했습니다"
- footer={
-
- }
- >
- 인증 QR 코드를 확인할 수 없습니다.{'\n\n'}
- 수강신청(내역) 페이지와 인증 QR 코드가{'\n'}한 화면에 모두 보이도록 한
- 뒤{'\n'}
- 다시 인증을 진행해주세요.
-
-
- {/* =========================================
- 💡 3. 교환하기 모달 (커스텀 내용 + 세로 버튼)
- ========================================= */}
-
setOpenExchangeModal(false)}
- title={지금 교환하세요}
- footer={
-
-
-
-
- }
- >
-
-
1. 현재 강의를 취소하세요.
-
2. 상대방의 강의를 신청하세요.
-
-
- 강의 신청이 완료되면
-
- 결과에 따라 아래 버튼을 선택해주세요.
-
-
-
-
- );
-};
diff --git a/src/pages/TestTabs.tsx b/src/pages/TestTabs.tsx
deleted file mode 100644
index 8ecf151..0000000
--- a/src/pages/TestTabs.tsx
+++ /dev/null
@@ -1,87 +0,0 @@
-import { useState } from 'react';
-import { Icon } from '@iconify/react';
-import { Tabs } from '../components/common/Tabs';
-
-export const TestTabs = () => {
- // 1번 라인 탭 상태 관리
- const [activeRequestTab, setActiveRequestTab] = useState('received');
-
- // 2번 알약 탭 상태 관리
- const [activeFilterTab, setActiveFilterTab] = useState('all');
-
- return (
-
-
-
- Tabs UI 테스트 도화지 🗂️
-
-
- 상단 메뉴용 라인 타입과 필터용 알약 타입 검증
-
-
-
- {/* 모바일 화면(402px) 규격 컨테이너 */}
-
- {/* =========================================
- 💡 케이스 1: 교환 요청함 (Line 타입)
- ========================================= */}
-
-
- 1. 라인(Line) 타입 - 상단 메뉴용
-
-
-
-
- {/* 탭 내용이 바뀌는 영역 임시 구현 */}
-
- {activeRequestTab === 'received'
- ? '📥 받은 요청 내역이 없습니다.'
- : '📤 보낸 요청 내역이 없습니다.'}
-
-
-
-
-
- {/* =========================================
- 💡 케이스 2: 교환준비방 필터 (Pill 타입)
- ========================================= */}
-
-
- 2. 알약(Pill) 타입 - 필터/토글용
-
-
-
- {/* 좌측 필터 아이콘 (시안 참고) */}
-
-
-
-
-
-
- {activeFilterTab === 'all'
- ? '👀 모든 채팅방을 보여줍니다.'
- : '🔴 안 읽은 메세지만 보여줍니다.'}
-
-
-
-
- );
-};
diff --git a/src/routes/router.tsx b/src/routes/router.tsx
index 1e6891e..eceae44 100644
--- a/src/routes/router.tsx
+++ b/src/routes/router.tsx
@@ -5,16 +5,7 @@ import RootLayout from '@/components/layout/RootLayout';
import DefaultLayout from '@/components/layout/DefaultLayout';
import FullScreenLayout from '@/components/layout/FullScreenLayout';
-// --- 2. 페이지 불러오기 (임시 예시) ---
-import { TestButton } from '../pages/TestButton';
-import { TestHeader } from '../pages/TestHeader';
-import { TestInput } from '../pages/TestInput';
-import { TestModal } from '../pages/TestModal';
-import { TestTabs } from '../pages/TestTabs';
-import { TestCard } from '../pages/TestCard';
-import { TestExtra } from '../pages/TestExtra';
-import { TestAvatar } from '../pages/TestAvatar';
-import { TestLoading } from '../pages/TestLoading';
+// --- 2. 페이지 불러오기 ---
export const router = createBrowserRouter([
{
@@ -26,16 +17,7 @@ export const router = createBrowserRouter([
// ==========================================
element: