feat: Button 공통 base 및 CTA/Body module variant 구현 - #10
Merged
Conversation
4 tasks
sohxxny
reviewed
Aug 4, 2026
thwjddlqslek
reviewed
Aug 6, 2026
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
sohxxny
approved these changes
Aug 7, 2026
thwjddlqslek
approved these changes
Aug 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Button 프리미티브(
Button), 화면 하단 CTA용CTAButton(Single/Double 컴파운드), 선택 상태를 표시하는Radio(primary/outline), 아이콘 전용 버튼IconButton을 구현하고 각각shared/ui/button,shared/ui/radio의 public API로 노출했다.사용 방법
Related Issues
PR Point (To Reviewer)
ButtonColor는primary/tertiary,ButtonSize는large/medium까지 추가됐고, 추후 필요에 따라 계속 확장될 예정입니다.Social Button은 별도 컴포넌트 없이Button+ className 커스텀으로 충분함을 구조로 남겼습니다 (social폴더 없음).Button과Radio를 같은 폴더에 두지 않고shared/ui/button/shared/ui/radio로 분리했습니다. 버튼은 액션 트리거, 라디오는 그룹 내 선택 상태 토글이라 상호작용 모델이 다르고, 실제로도 테마 토큰(BUTTON_*vsRADIO_*)을 전혀 공유하지 않아서 프리미티브 단위로 폴더를 나누는 기존 컨벤션을 그대로 따랐습니다.ButtonBodyModule(선택 인디케이터) 요구는Radio로 대체 구현했고, 이슈 본문도 함께 갱신했습니다.IconButton은shared/ui/button/icon-button/에 뒀지만Button을 합성하지 않습니다.CTAButton은Button의color/sizevariant 스타일이 그대로 필요해서 합성하지만,IconButton은 배경·variant가 아예 없어서(shared/ui/icons의 아이콘을 감싸기만 함)Button을 합성하면 오히려 원치 않는 배경/패딩이 딸려옵니다.Radio가button/밖에서Button을 합성하지 않고 독립 프리미티브로 존재하는 것과 같은 이유로,IconButton도button/폴더 안에서Button과 독립적인 프리미티브로 뒀습니다.shared/ui/icons/에 두는 방안도 검토했으나, 그 폴더는pnpm generate:icons가 매번 통째로 지우고 재생성하는 codegen 산출물 전용이라(ADR 0001) 손으로 짠 컴포넌트를 둘 수 없습니다.IconButton은aria-label을 필수 prop으로 타입에서 강제하고, 내부 아이콘에는aria-hidden="true"를 자동으로 붙여 접근성 이름이 중복 노출되지 않도록 했습니다.리뷰 반영 내역
text-gray-8→text-gray-80오타 수정BUTTON_BASE에flex추가 (items-center/justify-center가 실제로 동작하지 않던 문제 수정, 아이콘 추가 시 센터링 깨짐 방지)DoubleCTAButton에 기본gap-[1.6rem]추가 (두 버튼이 붙어 렌더링되던 문제 수정)isLoading)에는 버튼이 기능적으로만 비활성화되고, 시각적인 disabled 스타일(BUTTON_DISABLED)은 적용하지 않도록 변경base/types/theme.ts+base/constants/variant.ts→base/theme.ts하나로 통합 (폴더명과 실제 내용이 반대로 매칭되던 문제 정리)active:text-primary-700) 추가IconButton컴포넌트 추가 (shared/ui/button/icon-button/IconButton.tsx)Screenshot
Button
Radio
ETC