diff --git a/public/images/guide_image_1.webp b/public/images/guide_image_1.webp
new file mode 100644
index 00000000..b7b71c75
Binary files /dev/null and b/public/images/guide_image_1.webp differ
diff --git a/public/images/guide_image_2.webp b/public/images/guide_image_2.webp
new file mode 100644
index 00000000..b67b09cd
Binary files /dev/null and b/public/images/guide_image_2.webp differ
diff --git a/public/images/guide_image_3.webp b/public/images/guide_image_3.webp
new file mode 100644
index 00000000..55a9c07b
Binary files /dev/null and b/public/images/guide_image_3.webp differ
diff --git a/public/images/guide_image_4.webp b/public/images/guide_image_4.webp
new file mode 100644
index 00000000..c545c7f9
Binary files /dev/null and b/public/images/guide_image_4.webp differ
diff --git a/public/images/guide_image_5.webp b/public/images/guide_image_5.webp
new file mode 100644
index 00000000..9af44b1a
Binary files /dev/null and b/public/images/guide_image_5.webp differ
diff --git a/public/images/guide_image_6.webp b/public/images/guide_image_6.webp
new file mode 100644
index 00000000..ba794030
Binary files /dev/null and b/public/images/guide_image_6.webp differ
diff --git a/src/pages/guide/constants/guide-images.ts b/src/pages/guide/constants/guide-images.ts
new file mode 100644
index 00000000..ea76a5de
--- /dev/null
+++ b/src/pages/guide/constants/guide-images.ts
@@ -0,0 +1,10 @@
+export const GUIDE_IMAGES = [
+ { id: 1, src: 'images/guide_image_1.webp', alt: '가이드 1' },
+ { id: 2, src: 'images/guide_image_2.webp', alt: '가이드 2' },
+ { id: 3, src: 'images/guide_image_3.webp', alt: '가이드 3' },
+ { id: 4, src: 'images/guide_image_4.webp', alt: '가이드 4' },
+ { id: 5, src: 'images/guide_image_5.webp', alt: '가이드 5' },
+ { id: 6, src: 'images/guide_image_6.webp', alt: '가이드 6' },
+] as const;
+
+export type GuideImage = (typeof GUIDE_IMAGES)[number];
diff --git a/src/pages/guide/guide.tsx b/src/pages/guide/guide.tsx
new file mode 100644
index 00000000..27223fb8
--- /dev/null
+++ b/src/pages/guide/guide.tsx
@@ -0,0 +1,56 @@
+import CarouselIndicator from '@pages/match/groups/components/carousel_indicator';
+import { useSlide } from '@pages/match/hooks/useSlide';
+import { getSlideTransformStyle } from '@pages/match/styles/get-slide-transformstyle';
+import { useState } from 'react';
+import { GUIDE_IMAGES } from './constants/guide-images';
+
+const Guide = () => {
+ const [currentIndex, setCurrentIndex] = useState(0);
+
+ const { handleTouchStart, handleTouchEnd, handleMouseDown } = useSlide({
+ length: GUIDE_IMAGES.length,
+ currentIndex,
+ onChange: setCurrentIndex,
+ });
+
+ return (
+
+
+ {GUIDE_IMAGES.map((image, index) => (
+ -
+
+

+
+
+ ))}
+
+
+
+ `guide-${image.id}`)}
+ currentIndex={currentIndex}
+ onDotClick={setCurrentIndex}
+ />
+
+
+ );
+};
+
+export default Guide;
diff --git a/src/pages/home/components/top-section.tsx b/src/pages/home/components/top-section.tsx
index 5472efb4..cfc0d565 100644
--- a/src/pages/home/components/top-section.tsx
+++ b/src/pages/home/components/top-section.tsx
@@ -1,9 +1,21 @@
import CardBanner from '@components/card/banner-card/banner-card';
+import { ROUTES } from '@routes/routes-config';
+import { useNavigate } from 'react-router-dom';
const TopSection = () => {
+ const navigate = useNavigate();
+
+ const handleBannerClick = () => {
+ navigate(ROUTES.GUIDE);
+ };
+
return (
);
};
diff --git a/src/shared/components/bottom-navigation/bottom-navigation.tsx b/src/shared/components/bottom-navigation/bottom-navigation.tsx
index 96cb0327..e79dfd44 100644
--- a/src/shared/components/bottom-navigation/bottom-navigation.tsx
+++ b/src/shared/components/bottom-navigation/bottom-navigation.tsx
@@ -16,7 +16,9 @@ const BottomNavigation = () => {
const isActive = (path: string) => pathname === path;
- const isDisabled = (path: string) => needsMatchingSetup && path !== ROUTES.HOME;
+ const isDisabled = (path: string) => {
+ return needsMatchingSetup && path !== ROUTES.HOME;
+ };
const handleTabClick = (path: string) => {
if (isDisabled(path)) return;
diff --git a/src/shared/components/bottom-navigation/constants/bottom-navigation.ts b/src/shared/components/bottom-navigation/constants/bottom-navigation.ts
index 033f3844..1250f2b2 100644
--- a/src/shared/components/bottom-navigation/constants/bottom-navigation.ts
+++ b/src/shared/components/bottom-navigation/constants/bottom-navigation.ts
@@ -34,3 +34,12 @@ export const NAV_ITEMS = [
},
},
];
+
+export type NavItem = {
+ label: string;
+ path: string;
+ icon: {
+ filled: string;
+ lined: string;
+ };
+};
diff --git a/src/shared/components/card/banner-card/banner-card.tsx b/src/shared/components/card/banner-card/banner-card.tsx
index ef7bc31d..a0f35a38 100644
--- a/src/shared/components/card/banner-card/banner-card.tsx
+++ b/src/shared/components/card/banner-card/banner-card.tsx
@@ -5,17 +5,18 @@ interface CardBannerProps {
text: string;
subText?: string;
className?: string;
+ onClick?: () => void;
}
-const BannerCard = ({ text, subText, className }: CardBannerProps) => {
+const BannerCard = ({ text, subText, onClick }: CardBannerProps) => {
return (
-
+
+
);
};
diff --git a/src/shared/constants/header.ts b/src/shared/constants/header.ts
index d157c107..81dbfac1 100644
--- a/src/shared/constants/header.ts
+++ b/src/shared/constants/header.ts
@@ -16,4 +16,10 @@ export const NO_HEADER_PATHS = [
ROUTES.CHAT,
];
-export const SHOW_BOTTOM_NAVIGATE_PATHS = [ROUTES.HOME, ROUTES.MATCH, ROUTES.CHAT, ROUTES.PROFILE];
+export const SHOW_BOTTOM_NAVIGATE_PATHS = [
+ ROUTES.HOME,
+ ROUTES.MATCH,
+ ROUTES.CHAT,
+ ROUTES.PROFILE,
+ ROUTES.GUIDE,
+];
diff --git a/src/shared/routes/lazy.ts b/src/shared/routes/lazy.ts
index caaf4f80..f2d4923f 100644
--- a/src/shared/routes/lazy.ts
+++ b/src/shared/routes/lazy.ts
@@ -7,6 +7,9 @@ export const SignUp = lazy(() => import('@pages/sign-up/sign-up'));
// Home
export const Home = lazy(() => import('@pages/home/home'));
+// Guide
+export const Guide = lazy(() => import('@pages/guide/guide'));
+
// Matching
export const Onboarding = lazy(() => import('@pages/onboarding/onboarding'));
export const OnboardingGroup = lazy(() => import('@pages/onboarding/onboarding-group'));
diff --git a/src/shared/routes/protected-routes.tsx b/src/shared/routes/protected-routes.tsx
index 7f08bd9f..65c36aaf 100644
--- a/src/shared/routes/protected-routes.tsx
+++ b/src/shared/routes/protected-routes.tsx
@@ -5,6 +5,7 @@ import {
EditProfile,
GroupMates,
GroupNew,
+ Guide,
Home,
Match,
Onboarding,
@@ -29,4 +30,5 @@ export const protectedRoutes = [
{ path: ROUTES.RESULT(), element: },
{ path: ROUTES.ONBOARDING, element: },
{ path: ROUTES.ONBOARDING_GROUP, element: },
+ { path: ROUTES.GUIDE, element: },
];
diff --git a/src/shared/routes/routes-config.ts b/src/shared/routes/routes-config.ts
index 7e628278..43a2bd4e 100644
--- a/src/shared/routes/routes-config.ts
+++ b/src/shared/routes/routes-config.ts
@@ -19,4 +19,5 @@ export const ROUTES = {
ERROR: '/error',
LOADING: '/loading',
SPLASH: '/splash',
+ GUIDE: '/guide',
};