Skip to content
Merged
Show file tree
Hide file tree
Changes from 32 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
9d1b136
design: 텍스트가 있는 경우 border색 변경
Jan 6, 2026
6fabbb4
feat: 공유일기 댓글창에서 인풋필드 클릭시 댓글 페이지로 이동
Jan 6, 2026
506304b
feat: 공유일기 댓글 목데이터 추가
Jan 6, 2026
afaa8de
feat: 인풋필드 클릭 props추가
Jan 6, 2026
91ee31c
rename: chat대신 comment로 파일명 변경
Jan 6, 2026
99a9353
feat: 공유일기 댓글 타입 추가
Jan 6, 2026
528d81f
feat: 날짜 년월일로 포매팅되는 함수추가
Jan 6, 2026
10d3ab3
feat: 댓글리스트 영역 컴포넌트 분리 후, 댓글 데이터 가져오기 로직 추가
Jan 6, 2026
cf13f28
feat: 댓글 전송클릭 시, 댓글 리스트에 반영
Jan 6, 2026
10d1bd5
refactor: 인풋필드 onClick 라우팅이 아닌 onFocus로 페이지가 아닌경우에 라우팅되는것으로 변경
Jan 6, 2026
48dd0e8
chore: toss use-funnel삭제
Jan 6, 2026
2a675b1
Merge remote-tracking branch 'origin' into feat/11-shared-diary
Jan 6, 2026
e763d5e
feat: 댓글이 많을 경우에 스크롤영역 ui수정
Jan 6, 2026
272b1a2
design: 하루한컷 업로드 백헤더 text-white추가
Jan 6, 2026
8f7b486
feat: 요일 배열 추가
Jan 6, 2026
3f99a50
feat: 과거, 현재, 미래 요일을 알아내는 유틸 추가
Jan 6, 2026
5e6ef76
rename: 하루기록바뀐 링크 수정
Jan 6, 2026
95f3e7a
feat: 하루한컷 미션진행현황 피드 컴포넌트 추가
Jan 6, 2026
57e3a87
feat: 하루한컷 업로드 페이지로 이동
Jan 6, 2026
889e0aa
chore: 하루한컷업로드페이지 개발되는 동안 my_id 매직넘버 하루한컷 안올린 것으로 변경
Jan 6, 2026
3b8a5a2
feat: gradient-orange 추가 및 중복되는 코드 제거
Jan 6, 2026
8a563dd
feat: 미션카드 상태에 따른 타이틀텍스트 및 버튼 텍스트 상수처리
Jan 6, 2026
ec28cdb
feat: 미션카드 ui 추가
Jan 6, 2026
0494d6c
design: 미션텍스트와 버튼 간격 수정
Jan 6, 2026
7dfdcac
feat: 미션카드 종류의 아이콘 및 상수 추가
Jan 9, 2026
b6cc486
feat: 하루한컷 미션카드 이모지 및 타이틀 목데이터 추가
Jan 11, 2026
37bdacd
design: 하루기록 과거 작성 안한 경우 cross-icon추가
Jan 12, 2026
5137aac
feat: 하루한컷 이미지 업로드 시 디자인 추가
Jan 12, 2026
3f510c4
feat: 하루기록 진행상황 목데이터
Jan 12, 2026
df87e1e
feat: 요일 키 추가
Jan 12, 2026
c916ad1
feat: 이미지 업로드 후 하루한컷 작성 상태 완료로 상태 내려줌
Jan 12, 2026
c31ff2d
design: 하루한컷 업로드 디자인 변경 수정
Jan 12, 2026
ce32ac7
chore: usefunnel/next삭제
Jan 15, 2026
5e656ca
refactor: 미션카드 subtitle 유틸 분리
Jan 15, 2026
612d769
chore: 안쓰는 함수 제거
Jan 15, 2026
be95b69
refactor: 파일업로드, previewURL생성 책임 분리
Jan 15, 2026
e8f45a4
refactor: NaN값 유효성 검사 로직 추가
Jan 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
]
},
"dependencies": {
"@toss/use-funnel": "^1.4.2",
"@use-funnel/next": "^0.0.22",
"axios": "^1.13.2",
"next": "16.0.10",
"react": "19.2.1",
Expand Down
9 changes: 9 additions & 0 deletions public/images/missionIcon/color.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions public/images/missionIcon/food.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions public/images/missionIcon/plant.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions public/images/missionIcon/time.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions public/images/missionIcon/tv.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion src/app/day-log/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { SharedDiaryCard } from "@/components/dailyRecord/SharedDiaryCard";
import DailyRecordData from "@/mock/dailyRecord.json";

const DailyRecordPage = () => {
const MY_ID = 101;
const MY_ID = 111;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if MY_ID is used elsewhere in the codebase
rg -n "MY_ID" --type=ts --type=tsx

Repository: IT-Cotato/12th-SimTok-FE

Length of output: 95


🏁 Script executed:

# Examine the full context of the page.tsx file
cat -n src/app/day-log/page.tsx

Repository: IT-Cotato/12th-SimTok-FE

Length of output: 1074


🏁 Script executed:

# Search for authentication-related patterns and user context
rg -n "useAuth|useSession|getCurrentUser|getUser|userId" --type=ts --type=tsx -A 2 | head -50

Repository: IT-Cotato/12th-SimTok-FE

Length of output: 95


🏁 Script executed:

# Check if there's a git history showing the change from 101 to 111
git log -p --all -S "MY_ID" -- "src/app/day-log/page.tsx" 2>/dev/null | head -100

Repository: IT-Cotato/12th-SimTok-FE

Length of output: 50


🏁 Script executed:

#!/bin/bash
# Search for MY_ID with general pattern matching
rg "MY_ID" -g "*.ts" -g "*.tsx" --type-list | head -20

Repository: IT-Cotato/12th-SimTok-FE

Length of output: 457


🏁 Script executed:

# Try without file type restriction
rg -n "MY_ID" --include="*.ts" --include="*.tsx"

Repository: IT-Cotato/12th-SimTok-FE

Length of output: 509


🏁 Script executed:

# Search for authentication/user context patterns
rg -n "(useAuth|useSession|getCurrentUser|getUser|userId|authContext)" --include="*.ts" --include="*.tsx" | head -40

Repository: IT-Cotato/12th-SimTok-FE

Length of output: 509


🏁 Script executed:

# Check the mock data file to understand the structure
cat -n src/mock/dailyRecord.json | head -50

Repository: IT-Cotato/12th-SimTok-FE

Length of output: 1352


🏁 Script executed:

# Search for other hardcoded IDs to understand the testing pattern
rg -n "= (10[0-9]|11[0-9])" --include="*.ts" --include="*.tsx" | grep -i "id\|user"

Repository: IT-Cotato/12th-SimTok-FE

Length of output: 509


🏁 Script executed:

#!/bin/bash
# Simple search for MY_ID usage
rg "MY_ID" .

Repository: IT-Cotato/12th-SimTok-FE

Length of output: 480


🏁 Script executed:

# Check if userId 111 exists in the full mock data file
cat src/mock/dailyRecord.json | grep -n "111"

Repository: IT-Cotato/12th-SimTok-FE

Length of output: 50


🏁 Script executed:

# Check the full length of the mock data to see all userIds
tail -20 src/mock/dailyRecord.json

Repository: IT-Cotato/12th-SimTok-FE

Length of output: 423


🏁 Script executed:

# Search for authentication/context patterns more simply
rg "useAuth\|useSession\|AuthContext\|UserContext" .

Repository: IT-Cotato/12th-SimTok-FE

Length of output: 50


🏁 Script executed:

# Look at the git history of the dailyRecord file
git log --oneline src/mock/dailyRecord.json 2>/dev/null | head -10

Repository: IT-Cotato/12th-SimTok-FE

Length of output: 92


하드코딩된 MY_ID는 개발용 모의 데이터입니다. 코드 중복 제거 및 인증 통합 준비 필요

MY_ID = 111은 모의 데이터와 함께 사용되는 개발 단계의 코드입니다. 실제로 dailyRecord.json의 모든 userId는 101~110 범위이므로, 111은 "레코드 없음" 시나리오를 의도적으로 테스트하는 것으로 확인됩니다.

다만, 다음 두 가지를 개선해야 합니다:

  1. 코드 중복: MY_ID = 111이 src/app/day-log/page.tsxsrc/components/dailyRecord/MissionFeed.tsx에서 반복되고 있습니다. 공용 상수로 추출하거나 상위 컴포넌트에서 props로 전달하는 것을 권장합니다.

  2. 프로덕션 준비: 현재 인증 시스템이 없으므로, 프로덕션 배포 전에 실제 인증 컨텍스트에서 사용자 ID를 가져오도록 리팩토링해야 합니다.

🤖 Prompt for AI Agents
In @src/app/day-log/page.tsx at line 10, The hardcoded MY_ID = 111 in
src/app/day-log/page.tsx (also duplicated in
src/components/dailyRecord/MissionFeed.tsx) is dev-only mock data; refactor by
removing the duplicate constant and either (a) extract a shared constant (e.g.,
export const DEV_MOCK_USER_ID) in a single module and import it where needed for
local testing, or (b) prefer passing userId as a prop from the parent (page.tsx)
into MissionFeed, and replace MY_ID usage with that prop; additionally prepare
for production by replacing the mock with a call to your auth/context provider
(e.g., getUserIdFromAuth or useAuth().user.id) so runtime derives the real user
id when authentication is available.

const hasMyRecord = DailyRecordData.some(item => item.userId === MY_ID);

return (
Expand Down
23 changes: 23 additions & 0 deletions src/app/day-story/upload/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
"use client";
import { useState } from "react";

import { BackHeader } from "@/components/common/BackHeader";
import { DailyMissionCard } from "@/components/dailyPhoto/DailyMissionCard";
import { DailyMissionProgress } from "@/components/dailyPhoto/DailyMissionProgress";

import { MISSION_STATUS } from "@/constants/missionCard";

const DayStoryUpload = () => {
const [status, setStatus] =
useState<keyof typeof MISSION_STATUS>("NOT_STARTED");
return (
<main className="w-full bg-black">
<BackHeader title="하루한컷" titleColor="white" />
<DailyMissionProgress status={status} />
<div className="mt-[120px] flex items-center justify-center">
<DailyMissionCard status={status} setStatus={setStatus} />
</div>
</main>
);
};
export default DayStoryUpload;
7 changes: 7 additions & 0 deletions src/app/shared-diary/[id]/comment/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { SharedDiaryComment } from "@/components/dailyRecord/SharedDiaryChat";

const SharedDiaryChatPage = () => {
return <SharedDiaryComment variant="page" />;
};

export default SharedDiaryChatPage;
1 change: 1 addition & 0 deletions src/app/shared-diary/upload/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
//공유일기 글쓰기 페이지
10 changes: 7 additions & 3 deletions src/assets/SendButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@ import SendIcon from "@/assets/messenger.svg";

interface SendButtonProps {
hasText: boolean;
onClick: React.MouseEventHandler<HTMLButtonElement>;
}
export const SendButton = ({ hasText = false }: SendButtonProps) => {
export const SendButton = ({ hasText = false, onClick }: SendButtonProps) => {
return (
<button className="absolute top-1 right-4 rotate-[-23deg] px-[2px] py-[3px]">
<button
className="absolute top-1 right-4 rotate-[-23deg] px-[2px] py-[3px]"
onClick={onClick}
>
<SendIcon
className={`h-[18px] w-[20px] ${hasText ? "text-green-02 cursor-pointer" : "text-neutral-04"}`}
className={`text-neutral-04 h-[18px] w-[20px] ${hasText ? "cursor-pointer" : ""}`}
/>
</button>
);
Expand Down
5 changes: 3 additions & 2 deletions src/assets/close.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion src/assets/left-arrow.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions src/assets/questionMark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 11 additions & 3 deletions src/components/common/BackHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,15 @@ interface HeaderProps {
title: string;
timeAgo?: string; // 하루한컷보기에서 사용
menuIcon?: boolean; // 채팅페이지에서 사용
titleColor?: string; //하루한컷 업로드에서 사용
}

export const BackHeader = ({ title, timeAgo, menuIcon }: HeaderProps) => {
export const BackHeader = ({
title,
timeAgo,
menuIcon,
titleColor = "black",
}: HeaderProps) => {
const router = useRouter();

return (
Expand All @@ -21,9 +27,11 @@ export const BackHeader = ({ title, timeAgo, menuIcon }: HeaderProps) => {
onClick={() => router.back()}
className="absolute top-1/2 left-4 -translate-y-1/2 cursor-pointer"
>
<BackIcon className="h-6 w-6" />
<BackIcon className={`text-${titleColor} h-6 w-6`} />
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

동적 Tailwind 클래스명이 작동하지 않습니다.

Tailwind CSS의 JIT 컴파일러는 빌드 타임에 정적 분석을 통해 클래스를 생성합니다. text-${titleColor} 형태의 동적 클래스명은 인식되지 않아 스타일이 적용되지 않습니다.

🔎 해결 방법

방법 1 (권장): 조건부 렌더링 사용

-        <BackIcon className={`text-${titleColor} h-6 w-6`} />
+        <BackIcon className={`${titleColor === "white" ? "text-white" : "text-black"} h-6 w-6`} />
       <h1
-        className={`text-h1 flex w-full items-center justify-center whitespace-nowrap text-${titleColor}`}
+        className={`text-h1 flex w-full items-center justify-center whitespace-nowrap ${titleColor === "white" ? "text-white" : "text-black"}`}
       >

방법 2: safelist에 추가 (tailwind.config에서)

// tailwind.config.js
module.exports = {
  safelist: [
    'text-white',
    'text-black',
  ],
  // ...
}

방법 3: style prop 사용

-        <BackIcon className={`text-${titleColor} h-6 w-6`} />
+        <BackIcon className="h-6 w-6" style={{ color: titleColor }} />

방법 1이 타입 안전성과 Tailwind의 디자인 시스템 활용 측면에서 가장 권장됩니다.

Also applies to: 33-33

🤖 Prompt for AI Agents
In @src/components/common/BackHeader.tsx at line 30, BackHeader uses a dynamic
Tailwind class `text-${titleColor}` which JIT won't generate; replace the
dynamic string with a deterministic class mapping or conditional rendering:
create a small map or switch keyed by the titleColor prop (e.g., map titleColor
values to 'text-white', 'text-black', etc.) and apply the resulting class to
BackIcon and the other affected element instead of `text-${titleColor}`, or
alternatively render conditional classNames for known values to ensure Tailwind
generates the CSS.

</button>
<h1 className="text-h1 flex w-full items-center justify-center whitespace-nowrap text-black">
<h1
className={`text-h1 flex w-full items-center justify-center whitespace-nowrap text-${titleColor}`}
>
{title}
</h1>
{timeAgo && (
Expand Down
27 changes: 24 additions & 3 deletions src/components/common/MessageInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,40 @@ import { useState } from "react";

import { SendButton } from "@/assets/SendButton";

export const MessageInput = () => {
interface MessageInputProps {
onFocus?: React.FocusEventHandler<HTMLInputElement>;
onSend?: (message: string) => void;
}

export const MessageInput = ({ onFocus, onSend }: MessageInputProps) => {
const [text, setText] = useState("");
const [isComposing, setIsComposing] = useState(false);

const hasText = Boolean(text);
const sendMessage = () => {
if (!hasText) return;
onSend?.(text.trim());
setText("");
};

return (
<div className="relative flex-1">
<input
className="border-neutral-07 bg-neutral-11 w-full rounded-2xl border border-solid px-4 py-1 focus:outline-none"
className="border-neutral-07 bg-neutral-11 focus:border-mint-01 w-full rounded-2xl border border-solid px-4 py-1 focus:outline-none"
type="text"
value={text}
onChange={e => setText(e.target.value)}
onFocus={onFocus}
onCompositionStart={() => setIsComposing(true)}
onCompositionEnd={() => setIsComposing(false)}
onKeyDown={e => {
if (e.key === "Enter" && !isComposing) {
e.preventDefault();
sendMessage();
}
}}
/>
<SendButton hasText={hasText} />
<SendButton hasText={hasText} onClick={sendMessage} />
</div>
);
};
112 changes: 112 additions & 0 deletions src/components/dailyPhoto/DailyMissionCard.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
"use client";
import Image from "next/image";
import { useRouter } from "next/navigation";

import { useState } from "react";

import { MISSION_SORT, MISSION_STATUS } from "@/constants/missionCard";
import { WEEK_DAYS_KOR } from "@/constants/weekDays";

import { useImageUpload } from "@/hooks/useImageUpload";

import missionCardData from "@/mock/randomMission.json";

import { getTodayIndex } from "@/utils/getCurrentDay";

interface DailyMissionCardProps {
status: keyof typeof MISSION_STATUS;
setStatus: React.Dispatch<React.SetStateAction<keyof typeof MISSION_STATUS>>;
}

export const DailyMissionCard = ({
status,
setStatus,
}: DailyMissionCardProps) => {
const [previewUrl, setPreviewUrl] = useState<string | null>(null);

const currentDayIndex = getTodayIndex();
const currentDay = WEEK_DAYS_KOR[currentDayIndex]; // 현재 요일

const subtitle =
typeof MISSION_STATUS[status].subtitle === "function"
? `${MISSION_STATUS[status].subtitle(currentDay)}요일`
: MISSION_STATUS[status].subtitle;

const missionKind = missionCardData[0].kind;

const missionIcon = MISSION_SORT.find(
item => item.sort === missionKind,
)?.icon;

const onSelectImage = (file: File) => {
const url = URL.createObjectURL(file);
setPreviewUrl(url);
setStatus("IMAGE_UPLOADED");
};

const { inputRef, openFilePicker, onChangeFile } = useImageUpload({
onSelect: ({ file }) => {
onSelectImage(file);
},
maxSizeMB: 10,
});
const router = useRouter();
return (
<section className="flex h-[385px] w-[353px] flex-col items-center justify-center gap-5 rounded-2xl bg-white">
<div className="flex flex-col items-center justify-center">
<h3 className="text-green-01 text-h3">
{MISSION_STATUS[status].title}
</h3>
<p className="text-neutral-06 text-sub1-r -mt-[4px]">{subtitle}</p>
</div>
{status === "NOT_STARTED" && missionIcon && (
<div className="bg-neutral-11 flex h-28 w-28 items-center justify-center rounded-full">
<Image
src={missionIcon}
alt="미션카드종류 이미지"
width={88}
height={88}
/>
</div>
)}
{status !== "NOT_STARTED" && previewUrl && (
<div
className={`h-27 w-27 overflow-hidden rounded-full ${status === "IMAGE_CONFIRMED" ? "border border-[4px] border-white shadow-[0_0_12px_-1px_#00C362]" : ""}`}
>
<Image
src={previewUrl}
alt="하루한컷이미지"
width={108}
height={108}
className="h-full w-full object-cover"
/>
</div>
)}

<div className="flex flex-col items-center justify-center">
<div className="text-sub-number p-[10px]">
{status === "IMAGE_CONFIRMED"
? "미션이 완료되었어요!"
: missionCardData[0].mission}
</div>
<button
className={`${status == "NOT_STARTED" ? "bg-gradient-orange" : "bg-mint-01"} text-button-sb h-[50px] w-[90px] cursor-pointer rounded-2xl text-white`}
onClick={() => {
if (status === "NOT_STARTED") openFilePicker();
if (status === "IMAGE_UPLOADED") setStatus("IMAGE_CONFIRMED");
if (status === "IMAGE_CONFIRMED") router.push("/day-log");
}}
>
{MISSION_STATUS[status].buttonText}
</button>
</div>
<input
ref={inputRef}
type="file"
accept="image/*"
className="hidden"
onChange={onChangeFile}
/>
</section>
);
};
83 changes: 83 additions & 0 deletions src/components/dailyPhoto/DailyMissionProgress.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
"use client";

import CheckIcon from "@/assets/check.svg";
import CrossIcon from "@/assets/close.svg";
import QuestionIcon from "@/assets/questionMark.svg";

import { MISSION_STATUS } from "@/constants/missionCard";
import { WEEK_DAYS_KOR, WEEK_DAY_KEYS } from "@/constants/weekDays";

import dailyRecordProgress from "@/mock/dailyRecordProgress.json";

import { getWeekDayStatus } from "@/utils/getCurrentDay";

type WeekDayKey = keyof typeof dailyRecordProgress;

interface DailyMissionProgressProps {
status: keyof typeof MISSION_STATUS;
}

export const DailyMissionProgress = ({ status }: DailyMissionProgressProps) => {
return (
<ul className="scrollbar-hide mt-8 flex gap-[9px] overflow-x-auto px-4">
{WEEK_DAYS_KOR.map((item, index) => {
const dayStatus = getWeekDayStatus(index); // past | today | future
const dayKey = WEEK_DAY_KEYS[index] as WeekDayKey;

const isCompleted =
dayStatus === "today" && status === "IMAGE_CONFIRMED"
? true
: dailyRecordProgress[dayKey];

const showCheck =
(dayStatus === "past" && isCompleted) ||
(dayStatus === "today" && isCompleted);

const showCross = dayStatus === "past" && !isCompleted;

const showQuestion =
dayStatus === "future" || (dayStatus === "today" && !isCompleted);

return (
<li key={item} className="h-[82px] w-[74px] shrink-0">
<div
className={`flex h-full flex-col items-center justify-center gap-[3px] rounded-2xl border border-solid px-[10px] py-[6px] ${showQuestion ? "bg-white" : "bg-spring-01"} ${dayStatus !== "future" ? "border-mint-01" : "border-neutral-08"} `}
>
{showCheck && (
<div className="bg-mint-01 flex h-8 w-8 items-center justify-center rounded-full">
<CheckIcon className="text-spring-01 h-6 w-6" />
</div>
)}

{showCross && (
<div className="bg-neutral-03 flex h-8 w-8 items-center justify-center rounded-full">
<CrossIcon className="text-neutral-08 h-[13px] w-[13px]" />
</div>
)}

{showQuestion && (
<div
className={`flex h-8 w-8 items-center justify-center rounded-full ${dayStatus === "today" ? "bg-mint-01" : "bg-neutral-08"} `}
>
<QuestionIcon
className={`h-6 w-6 ${
dayStatus === "today" ? "text-white" : "text-neutral-06"
} `}
/>
</div>
)}

<span
className={`text-sub1-sb ${
dayStatus !== "future" ? "text-neutral-01" : "text-neutral-06"
} `}
>
{item}
</span>
</div>
</li>
);
})}
</ul>
);
};
Loading