Skip to content

184 feat 달력 UI 수정 및 아이콘 그림자 추가#185

Merged
ff1451 merged 2 commits intodevelopfrom
184-feat-달력-ui-수정-및-아이콘-그림자-추가
Mar 12, 2026

Hidden character warning

The head ref may contain hidden characters: "184-feat-\ub2ec\ub825-ui-\uc218\uc815-\ubc0f-\uc544\uc774\ucf58-\uadf8\ub9bc\uc790-\ucd94\uac00"
Merged

184 feat 달력 UI 수정 및 아이콘 그림자 추가#185
ff1451 merged 2 commits intodevelopfrom
184-feat-달력-ui-수정-및-아이콘-그림자-추가

Conversation

@ff1451
Copy link
Collaborator

@ff1451 ff1451 commented Mar 12, 2026

Summary by CodeRabbit

변경 사항

  • 스타일

    • 알림 아이콘에 섬세한 그림자 효과가 추가되었습니다.
  • 개선

    • 일정 상세 보기에서 날짜 헤더가 제거되었습니다.

@ff1451 ff1451 self-assigned this Mar 12, 2026
@ff1451 ff1451 linked an issue Mar 12, 2026 that may be closed by this pull request
@coderabbitai
Copy link

coderabbitai bot commented Mar 12, 2026

Walkthrough

세 개의 컴포넌트에서 UI 개선 작업이 진행되었습니다. NotificationBell에는 아이콘에 드롭섀도 스타일이 추가되었고, ScheduleDetail에서는 일정의 월/일 헤더가 제거되었습니다. Schedule/index에서는 바텀시트 구조를 절대 위치 기반에서 Portal 기반 고정 위치로 변경하고, CSS 변수를 활용한 높이 계산이 도입되었습니다.

Possibly related PRs

  • BCSDLab/KONECT\_FRONT\_END#167: Schedule/index.tsx와 ScheduleDetail.tsx 컴포넌트의 바텀시트 레이아웃 및 헤더 렌더링 로직이 직접적으로 연관되어 있습니다.
🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목이 변경 사항을 정확히 반영합니다: 달력 UI 수정(ScheduleDetail/Schedule 컴포넌트 변경)과 아이콘 그림자 추가(NotificationBell).

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 184-feat-달력-ui-수정-및-아이콘-그림자-추가

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
src/pages/Schedule/index.tsx (2)

90-90: 페이지 루트는 Layout로 감싸는 편이 맞습니다.

지금처럼 높이를 페이지에서 직접 계산하면 헤더/배경/하단 영역 제어가 이 파일에 계속 남습니다. 이 페이지도 Layout + showBottomNav/contentClassName 조합으로 맞춰주세요.

