Common Components - kookmin-sw/capstone-2025-44 GitHub Wiki

πŸ“¦ 곡톡 μ»΄ν¬λ„ŒνŠΈ λ¬Έμ„œ

Relevant Source Files

  1. src/assets/images/chat-list-empty.svg
  2. src/components/common/Input-box.tsx
  3. src/components/common/bottom-sheet.tsx
  4. src/components/common/common-input.tsx
  5. src/components/common/modal.tsx
  6. src/components/common/toggle-switch-ver2.tsx
  7. src/components/common/toggle-switch.tsx
  8. src/components/common/type.ts
  9. src/components/mypage/profile-edit/birth-modal.tsx
  10. src/components/posting/posting-bold-text.tsx

πŸ“š λ¬Έμ„œ λͺ©μ 

νƒ€μž„νŽ˜μ΄ μ „μ—­μ—μ„œ μž¬μ‚¬μš©λ˜λŠ” UI μ»΄ν¬λ„ŒνŠΈλ₯Ό λ¬Έμ„œν™”ν•œ κ²ƒμž…λ‹ˆλ‹€. 이 μ»΄ν¬λ„ŒνŠΈλ“€μ€ μΌκ΄€λœ UI/UXλ₯Ό μœ μ§€ν•˜κ³ , 개발 생산성을 높이기 μœ„ν•΄ μ œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


1️⃣ Modal μ»΄ν¬λ„ŒνŠΈ

μš©λ„: ν™”λ©΄ μœ„μ— κ²Ήμ³μ„œ ν‘œμ‹œλ˜λŠ” μ˜€λ²„λ ˆμ΄. 확인창, 폼 μž…λ ₯ 등에 μ‚¬μš©.

μ£Όμš” ꡬ성 μš”μ†Œ:

  • Modal: 메인 λͺ¨λ‹¬ μ»΄ν¬λ„ŒνŠΈ
  • Modal.Title: 제λͺ© ν‘œμ‹œ μ»΄ν¬λ„ŒνŠΈ
  • Modal.Button: ν•˜λ‹¨ λ²„νŠΌ
  • CloseButton: λ‹«κΈ° λ²„νŠΌ (X λ˜λŠ” λ’€λ‘œκ°€κΈ° μ•„μ΄μ½˜)

νŠΉμ§•:

  • ν¬νƒˆ 기반 λ Œλ”λ§ (body μ΅œμƒλ‹¨μ— ν‘œμ‹œ)
  • νŽ˜μ΄λ“œ/μŠ¬λΌμ΄λ“œ μ• λ‹ˆλ©”μ΄μ…˜
  • bottomFixed μ˜΅μ…˜μœΌλ‘œ ν•˜λ‹¨ κ³ μ • κ°€λŠ₯

μ‚¬μš© μ˜ˆμ‹œ:

<Modal onClose={handleClose} icon="back" bottomFixed={true}>
  <Modal.Title text="확인 μš”μ²­\n정말 μ§„ν–‰ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?" />
  <p>이 μž‘μ—…μ€ 되돌릴 수 μ—†μŠ΅λ‹ˆλ‹€.</p>
  <Modal.Button onClick={handleConfirm}>확인</Modal.Button>
</Modal>

κ΄€λ ¨ μ†ŒμŠ€:


2️⃣ Bottom Sheet μ»΄ν¬λ„ŒνŠΈ

μš©λ„: ν™”λ©΄ ν•˜λ‹¨μ—μ„œ μ˜¬λΌμ˜€λŠ” UI μš”μ†Œ. 보쑰 μž‘μ—… λ˜λŠ” μΆ”κ°€ μ˜΅μ…˜ μž…λ ₯ μ‹œ μ‚¬μš©.

ꡬ성 μš”μ†Œ:

  • BottomSheet
  • λ‚΄λΆ€ λ ˆμ΄μ•„μ›ƒ: HeaderContainer, ContentContainer
  • ν”„λ ˆμ΄λ¨Έ λͺ¨μ…˜ μ• λ‹ˆλ©”μ΄μ…˜ μ‚¬μš©

νŠΉμ§•:

  • ν¬νƒˆ 기반 λ Œλ”λ§
  • μžλ™ 높이 쑰절
  • 헀더에 λ‹«κΈ° λ²„νŠΌ 포함

κ΄€λ ¨ μ†ŒμŠ€:


3️⃣ Input μ»΄ν¬λ„ŒνŠΈ

3-1) InputBox

κΈ°λŠ₯: 숫자 μž…λ ₯κ³Ό 지도 검색 κΈ°λŠ₯ λ“± 특수 μž…λ ₯ 지원

μ„œλΈŒ μ»΄ν¬λ„ŒνŠΈ:

  • InputNum: 숫자 μž…λ ₯
  • InputMap: 지도/검색 μž…λ ₯ (μ—λŸ¬ μ• λ‹ˆλ©”μ΄μ…˜ 포함)

κ΄€λ ¨ μ†ŒμŠ€:

3-2) CommonInput

κΈ°λŠ₯: 일반 숫자 μž…λ ₯ + μ—λŸ¬ 처리, min/max μ œν•œ λ“±

μ„œλΈŒ μ»΄ν¬λ„ŒνŠΈ: InputInner

