Skip to content

7.6 1차 업데이트 - #469

Merged
yhi9839 merged 2 commits into
mainfrom
dev
Jul 6, 2026
Merged

yhi9839 merged 2 commits into
mainfrom
dev

Conversation

@yhi9839

@yhi9839 yhi9839 commented Jul 6, 2026 •

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • Style
    • Updated many buttons and links across admin, settings, stories, groups, and modals to use more consistent hover and transition effects.
    • Improved visual feedback on actions like login, save, submit, cancel, subscribe, report, block, and create group.
    • Some buttons now use clearer background-color hover states instead of opacity or brightness changes.
    • Standardized several shared button styles for a more uniform look and smoother interactions.

@vercel

vercel Bot commented Jul 6, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
checkmo Ready Ready Preview, Comment Jul 6, 2026 5:38am

@coderabbitai

coderabbitai Bot commented Jul 6, 2026 •

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR is a broad Tailwind CSS styling pass across buttons and links throughout the app, replacing brightness/opacity-based hover effects with background-color-based hover styles using transition-colors/transition-all. It also introduces shared button class constants and a hover-color derivation utility in ButtonWithoutImg. No functional logic changes.

Changes

Button/link hover styling unification

Layer / File(s) Summary
Shared button style constants
src/app/(main)/groups/[id]/admin/edit/page.tsx, src/app/(main)/groups/create/CreateGroupPageClient.tsx
Introduces PRIMARY_FILLED_BUTTON_CLASS, SELECTABLE_BUTTON_ACTIVE_CLASS, SELECTABLE_BUTTON_IDLE_CLASS constants and applies them to multiple buttons replacing inline class strings.
ButtonWithoutImg hover color derivation
src/components/base-ui/button_without_img.tsx, src/app/(main)/groups/[id]/GroupDetailClient.tsx, src/app/(main)/groups/GroupsPageClient.tsx
Adds normalizeCssColor, DEFAULT_HOVER_COLOR_BY_TOKEN, getDefaultHoverColor, consolidates hover logic via shouldUseHover, adds transition-colors, and simplifies dependent button hover classes to translate-only.
Admin/auth/group/story action button hover updates
src/app/(admin)/admin/..., src/app/(main)/groups/[id]/admin/..., src/app/(main)/setting/..., src/app/(main)/stories/...
Replaces opacity/brightness hover with background-color hover and transition-colors on submit/cancel/action buttons.
Subscribe/follow button hover states
src/components/base-ui/Admin/stories/bookstory_detail.tsx, src/components/base-ui/BookStory/..., src/components/base-ui/home/Recommendation/..., src/components/base-ui/home/Subscription/..., src/components/base-ui/Profile/OtherUser/ProfileUserInfo.tsx
Adds isFollowing-conditional hover background classes to subscribe/follow buttons.
Modal confirm/cancel hover styling
src/components/base-ui/Admin/ConfirmModal.tsx, src/components/common/ConfirmModal.tsx, src/components/common/UnsavedChangesConfirmModal.tsx, src/components/base-ui/Bookcase/bookid/BookshelfDeleteConfirmModal.tsx, src/components/common/modals/report-block/*
Updates hover/transition classes on confirm/cancel/report/block buttons across modal components.
Standalone component and landing hover updates
src/components/base-ui/Comment/comment_edit_form.tsx, src/components/base-ui/Float.tsx, src/components/base-ui/Join/steps/ProfileImage/ProfileImageUploader.tsx, src/components/base-ui/Landing/*, src/components/base-ui/Login/components/LoginForm.tsx, src/components/base-ui/Search/search_bookresult.tsx, src/components/base-ui/Settings/EditProfile/ProfileImageSection.tsx, src/components/base-ui/home/Club/*
Updates hover/transition classes on various standalone buttons independently of shared constants.

Estimated code review effort: 2 (Simple) | ~15 minutes

Possibly related PRs

  • checkmo2025/FE#251: Overlaps with hover/transition styling changes in the same ConfirmModal component.
  • checkmo2025/FE#259: Both PRs modify ConfirmModal.tsx, one for hover styling, one for scroll-lock behavior.
  • checkmo2025/FE#357: Overlapping className updates on shared button/link components like ProfileEditPageClient, PasswordChangePageClient, SupportPageClient.

Suggested reviewers: shinwokkang

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive 제목이 날짜/차수만 담고 있어 변경 내용을 구체적으로 전달하지 못합니다. 주요 변경을 드러내는 제목으로 바꾸세요. 예: 버튼 hover 스타일을 전반적으로 정리/통일.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

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.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request standardizes button hover states, active states, and transitions across the application to ensure visual consistency. It replaces various custom hover effects (like opacity and brightness adjustments) with consistent color-based hover classes (such as hover:bg-primary-3 and hover:bg-Subbrown-3) and adds appropriate transition classes. Additionally, it introduces reusable button class constants in group creation/editing pages and implements dynamic hover color mapping in the ButtonWithoutImg component based on color tokens. I have no further feedback to provide as there are no review comments.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (2)
src/app/(main)/setting/support/SupportPageClient.tsx (1)

43-43: 📐 Maintainability & Code Quality | 🔵 Trivial

Keep this button on the same color-hover pattern as the rest of the update.

hover:brightness-90 dims the whole button, not just the background, and transition-all is broader than needed here. If the intent is consistency with the other updated actions, this should stay on a background-color hover with transition-colors.

♻️ Suggested tweak
- className="w-full h-[56px] bg-primary-3 text-white rounded-[12px] subhead_4_1 hover:brightness-90 transition-all shadow-md active:scale-[0.98] cursor-pointer"
+ className="w-full h-[56px] bg-primary-3 text-white rounded-[12px] subhead_4_1 hover:bg-primary-2 transition-colors shadow-md active:scale-[0.98] cursor-pointer"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/app/`(main)/setting/support/SupportPageClient.tsx at line 43, The button
styling in SupportPageClient should match the rest of the updated actions by
using a background-color hover instead of dimming the whole element. Update the
button className on the support page to replace hover:brightness-90 with the
same hover background treatment used elsewhere, and narrow the animation from
transition-all to transition-colors so the hover behavior stays consistent.
src/components/base-ui/Settings/EditProfile/ProfileImageSection.tsx (1)

84-84: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider extracting duplicated button className.

The upload and reset buttons share an identical className string. Since this PR already introduces shared button class constants elsewhere (e.g., PRIMARY_FILLED_BUTTON_CLASS in the group edit/create flows), extracting a local constant here would reduce duplication and improve consistency.

♻️ Suggested refactor
+const PRIMARY_BUTTON_CLASS =
+  "flex flex-1 items-center justify-center gap-[10px] rounded-[8px] bg-primary-1 px-[16px] cursor-pointer transition-colors hover:bg-primary-3 h-[36px] md:h-[48px]";
+
 <button
   onClick={handleUploadClick}
-  className="flex flex-1 items-center justify-center gap-[10px] rounded-[8px] bg-primary-1 px-[16px] cursor-pointer transition-colors hover:bg-primary-3
-  h-[36px] md:h-[48px]"
+  className={PRIMARY_BUTTON_CLASS}
 >
   ...
 <button
   onClick={onReset}
-  className="flex flex-1 items-center justify-center gap-[10px] rounded-[8px] bg-primary-1 px-[16px] cursor-pointer transition-colors hover:bg-primary-3
-  h-[36px] md:h-[48px]"
+  className={PRIMARY_BUTTON_CLASS}
 >

Also applies to: 97-97

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/base-ui/Settings/EditProfile/ProfileImageSection.tsx` at line
84, The upload and reset buttons in ProfileImageSection share the same long
className string, so extract it into a local shared constant and reuse it for
both button elements. Update the JSX in ProfileImageSection to reference that
constant instead of duplicating the className, following the same pattern used
by shared button class constants like PRIMARY_FILLED_BUTTON_CLASS in the group
edit/create flows.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/app/`(main)/groups/create/CreateGroupPageClient.tsx:
- Around line 37-43: The button style constants are duplicated in
CreateGroupPageClient and the group admin edit page, so move
PRIMARY_FILLED_BUTTON_CLASS, SELECTABLE_BUTTON_ACTIVE_CLASS, and
SELECTABLE_BUTTON_IDLE_CLASS into a shared module and import them from both
places. Create a common source for these group button styles so the values are
defined once and stay in sync, then update the existing references in
CreateGroupPageClient and the edit page to use the shared exports.
- Around line 379-385: The button styling in CreateGroupPageClient mixes two
conflicting disabled opacity utilities when DuplicationCheckisConfirmed is true,
so update the conditional class logic to keep only one disabled-opacity rule per
state. In the className branch around DuplicationCheckisConfirmed, make the
default disabled state use the normal disabled opacity, and in the confirmed
state replace it with the intended disabled opacity value without also
inheriting the other disabled opacity utility from the shared base classes.

---

Nitpick comments:
In `@src/app/`(main)/setting/support/SupportPageClient.tsx:
- Line 43: The button styling in SupportPageClient should match the rest of the
updated actions by using a background-color hover instead of dimming the whole
element. Update the button className on the support page to replace
hover:brightness-90 with the same hover background treatment used elsewhere, and
narrow the animation from transition-all to transition-colors so the hover
behavior stays consistent.

In `@src/components/base-ui/Settings/EditProfile/ProfileImageSection.tsx`:
- Line 84: The upload and reset buttons in ProfileImageSection share the same
long className string, so extract it into a local shared constant and reuse it
for both button elements. Update the JSX in ProfileImageSection to reference
that constant instead of duplicating the className, following the same pattern
used by shared button class constants like PRIMARY_FILLED_BUTTON_CLASS in the
group edit/create flows.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 86457dfa-614b-4a7c-bf55-2cc24d6e1280

📥 Commits

Reviewing files that changed from the base of the PR and between 0912e03 and 09edb78.

📒 Files selected for processing (43)
  • src/app/(admin)/admin/(app)/news/[id]/page.tsx
  • src/app/(admin)/admin/(app)/news/page.tsx
  • src/app/(admin)/admin/(auth)/login/page.tsx
  • src/app/(main)/groups/GroupsPageClient.tsx
  • src/app/(main)/groups/[id]/GroupDetailClient.tsx
  • src/app/(main)/groups/[id]/admin/bookcase/[meetingId]/edit/page.tsx
  • src/app/(main)/groups/[id]/admin/bookcase/new/page.tsx
  • src/app/(main)/groups/[id]/admin/edit/page.tsx
  • src/app/(main)/groups/[id]/admin/notice/[noticeId]/page.tsx
  • src/app/(main)/groups/[id]/admin/notice/new/page.tsx
  • src/app/(main)/groups/create/CreateGroupPageClient.tsx
  • src/app/(main)/setting/password/PasswordChangePageClient.tsx
  • src/app/(main)/setting/profile/ProfileEditPageClient.tsx
  • src/app/(main)/setting/support/SupportPageClient.tsx
  • src/app/(main)/stories/[id]/edit/StoryEditPageClient.tsx
  • src/app/(main)/stories/new/StoryNewPageClient.tsx
  • src/components/base-ui/Admin/ConfirmModal.tsx
  • src/components/base-ui/Admin/stories/bookstory_detail.tsx
  • src/components/base-ui/BookStory/Common/bookstory_card.tsx
  • src/components/base-ui/BookStory/Detatil/bookstory_detail.tsx
  • src/components/base-ui/Bookcase/bookid/BookshelfDeleteConfirmModal.tsx
  • src/components/base-ui/Comment/comment_edit_form.tsx
  • src/components/base-ui/Float.tsx
  • src/components/base-ui/Join/steps/ProfileImage/ProfileImageUploader.tsx
  • src/components/base-ui/Landing/LandingChatSection.tsx
  • src/components/base-ui/Landing/LandingHero.tsx
  • src/components/base-ui/Landing/LandingNav.tsx
  • src/components/base-ui/Login/components/LoginForm.tsx
  • src/components/base-ui/Profile/OtherUser/ProfileUserInfo.tsx
  • src/components/base-ui/Search/search_bookresult.tsx
  • src/components/base-ui/Settings/EditProfile/ProfileImageSection.tsx
  • src/components/base-ui/button_without_img.tsx
  • src/components/base-ui/home/Club/HomeClubSection.tsx
  • src/components/base-ui/home/Club/home_bookclub.tsx
  • src/components/base-ui/home/Recommendation/list_subscribe_element.tsx
  • src/components/base-ui/home/Recommendation/list_subscribe_large.tsx
  • src/components/base-ui/home/Subscription/list_subscribe_element.tsx
  • src/components/base-ui/home/Subscription/list_subscribe_large.tsx
  • src/components/common/ConfirmModal.tsx
  • src/components/common/UnsavedChangesConfirmModal.tsx
  • src/components/common/modals/report-block/ActionSelectionModal.tsx
  • src/components/common/modals/report-block/BlockConfirmModal.tsx
  • src/components/common/modals/report-block/ReportModal.tsx

Comment on lines +37 to +43
const PRIMARY_FILLED_BUTTON_CLASS =
"bg-primary-1 text-White transition-colors hover:bg-primary-3 disabled:bg-Gray-2 disabled:hover:bg-Gray-2 disabled:cursor-not-allowed";
const SELECTABLE_BUTTON_ACTIVE_CLASS =
"bg-primary-1 border-primary-1 text-White transition-colors hover:bg-primary-3 hover:border-primary-3";
const SELECTABLE_BUTTON_IDLE_CLASS =
"bg-Subbrown-4 border-Subbrown-3 text-primary-3 transition-colors hover:bg-Subbrown-3";

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Duplicate shared button-class constants across two files.

PRIMARY_FILLED_BUTTON_CLASS, SELECTABLE_BUTTON_ACTIVE_CLASS, and SELECTABLE_BUTTON_IDLE_CLASS are defined identically here and in src/app/(main)/groups/[id]/admin/edit/page.tsx (lines 38-44). Extracting these to a shared module (e.g. src/constants/groupButtonStyles.ts) would prevent the two copies from drifting apart over time.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/app/`(main)/groups/create/CreateGroupPageClient.tsx around lines 37 - 43,
The button style constants are duplicated in CreateGroupPageClient and the group
admin edit page, so move PRIMARY_FILLED_BUTTON_CLASS,
SELECTABLE_BUTTON_ACTIVE_CLASS, and SELECTABLE_BUTTON_IDLE_CLASS into a shared
module and import them from both places. Create a common source for these group
button styles so the values are defined once and stay in sync, then update the
existing references in CreateGroupPageClient and the edit page to use the shared
exports.

Comment on lines +379 to 385
active:opacity-80
disabled:opacity-50 disabled:cursor-not-allowed
`,
DuplicationCheckisConfirmed
? "bg-primary-1 text-White border border-primary-1 disabled:opacity-100 disabled:cursor-default"
: "border border-Subbrown-3 bg-Subbrown-4 text-primary-3"
? `${SELECTABLE_BUTTON_ACTIVE_CLASS} disabled:hover:bg-primary-1 disabled:hover:border-primary-1 disabled:opacity-100 disabled:cursor-default`
: SELECTABLE_BUTTON_IDLE_CLASS
)}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Move the disabled opacity into a single branch src/app/(main)/groups/create/CreateGroupPageClient.tsx:379 combines disabled:opacity-50 with disabled:opacity-100 when DuplicationCheckisConfirmed is true. Since the button remains disabled there, the final opacity depends on Tailwind utility order; keep only one disabled opacity utility per state.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/app/`(main)/groups/create/CreateGroupPageClient.tsx around lines 379 -
385, The button styling in CreateGroupPageClient mixes two conflicting disabled
opacity utilities when DuplicationCheckisConfirmed is true, so update the
conditional class logic to keep only one disabled-opacity rule per state. In the
className branch around DuplicationCheckisConfirmed, make the default disabled
state use the normal disabled opacity, and in the confirmed state replace it
with the intended disabled opacity value without also inheriting the other
disabled opacity utility from the shared base classes.

@yhi9839
yhi9839 merged commit 741b855 into main Jul 6, 2026
3 checks passed

This branch was successfully deployed

1 active deployment
Preview — 09edb78d Deployed Jul 6, 2026 by vercel[bot]
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.

1 participant