diff --git a/src/assets/10cm.jpg b/src/assets/10cm.jpg new file mode 100644 index 0000000..6b56666 Binary files /dev/null and b/src/assets/10cm.jpg differ diff --git a/src/assets/bigmama.webp b/src/assets/bigmama.webp new file mode 100644 index 0000000..75a36f0 Binary files /dev/null and b/src/assets/bigmama.webp differ diff --git a/src/assets/haha.webp b/src/assets/haha.webp new file mode 100644 index 0000000..ad60f92 Binary files /dev/null and b/src/assets/haha.webp differ diff --git a/src/assets/jannavi.jpg b/src/assets/jannavi.jpg new file mode 100644 index 0000000..8ac9b59 Binary files /dev/null and b/src/assets/jannavi.jpg differ diff --git a/src/assets/loykim.webp b/src/assets/loykim.webp new file mode 100644 index 0000000..15dbc5e Binary files /dev/null and b/src/assets/loykim.webp differ diff --git a/src/assets/norazo.jpg b/src/assets/norazo.jpg new file mode 100644 index 0000000..a28b9e0 Binary files /dev/null and b/src/assets/norazo.jpg differ diff --git a/src/assets/paulblanco.avif b/src/assets/paulblanco.avif new file mode 100644 index 0000000..2b3b3a7 Binary files /dev/null and b/src/assets/paulblanco.avif differ diff --git a/src/assets/qwer.webp b/src/assets/qwer.webp new file mode 100644 index 0000000..cf582f8 Binary files /dev/null and b/src/assets/qwer.webp differ diff --git a/src/assets/soranband.webp b/src/assets/soranband.webp new file mode 100644 index 0000000..723812c Binary files /dev/null and b/src/assets/soranband.webp differ diff --git a/src/components/display/Guest.styled.ts b/src/components/display/Guest.styled.ts new file mode 100644 index 0000000..dce40c3 --- /dev/null +++ b/src/components/display/Guest.styled.ts @@ -0,0 +1,25 @@ +import styled from "styled-components"; + +export const Card = styled.div` + width: 290px; + height: 100%; + border-radius: 25px; + box-shadow: 4px 4px 5px rgba(0, 0, 0, 25%); + position: relative; + overflow: hidden; + scroll-snap-align: center; + flex-shrink: 0; + span { + position: absolute; + bottom: 10px; + left: 20px; + z-index: 9; + } +`; + +export const Picture = styled.img` + width: 100%; + height: 100%; + object-fit: cover; + object-position: 50% 50%; +`; diff --git a/src/components/display/Guest.tsx b/src/components/display/Guest.tsx new file mode 100644 index 0000000..9bb0c38 --- /dev/null +++ b/src/components/display/Guest.tsx @@ -0,0 +1,19 @@ +import { Text } from "@/components/typography/Text"; + +import { Card, Picture } from "./Guest.styled"; + +export interface IGuest { + pic: string; + name: string; +} + +export const Guest: React.FC = ({ name, pic }) => { + return ( + + + + {name} + + + ); +}; diff --git a/src/components/display/ShowData.tsx b/src/components/display/ShowData.tsx new file mode 100644 index 0000000..a5a6d45 --- /dev/null +++ b/src/components/display/ShowData.tsx @@ -0,0 +1,24 @@ +import { Paragraph } from "../typography/Paragraph"; +import { ShowDateContainer, ShowDateLink } from "./ShowDate.styled"; + +interface IShowDate { + date: string; + day: string; + active: boolean; + onClick: () => void; +} +export const ShowDate: React.FC = ({ date, day, active, onClick }) => { + const variant = active ? "#5D5A88" : "#adabc3"; + return ( + + + + {date} + + + {day} + + + + ); +}; diff --git a/src/components/display/ShowDate.styled.ts b/src/components/display/ShowDate.styled.ts new file mode 100644 index 0000000..9beda97 --- /dev/null +++ b/src/components/display/ShowDate.styled.ts @@ -0,0 +1,14 @@ +import styled from "styled-components"; + +export const ShowDateContainer = styled.div` + justify-content: space-between; +`; + +export const ShowDateLink = styled.a` + text-decoration: none; + text-align: center; + p { + margin: 0; + line-height: 22px; + } +`; diff --git a/src/components/layout/MainLayout.tsx b/src/components/layout/MainLayout.tsx index 3ca3ee5..d312209 100644 --- a/src/components/layout/MainLayout.tsx +++ b/src/components/layout/MainLayout.tsx @@ -8,6 +8,7 @@ import Footer from "./Footer"; export const Main = styled.main` width: min(100%, 700px); margin: 0px auto; + padding-top: 81px; `; export const MainLayout = () => { diff --git a/src/components/typography/Paragraph.tsx b/src/components/typography/Paragraph.tsx index 4efada7..b8432c8 100644 --- a/src/components/typography/Paragraph.tsx +++ b/src/components/typography/Paragraph.tsx @@ -4,10 +4,10 @@ export interface IParagraph extends IText { children: React.ReactNode; } -export const Paragraph: React.FC = ({ size, weight, children }) => { +export const Paragraph: React.FC = ({ size, weight, variant, children }) => { return (

- + {children}

diff --git a/src/pages/BoothListPage.styled.tsx b/src/pages/BoothListPage.styled.tsx index 5ebd729..c2a4c0b 100644 --- a/src/pages/BoothListPage.styled.tsx +++ b/src/pages/BoothListPage.styled.tsx @@ -24,7 +24,4 @@ export const VisibleList = styled(motion.ul)` padding: 40px; width: 90%; list-style: none; - - motion.IBooth { - } `; diff --git a/src/pages/SpecialGuestPage.styled.tsx b/src/pages/SpecialGuestPage.styled.tsx index e69de29..555c1e0 100644 --- a/src/pages/SpecialGuestPage.styled.tsx +++ b/src/pages/SpecialGuestPage.styled.tsx @@ -0,0 +1,48 @@ +import styled from "styled-components"; + +export const MainContent = styled.div` + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin-top: 10px; + p { + text-shadow: 0px 4px 4px rgba(0, 0, 0, 25%); + } +`; +export const GuestContainer = styled.div` + width: 100%; + margin-top: 50px; + text-align: center; + display: flex; + flex-direction: column; + gap: 30px; + p { + text-shadow: none; + } +`; +export const Date = styled.div` + width: 100%; + display: flex; + flex-direction: row; + justify-content: center; + gap: 33px; +`; + +export const GuestCard = styled.div` + height: 360px; + display: flex; + flex-direction: row; + gap: 25px; + padding: 0 50px; + margin-top: 10px; + overflow: hidden; + overflow-x: auto; + scroll-snap-type: x mandatory; + scroll-behavior: smooth; + scrollbar-width: none; + -ms-overflow-style: none; + &::-webkit-scrollbar { + display: none; + } +`; diff --git a/src/pages/SpecialGuestPage.tsx b/src/pages/SpecialGuestPage.tsx index 77ab709..10861b9 100644 --- a/src/pages/SpecialGuestPage.tsx +++ b/src/pages/SpecialGuestPage.tsx @@ -1,3 +1,79 @@ -export default function SpecialGuestPage() { - return <>; -} +import React, { useState } from "react"; +import { BiSolidMap } from "react-icons/bi"; + +import { Guest } from "@/components/display/Guest"; +import { ShowDate } from "@/components/display/ShowData"; +import { Paragraph } from "@/components/typography/Paragraph"; +import { Text } from "@/components/typography/Text"; + +import { MainContent, GuestCard, GuestContainer, Date } from "./SpecialGuestPage.styled"; + +const SpecialGuestPage: React.FC = () => { + const [activeDate, setActiveDate] = useState("5.22"); + + const handleDateClick = (date: string) => { + setActiveDate(date); + }; + interface GuestData { + [key: string]: { pic: string; name: string }[]; + } + + const guestData: GuestData = { + "5.21": [ + { pic: "./src/assets/jannavi.jpg", name: "잔나비" }, + { pic: "./src/assets/norazo.jpg", name: "노라조" }, + { pic: "./src/assets/soranband.webp", name: "소란밴드" }, + ], + "5.22": [ + { pic: "./src/assets/qwer.webp", name: "QWER" }, + { pic: "./src/assets/10cm.jpg", name: "10CM" }, + { pic: "./src/assets/haha.webp", name: "하하" }, + ], + "5.23": [ + { pic: "./src/assets/paulblanco.avif", name: "Paul Balnco" }, + { pic: "./src/assets/loykim.webp", name: "로이킴" }, + { pic: "./src/assets/bigmama.webp", name: "빅마마" }, + ], + }; + const renderGuests = () => { + return guestData[activeDate].map((guest) => ); + }; + + return ( + + + SPECIAL GUEST + + + + handleDateClick("5.21")} + /> + handleDateClick("5.22")} + /> + handleDateClick("5.23")} + /> + +
+ + + 1주차장 + +
+ {renderGuests()} +
+
+ ); +}; +export default SpecialGuestPage;