feat(immersion): 몰입 모드 상단 액션을 나가기로 전환

맥락:

- 몰입 모드 ON에서 상단 우측 액션이 허브 이동으로 보이는 혼선을 줄이고 즉시 이탈 동선을 제공하기 위해

변경사항:

- 몰입 모드 훅에 exitImmersionMode 액션 추가

- 몰입 모드 ON 시 상단 우측 액션을 나가기 버튼으로 전환

- 나가기 클릭 시 토스트(나가기(더미)) 노출 후 몰입 모드 OFF 처리

- docs/90_current_state.md, docs/session_brief.md 최신 상태 반영

검증:

- npx tsc --noEmit

세션-상태: 몰입 모드 ON에서 상단 우측 액션은 나가기로 동작함

세션-다음: RoomSheet/도크의 인원수 중심 정보를 분위기형 정보로 교체

세션-리스크: 터치 환경에서 미니 레일 발견성이 낮을 수 있어 UX 보완이 필요
This commit is contained in:
2026-02-27 14:22:56 +09:00
parent e361755a91
commit e2fb720a55
5 changed files with 43 additions and 18 deletions

View File

@@ -4,12 +4,14 @@ interface SpaceChromeWidgetProps {
roomName: string;
vibeLabel: string;
isImmersionMode: boolean;
onExitImmersionMode: () => void;
}
export const SpaceChromeWidget = ({
roomName,
vibeLabel,
isImmersionMode,
onExitImmersionMode,
}: SpaceChromeWidgetProps) => {
return (
<div className="px-4 pt-2 sm:px-6">
@@ -21,23 +23,23 @@ export const SpaceChromeWidget = ({
<p className="text-sm font-medium tracking-tight text-white/90">VibeRoom</p>
</div>
<Link
href="/app"
className={
isImmersionMode
? 'inline-flex h-7 w-7 items-center justify-center rounded-md bg-white/8 text-[11px] text-white/74 transition hover:bg-white/14 hover:text-white'
: 'rounded-lg bg-white/8 px-2.5 py-1.5 text-xs text-white/82 transition hover:bg-white/14 hover:text-white'
}
>
{isImmersionMode ? (
<>
<span aria-hidden></span>
<span className="sr-only"> </span>
</>
) : (
'허브로 돌아가기'
)}
</Link>
{isImmersionMode ? (
<button
type="button"
onClick={onExitImmersionMode}
className="inline-flex items-center gap-1 rounded-md bg-white/8 px-2 py-1 text-[11px] text-white/74 transition hover:bg-white/14 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sky-200/80"
>
<span aria-hidden></span>
<span></span>
</button>
) : (
<Link
href="/app"
className="rounded-lg bg-white/8 px-2.5 py-1.5 text-xs text-white/82 transition hover:bg-white/14 hover:text-white"
>
</Link>
)}
</header>
{!isImmersionMode ? (

View File

@@ -19,7 +19,7 @@ export const SpaceSkeletonWidget = () => {
const soundFromQuery = searchParams.get('sound');
const room = useMemo(() => getRoomById(roomId) ?? ROOM_THEMES[0], [roomId]);
const { isImmersionMode, toggleImmersionMode } = useImmersionMode();
const { isImmersionMode, toggleImmersionMode, exitImmersionMode } = useImmersionMode();
const initialSoundPresetId =
SOUND_PRESETS.find((preset) => preset.id === soundFromQuery)?.id ??
SOUND_PRESETS[0].id;
@@ -66,6 +66,7 @@ export const SpaceSkeletonWidget = () => {
roomName={room.name}
vibeLabel={room.vibeLabel}
isImmersionMode={isImmersionMode}
onExitImmersionMode={exitImmersionMode}
/>
<main className="flex-1" />