From 5adfbf45a5337c818d6a423c405d0f3026b8e27d Mon Sep 17 00:00:00 2001 From: GulSam00 Date: Sat, 29 Aug 2026 01:26:03 +0900 Subject: [PATCH 1/5] =?UTF-8?q?fix=20:=20=EA=B2=80=EC=83=89=20=ED=88=AC?= =?UTF-8?q?=EC=96=B4=20X=20=EB=B2=84=ED=8A=BC=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=ED=88=AC=EC=96=B4=EA=B0=80=20=EC=A2=85=EB=A3=8C=EB=90=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#311)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01LrweuC2EWY9Tbee43P62dM --- apps/web/src/app/search/SearchTour.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/web/src/app/search/SearchTour.tsx b/apps/web/src/app/search/SearchTour.tsx index 0cca923..527981c 100644 --- a/apps/web/src/app/search/SearchTour.tsx +++ b/apps/web/src/app/search/SearchTour.tsx @@ -136,6 +136,9 @@ export default function SearchTour({ zIndex: 10000, showProgress: true, buttons: TOOLTIP_BUTTONS, + // 라이브러리 기본값 'close'는 continuous 모드에서 X를 눌러도 다음 단계로 넘어갈 뿐 투어가 끝나지 않는다. + // 'skip'이어야 상태가 SKIPPED가 되어 투어가 종료되고 '다시 보지 않기'까지 저장된다. + closeButtonAction: 'skip' as const, skipBeacon: true, // 라이브러리 기본값(고정 380px)은 375px 이하 모바일 화면에서 좌우로 넘친다. // 뷰포트보다 넓어지지 않되, 넓은 화면에서는 기존 380px 상한을 유지한다. From ec820b7b03c7e4d124dfd84f31b0e15a605a479b Mon Sep 17 00:00:00 2001 From: GulSam00 Date: Sat, 29 Aug 2026 01:26:03 +0900 Subject: [PATCH 2/5] =?UTF-8?q?fix=20:=20=ED=88=AC=EC=96=B4=20=EC=98=88?= =?UTF-8?q?=EC=8B=9C=20=EA=B3=A1=20=EC=A0=95=EB=B3=B4=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20(#311)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01LrweuC2EWY9Tbee43P62dM --- apps/web/src/constants/tourDemoSong.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/web/src/constants/tourDemoSong.ts b/apps/web/src/constants/tourDemoSong.ts index 139bbe5..61fc1a4 100644 --- a/apps/web/src/constants/tourDemoSong.ts +++ b/apps/web/src/constants/tourDemoSong.ts @@ -6,12 +6,12 @@ import { SearchSong } from '@/types/song'; * 실제 검색 결과로 투어를 진행하면 곡 데이터가 바뀌거나 검색이 실패할 때 투어가 깨진다. * 네트워크 없이 항상 같은 카드를 보여주도록 고정값을 쓴다. */ -export const TOUR_DEMO_SEARCH_TERM = '밤이 깊었나'; +export const TOUR_DEMO_SEARCH_TERM = '밤이 깊었네'; export const TOUR_DEMO_SONG: SearchSong = { id: 'tour-demo-song', - title: '밤이 깊었나', - artist: '스판텍스', + title: '밤이 깊었네', + artist: '크라잉넛', num_tj: '10101', num_ky: '20202', badges: [], From 3320111eff0c0492141f20e4e23e0b928d951335 Mon Sep 17 00:00:00 2001 From: GulSam00 Date: Sat, 29 Aug 2026 01:26:03 +0900 Subject: [PATCH 3/5] =?UTF-8?q?chore=20:=20=EC=9D=B8=EA=B8=B0=20=EC=B0=A8?= =?UTF-8?q?=ED=8A=B8=20=EC=9E=A5=EB=A5=B4=20=ED=95=84=ED=84=B0=20=EB=B1=83?= =?UTF-8?q?=EC=A7=80=20=EC=95=84=EC=9D=B4=EC=BD=98=20=EC=A0=9C=EA=B1=B0=20?= =?UTF-8?q?(#311)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01LrweuC2EWY9Tbee43P62dM --- apps/web/src/app/popular/ChartGenreFilter.tsx | 3 +-- apps/web/src/types/tjChart.ts | 18 ------------------ 2 files changed, 1 insertion(+), 20 deletions(-) diff --git a/apps/web/src/app/popular/ChartGenreFilter.tsx b/apps/web/src/app/popular/ChartGenreFilter.tsx index 331317a..eab0e54 100644 --- a/apps/web/src/app/popular/ChartGenreFilter.tsx +++ b/apps/web/src/app/popular/ChartGenreFilter.tsx @@ -3,7 +3,7 @@ import { useEffect, useRef } from 'react'; import { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs'; -import { STR_TYPE_EMOJI, STR_TYPE_LABEL, StrType } from '@/types/tjChart'; +import { STR_TYPE_LABEL, StrType } from '@/types/tjChart'; // 장르가 12종이라 줄바꿈 없이 한 줄로 두고 가로 스크롤로 훑게 한다. // TabsTrigger 기본 스타일의 flex-1(균등 분할)은 flex-none으로 해제해야 칩 너비가 라벨에 맞는다. @@ -57,7 +57,6 @@ export default function ChartGenreFilter({ value, onChange }: ChartGenreFilterPr {Object.values(StrType).map(type => ( - {STR_TYPE_LABEL[type]} ))} diff --git a/apps/web/src/types/tjChart.ts b/apps/web/src/types/tjChart.ts index 11409d5..72f63e1 100644 --- a/apps/web/src/types/tjChart.ts +++ b/apps/web/src/types/tjChart.ts @@ -32,24 +32,6 @@ export const STR_TYPE_LABEL: Record = { [StrType.RnbUrban]: 'R&B/어반', }; -// 장르 뱃지 앞에 붙는 아이콘. -// Windows의 Segoe UI Emoji에 글리프가 없으면 두부(tofu)로 깨지므로, -// 국기(regional indicator)와 최신 이모지는 쓰지 않는다. 아코디언(U+1FA97)도 여기서 깨진다. -export const STR_TYPE_EMOJI: Record = { - [StrType.All]: '🏆', - [StrType.Kpop]: '🎤', - [StrType.Pop]: '🌍', - [StrType.Jpop]: '🌸', - [StrType.Ballad]: '💗', - [StrType.Dance]: '💃', - [StrType.Trot]: '📻', - [StrType.Folk]: '🎸', - [StrType.Ost]: '🎬', - [StrType.RockMetal]: '🤘', - [StrType.RapHiphop]: '🔥', - [StrType.RnbUrban]: '🎷', -}; - export interface TjChartRankingSong extends Song { rank: number; } From a28d03b9d2e3d0bf3e5fbae074aa3d5703f8f835 Mon Sep 17 00:00:00 2001 From: GulSam00 Date: Sat, 29 Aug 2026 01:26:03 +0900 Subject: [PATCH 4/5] =?UTF-8?q?chore=20:=20=EB=B9=84=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=9D=B4=EB=8B=AC=EC=9D=98=20=EC=95=84=ED=8B=B0?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=ED=88=AC=ED=91=9C=20=EC=95=88=EB=82=B4?= =?UTF-8?q?=EB=A5=BC=20=EC=98=A4=EB=B2=84=EB=A0=88=EC=9D=B4=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20(#311)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01LrweuC2EWY9Tbee43P62dM --- apps/web/src/app/popular/ArtistVotePanel.tsx | 202 +++++++++---------- 1 file changed, 101 insertions(+), 101 deletions(-) diff --git a/apps/web/src/app/popular/ArtistVotePanel.tsx b/apps/web/src/app/popular/ArtistVotePanel.tsx index 95c1972..74ca962 100644 --- a/apps/web/src/app/popular/ArtistVotePanel.tsx +++ b/apps/web/src/app/popular/ArtistVotePanel.tsx @@ -137,118 +137,118 @@ export default function ArtistVotePanel() { ); }; - if (!isAuthenticated) { - return ( -
-

