From 76dbf1cf0cafdcec8e5de42f090d1e4ff27c865c Mon Sep 17 00:00:00 2001 From: yoooooojin Date: Sat, 18 Jul 2026 16:52:11 +0900 Subject: [PATCH 1/7] =?UTF-8?q?fix:=20=EB=A3=A8=ED=8A=B8=20=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=EC=95=84=EC=9B=83=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/layout/RootLayout.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/components/layout/RootLayout.tsx b/src/components/layout/RootLayout.tsx index f41b647..66eb950 100644 --- a/src/components/layout/RootLayout.tsx +++ b/src/components/layout/RootLayout.tsx @@ -3,11 +3,9 @@ import { Outlet } from 'react-router-dom'; export default function RootLayout() { return (
- -
+
-
); -} \ No newline at end of file +} From 3c4c86c46e916aae49667fe7762a57a7127f30d7 Mon Sep 17 00:00:00 2001 From: yoooooojin Date: Sat, 18 Jul 2026 17:16:48 +0900 Subject: [PATCH 2/7] =?UTF-8?q?fix:=20Paperozi=20->=20Paperlogy=EB=A1=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.css | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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; From c0cc308d68195c613fb9d252093d4b3c114d5b96 Mon Sep 17 00:00:00 2001 From: yoooooojin Date: Sat, 18 Jul 2026 17:29:15 +0900 Subject: [PATCH 3/7] =?UTF-8?q?fix:=20=ED=8C=8C=EB=9E=80=20=EC=9B=90=20?= =?UTF-8?q?=EB=B0=B0=EA=B2=BD=20=EC=A4=91=EC=95=99=20=EC=A0=95=EB=A0=AC=20?= =?UTF-8?q?+=20=EC=B1=84=ED=8C=85=20=EC=95=84=EC=9D=B4=EC=BD=98=20fill=20?= =?UTF-8?q?=EC=97=86=EB=8A=94=20=EA=B1=B8=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/layout/BottomNav.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/layout/BottomNav.tsx b/src/components/layout/BottomNav.tsx index 0195d4a..bf0f14b 100644 --- a/src/components/layout/BottomNav.tsx +++ b/src/components/layout/BottomNav.tsx @@ -5,8 +5,6 @@ export default function BottomNav() { const location = useLocation(); const navigate = useNavigate(); - // 💡 메뉴 데이터 배열 (주소와 아이콘 매핑) - // 아이콘은 시안과 가장 유사한 ph(Phosphor) 및 mdi 계열로 임시 세팅했습니다. const navItems = [ { id: 'home', label: '홈', path: '/', icon: 'ph:house-fill' }, { @@ -19,7 +17,7 @@ export default function BottomNav() { id: 'chat', label: '교환채팅방', path: '/chat', - icon: 'ph:chat-circle-dots-fill', + icon: 'ph:chat-circle-dots', }, { id: 'lounge', label: '라운지', path: '/lounge', icon: 'mdi:snowflake' }, { id: 'my', label: '마이페이지', path: '/my', icon: 'ph:user' }, @@ -41,15 +39,17 @@ export default function BottomNav() { onClick={() => navigate(item.path)} className="flex flex-col items-center justify-center gap-1 w-16" > - {/* 아이콘 영역 (활성화 시 파란색 동그라미 배경 + 흰색 아이콘) */}
- +
{/* 텍스트 영역 (활성화 시 파란색 글씨) */} From d98d2f7ca6389d3808d6b5aa9d8fd7ea6dd2f3c1 Mon Sep 17 00:00:00 2001 From: yoooooojin Date: Sat, 18 Jul 2026 18:06:27 +0900 Subject: [PATCH 4/7] =?UTF-8?q?chore:=20test=20=ED=8C=8C=EC=9D=BC=EB=93=A4?= =?UTF-8?q?=20=EB=AA=A8=EB=91=90=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/TestAvatar.tsx | 76 ------------------ src/pages/TestButton.tsx | 125 ----------------------------- src/pages/TestCard.tsx | 103 ------------------------ src/pages/TestExtra.tsx | 165 -------------------------------------- src/pages/TestHeader.tsx | 82 ------------------- src/pages/TestInput.tsx | 94 ---------------------- src/pages/TestLoading.tsx | 72 ----------------- src/pages/TestModal.tsx | 126 ----------------------------- src/pages/TestTabs.tsx | 87 -------------------- src/routes/router.tsx | 24 +----- 10 files changed, 3 insertions(+), 951 deletions(-) delete mode 100644 src/pages/TestAvatar.tsx delete mode 100644 src/pages/TestButton.tsx delete mode 100644 src/pages/TestCard.tsx delete mode 100644 src/pages/TestExtra.tsx delete mode 100644 src/pages/TestHeader.tsx delete mode 100644 src/pages/TestInput.tsx delete mode 100644 src/pages/TestLoading.tsx delete mode 100644 src/pages/TestModal.tsx delete mode 100644 src/pages/TestTabs.tsx 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. 기본 프로필 (사이즈별) -

-
-
- - sm (댓글용) -
-
- - md (기본용) -
-
- - lg (마이페이지) -
-
-
- - {/* 2. 이미지가 들어온 경우 */} -
-

- 2. 사진이 있을 경우 (src 전달) -

-
- {/* 임시로 더미 이미지 URL을 넣어두었습니다 */} - - - -
-
- - {/* 3. 실제 시안 적용 예시 (게시글 상세 작성자 정보) */} -
-

- 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: 비밀번호 변경 에러 상태 */} -
- - setShowPassword(!showPassword)} - > - - - } - isError={true} - errorMessage="비밀번호가 일치하지 않습니다." - /> -
- - {/* 케이스 3: 게시판 글쓰기 제목 및 내용 */} -
- -
- -