From 09c0d9acc2f459064e4b02cd629b569166b3bfa3 Mon Sep 17 00:00:00 2001
From: Lee jin <83453646+j-nary@users.noreply.github.com>
Date: Sat, 11 Jan 2025 14:52:39 +0900
Subject: [PATCH] =?UTF-8?q?=ED=99=88=ED=83=AD=20=EB=B2=88=EC=A9=8D=20?=
=?UTF-8?q?=EC=BA=90=EB=9F=AC=EC=85=80=20=EB=B0=8F=20=EB=AA=A8=EC=9E=84=20?=
=?UTF-8?q?=EC=B9=B4=EB=93=9C=20MO=20(#974)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* feat: 번쩍 캐러셀 Desktop 구현
* feat: Gradation 설정
* feat: 모임카드 tablet, mobile 구현
* style: 간격 조정
* feat: Quick Menu 링크 연결
* refactor: undefined 배열요소 접근 방지
---
pages/index.tsx | 98 +----
public/assets/svg/location.svg | 3 +
.../groupBrowsing/Carousel/Carousel.tsx | 17 +-
.../GroupBrowsingCard/GroupBrowsingCard.tsx | 353 ++++++++----------
.../page/home/HomeCardList/CardList.tsx | 77 +++-
.../{Card.tsx => DesktopCard.tsx} | 49 +--
.../page/home/HomeCardList/MobileCard.tsx | 123 ++++++
.../page/home/HomeCardList/index.tsx | 35 +-
src/components/page/home/QuickMenu/index.tsx | 21 +-
9 files changed, 451 insertions(+), 325 deletions(-)
create mode 100644 public/assets/svg/location.svg
rename src/components/page/home/HomeCardList/{Card.tsx => DesktopCard.tsx} (58%)
create mode 100644 src/components/page/home/HomeCardList/MobileCard.tsx
diff --git a/pages/index.tsx b/pages/index.tsx
index 10eba5bd..a7f8d186 100644
--- a/pages/index.tsx
+++ b/pages/index.tsx
@@ -10,7 +10,6 @@ import { Flex } from '@components/util/layout/Flex';
import { TAKE_COUNT } from '@constants/feed';
import { useDisplay } from '@hooks/useDisplay';
import type { NextPage } from 'next';
-import Link from 'next/link';
import { useEffect } from 'react';
import { useInView } from 'react-intersection-observer';
import { styled } from 'stitches.config';
@@ -34,50 +33,36 @@ const Home: NextPage = () => {
}, [inView, hasNextPage, fetchNextPage]);
return (
-
+ <>
{isLoading && (isTablet ? : )}
{isTablet ? (
<>
-
- ⚡ ️솝트만의 일회성 모임, 번쩍
-
- 더보기 {'>'}
-
-
+ ⚡ ️솝트만의 일회성 모임, 번쩍
{groupBrowsingCardData && }
>
) : (
<>
-
- ⚡ ️솝트만의 일회성 모임, 번쩍
-
- 더보기 {'>'}
-
-
+ ⚡ ️솝트만의 일회성 모임, 번쩍
-
-
- {groupBrowsingCardData && }
-
+ {groupBrowsingCardData && }
>
)}
{isLaptop ? (
- <>
-
+
+
-
+
{groupBrowsingCardData && (
)}
- >
+
) : (
<>
-
-
+
{groupBrowsingCardData && (
)}
@@ -96,7 +81,7 @@ const Home: NextPage = () => {
)}
-
+ >
);
};
@@ -110,14 +95,11 @@ const SContentTitle = styled('div', {
justifyContent: 'space-between',
alignItems: 'center',
width: '1200px',
+
'@laptop': {
width: '790px',
},
- '@media (max-width: 850px)': {
- display: 'none',
- },
-
'@tablet': {
display: 'flex',
width: '100%',
@@ -125,66 +107,22 @@ const SContentTitle = styled('div', {
},
});
-const SMoreButton = styled('button', {
- color: '$gray200',
- /* TODO: mds font 로 변환 */
- fontSize: '$14',
- fontWeight: '600',
- lineHeight: '$18',
- '@tablet': {
- fontSize: '$12',
- },
-
- '&:hover': {
- transition: 'background 0.1s ease-in-out',
- color: '$gray100',
- },
-
- '&:not(:hover)': {
- transition: 'background 0.1s ease-in-out',
- fill: '$gray100',
- },
-});
-
const GroupBrowsingCarouselContainer = styled('div', {
- width: '100vw',
- position: 'absolute',
- left: '0',
display: 'flex',
justifyContent: 'center',
'@laptop': {
- left: '-30px',
- },
-});
-
-const SCarouselBlank = styled('div', {
- paddingBottom: '252px',
- '@media (max-width: 850px)': {
- display: 'none',
+ left: '-20px',
},
});
-const SGradationContainer = styled('div', {
- position: 'relative',
-});
-
-const SCarouselGradationRight = styled('div', {
- width: '122px',
- height: '180px',
- background: 'linear-gradient(270deg, #0F0F12 0%, rgba(15, 15, 18, 0.00) 100%)',
-
- position: 'absolute',
- zIndex: 1,
- right: '0',
- pointerEvents: 'none',
- marginRight: '55px',
+const QuickMenuWrapper = styled('div', {
+ display: 'flex',
+ justifyContent: 'center',
- '@media (max-width: 850px)': {
- display: 'none',
- },
+ margin: '$60 0 $72',
- '@media (min-width: 1259px)': {
- display: 'none',
+ '@mobile': {
+ margin: '0 0 $40',
},
});
diff --git a/public/assets/svg/location.svg b/public/assets/svg/location.svg
new file mode 100644
index 00000000..8063bb61
--- /dev/null
+++ b/public/assets/svg/location.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/components/groupBrowsing/Carousel/Carousel.tsx b/src/components/groupBrowsing/Carousel/Carousel.tsx
index fe79ad84..d22c0ac0 100644
--- a/src/components/groupBrowsing/Carousel/Carousel.tsx
+++ b/src/components/groupBrowsing/Carousel/Carousel.tsx
@@ -82,6 +82,8 @@ const Carousel = ({ cardList }: CarouselProps) => {
export default Carousel;
const SCarousel = styled('div', {
+ position: 'relative',
+
'.slick-slider': {
flexType: 'center',
position: 'relative',
@@ -91,10 +93,8 @@ const SCarousel = styled('div', {
'@laptop': {
width: '848px',
minWidth: '848px',
- },
- '@media (max-width: 850px)': {
- display: 'none',
+ left: '-27px',
},
},
@@ -109,6 +109,17 @@ const SCarousel = styled('div', {
'@laptop': {
width: '732px',
minWidth: '732px',
+
+ '&:after': {
+ content: '""',
+ position: 'absolute',
+ top: '0',
+ right: '-1px',
+ width: '100px',
+ height: '100%',
+ background: 'linear-gradient(270deg, #0F0F12 0%, rgba(15, 15, 18, 0.00) 100%)',
+ pointerEvents: 'none',
+ },
},
},
diff --git a/src/components/groupBrowsing/GroupBrowsingCard/GroupBrowsingCard.tsx b/src/components/groupBrowsing/GroupBrowsingCard/GroupBrowsingCard.tsx
index 62aa7c40..514aefc0 100644
--- a/src/components/groupBrowsing/GroupBrowsingCard/GroupBrowsingCard.tsx
+++ b/src/components/groupBrowsing/GroupBrowsingCard/GroupBrowsingCard.tsx
@@ -1,105 +1,63 @@
import React, { FC } from 'react';
-import { styled } from 'stitches.config';
-import UserIcon from '@assets/svg/user.svg';
+import { keyframes, styled } from 'stitches.config';
import CalendarIcon from '@assets/svg/calendar.svg';
+import LocationIcon from '@assets/svg/location.svg';
import Avatar from '@components/@common/avatar/Avatar';
import { Flex } from '@components/util/layout/Flex';
-import {
- GroupBrowsingCardItem,
- parsePartValueToLabel,
- returnIsGroupActive,
- returnNewStatus,
-} from '@api/API_LEGACY/meeting';
+import { GroupBrowsingCardItem } from '@api/API_LEGACY/meeting';
import dayjs from 'dayjs';
import isBetween from 'dayjs/plugin/isBetween';
dayjs.extend(isBetween);
-import { PART_NAME, ACTION_STATUS, EActionStatus, CATEGORY_NAME, CategoryType } from '@constants/option';
import Link from 'next/link';
import { getResizedImage } from '@utils/image';
-import Separator from '@assets/svg/GroupBrowsingCardSeparator.svg';
import { fontsObject } from '@sopt-makers/fonts';
+import { Tag } from '@sopt-makers/ui';
-const GroupBrowsingCard: FC = ({
- id,
- title,
- category,
- // startDate,
- mStartDate,
- mEndDate,
- // recentActivityDate,
- targetActiveGeneration,
- joinableParts,
- capacity,
- appliedCount,
- approvedCount,
- user,
- status,
- imageURL,
-}) => {
- const isAllParts = joinableParts?.length === Object.keys(PART_NAME).length || joinableParts === null;
- const isGroupActive = returnIsGroupActive(mStartDate, mEndDate);
-
- const newStatus = returnNewStatus(status, mStartDate, isGroupActive);
-
- type statusTextsType = {
- [key: number]: string;
- };
-
- const statusTexts: statusTextsType = {
- // [EActionStatus.BEFORE]: `${-dayjs().diff(startDate, 'day')}일 남음`,
- [EActionStatus.RECRUITING]: `${appliedCount}명 신청 중`,
- // [EActionStatus.ACTING]:
- // dayjs().diff(recentActivityDate, 'day') === 0
- // ? '오늘 새 글'
- // : recentActivityDate === null
- // ? ''
- // : `${dayjs().diff(recentActivityDate, 'day')}일 전 활동`,
- };
-
+const GroupBrowsingCard: FC = ({ id, title, mStartDate, mEndDate, user, imageURL }) => {
+ const imgSrc = imageURL[0]?.url && getResizedImage(imageURL[0].url, 285);
return (
-
-
- {user.name}
- | {CATEGORY_NAME(category as CategoryType)}
-
- {title}
-
-
-
+
+
+ {user.name}
+
+ {title}
+
+ 김솝트님 외 8명 신청중이에요
+ 모집 2일 남음
+
+
+
+
+
+
{dayjs(mStartDate).format('YYYY.MM.DD')} - {dayjs(mEndDate).format('YYYY.MM.DD')}
-
-
-
-
- {approvedCount}/{capacity}명
-
-
-
- {targetActiveGeneration ? '활동 기수' : '전체 기수'} /{' '}
- {isAllParts
- ? '전체'
- : joinableParts
- .map(part => parsePartValueToLabel(part))
- .filter(item => item !== null)
- .join(',')}{' '}
- 파트
-
-
-
-
-
+
+
-
- {ACTION_STATUS[newStatus]}
+
+ 건대입구역
- {statusTexts[newStatus]}
-
+
+
+ YB 환영
+
+
+ 입문자 환영
+
+
+ 초면 환영
+
+
+
);
@@ -107,138 +65,151 @@ const GroupBrowsingCard: FC = ({
export default GroupBrowsingCard;
-const SGroupBrowsingCard = styled('div', {
+const STitle = styled('h3', {
+ ...fontsObject.HEADING_7_16_B,
+ mb: '$2',
+ transition: 'transform 0.3s ease-in-out',
+});
+
+const SBottom = styled('div', {
display: 'flex',
- flexDirection: 'column',
justifyContent: 'space-between',
- backgroundBlendMode: 'multiply',
- backgroundColor: '#17181C',
- backgroundSize: 'cover',
- borderRadius: '12px',
- color: '$gray10',
- width: '285px',
- height: '180px',
- cursor: 'pointer',
- '&:hover': {
- backgroundColor: '$gray200',
- transition: 'background 0.3s ease-in-out',
- },
- '&:not(:hover)': {
- transition: 'background 0.3s ease-in-out',
- },
+ opacity: 1,
+ visibility: 'visible',
+ transform: 'translateY(0)',
+ transition: 'opacity 0.3s ease-in-out, visibility 0.3s ease-in-out',
});
-const STop = styled('div', {
+const SUser = styled('div', {
+ position: 'absolute',
+
display: 'flex',
alignItems: 'center',
- mb: '$4',
- ...fontsObject.LABEL_5_11_SB,
- '& > div:first-child': {
- mr: '$6',
- },
-});
+ gap: '$6',
-const STopDivisor = styled('span', {
- color: '$gray400',
- ml: '$3',
- mr: '$3',
-});
+ left: '16px',
+ top: '16px',
-const STitle = styled('div', {
- ...fontsObject.HEADING_7_16_B,
- mb: '$12',
+ opacity: 0,
+ visibility: 'hidden',
+ transition: 'opacity 0.3s ease-in-out, visibility 0.3s ease-in-out',
});
-const SContents = styled('div', {
- ...fontsObject.LABEL_5_11_SB,
+const SOverlayContent = styled('div', {
+ position: 'absolute',
+ top: '156px',
+ left: '$16',
+
+ display: 'flex',
+ flexDirection: 'column',
+ gap: '$6',
+
+ opacity: 0,
+ visibility: 'hidden',
+ transition: 'opacity 0.3s ease-in-out, visibility 0.3s ease-in-out',
});
-const SContent = styled('div', {
+const SChipWrapper = styled('div', {
display: 'flex',
- alignItems: 'center',
- '& > svg:first-child': {
- marginRight: '6px',
+ gap: '$4',
+
+ mt: '$2',
+});
+
+const moveUpFadeOut = keyframes({
+ '0%': {
+ transform: 'translateY(0)',
+ opacity: 1,
+ },
+ '100%': {
+ transform: 'translateY(-50px)',
+ opacity: 0,
+ visibility: 'hidden',
},
- mb: '$6',
});
-const SInfo = styled('div', {
- padding: '$16 $16 $0 $16',
+const moveUpFadeIn = keyframes({
+ '0%': {
+ transform: 'translateY(0)',
+ opacity: 0,
+ visibility: 'hidden',
+ },
+ '100%': {
+ transform: 'translateY(-50px)',
+ opacity: 1,
+ visibility: 'visible',
+ },
});
-const SBottom = styled('div', {
- display: 'flex',
- justifyContent: 'space-between',
- ...fontsObject.LABEL_4_12_SB,
- width: '100%',
- padding: '$0 $16 $12 $16',
- borderBottomLeftRadius: '$12',
- borderBottomRightRadius: '$12',
- variants: {
- status: {
- 0: {
- background: 'linear-gradient(180deg, rgba(23, 24, 28, 0.00) 0%, rgba(255, 194, 52, 0.20) 100%);',
- },
- 1: {
- background: 'linear-gradient(180deg, rgba(23, 24, 28, 0.00) 0%, rgba(247, 114, 52, 0.20) 100%)',
- },
- 2: {
- background: 'linear-gradient(180deg, rgba(23, 24, 28, 0.00) 0%, rgba(157, 157, 164, 0.20) 100%)',
- },
- 3: {
- background: 'linear-gradient(180deg, rgba(23, 24, 28, 0.00) 0%, rgba(52, 111, 250, 0.20) 100%)',
- },
- 4: {
- background: 'linear-gradient(180deg, rgba(23, 24, 28, 0.00) 0%, rgba(157, 157, 164, 0.20) 100%)',
- },
- },
+const moveDownFadeIn = keyframes({
+ '0%': {
+ transform: 'translateY(-50px)',
+ opacity: 0,
+ visibility: 'hidden',
+ },
+ '100%': {
+ transform: 'translateY(0)',
+ opacity: 1,
+ visibility: 'visible',
},
});
-const SRecruitStatusIcon = styled('div', {
- width: '$9',
- height: '$9',
- mr: '$6',
- borderRadius: '$round',
- variants: {
- status: {
- 0: {
- background: '$attention',
- },
- 1: {
- background: '$secondary',
- },
- 2: {
- background: '$gray200',
- },
- 3: {
- background: '$success',
- },
- 4: {
- background: '$gray200',
- },
- },
+const moveDownFadeOut = keyframes({
+ '0%': {
+ transform: 'translateY(-50px)',
+ opacity: 1,
+ visibility: 'hidden',
+ },
+ '100%': {
+ transform: 'translateY(0)',
+ opacity: 0,
+ visibility: 'visible',
},
});
-const SStatusText = styled('div', {
- variants: {
- status: {
- 0: {
- color: '$attention',
- },
- 1: {
- color: '$secondary',
- },
- 2: {
- color: '$gray200',
- },
- 3: {
- color: '$success',
- },
- 4: {
- color: '$gray200',
- },
- },
+const SGroupBrowsingCard = styled('section', {
+ position: 'relative',
+
+ display: 'flex',
+ flexDirection: 'column',
+ justifyContent: 'flex-end',
+
+ width: '285px',
+ height: '180px',
+ padding: '$16',
+
+ backgroundSize: 'cover',
+
+ borderRadius: '12px',
+ cursor: 'pointer',
+
+ [`&:hover ${STitle}`]: {
+ transform: 'translateY(-45px)',
+ transition: 'transform 0.3s ease-in-out',
+ },
+
+ [`&:hover ${SBottom}`]: {
+ animation: `${moveUpFadeOut} 0.3s ease-in-out forwards`,
+ },
+ [`&:not(:hover) ${SBottom}`]: {
+ animation: `${moveDownFadeIn} 0.3s ease-in-out forwards`,
},
+
+ [`&:hover ${SUser}`]: {
+ opacity: 1,
+ visibility: 'visible',
+ transition: 'opacity 0.3s ease-in-out, visibility 0.3s ease-in-out',
+ },
+
+ [`&:hover ${SOverlayContent}`]: {
+ animation: `${moveUpFadeIn} 0.3s ease-in-out forwards`,
+ },
+ [`&:not(:hover) ${SOverlayContent}`]: {
+ animation: `${moveDownFadeOut} 0.3s ease-in-out forwards`,
+ },
+});
+
+const SDesc = styled('p', {
+ ...fontsObject.LABEL_5_11_SB,
+ color: '$white',
});
diff --git a/src/components/page/home/HomeCardList/CardList.tsx b/src/components/page/home/HomeCardList/CardList.tsx
index 844f851c..94848826 100644
--- a/src/components/page/home/HomeCardList/CardList.tsx
+++ b/src/components/page/home/HomeCardList/CardList.tsx
@@ -1,5 +1,8 @@
import { GroupBrowsingCardResponse } from '@api/API_LEGACY/meeting';
-import HomeCard from '@components/page/home/HomeCardList/Card';
+import DesktopCard from '@components/page/home/HomeCardList/DesktopCard';
+import MobileCard from '@components/page/home/HomeCardList/MobileCard';
+import { useDisplay } from '@hooks/useDisplay';
+import { fontsObject } from '@sopt-makers/fonts';
import { styled } from 'stitches.config';
type HomeCardProps = {
@@ -10,6 +13,8 @@ type HomeCardProps = {
};
const CardList = ({ label, isMore = false, onMoreClick = () => {}, data }: HomeCardProps) => {
+ const { isTablet } = useDisplay();
+
return (
@@ -17,21 +22,43 @@ const CardList = ({ label, isMore = false, onMoreClick = () => {}, data }: HomeC
{isMore && {'더보기 >'}}
- {data.map(d => (
-
- ))}
+ {isTablet ? (
+ <>
+ {data.map(d => (
+
+ ))}
+ >
+ ) : (
+ <>
+ {data.map(d => (
+
+ ))}
+ >
+ )}
);
@@ -45,6 +72,15 @@ const SCardListWrapper = styled('section', {
width: '894px',
paddingBottom: '$80',
+
+ '@laptop': {
+ width: '790px',
+ overflow: 'hidden',
+ },
+ '@tablet': {
+ width: '100%',
+ paddingBottom: '$40',
+ },
});
const STitleWrapper = styled('div', {
@@ -61,6 +97,10 @@ const STitleStyle = styled('p', {
fontStyle: 'H1',
color: '$white',
+
+ '@tablet': {
+ ...fontsObject.TITLE_6_16_SB,
+ },
});
const SMoreBtn = styled('button', {
@@ -71,4 +111,9 @@ const SMoreBtn = styled('button', {
const SCardWrapper = styled('div', {
display: 'flex',
gap: '20px',
+
+ '@tablet': {
+ flexDirection: 'column',
+ width: '100%',
+ },
});
diff --git a/src/components/page/home/HomeCardList/Card.tsx b/src/components/page/home/HomeCardList/DesktopCard.tsx
similarity index 58%
rename from src/components/page/home/HomeCardList/Card.tsx
rename to src/components/page/home/HomeCardList/DesktopCard.tsx
index bd9744ef..e8d818fa 100644
--- a/src/components/page/home/HomeCardList/Card.tsx
+++ b/src/components/page/home/HomeCardList/DesktopCard.tsx
@@ -2,8 +2,9 @@ import Avatar from '@components/@common/avatar/Avatar';
import { styled } from 'stitches.config';
import UserIcon from '@assets/svg/user.svg?rect';
import { CATEGORY_NAME, CategoryType, PART_NAME } from '@constants/option';
+import Link from 'next/link';
-type HomeCardProps = {
+type DesktopCardProps = {
id: number;
imageURL?: string;
title: string;
@@ -15,7 +16,7 @@ type HomeCardProps = {
canJoinOnlyActiveGeneration: boolean;
joinableParts: string[];
};
-const HomeCard = ({
+const DesktopCard = ({
id,
imageURL,
title,
@@ -26,31 +27,33 @@ const HomeCard = ({
category,
canJoinOnlyActiveGeneration,
joinableParts,
-}: HomeCardProps) => {
+}: DesktopCardProps) => {
return (
-
-
-
-
-
- {ownerName}
- |
- {CATEGORY_NAME(category as CategoryType)}
-
-
- {title}
-
-
- {`${approvedCount}/${capacity}명`}
- {`${canJoinOnlyActiveGeneration ? '활동 기수' : '전체 기수'} / ${joinableParts.map(
- part => PART_NAME[part]
- )}`}
-
-
+
+
+
+
+
+
+ {ownerName}
+ |
+ {CATEGORY_NAME(category as CategoryType)}
+
+
+ {title}
+
+
+ {`${approvedCount}/${capacity}명`}
+ {`${canJoinOnlyActiveGeneration ? '활동 기수' : '전체 기수'} / ${joinableParts.map(
+ part => PART_NAME[part]
+ )}`}
+
+
+
);
};
-export default HomeCard;
+export default DesktopCard;
const SCardWrapper = styled('article', {
display: 'flex',
diff --git a/src/components/page/home/HomeCardList/MobileCard.tsx b/src/components/page/home/HomeCardList/MobileCard.tsx
new file mode 100644
index 00000000..f83f16ef
--- /dev/null
+++ b/src/components/page/home/HomeCardList/MobileCard.tsx
@@ -0,0 +1,123 @@
+import Avatar from '@components/@common/avatar/Avatar';
+import { styled } from 'stitches.config';
+import UserIcon from '@assets/svg/user.svg?rect';
+import { CATEGORY_NAME, CategoryType, PART_NAME } from '@constants/option';
+import Link from 'next/link';
+import { Flex } from '@components/util/layout/Flex';
+import { fontsObject } from '@sopt-makers/fonts';
+
+type MobileCardProps = {
+ id: number;
+ imageURL?: string;
+ title: string;
+ ownerName: string;
+ ownerImage?: string;
+ approvedCount: number;
+ capacity: number;
+ category: string;
+ canJoinOnlyActiveGeneration: boolean;
+ joinableParts: string[];
+};
+const MobileCard = ({
+ id,
+ imageURL,
+ title,
+ ownerName,
+ ownerImage,
+ approvedCount,
+ capacity,
+ category,
+ canJoinOnlyActiveGeneration,
+ joinableParts,
+}: MobileCardProps) => {
+ return (
+
+
+
+
+ {title}
+
+
+
+ {`${approvedCount}/${capacity}명`}
+ ·
+ {`${canJoinOnlyActiveGeneration ? '활동 기수' : '전체 기수'} / ${joinableParts.map(
+ part => PART_NAME[part]
+ )}`}
+
+
+
+ {ownerName}
+ |
+ {CATEGORY_NAME(category as CategoryType)}
+
+
+
+
+ );
+};
+
+export default MobileCard;
+
+const SCardWrapper = styled('article', {
+ display: 'flex',
+ gap: '$12',
+
+ width: '100%',
+});
+
+const SThumbnailImage = styled('img', {
+ width: '120px',
+ height: '82px',
+
+ borderRadius: '$12',
+
+ backgroundColor: '$gray800',
+ backgroundSize: 'cover',
+ backgroundPosition: 'center center',
+ backgroundRepeat: 'no-repeat',
+});
+
+const STitleStyle = styled('h3', {
+ width: '100%',
+
+ overflow: 'hidden',
+ textOverflow: 'ellipsis',
+ whiteSpace: 'nowrap',
+
+ fontSize: '14px',
+ fontWeight: '700',
+ lineHeight: '14px',
+});
+
+const SMetaWrapper = styled('div', {
+ display: 'flex',
+ flexDirection: 'column',
+ justifyContent: 'center',
+
+ gap: '$8',
+ width: 'calc(100% - 120px)',
+
+ overflow: 'hidden',
+});
+
+const SMetaStyle = styled('p', {
+ fontStyle: 'L2',
+ color: '$white',
+});
+
+const SMetaSubStyle = styled('span', {
+ padding: '0 $3',
+
+ fontStyle: 'L2',
+ color: '$gray500',
+});
+
+const SInfoStyle = styled('p', {
+ fontStyle: 'L1',
+ color: '$gray300',
+});
diff --git a/src/components/page/home/HomeCardList/index.tsx b/src/components/page/home/HomeCardList/index.tsx
index dc49e067..226fb793 100644
--- a/src/components/page/home/HomeCardList/index.tsx
+++ b/src/components/page/home/HomeCardList/index.tsx
@@ -1,14 +1,43 @@
import { GroupBrowsingCardResponse } from '@api/API_LEGACY/meeting';
import CardList from '@components/page/home/HomeCardList/CardList';
+import { styled } from 'stitches.config';
const HomeCardList = ({ groupBrowsingCardData }: { groupBrowsingCardData: GroupBrowsingCardResponse }) => {
return (
-
-
+
+
+
-
+
);
};
export default HomeCardList;
+
+const SWrapper = styled('div', {
+ position: 'relative',
+ width: '894px',
+
+ '@laptop': {
+ width: '100%',
+ },
+});
+
+const SGradationRight = styled('div', {
+ width: '122px',
+ height: '100%',
+ background: 'linear-gradient(270deg, #0F0F12 0%, rgba(15, 15, 18, 0.00) 100%)',
+
+ position: 'absolute',
+ zIndex: 1,
+ right: '-1px',
+ pointerEvents: 'none',
+
+ '@media (min-width: 1259px)': {
+ display: 'none',
+ },
+ '@tablet': {
+ display: 'none',
+ },
+});
diff --git a/src/components/page/home/QuickMenu/index.tsx b/src/components/page/home/QuickMenu/index.tsx
index 8f649996..be8f8b7b 100644
--- a/src/components/page/home/QuickMenu/index.tsx
+++ b/src/components/page/home/QuickMenu/index.tsx
@@ -3,23 +3,26 @@ import BoltIcon from '@assets/svg/button_bolt.svg?rect';
import StudyIcon from '@assets/svg/button_study.svg?rect';
import SeminarIcon from '@assets/svg/button_seminar.svg?rect';
import EventIcon from '@assets/svg/button_event.svg?rect';
+import Link from 'next/link';
const QuickMenu = () => {
const menu = [
- { Icon: SBoltIcon, label: '번쩍 모임' },
- { Icon: SStudyIcon, label: '스터디' },
- { Icon: SSeminarIcon, label: '세미나' },
- { Icon: SEventIcon, label: '행사' },
+ { Icon: SBoltIcon, label: '번쩍 모임', link: '/list?category=번쩍' },
+ { Icon: SStudyIcon, label: '스터디', link: '/list?category=스터디' },
+ { Icon: SSeminarIcon, label: '세미나', link: '/list?category=세미나' },
+ { Icon: SEventIcon, label: '행사', link: '/list?category=행사' },
];
return (
모임 신청 가이드
- {menu.map((item, idx) => (
-
-
- {item.label}
-
+ {menu.map(item => (
+
+
+
+ {item.label}
+
+
))}
);