diff --git a/src/widgets/space-focus-hud/ui/SpaceFocusHudWidget.tsx b/src/widgets/space-focus-hud/ui/SpaceFocusHudWidget.tsx index 65d207f..7bfb307 100644 --- a/src/widgets/space-focus-hud/ui/SpaceFocusHudWidget.tsx +++ b/src/widgets/space-focus-hud/ui/SpaceFocusHudWidget.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useRef, useState } from 'react'; -import type { HudStatusLineItem, HudStatusLinePayload } from '@/shared/lib/useHudStatusLine'; +import type { HudStatusLinePayload } from '@/shared/lib/useHudStatusLine'; import { useReducedMotion } from '@/shared/lib/useReducedMotion'; import { SpaceTimerHudWidget } from '@/widgets/space-timer-hud'; import { GoalCompleteSheet } from './GoalCompleteSheet'; @@ -10,8 +10,6 @@ interface SpaceFocusHudWidgetProps { timerLabel: string; visible: boolean; onGoalUpdate: (nextGoal: string) => void; - statusLine: HudStatusLineItem | null; - onStatusAction: () => void; onStatusMessage: (payload: HudStatusLinePayload) => void; } @@ -20,8 +18,6 @@ export const SpaceFocusHudWidget = ({ timerLabel, visible, onGoalUpdate, - statusLine, - onStatusAction, onStatusMessage, }: SpaceFocusHudWidgetProps) => { const reducedMotion = useReducedMotion(); @@ -100,18 +96,9 @@ export const SpaceFocusHudWidget = ({ { if (reducedMotion) { playbackStateRef.current = state; diff --git a/src/widgets/space-timer-hud/ui/SpaceTimerHudWidget.tsx b/src/widgets/space-timer-hud/ui/SpaceTimerHudWidget.tsx index 91fffc2..d662968 100644 --- a/src/widgets/space-timer-hud/ui/SpaceTimerHudWidget.tsx +++ b/src/widgets/space-timer-hud/ui/SpaceTimerHudWidget.tsx @@ -12,13 +12,8 @@ interface SpaceTimerHudWidgetProps { goal: string; className?: string; isImmersionMode?: boolean; - statusLine?: { - message: string; - actionLabel?: string; - } | null; onPlaybackStateChange?: (state: 'running' | 'paused') => void; onGoalCompleteRequest?: () => void; - onStatusAction?: () => void; } const HUD_ACTIONS = [ @@ -32,10 +27,8 @@ export const SpaceTimerHudWidget = ({ goal, className, isImmersionMode = false, - statusLine = null, onPlaybackStateChange, onGoalCompleteRequest, - onStatusAction, }: SpaceTimerHudWidgetProps) => { const { isBreatheMode, triggerRestart } = useRestart30s(); const normalizedGoal = goal.trim().length > 0 ? goal.trim() : '이번 한 조각을 설정해 주세요.'; @@ -132,30 +125,6 @@ export const SpaceTimerHudWidget = ({ /> -
-
- {statusLine?.message ?? ''} - {statusLine?.actionLabel ? ( - - ) : null} -
-
); diff --git a/src/widgets/space-workspace/ui/FocusTopToast.tsx b/src/widgets/space-workspace/ui/FocusTopToast.tsx new file mode 100644 index 0000000..a225d91 --- /dev/null +++ b/src/widgets/space-workspace/ui/FocusTopToast.tsx @@ -0,0 +1,44 @@ +import { cn } from '@/shared/lib/cn'; + +interface FocusTopToastProps { + visible: boolean; + message: string; + actionLabel?: string; + onAction?: () => void; +} + +export const FocusTopToast = ({ + visible, + message, + actionLabel, + onAction, +}: FocusTopToastProps) => { + return ( +
+
+ {message} + {actionLabel ? ( + + ) : null} +
+
+ ); +}; diff --git a/src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx b/src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx index 1118f11..b7111e4 100644 --- a/src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx +++ b/src/widgets/space-workspace/ui/SpaceWorkspaceWidget.tsx @@ -20,6 +20,7 @@ import { useHudStatusLine } from '@/shared/lib/useHudStatusLine'; import { SpaceFocusHudWidget } from '@/widgets/space-focus-hud'; import { SpaceSetupDrawerWidget } from '@/widgets/space-setup-drawer'; import { SpaceToolsDockWidget } from '@/widgets/space-tools-dock'; +import { FocusTopToast } from './FocusTopToast'; type WorkspaceMode = 'setup' | 'focus'; type SelectionOverride = { @@ -378,8 +379,6 @@ export const SpaceWorkspaceWidget = () => { goal={goalInput.trim()} timerLabel={selectedTimerLabel} visible={isFocusMode} - statusLine={activeStatus} - onStatusAction={runActiveAction} onStatusMessage={pushStatusLine} onGoalUpdate={(nextGoal) => { setGoalInput(nextGoal); @@ -387,6 +386,13 @@ export const SpaceWorkspaceWidget = () => { }} /> + +