diff --git a/src/app/(public)/_components/Header.tsx b/src/app/(public)/_components/Header.tsx deleted file mode 100644 index 52ae353..0000000 --- a/src/app/(public)/_components/Header.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { RootInner } from './Inner'; -import Logo from './Logo'; -import Nav from './Nav'; - -export default function Header() { - return ( -
- - -
- ); -} diff --git a/src/app/(public)/_components/Logo.tsx b/src/app/(public)/_components/Logo.tsx deleted file mode 100644 index f24d62f..0000000 --- a/src/app/(public)/_components/Logo.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import Link from 'next/link'; -import Image from 'next/image'; -import LogoBI from '@/assets/images/logo_bi_white.svg'; -import LogoCI from '@/assets/images/logo_ci_white.svg'; - -export default function Logo() { - return ( - - taskify - taskify - - ); -} diff --git a/src/app/(public)/_components/Nav.tsx b/src/app/(public)/_components/Nav.tsx deleted file mode 100644 index 227eead..0000000 --- a/src/app/(public)/_components/Nav.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import Link from 'next/link'; -import { BaseLinkItem } from './type'; - -const ROOT_NAV_LIST: BaseLinkItem[] = [ - { - path: '/login', - label: '로그인', - }, - { - path: '/signup', - label: '회원가입', - }, -]; - -export default function Nav() { - return ( - - ); -} diff --git a/src/app/(public)/faq/page.tsx b/src/app/(public)/faq/page.tsx index 857f1d8..39cd1c5 100644 --- a/src/app/(public)/faq/page.tsx +++ b/src/app/(public)/faq/page.tsx @@ -1,5 +1,5 @@ -import SubHeader from '../_components/SubHeader'; -import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from './_components/Accordion'; +import SubHeader from '@/components/landing/layout/SubHeader'; +import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@/components/landing/Accordion'; const FAQ_CONTENTS = [ { diff --git a/src/app/(public)/landing/page.tsx b/src/app/(public)/landing/page.tsx deleted file mode 100644 index 08a478a..0000000 --- a/src/app/(public)/landing/page.tsx +++ /dev/null @@ -1,16 +0,0 @@ -'use client'; - -import Feature from './_components/Feature'; -import Hero from './_components/Hero'; -import Setting from './_components/Setting'; -import SmoothScroll from './_components/SmoothScroll'; - -export default function LandingPage() { - return ( - - - - - - ); -} diff --git a/src/app/(public)/layout.tsx b/src/app/(public)/layout.tsx index c7bccfc..82f61b6 100644 --- a/src/app/(public)/layout.tsx +++ b/src/app/(public)/layout.tsx @@ -1,14 +1,66 @@ import { PropsWithChildren } from 'react'; -import Header from './_components/Header'; -import Footer from './_components/Footer'; -import Main from './_components/Main'; +import Footer from '@/components/landing/layout/Footer'; +import Main from '@/components/landing/layout/Main'; +import SmoothScroll from '@/components/landing/SmoothScroll'; +import Header from '@/components/landing/layout/Header'; +import { BaseLinkItem, IconLinkItem } from '@/components/landing/layout/type'; +import ICON_MAIL from '@/assets/icons/email.svg'; +import ICON_FACEBOOK from '@/assets/icons/facebook.svg'; +import ICON_INSTAGRAM from '@/assets/icons/Instagram.svg'; + +const ROOT_NAV_LIST: BaseLinkItem[] = [ + { + path: '/login', + label: '로그인', + }, + { + path: '/signup', + label: '회원가입', + }, +]; + +const FOOTER_NAV_LIST: BaseLinkItem[] = [ + { + path: '/privacy', + label: 'Privacy Policy', + }, + { + path: '/faq', + label: 'FAQ', + }, +]; + +const SNS_LIST: IconLinkItem[] = [ + { + path: '#', + icon: ICON_MAIL, + label: 'Email', + }, + { + path: '#', + icon: ICON_FACEBOOK, + label: 'Facebook', + }, + { + path: '#', + icon: ICON_INSTAGRAM, + label: 'Instagram', + }, +]; export default function layout({ children }: PropsWithChildren) { return ( -
-
-
{children}
-
+ +
+ {/* header */} +
+ + {/* contents */} +
{children}
+ + {/* footer */} +
+
); } diff --git a/src/app/(public)/page.tsx b/src/app/(public)/page.tsx new file mode 100644 index 0000000..bbe3536 --- /dev/null +++ b/src/app/(public)/page.tsx @@ -0,0 +1,15 @@ +'use client'; + +import Feature from '@/components/landing/Feature'; +import Hero from '@/components/landing/Hero'; +import Setting from '@/components/landing/Setting'; + +export default function page() { + return ( + <> + + + + + ); +} diff --git a/src/app/(public)/privacy/page.tsx b/src/app/(public)/privacy/page.tsx index 2602333..9a64fad 100644 --- a/src/app/(public)/privacy/page.tsx +++ b/src/app/(public)/privacy/page.tsx @@ -1,4 +1,4 @@ -import SubHeader from '../_components/SubHeader'; +import SubHeader from '@/components/landing/layout/SubHeader'; type PRIVACY_CONTENT = { title: string; diff --git a/src/app/page.tsx b/src/app/page.tsx deleted file mode 100644 index ea905d0..0000000 --- a/src/app/page.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function Home() { - return
홈페이지입니다.
; -} diff --git a/src/app/(public)/faq/_components/Accordion.tsx b/src/components/landing/Accordion.tsx similarity index 100% rename from src/app/(public)/faq/_components/Accordion.tsx rename to src/components/landing/Accordion.tsx diff --git a/src/app/(public)/landing/_components/Feature.tsx b/src/components/landing/Feature.tsx similarity index 100% rename from src/app/(public)/landing/_components/Feature.tsx rename to src/components/landing/Feature.tsx diff --git a/src/app/(public)/landing/_components/Hero.tsx b/src/components/landing/Hero.tsx similarity index 94% rename from src/app/(public)/landing/_components/Hero.tsx rename to src/components/landing/Hero.tsx index 23e5472..048bfbe 100644 --- a/src/app/(public)/landing/_components/Hero.tsx +++ b/src/components/landing/Hero.tsx @@ -4,6 +4,7 @@ import Image from 'next/image'; import { easeInOut, motion } from 'motion/react'; import LottieData from '@/assets/landings/hero.json'; import LogoFull from '@/assets/images/logo_full_white.svg'; +import Link from 'next/link'; const Lottie = dynamic(() => import('lottie-react'), { ssr: false }); @@ -22,6 +23,8 @@ const childVariants = { animate: { y: 0, opacity: 1, transition: { ease: easeInOut } }, }; +const MotionLink = motion.create(Link); + export default function Hero() { const [lottieLoaded, setLottieLoaded] = useState(false); @@ -56,12 +59,13 @@ export default function Hero() { 새로운 일정 관리 Taskify - 로그인하기 - + ); } diff --git a/src/app/(public)/landing/_components/Setting.tsx b/src/components/landing/Setting.tsx similarity index 100% rename from src/app/(public)/landing/_components/Setting.tsx rename to src/components/landing/Setting.tsx diff --git a/src/app/(public)/landing/_components/SmoothScroll.tsx b/src/components/landing/SmoothScroll.tsx similarity index 100% rename from src/app/(public)/landing/_components/SmoothScroll.tsx rename to src/components/landing/SmoothScroll.tsx diff --git a/src/app/(public)/_components/Footer.tsx b/src/components/landing/layout/Footer.tsx similarity index 62% rename from src/app/(public)/_components/Footer.tsx rename to src/components/landing/layout/Footer.tsx index 8d89362..9e707a6 100644 --- a/src/app/(public)/_components/Footer.tsx +++ b/src/components/landing/layout/Footer.tsx @@ -1,48 +1,16 @@ -import ICON_MAIL from '@/assets/icons/email.svg'; -import ICON_FACEBOOK from '@/assets/icons/facebook.svg'; -import ICON_INSTAGRAM from '@/assets/icons/Instagram.svg'; import Image from 'next/image'; import Link from 'next/link'; import { RootInner } from './Inner'; import { BaseLinkItem, IconLinkItem } from './type'; -const FOOTER_NAV_LIST: BaseLinkItem[] = [ - { - path: '/privacy', - label: 'Privacy Policy', - }, - { - path: '/faq', - label: 'FAQ', - }, -]; - -const SNS_LIST: IconLinkItem[] = [ - { - path: '#', - icon: ICON_MAIL, - label: 'Email', - }, - { - path: '#', - icon: ICON_FACEBOOK, - label: 'Facebook', - }, - { - path: '#', - icon: ICON_INSTAGRAM, - label: 'Instagram', - }, -]; - -export default function Footer() { +export default function Footer({ menus, sns }: { menus: BaseLinkItem[]; sns: IconLinkItem[] }) { return (