✨ feat: 포커스 진입 화면 UI 퍼블리싱 #336 - #342
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
✅ Deploy Preview for readingnook ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Eunjin03
left a comment
There was a problem hiding this comment.
고생 많으셨습니다! BottomSheet와 ESLint는 각자 맡은 화면에서 확인해보면 될 것 같습니다~~
| type Props = { | ||
| icon: ReactNode; | ||
| onClick?: () => void; | ||
| className?: string; |
There was a problem hiding this comment.
기존 props를 제거하셨는데, 이 부분에서 생기는 오류는 없었나요 ??
There was a problem hiding this comment.
답변이 늦었습니다 죄송합니다...!!
기존 props를 삭제한 게 아니라 직접 하나씩 선언하던 방식을
React의 표준 button props 타입을 재사용하는 방식으로 확장한 것입니다!
(React에서 정의해둔 보편적인 HTML button 속성 타입을 FAB Props에 합쳐서 사용하는 방식)
오히려 더 확장했다고 봐주시면 됩니다! 그래서 오류 사항은 발견되지 않았어요~
There was a problem hiding this comment.
불친절 했던 것 같아 설명을 추가해봤습니다! 보시고 건의사항 있으시면 말씀해주세요!
기존에는 FAB에서 사용하는 속성을 아래처럼 하나씩 직접 선언하고 있었습니다
type Props = {
icon: ReactNode;
onClick?: () => void;
className?: string;
};이번에 FAB의 루트 요소를 div에서 실제 button으로 변경하면서
React에서 기본으로(TypeScript 타입 정의에서) 제공하는 <button> 속성 타입인
ButtonHTMLAttributes<HTMLButtonElement>를 Props에 합성하도록 수정한 겁니당
type Props = {
icon: ReactNode;
size?: FabSize;
variant?: FabVariant;
} & Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children">;따라서 기존의 onClick, className도 계속 사용할 수 있어요!
추가로 aria-label, disabled, type, onKeyDown 등
실제 HTML button이 지원하는 속성도 별도 선언 없이 전달할 수 있습니다. 확장 된거에요!
Omit<..., "children">은 기본 button 속성 중children만 제외한다는 의미입니다.
FAB 내부 콘텐츠는children이 아니라 필수iconprop으로 받도록 사용 방식을 통일하기 위해 제외했습니다.
ButtonHTMLAttributes는 별도 라이브러리가 아니라 React에서 제공하는 TypeScript 타입Omit은 TypeScript 기본 유틸리티 타입
런타임 동작이나 번들 크기에는 영향을 주지 않고 타입 검사에만 사용됩니다
기존 기록 화면의 onClick, className 사용처도 그대로 유지되고
전체 TypeScript 빌드와 관련 ESLint 검사로 오류 없는 것 확인했어요!
There was a problem hiding this comment.
허걱 이런 방법이 있는지 몰랐네요! 새로운 거 알려주셔서 감사합니다🥹🥹 레전드 친절하셔요...
🚀 관련 이슈
🔑 작업 내용
포커스 진행 화면
포커스 세션 화면에서만 배경 영역을 보정해 패딩으로 인한 화면 공백 문제를 해결했습니다.
기록 작성 화면(
/report/:bookId/create)을 다녀오는 동안에도 타이머가 계속 흐릅니다.포커스 종료 플로우
포커스 종료하기클릭 시 같은 화면 위에 Bottom Sheet가 열리고, 열려 있는 동안만 타이머가 일시정지됩니다./focus로 이동하고포커스를 종료했어요.Toast를 4초간 노출합니다.공용 컴포넌트 및 코드 정리
FAB: 기존 기본 모양을 유지하면서실제
button요소,size,variant, native button attribute를 지원하도록 하위호환 확장했습니다.Checkbox: 기존 내부 상태 방식과 부모 제어 방식을 모두 지원하도록 controlled/uncontrolled 구조로 확장했습니다.BottomSheet: 375px 미만 viewport overflow 방지와 하단 safe area padding을 보완했습니다.Solid,Icon,BookCover: 크기 클래스 충돌을 해소하고 Tailwind v4 canonical class로 정리했습니다.EmotionRecordsPage의 기존 FAB에는 아이콘 버튼의 용도를 전달하도록aria-label을 추가했습니다.pages/focus하위에 배치했습니다.📷 스크린샷
테마 선택 → 세션 진행 → 기록 화면 이동 → 종료 시트 → 포커스 메인/Toast 흐름을 로컬 확인했습니다.
🌐 공유 사항 to 리뷰어
리뷰 요청 범위
size/variant기본값과 native button props 전달w-full max-w-93.75및 safe area 적용이 다른 사용 화면에 미치는 영향후속 구현용 미사용 에셋
book-cover-placeholder.png는 후속 화면 준비용으로 함께 추가했으며 현재 코드에서는 참조하지 않습니다.🚨 이슈 사항
npm run lint는 이번 변경과 무관한 기존 파일 오류 29건·경고 1건으로 실패합니다. 이번 변경 파일만 대상으로 한 ESLint는 통과했습니다.