From 3fbeee059af5bee27b63cde6071e4b1a08c99aca Mon Sep 17 00:00:00 2001 From: corpi Date: Thu, 5 Mar 2026 15:12:00 +0900 Subject: [PATCH] =?UTF-8?q?refactor(focus):=20=EB=AA=B0=EC=9E=85=EB=AA=A8?= =?UTF-8?q?=EB=93=9C=20=ED=86=A0=EA=B8=80=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F?= =?UTF-8?q?=20Focus-First=20=EA=B8=B0=EB=B3=B8=20=EA=B5=AC=EC=A1=B0?= =?UTF-8?q?=EB=A1=9C=20=EC=A0=84=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 맥락: - 몰입모드 토글은 상태 인지 비용을 높여 집중 흐름을 끊고, Quick Controls 헤더를 대시보드형으로 보이게 만들고 있었습니다. 변경사항: - Quick Controls에서 기본/몰입 모드 토글 UI를 완전히 제거했습니다. - Focus 화면의 HUD 톤은 외부 모드 상태 없이 항상 몰입 톤으로 렌더링되도록 고정했습니다. - workspace/tools-dock/focus-hud 간 모드 토글 상태 전달 경로를 정리해, 컨트롤은 패널을 열었을 때만 보이는 Focus-First 흐름으로 단순화했습니다. 검증: - npx tsc --noEmit 세션-상태: 모드 토글 없이 패널 열림 상태만으로 컨트롤 노출이 정의됩니다. 세션-다음: (선택) 컨트롤 자동 숨김 표시 정책 옵션을 패널 내부에 추가합니다. 세션-리스크: 자동 숨김 정책이 아직 없어 패널을 열어둔 채 방치되는 경우 수동 닫기가 필요합니다. --- .../ui/ControlCenterSheetWidget.tsx | 39 ------------------- .../ui/SpaceFocusHudWidget.tsx | 4 +- .../ui/SpaceToolsDockWidget.tsx | 6 --- .../ui/SpaceWorkspaceWidget.tsx | 4 -- 4 files changed, 1 insertion(+), 52 deletions(-) diff --git a/src/widgets/control-center-sheet/ui/ControlCenterSheetWidget.tsx b/src/widgets/control-center-sheet/ui/ControlCenterSheetWidget.tsx index 6fb3c52..4e5c958 100644 --- a/src/widgets/control-center-sheet/ui/ControlCenterSheetWidget.tsx +++ b/src/widgets/control-center-sheet/ui/ControlCenterSheetWidget.tsx @@ -16,11 +16,9 @@ interface ControlCenterSheetWidgetProps { rooms: RoomTheme[]; selectedRoomId: string; selectedTimerLabel: string; - isImmersionMode: boolean; sceneRecommendedSoundLabel: string; sceneRecommendedTimerLabel: string; timerPresets: TimerPreset[]; - onImmersionModeChange: (next: boolean) => void; onSelectRoom: (roomId: string) => void; onSelectTimer: (timerLabel: string) => void; onLockedClick: (source: string) => void; @@ -49,11 +47,9 @@ export const ControlCenterSheetWidget = ({ rooms, selectedRoomId, selectedTimerLabel, - isImmersionMode, sceneRecommendedSoundLabel, sceneRecommendedTimerLabel, timerPresets, - onImmersionModeChange, onSelectRoom, onSelectTimer, onLockedClick, @@ -74,41 +70,6 @@ export const ControlCenterSheetWidget = ({ return (
-
-
-

모드

-
- - -
-
-

- {isImmersionMode ? '필수만 남기고 숨김' : '모든 컨트롤 표시'} -

-
-
void; statusLine: HudStatusLineItem | null; onStatusAction: () => void; @@ -20,7 +19,6 @@ export const SpaceFocusHudWidget = ({ goal, timerLabel, visible, - isImmersionMode, onGoalUpdate, statusLine, onStatusAction, @@ -110,7 +108,7 @@ export const SpaceFocusHudWidget = ({ } : null } - isImmersionMode={isImmersionMode} + isImmersionMode className="pr-[4.2rem]" onGoalCompleteRequest={handleOpenCompleteSheet} onStatusAction={onStatusAction} diff --git a/src/widgets/space-tools-dock/ui/SpaceToolsDockWidget.tsx b/src/widgets/space-tools-dock/ui/SpaceToolsDockWidget.tsx index 09a6151..f69e191 100644 --- a/src/widgets/space-tools-dock/ui/SpaceToolsDockWidget.tsx +++ b/src/widgets/space-tools-dock/ui/SpaceToolsDockWidget.tsx @@ -20,7 +20,6 @@ import { QuickSoundPopover } from './popovers/QuickSoundPopover'; import { InboxToolPanel } from './panels/InboxToolPanel'; interface SpaceToolsDockWidgetProps { isFocusMode: boolean; - isImmersionMode: boolean; rooms: RoomTheme[]; selectedRoomId: string; selectedTimerLabel: string; @@ -43,14 +42,12 @@ interface SpaceToolsDockWidgetProps { onRestoreThought: (thought: RecentThought) => void; onClearInbox: () => RecentThought[]; onResetToSceneRecommended: () => void; - onImmersionModeChange: (next: boolean) => void; onStatusMessage: (payload: HudStatusLinePayload) => void; onExitRequested: () => void; } export const SpaceToolsDockWidget = ({ isFocusMode, - isImmersionMode, rooms, selectedRoomId, selectedTimerLabel, @@ -73,7 +70,6 @@ export const SpaceToolsDockWidget = ({ onRestoreThought, onClearInbox, onResetToSceneRecommended, - onImmersionModeChange, onStatusMessage, onExitRequested, }: SpaceToolsDockWidgetProps) => { @@ -415,11 +411,9 @@ export const SpaceToolsDockWidget = ({ rooms={rooms} selectedRoomId={selectedRoomId} selectedTimerLabel={selectedTimerLabel} - isImmersionMode={isImmersionMode} sceneRecommendedSoundLabel={sceneRecommendedSoundLabel} sceneRecommendedTimerLabel={sceneRecommendedTimerLabel} timerPresets={timerPresets} - onImmersionModeChange={onImmersionModeChange} onSelectRoom={(roomId) => { onRoomSelect(roomId); }} diff --git a/src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx b/src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx index acb5f4b..b62feb4 100644 --- a/src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx +++ b/src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx @@ -167,7 +167,6 @@ export const SpaceWorkspaceWidget = () => { ); const [workspaceMode, setWorkspaceMode] = useState('setup'); - const [isImmersionMode, setImmersionMode] = useState(false); const [selectedRoomId, setSelectedRoomId] = useState(initialRoomId); const [selectedTimerLabel, setSelectedTimerLabel] = useState(initialTimerLabel); const [goalInput, setGoalInput] = useState(initialGoal); @@ -378,7 +377,6 @@ export const SpaceWorkspaceWidget = () => { goal={goalInput.trim()} timerLabel={selectedTimerLabel} visible={isFocusMode} - isImmersionMode={isImmersionMode} statusLine={activeStatus} onStatusAction={runActiveAction} onStatusMessage={pushStatusLine} @@ -407,8 +405,6 @@ export const SpaceWorkspaceWidget = () => { onSetSoundVolume={setMasterVolume} isSoundMuted={isMuted} onSetSoundMuted={setMuted} - isImmersionMode={isImmersionMode} - onImmersionModeChange={setImmersionMode} onCaptureThought={(note) => addThought(note, selectedRoom.name)} onDeleteThought={removeThought} onSetThoughtCompleted={setThoughtCompleted}