diff --git a/public/brand/App_Icon.png b/public/brand/App_Icon.png new file mode 100644 index 00000000..4494c6cb Binary files /dev/null and b/public/brand/App_Icon.png differ diff --git a/public/brand/App_Icon.svg b/public/brand/App_Icon.svg new file mode 100644 index 00000000..d80f91e3 --- /dev/null +++ b/public/brand/App_Icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_L_DefaultBlue.svg b/public/brand/Combination_Mark_L_DefaultBlue.svg new file mode 100644 index 00000000..47d9ae5f --- /dev/null +++ b/public/brand/Combination_Mark_L_DefaultBlue.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_L_DefaultLime.svg b/public/brand/Combination_Mark_L_DefaultLime.svg new file mode 100644 index 00000000..43ecda71 --- /dev/null +++ b/public/brand/Combination_Mark_L_DefaultLime.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_L_StrongBlue.svg b/public/brand/Combination_Mark_L_StrongBlue.svg new file mode 100644 index 00000000..4cd1a6d0 --- /dev/null +++ b/public/brand/Combination_Mark_L_StrongBlue.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_L_StrongLime.svg b/public/brand/Combination_Mark_L_StrongLime.svg new file mode 100644 index 00000000..dea2379b --- /dev/null +++ b/public/brand/Combination_Mark_L_StrongLime.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_L_SubtleBlue.svg b/public/brand/Combination_Mark_L_SubtleBlue.svg new file mode 100644 index 00000000..0eb39477 --- /dev/null +++ b/public/brand/Combination_Mark_L_SubtleBlue.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_L_SubtleLime.svg b/public/brand/Combination_Mark_L_SubtleLime.svg new file mode 100644 index 00000000..59060540 --- /dev/null +++ b/public/brand/Combination_Mark_L_SubtleLime.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_M_DefaultBlue.svg b/public/brand/Combination_Mark_M_DefaultBlue.svg new file mode 100644 index 00000000..0371fa03 --- /dev/null +++ b/public/brand/Combination_Mark_M_DefaultBlue.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_M_DefaultLime.svg b/public/brand/Combination_Mark_M_DefaultLime.svg new file mode 100644 index 00000000..3cf0e714 --- /dev/null +++ b/public/brand/Combination_Mark_M_DefaultLime.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_M_StrongBlue.svg b/public/brand/Combination_Mark_M_StrongBlue.svg new file mode 100644 index 00000000..95ada944 --- /dev/null +++ b/public/brand/Combination_Mark_M_StrongBlue.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_M_StrongLime.svg b/public/brand/Combination_Mark_M_StrongLime.svg new file mode 100644 index 00000000..6615a4e5 --- /dev/null +++ b/public/brand/Combination_Mark_M_StrongLime.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_M_SubtleBlue.svg b/public/brand/Combination_Mark_M_SubtleBlue.svg new file mode 100644 index 00000000..d0fb536f --- /dev/null +++ b/public/brand/Combination_Mark_M_SubtleBlue.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_M_SubtleLime.svg b/public/brand/Combination_Mark_M_SubtleLime.svg new file mode 100644 index 00000000..939d8998 --- /dev/null +++ b/public/brand/Combination_Mark_M_SubtleLime.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_S_DefaultBlue.svg b/public/brand/Combination_Mark_S_DefaultBlue.svg new file mode 100644 index 00000000..8735e53c --- /dev/null +++ b/public/brand/Combination_Mark_S_DefaultBlue.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_S_DefaultLime.svg b/public/brand/Combination_Mark_S_DefaultLime.svg new file mode 100644 index 00000000..a2bea3ae --- /dev/null +++ b/public/brand/Combination_Mark_S_DefaultLime.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_S_StrongBlue.svg b/public/brand/Combination_Mark_S_StrongBlue.svg new file mode 100644 index 00000000..ccee6f7d --- /dev/null +++ b/public/brand/Combination_Mark_S_StrongBlue.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_S_StrongLime.svg b/public/brand/Combination_Mark_S_StrongLime.svg new file mode 100644 index 00000000..1fc10e43 --- /dev/null +++ b/public/brand/Combination_Mark_S_StrongLime.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_S_SubtleBlue.svg b/public/brand/Combination_Mark_S_SubtleBlue.svg new file mode 100644 index 00000000..3ba84ab9 --- /dev/null +++ b/public/brand/Combination_Mark_S_SubtleBlue.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/brand/Combination_Mark_S_SubtleLime.svg b/public/brand/Combination_Mark_S_SubtleLime.svg new file mode 100644 index 00000000..e8ee79c7 --- /dev/null +++ b/public/brand/Combination_Mark_S_SubtleLime.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/brand/Wordmark_L.svg b/public/brand/Wordmark_L.svg new file mode 100644 index 00000000..575930cb --- /dev/null +++ b/public/brand/Wordmark_L.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/brand/Wordmark_M.svg b/public/brand/Wordmark_M.svg new file mode 100644 index 00000000..4ed0de52 --- /dev/null +++ b/public/brand/Wordmark_M.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/brand/Wordmark_S.svg b/public/brand/Wordmark_S.svg new file mode 100644 index 00000000..44f04d74 --- /dev/null +++ b/public/brand/Wordmark_S.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/favicon/android-chrome-192x192.png b/public/favicon/android-chrome-192x192.png new file mode 100644 index 00000000..a55b691a Binary files /dev/null and b/public/favicon/android-chrome-192x192.png differ diff --git a/public/favicon/android-chrome-512x512.png b/public/favicon/android-chrome-512x512.png new file mode 100644 index 00000000..62fc9318 Binary files /dev/null and b/public/favicon/android-chrome-512x512.png differ diff --git a/public/favicon/apple-touch-icon.png b/public/favicon/apple-touch-icon.png new file mode 100644 index 00000000..73bf2f19 Binary files /dev/null and b/public/favicon/apple-touch-icon.png differ diff --git a/public/favicon/favicon-16x16.png b/public/favicon/favicon-16x16.png new file mode 100644 index 00000000..887d15db Binary files /dev/null and b/public/favicon/favicon-16x16.png differ diff --git a/public/favicon/favicon-32x32.png b/public/favicon/favicon-32x32.png new file mode 100644 index 00000000..6757dab5 Binary files /dev/null and b/public/favicon/favicon-32x32.png differ diff --git a/public/favicon/favicon.ico b/public/favicon/favicon.ico new file mode 100644 index 00000000..ca2d1ead Binary files /dev/null and b/public/favicon/favicon.ico differ diff --git a/public/favicon/site.webmanifest b/public/favicon/site.webmanifest new file mode 100644 index 00000000..69779e51 --- /dev/null +++ b/public/favicon/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "UTTAE - 함께 만드는 여행 계획", + "short_name": "UTTAE", + "icons": [ + { + "src": "/favicon/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/favicon/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#f12d33", + "background_color": "#ffffff", + "display": "standalone" +} \ No newline at end of file diff --git a/public/fonts/bmjua.otf b/public/fonts/bmjua.otf deleted file mode 100644 index 110de85e..00000000 Binary files a/public/fonts/bmjua.otf and /dev/null differ diff --git a/public/fonts/cafe24-ssurround.woff2 b/public/fonts/cafe24-ssurround.woff2 deleted file mode 100644 index a9925d4c..00000000 Binary files a/public/fonts/cafe24-ssurround.woff2 and /dev/null differ diff --git a/public/invite-preview.html b/public/invite-preview.html index 6060a3e6..c9243982 100644 --- a/public/invite-preview.html +++ b/public/invite-preview.html @@ -10,15 +10,15 @@ - - - - + + + + - + diff --git a/public/brand/favicon.png b/public/temp/favicon.png similarity index 100% rename from public/brand/favicon.png rename to public/temp/favicon.png diff --git a/public/brand/iconLogo.png b/public/temp/iconLogo.png similarity index 100% rename from public/brand/iconLogo.png rename to public/temp/iconLogo.png diff --git a/public/brand/iconLogo.svg b/public/temp/iconLogo.svg similarity index 100% rename from public/brand/iconLogo.svg rename to public/temp/iconLogo.svg diff --git a/public/brand/logo.svg b/public/temp/logo.svg similarity index 100% rename from public/brand/logo.svg rename to public/temp/logo.svg diff --git a/public/brand/textlogo.svg b/public/temp/textlogo.svg similarity index 100% rename from public/brand/textlogo.svg rename to public/temp/textlogo.svg diff --git a/src/app/(main)/bookmark/[folderId]/page.tsx b/src/app/(main)/bookmark/[folderId]/page.tsx index 1b23ba0e..16beb4af 100644 --- a/src/app/(main)/bookmark/[folderId]/page.tsx +++ b/src/app/(main)/bookmark/[folderId]/page.tsx @@ -56,7 +56,7 @@ export default function BookmarkFolderDetailPage() {
-

+

{error instanceof Error ? error.message : "북마크 폴더를 불러오지 못했습니다."} diff --git a/src/app/(main)/bookmark/_components/AddBookmarkModal.tsx b/src/app/(main)/bookmark/_components/AddBookmarkModal.tsx index 44f08de8..8d74a7ba 100644 --- a/src/app/(main)/bookmark/_components/AddBookmarkModal.tsx +++ b/src/app/(main)/bookmark/_components/AddBookmarkModal.tsx @@ -96,7 +96,7 @@ export function AddBookmarkModal({ {mode === "edit" ? "북마크 편집" : "새 북마크 추가"} {formError ? ( -

+

{formError}

) : null} @@ -126,7 +126,7 @@ export function AddBookmarkModal({ maxLength={TITLE_MAX_LENGTH} placeholder={untitledNameHint ?? UNTITLED_BOOKMARK_CATEGORY_LABEL} aria-describedby="bookmark-title-counter" - className="w-full rounded-xl border border-gray-border px-3 py-2.5 text-[17px] outline-none ring-brand-red/30 focus:border-brand-red focus:ring-2" + className="w-full rounded-xl border border-gray-border px-3 py-2.5 text-[17px] outline-none ring-primary/30 focus:border-primary focus:ring-2" />
@@ -141,7 +141,7 @@ export function AddBookmarkModal({ type="button" title={hex} onClick={() => setColor(hex)} - className="size-9 cursor-pointer rounded-full border-2 transition-shadow focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-red/50" + className="size-9 cursor-pointer rounded-full border-2 transition-shadow focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50" style={{ backgroundColor: hex, borderColor: color === hex ? "#171717" : "transparent", @@ -181,7 +181,7 @@ export function AddBookmarkModal({ diff --git a/src/app/(main)/bookmark/_components/BookmarkFolderDetailHeader.tsx b/src/app/(main)/bookmark/_components/BookmarkFolderDetailHeader.tsx index 5caefed7..0df892fd 100644 --- a/src/app/(main)/bookmark/_components/BookmarkFolderDetailHeader.tsx +++ b/src/app/(main)/bookmark/_components/BookmarkFolderDetailHeader.tsx @@ -54,7 +54,7 @@ export function BookmarkFolderDetailHeader({
-

+

{bookmarksErr instanceof Error ? bookmarksErr.message : "목록을 불러오지 못했습니다."} @@ -164,7 +164,7 @@ export function BookmarkFolderDetailView({ folder }: { folder: BookmarkFolder })

) : cardsError ? (
-

+

{firstPlaceError instanceof Error ? firstPlaceError.message : "장소 정보를 불러오지 못했습니다."} diff --git a/src/app/(main)/bookmark/_components/BookmarkFoldersView.tsx b/src/app/(main)/bookmark/_components/BookmarkFoldersView.tsx index 99197652..aa0776b5 100644 --- a/src/app/(main)/bookmark/_components/BookmarkFoldersView.tsx +++ b/src/app/(main)/bookmark/_components/BookmarkFoldersView.tsx @@ -178,7 +178,7 @@ export function BookmarkFoldersView() { onClick={openCreate} disabled={isCreating || isUpdating} className={cn( - "flex w-fit shrink-0 cursor-pointer items-center rounded-full bg-brand-red text-white shadow-sm transition-opacity hover:opacity-95 active:opacity-90 disabled:cursor-not-allowed disabled:opacity-60 mobile:hidden", + "flex w-fit shrink-0 cursor-pointer items-center rounded-full bg-primary text-white shadow-sm transition-opacity hover:opacity-95 active:opacity-90 disabled:cursor-not-allowed disabled:opacity-60 mobile:hidden", pageToolbarButtonCompactGapClass, pageToolbarButtonCompactTextClass, pageToolbarButtonCompactPaddingClass, @@ -212,7 +212,7 @@ export function BookmarkFoldersView() {

-

+

{error instanceof Error ? error.message : "목록을 불러오지 못했습니다."} @@ -255,7 +255,7 @@ export function BookmarkFoldersView() { >

@@ -303,7 +303,7 @@ export function BookmarkFoldersView() { @@ -261,7 +261,7 @@ export function RoomMembersSection() { {kickTargetId === member.userId && (
@@ -285,7 +285,7 @@ export function RoomMembersSection() { ); }} disabled={isKicking} - className="flex-1 cursor-pointer rounded-lg bg-brand-red py-1.5 text-[14px] font-medium text-white transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-40" + className="flex-1 cursor-pointer rounded-lg bg-primary py-1.5 text-[14px] font-medium text-white transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-40" > {isKicking ? "처리 중…" : "추방"} @@ -350,14 +350,14 @@ export function RoomMembersSection() { )} ) : ( -
+

정말 방에서 나가시겠어요?

방을 나가면 현재 여행 플랜에 접근할 수 없게 됩니다. {isHost && hostCannotLeaveAlone && ( - + 다른 멤버가 없으면 나갈 수 없습니다. 여행 삭제를 이용해 주세요. )} diff --git a/src/app/(main)/plan/_components/itinerary/AddFromBookmarkModal.tsx b/src/app/(main)/plan/_components/itinerary/AddFromBookmarkModal.tsx index 1027a086..8795f073 100644 --- a/src/app/(main)/plan/_components/itinerary/AddFromBookmarkModal.tsx +++ b/src/app/(main)/plan/_components/itinerary/AddFromBookmarkModal.tsx @@ -227,7 +227,7 @@ export function AddFromBookmarkModal({

) : categoriesError ? (
-

+

{categoriesErr instanceof Error ? categoriesErr.message : "북마크를 불러오지 못했습니다."} @@ -262,7 +262,7 @@ export function AddFromBookmarkModal({ className={cn( "flex shrink-0 cursor-pointer items-center gap-2 rounded-full border px-3 py-1.5 text-left text-[14px] font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-60", selected - ? "border-brand-green bg-brand-green/10 text-gray-900" + ? "border-primary bg-primary/10 text-gray-900" : "border-gray-border bg-white text-dark-gray hover:bg-gray-50", )} > @@ -284,7 +284,7 @@ export function AddFromBookmarkModal({

) : bookmarksError ? (
-

+

{bookmarksErr instanceof Error ? bookmarksErr.message : "장소 목록을 불러오지 못했습니다."} diff --git a/src/app/(main)/plan/_components/itinerary/PlanDaySection.tsx b/src/app/(main)/plan/_components/itinerary/PlanDaySection.tsx index f9e0ae7b..471be940 100644 --- a/src/app/(main)/plan/_components/itinerary/PlanDaySection.tsx +++ b/src/app/(main)/plan/_components/itinerary/PlanDaySection.tsx @@ -157,9 +157,9 @@ export function PlanDaySection({ {...crossDaySectionDropProps} className={cn( "rounded-2xl border border-gray-border bg-white", - isDragging && "border-brand-red/80 ring-4 ring-inset ring-brand-red/45", + isDragging && "border-primary/80 ring-4 ring-inset ring-primary/45", isCrossDayItemDropTarget && - "border-brand-red ring-3 ring-inset ring-brand-red/50", + "border-primary ring-3 ring-inset ring-primary/50", )} aria-label={subtitle ? `${title} ${subtitle}` : title} > @@ -239,7 +239,7 @@ export function PlanDaySection({ className={cn( "shrink-0 cursor-pointer self-center rounded-lg p-2 transition-colors mobile:hidden", routeVisible - ? "text-brand-red hover:bg-red-50" + ? "text-primary hover:bg-primary/10" : "text-dark-gray hover:bg-bubble-gray/60", )} > @@ -294,7 +294,7 @@ export function PlanDaySection({ role="menuitem" disabled={isDeleteScheduleDisabled} className={cn( - "flex items-center gap-2 whitespace-nowrap px-3 py-2.5 text-left text-[17px] text-brand-red hover:bg-red-50", + "flex items-center gap-2 whitespace-nowrap px-3 py-2.5 text-left text-[17px] text-status-negative hover:bg-bubble-gray", isDeleteScheduleDisabled ? "cursor-not-allowed opacity-40" : "cursor-pointer", diff --git a/src/app/(main)/plan/_components/itinerary/PlanItemMemoForm.tsx b/src/app/(main)/plan/_components/itinerary/PlanItemMemoForm.tsx index 1ca87667..9ec18181 100644 --- a/src/app/(main)/plan/_components/itinerary/PlanItemMemoForm.tsx +++ b/src/app/(main)/plan/_components/itinerary/PlanItemMemoForm.tsx @@ -14,7 +14,7 @@ import { cn } from "@/lib/utils"; const SCHEDULE_ITEM_MEMO_MAX_LENGTH = 2000; const MEMO_LINK_CLASS_NAME = - "break-all text-brand-green underline underline-offset-2 hover:opacity-80"; + "break-all text-primary-strong underline underline-offset-2 hover:opacity-80"; type PlanItemMemoEditorProps = { roomId: string; @@ -74,18 +74,11 @@ function MemoOverwriteConfirmDialog({ onMouseDown={(e) => e.stopPropagation()} className="w-full max-w-sm rounded-2xl border border-gray-border bg-white p-5 shadow-lg" > -

+

다른 사람의 입력을 덮어씁니다!

-

- 다른 멤버가 메모를 수정했어요. 저장하면 그 내용 대신 지금 작성 중인 - 메모로 바뀝니다. +

+ 다른 멤버가 메모를 수정했어요. 저장하면 그 내용 대신 지금 작성 중인 메모로 바뀝니다.

@@ -143,7 +136,7 @@ export function PlanItemMemoReadOnly({ e.stopPropagation(); onDelete(); }} - className="shrink-0 cursor-pointer self-start rounded-md p-1 text-dark-gray transition hover:bg-brand-red/10 hover:text-brand-red disabled:cursor-not-allowed disabled:opacity-40" + className="shrink-0 cursor-pointer self-start rounded-md p-1 text-dark-gray transition hover:bg-primary/10 hover:text-primary disabled:cursor-not-allowed disabled:opacity-40" > @@ -175,10 +168,7 @@ export function PlanItemMemoEditor({ return; } - if ( - normalizeMemoDraft(incomingMemo) !== - normalizeMemoDraft(editStartMemo) - ) { + if (normalizeMemoDraft(incomingMemo) !== normalizeMemoDraft(editStartMemo)) { setHasRemoteConflict(true); } }, [incomingMemo, draft, editStartMemo]); @@ -202,9 +192,7 @@ export function PlanItemMemoEditor({ setEditStartMemo(next); setHasRemoteConflict(false); setOverwriteDialogOpen(false); - toast.success( - next.length > 0 ? "메모를 저장했어요." : "메모를 삭제했어요.", - ); + toast.success(next.length > 0 ? "메모를 저장했어요." : "메모를 삭제했어요."); onClose(); } catch { toast.error("메모를 저장하지 못했어요."); @@ -246,10 +234,7 @@ export function PlanItemMemoEditor({ onMouseDown={stopCardActivation} onClick={stopCardActivation} onChange={(e) => setDraft(e.target.value)} - className={cn( - PLAN_PLACE_CARD_TW.memoTextarea, - "select-text cursor-text", - )} + className={cn(PLAN_PLACE_CARD_TW.memoTextarea, "select-text cursor-text")} />
@@ -266,7 +251,7 @@ export function PlanItemMemoEditor({ disabled={isPending} className={cn( "cursor-pointer border border-gray-border bg-white text-gray-800 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-40", - PLAN_PLACE_CARD_TW.timeSaveButtonCompact, + PLAN_PLACE_CARD_TW.timeSaveButtonCompact )} > 취소 @@ -276,8 +261,8 @@ export function PlanItemMemoEditor({ onClick={() => void handleSave()} disabled={isPending || !dirty} className={cn( - "cursor-pointer bg-brand-green text-white transition hover:bg-brand-green/90 disabled:cursor-not-allowed disabled:opacity-40", - PLAN_PLACE_CARD_TW.timeSaveButtonCompact, + "cursor-pointer bg-primary text-white transition hover:bg-primary/90 disabled:cursor-not-allowed disabled:opacity-40", + PLAN_PLACE_CARD_TW.timeSaveButtonCompact )} > {isPending ? "저장 중…" : "저장"} diff --git a/src/app/(main)/plan/_components/itinerary/PlanItemTimeForm.tsx b/src/app/(main)/plan/_components/itinerary/PlanItemTimeForm.tsx index 5b930b8e..f9237706 100644 --- a/src/app/(main)/plan/_components/itinerary/PlanItemTimeForm.tsx +++ b/src/app/(main)/plan/_components/itinerary/PlanItemTimeForm.tsx @@ -172,7 +172,7 @@ export function PlanItemTimeEditor({ className="max-h-[90vh] w-full max-w-sm overflow-y-auto rounded-3xl bg-white shadow-xl" >
- +

@@ -250,7 +250,7 @@ export function PlanItemTimeEditor({ 체류 시간 {Math.floor(durationPreview / 60)}시간{" "} @@ -275,7 +275,7 @@ export function PlanItemTimeEditor({ type="button" onClick={() => void handleSave()} disabled={!canSave} - className="h-10 shrink-0 cursor-pointer rounded-lg bg-brand-green px-4 text-sm font-medium text-white transition hover:bg-brand-green/90 disabled:cursor-not-allowed disabled:opacity-40" + className="h-10 shrink-0 cursor-pointer rounded-lg bg-primary px-4 text-sm font-medium text-white transition hover:bg-primary/90 disabled:cursor-not-allowed disabled:opacity-40" > {isPending ? "저장 중…" : "저장"} diff --git a/src/app/(main)/plan/_components/itinerary/PlanItinerary.tsx b/src/app/(main)/plan/_components/itinerary/PlanItinerary.tsx index b7677466..88b2c66d 100644 --- a/src/app/(main)/plan/_components/itinerary/PlanItinerary.tsx +++ b/src/app/(main)/plan/_components/itinerary/PlanItinerary.tsx @@ -187,13 +187,13 @@ export function PlanItinerary({ roomId, scheduleId }: PlanItineraryProps) { > {isLoading ?
- + 장소 목록을 불러오는 중…
: null} {isError ? -

+

장소 목록을 불러오지 못했어요.

: null} diff --git a/src/app/(main)/plan/_components/itinerary/PlanPageView.tsx b/src/app/(main)/plan/_components/itinerary/PlanPageView.tsx index 71e89325..66ec739e 100644 --- a/src/app/(main)/plan/_components/itinerary/PlanPageView.tsx +++ b/src/app/(main)/plan/_components/itinerary/PlanPageView.tsx @@ -35,17 +35,19 @@ import { PlanScheduleDayBlock } from "./PlanScheduleDayBlock"; export function PlanPageView() { const { isReadOnly, copy } = usePlanMobileReadOnly(); const planContainerRef = useRef(null); + + //room id 가져와서 room detail, schedules 가져오기 const storedId = useSessionStore((s) => s.currentRoomId); const roomId = typeof storedId === "string" && storedId.trim().length > 0 ? storedId.trim() : ""; - const roomIdForQueries = roomId.length > 0 ? roomId : null; - // rooms/${roomId}` - const { data: roomDetail }= useRoomDetail(roomIdForQueries); - const lastTrackedPlanIdRef = useRef(null); + const { data: roomDetail } = useRoomDetail(roomIdForQueries); + + //방에 들어올 때 analytics 이벤트 보내기 (같은방 아니면) => refactoring 필요(ref 제거 가능성) + const lastTrackedPlanIdRef = useRef(null); useEffect(() => { if (!roomDetail || lastTrackedPlanIdRef.current === roomDetail.id) return; lastTrackedPlanIdRef.current = roomDetail.id; @@ -55,6 +57,7 @@ export function PlanPageView() { }); }, [roomDetail]); + //hooks const { data: schedules, isPending, @@ -65,6 +68,7 @@ export function PlanPageView() { const { mutateAsync: createScheduleAsync, isPending: isCreatingSchedule } = useCreateRoomSchedule(); + //schedules 정렬, day block 생성 => refactoring 필요 const scheduleList = useMemo(() => schedules ?? [], [schedules]); const sortedSchedules = useMemo( () => sortRoomSchedules(scheduleList), @@ -174,7 +178,7 @@ export function PlanPageView() { {isError ? (

diff --git a/src/app/(main)/plan/_components/itinerary/PlanPlaceCard.tsx b/src/app/(main)/plan/_components/itinerary/PlanPlaceCard.tsx index 76f12dc0..9591d2ed 100644 --- a/src/app/(main)/plan/_components/itinerary/PlanPlaceCard.tsx +++ b/src/app/(main)/plan/_components/itinerary/PlanPlaceCard.tsx @@ -318,7 +318,7 @@ export function PlanPlaceCard({ {(() => { const media = photoLoading ? ( ) : resolvedPhotoUrl ? ( @@ -418,9 +418,9 @@ export function PlanPlaceCard({ {timeRange ? ( {timeRange} diff --git a/src/app/(main)/plan/_components/itinerary/PlanPlaceCardParts.tsx b/src/app/(main)/plan/_components/itinerary/PlanPlaceCardParts.tsx index b1c29a8a..01156097 100644 --- a/src/app/(main)/plan/_components/itinerary/PlanPlaceCardParts.tsx +++ b/src/app/(main)/plan/_components/itinerary/PlanPlaceCardParts.tsx @@ -22,7 +22,7 @@ export function PlanOrderIndexBadge({ className, }: { orderIndex: number; - /** 지도 일차 경로색과 동일한 hex — 유효하지 않으면 brand-red 클래스 */ + /** 지도 일차 경로색과 동일한 hex — 유효하지 않으면 primary 클래스 */ backgroundColorHex?: string; className?: string; }) { @@ -38,7 +38,7 @@ export function PlanOrderIndexBadge({ className={cn( "flex shrink-0 items-center justify-center rounded-md font-bold text-white", PLAN_PLACE_CARD_TW.orderBadgeCompact, - !customBg && "bg-brand-red", + !customBg && "bg-primary", className, )} style={customBg ? { backgroundColor: hex } : undefined} @@ -60,7 +60,7 @@ export function PlanScheduleItemDeleteButton({ @@ -393,7 +393,7 @@ export default function SearchPage() {

{showSearchLoading && (
- + 장소를 검색하는 중...
)} @@ -455,7 +455,7 @@ export default function SearchPage() { ) : null} {isFetching && (
- +
)}
diff --git a/src/app/_components/LandingActionLink.tsx b/src/app/_components/LandingActionLink.tsx index dc2e0965..c4c6415e 100644 --- a/src/app/_components/LandingActionLink.tsx +++ b/src/app/_components/LandingActionLink.tsx @@ -16,7 +16,7 @@ export function LandingActionLink({ diff --git a/src/app/_components/LandingCollaborationSection.tsx b/src/app/_components/LandingCollaborationSection.tsx index f5a7d4fb..d11bbdd6 100644 --- a/src/app/_components/LandingCollaborationSection.tsx +++ b/src/app/_components/LandingCollaborationSection.tsx @@ -25,9 +25,9 @@ export function LandingCollaborationSection() {

{LANDING_COLLABORATION_FEATURES.map(({ icon: Icon, ...feature }) => ( -
+
- +

{feature.eyebrow}

diff --git a/src/app/_components/LandingCompanySection.tsx b/src/app/_components/LandingCompanySection.tsx index cf6777d9..3595799e 100644 --- a/src/app/_components/LandingCompanySection.tsx +++ b/src/app/_components/LandingCompanySection.tsx @@ -9,7 +9,7 @@ export function LandingCompanySection() { return (
diff --git a/src/app/_components/LandingFeatureStory.tsx b/src/app/_components/LandingFeatureStory.tsx index 91416953..b55dd400 100644 --- a/src/app/_components/LandingFeatureStory.tsx +++ b/src/app/_components/LandingFeatureStory.tsx @@ -22,7 +22,7 @@ export function LandingFeatureStory({ return (
diff --git a/src/app/_components/LandingHeader.tsx b/src/app/_components/LandingHeader.tsx index 76c73385..0f110c91 100644 --- a/src/app/_components/LandingHeader.tsx +++ b/src/app/_components/LandingHeader.tsx @@ -17,27 +17,21 @@ export function LandingHeader() { - +