Skip to content

Design/#13/UI component 구현 - #18

Closed
yeseonglee wants to merge 8 commits into
developfrom
design/#12/ui-component-구현

Hidden character warning

The head ref may contain hidden characters: "design/#12/ui-component-\uad6c\ud604"
Closed

Design/#13/UI component 구현#18
yeseonglee wants to merge 8 commits into
developfrom
design/#12/ui-component-구현

Conversation

@yeseonglee

@yeseonglee yeseonglee commented May 24, 2026

Copy link
Copy Markdown
Contributor

✨ What's this PR?

📌 관련 이슈 (Related Issue)


🧶 주요 변경 내용 (Summary)

신규 컴포넌트 8개 추가 (DVDesign/Sources/Components/)

컴포넌트 설명
DVCategory 카테고리 필터 버튼 (All / Star / Expired / Deleted)
DVProjectContainer 사이드바 프로젝트 행
DVVaultContainer Secret 목록 행 (만료 상태 TrailingIcon 포함)
DVButton Primary / Secondary 스타일 버튼
DVCheckBox 체크박스
DVTitleBar 타이틀 + 정렬 버튼 + 검색 필드
DVSecretType Secret 타입 아이콘 + 레이블
DVPageControl 온보딩 스텝 인디케이터

SampleApp 프리뷰 연동

  • 각 컴포넌트별 PreviewView 추가 (Interactive / 상태별 확인 가능)
  • ContentView 라우팅 업데이트

구현 상세

  • 코딩 가이드라인 준수: // MARK: - 섹션 구분, body 단일 컨테이너, 하위뷰는 extension private var/func 분리
  • 모든 인터랙티브 컴포넌트에 .contentShape(Rectangle()) label 내부 적용 → 빈 영역 클릭 이슈 해결
  • DVVaultContainer.TrailingIcon enum으로 만료 상태 타입 안전하게 관리 (.expiringSoon / .expired)
  • DVButton.Style enum에 cornerRadius / height / width / horizontalPadding / font 토큰화
  • DVTitleBar 검색 필드 .regularMaterial 배경 적용 (Liquid Glass 대비)

📸 스크린샷 (Optional)


🧪 테스트 / 검증 내역

  • DVDesignSampleApp 빌드 및 각 컴포넌트 동작 확인
  • Hover / Selected / Disabled 상태 확인
  • My Mac 환경에서 정상 동작

💬 기타 공유 사항

  • 컬러 토큰은 현재 light/dark 동일값 — 다크모드 스펙 확정 시 별도 이슈로 처리 예정
  • 접근성 트레이트 (.accessibilityLabel, .accessibilityAddTraits) 미적용 — 후속 PR 예정
  • DVPageControl은 온보딩 전용으로 현재 DVDesign에 위치, 추후 DVPresentation 이동 검토 필요

🙇🏻‍♀️ 리뷰 가이드

  • DVButton.Style enum의 토큰 구조 (cornerRadius / height / width / font 일괄 관리 방식)
  • DVVaultContainer.TrailingIcon enum 설계
  • .contentShape 위치를 Button label 내부에 적용한 이유

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능
    • 디자인 시스템에 8개의 새로운 UI 컴포넌트 추가: 버튼, 카테고리, 체크박스, 페이지 컨트롤, 프로젝트 컨테이너, 시크릿 타입, 타이틀 바, 볼트 컨테이너
    • 각 컴포넌트의 다양한 상태와 스타일을 확인할 수 있는 프리뷰 화면 추가
    • 컴포넌트 이름 기반의 동적 라우팅 기능 개선

Review Change Stack

@yeseonglee
yeseonglee requested review from dlguszoo and doyeonk429 May 24, 2026 07:50
@yeseonglee yeseonglee self-assigned this May 24, 2026
@yeseonglee yeseonglee added the 🎨 Design UI 디자인 작업 label May 24, 2026
@yeseonglee yeseonglee linked an issue May 24, 2026 that may be closed by this pull request
8 tasks
@coderabbitai

