feat(fsd): 허브·스페이스 중심 UI 목업 구조로 재편
맥락: - 기존 라우트/컴포넌트 구조를 FSD 기준으로 정리하고, /app 허브와 /space 집중 화면 중심의 목업 흐름을 구성하기 위해 변경사항: - App Router 구조를 /landing, /app, /space, /stats, /settings 중심으로 재배치 - entities/session/room/user 더미 데이터와 타입 정의 추가 - features(커스텀 입장, 룸 선택, 체크인, 리액션, 30초 리스타트 등) 단위로 로직 분리 - widgets(허브, 룸 갤러리, 타이머 HUD, 툴 도크 등) 조합형 UI 추가 - shared 공용 UI(Button/Chip/Modal/Toast 등) 및 유틸(cn/useReducedMotion) 정비 - 로그인 후 이동 경로를 /dashboard 에서 /app 으로 변경 - README를 현재 프로젝트 구조/라우트/구현 범위 기준으로 갱신 검증: - npx tsc --noEmit 세션-상태: 허브·스페이스 목업이 FSD 레이어로 동작 가능하도록 정리됨 세션-다음: /space 상단 및 도크의 인원 수 카피를 분위기형 카피로 후속 정리 세션-리스크: build는 네트워크 환경에서 Google Fonts fetch 실패 가능
This commit is contained in:
68
src/entities/session/model/mockSession.ts
Normal file
68
src/entities/session/model/mockSession.ts
Normal file
@@ -0,0 +1,68 @@
|
||||
import type {
|
||||
CheckInPhrase,
|
||||
FocusStatCard,
|
||||
GoalChip,
|
||||
ReactionOption,
|
||||
SoundPreset,
|
||||
TimerPreset,
|
||||
} from './types';
|
||||
|
||||
export const TODAY_ONE_LINER = '오늘의 한 줄: 완벽보다 시작, 한 조각이면 충분해요.';
|
||||
|
||||
export const GOAL_CHIPS: GoalChip[] = [
|
||||
{ id: 'mail-3', label: '메일 3개' },
|
||||
{ id: 'doc-1p', label: '문서 1p' },
|
||||
{ id: 'code-1-function', label: '코딩 1함수' },
|
||||
{ id: 'tidy-10m', label: '정리 10분' },
|
||||
{ id: 'reading-15m', label: '독서 15분' },
|
||||
{ id: 'resume-1paragraph', label: '이력서 1문단' },
|
||||
];
|
||||
|
||||
export const CHECK_IN_PHRASES: CheckInPhrase[] = [
|
||||
{ id: 'arrived', text: '지금 들어왔어요' },
|
||||
{ id: 'sprint-25', text: '25분만 달릴게요' },
|
||||
{ id: 'on-break', text: '휴식 중' },
|
||||
{ id: 'back-focus', text: '다시 집중!' },
|
||||
{ id: 'slow-day', text: '오늘은 천천히' },
|
||||
];
|
||||
|
||||
export const REACTION_OPTIONS: ReactionOption[] = [
|
||||
{ id: 'thumbs-up', emoji: '👍', label: '응원해요' },
|
||||
{ id: 'fire', emoji: '🔥', label: '집중 모드' },
|
||||
{ id: 'clap', emoji: '👏', label: '잘하고 있어요' },
|
||||
{ id: 'heart-hands', emoji: '🫶', label: '연결되어 있어요' },
|
||||
];
|
||||
|
||||
export const SOUND_PRESETS: SoundPreset[] = [
|
||||
{ id: 'deep-white', label: 'Deep White' },
|
||||
{ id: 'rain-focus', label: 'Rain Focus' },
|
||||
{ id: 'cafe-work', label: 'Cafe Work' },
|
||||
{ id: 'ocean-calm', label: 'Ocean Calm' },
|
||||
{ id: 'fireplace', label: 'Fireplace' },
|
||||
{ id: 'silent', label: 'Silent' },
|
||||
];
|
||||
|
||||
export const TIMER_PRESETS: TimerPreset[] = [
|
||||
{ id: '25-5', label: '25/5', focusMinutes: 25, breakMinutes: 5 },
|
||||
{ id: '50-10', label: '50/10', focusMinutes: 50, breakMinutes: 10 },
|
||||
{ id: '90-20', label: '90/20', focusMinutes: 90, breakMinutes: 20 },
|
||||
{ id: 'custom', label: '커스텀' },
|
||||
];
|
||||
|
||||
export const DISTRACTION_DUMP_PLACEHOLDER = [
|
||||
'디자인 QA 요청 확인',
|
||||
'세금계산서 발행 메모',
|
||||
'오후 미팅 질문 1개 정리',
|
||||
];
|
||||
|
||||
export const TODAY_STATS: FocusStatCard[] = [
|
||||
{ id: 'today-focus', label: '오늘 집중 시간', value: '2h 40m', delta: '+35m' },
|
||||
{ id: 'today-cycles', label: '완료한 사이클', value: '5회', delta: '+1' },
|
||||
{ id: 'today-entry', label: '입장 횟수', value: '3회', delta: '유지' },
|
||||
];
|
||||
|
||||
export const WEEKLY_STATS: FocusStatCard[] = [
|
||||
{ id: 'week-focus', label: '최근 7일 집중 시간', value: '14h 20m', delta: '+2h 10m' },
|
||||
{ id: 'week-best-day', label: '최고 몰입일', value: '수요일', delta: '3h 30m' },
|
||||
{ id: 'week-consistency', label: '연속 달성', value: '4일', delta: '+1일' },
|
||||
];
|
||||
Reference in New Issue
Block a user