As per coding guidelines: "src/pages/**/*.tsx: Pass showBottomNav (bottom tab display) and contentClassName (background color, etc.) props to Layout component"

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/pages/Schedule/index.tsx` at line 90, Wrap the page root JSX in the
Layout component instead of manually computing heights: replace the top-level
div with Layout and pass the props showBottomNav and contentClassName to control
bottom tab visibility and background styling; remove the manual height calc on
the div (the element with className "relative flex
h-[calc(var(--viewport-height)-44px)] flex-col overflow-hidden bg-white") and
move any remaining layout-specific classNames into Layout's contentClassName so
header/footer/background are managed by Layout.

132-135: 조건부 Tailwind 클래스는 cn()으로 합쳐주세요.

Line 133의 템플릿 문자열은 이 저장소의 클래스 병합 규칙과 어긋납니다. cn()으로 바꾸면 조건 분기가 더 안전하고 읽기 쉽습니다.

예시
+ import { cn } from '@/utils/ts/cn';
...
-            className={`fixed inset-0 z-[31] bg-black/40 transition-opacity duration-300 ${isSheetExpanded ? 'pointer-events-auto opacity-100' : 'pointer-events-none opacity-0'}`}
+            className={cn(
+              'fixed inset-0 z-[31] bg-black/40 transition-opacity duration-300',
+              isSheetExpanded ? 'pointer-events-auto opacity-100' : 'pointer-events-none opacity-0'
+            )}
As per coding guidelines: "Use `cn()` utility from `src/utils/ts/cn.ts` to merge Tailwind CSS classes"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/pages/Schedule/index.tsx` around lines 132 - 135, Replace the
template-string Tailwind usage with the project's classnames helper: import and
use the cn() utility to merge static and conditional classes for the backdrop
div (where isSheetExpanded controls 'pointer-events-auto opacity-100' vs
'pointer-events-none opacity-0'); update the JSX that currently builds the
className with a template literal to call cn('fixed inset-0 z-[31] bg-black/40
transition-opacity duration-300', isSheetExpanded ? 'pointer-events-auto
opacity-100' : 'pointer-events-none opacity-0') and keep the onClick handler
(setIsSheetExpanded(false)) unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/pages/Schedule/index.tsx`:
- Around line 137-155: The bottom sheet lacks modal accessibility: add
role="dialog" and aria-modal="true" to the section rendered by Schedule (the
sheet using isSheetExpanded), implement focus management by saving
document.activeElement before opening, moving focus into a tabbable element
inside the sheet (use a ref on the sheet container or first focusable child)
when isSheetExpanded becomes true, restore focus to the saved element on close
(setIsSheetExpanded false), and add an Escape key handler (tied to the same
logic that handleSheetTouchEnd/setIsSheetExpanded) to close the sheet; also
ensure background content is hidden from assistive tech (e.g., set aria-hidden
on the main page container while the sheet is open) and consider using a small
focus trap implemented in the Schedule component to keep tab focus cycling
inside the ScheduleDetail content.

---

Nitpick comments:
In `@src/pages/Schedule/index.tsx`:
- Line 90: Wrap the page root JSX in the Layout component instead of manually
computing heights: replace the top-level div with Layout and pass the props
showBottomNav and contentClassName to control bottom tab visibility and
background styling; remove the manual height calc on the div (the element with
className "relative flex h-[calc(var(--viewport-height)-44px)] flex-col
overflow-hidden bg-white") and move any remaining layout-specific classNames
into Layout's contentClassName so header/footer/background are managed by
Layout.
- Around line 132-135: Replace the template-string Tailwind usage with the
project's classnames helper: import and use the cn() utility to merge static and
conditional classes for the backdrop div (where isSheetExpanded controls
'pointer-events-auto opacity-100' vs 'pointer-events-none opacity-0'); update
the JSX that currently builds the className with a template literal to call
cn('fixed inset-0 z-[31] bg-black/40 transition-opacity duration-300',
isSheetExpanded ? 'pointer-events-auto opacity-100' : 'pointer-events-none
opacity-0') and keep the onClick handler (setIsSheetExpanded(false)) unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: cddd71bf-9f1c-4832-892a-a64ef4e58f11

📥 Commits

Reviewing files that changed from the base of the PR and between 024a112 and 425e37f.

📒 Files selected for processing (3)
  • src/components/layout/Header/components/NotificationBell.tsx
  • src/pages/Schedule/components/ScheduleDetail.tsx
  • src/pages/Schedule/index.tsx
💤 Files with no reviewable changes (1)
  • src/pages/Schedule/components/ScheduleDetail.tsx

Comment on lines +137 to +155
<section
className="fixed inset-x-0 bottom-0 z-[32] flex flex-col rounded-t-3xl bg-white shadow-[0_-4px_12px_rgba(0,0,0,0.06)] transition-transform duration-300 ease-out"
style={{
height: `calc(var(--viewport-height) - ${SHEET_TOP_OFFSET}px)`,
transform: isSheetExpanded ? 'translateY(0)' : `translateY(calc(100% - ${PEEK_HEIGHT}px))`,
}}
>
<div
className="flex shrink-0 justify-center pt-3 pb-2"
onTouchStart={handleSheetTouchStart}
onTouchEnd={handleSheetTouchEnd}
>
<div className="h-1 w-8 rounded-full bg-[#D1D5DB]" />
</div>

<div className="flex flex-1 flex-col overflow-hidden">
<ScheduleDetail year={year} month={month} day={day} onItemClick={() => setIsSheetExpanded(true)} />
</div>
</section>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

포털 바텀시트에 모달 접근성 처리가 빠져 있습니다.

이제 UI가 사실상 모달인데 role="dialog"/aria-modal이 없고, 포커스 진입·복귀나 Escape 닫기도 없습니다. 현재 상태면 키보드/스크린리더에서 배경으로 포커스가 빠질 수 있습니다.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/pages/Schedule/index.tsx` around lines 137 - 155, The bottom sheet lacks
modal accessibility: add role="dialog" and aria-modal="true" to the section
rendered by Schedule (the sheet using isSheetExpanded), implement focus
management by saving document.activeElement before opening, moving focus into a
tabbable element inside the sheet (use a ref on the sheet container or first
focusable child) when isSheetExpanded becomes true, restore focus to the saved
element on close (setIsSheetExpanded false), and add an Escape key handler (tied
to the same logic that handleSheetTouchEnd/setIsSheetExpanded) to close the
sheet; also ensure background content is hidden from assistive tech (e.g., set
aria-hidden on the main page container while the sheet is open) and consider
using a small focus trap implemented in the Schedule component to keep tab focus
cycling inside the ScheduleDetail content.

@ff1451 ff1451 merged commit 3ffd925 into develop Mar 12, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feat] 달력 UI 수정 및 아이콘 그림자 추가

1 participant