coderabbitai Bot commented May 24, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@yeseonglee, we couldn't start this review because you've used your available PR reviews for now.

Your plan currently allows 1 review/hour. Refill in 19 minutes and 42 seconds.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more review capacity refills, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: a9c91c0e-0059-4008-91e7-f92ce23920f7

📥 Commits

Reviewing files that changed from the base of the PR and between 26b860c and 2fb835b.

📒 Files selected for processing (2)
  • Projects/DVDesign/SampleApp/Sources/ContentView.swift
  • Projects/DVDesign/SampleApp/Sources/DVVaultContainerPreviewView.swift

Walkthrough

이 PR은 DVDesign 시스템에 8개의 새로운 SwiftUI UI 컴포넌트를 추가하고, 각 컴포넌트의 미리보기 화면을 SampleApp에 구현합니다. ContentView의 라우팅 로직을 컴포넌트 이름 기반으로 변경하여 해당 미리보기를 동적으로 표시하도록 통합했습니다.

Changes

UI 컴포넌트 라이브러리 확충

Layer / File(s) Summary
라우팅 인프라 및 미리보기 헬퍼
Projects/DVDesign/SampleApp/Sources/ContentView.swift, Projects/DVDesign/SampleApp/Sources/PreviewHelpers.swift
NavigationLink 목적지를 destination(for:) 라우팅 함수로 변경하여 컴포넌트별 미리보기 뷰를 동적으로 연결하고, 재사용 가능한 previewSection 헬퍼를 추가합니다.
DVButton 컴포넌트 및 미리보기
Projects/DVDesign/Sources/Components/DVButton.swift, Projects/DVDesign/SampleApp/Sources/DVButtonPreviewView.swift
primary/secondary 스타일을 지원하는 버튼 컴포넌트를 구현하고, 호버/활성화 상태를 반영하는 미리보기 화면을 제공합니다.
DVCheckBox 컴포넌트 및 미리보기
Projects/DVDesign/Sources/Components/DVCheckBox.swift, Projects/DVDesign/SampleApp/Sources/DVCheckBoxPreviewView.swift
체크 상태를 표현하고 호버 시 보더를 표시하는 체크박스 컴포넌트와 인터랙티브 미리보기를 구현합니다.
DVCategory 및 DVProjectContainer 컴포넌트와 미리보기
Projects/DVDesign/Sources/Components/DVCategory.swift, Projects/DVDesign/SampleApp/Sources/DVCategoryPreviewView.swift, Projects/DVDesign/Sources/Components/DVProjectContainer.swift, Projects/DVDesign/SampleApp/Sources/DVProjectContainerPreviewView.swift
선택 상태에 따라 스타일이 변하는 카테고리와 프로젝트 컨테이너를 구현하고, 인터랙티브 선택/해제 미리보기를 제공합니다.
DVPageControl 컴포넌트 및 미리보기
Projects/DVDesign/Sources/Components/DVPageControl.swift, Projects/DVDesign/SampleApp/Sources/DVPageControlPreviewView.swift
현재 단계를 점으로 표현하고 스프링 애니메이션을 적용하는 페이지 컨트롤과 단계 네비게이션이 가능한 미리보기를 구현합니다.
DVSecretType 및 DVTitleBar 컴포넌트와 미리보기
Projects/DVDesign/Sources/Components/DVSecretType.swift, Projects/DVDesign/SampleApp/Sources/DVSecretTypePreviewView.swift, Projects/DVDesign/Sources/Components/DVTitleBar.swift, Projects/DVDesign/SampleApp/Sources/DVTitleBarPreviewView.swift
타입을 아이콘으로 표현하는 DVSecretType과 검색 기능이 있는 제목 표시줄 DVTitleBar를 구현하고, 다양한 상태 미리보기를 제공합니다.
DVVaultContainer 컴포넌트 및 미리보기
Projects/DVDesign/Sources/Components/DVVaultContainer.swift, Projects/DVDesign/SampleApp/Sources/DVVaultContainerPreviewView.swift
선택 상태와 만료 상태를 지원하고 트레일링 아이콘을 표시하는 vault 컨테이너를 구현하고, 모든 상태의 인터랙티브 미리보기를 제공합니다.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • doyeonk429
  • dlguszoo
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목이 '디자인/#13/UI component 구현'으로 #13 이슈의 UI 컴포넌트 8개 구현이라는 핵심 변경사항을 명확하게 반영합니다.
Linked Issues check ✅ Passed PR이 #13 이슈의 모든 필수 컴포넌트(DVButton, DVCategory, DVCheckBox, DVPageControl, DVProjectContainer, DVSecretType, DVTitleBar, DVVaultContainer)를 구현했으며, 각 컴포넌트 스타일과 기능 요구사항을 충족합니다.
Out of Scope Changes check ✅ Passed ContentView 라우팅 업데이트와 PreviewHelper 추가는 구현된 컴포넌트를 SampleApp에 통합하기 위한 필수 변경이며, #13 요구사항의 범위 내입니다.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch design/#12/ui-component-구현

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.

