diff --git a/app/components/common/BottomSheet 2.tsx b/app/components/common/BottomSheet 2.tsx new file mode 100644 index 0000000..76b00a8 --- /dev/null +++ b/app/components/common/BottomSheet 2.tsx @@ -0,0 +1,55 @@ +import type { ReactNode } from "react"; +import { cn } from "../../lib/utils"; + +type BottomSheetProps = { + open: boolean; + onClose: () => void; + children: ReactNode; + height?: number | string; + className?: string; + contentClassName?: string; + overlayClassName?: string; +}; + +export default function BottomSheet({ + open, + onClose, + children, + height, + className, + contentClassName, + overlayClassName, +}: BottomSheetProps) { + if (!open) return null; + + const heightStyle = + height === undefined + ? undefined + : typeof height === "number" + ? { height: `${height}px` } + : { height }; + + return ( +
+
+ ); +} diff --git a/app/routes/campaign-detail/campaign-detail.tsx b/app/routes/campaign-detail/campaign-detail.tsx index 3b194bc..fcf75b6 100644 --- a/app/routes/campaign-detail/campaign-detail.tsx +++ b/app/routes/campaign-detail/campaign-detail.tsx @@ -16,7 +16,6 @@ import type { CampaignDetailApiResponse, } from "../campaign-detail/types"; -import informationIconUrl from "../../assets/information-icon.svg?url"; import CampaignDetailSkeleton from "./components/CampaignDetailSkeleton"; import { toggleCampaignLike } from "./campaign-like"; @@ -406,23 +405,28 @@ export default function CampaignDetailContent({ description={brandData.description} /> -
+
+ + + + i + + } text={toDdayText(campaign.dday)} /> - | - {campaign.quota}명 - | - + + + + {campaign.quota}명 + + + + + {toKoreanCategory(campaign.category)}
@@ -555,11 +559,9 @@ function DetailRow({ function MetaItem({ icon, text }: { icon?: React.ReactNode; text: string }) { return ( - - {icon ? ( - {icon} - ) : null} - {text} + + {icon ? {icon} : null} + {text} ); } diff --git a/app/routes/home/components/HeartButton.tsx b/app/routes/home/components/HeartButton.tsx index f2a29b0..b68866c 100644 --- a/app/routes/home/components/HeartButton.tsx +++ b/app/routes/home/components/HeartButton.tsx @@ -31,7 +31,7 @@ export default function HeartButton({ diff --git a/app/routes/matching/test/result/matching-result-content.tsx b/app/routes/matching/test/result/matching-result-content.tsx index e6382aa..a57b2f1 100644 --- a/app/routes/matching/test/result/matching-result-content.tsx +++ b/app/routes/matching/test/result/matching-result-content.tsx @@ -129,28 +129,40 @@ export default function MatchingResultContent() { return (
-
-
-
-
-
-
-

- +

+
+
+
+
+
+

+ {data.userName} {" "} 님의 매칭 결과

-

+

{data.userType}

-
+
{data.tags.map((tag) => ( #{tag} @@ -158,35 +170,42 @@ export default function MatchingResultContent() {
-
- {data.userType} +
+
+ {data.userType} +
- {loading ? ( -

- 불러오는 중… -

- ) : null} - {error ? ( -

- {error} -

- ) : null} - -
-

+

+ {loading ? ( +

불러오는 중…

+ ) : null} + {error ? ( +

{error}

+ ) : null} + +

나와 어울리는 TOP3 브랜드

-
+
{data.brands.map((b) => ( -
-
+
+
{b.logoUrl ? ( ) : ( -
+
{short5(b.brandName)}
)}
-
- +
+ {short5(b.brandName)} - + {b.matchingRatio}%
@@ -215,7 +234,7 @@ export default function MatchingResultContent() { ))}
-
+
-
+
diff --git a/app/routes/matching/test/step2/step2-content.tsx b/app/routes/matching/test/step2/step2-content.tsx index 8980d5a..7e085a1 100644 --- a/app/routes/matching/test/step2/step2-content.tsx +++ b/app/routes/matching/test/step2/step2-content.tsx @@ -257,7 +257,7 @@ export default function MatchingTestStep2Content({ /> { setBottomInput(bottomValue);