로그인하고 투표해보세요

-

- 보유 포인트로 이달의 아티스트를 뽑을 수 있어요. -

-
- ); - } - return ( -
-
- 보유 포인트 {point}P - {changedRows.length > 0 && ( - - {' '} - → 저장 후 {remainingPoint}P - - )} -
- -
- handleChangeQuery(event.target.value)} - onFocus={() => setIsFocusAuto(true)} - onBlur={() => setIsFocusAuto(false)} - /> - {isFocusAuto && ( - - )} -
- - {isSearchEmpty && ( -

- ‘{query.trim()}’ 검색 결과가 없어요. -

- )} +
+ {/* 비로그인이어도 투표 화면이 어떤 모습인지는 그대로 보여주고 안내 문구만 위에 덮는다. + inert는 아래 UI의 클릭·포커스·접근성 트리 노출을 한 번에 막아, 로그인 없이 조작되는 일이 없다. */} +
+
+ 보유 포인트 {point}P + {changedRows.length > 0 && ( + + {' '} + → 저장 후 {remainingPoint}P + + )} +
- -
- {rows.length === 0 ? ( -

- 검색해서 투표할 아티스트를 담아보세요. -

- ) : ( - rows.map(row => ( - handleChange(row.artist, amount)} - onSubmit={handleSubmit} - onDelete={() => handleDelete(row.artist)} - /> - )) +
+ handleChangeQuery(event.target.value)} + onFocus={() => setIsFocusAuto(true)} + onBlur={() => setIsFocusAuto(false)} + /> + {isFocusAuto && ( + )}
- -
- {isOverPoint && ( -

- 포인트가 {-remainingPoint}P 부족해요. 투표값을 줄여주세요. + {isSearchEmpty && ( +

+ ‘{query.trim()}’ 검색 결과가 없어요.

)} - -
- - - - 투표를 반영할까요? - - 저장하면 차액만큼 포인트가 차감되거나 환불돼요. 이번 달에는 언제든 다시 조정할 수 - 있어요. - - - -
- {changedRows.map(row => ( -
- - - {row.savedAmount}P → {row.amount}P - -
- ))} + +
+ {rows.length === 0 ? ( +

+ 검색해서 투표할 아티스트를 담아보세요. +

+ ) : ( + rows.map(row => ( + handleChange(row.artist, amount)} + onSubmit={handleSubmit} + onDelete={() => handleDelete(row.artist)} + /> + )) + )}
+
-
- {spending >= 0 ? '차감 포인트' : '환불 포인트'} - {Math.abs(spending)}P -
+
+ {isOverPoint && ( +

+ 포인트가 {-remainingPoint}P 부족해요. 투표값을 줄여주세요. +

+ )} + +
+ + + + + 투표를 반영할까요? + + 저장하면 차액만큼 포인트가 차감되거나 환불돼요. 이번 달에는 언제든 다시 조정할 수 + 있어요. + + + +
+ {changedRows.map(row => ( +
+ + + {row.savedAmount}P → {row.amount}P + +
+ ))} +
+ +
+ {spending >= 0 ? '차감 포인트' : '환불 포인트'} + {Math.abs(spending)}P +
+ + + + + +
+
+
- - - - -
-
+ {!isAuthenticated && ( +
+

로그인하면 참여할 수 있어요

+

이 달의 아티스트를 직접 뽑아주세요.

+
+ )}
); } From 80ea61d1abe710f8bbcd6d20dae28e66fdb22730 Mon Sep 17 00:00:00 2001 From: GulSam00 Date: Sat, 29 Aug 2026 01:26:04 +0900 Subject: [PATCH 5/5] =?UTF-8?q?chore=20:=20sitemap=20=EC=9E=AC=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20(#311)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01LrweuC2EWY9Tbee43P62dM --- apps/web/public/sitemap-0.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/web/public/sitemap-0.xml b/apps/web/public/sitemap-0.xml index d99207b..9a8cc02 100644 --- a/apps/web/public/sitemap-0.xml +++ b/apps/web/public/sitemap-0.xml @@ -1,6 +1,6 @@ -https://www.singcode.kr/manifest.webmanifest2026-08-25T16:04:17.180Zweekly0.7 -https://www.singcode.kr/patch-notes2026-08-25T16:04:17.182Zweekly0.7 -https://www.singcode.kr2026-08-25T16:04:17.182Zweekly0.7 +https://www.singcode.kr/manifest.webmanifest2026-08-28T16:24:56.791Zweekly0.7 +https://www.singcode.kr/patch-notes2026-08-28T16:24:56.793Zweekly0.7 +https://www.singcode.kr2026-08-28T16:24:56.794Zweekly0.7 \ No newline at end of file