@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: 1

🧹 Nitpick comments (6)
Projects/DVDesign/SampleApp/Sources/DVSecretTypePreviewView.swift (1)

10-39: ⚡ Quick win

body 내부 중첩 레이아웃을 private 서브뷰로 분리해 주세요.

현재 ScrollView/VStack/여러 previewSectionbody에 직접 중첩되어 있어, 섹션별 private var/private func로 분리하면 가독성과 유지보수성이 좋아집니다.

As per coding guidelines var body 안에 중첩 레이아웃이 직접 구현되어 있으면 extension의 private var/func로 분리를 제안하세요.

🤖 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 `@Projects/DVDesign/SampleApp/Sources/DVSecretTypePreviewView.swift` around
lines 10 - 39, The body of DVSecretTypePreviewView contains nested
ScrollView/VStack/previewSection blocks; extract each logical subsection into
private helper views or vars (e.g., private var iconlessSection, private var
iconSection, private func otherTypesSection() -> some View) and replace the
inline blocks in var body with those private members; keep the navigationTitle
and outer ScrollView wrapper in body and ensure the extracted helpers return the
same view types and use the existing previewSection and DVSecretType calls to
preserve behavior.
Projects/DVDesign/SampleApp/Sources/DVVaultContainerPreviewView.swift (1)

16-60: ⚡ Quick win

프리뷰의 중첩 레이아웃을 private 섹션 단위로 분리해 주세요.

body에 섹션이 직접 길게 배치되어 있어, 섹션별 private var/func로 추출하면 파일 구성 규칙과 일관성이 맞아집니다.

As per coding guidelines var body 안에 중첩 레이아웃이 직접 구현되어 있으면 extension의 private var/func로 분리를 제안하세요.

🤖 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 `@Projects/DVDesign/SampleApp/Sources/DVVaultContainerPreviewView.swift` around
lines 16 - 60, The body currently contains long nested preview sections; extract
each previewSection block (e.g., the "Interactive" VStack using vaults and
selected, and the static "Selected", "Unselected", "Expiring Soon", "Expired"
blocks that create DVVaultContainer) into private helpers—either private var
views or private func view builders—so body becomes a high-level Stack that
calls these helpers; create a private extension (or private section) with
functions like interactivePreview(), selectedPreview(), unselectedPreview(),
expiringSoonPreview(), expiredPreview() that return some View and reference
vaults, selected, and the DVVaultContainer initializers, ensuring closures and
state bindings (selected) are captured correctly.
Projects/DVDesign/SampleApp/Sources/DVTitleBarPreviewView.swift (1)

