Skip to content

feat: add remaining components (EnterAmount, Converter, Transaction, TopIntro)#5

Merged
romchornyi merged 6 commits into
masterfrom
import/final
Jul 15, 2026
Merged

feat: add remaining components (EnterAmount, Converter, Transaction, TopIntro)#5
romchornyi merged 6 commits into
masterfrom
import/final

Conversation

@romchornyi

@romchornyi romchornyi commented Jul 14, 2026

Copy link
Copy Markdown
Collaborator

Final migration PR — brings the rest of DashUIKit into the repo.

Components

  • CoinSelector, NumericKeyboardView, ReceiveEstimateView
  • EnterAmount suite (6): CurrencyOption, DashBalanceView, DashPickerView, DualSwapAmountView, EnterAmountView, SwapAmountView
  • ConverterCard suite (4): ConverterArrowBadge, ConverterCard, ConverterCardItem, ConverterCardRow
  • TopIntro/TopIntroView, Transaction/TransactionView

Foundation

  • DashTextStyle + Font: add caption1Medium (used by TransactionView).

Assets

  • arrow-down, diagonal-up-down, stopwatch, Transactions/ icon set, text-field-qr dark variant.

iOS 14 compat fixes applied during migration

  • Replaced iOS 16+ .rect(cornerRadius:) / .contentShape(.rect) with RoundedRectangle(...,style:.continuous) / Rectangle() (CoinSelector, DashPickerView, ConverterCardRow, TransactionView).
  • Added missing @available(iOS 14, macOS 11, *) to ReceiveEstimateView, CurrencyOption, TopIntroView and unannotated preview scaffolding.

Verification

  • swift build (debug) and swift build -c release both pass.

This completes the DashUIKit migration.

Summary by CodeRabbit

  • New Features
    • Added new SwiftUI components for coin selection, conversion cards (with swappable/seam badge), transaction rows, amount entry (single + dual-swap), currency option picking, balance display, numeric keypad, receive estimates, and top intro headers.
  • Style
    • Added “Caption 1 Medium” typography token.
  • Documentation
    • Expanded the DashUIKit component catalog with new and updated pages (including amount & currency, buttons/inputs, lists/rows, navigation/containers, and utilities).
  • Tests
    • Added a DashUIKit test target and locale-focused Numeric Keyboard keypad support tests.
  • Assets
    • Added/updated icon assets, including dark-mode variants for transaction/preview imagery and QR.

… TopIntro, Transaction)

Final migration PR — brings the rest of the library across:
- CoinSelector, NumericKeyboardView, ReceiveEstimateView
- EnterAmount suite (CurrencyOption, DashBalanceView, DashPickerView,
  DualSwapAmountView, EnterAmountView, SwapAmountView)
- ConverterCard suite (ConverterArrowBadge, ConverterCard, ConverterCardItem,
  ConverterCardRow)
- TopIntro/TopIntroView, Transaction/TransactionView
- Foundation: DashTextStyle + Font (caption1Medium)
- assets: arrow-down, diagonal-up-down, stopwatch, Transactions/, text-field-qr dark variant

iOS 14 compatibility fixes applied during migration:
- replaced iOS 16+ .rect(cornerRadius:) / .contentShape(.rect) with
  RoundedRectangle(...,style:.continuous) / Rectangle() (CoinSelector,
  DashPickerView, ConverterCardRow, TransactionView)
- added missing @available(iOS 14, macOS 11, *) to ReceiveEstimateView,
  CurrencyOption, TopIntroView and their preview scaffolding
@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR adds reusable DashUIKit SwiftUI components for amount entry, currency conversion, coin selection, transactions, receive estimates, numeric input, and introductory content, plus typography tokens, image asset manifests, repository guidance, component documentation, and numeric keyboard tests.

Changes

Amount Entry and Dual-Swap Flow