νŠΉμ§•:

  • μœ νš¨μ„± 검사 μ‹€νŒ¨ μ‹œ μ—λŸ¬ μƒνƒœλ‘œ λ³€κ²½ (색상/μ• λ‹ˆλ©”μ΄μ…˜ 적용)
  • 5초 ν›„ μ—λŸ¬ μƒνƒœ μžλ™ ν•΄μ œ

κ΄€λ ¨ μ†ŒμŠ€:


4️⃣ Toggle Switch μ»΄ν¬λ„ŒνŠΈ

4-1) ToggleSwitch

κΈ°λŠ₯: 두 κ°€μ§€ μƒνƒœλ₯Ό μ „ν™˜ν•  수 μžˆλŠ” UI

Props:

  • firstText, secondText: 라벨
  • onChangeSelected: μƒνƒœ λ³€κ²½ ν•¨μˆ˜
  • isLeftSelected: ν˜„μž¬ 선택 μƒνƒœ

κ΄€λ ¨ μ†ŒμŠ€:

4-2) ToggleSwitchVer2

κΈ°λŠ₯: 헀더에 μ ν•©ν•˜λ„λ‘ λΌμš΄λ“œ 탑 μŠ€νƒ€μΌ 적용된 λ³€ν˜• 버전

κ΄€λ ¨ μ†ŒμŠ€:


5️⃣ Text μ»΄ν¬λ„ŒνŠΈ

PostingBoldText

  • ν¬μŠ€νŒ… ν™”λ©΄μ—μ„œ κ°•μ‘° ν…μŠ€νŠΈ 좜λ ₯용 μŠ€νƒ€μΌ μ»΄ν¬λ„ŒνŠΈ
const PostingBoldText = styled.span`
  margin: 2.22rem 0px 2.5rem 0px;
  font-size: 1.67rem;
  color: black;
  text-align: center;
`;

κ΄€λ ¨ μ†ŒμŠ€:


6️⃣ 특수 μ»΄ν¬λ„ŒνŠΈ: BirthModal

μ„€λͺ…: 생년월일 μž…λ ₯을 μœ„ν•œ 닀단계 λͺ¨λ‹¬. Modal을 기반으둜 κ΅¬ν˜„λ¨.

μž…λ ₯ 흐름:

  1. 연도 μž…λ ₯ β†’ μœ νš¨μ„± 검사
  2. μ›” μž…λ ₯ β†’ μœ νš¨μ„± 검사
  3. 일 μž…λ ₯ β†’ μœ νš¨μ„± 검사
  4. λͺ¨λ“  ν•­λͺ© 톡과 ν›„ μ™„λ£Œ λ²„νŠΌμœΌλ‘œ λͺ¨λ‹¬ λ‹«κΈ°

νŠΉμ§•:

  • 단계별 μžλ™ 포컀싱
  • μ—λŸ¬ μ‹œ μ• λ‹ˆλ©”μ΄μ…˜ + λ©”μ‹œμ§€ 좜λ ₯
  • μƒνƒœ μ—…λ°μ΄νŠΈ 및 μœ νš¨μ„± 검사 포함

κ΄€λ ¨ μ†ŒμŠ€:


7️⃣ νƒ€μž… μ •μ˜

곡톡 νƒ€μž…μ€ `` νŒŒμΌμ— μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

νƒ€μž… 이름 μ„€λͺ… μ‚¬μš© μœ„μΉ˜
BottomSheetProps BottomSheet μ»΄ν¬λ„ŒνŠΈ props μ—΄λ¦Ό/λ‹«νž˜ μƒνƒœ 관리
InputType μž…λ ₯ μ»΄ν¬λ„ŒνŠΈ 곡톡 props κ°’ 관리 및 μ—λŸ¬ 처리
ToggleType ν† κΈ€ λ²„νŠΌ props μƒνƒœ 및 라벨 μ •μ˜
SwitchToggleType ν† κΈ€ μŠ€μœ„μΉ˜ props μŠ€νƒ€μΌ μ»€μŠ€ν„°λ§ˆμ΄μ§•
InputWrapperProps μž…λ ₯ μ»¨ν…Œμ΄λ„ˆμš© props 래퍼 μ„€μ •
InputInnerProps λ‚΄λΆ€ μž…λ ₯ κ΄€λ ¨ props μœ νš¨μ„± 검사, λ ˆμ΄μ•„μ›ƒ

κ΄€λ ¨ μ†ŒμŠ€:


βœ… Best Practices

  • μž…λ ₯ κ°’ μ’…λ₯˜μ— λ§žλŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜μ„Έμš”.
  • λͺ¨λ“  μž…λ ₯μ—λŠ” μœ νš¨μ„± 검사 및 λͺ…ν™•ν•œ μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό μ μš©ν•˜μ„Έμš”.
  • Modal.Title, Modal.Button처럼 μ»΄νŒŒμš΄λ“œ μ»΄ν¬λ„ŒνŠΈ νŒ¨ν„΄μ„ ν™œμš©ν•˜μ„Έμš”.
  • μ—λ‹ˆλ©”μ΄μ…˜μ€ 일관성 있게 μ‚¬μš©ν•˜μ„Έμš”.
  • μ ‘κ·Όμ„±(ARIA λ“±)을 κ³ λ €ν•œ μƒν˜Έμž‘μš© κ΅¬ν˜„μ„ ꢌμž₯ν•©λ‹ˆλ‹€.
⚠️ **GitHub.com Fallback** ⚠️