14-40: ⚡ Quick win

프리뷰 섹션 구성을 private 서브뷰로 분리해 주세요.

body가 섹션 구성/스타일링까지 한 번에 담고 있어, interactiveSection, expiredSection 같은 private var로 분리하면 변경 추적이 쉬워집니다.

As per coding guidelines var body 안에 중첩 레이아웃이 직접 구현되어 있으면 extension의 private var/func로 분리를 제안하세요.

🤖 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 `@Projects/DVDesign/SampleApp/Sources/DVTitleBarPreviewView.swift` around lines
14 - 40, DVTitleBarPreviewView's body currently contains nested layout for both
"Interactive" and "Expired" previews; extract each section into private computed
subviews (e.g., private var interactiveSection: some View and private var
expiredSection: some View) in an extension so body only composes those vars.
Move the existing previewSection blocks that build DVTitleBar (including the
.frame and .background modifiers) into those private vars, keep
previewSection("Interactive") and previewSection("Expired") usage, and update
body to reference interactiveSection and expiredSection instead of inlining the
blocks.
Projects/DVDesign/Sources/Components/DVButton.swift (1)

13-46: ⚡ Quick win

Style의 computed property들에 fileprivate 접근 제어를 추가하세요.

cornerRadius, height, horizontalPadding, width, fontDVButton 파일 내부에서만 사용되는 구현 세부사항입니다. 현재 기본값인 internal보다 fileprivate이 더 엄격한 접근 제어 수준이므로, 외부 노출을 최소화할 수 있습니다.