Layer / File(s) Summary
Currency and animated amount contracts
Sources/DashUIKit/Components/EnterAmount/*
Adds currency options, amount displays, animated dual-swap behavior, paste handling, and dual input selection.
EnterAmount integration
Sources/DashUIKit/Components/EnterAmount/EnterAmountView.swift
Adds .single and .dualSwap styles, dual-swap configuration, callbacks, and conditional layouts.

Input Controls and Receive Feedback

Layer / File(s) Summary
Input and feedback controls
Sources/DashUIKit/Components/NumericKeyboardView.swift, Sources/DashUIKit/Components/EnterAmount/*, Sources/DashUIKit/Components/ReceiveEstimateView.swift
Adds locale-aware numeric editing, picker and balance views, and loading, error, approximate, and exact estimate states.
Numeric keyboard validation
Package.swift, Tests/DashUIKitTests/NumericKeyboardLocaleSupportTests.swift
Adds the DashUIKit test target and tests locale-specific separators, decimal insertion, grouping separators, and deletion.

Converter Card

Layer / File(s) Summary
Converter card composition
Sources/DashUIKit/Components/ConverterCard/*
Adds converter row models, measured seam positioning, static or interactive arrow badges, balance rendering, and previews.

Display Components

Layer / File(s) Summary
Selectors and display rows
Sources/DashUIKit/Components/CoinSelector.swift, Sources/DashUIKit/Components/Transaction/*, Sources/DashUIKit/Components/TopIntro/*, Sources/DashUIKit/Foundation/*
Adds coin selector states, transaction rows, introductory text, and the caption1Medium typography preset.

Asset Catalogs

Layer / File(s) Summary
Icon manifests
Sources/DashUIKit/Resources/Media.xcassets/...
Adds image-set metadata and scale-specific light/dark mappings for transaction, additional-info, QR, arrow, swap, and stopwatch icons.

Documentation and Guidance

Layer / File(s) Summary
Component catalog and conventions
CLAUDE.md, docs/*.md
Adds repository conventions and documentation for DashUIKit components, foundations, navigation, feedback, rows, utilities, and amount controls.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant EnterAmountView
  participant DualSwapAmountView
  participant SwapAmountView
  participant DualInputTypeSwitcher
  EnterAmountView->>DualSwapAmountView: render dual amounts and currencies
  DualSwapAmountView->>SwapAmountView: provide swap animation and callbacks
  DualSwapAmountView->>DualInputTypeSwitcher: provide currency codes and selection
  DualSwapAmountView->>EnterAmountView: invoke swap or input-type callback
Loading

Suggested reviewers: abaranouski

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 31.25% 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 The title accurately summarizes the main change by adding the remaining DashUIKit component suites, though it omits several supporting additions.
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 import/final

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.

Migrate the remaining non-code files: the per-component reference under docs/
(linked from README) and the library development guide (iOS 14 constraint,
conventions).

@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 (8)
Sources/DashUIKit/Components/TopIntro/TopIntroView.swift (1)

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

Format MARK comments correctly.

SwiftLint flags that MARK comments should be formatted with a space after // and optionally - for better IDE integration and readability.

🧹 Proposed formatting fix
-            //MARK: Title
+            // MARK: - Title
             Text(title)
                 .dashFont(.title1)
                 .foregroundColor(Color.dash.primaryText)
 
-            //MARK: Main description
+            // MARK: - Main description
 
             if let mainDescription {
                 Text(mainDescription)
                     .dashFont(.subhead)
                     .foregroundColor(Color.dash.primaryText)
             }
 
 
-            //MARK: Secondary description
+            // MARK: - Secondary description
 
             if let secondaryDescription {
🤖 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 `@Sources/DashUIKit/Components/TopIntro/TopIntroView.swift` around lines 34 -
54, Update the section comments in the TopIntroView body around the title and
description blocks to use SwiftLint-compliant MARK formatting, adding the
required space after the comment delimiter and preserving the existing section
labels.

Source: Linters/SAST tools

Sources/DashUIKit/Components/Transaction/TransactionView.swift (1)

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

Fix spacing and consider consolidating duplicate offsets.

There is a missing space after the comma in .offset(x: 3,y: 3). Additionally, note that secondaryBadge also applies its own internal offset using Layout.badgeRing. If the cumulative visual shift of 5 points was intended, consider combining these into a single .offset modifier for better clarity.

🧹 Proposed formatting fix
             .overlay(
                 secondaryBadge
-                    .offset(x: 3,y: 3),
+                    .offset(x: 3, y: 3),
                 alignment: .bottomTrailing
             )
🤖 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 `@Sources/DashUIKit/Components/Transaction/TransactionView.swift` around lines
115 - 140, Update the offset modifiers in iconWrap and secondaryBadge: fix the
spacing in the alignment offset and consolidate the two badge offsets into one
modifier with the intended cumulative visual shift, removing the redundant
offset while preserving the badge’s placement.
Sources/DashUIKit/Components/EnterAmount/SwapAmountView.swift (2)

227-239: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

displayAmount/displaySecondary normalisation duplicated between SwapAmountView and AnimatedSwapLayout.

Identical bare-decimal normalisation logic exists in both types. Extracting a shared static helper (e.g. a free function or SwapAmountView-scoped static func) would keep the display rule in one place.

Also applies to: 437-447

🤖 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 `@Sources/DashUIKit/Components/EnterAmount/SwapAmountView.swift` around lines
227 - 239, Extract the duplicated bare-decimal normalization from displayAmount
and displaySecondary into one shared helper accessible by both SwapAmountView
and AnimatedSwapLayout. Replace each local implementation with that helper while
preserving the existing empty-string and leading "."/"," behavior.

202-219: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Unused secondaryAmountView — dead code duplicating AnimatedSwapLayout.rowContent.

secondaryAmountView is never called; staticBody renders secondaryText as plain Text, and the animated path uses its own rowContent helper. This duplicates symbol/logo rendering logic that could silently drift from rowContent.

♻️ Suggested cleanup
-    private func secondaryAmountView(font: Font, dashSize: CGSize? = nil) -> some View {
-        HStack(spacing: 4) {
-            if let sym = secondarySymbol, !sym.isEmpty {
-                Text(sym)
-                    .font(font)
-            }
-
-            Text(displaySecondary)
-                .font(font)
-
-            if showSecondaryDashLogo {
-                Image(dash: .custom("enter-amount-dash", bundle: .dashUIKit))
-                    .resizable()
-                    .scaledToFit()
-                    .frame(width: dashSize?.width, height: dashSize?.height)
-            }
-        }
-    }
-
🤖 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 `@Sources/DashUIKit/Components/EnterAmount/SwapAmountView.swift` around lines
202 - 219, Remove the unused secondaryAmountView method from SwapAmountView,
since staticBody and the animated layout do not call it and rowContent already
owns the secondary symbol/logo rendering. Leave the existing secondaryText and
AnimatedSwapLayout behavior unchanged.
Sources/DashUIKit/Components/ConverterCard/ConverterArrowBadge.swift (1)

32-48: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Swap button tap target (35x35pt) is below the recommended 44x44pt minimum, and lacks an accessibility label.

Both are easy, high-value fixes for a control that drives the converter swap action.

♻️ Suggested fix
                 Button {
                     withAnimation(.spring(response: 0.35, dampingFraction: 0.82)) { rotation += 180 }
                     onSwap()
                 } label: {
                     badge(iconName: "diagonal-up-down", iconRotation: rotation)
                 }
                 .buttonStyle(.plain)
+                .accessibilityLabel(Text("Swap", bundle: .module))
+                .contentShape(Rectangle().inset(by: -4.5)) // pads 35x35 up toward ~44x44
             } else {
                 badge(iconName: "arrow-down", iconRotation: 0)
             }
🤖 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 `@Sources/DashUIKit/Components/ConverterCard/ConverterArrowBadge.swift` around
lines 32 - 48, Update the swap Button in ConverterArrowBadge.body to provide at
least a 44×44pt tappable frame and add an accessibility label describing the
swap action. Keep the existing animation, onSwap callback, icon, and plain
button style unchanged; the non-button badge should remain unaffected.
Sources/DashUIKit/Components/ReceiveEstimateView.swift (1)

72-86: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Center-align multiline text to maintain layout symmetry.

Since the parent VStack centers its contents, if errorMessage or amount wrap to a second line (e.g. on small screens or with long localized strings), they will default to leading alignment within their own bounds. Applying .multilineTextAlignment(.center) ensures the text remains symmetrically aligned.

✨ Proposed alignment fix
                 } else if let errorMessage {
                     // An error (e.g. insufficient balance) supersedes the receive estimate — both can
                     // be set at once, so show the error first.
                     Text(errorMessage)
                         .dashFont(.caption1)
                         .foregroundColor(Color.dash.errorText)
+                        .multilineTextAlignment(.center)
                 } else if let amount {
                     Text(title)
                         .dashFont(.caption1)
                         .foregroundColor(Color.dash.tertiaryText)
+                        .multilineTextAlignment(.center)

                     Text(amountText(amount))
                         .dashFont(.subhead)
                         .foregroundColor(Color.dash.primaryText)
+                        .multilineTextAlignment(.center)
                 }
🤖 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 `@Sources/DashUIKit/Components/ReceiveEstimateView.swift` around lines 72 - 86,
Update the Text views in the errorMessage and amount branches of
ReceiveEstimateView to apply centered multiline text alignment, including the
title and formatted amount, so wrapped localized content remains symmetric
within the parent VStack.
Sources/DashUIKit/Components/ConverterCard/ConverterCard.swift (1)

60-60: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Animate structural changes for both source and destination.

Binding the animation solely to fromItem.id means that if only the destination changes (e.g., the user selects a new receive currency without swapping), the card's height and layout will snap abruptly instead of animating.

Track both IDs so that any structural change to either row triggers the layout animation.

✨ Proposed fix to the animation value
-        .animation(.spring(response: 0.35, dampingFraction: 0.82), value: fromItem.id)
+        .animation(.spring(response: 0.35, dampingFraction: 0.82), value: [fromItem.id, toItem.id])
🤖 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 `@Sources/DashUIKit/Components/ConverterCard/ConverterCard.swift` at line 60,
Update the animation modifier in ConverterCard to track both the source and
destination item IDs, ensuring structural changes to either row animate the
card’s layout. Replace the single fromItem.id animation value with a combined
value that changes when either item changes.
Sources/DashUIKit/Components/NumericKeyboardView.swift (1)

158-167: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Disable the empty placeholder key to prevent tap highlights.

The empty cell in the bottom-left corner of the keyboard renders an invisible button. When tapped, it will still show a standard button press highlight. Disabling it when key.isEmpty prevents this unintended interactive feedback.

✨ Proposed fix to disable the empty key
     private func keyButtonView(_ key: String) -> some View {
         Button {
             handleKeyPress(key)
         } label: {
             keyContentView(key)
         }
         .frame(height: 50)
         .frame(maxWidth: .infinity)
-        .disabled(inProgress)
+        .disabled(inProgress || key.isEmpty)
     }
🤖 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 `@Sources/DashUIKit/Components/NumericKeyboardView.swift` around lines 158 -
167, Update keyButtonView to disable the button when either inProgress is true
or key.isEmpty is true, preventing the invisible placeholder key from producing
tap highlights while preserving existing behavior for active keys.
🤖 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 `@Sources/DashUIKit/Components/EnterAmount/SwapAmountView.swift`:
- Around line 383-411: The isPrimaryLarge change handler schedules delayed
animations that can execute with stale newValue after a subsequent toggle.
Update the onChange handler and its async callbacks to cancel or guard prior
work using a generation/token or equivalent current-state check, ensuring stale
scale and offset animations cannot mutate scaleA, scaleB, or offsetPrimary after
a newer toggle.
- Around line 452-475: The documentation for dashPasteContextMenu incorrectly
claims the helper checks for clipboard strings. Either implement that clipboard
guard within dashPasteContextMenu before invoking onPaste, or revise the doc
comment to state that clipboard validation is handled by the caller; keep the
existing long-press behavior otherwise unchanged.

---

Nitpick comments:
In `@Sources/DashUIKit/Components/ConverterCard/ConverterArrowBadge.swift`:
- Around line 32-48: Update the swap Button in ConverterArrowBadge.body to
provide at least a 44×44pt tappable frame and add an accessibility label
describing the swap action. Keep the existing animation, onSwap callback, icon,
and plain button style unchanged; the non-button badge should remain unaffected.

In `@Sources/DashUIKit/Components/ConverterCard/ConverterCard.swift`:
- Line 60: Update the animation modifier in ConverterCard to track both the
source and destination item IDs, ensuring structural changes to either row
animate the card’s layout. Replace the single fromItem.id animation value with a
combined value that changes when either item changes.

In `@Sources/DashUIKit/Components/EnterAmount/SwapAmountView.swift`:
- Around line 227-239: Extract the duplicated bare-decimal normalization from
displayAmount and displaySecondary into one shared helper accessible by both
SwapAmountView and AnimatedSwapLayout. Replace each local implementation with
that helper while preserving the existing empty-string and leading "."/","
behavior.
- Around line 202-219: Remove the unused secondaryAmountView method from
SwapAmountView, since staticBody and the animated layout do not call it and
rowContent already owns the secondary symbol/logo rendering. Leave the existing
secondaryText and AnimatedSwapLayout behavior unchanged.

In `@Sources/DashUIKit/Components/NumericKeyboardView.swift`:
- Around line 158-167: Update keyButtonView to disable the button when either
inProgress is true or key.isEmpty is true, preventing the invisible placeholder
key from producing tap highlights while preserving existing behavior for active
keys.

In `@Sources/DashUIKit/Components/ReceiveEstimateView.swift`:
- Around line 72-86: Update the Text views in the errorMessage and amount
branches of ReceiveEstimateView to apply centered multiline text alignment,
including the title and formatted amount, so wrapped localized content remains
symmetric within the parent VStack.

In `@Sources/DashUIKit/Components/TopIntro/TopIntroView.swift`:
- Around line 34-54: Update the section comments in the TopIntroView body around
the title and description blocks to use SwiftLint-compliant MARK formatting,
adding the required space after the comment delimiter and preserving the
existing section labels.

In `@Sources/DashUIKit/Components/Transaction/TransactionView.swift`:
- Around line 115-140: Update the offset modifiers in iconWrap and
secondaryBadge: fix the spacing in the alignment offset and consolidate the two
badge offsets into one modifier with the intended cumulative visual shift,
removing the redundant offset while preserving the badge’s placement.
🪄 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: f2132230-9e6d-4a4f-a35e-6c3494d10962

📥 Commits

Reviewing files that changed from the base of the PR and between 1a0f508 and e85188a.

⛔ Files ignored due to path filters (120)
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Other/text-field-qr.imageset/text-field-qr-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Other/text-field-qr.imageset/text-field-qr-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Other/text-field-qr.imageset/text-field-qr-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-error.imageset/additional-info-error-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-error.imageset/additional-info-error-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-error.imageset/additional-info-error-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-error.imageset/additional-info-error.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-error.imageset/additional-info-error@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-error.imageset/additional-info-error@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-gift-card.imageset/additional-info-gift-card-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-gift-card.imageset/additional-info-gift-card-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-gift-card.imageset/additional-info-gift-card-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-gift-card.imageset/additional-info-gift-card.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-gift-card.imageset/additional-info-gift-card@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-gift-card.imageset/additional-info-gift-card@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-received.imageset/additional-info-received-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-received.imageset/additional-info-received-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-received.imageset/additional-info-received-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-received.imageset/additional-info-received.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-received.imageset/additional-info-received@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-received.imageset/additional-info-received@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-sent.imageset/additional-info-sent-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-sent.imageset/additional-info-sent-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-sent.imageset/additional-info-sent-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-sent.imageset/additional-info-sent.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-sent.imageset/additional-info-sent@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-sent.imageset/additional-info-sent@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-all.trans.imageset/transaction-all.trans-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-all.trans.imageset/transaction-all.trans-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-all.trans.imageset/transaction-all.trans-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-all.trans.imageset/transaction-all.trans.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-all.trans.imageset/transaction-all.trans@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-all.trans.imageset/transaction-all.trans@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-coinbase.received.imageset/transaction-coinbase.received-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-coinbase.received.imageset/transaction-coinbase.received-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-coinbase.received.imageset/transaction-coinbase.received-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-coinbase.received.imageset/transaction-coinbase.received.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-coinbase.received.imageset/transaction-coinbase.received@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-coinbase.received.imageset/transaction-coinbase.received@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-contact-request-approve.imageset/transaction-contact-request-approve-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-contact-request-approve.imageset/transaction-contact-request-approve-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-contact-request-approve.imageset/transaction-contact-request-approve-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-contact-request-approve.imageset/transaction-contact-request-approve.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-contact-request-approve.imageset/transaction-contact-request-approve@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-contact-request-approve.imageset/transaction-contact-request-approve@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-contact-request-sent.imageset/transaction-contact-request-sent-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-contact-request-sent.imageset/transaction-contact-request-sent-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-contact-request-sent.imageset/transaction-contact-request-sent-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-contact-request-sent.imageset/transaction-contact-request-sent.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-contact-request-sent.imageset/transaction-contact-request-sent@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-contact-request-sent.imageset/transaction-contact-request-sent@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-convert.imageset/transaction-convert-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-convert.imageset/transaction-convert-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-convert.imageset/transaction-convert-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-convert.imageset/transaction-convert.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-convert.imageset/transaction-convert@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-convert.imageset/transaction-convert@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-crowdnode.imageset/transaction-crowdnode-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-crowdnode.imageset/transaction-crowdnode-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-crowdnode.imageset/transaction-crowdnode-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-crowdnode.imageset/transaction-crowdnode.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-crowdnode.imageset/transaction-crowdnode@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-crowdnode.imageset/transaction-crowdnode@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-error.imageset/transaction-error-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-error.imageset/transaction-error-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-error.imageset/transaction-error-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-error.imageset/transaction-error.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-error.imageset/transaction-error@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-error.imageset/transaction-error@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-gift-card.imageset/transaction-gift-card-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-gift-card.imageset/transaction-gift-card-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-gift-card.imageset/transaction-gift-card-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-gift-card.imageset/transaction-gift-card.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-gift-card.imageset/transaction-gift-card@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-gift-card.imageset/transaction-gift-card@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-internal-transfer.imageset/transaction-internal-transfer-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-internal-transfer.imageset/transaction-internal-transfer-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-internal-transfer.imageset/transaction-internal-transfer-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-internal-transfer.imageset/transaction-internal-transfer.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-internal-transfer.imageset/transaction-internal-transfer@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-internal-transfer.imageset/transaction-internal-transfer@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-mining.imageset/transaction-mining-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-mining.imageset/transaction-mining-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-mining.imageset/transaction-mining-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-mining.imageset/transaction-mining.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-mining.imageset/transaction-mining@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-mining.imageset/transaction-mining@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-mixing.imageset/transaction-mixing-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-mixing.imageset/transaction-mixing-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-mixing.imageset/transaction-mixing-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-mixing.imageset/transaction-mixing.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-mixing.imageset/transaction-mixing@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-mixing.imageset/transaction-mixing@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-received.imageset/transaction-received-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-received.imageset/transaction-received-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-received.imageset/transaction-received-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-received.imageset/transaction-received.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-received.imageset/transaction-received@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-received.imageset/transaction-received@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-sent.imageset/transaction-sent-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-sent.imageset/transaction-sent-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-sent.imageset/transaction-sent-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-sent.imageset/transaction-sent.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-sent.imageset/transaction-sent@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-sent.imageset/transaction-sent@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-uphold.received.imageset/transaction-uphold.received-dark.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-uphold.received.imageset/transaction-uphold.received-dark@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-uphold.received.imageset/transaction-uphold.received-dark@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-uphold.received.imageset/transaction-uphold.received.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-uphold.received.imageset/transaction-uphold.received@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-uphold.received.imageset/transaction-uphold.received@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/arrow-down.imageset/arrow-down.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/arrow-down.imageset/arrow-down@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/arrow-down.imageset/arrow-down@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/diagonal-up-down.imageset/diagonal-up-down.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/diagonal-up-down.imageset/diagonal-up-down@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/diagonal-up-down.imageset/diagonal-up-down@3x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/stopwatch.imageset/stopwatch.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/stopwatch.imageset/stopwatch@2x.png is excluded by !**/*.png
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/stopwatch.imageset/stopwatch@3x.png is excluded by !**/*.png
📒 Files selected for processing (42)
  • Sources/DashUIKit/Components/CoinSelector.swift
  • Sources/DashUIKit/Components/ConverterCard/ConverterArrowBadge.swift
  • Sources/DashUIKit/Components/ConverterCard/ConverterCard.swift
  • Sources/DashUIKit/Components/ConverterCard/ConverterCardItem.swift
  • Sources/DashUIKit/Components/ConverterCard/ConverterCardRow.swift
  • Sources/DashUIKit/Components/EnterAmount/CurrencyOption.swift
  • Sources/DashUIKit/Components/EnterAmount/DashBalanceView.swift
  • Sources/DashUIKit/Components/EnterAmount/DashPickerView.swift
  • Sources/DashUIKit/Components/EnterAmount/DualSwapAmountView.swift
  • Sources/DashUIKit/Components/EnterAmount/EnterAmountView.swift
  • Sources/DashUIKit/Components/EnterAmount/SwapAmountView.swift
  • Sources/DashUIKit/Components/NumericKeyboardView.swift
  • Sources/DashUIKit/Components/ReceiveEstimateView.swift
  • Sources/DashUIKit/Components/TopIntro/TopIntroView.swift
  • Sources/DashUIKit/Components/Transaction/TransactionView.swift
  • Sources/DashUIKit/Foundation/DashTextStyle.swift
  • Sources/DashUIKit/Foundation/Font+DashUI.swift
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Other/text-field-qr.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-error.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-gift-card.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-received.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/AdditionalInfo/additional-info-sent.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-all.trans.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-coinbase.received.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-contact-request-approve.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-contact-request-sent.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-convert.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-crowdnode.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-error.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-gift-card.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-internal-transfer.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-mining.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-mixing.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-received.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-sent.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/Transactions/Preview/transaction-uphold.received.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/arrow-down.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/diagonal-up-down.imageset/Contents.json
  • Sources/DashUIKit/Resources/Media.xcassets/Icons & Illustrations/stopwatch.imageset/Contents.json

Comment thread Sources/DashUIKit/Components/EnterAmount/SwapAmountView.swift
Comment thread Sources/DashUIKit/Components/EnterAmount/SwapAmountView.swift
- guard the delayed scale/offset animation callbacks with a generation token so
  a rapid re-toggle of isPrimaryLarge cannot let stale updates run after the
  newer state (visible jump)
- reword dashPasteContextMenu doc to match behavior (it invokes onPaste on
  long-press; the clipboard check is the caller's responsibility)
Lets a row qualify its amount with a short status — the wallet shows "Locked"
on a coinbase reward that has not matured yet. Rendered in the warning tone
immediately before the amount, mirroring the row it replaces.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@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: 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 `@CLAUDE.md`:
- Line 34: Update the fenced directory listing in CLAUDE.md by adding a language
identifier, preferably text, to its opening fence so it satisfies markdownlint
MD040 while preserving the listing content.

In `@docs/amount-and-currency.md`:
- Around line 40-60: Update the EnterAmountView example’s secondaryAmount from
"$ 150.00" to the symbol-free "150.00", and clarify the surrounding
documentation that amount strings contain host-formatted numeric values without
currency symbols because secondaryCurrency supplies the fiat symbol.

In `@docs/feedback.md`:
- Around line 23-29: Update the ToastStyle documentation in docs/feedback.md to
include the .noInternet style and identify its toast-no-wifi asset mapping,
while preserving the existing .loading LoadingSpinner description and
placeholder-assets note.

In `@docs/foundation.md`:
- Around line 63-82: Add the missing caption1Medium entry to the Available
styles table, documenting the token exposed by both Font.dash and DashTextStyle
with its exact size, medium weight, and line-height values from the
implementation.

In `@docs/navigation-and-containers.md`:
- Around line 40-63: Update the fillsHeight: true guidance in the BottomSheet
documentation to explicitly qualify the presentation-detent recommendation
(.large, .medium, and .height) as iOS 16+. Keep the existing iOS 14
compatibility statement and the fillsHeight: false guidance unchanged.

In `@docs/README.md`:
- Around line 3-26: Update the docs/README.md component catalog to include
ReceiveEstimateView, ConverterCard, ConverterCardItem, ConverterCardRow,
ConverterArrowBadge, TopIntroView, and TransactionView. Add them to appropriate
existing sections or create linked documentation entries, and ensure the page
list and alphabetical index reflect every newly introduced public component.
🪄 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: 1eadf61c-54d3-428f-a5f9-63fa2a36e4cb

📥 Commits

Reviewing files that changed from the base of the PR and between e85188a and 72f56c2.

📒 Files selected for processing (11)
  • CLAUDE.md
  • Sources/DashUIKit/Components/EnterAmount/SwapAmountView.swift
  • Sources/DashUIKit/Components/Transaction/TransactionView.swift
  • docs/README.md
  • docs/amount-and-currency.md
  • docs/buttons-and-inputs.md
  • docs/feedback.md
  • docs/foundation.md
  • docs/lists-and-rows.md
  • docs/navigation-and-containers.md
  • docs/utilities.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • Sources/DashUIKit/Components/Transaction/TransactionView.swift
  • Sources/DashUIKit/Components/EnterAmount/SwapAmountView.swift

Comment thread CLAUDE.md Outdated
Comment thread docs/amount-and-currency.md
Comment thread docs/feedback.md Outdated
Comment thread docs/foundation.md
Comment thread docs/navigation-and-containers.md
Comment thread docs/README.md
Adds a test target and moves NumericKeyboardLocaleSupportTests here from the
wallet, where it could no longer compile: the type it exercises lives in this
package and is internal to it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@ross-dash ross-dash left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Looks good from the design side

@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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/lists-and-rows.md (1)

32-33: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use Rectangle() in the contentShape example. docs/lists-and-rows.md:32-33 should match the package’s iOS 14 target; .contentShape(.rect) is too new for copy-paste, while contentShape(Rectangle()) works on the supported deployment target.

🤖 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 `@docs/lists-and-rows.md` around lines 32 - 33, Update the contentShape example
in the lists-and-rows documentation to use Rectangle() instead of the newer
.rect shape syntax, preserving the surrounding Button tappable-area guidance.
🤖 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.

Outside diff comments:
In `@docs/lists-and-rows.md`:
- Around line 32-33: Update the contentShape example in the lists-and-rows
documentation to use Rectangle() instead of the newer .rect shape syntax,
preserving the surrounding Button tappable-area guidance.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c34986f6-6f69-49f1-93b3-fed3144048e2

📥 Commits

Reviewing files that changed from the base of the PR and between 72f56c2 and 5ba40f9.

📒 Files selected for processing (9)
  • CLAUDE.md
  • Package.swift
  • Tests/DashUIKitTests/NumericKeyboardLocaleSupportTests.swift
  • docs/README.md
  • docs/amount-and-currency.md
  • docs/feedback.md
  • docs/foundation.md
  • docs/lists-and-rows.md
  • docs/navigation-and-containers.md
🚧 Files skipped from review as they are similar to previous changes (4)
  • docs/feedback.md
  • docs/foundation.md
  • docs/navigation-and-containers.md
  • docs/amount-and-currency.md

@romchornyi romchornyi merged commit 046f087 into master Jul 15, 2026
3 checks passed
@romchornyi romchornyi deleted the import/final branch July 15, 2026 07:20
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.

4 participants