♻️ 제안하는 수정
-    var cornerRadius: CGFloat {
+    fileprivate var cornerRadius: CGFloat {
         switch self {
         case .primary:   return 20
         case .secondary: return 6
         }
     }

-    var height: CGFloat {
+    fileprivate var height: CGFloat {
         switch self {
         case .primary:   return 40
         case .secondary: return 24
         }
     }

-    var horizontalPadding: CGFloat {
+    fileprivate var horizontalPadding: CGFloat {
         switch self {
         case .primary:   return 16
         case .secondary: return 16
         }
     }

-    var width: CGFloat {
+    fileprivate var width: CGFloat {
         switch self {
         case .primary:   return 242
         case .secondary: return 74
         }
     }

-    var font: DVFont {
+    fileprivate var font: DVFont {
         switch self {
         case .primary:   return .bodyLG
         case .secondary: return .bodyMD
         }
     }

가이드라인 준수: "접근 제어가 가능한 가장 엄격한 수준인지 확인하세요. (private > fileprivate > internal)"

🤖 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 `@Projects/DVDesign/Sources/Components/DVButton.swift` around lines 13 - 46,
The computed properties on Style (cornerRadius, height, horizontalPadding,
width, font) are currently internal but should be limited to file scope; update
each property declaration in the Style type to use fileprivate access control
(e.g., fileprivate var cornerRadius, fileprivate var height, etc.) so these
implementation details remain private to the DVButton.swift file.
Projects/DVDesign/Sources/Components/DVCategory.swift (1)

81-84: 💤 Low value

borderOverlay의 cornerRadius 불일치 확인 필요

Line 40의 배경 clipShapecornerRadius: 16을 사용하는데, 여기서는 12를 사용하고 있습니다. 의도된 디자인이 아니라면 동일한 값(16)으로 통일하는 것을 권장합니다.

수정 제안
 private var borderOverlay: some View {
-    RoundedRectangle(cornerRadius: 12)
+    RoundedRectangle(cornerRadius: 16)
         .stroke(isHovered && !isSelected ? Color.dv(.gray300) : Color.clear, lineWidth: 1)
 }
🤖 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 `@Projects/DVDesign/Sources/Components/DVCategory.swift` around lines 81 - 84,
borderOverlay의 RoundedRectangle에 설정된 cornerRadius(12)가 배경의 clipShape에서 사용한
cornerRadius(16)와 불일치합니다; DVCategory.swift의 private var borderOverlay를 찾아
RoundedRectangle(cornerRadius: 12) 값을 디자인과 일치하도록 16으로 변경(나머지 속성인 .stroke(...,
lineWidth: 1)은 유지)하여 두 요소의 모서리 반경을 통일하세요.
Projects/DVDesign/Sources/Components/DVProjectContainer.swift (1)

80-83: 💤 Low value

borderOverlay의 cornerRadius 불일치 확인 필요

Line 40의 배경 clipShapecornerRadius: 6을 사용하는데, 여기서는 8을 사용하고 있습니다. 의도된 디자인이 아니라면 동일한 값(6)으로 통일하는 것을 권장합니다.

수정 제안
 private var borderOverlay: some View {
-    RoundedRectangle(cornerRadius: 8)
+    RoundedRectangle(cornerRadius: 6)
         .stroke(isHovered && !isSelected ? Color.dv(.gray300) : Color.clear, lineWidth: 1)
 }
🤖 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 `@Projects/DVDesign/Sources/Components/DVProjectContainer.swift` around lines
80 - 83, The borderOverlay's RoundedRectangle uses cornerRadius: 8 which
mismatches the background's clipShape cornerRadius: 6; update the
RoundedRectangle(cornerRadius: 8) in the borderOverlay property to cornerRadius:
6 so both the background clipShape and the stroke overlay use the same radius
(check the background clipShape usage and ensure both use 6).
🤖 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 `@Projects/DVDesign/SampleApp/Sources/DVVaultContainerPreviewView.swift`:
- Around line 21-27: The ForEach is using id: \.0 (name string) and selected is
compared to name, which breaks when duplicate names exist; change the iteration
to use a stable identifier (e.g., the collection index or an Identifiable model)
and make selected track that stable id instead of the name. Concretely, replace
ForEach(vaults, id: \.0) with a ForEach over indices (or an Identifiable Vault
model) and update the DVVaultContainer calls and the toggle logic so isSelected
compares selectedIndex (or the model id) with the current index/id and toggles
selectedIndex = (selectedIndex == index ? nil : index).

---

Nitpick comments:
In `@Projects/DVDesign/SampleApp/Sources/DVSecretTypePreviewView.swift`:
- Around line 10-39: The body of DVSecretTypePreviewView contains nested
ScrollView/VStack/previewSection blocks; extract each logical subsection into
private helper views or vars (e.g., private var iconlessSection, private var
iconSection, private func otherTypesSection() -> some View) and replace the
inline blocks in var body with those private members; keep the navigationTitle
and outer ScrollView wrapper in body and ensure the extracted helpers return the
same view types and use the existing previewSection and DVSecretType calls to
preserve behavior.

In `@Projects/DVDesign/SampleApp/Sources/DVTitleBarPreviewView.swift`:
- Around line 14-40: DVTitleBarPreviewView's body currently contains nested
layout for both "Interactive" and "Expired" previews; extract each section into
private computed subviews (e.g., private var interactiveSection: some View and
private var expiredSection: some View) in an extension so body only composes
those vars. Move the existing previewSection blocks that build DVTitleBar
(including the .frame and .background modifiers) into those private vars, keep
previewSection("Interactive") and previewSection("Expired") usage, and update
body to reference interactiveSection and expiredSection instead of inlining the
blocks.

In `@Projects/DVDesign/SampleApp/Sources/DVVaultContainerPreviewView.swift`:
- Around line 16-60: The body currently contains long nested preview sections;
extract each previewSection block (e.g., the "Interactive" VStack using vaults
and selected, and the static "Selected", "Unselected", "Expiring Soon",
"Expired" blocks that create DVVaultContainer) into private helpers—either
private var views or private func view builders—so body becomes a high-level
Stack that calls these helpers; create a private extension (or private section)
with functions like interactivePreview(), selectedPreview(),
unselectedPreview(), expiringSoonPreview(), expiredPreview() that return some
View and reference vaults, selected, and the DVVaultContainer initializers,
ensuring closures and state bindings (selected) are captured correctly.

In `@Projects/DVDesign/Sources/Components/DVButton.swift`:
- Around line 13-46: The computed properties on Style (cornerRadius, height,
horizontalPadding, width, font) are currently internal but should be limited to
file scope; update each property declaration in the Style type to use
fileprivate access control (e.g., fileprivate var cornerRadius, fileprivate var
height, etc.) so these implementation details remain private to the
DVButton.swift file.

In `@Projects/DVDesign/Sources/Components/DVCategory.swift`:
- Around line 81-84: borderOverlay의 RoundedRectangle에 설정된 cornerRadius(12)가 배경의
clipShape에서 사용한 cornerRadius(16)와 불일치합니다; DVCategory.swift의 private var
borderOverlay를 찾아 RoundedRectangle(cornerRadius: 12) 값을 디자인과 일치하도록 16으로 변경(나머지
속성인 .stroke(..., lineWidth: 1)은 유지)하여 두 요소의 모서리 반경을 통일하세요.

In `@Projects/DVDesign/Sources/Components/DVProjectContainer.swift`:
- Around line 80-83: The borderOverlay's RoundedRectangle uses cornerRadius: 8
which mismatches the background's clipShape cornerRadius: 6; update the
RoundedRectangle(cornerRadius: 8) in the borderOverlay property to cornerRadius:
6 so both the background clipShape and the stroke overlay use the same radius
(check the background clipShape usage and ensure both use 6).
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 785c4680-6f6d-4418-9aeb-92d37bed3314

📥 Commits

Reviewing files that changed from the base of the PR and between afe263a and 26b860c.

📒 Files selected for processing (18)
  • Projects/DVDesign/SampleApp/Sources/ContentView.swift
  • Projects/DVDesign/SampleApp/Sources/DVButtonPreviewView.swift
  • Projects/DVDesign/SampleApp/Sources/DVCategoryPreviewView.swift
  • Projects/DVDesign/SampleApp/Sources/DVCheckBoxPreviewView.swift
  • Projects/DVDesign/SampleApp/Sources/DVPageControlPreviewView.swift
  • Projects/DVDesign/SampleApp/Sources/DVProjectContainerPreviewView.swift
  • Projects/DVDesign/SampleApp/Sources/DVSecretTypePreviewView.swift
  • Projects/DVDesign/SampleApp/Sources/DVTitleBarPreviewView.swift
  • Projects/DVDesign/SampleApp/Sources/DVVaultContainerPreviewView.swift
  • Projects/DVDesign/SampleApp/Sources/PreviewHelpers.swift
  • Projects/DVDesign/Sources/Components/DVButton.swift
  • Projects/DVDesign/Sources/Components/DVCategory.swift
  • Projects/DVDesign/Sources/Components/DVCheckBox.swift
  • Projects/DVDesign/Sources/Components/DVPageControl.swift
  • Projects/DVDesign/Sources/Components/DVProjectContainer.swift
  • Projects/DVDesign/Sources/Components/DVSecretType.swift
  • Projects/DVDesign/Sources/Components/DVTitleBar.swift
  • Projects/DVDesign/Sources/Components/DVVaultContainer.swift

Comment thread Projects/DVDesign/SampleApp/Sources/DVVaultContainerPreviewView.swift Outdated
@doyeonk429

Copy link
Copy Markdown
Contributor

@yeseonglee pr 올리기전에 develop rebase하고 나서 pr 올려주세요~!

@doyeonk429 doyeonk429 closed this May 24, 2026
@doyeonk429
doyeonk429 deleted the design/#12/ui-component-구현 branch May 24, 2026 08:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🎨 Design UI 디자인 작업

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Design: UI Component 구현

2 participants